summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitya Selivanov <automainint@guattari.tech>2024-07-14 21:12:37 +0200
committerMitya Selivanov <automainint@guattari.tech>2024-07-14 21:12:37 +0200
commit30740ca4131d1f574718262451b4410207dc8d4e (patch)
treefc88b16a216079397ad85b9c6b1a1c1c5712a814
parent5e3c99bb1cf1d03ea006300121265571f5008fd2 (diff)
downloadsaw-30740ca4131d1f574718262451b4410207dc8d4e.zip
Reworking the build system
-rw-r--r--.clang-format65
-rw-r--r--.gitignore3
-rw-r--r--LICENSE2
-rw-r--r--TODO96
-rwxr-xr-xbuild_and_test.sh258
-rw-r--r--compile_flags.txt2
-rw-r--r--fonts/OFL.txt (renamed from source/saw/fonts/OFL.txt)0
-rw-r--r--fonts/domitian_roman.ttf (renamed from source/saw/fonts/domitian_roman.ttf)bin198512 -> 198512 bytes
-rw-r--r--fonts/font_awesome_6_free_solid_900.ttf (renamed from source/saw/fonts/font_awesome_6_free_solid_900.ttf)bin411192 -> 411192 bytes
-rw-r--r--kit/_lib.c (renamed from source/kit/_lib.c)0
-rw-r--r--kit/allocator.c (renamed from source/kit/allocator.c)0
-rw-r--r--kit/allocator.h (renamed from source/kit/allocator.h)0
-rw-r--r--kit/array_ref.c (renamed from source/kit/array_ref.c)0
-rw-r--r--kit/array_ref.h (renamed from source/kit/array_ref.h)0
-rw-r--r--kit/astar.h (renamed from source/kit/astar.h)167
-rw-r--r--kit/async_function.h (renamed from source/kit/async_function.h)8
-rw-r--r--kit/atomic.h (renamed from source/kit/atomic.h)0
-rw-r--r--kit/atomic.win32.c (renamed from source/kit/atomic.win32.c)0
-rw-r--r--kit/bigint.h (renamed from source/kit/bigint.h)36
-rw-r--r--kit/dynamic_array.c (renamed from source/kit/dynamic_array.c)0
-rw-r--r--kit/dynamic_array.h (renamed from source/kit/dynamic_array.h)0
-rw-r--r--kit/file.c (renamed from source/kit/file.c)0
-rw-r--r--kit/file.h (renamed from source/kit/file.h)0
-rw-r--r--kit/http1.h (renamed from source/kit/http1.h)8
-rw-r--r--kit/input_buffer.c (renamed from source/kit/input_buffer.c)4
-rw-r--r--kit/input_buffer.h (renamed from source/kit/input_buffer.h)11
-rw-r--r--kit/input_stream.c (renamed from source/kit/input_stream.c)0
-rw-r--r--kit/input_stream.h (renamed from source/kit/input_stream.h)6
-rw-r--r--kit/lower_bound.h (renamed from source/kit/lower_bound.h)0
-rw-r--r--kit/math.h (renamed from source/kit/math.h)0
-rw-r--r--kit/mersenne_twister_64.c (renamed from source/kit/mersenne_twister_64.c)0
-rw-r--r--kit/mersenne_twister_64.h (renamed from source/kit/mersenne_twister_64.h)0
-rw-r--r--kit/move_back.h (renamed from source/kit/move_back.h)0
-rw-r--r--kit/parse.c (renamed from source/kit/parse.c)0
-rw-r--r--kit/parse.h (renamed from source/kit/parse.h)0
-rw-r--r--kit/print.c (renamed from source/kit/print.c)0
-rw-r--r--kit/print.h (renamed from source/kit/print.h)0
-rw-r--r--kit/process.h (renamed from source/kit/process.h)0
-rw-r--r--kit/process.posix.c (renamed from source/kit/process.posix.c)4
-rw-r--r--kit/process.win32.c (renamed from source/kit/process.win32.c)0
-rw-r--r--kit/secure_random.c (renamed from source/kit/secure_random.c)2
-rw-r--r--kit/secure_random.h (renamed from source/kit/secure_random.h)1
-rw-r--r--kit/sha256.c (renamed from source/kit/sha256.c)0
-rw-r--r--kit/sha256.h (renamed from source/kit/sha256.h)0
-rw-r--r--kit/shared_memory.h (renamed from source/kit/shared_memory.h)0
-rw-r--r--kit/shared_memory.posix.c (renamed from source/kit/shared_memory.posix.c)0
-rw-r--r--kit/shared_memory.win32.c (renamed from source/kit/shared_memory.win32.c)6
-rw-r--r--kit/shared_mutex.h (renamed from source/kit/shared_mutex.h)0
-rw-r--r--kit/sockets.h (renamed from source/kit/sockets.h)0
-rw-r--r--kit/status.h (renamed from source/kit/status.h)0
-rw-r--r--kit/string_builder.h (renamed from source/kit/string_builder.h)0
-rw-r--r--kit/string_ref.h (renamed from source/kit/string_ref.h)0
-rw-r--r--kit/test.h (renamed from source/kit/test.h)45
-rw-r--r--kit/threads.h (renamed from source/kit/threads.h)3
-rw-r--r--kit/threads.posix.c (renamed from source/kit/threads.posix.c)0
-rw-r--r--kit/threads.win32.c (renamed from source/kit/threads.win32.c)37
-rw-r--r--kit/time.h (renamed from source/kit/time.h)0
-rw-r--r--kit/types.h (renamed from source/kit/types.h)0
-rw-r--r--kit/unival.c (renamed from source/kit/unival.c)0
-rw-r--r--kit/unival.h (renamed from source/kit/unival.h)0
-rw-r--r--kit/utf8.h (renamed from source/kit/utf8.h)0
-rw-r--r--kit/xml.c (renamed from source/kit/xml.c)22
-rw-r--r--kit/xml.h (renamed from source/kit/xml.h)0
-rw-r--r--miniaudio/LICENSE (renamed from source/miniaudio/LICENSE)0
-rw-r--r--miniaudio/miniaudio.h (renamed from source/miniaudio/miniaudio.h)0
-rw-r--r--nanovg/LICENSE (renamed from source/nanovg/LICENSE)0
-rw-r--r--nanovg/fontstash.h (renamed from source/nanovg/fontstash.h)0
-rw-r--r--nanovg/nanovg.c (renamed from source/nanovg/nanovg.c)0
-rw-r--r--nanovg/nanovg.h (renamed from source/nanovg/nanovg.h)0
-rw-r--r--nanovg/nanovg_gl.c (renamed from source/nanovg/nanovg_gl.c)0
-rw-r--r--nanovg/nanovg_gl.h (renamed from source/nanovg/nanovg_gl.h)0
-rw-r--r--saw.c (renamed from source/saw/main.c)2669
-rw-r--r--sokol/LICENSE (renamed from source/sokol/LICENSE)0
-rw-r--r--sokol/sokol_app.h (renamed from source/sokol/sokol_app.h)0
-rw-r--r--source/kit/LICENSE30
-rw-r--r--source/kit/defer.h39
-rw-r--r--source/kit/miniz/miniz.c692
-rw-r--r--source/kit/miniz/miniz.h658
-rw-r--r--source/kit/miniz/miniz_common.h122
-rw-r--r--source/kit/miniz/miniz_tdef.c1792
-rw-r--r--source/kit/miniz/miniz_tdef.h271
-rw-r--r--source/kit/miniz/miniz_tinfl.c818
-rw-r--r--source/kit/miniz/miniz_tinfl.h218
-rw-r--r--source/kit/miniz/miniz_zip.c5473
-rw-r--r--source/kit/miniz/miniz_zip.h668
-rw-r--r--source/saw/_dep.c46
-rw-r--r--source/saw/_exe.c8
-rwxr-xr-xsource/saw/_gen.c115
-rw-r--r--source/saw/_lib.c5
-rw-r--r--source/saw/fonts.inl.h8638
-rw-r--r--source/tests/_exe.c2
-rw-r--r--source/tests/main.test.c8
-rw-r--r--stb/LICENSE (renamed from source/stb/LICENSE)0
-rw-r--r--stb/stb_image.h (renamed from source/stb/stb_image.h)0
-rw-r--r--stb/stb_truetype.h (renamed from source/stb/stb_truetype.h)0
95 files changed, 1907 insertions, 21151 deletions
diff --git a/.clang-format b/.clang-format
deleted file mode 100644
index 11fb6f9..0000000
--- a/.clang-format
+++ /dev/null
@@ -1,65 +0,0 @@
-BasedOnStyle: LLVM
-UseTab: Never
-TabWidth: 2
-IndentWidth: 2
-
-Language: Cpp
-Standard: Auto
-
-ColumnLimit: 70
-MaxEmptyLinesToKeep: 1
-SpacesBeforeTrailingComments: 1
-AccessModifierOffset: -2
-PenaltyBreakAssignment: 100
-PenaltyReturnTypeOnItsOwnLine: 200
-
-IndentCaseLabels: true
-IndentExternBlock: NoIndent
-IndentGotoLabels: false
-IndentPPDirectives: AfterHash
-IndentRequires: true
-IndentWrappedFunctionNames: false
-NamespaceIndentation: All
-
-SpaceAfterCStyleCast: true
-SpaceAfterLogicalNot: false
-SpaceAfterTemplateKeyword: true
-SpaceBeforeAssignmentOperators: true
-SpaceBeforeCpp11BracedList: true
-SpaceBeforeCtorInitializerColon: true
-SpaceBeforeInheritanceColon: true
-SpaceBeforeParens: ControlStatements
-SpaceBeforeRangeBasedForLoopColon: true
-SpaceBeforeSquareBrackets: false
-SpaceInEmptyBlock: true
-SpaceInEmptyParentheses: false
-SpacesInAngles: false
-SpacesInCStyleCastParentheses: false
-SpacesInConditionalStatement: false
-SpacesInSquareBrackets: false
-
-AlignAfterOpenBracket: Align
-AlignConsecutiveAssignments: Consecutive
-AlignConsecutiveBitFields: Consecutive
-AlignConsecutiveDeclarations: Consecutive
-AlignEscapedNewlines: Left
-AllowShortLambdasOnASingleLine: All
-AllowShortFunctionsOnASingleLine: Empty
-AllowShortBlocksOnASingleLine: Empty
-AllowShortCaseLabelsOnASingleLine: false
-AllowShortLoopsOnASingleLine: false
-AllowAllArgumentsOnNextLine: true
-AllowAllConstructorInitializersOnNextLine: true
-AllowAllParametersOfDeclarationOnNextLine: true
-AlwaysBreakTemplateDeclarations: Yes
-BinPackArguments: true
-BinPackParameters: true
-BreakBeforeConceptDeclarations: true
-BreakConstructorInitializers: AfterColon
-Cpp11BracedListStyle: false
-EmptyLineBeforeAccessModifier: LogicalBlock
-FixNamespaceComments: false
-PointerAlignment: Right
-ReflowComments: true
-SortIncludes: Never
-SortUsingDeclarations: true
diff --git a/.gitignore b/.gitignore
index 000224f..0ec9e7f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1 @@
-/out_*/
-*.swp
+/build*
diff --git a/LICENSE b/LICENSE
index f50fae2..0ad6be6 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2023-2024 Mitya Selivanov
+Copyright (c) 2023-2024 Mitya Selivanov <guattari.tech>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/TODO b/TODO
deleted file mode 100644
index 66b9e44..0000000
--- a/TODO
+++ /dev/null
@@ -1,96 +0,0 @@
-To-Do list
-
-- Tools
- - Transactional undo and redo
- - Rational bezier curves
- - Biquad filter
- - Fourier transform
- - Parallel computation
- - Module code compilation
-
-- Sound
- - Internal sample rate for time values
- - BPM
- - Volume
- - Simple tonal synth
- - Unisons
- - Wavetables
- - Kick
- - Snare
- - Cymbal
- - EQ
- - Delay
- - Reverb
- - Combs
- - All-passes
- - Compressor
- - Limiter
- - Sample rendering
-
-- UI
- - Panning and scaling
- - Grid size changing
- - Selection and copy-paste
- - Help pop-up
- - Spectrum view
- - Effects stack
- - Catalog
- - Curve view
- - Wave view
- - Matrix view
- - Graph view
- - Module code view
- - File browser
- - Dynamic layout
- - Color theme customization
- - Custom font and localization
-
-
-- Data
- - WAV export
- - Project load and store
- - Automatic serialization
- - Hot loading
- - Plugin module
- - VST3 wrapper
- - LV2 wrapper
- - MIDI export
- - MIDI import
- - Drag & drop sheet files
- - Drag & drop project files
-
-
-Bugs
-
-- Sampler clicking
-
-
-Done
-
-- Build
- - Code setup for dependencies
- - nanovg and miniaudio setup
- - Faster recompilation
- - WebAssembly
-
-- Sound
- - Track looping
- - Buffering
- - Drag & drop audio files
- - Sampler
- - Pythagorean tuning
-
-- UI
- - Piano roll
- - Playback control
- - Text rendering
- - Piano roll panning
- - Track composing
- - Instrument settings
- - Touchscreen support
-
-- Data
- - State load and store
- - WAV import
- - Sample loading
- - Drag & drop in web
diff --git a/build_and_test.sh b/build_and_test.sh
deleted file mode 100755
index 1829a89..0000000
--- a/build_and_test.sh
+++ /dev/null
@@ -1,258 +0,0 @@
-#!/bin/sh
-
-BUILD_TYPE=
-USE_COMPILER=
-DESTINATION=
-EXTRA_OPTIONS=
-EXTRA_LINK_OPTIONS=
-SKIP_TESTS=0
-REBUILD=0
-
-while [ $# -gt 0 ]; do
- case $1 in
- -H|--help)
- echo "Build script for C projects"
- echo ""
- echo "Usage: ./build_and_test.sh [OPTIONS]"
- echo ""
- echo " -H --help - Print this info"
- echo " -t --type - Set build type: debug, release"
- echo " -c --compiler - Set compiler to use: gcc, clang, msvc, emcc"
- echo " -d --destination - Set destination path"
- echo " -o --options - Set additional options for the compiler"
- echo " -l --link - Set additional options for the linker"
- echo " -S --skip-tests - Skip tests"
- echo " -R --rebuild - Rebuild the whole project"
- echo ""
- exit 0
- ;;
- -t|--type)
- BUILD_TYPE=$2
- shift
- shift
- ;;
- -c|--compiler)
- USE_COMPILER="$2"
- shift
- shift
- ;;
- -d|--destination)
- DESTINATION="$2"
- shift
- shift
- ;;
- -o|--options)
- EXTRA_OPTIONS="$2"
- shift
- shift
- ;;
- -l|--link)
- EXTRA_LINK_OPTIONS="$2"
- shift
- shift
- ;;
- -S|--skip-tests)
- SKIP_TESTS=1
- shift
- ;;
- -R|--rebuild)
- REBUILD=1
- shift
- ;;
- *)
- echo "Unknown option $1"
- shift
- ;;
- esac
-done
-
-FOLDER=out_gcc
-OS=Linux
-COMPILE=gcc
-OBJ_POSTFIX=.o
-EXE_POSTFIX=
-FLAGS=
-FLAG_OBJ="-c -o "
-FLAG_EXE="-o "
-LINK_FLAGS="-lm -lX11 -lXi -lXcursor -lGL"
-
-if [ "$USE_COMPILER" = "gcc" ]; then
- FOLDER=out_gcc
- COMPILE=gcc
-elif [ "$USE_COMPILER" = "clang" ]; then
- FOLDER=out_clang
- COMPILE=clang
-elif [ "$USE_COMPILER" = "msvc" ]; then
- FOLDER=out_msvc
- COMPILE=cl.exe
- OBJ_POSTFIX=.obj
- FLAG_OBJ="-c -Fo"
- FLAG_EXE="-Fe"
-elif [ "$USE_COMPILER" = "emcc" ]; then
- FOLDER=out_emcc
- COMPILE=emcc
- EXE_POSTFIX=.js
- LINK_FLAGS="-sFULL_ES3"
-elif [ "$USE_COMPILER" != "" ]; then
- echo "Unknown C compiler"
- exit 1
-fi
-
-if [ "$DESTINATION" != "" ]; then
- FOLDER="$DESTINATION"
-fi
-
-if [ "$USE_COMPILER" != "" ]; then
- if command -v $COMPILE >/dev/null 2>&1; then
- echo "C compiler found"
- else
- echo "C compiler not found"
- exit 1
- fi
-fi
-
-if [ "$COMPILE" != "emcc" ]; then
- case $(uname | tr '[:upper:]' '[:lower:]') in
- *darwin*)
- OS=macOS
- if [ "$USE_COMPILER" = "" ]; then
- if command -v clang >/dev/null 2>&1; then
- echo "C compiler found - Clang"
- COMPILE=clang
- elif command -v gcc >/dev/null 2>&1; then
- echo "C compiler found - GCC"
- else
- echo "C compiler not found"
- exit 1
- fi
- fi
- ;;
- *msys*|*cygwin*|*mingw*|*nt*|*win*)
- OS=Windows
- EXE_POSTFIX=.exe
- if [ "$USE_COMPILER" = "" ]; then
- if command -v cl.exe >/dev/null 2>&1; then
- echo "C compiler found - MSVC"
- COMPILE=cl.exe
- OBJ_POSTFIX=.obj
- FLAG_OBJ="-c -Fo"
- FLAG_EXE="-Fe"
- elif command -v gcc >/dev/null 2>&1; then
- echo "C compiler found - GCC"
- elif command -v clang >/dev/null 2>&1; then
- echo "C compiler found - Clang"
- COMPILE=clang
- else
- echo "C compiler not found"
- exit 1
- fi
- fi
- if [ "$COMPILE" = "cl.exe" ]; then
- LINK_FLAGS="Shlwapi.lib Advapi32.lib"
- else
- LINK_FLAGS="-lShlwapi -lAdvapi32"
- fi
- ;;
- *)
- if [ "$USE_COMPILER" = "" ]; then
- if command -v gcc >/dev/null 2>&1; then
- echo "C compiler found - GCC"
- elif command -v clang >/dev/null 2>&1; then
- echo "C compiler found - Clang"
- COMPILE=clang
- else
- echo "C compiler not found"
- exit 1
- fi
- fi
- ;;
- esac
-fi
-
-if [ "$COMPILE" = "gcc" ] || [ "$COMPILE" = "emcc" ]; then
- if [ "$BUILD_TYPE" = "release" ]; then
- FLAGS="-O3 -DNDEBUG"
- elif [ "$COMPILE" = "gcc" ] && [ "$OS" != "Windows" ]; then
- FLAGS="-O0 -fsanitize=undefined,address,leak"
- elif [ "$OS" != "Windows" ] && [ "$COMPILE" != "emcc" ]; then
- FLAGS="-O0 -fsanitize=undefined,address"
- else
- FLAGS="-O0"
- fi
-elif [ "$COMPILE" = "clang" ]; then
- if [ "$BUILD_TYPE" = "release" ]; then
- FLAGS="-O3 -DNDEBUG"
- else
- FLAGS="-O0"
- fi
-else
- if [ "$BUILD_TYPE" = "release" ]; then
- FLAGS="-O2 -DNDEBUG"
- else
- FLAGS="-Od"
- fi
-fi
-
-if [ "$EXTRA_OPTIONS" != "" ]; then
- FLAGS="$EXTRA_OPTIONS $FLAGS"
-fi
-
-if [ "$EXTRA_LINK_OPTIONS" != "" ]; then
- LINK_FLAGS="$EXTRA_LINK_OPTIONS $LINK_FLAGS"
-fi
-
-if [ ! -d "$FOLDER" ]; then
- mkdir "$FOLDER"
-fi
-
-echo ""
-echo "Compiler options: $FLAGS"
-echo "Link options: $LINK_FLAGS"
-echo ""
-
-if [ $REBUILD -ne 0 ] || \
- [ ! -f "$FOLDER/_dep${OBJ_POSTFIX}" ] || \
- [ "source/saw/_dep.c" -nt "$FOLDER/_dep${OBJ_POSTFIX}" ]; then
- echo "Rebuild dependencies"
- $COMPILE ${FLAGS} \
- ${FLAG_OBJ}"$FOLDER/_dep${OBJ_POSTFIX}" \
- "source/saw/_dep.c"
- if [ $? -ne 0 ]; then
- exit 1
- fi
-fi
-
-echo "Build saw"
-$COMPILE ${FLAGS} \
- ${FLAG_EXE}"$FOLDER/saw${EXE_POSTFIX}" \
- "$FOLDER/_dep${OBJ_POSTFIX}" \
- "source/saw/_exe.c" \
- ${LINK_FLAGS}
-if [ $? -ne 0 ]; then
- exit 1
-fi
-
-if [ $SKIP_TESTS -ne 0 ] || [ "$COMPILE" = "emcc" ]; then
- exit 0
-fi
-
-echo "Build test suite"
-$COMPILE $FLAGS \
- $FLAG_EXE"$FOLDER/test_suite$EXE_POSTFIX" \
- "source/tests/_exe.c" \
- $LINK_FLAGS
-if [ $? -ne 0 ]; then
- exit 1
-fi
-
-echo "Run tests"
-echo ""
-
-STATUS=0
-
-$FOLDER/test_suite
-if [ $? -ne 0 ]; then
- STATUS=1
-fi
-
-exit $STATUS
diff --git a/compile_flags.txt b/compile_flags.txt
index b2644d9..1c01682 100644
--- a/compile_flags.txt
+++ b/compile_flags.txt
@@ -1 +1 @@
--Wall -Wextra -Werror -Isource
+-Wall -Wextra -Werror -pedantic
diff --git a/source/saw/fonts/OFL.txt b/fonts/OFL.txt
index 0ea241c..0ea241c 100644
--- a/source/saw/fonts/OFL.txt
+++ b/fonts/OFL.txt
diff --git a/source/saw/fonts/domitian_roman.ttf b/fonts/domitian_roman.ttf
index 01c0ee6..01c0ee6 100644
--- a/source/saw/fonts/domitian_roman.ttf
+++ b/fonts/domitian_roman.ttf
Binary files differ
diff --git a/source/saw/fonts/font_awesome_6_free_solid_900.ttf b/fonts/font_awesome_6_free_solid_900.ttf
index d749e87..d749e87 100644
--- a/source/saw/fonts/font_awesome_6_free_solid_900.ttf
+++ b/fonts/font_awesome_6_free_solid_900.ttf
Binary files differ
diff --git a/source/kit/_lib.c b/kit/_lib.c
index 0f7cc19..0f7cc19 100644
--- a/source/kit/_lib.c
+++ b/kit/_lib.c
diff --git a/source/kit/allocator.c b/kit/allocator.c
index 9fd7bad..9fd7bad 100644
--- a/source/kit/allocator.c
+++ b/kit/allocator.c
diff --git a/source/kit/allocator.h b/kit/allocator.h
index 97e453e..97e453e 100644
--- a/source/kit/allocator.h
+++ b/kit/allocator.h
diff --git a/source/kit/array_ref.c b/kit/array_ref.c
index a9df2c4..a9df2c4 100644
--- a/source/kit/array_ref.c
+++ b/kit/array_ref.c
diff --git a/source/kit/array_ref.h b/kit/array_ref.h
index 3a7244e..3a7244e 100644
--- a/source/kit/array_ref.h
+++ b/kit/array_ref.h
diff --git a/source/kit/astar.h b/kit/astar.h
index b4a5909..b76ef67 100644
--- a/source/kit/astar.h
+++ b/kit/astar.h
@@ -10,8 +10,8 @@
// - Sight: when two nodes are in direct sight of each other, skip
// nodes between them (Theta*).
-#ifndef KIT_ASTAR_INL_H
-#define KIT_ASTAR_INL_H
+#ifndef KIT_ASTAR_H
+#define KIT_ASTAR_H
#include "types.h"
#include "status.h"
@@ -20,10 +20,6 @@
#include <stddef.h>
#include <string.h>
-#ifdef __cplusplus
-extern "C" {
-#endif
-
enum {
ASTAR_PROGRESS = 0,
ASTAR_SUCCESS,
@@ -37,28 +33,28 @@ typedef struct {
b8 skip;
i64 neighbor;
i64 distance;
-} astar_link_t;
+} Astar_Link;
typedef struct {
i64 id;
i64 previous;
- i64 exact_source_to_node;
- i64 estimated_source_to_destination;
-} astar_node_t;
+ i64 exact_distance;
+ i64 estimate;
+} Astar_Node;
typedef struct {
- i64 capacity;
- i64 size;
- astar_node_t *values;
-} astar_set_t;
+ i64 capacity;
+ i64 size;
+ Astar_Node *values;
+} Astar_Set;
typedef struct {
- astar_set_t open;
- astar_set_t closed;
- void *user_data;
- i64 source;
- i64 destination;
-} astar_state_t;
+ Astar_Set open;
+ Astar_Set closed;
+ void * user_data;
+ i64 source;
+ i64 destination;
+} Astar_State;
#ifdef __GNUC__
# pragma GCC diagnostic push
@@ -68,11 +64,25 @@ typedef struct {
# pragma GCC optimize("O3")
#endif
-static s32 astar_init(astar_state_t *state, astar_set_t open,
- astar_set_t closed, void *user_data, i64 source,
- i64 destination) {
- assert(state != NULL && open.capacity > 0 && open.values != NULL &&
- closed.capacity > 0 && closed.values != NULL);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+static s32 astar_init(
+ Astar_State *state,
+ Astar_Set open,
+ Astar_Set closed,
+ void * user_data,
+ i64 source,
+ i64 destination
+) {
+ assert(
+ state != NULL &&
+ open.capacity > 0 &&
+ open.values != NULL &&
+ closed.capacity > 0 &&
+ closed.values != NULL
+ );
if (state == NULL)
return KIT_ERROR_INVALID_ARGUMENT;
@@ -88,11 +98,11 @@ static s32 astar_init(astar_state_t *state, astar_set_t open,
if (state->open.capacity <= 0)
return KIT_ERROR_INVALID_ARGUMENT;
- state->open.values[0] = (astar_node_t) {
- .id = source,
- .previous = -1,
- .exact_source_to_node = 0,
- .estimated_source_to_destination = -1,
+ state->open.values[0] = (Astar_Node) {
+ .id = source,
+ .previous = -1,
+ .exact_distance = 0,
+ .estimate = 0x7fffffffffffffffll,
};
state->open.size = 1;
@@ -101,7 +111,7 @@ static s32 astar_init(astar_state_t *state, astar_set_t open,
return KIT_OK;
}
-static s32 astar_path(astar_state_t *state, i64 *size, i64 *path) {
+static s32 astar_path(Astar_State *state, i64 *size, i64 *path) {
assert(state != NULL && size != NULL);
if (state == NULL || size == NULL)
@@ -148,15 +158,15 @@ static s32 astar_path(astar_state_t *state, i64 *size, i64 *path) {
return KIT_OK;
}
+#ifdef __cplusplus
+}
+#endif
+
#ifdef __GNUC__
# pragma GCC pop_options
# pragma GCC diagnostic pop
#endif
-#ifdef __cplusplus
-}
-#endif
-
#endif
// ================================================================
@@ -167,23 +177,20 @@ static s32 astar_path(astar_state_t *state, i64 *size, i64 *path) {
#ifdef ASTAR_TEMPLATE
-#ifdef __cplusplus
-extern "C" {
-#endif
-
#ifndef ASTAR_SUFFIX
# define ASTAR_SUFFIX
#endif
#ifndef ASTAR_NEIGHBOR
# define ASTAR_NEIGHBOR(user_data_, node_, index_) \
- (astar_link_t) { \
+ (Astar_Link) { \
.stop = 1, \
}
#endif
#ifndef ASTAR_HEURISTIC
-# define ASTAR_HEURISTIC(user_data_, node_0_, node_2_) (-1)
+# define ASTAR_HEURISTIC(user_data_, node_0_, node_2_) \
+ 0x7fffffffffffffffll
#endif
#ifdef __GNUC__
@@ -198,7 +205,11 @@ extern "C" {
#define CAT2_(x, y) CAT1_(x, y)
#define NAME_(x) CAT2_(x, ASTAR_SUFFIX)
-static s32 NAME_(astar_iteration)(astar_state_t *state) {
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+static s32 NAME_(astar_iteration)(Astar_State *state) {
assert(state != NULL);
if (state == NULL)
@@ -212,18 +223,15 @@ static s32 NAME_(astar_iteration)(astar_state_t *state) {
// Find a node in the open set that is closest to the destination
//
- astar_node_t nearest_node;
+ Astar_Node nearest_node;
{
i64 index_in_open = 0;
for (i64 i = 1; i < state->open.size; i++)
- if (state->open.values[i].estimated_source_to_destination <
- state->open.values[index_in_open]
- .estimated_source_to_destination)
+ if (state->open.values[i].estimate < state->open.values[index_in_open].estimate)
index_in_open = i;
nearest_node = state->open.values[index_in_open];
if (index_in_open != state->open.size - 1)
- state->open.values[index_in_open] =
- state->open.values[state->open.size - 1];
+ state->open.values[index_in_open] = state->open.values[state->open.size - 1];
--state->open.size;
}
@@ -232,7 +240,7 @@ static s32 NAME_(astar_iteration)(astar_state_t *state) {
if (nearest_node.id == state->destination) {
if (state->closed.size + 1 > state->closed.capacity) {
// Restore the state
- state->open.values[state->open.size - 1] = nearest_node;
+ state->open.values[state->open.size] = nearest_node;
++state->open.size;
return ASTAR_OUT_OF_MEMORY;
@@ -253,10 +261,8 @@ static s32 NAME_(astar_iteration)(astar_state_t *state) {
// Get a link to the next neighbor node
//
(void) state->user_data;
- (void) nearest_node.id;
(void) k;
- astar_link_t link = ASTAR_NEIGHBOR(state->user_data,
- nearest_node.id, k);
+ Astar_Link link = ASTAR_NEIGHBOR(state->user_data, nearest_node.id, k);
// If there is no more neighbors, break the loop
if (link.stop)
@@ -265,32 +271,24 @@ static s32 NAME_(astar_iteration)(astar_state_t *state) {
if (link.skip)
continue;
- astar_node_t neighbor_node = {
- .id = link.neighbor,
- .previous = nearest_node.id,
- .exact_source_to_node = nearest_node.exact_source_to_node +
- link.distance,
- .estimated_source_to_destination = -1,
- };
-
// Calculate distance estimations
//
(void) state->user_data;
- (void) neighbor_node.id;
(void) state->destination;
- i64 estimated_node_to_destination = ASTAR_HEURISTIC(
- state->user_data, neighbor_node.id, state->destination);
-
- neighbor_node.estimated_source_to_destination =
- neighbor_node.exact_source_to_node +
- estimated_node_to_destination;
+
+ Astar_Node neighbor_node = {
+ .id = link.neighbor,
+ .previous = nearest_node.id,
+ .exact_distance = nearest_node.exact_distance + link.distance,
+ .estimate = ASTAR_HEURISTIC(state->user_data, link.neighbor, state->destination),
+ };
// Check if we reached the destination
//
if (neighbor_node.id == state->destination) {
if (state->closed.size + 2 > state->closed.capacity) {
// Restore the state
- state->open.values[state->open.size - 1] = nearest_node;
+ state->open.values[state->open.size] = nearest_node;
++state->open.size;
return ASTAR_OUT_OF_MEMORY;
@@ -320,13 +318,14 @@ static s32 NAME_(astar_iteration)(astar_state_t *state) {
break;
}
if (index_in_closed != -1) {
- if (state->closed.values[index_in_closed]
- .exact_source_to_node <
- neighbor_node.exact_source_to_node)
- // Skip this node
- continue;
- // Replace the node
- state->closed.values[index_in_closed] = neighbor_node;
+ // Check if this node has a better distance
+ //
+ if (neighbor_node.exact_distance < state->closed.values[index_in_closed].exact_distance)
+ // Replace the node
+ state->closed.values[index_in_closed] = neighbor_node;
+
+ // Skip this node
+ continue;
}
}
@@ -340,20 +339,20 @@ static s32 NAME_(astar_iteration)(astar_state_t *state) {
break;
}
if (index_in_open != -1) {
- // Check if this node has a better estimate
+ // Check if this node has a better distance
//
- if (neighbor_node.estimated_source_to_destination <
- state->open.values[index_in_open]
- .estimated_source_to_destination)
+ if (neighbor_node.exact_distance < state->open.values[index_in_open].exact_distance)
// Replace the node
state->open.values[index_in_open] = neighbor_node;
+
+ // Skip this node
continue;
}
}
if (state->open.size + 1 > state->open.capacity) {
// Restore the state
- state->open.values[state->open.size - 1] = nearest_node;
+ state->open.values[state->open.size] = nearest_node;
++state->open.size;
return ASTAR_OUT_OF_MEMORY;
@@ -384,6 +383,10 @@ static s32 NAME_(astar_iteration)(astar_state_t *state) {
return ASTAR_PROGRESS;
}
+#ifdef __cplusplus
+}
+#endif
+
#undef NAME_
#undef CAT1_
#undef CAT2_
@@ -393,9 +396,5 @@ static s32 NAME_(astar_iteration)(astar_state_t *state) {
# pragma GCC diagnostic pop
#endif
-#ifdef __cplusplus
-}
-#endif
-
#undef ASTAR_TEMPLATE
#endif
diff --git a/source/kit/async_function.h b/kit/async_function.h
index 70a81cd..5460fd6 100644
--- a/source/kit/async_function.h
+++ b/kit/async_function.h
@@ -5,6 +5,12 @@
#include <string.h>
+#ifdef __GNUC__
+#define KIT_FALLTHROUGH __attribute__((fallthrough));
+#else
+#define KIT_FALLTHROUGH
+#endif
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -133,6 +139,7 @@ static void kit_async_function_dispatch(void *promise) {
#define KIT_AF_AWAIT(promise_) \
do { \
+ KIT_FALLTHROUGH \
case KIT_AF_LINE_(): \
if ((promise_)._index != -1) { \
self->_index = KIT_AF_LINE_(); \
@@ -144,6 +151,7 @@ static void kit_async_function_dispatch(void *promise) {
#define KIT_AF_YIELD_AWAIT(promise_) \
do { \
+ KIT_FALLTHROUGH \
case KIT_AF_LINE_(): \
if ((promise_)._index != -1) { \
self->_index = KIT_AF_LINE_(); \
diff --git a/source/kit/atomic.h b/kit/atomic.h
index 8ec7bad..8ec7bad 100644
--- a/source/kit/atomic.h
+++ b/kit/atomic.h
diff --git a/source/kit/atomic.win32.c b/kit/atomic.win32.c
index 791f8fe..791f8fe 100644
--- a/source/kit/atomic.win32.c
+++ b/kit/atomic.win32.c
diff --git a/source/kit/bigint.h b/kit/bigint.h
index 159996a..89610f4 100644
--- a/source/kit/bigint.h
+++ b/kit/bigint.h
@@ -190,7 +190,7 @@ static kit_bigint_t kit_bi_shr_uint(kit_bigint_t x, u32 y) {
return z;
}
-static i8 kit_bi_carry(u32 x, u32 y, i8 carry) {
+static i8 kit_bi_carry(u32 x, u32 y, u8 carry) {
assert(carry == 0 || carry == 1);
return 0xffffffffu - x < y || 0xffffffffu - x - y < carry ? 1 : 0;
}
@@ -199,7 +199,7 @@ static i8 kit_bi_carry(u32 x, u32 y, i8 carry) {
*/
static kit_bigint_t kit_bi_inc(kit_bigint_t x) {
kit_bigint_t z;
- i8 carry = 1;
+ u8 carry = 1;
i64 i;
for (i = 0; i < KIT_BIGINT_SIZE / 4; i++) {
@@ -214,7 +214,7 @@ static kit_bigint_t kit_bi_inc(kit_bigint_t x) {
*/
static kit_bigint_t kit_bi_dec(kit_bigint_t x) {
kit_bigint_t z;
- i8 carry = 0;
+ u8 carry = 0;
i64 i;
for (i = 0; i < KIT_BIGINT_SIZE / 4; i++) {
@@ -229,7 +229,7 @@ static kit_bigint_t kit_bi_dec(kit_bigint_t x) {
*/
static kit_bigint_t kit_bi_add(kit_bigint_t x, kit_bigint_t y) {
kit_bigint_t z;
- i8 carry = 0;
+ u8 carry = 0;
i64 i;
for (i = 0; i < KIT_BIGINT_SIZE / 4; i++) {
@@ -244,7 +244,7 @@ static kit_bigint_t kit_bi_add(kit_bigint_t x, kit_bigint_t y) {
*/
static kit_bigint_t kit_bi_neg(kit_bigint_t x) {
kit_bigint_t y;
- i8 carry = 1;
+ u8 carry = 1;
i64 i;
for (i = 0; i < KIT_BIGINT_SIZE / 4; i++) {
@@ -259,7 +259,7 @@ static kit_bigint_t kit_bi_neg(kit_bigint_t x) {
*/
static kit_bigint_t kit_bi_sub(kit_bigint_t x, kit_bigint_t y) {
kit_bigint_t z;
- i8 carry = 1;
+ u8 carry = 1;
i64 i;
for (i = 0; i < KIT_BIGINT_SIZE / 4; i++) {
@@ -414,7 +414,7 @@ static kit_bigint_t kit_bi_deserialize(u8 *in) {
return out;
}
-static u8 kit_bin_digit(char hex) {
+static u8 kit_bin_digit(c8 hex) {
assert(hex == '0' || hex == '1');
return hex == '1' ? 1 : 0;
}
@@ -433,7 +433,7 @@ static kit_bigint_t kit_bi_from_bin(kit_str_t bin) {
return z;
}
-static u8 kit_dec_digit(char c) {
+static u8 kit_dec_digit(c8 c) {
assert('c' >= '0' && c <= '9');
return c >= '0' && c <= '9' ? (u8) (c - '0') : 0;
}
@@ -452,7 +452,7 @@ static kit_bigint_t kit_bi_from_dec(kit_str_t dec) {
return z;
}
-static u8 kit_hex_digit(char hex) {
+static u8 kit_hex_digit(c8 hex) {
assert((hex >= '0' && hex <= '9') || (hex >= 'a' && hex <= 'f') ||
(hex >= 'A' && hex <= 'F'));
@@ -480,7 +480,7 @@ static kit_bigint_t kit_bi_from_hex(kit_str_t hex) {
return z;
}
-static u8 KIT_BASE32_DIGITS[] = {
+static u8 KIT_BASE32_DIGITS[256] = {
['1'] = 0, ['2'] = 1, ['3'] = 2, ['4'] = 3, ['5'] = 4,
['6'] = 5, ['7'] = 6, ['8'] = 7, ['9'] = 8, ['a'] = 9,
['b'] = 10, ['c'] = 11, ['d'] = 12, ['e'] = 13, ['f'] = 14,
@@ -490,13 +490,10 @@ static u8 KIT_BASE32_DIGITS[] = {
['y'] = 30, ['z'] = 31
};
-static u8 kit_base32_digit(char c) {
- assert(c >= '\0' && c < sizeof KIT_BASE32_DIGITS);
+static u8 kit_base32_digit(c8 c) {
assert(c == '1' || KIT_BASE32_DIGITS[(size_t) (u8) c] != 0);
- return c >= '\0' && c < sizeof KIT_BASE32_DIGITS
- ? KIT_BASE32_DIGITS[(size_t) (u8) c]
- : 0;
+ return KIT_BASE32_DIGITS[(size_t) (u8) c];
}
static kit_bigint_t kit_bi_from_base32(kit_str_t base32) {
@@ -513,7 +510,7 @@ static kit_bigint_t kit_bi_from_base32(kit_str_t base32) {
return z;
}
-static u8 KIT_BASE58_DIGITS[] = {
+static u8 KIT_BASE58_DIGITS[256] = {
['1'] = 0, ['2'] = 1, ['3'] = 2, ['4'] = 3, ['5'] = 4,
['6'] = 5, ['7'] = 6, ['8'] = 7, ['9'] = 8, ['A'] = 9,
['B'] = 10, ['C'] = 11, ['D'] = 12, ['E'] = 13, ['F'] = 14,
@@ -528,13 +525,10 @@ static u8 KIT_BASE58_DIGITS[] = {
['x'] = 55, ['y'] = 56, ['z'] = 57
};
-static u8 kit_base58_digit(char c) {
- assert(c >= '\0' && c < sizeof KIT_BASE58_DIGITS);
+static u8 kit_base58_digit(c8 c) {
assert(c == '1' || KIT_BASE58_DIGITS[(size_t) (u8) c] != 0);
- return c >= '\0' && c < sizeof KIT_BASE58_DIGITS
- ? KIT_BASE58_DIGITS[(size_t) (u8) c]
- : 0;
+ return KIT_BASE58_DIGITS[(size_t) (u8) c];
}
static kit_bigint_t kit_bi_from_base58(kit_str_t base58) {
diff --git a/source/kit/dynamic_array.c b/kit/dynamic_array.c
index ede817b..ede817b 100644
--- a/source/kit/dynamic_array.c
+++ b/kit/dynamic_array.c
diff --git a/source/kit/dynamic_array.h b/kit/dynamic_array.h
index 571f344..571f344 100644
--- a/source/kit/dynamic_array.h
+++ b/kit/dynamic_array.h
diff --git a/source/kit/file.c b/kit/file.c
index 3eafc70..3eafc70 100644
--- a/source/kit/file.c
+++ b/kit/file.c
diff --git a/source/kit/file.h b/kit/file.h
index 12f00a2..12f00a2 100644
--- a/source/kit/file.h
+++ b/kit/file.h
diff --git a/source/kit/http1.h b/kit/http1.h
index 98190ea..0a58f96 100644
--- a/source/kit/http1.h
+++ b/kit/http1.h
@@ -211,8 +211,8 @@ static kit_str_t kit_http1_method_to_str(i32 method) {
{ .size = 5, .values = "TRACE" },
{ .size = 7, .values = "CONNECT" } };
- assert(method >= 0 && method < sizeof methods / sizeof *methods);
- if (method < 0 || method >= sizeof methods / sizeof *methods)
+ assert(method >= 0 && method < (i32) (sizeof methods / sizeof *methods));
+ if (method < 0 || method >= (i32) (sizeof methods / sizeof *methods))
return (kit_str_t) { .size = 0, .values = NULL };
return methods[method];
@@ -235,11 +235,11 @@ static socket_t kit_http1_connect_to_uri(kit_http1_uri_t *uri) {
char host_str[128];
char port_str[128];
- assert(uri->host.size < sizeof host_str);
+ assert(uri->host.size < (i64) sizeof host_str);
memcpy(host_str, uri->host.values, uri->host.size);
host_str[uri->host.size] = '\0';
- assert(uri->port.size < sizeof port_str);
+ assert(uri->port.size < (i64) sizeof port_str);
memcpy(port_str, uri->port.values, uri->port.size);
port_str[uri->port.size] = '\0';
diff --git a/source/kit/input_buffer.c b/kit/input_buffer.c
index 59298c8..1f3e274 100644
--- a/source/kit/input_buffer.c
+++ b/kit/input_buffer.c
@@ -32,7 +32,7 @@ static s32 kit_buf_adjust_(kit_input_buffer_t *buf, i64 size) {
return KIT_OK;
}
-kit_input_buffer_t kit_ib_wrap(is_handle_t upstream,
+kit_input_buffer_t kit_ib_init(is_handle_t upstream,
kit_allocator_t *alloc) {
kit_input_buffer_t buf;
memset(&buf, 0, sizeof buf);
@@ -118,7 +118,7 @@ kit_ib_token_t kit_ib_read(kit_ib_token_t tok, i64 size) {
} else { \
DA_INIT(cache_dynamic, data.size, tok.buffer->data.alloc); \
if (cache_dynamic.size != data.size) { \
- (res_).status |= KIT_ERROR_OUT_OF_MEMORY; \
+ (res_).status |= KIT_ERROR_OUT_OF_MEMORY; \
return (res_); \
} \
memcpy(cache_dynamic.values, data.values, data.size); \
diff --git a/source/kit/input_buffer.h b/kit/input_buffer.h
index 4320ee7..2a490c0 100644
--- a/source/kit/input_buffer.h
+++ b/kit/input_buffer.h
@@ -22,7 +22,7 @@ typedef struct {
typedef b8 (*kit_ib_read_condition_fn)(kit_str_t data, void *context);
-kit_input_buffer_t kit_ib_wrap(kit_is_handle_t upstream,
+kit_input_buffer_t kit_ib_init(kit_is_handle_t upstream,
kit_allocator_t *alloc);
void kit_ib_destroy(kit_input_buffer_t *buf);
@@ -45,12 +45,6 @@ kit_ib_token_t kit_ib_while(kit_ib_token_t buf,
kit_ib_read_condition_fn condition,
void *context);
-#define KIT_IB_SKIP(buf_, proc_, ...) \
- do { \
- kit_ib_token_t temp_buf_ = (buf_); \
- (buf_) = proc_((buf_), __VA_ARGS__); \
- } while (0)
-
#ifdef __cplusplus
}
#endif
@@ -58,7 +52,7 @@ kit_ib_token_t kit_ib_while(kit_ib_token_t buf,
#define input_buffer_t kit_input_buffer_t
#define ib_token_t kit_ib_token_t
#define ib_read_condition_fn kit_ib_read_condition_fn
-#define ib_wrap kit_ib_wrap
+#define ib_init kit_ib_init
#define ib_destroy kit_ib_destroy
#define ib_token kit_ib_token
#define ib_str kit_ib_str
@@ -68,6 +62,5 @@ kit_ib_token_t kit_ib_while(kit_ib_token_t buf,
#define ib_exact kit_ib_exact
#define ib_until kit_ib_until
#define ib_while kit_ib_while
-#define IB_SKIP KIT_IB_SKIP
#endif
diff --git a/source/kit/input_stream.c b/kit/input_stream.c
index 369cf64..369cf64 100644
--- a/source/kit/input_stream.c
+++ b/kit/input_stream.c
diff --git a/source/kit/input_stream.h b/kit/input_stream.h
index 51a7520..3442ee4 100644
--- a/source/kit/input_stream.h
+++ b/kit/input_stream.h
@@ -24,10 +24,6 @@ kit_is_handle_t kit_is_wrap_file(FILE *f, kit_allocator_t *alloc);
void kit_is_destroy(kit_is_handle_t in);
-#define KIT_IS_WRAP_STRING(string) kit_is_wrap_string((string), NULL)
-
-#define KIT_IS_WRAP_FILE(f) kit_is_wrap_file((f), NULL)
-
#define KIT_IS_READ(in, destination) \
(in).read((in).state, (destination))
@@ -40,8 +36,6 @@ void kit_is_destroy(kit_is_handle_t in);
#define is_wrap_string kit_is_wrap_string
#define is_wrap_file kit_is_wrap_file
#define is_destroy kit_is_destroy
-#define IS_WRAP_STRING KIT_IS_WRAP_STRING
-#define IS_WRAP_FILE KIT_IS_WRAP_FILE
#define IS_READ KIT_IS_READ
#endif
diff --git a/source/kit/lower_bound.h b/kit/lower_bound.h
index eb437ed..eb437ed 100644
--- a/source/kit/lower_bound.h
+++ b/kit/lower_bound.h
diff --git a/source/kit/math.h b/kit/math.h
index d7044f1..d7044f1 100644
--- a/source/kit/math.h
+++ b/kit/math.h
diff --git a/source/kit/mersenne_twister_64.c b/kit/mersenne_twister_64.c
index 4032dc9..4032dc9 100644
--- a/source/kit/mersenne_twister_64.c
+++ b/kit/mersenne_twister_64.c
diff --git a/source/kit/mersenne_twister_64.h b/kit/mersenne_twister_64.h
index 2709dd7..2709dd7 100644
--- a/source/kit/mersenne_twister_64.h
+++ b/kit/mersenne_twister_64.h
diff --git a/source/kit/move_back.h b/kit/move_back.h
index 1885f5d..1885f5d 100644
--- a/source/kit/move_back.h
+++ b/kit/move_back.h
diff --git a/source/kit/parse.c b/kit/parse.c
index 042e2d0..042e2d0 100644
--- a/source/kit/parse.c
+++ b/kit/parse.c
diff --git a/source/kit/parse.h b/kit/parse.h
index efb8156..efb8156 100644
--- a/source/kit/parse.h
+++ b/kit/parse.h
diff --git a/source/kit/print.c b/kit/print.c
index 5c98910..5c98910 100644
--- a/source/kit/print.c
+++ b/kit/print.c
diff --git a/source/kit/print.h b/kit/print.h
index 5a64a20..5a64a20 100644
--- a/source/kit/print.h
+++ b/kit/print.h
diff --git a/source/kit/process.h b/kit/process.h
index 8031cc1..8031cc1 100644
--- a/source/kit/process.h
+++ b/kit/process.h
diff --git a/source/kit/process.posix.c b/kit/process.posix.c
index 961f058..d9bec1f 100644
--- a/source/kit/process.posix.c
+++ b/kit/process.posix.c
@@ -25,6 +25,8 @@ static char **kit_init_argv_(kit_process_args_t args, u32 flags) {
if ((flags & KIT_PROCESS_NO_ARGUMENTS) != 0)
return kit_process_argv_null_;
+ (void) args;
+
return NULL;
}
@@ -35,6 +37,8 @@ static char **kit_init_envp_(kit_process_env_t env, u32 flags) {
if ((flags & KIT_PROCESS_NO_ENVIRONMENT) != 0)
return kit_process_env_null_;
+ (void) env;
+
return NULL;
}
diff --git a/source/kit/process.win32.c b/kit/process.win32.c
index ebff7b1..ebff7b1 100644
--- a/source/kit/process.win32.c
+++ b/kit/process.win32.c
diff --git a/source/kit/secure_random.c b/kit/secure_random.c
index 2f53866..2565f6f 100644
--- a/source/kit/secure_random.c
+++ b/kit/secure_random.c
@@ -1,7 +1,5 @@
#include "secure_random.h"
-#include "status.h"
-
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
diff --git a/source/kit/secure_random.h b/kit/secure_random.h
index d09ea56..435fe88 100644
--- a/source/kit/secure_random.h
+++ b/kit/secure_random.h
@@ -2,6 +2,7 @@
#define KIT_SECURE_RANDOM_H
#include "types.h"
+#include "status.h"
#ifdef __cplusplus
extern "C" {
diff --git a/source/kit/sha256.c b/kit/sha256.c
index 3abe972..3abe972 100644
--- a/source/kit/sha256.c
+++ b/kit/sha256.c
diff --git a/source/kit/sha256.h b/kit/sha256.h
index da05385..da05385 100644
--- a/source/kit/sha256.h
+++ b/kit/sha256.h
diff --git a/source/kit/shared_memory.h b/kit/shared_memory.h
index a13ccee..a13ccee 100644
--- a/source/kit/shared_memory.h
+++ b/kit/shared_memory.h
diff --git a/source/kit/shared_memory.posix.c b/kit/shared_memory.posix.c
index fa0db98..fa0db98 100644
--- a/source/kit/shared_memory.posix.c
+++ b/kit/shared_memory.posix.c
diff --git a/source/kit/shared_memory.win32.c b/kit/shared_memory.win32.c
index 61b7317..f1d24d0 100644
--- a/source/kit/shared_memory.win32.c
+++ b/kit/shared_memory.win32.c
@@ -18,7 +18,7 @@ kit_shared_memory_t kit_shared_memory_open(kit_str_t name, i64 size,
assert(size > 0);
assert(name.size > 0);
- assert(name.size + 8 < sizeof buf);
+ assert(name.size + 8 < (i64) sizeof buf);
assert(name.values != NULL);
if (name.size <= 0) {
@@ -26,7 +26,7 @@ kit_shared_memory_t kit_shared_memory_open(kit_str_t name, i64 size,
return mem;
}
- if (name.size + 8 >= sizeof buf) {
+ if (name.size + 8 >= (i64) sizeof buf) {
mem.status = KIT_ERROR_NAME_TOO_LONG;
return mem;
}
@@ -84,6 +84,8 @@ s32 kit_shared_memory_clean(kit_str_t name) {
// Do nothing.
//
+ (void) name;
+
return KIT_OK;
}
#endif
diff --git a/source/kit/shared_mutex.h b/kit/shared_mutex.h
index ad83418..ad83418 100644
--- a/source/kit/shared_mutex.h
+++ b/kit/shared_mutex.h
diff --git a/source/kit/sockets.h b/kit/sockets.h
index 276ecc5..276ecc5 100644
--- a/source/kit/sockets.h
+++ b/kit/sockets.h
diff --git a/source/kit/status.h b/kit/status.h
index 88eb5e0..88eb5e0 100644
--- a/source/kit/status.h
+++ b/kit/status.h
diff --git a/source/kit/string_builder.h b/kit/string_builder.h
index 23eda65..23eda65 100644
--- a/source/kit/string_builder.h
+++ b/kit/string_builder.h
diff --git a/source/kit/string_ref.h b/kit/string_ref.h
index e7ea809..e7ea809 100644
--- a/source/kit/string_ref.h
+++ b/kit/string_ref.h
diff --git a/source/kit/test.h b/kit/test.h
index ca2b7c0..243111e 100644
--- a/source/kit/test.h
+++ b/kit/test.h
@@ -42,36 +42,15 @@
// }
//
// ================================================================
-//
-// The MIT License
-//
-// Copyright (c) 2022-2024 Mitya Selivanov
-//
-// 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.
-//
-// ================================================================
#ifndef KIT_TEST_H
#define KIT_TEST_H
+#ifdef __GNUC__
+# pragma GCC diagnostic ignored "-Wunused-value"
+# pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -293,6 +272,12 @@ int kit_run_benchmarks(int argc, char **argv);
#endif
+// ================================================================
+//
+// Implementation
+//
+// ================================================================
+
#if defined(KIT_TEST_IMPLEMENTATION) && !defined(KIT_TEST_H_IMPL)
#define KIT_TEST_H_IMPL
@@ -420,7 +405,7 @@ static void kit_test_handle_signal(int signum) {
}
static void kit_test_setup_signals() {
- for (int i = 0; i < sizeof kit_signums_ / sizeof *kit_signums_; i++)
+ for (unsigned i = 0; i < sizeof kit_signums_ / sizeof *kit_signums_; i++)
signal(kit_signums_[i], kit_test_handle_signal);
}
@@ -608,7 +593,7 @@ int kit_run_tests(int argc, char **argv) {
if (kit_tests_list.v[i].signal != 0) {
int signum = kit_tests_list.v[i].signal;
if (signum >= 0 &&
- signum < sizeof kit_signames_ / sizeof *kit_signames_ &&
+ signum < (int) (sizeof kit_signames_ / sizeof *kit_signames_) &&
kit_signames_[signum] != NULL) {
no_color || kit_print_color_(kit_light_);
printf("Signal \"%s\" (%d) for \"", kit_signames_[signum],
@@ -793,7 +778,7 @@ void kit_bench_register(char const *name, char const *file,
}
static void kit_bench_setup_signals() {
- for (int i = 0; i < sizeof kit_signums_ / sizeof *kit_signums_; i++)
+ for (unsigned i = 0; i < sizeof kit_signums_ / sizeof *kit_signums_; i++)
signal(kit_signums_[i], kit_test_handle_signal);
}
@@ -1054,7 +1039,7 @@ int kit_run_benchmarks(int argc, char **argv) {
if (bench->signal != 0) {
int signum = bench->signal;
if (signum >= 0 &&
- signum < sizeof kit_signames_ / sizeof *kit_signames_ &&
+ signum < (int) (sizeof kit_signames_ / sizeof *kit_signames_) &&
kit_signames_[signum] != NULL) {
no_color || kit_print_color_(kit_light_);
printf("Signal \"%s\" (%d) for \"", kit_signames_[signum],
diff --git a/source/kit/threads.h b/kit/threads.h
index 8ff46ed..a636e99 100644
--- a/source/kit/threads.h
+++ b/kit/threads.h
@@ -86,16 +86,13 @@ typedef struct {
void *handle;
} thrd_t;
-typedef unsigned long tss_t;
# else
typedef pthread_mutex_t mtx_t;
typedef pthread_cond_t cnd_t;
typedef pthread_once_t once_flag;
typedef pthread_t thrd_t;
-typedef pthread_key_t tss_t;
# endif
-typedef void (*tss_dtor_t)(void *);
typedef int (*thrd_start_t)(void *);
void mtx_destroy(mtx_t *mtx_);
diff --git a/source/kit/threads.posix.c b/kit/threads.posix.c
index 44465a3..44465a3 100644
--- a/source/kit/threads.posix.c
+++ b/kit/threads.posix.c
diff --git a/source/kit/threads.win32.c b/kit/threads.win32.c
index 72f0ba1..ac185f7 100644
--- a/source/kit/threads.win32.c
+++ b/kit/threads.win32.c
@@ -25,9 +25,6 @@ Configuration macro:
Use native WindowsAPI one-time initialization function.
(requires WinVista or later)
Otherwise emulate by mtx_trylock() + *busy loop* for WinXP.
-
- EMULATED_THREADS_TSS_DTOR_SLOTNUM
- Max registerable TSS dtor number.
*/
# if _WIN32_WINNT >= 0x0600
@@ -36,8 +33,6 @@ Configuration macro:
# define EMULATED_THREADS_USE_NATIVE_CALL_ONCE
# endif
# endif
-# define EMULATED_THREADS_TSS_DTOR_SLOTNUM \
- 64 /* see TLS_MINIMUM_AVAILABLE */
/* check configuration */
# if defined(EMULATED_THREADS_USE_NATIVE_CALL_ONCE) && \
@@ -49,8 +44,6 @@ static_assert(sizeof(cnd_t) == sizeof(CONDITION_VARIABLE),
"The size of cnd_t must equal to CONDITION_VARIABLE");
static_assert(sizeof(thrd_t) == sizeof(HANDLE),
"The size of thrd_t must equal to HANDLE");
-static_assert(sizeof(tss_t) == sizeof(DWORD),
- "The size of tss_t must equal to DWORD");
static_assert(sizeof(mtx_t) == sizeof(CRITICAL_SECTION),
"The size of mtx_t must equal to CRITICAL_SECTION");
static_assert(sizeof(once_flag) == sizeof(INIT_ONCE),
@@ -119,36 +112,6 @@ static BOOL CALLBACK impl_call_once_callback(PINIT_ONCE InitOnce,
}
# endif /* ifdef EMULATED_THREADS_USE_NATIVE_CALL_ONCE */
-static struct impl_tss_dtor_entry {
- tss_t key;
- tss_dtor_t dtor;
-} impl_tss_dtor_tbl[EMULATED_THREADS_TSS_DTOR_SLOTNUM];
-
-static int impl_tss_dtor_register(tss_t key, tss_dtor_t dtor) {
- int i;
- for (i = 0; i < EMULATED_THREADS_TSS_DTOR_SLOTNUM; i++) {
- if (!impl_tss_dtor_tbl[i].dtor)
- break;
- }
- if (i == EMULATED_THREADS_TSS_DTOR_SLOTNUM)
- return 1;
- impl_tss_dtor_tbl[i].key = key;
- impl_tss_dtor_tbl[i].dtor = dtor;
- return 0;
-}
-
-static void impl_tss_dtor_invoke(void) {
- int i;
- for (i = 0; i < EMULATED_THREADS_TSS_DTOR_SLOTNUM; i++) {
- if (impl_tss_dtor_tbl[i].dtor) {
- void *val = (void *) (size_t) TlsGetValue(
- impl_tss_dtor_tbl[i].key);
- if (val)
- (impl_tss_dtor_tbl[i].dtor)(val);
- }
- }
-}
-
void call_once(once_flag *flag, void (*func)(void)) {
assert(flag && func);
# ifdef EMULATED_THREADS_USE_NATIVE_CALL_ONCE
diff --git a/source/kit/time.h b/kit/time.h
index c14f8ff..c14f8ff 100644
--- a/source/kit/time.h
+++ b/kit/time.h
diff --git a/source/kit/types.h b/kit/types.h
index bbe8717..bbe8717 100644
--- a/source/kit/types.h
+++ b/kit/types.h
diff --git a/source/kit/unival.c b/kit/unival.c
index 4fed179..4fed179 100644
--- a/source/kit/unival.c
+++ b/kit/unival.c
diff --git a/source/kit/unival.h b/kit/unival.h
index e0362b1..e0362b1 100644
--- a/source/kit/unival.h
+++ b/kit/unival.h
diff --git a/source/kit/utf8.h b/kit/utf8.h
index 3dc6822..3dc6822 100644
--- a/source/kit/utf8.h
+++ b/kit/utf8.h
diff --git a/source/kit/xml.c b/kit/xml.c
index 0d8378c..f61bfc1 100644
--- a/source/kit/xml.c
+++ b/kit/xml.c
@@ -31,7 +31,8 @@ static s32 kit_xml_alloc_and_unescape_(str_builder_t *dst, str_t str,
dst->values[dst->size++] = str.values[i];
else {
i64 n = 1;
- while (i + n < str.size && str.values[i + n] != ';') n++;
+ while (i + n < str.size && str.values[i + n] != ';')
+ n++;
if (i + n >= str.size) {
DA_DESTROY(*dst);
return KIT_PARSING_FAILED;
@@ -127,8 +128,7 @@ static ib_token_t kit_xml_parse_text_(ib_token_t begin,
assert(dst->size == last.size);
if (dst->size != last.size)
- last.status |= KIT_ERROR_OUT_OF_MEMORY
-;
+ last.status |= KIT_ERROR_OUT_OF_MEMORY;
else if (last.size > 0)
memcpy(dst->values, ib_str(last).values, last.size);
@@ -148,8 +148,7 @@ static ib_token_t kit_xml_parse_text_(ib_token_t begin,
assert(dst->size == n + next_text.size);
if (dst->size != n + next_text.size)
- next_text.status |= KIT_ERROR_OUT_OF_MEMORY
- ;
+ next_text.status |= KIT_ERROR_OUT_OF_MEMORY;
else
memcpy(dst->values + n, ib_str(next_text).values,
ib_str(next_text).size);
@@ -248,8 +247,7 @@ static kit_xml_intermediate_t kit_xml_parse_buf_(
assert(tag.properties.size == n + 1);
if (tag.properties.size != n + 1) {
- last.status |= KIT_ERROR_OUT_OF_MEMORY
- ;
+ last.status |= KIT_ERROR_OUT_OF_MEMORY;
DA_DESTROY(tag.properties);
} else {
last.status |= kit_xml_alloc_and_unescape_(
@@ -306,8 +304,7 @@ static kit_xml_intermediate_t kit_xml_parse_buf_(
assert(res.tags.size == n + 1);
if (res.tags.size != n + 1) {
- last.status |= KIT_ERROR_OUT_OF_MEMORY
- ;
+ last.status |= KIT_ERROR_OUT_OF_MEMORY;
xml_destroy(&tag);
} else {
last.status |= kit_xml_alloc_and_unescape_(
@@ -339,7 +336,7 @@ static kit_xml_intermediate_t kit_xml_parse_buf_(
kit_xml_parse_result_t kit_xml_parse(is_handle_t is,
kit_allocator_t *alloc) {
- input_buffer_t ib = ib_wrap(is, alloc);
+ input_buffer_t ib = ib_init(is, alloc);
kit_xml_intermediate_t im = kit_xml_parse_buf_(ib_token(&ib),
alloc);
@@ -381,6 +378,8 @@ kit_xml_text_t kit_xml_print(kit_xml_t *xml, kit_allocator_t *alloc) {
xml_text_t result;
memset(&result, 0, sizeof result);
+ (void) alloc;
+
result.status = KIT_ERROR_NOT_IMPLEMENTED;
return result;
}
@@ -414,8 +413,7 @@ static s32 kit_xml_append_text_(str_builder_t *buf, xml_t *xml) {
assert(buf->size == n + tail.size);
if (buf->size != n + tail.size)
- return KIT_ERROR_OUT_OF_MEMORY
-;
+ return KIT_ERROR_OUT_OF_MEMORY;
if (tail.size > 0)
memcpy(buf->values + n, tail.values, tail.size);
diff --git a/source/kit/xml.h b/kit/xml.h
index a4dd3d1..a4dd3d1 100644
--- a/source/kit/xml.h
+++ b/kit/xml.h
diff --git a/source/miniaudio/LICENSE b/miniaudio/LICENSE
index 0a393a0..0a393a0 100644
--- a/source/miniaudio/LICENSE
+++ b/miniaudio/LICENSE
diff --git a/source/miniaudio/miniaudio.h b/miniaudio/miniaudio.h
index 181f452..181f452 100644
--- a/source/miniaudio/miniaudio.h
+++ b/miniaudio/miniaudio.h
diff --git a/source/nanovg/LICENSE b/nanovg/LICENSE
index 4667b48..4667b48 100644
--- a/source/nanovg/LICENSE
+++ b/nanovg/LICENSE
diff --git a/source/nanovg/fontstash.h b/nanovg/fontstash.h
index 29d5caf..29d5caf 100644
--- a/source/nanovg/fontstash.h
+++ b/nanovg/fontstash.h
diff --git a/source/nanovg/nanovg.c b/nanovg/nanovg.c
index 4e110b3..4e110b3 100644
--- a/source/nanovg/nanovg.c
+++ b/nanovg/nanovg.c
diff --git a/source/nanovg/nanovg.h b/nanovg/nanovg.h
index f32a175..f32a175 100644
--- a/source/nanovg/nanovg.h
+++ b/nanovg/nanovg.h
diff --git a/source/nanovg/nanovg_gl.c b/nanovg/nanovg_gl.c
index 9970842..9970842 100644
--- a/source/nanovg/nanovg_gl.c
+++ b/nanovg/nanovg_gl.c
diff --git a/source/nanovg/nanovg_gl.h b/nanovg/nanovg_gl.h
index 9f90d8f..9f90d8f 100644
--- a/source/nanovg/nanovg_gl.h
+++ b/nanovg/nanovg_gl.h
diff --git a/source/saw/main.c b/saw.c
index 4c36b75..0abda6c 100644
--- a/source/saw/main.c
+++ b/saw.c
@@ -1,30 +1,816 @@
+#if 0 /*
+#/ ================================================================
+#/
+#/ saw.c
+#/
+#/ Music sequencer and audio editor.
+#/
+#/ (C) 2024 Mitya Selivanov <guattari.tech>, MIT License
+#/
+#/ ----------------------------------------------------------------
+#/
+#/ To-Do list
+#/
+#/ - Code
+#/ - Self-compiling single-source code
+#/ - Logging routines
+#/ - Tools
+#/ - Transactional undo and redo
+#/ - Rational bezier curves
+#/ - Biquad filter
+#/ - Fourier transform
+#/ - Parallel computation
+#/ - Module code compilation
+#/ - Sound
+#/ - Apply volume during sound generation
+#/ - Implement proper frequency shift
+#/ - Unify similar logic for Oscillators and Samplers
+#/ - Internal sample rate for time values
+#/ (28224000, divisible by 192000 and 44100)
+#/ - Dynamic buffer size
+#/ - BPM
+#/ - Volume
+#/ - Simple tonal synth
+#/ - Unisons
+#/ - Wavetables
+#/ - Kick
+#/ - Snare
+#/ - Cymbal
+#/ - EQ
+#/ - Delay
+#/ - Reverb
+#/ - Combs
+#/ - All-passes
+#/ - Compressor
+#/ - Limiter
+#/ - Sample rendering
+#/ - UI
+#/ - Panning and scaling
+#/ - Grid size changing
+#/ - Selection and copy-paste
+#/ - Help pop-up
+#/ - Spectrum view
+#/ - Effects stack
+#/ - Catalog
+#/ - Curve view
+#/ - Wave view
+#/ - Matrix view
+#/ - Graph view
+#/ - Module code view
+#/ - File browser
+#/ - Dynamic layout
+#/ - Color theme customization
+#/ - Custom font and localization
+#/ - Data
+#/ - Floating point number format without data loss
+#/ - WAV export
+#/ - Project load and store
+#/ - Automatic serialization
+#/ - Hot loading
+#/ - Plugin module
+#/ - VST3 wrapper
+#/ - LV2 wrapper
+#/ - MIDI export
+#/ - MIDI import
+#/ - Drag & drop sheet files
+#/ - Drag & drop project files
+#/
+#/ Bugs
+#/
+#/ - Sampler clicking
+#/ - Windows and macOS compilation issues
+#/
+#/ Done features
+#/
+#/ - Build
+#/ - Code setup for dependencies
+#/ - nanovg and miniaudio setup
+#/ - Faster recompilation
+#/ - WebAssembly
+#/ - Sound
+#/ - Track looping
+#/ - Buffering
+#/ - Drag & drop audio files
+#/ - Sampler
+#/ - Pythagorean tuning
+#/ - UI
+#/ - Piano roll
+#/ - Playback control
+#/ - Text rendering
+#/ - Piano roll panning
+#/ - Track composing
+#/ - Instrument settings
+#/ - Touchscreen support
+#/ - Data
+#/ - State load and store
+#/ - WAV import
+#/ - Sample loading
+#/ - Drag & drop in web
+#/
+#/ ================================================================
+#/
+#/ Self-compilation shell script
+#/
+#/ ================================================================
+SRC=${0##*./}
+gcc -DBUILDME=1 -o buildme $SRC && ./buildme $@ && rm buildme
+exit $? */
+#endif
+
// ================================================================
//
-// Saw main code
+// GLOBAL COMPILATION OPTIONS
//
-// TODO
-// - Use 28224000 for time rate, divisible by common sample rates
-// like 192000, 44100 etc.
-// - Dynamic buffer size.
-// - Logging routines.
+// ================================================================
+
+//#define BUILDME 1
+//#define DEPENDENCIES 1
+//#define EXE 1
+//#define TESTS 1
+
+#define _GNU_SOURCE
+
+// ================================================================
+//
+// BUILD SYSTEM
//
// ================================================================
+#if BUILDME
+
+#include "kit/allocator.c"
+#include "kit/array_ref.c"
+#include "kit/dynamic_array.c"
+#include "kit/file.c"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdarg.h>
+#include <assert.h>
+
+#define PROJECT "saw"
+#define SOURCE "saw.c"
+
+#define REQUIRE_MATH 1
+#define REQUIRE_DL 0
+#define REQUIRE_THREADS 0
+#define REQUIRE_SOCKETS 0
+#define REQUIRE_GRAPHICS 1
+#define REQUIRE_OPENGL 1
+#define REQUIRE_VULKAN 0
+#if defined(_WIN32) && !defined(__CYGWIN__)
+#define STATIC_RUNTIME 1
+#else
+#define STATIC_RUNTIME 0
+#endif
+
+enum {
+ LINUX,
+ WINDOWS,
+ MACOS,
+};
+
+#if defined(_WIN32) && !defined(__CYGWIN__)
+#define DLM "\\"
+#define OS WINDOWS
+#elif defined(__APPLE__)
+#define DLM "/"
+#define OS MACOS
+#else // assume Linux
+#define DLM "/"
+#define OS LINUX
+#endif
+
+enum {
+ BUFFER_COUNT = 16,
+ BUFFER_SIZE = 512,
+ STRING_COUNT = 64,
+ STRING_SIZE = 512,
+};
+
+c8 _buffers[BUFFER_COUNT][BUFFER_SIZE];
+i32 _buffer_index = 0;
+
+c8 _strings[STRING_COUNT][STRING_SIZE];
+i32 _string_index;
+
+c8 *build_type = "debug";
+c8 *compiler_c = "";
+c8 *destination = "";
+c8 *extra_options = "";
+c8 *extra_link_options = "";
+c8 *postfix_obj = ".o";
+c8 *postfix_exe = "";
+c8 *flag_obj = "-c -o ";
+c8 *flag_exe = "-o ";
+c8 *flags = "";
+c8 *link_flags = "";
+
+b8 run_tests = 1;
+
+void print_help(void) {
+ printf(
+ "Build tool for C projects\n\n"
+ "Usage: ./saw.c [OPTIONS]\n\n"
+ " -h --help - Print this help\n"
+ " -t --type - Set build type: debug, release\n"
+ " -c --compiler - Set compiler to use: gcc, clang, cl, emcc\n"
+ " -d --destination - Set destination path\n"
+ " -o --options - Set additional compiler options\n"
+ " -l --link - Set additional linker options\n"
+ " -s --skiptests - Do not run tests\n\n"
+ );
+ fflush(stdout);
+}
+
+c8 lowercase_char(c8 c) {
+ if (c >= 'A' && c <= 'Z')
+ return c + ('a' - 'A');
+ return c;
+}
+
+c8 *lowercase(c8 *s) {
+ i32 i = 0;
+ for (; s[i] != '\0'; ++i) {
+ assert(i + 1 < BUFFER_SIZE);
+ _buffers[_buffer_index][i] = lowercase_char(s[i]);
+ }
+ _buffers[_buffer_index][i] = '\0';
+ c8 *result = _buffers[_buffer_index];
+ _buffer_index = (_buffer_index + 1) % BUFFER_COUNT;
+ return result;
+}
+
+void fmt_v(c8 *format, va_list args) {
+ vsprintf(_buffers[_buffer_index], format, args);
+}
+
+c8 *fmt(c8 *format, ...) {
+ va_list args;
+ va_start(args, format);
+ fmt_v(format, args);
+ c8 *result = _buffers[_buffer_index];
+ _buffer_index = (_buffer_index + 1) % BUFFER_COUNT;
+ va_end(args);
+ return result;
+}
+
+void fmt_dup_v(c8 *format, va_list args) {
+ vsprintf(_strings[_string_index], format, args);
+}
+
+c8 *fmt_dup(c8 *format, ...) {
+ va_list args;
+ va_start(args, format);
+ assert(_string_index < STRING_COUNT);
+ fmt_v(format, args);
+ c8 *result = _strings[_string_index++];
+ va_end(args);
+ return result;
+}
+
+b8 str_eq_lower(c8 *a, c8 *b) {
+ return strcmp(lowercase(a), lowercase(b)) == 0;
+}
+
+b8 str_eq(c8 *a, c8 *b) {
+ return strcmp(a, b) == 0;
+}
+
+b8 check_compiler(c8 *name) {
+ if (str_eq_lower(name, "cl") || str_eq_lower(name, "cl.exe")) {
+ i32 s = system(fmt("%s", name));
+ if (WEXITSTATUS(s) != 0)
+ return 0;
+ return 1;
+ }
+ i32 s = system(fmt("%s --version", name));
+ if (WEXITSTATUS(s) != 0)
+ return 0;
+ return 1;
+}
+
+enum {
+ MAX_LENGTH = 200,
+};
+
+i64 int_len(u32 x) {
+ i64 len = 0;
+
+ do {
+ x /= 10;
+ ++len;
+ } while (x > 0);
+
+ return len;
+}
+
+i64 print_bytes(FILE *out, FILE *in) {
+ i64 size = 0, line_len = MAX_LENGTH;
+
+ while (!feof(in)) {
+ u32 x = 0;
+
+ i64 n = fread(&x, 1, sizeof x, in);
+ if (n <= 0)
+ break;
+
+ i64 len = int_len(x);
+
+ line_len += len + 2;
+
+ if (line_len >= MAX_LENGTH) {
+ fprintf(out, "\n ");
+ line_len = 3 + len;
+ }
+
+ fprintf(out, " %u,", x);
+
+ size += n;
+ }
+
+ return size;
+}
+
+i32 main(i32 argc, c8 **argv) {
+ // Handle command line arguments
+ //
+
+ for (i32 i = 1; i < argc; ++i) {
+ if (str_eq_lower(argv[i], "?")) {
+ print_help();
+ return 0;
+ } else if (argv[i][0] == '-') {
+ if (argv[i][1] == '-') {
+ c8 *opt = argv[i] + 2;
+ if (str_eq_lower(opt, "help")) {
+ print_help();
+ return 0;
+ }
+ else if (str_eq_lower(opt, "type"))
+ build_type = argv[++i];
+ else if (str_eq_lower(opt, "compiler"))
+ compiler_c = argv[++i];
+ else if (str_eq_lower(opt, "destination"))
+ destination = argv[++i];
+ else if (str_eq_lower(opt, "options"))
+ extra_options = argv[++i];
+ else if (str_eq_lower(opt, "link"))
+ extra_link_options = argv[++i];
+ else if (str_eq_lower(opt, "skiptests"))
+ run_tests = 0;
+ else
+ printf("Unknown option ignored `%s`\n", argv[i]);
+ } else {
+ i32 consumed = 0;
+ for (i32 j = 1; argv[i][j] != '\0'; ++j) {
+ switch (argv[i][j]) {
+ case 'h':
+ case 'H':
+ print_help();
+ return 0;
+
+ case 't':
+ build_type = argv[i + (++consumed)];
+ break;
+
+ case 'c':
+ compiler_c = argv[i + (++consumed)];
+ break;
+
+ case 'd':
+ destination = argv[i + (++consumed)];
+ break;
+
+ case 'o':
+ extra_options = argv[i + (++consumed)];
+ break;
+
+ case 'l':
+ extra_link_options = argv[i + (++consumed)];
+ break;
+
+ case 's':
+ run_tests = 0;
+ break;
+
+ default:
+ printf("Unknown option ignored `-%c`\n", argv[i][j]);
+ }
+ }
+ i += consumed;
+ }
+ } else {
+ printf("Unknown option ignored `%s`\n", argv[i]);
+ }
+ }
+
+ fflush(stdout);
+
+ // Find C compiler
+ //
+
+ if (compiler_c[0] != '\0') {
+ if (check_compiler(compiler_c))
+ printf("C compiler found - %s\n", compiler_c);
+ else {
+ printf("C compiler not found\n");
+ return 1;
+ }
+ } else
+ switch (OS) {
+ case LINUX:
+ if (check_compiler("gcc")) {
+ compiler_c = "gcc";
+ printf("C compiler found - GCC\n");
+ } else if (check_compiler("clang")) {
+ compiler_c = "clang";
+ printf("C compiler found - Clang");
+ } else if (check_compiler("cc")) {
+ compiler_c = "cc";
+ printf("C compiler found - cc");
+ }
+ break;
+
+ case WINDOWS:
+ if (check_compiler("cl")) {
+ compiler_c = "cl";
+ printf("C compiler found - MSVC\n");
+ } else if (check_compiler("gcc")) {
+ compiler_c = "gcc";
+ printf("C compiler found - GCC\n");
+ } else if (check_compiler("clang")) {
+ compiler_c = "clang";
+ printf("C compiler found - Clang");
+ }
+ break;
+
+ case MACOS:
+ if (check_compiler("clang")) {
+ compiler_c = "clang";
+ printf("C compiler found - Clang");
+ } else if (check_compiler("gcc")) {
+ compiler_c = "gcc";
+ printf("C compiler found - GCC\n");
+ } else if (check_compiler("cc")) {
+ compiler_c = "cc";
+ printf("C compiler found - cc");
+ }
+ break;
+
+ default:;
+ }
+
+ if (compiler_c[0] == '\0') {
+ printf("C compiler not found\n");
+ return 1;
+ }
+
+ fflush(stdout);
+
+ // Prepare compilation options
+ //
+
+ if (OS == WINDOWS)
+ postfix_exe = ".exe";
+
+ if (str_eq(compiler_c, "cc")) {
+ destination[0] == '\0' && (destination = "build_cc");
+ } else if (str_eq(compiler_c, "gcc")) {
+ destination[0] == '\0' && (destination = "build_gcc");
+ } else if (str_eq(compiler_c, "clang")) {
+ destination[0] == '\0' && (destination = "build_clang");
+ } else if (str_eq_lower(compiler_c, "cl") || str_eq_lower(compiler_c, "cl.exe")) {
+ destination[0] == '\0' && (destination = "build_cl");
+ postfix_obj = ".obj";
+ flag_obj = "-c -Fo";
+ flag_exe = "-Fe";
+ } else if (str_eq(compiler_c, "emcc")) {
+ destination[0] == '\0' && (destination = "build_emcc");
+ postfix_exe = ".js";
+ run_tests = 0;
+ }
+
+ if (str_eq_lower(compiler_c, "cl") || str_eq_lower(compiler_c, "cl.exe")) {
+ if (str_eq_lower(build_type, "release"))
+ flags = "-O2 -DNDEBUG";
+ else
+ flags = "-Od";
+ } else if (str_eq(compiler_c, "clang")) {
+ if (str_eq_lower(build_type, "release"))
+ flags = "-O3 -DNDEBUG";
+ else
+ flags = "-O0";
+ } else {
+ if (str_eq_lower(build_type, "release"))
+ flags = "-O3 -DNDEBUG";
+ else if (OS != WINDOWS && str_eq(compiler_c, "gcc") && !STATIC_RUNTIME)
+ flags = "-Wall -Wextra -Wno-missing-braces -Wno-missing-field-initializers -Werror -pedantic -O0 -fsanitize=undefined,address,leak -mshstk";
+ else
+ flags = "-Wall -Wextra -Wno-missing-braces -Wno-missing-field-initializers -Werror -pedantic -O0";
+ }
+
+ if (OS == WINDOWS) {
+ if (str_eq_lower(compiler_c, "cl") || str_eq_lower(compiler_c, "cl.exe")) {
+ if (str_eq_lower(build_type, "debug"))
+ link_flags =
+#if REQUIRE_SOCKETS
+ "Ws2_32.lib "
+#endif
+ "Shlwapi.lib Advapi32.lib "
+#if STATIC_RUNTIME
+ "/MTd "
+#endif
+ "";
+ else
+ link_flags =
+#if REQUIRE_SOCKETS
+ "Ws2_32.lib "
+#endif
+ "Shlwapi.lib Advapi32.lib "
+#if STATIC_RUNTIME
+ "/MT "
+#endif
+ "";
+ } else
+ link_flags =
+#if REQUIRE_SOCKETS
+ "-lWs2_32 "
+#endif
+ "-lShlwapi -lAdvapi32"
+#if STATIC_RUNTIME
+ "-static "
+#endif
+ "";
+ }
+
+ if (OS == LINUX)
+ link_flags =
+#if REQUIRE_THREADS
+ "-pthread "
+#endif
+#if REQUIRE_MATH
+ "-lm "
+#endif
+#if REQUIRE_DL
+ "-ldl "
+#endif
+#if REQUIRE_GRAPHICS
+ "-lX11 -lXi -lXcursor "
+#endif
+#if REQUIRE_OPENGL
+ "-lGL "
+#endif
+#if REQUIRE_VULKAN
+ "-lvulkan "
+#endif
+#if STATIC_RUNTIME
+ "-static "
+#endif
+ "";
+
+ if (str_eq(compiler_c, "emcc"))
+ link_flags =
+#if REQUIRE_OPENGL
+ "-sFULL_ES3=1 "
+#endif
+ "";
+
+ if (extra_options[0] != '\0')
+ flags = fmt_dup("%s %s", extra_options, flags);
+ if (extra_link_options[0] != '\0')
+ link_flags = fmt_dup("%s %s", extra_link_options, link_flags);
+
+ // Prepare destination folder
+ //
+
+ destination[0] == '\0' && (destination = "build");
+
+ if (OS == WINDOWS)
+ system(fmt("if not exist %s mkdir %s", destination, destination));
+ else
+ system(fmt("mkdir %s -p", destination));
+
+ // Print info
+ //
+
+ printf("\nCompiler options: %s\n", flags);
+ printf( "Link options: %s\n\n", link_flags);
+ fflush(stdout);
+
+ // Code generation
+ //
+
+ if (path_type(SZ("build_fonts.inl.h")) == PATH_NONE) {
+ printf("Code generation\n");
+ fflush(stdout);
+
+ FILE *out = fopen("build_fonts.inl.h", "wb");
+ assert(out != NULL);
+
+ fprintf(out, "// "
+ "====================================================="
+ "===========\n");
+ fprintf(out, "//\n");
+ fprintf(out, "// Saw generated code\n");
+ fprintf(out, "//\n");
+ fprintf(out, "// "
+ "====================================================="
+ "===========\n\n");
+
+ fprintf(out, "#ifndef BUILD_FONTS_INL_H\n");
+ fprintf(out, "#define BUILD_FONTS_INL_H\n\n");
+ fprintf(out, "#include \"kit/types.h\"\n\n");
+
+ // Write Domitian Roman
+ //
+ {
+ FILE *in = fopen("fonts/domitian_roman.ttf", "rb");
+ assert(in != NULL);
+
+ fprintf(out, "u32 ttf_text[] = {");
+
+ i64 n = print_bytes(out, in);
+
+ fprintf(out, "\n};\n\n");
+ fprintf(out, "enum { TTF_TEXT_SIZE = %lld, };\n\n", n);
+
+ fclose(in);
+ }
+
+ // Write Font Awesome
+ //
+ {
+ FILE *in = fopen("fonts/font_awesome_6_free_solid_900.ttf", "rb");
+ assert(in != NULL);
+
+ fprintf(out, "u32 ttf_icons[] = {");
+
+ i64 n = print_bytes(out, in);
+
+ fprintf(out, "\n};\n\n");
+ fprintf(out, "enum { TTF_ICONS_SIZE = %lld, };\n\n", n);
+
+ fclose(in);
+ }
+
+ fprintf(out, "#endif\n");
+ fclose(out);
+ }
+
+ // Build the project
+ //
+
+ c8 *deps = fmt("%s" DLM "thirdparty%s", destination, postfix_obj);
+
+ if (path_type(str(strlen(deps), deps)) == PATH_NONE) {
+ printf("Rebuild dependencies\n");
+ fflush(stdout);
+
+ i32 s = system(fmt(
+ "%s %s -DDEPENDENCIES=1 "
+ "%s%s" DLM "thirdparty%s "
+ SOURCE
+ " %s",
+ compiler_c, flags,
+ flag_obj, destination, postfix_obj,
+ link_flags)
+ );
+
+ if (WEXITSTATUS(s) != 0)
+ return 1;
+ fflush(stdout);
+ }
+
+ printf("Build the test suite\n");
+ fflush(stdout);
+
+ i32 s = system(fmt(
+ "%s %s -DTESTS=1 "
+ "%s%s" DLM "test_suite%s "
+ SOURCE
+ " %s",
+ compiler_c, flags,
+ flag_exe, destination, postfix_exe,
+ link_flags)
+ );
+
+ if (WEXITSTATUS(s) != 0)
+ return 1;
+ fflush(stdout);
+
+ printf("Build " PROJECT " executable\n");
+ fflush(stdout);
+
+ s = system(fmt(
+ "%s %s -DEXE=1 "
+ "%s%s" DLM PROJECT "%s "
+ "%s" DLM "thirdparty%s "
+ SOURCE
+ " %s",
+ compiler_c, flags,
+ flag_exe, destination, postfix_exe,
+ destination, postfix_obj,
+ link_flags)
+ );
+
+ if (WEXITSTATUS(s) != 0)
+ return 1;
+ fflush(stdout);
+
+ if (!run_tests)
+ return 0;
+
+ // Run tests
+ //
+
+ i32 status = 0;
+
+ printf("Run tests\n\n");
+ fflush(stdout);
+
+ s = system(fmt("\"%s" DLM "test_suite\"", destination));
+
+ if (WEXITSTATUS(s) != 0)
+ status = 1;
+ fflush(stdout);
+
+ if (status == 0)
+ printf("\nAll done - OK.\n");
+ else
+ printf("\nAll done - FAILURE.\n");
+
+ return status;
+}
+
+// ================================================================
+//
+// DEPENDENCIES
+//
+// ================================================================
+
+#elif DEPENDENCIES
+
+#if defined(__EMSCRIPTEN__)
+# define SOKOL_GLES3
+# define NANOVG_GLES3 1
+#else
+# define SOKOL_GLCORE33
+# define NANOVG_GL3 1
+#endif
+
+#ifdef __GNUC__
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wpedantic"
+#endif
+#define SOKOL_APP_IMPL
+// hotfix for weird GCC bug
+#ifdef __linux__
+# include <emmintrin.h>
+#endif
+#include "kit/_lib.c"
+#include "sokol/sokol_app.h"
+#ifdef __GNUC__
+# pragma GCC diagnostic pop
+#endif
+
+#ifdef __GNUC__
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wunused-result"
+#endif
+#define MINIAUDIO_IMPLEMENTATION
+#include "miniaudio/miniaudio.h"
+#ifdef __GNUC__
+# pragma GCC diagnostic pop
+#endif
+
+#include "nanovg/nanovg.c"
+#include "nanovg/nanovg_gl.c"
+
// ================================================================
//
-// Headers
+// EXECUTABLE
//
// ================================================================
-#include "../kit/math.h"
-#include "../kit/time.h"
-#include "../kit/string_ref.h"
-#include "../kit/mersenne_twister_64.h"
-#include "../kit/secure_random.h"
-#include "../kit/file.h"
-#include "../kit/input_buffer.h"
-#include "../kit/threads.h"
-#include "../kit/status.h"
+#elif EXE
+
+// ================================================================
+//
+// Headers
+//
+// ================================================================
+
+#include "kit/math.h"
+#include "kit/time.h"
+#include "kit/string_ref.h"
+#include "kit/mersenne_twister_64.h"
+#include "kit/secure_random.h"
+#include "kit/file.h"
+#include "kit/input_buffer.h"
+#include "kit/threads.h"
+#include "kit/status.h"
#if defined(__EMSCRIPTEN__)
# include <GLES3/gl3.h>
@@ -36,21 +822,21 @@
# define NANOVG_GL3 1
#endif
-#include "../sokol/sokol_app.h"
-#include "../nanovg/nanovg.h"
-#include "../nanovg/nanovg_gl.h"
-#include "../miniaudio/miniaudio.h"
+#include "sokol/sokol_app.h"
+#include "nanovg/nanovg.h"
+#include "nanovg/nanovg_gl.h"
+#include "miniaudio/miniaudio.h"
#include <stdio.h>
#include <stdlib.h>
-// saw_ttf_text, SAW_TTF_TEXT_SIZE
-// saw_ttf_icons, SAW_TTF_ICONS_SIZE
-#include "fonts.inl.h"
+// ttf_text, TTF_TEXT_SIZE
+// ttf_icons, TTF_ICONS_SIZE
+#include "build_fonts.inl.h"
// ================================================================
//
-// Definitions
+// Definitions
//
// ================================================================
@@ -59,8 +845,8 @@
#define VERSION_MAJOR 0
#define VERSION_MINOR 0
-#define VERSION_BABY 2
-#define VERSION_DEV 1
+#define VERSION_BABY 3
+#define VERSION_DEV 1
// Constants
//
@@ -71,8 +857,8 @@
#define GLOBAL_VOLUME 2.0
#define SPACES SZ(" \t\n\r")
-#define DELIM SZ(" \t\n\r}")
-#define NUMS SZ(" \t\n\r+-0123456789.")
+#define DELIM SZ(" \t\n\r}")
+#define NUMS SZ(" \t\n\r+-0123456789.")
enum {
CHANNEL_COUNT = 2,
@@ -102,8 +888,8 @@ enum {
TUNING_PYTHAGOREAN,
WAVE_SINE = 0,
- WAVE_SAW_UP,
- WAVE_SAW_DOWN,
+ WAVE_UP,
+ WAVE_DOWN,
WAVE_SQUARE_UP,
WAVE_SQUARE_DOWN,
WAVE_KICK,
@@ -141,29 +927,29 @@ typedef struct {
f64 amplitude;
f64 phase[2];
i64 track;
-} saw_voice_t;
+} Voice;
typedef struct {
b8 enabled;
i64 time;
i64 duration;
i64 pitch;
-} saw_roll_note_t;
+} Roll_Note;
typedef struct {
- b8 enabled;
- i64 track;
- b8 pitch_turned_off[PITCH_COUNT];
- f64 tuning[PITCH_COUNT];
- i64 tuning_tag;
- i64 mark_pitch;
- i64 rate;
- saw_roll_note_t notes[SHEET_SIZE];
- i64 time;
- i64 duration;
- i64 loop_duration;
- f64 ui_offset_x;
- f64 ui_offset_y;
+ b8 enabled;
+ i64 track;
+ b8 pitch_turned_off[PITCH_COUNT];
+ f64 tuning[PITCH_COUNT];
+ i64 tuning_tag;
+ i64 mark_pitch;
+ i64 rate;
+ Roll_Note notes[SHEET_SIZE];
+ i64 time;
+ i64 duration;
+ i64 loop_duration;
+ f64 ui_offset_x;
+ f64 ui_offset_y;
// dynamic properties
//
@@ -174,45 +960,45 @@ typedef struct {
b8 ui_offset_x_input;
b8 ui_offset_y_input;
b8 loop_input;
-} saw_roll_t;
+} Roll;
typedef struct {
f64 sustain;
f64 attack;
f64 decay;
f64 release;
-} saw_envelope_t;
+} Envelope;
typedef struct {
- i32 wave;
- f64 warp;
- f64 phase;
- f64 stereo_width;
- f64 volume;
- saw_envelope_t envelope;
-} saw_oscillator_t;
+ i32 wave;
+ f64 warp;
+ f64 phase;
+ f64 stereo_width;
+ f64 volume;
+ Envelope envelope;
+} Oscillator;
-typedef DA(u8) saw_da_u8_t;
-typedef DA(f32) saw_da_f32_t;
+typedef DA(u8) da_u8_t;
+typedef DA(f32) da_f32_t;
typedef struct {
- saw_da_f32_t data;
- saw_da_f32_t outline;
- f64 begin;
- f64 end;
- f64 crossfade;
- f64 base_frequency;
- f64 volume;
- saw_envelope_t envelope;
-} saw_sampler_t;
+ da_f32_t data;
+ da_f32_t outline;
+ f64 begin;
+ f64 end;
+ f64 crossfade;
+ f64 base_frequency;
+ f64 volume;
+ Envelope envelope;
+} Sampler;
typedef struct {
i32 instrument;
union {
- saw_oscillator_t oscillator;
- saw_sampler_t sampler;
+ Oscillator oscillator;
+ Sampler sampler;
};
-} saw_track_t;
+} Track;
typedef struct {
// dynamic properties
@@ -224,13 +1010,13 @@ typedef struct {
f64 ui_offset_x;
f64 ui_offset_y;
b8 duplicate_input;
-} saw_compose_t;
+} Compose;
typedef struct {
f32 normal[4];
f32 active[4];
f32 hover[4];
-} saw_ui_color_t;
+} UI_Color;
typedef struct {
b8 enabled;
@@ -238,7 +1024,7 @@ typedef struct {
i64 row;
f64 time;
f64 duration;
-} saw_ui_grid_item_t;
+} UI_Grid_Item;
typedef struct {
f64 x0; // widget position x
@@ -266,8 +1052,8 @@ typedef struct {
i64 meter_den; // denominator
i64 items_size;
- saw_ui_grid_item_t *items;
-} saw_ui_grid_t;
+ UI_Grid_Item *items;
+} UI_Grid;
// ================================================================
//
@@ -275,75 +1061,75 @@ typedef struct {
//
// NOTE
// At some point we want to move all global data into a struct
-// saw_context_t.
+// context_t.
//
// ================================================================
// Graphics
//
-static struct NVGcontext *saw_nvg;
-static i32 saw_font_text = -1;
-static i32 saw_font_icons = -1;
+struct NVGcontext *nvg;
+i32 font_text = -1;
+i32 font_icons = -1;
// Audio
//
-static ma_device saw_audio_device;
+ma_device audio_device;
// Input events
//
-static f64 saw_mouse_x = 0;
-static f64 saw_mouse_y = 0;
-static f64 saw_mouse_dx = 0;
-static f64 saw_mouse_dy = 0;
-static b8 saw_lbutton_click = 0;
-static b8 saw_lbutton_down = 0;
-static b8 saw_rbutton_click = 0;
-static b8 saw_rbutton_down = 0;
-static b8 saw_mbutton_click = 0;
-static b8 saw_mbutton_down = 0;
-static b8 saw_mouse_on = 0;
-static b8 saw_shift_on = 0;
-static b8 saw_ctrl_on = 0;
+f64 mouse_x = 0;
+f64 mouse_y = 0;
+f64 mouse_dx = 0;
+f64 mouse_dy = 0;
+b8 lbutton_click = 0;
+b8 lbutton_down = 0;
+b8 rbutton_click = 0;
+b8 rbutton_down = 0;
+b8 mbutton_click = 0;
+b8 mbutton_down = 0;
+b8 mouse_on = 0;
+b8 shift_on = 0;
+b8 ctrl_on = 0;
// Playback
//
-static b8 saw_playback_suspended = 1;
-static b8 saw_playback_on = 0;
-static i64 saw_playback_frame = 0;
-static i64 saw_playback_lookahead = 0;
-static i64 saw_playback_offset_read = 0;
-static i64 saw_playback_offset_write = 0;
-static mtx_t saw_playback_mutex;
+b8 playback_suspended = 1;
+b8 playback_on = 0;
+i64 playback_frame = 0;
+i64 playback_lookahead = 0;
+i64 playback_offset_read = 0;
+i64 playback_offset_write = 0;
+mtx_t playback_mutex;
// Buffers
//
-static f32 saw_playback_buffer[BUFFER_SIZE];
-static f32 saw_playback_temp[BUFFER_SIZE];
-static b8 saw_key_pressed[512];
-static c8 saw_drop_file_name[4096];
-static saw_da_u8_t saw_drop_file_data;
+f32 playback_buffer[BUFFER_SIZE];
+f32 playback_temp[BUFFER_SIZE];
+b8 key_pressed[512];
+c8 drop_file_name[4096];
+da_u8_t drop_file_data;
// Project state
//
-static i64 saw_current_track = 0;
-static i64 saw_current_roll = 0;
-static i64 saw_edit_mode = EDIT_MODE_HAND;
-static mt64_state_t saw_rng_mt64;
+i64 current_track = 0;
+i64 current_roll = 0;
+i64 edit_mode = EDIT_MODE_HAND;
+mt64_state_t rng_mt64;
-static c8 saw_project_file_buf[4096];
-static str_t saw_project_file;
+c8 project_file_buf[4096];
+str_t project_file;
-static saw_voice_t saw_voices[VOICE_COUNT] = { 0 };
-static saw_roll_t saw_rolls[ROLL_COUNT];
-static saw_track_t saw_tracks[TRACK_COUNT];
+Voice voices[VOICE_COUNT] = { 0 };
+Roll rolls[ROLL_COUNT];
+Track tracks[TRACK_COUNT];
-static saw_compose_t saw_compose = {
+Compose compose = {
.grid_input = 0,
.grid_roll = 0,
.grid_cell = 0,
@@ -353,32 +1139,30 @@ static saw_compose_t saw_compose = {
.duplicate_input = 0,
};
-static saw_ui_color_t saw_ui_colors[] = {
- {
- // TINT_WHITE
- .normal = { .7f, .7f, .7f, .7f },
- .active = { .7f, .7f, .7f, 1.f },
- .hover = { 1.f, 1.f, 1.f, 1.f },
- },
+UI_Color ui_colors[] = {
{
- // TINT_ORANGE
- .normal = { .9f, .65f, .4f, .6f },
- .active = { .9f, .65f, .4f, 1.f },
- .hover = { 1.f, 1.f, 1.f, 1.f },
- },
- {
- // TINT_PINK
- .normal = { .7f, .3f, .6f, .7f },
- .active = { .8f, .25f, .6f, 1.f },
- .hover = { 1.f, 1.f, 1.f, 1.f },
+ // TINT_WHITE
+ .normal = { .7f, .7f, .7f, .7f },
+ .active = { .7f, .7f, .7f, 1.f },
+ .hover = { 1.f, 1.f, 1.f, 1.f },
+ }, {
+ // TINT_ORANGE
+ .normal = { .9f, .65f, .4f, .6f },
+ .active = { .9f, .65f, .4f, 1.f },
+ .hover = { 1.f, 1.f, 1.f, 1.f },
+ }, {
+ // TINT_PINK
+ .normal = { .7f, .3f, .6f, .7f },
+ .active = { .8f, .25f, .6f, 1.f },
+ .hover = { 1.f, 1.f, 1.f, 1.f },
}
};
-static i64 saw_ui_input_index = 0;
-static i64 saw_ui_input_active = -1;
-static f64 saw_ui_input_buffer = 0.;
+i64 ui_input_index = 0;
+i64 ui_input_active = -1;
+f64 ui_input_buffer = 0.;
-static i32 saw_ui_tab = UI_MAIN;
+i32 ui_tab = UI_MAIN;
// ================================================================
//
@@ -388,11 +1172,6 @@ static i32 saw_ui_tab = UI_MAIN;
// When music and signal processing procedures become stable enough
// we will separate them into a library and add tests.
//
-// TODO
-// - Apply volume during sound generation.
-// - Implement proper frequency shift.
-// - Unify similar logic for Oscillators and Samplers.
-//
// ================================================================
#ifdef __GNUC__
@@ -402,7 +1181,7 @@ static i32 saw_ui_tab = UI_MAIN;
# pragma GCC optimize("O3")
#endif
-static void saw_tuning_equal_temperament(f64 *tuning) {
+void tuning_equal_temperament(f64 *tuning) {
assert(tuning != NULL);
if (tuning == NULL)
return;
@@ -413,7 +1192,7 @@ static void saw_tuning_equal_temperament(f64 *tuning) {
(f64) (i - REFERENCE_PITCH_INDEX));
}
-static void saw_tuning_pythagorean(f64 *tuning, i64 base_pitch) {
+void tuning_pythagorean(f64 *tuning, i64 base_pitch) {
assert(tuning != NULL && base_pitch >= 0 &&
base_pitch < PITCH_COUNT);
if (tuning == NULL || base_pitch < 0 || base_pitch >= PITCH_COUNT)
@@ -455,15 +1234,15 @@ static void saw_tuning_pythagorean(f64 *tuning, i64 base_pitch) {
}
}
-static f64 saw_random(f64 min, f64 max) {
+f64 random_f64(f64 min, f64 max) {
if (max - min < EPS)
return min;
- u64 x = mt64_generate(&saw_rng_mt64);
+ u64 x = mt64_generate(&rng_mt64);
u64 range = (u64) ((max - min) * 10000 + 0.5);
return min + (max - min) * ((1.0 / range) * (x % (range + 1)));
}
-static f64 saw_envelope(f64 t, f64 attack, f64 decay, f64 sustain,
+f64 envelope(f64 t, f64 attack, f64 decay, f64 sustain,
f64 duration, f64 release) {
f64 a = 1.;
if (t < attack)
@@ -479,53 +1258,53 @@ static f64 saw_envelope(f64 t, f64 attack, f64 decay, f64 sustain,
return a;
}
-static f64 saw_pitch_amplitude(i64 pitch) {
+f64 pitch_amplitude(i64 pitch) {
return .2 / exp(0.02 * pitch);
}
-static void saw_play_voice(saw_track_t *track, saw_roll_t *roll,
+void play_voice(Track *track, Roll *roll,
i64 pitch, i64 duration) {
if (pitch < 0 || pitch >= PITCH_COUNT)
return;
- assert(!saw_voices[VOICE_COUNT - 1].enabled);
- if (saw_voices[VOICE_COUNT - 1].enabled)
+ assert(!voices[VOICE_COUNT - 1].enabled);
+ if (voices[VOICE_COUNT - 1].enabled)
return;
for (i32 n = VOICE_COUNT - 1; n > 0; --n)
- saw_voices[n] = saw_voices[n - 1];
+ voices[n] = voices[n - 1];
f64 frequency = roll->tuning[pitch];
switch (track->instrument) {
case INSTRUMENT_OSCILLATOR: {
- saw_oscillator_t *osc = &track->oscillator;
+ Oscillator *osc = &track->oscillator;
f64 s = osc->stereo_width / 8;
- saw_voices[0] = (saw_voice_t) {
+ voices[0] = (Voice) {
.enabled = 1,
.time = 0,
.duration = (f64) duration / (f64) SAMPLE_RATE,
.frequency = frequency,
- .amplitude = saw_pitch_amplitude(pitch) * osc->volume,
+ .amplitude = pitch_amplitude(pitch) * osc->volume,
.phase = {
- saw_random(-s, s),
- saw_random(-s, s),
+ random_f64(-s, s),
+ random_f64(-s, s),
},
.track = roll->track,
};
} break;
case INSTRUMENT_SAMPLER: {
- saw_sampler_t *sam = &track->sampler;
+ Sampler *sam = &track->sampler;
- saw_voices[0] = (saw_voice_t) {
+ voices[0] = (Voice) {
.enabled = 1,
.time = 0,
.duration = (f64) duration / (f64) SAMPLE_RATE,
.frequency = frequency,
- .amplitude = saw_pitch_amplitude(pitch) * sam->volume,
+ .amplitude = pitch_amplitude(pitch) * sam->volume,
.phase = { 0., 0., },
.track = roll->track,
};
@@ -535,7 +1314,7 @@ static void saw_play_voice(saw_track_t *track, saw_roll_t *roll,
}
}
-static f64 saw_oscillator(i32 type, f64 frequency, f64 phase,
+f64 oscillator(i32 type, f64 frequency, f64 phase,
f64 warp, f64 t) {
if (type == WAVE_KICK) {
frequency /= 8.;
@@ -551,9 +1330,9 @@ static f64 saw_oscillator(i32 type, f64 frequency, f64 phase,
switch (type) {
case WAVE_SINE:
return sin(t * (M_PI * 2));
- case WAVE_SAW_UP:
+ case WAVE_UP:
return -1. + t * 2.;
- case WAVE_SAW_DOWN:
+ case WAVE_DOWN:
return 1. - t * 2.;
case WAVE_SQUARE_UP:
return t < .5 + warp / 2. ? -1. : 1.;
@@ -565,7 +1344,7 @@ static f64 saw_oscillator(i32 type, f64 frequency, f64 phase,
return 0.;
}
-static f64 saw_sampler(saw_sampler_t *sam, i32 channel, f64 frequency,
+f64 sampler(Sampler *sam, i32 channel, f64 frequency,
i64 t) {
i64 i = (i64) floor((t * frequency) / sam->base_frequency + .5) *
2 +
@@ -577,46 +1356,46 @@ static f64 saw_sampler(saw_sampler_t *sam, i32 channel, f64 frequency,
return sam->data.values[i];
}
-static void saw_audio_render(void) {
+void audio_render(void) {
i64 frame_count = (BUFFER_SIZE / CHANNEL_COUNT);
- if (mtx_lock(&saw_playback_mutex) != thrd_success) {
+ if (mtx_lock(&playback_mutex) != thrd_success) {
assert(0);
return;
}
- frame_count -= saw_playback_lookahead;
- mtx_unlock(&saw_playback_mutex);
+ frame_count -= playback_lookahead;
+ mtx_unlock(&playback_mutex);
if (frame_count > 0) {
- memset(saw_playback_temp, 0,
- frame_count * CHANNEL_COUNT * sizeof *saw_playback_temp);
+ memset(playback_temp, 0,
+ frame_count * CHANNEL_COUNT * sizeof *playback_temp);
for (i64 i = 0; i < frame_count; i++) {
- if (saw_playback_on) {
+ if (playback_on) {
// Note triggers
//
for (i32 k = 0; k < ROLL_COUNT; k++) {
- saw_roll_t *roll = saw_rolls + k;
+ Roll *roll = rolls + k;
- if (!roll->enabled || saw_playback_frame < roll->time ||
- saw_playback_frame >= roll->time + roll->duration)
+ if (!roll->enabled || playback_frame < roll->time ||
+ playback_frame >= roll->time + roll->duration)
continue;
- i64 roll_frame = saw_playback_frame - roll->time;
+ i64 roll_frame = playback_frame - roll->time;
if (roll->loop_duration != 0)
roll_frame = roll_frame % roll->loop_duration;
for (i32 i = 0; i < SHEET_SIZE; i++) {
- saw_roll_note_t *note = roll->notes + i;
+ Roll_Note *note = roll->notes + i;
if (!note->enabled || note->time != roll_frame)
continue;
- switch (saw_tracks[roll->track].instrument) {
+ switch (tracks[roll->track].instrument) {
case INSTRUMENT_OSCILLATOR:
case INSTRUMENT_SAMPLER:
- saw_play_voice(saw_tracks + roll->track, roll,
+ play_voice(tracks + roll->track, roll,
note->pitch, note->duration);
break;
@@ -625,7 +1404,7 @@ static void saw_audio_render(void) {
}
}
- ++saw_playback_frame;
+ ++playback_frame;
}
// Sound generation
@@ -634,64 +1413,64 @@ static void saw_audio_render(void) {
b8 regroup_voices = 0;
for (i32 n = 0; n < VOICE_COUNT; n++) {
- if (!saw_voices[n].enabled)
+ if (!voices[n].enabled)
break;
- saw_track_t *track = saw_tracks + saw_voices[n].track;
+ Track *track = tracks + voices[n].track;
switch (track->instrument) {
case INSTRUMENT_OSCILLATOR: {
- saw_oscillator_t *osc = &track->oscillator;
+ Oscillator *osc = &track->oscillator;
i32 wave_type = osc->wave;
f64 warp = osc->warp;
- f64 frequency = saw_voices[n].frequency;
- f64 amplitude = saw_voices[n].amplitude;
- f64 phase_l = osc->phase + saw_voices[n].phase[0];
- f64 phase_r = osc->phase + saw_voices[n].phase[1];
+ f64 frequency = voices[n].frequency;
+ f64 amplitude = voices[n].amplitude;
+ f64 phase_l = osc->phase + voices[n].phase[0];
+ f64 phase_r = osc->phase + voices[n].phase[1];
f64 attack = osc->envelope.attack;
f64 decay = osc->envelope.decay;
f64 sustain = osc->envelope.sustain;
- f64 duration = saw_voices[n].duration;
+ f64 duration = voices[n].duration;
f64 release = osc->envelope.release;
- f64 t = (f64) saw_voices[n].time / (f64) SAMPLE_RATE;
- f64 a = amplitude * saw_envelope(t, attack, decay,
+ f64 t = (f64) voices[n].time / (f64) SAMPLE_RATE;
+ f64 a = amplitude * envelope(t, attack, decay,
sustain, duration,
release);
- saw_playback_temp[i * CHANNEL_COUNT] +=
- (f32) (saw_oscillator(wave_type, frequency, phase_l,
+ playback_temp[i * CHANNEL_COUNT] +=
+ (f32) (oscillator(wave_type, frequency, phase_l,
warp, t) *
a * GLOBAL_VOLUME);
- saw_playback_temp[i * CHANNEL_COUNT + 1] +=
- (f32) (saw_oscillator(wave_type, frequency, phase_r,
+ playback_temp[i * CHANNEL_COUNT + 1] +=
+ (f32) (oscillator(wave_type, frequency, phase_r,
warp, t) *
a * GLOBAL_VOLUME);
- saw_voices[n].time++;
+ voices[n].time++;
if (t > duration + release) {
- saw_voices[n].enabled = 0;
+ voices[n].enabled = 0;
regroup_voices = 1;
}
} break;
case INSTRUMENT_SAMPLER: {
- saw_sampler_t *sam = &track->sampler;
+ Sampler *sam = &track->sampler;
- f64 frequency = saw_voices[n].frequency;
- f64 amplitude = saw_voices[n].amplitude;
+ f64 frequency = voices[n].frequency;
+ f64 amplitude = voices[n].amplitude;
f64 attack = sam->envelope.attack;
f64 decay = sam->envelope.decay;
f64 sustain = sam->envelope.sustain;
- f64 duration = saw_voices[n].duration;
+ f64 duration = voices[n].duration;
f64 release = sam->envelope.release;
- f64 t = (f64) saw_voices[n].time / (f64) SAMPLE_RATE;
- f64 a = amplitude * saw_envelope(t, attack, decay,
+ f64 t = (f64) voices[n].time / (f64) SAMPLE_RATE;
+ f64 a = amplitude * envelope(t, attack, decay,
sustain, duration,
release);
@@ -728,11 +1507,11 @@ static void saw_audio_render(void) {
f64 r = sample_begin + sample_duration + q;
i64 k = (i64) floor(r * SAMPLE_RATE + .5);
- saw_playback_temp[i * CHANNEL_COUNT] +=
- (f32) (saw_sampler(sam, 0, frequency, k) * a *
+ playback_temp[i * CHANNEL_COUNT] +=
+ (f32) (sampler(sam, 0, frequency, k) * a *
u * GLOBAL_VOLUME);
- saw_playback_temp[i * CHANNEL_COUNT + 1] +=
- (f32) (saw_sampler(sam, 1, frequency, k) * a *
+ playback_temp[i * CHANNEL_COUNT + 1] +=
+ (f32) (sampler(sam, 1, frequency, k) * a *
u * GLOBAL_VOLUME);
}
@@ -748,19 +1527,19 @@ static void saw_audio_render(void) {
f64 r = sample_begin + q;
i64 k = (i64) floor(r * SAMPLE_RATE + .5);
- saw_playback_temp[i * CHANNEL_COUNT] +=
- (f32) (saw_sampler(sam, 0, frequency, k) * a *
+ playback_temp[i * CHANNEL_COUNT] +=
+ (f32) (sampler(sam, 0, frequency, k) * a *
u * GLOBAL_VOLUME);
- saw_playback_temp[i * CHANNEL_COUNT + 1] +=
- (f32) (saw_sampler(sam, 1, frequency, k) * a *
+ playback_temp[i * CHANNEL_COUNT + 1] +=
+ (f32) (sampler(sam, 1, frequency, k) * a *
u * GLOBAL_VOLUME);
}
}
- saw_voices[n].time++;
+ voices[n].time++;
if (t >= duration + release) {
- saw_voices[n].enabled = 0;
+ voices[n].enabled = 0;
regroup_voices = 1;
}
} break;
@@ -771,18 +1550,18 @@ static void saw_audio_render(void) {
if (regroup_voices)
for (i64 i = 0; i < VOICE_COUNT; ++i) {
- if (saw_voices[i].enabled)
+ if (voices[i].enabled)
continue;
b8 slot_found = 0;
for (i64 j = VOICE_COUNT - 1; j > i; --j) {
- if (!saw_voices[j].enabled)
+ if (!voices[j].enabled)
continue;
- memcpy(saw_voices + i, saw_voices + j,
- sizeof *saw_voices);
- saw_voices[j].enabled = 0;
+ memcpy(voices + i, voices + j,
+ sizeof *voices);
+ voices[j].enabled = 0;
slot_found = 1;
break;
@@ -794,39 +1573,39 @@ static void saw_audio_render(void) {
}
}
- i64 n0 = frame_count < (BUFFER_SIZE - saw_playback_offset_write) /
+ i64 n0 = frame_count < (BUFFER_SIZE - playback_offset_write) /
CHANNEL_COUNT
? frame_count
- : (BUFFER_SIZE - saw_playback_offset_write) /
+ : (BUFFER_SIZE - playback_offset_write) /
CHANNEL_COUNT;
i64 n1 = frame_count - n0;
- if (mtx_lock(&saw_playback_mutex) != thrd_success) {
+ if (mtx_lock(&playback_mutex) != thrd_success) {
assert(0);
return;
}
if (n0 > 0)
- memcpy(saw_playback_buffer + saw_playback_offset_write,
- saw_playback_temp,
- n0 * CHANNEL_COUNT * sizeof *saw_playback_temp);
+ memcpy(playback_buffer + playback_offset_write,
+ playback_temp,
+ n0 * CHANNEL_COUNT * sizeof *playback_temp);
if (n1 > 0)
- memcpy(saw_playback_buffer,
- saw_playback_temp + (n0 * CHANNEL_COUNT),
- n1 * CHANNEL_COUNT * sizeof *saw_playback_temp);
+ memcpy(playback_buffer,
+ playback_temp + (n0 * CHANNEL_COUNT),
+ n1 * CHANNEL_COUNT * sizeof *playback_temp);
- saw_playback_offset_write = (saw_playback_offset_write +
+ playback_offset_write = (playback_offset_write +
frame_count * CHANNEL_COUNT) %
BUFFER_SIZE;
- saw_playback_lookahead += frame_count;
+ playback_lookahead += frame_count;
- mtx_unlock(&saw_playback_mutex);
+ mtx_unlock(&playback_mutex);
}
#ifndef __EMSCRIPTEN__
- if (frame_count == 0 && !saw_playback_on)
+ if (frame_count == 0 && !playback_on)
// Sleep for 1/5 of the buffer duration
thrd_sleep(
&(struct timespec) {
@@ -836,9 +1615,15 @@ static void saw_audio_render(void) {
#endif
}
-static void saw_audio_callback(ma_device *device, void *void_out_,
- void const *void_in_,
- ma_uint32 frame_count) {
+void audio_callback(
+ ma_device * device,
+ void * void_out_,
+ void const *void_in_,
+ ma_uint32 frame_count
+) {
+ (void) device;
+ (void) void_in_;
+
f32 *out = (f32 *) void_out_;
for (i64 i = 0; i < frame_count; i++) {
@@ -846,40 +1631,40 @@ static void saw_audio_callback(ma_device *device, void *void_out_,
out[i * 2 + 1] = 0.f;
}
- if (mtx_lock(&saw_playback_mutex) != thrd_success) {
+ if (mtx_lock(&playback_mutex) != thrd_success) {
assert(0);
return;
}
- i64 n = frame_count < saw_playback_lookahead
+ i64 n = frame_count < playback_lookahead
? frame_count
- : saw_playback_lookahead;
+ : playback_lookahead;
- i64 n0 = n < (BUFFER_SIZE - saw_playback_offset_read) /
+ i64 n0 = n < (BUFFER_SIZE - playback_offset_read) /
CHANNEL_COUNT
? n
- : (BUFFER_SIZE - saw_playback_offset_read) /
+ : (BUFFER_SIZE - playback_offset_read) /
CHANNEL_COUNT;
i64 n1 = n - n0;
if (n0 > 0)
- memcpy(out, saw_playback_buffer + saw_playback_offset_read,
+ memcpy(out, playback_buffer + playback_offset_read,
n0 * CHANNEL_COUNT * sizeof *out);
if (n1 > 0)
- memcpy(out + (n0 * CHANNEL_COUNT), saw_playback_buffer,
+ memcpy(out + (n0 * CHANNEL_COUNT), playback_buffer,
n1 * CHANNEL_COUNT * sizeof *out);
- saw_playback_offset_read = (saw_playback_offset_read +
+ playback_offset_read = (playback_offset_read +
n * CHANNEL_COUNT) %
BUFFER_SIZE;
- saw_playback_lookahead -= n;
+ playback_lookahead -= n;
- mtx_unlock(&saw_playback_mutex);
+ mtx_unlock(&playback_mutex);
}
-static void saw_sampler_cleanup(saw_sampler_t *sampler) {
+void sampler_cleanup(Sampler *sampler) {
DA_DESTROY(sampler->data);
DA_DESTROY(sampler->outline);
@@ -895,13 +1680,9 @@ static void saw_sampler_cleanup(saw_sampler_t *sampler) {
//
// Data
//
-// TODO
-// - Implement parsing routines in the kit library.
-// - Floating point number format without data loss.
-//
// ================================================================
-static ib_token_t saw_parse_sign(ib_token_t tok, i64 *sign) {
+ib_token_t parse_sign(ib_token_t tok, i64 *sign) {
assert(sign != NULL);
if (sign == NULL)
return (ib_token_t) {
@@ -925,7 +1706,7 @@ static ib_token_t saw_parse_sign(ib_token_t tok, i64 *sign) {
return next;
}
-static ib_token_t saw_parse_int(ib_token_t tok, i64 *x) {
+ib_token_t parse_int(ib_token_t tok, i64 *x) {
assert(x != NULL);
if (x == NULL)
return (ib_token_t) {
@@ -934,7 +1715,7 @@ static ib_token_t saw_parse_int(ib_token_t tok, i64 *x) {
i64 sign;
- tok = saw_parse_sign(tok, &sign);
+ tok = parse_sign(tok, &sign);
tok = ib_any(tok, SZ("0123456789"));
if (tok.status != KIT_OK)
@@ -956,7 +1737,7 @@ static ib_token_t saw_parse_int(ib_token_t tok, i64 *x) {
return tok;
}
-static ib_token_t saw_parse_float(ib_token_t tok, f64 *x) {
+ib_token_t parse_float(ib_token_t tok, f64 *x) {
assert(x != NULL);
if (x == NULL)
return (ib_token_t) {
@@ -965,7 +1746,7 @@ static ib_token_t saw_parse_float(ib_token_t tok, f64 *x) {
i64 sign;
- tok = saw_parse_sign(tok, &sign);
+ tok = parse_sign(tok, &sign);
tok = ib_any(tok, SZ("0123456789."));
if (tok.status != KIT_OK)
@@ -997,7 +1778,7 @@ static ib_token_t saw_parse_float(ib_token_t tok, f64 *x) {
return tok;
}
-static ib_token_t saw_parse_roll(ib_token_t tok, saw_roll_t *roll) {
+ib_token_t parse_roll(ib_token_t tok, Roll *roll) {
assert(roll != NULL);
if (roll == NULL)
return (ib_token_t) {
@@ -1009,7 +1790,7 @@ static ib_token_t saw_parse_roll(ib_token_t tok, saw_roll_t *roll) {
{
memset(roll, 0, sizeof *roll);
- saw_tuning_equal_temperament(roll->tuning);
+ tuning_equal_temperament(roll->tuning);
roll->tuning_tag = TUNING_EQUAL_TEMPERAMENT;
roll->mark_pitch = REFERENCE_PITCH_INDEX;
roll->rate = ROLL_DEFAULT_RATE;
@@ -1055,7 +1836,7 @@ static ib_token_t saw_parse_roll(ib_token_t tok, saw_roll_t *roll) {
if (AR_EQUAL(ib_str(name), SZ("pitch_turned_off")))
for (i64 pitch = 0; tok.status == KIT_OK; ++pitch) {
i64 x;
- ib_token_t next = saw_parse_int(tok, &x);
+ ib_token_t next = parse_int(tok, &x);
if (next.status != KIT_OK)
break;
@@ -1072,7 +1853,7 @@ static ib_token_t saw_parse_roll(ib_token_t tok, saw_roll_t *roll) {
else if (AR_EQUAL(ib_str(name), SZ("tuning")))
for (i64 pitch = 0; tok.status == KIT_OK; ++pitch) {
f64 x;
- ib_token_t next = saw_parse_float(tok, &x);
+ ib_token_t next = parse_float(tok, &x);
if (next.status != KIT_OK)
break;
@@ -1090,10 +1871,10 @@ static ib_token_t saw_parse_roll(ib_token_t tok, saw_roll_t *roll) {
for (i64 note = 0; tok.status == KIT_OK; ++note) {
i64 note_enabled, note_time, note_duration, note_pitch;
- ib_token_t next = saw_parse_int(tok, &note_enabled);
- next = saw_parse_int(next, &note_time);
- next = saw_parse_int(next, &note_duration);
- next = saw_parse_int(next, &note_pitch);
+ ib_token_t next = parse_int(tok, &note_enabled);
+ next = parse_int(next, &note_time);
+ next = parse_int(next, &note_duration);
+ next = parse_int(next, &note_pitch);
if (next.status != KIT_OK)
break;
@@ -1104,7 +1885,7 @@ static ib_token_t saw_parse_roll(ib_token_t tok, saw_roll_t *roll) {
break;
}
- roll->notes[note] = (saw_roll_note_t) {
+ roll->notes[note] = (Roll_Note) {
.enabled = note_enabled ? 1 : 0,
.time = note_time,
.duration = note_duration,
@@ -1115,8 +1896,8 @@ static ib_token_t saw_parse_roll(ib_token_t tok, saw_roll_t *roll) {
}
else if (AR_EQUAL(ib_str(name), SZ("ui_offset"))) {
f64 x, y;
- ib_token_t next = saw_parse_float(tok, &x);
- next = saw_parse_float(next, &y);
+ ib_token_t next = parse_float(tok, &x);
+ next = parse_float(next, &y);
if (next.status == KIT_OK) {
tok = next;
@@ -1129,7 +1910,7 @@ static ib_token_t saw_parse_roll(ib_token_t tok, saw_roll_t *roll) {
}
} else {
i64 x;
- ib_token_t next = saw_parse_int(tok, &x);
+ ib_token_t next = parse_int(tok, &x);
if (next.status == KIT_OK) {
tok = next;
@@ -1166,8 +1947,8 @@ static ib_token_t saw_parse_roll(ib_token_t tok, saw_roll_t *roll) {
return tok;
}
-static ib_token_t saw_parse_track(ib_token_t tok,
- saw_track_t *track) {
+ib_token_t parse_track(ib_token_t tok,
+ Track *track) {
assert(track != NULL);
if (track == NULL)
return (ib_token_t) {
@@ -1231,7 +2012,7 @@ static ib_token_t saw_parse_track(ib_token_t tok,
}
f64 x;
- ib_token_t next = saw_parse_float(tok, &x);
+ ib_token_t next = parse_float(tok, &x);
if (next.status != KIT_OK)
break;
@@ -1255,7 +2036,7 @@ static ib_token_t saw_parse_track(ib_token_t tok,
//
i64 x;
- ib_token_t next = saw_parse_int(tok, &x);
+ ib_token_t next = parse_int(tok, &x);
if (next.status == KIT_OK) {
tok = next;
@@ -1284,7 +2065,7 @@ static ib_token_t saw_parse_track(ib_token_t tok,
//
f64 x;
- ib_token_t next = saw_parse_float(tok, &x);
+ ib_token_t next = parse_float(tok, &x);
if (next.status == KIT_OK) {
tok = next;
@@ -1356,7 +2137,7 @@ static ib_token_t saw_parse_track(ib_token_t tok,
return tok;
}
-static void saw_project_parse_file(str_t file_name) {
+void project_parse_file(str_t file_name) {
FILE *f = fopen(BS(file_name), "rb");
if (f == NULL) {
@@ -1366,15 +2147,15 @@ static void saw_project_parse_file(str_t file_name) {
}
is_handle_t in = is_wrap_file(f, NULL);
- input_buffer_t buf = ib_wrap(in, NULL);
+ input_buffer_t buf = ib_init(in, NULL);
ib_token_t last = ib_token(&buf);
- memset(saw_rolls, 0, sizeof saw_rolls);
- memset(saw_tracks, 0, sizeof saw_tracks);
+ memset(rolls, 0, sizeof rolls);
+ memset(tracks, 0, sizeof tracks);
- saw_current_roll = -1;
- saw_current_track = 0;
+ current_roll = -1;
+ current_track = 0;
i64 roll_index = 0;
i64 track_index = 0;
@@ -1385,12 +2166,12 @@ static void saw_project_parse_file(str_t file_name) {
// Parse roll
//
{
- saw_roll_t roll;
- tok = saw_parse_roll(last, &roll);
+ Roll roll;
+ tok = parse_roll(last, &roll);
if (tok.status == KIT_OK) {
if (roll_index < ROLL_COUNT)
- saw_rolls[roll_index++] = roll;
+ rolls[roll_index++] = roll;
else {
printf("Too many rolls.\n");
fflush(stdout);
@@ -1405,12 +2186,12 @@ static void saw_project_parse_file(str_t file_name) {
// Parse track
//
{
- saw_track_t track;
- tok = saw_parse_track(last, &track);
+ Track track;
+ tok = parse_track(last, &track);
if (tok.status == KIT_OK) {
if (track_index < TRACK_COUNT)
- saw_tracks[track_index++] = track;
+ tracks[track_index++] = track;
else {
printf("Too many tracks.\n");
fflush(stdout);
@@ -1429,20 +2210,20 @@ static void saw_project_parse_file(str_t file_name) {
is_destroy(in);
for (i64 i = 0; i < ROLL_COUNT; ++i)
- if (saw_rolls[i].enabled) {
- saw_current_roll = i;
+ if (rolls[i].enabled) {
+ current_roll = i;
break;
}
}
-static void saw_project_print_to_file(str_t file_name) {
- printf("Save project: %s\n", BS(saw_project_file));
+void project_print_to_file(str_t file_name) {
+ printf("Save project: %s\n", BS(file_name));
fflush(stdout);
- FILE *f = fopen(BS(saw_project_file), "wb");
+ FILE *f = fopen(BS(file_name), "wb");
if (f == NULL) {
- printf("Failed to write file: %s\n", BS(saw_project_file));
+ printf("Failed to write file: %s\n", BS(file_name));
fflush(stdout);
return;
}
@@ -1453,11 +2234,11 @@ static void saw_project_print_to_file(str_t file_name) {
i32 total_rolls = 0;
for (i64 i = 0; i < ROLL_COUNT; i++)
- if (saw_rolls[i].enabled)
+ if (rolls[i].enabled)
total_rolls = i + 1;
for (i64 i = 0; i < total_rolls; i++) {
- saw_roll_t *roll = saw_rolls + i;
+ Roll *roll = rolls + i;
fprintf(f, "roll {\n");
@@ -1502,7 +2283,7 @@ static void saw_project_print_to_file(str_t file_name) {
//
for (i64 i = 0; i < TRACK_COUNT; i++) {
- saw_track_t *track = saw_tracks + i;
+ Track *track = tracks + i;
fprintf(f, "track {\n");
@@ -1510,7 +2291,7 @@ static void saw_project_print_to_file(str_t file_name) {
switch (track->instrument) {
case INSTRUMENT_OSCILLATOR: {
- saw_oscillator_t *osc = &track->oscillator;
+ Oscillator *osc = &track->oscillator;
fprintf(f, " wave %d\n", osc->wave);
fprintf(f, " warp %f\n", osc->warp);
@@ -1524,7 +2305,7 @@ static void saw_project_print_to_file(str_t file_name) {
} break;
case INSTRUMENT_SAMPLER: {
- saw_sampler_t *sam = &track->sampler;
+ Sampler *sam = &track->sampler;
fprintf(f, " data ");
for (i64 i = 0; i < sam->data.size; i++)
@@ -1561,18 +2342,18 @@ static void saw_project_print_to_file(str_t file_name) {
//
// ================================================================
-static void saw_ui_begin(void) {
- saw_ui_input_index = 0;
+void ui_begin(void) {
+ ui_input_index = 0;
}
-static void saw_ui_end(void) {
- if (saw_ui_input_active != -1 && !saw_lbutton_down) {
+void ui_end(void) {
+ if (ui_input_active != -1 && !lbutton_down) {
assert(0);
// Make sure to deactivate the input when the mouse button is not
// down.
- saw_ui_input_active = -1;
+ ui_input_active = -1;
#ifndef __EMSCRIPTEN__
sapp_lock_mouse(0);
@@ -1580,45 +2361,45 @@ static void saw_ui_end(void) {
}
}
-static b8 saw_ui_button(f64 x0, f64 y0, f64 width, f64 height,
+b8 ui_button(f64 x0, f64 y0, f64 width, f64 height,
i64 color_index, str_t icon, str_t label,
b8 is_active) {
- b8 has_cursor = saw_mouse_x >= x0 && saw_mouse_x < x0 + width &&
- saw_mouse_y >= y0 && saw_mouse_y < y0 + height;
- saw_ui_color_t c = saw_ui_colors[color_index];
+ b8 has_cursor = mouse_x >= x0 && mouse_x < x0 + width &&
+ mouse_y >= y0 && mouse_y < y0 + height;
+ UI_Color c = ui_colors[color_index];
if (has_cursor)
- nvgFillColor(saw_nvg, nvgRGBAf(c.hover[0], c.hover[1], c.hover[2],
+ nvgFillColor(nvg, nvgRGBAf(c.hover[0], c.hover[1], c.hover[2],
c.hover[3]));
else if (is_active)
- nvgFillColor(saw_nvg, nvgRGBAf(c.active[0], c.active[1],
+ nvgFillColor(nvg, nvgRGBAf(c.active[0], c.active[1],
c.active[2], c.active[3]));
else
- nvgFillColor(saw_nvg, nvgRGBAf(c.normal[0], c.normal[1],
+ nvgFillColor(nvg, nvgRGBAf(c.normal[0], c.normal[1],
c.normal[2], c.normal[3]));
if (icon.size > 0) {
- nvgFontSize(saw_nvg, height * .6);
- nvgFontFaceId(saw_nvg, saw_font_icons);
- nvgTextAlign(saw_nvg, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE);
- nvgText(saw_nvg, x0 + height * .5, y0 + height * .5, icon.values,
+ nvgFontSize(nvg, height * .6);
+ nvgFontFaceId(nvg, font_icons);
+ nvgTextAlign(nvg, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE);
+ nvgText(nvg, x0 + height * .5, y0 + height * .5, icon.values,
icon.values + icon.size);
x0 += height;
width -= height * 2.;
}
if (label.size > 0) {
- nvgFontSize(saw_nvg, height * .8);
- nvgFontFaceId(saw_nvg, saw_font_text);
- nvgTextAlign(saw_nvg, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE);
- nvgText(saw_nvg, x0 + width * .5, y0 + height * .5, label.values,
+ nvgFontSize(nvg, height * .8);
+ nvgFontFaceId(nvg, font_text);
+ nvgTextAlign(nvg, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE);
+ nvgText(nvg, x0 + width * .5, y0 + height * .5, label.values,
label.values + label.size);
}
- return saw_lbutton_click && has_cursor;
+ return lbutton_click && has_cursor;
}
-static void saw_ui_value_float(f64 x0, f64 y0, f64 width, f64 height,
+void ui_value_float(f64 x0, f64 y0, f64 width, f64 height,
i64 color_index, str_t label,
f64 scale, f64 min, f64 max,
f64 *data) {
@@ -1626,37 +2407,37 @@ static void saw_ui_value_float(f64 x0, f64 y0, f64 width, f64 height,
if (data == NULL || !(scale < -EPS || scale > EPS))
return;
- b8 has_cursor = saw_mouse_x >= x0 && saw_mouse_x < x0 + width &&
- saw_mouse_y >= y0 && saw_mouse_y < y0 + height;
- saw_ui_color_t c = saw_ui_colors[color_index];
+ b8 has_cursor = mouse_x >= x0 && mouse_x < x0 + width &&
+ mouse_y >= y0 && mouse_y < y0 + height;
+ UI_Color c = ui_colors[color_index];
// Process input
//
{
- if (saw_ui_input_active == -1 && has_cursor &&
- saw_lbutton_click) {
- saw_ui_input_active = saw_ui_input_index;
- saw_ui_input_buffer = *data * scale;
+ if (ui_input_active == -1 && has_cursor &&
+ lbutton_click) {
+ ui_input_active = ui_input_index;
+ ui_input_buffer = *data * scale;
#ifndef __EMSCRIPTEN__
sapp_lock_mouse(1);
#endif
}
- if (saw_ui_input_active == saw_ui_input_index) {
- if (saw_lbutton_down) {
- saw_ui_input_buffer -= saw_shift_on ? saw_mouse_dy * 300.
- : saw_ctrl_on ? saw_mouse_dy
- : saw_mouse_dy * 20.;
+ if (ui_input_active == ui_input_index) {
+ if (lbutton_down) {
+ ui_input_buffer -= shift_on ? mouse_dy * 300.
+ : ctrl_on ? mouse_dy
+ : mouse_dy * 20.;
} else {
- saw_ui_input_active = -1;
+ ui_input_active = -1;
#ifndef __EMSCRIPTEN__
sapp_lock_mouse(0);
#endif
}
- *data = saw_ui_input_buffer / scale;
+ *data = ui_input_buffer / scale;
}
if (*data < min)
@@ -1668,83 +2449,83 @@ static void saw_ui_value_float(f64 x0, f64 y0, f64 width, f64 height,
// Draw UI
//
{
- if (saw_ui_input_active == saw_ui_input_index ||
- (saw_ui_input_active == -1 && has_cursor)) {
- nvgBeginPath(saw_nvg);
- nvgRect(saw_nvg, x0 + width * .5, y0, width * .5, height);
- nvgFillColor(saw_nvg, nvgRGBAf(.9f, .95f, .9f, .5f));
- nvgFill(saw_nvg);
+ if (ui_input_active == ui_input_index ||
+ (ui_input_active == -1 && has_cursor)) {
+ nvgBeginPath(nvg);
+ nvgRect(nvg, x0 + width * .5, y0, width * .5, height);
+ nvgFillColor(nvg, nvgRGBAf(.9f, .95f, .9f, .5f));
+ nvgFill(nvg);
}
- nvgFontSize(saw_nvg, height * .8);
- nvgFontFaceId(saw_nvg, saw_font_text);
+ nvgFontSize(nvg, height * .8);
+ nvgFontFaceId(nvg, font_text);
if (label.size > 0) {
- nvgFillColor(saw_nvg, nvgRGBAf(c.normal[0], c.normal[1],
+ nvgFillColor(nvg, nvgRGBAf(c.normal[0], c.normal[1],
c.normal[2], c.normal[3]));
- nvgTextAlign(saw_nvg, NVG_ALIGN_LEFT | NVG_ALIGN_MIDDLE);
- nvgText(saw_nvg, x0, y0 + height * 5. * .125, label.values,
+ nvgTextAlign(nvg, NVG_ALIGN_LEFT | NVG_ALIGN_MIDDLE);
+ nvgText(nvg, x0, y0 + height * 5. * .125, label.values,
label.values + label.size);
x0 += width / 2;
}
if (has_cursor)
- nvgFillColor(saw_nvg, nvgRGBAf(c.hover[0], c.hover[1],
+ nvgFillColor(nvg, nvgRGBAf(c.hover[0], c.hover[1],
c.hover[2], c.hover[3]));
else
- nvgFillColor(saw_nvg, nvgRGBAf(c.active[0], c.active[1],
+ nvgFillColor(nvg, nvgRGBAf(c.active[0], c.active[1],
c.active[2], c.active[3]));
- nvgTextAlign(saw_nvg, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE);
+ nvgTextAlign(nvg, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE);
c8 buf[256];
sprintf(buf, "%.3f", (f32) *data);
- nvgText(saw_nvg, x0 + width * .25, y0 + height * 5. * .125, buf,
+ nvgText(nvg, x0 + width * .25, y0 + height * 5. * .125, buf,
NULL);
}
// Increment UI element input index
//
- ++saw_ui_input_index;
+ ++ui_input_index;
}
-static void saw_ui_value_int(f64 x0, f64 y0, f64 width, f64 height,
+void ui_value_int(f64 x0, f64 y0, f64 width, f64 height,
i64 color_index, str_t label, f64 scale,
i64 min, i64 max, i64 *data) {
assert(data != NULL && (scale < -EPS || scale > EPS));
if (data == NULL || !(scale < -EPS || scale > EPS))
return;
- b8 has_cursor = saw_mouse_x >= x0 && saw_mouse_x < x0 + width &&
- saw_mouse_y >= y0 && saw_mouse_y < y0 + height;
- saw_ui_color_t c = saw_ui_colors[color_index];
+ b8 has_cursor = mouse_x >= x0 && mouse_x < x0 + width &&
+ mouse_y >= y0 && mouse_y < y0 + height;
+ UI_Color c = ui_colors[color_index];
// Process input
//
{
- if (saw_ui_input_active == -1 && has_cursor &&
- saw_lbutton_click) {
- saw_ui_input_active = saw_ui_input_index;
- saw_ui_input_buffer = (f64) *data * scale;
+ if (ui_input_active == -1 && has_cursor &&
+ lbutton_click) {
+ ui_input_active = ui_input_index;
+ ui_input_buffer = (f64) *data * scale;
#ifndef __EMSCRIPTEN__
sapp_lock_mouse(1);
#endif
}
- if (saw_ui_input_active == saw_ui_input_index) {
- if (saw_lbutton_down) {
- saw_ui_input_buffer -= saw_shift_on ? saw_mouse_dy * 300.
- : saw_ctrl_on ? saw_mouse_dy
- : saw_mouse_dy * 20.;
+ if (ui_input_active == ui_input_index) {
+ if (lbutton_down) {
+ ui_input_buffer -= shift_on ? mouse_dy * 300.
+ : ctrl_on ? mouse_dy
+ : mouse_dy * 20.;
} else {
- saw_ui_input_active = -1;
+ ui_input_active = -1;
#ifndef __EMSCRIPTEN__
sapp_lock_mouse(0);
#endif
}
- *data = (i64) floor(saw_ui_input_buffer / scale + .5);
+ *data = (i64) floor(ui_input_buffer / scale + .5);
}
if (*data < min)
@@ -1756,46 +2537,46 @@ static void saw_ui_value_int(f64 x0, f64 y0, f64 width, f64 height,
// Draw UI
//
{
- if (saw_ui_input_active == saw_ui_input_index ||
- (saw_ui_input_active == -1 && has_cursor)) {
- nvgBeginPath(saw_nvg);
- nvgRect(saw_nvg, x0 + width * .5, y0, width * .5, height);
- nvgFillColor(saw_nvg, nvgRGBAf(.9f, .95f, .9f, .5f));
- nvgFill(saw_nvg);
+ if (ui_input_active == ui_input_index ||
+ (ui_input_active == -1 && has_cursor)) {
+ nvgBeginPath(nvg);
+ nvgRect(nvg, x0 + width * .5, y0, width * .5, height);
+ nvgFillColor(nvg, nvgRGBAf(.9f, .95f, .9f, .5f));
+ nvgFill(nvg);
}
- nvgFontSize(saw_nvg, (height * 4) / 5);
- nvgFontFaceId(saw_nvg, saw_font_text);
+ nvgFontSize(nvg, (height * 4) / 5);
+ nvgFontFaceId(nvg, font_text);
if (label.size > 0) {
- nvgFillColor(saw_nvg, nvgRGBAf(c.normal[0], c.normal[1],
+ nvgFillColor(nvg, nvgRGBAf(c.normal[0], c.normal[1],
c.normal[2], c.normal[3]));
- nvgTextAlign(saw_nvg, NVG_ALIGN_LEFT | NVG_ALIGN_MIDDLE);
- nvgText(saw_nvg, x0, y0 + (height * 5) / 8, label.values,
+ nvgTextAlign(nvg, NVG_ALIGN_LEFT | NVG_ALIGN_MIDDLE);
+ nvgText(nvg, x0, y0 + (height * 5) / 8, label.values,
label.values + label.size);
x0 += width / 2;
}
if (has_cursor)
- nvgFillColor(saw_nvg, nvgRGBAf(c.hover[0], c.hover[1],
+ nvgFillColor(nvg, nvgRGBAf(c.hover[0], c.hover[1],
c.hover[2], c.hover[3]));
else
- nvgFillColor(saw_nvg, nvgRGBAf(c.active[0], c.active[1],
+ nvgFillColor(nvg, nvgRGBAf(c.active[0], c.active[1],
c.active[2], c.active[3]));
- nvgTextAlign(saw_nvg, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE);
+ nvgTextAlign(nvg, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE);
c8 buf[256];
sprintf(buf, "%lld", *data);
- nvgText(saw_nvg, x0 + width * .25, y0 + (height * 5.) * .125, buf,
+ nvgText(nvg, x0 + width * .25, y0 + (height * 5.) * .125, buf,
NULL);
}
// Increment UI element input index
//
- ++saw_ui_input_index;
+ ++ui_input_index;
}
-static void saw_ui_value_list(f64 x0, f64 y0, f64 width, f64 height,
+void ui_value_list(f64 x0, f64 y0, f64 width, f64 height,
i64 color_index, str_t label, f64 scale,
i64 size, str_t *names, i32 *data) {
assert(data != NULL && names != NULL &&
@@ -1803,37 +2584,37 @@ static void saw_ui_value_list(f64 x0, f64 y0, f64 width, f64 height,
if (data == NULL || names == NULL || !(scale < -EPS || scale > EPS))
return;
- b8 has_cursor = saw_mouse_x >= x0 && saw_mouse_x < x0 + width &&
- saw_mouse_y >= y0 && saw_mouse_y < y0 + height;
- saw_ui_color_t c = saw_ui_colors[color_index];
+ b8 has_cursor = mouse_x >= x0 && mouse_x < x0 + width &&
+ mouse_y >= y0 && mouse_y < y0 + height;
+ UI_Color c = ui_colors[color_index];
// Process input
//
{
- if (saw_ui_input_active == -1 && has_cursor &&
- saw_lbutton_click) {
- saw_ui_input_active = saw_ui_input_index;
- saw_ui_input_buffer = (f64) *data * scale;
+ if (ui_input_active == -1 && has_cursor &&
+ lbutton_click) {
+ ui_input_active = ui_input_index;
+ ui_input_buffer = (f64) *data * scale;
#ifndef __EMSCRIPTEN__
sapp_lock_mouse(1);
#endif
}
- if (saw_ui_input_active == saw_ui_input_index) {
- if (saw_lbutton_down) {
- saw_ui_input_buffer -= saw_shift_on ? saw_mouse_dy * 300.
- : saw_ctrl_on ? saw_mouse_dy
- : saw_mouse_dy * 20.;
+ if (ui_input_active == ui_input_index) {
+ if (lbutton_down) {
+ ui_input_buffer -= shift_on ? mouse_dy * 300.
+ : ctrl_on ? mouse_dy
+ : mouse_dy * 20.;
} else {
- saw_ui_input_active = -1;
+ ui_input_active = -1;
#ifndef __EMSCRIPTEN__
sapp_lock_mouse(0);
#endif
}
- *data = (i32) floor(saw_ui_input_buffer / scale + .5);
+ *data = (i32) floor(ui_input_buffer / scale + .5);
}
if (*data < 0)
@@ -1845,61 +2626,63 @@ static void saw_ui_value_list(f64 x0, f64 y0, f64 width, f64 height,
// Draw UI
//
{
- if (saw_ui_input_active == saw_ui_input_index ||
- (saw_ui_input_active == -1 && has_cursor)) {
- nvgBeginPath(saw_nvg);
- nvgRect(saw_nvg, x0 + width * .5, y0, width * .5, height);
- nvgFillColor(saw_nvg, nvgRGBAf(.9f, .95f, .9f, .5f));
- nvgFill(saw_nvg);
+ if (ui_input_active == ui_input_index ||
+ (ui_input_active == -1 && has_cursor)) {
+ nvgBeginPath(nvg);
+ nvgRect(nvg, x0 + width * .5, y0, width * .5, height);
+ nvgFillColor(nvg, nvgRGBAf(.9f, .95f, .9f, .5f));
+ nvgFill(nvg);
}
- nvgFontSize(saw_nvg, height * .8);
- nvgFontFaceId(saw_nvg, saw_font_text);
+ nvgFontSize(nvg, height * .8);
+ nvgFontFaceId(nvg, font_text);
if (label.size > 0) {
- nvgFillColor(saw_nvg, nvgRGBAf(c.normal[0], c.normal[1],
+ nvgFillColor(nvg, nvgRGBAf(c.normal[0], c.normal[1],
c.normal[2], c.normal[3]));
- nvgTextAlign(saw_nvg, NVG_ALIGN_LEFT | NVG_ALIGN_MIDDLE);
- nvgText(saw_nvg, x0, y0 + height * 5 * .125, label.values,
+ nvgTextAlign(nvg, NVG_ALIGN_LEFT | NVG_ALIGN_MIDDLE);
+ nvgText(nvg, x0, y0 + height * 5 * .125, label.values,
label.values + label.size);
x0 += width / 2;
}
if (has_cursor)
- nvgFillColor(saw_nvg, nvgRGBAf(c.hover[0], c.hover[1],
+ nvgFillColor(nvg, nvgRGBAf(c.hover[0], c.hover[1],
c.hover[2], c.hover[3]));
else
- nvgFillColor(saw_nvg, nvgRGBAf(c.active[0], c.active[1],
+ nvgFillColor(nvg, nvgRGBAf(c.active[0], c.active[1],
c.active[2], c.active[3]));
- nvgTextAlign(saw_nvg, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE);
+ nvgTextAlign(nvg, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE);
str_t s = names[*data];
- nvgText(saw_nvg, x0 + width * .25, y0 + height * 5 * .125,
+ nvgText(nvg, x0 + width * .25, y0 + height * 5 * .125,
s.values, s.values + s.size);
}
// Increment UI element input index
//
- ++saw_ui_input_index;
+ ++ui_input_index;
}
-static void saw_ui_grid(saw_ui_grid_t *grid) {
+void ui_grid(UI_Grid *grid) {
// TODO
//
+
+ (void) grid;
}
-static void saw_ui_reset_offset(void) {
- if (saw_current_roll != -1) {
- saw_rolls[saw_current_roll].ui_offset_x = 0.;
- saw_rolls[saw_current_roll].ui_offset_y =
+void ui_reset_offset(void) {
+ if (current_roll != -1) {
+ rolls[current_roll].ui_offset_x = 0.;
+ rolls[current_roll].ui_offset_y =
ROLL_DEFAULT_UI_OFFSET_Y;
}
- saw_compose.ui_offset_x = 0.;
- saw_compose.ui_offset_y = 0.;
+ compose.ui_offset_x = 0.;
+ compose.ui_offset_y = 0.;
}
-static void saw_ui_header(f64 x0, f64 y0, f64 width, f64 height) {
+void ui_header(f64 x0, f64 y0, f64 width, f64 height) {
if (height > 2. * width / 15.)
height = 2. * width / 15.;
@@ -1918,44 +2701,44 @@ static void saw_ui_header(f64 x0, f64 y0, f64 width, f64 height) {
// Global actions
//
- if (saw_ui_button(x, y0, s, s, TINT_WHITE, SZ(backward_fast),
+ if (ui_button(x, y0, s, s, TINT_WHITE, SZ(backward_fast),
SZ(""), 1))
- saw_playback_frame = 0;
+ playback_frame = 0;
x += s;
- if (saw_ui_button(x, y0, s, s, TINT_WHITE,
- saw_playback_on ? SZ(stop) : SZ(play), SZ(""), 1))
- saw_playback_on = !saw_playback_on;
+ if (ui_button(x, y0, s, s, TINT_WHITE,
+ playback_on ? SZ(stop) : SZ(play), SZ(""), 1))
+ playback_on = !playback_on;
x += s;
- if (saw_ui_button(x, y0, s, s, TINT_WHITE, SZ(anchor), SZ(""), 1))
- saw_ui_reset_offset();
+ if (ui_button(x, y0, s, s, TINT_WHITE, SZ(anchor), SZ(""), 1))
+ ui_reset_offset();
x += s + s / 2;
// Editing mode
//
- if (saw_ui_button(x, y0, s, s, TINT_ORANGE, SZ(hand_pointer),
- SZ(""), saw_edit_mode == EDIT_MODE_HAND))
- saw_edit_mode = EDIT_MODE_HAND;
+ if (ui_button(x, y0, s, s, TINT_ORANGE, SZ(hand_pointer),
+ SZ(""), edit_mode == EDIT_MODE_HAND))
+ edit_mode = EDIT_MODE_HAND;
x += s;
- if (saw_ui_button(x, y0, s, s, TINT_ORANGE, SZ(eraser), SZ(""),
- saw_edit_mode == EDIT_MODE_ERASE))
- saw_edit_mode = EDIT_MODE_ERASE;
+ if (ui_button(x, y0, s, s, TINT_ORANGE, SZ(eraser), SZ(""),
+ edit_mode == EDIT_MODE_ERASE))
+ edit_mode = EDIT_MODE_ERASE;
x += s;
- if (saw_ui_button(x, y0, s, s, TINT_ORANGE, SZ(panning), SZ(""),
- saw_edit_mode == EDIT_MODE_PAN))
- saw_edit_mode = EDIT_MODE_PAN;
+ if (ui_button(x, y0, s, s, TINT_ORANGE, SZ(panning), SZ(""),
+ edit_mode == EDIT_MODE_PAN))
+ edit_mode = EDIT_MODE_PAN;
x += s;
- if (saw_ui_button(x, y0, s, s, TINT_ORANGE, SZ(clone), SZ(""),
- saw_edit_mode == EDIT_MODE_CLONE))
- saw_edit_mode = EDIT_MODE_CLONE;
+ if (ui_button(x, y0, s, s, TINT_ORANGE, SZ(clone), SZ(""),
+ edit_mode == EDIT_MODE_CLONE))
+ edit_mode = EDIT_MODE_CLONE;
}
-static void saw_ui_compose(f64 x0, f64 y0, f64 width, f64 height) {
+void ui_compose(f64 x0, f64 y0, f64 width, f64 height) {
f64 track_height = 60.;
f64 grid_scale = 50.;
f64 grid_rate = 3.;
@@ -1968,13 +2751,13 @@ static void saw_ui_compose(f64 x0, f64 y0, f64 width, f64 height) {
// Time bar
//
- nvgBeginPath(saw_nvg);
- nvgRect(saw_nvg, x0, y0 + border, width,
+ nvgBeginPath(nvg);
+ nvgRect(nvg, x0, y0 + border, width,
track_height * .2 - border * 2.);
- nvgRect(saw_nvg, x0, y0 + border + track_height * .8, width,
+ nvgRect(nvg, x0, y0 + border + track_height * .8, width,
track_height * .2 - border * 2.);
- nvgFillColor(saw_nvg, nvgRGBAf(.7f, .6f, .5f, .65f));
- nvgFill(saw_nvg);
+ nvgFillColor(nvg, nvgRGBAf(.7f, .6f, .5f, .65f));
+ nvgFill(nvg);
// Tracks
//
@@ -1982,17 +2765,17 @@ static void saw_ui_compose(f64 x0, f64 y0, f64 width, f64 height) {
b8 hover_any = 0;
for (i64 i = 0; i < ROLL_COUNT; i++) {
- saw_roll_t *roll = saw_rolls + i;
+ Roll *roll = rolls + i;
if (!roll->enabled)
continue;
f64 top = y0 + track_height;
f64 bottom = y0 + height;
- f64 dx = x0 + saw_compose.ui_offset_x;
+ f64 dx = x0 + compose.ui_offset_x;
f64 l = dx + (roll->time * grid_scale) / SAMPLE_RATE;
f64 r = l + (roll->duration * grid_scale) / SAMPLE_RATE;
- f64 u = top + saw_compose.ui_offset_y +
+ f64 u = top + compose.ui_offset_y +
roll->track * track_height;
f64 d = u + track_height;
@@ -2017,58 +2800,58 @@ static void saw_ui_compose(f64 x0, f64 y0, f64 width, f64 height) {
f64 y = u;
f64 h = d - u;
- b8 is_choosen = (saw_current_roll == i);
+ b8 is_choosen = (current_roll == i);
- b8 is_playing = saw_playback_on &&
- saw_playback_frame >= roll->time &&
- saw_playback_frame < roll->time + roll->duration;
+ b8 is_playing = playback_on &&
+ playback_frame >= roll->time &&
+ playback_frame < roll->time + roll->duration;
- b8 has_cursor = (saw_compose.grid_input &&
- saw_compose.grid_roll == i) ||
- (saw_mouse_x >= x && saw_mouse_x < x + w &&
- saw_mouse_y >= y && saw_mouse_y < y + h);
+ b8 has_cursor = (compose.grid_input &&
+ compose.grid_roll == i) ||
+ (mouse_x >= x && mouse_x < x + w &&
+ mouse_y >= y && mouse_y < y + h);
- nvgBeginPath(saw_nvg);
- nvgRect(saw_nvg, x + border, y + border, w - border * 2.,
+ nvgBeginPath(nvg);
+ nvgRect(nvg, x + border, y + border, w - border * 2.,
h - border * 2.);
- nvgFillColor(saw_nvg, is_choosen ? nvgRGBAf(.9f, .8f, .7f, 1.f)
+ nvgFillColor(nvg, is_choosen ? nvgRGBAf(.9f, .8f, .7f, 1.f)
: is_playing ? nvgRGBAf(.9f, .8f, .7f, .9f)
: has_cursor
? nvgRGBAf(.8f, .8f, 1.f, 1.f)
: nvgRGBAf(.7f, .6f, .6f, .8f));
- nvgFill(saw_nvg);
+ nvgFill(nvg);
if (has_cursor) {
- if (saw_rbutton_down ||
- (saw_edit_mode == EDIT_MODE_ERASE && saw_lbutton_down)) {
- if (saw_current_roll == i)
- saw_current_roll = -1;
+ if (rbutton_down ||
+ (edit_mode == EDIT_MODE_ERASE && lbutton_down)) {
+ if (current_roll == i)
+ current_roll = -1;
roll->enabled = 0;
} else {
- if (saw_edit_mode == EDIT_MODE_HAND && saw_lbutton_click) {
- if (saw_current_roll == i) {
+ if (edit_mode == EDIT_MODE_HAND && lbutton_click) {
+ if (current_roll == i) {
i64 cell = (i64) floor(
- ((saw_mouse_x - saw_compose.ui_offset_x) *
+ ((mouse_x - compose.ui_offset_x) *
grid_rate) /
grid_scale);
i64 c0 = (i64) floor((roll->time * grid_rate) /
SAMPLE_RATE);
i64 c1 = c0 + (i64) floor((roll->duration * grid_rate) /
SAMPLE_RATE);
- saw_compose.grid_input = 1;
- saw_compose.grid_roll = saw_current_roll;
+ compose.grid_input = 1;
+ compose.grid_roll = current_roll;
if (cell - c0 > c1 - cell) {
- saw_compose.grid_cell = c0;
+ compose.grid_cell = c0;
roll->duration = (i64) floor(
((cell - c0 + 1) * SAMPLE_RATE) / grid_rate);
} else {
- saw_compose.grid_cell = c1 - 1;
+ compose.grid_cell = c1 - 1;
roll->duration = (i64) floor(
((c1 - cell + 1) * SAMPLE_RATE) / grid_rate);
}
} else {
- saw_current_roll = i;
- saw_current_track = roll->track;
+ current_roll = i;
+ current_track = roll->track;
}
}
hover_any = 1;
@@ -2079,38 +2862,38 @@ static void saw_ui_compose(f64 x0, f64 y0, f64 width, f64 height) {
// Placing new sheet
//
- if (!hover_any && saw_edit_mode == EDIT_MODE_HAND &&
- saw_lbutton_down &&
- saw_mouse_x >= x0 + saw_compose.ui_offset_x &&
- saw_mouse_x < x0 + width) {
- if (!saw_compose.grid_input && saw_mouse_y >= y0 &&
- saw_mouse_y < y0 + track_height)
- saw_playback_frame = ((saw_mouse_x - saw_compose.ui_offset_x) *
+ if (!hover_any && edit_mode == EDIT_MODE_HAND &&
+ lbutton_down &&
+ mouse_x >= x0 + compose.ui_offset_x &&
+ mouse_x < x0 + width) {
+ if (!compose.grid_input && mouse_y >= y0 &&
+ mouse_y < y0 + track_height)
+ playback_frame = ((mouse_x - compose.ui_offset_x) *
SAMPLE_RATE) /
grid_scale;
- else if (saw_edit_mode == EDIT_MODE_HAND && saw_lbutton_click &&
- saw_mouse_y >= y0 + track_height &&
- saw_mouse_y < y0 + height) {
+ else if (edit_mode == EDIT_MODE_HAND && lbutton_click &&
+ mouse_y >= y0 + track_height &&
+ mouse_y < y0 + height) {
i64 track = (i64) floor(
- (saw_mouse_y - saw_compose.ui_offset_y - y0) /
+ (mouse_y - compose.ui_offset_y - y0) /
track_height) -
1;
i64 cell = (i64) floor(
- ((saw_mouse_x - saw_compose.ui_offset_x) * grid_rate) /
+ ((mouse_x - compose.ui_offset_x) * grid_rate) /
grid_scale);
i64 frame = (i64) floor((cell * SAMPLE_RATE) / grid_rate);
i64 n = -1;
for (i64 i = 0; i < ROLL_COUNT; i++)
- if (!saw_rolls[i].enabled) {
+ if (!rolls[i].enabled) {
n = i;
break;
}
- f64 x = x0 + saw_compose.ui_offset_x +
+ f64 x = x0 + compose.ui_offset_x +
(frame * grid_scale) / SAMPLE_RATE;
- f64 y = y0 + track_height + saw_compose.ui_offset_y +
+ f64 y = y0 + track_height + compose.ui_offset_y +
track * track_height;
if (track < 0 || track >= TRACK_COUNT || x < x0 ||
@@ -2119,11 +2902,11 @@ static void saw_ui_compose(f64 x0, f64 y0, f64 width, f64 height) {
n = -1;
if (n != -1) {
- saw_compose.grid_input = 1;
- saw_compose.grid_roll = n;
- saw_compose.grid_cell = cell;
+ compose.grid_input = 1;
+ compose.grid_roll = n;
+ compose.grid_cell = cell;
- saw_rolls[n] = (saw_roll_t) {
+ rolls[n] = (Roll) {
.enabled = 1,
.track = track,
.pitch_turned_off = { 0 },
@@ -2140,10 +2923,10 @@ static void saw_ui_compose(f64 x0, f64 y0, f64 width, f64 height) {
.ui_offset_y = ROLL_DEFAULT_UI_OFFSET_Y,
};
- saw_tuning_equal_temperament(saw_rolls[n].tuning);
+ tuning_equal_temperament(rolls[n].tuning);
- saw_current_roll = n;
- saw_current_track = track;
+ current_roll = n;
+ current_track = track;
}
}
}
@@ -2151,19 +2934,19 @@ static void saw_ui_compose(f64 x0, f64 y0, f64 width, f64 height) {
// Duplicate selected sheet
//
- if (saw_compose.duplicate_input) {
- saw_compose.duplicate_input = 0;
+ if (compose.duplicate_input) {
+ compose.duplicate_input = 0;
do {
- if (saw_current_roll == -1)
+ if (current_roll == -1)
break;
i64 track = (i64) floor(
- (saw_mouse_y - saw_compose.ui_offset_y - y0) /
+ (mouse_y - compose.ui_offset_y - y0) /
track_height) -
1;
i64 cell = (i64) floor(
- ((saw_mouse_x - saw_compose.ui_offset_x) * grid_rate) /
+ ((mouse_x - compose.ui_offset_x) * grid_rate) /
grid_scale);
if (cell < 0 || track < 0 || track >= TRACK_COUNT)
@@ -2173,12 +2956,12 @@ static void saw_ui_compose(f64 x0, f64 y0, f64 width, f64 height) {
i64 n = -1;
- saw_roll_t *roll = saw_rolls + saw_current_roll;
+ Roll *roll = rolls + current_roll;
b8 collision = 0;
for (i64 i = 0; i < ROLL_COUNT; i++) {
- saw_roll_t *p = saw_rolls + i;
+ Roll *p = rolls + i;
if (p->enabled && p->track == track &&
((p->time >= frame && p->time < frame + roll->duration) ||
@@ -2192,7 +2975,7 @@ static void saw_ui_compose(f64 x0, f64 y0, f64 width, f64 height) {
break;
for (i64 i = 0; i < ROLL_COUNT; i++)
- if (!saw_rolls[i].enabled) {
+ if (!rolls[i].enabled) {
n = i;
break;
}
@@ -2200,74 +2983,74 @@ static void saw_ui_compose(f64 x0, f64 y0, f64 width, f64 height) {
if (n == -1)
break;
- saw_rolls[n] = *roll;
- saw_rolls[n].track = track;
- saw_rolls[n].time = frame;
+ rolls[n] = *roll;
+ rolls[n].track = track;
+ rolls[n].time = frame;
} while (0);
}
// Panning input
//
- if (saw_mbutton_click ||
- (saw_edit_mode == EDIT_MODE_PAN && saw_lbutton_click)) {
- if (saw_mouse_x >= x0 && saw_mouse_y >= y0 + track_height &&
- saw_mouse_x < x0 + width && saw_mouse_y < y0 + height)
- saw_compose.ui_offset_input = 1;
+ if (mbutton_click ||
+ (edit_mode == EDIT_MODE_PAN && lbutton_click)) {
+ if (mouse_x >= x0 && mouse_y >= y0 + track_height &&
+ mouse_x < x0 + width && mouse_y < y0 + height)
+ compose.ui_offset_input = 1;
}
- if (!(saw_mbutton_down ||
- (saw_edit_mode == EDIT_MODE_PAN && saw_lbutton_down)))
- saw_compose.ui_offset_input = 0;
+ if (!(mbutton_down ||
+ (edit_mode == EDIT_MODE_PAN && lbutton_down)))
+ compose.ui_offset_input = 0;
// Track stretching input
//
- if (saw_compose.grid_input) {
- if (saw_edit_mode == EDIT_MODE_HAND && saw_lbutton_down) {
+ if (compose.grid_input) {
+ if (edit_mode == EDIT_MODE_HAND && lbutton_down) {
i64 cell = (i64) floor(
- ((saw_mouse_x - saw_compose.ui_offset_x) * grid_rate) /
+ ((mouse_x - compose.ui_offset_x) * grid_rate) /
grid_scale);
- saw_roll_t *p = saw_rolls + saw_compose.grid_roll;
+ Roll *p = rolls + compose.grid_roll;
if (cell >= 0) {
- if (saw_compose.grid_cell <= cell) {
- p->time = (saw_compose.grid_cell * SAMPLE_RATE) / grid_rate;
+ if (compose.grid_cell <= cell) {
+ p->time = (compose.grid_cell * SAMPLE_RATE) / grid_rate;
p->duration = (i64) floor(
- ((1 + cell - saw_compose.grid_cell) * SAMPLE_RATE) /
+ ((1 + cell - compose.grid_cell) * SAMPLE_RATE) /
grid_rate);
} else {
p->time = (cell * SAMPLE_RATE) / grid_rate;
p->duration = (i64) floor(
- ((1 + saw_compose.grid_cell - cell) * SAMPLE_RATE) /
+ ((1 + compose.grid_cell - cell) * SAMPLE_RATE) /
grid_rate);
}
}
for (i64 i = 0; i < ROLL_COUNT; i++) {
- if (i == saw_compose.grid_roll)
+ if (i == compose.grid_roll)
continue;
- saw_roll_t *q = saw_rolls + i;
+ Roll *q = rolls + i;
if (!q->enabled || p->track != q->track)
continue;
i64 q_cell = (i64) floor((q->time * grid_rate) / SAMPLE_RATE);
i64 q_size = (i64) floor((q->duration * grid_rate) /
SAMPLE_RATE);
- if (saw_compose.grid_cell < q_cell && cell >= q_cell) {
+ if (compose.grid_cell < q_cell && cell >= q_cell) {
cell = q_cell - 1;
p->time = (i64) floor(
- (saw_compose.grid_cell * SAMPLE_RATE) / grid_rate);
+ (compose.grid_cell * SAMPLE_RATE) / grid_rate);
p->duration = (i64) floor(
- ((q_cell - saw_compose.grid_cell) * SAMPLE_RATE) /
+ ((q_cell - compose.grid_cell) * SAMPLE_RATE) /
grid_rate);
}
- if (saw_compose.grid_cell > q_cell &&
+ if (compose.grid_cell > q_cell &&
cell < q_cell + q_size) {
cell = q_cell + q_size;
p->time = (i64) floor(((q_cell + q_size) * SAMPLE_RATE) /
grid_rate);
p->duration = (i64) floor(
- ((1 + saw_compose.grid_cell - q_cell - q_size) *
+ ((1 + compose.grid_cell - q_cell - q_size) *
SAMPLE_RATE) /
grid_rate);
}
@@ -2276,81 +3059,88 @@ static void saw_ui_compose(f64 x0, f64 y0, f64 width, f64 height) {
if (p->duration <= 0)
p->duration = (i64) floor(SAMPLE_RATE / grid_rate);
} else
- saw_compose.grid_input = 0;
+ compose.grid_input = 0;
}
// Playback indicator
//
- f64 x = x0 + saw_compose.ui_offset_x - border * 2. +
- (saw_playback_frame * grid_scale) / SAMPLE_RATE;
+ f64 x = x0 + compose.ui_offset_x - border * 2. +
+ (playback_frame * grid_scale) / SAMPLE_RATE;
f64 w = border * 4.;
if (x >= x0 - border * 2 && x < x0 + width) {
- nvgBeginPath(saw_nvg);
- nvgRect(saw_nvg, x, y0, w, height);
- nvgFillColor(saw_nvg, nvgRGBAf(.9f, .9f, .1f, .8f));
- nvgFill(saw_nvg);
+ nvgBeginPath(nvg);
+ nvgRect(nvg, x, y0, w, height);
+ nvgFillColor(nvg, nvgRGBAf(.9f, .9f, .1f, .8f));
+ nvgFill(nvg);
}
// Draw cursor
//
- if (saw_mouse_on && !hover_any && !saw_compose.grid_input &&
- saw_mouse_x >= x0 + saw_compose.ui_offset_x) {
- i64 track = (saw_mouse_y - saw_compose.ui_offset_y - y0) /
+ if (mouse_on && !hover_any && !compose.grid_input &&
+ mouse_x >= x0 + compose.ui_offset_x) {
+ i64 track = (mouse_y - compose.ui_offset_y - y0) /
track_height -
1;
i64 cell = (i64) floor(
- ((saw_mouse_x - saw_compose.ui_offset_x) * grid_rate) /
+ ((mouse_x - compose.ui_offset_x) * grid_rate) /
grid_scale);
- f64 x = x0 + saw_compose.ui_offset_x +
+ f64 x = x0 + compose.ui_offset_x +
(cell * grid_scale) / grid_rate;
- f64 y = y0 + track_height + saw_compose.ui_offset_y +
+ f64 y = y0 + track_height + compose.ui_offset_y +
track * track_height;
f64 w = grid_scale / grid_rate;
if (track >= 0 && track < TRACK_COUNT && x >= x0 &&
x + w < x0 + width && y >= y0 + track_height &&
y + track_height < y0 + height) {
- nvgBeginPath(saw_nvg);
- nvgRect(saw_nvg, x + border, y + border, w - border * 2,
+ nvgBeginPath(nvg);
+ nvgRect(nvg, x + border, y + border, w - border * 2,
track_height - border * 2);
- nvgFillColor(saw_nvg, nvgRGBAf(.8f, .7f, .6f, .7f));
- nvgFill(saw_nvg);
+ nvgFillColor(nvg, nvgRGBAf(.8f, .7f, .6f, .7f));
+ nvgFill(nvg);
}
}
// Cursor indicator
//
- if (saw_mouse_on && saw_mouse_x >= x0 + saw_compose.ui_offset_x &&
- saw_mouse_x < x0 + width && saw_mouse_y >= y0 &&
- saw_mouse_y < y0 + height) {
- f64 dx = x0 + saw_compose.ui_offset_x;
+ if (mouse_on && mouse_x >= x0 + compose.ui_offset_x &&
+ mouse_x < x0 + width && mouse_y >= y0 &&
+ mouse_y < y0 + height) {
+ f64 dx = x0 + compose.ui_offset_x;
f64 s = grid_scale / grid_rate;
- f64 x = dx + ((saw_mouse_x - dx + s / 2) / s) * s;
+ f64 x = dx + ((mouse_x - dx + s / 2) / s) * s;
f64 w = border * 4;
- nvgBeginPath(saw_nvg);
- nvgRect(saw_nvg, x - w / 2, y0, w, height);
- nvgFillColor(saw_nvg, nvgRGBAf(.2f, .2f, .9f, .6f));
- nvgFill(saw_nvg);
+ nvgBeginPath(nvg);
+ nvgRect(nvg, x - w / 2, y0, w, height);
+ nvgFillColor(nvg, nvgRGBAf(.2f, .2f, .9f, .6f));
+ nvgFill(nvg);
}
}
-static void saw_ui_choose_instrument(saw_track_t *track, f64 x0,
- f64 y0, f64 width, f64 height) {
+void ui_choose_instrument(
+ Track *track,
+ f64 x0,
+ f64 y0,
+ f64 width,
+ f64 height
+) {
+ (void) height;
+
f64 text_height = 40.;
x0 += width * .125;
width *= .75;
- if (saw_ui_button(x0, y0, width, text_height, TINT_ORANGE,
+ if (ui_button(x0, y0, width, text_height, TINT_ORANGE,
SZ("\uf83e"), SZ("Oscillator"), 1)) {
track->instrument = INSTRUMENT_OSCILLATOR;
- track->oscillator = (saw_oscillator_t) {
+ track->oscillator = (Oscillator) {
.wave = WAVE_SINE,
.warp = .0,
.phase = .0,
@@ -2365,7 +3155,7 @@ static void saw_ui_choose_instrument(saw_track_t *track, f64 x0,
};
}
- if (saw_ui_button(x0, y0 + text_height, width, text_height,
+ if (ui_button(x0, y0 + text_height, width, text_height,
TINT_ORANGE, SZ("\uf1c7"), SZ("Sampler"), 1)) {
track->instrument = INSTRUMENT_SAMPLER;
@@ -2386,7 +3176,7 @@ static void saw_ui_choose_instrument(saw_track_t *track, f64 x0,
track->sampler.base_frequency = 440.;
track->sampler.volume = .5;
- track->sampler.envelope = (saw_envelope_t) {
+ track->sampler.envelope = (Envelope) {
.sustain = .15,
.attack = .007,
.decay = .3,
@@ -2395,8 +3185,15 @@ static void saw_ui_choose_instrument(saw_track_t *track, f64 x0,
}
}
-static void saw_ui_oscillator(saw_oscillator_t *osc, f64 x0, f64 y0,
- f64 width, f64 height) {
+void ui_oscillator(
+ Oscillator *osc,
+ f64 x0,
+ f64 y0,
+ f64 width,
+ f64 height
+) {
+ (void) height;
+
f64 text_height = 33.;
f64 x = x0 + width / 12.;
f64 w = width * 5. / 6.;
@@ -2406,52 +3203,59 @@ static void saw_ui_oscillator(saw_oscillator_t *osc, f64 x0, f64 y0,
SZ("Sqr up"), SZ("Sqr down"), SZ("Kick"),
};
- saw_ui_value_list(x, y0, w, text_height, TINT_WHITE, SZ("Wave"),
+ ui_value_list(x, y0, w, text_height, TINT_WHITE, SZ("Wave"),
500., sizeof wave_names / sizeof *wave_names,
wave_names, &osc->wave);
- saw_ui_value_float(x, y0 + text_height * 1., w, text_height,
+ ui_value_float(x, y0 + text_height * 1., w, text_height,
TINT_WHITE, SZ("Warp"), 10000, -1., 1.,
&osc->warp);
// FIXME
// Looping phase value.
- saw_ui_value_float(x, y0 + text_height * 2., w, text_height,
+ ui_value_float(x, y0 + text_height * 2., w, text_height,
TINT_WHITE, SZ("Phase"), 10000, 0., 1.,
&osc->phase);
- saw_ui_value_float(x, y0 + text_height * 3., w, text_height,
+ ui_value_float(x, y0 + text_height * 3., w, text_height,
TINT_WHITE, SZ("Stereo"), 10000, 0., 2.,
&osc->stereo_width);
- saw_ui_value_float(x, y0 + text_height * 4., w, text_height,
+ ui_value_float(x, y0 + text_height * 4., w, text_height,
TINT_WHITE, SZ("Volume"), 10000, 0., 2.,
&osc->volume);
- nvgFontSize(saw_nvg, text_height);
- nvgFontFaceId(saw_nvg, saw_font_text);
- nvgFillColor(saw_nvg, nvgRGBAf(1.f, 1.f, 1.f, 1.f));
- nvgTextAlign(saw_nvg, NVG_ALIGN_LEFT | NVG_ALIGN_BASELINE);
- nvgText(saw_nvg, x, y0 + text_height * 6.5, "Envelope", 0);
+ nvgFontSize(nvg, text_height);
+ nvgFontFaceId(nvg, font_text);
+ nvgFillColor(nvg, nvgRGBAf(1.f, 1.f, 1.f, 1.f));
+ nvgTextAlign(nvg, NVG_ALIGN_LEFT | NVG_ALIGN_BASELINE);
+ nvgText(nvg, x, y0 + text_height * 6.5, "Envelope", 0);
- saw_ui_value_float(x, y0 + text_height * 7., w, text_height,
+ ui_value_float(x, y0 + text_height * 7., w, text_height,
TINT_WHITE, SZ("Sustain"), 10000, 0., 1.,
&osc->envelope.sustain);
- saw_ui_value_float(x, y0 + text_height * 8., w, text_height,
+ ui_value_float(x, y0 + text_height * 8., w, text_height,
TINT_WHITE, SZ("Attack"), 100000, 0., 6.,
&osc->envelope.attack);
- saw_ui_value_float(x, y0 + text_height * 9., w, text_height,
+ ui_value_float(x, y0 + text_height * 9., w, text_height,
TINT_WHITE, SZ("Decay"), 100000, 0., 6.,
&osc->envelope.decay);
- saw_ui_value_float(x, y0 + text_height * 10., w, text_height,
+ ui_value_float(x, y0 + text_height * 10., w, text_height,
TINT_WHITE, SZ("Release"), 100000, 0., 6.,
&osc->envelope.release);
}
-static void saw_ui_sampler(saw_sampler_t *sampler, f64 x0, f64 y0,
- f64 width, f64 height) {
+void ui_sampler(
+ Sampler *sampler,
+ f64 x0,
+ f64 y0,
+ f64 width,
+ f64 height
+) {
+ (void) height;
+
f64 text_height = 33.;
f64 x = x0 + width / 12.;
f64 w = width * 5. / 6.;
f64 sample_height = text_height * 4.;
- if (saw_drop_file_data.size != 0) {
+ if (drop_file_data.size != 0) {
// Load the audio sample from memory
//
@@ -2460,8 +3264,8 @@ static void saw_ui_sampler(saw_sampler_t *sampler, f64 x0, f64 y0,
ma_decoder decoder;
- if (ma_decoder_init_memory(saw_drop_file_data.values,
- (size_t) saw_drop_file_data.size,
+ if (ma_decoder_init_memory(drop_file_data.values,
+ (size_t) drop_file_data.size,
&decoder_config,
&decoder) != MA_SUCCESS) {
printf("ma_decoder_init_memory failed.\n");
@@ -2479,8 +3283,8 @@ static void saw_ui_sampler(saw_sampler_t *sampler, f64 x0, f64 y0,
DA_RESIZE(sampler->data, length * CHANNEL_COUNT);
- assert(sampler->data.size == length * CHANNEL_COUNT);
- if (sampler->data.size != length * CHANNEL_COUNT) {
+ assert(sampler->data.size == (i64) (length * CHANNEL_COUNT));
+ if (sampler->data.size != (i64) (length * CHANNEL_COUNT)) {
printf("Bad alloc\n");
fflush(stdout);
sampler->data.size = 0;
@@ -2489,16 +3293,19 @@ static void saw_ui_sampler(saw_sampler_t *sampler, f64 x0, f64 y0,
ma_uint64 frames_read;
- if (ma_decoder_read_pcm_frames(&decoder, sampler->data.values,
- length,
- &frames_read) != MA_SUCCESS) {
+ if (ma_decoder_read_pcm_frames(
+ &decoder,
+ sampler->data.values,
+ length,
+ &frames_read
+ ) != MA_SUCCESS) {
printf("ma_decoder_read_pcm_frames failed.\n");
fflush(stdout);
sampler->data.size = 0;
break;
}
- assert(sampler->data.size >= frames_read * CHANNEL_COUNT);
+ assert(sampler->data.size >= (i64) (frames_read * CHANNEL_COUNT));
sampler->data.size = frames_read * CHANNEL_COUNT;
if (sampler->outline.size == SAMPLER_OUTLINE_SIZE)
@@ -2524,100 +3331,100 @@ static void saw_ui_sampler(saw_sampler_t *sampler, f64 x0, f64 y0,
f64 y = y0 + h;
if (dw > .5) {
- nvgBeginPath(saw_nvg);
+ nvgBeginPath(nvg);
for (i64 i = 0; i < sampler->outline.size; i++)
- nvgRect(saw_nvg, x + dw * i,
+ nvgRect(nvg, x + dw * i,
y - h * sampler->outline.values[i], dw,
h * sampler->outline.values[i] * 2.);
- nvgFillColor(saw_nvg, nvgRGBAf(.8f, .4f, .0f, .7f));
- nvgFill(saw_nvg);
+ nvgFillColor(nvg, nvgRGBAf(.8f, .4f, .0f, .7f));
+ nvgFill(nvg);
}
}
} else {
- nvgFontSize(saw_nvg, text_height * .5);
- nvgFontFaceId(saw_nvg, saw_font_text);
- nvgFillColor(saw_nvg, nvgRGBAf(1.f, .7f, .2f, .5f));
- nvgTextAlign(saw_nvg, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE);
- nvgText(saw_nvg, x0 + width * .5, y0 + sample_height * .5,
+ nvgFontSize(nvg, text_height * .5);
+ nvgFontFaceId(nvg, font_text);
+ nvgFillColor(nvg, nvgRGBAf(1.f, .7f, .2f, .5f));
+ nvgTextAlign(nvg, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE);
+ nvgText(nvg, x0 + width * .5, y0 + sample_height * .5,
"Drop a WAV file here", NULL);
}
- saw_ui_value_float(x, y0 + sample_height, w, text_height,
+ ui_value_float(x, y0 + sample_height, w, text_height,
TINT_WHITE, SZ("Begin"), 100000, 0., 60.,
&sampler->begin);
- saw_ui_value_float(x, y0 + sample_height + text_height * 1., w,
+ ui_value_float(x, y0 + sample_height + text_height * 1., w,
text_height, TINT_WHITE, SZ("End"), 100000, 0.,
60., &sampler->end);
- saw_ui_value_float(x, y0 + sample_height + text_height * 2., w,
+ ui_value_float(x, y0 + sample_height + text_height * 2., w,
text_height, TINT_WHITE, SZ("Crossfade"), 100000,
0., 60., &sampler->crossfade);
- saw_ui_value_float(x, y0 + sample_height + text_height * 3., w,
+ ui_value_float(x, y0 + sample_height + text_height * 3., w,
text_height, TINT_WHITE, SZ("Base freq."), 500,
1., 44100., &sampler->base_frequency);
- saw_ui_value_float(x, y0 + sample_height + text_height * 4., w,
+ ui_value_float(x, y0 + sample_height + text_height * 4., w,
text_height, TINT_WHITE, SZ("Volume."), 10000,
0., 2., &sampler->volume);
- nvgFontSize(saw_nvg, text_height);
- nvgFontFaceId(saw_nvg, saw_font_text);
- nvgFillColor(saw_nvg, nvgRGBAf(1.f, 1.f, 1.f, 1.f));
- nvgTextAlign(saw_nvg, NVG_ALIGN_LEFT | NVG_ALIGN_BASELINE);
- nvgText(saw_nvg, x, y0 + sample_height + text_height * 6.5,
+ nvgFontSize(nvg, text_height);
+ nvgFontFaceId(nvg, font_text);
+ nvgFillColor(nvg, nvgRGBAf(1.f, 1.f, 1.f, 1.f));
+ nvgTextAlign(nvg, NVG_ALIGN_LEFT | NVG_ALIGN_BASELINE);
+ nvgText(nvg, x, y0 + sample_height + text_height * 6.5,
"Envelope", NULL);
- saw_ui_value_float(x, y0 + sample_height + text_height * 7., w,
+ ui_value_float(x, y0 + sample_height + text_height * 7., w,
text_height, TINT_WHITE, SZ("Sustain"), 10000,
0., 1., &sampler->envelope.sustain);
- saw_ui_value_float(x, y0 + sample_height + text_height * 8., w,
+ ui_value_float(x, y0 + sample_height + text_height * 8., w,
text_height, TINT_WHITE, SZ("Attack"), 100000,
0., 6., &sampler->envelope.attack);
- saw_ui_value_float(x, y0 + sample_height + text_height * 9., w,
+ ui_value_float(x, y0 + sample_height + text_height * 9., w,
text_height, TINT_WHITE, SZ("Decay"), 100000, 0.,
6., &sampler->envelope.decay);
- saw_ui_value_float(x, y0 + sample_height + text_height * 10., w,
+ ui_value_float(x, y0 + sample_height + text_height * 10., w,
text_height, TINT_WHITE, SZ("Release"), 100000,
0., 6., &sampler->envelope.release);
}
-static void saw_ui_track(saw_track_t *track, f64 x0, f64 y0,
+void ui_track(Track *track, f64 x0, f64 y0,
f64 width, f64 height, str_t title) {
f64 text_height = 33.;
f64 header_offset = 60.;
f64 border = 2.;
- nvgFontSize(saw_nvg, text_height - border);
- nvgFontFaceId(saw_nvg, saw_font_text);
- nvgTextAlign(saw_nvg, NVG_ALIGN_LEFT | NVG_ALIGN_BASELINE);
- nvgFillColor(saw_nvg, nvgRGBAf(1.f, 1.f, 1.f, 1.f));
+ nvgFontSize(nvg, text_height - border);
+ nvgFontFaceId(nvg, font_text);
+ nvgTextAlign(nvg, NVG_ALIGN_LEFT | NVG_ALIGN_BASELINE);
+ nvgFillColor(nvg, nvgRGBAf(1.f, 1.f, 1.f, 1.f));
- nvgText(saw_nvg, x0 + border * 2., y0 + text_height - border * 2.,
+ nvgText(nvg, x0 + border * 2., y0 + text_height - border * 2.,
title.values, title.values + title.size);
if (track->instrument != INSTRUMENT_NONE) {
f64 x = x0 + width - text_height * 1.5;
f64 s = text_height;
- b8 has_cursor = saw_mouse_x >= x && saw_mouse_y >= y0 &&
- saw_mouse_x < x + s && saw_mouse_y < y0 + s;
+ b8 has_cursor = mouse_x >= x && mouse_y >= y0 &&
+ mouse_x < x + s && mouse_y < y0 + s;
c8 xmark[] = "\uf00d";
- nvgFontSize(saw_nvg, text_height);
- nvgFontFaceId(saw_nvg, saw_font_icons);
+ nvgFontSize(nvg, text_height);
+ nvgFontFaceId(nvg, font_icons);
if (has_cursor)
- nvgFillColor(saw_nvg, nvgRGBAf(.9f, .8f, .3f, 1.f));
+ nvgFillColor(nvg, nvgRGBAf(.9f, .8f, .3f, 1.f));
else
- nvgFillColor(saw_nvg, nvgRGBAf(.9f, .8f, .3f, .6f));
+ nvgFillColor(nvg, nvgRGBAf(.9f, .8f, .3f, .6f));
- nvgText(saw_nvg, x + border, y0 + s - border, xmark,
+ nvgText(nvg, x + border, y0 + s - border, xmark,
xmark + (sizeof xmark - 1));
- if (has_cursor && saw_lbutton_click) {
+ if (has_cursor && lbutton_click) {
if (track->instrument == INSTRUMENT_SAMPLER)
- saw_sampler_cleanup(&track->sampler);
+ sampler_cleanup(&track->sampler);
track->instrument = INSTRUMENT_NONE;
}
@@ -2625,22 +3432,22 @@ static void saw_ui_track(saw_track_t *track, f64 x0, f64 y0,
switch (track->instrument) {
case INSTRUMENT_OSCILLATOR:
- saw_ui_oscillator(&track->oscillator, x0, y0 + header_offset,
+ ui_oscillator(&track->oscillator, x0, y0 + header_offset,
width, height - header_offset);
break;
case INSTRUMENT_SAMPLER:
- saw_ui_sampler(&track->sampler, x0, y0 + header_offset, width,
+ ui_sampler(&track->sampler, x0, y0 + header_offset, width,
height - header_offset);
break;
default:
- saw_ui_choose_instrument(track, x0, y0 + header_offset, width,
+ ui_choose_instrument(track, x0, y0 + header_offset, width,
height - header_offset);
}
}
-static void saw_ui_roll(saw_roll_t *roll, f64 x0, f64 y0, f64 width,
+void ui_roll(Roll *roll, f64 x0, f64 y0, f64 width,
f64 height, str_t title) {
f64 text_height = 35.;
f64 header_height = 35.;
@@ -2656,19 +3463,19 @@ static void saw_ui_roll(saw_roll_t *roll, f64 x0, f64 y0, f64 width,
// Title text
//
- nvgBeginPath(saw_nvg);
- nvgRect(saw_nvg, x0, y0, width, text_height);
- nvgFillColor(saw_nvg, nvgRGBAf(.3f, .2f, .25f, .6f));
- nvgFill(saw_nvg);
-
- nvgBeginPath(saw_nvg);
- nvgFontSize(saw_nvg, text_height);
- nvgFontFaceId(saw_nvg, saw_font_text);
- nvgTextAlign(saw_nvg, NVG_ALIGN_LEFT | NVG_ALIGN_BASELINE);
- nvgFillColor(saw_nvg, nvgRGBAf(1.f, 1.f, 1.f, 1.f));
- nvgText(saw_nvg, x0 + border * 2., y0 + text_height - border * 2,
+ nvgBeginPath(nvg);
+ nvgRect(nvg, x0, y0, width, text_height);
+ nvgFillColor(nvg, nvgRGBAf(.3f, .2f, .25f, .6f));
+ nvgFill(nvg);
+
+ nvgBeginPath(nvg);
+ nvgFontSize(nvg, text_height);
+ nvgFontFaceId(nvg, font_text);
+ nvgTextAlign(nvg, NVG_ALIGN_LEFT | NVG_ALIGN_BASELINE);
+ nvgFillColor(nvg, nvgRGBAf(1.f, 1.f, 1.f, 1.f));
+ nvgText(nvg, x0 + border * 2., y0 + text_height - border * 2,
title.values, title.values + title.size);
- nvgFill(saw_nvg);
+ nvgFill(nvg);
// Tuning control
//
@@ -2678,17 +3485,17 @@ static void saw_ui_roll(saw_roll_t *roll, f64 x0, f64 y0, f64 width,
f64 w = pianokey_width;
f64 h = header_height;
- if (saw_ui_button(x, y, w * .5, h, TINT_PINK, SZ("\uf52d"),
+ if (ui_button(x, y, w * .5, h, TINT_PINK, SZ("\uf52d"),
SZ(""),
roll->tuning_tag == TUNING_PYTHAGOREAN)) {
- saw_tuning_pythagorean(roll->tuning, roll->mark_pitch);
+ tuning_pythagorean(roll->tuning, roll->mark_pitch);
roll->tuning_tag = TUNING_PYTHAGOREAN;
}
- if (saw_ui_button(x + w * .5, y, w * .5, h, TINT_PINK,
+ if (ui_button(x + w * .5, y, w * .5, h, TINT_PINK,
SZ("\uf5ac"), SZ(""),
roll->tuning_tag == TUNING_EQUAL_TEMPERAMENT)) {
- saw_tuning_equal_temperament(roll->tuning);
+ tuning_equal_temperament(roll->tuning);
roll->tuning_tag = TUNING_EQUAL_TEMPERAMENT;
}
}
@@ -2704,14 +3511,14 @@ static void saw_ui_roll(saw_roll_t *roll, f64 x0, f64 y0, f64 width,
c8 repeat[] = "\uf363";
- nvgFontSize(saw_nvg, header_height - border * 2.);
- nvgFontFaceId(saw_nvg, saw_font_icons);
+ nvgFontSize(nvg, header_height - border * 2.);
+ nvgFontFaceId(nvg, font_icons);
if (roll->loop_duration == 0)
- nvgFillColor(saw_nvg, nvgRGBAf(.3f, .3f, .3f, .5f));
+ nvgFillColor(nvg, nvgRGBAf(.3f, .3f, .3f, .5f));
else
- nvgFillColor(saw_nvg, nvgRGBAf(.7f, .3f, .35f, .8f));
- nvgTextAlign(saw_nvg, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE);
- nvgText(saw_nvg, x - header_height / 2 - border,
+ nvgFillColor(nvg, nvgRGBAf(.7f, .3f, .35f, .8f));
+ nvgTextAlign(nvg, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE);
+ nvgText(nvg, x - header_height / 2 - border,
y + header_height / 2, repeat,
repeat + (sizeof repeat - 1));
@@ -2728,30 +3535,30 @@ static void saw_ui_roll(saw_roll_t *roll, f64 x0, f64 y0, f64 width,
rw = w - rx;
if (rw > 0) {
- nvgBeginPath(saw_nvg);
- nvgRect(saw_nvg, x + rx, y, rw, h);
- nvgRect(saw_nvg, x + rx, y + h * 4., rw, h);
- nvgFillColor(saw_nvg, nvgRGBAf(.7f, .4f, .3f, .6f));
- nvgFill(saw_nvg);
+ nvgBeginPath(nvg);
+ nvgRect(nvg, x + rx, y, rw, h);
+ nvgRect(nvg, x + rx, y + h * 4., rw, h);
+ nvgFillColor(nvg, nvgRGBAf(.7f, .4f, .3f, .6f));
+ nvgFill(nvg);
}
- nvgBeginPath(saw_nvg);
+ nvgBeginPath(nvg);
if (rx > 0) {
- nvgRect(saw_nvg, x, y, rx, h);
- nvgRect(saw_nvg, x, y + h * 4., rx, h);
+ nvgRect(nvg, x, y, rx, h);
+ nvgRect(nvg, x, y + h * 4., rx, h);
}
- nvgRect(saw_nvg, x + rx + rw, y, w - rx - rw, h);
- nvgRect(saw_nvg, x + rx + rw, y + h * 4., w - rx - rw, h);
- nvgFillColor(saw_nvg, nvgRGBAf(.3f, .3f, .3f, .6f));
- nvgFill(saw_nvg);
-
- if (saw_mouse_x >= x && saw_mouse_y >= y && saw_mouse_x < x + w &&
- saw_mouse_y < y + header_height && !roll->loop_input &&
- saw_lbutton_click)
+ nvgRect(nvg, x + rx + rw, y, w - rx - rw, h);
+ nvgRect(nvg, x + rx + rw, y + h * 4., w - rx - rw, h);
+ nvgFillColor(nvg, nvgRGBAf(.3f, .3f, .3f, .6f));
+ nvgFill(nvg);
+
+ if (mouse_x >= x && mouse_y >= y && mouse_x < x + w &&
+ mouse_y < y + header_height && !roll->loop_input &&
+ lbutton_click)
roll->loop_input = 1;
- if (roll->loop_input && saw_lbutton_down) {
- f64 t = (saw_mouse_x - x0 - pianokey_width - sheet_offset -
+ if (roll->loop_input && lbutton_down) {
+ f64 t = (mouse_x - x0 - pianokey_width - sheet_offset -
roll->ui_offset_x) /
sheet_scale;
@@ -2763,7 +3570,7 @@ static void saw_ui_roll(saw_roll_t *roll, f64 x0, f64 y0, f64 width,
}
}
- if (!saw_lbutton_down)
+ if (!lbutton_down)
roll->loop_input = 0;
// Piano roll
@@ -2783,25 +3590,25 @@ static void saw_ui_roll(saw_roll_t *roll, f64 x0, f64 y0, f64 width,
if (y < y0 + text_height + header_height)
break;
- b8 has_cursor = saw_mouse_x >= x && saw_mouse_x < x + w &&
- saw_mouse_y >= y && saw_mouse_y < y + h;
+ b8 has_cursor = mouse_x >= x && mouse_x < x + w &&
+ mouse_y >= y && mouse_y < y + h;
- nvgBeginPath(saw_nvg);
- nvgRect(saw_nvg, x, y, w, h);
- nvgFillColor(saw_nvg, roll->pitch_turned_off[pitch]
+ nvgBeginPath(nvg);
+ nvgRect(nvg, x, y, w, h);
+ nvgFillColor(nvg, roll->pitch_turned_off[pitch]
? nvgRGBAf(.8f, .8f, .8f, .6f)
: has_cursor
? nvgRGBAf(.7f, .7f, 1.f, 1.f)
: nvgRGBAf(.8f, .8f, .8f, 1.f));
- nvgFill(saw_nvg);
+ nvgFill(nvg);
- nvgFontSize(saw_nvg, h * .5);
+ nvgFontSize(nvg, h * .5);
if (pitch == roll->mark_pitch) {
- nvgFontFaceId(saw_nvg, saw_font_icons);
- nvgFillColor(saw_nvg, nvgRGBAf(.1f, .1f, .1f, 1.f));
- nvgTextAlign(saw_nvg, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE);
- nvgText(saw_nvg, x + w / 3, y + h / 2, "\uf52d", NULL);
+ nvgFontFaceId(nvg, font_icons);
+ nvgFillColor(nvg, nvgRGBAf(.1f, .1f, .1f, 1.f));
+ nvgTextAlign(nvg, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE);
+ nvgText(nvg, x + w / 3, y + h / 2, "\uf52d", NULL);
}
c8 buf[64];
@@ -2814,18 +3621,18 @@ static void saw_ui_roll(saw_roll_t *roll, f64 x0, f64 y0, f64 width,
note_names[pitch %
(sizeof note_names / sizeof *note_names)]);
- nvgFontFaceId(saw_nvg, saw_font_text);
- nvgFillColor(saw_nvg, nvgRGBAf(.1f, .1f, .1f, 1.f));
- nvgTextAlign(saw_nvg, NVG_ALIGN_LEFT | NVG_ALIGN_MIDDLE);
- nvgText(saw_nvg, x + border, y + h / 2, buf, NULL);
+ nvgFontFaceId(nvg, font_text);
+ nvgFillColor(nvg, nvgRGBAf(.1f, .1f, .1f, 1.f));
+ nvgTextAlign(nvg, NVG_ALIGN_LEFT | NVG_ALIGN_MIDDLE);
+ nvgText(nvg, x + border, y + h / 2, buf, NULL);
memset(buf, 0, sizeof buf);
sprintf(buf, "%.1f", (f32) roll->tuning[pitch]);
- nvgFontSize(saw_nvg, h * 2. / 3.);
- nvgFillColor(saw_nvg, nvgRGBAf(.1f, .1f, .1f, 1.f));
- nvgTextAlign(saw_nvg, NVG_ALIGN_RIGHT | NVG_ALIGN_MIDDLE);
- nvgText(saw_nvg, x + w, y + h * .5, buf, NULL);
+ nvgFontSize(nvg, h * 2. / 3.);
+ nvgFillColor(nvg, nvgRGBAf(.1f, .1f, .1f, 1.f));
+ nvgTextAlign(nvg, NVG_ALIGN_RIGHT | NVG_ALIGN_MIDDLE);
+ nvgText(nvg, x + w, y + h * .5, buf, NULL);
// Piano roll input
//
@@ -2834,16 +3641,16 @@ static void saw_ui_roll(saw_roll_t *roll, f64 x0, f64 y0, f64 width,
hover_any = 1;
if (!roll->pitch_turned_off[pitch] &&
- ((saw_edit_mode == EDIT_MODE_HAND && saw_lbutton_click) ||
- (saw_edit_mode == EDIT_MODE_HAND && saw_lbutton_down &&
+ ((edit_mode == EDIT_MODE_HAND && lbutton_click) ||
+ (edit_mode == EDIT_MODE_HAND && lbutton_down &&
roll->last_index != pitch))) {
- saw_play_voice(saw_tracks + roll->track, roll, pitch,
+ play_voice(tracks + roll->track, roll, pitch,
SAMPLE_RATE / roll->rate);
roll->mark_pitch = pitch;
}
- if (saw_rbutton_click ||
- (saw_edit_mode == EDIT_MODE_ERASE && saw_lbutton_click))
+ if (rbutton_click ||
+ (edit_mode == EDIT_MODE_ERASE && lbutton_click))
roll->pitch_turned_off[pitch] =
!roll->pitch_turned_off[pitch];
@@ -2858,19 +3665,19 @@ static void saw_ui_roll(saw_roll_t *roll, f64 x0, f64 y0, f64 width,
// Panning input
//
- if (saw_mbutton_click || (saw_edit_mode == EDIT_MODE_PAN &&
- saw_lbutton_click && !roll->loop_input)) {
- if (saw_mouse_x >= x0 + pianokey_width + sheet_offset &&
- saw_mouse_y >= y0 + text_height && saw_mouse_x < x0 + width &&
- saw_mouse_y < y0 + height)
+ if (mbutton_click || (edit_mode == EDIT_MODE_PAN &&
+ lbutton_click && !roll->loop_input)) {
+ if (mouse_x >= x0 + pianokey_width + sheet_offset &&
+ mouse_y >= y0 + text_height && mouse_x < x0 + width &&
+ mouse_y < y0 + height)
roll->ui_offset_x_input = 1;
- if (saw_mouse_x >= x0 && saw_mouse_y >= y0 + text_height &&
- saw_mouse_x < x0 + width && saw_mouse_y < y0 + height)
+ if (mouse_x >= x0 && mouse_y >= y0 + text_height &&
+ mouse_x < x0 + width && mouse_y < y0 + height)
roll->ui_offset_y_input = 1;
}
- if (!(saw_mbutton_down ||
- (saw_edit_mode == EDIT_MODE_PAN && saw_lbutton_down &&
+ if (!(mbutton_down ||
+ (edit_mode == EDIT_MODE_PAN && lbutton_down &&
!roll->loop_input))) {
roll->ui_offset_x_input = 0;
roll->ui_offset_y_input = 0;
@@ -2901,7 +3708,7 @@ static void saw_ui_roll(saw_roll_t *roll, f64 x0, f64 y0, f64 width,
i64 note = -1;
for (i64 n = 0; n < SHEET_SIZE; n++) {
- saw_roll_note_t *p = roll->notes + n;
+ Roll_Note *p = roll->notes + n;
if (p->enabled && p->pitch == pitch &&
t >= (p->time * roll->rate + SAMPLE_RATE / 2) /
SAMPLE_RATE &&
@@ -2924,8 +3731,8 @@ static void saw_ui_roll(saw_roll_t *roll, f64 x0, f64 y0, f64 width,
f64 w = sheet_scale;
- nvgBeginPath(saw_nvg);
- nvgRect(saw_nvg, x + border, y + border, w - border * 2.,
+ nvgBeginPath(nvg);
+ nvgRect(nvg, x + border, y + border, w - border * 2.,
h - border * 2.);
b8 turned_off = roll->pitch_turned_off[pitch] ||
@@ -2933,24 +3740,24 @@ static void saw_ui_roll(saw_roll_t *roll, f64 x0, f64 y0, f64 width,
t >= (roll->loop_duration * roll->rate) /
SAMPLE_RATE);
- b8 has_cursor = !roll->grid_input && saw_mouse_x >= x &&
- saw_mouse_x < x + w && saw_mouse_y >= y &&
- saw_mouse_y < y + h;
+ b8 has_cursor = !roll->grid_input && mouse_x >= x &&
+ mouse_x < x + w && mouse_y >= y &&
+ mouse_y < y + h;
- nvgFillColor(saw_nvg, turned_off ? nvgRGBAf(.5f, .4f, .3f, .4f)
+ nvgFillColor(nvg, turned_off ? nvgRGBAf(.5f, .4f, .3f, .4f)
: has_cursor
? nvgRGBAf(.7f, .7f, .8f, .6f)
: nvgRGBAf(.65f, .6f, .6f, .5f));
- nvgFill(saw_nvg);
+ nvgFill(nvg);
// Empty cell input
//
if (!roll->grid_input && !turned_off && has_cursor &&
- saw_edit_mode == EDIT_MODE_HAND && saw_lbutton_click)
+ edit_mode == EDIT_MODE_HAND && lbutton_click)
for (i64 n = 0; n < SHEET_SIZE; n++)
if (!roll->notes[n].enabled) {
- roll->notes[n] = (saw_roll_note_t) {
+ roll->notes[n] = (Roll_Note) {
.enabled = 1,
.time = (t * SAMPLE_RATE) / roll->rate,
.duration = SAMPLE_RATE / roll->rate,
@@ -2959,7 +3766,7 @@ static void saw_ui_roll(saw_roll_t *roll, f64 x0, f64 y0, f64 width,
roll->grid_input = 1;
roll->grid_note = n;
roll->grid_time = t;
- saw_play_voice(saw_tracks + roll->track, roll, pitch,
+ play_voice(tracks + roll->track, roll, pitch,
SAMPLE_RATE / roll->rate);
break;
}
@@ -2970,7 +3777,7 @@ static void saw_ui_roll(saw_roll_t *roll, f64 x0, f64 y0, f64 width,
//
for (i64 n = 0; n < SHEET_SIZE; n++) {
- saw_roll_note_t *note = roll->notes + n;
+ Roll_Note *note = roll->notes + n;
if (!note->enabled)
continue;
@@ -2988,8 +3795,8 @@ static void saw_ui_roll(saw_roll_t *roll, f64 x0, f64 y0, f64 width,
f64 h = pianokey_height;
b8 has_cursor = (roll->grid_input && roll->grid_note == n) ||
- (saw_mouse_x >= x && saw_mouse_x < x + w &&
- saw_mouse_y >= y && saw_mouse_y < y + h);
+ (mouse_x >= x && mouse_x < x + w &&
+ mouse_y >= y && mouse_y < y + h);
if (x >= x0 + width)
continue;
@@ -2999,14 +3806,14 @@ static void saw_ui_roll(saw_roll_t *roll, f64 x0, f64 y0, f64 width,
// Draw note
//
- i64 frame = saw_playback_frame;
+ i64 frame = playback_frame;
if (frame >= roll->time && frame < roll->time + roll->duration &&
roll->loop_duration > 0)
frame -= ((frame - roll->time) / roll->loop_duration) *
roll->loop_duration;
- b8 is_playing = saw_playback_on &&
+ b8 is_playing = playback_on &&
frame >= roll->time + note->time &&
frame < roll->time + note->time + note->duration;
@@ -3023,22 +3830,22 @@ static void saw_ui_roll(saw_roll_t *roll, f64 x0, f64 y0, f64 width,
if (overflow > 0)
w -= overflow * sheet_scale;
- nvgBeginPath(saw_nvg);
- nvgRect(saw_nvg, x + border, y + border, w - border * 2.,
+ nvgBeginPath(nvg);
+ nvgRect(nvg, x + border, y + border, w - border * 2.,
h - border * 2.);
- nvgFillColor(saw_nvg, is_playing ? nvgRGBAf(1.f, .9f, .8f, 1.f)
+ nvgFillColor(nvg, is_playing ? nvgRGBAf(1.f, .9f, .8f, 1.f)
: has_cursor
? nvgRGBAf(.7f, .7f, .9f, 1.f)
: nvgRGBAf(.65f, .65f, .65f, 1.f));
- nvgFill(saw_nvg);
+ nvgFill(nvg);
// Note input
//
if (has_cursor &&
- (saw_rbutton_down ||
- (saw_edit_mode == EDIT_MODE_ERASE && saw_lbutton_down)))
+ (rbutton_down ||
+ (edit_mode == EDIT_MODE_ERASE && lbutton_down)))
note->enabled = 0;
}
@@ -3046,13 +3853,13 @@ static void saw_ui_roll(saw_roll_t *roll, f64 x0, f64 y0, f64 width,
//
if (roll->grid_input) {
- if (saw_edit_mode == EDIT_MODE_HAND && saw_lbutton_down) {
- i64 t = (i64) floor((saw_mouse_x - x0 - pianokey_width -
+ if (edit_mode == EDIT_MODE_HAND && lbutton_down) {
+ i64 t = (i64) floor((mouse_x - x0 - pianokey_width -
sheet_offset - roll->ui_offset_x) /
sheet_scale +
.5);
- saw_roll_note_t *p = roll->notes + roll->grid_note;
+ Roll_Note *p = roll->notes + roll->grid_note;
if (t >= 0) {
if (roll->grid_time <= t) {
@@ -3069,7 +3876,7 @@ static void saw_ui_roll(saw_roll_t *roll, f64 x0, f64 y0, f64 width,
for (i32 n = 0; n < SHEET_SIZE; n++) {
if (n == roll->grid_note)
continue;
- saw_roll_note_t *q = roll->notes + n;
+ Roll_Note *q = roll->notes + n;
if (!q->enabled || q->pitch != p->pitch)
continue;
if (q->time < (roll->grid_time * SAMPLE_RATE) / roll->rate &&
@@ -3097,7 +3904,7 @@ static void saw_ui_roll(saw_roll_t *roll, f64 x0, f64 y0, f64 width,
// Playback indicator
//
{
- i64 frame = saw_playback_frame;
+ i64 frame = playback_frame;
if (frame >= roll->time && frame < roll->time + roll->duration &&
roll->loop_duration > 0)
@@ -3112,29 +3919,29 @@ static void saw_ui_roll(saw_roll_t *roll, f64 x0, f64 y0, f64 width,
if (x >= x0 + pianokey_width + sheet_offset - border * 2. &&
x < x0 + width) {
- nvgBeginPath(saw_nvg);
- nvgRect(saw_nvg, x, y0 + text_height, w, height - text_height);
- nvgFillColor(saw_nvg, nvgRGBAf(.9f, .9f, .2f, .7f));
- nvgFill(saw_nvg);
+ nvgBeginPath(nvg);
+ nvgRect(nvg, x, y0 + text_height, w, height - text_height);
+ nvgFillColor(nvg, nvgRGBAf(.9f, .9f, .2f, .7f));
+ nvgFill(nvg);
}
}
// Cursor indicator
//
- if (saw_mouse_on &&
- saw_mouse_x >= x0 + pianokey_width + sheet_offset &&
- saw_mouse_x < x0 + width && saw_mouse_y >= y0 &&
- saw_mouse_y < y0 + height) {
+ if (mouse_on &&
+ mouse_x >= x0 + pianokey_width + sheet_offset &&
+ mouse_x < x0 + width && mouse_y >= y0 &&
+ mouse_y < y0 + height) {
f64 dx = x0 + pianokey_width + sheet_offset + roll->ui_offset_x;
- f64 x = dx + floor((saw_mouse_x - dx) / sheet_scale + .5) *
+ f64 x = dx + floor((mouse_x - dx) / sheet_scale + .5) *
sheet_scale;
f64 w = border * 4.;
- nvgBeginPath(saw_nvg);
- nvgRect(saw_nvg, x - w * .5, y0 + text_height, w,
+ nvgBeginPath(nvg);
+ nvgRect(nvg, x - w * .5, y0 + text_height, w,
height - text_height);
- nvgFillColor(saw_nvg, nvgRGBAf(.2f, .2f, .8f, .7f));
- nvgFill(saw_nvg);
+ nvgFillColor(nvg, nvgRGBAf(.2f, .2f, .8f, .7f));
+ nvgFill(nvg);
}
}
@@ -3144,57 +3951,57 @@ static void saw_ui_roll(saw_roll_t *roll, f64 x0, f64 y0, f64 width,
//
// ================================================================
-static void saw_init_audio(void) {
+void init_audio(void) {
ma_device_config config = ma_device_config_init(
ma_device_type_playback);
config.playback.format = ma_format_f32;
config.playback.channels = CHANNEL_COUNT;
config.sampleRate = SAMPLE_RATE;
- config.dataCallback = saw_audio_callback;
+ config.dataCallback = audio_callback;
config.pUserData = NULL;
- if (ma_device_init(NULL, &config, &saw_audio_device) !=
+ if (ma_device_init(NULL, &config, &audio_device) !=
MA_SUCCESS) {
printf("ma_device_init failed.\n");
fflush(stdout);
return;
}
- ma_device_start(&saw_audio_device);
+ ma_device_start(&audio_device);
}
-static void saw_init(void) {
+void init(void) {
// Init globals
//
- memset(saw_key_pressed, 0, sizeof saw_key_pressed);
- memset(saw_drop_file_name, 0, sizeof saw_drop_file_name);
- memset(&saw_drop_file_data, 0, sizeof saw_drop_file_data);
- memset(saw_playback_buffer, 0, sizeof saw_playback_buffer);
- memset(saw_playback_temp, 0, sizeof saw_playback_temp);
+ memset(key_pressed, 0, sizeof key_pressed);
+ memset(drop_file_name, 0, sizeof drop_file_name);
+ memset(&drop_file_data, 0, sizeof drop_file_data);
+ memset(playback_buffer, 0, sizeof playback_buffer);
+ memset(playback_temp, 0, sizeof playback_temp);
// Init RNG
//
u64 rng_seed;
secure_random(sizeof rng_seed, &rng_seed);
- mt64_init(&saw_rng_mt64, rng_seed);
- mt64_rotate(&saw_rng_mt64);
+ mt64_init(&rng_mt64, rng_seed);
+ mt64_rotate(&rng_mt64);
// Init NanoVG
//
#ifdef SOKOL_GLCORE33
- saw_nvg = nvgCreateGL3(NVG_ANTIALIAS | NVG_STENCIL_STROKES);
+ nvg = nvgCreateGL3(NVG_ANTIALIAS | NVG_STENCIL_STROKES);
#else
- saw_nvg = nvgCreateGLES3(NVG_ANTIALIAS | NVG_STENCIL_STROKES);
+ nvg = nvgCreateGLES3(NVG_ANTIALIAS | NVG_STENCIL_STROKES);
#endif
// Init playback
//
- if (mtx_init(&saw_playback_mutex, mtx_plain) != thrd_success) {
+ if (mtx_init(&playback_mutex, mtx_plain) != thrd_success) {
printf("mtx_init failed.\n");
fflush(stdout);
}
@@ -3202,18 +4009,18 @@ static void saw_init(void) {
// Load fonts
//
- saw_font_text = nvgCreateFontMem(saw_nvg, "", (u8 *) saw_ttf_text,
- SAW_TTF_TEXT_SIZE, 0);
+ font_text = nvgCreateFontMem(nvg, "", (u8 *) ttf_text,
+ TTF_TEXT_SIZE, 0);
- if (saw_font_text == -1) {
+ if (font_text == -1) {
printf("nvgCreateFontMem failed.\n");
fflush(stdout);
}
- saw_font_icons = nvgCreateFontMem(saw_nvg, "", (u8 *) saw_ttf_icons,
- SAW_TTF_ICONS_SIZE, 0);
+ font_icons = nvgCreateFontMem(nvg, "", (u8 *) ttf_icons,
+ TTF_ICONS_SIZE, 0);
- if (saw_font_icons == -1) {
+ if (font_icons == -1) {
printf("nvgCreateFontMem failed.\n");
fflush(stdout);
}
@@ -3226,10 +4033,10 @@ static void saw_init(void) {
static f64 tuning[PITCH_COUNT];
- saw_tuning_equal_temperament(tuning);
+ tuning_equal_temperament(tuning);
for (i32 i = 0; i < ROLL_COUNT; i++) {
- saw_rolls[i] = (saw_roll_t) {
+ rolls[i] = (Roll) {
.enabled = (i == 0),
.track = 0,
.pitch_turned_off = { 0 },
@@ -3245,11 +4052,11 @@ static void saw_init(void) {
.ui_offset_y = ROLL_DEFAULT_UI_OFFSET_Y,
};
- memcpy(saw_rolls[i].tuning, tuning, sizeof tuning);
+ memcpy(rolls[i].tuning, tuning, sizeof tuning);
}
for (i32 i = 0; i < TRACK_COUNT; i++)
- saw_tracks[i] = (saw_track_t) {
+ tracks[i] = (Track) {
.instrument = INSTRUMENT_OSCILLATOR,
.oscillator = {
.wave = WAVE_SINE,
@@ -3269,7 +4076,7 @@ static void saw_init(void) {
// Determine the project file name
//
- if (saw_project_file.size == 0) {
+ if (project_file.size == 0) {
c8 arena_buf[10000];
kit_allocator_t arena = kit_alloc_buffer(sizeof arena_buf,
arena_buf);
@@ -3288,41 +4095,41 @@ static void saw_init(void) {
c8 project_name[] = "quick.saw";
assert(cache.size + 1 + sizeof project_name <
- sizeof saw_project_file_buf);
+ sizeof project_file_buf);
if (cache.size + 1 + sizeof project_name >=
- sizeof saw_project_file_buf) {
+ sizeof project_file_buf) {
printf("File name too big\n");
fflush(stdout);
return;
}
- memcpy(saw_project_file_buf, cache.values, cache.size);
- saw_project_file_buf[cache.size] = PATH_DELIM_C;
- memcpy(saw_project_file_buf + cache.size + 1, project_name,
+ memcpy(project_file_buf, cache.values, cache.size);
+ project_file_buf[cache.size] = PATH_DELIM_C;
+ memcpy(project_file_buf + cache.size + 1, project_name,
sizeof project_name);
- saw_project_file.size = strlen(saw_project_file_buf);
- saw_project_file.values = saw_project_file_buf;
+ project_file.size = strlen(project_file_buf);
+ project_file.values = project_file_buf;
}
}
- printf("Project file: %s\n", BS(saw_project_file));
+ printf("Project file: %s\n", BS(project_file));
fflush(stdout);
// Load the project from a file
//
- saw_project_parse_file(saw_project_file);
+ project_parse_file(project_file);
}
-static void saw_frame(void) {
+void frame(void) {
// TODO
// - Check how much time passed to see if we need to adjust the
// buffer size.
- (void) saw_ui_value_int;
+ (void) ui_value_int;
- saw_audio_render();
+ audio_render();
i64 frame_width = sapp_width();
i64 frame_height = sapp_height();
@@ -3336,48 +4143,48 @@ static void saw_frame(void) {
{
// Playback
//
- if (saw_key_pressed[SAPP_KEYCODE_SPACE])
- saw_playback_on = !saw_playback_on;
- if (saw_key_pressed[SAPP_KEYCODE_ENTER])
- saw_playback_frame = 0;
+ if (key_pressed[SAPP_KEYCODE_SPACE])
+ playback_on = !playback_on;
+ if (key_pressed[SAPP_KEYCODE_ENTER])
+ playback_frame = 0;
// Duplicate
//
- if (saw_key_pressed[SAPP_KEYCODE_D] ||
- (saw_edit_mode == EDIT_MODE_CLONE && saw_lbutton_click))
- saw_compose.duplicate_input = 1;
+ if (key_pressed[SAPP_KEYCODE_D] ||
+ (edit_mode == EDIT_MODE_CLONE && lbutton_click))
+ compose.duplicate_input = 1;
// Panning control
//
- if (saw_key_pressed[SAPP_KEYCODE_ESCAPE])
- saw_ui_reset_offset();
+ if (key_pressed[SAPP_KEYCODE_ESCAPE])
+ ui_reset_offset();
for (i64 i = 0; i < ROLL_COUNT; i++) {
- if (saw_rolls[i].ui_offset_x_input)
- saw_rolls[i].ui_offset_x += saw_mouse_dx;
- if (saw_rolls[i].ui_offset_y_input)
- saw_rolls[i].ui_offset_y += saw_mouse_dy;
+ if (rolls[i].ui_offset_x_input)
+ rolls[i].ui_offset_x += mouse_dx;
+ if (rolls[i].ui_offset_y_input)
+ rolls[i].ui_offset_y += mouse_dy;
}
- if (saw_compose.ui_offset_input) {
- saw_compose.ui_offset_x += saw_mouse_dx;
- saw_compose.ui_offset_y += saw_mouse_dy;
+ if (compose.ui_offset_input) {
+ compose.ui_offset_x += mouse_dx;
+ compose.ui_offset_y += mouse_dy;
}
// Tabs
//
- if (saw_key_pressed[SAPP_KEYCODE_TAB])
- saw_ui_tab = (saw_ui_tab + 1) % UI_TAB_COUNT;
+ if (key_pressed[SAPP_KEYCODE_TAB])
+ ui_tab = (ui_tab + 1) % UI_TAB_COUNT;
}
// Render UI
//
- nvgBeginFrame(saw_nvg, frame_width, frame_height, sapp_dpi_scale());
+ nvgBeginFrame(nvg, frame_width, frame_height, sapp_dpi_scale());
{
// We have to reset intermediate state for UI input to work
// correctly.
- saw_ui_begin();
+ ui_begin();
- switch (saw_ui_tab) {
+ switch (ui_tab) {
case UI_MAIN: {
// Adjust UI layout
//
@@ -3396,7 +4203,7 @@ static void saw_frame(void) {
// Render header
//
- saw_ui_header(0, // x0
+ ui_header(0, // x0
0, // y0
frame_width, // width
header_height // height
@@ -3404,20 +4211,20 @@ static void saw_frame(void) {
// Render compose view
//
- saw_ui_compose(0, // x0
+ ui_compose(0, // x0
header_height, // y0
frame_width - track_width, // width
compose_height // height
);
- if (saw_current_track != -1) {
+ if (current_track != -1) {
// Render track view
//
c8 buf[64];
- sprintf(buf, "Track %lld", saw_current_track + 1);
+ sprintf(buf, "Track %lld", current_track + 1);
- saw_ui_track(saw_tracks + saw_current_track, // track
+ ui_track(tracks + current_track, // track
frame_width - track_width, // x0
header_height, // y0
track_width, // width
@@ -3426,14 +4233,14 @@ static void saw_frame(void) {
);
}
- if (saw_current_roll != -1) {
+ if (current_roll != -1) {
// Render roll view
//
c8 buf[64];
- sprintf(buf, "Sheet %lld", saw_current_roll + 1);
+ sprintf(buf, "Sheet %lld", current_roll + 1);
- saw_ui_roll(saw_rolls + saw_current_roll, // roll
+ ui_roll(rolls + current_roll, // roll
0, // x0
header_height + compose_height, // y0
frame_width - track_width, // width
@@ -3449,9 +4256,9 @@ static void saw_frame(void) {
//
static const i64 time_rate = 256;
- static saw_ui_grid_item_t items[100] = { 0 };
+ static UI_Grid_Item items[100] = { 0 };
- static saw_ui_grid_t grid = {
+ static UI_Grid grid = {
.x0 = 0.,
.y0 = 0.,
.width = 0.,
@@ -3474,70 +4281,70 @@ static void saw_frame(void) {
grid.y0 = 20.;
grid.width = frame_width - 40.;
grid.height = frame_height - 40.;
- grid.time_cursor = (saw_playback_frame * time_rate) /
+ grid.time_cursor = (playback_frame * time_rate) /
SAMPLE_RATE;
- saw_ui_grid(&grid);
+ ui_grid(&grid);
} break;
default:;
}
- saw_ui_end();
+ ui_end();
}
- nvgEndFrame(saw_nvg);
+ nvgEndFrame(nvg);
// Cleanup input state.
//
{
- saw_mouse_dx = 0;
- saw_mouse_dy = 0;
- saw_lbutton_click = 0;
- saw_rbutton_click = 0;
- saw_mbutton_click = 0;
- saw_shift_on = 0;
- saw_ctrl_on = 0;
-
- memset(saw_key_pressed, 0, sizeof saw_key_pressed);
-
- if (saw_drop_file_data.size != 0) {
- memset(saw_drop_file_name, 0, sizeof saw_drop_file_name);
- DA_DESTROY(saw_drop_file_data);
+ mouse_dx = 0;
+ mouse_dy = 0;
+ lbutton_click = 0;
+ rbutton_click = 0;
+ mbutton_click = 0;
+ shift_on = 0;
+ ctrl_on = 0;
+
+ memset(key_pressed, 0, sizeof key_pressed);
+
+ if (drop_file_data.size != 0) {
+ memset(drop_file_name, 0, sizeof drop_file_name);
+ DA_DESTROY(drop_file_data);
}
}
}
-static void saw_cleanup(void) {
- ma_device_uninit(&saw_audio_device);
+void cleanup(void) {
+ ma_device_uninit(&audio_device);
- mtx_destroy(&saw_playback_mutex);
+ mtx_destroy(&playback_mutex);
#ifdef SOKOL_GLCORE33
- nvgDeleteGL3(saw_nvg);
+ nvgDeleteGL3(nvg);
#else
- nvgDeleteGLES3(saw_nvg);
+ nvgDeleteGLES3(nvg);
#endif
// Save the project to a file
//
- if (saw_project_file.size != 0)
- saw_project_print_to_file(saw_project_file);
+ if (project_file.size != 0)
+ project_print_to_file(project_file);
// Cleanup samplers
//
for (i64 i = 0; i < TRACK_COUNT; i++)
- if (saw_tracks[i].instrument == INSTRUMENT_SAMPLER)
- saw_sampler_cleanup(&saw_tracks[i].sampler);
+ if (tracks[i].instrument == INSTRUMENT_SAMPLER)
+ sampler_cleanup(&tracks[i].sampler);
// Cleanup buffers
//
- if (saw_drop_file_data.size != 0)
- DA_DESTROY(saw_drop_file_data);
+ if (drop_file_data.size != 0)
+ DA_DESTROY(drop_file_data);
}
#ifdef __EMSCRIPTEN__
-static void saw_fetch_drop(
+void fetch_drop(
sapp_html5_fetch_response const *response) {
assert(response != NULL);
@@ -3547,90 +4354,90 @@ static void saw_fetch_drop(
return;
}
- assert(saw_drop_file_data.size >= response->data.size);
+ assert(drop_file_data.size >= response->data.size);
- DA_RESIZE(saw_drop_file_data, response->data.size);
+ DA_RESIZE(drop_file_data, response->data.size);
}
#endif
-static void saw_event(sapp_event const *event) {
+void event(sapp_event const *event) {
// Resume the audio only after a user action. This is required
// for the browser compatibility.
//
{
- if (saw_playback_suspended &&
+ if (playback_suspended &&
(event->type == SAPP_EVENTTYPE_MOUSE_DOWN ||
event->type == SAPP_EVENTTYPE_TOUCHES_BEGAN ||
event->type == SAPP_EVENTTYPE_KEY_DOWN)) {
- saw_init_audio();
- saw_playback_suspended = 0;
+ init_audio();
+ playback_suspended = 0;
}
}
switch (event->type) {
case SAPP_EVENTTYPE_MOUSE_MOVE:
- saw_mouse_on = 1;
- saw_shift_on = (event->modifiers & SAPP_MODIFIER_SHIFT) != 0;
- saw_ctrl_on = (event->modifiers & SAPP_MODIFIER_CTRL) != 0;
- saw_mouse_dx += event->mouse_dx;
- saw_mouse_dy += event->mouse_dy;
- saw_mouse_x = event->mouse_x;
- saw_mouse_y = event->mouse_y;
+ mouse_on = 1;
+ shift_on = (event->modifiers & SAPP_MODIFIER_SHIFT) != 0;
+ ctrl_on = (event->modifiers & SAPP_MODIFIER_CTRL) != 0;
+ mouse_dx += event->mouse_dx;
+ mouse_dy += event->mouse_dy;
+ mouse_x = event->mouse_x;
+ mouse_y = event->mouse_y;
break;
case SAPP_EVENTTYPE_MOUSE_DOWN:
- saw_shift_on = (event->modifiers & SAPP_MODIFIER_SHIFT) != 0;
- saw_ctrl_on = (event->modifiers & SAPP_MODIFIER_CTRL) != 0;
+ shift_on = (event->modifiers & SAPP_MODIFIER_SHIFT) != 0;
+ ctrl_on = (event->modifiers & SAPP_MODIFIER_CTRL) != 0;
switch (event->mouse_button) {
case SAPP_MOUSEBUTTON_LEFT:
- saw_lbutton_down = 1;
- saw_lbutton_click = 1;
+ lbutton_down = 1;
+ lbutton_click = 1;
break;
case SAPP_MOUSEBUTTON_RIGHT:
- saw_rbutton_down = 1;
- saw_rbutton_click = 1;
+ rbutton_down = 1;
+ rbutton_click = 1;
break;
case SAPP_MOUSEBUTTON_MIDDLE:
- saw_mbutton_down = 1;
- saw_mbutton_click = 1;
+ mbutton_down = 1;
+ mbutton_click = 1;
break;
default:;
}
break;
case SAPP_EVENTTYPE_MOUSE_UP:
- saw_shift_on = (event->modifiers & SAPP_MODIFIER_SHIFT) != 0;
- saw_ctrl_on = (event->modifiers & SAPP_MODIFIER_CTRL) != 0;
+ shift_on = (event->modifiers & SAPP_MODIFIER_SHIFT) != 0;
+ ctrl_on = (event->modifiers & SAPP_MODIFIER_CTRL) != 0;
switch (event->mouse_button) {
case SAPP_MOUSEBUTTON_LEFT:
- saw_lbutton_down = 0;
+ lbutton_down = 0;
break;
case SAPP_MOUSEBUTTON_RIGHT:
- saw_rbutton_down = 0;
+ rbutton_down = 0;
break;
case SAPP_MOUSEBUTTON_MIDDLE:
- saw_mbutton_down = 0;
+ mbutton_down = 0;
break;
default:;
}
break;
case SAPP_EVENTTYPE_MOUSE_LEAVE:
- saw_mouse_on = 0;
- saw_shift_on = (event->modifiers & SAPP_MODIFIER_SHIFT) != 0;
- saw_ctrl_on = (event->modifiers & SAPP_MODIFIER_CTRL) != 0;
- saw_lbutton_down = 0;
- saw_rbutton_down = 0;
- saw_mbutton_down = 0;
+ mouse_on = 0;
+ shift_on = (event->modifiers & SAPP_MODIFIER_SHIFT) != 0;
+ ctrl_on = (event->modifiers & SAPP_MODIFIER_CTRL) != 0;
+ lbutton_down = 0;
+ rbutton_down = 0;
+ mbutton_down = 0;
break;
case SAPP_EVENTTYPE_KEY_DOWN:
- saw_shift_on = (event->modifiers & SAPP_MODIFIER_SHIFT) != 0;
- saw_ctrl_on = (event->modifiers & SAPP_MODIFIER_CTRL) != 0;
+ shift_on = (event->modifiers & SAPP_MODIFIER_SHIFT) != 0;
+ ctrl_on = (event->modifiers & SAPP_MODIFIER_CTRL) != 0;
if (!event->key_repeat && event->key_code >= 0 &&
event->key_code <
- sizeof saw_key_pressed / sizeof *saw_key_pressed)
- saw_key_pressed[event->key_code] = 1;
+ sizeof key_pressed / sizeof *key_pressed)
+ key_pressed[event->key_code] = 1;
break;
// Touch events.
@@ -3639,11 +4446,11 @@ static void saw_event(sapp_event const *event) {
case SAPP_EVENTTYPE_TOUCHES_BEGAN:
if (event->num_touches >= 1) {
- saw_mouse_x = event->touches[0].pos_x;
- saw_mouse_y = event->touches[0].pos_y;
- saw_lbutton_down = 1;
- saw_lbutton_click = 1;
- saw_mouse_on = 1;
+ mouse_x = event->touches[0].pos_x;
+ mouse_y = event->touches[0].pos_y;
+ lbutton_down = 1;
+ lbutton_click = 1;
+ mouse_on = 1;
}
break;
@@ -3651,10 +4458,10 @@ static void saw_event(sapp_event const *event) {
if (event->num_touches >= 1) {
i64 x = event->touches[0].pos_x;
i64 y = event->touches[0].pos_y;
- saw_mouse_dx += x - saw_mouse_x;
- saw_mouse_dy += y - saw_mouse_y;
- saw_mouse_x = x;
- saw_mouse_y = y;
+ mouse_dx += x - mouse_x;
+ mouse_dy += y - mouse_y;
+ mouse_x = x;
+ mouse_y = y;
}
break;
@@ -3662,26 +4469,26 @@ static void saw_event(sapp_event const *event) {
if (event->num_touches >= 1) {
i64 x = event->touches[0].pos_x;
i64 y = event->touches[0].pos_y;
- saw_mouse_dx += x - saw_mouse_x;
- saw_mouse_dy += y - saw_mouse_y;
- saw_mouse_x = x;
- saw_mouse_y = y;
+ mouse_dx += x - mouse_x;
+ mouse_dy += y - mouse_y;
+ mouse_x = x;
+ mouse_y = y;
}
- saw_lbutton_down = 0;
- saw_mouse_on = 0;
+ lbutton_down = 0;
+ mouse_on = 0;
break;
case SAPP_EVENTTYPE_TOUCHES_CANCELLED:
- saw_lbutton_down = 0;
- saw_mouse_on = 0;
+ lbutton_down = 0;
+ mouse_on = 0;
break;
case SAPP_EVENTTYPE_FILES_DROPPED: {
// Get the drop cursor position
//
- saw_mouse_x = event->mouse_x;
- saw_mouse_y = event->mouse_y;
+ mouse_x = event->mouse_x;
+ mouse_y = event->mouse_y;
// Get the dropped file name
//
@@ -3698,11 +4505,11 @@ static void saw_event(sapp_event const *event) {
if (len <= 0)
break;
- if (len >= sizeof saw_drop_file_name)
- len = sizeof saw_drop_file_name - 1;
+ if (len >= (i64) sizeof drop_file_name)
+ len = sizeof drop_file_name - 1;
- memcpy(saw_drop_file_name, file_name, len);
- saw_drop_file_name[len] = '\0';
+ memcpy(drop_file_name, file_name, len);
+ drop_file_name[len] = '\0';
// Read the file data into the buffer
//
@@ -3717,13 +4524,13 @@ static void saw_event(sapp_event const *event) {
if (size <= 0)
break;
- if (saw_drop_file_data.size > 0)
- DA_DESTROY(saw_drop_file_data);
+ if (drop_file_data.size > 0)
+ DA_DESTROY(drop_file_data);
- DA_INIT(saw_drop_file_data, size, NULL);
+ DA_INIT(drop_file_data, size, NULL);
- assert(saw_drop_file_data.size == size);
- if (saw_drop_file_data.size != size) {
+ assert(drop_file_data.size == size);
+ if (drop_file_data.size != size) {
printf("Bad alloc\n");
fflush(stdout);
break;
@@ -3732,8 +4539,8 @@ static void saw_event(sapp_event const *event) {
#ifdef __EMSCRIPTEN__
sapp_html5_fetch_dropped_file(&(sapp_html5_fetch_request) {
.dropped_file_index = 0,
- .callback = saw_fetch_drop,
- .buffer = { .ptr = saw_drop_file_data.values,
+ .callback = fetch_drop,
+ .buffer = { .ptr = drop_file_data.values,
.size = size },
});
#else
@@ -3746,7 +4553,7 @@ static void saw_event(sapp_event const *event) {
break;
}
- size = fread(saw_drop_file_data.values, 1, size, f);
+ size = fread(drop_file_data.values, 1, size, f);
fclose(f);
assert(size > 0);
@@ -3756,7 +4563,7 @@ static void saw_event(sapp_event const *event) {
break;
}
- DA_RESIZE(saw_drop_file_data, size);
+ DA_RESIZE(drop_file_data, size);
#endif
} break;
@@ -3764,14 +4571,27 @@ static void saw_event(sapp_event const *event) {
}
}
-c8 const *__lsan_default_suppressions() {
+c8 const *__lsan_default_suppressions(void) {
// There is leaks in NVidia driver on Linux.
return "leak:nvidia";
}
-static void saw_logger(c8 const *tag, u32 log_level, u32 log_item_id,
- c8 const *message_or_null, u32 line_nr,
- c8 const *filename_or_null, void *user_data) {
+void logger(
+ c8 const *tag,
+ u32 log_level,
+ u32 log_item_id,
+ c8 const *message_or_null,
+ u32 line_nr,
+ c8 const *filename_or_null,
+ void * user_data
+) {
+ (void) tag;
+ (void) log_level;
+ (void) log_item_id;
+ (void) line_nr;
+ (void) filename_or_null;
+ (void) user_data;
+
if (message_or_null != NULL)
printf("%s", message_or_null);
printf("\n");
@@ -3797,8 +4617,8 @@ sapp_desc sokol_main(i32 argc, c8 **argv) {
else
printf("Unknown command line argument: \"-%c\"\n",
argv[i][k]);
- } else if (i > 0 && saw_project_file.size == 0)
- saw_project_file = kit_str(strlen(argv[i]), argv[i]);
+ } else if (i > 0 && project_file.size == 0)
+ project_file = kit_str(strlen(argv[i]), argv[i]);
else if (i > 0)
printf("Unknown command line argument: \"%s\"\n", argv[i]);
@@ -3826,11 +4646,34 @@ sapp_desc sokol_main(i32 argc, c8 **argv) {
.width = 1280,
.height = 720,
.enable_dragndrop = 1,
- .max_dropped_file_path_length = sizeof saw_drop_file_name,
- .init_cb = saw_init,
- .frame_cb = saw_frame,
- .cleanup_cb = saw_cleanup,
- .event_cb = saw_event,
- .logger.func = saw_logger,
+ .max_dropped_file_path_length = sizeof drop_file_name,
+ .init_cb = init,
+ .frame_cb = frame,
+ .cleanup_cb = cleanup,
+ .event_cb = event,
+ .logger.func = logger,
};
}
+
+// ================================================================
+//
+// TESTS
+//
+// ================================================================
+
+#elif TESTS
+
+#include "kit/types.h"
+
+#define KIT_TEST_IMPLEMENTATION
+#include "kit/test.h"
+
+i32 main(i32 argc, char **argv) {
+ return run_tests(argc, argv);
+}
+
+// ================================================================
+
+#else
+#error Define either of: BUILDME=1, DEPENDENCIES=1, TESTS=1, EXE=1
+#endif
diff --git a/source/sokol/LICENSE b/sokol/LICENSE
index efdc02e..efdc02e 100644
--- a/source/sokol/LICENSE
+++ b/sokol/LICENSE
diff --git a/source/sokol/sokol_app.h b/sokol/sokol_app.h
index 064a72f..064a72f 100644
--- a/source/sokol/sokol_app.h
+++ b/sokol/sokol_app.h
diff --git a/source/kit/LICENSE b/source/kit/LICENSE
deleted file mode 100644
index 8ac4c29..0000000
--- a/source/kit/LICENSE
+++ /dev/null
@@ -1,30 +0,0 @@
-Copyright (c) 2022-2024 Mitya Selivanov
-
-HTTP1
-Copyright (c) 2016 Christian C. Sachs
-
-miniz
-Copyright (c) 2013-2014 RAD Game Tools and Valve Software
-Copyright (c) 2010-2014 Rich Geldreich and Tenacious Software LLC
-
-C11 threads from Mesa
-Copyright (c) 2022 Yonggang Luo
-Copyright (c) 2012 yohhoy
-
-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.
diff --git a/source/kit/defer.h b/source/kit/defer.h
deleted file mode 100644
index bb78b69..0000000
--- a/source/kit/defer.h
+++ /dev/null
@@ -1,39 +0,0 @@
-// Requres GCC or Clang with `-fblocks` option available.
-//
-
-#ifndef KIT_DEFER_H
-#define KIT_DEFER_H
-
-#if !defined(__clang__) && !defined(__APPLE__)
-# error C blocks support required
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if defined(__GNUC__) || defined(__clang__)
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wunused-function"
-# pragma GCC diagnostic ignored "-Wunknown-pragmas"
-#endif
-
-static void kit_defer_cleanup_(void (^*b)(void)) { (*b)(); }
-
-#define kit_defer_merge_(a,b) a##b
-#define kit_defer_varname_(a) \
- kit_defer_merge_(kit_defer_scopevar_,a)
-#define defer \
- __attribute__((unused, cleanup(kit_defer_cleanup_))) \
- void (^kit_defer_varname_(__COUNTER__))(void) = ^
-#define defer_ref __block
-
-#if defined(__GNUC__) || defined(__clang__)
-# pragma GCC diagnostic pop
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/source/kit/miniz/miniz.c b/source/kit/miniz/miniz.c
deleted file mode 100644
index b96c176..0000000
--- a/source/kit/miniz/miniz.c
+++ /dev/null
@@ -1,692 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2013-2014 RAD Game Tools and Valve Software
- * Copyright 2010-2014 Rich Geldreich and Tenacious Software LLC
- * All Rights Reserved.
- *
- * 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.
- *
- **************************************************************************/
-
-#include "miniz.h"
-
-typedef unsigned char
- mz_validate_uint16[sizeof(mz_uint16) == 2 ? 1 : -1];
-typedef unsigned char
- mz_validate_uint32[sizeof(mz_uint32) == 4 ? 1 : -1];
-typedef unsigned char
- mz_validate_uint64[sizeof(mz_uint64) == 8 ? 1 : -1];
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* ------------------- zlib-style API's */
-
-mz_ulong mz_adler32(mz_ulong adler, const unsigned char *ptr,
- size_t buf_len) {
- mz_uint32 i, s1 = (mz_uint32) (adler & 0xffff),
- s2 = (mz_uint32) (adler >> 16);
- size_t block_len = buf_len % 5552;
- if (!ptr)
- return MZ_ADLER32_INIT;
- while (buf_len) {
- for (i = 0; i + 7 < block_len; i += 8, ptr += 8) {
- s1 += ptr[0], s2 += s1;
- s1 += ptr[1], s2 += s1;
- s1 += ptr[2], s2 += s1;
- s1 += ptr[3], s2 += s1;
- s1 += ptr[4], s2 += s1;
- s1 += ptr[5], s2 += s1;
- s1 += ptr[6], s2 += s1;
- s1 += ptr[7], s2 += s1;
- }
- for (; i < block_len; ++i) s1 += *ptr++, s2 += s1;
- s1 %= 65521U, s2 %= 65521U;
- buf_len -= block_len;
- block_len = 5552;
- }
- return (s2 << 16) + s1;
-}
-
-/* Karl Malbrain's compact CRC-32. See "A compact CCITT crc16 and
- * crc32 C implementation that balances processor cache usage against
- * speed": http://www.geocities.com/malbrain/ */
-#if 0
- mz_ulong mz_crc32(mz_ulong crc, const mz_uint8 *ptr, size_t buf_len)
- {
- static const mz_uint32 s_crc32[16] = { 0, 0x1db71064, 0x3b6e20c8, 0x26d930ac, 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
- 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c };
- mz_uint32 crcu32 = (mz_uint32)crc;
- if (!ptr)
- return MZ_CRC32_INIT;
- crcu32 = ~crcu32;
- while (buf_len--)
- {
- mz_uint8 b = *ptr++;
- crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b & 0xF)];
- crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b >> 4)];
- }
- return ~crcu32;
- }
-#elif defined(USE_EXTERNAL_MZCRC)
-/* If USE_EXTERNAL_CRC is defined, an external module will export the
- * mz_crc32() symbol for us to use, e.g. an SSE-accelerated version.
- * Depending on the impl, it may be necessary to ~ the input/output
- * crc values.
- */
-mz_ulong mz_crc32(mz_ulong crc, const mz_uint8 *ptr, size_t buf_len);
-#else
-/* Faster, but larger CPU cache footprint.
- */
-mz_ulong mz_crc32(mz_ulong crc, const mz_uint8 *ptr, size_t buf_len) {
- static const mz_uint32 s_crc_table[256] = {
- 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419,
- 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4,
- 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07,
- 0x90BF1D91, 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,
- 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856,
- 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,
- 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4,
- 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
- 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,
- 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A,
- 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599,
- 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
- 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190,
- 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F,
- 0x9FBFE4A5, 0xE8B8D433, 0x7807C9A2, 0x0F00F934, 0x9609A88E,
- 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
- 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED,
- 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,
- 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3,
- 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,
- 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A,
- 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5,
- 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010,
- 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
- 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17,
- 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6,
- 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,
- 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,
- 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, 0xF00F9344,
- 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,
- 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A,
- 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
- 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1,
- 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C,
- 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF,
- 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
- 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE,
- 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31,
- 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C,
- 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
- 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B,
- 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,
- 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1,
- 0x18B74777, 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,
- 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,
- 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7,
- 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66,
- 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
- 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605,
- 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8,
- 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B,
- 0x2D02EF8D
- };
-
- mz_uint32 crc32 = (mz_uint32) crc ^ 0xFFFFFFFF;
- const mz_uint8 *pByte_buf = (const mz_uint8 *) ptr;
-
- while (buf_len >= 4) {
- crc32 = (crc32 >> 8) ^ s_crc_table[(crc32 ^ pByte_buf[0]) & 0xFF];
- crc32 = (crc32 >> 8) ^ s_crc_table[(crc32 ^ pByte_buf[1]) & 0xFF];
- crc32 = (crc32 >> 8) ^ s_crc_table[(crc32 ^ pByte_buf[2]) & 0xFF];
- crc32 = (crc32 >> 8) ^ s_crc_table[(crc32 ^ pByte_buf[3]) & 0xFF];
- pByte_buf += 4;
- buf_len -= 4;
- }
-
- while (buf_len) {
- crc32 = (crc32 >> 8) ^ s_crc_table[(crc32 ^ pByte_buf[0]) & 0xFF];
- ++pByte_buf;
- --buf_len;
- }
-
- return ~crc32;
-}
-#endif
-
-void mz_free(void *p) {
- MZ_FREE(p);
-}
-
-void *miniz_def_alloc_func(void *opaque, size_t items, size_t size) {
- (void) opaque, (void) items, (void) size;
- return MZ_MALLOC(items * size);
-}
-void miniz_def_free_func(void *opaque, void *address) {
- (void) opaque, (void) address;
- MZ_FREE(address);
-}
-void *miniz_def_realloc_func(void *opaque, void *address,
- size_t items, size_t size) {
- (void) opaque, (void) address, (void) items, (void) size;
- return MZ_REALLOC(address, items * size);
-}
-
-const char *mz_version(void) {
- return MZ_VERSION;
-}
-
-#ifndef MINIZ_NO_ZLIB_APIS
-
-# ifndef MINIZ_NO_DEFLATE_APIS
-
-int mz_deflateInit(mz_streamp pStream, int level) {
- return mz_deflateInit2(pStream, level, MZ_DEFLATED,
- MZ_DEFAULT_WINDOW_BITS, 9,
- MZ_DEFAULT_STRATEGY);
-}
-
-int mz_deflateInit2(mz_streamp pStream, int level, int method,
- int window_bits, int mem_level, int strategy) {
- tdefl_compressor *pComp;
- mz_uint comp_flags = TDEFL_COMPUTE_ADLER32 |
- tdefl_create_comp_flags_from_zip_params(
- level, window_bits, strategy);
-
- if (!pStream)
- return MZ_STREAM_ERROR;
- if ((method != MZ_DEFLATED) ||
- ((mem_level < 1) || (mem_level > 9)) ||
- ((window_bits != MZ_DEFAULT_WINDOW_BITS) &&
- (-window_bits != MZ_DEFAULT_WINDOW_BITS)))
- return MZ_PARAM_ERROR;
-
- pStream->data_type = 0;
- pStream->adler = MZ_ADLER32_INIT;
- pStream->msg = NULL;
- pStream->reserved = 0;
- pStream->total_in = 0;
- pStream->total_out = 0;
- if (!pStream->zalloc)
- pStream->zalloc = miniz_def_alloc_func;
- if (!pStream->zfree)
- pStream->zfree = miniz_def_free_func;
-
- pComp = (tdefl_compressor *) pStream->zalloc(
- pStream->opaque, 1, sizeof(tdefl_compressor));
- if (!pComp)
- return MZ_MEM_ERROR;
-
- pStream->state = (struct mz_internal_state *) pComp;
-
- if (tdefl_init(pComp, NULL, NULL, comp_flags) !=
- TDEFL_STATUS_OKAY) {
- mz_deflateEnd(pStream);
- return MZ_PARAM_ERROR;
- }
-
- return MZ_OK;
-}
-
-int mz_deflateReset(mz_streamp pStream) {
- if ((!pStream) || (!pStream->state) || (!pStream->zalloc) ||
- (!pStream->zfree))
- return MZ_STREAM_ERROR;
- pStream->total_in = pStream->total_out = 0;
- tdefl_init((tdefl_compressor *) pStream->state, NULL, NULL,
- ((tdefl_compressor *) pStream->state)->m_flags);
- return MZ_OK;
-}
-
-int mz_deflate(mz_streamp pStream, int flush) {
- size_t in_bytes, out_bytes;
- mz_ulong orig_total_in, orig_total_out;
- int mz_status = MZ_OK;
-
- if ((!pStream) || (!pStream->state) || (flush < 0) ||
- (flush > MZ_FINISH) || (!pStream->next_out))
- return MZ_STREAM_ERROR;
- if (!pStream->avail_out)
- return MZ_BUF_ERROR;
-
- if (flush == MZ_PARTIAL_FLUSH)
- flush = MZ_SYNC_FLUSH;
-
- if (((tdefl_compressor *) pStream->state)->m_prev_return_status ==
- TDEFL_STATUS_DONE)
- return (flush == MZ_FINISH) ? MZ_STREAM_END : MZ_BUF_ERROR;
-
- orig_total_in = pStream->total_in;
- orig_total_out = pStream->total_out;
- for (;;) {
- tdefl_status defl_status;
- in_bytes = pStream->avail_in;
- out_bytes = pStream->avail_out;
-
- defl_status = tdefl_compress((tdefl_compressor *) pStream->state,
- pStream->next_in, &in_bytes,
- pStream->next_out, &out_bytes,
- (tdefl_flush) flush);
- pStream->next_in += (mz_uint) in_bytes;
- pStream->avail_in -= (mz_uint) in_bytes;
- pStream->total_in += (mz_uint) in_bytes;
- pStream->adler = tdefl_get_adler32(
- (tdefl_compressor *) pStream->state);
-
- pStream->next_out += (mz_uint) out_bytes;
- pStream->avail_out -= (mz_uint) out_bytes;
- pStream->total_out += (mz_uint) out_bytes;
-
- if (defl_status < 0) {
- mz_status = MZ_STREAM_ERROR;
- break;
- } else if (defl_status == TDEFL_STATUS_DONE) {
- mz_status = MZ_STREAM_END;
- break;
- } else if (!pStream->avail_out)
- break;
- else if ((!pStream->avail_in) && (flush != MZ_FINISH)) {
- if ((flush) || (pStream->total_in != orig_total_in) ||
- (pStream->total_out != orig_total_out))
- break;
- return MZ_BUF_ERROR; /* Can't make forward progress without some
- * input.
- */
- }
- }
- return mz_status;
-}
-
-int mz_deflateEnd(mz_streamp pStream) {
- if (!pStream)
- return MZ_STREAM_ERROR;
- if (pStream->state) {
- pStream->zfree(pStream->opaque, pStream->state);
- pStream->state = NULL;
- }
- return MZ_OK;
-}
-
-mz_ulong mz_deflateBound(mz_streamp pStream, mz_ulong source_len) {
- (void) pStream;
- /* This is really over conservative. (And lame, but it's actually
- * pretty tricky to compute a true upper bound given the way tdefl's
- * blocking works.) */
- return MZ_MAX(128 + (source_len * 110) / 100,
- 128 + source_len +
- ((source_len / (31 * 1024)) + 1) * 5);
-}
-
-int mz_compress2(unsigned char *pDest, mz_ulong *pDest_len,
- const unsigned char *pSource, mz_ulong source_len,
- int level) {
- int status;
- mz_stream stream;
- memset(&stream, 0, sizeof(stream));
-
- /* In case mz_ulong is 64-bits (argh I hate longs). */
- if ((mz_uint64) (source_len | *pDest_len) > 0xFFFFFFFFU)
- return MZ_PARAM_ERROR;
-
- stream.next_in = pSource;
- stream.avail_in = (mz_uint32) source_len;
- stream.next_out = pDest;
- stream.avail_out = (mz_uint32) *pDest_len;
-
- status = mz_deflateInit(&stream, level);
- if (status != MZ_OK)
- return status;
-
- status = mz_deflate(&stream, MZ_FINISH);
- if (status != MZ_STREAM_END) {
- mz_deflateEnd(&stream);
- return (status == MZ_OK) ? MZ_BUF_ERROR : status;
- }
-
- *pDest_len = stream.total_out;
- return mz_deflateEnd(&stream);
-}
-
-int mz_compress(unsigned char *pDest, mz_ulong *pDest_len,
- const unsigned char *pSource, mz_ulong source_len) {
- return mz_compress2(pDest, pDest_len, pSource, source_len,
- MZ_DEFAULT_COMPRESSION);
-}
-
-mz_ulong mz_compressBound(mz_ulong source_len) {
- return mz_deflateBound(NULL, source_len);
-}
-
-# endif /*#ifndef MINIZ_NO_DEFLATE_APIS*/
-
-# ifndef MINIZ_NO_INFLATE_APIS
-
-typedef struct {
- tinfl_decompressor m_decomp;
- mz_uint m_dict_ofs, m_dict_avail, m_first_call, m_has_flushed;
- int m_window_bits;
- mz_uint8 m_dict[TINFL_LZ_DICT_SIZE];
- tinfl_status m_last_status;
-} inflate_state;
-
-int mz_inflateInit2(mz_streamp pStream, int window_bits) {
- inflate_state *pDecomp;
- if (!pStream)
- return MZ_STREAM_ERROR;
- if ((window_bits != MZ_DEFAULT_WINDOW_BITS) &&
- (-window_bits != MZ_DEFAULT_WINDOW_BITS))
- return MZ_PARAM_ERROR;
-
- pStream->data_type = 0;
- pStream->adler = 0;
- pStream->msg = NULL;
- pStream->total_in = 0;
- pStream->total_out = 0;
- pStream->reserved = 0;
- if (!pStream->zalloc)
- pStream->zalloc = miniz_def_alloc_func;
- if (!pStream->zfree)
- pStream->zfree = miniz_def_free_func;
-
- pDecomp = (inflate_state *) pStream->zalloc(pStream->opaque, 1,
- sizeof(inflate_state));
- if (!pDecomp)
- return MZ_MEM_ERROR;
-
- pStream->state = (struct mz_internal_state *) pDecomp;
-
- tinfl_init(&pDecomp->m_decomp);
- pDecomp->m_dict_ofs = 0;
- pDecomp->m_dict_avail = 0;
- pDecomp->m_last_status = TINFL_STATUS_NEEDS_MORE_INPUT;
- pDecomp->m_first_call = 1;
- pDecomp->m_has_flushed = 0;
- pDecomp->m_window_bits = window_bits;
-
- return MZ_OK;
-}
-
-int mz_inflateInit(mz_streamp pStream) {
- return mz_inflateInit2(pStream, MZ_DEFAULT_WINDOW_BITS);
-}
-
-int mz_inflateReset(mz_streamp pStream) {
- inflate_state *pDecomp;
- if (!pStream)
- return MZ_STREAM_ERROR;
-
- pStream->data_type = 0;
- pStream->adler = 0;
- pStream->msg = NULL;
- pStream->total_in = 0;
- pStream->total_out = 0;
- pStream->reserved = 0;
-
- pDecomp = (inflate_state *) pStream->state;
-
- tinfl_init(&pDecomp->m_decomp);
- pDecomp->m_dict_ofs = 0;
- pDecomp->m_dict_avail = 0;
- pDecomp->m_last_status = TINFL_STATUS_NEEDS_MORE_INPUT;
- pDecomp->m_first_call = 1;
- pDecomp->m_has_flushed = 0;
- /* pDecomp->m_window_bits = window_bits */;
-
- return MZ_OK;
-}
-
-int mz_inflate(mz_streamp pStream, int flush) {
- inflate_state *pState;
- mz_uint n, first_call, decomp_flags = TINFL_FLAG_COMPUTE_ADLER32;
- size_t in_bytes, out_bytes, orig_avail_in;
- tinfl_status status;
-
- if ((!pStream) || (!pStream->state))
- return MZ_STREAM_ERROR;
- if (flush == MZ_PARTIAL_FLUSH)
- flush = MZ_SYNC_FLUSH;
- if ((flush) && (flush != MZ_SYNC_FLUSH) && (flush != MZ_FINISH))
- return MZ_STREAM_ERROR;
-
- pState = (inflate_state *) pStream->state;
- if (pState->m_window_bits > 0)
- decomp_flags |= TINFL_FLAG_PARSE_ZLIB_HEADER;
- orig_avail_in = pStream->avail_in;
-
- first_call = pState->m_first_call;
- pState->m_first_call = 0;
- if (pState->m_last_status < 0)
- return MZ_DATA_ERROR;
-
- if (pState->m_has_flushed && (flush != MZ_FINISH))
- return MZ_STREAM_ERROR;
- pState->m_has_flushed |= (flush == MZ_FINISH);
-
- if ((flush == MZ_FINISH) && (first_call)) {
- /* MZ_FINISH on the first call implies that the input and output
- * buffers are large enough to hold the entire
- * compressed/decompressed file. */
- decomp_flags |= TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF;
- in_bytes = pStream->avail_in;
- out_bytes = pStream->avail_out;
- status = tinfl_decompress(&pState->m_decomp, pStream->next_in,
- &in_bytes, pStream->next_out,
- pStream->next_out, &out_bytes,
- decomp_flags);
- pState->m_last_status = status;
- pStream->next_in += (mz_uint) in_bytes;
- pStream->avail_in -= (mz_uint) in_bytes;
- pStream->total_in += (mz_uint) in_bytes;
- pStream->adler = tinfl_get_adler32(&pState->m_decomp);
- pStream->next_out += (mz_uint) out_bytes;
- pStream->avail_out -= (mz_uint) out_bytes;
- pStream->total_out += (mz_uint) out_bytes;
-
- if (status < 0)
- return MZ_DATA_ERROR;
- else if (status != TINFL_STATUS_DONE) {
- pState->m_last_status = TINFL_STATUS_FAILED;
- return MZ_BUF_ERROR;
- }
- return MZ_STREAM_END;
- }
- /* flush != MZ_FINISH then we must assume there's more input. */
- if (flush != MZ_FINISH)
- decomp_flags |= TINFL_FLAG_HAS_MORE_INPUT;
-
- if (pState->m_dict_avail) {
- n = MZ_MIN(pState->m_dict_avail, pStream->avail_out);
- memcpy(pStream->next_out, pState->m_dict + pState->m_dict_ofs, n);
- pStream->next_out += n;
- pStream->avail_out -= n;
- pStream->total_out += n;
- pState->m_dict_avail -= n;
- pState->m_dict_ofs = (pState->m_dict_ofs + n) &
- (TINFL_LZ_DICT_SIZE - 1);
- return ((pState->m_last_status == TINFL_STATUS_DONE) &&
- (!pState->m_dict_avail))
- ? MZ_STREAM_END
- : MZ_OK;
- }
-
- for (;;) {
- in_bytes = pStream->avail_in;
- out_bytes = TINFL_LZ_DICT_SIZE - pState->m_dict_ofs;
-
- status = tinfl_decompress(&pState->m_decomp, pStream->next_in,
- &in_bytes, pState->m_dict,
- pState->m_dict + pState->m_dict_ofs,
- &out_bytes, decomp_flags);
- pState->m_last_status = status;
-
- pStream->next_in += (mz_uint) in_bytes;
- pStream->avail_in -= (mz_uint) in_bytes;
- pStream->total_in += (mz_uint) in_bytes;
- pStream->adler = tinfl_get_adler32(&pState->m_decomp);
-
- pState->m_dict_avail = (mz_uint) out_bytes;
-
- n = MZ_MIN(pState->m_dict_avail, pStream->avail_out);
- memcpy(pStream->next_out, pState->m_dict + pState->m_dict_ofs, n);
- pStream->next_out += n;
- pStream->avail_out -= n;
- pStream->total_out += n;
- pState->m_dict_avail -= n;
- pState->m_dict_ofs = (pState->m_dict_ofs + n) &
- (TINFL_LZ_DICT_SIZE - 1);
-
- if (status < 0)
- return MZ_DATA_ERROR; /* Stream is corrupted (there could be
- some uncompressed data left in the
- output dictionary - oh well). */
- else if ((status == TINFL_STATUS_NEEDS_MORE_INPUT) &&
- (!orig_avail_in))
- return MZ_BUF_ERROR; /* Signal caller that we can't make forward
- progress without supplying more input or
- by setting flush to MZ_FINISH. */
- else if (flush == MZ_FINISH) {
- /* The output buffer MUST be large to hold the remaining
- * uncompressed data when flush==MZ_FINISH. */
- if (status == TINFL_STATUS_DONE)
- return pState->m_dict_avail ? MZ_BUF_ERROR : MZ_STREAM_END;
- /* status here must be TINFL_STATUS_HAS_MORE_OUTPUT, which means
- * there's at least 1 more byte on the way. If there's no more
- * room left in the output buffer then something is wrong. */
- else if (!pStream->avail_out)
- return MZ_BUF_ERROR;
- } else if ((status == TINFL_STATUS_DONE) ||
- (!pStream->avail_in) || (!pStream->avail_out) ||
- (pState->m_dict_avail))
- break;
- }
-
- return ((status == TINFL_STATUS_DONE) && (!pState->m_dict_avail))
- ? MZ_STREAM_END
- : MZ_OK;
-}
-
-int mz_inflateEnd(mz_streamp pStream) {
- if (!pStream)
- return MZ_STREAM_ERROR;
- if (pStream->state) {
- pStream->zfree(pStream->opaque, pStream->state);
- pStream->state = NULL;
- }
- return MZ_OK;
-}
-int mz_uncompress2(unsigned char *pDest, mz_ulong *pDest_len,
- const unsigned char *pSource,
- mz_ulong *pSource_len) {
- mz_stream stream;
- int status;
- memset(&stream, 0, sizeof(stream));
-
- /* In case mz_ulong is 64-bits (argh I hate longs). */
- if ((mz_uint64) (*pSource_len | *pDest_len) > 0xFFFFFFFFU)
- return MZ_PARAM_ERROR;
-
- stream.next_in = pSource;
- stream.avail_in = (mz_uint32) *pSource_len;
- stream.next_out = pDest;
- stream.avail_out = (mz_uint32) *pDest_len;
-
- status = mz_inflateInit(&stream);
- if (status != MZ_OK)
- return status;
-
- status = mz_inflate(&stream, MZ_FINISH);
- *pSource_len = *pSource_len - stream.avail_in;
- if (status != MZ_STREAM_END) {
- mz_inflateEnd(&stream);
- return ((status == MZ_BUF_ERROR) && (!stream.avail_in))
- ? MZ_DATA_ERROR
- : status;
- }
- *pDest_len = stream.total_out;
-
- return mz_inflateEnd(&stream);
-}
-
-int mz_uncompress(unsigned char *pDest, mz_ulong *pDest_len,
- const unsigned char *pSource, mz_ulong source_len) {
- return mz_uncompress2(pDest, pDest_len, pSource, &source_len);
-}
-
-# endif /*#ifndef MINIZ_NO_INFLATE_APIS*/
-
-const char *mz_error(int err) {
- static struct {
- int m_err;
- const char *m_pDesc;
- } s_error_descs[] = { { MZ_OK, "" },
- { MZ_STREAM_END, "stream end" },
- { MZ_NEED_DICT, "need dictionary" },
- { MZ_ERRNO, "file error" },
- { MZ_STREAM_ERROR, "stream error" },
- { MZ_DATA_ERROR, "data error" },
- { MZ_MEM_ERROR, "out of memory" },
- { MZ_BUF_ERROR, "buf error" },
- { MZ_VERSION_ERROR, "version error" },
- { MZ_PARAM_ERROR, "parameter error" } };
- mz_uint i;
- for (i = 0; i < sizeof(s_error_descs) / sizeof(s_error_descs[0]);
- ++i)
- if (s_error_descs[i].m_err == err)
- return s_error_descs[i].m_pDesc;
- return NULL;
-}
-
-#endif /*MINIZ_NO_ZLIB_APIS */
-
-#ifdef __cplusplus
-}
-#endif
-
-/*
- This is free and unencumbered software released into the public
- domain.
-
- Anyone is free to copy, modify, publish, use, compile, sell, or
- distribute this software, either in source code form or as a
- compiled binary, for any purpose, commercial or non-commercial, and
- by any means.
-
- In jurisdictions that recognize copyright laws, the author or
- authors of this software dedicate any and all copyright interest in
- the software to the public domain. We make this dedication for the
- benefit of the public at large and to the detriment of our heirs and
- successors. We intend this dedication to be an overt act of
- relinquishment in perpetuity of all present and future rights to
- this software under copyright law.
-
- 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 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.
-
- For more information, please refer to <http://unlicense.org/>
-*/
diff --git a/source/kit/miniz/miniz.h b/source/kit/miniz/miniz.h
deleted file mode 100644
index a80c389..0000000
--- a/source/kit/miniz/miniz.h
+++ /dev/null
@@ -1,658 +0,0 @@
-/* miniz.c 3.0.2 - public domain deflate/inflate, zlib-subset, ZIP
- reading/writing/appending, PNG writing See "unlicense" statement at
- the end of this file. Rich Geldreich <richgel99@gmail.com>, last
- updated Oct. 13, 2013 Implements RFC 1950:
- http://www.ietf.org/rfc/rfc1950.txt and RFC 1951:
- http://www.ietf.org/rfc/rfc1951.txt
-
- Most API's defined in miniz.c are optional. For example, to disable
- the archive related functions just define MINIZ_NO_ARCHIVE_APIS, or
- to get rid of all stdio usage define MINIZ_NO_STDIO (see the list
- below for more macros).
-
- * Low-level Deflate/Inflate implementation notes:
-
- Compression: Use the "tdefl" API's. The compressor supports raw,
- static, and dynamic blocks, lazy or greedy parsing, match length
- filtering, RLE-only, and Huffman-only streams. It performs and
- compresses approximately as well as zlib.
-
- Decompression: Use the "tinfl" API's. The entire decompressor is
- implemented as a single function coroutine: see tinfl_decompress().
- It supports decompression into a 32KB (or larger power of 2)
- wrapping buffer, or into a memory block large enough to hold the
- entire file.
-
- The low-level tdefl/tinfl API's do not make any use of dynamic
- memory allocation.
-
- * zlib-style API notes:
-
- miniz.c implements a fairly large subset of zlib. There's enough
- functionality present for it to be a drop-in zlib replacement in
- many apps: The z_stream struct, optional memory allocation
- callbacks
- deflateInit/deflateInit2/deflate/deflateReset/deflateEnd/deflateBound
- inflateInit/inflateInit2/inflate/inflateReset/inflateEnd
- compress, compress2, compressBound, uncompress
- CRC-32, Adler-32 - Using modern, minimal code size, CPU cache
- friendly routines. Supports raw deflate streams or standard zlib
- streams with adler-32 checking.
-
- Limitations:
- The callback API's are not implemented yet. No support for gzip
- headers or zlib static dictionaries. I've tried to closely emulate
- zlib's various flavors of stream flushing and return status codes,
- but there are no guarantees that miniz.c pulls this off perfectly.
-
- * PNG writing: See the tdefl_write_image_to_png_file_in_memory()
- function, originally written by Alex Evans. Supports 1-4
- bytes/pixel images.
-
- * ZIP archive API notes:
-
- The ZIP archive API's where designed with simplicity and
- efficiency in mind, with just enough abstraction to get the job
- done with minimal fuss. There are simple API's to retrieve file
- information, read files from existing archives, create new
- archives, append new files to existing archives, or clone archive
- data from one archive to another. It supports archives located in
- memory or the heap, on disk (using stdio.h), or you can specify
- custom file read/write callbacks.
-
- - Archive reading: Just call this function to read a single file
- from a disk archive:
-
- void *mz_zip_extract_archive_file_to_heap(const char
- *pZip_filename, const char *pArchive_name, size_t *pSize, mz_uint
- zip_flags);
-
- For more complex cases, use the "mz_zip_reader" functions. Upon
- opening an archive, the entire central directory is located and
- read as-is into memory, and subsequent file access only occurs when
- reading individual files.
-
- - Archives file scanning: The simple way is to use this function
- to scan a loaded archive for a specific file:
-
- int mz_zip_reader_locate_file(mz_zip_archive *pZip, const char
- *pName, const char *pComment, mz_uint flags);
-
- The locate operation can optionally check file comments too,
- which (as one example) can be used to identify multiple versions of
- the same file in an archive. This function uses a simple linear
- search through the central directory, so it's not very fast.
-
- Alternately, you can iterate through all the files in an archive
- (using mz_zip_reader_get_num_files()) and retrieve detailed info on
- each file by calling mz_zip_reader_file_stat().
-
- - Archive creation: Use the "mz_zip_writer" functions. The ZIP
- writer immediately writes compressed file data to disk and builds
- an exact image of the central directory in memory. The central
- directory image is written all at once at the end of the archive
- file when the archive is finalized.
-
- The archive writer can optionally align each file's local header
- and file data to any power of 2 alignment, which can be useful when
- the archive will be read from optical media. Also, the writer
- supports placing arbitrary data blobs at the very beginning of ZIP
- archives. Archives written using either feature are still readable
- by any ZIP tool.
-
- - Archive appending: The simple way to add a single file to an
- archive is to call this function:
-
- mz_bool mz_zip_add_mem_to_archive_file_in_place(const char
- *pZip_filename, const char *pArchive_name, const void *pBuf, size_t
- buf_size, const void *pComment, mz_uint16 comment_size, mz_uint
- level_and_flags);
-
- The archive will be created if it doesn't already exist,
- otherwise it'll be appended to. Note the appending is done in-place
- and is not an atomic operation, so if something goes wrong during
- the operation it's possible the archive could be left without a
- central directory (although the local file headers and file data
- will be fine, so the archive will be recoverable).
-
- For more complex archive modification scenarios:
- 1. The safest way is to use a mz_zip_reader to read the existing
- archive, cloning only those bits you want to preserve into a new
- archive using using the mz_zip_writer_add_from_zip_reader()
- function (which compiles the compressed file data as-is). When
- you're done, delete the old archive and rename the newly written
- archive, and you're done. This is safe but requires a bunch of
- temporary disk space or heap memory.
-
- 2. Or, you can convert an mz_zip_reader in-place to an
- mz_zip_writer using mz_zip_writer_init_from_reader(), append new
- files as needed, then finalize the archive which will write an
- updated central directory to the original archive. (This is
- basically what mz_zip_add_mem_to_archive_file_in_place() does.)
- There's a possibility that the archive's central directory could be
- lost with this method if anything goes wrong, though.
-
- - ZIP archive support limitations:
- No spanning support. Extraction functions can only handle
- unencrypted, stored or deflated files. Requires streams capable of
- seeking.
-
- * This is a header file library, like stb_image.c. To get only a
- header file, either cut and paste the below header, or create
- miniz.h, #define MINIZ_HEADER_FILE_ONLY, and then include miniz.c
- from it.
-
- * Important: For best perf. be sure to customize the below macros
- for your target platform: #define
- MINIZ_USE_UNALIGNED_LOADS_AND_STORES 1 #define MINIZ_LITTLE_ENDIAN
- 1 #define MINIZ_HAS_64BIT_REGISTERS 1
-
- * On platforms using glibc, Be sure to "#define _LARGEFILE64_SOURCE
- 1" before including miniz.c to ensure miniz uses the 64-bit
- variants: fopen64(), stat64(), etc. Otherwise you won't be able to
- process large files (i.e. 32-bit stat() fails for me on files >
- 0x7FFFFFFF bytes).
-*/
-
-#ifndef KIT_MINIZ_MINIZ_H
-#define KIT_MINIZ_MINIZ_H
-
-/* Defines to completely disable specific portions of miniz.c:
- If all macros here are defined the only functionality remaining
- will be CRC-32 and adler-32. */
-
-/* Define MINIZ_NO_STDIO to disable all usage and any functions which
- * rely on stdio for file I/O. */
-/*#define MINIZ_NO_STDIO */
-
-/* If MINIZ_NO_TIME is specified then the ZIP archive functions will
- * not be able to get the current time, or */
-/* get/set file times, and the C run-time funcs that get/set times
- * won't be called. */
-/* The current downside is the times written to your archives will be
- * from 1979. */
-/*#define MINIZ_NO_TIME */
-
-/* Define MINIZ_NO_DEFLATE_APIS to disable all compression API's. */
-/*#define MINIZ_NO_DEFLATE_APIS */
-
-/* Define MINIZ_NO_INFLATE_APIS to disable all decompression API's. */
-/*#define MINIZ_NO_INFLATE_APIS */
-
-/* Define MINIZ_NO_ARCHIVE_APIS to disable all ZIP archive API's. */
-/*#define MINIZ_NO_ARCHIVE_APIS */
-
-/* Define MINIZ_NO_ARCHIVE_WRITING_APIS to disable all writing related
- * ZIP archive API's. */
-/*#define MINIZ_NO_ARCHIVE_WRITING_APIS */
-
-/* Define MINIZ_NO_ZLIB_APIS to remove all ZLIB-style
- * compression/decompression API's. */
-/*#define MINIZ_NO_ZLIB_APIS */
-
-/* Define MINIZ_NO_ZLIB_COMPATIBLE_NAME to disable zlib names, to
- * prevent conflicts against stock zlib. */
-/*#define MINIZ_NO_ZLIB_COMPATIBLE_NAMES */
-
-/* Define MINIZ_NO_MALLOC to disable all calls to malloc, free, and
- realloc. Note if MINIZ_NO_MALLOC is defined then the user must
- always provide custom user alloc/free/realloc callbacks to the zlib
- and archive API's, and a few stand-alone helper API's which don't
- provide custom user
- functions (such as tdefl_compress_mem_to_heap() and
- tinfl_decompress_mem_to_heap()) won't work. */
-/*#define MINIZ_NO_MALLOC */
-
-#ifdef MINIZ_NO_INFLATE_APIS
-# define MINIZ_NO_ARCHIVE_APIS
-#endif
-
-#ifdef MINIZ_NO_DEFLATE_APIS
-# define MINIZ_NO_ARCHIVE_WRITING_APIS
-#endif
-
-#if defined(__TINYC__) && (defined(__linux) || defined(__linux__))
-/* TODO: Work around "error: include file 'sys\utime.h' when compiling
- * with tcc on Linux */
-# define MINIZ_NO_TIME
-#endif
-
-#include "miniz_common.h"
-
-#include <stddef.h>
-
-#if !defined(MINIZ_NO_TIME) && !defined(MINIZ_NO_ARCHIVE_APIS)
-# include <time.h>
-#endif
-
-#if defined(_M_IX86) || defined(_M_X64) || defined(__i386__) || \
- defined(__i386) || defined(__i486__) || defined(__i486) || \
- defined(i386) || defined(__ia64__) || defined(__x86_64__)
-/* MINIZ_X86_OR_X64_CPU is only used to help set the below macros. */
-# define MINIZ_X86_OR_X64_CPU 1
-#else
-# define MINIZ_X86_OR_X64_CPU 0
-#endif
-
-/* Set MINIZ_LITTLE_ENDIAN only if not set */
-#if !defined(MINIZ_LITTLE_ENDIAN)
-# if defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__)
-
-# if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
-/* Set MINIZ_LITTLE_ENDIAN to 1 if the processor is little endian. */
-# define MINIZ_LITTLE_ENDIAN 1
-# else
-# define MINIZ_LITTLE_ENDIAN 0
-# endif
-
-# else
-
-# if MINIZ_X86_OR_X64_CPU
-# define MINIZ_LITTLE_ENDIAN 1
-# else
-# define MINIZ_LITTLE_ENDIAN 0
-# endif
-
-# endif
-#endif
-
-/* Using unaligned loads and stores causes errors when using UBSan */
-#if defined(__has_feature)
-# if __has_feature(undefined_behavior_sanitizer)
-# define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 0
-# endif
-#endif
-
-/* Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES only if not set */
-#if !defined(MINIZ_USE_UNALIGNED_LOADS_AND_STORES)
-# if MINIZ_X86_OR_X64_CPU
-/* Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES to 1 on CPU's that permit
- * efficient integer loads and stores from unaligned addresses. */
-# define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 0
-# define MINIZ_UNALIGNED_USE_MEMCPY
-# else
-# define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 0
-# endif
-#endif
-
-#if defined(_M_X64) || defined(_WIN64) || defined(__MINGW64__) || \
- defined(_LP64) || defined(__LP64__) || defined(__ia64__) || \
- defined(__x86_64__)
-/* Set MINIZ_HAS_64BIT_REGISTERS to 1 if operations on 64-bit integers
- * are reasonably fast (and don't involve compiler generated calls to
- * helper functions). */
-# define MINIZ_HAS_64BIT_REGISTERS 1
-#else
-# define MINIZ_HAS_64BIT_REGISTERS 0
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* ------------------- zlib-style API Definitions. */
-
-/* For more compatibility with zlib, miniz.c uses unsigned long for
- * some parameters/struct members. Beware: mz_ulong can be either 32
- * or 64-bits! */
-typedef unsigned long mz_ulong;
-
-/* mz_free() internally uses the MZ_FREE() macro (which by default
- * calls free() unless you've modified the MZ_MALLOC macro) to release
- * a block allocated from the heap. */
-void mz_free(void *p);
-
-#define MZ_ADLER32_INIT (1)
-/* mz_adler32() returns the initial adler-32 value to use when called
- * with ptr==NULL. */
-mz_ulong mz_adler32(mz_ulong adler, const unsigned char *ptr,
- size_t buf_len);
-
-#define MZ_CRC32_INIT (0)
-/* mz_crc32() returns the initial CRC-32 value to use when called with
- * ptr==NULL. */
-mz_ulong mz_crc32(mz_ulong crc, const unsigned char *ptr,
- size_t buf_len);
-
-/* Compression strategies. */
-enum {
- MZ_DEFAULT_STRATEGY = 0,
- MZ_FILTERED = 1,
- MZ_HUFFMAN_ONLY = 2,
- MZ_RLE = 3,
- MZ_FIXED = 4
-};
-
-/* Method */
-#define MZ_DEFLATED 8
-
-/* Compression levels: 0-9 are the standard zlib-style levels, 10 is
- * best possible compression (not zlib compatible, and may be very
- * slow), MZ_DEFAULT_COMPRESSION=MZ_DEFAULT_LEVEL. */
-enum {
- MZ_NO_COMPRESSION = 0,
- MZ_BEST_SPEED = 1,
- MZ_BEST_COMPRESSION = 9,
- MZ_UBER_COMPRESSION = 10,
- MZ_DEFAULT_LEVEL = 6,
- MZ_DEFAULT_COMPRESSION = -1
-};
-
-#define MZ_VERSION "11.0.2"
-#define MZ_VERNUM 0xB002
-#define MZ_VER_MAJOR 11
-#define MZ_VER_MINOR 2
-#define MZ_VER_REVISION 0
-#define MZ_VER_SUBREVISION 0
-
-#ifndef MINIZ_NO_ZLIB_APIS
-
-/* Flush values. For typical usage you only need MZ_NO_FLUSH and
- * MZ_FINISH. The other values are for advanced use (refer to the zlib
- * docs). */
-enum {
- MZ_NO_FLUSH = 0,
- MZ_PARTIAL_FLUSH = 1,
- MZ_SYNC_FLUSH = 2,
- MZ_FULL_FLUSH = 3,
- MZ_FINISH = 4,
- MZ_BLOCK = 5
-};
-
-/* Return status codes. MZ_PARAM_ERROR is non-standard. */
-enum {
- MZ_OK = 0,
- MZ_STREAM_END = 1,
- MZ_NEED_DICT = 2,
- MZ_ERRNO = -1,
- MZ_STREAM_ERROR = -2,
- MZ_DATA_ERROR = -3,
- MZ_MEM_ERROR = -4,
- MZ_BUF_ERROR = -5,
- MZ_VERSION_ERROR = -6,
- MZ_PARAM_ERROR = -10000
-};
-
-/* Window bits */
-# define MZ_DEFAULT_WINDOW_BITS 15
-
-struct mz_internal_state;
-
-/* Compression/decompression stream struct. */
-typedef struct mz_stream_s {
- const unsigned char *next_in; /* pointer to next byte to read */
- unsigned int avail_in; /* number of bytes available at next_in */
- mz_ulong total_in; /* total number of bytes consumed so far */
-
- unsigned char *next_out; /* pointer to next byte to write */
- unsigned int
- avail_out; /* number of bytes that can be written to next_out */
- mz_ulong total_out; /* total number of bytes produced so far */
-
- char *msg; /* error msg (unused) */
- struct mz_internal_state
- *state; /* internal state, allocated by zalloc/zfree */
-
- mz_alloc_func zalloc; /* optional heap allocation function (defaults
- to malloc) */
- mz_free_func
- zfree; /* optional heap free function (defaults to free) */
- void *opaque; /* heap alloc function user pointer */
-
- int data_type; /* data_type (unused) */
- mz_ulong adler; /* adler32 of the source or uncompressed data */
- mz_ulong reserved; /* not used */
-} mz_stream;
-
-typedef mz_stream *mz_streamp;
-
-/* Returns the version string of miniz.c. */
-const char *mz_version(void);
-
-# ifndef MINIZ_NO_DEFLATE_APIS
-
-/* mz_deflateInit() initializes a compressor with default options: */
-/* Parameters: */
-/* pStream must point to an initialized mz_stream struct. */
-/* level must be between [MZ_NO_COMPRESSION, MZ_BEST_COMPRESSION]. */
-/* level 1 enables a specially optimized compression function that's
- * been optimized purely for performance, not ratio. */
-/* (This special func. is currently only enabled when
- * MINIZ_USE_UNALIGNED_LOADS_AND_STORES and MINIZ_LITTLE_ENDIAN are
- * defined.) */
-/* Return values: */
-/* MZ_OK on success. */
-/* MZ_STREAM_ERROR if the stream is bogus. */
-/* MZ_PARAM_ERROR if the input parameters are bogus. */
-/* MZ_MEM_ERROR on out of memory. */
-int mz_deflateInit(mz_streamp pStream, int level);
-
-/* mz_deflateInit2() is like mz_deflate(), except with more control:
- */
-/* Additional parameters: */
-/* method must be MZ_DEFLATED */
-/* window_bits must be MZ_DEFAULT_WINDOW_BITS (to wrap the deflate
- * stream with zlib header/adler-32 footer) or -MZ_DEFAULT_WINDOW_BITS
- * (raw deflate/no header or footer) */
-/* mem_level must be between [1, 9] (it's checked but ignored by
- * miniz.c) */
-int mz_deflateInit2(mz_streamp pStream, int level, int method,
- int window_bits, int mem_level, int strategy);
-
-/* Quickly resets a compressor without having to reallocate anything.
- * Same as calling mz_deflateEnd() followed by
- * mz_deflateInit()/mz_deflateInit2(). */
-int mz_deflateReset(mz_streamp pStream);
-
-/* mz_deflate() compresses the input to output, consuming as much of
- * the input and producing as much output as possible. */
-/* Parameters: */
-/* pStream is the stream to read from and write to. You must
- * initialize/update the next_in, avail_in, next_out, and avail_out
- * members. */
-/* flush may be MZ_NO_FLUSH, MZ_PARTIAL_FLUSH/MZ_SYNC_FLUSH,
- * MZ_FULL_FLUSH, or MZ_FINISH. */
-/* Return values: */
-/* MZ_OK on success (when flushing, or if more input is needed but
- * not available, and/or there's more output to be written but the
- * output buffer is full). */
-/* MZ_STREAM_END if all input has been consumed and all output bytes
- * have been written. Don't call mz_deflate() on the stream anymore.
- */
-/* MZ_STREAM_ERROR if the stream is bogus. */
-/* MZ_PARAM_ERROR if one of the parameters is invalid. */
-/* MZ_BUF_ERROR if no forward progress is possible because the input
- * and/or output buffers are empty. (Fill up the input buffer or free
- * up some output space and try again.) */
-int mz_deflate(mz_streamp pStream, int flush);
-
-/* mz_deflateEnd() deinitializes a compressor: */
-/* Return values: */
-/* MZ_OK on success. */
-/* MZ_STREAM_ERROR if the stream is bogus. */
-int mz_deflateEnd(mz_streamp pStream);
-
-/* mz_deflateBound() returns a (very) conservative upper bound on the
- * amount of data that could be generated by deflate(), assuming flush
- * is set to only MZ_NO_FLUSH or MZ_FINISH. */
-mz_ulong mz_deflateBound(mz_streamp pStream, mz_ulong source_len);
-
-/* Single-call compression functions mz_compress() and mz_compress2():
- */
-/* Returns MZ_OK on success, or one of the error codes from
- * mz_deflate() on failure. */
-int mz_compress(unsigned char *pDest, mz_ulong *pDest_len,
- const unsigned char *pSource, mz_ulong source_len);
-int mz_compress2(unsigned char *pDest, mz_ulong *pDest_len,
- const unsigned char *pSource, mz_ulong source_len,
- int level);
-
-/* mz_compressBound() returns a (very) conservative upper bound on the
- * amount of data that could be generated by calling mz_compress(). */
-mz_ulong mz_compressBound(mz_ulong source_len);
-
-# endif /*#ifndef MINIZ_NO_DEFLATE_APIS*/
-
-# ifndef MINIZ_NO_INFLATE_APIS
-
-/* Initializes a decompressor. */
-int mz_inflateInit(mz_streamp pStream);
-
-/* mz_inflateInit2() is like mz_inflateInit() with an additional
- * option that controls the window size and whether or not the stream
- * has been wrapped with a zlib header/footer: */
-/* window_bits must be MZ_DEFAULT_WINDOW_BITS (to parse zlib
- * header/footer) or -MZ_DEFAULT_WINDOW_BITS (raw deflate). */
-int mz_inflateInit2(mz_streamp pStream, int window_bits);
-
-/* Quickly resets a compressor without having to reallocate anything.
- * Same as calling mz_inflateEnd() followed by
- * mz_inflateInit()/mz_inflateInit2(). */
-int mz_inflateReset(mz_streamp pStream);
-
-/* Decompresses the input stream to the output, consuming only as much
- * of the input as needed, and writing as much to the output as
- * possible. */
-/* Parameters: */
-/* pStream is the stream to read from and write to. You must
- * initialize/update the next_in, avail_in, next_out, and avail_out
- * members. */
-/* flush may be MZ_NO_FLUSH, MZ_SYNC_FLUSH, or MZ_FINISH. */
-/* On the first call, if flush is MZ_FINISH it's assumed the input
- * and output buffers are both sized large enough to decompress the
- * entire stream in a single call (this is slightly faster). */
-/* MZ_FINISH implies that there are no more source bytes available
- * beside what's already in the input buffer, and that the output
- * buffer is large enough to hold the rest of the decompressed data.
- */
-/* Return values: */
-/* MZ_OK on success. Either more input is needed but not available,
- * and/or there's more output to be written but the output buffer is
- * full. */
-/* MZ_STREAM_END if all needed input has been consumed and all
- * output bytes have been written. For zlib streams, the adler-32 of
- * the decompressed data has also been verified. */
-/* MZ_STREAM_ERROR if the stream is bogus. */
-/* MZ_DATA_ERROR if the deflate stream is invalid. */
-/* MZ_PARAM_ERROR if one of the parameters is invalid. */
-/* MZ_BUF_ERROR if no forward progress is possible because the input
- * buffer is empty but the inflater needs more input to continue, or
- * if the output buffer is not large enough. Call mz_inflate() again
- */
-/* with more input data, or with more room in the output buffer
- * (except when using single call decompression, described above). */
-int mz_inflate(mz_streamp pStream, int flush);
-
-/* Deinitializes a decompressor. */
-int mz_inflateEnd(mz_streamp pStream);
-
-/* Single-call decompression. */
-/* Returns MZ_OK on success, or one of the error codes from
- * mz_inflate() on failure. */
-int mz_uncompress(unsigned char *pDest, mz_ulong *pDest_len,
- const unsigned char *pSource, mz_ulong source_len);
-int mz_uncompress2(unsigned char *pDest, mz_ulong *pDest_len,
- const unsigned char *pSource,
- mz_ulong *pSource_len);
-# endif /*#ifndef MINIZ_NO_INFLATE_APIS*/
-
-/* Returns a string description of the specified error code, or NULL
- * if the error code is invalid. */
-const char *mz_error(int err);
-
-/* Redefine zlib-compatible names to miniz equivalents, so miniz.c can
- * be used as a drop-in replacement for the subset of zlib that
- * miniz.c supports. */
-/* Define MINIZ_NO_ZLIB_COMPATIBLE_NAMES to disable zlib-compatibility
- * if you use zlib in the same project. */
-# ifndef MINIZ_NO_ZLIB_COMPATIBLE_NAMES
-typedef unsigned char Byte;
-typedef unsigned int uInt;
-typedef mz_ulong uLong;
-typedef Byte Bytef;
-typedef uInt uIntf;
-typedef char charf;
-typedef int intf;
-typedef void *voidpf;
-typedef uLong uLongf;
-typedef void *voidp;
-typedef void *const voidpc;
-# define Z_NULL 0
-# define Z_NO_FLUSH MZ_NO_FLUSH
-# define Z_PARTIAL_FLUSH MZ_PARTIAL_FLUSH
-# define Z_SYNC_FLUSH MZ_SYNC_FLUSH
-# define Z_FULL_FLUSH MZ_FULL_FLUSH
-# define Z_FINISH MZ_FINISH
-# define Z_BLOCK MZ_BLOCK
-# define Z_OK MZ_OK
-# define Z_STREAM_END MZ_STREAM_END
-# define Z_NEED_DICT MZ_NEED_DICT
-# define Z_ERRNO MZ_ERRNO
-# define Z_STREAM_ERROR MZ_STREAM_ERROR
-# define Z_DATA_ERROR MZ_DATA_ERROR
-# define Z_MEM_ERROR MZ_MEM_ERROR
-# define Z_BUF_ERROR MZ_BUF_ERROR
-# define Z_VERSION_ERROR MZ_VERSION_ERROR
-# define Z_PARAM_ERROR MZ_PARAM_ERROR
-# define Z_NO_COMPRESSION MZ_NO_COMPRESSION
-# define Z_BEST_SPEED MZ_BEST_SPEED
-# define Z_BEST_COMPRESSION MZ_BEST_COMPRESSION
-# define Z_DEFAULT_COMPRESSION MZ_DEFAULT_COMPRESSION
-# define Z_DEFAULT_STRATEGY MZ_DEFAULT_STRATEGY
-# define Z_FILTERED MZ_FILTERED
-# define Z_HUFFMAN_ONLY MZ_HUFFMAN_ONLY
-# define Z_RLE MZ_RLE
-# define Z_FIXED MZ_FIXED
-# define Z_DEFLATED MZ_DEFLATED
-# define Z_DEFAULT_WINDOW_BITS MZ_DEFAULT_WINDOW_BITS
-# define alloc_func mz_alloc_func
-# define free_func mz_free_func
-# define internal_state mz_internal_state
-# define z_stream mz_stream
-
-# ifndef MINIZ_NO_DEFLATE_APIS
-# define deflateInit mz_deflateInit
-# define deflateInit2 mz_deflateInit2
-# define deflateReset mz_deflateReset
-# define deflate mz_deflate
-# define deflateEnd mz_deflateEnd
-# define deflateBound mz_deflateBound
-# define compress mz_compress
-# define compress2 mz_compress2
-# define compressBound mz_compressBound
-# endif /*#ifndef MINIZ_NO_DEFLATE_APIS*/
-
-# ifndef MINIZ_NO_INFLATE_APIS
-# define inflateInit mz_inflateInit
-# define inflateInit2 mz_inflateInit2
-# define inflateReset mz_inflateReset
-# define inflate mz_inflate
-# define inflateEnd mz_inflateEnd
-# define uncompress mz_uncompress
-# define uncompress2 mz_uncompress2
-# endif /*#ifndef MINIZ_NO_INFLATE_APIS*/
-
-# define crc32 mz_crc32
-# define adler32 mz_adler32
-# define MAX_WBITS 15
-# define MAX_MEM_LEVEL 9
-# define zError mz_error
-# define ZLIB_VERSION MZ_VERSION
-# define ZLIB_VERNUM MZ_VERNUM
-# define ZLIB_VER_MAJOR MZ_VER_MAJOR
-# define ZLIB_VER_MINOR MZ_VER_MINOR
-# define ZLIB_VER_REVISION MZ_VER_REVISION
-# define ZLIB_VER_SUBREVISION MZ_VER_SUBREVISION
-# define zlibVersion mz_version
-# define zlib_version mz_version()
-# endif /* #ifndef MINIZ_NO_ZLIB_COMPATIBLE_NAMES */
-
-#endif /* MINIZ_NO_ZLIB_APIS */
-
-#ifdef __cplusplus
-}
-#endif
-
-#include "miniz_zip.h"
-
-#endif
diff --git a/source/kit/miniz/miniz_common.h b/source/kit/miniz/miniz_common.h
deleted file mode 100644
index 26306f3..0000000
--- a/source/kit/miniz/miniz_common.h
+++ /dev/null
@@ -1,122 +0,0 @@
-#ifndef KIT_MINIZ_MINIZ_COMMON_H
-#define KIT_MINIZ_MINIZ_COMMON_H
-
-#ifndef _GNU_SOURCE
-# define _GNU_SOURCE
-#endif
-
-#include <assert.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* ------------------- Types and macros */
-typedef unsigned char mz_uint8;
-typedef signed short mz_int16;
-typedef unsigned short mz_uint16;
-typedef unsigned int mz_uint32;
-typedef unsigned int mz_uint;
-typedef int64_t mz_int64;
-typedef uint64_t mz_uint64;
-typedef int mz_bool;
-
-#define MZ_FALSE (0)
-#define MZ_TRUE (1)
-
-/* Works around MSVC's spammy "warning C4127: conditional expression
- * is constant" message. */
-#ifdef _MSC_VER
-# define MZ_MACRO_END while (0, 0)
-#else
-# define MZ_MACRO_END while (0)
-#endif
-
-#ifdef MINIZ_NO_STDIO
-# define MZ_FILE void *
-#else
-# include <stdio.h>
-# define MZ_FILE FILE
-#endif /* #ifdef MINIZ_NO_STDIO */
-
-#ifdef MINIZ_NO_TIME
-typedef struct mz_dummy_time_t_tag {
- mz_uint32 m_dummy1;
- mz_uint32 m_dummy2;
-} mz_dummy_time_t;
-# define MZ_TIME_T mz_dummy_time_t
-#else
-# define MZ_TIME_T time_t
-#endif
-
-#define MZ_ASSERT(x) assert(x)
-
-#ifdef MINIZ_NO_MALLOC
-# define MZ_MALLOC(x) NULL
-# define MZ_FREE(x) (void) x, ((void) 0)
-# define MZ_REALLOC(p, x) NULL
-#else
-# define MZ_MALLOC(x) malloc(x)
-# define MZ_FREE(x) free(x)
-# define MZ_REALLOC(p, x) realloc(p, x)
-#endif
-
-#define MZ_MAX(a, b) (((a) > (b)) ? (a) : (b))
-#define MZ_MIN(a, b) (((a) < (b)) ? (a) : (b))
-#define MZ_CLEAR_OBJ(obj) memset(&(obj), 0, sizeof(obj))
-#define MZ_CLEAR_ARR(obj) memset((obj), 0, sizeof(obj))
-#define MZ_CLEAR_PTR(obj) memset((obj), 0, sizeof(*obj))
-
-#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN
-# define MZ_READ_LE16(p) *((const mz_uint16 *) (p))
-# define MZ_READ_LE32(p) *((const mz_uint32 *) (p))
-#else
-# define MZ_READ_LE16(p) \
- ((mz_uint32) (((const mz_uint8 *) (p))[0]) | \
- ((mz_uint32) (((const mz_uint8 *) (p))[1]) << 8U))
-# define MZ_READ_LE32(p) \
- ((mz_uint32) (((const mz_uint8 *) (p))[0]) | \
- ((mz_uint32) (((const mz_uint8 *) (p))[1]) << 8U) | \
- ((mz_uint32) (((const mz_uint8 *) (p))[2]) << 16U) | \
- ((mz_uint32) (((const mz_uint8 *) (p))[3]) << 24U))
-#endif
-
-#define MZ_READ_LE64(p) \
- (((mz_uint64) MZ_READ_LE32(p)) | \
- (((mz_uint64) MZ_READ_LE32((const mz_uint8 *) (p) + \
- sizeof(mz_uint32))) \
- << 32U))
-
-#ifdef _MSC_VER
-# define MZ_FORCEINLINE __forceinline
-#elif defined(__GNUC__)
-# define MZ_FORCEINLINE __inline__ __attribute__((__always_inline__))
-#else
-# define MZ_FORCEINLINE inline
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Heap allocation callbacks.
-Note that mz_alloc_func parameter types purposely differ from zlib's:
-items/size is size_t, not unsigned long. */
-typedef void *(*mz_alloc_func)(void *opaque, size_t items,
- size_t size);
-typedef void (*mz_free_func)(void *opaque, void *address);
-typedef void *(*mz_realloc_func)(void *opaque, void *address,
- size_t items, size_t size);
-
-void *miniz_def_alloc_func(void *opaque, size_t items, size_t size);
-void miniz_def_free_func(void *opaque, void *address);
-void *miniz_def_realloc_func(void *opaque, void *address,
- size_t items, size_t size);
-
-#define MZ_UINT16_MAX (0xFFFFU)
-#define MZ_UINT32_MAX (0xFFFFFFFFU)
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/source/kit/miniz/miniz_tdef.c b/source/kit/miniz/miniz_tdef.c
deleted file mode 100644
index 5220466..0000000
--- a/source/kit/miniz/miniz_tdef.c
+++ /dev/null
@@ -1,1792 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2013-2014 RAD Game Tools and Valve Software
- * Copyright 2010-2014 Rich Geldreich and Tenacious Software LLC
- * All Rights Reserved.
- *
- * 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.
- *
- **************************************************************************/
-
-#include "miniz.h"
-
-#ifndef MINIZ_NO_DEFLATE_APIS
-
-# ifdef __cplusplus
-extern "C" {
-# endif
-
-/* ------------------- Low-level Compression (independent from all
- * decompression API's) */
-
-/* Purposely making these tables static for faster init and thread
- * safety. */
-static const mz_uint16 s_tdefl_len_sym[256] = {
- 257, 258, 259, 260, 261, 262, 263, 264, 265, 265, 266, 266, 267,
- 267, 268, 268, 269, 269, 269, 269, 270, 270, 270, 270, 271, 271,
- 271, 271, 272, 272, 272, 272, 273, 273, 273, 273, 273, 273, 273,
- 273, 274, 274, 274, 274, 274, 274, 274, 274, 275, 275, 275, 275,
- 275, 275, 275, 275, 276, 276, 276, 276, 276, 276, 276, 276, 277,
- 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
- 277, 277, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
- 278, 278, 278, 278, 278, 279, 279, 279, 279, 279, 279, 279, 279,
- 279, 279, 279, 279, 279, 279, 279, 279, 280, 280, 280, 280, 280,
- 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 281, 281,
- 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
- 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
- 281, 281, 281, 281, 282, 282, 282, 282, 282, 282, 282, 282, 282,
- 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282,
- 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 283, 283, 283,
- 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
- 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
- 283, 283, 283, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284,
- 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284,
- 284, 284, 284, 284, 284, 284, 284, 284, 285
-};
-
-static const mz_uint8 s_tdefl_len_extra[256] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0
-};
-
-static const mz_uint8 s_tdefl_small_dist_sym[512] = {
- 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8,
- 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17
-};
-
-static const mz_uint8 s_tdefl_small_dist_extra[512] = {
- 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7
-};
-
-static const mz_uint8 s_tdefl_large_dist_sym[128] = {
- 0, 0, 18, 19, 20, 20, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23,
- 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
- 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29
-};
-
-static const mz_uint8 s_tdefl_large_dist_extra[128] = {
- 0, 0, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13
-};
-
-/* Radix sorts tdefl_sym_freq[] array by 16-bit key m_key. Returns ptr
- * to sorted values. */
-typedef struct {
- mz_uint16 m_key, m_sym_index;
-} tdefl_sym_freq;
-static tdefl_sym_freq *tdefl_radix_sort_syms(mz_uint num_syms,
- tdefl_sym_freq *pSyms0,
- tdefl_sym_freq *pSyms1) {
- mz_uint32 total_passes = 2, pass_shift, pass, i, hist[256 * 2];
- tdefl_sym_freq *pCur_syms = pSyms0, *pNew_syms = pSyms1;
- MZ_CLEAR_ARR(hist);
- for (i = 0; i < num_syms; i++) {
- mz_uint freq = pSyms0[i].m_key;
- hist[freq & 0xFF]++;
- hist[256 + ((freq >> 8) & 0xFF)]++;
- }
- while ((total_passes > 1) &&
- (num_syms == hist[(total_passes - 1) * 256]))
- total_passes--;
- for (pass_shift = 0, pass = 0; pass < total_passes;
- pass++, pass_shift += 8) {
- const mz_uint32 *pHist = &hist[pass << 8];
- mz_uint offsets[256], cur_ofs = 0;
- for (i = 0; i < 256; i++) {
- offsets[i] = cur_ofs;
- cur_ofs += pHist[i];
- }
- for (i = 0; i < num_syms; i++)
- pNew_syms[offsets[(pCur_syms[i].m_key >> pass_shift) &
- 0xFF]++] = pCur_syms[i];
- {
- tdefl_sym_freq *t = pCur_syms;
- pCur_syms = pNew_syms;
- pNew_syms = t;
- }
- }
- return pCur_syms;
-}
-
-/* tdefl_calculate_minimum_redundancy() originally written by:
- * Alistair Moffat, alistair@cs.mu.oz.au, Jyrki Katajainen,
- * jyrki@diku.dk, November 1996. */
-static void tdefl_calculate_minimum_redundancy(tdefl_sym_freq *A,
- int n) {
- int root, leaf, next, avbl, used, dpth;
- if (n == 0)
- return;
- else if (n == 1) {
- A[0].m_key = 1;
- return;
- }
- A[0].m_key += A[1].m_key;
- root = 0;
- leaf = 2;
- for (next = 1; next < n - 1; next++) {
- if (leaf >= n || A[root].m_key < A[leaf].m_key) {
- A[next].m_key = A[root].m_key;
- A[root++].m_key = (mz_uint16) next;
- } else
- A[next].m_key = A[leaf++].m_key;
- if (leaf >= n || (root < next && A[root].m_key < A[leaf].m_key)) {
- A[next].m_key = (mz_uint16) (A[next].m_key + A[root].m_key);
- A[root++].m_key = (mz_uint16) next;
- } else
- A[next].m_key = (mz_uint16) (A[next].m_key + A[leaf++].m_key);
- }
- A[n - 2].m_key = 0;
- for (next = n - 3; next >= 0; next--)
- A[next].m_key = A[A[next].m_key].m_key + 1;
- avbl = 1;
- used = dpth = 0;
- root = n - 2;
- next = n - 1;
- while (avbl > 0) {
- while (root >= 0 && (int) A[root].m_key == dpth) {
- used++;
- root--;
- }
- while (avbl > used) {
- A[next--].m_key = (mz_uint16) (dpth);
- avbl--;
- }
- avbl = 2 * used;
- dpth++;
- used = 0;
- }
-}
-
-/* Limits canonical Huffman code table's max code size. */
-enum { TDEFL_MAX_SUPPORTED_HUFF_CODESIZE = 32 };
-static void tdefl_huffman_enforce_max_code_size(int *pNum_codes,
- int code_list_len,
- int max_code_size) {
- int i;
- mz_uint32 total = 0;
- if (code_list_len <= 1)
- return;
- for (i = max_code_size + 1; i <= TDEFL_MAX_SUPPORTED_HUFF_CODESIZE;
- i++)
- pNum_codes[max_code_size] += pNum_codes[i];
- for (i = max_code_size; i > 0; i--)
- total += (((mz_uint32) pNum_codes[i]) << (max_code_size - i));
- while (total != (1UL << max_code_size)) {
- pNum_codes[max_code_size]--;
- for (i = max_code_size - 1; i > 0; i--)
- if (pNum_codes[i]) {
- pNum_codes[i]--;
- pNum_codes[i + 1] += 2;
- break;
- }
- total--;
- }
-}
-
-static void tdefl_optimize_huffman_table(tdefl_compressor *d,
- int table_num, int table_len,
- int code_size_limit,
- int static_table) {
- int i, j, l, num_codes[1 + TDEFL_MAX_SUPPORTED_HUFF_CODESIZE];
- mz_uint next_code[TDEFL_MAX_SUPPORTED_HUFF_CODESIZE + 1];
- MZ_CLEAR_ARR(num_codes);
- if (static_table) {
- for (i = 0; i < table_len; i++)
- num_codes[d->m_huff_code_sizes[table_num][i]]++;
- } else {
- tdefl_sym_freq syms0[TDEFL_MAX_HUFF_SYMBOLS],
- syms1[TDEFL_MAX_HUFF_SYMBOLS], *pSyms;
- int num_used_syms = 0;
- const mz_uint16 *pSym_count = &d->m_huff_count[table_num][0];
- for (i = 0; i < table_len; i++)
- if (pSym_count[i]) {
- syms0[num_used_syms].m_key = (mz_uint16) pSym_count[i];
- syms0[num_used_syms++].m_sym_index = (mz_uint16) i;
- }
-
- pSyms = tdefl_radix_sort_syms(num_used_syms, syms0, syms1);
- tdefl_calculate_minimum_redundancy(pSyms, num_used_syms);
-
- for (i = 0; i < num_used_syms; i++) num_codes[pSyms[i].m_key]++;
-
- tdefl_huffman_enforce_max_code_size(num_codes, num_used_syms,
- code_size_limit);
-
- MZ_CLEAR_ARR(d->m_huff_code_sizes[table_num]);
- MZ_CLEAR_ARR(d->m_huff_codes[table_num]);
- for (i = 1, j = num_used_syms; i <= code_size_limit; i++)
- for (l = num_codes[i]; l > 0; l--)
- d->m_huff_code_sizes[table_num][pSyms[--j].m_sym_index] =
- (mz_uint8) (i);
- }
-
- next_code[1] = 0;
- for (j = 0, i = 2; i <= code_size_limit; i++)
- next_code[i] = j = ((j + num_codes[i - 1]) << 1);
-
- for (i = 0; i < table_len; i++) {
- mz_uint rev_code = 0, code, code_size;
- if ((code_size = d->m_huff_code_sizes[table_num][i]) == 0)
- continue;
- code = next_code[code_size]++;
- for (l = code_size; l > 0; l--, code >>= 1)
- rev_code = (rev_code << 1) | (code & 1);
- d->m_huff_codes[table_num][i] = (mz_uint16) rev_code;
- }
-}
-
-# define TDEFL_PUT_BITS(b, l) \
- do { \
- mz_uint bits = b; \
- mz_uint len = l; \
- MZ_ASSERT(bits <= ((1U << len) - 1U)); \
- d->m_bit_buffer |= (bits << d->m_bits_in); \
- d->m_bits_in += len; \
- while (d->m_bits_in >= 8) { \
- if (d->m_pOutput_buf < d->m_pOutput_buf_end) \
- *d->m_pOutput_buf++ = (mz_uint8) (d->m_bit_buffer); \
- d->m_bit_buffer >>= 8; \
- d->m_bits_in -= 8; \
- } \
- } \
- MZ_MACRO_END
-
-# define TDEFL_RLE_PREV_CODE_SIZE() \
- { \
- if (rle_repeat_count) { \
- if (rle_repeat_count < 3) { \
- d->m_huff_count[2][prev_code_size] = \
- (mz_uint16) (d->m_huff_count[2][prev_code_size] + \
- rle_repeat_count); \
- while (rle_repeat_count--) \
- packed_code_sizes[num_packed_code_sizes++] = \
- prev_code_size; \
- } else { \
- d->m_huff_count[2][16] = \
- (mz_uint16) (d->m_huff_count[2][16] + 1); \
- packed_code_sizes[num_packed_code_sizes++] = 16; \
- packed_code_sizes[num_packed_code_sizes++] = \
- (mz_uint8) (rle_repeat_count - 3); \
- } \
- rle_repeat_count = 0; \
- } \
- }
-
-# define TDEFL_RLE_ZERO_CODE_SIZE() \
- { \
- if (rle_z_count) { \
- if (rle_z_count < 3) { \
- d->m_huff_count[2][0] = \
- (mz_uint16) (d->m_huff_count[2][0] + rle_z_count); \
- while (rle_z_count--) \
- packed_code_sizes[num_packed_code_sizes++] = 0; \
- } else if (rle_z_count <= 10) { \
- d->m_huff_count[2][17] = \
- (mz_uint16) (d->m_huff_count[2][17] + 1); \
- packed_code_sizes[num_packed_code_sizes++] = 17; \
- packed_code_sizes[num_packed_code_sizes++] = \
- (mz_uint8) (rle_z_count - 3); \
- } else { \
- d->m_huff_count[2][18] = \
- (mz_uint16) (d->m_huff_count[2][18] + 1); \
- packed_code_sizes[num_packed_code_sizes++] = 18; \
- packed_code_sizes[num_packed_code_sizes++] = \
- (mz_uint8) (rle_z_count - 11); \
- } \
- rle_z_count = 0; \
- } \
- }
-
-static const mz_uint8 s_tdefl_packed_code_size_syms_swizzle[] = {
- 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15
-};
-
-static void tdefl_start_dynamic_block(tdefl_compressor *d) {
- int num_lit_codes, num_dist_codes, num_bit_lengths;
- mz_uint i, total_code_sizes_to_pack, num_packed_code_sizes,
- rle_z_count, rle_repeat_count, packed_code_sizes_index;
- mz_uint8 code_sizes_to_pack[TDEFL_MAX_HUFF_SYMBOLS_0 +
- TDEFL_MAX_HUFF_SYMBOLS_1],
- packed_code_sizes[TDEFL_MAX_HUFF_SYMBOLS_0 +
- TDEFL_MAX_HUFF_SYMBOLS_1],
- prev_code_size = 0xFF;
-
- d->m_huff_count[0][256] = 1;
-
- tdefl_optimize_huffman_table(d, 0, TDEFL_MAX_HUFF_SYMBOLS_0, 15,
- MZ_FALSE);
- tdefl_optimize_huffman_table(d, 1, TDEFL_MAX_HUFF_SYMBOLS_1, 15,
- MZ_FALSE);
-
- for (num_lit_codes = 286; num_lit_codes > 257; num_lit_codes--)
- if (d->m_huff_code_sizes[0][num_lit_codes - 1])
- break;
- for (num_dist_codes = 30; num_dist_codes > 1; num_dist_codes--)
- if (d->m_huff_code_sizes[1][num_dist_codes - 1])
- break;
-
- memcpy(code_sizes_to_pack, &d->m_huff_code_sizes[0][0],
- num_lit_codes);
- memcpy(code_sizes_to_pack + num_lit_codes,
- &d->m_huff_code_sizes[1][0], num_dist_codes);
- total_code_sizes_to_pack = num_lit_codes + num_dist_codes;
- num_packed_code_sizes = 0;
- rle_z_count = 0;
- rle_repeat_count = 0;
-
- memset(&d->m_huff_count[2][0], 0,
- sizeof(d->m_huff_count[2][0]) * TDEFL_MAX_HUFF_SYMBOLS_2);
- for (i = 0; i < total_code_sizes_to_pack; i++) {
- mz_uint8 code_size = code_sizes_to_pack[i];
- if (!code_size) {
- TDEFL_RLE_PREV_CODE_SIZE();
- if (++rle_z_count == 138) {
- TDEFL_RLE_ZERO_CODE_SIZE();
- }
- } else {
- TDEFL_RLE_ZERO_CODE_SIZE();
- if (code_size != prev_code_size) {
- TDEFL_RLE_PREV_CODE_SIZE();
- d->m_huff_count[2][code_size] =
- (mz_uint16) (d->m_huff_count[2][code_size] + 1);
- packed_code_sizes[num_packed_code_sizes++] = code_size;
- } else if (++rle_repeat_count == 6) {
- TDEFL_RLE_PREV_CODE_SIZE();
- }
- }
- prev_code_size = code_size;
- }
- if (rle_repeat_count) {
- TDEFL_RLE_PREV_CODE_SIZE();
- } else {
- TDEFL_RLE_ZERO_CODE_SIZE();
- }
-
- tdefl_optimize_huffman_table(d, 2, TDEFL_MAX_HUFF_SYMBOLS_2, 7,
- MZ_FALSE);
-
- TDEFL_PUT_BITS(2, 2);
-
- TDEFL_PUT_BITS(num_lit_codes - 257, 5);
- TDEFL_PUT_BITS(num_dist_codes - 1, 5);
-
- for (num_bit_lengths = 18; num_bit_lengths >= 0; num_bit_lengths--)
- if (d->m_huff_code_sizes[2][s_tdefl_packed_code_size_syms_swizzle
- [num_bit_lengths]])
- break;
- num_bit_lengths = MZ_MAX(4, (num_bit_lengths + 1));
- TDEFL_PUT_BITS(num_bit_lengths - 4, 4);
- for (i = 0; (int) i < num_bit_lengths; i++)
- TDEFL_PUT_BITS(d->m_huff_code_sizes
- [2][s_tdefl_packed_code_size_syms_swizzle[i]],
- 3);
-
- for (packed_code_sizes_index = 0;
- packed_code_sizes_index < num_packed_code_sizes;) {
- mz_uint code = packed_code_sizes[packed_code_sizes_index++];
- MZ_ASSERT(code < TDEFL_MAX_HUFF_SYMBOLS_2);
- TDEFL_PUT_BITS(d->m_huff_codes[2][code],
- d->m_huff_code_sizes[2][code]);
- if (code >= 16)
- TDEFL_PUT_BITS(packed_code_sizes[packed_code_sizes_index++],
- "\02\03\07"[code - 16]);
- }
-}
-
-static void tdefl_start_static_block(tdefl_compressor *d) {
- mz_uint i;
- mz_uint8 *p = &d->m_huff_code_sizes[0][0];
-
- for (i = 0; i <= 143; ++i) *p++ = 8;
- for (; i <= 255; ++i) *p++ = 9;
- for (; i <= 279; ++i) *p++ = 7;
- for (; i <= 287; ++i) *p++ = 8;
-
- memset(d->m_huff_code_sizes[1], 5, 32);
-
- tdefl_optimize_huffman_table(d, 0, 288, 15, MZ_TRUE);
- tdefl_optimize_huffman_table(d, 1, 32, 15, MZ_TRUE);
-
- TDEFL_PUT_BITS(1, 2);
-}
-
-static const mz_uint mz_bitmasks[17] = {
- 0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F,
- 0x003F, 0x007F, 0x00FF, 0x01FF, 0x03FF, 0x07FF,
- 0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF
-};
-
-# if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN && \
- MINIZ_HAS_64BIT_REGISTERS
-static mz_bool tdefl_compress_lz_codes(tdefl_compressor *d) {
- mz_uint flags;
- mz_uint8 *pLZ_codes;
- mz_uint8 *pOutput_buf = d->m_pOutput_buf;
- mz_uint8 *pLZ_code_buf_end = d->m_pLZ_code_buf;
- mz_uint64 bit_buffer = d->m_bit_buffer;
- mz_uint bits_in = d->m_bits_in;
-
-# define TDEFL_PUT_BITS_FAST(b, l) \
- { \
- bit_buffer |= (((mz_uint64) (b)) << bits_in); \
- bits_in += (l); \
- }
-
- flags = 1;
- for (pLZ_codes = d->m_lz_code_buf; pLZ_codes < pLZ_code_buf_end;
- flags >>= 1) {
- if (flags == 1)
- flags = *pLZ_codes++ | 0x100;
-
- if (flags & 1) {
- mz_uint s0, s1, n0, n1, sym, num_extra_bits;
- mz_uint match_len = pLZ_codes[0];
- mz_uint match_dist = (pLZ_codes[1] | (pLZ_codes[2] << 8));
- pLZ_codes += 3;
-
- MZ_ASSERT(d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]);
- TDEFL_PUT_BITS_FAST(
- d->m_huff_codes[0][s_tdefl_len_sym[match_len]],
- d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]);
- TDEFL_PUT_BITS_FAST(
- match_len & mz_bitmasks[s_tdefl_len_extra[match_len]],
- s_tdefl_len_extra[match_len]);
-
- /* This sequence coaxes MSVC into using cmov's vs. jmp's. */
- s0 = s_tdefl_small_dist_sym[match_dist & 511];
- n0 = s_tdefl_small_dist_extra[match_dist & 511];
- s1 = s_tdefl_large_dist_sym[match_dist >> 8];
- n1 = s_tdefl_large_dist_extra[match_dist >> 8];
- sym = (match_dist < 512) ? s0 : s1;
- num_extra_bits = (match_dist < 512) ? n0 : n1;
-
- MZ_ASSERT(d->m_huff_code_sizes[1][sym]);
- TDEFL_PUT_BITS_FAST(d->m_huff_codes[1][sym],
- d->m_huff_code_sizes[1][sym]);
- TDEFL_PUT_BITS_FAST(match_dist & mz_bitmasks[num_extra_bits],
- num_extra_bits);
- } else {
- mz_uint lit = *pLZ_codes++;
- MZ_ASSERT(d->m_huff_code_sizes[0][lit]);
- TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][lit],
- d->m_huff_code_sizes[0][lit]);
-
- if (((flags & 2) == 0) && (pLZ_codes < pLZ_code_buf_end)) {
- flags >>= 1;
- lit = *pLZ_codes++;
- MZ_ASSERT(d->m_huff_code_sizes[0][lit]);
- TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][lit],
- d->m_huff_code_sizes[0][lit]);
-
- if (((flags & 2) == 0) && (pLZ_codes < pLZ_code_buf_end)) {
- flags >>= 1;
- lit = *pLZ_codes++;
- MZ_ASSERT(d->m_huff_code_sizes[0][lit]);
- TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][lit],
- d->m_huff_code_sizes[0][lit]);
- }
- }
- }
-
- if (pOutput_buf >= d->m_pOutput_buf_end)
- return MZ_FALSE;
-
- memcpy(pOutput_buf, &bit_buffer, sizeof(mz_uint64));
- pOutput_buf += (bits_in >> 3);
- bit_buffer >>= (bits_in & ~7);
- bits_in &= 7;
- }
-
-# undef TDEFL_PUT_BITS_FAST
-
- d->m_pOutput_buf = pOutput_buf;
- d->m_bits_in = 0;
- d->m_bit_buffer = 0;
-
- while (bits_in) {
- mz_uint32 n = MZ_MIN(bits_in, 16);
- TDEFL_PUT_BITS((mz_uint) bit_buffer & mz_bitmasks[n], n);
- bit_buffer >>= n;
- bits_in -= n;
- }
-
- TDEFL_PUT_BITS(d->m_huff_codes[0][256],
- d->m_huff_code_sizes[0][256]);
-
- return (d->m_pOutput_buf < d->m_pOutput_buf_end);
-}
-# else
-static mz_bool tdefl_compress_lz_codes(tdefl_compressor *d) {
- mz_uint flags;
- mz_uint8 *pLZ_codes;
-
- flags = 1;
- for (pLZ_codes = d->m_lz_code_buf; pLZ_codes < d->m_pLZ_code_buf;
- flags >>= 1) {
- if (flags == 1)
- flags = *pLZ_codes++ | 0x100;
- if (flags & 1) {
- mz_uint sym, num_extra_bits;
- mz_uint match_len = pLZ_codes[0],
- match_dist = (pLZ_codes[1] | (pLZ_codes[2] << 8));
- pLZ_codes += 3;
-
- MZ_ASSERT(d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]);
- TDEFL_PUT_BITS(
- d->m_huff_codes[0][s_tdefl_len_sym[match_len]],
- d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]);
- TDEFL_PUT_BITS(match_len &
- mz_bitmasks[s_tdefl_len_extra[match_len]],
- s_tdefl_len_extra[match_len]);
-
- if (match_dist < 512) {
- sym = s_tdefl_small_dist_sym[match_dist];
- num_extra_bits = s_tdefl_small_dist_extra[match_dist];
- } else {
- sym = s_tdefl_large_dist_sym[match_dist >> 8];
- num_extra_bits = s_tdefl_large_dist_extra[match_dist >> 8];
- }
- MZ_ASSERT(d->m_huff_code_sizes[1][sym]);
- TDEFL_PUT_BITS(d->m_huff_codes[1][sym],
- d->m_huff_code_sizes[1][sym]);
- TDEFL_PUT_BITS(match_dist & mz_bitmasks[num_extra_bits],
- num_extra_bits);
- } else {
- mz_uint lit = *pLZ_codes++;
- MZ_ASSERT(d->m_huff_code_sizes[0][lit]);
- TDEFL_PUT_BITS(d->m_huff_codes[0][lit],
- d->m_huff_code_sizes[0][lit]);
- }
- }
-
- TDEFL_PUT_BITS(d->m_huff_codes[0][256],
- d->m_huff_code_sizes[0][256]);
-
- return (d->m_pOutput_buf < d->m_pOutput_buf_end);
-}
-# endif /* MINIZ_USE_UNALIGNED_LOADS_AND_STORES && \
- MINIZ_LITTLE_ENDIAN && MINIZ_HAS_64BIT_REGISTERS */
-
-static mz_bool tdefl_compress_block(tdefl_compressor *d,
- mz_bool static_block) {
- if (static_block)
- tdefl_start_static_block(d);
- else
- tdefl_start_dynamic_block(d);
- return tdefl_compress_lz_codes(d);
-}
-
-static const mz_uint s_tdefl_num_probes[11] = { 0, 1, 6, 32,
- 16, 32, 128, 256,
- 512, 768, 1500 };
-
-static int tdefl_flush_block(tdefl_compressor *d, int flush) {
- mz_uint saved_bit_buf, saved_bits_in;
- mz_uint8 *pSaved_output_buf;
- mz_bool comp_block_succeeded = MZ_FALSE;
- int n,
- use_raw_block = ((d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS) !=
- 0) &&
- (d->m_lookahead_pos -
- d->m_lz_code_buf_dict_pos) <= d->m_dict_size;
- mz_uint8 *pOutput_buf_start =
- ((d->m_pPut_buf_func == NULL) &&
- ((*d->m_pOut_buf_size - d->m_out_buf_ofs) >=
- TDEFL_OUT_BUF_SIZE))
- ? ((mz_uint8 *) d->m_pOut_buf + d->m_out_buf_ofs)
- : d->m_output_buf;
-
- d->m_pOutput_buf = pOutput_buf_start;
- d->m_pOutput_buf_end = d->m_pOutput_buf + TDEFL_OUT_BUF_SIZE - 16;
-
- MZ_ASSERT(!d->m_output_flush_remaining);
- d->m_output_flush_ofs = 0;
- d->m_output_flush_remaining = 0;
-
- *d->m_pLZ_flags = (mz_uint8) (*d->m_pLZ_flags >>
- d->m_num_flags_left);
- d->m_pLZ_code_buf -= (d->m_num_flags_left == 8);
-
- if ((d->m_flags & TDEFL_WRITE_ZLIB_HEADER) && (!d->m_block_index)) {
- const mz_uint8 cmf = 0x78;
- mz_uint8 flg, flevel = 3;
- mz_uint header, i,
- mz_un = sizeof(s_tdefl_num_probes) / sizeof(mz_uint);
-
- /* Determine compression level by reversing the process in
- * tdefl_create_comp_flags_from_zip_params() */
- for (i = 0; i < mz_un; i++)
- if (s_tdefl_num_probes[i] == (d->m_flags & 0xFFF))
- break;
-
- if (i < 2)
- flevel = 0;
- else if (i < 6)
- flevel = 1;
- else if (i == 6)
- flevel = 2;
-
- header = cmf << 8 | (flevel << 6);
- header += 31 - (header % 31);
- flg = header & 0xFF;
-
- TDEFL_PUT_BITS(cmf, 8);
- TDEFL_PUT_BITS(flg, 8);
- }
-
- TDEFL_PUT_BITS(flush == TDEFL_FINISH, 1);
-
- pSaved_output_buf = d->m_pOutput_buf;
- saved_bit_buf = d->m_bit_buffer;
- saved_bits_in = d->m_bits_in;
-
- if (!use_raw_block)
- comp_block_succeeded = tdefl_compress_block(
- d, (d->m_flags & TDEFL_FORCE_ALL_STATIC_BLOCKS) ||
- (d->m_total_lz_bytes < 48));
-
- /* If the block gets expanded, forget the current contents of the
- * output buffer and send a raw block instead. */
- if (((use_raw_block) || ((d->m_total_lz_bytes) &&
- ((d->m_pOutput_buf - pSaved_output_buf +
- 1U) >= d->m_total_lz_bytes))) &&
- ((d->m_lookahead_pos - d->m_lz_code_buf_dict_pos) <=
- d->m_dict_size)) {
- mz_uint i;
- d->m_pOutput_buf = pSaved_output_buf;
- d->m_bit_buffer = saved_bit_buf, d->m_bits_in = saved_bits_in;
- TDEFL_PUT_BITS(0, 2);
- if (d->m_bits_in) {
- TDEFL_PUT_BITS(0, 8 - d->m_bits_in);
- }
- for (i = 2; i; --i, d->m_total_lz_bytes ^= 0xFFFF) {
- TDEFL_PUT_BITS(d->m_total_lz_bytes & 0xFFFF, 16);
- }
- for (i = 0; i < d->m_total_lz_bytes; ++i) {
- TDEFL_PUT_BITS(d->m_dict[(d->m_lz_code_buf_dict_pos + i) &
- TDEFL_LZ_DICT_SIZE_MASK],
- 8);
- }
- }
- /* Check for the extremely unlikely (if not impossible) case of the
- compressed block not fitting into the output buffer when using
- dynamic codes. */
- else if (!comp_block_succeeded) {
- d->m_pOutput_buf = pSaved_output_buf;
- d->m_bit_buffer = saved_bit_buf, d->m_bits_in = saved_bits_in;
- tdefl_compress_block(d, MZ_TRUE);
- }
-
- if (flush) {
- if (flush == TDEFL_FINISH) {
- if (d->m_bits_in) {
- TDEFL_PUT_BITS(0, 8 - d->m_bits_in);
- }
- if (d->m_flags & TDEFL_WRITE_ZLIB_HEADER) {
- mz_uint i, a = d->m_adler32;
- for (i = 0; i < 4; i++) {
- TDEFL_PUT_BITS((a >> 24) & 0xFF, 8);
- a <<= 8;
- }
- }
- } else {
- mz_uint i, z = 0;
- TDEFL_PUT_BITS(0, 3);
- if (d->m_bits_in) {
- TDEFL_PUT_BITS(0, 8 - d->m_bits_in);
- }
- for (i = 2; i; --i, z ^= 0xFFFF) {
- TDEFL_PUT_BITS(z & 0xFFFF, 16);
- }
- }
- }
-
- MZ_ASSERT(d->m_pOutput_buf < d->m_pOutput_buf_end);
-
- memset(&d->m_huff_count[0][0], 0,
- sizeof(d->m_huff_count[0][0]) * TDEFL_MAX_HUFF_SYMBOLS_0);
- memset(&d->m_huff_count[1][0], 0,
- sizeof(d->m_huff_count[1][0]) * TDEFL_MAX_HUFF_SYMBOLS_1);
-
- d->m_pLZ_code_buf = d->m_lz_code_buf + 1;
- d->m_pLZ_flags = d->m_lz_code_buf;
- d->m_num_flags_left = 8;
- d->m_lz_code_buf_dict_pos += d->m_total_lz_bytes;
- d->m_total_lz_bytes = 0;
- d->m_block_index++;
-
- if ((n = (int) (d->m_pOutput_buf - pOutput_buf_start)) != 0) {
- if (d->m_pPut_buf_func) {
- *d->m_pIn_buf_size = d->m_pSrc -
- (const mz_uint8 *) d->m_pIn_buf;
- if (!(*d->m_pPut_buf_func)(d->m_output_buf, n,
- d->m_pPut_buf_user))
- return (
- d->m_prev_return_status = TDEFL_STATUS_PUT_BUF_FAILED);
- } else if (pOutput_buf_start == d->m_output_buf) {
- int bytes_to_copy = (int) MZ_MIN(
- (size_t) n,
- (size_t) (*d->m_pOut_buf_size - d->m_out_buf_ofs));
- memcpy((mz_uint8 *) d->m_pOut_buf + d->m_out_buf_ofs,
- d->m_output_buf, bytes_to_copy);
- d->m_out_buf_ofs += bytes_to_copy;
- if ((n -= bytes_to_copy) != 0) {
- d->m_output_flush_ofs = bytes_to_copy;
- d->m_output_flush_remaining = n;
- }
- } else {
- d->m_out_buf_ofs += n;
- }
- }
-
- return d->m_output_flush_remaining;
-}
-
-# if MINIZ_USE_UNALIGNED_LOADS_AND_STORES
-# ifdef MINIZ_UNALIGNED_USE_MEMCPY
-static mz_uint16 TDEFL_READ_UNALIGNED_WORD(const mz_uint8 *p) {
- mz_uint16 ret;
- memcpy(&ret, p, sizeof(mz_uint16));
- return ret;
-}
-static mz_uint16 TDEFL_READ_UNALIGNED_WORD2(const mz_uint16 *p) {
- mz_uint16 ret;
- memcpy(&ret, p, sizeof(mz_uint16));
- return ret;
-}
-# else
-# define TDEFL_READ_UNALIGNED_WORD(p) *(const mz_uint16 *) (p)
-# define TDEFL_READ_UNALIGNED_WORD2(p) *(const mz_uint16 *) (p)
-# endif
-static MZ_FORCEINLINE void tdefl_find_match(tdefl_compressor *d,
- mz_uint lookahead_pos,
- mz_uint max_dist,
- mz_uint max_match_len,
- mz_uint *pMatch_dist,
- mz_uint *pMatch_len) {
- mz_uint dist, pos = lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK,
- match_len = *pMatch_len, probe_pos = pos,
- next_probe_pos, probe_len;
- mz_uint num_probes_left = d->m_max_probes[match_len >= 32];
- const mz_uint16 *s = (const mz_uint16 *) (d->m_dict + pos), *p, *q;
- mz_uint16 c01 = TDEFL_READ_UNALIGNED_WORD(
- &d->m_dict[pos + match_len - 1]),
- s01 = TDEFL_READ_UNALIGNED_WORD2(s);
- MZ_ASSERT(max_match_len <= TDEFL_MAX_MATCH_LEN);
- if (max_match_len <= match_len)
- return;
- for (;;) {
- for (;;) {
- if (--num_probes_left == 0)
- return;
-# define TDEFL_PROBE \
- next_probe_pos = d->m_next[probe_pos]; \
- if ((!next_probe_pos) || \
- ((dist = (mz_uint16) (lookahead_pos - next_probe_pos)) > \
- max_dist)) \
- return; \
- probe_pos = next_probe_pos & TDEFL_LZ_DICT_SIZE_MASK; \
- if (TDEFL_READ_UNALIGNED_WORD( \
- &d->m_dict[probe_pos + match_len - 1]) == c01) \
- break;
- TDEFL_PROBE;
- TDEFL_PROBE;
- TDEFL_PROBE;
- }
- if (!dist)
- break;
- q = (const mz_uint16 *) (d->m_dict + probe_pos);
- if (TDEFL_READ_UNALIGNED_WORD2(q) != s01)
- continue;
- p = s;
- probe_len = 32;
- do {
- } while ((TDEFL_READ_UNALIGNED_WORD2(++p) ==
- TDEFL_READ_UNALIGNED_WORD2(++q)) &&
- (TDEFL_READ_UNALIGNED_WORD2(++p) ==
- TDEFL_READ_UNALIGNED_WORD2(++q)) &&
- (TDEFL_READ_UNALIGNED_WORD2(++p) ==
- TDEFL_READ_UNALIGNED_WORD2(++q)) &&
- (TDEFL_READ_UNALIGNED_WORD2(++p) ==
- TDEFL_READ_UNALIGNED_WORD2(++q)) &&
- (--probe_len > 0));
- if (!probe_len) {
- *pMatch_dist = dist;
- *pMatch_len = MZ_MIN(max_match_len,
- (mz_uint) TDEFL_MAX_MATCH_LEN);
- break;
- } else if ((probe_len = ((mz_uint) (p - s) * 2) +
- (mz_uint) (*(const mz_uint8 *) p ==
- *(const mz_uint8 *) q)) >
- match_len) {
- *pMatch_dist = dist;
- if ((*pMatch_len = match_len = MZ_MIN(
- max_match_len, probe_len)) == max_match_len)
- break;
- c01 = TDEFL_READ_UNALIGNED_WORD(
- &d->m_dict[pos + match_len - 1]);
- }
- }
-}
-# else
-static MZ_FORCEINLINE void tdefl_find_match(tdefl_compressor *d,
- mz_uint lookahead_pos,
- mz_uint max_dist,
- mz_uint max_match_len,
- mz_uint *pMatch_dist,
- mz_uint *pMatch_len) {
- mz_uint dist, pos = lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK,
- match_len = *pMatch_len, probe_pos = pos,
- next_probe_pos, probe_len;
- mz_uint num_probes_left = d->m_max_probes[match_len >= 32];
- const mz_uint8 *s = d->m_dict + pos, *p, *q;
- mz_uint8 c0 = d->m_dict[pos + match_len],
- c1 = d->m_dict[pos + match_len - 1];
- MZ_ASSERT(max_match_len <= TDEFL_MAX_MATCH_LEN);
- if (max_match_len <= match_len)
- return;
- for (;;) {
- for (;;) {
- if (--num_probes_left == 0)
- return;
-# define TDEFL_PROBE \
- next_probe_pos = d->m_next[probe_pos]; \
- if ((!next_probe_pos) || \
- ((dist = (mz_uint16) (lookahead_pos - next_probe_pos)) > \
- max_dist)) \
- return; \
- probe_pos = next_probe_pos & TDEFL_LZ_DICT_SIZE_MASK; \
- if ((d->m_dict[probe_pos + match_len] == c0) && \
- (d->m_dict[probe_pos + match_len - 1] == c1)) \
- break;
- TDEFL_PROBE;
- TDEFL_PROBE;
- TDEFL_PROBE;
- }
- if (!dist)
- break;
- p = s;
- q = d->m_dict + probe_pos;
- for (probe_len = 0; probe_len < max_match_len; probe_len++)
- if (*p++ != *q++)
- break;
- if (probe_len > match_len) {
- *pMatch_dist = dist;
- if ((*pMatch_len = match_len = probe_len) == max_match_len)
- return;
- c0 = d->m_dict[pos + match_len];
- c1 = d->m_dict[pos + match_len - 1];
- }
- }
-}
-# endif /* #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES */
-
-# if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN
-# ifdef MINIZ_UNALIGNED_USE_MEMCPY
-static mz_uint32 TDEFL_READ_UNALIGNED_WORD32(const mz_uint8 *p) {
- mz_uint32 ret;
- memcpy(&ret, p, sizeof(mz_uint32));
- return ret;
-}
-# else
-# define TDEFL_READ_UNALIGNED_WORD32(p) *(const mz_uint32 *) (p)
-# endif
-static mz_bool tdefl_compress_fast(tdefl_compressor *d) {
- /* Faster, minimally featured LZRW1-style match+parse loop with
- * better register utilization. Intended for applications where raw
- * throughput is valued more highly than ratio. */
- mz_uint lookahead_pos = d->m_lookahead_pos,
- lookahead_size = d->m_lookahead_size,
- dict_size = d->m_dict_size,
- total_lz_bytes = d->m_total_lz_bytes,
- num_flags_left = d->m_num_flags_left;
- mz_uint8 *pLZ_code_buf = d->m_pLZ_code_buf,
- *pLZ_flags = d->m_pLZ_flags;
- mz_uint cur_pos = lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK;
-
- while ((d->m_src_buf_left) || ((d->m_flush) && (lookahead_size))) {
- const mz_uint TDEFL_COMP_FAST_LOOKAHEAD_SIZE = 4096;
- mz_uint dst_pos = (lookahead_pos + lookahead_size) &
- TDEFL_LZ_DICT_SIZE_MASK;
- mz_uint num_bytes_to_process = (mz_uint) MZ_MIN(
- d->m_src_buf_left,
- TDEFL_COMP_FAST_LOOKAHEAD_SIZE - lookahead_size);
- d->m_src_buf_left -= num_bytes_to_process;
- lookahead_size += num_bytes_to_process;
-
- while (num_bytes_to_process) {
- mz_uint32 n = MZ_MIN(TDEFL_LZ_DICT_SIZE - dst_pos,
- num_bytes_to_process);
- memcpy(d->m_dict + dst_pos, d->m_pSrc, n);
- if (dst_pos < (TDEFL_MAX_MATCH_LEN - 1))
- memcpy(d->m_dict + TDEFL_LZ_DICT_SIZE + dst_pos, d->m_pSrc,
- MZ_MIN(n, (TDEFL_MAX_MATCH_LEN - 1) - dst_pos));
- d->m_pSrc += n;
- dst_pos = (dst_pos + n) & TDEFL_LZ_DICT_SIZE_MASK;
- num_bytes_to_process -= n;
- }
-
- dict_size = MZ_MIN(TDEFL_LZ_DICT_SIZE - lookahead_size,
- dict_size);
- if ((!d->m_flush) &&
- (lookahead_size < TDEFL_COMP_FAST_LOOKAHEAD_SIZE))
- break;
-
- while (lookahead_size >= 4) {
- mz_uint cur_match_dist, cur_match_len = 1;
- mz_uint8 *pCur_dict = d->m_dict + cur_pos;
- mz_uint first_trigram = TDEFL_READ_UNALIGNED_WORD32(pCur_dict) &
- 0xFFFFFF;
- mz_uint hash = (first_trigram ^
- (first_trigram >>
- (24 - (TDEFL_LZ_HASH_BITS - 8)))) &
- TDEFL_LEVEL1_HASH_SIZE_MASK;
- mz_uint probe_pos = d->m_hash[hash];
- d->m_hash[hash] = (mz_uint16) lookahead_pos;
-
- if (((cur_match_dist = (mz_uint16) (lookahead_pos -
- probe_pos)) <= dict_size) &&
- ((TDEFL_READ_UNALIGNED_WORD32(
- d->m_dict + (probe_pos &= TDEFL_LZ_DICT_SIZE_MASK)) &
- 0xFFFFFF) == first_trigram)) {
- const mz_uint16 *p = (const mz_uint16 *) pCur_dict;
- const mz_uint16 *q = (const mz_uint16 *) (d->m_dict +
- probe_pos);
- mz_uint32 probe_len = 32;
- do {
- } while ((TDEFL_READ_UNALIGNED_WORD2(++p) ==
- TDEFL_READ_UNALIGNED_WORD2(++q)) &&
- (TDEFL_READ_UNALIGNED_WORD2(++p) ==
- TDEFL_READ_UNALIGNED_WORD2(++q)) &&
- (TDEFL_READ_UNALIGNED_WORD2(++p) ==
- TDEFL_READ_UNALIGNED_WORD2(++q)) &&
- (TDEFL_READ_UNALIGNED_WORD2(++p) ==
- TDEFL_READ_UNALIGNED_WORD2(++q)) &&
- (--probe_len > 0));
- cur_match_len =
- ((mz_uint) (p - (const mz_uint16 *) pCur_dict) * 2) +
- (mz_uint) (*(const mz_uint8 *) p ==
- *(const mz_uint8 *) q);
- if (!probe_len)
- cur_match_len = cur_match_dist ? TDEFL_MAX_MATCH_LEN : 0;
-
- if ((cur_match_len < TDEFL_MIN_MATCH_LEN) ||
- ((cur_match_len == TDEFL_MIN_MATCH_LEN) &&
- (cur_match_dist >= 8U * 1024U))) {
- cur_match_len = 1;
- *pLZ_code_buf++ = (mz_uint8) first_trigram;
- *pLZ_flags = (mz_uint8) (*pLZ_flags >> 1);
- d->m_huff_count[0][(mz_uint8) first_trigram]++;
- } else {
- mz_uint32 s0, s1;
- cur_match_len = MZ_MIN(cur_match_len, lookahead_size);
-
- MZ_ASSERT((cur_match_len >= TDEFL_MIN_MATCH_LEN) &&
- (cur_match_dist >= 1) &&
- (cur_match_dist <= TDEFL_LZ_DICT_SIZE));
-
- cur_match_dist--;
-
- pLZ_code_buf[0] = (mz_uint8) (cur_match_len -
- TDEFL_MIN_MATCH_LEN);
-# ifdef MINIZ_UNALIGNED_USE_MEMCPY
- memcpy(&pLZ_code_buf[1], &cur_match_dist,
- sizeof(cur_match_dist));
-# else
- *(mz_uint16 *) (&pLZ_code_buf[1]) = (mz_uint16)
- cur_match_dist;
-# endif
- pLZ_code_buf += 3;
- *pLZ_flags = (mz_uint8) ((*pLZ_flags >> 1) | 0x80);
-
- s0 = s_tdefl_small_dist_sym[cur_match_dist & 511];
- s1 = s_tdefl_large_dist_sym[cur_match_dist >> 8];
- d->m_huff_count[1][(cur_match_dist < 512) ? s0 : s1]++;
-
- d->m_huff_count[0][s_tdefl_len_sym[cur_match_len -
- TDEFL_MIN_MATCH_LEN]]++;
- }
- } else {
- *pLZ_code_buf++ = (mz_uint8) first_trigram;
- *pLZ_flags = (mz_uint8) (*pLZ_flags >> 1);
- d->m_huff_count[0][(mz_uint8) first_trigram]++;
- }
-
- if (--num_flags_left == 0) {
- num_flags_left = 8;
- pLZ_flags = pLZ_code_buf++;
- }
-
- total_lz_bytes += cur_match_len;
- lookahead_pos += cur_match_len;
- dict_size = MZ_MIN(dict_size + cur_match_len,
- (mz_uint) TDEFL_LZ_DICT_SIZE);
- cur_pos = (cur_pos + cur_match_len) & TDEFL_LZ_DICT_SIZE_MASK;
- MZ_ASSERT(lookahead_size >= cur_match_len);
- lookahead_size -= cur_match_len;
-
- if (pLZ_code_buf >
- &d->m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE - 8]) {
- int n;
- d->m_lookahead_pos = lookahead_pos;
- d->m_lookahead_size = lookahead_size;
- d->m_dict_size = dict_size;
- d->m_total_lz_bytes = total_lz_bytes;
- d->m_pLZ_code_buf = pLZ_code_buf;
- d->m_pLZ_flags = pLZ_flags;
- d->m_num_flags_left = num_flags_left;
- if ((n = tdefl_flush_block(d, 0)) != 0)
- return (n < 0) ? MZ_FALSE : MZ_TRUE;
- total_lz_bytes = d->m_total_lz_bytes;
- pLZ_code_buf = d->m_pLZ_code_buf;
- pLZ_flags = d->m_pLZ_flags;
- num_flags_left = d->m_num_flags_left;
- }
- }
-
- while (lookahead_size) {
- mz_uint8 lit = d->m_dict[cur_pos];
-
- total_lz_bytes++;
- *pLZ_code_buf++ = lit;
- *pLZ_flags = (mz_uint8) (*pLZ_flags >> 1);
- if (--num_flags_left == 0) {
- num_flags_left = 8;
- pLZ_flags = pLZ_code_buf++;
- }
-
- d->m_huff_count[0][lit]++;
-
- lookahead_pos++;
- dict_size = MZ_MIN(dict_size + 1, (mz_uint) TDEFL_LZ_DICT_SIZE);
- cur_pos = (cur_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK;
- lookahead_size--;
-
- if (pLZ_code_buf >
- &d->m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE - 8]) {
- int n;
- d->m_lookahead_pos = lookahead_pos;
- d->m_lookahead_size = lookahead_size;
- d->m_dict_size = dict_size;
- d->m_total_lz_bytes = total_lz_bytes;
- d->m_pLZ_code_buf = pLZ_code_buf;
- d->m_pLZ_flags = pLZ_flags;
- d->m_num_flags_left = num_flags_left;
- if ((n = tdefl_flush_block(d, 0)) != 0)
- return (n < 0) ? MZ_FALSE : MZ_TRUE;
- total_lz_bytes = d->m_total_lz_bytes;
- pLZ_code_buf = d->m_pLZ_code_buf;
- pLZ_flags = d->m_pLZ_flags;
- num_flags_left = d->m_num_flags_left;
- }
- }
- }
-
- d->m_lookahead_pos = lookahead_pos;
- d->m_lookahead_size = lookahead_size;
- d->m_dict_size = dict_size;
- d->m_total_lz_bytes = total_lz_bytes;
- d->m_pLZ_code_buf = pLZ_code_buf;
- d->m_pLZ_flags = pLZ_flags;
- d->m_num_flags_left = num_flags_left;
- return MZ_TRUE;
-}
-# endif /* MINIZ_USE_UNALIGNED_LOADS_AND_STORES && \
- MINIZ_LITTLE_ENDIAN */
-
-static MZ_FORCEINLINE void tdefl_record_literal(tdefl_compressor *d,
- mz_uint8 lit) {
- d->m_total_lz_bytes++;
- *d->m_pLZ_code_buf++ = lit;
- *d->m_pLZ_flags = (mz_uint8) (*d->m_pLZ_flags >> 1);
- if (--d->m_num_flags_left == 0) {
- d->m_num_flags_left = 8;
- d->m_pLZ_flags = d->m_pLZ_code_buf++;
- }
- d->m_huff_count[0][lit]++;
-}
-
-static MZ_FORCEINLINE void tdefl_record_match(tdefl_compressor *d,
- mz_uint match_len,
- mz_uint match_dist) {
- mz_uint32 s0, s1;
-
- MZ_ASSERT((match_len >= TDEFL_MIN_MATCH_LEN) && (match_dist >= 1) &&
- (match_dist <= TDEFL_LZ_DICT_SIZE));
-
- d->m_total_lz_bytes += match_len;
-
- d->m_pLZ_code_buf[0] = (mz_uint8) (match_len - TDEFL_MIN_MATCH_LEN);
-
- match_dist -= 1;
- d->m_pLZ_code_buf[1] = (mz_uint8) (match_dist & 0xFF);
- d->m_pLZ_code_buf[2] = (mz_uint8) (match_dist >> 8);
- d->m_pLZ_code_buf += 3;
-
- *d->m_pLZ_flags = (mz_uint8) ((*d->m_pLZ_flags >> 1) | 0x80);
- if (--d->m_num_flags_left == 0) {
- d->m_num_flags_left = 8;
- d->m_pLZ_flags = d->m_pLZ_code_buf++;
- }
-
- s0 = s_tdefl_small_dist_sym[match_dist & 511];
- s1 = s_tdefl_large_dist_sym[(match_dist >> 8) & 127];
- d->m_huff_count[1][(match_dist < 512) ? s0 : s1]++;
- d->m_huff_count[0]
- [s_tdefl_len_sym[match_len - TDEFL_MIN_MATCH_LEN]]++;
-}
-
-static mz_bool tdefl_compress_normal(tdefl_compressor *d) {
- const mz_uint8 *pSrc = d->m_pSrc;
- size_t src_buf_left = d->m_src_buf_left;
- tdefl_flush flush = d->m_flush;
-
- while ((src_buf_left) || ((flush) && (d->m_lookahead_size))) {
- mz_uint len_to_move, cur_match_dist, cur_match_len, cur_pos;
- /* Update dictionary and hash chains. Keeps the lookahead size
- * equal to TDEFL_MAX_MATCH_LEN. */
- if ((d->m_lookahead_size + d->m_dict_size) >=
- (TDEFL_MIN_MATCH_LEN - 1)) {
- mz_uint dst_pos = (d->m_lookahead_pos + d->m_lookahead_size) &
- TDEFL_LZ_DICT_SIZE_MASK,
- ins_pos = d->m_lookahead_pos + d->m_lookahead_size - 2;
- mz_uint hash =
- (d->m_dict[ins_pos & TDEFL_LZ_DICT_SIZE_MASK]
- << TDEFL_LZ_HASH_SHIFT) ^
- d->m_dict[(ins_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK];
- mz_uint num_bytes_to_process = (mz_uint) MZ_MIN(
- src_buf_left, TDEFL_MAX_MATCH_LEN - d->m_lookahead_size);
- const mz_uint8 *pSrc_end = pSrc ? pSrc + num_bytes_to_process
- : NULL;
- src_buf_left -= num_bytes_to_process;
- d->m_lookahead_size += num_bytes_to_process;
- while (pSrc != pSrc_end) {
- mz_uint8 c = *pSrc++;
- d->m_dict[dst_pos] = c;
- if (dst_pos < (TDEFL_MAX_MATCH_LEN - 1))
- d->m_dict[TDEFL_LZ_DICT_SIZE + dst_pos] = c;
- hash = ((hash << TDEFL_LZ_HASH_SHIFT) ^ c) &
- (TDEFL_LZ_HASH_SIZE - 1);
- d->m_next[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] =
- d->m_hash[hash];
- d->m_hash[hash] = (mz_uint16) (ins_pos);
- dst_pos = (dst_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK;
- ins_pos++;
- }
- } else {
- while ((src_buf_left) &&
- (d->m_lookahead_size < TDEFL_MAX_MATCH_LEN)) {
- mz_uint8 c = *pSrc++;
- mz_uint dst_pos = (d->m_lookahead_pos + d->m_lookahead_size) &
- TDEFL_LZ_DICT_SIZE_MASK;
- src_buf_left--;
- d->m_dict[dst_pos] = c;
- if (dst_pos < (TDEFL_MAX_MATCH_LEN - 1))
- d->m_dict[TDEFL_LZ_DICT_SIZE + dst_pos] = c;
- if ((++d->m_lookahead_size + d->m_dict_size) >=
- TDEFL_MIN_MATCH_LEN) {
- mz_uint ins_pos = d->m_lookahead_pos +
- (d->m_lookahead_size - 1) - 2;
- mz_uint hash =
- ((d->m_dict[ins_pos & TDEFL_LZ_DICT_SIZE_MASK]
- << (TDEFL_LZ_HASH_SHIFT * 2)) ^
- (d->m_dict[(ins_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK]
- << TDEFL_LZ_HASH_SHIFT) ^
- c) &
- (TDEFL_LZ_HASH_SIZE - 1);
- d->m_next[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] =
- d->m_hash[hash];
- d->m_hash[hash] = (mz_uint16) (ins_pos);
- }
- }
- }
- d->m_dict_size = MZ_MIN(TDEFL_LZ_DICT_SIZE - d->m_lookahead_size,
- d->m_dict_size);
- if ((!flush) && (d->m_lookahead_size < TDEFL_MAX_MATCH_LEN))
- break;
-
- /* Simple lazy/greedy parsing state machine. */
- len_to_move = 1;
- cur_match_dist = 0;
- cur_match_len = d->m_saved_match_len ? d->m_saved_match_len
- : (TDEFL_MIN_MATCH_LEN - 1);
- cur_pos = d->m_lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK;
- if (d->m_flags &
- (TDEFL_RLE_MATCHES | TDEFL_FORCE_ALL_RAW_BLOCKS)) {
- if ((d->m_dict_size) &&
- (!(d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS))) {
- mz_uint8 c =
- d->m_dict[(cur_pos - 1) & TDEFL_LZ_DICT_SIZE_MASK];
- cur_match_len = 0;
- while (cur_match_len < d->m_lookahead_size) {
- if (d->m_dict[cur_pos + cur_match_len] != c)
- break;
- cur_match_len++;
- }
- if (cur_match_len < TDEFL_MIN_MATCH_LEN)
- cur_match_len = 0;
- else
- cur_match_dist = 1;
- }
- } else {
- tdefl_find_match(d, d->m_lookahead_pos, d->m_dict_size,
- d->m_lookahead_size, &cur_match_dist,
- &cur_match_len);
- }
- if (((cur_match_len == TDEFL_MIN_MATCH_LEN) &&
- (cur_match_dist >= 8U * 1024U)) ||
- (cur_pos == cur_match_dist) ||
- ((d->m_flags & TDEFL_FILTER_MATCHES) &&
- (cur_match_len <= 5))) {
- cur_match_dist = cur_match_len = 0;
- }
- if (d->m_saved_match_len) {
- if (cur_match_len > d->m_saved_match_len) {
- tdefl_record_literal(d, (mz_uint8) d->m_saved_lit);
- if (cur_match_len >= 128) {
- tdefl_record_match(d, cur_match_len, cur_match_dist);
- d->m_saved_match_len = 0;
- len_to_move = cur_match_len;
- } else {
- d->m_saved_lit = d->m_dict[cur_pos];
- d->m_saved_match_dist = cur_match_dist;
- d->m_saved_match_len = cur_match_len;
- }
- } else {
- tdefl_record_match(d, d->m_saved_match_len,
- d->m_saved_match_dist);
- len_to_move = d->m_saved_match_len - 1;
- d->m_saved_match_len = 0;
- }
- } else if (!cur_match_dist)
- tdefl_record_literal(
- d, d->m_dict[MZ_MIN(cur_pos, sizeof(d->m_dict) - 1)]);
- else if ((d->m_greedy_parsing) ||
- (d->m_flags & TDEFL_RLE_MATCHES) ||
- (cur_match_len >= 128)) {
- tdefl_record_match(d, cur_match_len, cur_match_dist);
- len_to_move = cur_match_len;
- } else {
- d->m_saved_lit =
- d->m_dict[MZ_MIN(cur_pos, sizeof(d->m_dict) - 1)];
- d->m_saved_match_dist = cur_match_dist;
- d->m_saved_match_len = cur_match_len;
- }
- /* Move the lookahead forward by len_to_move bytes. */
- d->m_lookahead_pos += len_to_move;
- MZ_ASSERT(d->m_lookahead_size >= len_to_move);
- d->m_lookahead_size -= len_to_move;
- d->m_dict_size = MZ_MIN(d->m_dict_size + len_to_move,
- (mz_uint) TDEFL_LZ_DICT_SIZE);
- /* Check if it's time to flush the current LZ codes to the
- * internal output buffer. */
- if ((d->m_pLZ_code_buf >
- &d->m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE - 8]) ||
- ((d->m_total_lz_bytes > 31 * 1024) &&
- (((((mz_uint) (d->m_pLZ_code_buf - d->m_lz_code_buf) *
- 115) >>
- 7) >= d->m_total_lz_bytes) ||
- (d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS)))) {
- int n;
- d->m_pSrc = pSrc;
- d->m_src_buf_left = src_buf_left;
- if ((n = tdefl_flush_block(d, 0)) != 0)
- return (n < 0) ? MZ_FALSE : MZ_TRUE;
- }
- }
-
- d->m_pSrc = pSrc;
- d->m_src_buf_left = src_buf_left;
- return MZ_TRUE;
-}
-
-static tdefl_status tdefl_flush_output_buffer(tdefl_compressor *d) {
- if (d->m_pIn_buf_size) {
- *d->m_pIn_buf_size = d->m_pSrc - (const mz_uint8 *) d->m_pIn_buf;
- }
-
- if (d->m_pOut_buf_size) {
- size_t n = MZ_MIN(*d->m_pOut_buf_size - d->m_out_buf_ofs,
- d->m_output_flush_remaining);
- memcpy((mz_uint8 *) d->m_pOut_buf + d->m_out_buf_ofs,
- d->m_output_buf + d->m_output_flush_ofs, n);
- d->m_output_flush_ofs += (mz_uint) n;
- d->m_output_flush_remaining -= (mz_uint) n;
- d->m_out_buf_ofs += n;
-
- *d->m_pOut_buf_size = d->m_out_buf_ofs;
- }
-
- return (d->m_finished && !d->m_output_flush_remaining)
- ? TDEFL_STATUS_DONE
- : TDEFL_STATUS_OKAY;
-}
-
-tdefl_status tdefl_compress(tdefl_compressor *d, const void *pIn_buf,
- size_t *pIn_buf_size, void *pOut_buf,
- size_t *pOut_buf_size,
- tdefl_flush flush) {
- if (!d) {
- if (pIn_buf_size)
- *pIn_buf_size = 0;
- if (pOut_buf_size)
- *pOut_buf_size = 0;
- return TDEFL_STATUS_BAD_PARAM;
- }
-
- d->m_pIn_buf = pIn_buf;
- d->m_pIn_buf_size = pIn_buf_size;
- d->m_pOut_buf = pOut_buf;
- d->m_pOut_buf_size = pOut_buf_size;
- d->m_pSrc = (const mz_uint8 *) (pIn_buf);
- d->m_src_buf_left = pIn_buf_size ? *pIn_buf_size : 0;
- d->m_out_buf_ofs = 0;
- d->m_flush = flush;
-
- if (((d->m_pPut_buf_func != NULL) ==
- ((pOut_buf != NULL) || (pOut_buf_size != NULL))) ||
- (d->m_prev_return_status != TDEFL_STATUS_OKAY) ||
- (d->m_wants_to_finish && (flush != TDEFL_FINISH)) ||
- (pIn_buf_size && *pIn_buf_size && !pIn_buf) ||
- (pOut_buf_size && *pOut_buf_size && !pOut_buf)) {
- if (pIn_buf_size)
- *pIn_buf_size = 0;
- if (pOut_buf_size)
- *pOut_buf_size = 0;
- return (d->m_prev_return_status = TDEFL_STATUS_BAD_PARAM);
- }
- d->m_wants_to_finish |= (flush == TDEFL_FINISH);
-
- if ((d->m_output_flush_remaining) || (d->m_finished))
- return (d->m_prev_return_status = tdefl_flush_output_buffer(d));
-
-# if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN
- if (((d->m_flags & TDEFL_MAX_PROBES_MASK) == 1) &&
- ((d->m_flags & TDEFL_GREEDY_PARSING_FLAG) != 0) &&
- ((d->m_flags &
- (TDEFL_FILTER_MATCHES | TDEFL_FORCE_ALL_RAW_BLOCKS |
- TDEFL_RLE_MATCHES)) == 0)) {
- if (!tdefl_compress_fast(d))
- return d->m_prev_return_status;
- } else
-# endif /* #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && \
- MINIZ_LITTLE_ENDIAN */
- {
- if (!tdefl_compress_normal(d))
- return d->m_prev_return_status;
- }
-
- if ((d->m_flags &
- (TDEFL_WRITE_ZLIB_HEADER | TDEFL_COMPUTE_ADLER32)) &&
- (pIn_buf))
- d->m_adler32 = (mz_uint32) mz_adler32(
- d->m_adler32, (const mz_uint8 *) pIn_buf,
- d->m_pSrc - (const mz_uint8 *) pIn_buf);
-
- if ((flush) && (!d->m_lookahead_size) && (!d->m_src_buf_left) &&
- (!d->m_output_flush_remaining)) {
- if (tdefl_flush_block(d, flush) < 0)
- return d->m_prev_return_status;
- d->m_finished = (flush == TDEFL_FINISH);
- if (flush == TDEFL_FULL_FLUSH) {
- MZ_CLEAR_ARR(d->m_hash);
- MZ_CLEAR_ARR(d->m_next);
- d->m_dict_size = 0;
- }
- }
-
- return (d->m_prev_return_status = tdefl_flush_output_buffer(d));
-}
-
-tdefl_status tdefl_compress_buffer(tdefl_compressor *d,
- const void *pIn_buf,
- size_t in_buf_size,
- tdefl_flush flush) {
- MZ_ASSERT(d->m_pPut_buf_func);
- return tdefl_compress(d, pIn_buf, &in_buf_size, NULL, NULL, flush);
-}
-
-tdefl_status tdefl_init(tdefl_compressor *d,
- tdefl_put_buf_func_ptr pPut_buf_func,
- void *pPut_buf_user, int flags) {
- d->m_pPut_buf_func = pPut_buf_func;
- d->m_pPut_buf_user = pPut_buf_user;
- d->m_flags = (mz_uint) (flags);
- d->m_max_probes[0] = 1 + ((flags & 0xFFF) + 2) / 3;
- d->m_greedy_parsing = (flags & TDEFL_GREEDY_PARSING_FLAG) != 0;
- d->m_max_probes[1] = 1 + (((flags & 0xFFF) >> 2) + 2) / 3;
- if (!(flags & TDEFL_NONDETERMINISTIC_PARSING_FLAG))
- MZ_CLEAR_ARR(d->m_hash);
- d->m_lookahead_pos = d->m_lookahead_size = d->m_dict_size =
- d->m_total_lz_bytes = d->m_lz_code_buf_dict_pos = d->m_bits_in =
- 0;
- d->m_output_flush_ofs = d->m_output_flush_remaining =
- d->m_finished = d->m_block_index = d->m_bit_buffer =
- d->m_wants_to_finish = 0;
- d->m_pLZ_code_buf = d->m_lz_code_buf + 1;
- d->m_pLZ_flags = d->m_lz_code_buf;
- *d->m_pLZ_flags = 0;
- d->m_num_flags_left = 8;
- d->m_pOutput_buf = d->m_output_buf;
- d->m_pOutput_buf_end = d->m_output_buf;
- d->m_prev_return_status = TDEFL_STATUS_OKAY;
- d->m_saved_match_dist = d->m_saved_match_len = d->m_saved_lit = 0;
- d->m_adler32 = 1;
- d->m_pIn_buf = NULL;
- d->m_pOut_buf = NULL;
- d->m_pIn_buf_size = NULL;
- d->m_pOut_buf_size = NULL;
- d->m_flush = TDEFL_NO_FLUSH;
- d->m_pSrc = NULL;
- d->m_src_buf_left = 0;
- d->m_out_buf_ofs = 0;
- if (!(flags & TDEFL_NONDETERMINISTIC_PARSING_FLAG))
- MZ_CLEAR_ARR(d->m_dict);
- memset(&d->m_huff_count[0][0], 0,
- sizeof(d->m_huff_count[0][0]) * TDEFL_MAX_HUFF_SYMBOLS_0);
- memset(&d->m_huff_count[1][0], 0,
- sizeof(d->m_huff_count[1][0]) * TDEFL_MAX_HUFF_SYMBOLS_1);
- return TDEFL_STATUS_OKAY;
-}
-
-tdefl_status tdefl_get_prev_return_status(tdefl_compressor *d) {
- return d->m_prev_return_status;
-}
-
-mz_uint32 tdefl_get_adler32(tdefl_compressor *d) {
- return d->m_adler32;
-}
-
-mz_bool tdefl_compress_mem_to_output(
- const void *pBuf, size_t buf_len,
- tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user,
- int flags) {
- tdefl_compressor *pComp;
- mz_bool succeeded;
- if (((buf_len) && (!pBuf)) || (!pPut_buf_func))
- return MZ_FALSE;
- pComp = (tdefl_compressor *) MZ_MALLOC(sizeof(tdefl_compressor));
- if (!pComp)
- return MZ_FALSE;
- succeeded = (tdefl_init(pComp, pPut_buf_func, pPut_buf_user,
- flags) == TDEFL_STATUS_OKAY);
- succeeded = succeeded && (tdefl_compress_buffer(
- pComp, pBuf, buf_len, TDEFL_FINISH) ==
- TDEFL_STATUS_DONE);
- MZ_FREE(pComp);
- return succeeded;
-}
-
-typedef struct {
- size_t m_size, m_capacity;
- mz_uint8 *m_pBuf;
- mz_bool m_expandable;
-} tdefl_output_buffer;
-
-static mz_bool tdefl_output_buffer_putter(const void *pBuf, int len,
- void *pUser) {
- tdefl_output_buffer *p = (tdefl_output_buffer *) pUser;
- size_t new_size = p->m_size + len;
- if (new_size > p->m_capacity) {
- size_t new_capacity = p->m_capacity;
- mz_uint8 *pNew_buf;
- if (!p->m_expandable)
- return MZ_FALSE;
- do {
- new_capacity = MZ_MAX(128U, new_capacity << 1U);
- } while (new_size > new_capacity);
- pNew_buf = (mz_uint8 *) MZ_REALLOC(p->m_pBuf, new_capacity);
- if (!pNew_buf)
- return MZ_FALSE;
- p->m_pBuf = pNew_buf;
- p->m_capacity = new_capacity;
- }
- memcpy((mz_uint8 *) p->m_pBuf + p->m_size, pBuf, len);
- p->m_size = new_size;
- return MZ_TRUE;
-}
-
-void *tdefl_compress_mem_to_heap(const void *pSrc_buf,
- size_t src_buf_len, size_t *pOut_len,
- int flags) {
- tdefl_output_buffer out_buf;
- MZ_CLEAR_OBJ(out_buf);
- if (!pOut_len)
- return MZ_FALSE;
- else
- *pOut_len = 0;
- out_buf.m_expandable = MZ_TRUE;
- if (!tdefl_compress_mem_to_output(pSrc_buf, src_buf_len,
- tdefl_output_buffer_putter,
- &out_buf, flags))
- return NULL;
- *pOut_len = out_buf.m_size;
- return out_buf.m_pBuf;
-}
-
-size_t tdefl_compress_mem_to_mem(void *pOut_buf, size_t out_buf_len,
- const void *pSrc_buf,
- size_t src_buf_len, int flags) {
- tdefl_output_buffer out_buf;
- MZ_CLEAR_OBJ(out_buf);
- if (!pOut_buf)
- return 0;
- out_buf.m_pBuf = (mz_uint8 *) pOut_buf;
- out_buf.m_capacity = out_buf_len;
- if (!tdefl_compress_mem_to_output(pSrc_buf, src_buf_len,
- tdefl_output_buffer_putter,
- &out_buf, flags))
- return 0;
- return out_buf.m_size;
-}
-
-/* level may actually range from [0,10] (10 is a "hidden" max level,
- * where we want a bit more compression and it's fine if throughput to
- * fall off a cliff on some files). */
-mz_uint tdefl_create_comp_flags_from_zip_params(int level,
- int window_bits,
- int strategy) {
- mz_uint comp_flags =
- s_tdefl_num_probes[(level >= 0) ? MZ_MIN(10, level)
- : MZ_DEFAULT_LEVEL] |
- ((level <= 3) ? TDEFL_GREEDY_PARSING_FLAG : 0);
- if (window_bits > 0)
- comp_flags |= TDEFL_WRITE_ZLIB_HEADER;
-
- if (!level)
- comp_flags |= TDEFL_FORCE_ALL_RAW_BLOCKS;
- else if (strategy == MZ_FILTERED)
- comp_flags |= TDEFL_FILTER_MATCHES;
- else if (strategy == MZ_HUFFMAN_ONLY)
- comp_flags &= ~TDEFL_MAX_PROBES_MASK;
- else if (strategy == MZ_FIXED)
- comp_flags |= TDEFL_FORCE_ALL_STATIC_BLOCKS;
- else if (strategy == MZ_RLE)
- comp_flags |= TDEFL_RLE_MATCHES;
-
- return comp_flags;
-}
-
-# ifdef _MSC_VER
-# pragma warning(push)
-# pragma warning( \
- disable : 4204) /* nonstandard extension used : non-constant \
- aggregate initializer (also supported by \
- GNU C and C99, so no big deal) */
-# endif
-
-/* Simple PNG writer function by Alex Evans, 2011. Released into the
- public domain: https://gist.github.com/908299, more context at
- http://altdevblogaday.org/2011/04/06/a-smaller-jpg-encoder/.
- This is actually a modification of Alex's original code so PNG files
- generated by this function pass pngcheck. */
-void *tdefl_write_image_to_png_file_in_memory_ex(
- const void *pImage, int w, int h, int num_chans, size_t *pLen_out,
- mz_uint level, mz_bool flip) {
- /* Using a local copy of this array here in case MINIZ_NO_ZLIB_APIS
- * was defined. */
- static const mz_uint s_tdefl_png_num_probes[11] = {
- 0, 1, 6, 32, 16, 32, 128, 256, 512, 768, 1500
- };
- tdefl_compressor *pComp = (tdefl_compressor *) MZ_MALLOC(
- sizeof(tdefl_compressor));
- tdefl_output_buffer out_buf;
- int i, bpl = w * num_chans, y, z;
- mz_uint32 c;
- *pLen_out = 0;
- if (!pComp)
- return NULL;
- MZ_CLEAR_OBJ(out_buf);
- out_buf.m_expandable = MZ_TRUE;
- out_buf.m_capacity = 57 + MZ_MAX(64, (1 + bpl) * h);
- if (NULL ==
- (out_buf.m_pBuf = (mz_uint8 *) MZ_MALLOC(out_buf.m_capacity))) {
- MZ_FREE(pComp);
- return NULL;
- }
- /* write dummy header */
- for (z = 41; z; --z) tdefl_output_buffer_putter(&z, 1, &out_buf);
- /* compress image data */
- tdefl_init(pComp, tdefl_output_buffer_putter, &out_buf,
- s_tdefl_png_num_probes[MZ_MIN(10, level)] |
- TDEFL_WRITE_ZLIB_HEADER);
- for (y = 0; y < h; ++y) {
- tdefl_compress_buffer(pComp, &z, 1, TDEFL_NO_FLUSH);
- tdefl_compress_buffer(
- pComp, (mz_uint8 *) pImage + (flip ? (h - 1 - y) : y) * bpl,
- bpl, TDEFL_NO_FLUSH);
- }
- if (tdefl_compress_buffer(pComp, NULL, 0, TDEFL_FINISH) !=
- TDEFL_STATUS_DONE) {
- MZ_FREE(pComp);
- MZ_FREE(out_buf.m_pBuf);
- return NULL;
- }
- /* write real header */
- *pLen_out = out_buf.m_size - 41;
- {
- static const mz_uint8 chans[] = { 0x00, 0x00, 0x04, 0x02, 0x06 };
- mz_uint8 pnghdr[41] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a,
- 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48,
- 0x44, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x49, 0x44, 0x41, 0x54 };
- pnghdr[18] = (mz_uint8) (w >> 8);
- pnghdr[19] = (mz_uint8) w;
- pnghdr[22] = (mz_uint8) (h >> 8);
- pnghdr[23] = (mz_uint8) h;
- pnghdr[25] = chans[num_chans];
- pnghdr[33] = (mz_uint8) (*pLen_out >> 24);
- pnghdr[34] = (mz_uint8) (*pLen_out >> 16);
- pnghdr[35] = (mz_uint8) (*pLen_out >> 8);
- pnghdr[36] = (mz_uint8) *pLen_out;
- c = (mz_uint32) mz_crc32(MZ_CRC32_INIT, pnghdr + 12, 17);
- for (i = 0; i < 4; ++i, c <<= 8)
- ((mz_uint8 *) (pnghdr + 29))[i] = (mz_uint8) (c >> 24);
- memcpy(out_buf.m_pBuf, pnghdr, 41);
- }
- /* write footer (IDAT CRC-32, followed by IEND chunk) */
- if (!tdefl_output_buffer_putter(
- "\0\0\0\0\0\0\0\0\x49\x45\x4e\x44\xae\x42\x60\x82", 16,
- &out_buf)) {
- *pLen_out = 0;
- MZ_FREE(pComp);
- MZ_FREE(out_buf.m_pBuf);
- return NULL;
- }
- c = (mz_uint32) mz_crc32(MZ_CRC32_INIT, out_buf.m_pBuf + 41 - 4,
- *pLen_out + 4);
- for (i = 0; i < 4; ++i, c <<= 8)
- (out_buf.m_pBuf + out_buf.m_size - 16)[i] = (mz_uint8) (c >> 24);
- /* compute final size of file, grab compressed data buffer and
- * return */
- *pLen_out += 57;
- MZ_FREE(pComp);
- return out_buf.m_pBuf;
-}
-void *tdefl_write_image_to_png_file_in_memory(const void *pImage,
- int w, int h,
- int num_chans,
- size_t *pLen_out) {
- /* Level 6 corresponds to TDEFL_DEFAULT_MAX_PROBES or
- * MZ_DEFAULT_LEVEL (but we can't depend on MZ_DEFAULT_LEVEL being
- * available in case the zlib API's where #defined out) */
- return tdefl_write_image_to_png_file_in_memory_ex(
- pImage, w, h, num_chans, pLen_out, 6, MZ_FALSE);
-}
-
-# ifndef MINIZ_NO_MALLOC
-/* Allocate the tdefl_compressor and tinfl_decompressor structures in
- * C so that */
-/* non-C language bindings to tdefL_ and tinfl_ API don't need to
- * worry about */
-/* structure size and allocation mechanism. */
-tdefl_compressor *tdefl_compressor_alloc(void) {
- return (tdefl_compressor *) MZ_MALLOC(sizeof(tdefl_compressor));
-}
-
-void tdefl_compressor_free(tdefl_compressor *pComp) {
- MZ_FREE(pComp);
-}
-# endif
-
-# ifdef _MSC_VER
-# pragma warning(pop)
-# endif
-
-# ifdef __cplusplus
-}
-# endif
-
-#endif /*#ifndef MINIZ_NO_DEFLATE_APIS*/
diff --git a/source/kit/miniz/miniz_tdef.h b/source/kit/miniz/miniz_tdef.h
deleted file mode 100644
index f7adaa6..0000000
--- a/source/kit/miniz/miniz_tdef.h
+++ /dev/null
@@ -1,271 +0,0 @@
-#ifndef KIT_MINIZ_MINIZ_TDEF_H
-#define KIT_MINIZ_MINIZ_TDEF_H
-
-#include "miniz_common.h"
-
-#ifndef MINIZ_NO_DEFLATE_APIS
-
-# ifdef __cplusplus
-extern "C" {
-# endif
-/* ------------------- Low-level Compression API Definitions */
-
-/* Set TDEFL_LESS_MEMORY to 1 to use less memory (compression will be
- * slightly slower, and raw/dynamic blocks will be output more
- * frequently). */
-# define TDEFL_LESS_MEMORY 0
-
-/* tdefl_init() compression flags logically OR'd together (low 12 bits
- * contain the max. number of probes per dictionary search): */
-/* TDEFL_DEFAULT_MAX_PROBES: The compressor defaults to 128 dictionary
- * probes per dictionary search. 0=Huffman only, 1=Huffman+LZ
- * (fastest/crap compression), 4095=Huffman+LZ (slowest/best
- * compression). */
-enum {
- TDEFL_HUFFMAN_ONLY = 0,
- TDEFL_DEFAULT_MAX_PROBES = 128,
- TDEFL_MAX_PROBES_MASK = 0xFFF
-};
-
-/* TDEFL_WRITE_ZLIB_HEADER: If set, the compressor outputs a zlib
- * header before the deflate data, and the Adler-32 of the source data
- * at the end. Otherwise, you'll get raw deflate data. */
-/* TDEFL_COMPUTE_ADLER32: Always compute the adler-32 of the input
- * data (even when not writing zlib headers). */
-/* TDEFL_GREEDY_PARSING_FLAG: Set to use faster greedy parsing,
- * instead of more efficient lazy parsing. */
-/* TDEFL_NONDETERMINISTIC_PARSING_FLAG: Enable to decrease the
- * compressor's initialization time to the minimum, but the output may
- * vary from run to run given the same input (depending on the
- * contents of memory). */
-/* TDEFL_RLE_MATCHES: Only look for RLE matches (matches with a
- * distance of 1) */
-/* TDEFL_FILTER_MATCHES: Discards matches <= 5 chars if enabled. */
-/* TDEFL_FORCE_ALL_STATIC_BLOCKS: Disable usage of optimized Huffman
- * tables. */
-/* TDEFL_FORCE_ALL_RAW_BLOCKS: Only use raw (uncompressed) deflate
- * blocks. */
-/* The low 12 bits are reserved to control the max # of hash probes
- * per dictionary lookup (see TDEFL_MAX_PROBES_MASK). */
-enum {
- TDEFL_WRITE_ZLIB_HEADER = 0x01000,
- TDEFL_COMPUTE_ADLER32 = 0x02000,
- TDEFL_GREEDY_PARSING_FLAG = 0x04000,
- TDEFL_NONDETERMINISTIC_PARSING_FLAG = 0x08000,
- TDEFL_RLE_MATCHES = 0x10000,
- TDEFL_FILTER_MATCHES = 0x20000,
- TDEFL_FORCE_ALL_STATIC_BLOCKS = 0x40000,
- TDEFL_FORCE_ALL_RAW_BLOCKS = 0x80000
-};
-
-/* High level compression functions: */
-/* tdefl_compress_mem_to_heap() compresses a block in memory to a heap
- * block allocated via malloc(). */
-/* On entry: */
-/* pSrc_buf, src_buf_len: Pointer and size of source block to
- * compress. */
-/* flags: The max match finder probes (default is 128) logically OR'd
- * against the above flags. Higher probes are slower but improve
- * compression. */
-/* On return: */
-/* Function returns a pointer to the compressed data, or NULL on
- * failure. */
-/* *pOut_len will be set to the compressed data's size, which could
- * be larger than src_buf_len on uncompressible data. */
-/* The caller must free() the returned block when it's no longer
- * needed. */
-void *tdefl_compress_mem_to_heap(const void *pSrc_buf,
- size_t src_buf_len, size_t *pOut_len,
- int flags);
-
-/* tdefl_compress_mem_to_mem() compresses a block in memory to another
- * block in memory. */
-/* Returns 0 on failure. */
-size_t tdefl_compress_mem_to_mem(void *pOut_buf, size_t out_buf_len,
- const void *pSrc_buf,
- size_t src_buf_len, int flags);
-
-/* Compresses an image to a compressed PNG file in memory. */
-/* On entry: */
-/* pImage, w, h, and num_chans describe the image to compress.
- * num_chans may be 1, 2, 3, or 4. */
-/* The image pitch in bytes per scanline will be w*num_chans. The
- * leftmost pixel on the top scanline is stored first in memory. */
-/* level may range from [0,10], use MZ_NO_COMPRESSION, MZ_BEST_SPEED,
- * MZ_BEST_COMPRESSION, etc. or a decent default is MZ_DEFAULT_LEVEL
- */
-/* If flip is true, the image will be flipped on the Y axis (useful
- * for OpenGL apps). */
-/* On return: */
-/* Function returns a pointer to the compressed data, or NULL on
- * failure. */
-/* *pLen_out will be set to the size of the PNG image file. */
-/* The caller must mz_free() the returned heap block (which will
- * typically be larger than *pLen_out) when it's no longer needed. */
-void *tdefl_write_image_to_png_file_in_memory_ex(
- const void *pImage, int w, int h, int num_chans, size_t *pLen_out,
- mz_uint level, mz_bool flip);
-void *tdefl_write_image_to_png_file_in_memory(const void *pImage,
- int w, int h,
- int num_chans,
- size_t *pLen_out);
-
-/* Output stream interface. The compressor uses this interface to
- * write compressed data. It'll typically be called TDEFL_OUT_BUF_SIZE
- * at a time. */
-typedef mz_bool (*tdefl_put_buf_func_ptr)(const void *pBuf, int len,
- void *pUser);
-
-/* tdefl_compress_mem_to_output() compresses a block to an output
- * stream. The above helpers use this function internally. */
-mz_bool tdefl_compress_mem_to_output(
- const void *pBuf, size_t buf_len,
- tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user,
- int flags);
-
-enum {
- TDEFL_MAX_HUFF_TABLES = 3,
- TDEFL_MAX_HUFF_SYMBOLS_0 = 288,
- TDEFL_MAX_HUFF_SYMBOLS_1 = 32,
- TDEFL_MAX_HUFF_SYMBOLS_2 = 19,
- TDEFL_LZ_DICT_SIZE = 32768,
- TDEFL_LZ_DICT_SIZE_MASK = TDEFL_LZ_DICT_SIZE - 1,
- TDEFL_MIN_MATCH_LEN = 3,
- TDEFL_MAX_MATCH_LEN = 258
-};
-
-/* TDEFL_OUT_BUF_SIZE MUST be large enough to hold a single entire
- * compressed output block (using static/fixed Huffman codes). */
-# if TDEFL_LESS_MEMORY
-enum {
- TDEFL_LZ_CODE_BUF_SIZE = 24 * 1024,
- TDEFL_OUT_BUF_SIZE = (TDEFL_LZ_CODE_BUF_SIZE * 13) / 10,
- TDEFL_MAX_HUFF_SYMBOLS = 288,
- TDEFL_LZ_HASH_BITS = 12,
- TDEFL_LEVEL1_HASH_SIZE_MASK = 4095,
- TDEFL_LZ_HASH_SHIFT = (TDEFL_LZ_HASH_BITS + 2) / 3,
- TDEFL_LZ_HASH_SIZE = 1 << TDEFL_LZ_HASH_BITS
-};
-# else
-enum {
- TDEFL_LZ_CODE_BUF_SIZE = 64 * 1024,
- TDEFL_OUT_BUF_SIZE = (TDEFL_LZ_CODE_BUF_SIZE * 13) / 10,
- TDEFL_MAX_HUFF_SYMBOLS = 288,
- TDEFL_LZ_HASH_BITS = 15,
- TDEFL_LEVEL1_HASH_SIZE_MASK = 4095,
- TDEFL_LZ_HASH_SHIFT = (TDEFL_LZ_HASH_BITS + 2) / 3,
- TDEFL_LZ_HASH_SIZE = 1 << TDEFL_LZ_HASH_BITS
-};
-# endif
-
-/* The low-level tdefl functions below may be used directly if the
- * above helper functions aren't flexible enough. The low-level
- * functions don't make any heap allocations, unlike the above helper
- * functions. */
-typedef enum {
- TDEFL_STATUS_BAD_PARAM = -2,
- TDEFL_STATUS_PUT_BUF_FAILED = -1,
- TDEFL_STATUS_OKAY = 0,
- TDEFL_STATUS_DONE = 1
-} tdefl_status;
-
-/* Must map to MZ_NO_FLUSH, MZ_SYNC_FLUSH, etc. enums */
-typedef enum {
- TDEFL_NO_FLUSH = 0,
- TDEFL_SYNC_FLUSH = 2,
- TDEFL_FULL_FLUSH = 3,
- TDEFL_FINISH = 4
-} tdefl_flush;
-
-/* tdefl's compression state structure. */
-typedef struct {
- tdefl_put_buf_func_ptr m_pPut_buf_func;
- void *m_pPut_buf_user;
- mz_uint m_flags, m_max_probes[2];
- int m_greedy_parsing;
- mz_uint m_adler32, m_lookahead_pos, m_lookahead_size, m_dict_size;
- mz_uint8 *m_pLZ_code_buf, *m_pLZ_flags, *m_pOutput_buf,
- *m_pOutput_buf_end;
- mz_uint m_num_flags_left, m_total_lz_bytes, m_lz_code_buf_dict_pos,
- m_bits_in, m_bit_buffer;
- mz_uint m_saved_match_dist, m_saved_match_len, m_saved_lit,
- m_output_flush_ofs, m_output_flush_remaining, m_finished,
- m_block_index, m_wants_to_finish;
- tdefl_status m_prev_return_status;
- const void *m_pIn_buf;
- void *m_pOut_buf;
- size_t *m_pIn_buf_size, *m_pOut_buf_size;
- tdefl_flush m_flush;
- const mz_uint8 *m_pSrc;
- size_t m_src_buf_left, m_out_buf_ofs;
- mz_uint8 m_dict[TDEFL_LZ_DICT_SIZE + TDEFL_MAX_MATCH_LEN - 1];
- mz_uint16 m_huff_count[TDEFL_MAX_HUFF_TABLES]
- [TDEFL_MAX_HUFF_SYMBOLS];
- mz_uint16 m_huff_codes[TDEFL_MAX_HUFF_TABLES]
- [TDEFL_MAX_HUFF_SYMBOLS];
- mz_uint8 m_huff_code_sizes[TDEFL_MAX_HUFF_TABLES]
- [TDEFL_MAX_HUFF_SYMBOLS];
- mz_uint8 m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE];
- mz_uint16 m_next[TDEFL_LZ_DICT_SIZE];
- mz_uint16 m_hash[TDEFL_LZ_HASH_SIZE];
- mz_uint8 m_output_buf[TDEFL_OUT_BUF_SIZE];
-} tdefl_compressor;
-
-/* Initializes the compressor. */
-/* There is no corresponding deinit() function because the tdefl API's
- * do not dynamically allocate memory. */
-/* pBut_buf_func: If NULL, output data will be supplied to the
- * specified callback. In this case, the user should call the
- * tdefl_compress_buffer() API for compression. */
-/* If pBut_buf_func is NULL the user should always call the
- * tdefl_compress() API. */
-/* flags: See the above enums (TDEFL_HUFFMAN_ONLY,
- * TDEFL_WRITE_ZLIB_HEADER, etc.) */
-tdefl_status tdefl_init(tdefl_compressor *d,
- tdefl_put_buf_func_ptr pPut_buf_func,
- void *pPut_buf_user, int flags);
-
-/* Compresses a block of data, consuming as much of the specified
- * input buffer as possible, and writing as much compressed data to
- * the specified output buffer as possible. */
-tdefl_status tdefl_compress(tdefl_compressor *d, const void *pIn_buf,
- size_t *pIn_buf_size, void *pOut_buf,
- size_t *pOut_buf_size, tdefl_flush flush);
-
-/* tdefl_compress_buffer() is only usable when the tdefl_init() is
- * called with a non-NULL tdefl_put_buf_func_ptr. */
-/* tdefl_compress_buffer() always consumes the entire input buffer. */
-tdefl_status tdefl_compress_buffer(tdefl_compressor *d,
- const void *pIn_buf,
- size_t in_buf_size,
- tdefl_flush flush);
-
-tdefl_status tdefl_get_prev_return_status(tdefl_compressor *d);
-mz_uint32 tdefl_get_adler32(tdefl_compressor *d);
-
-/* Create tdefl_compress() flags given zlib-style compression
- * parameters. */
-/* level may range from [0,10] (where 10 is absolute max compression,
- * but may be much slower on some files) */
-/* window_bits may be -15 (raw deflate) or 15 (zlib) */
-/* strategy may be either MZ_DEFAULT_STRATEGY, MZ_FILTERED,
- * MZ_HUFFMAN_ONLY, MZ_RLE, or MZ_FIXED */
-mz_uint tdefl_create_comp_flags_from_zip_params(int level,
- int window_bits,
- int strategy);
-
-# ifndef MINIZ_NO_MALLOC
-/* Allocate the tdefl_compressor structure in C so that */
-/* non-C language bindings to tdefl_ API don't need to worry about */
-/* structure size and allocation mechanism. */
-tdefl_compressor *tdefl_compressor_alloc(void);
-void tdefl_compressor_free(tdefl_compressor *pComp);
-# endif
-
-# ifdef __cplusplus
-}
-# endif
-
-#endif /*#ifndef MINIZ_NO_DEFLATE_APIS*/
-
-#endif
diff --git a/source/kit/miniz/miniz_tinfl.c b/source/kit/miniz/miniz_tinfl.c
deleted file mode 100644
index c8843ad..0000000
--- a/source/kit/miniz/miniz_tinfl.c
+++ /dev/null
@@ -1,818 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2013-2014 RAD Game Tools and Valve Software
- * Copyright 2010-2014 Rich Geldreich and Tenacious Software LLC
- * All Rights Reserved.
- *
- * 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.
- *
- **************************************************************************/
-
-#include "miniz.h"
-
-#ifndef MINIZ_NO_INFLATE_APIS
-
-# ifdef __cplusplus
-extern "C" {
-# endif
-
-/* ------------------- Low-level Decompression (completely independent
- * from all compression API's) */
-
-# define TINFL_MEMCPY(d, s, l) memcpy(d, s, l)
-# define TINFL_MEMSET(p, c, l) memset(p, c, l)
-
-# define TINFL_CR_BEGIN \
- switch (r->m_state) { \
- case 0:
-# define TINFL_CR_RETURN(state_index, result) \
- do { \
- status = result; \
- r->m_state = state_index; \
- goto common_exit; \
- case state_index:; \
- } \
- MZ_MACRO_END
-# define TINFL_CR_RETURN_FOREVER(state_index, result) \
- do { \
- for (;;) { TINFL_CR_RETURN(state_index, result); } \
- } \
- MZ_MACRO_END
-# define TINFL_CR_FINISH }
-
-# define TINFL_GET_BYTE(state_index, c) \
- do { \
- while (pIn_buf_cur >= pIn_buf_end) { \
- TINFL_CR_RETURN( \
- state_index, \
- (decomp_flags & TINFL_FLAG_HAS_MORE_INPUT) \
- ? TINFL_STATUS_NEEDS_MORE_INPUT \
- : TINFL_STATUS_FAILED_CANNOT_MAKE_PROGRESS); \
- } \
- c = *pIn_buf_cur++; \
- } \
- MZ_MACRO_END
-
-# define TINFL_NEED_BITS(state_index, n) \
- do { \
- mz_uint c; \
- TINFL_GET_BYTE(state_index, c); \
- bit_buf |= (((tinfl_bit_buf_t) c) << num_bits); \
- num_bits += 8; \
- } while (num_bits < (mz_uint) (n))
-# define TINFL_SKIP_BITS(state_index, n) \
- do { \
- if (num_bits < (mz_uint) (n)) { \
- TINFL_NEED_BITS(state_index, n); \
- } \
- bit_buf >>= (n); \
- num_bits -= (n); \
- } \
- MZ_MACRO_END
-# define TINFL_GET_BITS(state_index, b, n) \
- do { \
- if (num_bits < (mz_uint) (n)) { \
- TINFL_NEED_BITS(state_index, n); \
- } \
- b = bit_buf & ((1 << (n)) - 1); \
- bit_buf >>= (n); \
- num_bits -= (n); \
- } \
- MZ_MACRO_END
-
-/* TINFL_HUFF_BITBUF_FILL() is only used rarely, when the number of
- * bytes remaining in the input buffer falls below 2. */
-/* It reads just enough bytes from the input stream that are needed to
- * decode the next Huffman code (and absolutely no more). It works by
- * trying to fully decode a */
-/* Huffman code by using whatever bits are currently present in the
- * bit buffer. If this fails, it reads another byte, and tries again
- * until it succeeds or until the */
-/* bit buffer contains >=15 bits (deflate's max. Huffman code size).
- */
-# define TINFL_HUFF_BITBUF_FILL(state_index, pLookUp, pTree) \
- do { \
- temp = pLookUp[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]; \
- if (temp >= 0) { \
- code_len = temp >> 9; \
- if ((code_len) && (num_bits >= code_len)) \
- break; \
- } else if (num_bits > TINFL_FAST_LOOKUP_BITS) { \
- code_len = TINFL_FAST_LOOKUP_BITS; \
- do { \
- temp = pTree[~temp + ((bit_buf >> code_len++) & 1)]; \
- } while ((temp < 0) && (num_bits >= (code_len + 1))); \
- if (temp >= 0) \
- break; \
- } \
- TINFL_GET_BYTE(state_index, c); \
- bit_buf |= (((tinfl_bit_buf_t) c) << num_bits); \
- num_bits += 8; \
- } while (num_bits < 15);
-
-/* TINFL_HUFF_DECODE() decodes the next Huffman coded symbol. It's
- * more complex than you would initially expect because the zlib API
- * expects the decompressor to never read */
-/* beyond the final byte of the deflate stream. (In other words, when
- * this macro wants to read another byte from the input, it REALLY
- * needs another byte in order to fully */
-/* decode the next Huffman code.) Handling this properly is
- * particularly important on raw deflate (non-zlib) streams, which
- * aren't followed by a byte aligned adler-32. */
-/* The slow path is only executed at the very end of the input buffer.
- */
-/* v1.16: The original macro handled the case at the very end of the
- * passed-in input buffer, but we also need to handle the case where
- * the user passes in 1+zillion bytes */
-/* following the deflate data and our non-conservative read-ahead path
- * won't kick in here on this code. This is much trickier. */
-# define TINFL_HUFF_DECODE(state_index, sym, pLookUp, pTree) \
- do { \
- int temp; \
- mz_uint code_len, c; \
- if (num_bits < 15) { \
- if ((pIn_buf_end - pIn_buf_cur) < 2) { \
- TINFL_HUFF_BITBUF_FILL(state_index, pLookUp, pTree); \
- } else { \
- bit_buf |= (((tinfl_bit_buf_t) pIn_buf_cur[0]) \
- << num_bits) | \
- (((tinfl_bit_buf_t) pIn_buf_cur[1]) \
- << (num_bits + 8)); \
- pIn_buf_cur += 2; \
- num_bits += 16; \
- } \
- } \
- if ((temp = \
- pLookUp[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]) >= \
- 0) \
- code_len = temp >> 9, temp &= 511; \
- else { \
- code_len = TINFL_FAST_LOOKUP_BITS; \
- do { \
- temp = pTree[~temp + ((bit_buf >> code_len++) & 1)]; \
- } while (temp < 0); \
- } \
- sym = temp; \
- bit_buf >>= code_len; \
- num_bits -= code_len; \
- } \
- MZ_MACRO_END
-
-static void tinfl_clear_tree(tinfl_decompressor *r) {
- if (r->m_type == 0)
- MZ_CLEAR_ARR(r->m_tree_0);
- else if (r->m_type == 1)
- MZ_CLEAR_ARR(r->m_tree_1);
- else
- MZ_CLEAR_ARR(r->m_tree_2);
-}
-
-tinfl_status tinfl_decompress(tinfl_decompressor *r,
- const mz_uint8 *pIn_buf_next,
- size_t *pIn_buf_size,
- mz_uint8 *pOut_buf_start,
- mz_uint8 *pOut_buf_next,
- size_t *pOut_buf_size,
- const mz_uint32 decomp_flags) {
- static const mz_uint16 s_length_base[31] = {
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15,
- 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83,
- 99, 115, 131, 163, 195, 227, 258, 0, 0
- };
- static const mz_uint8 s_length_extra[31] = { 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 2, 2, 2, 2,
- 3, 3, 3, 3, 4, 4, 4, 4,
- 5, 5, 5, 5, 0, 0, 0 };
- static const mz_uint16 s_dist_base[32] = {
- 1, 2, 3, 4, 5, 7, 9, 13,
- 17, 25, 33, 49, 65, 97, 129, 193,
- 257, 385, 513, 769, 1025, 1537, 2049, 3073,
- 4097, 6145, 8193, 12289, 16385, 24577, 0, 0
- };
- static const mz_uint8 s_dist_extra[32] = {
- 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6,
- 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13
- };
- static const mz_uint8 s_length_dezigzag[19] = {
- 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15
- };
- static const mz_uint16 s_min_table_sizes[3] = { 257, 1, 4 };
-
- mz_int16 *pTrees[3];
- mz_uint8 *pCode_sizes[3];
-
- tinfl_status status = TINFL_STATUS_FAILED;
- mz_uint32 num_bits, dist, counter, num_extra;
- tinfl_bit_buf_t bit_buf;
- const mz_uint8 *pIn_buf_cur = pIn_buf_next, *const pIn_buf_end =
- pIn_buf_next +
- *pIn_buf_size;
- mz_uint8 *pOut_buf_cur = pOut_buf_next, *const pOut_buf_end =
- pOut_buf_next
- ? pOut_buf_next +
- *pOut_buf_size
- : NULL;
- size_t out_buf_size_mask =
- (decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF)
- ? (size_t) -1
- : ((pOut_buf_next - pOut_buf_start) +
- *pOut_buf_size) -
- 1,
- dist_from_out_buf_start;
-
- /* Ensure the output buffer's size is a power of 2, unless the
- * output buffer is large enough to hold the entire output file (in
- * which case it doesn't matter). */
- if (((out_buf_size_mask + 1) & out_buf_size_mask) ||
- (pOut_buf_next < pOut_buf_start)) {
- *pIn_buf_size = *pOut_buf_size = 0;
- return TINFL_STATUS_BAD_PARAM;
- }
-
- pTrees[0] = r->m_tree_0;
- pTrees[1] = r->m_tree_1;
- pTrees[2] = r->m_tree_2;
- pCode_sizes[0] = r->m_code_size_0;
- pCode_sizes[1] = r->m_code_size_1;
- pCode_sizes[2] = r->m_code_size_2;
-
- num_bits = r->m_num_bits;
- bit_buf = r->m_bit_buf;
- dist = r->m_dist;
- counter = r->m_counter;
- num_extra = r->m_num_extra;
- dist_from_out_buf_start = r->m_dist_from_out_buf_start;
- TINFL_CR_BEGIN
-
- bit_buf = num_bits = dist = counter = num_extra = r->m_zhdr0 =
- r->m_zhdr1 = 0;
- r->m_z_adler32 = r->m_check_adler32 = 1;
- if (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) {
- TINFL_GET_BYTE(1, r->m_zhdr0);
- TINFL_GET_BYTE(2, r->m_zhdr1);
- counter = (((r->m_zhdr0 * 256 + r->m_zhdr1) % 31 != 0) ||
- (r->m_zhdr1 & 32) || ((r->m_zhdr0 & 15) != 8));
- if (!(decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF))
- counter |= (((1U << (8U + (r->m_zhdr0 >> 4))) > 32768U) ||
- ((out_buf_size_mask + 1) <
- (size_t) ((size_t) 1
- << (8U + (r->m_zhdr0 >> 4)))));
- if (counter) {
- TINFL_CR_RETURN_FOREVER(36, TINFL_STATUS_FAILED);
- }
- }
-
- do {
- TINFL_GET_BITS(3, r->m_final, 3);
- r->m_type = r->m_final >> 1;
- if (r->m_type == 0) {
- TINFL_SKIP_BITS(5, num_bits & 7);
- for (counter = 0; counter < 4; ++counter) {
- if (num_bits)
- TINFL_GET_BITS(6, r->m_raw_header[counter], 8);
- else
- TINFL_GET_BYTE(7, r->m_raw_header[counter]);
- }
- if ((counter = (r->m_raw_header[0] |
- (r->m_raw_header[1] << 8))) !=
- (mz_uint) (0xFFFF ^ (r->m_raw_header[2] |
- (r->m_raw_header[3] << 8)))) {
- TINFL_CR_RETURN_FOREVER(39, TINFL_STATUS_FAILED);
- }
- while ((counter) && (num_bits)) {
- TINFL_GET_BITS(51, dist, 8);
- while (pOut_buf_cur >= pOut_buf_end) {
- TINFL_CR_RETURN(52, TINFL_STATUS_HAS_MORE_OUTPUT);
- }
- *pOut_buf_cur++ = (mz_uint8) dist;
- counter--;
- }
- while (counter) {
- size_t n;
- while (pOut_buf_cur >= pOut_buf_end) {
- TINFL_CR_RETURN(9, TINFL_STATUS_HAS_MORE_OUTPUT);
- }
- while (pIn_buf_cur >= pIn_buf_end) {
- TINFL_CR_RETURN(
- 38, (decomp_flags & TINFL_FLAG_HAS_MORE_INPUT)
- ? TINFL_STATUS_NEEDS_MORE_INPUT
- : TINFL_STATUS_FAILED_CANNOT_MAKE_PROGRESS);
- }
- n = MZ_MIN(MZ_MIN((size_t) (pOut_buf_end - pOut_buf_cur),
- (size_t) (pIn_buf_end - pIn_buf_cur)),
- counter);
- TINFL_MEMCPY(pOut_buf_cur, pIn_buf_cur, n);
- pIn_buf_cur += n;
- pOut_buf_cur += n;
- counter -= (mz_uint) n;
- }
- } else if (r->m_type == 3) {
- TINFL_CR_RETURN_FOREVER(10, TINFL_STATUS_FAILED);
- } else {
- if (r->m_type == 1) {
- mz_uint8 *p = r->m_code_size_0;
- mz_uint i;
- r->m_table_sizes[0] = 288;
- r->m_table_sizes[1] = 32;
- TINFL_MEMSET(r->m_code_size_1, 5, 32);
- for (i = 0; i <= 143; ++i) *p++ = 8;
- for (; i <= 255; ++i) *p++ = 9;
- for (; i <= 279; ++i) *p++ = 7;
- for (; i <= 287; ++i) *p++ = 8;
- } else {
- for (counter = 0; counter < 3; counter++) {
- TINFL_GET_BITS(11, r->m_table_sizes[counter],
- "\05\05\04"[counter]);
- r->m_table_sizes[counter] += s_min_table_sizes[counter];
- }
- MZ_CLEAR_ARR(r->m_code_size_2);
- for (counter = 0; counter < r->m_table_sizes[2]; counter++) {
- mz_uint s;
- TINFL_GET_BITS(14, s, 3);
- r->m_code_size_2[s_length_dezigzag[counter]] = (mz_uint8) s;
- }
- r->m_table_sizes[2] = 19;
- }
- for (; (int) r->m_type >= 0; r->m_type--) {
- int tree_next, tree_cur;
- mz_int16 *pLookUp;
- mz_int16 *pTree;
- mz_uint8 *pCode_size;
- mz_uint i, j, used_syms, total, sym_index, next_code[17],
- total_syms[16];
- pLookUp = r->m_look_up[r->m_type];
- pTree = pTrees[r->m_type];
- pCode_size = pCode_sizes[r->m_type];
- MZ_CLEAR_ARR(total_syms);
- TINFL_MEMSET(pLookUp, 0, sizeof(r->m_look_up[0]));
- tinfl_clear_tree(r);
- for (i = 0; i < r->m_table_sizes[r->m_type]; ++i)
- total_syms[pCode_size[i]]++;
- used_syms = 0, total = 0;
- next_code[0] = next_code[1] = 0;
- for (i = 1; i <= 15; ++i) {
- used_syms += total_syms[i];
- next_code[i + 1] = (total = ((total + total_syms[i]) << 1));
- }
- if ((65536 != total) && (used_syms > 1)) {
- TINFL_CR_RETURN_FOREVER(35, TINFL_STATUS_FAILED);
- }
- for (tree_next = -1, sym_index = 0;
- sym_index < r->m_table_sizes[r->m_type]; ++sym_index) {
- mz_uint rev_code = 0, l, cur_code,
- code_size = pCode_size[sym_index];
- if (!code_size)
- continue;
- cur_code = next_code[code_size]++;
- for (l = code_size; l > 0; l--, cur_code >>= 1)
- rev_code = (rev_code << 1) | (cur_code & 1);
- if (code_size <= TINFL_FAST_LOOKUP_BITS) {
- mz_int16 k = (mz_int16) ((code_size << 9) | sym_index);
- while (rev_code < TINFL_FAST_LOOKUP_SIZE) {
- pLookUp[rev_code] = k;
- rev_code += (1 << code_size);
- }
- continue;
- }
- if (0 ==
- (tree_cur = pLookUp[rev_code &
- (TINFL_FAST_LOOKUP_SIZE - 1)])) {
- pLookUp[rev_code & (TINFL_FAST_LOOKUP_SIZE - 1)] =
- (mz_int16) tree_next;
- tree_cur = tree_next;
- tree_next -= 2;
- }
- rev_code >>= (TINFL_FAST_LOOKUP_BITS - 1);
- for (j = code_size; j > (TINFL_FAST_LOOKUP_BITS + 1); j--) {
- tree_cur -= ((rev_code >>= 1) & 1);
- if (!pTree[-tree_cur - 1]) {
- pTree[-tree_cur - 1] = (mz_int16) tree_next;
- tree_cur = tree_next;
- tree_next -= 2;
- } else
- tree_cur = pTree[-tree_cur - 1];
- }
- tree_cur -= ((rev_code >>= 1) & 1);
- pTree[-tree_cur - 1] = (mz_int16) sym_index;
- }
- if (r->m_type == 2) {
- for (counter = 0; counter < (r->m_table_sizes[0] +
- r->m_table_sizes[1]);) {
- mz_uint s;
- TINFL_HUFF_DECODE(16, dist, r->m_look_up[2], r->m_tree_2);
- if (dist < 16) {
- r->m_len_codes[counter++] = (mz_uint8) dist;
- continue;
- }
- if ((dist == 16) && (!counter)) {
- TINFL_CR_RETURN_FOREVER(17, TINFL_STATUS_FAILED);
- }
- num_extra = "\02\03\07"[dist - 16];
- TINFL_GET_BITS(18, s, num_extra);
- s += "\03\03\013"[dist - 16];
- TINFL_MEMSET(
- r->m_len_codes + counter,
- (dist == 16) ? r->m_len_codes[counter - 1] : 0, s);
- counter += s;
- }
- if ((r->m_table_sizes[0] + r->m_table_sizes[1]) !=
- counter) {
- TINFL_CR_RETURN_FOREVER(21, TINFL_STATUS_FAILED);
- }
- TINFL_MEMCPY(r->m_code_size_0, r->m_len_codes,
- r->m_table_sizes[0]);
- TINFL_MEMCPY(r->m_code_size_1,
- r->m_len_codes + r->m_table_sizes[0],
- r->m_table_sizes[1]);
- }
- }
- for (;;) {
- mz_uint8 *pSrc;
- for (;;) {
- if (((pIn_buf_end - pIn_buf_cur) < 4) ||
- ((pOut_buf_end - pOut_buf_cur) < 2)) {
- TINFL_HUFF_DECODE(23, counter, r->m_look_up[0],
- r->m_tree_0);
- if (counter >= 256)
- break;
- while (pOut_buf_cur >= pOut_buf_end) {
- TINFL_CR_RETURN(24, TINFL_STATUS_HAS_MORE_OUTPUT);
- }
- *pOut_buf_cur++ = (mz_uint8) counter;
- } else {
- int sym2;
- mz_uint code_len;
-# if TINFL_USE_64BIT_BITBUF
- if (num_bits < 30) {
- bit_buf |=
- (((tinfl_bit_buf_t) MZ_READ_LE32(pIn_buf_cur))
- << num_bits);
- pIn_buf_cur += 4;
- num_bits += 32;
- }
-# else
- if (num_bits < 15) {
- bit_buf |=
- (((tinfl_bit_buf_t) MZ_READ_LE16(pIn_buf_cur))
- << num_bits);
- pIn_buf_cur += 2;
- num_bits += 16;
- }
-# endif
- if ((sym2 =
- r->m_look_up[0][bit_buf &
- (TINFL_FAST_LOOKUP_SIZE - 1)]) >=
- 0)
- code_len = sym2 >> 9;
- else {
- code_len = TINFL_FAST_LOOKUP_BITS;
- do {
- sym2 = r->m_tree_0[~sym2 +
- ((bit_buf >> code_len++) & 1)];
- } while (sym2 < 0);
- }
- counter = sym2;
- bit_buf >>= code_len;
- num_bits -= code_len;
- if (counter & 256)
- break;
-
-# if !TINFL_USE_64BIT_BITBUF
- if (num_bits < 15) {
- bit_buf |=
- (((tinfl_bit_buf_t) MZ_READ_LE16(pIn_buf_cur))
- << num_bits);
- pIn_buf_cur += 2;
- num_bits += 16;
- }
-# endif
- if ((sym2 =
- r->m_look_up[0][bit_buf &
- (TINFL_FAST_LOOKUP_SIZE - 1)]) >=
- 0)
- code_len = sym2 >> 9;
- else {
- code_len = TINFL_FAST_LOOKUP_BITS;
- do {
- sym2 = r->m_tree_0[~sym2 +
- ((bit_buf >> code_len++) & 1)];
- } while (sym2 < 0);
- }
- bit_buf >>= code_len;
- num_bits -= code_len;
-
- pOut_buf_cur[0] = (mz_uint8) counter;
- if (sym2 & 256) {
- pOut_buf_cur++;
- counter = sym2;
- break;
- }
- pOut_buf_cur[1] = (mz_uint8) sym2;
- pOut_buf_cur += 2;
- }
- }
- if ((counter &= 511) == 256)
- break;
-
- num_extra = s_length_extra[counter - 257];
- counter = s_length_base[counter - 257];
- if (num_extra) {
- mz_uint extra_bits;
- TINFL_GET_BITS(25, extra_bits, num_extra);
- counter += extra_bits;
- }
-
- TINFL_HUFF_DECODE(26, dist, r->m_look_up[1], r->m_tree_1);
- num_extra = s_dist_extra[dist];
- dist = s_dist_base[dist];
- if (num_extra) {
- mz_uint extra_bits;
- TINFL_GET_BITS(27, extra_bits, num_extra);
- dist += extra_bits;
- }
-
- dist_from_out_buf_start = pOut_buf_cur - pOut_buf_start;
- if ((dist == 0 || dist > dist_from_out_buf_start ||
- dist_from_out_buf_start == 0) &&
- (decomp_flags &
- TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF)) {
- TINFL_CR_RETURN_FOREVER(37, TINFL_STATUS_FAILED);
- }
-
- pSrc = pOut_buf_start +
- ((dist_from_out_buf_start - dist) & out_buf_size_mask);
-
- if ((MZ_MAX(pOut_buf_cur, pSrc) + counter) > pOut_buf_end) {
- while (counter--) {
- while (pOut_buf_cur >= pOut_buf_end) {
- TINFL_CR_RETURN(53, TINFL_STATUS_HAS_MORE_OUTPUT);
- }
- *pOut_buf_cur++ =
- pOut_buf_start[(dist_from_out_buf_start++ - dist) &
- out_buf_size_mask];
- }
- continue;
- }
-# if MINIZ_USE_UNALIGNED_LOADS_AND_STORES
- else if ((counter >= 9) && (counter <= dist)) {
- const mz_uint8 *pSrc_end = pSrc + (counter & ~7);
- do {
-# ifdef MINIZ_UNALIGNED_USE_MEMCPY
- memcpy(pOut_buf_cur, pSrc, sizeof(mz_uint32) * 2);
-# else
- ((mz_uint32 *) pOut_buf_cur)[0] = ((
- const mz_uint32 *) pSrc)[0];
- ((mz_uint32 *) pOut_buf_cur)[1] = ((
- const mz_uint32 *) pSrc)[1];
-# endif
- pOut_buf_cur += 8;
- } while ((pSrc += 8) < pSrc_end);
- if ((counter &= 7) < 3) {
- if (counter) {
- pOut_buf_cur[0] = pSrc[0];
- if (counter > 1)
- pOut_buf_cur[1] = pSrc[1];
- pOut_buf_cur += counter;
- }
- continue;
- }
- }
-# endif
- while (counter > 2) {
- pOut_buf_cur[0] = pSrc[0];
- pOut_buf_cur[1] = pSrc[1];
- pOut_buf_cur[2] = pSrc[2];
- pOut_buf_cur += 3;
- pSrc += 3;
- counter -= 3;
- }
- if (counter > 0) {
- pOut_buf_cur[0] = pSrc[0];
- if (counter > 1)
- pOut_buf_cur[1] = pSrc[1];
- pOut_buf_cur += counter;
- }
- }
- }
- } while (!(r->m_final & 1));
-
- /* Ensure byte alignment and put back any bytes from the bitbuf if
- * we've looked ahead too far on gzip, or other Deflate streams
- * followed by arbitrary data. */
- /* I'm being super conservative here. A number of simplifications
- * can be made to the byte alignment part, and the Adler32 check
- * shouldn't ever need to worry about reading from the bitbuf now.
- */
- TINFL_SKIP_BITS(32, num_bits & 7);
- while ((pIn_buf_cur > pIn_buf_next) && (num_bits >= 8)) {
- --pIn_buf_cur;
- num_bits -= 8;
- }
- bit_buf &= ~(~(tinfl_bit_buf_t) 0 << num_bits);
- MZ_ASSERT(!num_bits); /* if this assert fires then we've read beyond
- the end of non-deflate/zlib streams with
- following data (such as gzip streams). */
-
- if (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) {
- for (counter = 0; counter < 4; ++counter) {
- mz_uint s;
- if (num_bits)
- TINFL_GET_BITS(41, s, 8);
- else
- TINFL_GET_BYTE(42, s);
- r->m_z_adler32 = (r->m_z_adler32 << 8) | s;
- }
- }
- TINFL_CR_RETURN_FOREVER(34, TINFL_STATUS_DONE);
-
- TINFL_CR_FINISH
-
-common_exit:
- /* As long as we aren't telling the caller that we NEED more input
- * to make forward progress: */
- /* Put back any bytes from the bitbuf in case we've looked ahead too
- * far on gzip, or other Deflate streams followed by arbitrary data.
- */
- /* We need to be very careful here to NOT push back any bytes we
- * definitely know we need to make forward progress, though, or
- * we'll lock the caller up into an inf loop. */
- if ((status != TINFL_STATUS_NEEDS_MORE_INPUT) &&
- (status != TINFL_STATUS_FAILED_CANNOT_MAKE_PROGRESS)) {
- while ((pIn_buf_cur > pIn_buf_next) && (num_bits >= 8)) {
- --pIn_buf_cur;
- num_bits -= 8;
- }
- }
- r->m_num_bits = num_bits;
- r->m_bit_buf = bit_buf & ~(~(tinfl_bit_buf_t) 0 << num_bits);
- r->m_dist = dist;
- r->m_counter = counter;
- r->m_num_extra = num_extra;
- r->m_dist_from_out_buf_start = dist_from_out_buf_start;
- *pIn_buf_size = pIn_buf_cur - pIn_buf_next;
- *pOut_buf_size = pOut_buf_cur - pOut_buf_next;
- if ((decomp_flags &
- (TINFL_FLAG_PARSE_ZLIB_HEADER | TINFL_FLAG_COMPUTE_ADLER32)) &&
- (status >= 0)) {
- const mz_uint8 *ptr = pOut_buf_next;
- size_t buf_len = *pOut_buf_size;
- mz_uint32 i, s1 = r->m_check_adler32 & 0xffff,
- s2 = r->m_check_adler32 >> 16;
- size_t block_len = buf_len % 5552;
- while (buf_len) {
- for (i = 0; i + 7 < block_len; i += 8, ptr += 8) {
- s1 += ptr[0], s2 += s1;
- s1 += ptr[1], s2 += s1;
- s1 += ptr[2], s2 += s1;
- s1 += ptr[3], s2 += s1;
- s1 += ptr[4], s2 += s1;
- s1 += ptr[5], s2 += s1;
- s1 += ptr[6], s2 += s1;
- s1 += ptr[7], s2 += s1;
- }
- for (; i < block_len; ++i) s1 += *ptr++, s2 += s1;
- s1 %= 65521U, s2 %= 65521U;
- buf_len -= block_len;
- block_len = 5552;
- }
- r->m_check_adler32 = (s2 << 16) + s1;
- if ((status == TINFL_STATUS_DONE) &&
- (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) &&
- (r->m_check_adler32 != r->m_z_adler32))
- status = TINFL_STATUS_ADLER32_MISMATCH;
- }
- return status;
-}
-
-/* Higher level helper functions. */
-void *tinfl_decompress_mem_to_heap(const void *pSrc_buf,
- size_t src_buf_len,
- size_t *pOut_len, int flags) {
- tinfl_decompressor decomp;
- void *pBuf = NULL, *pNew_buf;
- size_t src_buf_ofs = 0, out_buf_capacity = 0;
- *pOut_len = 0;
- tinfl_init(&decomp);
- for (;;) {
- size_t src_buf_size = src_buf_len - src_buf_ofs,
- dst_buf_size = out_buf_capacity - *pOut_len,
- new_out_buf_capacity;
- tinfl_status status = tinfl_decompress(
- &decomp, (const mz_uint8 *) pSrc_buf + src_buf_ofs,
- &src_buf_size, (mz_uint8 *) pBuf,
- pBuf ? (mz_uint8 *) pBuf + *pOut_len : NULL, &dst_buf_size,
- (flags & ~TINFL_FLAG_HAS_MORE_INPUT) |
- TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF);
- if ((status < 0) || (status == TINFL_STATUS_NEEDS_MORE_INPUT)) {
- MZ_FREE(pBuf);
- *pOut_len = 0;
- return NULL;
- }
- src_buf_ofs += src_buf_size;
- *pOut_len += dst_buf_size;
- if (status == TINFL_STATUS_DONE)
- break;
- new_out_buf_capacity = out_buf_capacity * 2;
- if (new_out_buf_capacity < 128)
- new_out_buf_capacity = 128;
- pNew_buf = MZ_REALLOC(pBuf, new_out_buf_capacity);
- if (!pNew_buf) {
- MZ_FREE(pBuf);
- *pOut_len = 0;
- return NULL;
- }
- pBuf = pNew_buf;
- out_buf_capacity = new_out_buf_capacity;
- }
- return pBuf;
-}
-
-size_t tinfl_decompress_mem_to_mem(void *pOut_buf, size_t out_buf_len,
- const void *pSrc_buf,
- size_t src_buf_len, int flags) {
- tinfl_decompressor decomp;
- tinfl_status status;
- tinfl_init(&decomp);
- status = tinfl_decompress(
- &decomp, (const mz_uint8 *) pSrc_buf, &src_buf_len,
- (mz_uint8 *) pOut_buf, (mz_uint8 *) pOut_buf, &out_buf_len,
- (flags & ~TINFL_FLAG_HAS_MORE_INPUT) |
- TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF);
- return (status != TINFL_STATUS_DONE)
- ? TINFL_DECOMPRESS_MEM_TO_MEM_FAILED
- : out_buf_len;
-}
-
-int tinfl_decompress_mem_to_callback(
- const void *pIn_buf, size_t *pIn_buf_size,
- tinfl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user,
- int flags) {
- int result = 0;
- tinfl_decompressor decomp;
- mz_uint8 *pDict = (mz_uint8 *) MZ_MALLOC(TINFL_LZ_DICT_SIZE);
- size_t in_buf_ofs = 0, dict_ofs = 0;
- if (!pDict)
- return TINFL_STATUS_FAILED;
- memset(pDict, 0, TINFL_LZ_DICT_SIZE);
- tinfl_init(&decomp);
- for (;;) {
- size_t in_buf_size = *pIn_buf_size - in_buf_ofs,
- dst_buf_size = TINFL_LZ_DICT_SIZE - dict_ofs;
- tinfl_status status = tinfl_decompress(
- &decomp, (const mz_uint8 *) pIn_buf + in_buf_ofs,
- &in_buf_size, pDict, pDict + dict_ofs, &dst_buf_size,
- (flags & ~(TINFL_FLAG_HAS_MORE_INPUT |
- TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF)));
- in_buf_ofs += in_buf_size;
- if ((dst_buf_size) &&
- (!(*pPut_buf_func)(pDict + dict_ofs, (int) dst_buf_size,
- pPut_buf_user)))
- break;
- if (status != TINFL_STATUS_HAS_MORE_OUTPUT) {
- result = (status == TINFL_STATUS_DONE);
- break;
- }
- dict_ofs = (dict_ofs + dst_buf_size) & (TINFL_LZ_DICT_SIZE - 1);
- }
- MZ_FREE(pDict);
- *pIn_buf_size = in_buf_ofs;
- return result;
-}
-
-# ifndef MINIZ_NO_MALLOC
-tinfl_decompressor *tinfl_decompressor_alloc(void) {
- tinfl_decompressor *pDecomp = (tinfl_decompressor *) MZ_MALLOC(
- sizeof(tinfl_decompressor));
- if (pDecomp)
- tinfl_init(pDecomp);
- return pDecomp;
-}
-
-void tinfl_decompressor_free(tinfl_decompressor *pDecomp) {
- MZ_FREE(pDecomp);
-}
-# endif
-
-# ifdef __cplusplus
-}
-# endif
-
-#endif /*#ifndef MINIZ_NO_INFLATE_APIS*/
diff --git a/source/kit/miniz/miniz_tinfl.h b/source/kit/miniz/miniz_tinfl.h
deleted file mode 100644
index 14da110..0000000
--- a/source/kit/miniz/miniz_tinfl.h
+++ /dev/null
@@ -1,218 +0,0 @@
-#ifndef KIT_MINIZ_MINIZ_TINFL_H
-#define KIT_MINIZ_MINIZ_TINFL_H
-
-#include "miniz_common.h"
-/* ------------------- Low-level Decompression API Definitions */
-
-#ifndef MINIZ_NO_INFLATE_APIS
-
-# ifdef __cplusplus
-extern "C" {
-# endif
-/* Decompression flags used by tinfl_decompress(). */
-/* TINFL_FLAG_PARSE_ZLIB_HEADER: If set, the input has a valid zlib
- * header and ends with an adler32 checksum (it's a valid zlib
- * stream). Otherwise, the input is a raw deflate stream. */
-/* TINFL_FLAG_HAS_MORE_INPUT: If set, there are more input bytes
- * available beyond the end of the supplied input buffer. If clear,
- * the input buffer contains all remaining input. */
-/* TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF: If set, the output buffer
- * is large enough to hold the entire decompressed stream. If clear,
- * the output buffer is at least the size of the dictionary (typically
- * 32KB). */
-/* TINFL_FLAG_COMPUTE_ADLER32: Force adler-32 checksum computation of
- * the decompressed bytes. */
-enum {
- TINFL_FLAG_PARSE_ZLIB_HEADER = 1,
- TINFL_FLAG_HAS_MORE_INPUT = 2,
- TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF = 4,
- TINFL_FLAG_COMPUTE_ADLER32 = 8
-};
-
-/* High level decompression functions: */
-/* tinfl_decompress_mem_to_heap() decompresses a block in memory to a
- * heap block allocated via malloc(). */
-/* On entry: */
-/* pSrc_buf, src_buf_len: Pointer and size of the Deflate or zlib
- * source data to decompress. */
-/* On return: */
-/* Function returns a pointer to the decompressed data, or NULL on
- * failure. */
-/* *pOut_len will be set to the decompressed data's size, which could
- * be larger than src_buf_len on uncompressible data. */
-/* The caller must call mz_free() on the returned block when it's no
- * longer needed. */
-void *tinfl_decompress_mem_to_heap(const void *pSrc_buf,
- size_t src_buf_len,
- size_t *pOut_len, int flags);
-
-/* tinfl_decompress_mem_to_mem() decompresses a block in memory to
- * another block in memory. */
-/* Returns TINFL_DECOMPRESS_MEM_TO_MEM_FAILED on failure, or the
- * number of bytes written on success. */
-# define TINFL_DECOMPRESS_MEM_TO_MEM_FAILED ((size_t) (-1))
-size_t tinfl_decompress_mem_to_mem(void *pOut_buf, size_t out_buf_len,
- const void *pSrc_buf,
- size_t src_buf_len, int flags);
-
-/* tinfl_decompress_mem_to_callback() decompresses a block in memory
- * to an internal 32KB buffer, and a user provided callback function
- * will be called to flush the buffer. */
-/* Returns 1 on success or 0 on failure. */
-typedef int (*tinfl_put_buf_func_ptr)(const void *pBuf, int len,
- void *pUser);
-int tinfl_decompress_mem_to_callback(
- const void *pIn_buf, size_t *pIn_buf_size,
- tinfl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user,
- int flags);
-
-struct tinfl_decompressor_tag;
-typedef struct tinfl_decompressor_tag tinfl_decompressor;
-
-# ifndef MINIZ_NO_MALLOC
-/* Allocate the tinfl_decompressor structure in C so that */
-/* non-C language bindings to tinfl_ API don't need to worry about */
-/* structure size and allocation mechanism. */
-tinfl_decompressor *tinfl_decompressor_alloc(void);
-void tinfl_decompressor_free(tinfl_decompressor *pDecomp);
-# endif
-
-/* Max size of LZ dictionary. */
-# define TINFL_LZ_DICT_SIZE 32768
-
-/* Return status. */
-typedef enum {
- /* This flags indicates the inflator needs 1 or more input bytes to
- make forward progress, but the caller is indicating that no more
- are available. The compressed data */
- /* is probably corrupted. If you call the inflator again with more
- bytes it'll try to continue processing the input but this is a
- BAD sign (either the data is corrupted or you called it
- incorrectly). */
- /* If you call it again with no input you'll just get
- TINFL_STATUS_FAILED_CANNOT_MAKE_PROGRESS again. */
- TINFL_STATUS_FAILED_CANNOT_MAKE_PROGRESS = -4,
-
- /* This flag indicates that one or more of the input parameters was
- obviously bogus. (You can try calling it again, but if you get
- this error the calling code is wrong.) */
- TINFL_STATUS_BAD_PARAM = -3,
-
- /* This flags indicate the inflator is finished but the adler32
- check of the uncompressed data didn't match. If you call it again
- it'll return TINFL_STATUS_DONE. */
- TINFL_STATUS_ADLER32_MISMATCH = -2,
-
- /* This flags indicate the inflator has somehow failed (bad code,
- corrupted input, etc.). If you call it again without resetting
- via tinfl_init() it it'll just keep on returning the same status
- failure code. */
- TINFL_STATUS_FAILED = -1,
-
- /* Any status code less than TINFL_STATUS_DONE must indicate a
- failure. */
-
- /* This flag indicates the inflator has returned every byte of
- uncompressed data that it can, has consumed every byte that it
- needed, has successfully reached the end of the deflate stream,
- and */
- /* if zlib headers and adler32 checking enabled that it has
- successfully checked the uncompressed data's adler32. If you call
- it again you'll just get TINFL_STATUS_DONE over and over again.
- */
- TINFL_STATUS_DONE = 0,
-
- /* This flag indicates the inflator MUST have more input data (even
- 1 byte) before it can make any more forward progress, or you need
- to clear the TINFL_FLAG_HAS_MORE_INPUT */
- /* flag on the next call if you don't have any more source data. If
- the source data was somehow corrupted it's also possible (but
- unlikely) for the inflator to keep on demanding input to */
- /* proceed, so be sure to properly set the TINFL_FLAG_HAS_MORE_INPUT
- flag. */
- TINFL_STATUS_NEEDS_MORE_INPUT = 1,
-
- /* This flag indicates the inflator definitely has 1 or more bytes
- of uncompressed data available, but it cannot write this data
- into the output buffer. */
- /* Note if the source compressed data was corrupted it's possible
- for the inflator to return a lot of uncompressed data to the
- caller. I've been assuming you know how much uncompressed data to
- expect */
- /* (either exact or worst case) and will stop calling the inflator
- and fail after receiving too much. In pure streaming scenarios
- where you have no idea how many bytes to expect this may not be
- possible */
- /* so I may need to add some code to address this. */
- TINFL_STATUS_HAS_MORE_OUTPUT = 2
-} tinfl_status;
-
-/* Initializes the decompressor to its initial state. */
-# define tinfl_init(r) \
- do { (r)->m_state = 0; } \
- MZ_MACRO_END
-# define tinfl_get_adler32(r) (r)->m_check_adler32
-
-/* Main low-level decompressor coroutine function. This is the only
- * function actually needed for decompression. All the other functions
- * are just high-level helpers for improved usability. */
-/* This is a universal API, i.e. it can be used as a building block to
- * build any desired higher level decompression API. In the limit
- * case, it can be called once per every byte input or output. */
-tinfl_status tinfl_decompress(tinfl_decompressor *r,
- const mz_uint8 *pIn_buf_next,
- size_t *pIn_buf_size,
- mz_uint8 *pOut_buf_start,
- mz_uint8 *pOut_buf_next,
- size_t *pOut_buf_size,
- const mz_uint32 decomp_flags);
-
-/* Internal/private bits follow. */
-enum {
- TINFL_MAX_HUFF_TABLES = 3,
- TINFL_MAX_HUFF_SYMBOLS_0 = 288,
- TINFL_MAX_HUFF_SYMBOLS_1 = 32,
- TINFL_MAX_HUFF_SYMBOLS_2 = 19,
- TINFL_FAST_LOOKUP_BITS = 10,
- TINFL_FAST_LOOKUP_SIZE = 1 << TINFL_FAST_LOOKUP_BITS
-};
-
-# if MINIZ_HAS_64BIT_REGISTERS
-# define TINFL_USE_64BIT_BITBUF 1
-# else
-# define TINFL_USE_64BIT_BITBUF 0
-# endif
-
-# if TINFL_USE_64BIT_BITBUF
-typedef mz_uint64 tinfl_bit_buf_t;
-# define TINFL_BITBUF_SIZE (64)
-# else
-typedef mz_uint32 tinfl_bit_buf_t;
-# define TINFL_BITBUF_SIZE (32)
-# endif
-
-struct tinfl_decompressor_tag {
- mz_uint32 m_state, m_num_bits, m_zhdr0, m_zhdr1, m_z_adler32,
- m_final, m_type, m_check_adler32, m_dist, m_counter,
- m_num_extra, m_table_sizes[TINFL_MAX_HUFF_TABLES];
- tinfl_bit_buf_t m_bit_buf;
- size_t m_dist_from_out_buf_start;
- mz_int16 m_look_up[TINFL_MAX_HUFF_TABLES][TINFL_FAST_LOOKUP_SIZE];
- mz_int16 m_tree_0[TINFL_MAX_HUFF_SYMBOLS_0 * 2];
- mz_int16 m_tree_1[TINFL_MAX_HUFF_SYMBOLS_1 * 2];
- mz_int16 m_tree_2[TINFL_MAX_HUFF_SYMBOLS_2 * 2];
- mz_uint8 m_code_size_0[TINFL_MAX_HUFF_SYMBOLS_0];
- mz_uint8 m_code_size_1[TINFL_MAX_HUFF_SYMBOLS_1];
- mz_uint8 m_code_size_2[TINFL_MAX_HUFF_SYMBOLS_2];
- mz_uint8 m_raw_header[4],
- m_len_codes[TINFL_MAX_HUFF_SYMBOLS_0 +
- TINFL_MAX_HUFF_SYMBOLS_1 + 137];
-};
-
-# ifdef __cplusplus
-}
-# endif
-
-#endif /*#ifndef MINIZ_NO_INFLATE_APIS*/
-
-#endif
diff --git a/source/kit/miniz/miniz_zip.c b/source/kit/miniz/miniz_zip.c
deleted file mode 100644
index 0af4bf0..0000000
--- a/source/kit/miniz/miniz_zip.c
+++ /dev/null
@@ -1,5473 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2013-2014 RAD Game Tools and Valve Software
- * Copyright 2010-2014 Rich Geldreich and Tenacious Software LLC
- * Copyright 2016 Martin Raiber
- * All Rights Reserved.
- *
- * 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.
- *
- **************************************************************************/
-#include "miniz.h"
-
-#ifndef MINIZ_NO_ARCHIVE_APIS
-
-# ifdef __cplusplus
-extern "C" {
-# endif
-
-/* ------------------- .ZIP archive reading */
-
-# ifdef MINIZ_NO_STDIO
-# define MZ_FILE void *
-# else
-# include <stdio.h>
-# include <sys/stat.h>
-
-# if defined(_MSC_VER) || defined(__MINGW64__) || \
- defined(__MINGW32__)
-
-# ifndef WIN32_LEAN_AND_MEAN
-# define WIN32_LEAN_AND_MEAN
-# endif
-# ifndef __cplusplus
-# define MICROSOFT_WINDOWS_WINBASE_H_DEFINE_INTERLOCKED_CPLUSPLUS_OVERLOADS \
- 0
-# endif
-# ifndef NOMINMAX
-# define NOMINMAX
-# endif
-# include <windows.h>
-
-static WCHAR *mz_utf8z_to_widechar(const char *str) {
- int reqChars = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);
- WCHAR *wStr = (WCHAR *) malloc(reqChars * sizeof(WCHAR));
- MultiByteToWideChar(CP_UTF8, 0, str, -1, wStr, reqChars);
- return wStr;
-}
-
-static FILE *mz_fopen(const char *pFilename, const char *pMode) {
- WCHAR *wFilename = mz_utf8z_to_widechar(pFilename);
- WCHAR *wMode = mz_utf8z_to_widechar(pMode);
- FILE *pFile = NULL;
- errno_t err = _wfopen_s(&pFile, wFilename, wMode);
- free(wFilename);
- free(wMode);
- return err ? NULL : pFile;
-}
-
-static FILE *mz_freopen(const char *pPath, const char *pMode,
- FILE *pStream) {
- WCHAR *wPath = mz_utf8z_to_widechar(pPath);
- WCHAR *wMode = mz_utf8z_to_widechar(pMode);
- FILE *pFile = NULL;
- errno_t err = _wfreopen_s(&pFile, wPath, wMode, pStream);
- free(wPath);
- free(wMode);
- return err ? NULL : pFile;
-}
-
-# if defined(__MINGW32__)
-static int mz_stat(const char *path, struct _stat *buffer) {
- WCHAR *wPath = mz_utf8z_to_widechar(path);
- int res = _wstat(wPath, buffer);
- free(wPath);
- return res;
-}
-# else
-static int mz_stat64(const char *path, struct __stat64 *buffer) {
- WCHAR *wPath = mz_utf8z_to_widechar(path);
- int res = _wstat64(wPath, buffer);
- free(wPath);
- return res;
-}
-# endif
-
-# ifndef MINIZ_NO_TIME
-# include <sys/utime.h>
-# endif
-# define MZ_FOPEN mz_fopen
-# define MZ_FCLOSE fclose
-# define MZ_FREAD fread
-# define MZ_FWRITE fwrite
-# define MZ_FTELL64 _ftelli64
-# define MZ_FSEEK64 _fseeki64
-# if defined(__MINGW32__)
-# define MZ_FILE_STAT_STRUCT _stat
-# define MZ_FILE_STAT mz_stat
-# else
-# define MZ_FILE_STAT_STRUCT _stat64
-# define MZ_FILE_STAT mz_stat64
-# endif
-# define MZ_FFLUSH fflush
-# define MZ_FREOPEN mz_freopen
-# define MZ_DELETE_FILE remove
-
-# elif defined(__WATCOMC__)
-# ifndef MINIZ_NO_TIME
-# include <sys/utime.h>
-# endif
-# define MZ_FOPEN(f, m) fopen(f, m)
-# define MZ_FCLOSE fclose
-# define MZ_FREAD fread
-# define MZ_FWRITE fwrite
-# define MZ_FTELL64 _ftelli64
-# define MZ_FSEEK64 _fseeki64
-# define MZ_FILE_STAT_STRUCT stat
-# define MZ_FILE_STAT stat
-# define MZ_FFLUSH fflush
-# define MZ_FREOPEN(f, m, s) freopen(f, m, s)
-# define MZ_DELETE_FILE remove
-
-# elif defined(__TINYC__)
-# ifndef MINIZ_NO_TIME
-# include <sys/utime.h>
-# endif
-# define MZ_FOPEN(f, m) fopen(f, m)
-# define MZ_FCLOSE fclose
-# define MZ_FREAD fread
-# define MZ_FWRITE fwrite
-# define MZ_FTELL64 ftell
-# define MZ_FSEEK64 fseek
-# define MZ_FILE_STAT_STRUCT stat
-# define MZ_FILE_STAT stat
-# define MZ_FFLUSH fflush
-# define MZ_FREOPEN(f, m, s) freopen(f, m, s)
-# define MZ_DELETE_FILE remove
-
-# elif defined(__USE_LARGEFILE64) /* gcc, clang */
-# ifndef MINIZ_NO_TIME
-# include <utime.h>
-# endif
-# define MZ_FOPEN(f, m) fopen64(f, m)
-# define MZ_FCLOSE fclose
-# define MZ_FREAD fread
-# define MZ_FWRITE fwrite
-# define MZ_FTELL64 ftello64
-# define MZ_FSEEK64 fseeko64
-# define MZ_FILE_STAT_STRUCT stat64
-# define MZ_FILE_STAT stat64
-# define MZ_FFLUSH fflush
-# define MZ_FREOPEN(p, m, s) freopen64(p, m, s)
-# define MZ_DELETE_FILE remove
-
-# elif defined(__APPLE__) || defined(__FreeBSD__) || \
- (defined(__linux__) && defined(__x86_64__))
-# ifndef MINIZ_NO_TIME
-# include <utime.h>
-# endif
-# define MZ_FOPEN(f, m) fopen(f, m)
-# define MZ_FCLOSE fclose
-# define MZ_FREAD fread
-# define MZ_FWRITE fwrite
-# define MZ_FTELL64 ftello
-# define MZ_FSEEK64 fseeko
-# define MZ_FILE_STAT_STRUCT stat
-# define MZ_FILE_STAT stat
-# define MZ_FFLUSH fflush
-# define MZ_FREOPEN(p, m, s) freopen(p, m, s)
-# define MZ_DELETE_FILE remove
-
-# else
-# pragma message( \
- "Using fopen, ftello, fseeko, stat() etc. path for file I/O - this path may not support large files.")
-# ifndef MINIZ_NO_TIME
-# include <utime.h>
-# endif
-# define MZ_FOPEN(f, m) fopen(f, m)
-# define MZ_FCLOSE fclose
-# define MZ_FREAD fread
-# define MZ_FWRITE fwrite
-# ifdef __STRICT_ANSI__
-# define MZ_FTELL64 ftell
-# define MZ_FSEEK64 fseek
-# else
-# define MZ_FTELL64 ftello
-# define MZ_FSEEK64 fseeko
-# endif
-# define MZ_FILE_STAT_STRUCT stat
-# define MZ_FILE_STAT stat
-# define MZ_FFLUSH fflush
-# define MZ_FREOPEN(f, m, s) freopen(f, m, s)
-# define MZ_DELETE_FILE remove
-# endif /* #ifdef _MSC_VER */
-# endif /* #ifdef MINIZ_NO_STDIO */
-
-# define MZ_TOLOWER(c) \
- ((((c) >= 'A') && ((c) <= 'Z')) ? ((c) - 'A' + 'a') : (c))
-
-/* Various ZIP archive enums. To completely avoid cross platform
- * compiler alignment and platform endian issues, miniz.c doesn't use
- * structs for any of this stuff. */
-enum {
- /* ZIP archive identifiers and record sizes */
- MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG = 0x06054b50,
- MZ_ZIP_CENTRAL_DIR_HEADER_SIG = 0x02014b50,
- MZ_ZIP_LOCAL_DIR_HEADER_SIG = 0x04034b50,
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE = 30,
- MZ_ZIP_CENTRAL_DIR_HEADER_SIZE = 46,
- MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE = 22,
-
- /* ZIP64 archive identifier and record sizes */
- MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIG = 0x06064b50,
- MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIG = 0x07064b50,
- MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE = 56,
- MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE = 20,
- MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID = 0x0001,
- MZ_ZIP_DATA_DESCRIPTOR_ID = 0x08074b50,
- MZ_ZIP_DATA_DESCRIPTER_SIZE64 = 24,
- MZ_ZIP_DATA_DESCRIPTER_SIZE32 = 16,
-
- /* Central directory header record offsets */
- MZ_ZIP_CDH_SIG_OFS = 0,
- MZ_ZIP_CDH_VERSION_MADE_BY_OFS = 4,
- MZ_ZIP_CDH_VERSION_NEEDED_OFS = 6,
- MZ_ZIP_CDH_BIT_FLAG_OFS = 8,
- MZ_ZIP_CDH_METHOD_OFS = 10,
- MZ_ZIP_CDH_FILE_TIME_OFS = 12,
- MZ_ZIP_CDH_FILE_DATE_OFS = 14,
- MZ_ZIP_CDH_CRC32_OFS = 16,
- MZ_ZIP_CDH_COMPRESSED_SIZE_OFS = 20,
- MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS = 24,
- MZ_ZIP_CDH_FILENAME_LEN_OFS = 28,
- MZ_ZIP_CDH_EXTRA_LEN_OFS = 30,
- MZ_ZIP_CDH_COMMENT_LEN_OFS = 32,
- MZ_ZIP_CDH_DISK_START_OFS = 34,
- MZ_ZIP_CDH_INTERNAL_ATTR_OFS = 36,
- MZ_ZIP_CDH_EXTERNAL_ATTR_OFS = 38,
- MZ_ZIP_CDH_LOCAL_HEADER_OFS = 42,
-
- /* Local directory header offsets */
- MZ_ZIP_LDH_SIG_OFS = 0,
- MZ_ZIP_LDH_VERSION_NEEDED_OFS = 4,
- MZ_ZIP_LDH_BIT_FLAG_OFS = 6,
- MZ_ZIP_LDH_METHOD_OFS = 8,
- MZ_ZIP_LDH_FILE_TIME_OFS = 10,
- MZ_ZIP_LDH_FILE_DATE_OFS = 12,
- MZ_ZIP_LDH_CRC32_OFS = 14,
- MZ_ZIP_LDH_COMPRESSED_SIZE_OFS = 18,
- MZ_ZIP_LDH_DECOMPRESSED_SIZE_OFS = 22,
- MZ_ZIP_LDH_FILENAME_LEN_OFS = 26,
- MZ_ZIP_LDH_EXTRA_LEN_OFS = 28,
- MZ_ZIP_LDH_BIT_FLAG_HAS_LOCATOR = 1 << 3,
-
- /* End of central directory offsets */
- MZ_ZIP_ECDH_SIG_OFS = 0,
- MZ_ZIP_ECDH_NUM_THIS_DISK_OFS = 4,
- MZ_ZIP_ECDH_NUM_DISK_CDIR_OFS = 6,
- MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS = 8,
- MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS = 10,
- MZ_ZIP_ECDH_CDIR_SIZE_OFS = 12,
- MZ_ZIP_ECDH_CDIR_OFS_OFS = 16,
- MZ_ZIP_ECDH_COMMENT_SIZE_OFS = 20,
-
- /* ZIP64 End of central directory locator offsets */
- MZ_ZIP64_ECDL_SIG_OFS = 0, /* 4 bytes */
- MZ_ZIP64_ECDL_NUM_DISK_CDIR_OFS = 4, /* 4 bytes */
- MZ_ZIP64_ECDL_REL_OFS_TO_ZIP64_ECDR_OFS = 8, /* 8 bytes */
- MZ_ZIP64_ECDL_TOTAL_NUMBER_OF_DISKS_OFS = 16, /* 4 bytes */
-
- /* ZIP64 End of central directory header offsets */
- MZ_ZIP64_ECDH_SIG_OFS = 0, /* 4 bytes */
- MZ_ZIP64_ECDH_SIZE_OF_RECORD_OFS = 4, /* 8 bytes */
- MZ_ZIP64_ECDH_VERSION_MADE_BY_OFS = 12, /* 2 bytes */
- MZ_ZIP64_ECDH_VERSION_NEEDED_OFS = 14, /* 2 bytes */
- MZ_ZIP64_ECDH_NUM_THIS_DISK_OFS = 16, /* 4 bytes */
- MZ_ZIP64_ECDH_NUM_DISK_CDIR_OFS = 20, /* 4 bytes */
- MZ_ZIP64_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS = 24, /* 8 bytes */
- MZ_ZIP64_ECDH_CDIR_TOTAL_ENTRIES_OFS = 32, /* 8 bytes */
- MZ_ZIP64_ECDH_CDIR_SIZE_OFS = 40, /* 8 bytes */
- MZ_ZIP64_ECDH_CDIR_OFS_OFS = 48, /* 8 bytes */
- MZ_ZIP_VERSION_MADE_BY_DOS_FILESYSTEM_ID = 0,
- MZ_ZIP_DOS_DIR_ATTRIBUTE_BITFLAG = 0x10,
- MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_IS_ENCRYPTED = 1,
- MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_COMPRESSED_PATCH_FLAG = 32,
- MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_USES_STRONG_ENCRYPTION = 64,
- MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_LOCAL_DIR_IS_MASKED = 8192,
- MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_UTF8 = 1 << 11
-};
-
-typedef struct {
- void *m_p;
- size_t m_size, m_capacity;
- mz_uint m_element_size;
-} mz_zip_array;
-
-struct mz_zip_internal_state_tag {
- mz_zip_array m_central_dir;
- mz_zip_array m_central_dir_offsets;
- mz_zip_array m_sorted_central_dir_offsets;
-
- /* The flags passed in when the archive is initially opened. */
- mz_uint32 m_init_flags;
-
- /* MZ_TRUE if the archive has a zip64 end of central directory
- * headers, etc. */
- mz_bool m_zip64;
-
- /* MZ_TRUE if we found zip64 extended info in the central directory
- * (m_zip64 will also be slammed to true too, even if we didn't find
- * a zip64 end of central dir header, etc.) */
- mz_bool m_zip64_has_extended_info_fields;
-
- /* These fields are used by the file, FILE, memory, and memory/heap
- * read/write helpers. */
- MZ_FILE *m_pFile;
- mz_uint64 m_file_archive_start_ofs;
-
- void *m_pMem;
- size_t m_mem_size;
- size_t m_mem_capacity;
-};
-
-# define MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(array_ptr, element_size) \
- (array_ptr)->m_element_size = element_size
-
-# if defined(DEBUG) || defined(_DEBUG)
-static MZ_FORCEINLINE mz_uint
-mz_zip_array_range_check(const mz_zip_array *pArray, mz_uint index) {
- MZ_ASSERT(index < pArray->m_size);
- return index;
-}
-# define MZ_ZIP_ARRAY_ELEMENT(array_ptr, element_type, index) \
- ((element_type *) ((array_ptr)->m_p)) \
- [mz_zip_array_range_check(array_ptr, index)]
-# else
-# define MZ_ZIP_ARRAY_ELEMENT(array_ptr, element_type, index) \
- ((element_type *) ((array_ptr)->m_p))[index]
-# endif
-
-static MZ_FORCEINLINE void mz_zip_array_init(mz_zip_array *pArray,
- mz_uint32 element_size) {
- memset(pArray, 0, sizeof(mz_zip_array));
- pArray->m_element_size = element_size;
-}
-
-static MZ_FORCEINLINE void mz_zip_array_clear(mz_zip_archive *pZip,
- mz_zip_array *pArray) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pArray->m_p);
- memset(pArray, 0, sizeof(mz_zip_array));
-}
-
-static mz_bool mz_zip_array_ensure_capacity(mz_zip_archive *pZip,
- mz_zip_array *pArray,
- size_t min_new_capacity,
- mz_uint growing) {
- void *pNew_p;
- size_t new_capacity = min_new_capacity;
- MZ_ASSERT(pArray->m_element_size);
- if (pArray->m_capacity >= min_new_capacity)
- return MZ_TRUE;
- if (growing) {
- new_capacity = MZ_MAX(1, pArray->m_capacity);
- while (new_capacity < min_new_capacity) new_capacity *= 2;
- }
- if (NULL == (pNew_p = pZip->m_pRealloc(
- pZip->m_pAlloc_opaque, pArray->m_p,
- pArray->m_element_size, new_capacity)))
- return MZ_FALSE;
- pArray->m_p = pNew_p;
- pArray->m_capacity = new_capacity;
- return MZ_TRUE;
-}
-
-static MZ_FORCEINLINE mz_bool
-mz_zip_array_reserve(mz_zip_archive *pZip, mz_zip_array *pArray,
- size_t new_capacity, mz_uint growing) {
- if (new_capacity > pArray->m_capacity) {
- if (!mz_zip_array_ensure_capacity(pZip, pArray, new_capacity,
- growing))
- return MZ_FALSE;
- }
- return MZ_TRUE;
-}
-
-static MZ_FORCEINLINE mz_bool
-mz_zip_array_resize(mz_zip_archive *pZip, mz_zip_array *pArray,
- size_t new_size, mz_uint growing) {
- if (new_size > pArray->m_capacity) {
- if (!mz_zip_array_ensure_capacity(pZip, pArray, new_size,
- growing))
- return MZ_FALSE;
- }
- pArray->m_size = new_size;
- return MZ_TRUE;
-}
-
-static MZ_FORCEINLINE mz_bool mz_zip_array_ensure_room(
- mz_zip_archive *pZip, mz_zip_array *pArray, size_t n) {
- return mz_zip_array_reserve(pZip, pArray, pArray->m_size + n,
- MZ_TRUE);
-}
-
-static MZ_FORCEINLINE mz_bool
-mz_zip_array_push_back(mz_zip_archive *pZip, mz_zip_array *pArray,
- const void *pElements, size_t n) {
- size_t orig_size = pArray->m_size;
- if (!mz_zip_array_resize(pZip, pArray, orig_size + n, MZ_TRUE))
- return MZ_FALSE;
- if (n > 0)
- memcpy((mz_uint8 *) pArray->m_p +
- orig_size * pArray->m_element_size,
- pElements, n * pArray->m_element_size);
- return MZ_TRUE;
-}
-
-# ifndef MINIZ_NO_TIME
-static MZ_TIME_T mz_zip_dos_to_time_t(int dos_time, int dos_date) {
- struct tm tm;
- memset(&tm, 0, sizeof(tm));
- tm.tm_isdst = -1;
- tm.tm_year = ((dos_date >> 9) & 127) + 1980 - 1900;
- tm.tm_mon = ((dos_date >> 5) & 15) - 1;
- tm.tm_mday = dos_date & 31;
- tm.tm_hour = (dos_time >> 11) & 31;
- tm.tm_min = (dos_time >> 5) & 63;
- tm.tm_sec = (dos_time << 1) & 62;
- return mktime(&tm);
-}
-
-# ifndef MINIZ_NO_ARCHIVE_WRITING_APIS
-static void mz_zip_time_t_to_dos_time(MZ_TIME_T time,
- mz_uint16 *pDOS_time,
- mz_uint16 *pDOS_date) {
-# ifdef _MSC_VER
- struct tm tm_struct;
- struct tm *tm = &tm_struct;
- errno_t err = localtime_s(tm, &time);
- if (err) {
- *pDOS_date = 0;
- *pDOS_time = 0;
- return;
- }
-# else
- struct tm *tm = localtime(&time);
-# endif /* #ifdef _MSC_VER */
-
- *pDOS_time = (mz_uint16) (((tm->tm_hour) << 11) +
- ((tm->tm_min) << 5) +
- ((tm->tm_sec) >> 1));
- *pDOS_date = (mz_uint16) (((tm->tm_year + 1900 - 1980) << 9) +
- ((tm->tm_mon + 1) << 5) + tm->tm_mday);
-}
-# endif /* MINIZ_NO_ARCHIVE_WRITING_APIS */
-
-# ifndef MINIZ_NO_STDIO
-# ifndef MINIZ_NO_ARCHIVE_WRITING_APIS
-static mz_bool mz_zip_get_file_modified_time(const char *pFilename,
- MZ_TIME_T *pTime) {
- struct MZ_FILE_STAT_STRUCT file_stat;
-
- /* On Linux with x86 glibc, this call will fail on large files (I
- * think >= 0x80000000 bytes) unless you compiled with
- * _LARGEFILE64_SOURCE. Argh. */
- if (MZ_FILE_STAT(pFilename, &file_stat) != 0)
- return MZ_FALSE;
-
- *pTime = file_stat.st_mtime;
-
- return MZ_TRUE;
-}
-# endif /* #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS*/
-
-static mz_bool mz_zip_set_file_times(const char *pFilename,
- MZ_TIME_T access_time,
- MZ_TIME_T modified_time) {
- struct utimbuf t;
-
- memset(&t, 0, sizeof(t));
- t.actime = access_time;
- t.modtime = modified_time;
-
- return !utime(pFilename, &t);
-}
-# endif /* #ifndef MINIZ_NO_STDIO */
-# endif /* #ifndef MINIZ_NO_TIME */
-
-static MZ_FORCEINLINE mz_bool mz_zip_set_error(mz_zip_archive *pZip,
- mz_zip_error err_num) {
- if (pZip)
- pZip->m_last_error = err_num;
- return MZ_FALSE;
-}
-
-static mz_bool mz_zip_reader_init_internal(mz_zip_archive *pZip,
- mz_uint flags) {
- (void) flags;
- if ((!pZip) || (pZip->m_pState) ||
- (pZip->m_zip_mode != MZ_ZIP_MODE_INVALID))
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
-
- if (!pZip->m_pAlloc)
- pZip->m_pAlloc = miniz_def_alloc_func;
- if (!pZip->m_pFree)
- pZip->m_pFree = miniz_def_free_func;
- if (!pZip->m_pRealloc)
- pZip->m_pRealloc = miniz_def_realloc_func;
-
- pZip->m_archive_size = 0;
- pZip->m_central_directory_file_ofs = 0;
- pZip->m_total_files = 0;
- pZip->m_last_error = MZ_ZIP_NO_ERROR;
-
- if (NULL ==
- (pZip->m_pState = (mz_zip_internal_state *) pZip->m_pAlloc(
- pZip->m_pAlloc_opaque, 1, sizeof(mz_zip_internal_state))))
- return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
-
- memset(pZip->m_pState, 0, sizeof(mz_zip_internal_state));
- MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_central_dir,
- sizeof(mz_uint8));
- MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(
- &pZip->m_pState->m_central_dir_offsets, sizeof(mz_uint32));
- MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(
- &pZip->m_pState->m_sorted_central_dir_offsets,
- sizeof(mz_uint32));
- pZip->m_pState->m_init_flags = flags;
- pZip->m_pState->m_zip64 = MZ_FALSE;
- pZip->m_pState->m_zip64_has_extended_info_fields = MZ_FALSE;
-
- pZip->m_zip_mode = MZ_ZIP_MODE_READING;
-
- return MZ_TRUE;
-}
-
-static MZ_FORCEINLINE mz_bool
-mz_zip_reader_filename_less(const mz_zip_array *pCentral_dir_array,
- const mz_zip_array *pCentral_dir_offsets,
- mz_uint l_index, mz_uint r_index) {
- const mz_uint8 *pL = &MZ_ZIP_ARRAY_ELEMENT(
- pCentral_dir_array, mz_uint8,
- MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_offsets,
- mz_uint32, l_index)),
- *pE;
- const mz_uint8 *pR = &MZ_ZIP_ARRAY_ELEMENT(
- pCentral_dir_array, mz_uint8,
- MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_offsets, mz_uint32, r_index));
- mz_uint l_len = MZ_READ_LE16(pL + MZ_ZIP_CDH_FILENAME_LEN_OFS),
- r_len = MZ_READ_LE16(pR + MZ_ZIP_CDH_FILENAME_LEN_OFS);
- mz_uint8 l = 0, r = 0;
- pL += MZ_ZIP_CENTRAL_DIR_HEADER_SIZE;
- pR += MZ_ZIP_CENTRAL_DIR_HEADER_SIZE;
- pE = pL + MZ_MIN(l_len, r_len);
- while (pL < pE) {
- if ((l = MZ_TOLOWER(*pL)) != (r = MZ_TOLOWER(*pR)))
- break;
- pL++;
- pR++;
- }
- return (pL == pE) ? (l_len < r_len) : (l < r);
-}
-
-# define MZ_SWAP_UINT32(a, b) \
- do { \
- mz_uint32 t = a; \
- a = b; \
- b = t; \
- } \
- MZ_MACRO_END
-
-/* Heap sort of lowercased filenames, used to help accelerate plain
- * central directory searches by mz_zip_reader_locate_file(). (Could
- * also use qsort(), but it could allocate memory.) */
-static void mz_zip_reader_sort_central_dir_offsets_by_filename(
- mz_zip_archive *pZip) {
- mz_zip_internal_state *pState = pZip->m_pState;
- const mz_zip_array *pCentral_dir_offsets =
- &pState->m_central_dir_offsets;
- const mz_zip_array *pCentral_dir = &pState->m_central_dir;
- mz_uint32 *pIndices;
- mz_uint32 start, end;
- const mz_uint32 size = pZip->m_total_files;
-
- if (size <= 1U)
- return;
-
- pIndices = &MZ_ZIP_ARRAY_ELEMENT(
- &pState->m_sorted_central_dir_offsets, mz_uint32, 0);
-
- start = (size - 2U) >> 1U;
- for (;;) {
- mz_uint64 child, root = start;
- for (;;) {
- if ((child = (root << 1U) + 1U) >= size)
- break;
- child += (((child + 1U) < size) &&
- (mz_zip_reader_filename_less(
- pCentral_dir, pCentral_dir_offsets,
- pIndices[child], pIndices[child + 1U])));
- if (!mz_zip_reader_filename_less(
- pCentral_dir, pCentral_dir_offsets, pIndices[root],
- pIndices[child]))
- break;
- MZ_SWAP_UINT32(pIndices[root], pIndices[child]);
- root = child;
- }
- if (!start)
- break;
- start--;
- }
-
- end = size - 1;
- while (end > 0) {
- mz_uint64 child, root = 0;
- MZ_SWAP_UINT32(pIndices[end], pIndices[0]);
- for (;;) {
- if ((child = (root << 1U) + 1U) >= end)
- break;
- child += (((child + 1U) < end) &&
- mz_zip_reader_filename_less(
- pCentral_dir, pCentral_dir_offsets,
- pIndices[child], pIndices[child + 1U]));
- if (!mz_zip_reader_filename_less(
- pCentral_dir, pCentral_dir_offsets, pIndices[root],
- pIndices[child]))
- break;
- MZ_SWAP_UINT32(pIndices[root], pIndices[child]);
- root = child;
- }
- end--;
- }
-}
-
-static mz_bool mz_zip_reader_locate_header_sig(mz_zip_archive *pZip,
- mz_uint32 record_sig,
- mz_uint32 record_size,
- mz_int64 *pOfs) {
- mz_int64 cur_file_ofs;
- mz_uint32 buf_u32[4096 / sizeof(mz_uint32)];
- mz_uint8 *pBuf = (mz_uint8 *) buf_u32;
-
- /* Basic sanity checks - reject files which are too small */
- if (pZip->m_archive_size < record_size)
- return MZ_FALSE;
-
- /* Find the record by scanning the file from the end towards the
- * beginning. */
- cur_file_ofs = MZ_MAX((mz_int64) pZip->m_archive_size -
- (mz_int64) sizeof(buf_u32),
- 0);
- for (;;) {
- int i, n = (int) MZ_MIN(sizeof(buf_u32),
- pZip->m_archive_size - cur_file_ofs);
-
- if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf, n) !=
- (mz_uint) n)
- return MZ_FALSE;
-
- for (i = n - 4; i >= 0; --i) {
- mz_uint s = MZ_READ_LE32(pBuf + i);
- if (s == record_sig) {
- if ((pZip->m_archive_size - (cur_file_ofs + i)) >=
- record_size)
- break;
- }
- }
-
- if (i >= 0) {
- cur_file_ofs += i;
- break;
- }
-
- /* Give up if we've searched the entire file, or we've gone back
- * "too far" (~64kb) */
- if ((!cur_file_ofs) ||
- ((pZip->m_archive_size - cur_file_ofs) >=
- ((mz_uint64) (MZ_UINT16_MAX) + record_size)))
- return MZ_FALSE;
-
- cur_file_ofs = MZ_MAX(cur_file_ofs - (sizeof(buf_u32) - 3), 0);
- }
-
- *pOfs = cur_file_ofs;
- return MZ_TRUE;
-}
-
-static mz_bool mz_zip_reader_read_central_dir(mz_zip_archive *pZip,
- mz_uint flags) {
- mz_uint cdir_size = 0, cdir_entries_on_this_disk = 0,
- num_this_disk = 0, cdir_disk_index = 0;
- mz_uint64 cdir_ofs = 0;
- mz_int64 cur_file_ofs = 0;
- const mz_uint8 *p;
-
- mz_uint32 buf_u32[4096 / sizeof(mz_uint32)];
- mz_uint8 *pBuf = (mz_uint8 *) buf_u32;
- mz_bool sort_central_dir =
- ((flags & MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY) == 0);
- mz_uint32 zip64_end_of_central_dir_locator_u32
- [(MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE + sizeof(mz_uint32) -
- 1) /
- sizeof(mz_uint32)];
- mz_uint8 *pZip64_locator = (mz_uint8 *)
- zip64_end_of_central_dir_locator_u32;
-
- mz_uint32 zip64_end_of_central_dir_header_u32
- [(MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE + sizeof(mz_uint32) -
- 1) /
- sizeof(mz_uint32)];
- mz_uint8 *pZip64_end_of_central_dir = (mz_uint8 *)
- zip64_end_of_central_dir_header_u32;
-
- mz_uint64 zip64_end_of_central_dir_ofs = 0;
-
- /* Basic sanity checks - reject files which are too small, and check
- * the first 4 bytes of the file to make sure a local header is
- * there. */
- if (pZip->m_archive_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE)
- return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE);
-
- if (!mz_zip_reader_locate_header_sig(
- pZip, MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG,
- MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE, &cur_file_ofs))
- return mz_zip_set_error(pZip, MZ_ZIP_FAILED_FINDING_CENTRAL_DIR);
-
- /* Read and verify the end of central directory record. */
- if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf,
- MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) !=
- MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE)
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED);
-
- if (MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_SIG_OFS) !=
- MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG)
- return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE);
-
- if (cur_file_ofs >= (MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE +
- MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE)) {
- if (pZip->m_pRead(pZip->m_pIO_opaque,
- cur_file_ofs -
- MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE,
- pZip64_locator,
- MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE) ==
- MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE) {
- if (MZ_READ_LE32(pZip64_locator + MZ_ZIP64_ECDL_SIG_OFS) ==
- MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIG) {
- zip64_end_of_central_dir_ofs = MZ_READ_LE64(
- pZip64_locator + MZ_ZIP64_ECDL_REL_OFS_TO_ZIP64_ECDR_OFS);
- if (zip64_end_of_central_dir_ofs >
- (pZip->m_archive_size -
- MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE))
- return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE);
-
- if (pZip->m_pRead(pZip->m_pIO_opaque,
- zip64_end_of_central_dir_ofs,
- pZip64_end_of_central_dir,
- MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE) ==
- MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE) {
- if (MZ_READ_LE32(pZip64_end_of_central_dir +
- MZ_ZIP64_ECDH_SIG_OFS) ==
- MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIG) {
- pZip->m_pState->m_zip64 = MZ_TRUE;
- }
- }
- }
- }
- }
-
- pZip->m_total_files = MZ_READ_LE16(
- pBuf + MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS);
- cdir_entries_on_this_disk = MZ_READ_LE16(
- pBuf + MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS);
- num_this_disk = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_NUM_THIS_DISK_OFS);
- cdir_disk_index = MZ_READ_LE16(pBuf +
- MZ_ZIP_ECDH_NUM_DISK_CDIR_OFS);
- cdir_size = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_SIZE_OFS);
- cdir_ofs = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_OFS_OFS);
-
- if (pZip->m_pState->m_zip64) {
- mz_uint32 zip64_total_num_of_disks = MZ_READ_LE32(
- pZip64_locator + MZ_ZIP64_ECDL_TOTAL_NUMBER_OF_DISKS_OFS);
- mz_uint64 zip64_cdir_total_entries = MZ_READ_LE64(
- pZip64_end_of_central_dir +
- MZ_ZIP64_ECDH_CDIR_TOTAL_ENTRIES_OFS);
- mz_uint64 zip64_cdir_total_entries_on_this_disk = MZ_READ_LE64(
- pZip64_end_of_central_dir +
- MZ_ZIP64_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS);
- mz_uint64 zip64_size_of_end_of_central_dir_record = MZ_READ_LE64(
- pZip64_end_of_central_dir + MZ_ZIP64_ECDH_SIZE_OF_RECORD_OFS);
- mz_uint64 zip64_size_of_central_directory = MZ_READ_LE64(
- pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_SIZE_OFS);
-
- if (zip64_size_of_end_of_central_dir_record <
- (MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE - 12))
- return mz_zip_set_error(pZip,
- MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-
- if (zip64_total_num_of_disks != 1U)
- return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK);
-
- /* Check for miniz's practical limits */
- if (zip64_cdir_total_entries > MZ_UINT32_MAX)
- return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES);
-
- pZip->m_total_files = (mz_uint32) zip64_cdir_total_entries;
-
- if (zip64_cdir_total_entries_on_this_disk > MZ_UINT32_MAX)
- return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES);
-
- cdir_entries_on_this_disk = (mz_uint32)
- zip64_cdir_total_entries_on_this_disk;
-
- /* Check for miniz's current practical limits (sorry, this should
- * be enough for millions of files) */
- if (zip64_size_of_central_directory > MZ_UINT32_MAX)
- return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_CDIR_SIZE);
-
- cdir_size = (mz_uint32) zip64_size_of_central_directory;
-
- num_this_disk = MZ_READ_LE32(pZip64_end_of_central_dir +
- MZ_ZIP64_ECDH_NUM_THIS_DISK_OFS);
-
- cdir_disk_index = MZ_READ_LE32(pZip64_end_of_central_dir +
- MZ_ZIP64_ECDH_NUM_DISK_CDIR_OFS);
-
- cdir_ofs = MZ_READ_LE64(pZip64_end_of_central_dir +
- MZ_ZIP64_ECDH_CDIR_OFS_OFS);
- }
-
- if (pZip->m_total_files != cdir_entries_on_this_disk)
- return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK);
-
- if (((num_this_disk | cdir_disk_index) != 0) &&
- ((num_this_disk != 1) || (cdir_disk_index != 1)))
- return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK);
-
- if (cdir_size < (mz_uint64) pZip->m_total_files *
- MZ_ZIP_CENTRAL_DIR_HEADER_SIZE)
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-
- if ((cdir_ofs + (mz_uint64) cdir_size) > pZip->m_archive_size)
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-
- pZip->m_central_directory_file_ofs = cdir_ofs;
-
- if (pZip->m_total_files) {
- mz_uint i, n;
- /* Read the entire central directory into a heap block, and
- * allocate another heap block to hold the unsorted central dir
- * file record offsets, and possibly another to hold the sorted
- * indices. */
- if ((!mz_zip_array_resize(pZip, &pZip->m_pState->m_central_dir,
- cdir_size, MZ_FALSE)) ||
- (!mz_zip_array_resize(pZip,
- &pZip->m_pState->m_central_dir_offsets,
- pZip->m_total_files, MZ_FALSE)))
- return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
-
- if (sort_central_dir) {
- if (!mz_zip_array_resize(
- pZip, &pZip->m_pState->m_sorted_central_dir_offsets,
- pZip->m_total_files, MZ_FALSE))
- return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
- }
-
- if (pZip->m_pRead(pZip->m_pIO_opaque, cdir_ofs,
- pZip->m_pState->m_central_dir.m_p,
- cdir_size) != cdir_size)
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED);
-
- /* Now create an index into the central directory file records, do
- * some basic sanity checking on each record */
- p = (const mz_uint8 *) pZip->m_pState->m_central_dir.m_p;
- for (n = cdir_size, i = 0; i < pZip->m_total_files; ++i) {
- mz_uint total_header_size, disk_index, bit_flags, filename_size,
- ext_data_size;
- mz_uint64 comp_size, decomp_size, local_header_ofs;
-
- if ((n < MZ_ZIP_CENTRAL_DIR_HEADER_SIZE) ||
- (MZ_READ_LE32(p) != MZ_ZIP_CENTRAL_DIR_HEADER_SIG))
- return mz_zip_set_error(pZip,
- MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-
- MZ_ZIP_ARRAY_ELEMENT(
- &pZip->m_pState->m_central_dir_offsets, mz_uint32,
- i) = (mz_uint32) (p - (const mz_uint8 *) pZip->m_pState
- ->m_central_dir.m_p);
-
- if (sort_central_dir)
- MZ_ZIP_ARRAY_ELEMENT(
- &pZip->m_pState->m_sorted_central_dir_offsets, mz_uint32,
- i) = i;
-
- comp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS);
- decomp_size = MZ_READ_LE32(p +
- MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS);
- local_header_ofs = MZ_READ_LE32(p +
- MZ_ZIP_CDH_LOCAL_HEADER_OFS);
- filename_size = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS);
- ext_data_size = MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS);
-
- if ((!pZip->m_pState->m_zip64_has_extended_info_fields) &&
- (ext_data_size) &&
- (MZ_MAX(MZ_MAX(comp_size, decomp_size), local_header_ofs) ==
- MZ_UINT32_MAX)) {
- /* Attempt to find zip64 extended information field in the
- * entry's extra data */
- mz_uint32 extra_size_remaining = ext_data_size;
-
- if (extra_size_remaining) {
- const mz_uint8 *pExtra_data;
- void *buf = NULL;
-
- if (MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_size +
- ext_data_size >
- n) {
- buf = MZ_MALLOC(ext_data_size);
- if (buf == NULL)
- return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
-
- if (pZip->m_pRead(pZip->m_pIO_opaque,
- cdir_ofs +
- MZ_ZIP_CENTRAL_DIR_HEADER_SIZE +
- filename_size,
- buf, ext_data_size) != ext_data_size) {
- MZ_FREE(buf);
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED);
- }
-
- pExtra_data = (mz_uint8 *) buf;
- } else {
- pExtra_data = p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE +
- filename_size;
- }
-
- do {
- mz_uint32 field_id;
- mz_uint32 field_data_size;
-
- if (extra_size_remaining < (sizeof(mz_uint16) * 2)) {
- MZ_FREE(buf);
- return mz_zip_set_error(
- pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
- }
-
- field_id = MZ_READ_LE16(pExtra_data);
- field_data_size = MZ_READ_LE16(pExtra_data +
- sizeof(mz_uint16));
-
- if ((field_data_size + sizeof(mz_uint16) * 2) >
- extra_size_remaining) {
- MZ_FREE(buf);
- return mz_zip_set_error(
- pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
- }
-
- if (field_id ==
- MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID) {
- /* Ok, the archive didn't have any zip64 headers but it
- * uses a zip64 extended information field so mark it as
- * zip64 anyway (this can occur with infozip's zip util
- * when it reads compresses files from stdin). */
- pZip->m_pState->m_zip64 = MZ_TRUE;
- pZip->m_pState->m_zip64_has_extended_info_fields =
- MZ_TRUE;
- break;
- }
-
- pExtra_data += sizeof(mz_uint16) * 2 + field_data_size;
- extra_size_remaining = extra_size_remaining -
- sizeof(mz_uint16) * 2 -
- field_data_size;
- } while (extra_size_remaining);
-
- MZ_FREE(buf);
- }
- }
-
- /* I've seen archives that aren't marked as zip64 that uses
- * zip64 ext data, argh */
- if ((comp_size != MZ_UINT32_MAX) &&
- (decomp_size != MZ_UINT32_MAX)) {
- if (((!MZ_READ_LE32(p + MZ_ZIP_CDH_METHOD_OFS)) &&
- (decomp_size != comp_size)) ||
- (decomp_size && !comp_size))
- return mz_zip_set_error(pZip,
- MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
- }
-
- disk_index = MZ_READ_LE16(p + MZ_ZIP_CDH_DISK_START_OFS);
- if ((disk_index == MZ_UINT16_MAX) ||
- ((disk_index != num_this_disk) && (disk_index != 1)))
- return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK);
-
- if (comp_size != MZ_UINT32_MAX) {
- if (((mz_uint64) MZ_READ_LE32(p +
- MZ_ZIP_CDH_LOCAL_HEADER_OFS) +
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE + comp_size) >
- pZip->m_archive_size)
- return mz_zip_set_error(pZip,
- MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
- }
-
- bit_flags = MZ_READ_LE16(p + MZ_ZIP_CDH_BIT_FLAG_OFS);
- if (bit_flags &
- MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_LOCAL_DIR_IS_MASKED)
- return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_ENCRYPTION);
-
- if ((total_header_size =
- MZ_ZIP_CENTRAL_DIR_HEADER_SIZE +
- MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS) +
- MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS) +
- MZ_READ_LE16(p + MZ_ZIP_CDH_COMMENT_LEN_OFS)) > n)
- return mz_zip_set_error(pZip,
- MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-
- n -= total_header_size;
- p += total_header_size;
- }
- }
-
- if (sort_central_dir)
- mz_zip_reader_sort_central_dir_offsets_by_filename(pZip);
-
- return MZ_TRUE;
-}
-
-void mz_zip_zero_struct(mz_zip_archive *pZip) {
- if (pZip)
- MZ_CLEAR_PTR(pZip);
-}
-
-static mz_bool mz_zip_reader_end_internal(mz_zip_archive *pZip,
- mz_bool set_last_error) {
- mz_bool status = MZ_TRUE;
-
- if (!pZip)
- return MZ_FALSE;
-
- if ((!pZip->m_pState) || (!pZip->m_pAlloc) || (!pZip->m_pFree) ||
- (pZip->m_zip_mode != MZ_ZIP_MODE_READING)) {
- if (set_last_error)
- pZip->m_last_error = MZ_ZIP_INVALID_PARAMETER;
-
- return MZ_FALSE;
- }
-
- if (pZip->m_pState) {
- mz_zip_internal_state *pState = pZip->m_pState;
- pZip->m_pState = NULL;
-
- mz_zip_array_clear(pZip, &pState->m_central_dir);
- mz_zip_array_clear(pZip, &pState->m_central_dir_offsets);
- mz_zip_array_clear(pZip, &pState->m_sorted_central_dir_offsets);
-
-# ifndef MINIZ_NO_STDIO
- if (pState->m_pFile) {
- if (pZip->m_zip_type == MZ_ZIP_TYPE_FILE) {
- if (MZ_FCLOSE(pState->m_pFile) == EOF) {
- if (set_last_error)
- pZip->m_last_error = MZ_ZIP_FILE_CLOSE_FAILED;
- status = MZ_FALSE;
- }
- }
- pState->m_pFile = NULL;
- }
-# endif /* #ifndef MINIZ_NO_STDIO */
-
- pZip->m_pFree(pZip->m_pAlloc_opaque, pState);
- }
- pZip->m_zip_mode = MZ_ZIP_MODE_INVALID;
-
- return status;
-}
-
-mz_bool mz_zip_reader_end(mz_zip_archive *pZip) {
- return mz_zip_reader_end_internal(pZip, MZ_TRUE);
-}
-mz_bool mz_zip_reader_init(mz_zip_archive *pZip, mz_uint64 size,
- mz_uint flags) {
- if ((!pZip) || (!pZip->m_pRead))
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
-
- if (!mz_zip_reader_init_internal(pZip, flags))
- return MZ_FALSE;
-
- pZip->m_zip_type = MZ_ZIP_TYPE_USER;
- pZip->m_archive_size = size;
-
- if (!mz_zip_reader_read_central_dir(pZip, flags)) {
- mz_zip_reader_end_internal(pZip, MZ_FALSE);
- return MZ_FALSE;
- }
-
- return MZ_TRUE;
-}
-
-static size_t mz_zip_mem_read_func(void *pOpaque, mz_uint64 file_ofs,
- void *pBuf, size_t n) {
- mz_zip_archive *pZip = (mz_zip_archive *) pOpaque;
- size_t s = (file_ofs >= pZip->m_archive_size)
- ? 0
- : (size_t) MZ_MIN(pZip->m_archive_size - file_ofs,
- n);
- memcpy(pBuf, (const mz_uint8 *) pZip->m_pState->m_pMem + file_ofs,
- s);
- return s;
-}
-
-mz_bool mz_zip_reader_init_mem(mz_zip_archive *pZip, const void *pMem,
- size_t size, mz_uint flags) {
- if (!pMem)
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
-
- if (size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE)
- return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE);
-
- if (!mz_zip_reader_init_internal(pZip, flags))
- return MZ_FALSE;
-
- pZip->m_zip_type = MZ_ZIP_TYPE_MEMORY;
- pZip->m_archive_size = size;
- pZip->m_pRead = mz_zip_mem_read_func;
- pZip->m_pIO_opaque = pZip;
- pZip->m_pNeeds_keepalive = NULL;
-
-# ifdef __cplusplus
- pZip->m_pState->m_pMem = const_cast<void *>(pMem);
-# else
- pZip->m_pState->m_pMem = (void *) pMem;
-# endif
-
- pZip->m_pState->m_mem_size = size;
-
- if (!mz_zip_reader_read_central_dir(pZip, flags)) {
- mz_zip_reader_end_internal(pZip, MZ_FALSE);
- return MZ_FALSE;
- }
-
- return MZ_TRUE;
-}
-
-# ifndef MINIZ_NO_STDIO
-static size_t mz_zip_file_read_func(void *pOpaque, mz_uint64 file_ofs,
- void *pBuf, size_t n) {
- mz_zip_archive *pZip = (mz_zip_archive *) pOpaque;
- mz_int64 cur_ofs = MZ_FTELL64(pZip->m_pState->m_pFile);
-
- file_ofs += pZip->m_pState->m_file_archive_start_ofs;
-
- if (((mz_int64) file_ofs < 0) ||
- (((cur_ofs != (mz_int64) file_ofs)) &&
- (MZ_FSEEK64(pZip->m_pState->m_pFile, (mz_int64) file_ofs,
- SEEK_SET))))
- return 0;
-
- return MZ_FREAD(pBuf, 1, n, pZip->m_pState->m_pFile);
-}
-
-mz_bool mz_zip_reader_init_file(mz_zip_archive *pZip,
- const char *pFilename,
- mz_uint32 flags) {
- return mz_zip_reader_init_file_v2(pZip, pFilename, flags, 0, 0);
-}
-
-mz_bool mz_zip_reader_init_file_v2(mz_zip_archive *pZip,
- const char *pFilename,
- mz_uint flags,
- mz_uint64 file_start_ofs,
- mz_uint64 archive_size) {
- mz_uint64 file_size;
- MZ_FILE *pFile;
-
- if ((!pZip) || (!pFilename) ||
- ((archive_size) &&
- (archive_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE)))
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
-
- pFile = MZ_FOPEN(pFilename, "rb");
- if (!pFile)
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_OPEN_FAILED);
-
- file_size = archive_size;
- if (!file_size) {
- if (MZ_FSEEK64(pFile, 0, SEEK_END)) {
- MZ_FCLOSE(pFile);
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_SEEK_FAILED);
- }
-
- file_size = MZ_FTELL64(pFile);
- }
-
- /* TODO: Better sanity check archive_size and the # of actual
- * remaining bytes */
-
- if (file_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) {
- MZ_FCLOSE(pFile);
- return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE);
- }
-
- if (!mz_zip_reader_init_internal(pZip, flags)) {
- MZ_FCLOSE(pFile);
- return MZ_FALSE;
- }
-
- pZip->m_zip_type = MZ_ZIP_TYPE_FILE;
- pZip->m_pRead = mz_zip_file_read_func;
- pZip->m_pIO_opaque = pZip;
- pZip->m_pState->m_pFile = pFile;
- pZip->m_archive_size = file_size;
- pZip->m_pState->m_file_archive_start_ofs = file_start_ofs;
-
- if (!mz_zip_reader_read_central_dir(pZip, flags)) {
- mz_zip_reader_end_internal(pZip, MZ_FALSE);
- return MZ_FALSE;
- }
-
- return MZ_TRUE;
-}
-
-mz_bool mz_zip_reader_init_cfile(mz_zip_archive *pZip, MZ_FILE *pFile,
- mz_uint64 archive_size,
- mz_uint flags) {
- mz_uint64 cur_file_ofs;
-
- if ((!pZip) || (!pFile))
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_OPEN_FAILED);
-
- cur_file_ofs = MZ_FTELL64(pFile);
-
- if (!archive_size) {
- if (MZ_FSEEK64(pFile, 0, SEEK_END))
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_SEEK_FAILED);
-
- archive_size = MZ_FTELL64(pFile) - cur_file_ofs;
-
- if (archive_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE)
- return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE);
- }
-
- if (!mz_zip_reader_init_internal(pZip, flags))
- return MZ_FALSE;
-
- pZip->m_zip_type = MZ_ZIP_TYPE_CFILE;
- pZip->m_pRead = mz_zip_file_read_func;
-
- pZip->m_pIO_opaque = pZip;
- pZip->m_pState->m_pFile = pFile;
- pZip->m_archive_size = archive_size;
- pZip->m_pState->m_file_archive_start_ofs = cur_file_ofs;
-
- if (!mz_zip_reader_read_central_dir(pZip, flags)) {
- mz_zip_reader_end_internal(pZip, MZ_FALSE);
- return MZ_FALSE;
- }
-
- return MZ_TRUE;
-}
-
-# endif /* #ifndef MINIZ_NO_STDIO */
-
-static MZ_FORCEINLINE const mz_uint8 *mz_zip_get_cdh(
- mz_zip_archive *pZip, mz_uint file_index) {
- if ((!pZip) || (!pZip->m_pState) ||
- (file_index >= pZip->m_total_files))
- return NULL;
- return &MZ_ZIP_ARRAY_ELEMENT(
- &pZip->m_pState->m_central_dir, mz_uint8,
- MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets,
- mz_uint32, file_index));
-}
-
-mz_bool mz_zip_reader_is_file_encrypted(mz_zip_archive *pZip,
- mz_uint file_index) {
- mz_uint m_bit_flag;
- const mz_uint8 *p = mz_zip_get_cdh(pZip, file_index);
- if (!p) {
- mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
- return MZ_FALSE;
- }
-
- m_bit_flag = MZ_READ_LE16(p + MZ_ZIP_CDH_BIT_FLAG_OFS);
- return (m_bit_flag &
- (MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_IS_ENCRYPTED |
- MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_USES_STRONG_ENCRYPTION)) !=
- 0;
-}
-
-mz_bool mz_zip_reader_is_file_supported(mz_zip_archive *pZip,
- mz_uint file_index) {
- mz_uint bit_flag;
- mz_uint method;
-
- const mz_uint8 *p = mz_zip_get_cdh(pZip, file_index);
- if (!p) {
- mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
- return MZ_FALSE;
- }
-
- method = MZ_READ_LE16(p + MZ_ZIP_CDH_METHOD_OFS);
- bit_flag = MZ_READ_LE16(p + MZ_ZIP_CDH_BIT_FLAG_OFS);
-
- if ((method != 0) && (method != MZ_DEFLATED)) {
- mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_METHOD);
- return MZ_FALSE;
- }
-
- if (bit_flag &
- (MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_IS_ENCRYPTED |
- MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_USES_STRONG_ENCRYPTION)) {
- mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_ENCRYPTION);
- return MZ_FALSE;
- }
-
- if (bit_flag &
- MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_COMPRESSED_PATCH_FLAG) {
- mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_FEATURE);
- return MZ_FALSE;
- }
-
- return MZ_TRUE;
-}
-
-mz_bool mz_zip_reader_is_file_a_directory(mz_zip_archive *pZip,
- mz_uint file_index) {
- mz_uint filename_len, attribute_mapping_id, external_attr;
- const mz_uint8 *p = mz_zip_get_cdh(pZip, file_index);
- if (!p) {
- mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
- return MZ_FALSE;
- }
-
- filename_len = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS);
- if (filename_len) {
- if (*(p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_len - 1) ==
- '/')
- return MZ_TRUE;
- }
-
- /* Bugfix: This code was also checking if the internal attribute was
- * non-zero, which wasn't correct. */
- /* Most/all zip writers (hopefully) set DOS file/directory
- * attributes in the low 16-bits, so check for the DOS directory
- * flag and ignore the source OS ID in the created by field. */
- /* FIXME: Remove this check? Is it necessary - we already check the
- * filename. */
- attribute_mapping_id = MZ_READ_LE16(
- p + MZ_ZIP_CDH_VERSION_MADE_BY_OFS) >>
- 8;
- (void) attribute_mapping_id;
-
- external_attr = MZ_READ_LE32(p + MZ_ZIP_CDH_EXTERNAL_ATTR_OFS);
- if ((external_attr & MZ_ZIP_DOS_DIR_ATTRIBUTE_BITFLAG) != 0) {
- return MZ_TRUE;
- }
-
- return MZ_FALSE;
-}
-
-static mz_bool mz_zip_file_stat_internal(
- mz_zip_archive *pZip, mz_uint file_index,
- const mz_uint8 *pCentral_dir_header,
- mz_zip_archive_file_stat *pStat,
- mz_bool *pFound_zip64_extra_data) {
- mz_uint n;
- const mz_uint8 *p = pCentral_dir_header;
-
- if (pFound_zip64_extra_data)
- *pFound_zip64_extra_data = MZ_FALSE;
-
- if ((!p) || (!pStat))
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
-
- /* Extract fields from the central directory record. */
- pStat->m_file_index = file_index;
- pStat->m_central_dir_ofs = MZ_ZIP_ARRAY_ELEMENT(
- &pZip->m_pState->m_central_dir_offsets, mz_uint32, file_index);
- pStat->m_version_made_by = MZ_READ_LE16(
- p + MZ_ZIP_CDH_VERSION_MADE_BY_OFS);
- pStat->m_version_needed = MZ_READ_LE16(
- p + MZ_ZIP_CDH_VERSION_NEEDED_OFS);
- pStat->m_bit_flag = MZ_READ_LE16(p + MZ_ZIP_CDH_BIT_FLAG_OFS);
- pStat->m_method = MZ_READ_LE16(p + MZ_ZIP_CDH_METHOD_OFS);
-# ifndef MINIZ_NO_TIME
- pStat->m_time = mz_zip_dos_to_time_t(
- MZ_READ_LE16(p + MZ_ZIP_CDH_FILE_TIME_OFS),
- MZ_READ_LE16(p + MZ_ZIP_CDH_FILE_DATE_OFS));
-# endif
- pStat->m_crc32 = MZ_READ_LE32(p + MZ_ZIP_CDH_CRC32_OFS);
- pStat->m_comp_size = MZ_READ_LE32(p +
- MZ_ZIP_CDH_COMPRESSED_SIZE_OFS);
- pStat->m_uncomp_size = MZ_READ_LE32(
- p + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS);
- pStat->m_internal_attr = MZ_READ_LE16(p +
- MZ_ZIP_CDH_INTERNAL_ATTR_OFS);
- pStat->m_external_attr = MZ_READ_LE32(p +
- MZ_ZIP_CDH_EXTERNAL_ATTR_OFS);
- pStat->m_local_header_ofs = MZ_READ_LE32(
- p + MZ_ZIP_CDH_LOCAL_HEADER_OFS);
-
- /* Copy as much of the filename and comment as possible. */
- n = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS);
- n = MZ_MIN(n, MZ_ZIP_MAX_ARCHIVE_FILENAME_SIZE - 1);
- memcpy(pStat->m_filename, p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE, n);
- pStat->m_filename[n] = '\0';
-
- n = MZ_READ_LE16(p + MZ_ZIP_CDH_COMMENT_LEN_OFS);
- n = MZ_MIN(n, MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE - 1);
- pStat->m_comment_size = n;
- memcpy(pStat->m_comment,
- p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE +
- MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS) +
- MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS),
- n);
- pStat->m_comment[n] = '\0';
-
- /* Set some flags for convienance */
- pStat->m_is_directory = mz_zip_reader_is_file_a_directory(
- pZip, file_index);
- pStat->m_is_encrypted = mz_zip_reader_is_file_encrypted(pZip,
- file_index);
- pStat->m_is_supported = mz_zip_reader_is_file_supported(pZip,
- file_index);
-
- /* See if we need to read any zip64 extended information fields. */
- /* Confusingly, these zip64 fields can be present even on non-zip64
- * archives (Debian zip on a huge files from stdin piped to stdout
- * creates them). */
- if (MZ_MAX(MZ_MAX(pStat->m_comp_size, pStat->m_uncomp_size),
- pStat->m_local_header_ofs) == MZ_UINT32_MAX) {
- /* Attempt to find zip64 extended information field in the entry's
- * extra data */
- mz_uint32 extra_size_remaining = MZ_READ_LE16(
- p + MZ_ZIP_CDH_EXTRA_LEN_OFS);
-
- if (extra_size_remaining) {
- const mz_uint8 *pExtra_data =
- p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE +
- MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS);
-
- do {
- mz_uint32 field_id;
- mz_uint32 field_data_size;
-
- if (extra_size_remaining < (sizeof(mz_uint16) * 2))
- return mz_zip_set_error(pZip,
- MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-
- field_id = MZ_READ_LE16(pExtra_data);
- field_data_size = MZ_READ_LE16(pExtra_data +
- sizeof(mz_uint16));
-
- if ((field_data_size + sizeof(mz_uint16) * 2) >
- extra_size_remaining)
- return mz_zip_set_error(pZip,
- MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-
- if (field_id ==
- MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID) {
- const mz_uint8 *pField_data = pExtra_data +
- sizeof(mz_uint16) * 2;
- mz_uint32 field_data_remaining = field_data_size;
-
- if (pFound_zip64_extra_data)
- *pFound_zip64_extra_data = MZ_TRUE;
-
- if (pStat->m_uncomp_size == MZ_UINT32_MAX) {
- if (field_data_remaining < sizeof(mz_uint64))
- return mz_zip_set_error(
- pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-
- pStat->m_uncomp_size = MZ_READ_LE64(pField_data);
- pField_data += sizeof(mz_uint64);
- field_data_remaining -= sizeof(mz_uint64);
- }
-
- if (pStat->m_comp_size == MZ_UINT32_MAX) {
- if (field_data_remaining < sizeof(mz_uint64))
- return mz_zip_set_error(
- pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-
- pStat->m_comp_size = MZ_READ_LE64(pField_data);
- pField_data += sizeof(mz_uint64);
- field_data_remaining -= sizeof(mz_uint64);
- }
-
- if (pStat->m_local_header_ofs == MZ_UINT32_MAX) {
- if (field_data_remaining < sizeof(mz_uint64))
- return mz_zip_set_error(
- pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-
- pStat->m_local_header_ofs = MZ_READ_LE64(pField_data);
- pField_data += sizeof(mz_uint64);
- field_data_remaining -= sizeof(mz_uint64);
- }
-
- break;
- }
-
- pExtra_data += sizeof(mz_uint16) * 2 + field_data_size;
- extra_size_remaining = extra_size_remaining -
- sizeof(mz_uint16) * 2 -
- field_data_size;
- } while (extra_size_remaining);
- }
- }
-
- return MZ_TRUE;
-}
-
-static MZ_FORCEINLINE mz_bool mz_zip_string_equal(const char *pA,
- const char *pB,
- mz_uint len,
- mz_uint flags) {
- mz_uint i;
- if (flags & MZ_ZIP_FLAG_CASE_SENSITIVE)
- return 0 == memcmp(pA, pB, len);
- for (i = 0; i < len; ++i)
- if (MZ_TOLOWER(pA[i]) != MZ_TOLOWER(pB[i]))
- return MZ_FALSE;
- return MZ_TRUE;
-}
-
-static MZ_FORCEINLINE int mz_zip_filename_compare(
- const mz_zip_array *pCentral_dir_array,
- const mz_zip_array *pCentral_dir_offsets, mz_uint l_index,
- const char *pR, mz_uint r_len) {
- const mz_uint8 *pL = &MZ_ZIP_ARRAY_ELEMENT(
- pCentral_dir_array, mz_uint8,
- MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_offsets,
- mz_uint32, l_index)),
- *pE;
- mz_uint l_len = MZ_READ_LE16(pL + MZ_ZIP_CDH_FILENAME_LEN_OFS);
- mz_uint8 l = 0, r = 0;
- pL += MZ_ZIP_CENTRAL_DIR_HEADER_SIZE;
- pE = pL + MZ_MIN(l_len, r_len);
- while (pL < pE) {
- if ((l = MZ_TOLOWER(*pL)) != (r = MZ_TOLOWER(*pR)))
- break;
- pL++;
- pR++;
- }
- return (pL == pE) ? (int) (l_len - r_len) : (l - r);
-}
-
-static mz_bool mz_zip_locate_file_binary_search(mz_zip_archive *pZip,
- const char *pFilename,
- mz_uint32 *pIndex) {
- mz_zip_internal_state *pState = pZip->m_pState;
- const mz_zip_array *pCentral_dir_offsets =
- &pState->m_central_dir_offsets;
- const mz_zip_array *pCentral_dir = &pState->m_central_dir;
- mz_uint32 *pIndices = &MZ_ZIP_ARRAY_ELEMENT(
- &pState->m_sorted_central_dir_offsets, mz_uint32, 0);
- const mz_uint32 size = pZip->m_total_files;
- const mz_uint filename_len = (mz_uint) strlen(pFilename);
-
- if (pIndex)
- *pIndex = 0;
-
- if (size) {
- /* yes I could use uint32_t's, but then we would have to add some
- * special case checks in the loop, argh, and */
- /* honestly the major expense here on 32-bit CPU's will still be
- * the filename compare */
- mz_int64 l = 0, h = (mz_int64) size - 1;
-
- while (l <= h) {
- mz_int64 m = l + ((h - l) >> 1);
- mz_uint32 file_index = pIndices[(mz_uint32) m];
-
- int comp = mz_zip_filename_compare(
- pCentral_dir, pCentral_dir_offsets, file_index, pFilename,
- filename_len);
- if (!comp) {
- if (pIndex)
- *pIndex = file_index;
- return MZ_TRUE;
- } else if (comp < 0)
- l = m + 1;
- else
- h = m - 1;
- }
- }
-
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_NOT_FOUND);
-}
-
-int mz_zip_reader_locate_file(mz_zip_archive *pZip, const char *pName,
- const char *pComment, mz_uint flags) {
- mz_uint32 index;
- if (!mz_zip_reader_locate_file_v2(pZip, pName, pComment, flags,
- &index))
- return -1;
- else
- return (int) index;
-}
-
-mz_bool mz_zip_reader_locate_file_v2(mz_zip_archive *pZip,
- const char *pName,
- const char *pComment,
- mz_uint flags,
- mz_uint32 *pIndex) {
- mz_uint file_index;
- size_t name_len, comment_len;
-
- if (pIndex)
- *pIndex = 0;
-
- if ((!pZip) || (!pZip->m_pState) || (!pName))
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
-
- /* See if we can use a binary search */
- if (((pZip->m_pState->m_init_flags &
- MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY) == 0) &&
- (pZip->m_zip_mode == MZ_ZIP_MODE_READING) &&
- ((flags & (MZ_ZIP_FLAG_IGNORE_PATH |
- MZ_ZIP_FLAG_CASE_SENSITIVE)) == 0) &&
- (!pComment) &&
- (pZip->m_pState->m_sorted_central_dir_offsets.m_size)) {
- return mz_zip_locate_file_binary_search(pZip, pName, pIndex);
- }
-
- /* Locate the entry by scanning the entire central directory */
- name_len = strlen(pName);
- if (name_len > MZ_UINT16_MAX)
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
-
- comment_len = pComment ? strlen(pComment) : 0;
- if (comment_len > MZ_UINT16_MAX)
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
-
- for (file_index = 0; file_index < pZip->m_total_files;
- file_index++) {
- const mz_uint8 *pHeader = &MZ_ZIP_ARRAY_ELEMENT(
- &pZip->m_pState->m_central_dir, mz_uint8,
- MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets,
- mz_uint32, file_index));
- mz_uint filename_len = MZ_READ_LE16(pHeader +
- MZ_ZIP_CDH_FILENAME_LEN_OFS);
- const char *pFilename = (const char *) pHeader +
- MZ_ZIP_CENTRAL_DIR_HEADER_SIZE;
- if (filename_len < name_len)
- continue;
- if (comment_len) {
- mz_uint file_extra_len = MZ_READ_LE16(pHeader +
- MZ_ZIP_CDH_EXTRA_LEN_OFS),
- file_comment_len = MZ_READ_LE16(
- pHeader + MZ_ZIP_CDH_COMMENT_LEN_OFS);
- const char *pFile_comment = pFilename + filename_len +
- file_extra_len;
- if ((file_comment_len != comment_len) ||
- (!mz_zip_string_equal(pComment, pFile_comment,
- file_comment_len, flags)))
- continue;
- }
- if ((flags & MZ_ZIP_FLAG_IGNORE_PATH) && (filename_len)) {
- int ofs = filename_len - 1;
- do {
- if ((pFilename[ofs] == '/') || (pFilename[ofs] == '\\') ||
- (pFilename[ofs] == ':'))
- break;
- } while (--ofs >= 0);
- ofs++;
- pFilename += ofs;
- filename_len -= ofs;
- }
- if ((filename_len == name_len) &&
- (mz_zip_string_equal(pName, pFilename, filename_len,
- flags))) {
- if (pIndex)
- *pIndex = file_index;
- return MZ_TRUE;
- }
- }
-
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_NOT_FOUND);
-}
-
-static mz_bool mz_zip_reader_extract_to_mem_no_alloc1(
- mz_zip_archive *pZip, mz_uint file_index, void *pBuf,
- size_t buf_size, mz_uint flags, void *pUser_read_buf,
- size_t user_read_buf_size, const mz_zip_archive_file_stat *st) {
- int status = TINFL_STATUS_DONE;
- mz_uint64 needed_size, cur_file_ofs, comp_remaining,
- out_buf_ofs = 0, read_buf_size, read_buf_ofs = 0,
- read_buf_avail;
- mz_zip_archive_file_stat file_stat;
- void *pRead_buf;
- mz_uint32 local_header_u32[(MZ_ZIP_LOCAL_DIR_HEADER_SIZE +
- sizeof(mz_uint32) - 1) /
- sizeof(mz_uint32)];
- mz_uint8 *pLocal_header = (mz_uint8 *) local_header_u32;
- tinfl_decompressor inflator;
-
- if ((!pZip) || (!pZip->m_pState) || ((buf_size) && (!pBuf)) ||
- ((user_read_buf_size) && (!pUser_read_buf)) || (!pZip->m_pRead))
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
-
- if (st) {
- file_stat = *st;
- } else if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat))
- return MZ_FALSE;
-
- /* A directory or zero length file */
- if ((file_stat.m_is_directory) || (!file_stat.m_comp_size))
- return MZ_TRUE;
-
- /* Encryption and patch files are not supported. */
- if (file_stat.m_bit_flag &
- (MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_IS_ENCRYPTED |
- MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_USES_STRONG_ENCRYPTION |
- MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_COMPRESSED_PATCH_FLAG))
- return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_ENCRYPTION);
-
- /* This function only supports decompressing stored and deflate. */
- if ((!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) &&
- (file_stat.m_method != 0) &&
- (file_stat.m_method != MZ_DEFLATED))
- return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_METHOD);
-
- /* Ensure supplied output buffer is large enough. */
- needed_size = (flags & MZ_ZIP_FLAG_COMPRESSED_DATA)
- ? file_stat.m_comp_size
- : file_stat.m_uncomp_size;
- if (buf_size < needed_size)
- return mz_zip_set_error(pZip, MZ_ZIP_BUF_TOO_SMALL);
-
- /* Read and parse the local directory entry. */
- cur_file_ofs = file_stat.m_local_header_ofs;
- if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pLocal_header,
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE) !=
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE)
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED);
-
- if (MZ_READ_LE32(pLocal_header) != MZ_ZIP_LOCAL_DIR_HEADER_SIG)
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-
- cur_file_ofs +=
- (mz_uint64) (MZ_ZIP_LOCAL_DIR_HEADER_SIZE) +
- MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_FILENAME_LEN_OFS) +
- MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_EXTRA_LEN_OFS);
- if ((cur_file_ofs + file_stat.m_comp_size) > pZip->m_archive_size)
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-
- if ((flags & MZ_ZIP_FLAG_COMPRESSED_DATA) ||
- (!file_stat.m_method)) {
- /* The file is stored or the caller has requested the compressed
- * data. */
- if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf,
- (size_t) needed_size) != needed_size)
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED);
-
-# ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS
- if ((flags & MZ_ZIP_FLAG_COMPRESSED_DATA) == 0) {
- if (mz_crc32(MZ_CRC32_INIT, (const mz_uint8 *) pBuf,
- (size_t) file_stat.m_uncomp_size) !=
- file_stat.m_crc32)
- return mz_zip_set_error(pZip, MZ_ZIP_CRC_CHECK_FAILED);
- }
-# endif
-
- return MZ_TRUE;
- }
-
- /* Decompress the file either directly from memory or from a file
- * input buffer. */
- tinfl_init(&inflator);
-
- if (pZip->m_pState->m_pMem) {
- /* Read directly from the archive in memory. */
- pRead_buf = (mz_uint8 *) pZip->m_pState->m_pMem + cur_file_ofs;
- read_buf_size = read_buf_avail = file_stat.m_comp_size;
- comp_remaining = 0;
- } else if (pUser_read_buf) {
- /* Use a user provided read buffer. */
- if (!user_read_buf_size)
- return MZ_FALSE;
- pRead_buf = (mz_uint8 *) pUser_read_buf;
- read_buf_size = user_read_buf_size;
- read_buf_avail = 0;
- comp_remaining = file_stat.m_comp_size;
- } else {
- /* Temporarily allocate a read buffer. */
- read_buf_size = MZ_MIN(file_stat.m_comp_size,
- (mz_uint64) MZ_ZIP_MAX_IO_BUF_SIZE);
- if (((sizeof(size_t) == sizeof(mz_uint32))) &&
- (read_buf_size > 0x7FFFFFFF))
- return mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR);
-
- if (NULL == (pRead_buf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1,
- (size_t) read_buf_size)))
- return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
-
- read_buf_avail = 0;
- comp_remaining = file_stat.m_comp_size;
- }
-
- do {
- /* The size_t cast here should be OK because we've verified that
- * the output buffer is >= file_stat.m_uncomp_size above */
- size_t in_buf_size,
- out_buf_size = (size_t) (file_stat.m_uncomp_size -
- out_buf_ofs);
- if ((!read_buf_avail) && (!pZip->m_pState->m_pMem)) {
- read_buf_avail = MZ_MIN(read_buf_size, comp_remaining);
- if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pRead_buf,
- (size_t) read_buf_avail) != read_buf_avail) {
- status = TINFL_STATUS_FAILED;
- mz_zip_set_error(pZip, MZ_ZIP_DECOMPRESSION_FAILED);
- break;
- }
- cur_file_ofs += read_buf_avail;
- comp_remaining -= read_buf_avail;
- read_buf_ofs = 0;
- }
- in_buf_size = (size_t) read_buf_avail;
- status = tinfl_decompress(
- &inflator, (mz_uint8 *) pRead_buf + read_buf_ofs,
- &in_buf_size, (mz_uint8 *) pBuf,
- (mz_uint8 *) pBuf + out_buf_ofs, &out_buf_size,
- TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF |
- (comp_remaining ? TINFL_FLAG_HAS_MORE_INPUT : 0));
- read_buf_avail -= in_buf_size;
- read_buf_ofs += in_buf_size;
- out_buf_ofs += out_buf_size;
- } while (status == TINFL_STATUS_NEEDS_MORE_INPUT);
-
- if (status == TINFL_STATUS_DONE) {
- /* Make sure the entire file was decompressed, and check its CRC.
- */
- if (out_buf_ofs != file_stat.m_uncomp_size) {
- mz_zip_set_error(pZip, MZ_ZIP_UNEXPECTED_DECOMPRESSED_SIZE);
- status = TINFL_STATUS_FAILED;
- }
-# ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS
- else if (mz_crc32(MZ_CRC32_INIT, (const mz_uint8 *) pBuf,
- (size_t) file_stat.m_uncomp_size) !=
- file_stat.m_crc32) {
- mz_zip_set_error(pZip, MZ_ZIP_CRC_CHECK_FAILED);
- status = TINFL_STATUS_FAILED;
- }
-# endif
- }
-
- if ((!pZip->m_pState->m_pMem) && (!pUser_read_buf))
- pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf);
-
- return status == TINFL_STATUS_DONE;
-}
-
-mz_bool mz_zip_reader_extract_to_mem_no_alloc(
- mz_zip_archive *pZip, mz_uint file_index, void *pBuf,
- size_t buf_size, mz_uint flags, void *pUser_read_buf,
- size_t user_read_buf_size) {
- return mz_zip_reader_extract_to_mem_no_alloc1(
- pZip, file_index, pBuf, buf_size, flags, pUser_read_buf,
- user_read_buf_size, NULL);
-}
-
-mz_bool mz_zip_reader_extract_file_to_mem_no_alloc(
- mz_zip_archive *pZip, const char *pFilename, void *pBuf,
- size_t buf_size, mz_uint flags, void *pUser_read_buf,
- size_t user_read_buf_size) {
- mz_uint32 file_index;
- if (!mz_zip_reader_locate_file_v2(pZip, pFilename, NULL, flags,
- &file_index))
- return MZ_FALSE;
- return mz_zip_reader_extract_to_mem_no_alloc1(
- pZip, file_index, pBuf, buf_size, flags, pUser_read_buf,
- user_read_buf_size, NULL);
-}
-
-mz_bool mz_zip_reader_extract_to_mem(mz_zip_archive *pZip,
- mz_uint file_index, void *pBuf,
- size_t buf_size, mz_uint flags) {
- return mz_zip_reader_extract_to_mem_no_alloc1(
- pZip, file_index, pBuf, buf_size, flags, NULL, 0, NULL);
-}
-
-mz_bool mz_zip_reader_extract_file_to_mem(mz_zip_archive *pZip,
- const char *pFilename,
- void *pBuf, size_t buf_size,
- mz_uint flags) {
- return mz_zip_reader_extract_file_to_mem_no_alloc(
- pZip, pFilename, pBuf, buf_size, flags, NULL, 0);
-}
-
-void *mz_zip_reader_extract_to_heap(mz_zip_archive *pZip,
- mz_uint file_index, size_t *pSize,
- mz_uint flags) {
- mz_zip_archive_file_stat file_stat;
- mz_uint64 alloc_size;
- void *pBuf;
-
- if (pSize)
- *pSize = 0;
-
- if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat))
- return NULL;
-
- alloc_size = (flags & MZ_ZIP_FLAG_COMPRESSED_DATA)
- ? file_stat.m_comp_size
- : file_stat.m_uncomp_size;
- if (((sizeof(size_t) == sizeof(mz_uint32))) &&
- (alloc_size > 0x7FFFFFFF)) {
- mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR);
- return NULL;
- }
-
- if (NULL == (pBuf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1,
- (size_t) alloc_size))) {
- mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
- return NULL;
- }
-
- if (!mz_zip_reader_extract_to_mem_no_alloc1(
- pZip, file_index, pBuf, (size_t) alloc_size, flags, NULL, 0,
- &file_stat)) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf);
- return NULL;
- }
-
- if (pSize)
- *pSize = (size_t) alloc_size;
- return pBuf;
-}
-
-void *mz_zip_reader_extract_file_to_heap(mz_zip_archive *pZip,
- const char *pFilename,
- size_t *pSize,
- mz_uint flags) {
- mz_uint32 file_index;
- if (!mz_zip_reader_locate_file_v2(pZip, pFilename, NULL, flags,
- &file_index)) {
- if (pSize)
- *pSize = 0;
- return MZ_FALSE;
- }
- return mz_zip_reader_extract_to_heap(pZip, file_index, pSize,
- flags);
-}
-
-mz_bool mz_zip_reader_extract_to_callback(
- mz_zip_archive *pZip, mz_uint file_index,
- mz_file_write_func pCallback, void *pOpaque, mz_uint flags) {
- int status = TINFL_STATUS_DONE;
-# ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS
- mz_uint file_crc32 = MZ_CRC32_INIT;
-# endif
- mz_uint64 read_buf_size, read_buf_ofs = 0, read_buf_avail,
- comp_remaining, out_buf_ofs = 0,
- cur_file_ofs;
- mz_zip_archive_file_stat file_stat;
- void *pRead_buf = NULL;
- void *pWrite_buf = NULL;
- mz_uint32 local_header_u32[(MZ_ZIP_LOCAL_DIR_HEADER_SIZE +
- sizeof(mz_uint32) - 1) /
- sizeof(mz_uint32)];
- mz_uint8 *pLocal_header = (mz_uint8 *) local_header_u32;
-
- if ((!pZip) || (!pZip->m_pState) || (!pCallback) ||
- (!pZip->m_pRead))
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
-
- if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat))
- return MZ_FALSE;
-
- /* A directory or zero length file */
- if ((file_stat.m_is_directory) || (!file_stat.m_comp_size))
- return MZ_TRUE;
-
- /* Encryption and patch files are not supported. */
- if (file_stat.m_bit_flag &
- (MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_IS_ENCRYPTED |
- MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_USES_STRONG_ENCRYPTION |
- MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_COMPRESSED_PATCH_FLAG))
- return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_ENCRYPTION);
-
- /* This function only supports decompressing stored and deflate. */
- if ((!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) &&
- (file_stat.m_method != 0) &&
- (file_stat.m_method != MZ_DEFLATED))
- return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_METHOD);
-
- /* Read and do some minimal validation of the local directory entry
- * (this doesn't crack the zip64 stuff, which we already have from
- * the central dir) */
- cur_file_ofs = file_stat.m_local_header_ofs;
- if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pLocal_header,
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE) !=
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE)
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED);
-
- if (MZ_READ_LE32(pLocal_header) != MZ_ZIP_LOCAL_DIR_HEADER_SIG)
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-
- cur_file_ofs +=
- (mz_uint64) (MZ_ZIP_LOCAL_DIR_HEADER_SIZE) +
- MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_FILENAME_LEN_OFS) +
- MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_EXTRA_LEN_OFS);
- if ((cur_file_ofs + file_stat.m_comp_size) > pZip->m_archive_size)
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-
- /* Decompress the file either directly from memory or from a file
- * input buffer. */
- if (pZip->m_pState->m_pMem) {
- pRead_buf = (mz_uint8 *) pZip->m_pState->m_pMem + cur_file_ofs;
- read_buf_size = read_buf_avail = file_stat.m_comp_size;
- comp_remaining = 0;
- } else {
- read_buf_size = MZ_MIN(file_stat.m_comp_size,
- (mz_uint64) MZ_ZIP_MAX_IO_BUF_SIZE);
- if (NULL == (pRead_buf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1,
- (size_t) read_buf_size)))
- return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
-
- read_buf_avail = 0;
- comp_remaining = file_stat.m_comp_size;
- }
-
- if ((flags & MZ_ZIP_FLAG_COMPRESSED_DATA) ||
- (!file_stat.m_method)) {
- /* The file is stored or the caller has requested the compressed
- * data. */
- if (pZip->m_pState->m_pMem) {
- if (((sizeof(size_t) == sizeof(mz_uint32))) &&
- (file_stat.m_comp_size > MZ_UINT32_MAX))
- return mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR);
-
- if (pCallback(pOpaque, out_buf_ofs, pRead_buf,
- (size_t) file_stat.m_comp_size) !=
- file_stat.m_comp_size) {
- mz_zip_set_error(pZip, MZ_ZIP_WRITE_CALLBACK_FAILED);
- status = TINFL_STATUS_FAILED;
- } else if (!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) {
-# ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS
- file_crc32 = (mz_uint32) mz_crc32(
- file_crc32, (const mz_uint8 *) pRead_buf,
- (size_t) file_stat.m_comp_size);
-# endif
- }
-
- cur_file_ofs += file_stat.m_comp_size;
- out_buf_ofs += file_stat.m_comp_size;
- comp_remaining = 0;
- } else {
- while (comp_remaining) {
- read_buf_avail = MZ_MIN(read_buf_size, comp_remaining);
- if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pRead_buf,
- (size_t) read_buf_avail) !=
- read_buf_avail) {
- mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED);
- status = TINFL_STATUS_FAILED;
- break;
- }
-
-# ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS
- if (!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) {
- file_crc32 = (mz_uint32) mz_crc32(
- file_crc32, (const mz_uint8 *) pRead_buf,
- (size_t) read_buf_avail);
- }
-# endif
-
- if (pCallback(pOpaque, out_buf_ofs, pRead_buf,
- (size_t) read_buf_avail) != read_buf_avail) {
- mz_zip_set_error(pZip, MZ_ZIP_WRITE_CALLBACK_FAILED);
- status = TINFL_STATUS_FAILED;
- break;
- }
-
- cur_file_ofs += read_buf_avail;
- out_buf_ofs += read_buf_avail;
- comp_remaining -= read_buf_avail;
- }
- }
- } else {
- tinfl_decompressor inflator;
- tinfl_init(&inflator);
-
- if (NULL == (pWrite_buf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1,
- TINFL_LZ_DICT_SIZE))) {
- mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
- status = TINFL_STATUS_FAILED;
- } else {
- do {
- mz_uint8 *pWrite_buf_cur = (mz_uint8 *) pWrite_buf +
- (out_buf_ofs &
- (TINFL_LZ_DICT_SIZE - 1));
- size_t in_buf_size,
- out_buf_size = TINFL_LZ_DICT_SIZE -
- (out_buf_ofs & (TINFL_LZ_DICT_SIZE - 1));
- if ((!read_buf_avail) && (!pZip->m_pState->m_pMem)) {
- read_buf_avail = MZ_MIN(read_buf_size, comp_remaining);
- if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs,
- pRead_buf, (size_t) read_buf_avail) !=
- read_buf_avail) {
- mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED);
- status = TINFL_STATUS_FAILED;
- break;
- }
- cur_file_ofs += read_buf_avail;
- comp_remaining -= read_buf_avail;
- read_buf_ofs = 0;
- }
-
- in_buf_size = (size_t) read_buf_avail;
- status = tinfl_decompress(
- &inflator, (const mz_uint8 *) pRead_buf + read_buf_ofs,
- &in_buf_size, (mz_uint8 *) pWrite_buf, pWrite_buf_cur,
- &out_buf_size,
- comp_remaining ? TINFL_FLAG_HAS_MORE_INPUT : 0);
- read_buf_avail -= in_buf_size;
- read_buf_ofs += in_buf_size;
-
- if (out_buf_size) {
- if (pCallback(pOpaque, out_buf_ofs, pWrite_buf_cur,
- out_buf_size) != out_buf_size) {
- mz_zip_set_error(pZip, MZ_ZIP_WRITE_CALLBACK_FAILED);
- status = TINFL_STATUS_FAILED;
- break;
- }
-
-# ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS
- file_crc32 = (mz_uint32) mz_crc32(
- file_crc32, pWrite_buf_cur, out_buf_size);
-# endif
- if ((out_buf_ofs += out_buf_size) >
- file_stat.m_uncomp_size) {
- mz_zip_set_error(pZip, MZ_ZIP_DECOMPRESSION_FAILED);
- status = TINFL_STATUS_FAILED;
- break;
- }
- }
- } while ((status == TINFL_STATUS_NEEDS_MORE_INPUT) ||
- (status == TINFL_STATUS_HAS_MORE_OUTPUT));
- }
- }
-
- if ((status == TINFL_STATUS_DONE) &&
- (!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA))) {
- /* Make sure the entire file was decompressed, and check its CRC.
- */
- if (out_buf_ofs != file_stat.m_uncomp_size) {
- mz_zip_set_error(pZip, MZ_ZIP_UNEXPECTED_DECOMPRESSED_SIZE);
- status = TINFL_STATUS_FAILED;
- }
-# ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS
- else if (file_crc32 != file_stat.m_crc32) {
- mz_zip_set_error(pZip, MZ_ZIP_DECOMPRESSION_FAILED);
- status = TINFL_STATUS_FAILED;
- }
-# endif
- }
-
- if (!pZip->m_pState->m_pMem)
- pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf);
-
- if (pWrite_buf)
- pZip->m_pFree(pZip->m_pAlloc_opaque, pWrite_buf);
-
- return status == TINFL_STATUS_DONE;
-}
-
-mz_bool mz_zip_reader_extract_file_to_callback(
- mz_zip_archive *pZip, const char *pFilename,
- mz_file_write_func pCallback, void *pOpaque, mz_uint flags) {
- mz_uint32 file_index;
- if (!mz_zip_reader_locate_file_v2(pZip, pFilename, NULL, flags,
- &file_index))
- return MZ_FALSE;
-
- return mz_zip_reader_extract_to_callback(pZip, file_index,
- pCallback, pOpaque, flags);
-}
-
-mz_zip_reader_extract_iter_state *mz_zip_reader_extract_iter_new(
- mz_zip_archive *pZip, mz_uint file_index, mz_uint flags) {
- mz_zip_reader_extract_iter_state *pState;
- mz_uint32 local_header_u32[(MZ_ZIP_LOCAL_DIR_HEADER_SIZE +
- sizeof(mz_uint32) - 1) /
- sizeof(mz_uint32)];
- mz_uint8 *pLocal_header = (mz_uint8 *) local_header_u32;
-
- /* Argument sanity check */
- if ((!pZip) || (!pZip->m_pState))
- return NULL;
-
- /* Allocate an iterator status structure */
- pState = (mz_zip_reader_extract_iter_state *) pZip->m_pAlloc(
- pZip->m_pAlloc_opaque, 1,
- sizeof(mz_zip_reader_extract_iter_state));
- if (!pState) {
- mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
- return NULL;
- }
-
- /* Fetch file details */
- if (!mz_zip_reader_file_stat(pZip, file_index,
- &pState->file_stat)) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pState);
- return NULL;
- }
-
- /* Encryption and patch files are not supported. */
- if (pState->file_stat.m_bit_flag &
- (MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_IS_ENCRYPTED |
- MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_USES_STRONG_ENCRYPTION |
- MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_COMPRESSED_PATCH_FLAG)) {
- mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_ENCRYPTION);
- pZip->m_pFree(pZip->m_pAlloc_opaque, pState);
- return NULL;
- }
-
- /* This function only supports decompressing stored and deflate. */
- if ((!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) &&
- (pState->file_stat.m_method != 0) &&
- (pState->file_stat.m_method != MZ_DEFLATED)) {
- mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_METHOD);
- pZip->m_pFree(pZip->m_pAlloc_opaque, pState);
- return NULL;
- }
-
- /* Init state - save args */
- pState->pZip = pZip;
- pState->flags = flags;
-
- /* Init state - reset variables to defaults */
- pState->status = TINFL_STATUS_DONE;
-# ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS
- pState->file_crc32 = MZ_CRC32_INIT;
-# endif
- pState->read_buf_ofs = 0;
- pState->out_buf_ofs = 0;
- pState->pRead_buf = NULL;
- pState->pWrite_buf = NULL;
- pState->out_blk_remain = 0;
-
- /* Read and parse the local directory entry. */
- pState->cur_file_ofs = pState->file_stat.m_local_header_ofs;
- if (pZip->m_pRead(pZip->m_pIO_opaque, pState->cur_file_ofs,
- pLocal_header, MZ_ZIP_LOCAL_DIR_HEADER_SIZE) !=
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE) {
- mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED);
- pZip->m_pFree(pZip->m_pAlloc_opaque, pState);
- return NULL;
- }
-
- if (MZ_READ_LE32(pLocal_header) != MZ_ZIP_LOCAL_DIR_HEADER_SIG) {
- mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
- pZip->m_pFree(pZip->m_pAlloc_opaque, pState);
- return NULL;
- }
-
- pState->cur_file_ofs +=
- (mz_uint64) (MZ_ZIP_LOCAL_DIR_HEADER_SIZE) +
- MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_FILENAME_LEN_OFS) +
- MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_EXTRA_LEN_OFS);
- if ((pState->cur_file_ofs + pState->file_stat.m_comp_size) >
- pZip->m_archive_size) {
- mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
- pZip->m_pFree(pZip->m_pAlloc_opaque, pState);
- return NULL;
- }
-
- /* Decompress the file either directly from memory or from a file
- * input buffer. */
- if (pZip->m_pState->m_pMem) {
- pState->pRead_buf = (mz_uint8 *) pZip->m_pState->m_pMem +
- pState->cur_file_ofs;
- pState->read_buf_size = pState->read_buf_avail =
- pState->file_stat.m_comp_size;
- pState->comp_remaining = pState->file_stat.m_comp_size;
- } else {
- if (!((flags & MZ_ZIP_FLAG_COMPRESSED_DATA) ||
- (!pState->file_stat.m_method))) {
- /* Decompression required, therefore intermediate read buffer
- * required */
- pState->read_buf_size = MZ_MIN(
- pState->file_stat.m_comp_size,
- (mz_uint64) MZ_ZIP_MAX_IO_BUF_SIZE);
- if (NULL == (pState->pRead_buf = pZip->m_pAlloc(
- pZip->m_pAlloc_opaque, 1,
- (size_t) pState->read_buf_size))) {
- mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
- pZip->m_pFree(pZip->m_pAlloc_opaque, pState);
- return NULL;
- }
- } else {
- /* Decompression not required - we will be reading directly into
- * user buffer, no temp buf required */
- pState->read_buf_size = 0;
- }
- pState->read_buf_avail = 0;
- pState->comp_remaining = pState->file_stat.m_comp_size;
- }
-
- if (!((flags & MZ_ZIP_FLAG_COMPRESSED_DATA) ||
- (!pState->file_stat.m_method))) {
- /* Decompression required, init decompressor */
- tinfl_init(&pState->inflator);
-
- /* Allocate write buffer */
- if (NULL == (pState->pWrite_buf = pZip->m_pAlloc(
- pZip->m_pAlloc_opaque, 1, TINFL_LZ_DICT_SIZE))) {
- mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
- if (pState->pRead_buf)
- pZip->m_pFree(pZip->m_pAlloc_opaque, pState->pRead_buf);
- pZip->m_pFree(pZip->m_pAlloc_opaque, pState);
- return NULL;
- }
- }
-
- return pState;
-}
-
-mz_zip_reader_extract_iter_state *mz_zip_reader_extract_file_iter_new(
- mz_zip_archive *pZip, const char *pFilename, mz_uint flags) {
- mz_uint32 file_index;
-
- /* Locate file index by name */
- if (!mz_zip_reader_locate_file_v2(pZip, pFilename, NULL, flags,
- &file_index))
- return NULL;
-
- /* Construct iterator */
- return mz_zip_reader_extract_iter_new(pZip, file_index, flags);
-}
-
-size_t mz_zip_reader_extract_iter_read(
- mz_zip_reader_extract_iter_state *pState, void *pvBuf,
- size_t buf_size) {
- size_t copied_to_caller = 0;
-
- /* Argument sanity check */
- if ((!pState) || (!pState->pZip) || (!pState->pZip->m_pState) ||
- (!pvBuf))
- return 0;
-
- if ((pState->flags & MZ_ZIP_FLAG_COMPRESSED_DATA) ||
- (!pState->file_stat.m_method)) {
- /* The file is stored or the caller has requested the compressed
- * data, calc amount to return. */
- copied_to_caller = (size_t) MZ_MIN(buf_size,
- pState->comp_remaining);
-
- /* Zip is in memory....or requires reading from a file? */
- if (pState->pZip->m_pState->m_pMem) {
- /* Copy data to caller's buffer */
- memcpy(pvBuf, pState->pRead_buf, copied_to_caller);
- pState->pRead_buf = ((mz_uint8 *) pState->pRead_buf) +
- copied_to_caller;
- } else {
- /* Read directly into caller's buffer */
- if (pState->pZip->m_pRead(
- pState->pZip->m_pIO_opaque, pState->cur_file_ofs, pvBuf,
- copied_to_caller) != copied_to_caller) {
- /* Failed to read all that was asked for, flag failure and
- * alert user */
- mz_zip_set_error(pState->pZip, MZ_ZIP_FILE_READ_FAILED);
- pState->status = TINFL_STATUS_FAILED;
- copied_to_caller = 0;
- }
- }
-
-# ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS
- /* Compute CRC if not returning compressed data only */
- if (!(pState->flags & MZ_ZIP_FLAG_COMPRESSED_DATA))
- pState->file_crc32 = (mz_uint32) mz_crc32(
- pState->file_crc32, (const mz_uint8 *) pvBuf,
- copied_to_caller);
-# endif
-
- /* Advance offsets, dec counters */
- pState->cur_file_ofs += copied_to_caller;
- pState->out_buf_ofs += copied_to_caller;
- pState->comp_remaining -= copied_to_caller;
- } else {
- do {
- /* Calc ptr to write buffer - given current output pos and block
- * size */
- mz_uint8 *pWrite_buf_cur = (mz_uint8 *) pState->pWrite_buf +
- (pState->out_buf_ofs &
- (TINFL_LZ_DICT_SIZE - 1));
-
- /* Calc max output size - given current output pos and block
- * size */
- size_t in_buf_size, out_buf_size = TINFL_LZ_DICT_SIZE -
- (pState->out_buf_ofs &
- (TINFL_LZ_DICT_SIZE - 1));
-
- if (!pState->out_blk_remain) {
- /* Read more data from file if none available (and reading
- * from file) */
- if ((!pState->read_buf_avail) &&
- (!pState->pZip->m_pState->m_pMem)) {
- /* Calc read size */
- pState->read_buf_avail = MZ_MIN(pState->read_buf_size,
- pState->comp_remaining);
- if (pState->pZip->m_pRead(
- pState->pZip->m_pIO_opaque, pState->cur_file_ofs,
- pState->pRead_buf,
- (size_t) pState->read_buf_avail) !=
- pState->read_buf_avail) {
- mz_zip_set_error(pState->pZip, MZ_ZIP_FILE_READ_FAILED);
- pState->status = TINFL_STATUS_FAILED;
- break;
- }
-
- /* Advance offsets, dec counters */
- pState->cur_file_ofs += pState->read_buf_avail;
- pState->comp_remaining -= pState->read_buf_avail;
- pState->read_buf_ofs = 0;
- }
-
- /* Perform decompression */
- in_buf_size = (size_t) pState->read_buf_avail;
- pState->status = tinfl_decompress(
- &pState->inflator,
- (const mz_uint8 *) pState->pRead_buf +
- pState->read_buf_ofs,
- &in_buf_size, (mz_uint8 *) pState->pWrite_buf,
- pWrite_buf_cur, &out_buf_size,
- pState->comp_remaining ? TINFL_FLAG_HAS_MORE_INPUT : 0);
- pState->read_buf_avail -= in_buf_size;
- pState->read_buf_ofs += in_buf_size;
-
- /* Update current output block size remaining */
- pState->out_blk_remain = out_buf_size;
- }
-
- if (pState->out_blk_remain) {
- /* Calc amount to return. */
- size_t to_copy = MZ_MIN((buf_size - copied_to_caller),
- pState->out_blk_remain);
-
- /* Copy data to caller's buffer */
- memcpy((mz_uint8 *) pvBuf + copied_to_caller, pWrite_buf_cur,
- to_copy);
-
-# ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS
- /* Perform CRC */
- pState->file_crc32 = (mz_uint32) mz_crc32(
- pState->file_crc32, pWrite_buf_cur, to_copy);
-# endif
-
- /* Decrement data consumed from block */
- pState->out_blk_remain -= to_copy;
-
- /* Inc output offset, while performing sanity check */
- if ((pState->out_buf_ofs += to_copy) >
- pState->file_stat.m_uncomp_size) {
- mz_zip_set_error(pState->pZip, MZ_ZIP_DECOMPRESSION_FAILED);
- pState->status = TINFL_STATUS_FAILED;
- break;
- }
-
- /* Increment counter of data copied to caller */
- copied_to_caller += to_copy;
- }
- } while ((copied_to_caller < buf_size) &&
- ((pState->status == TINFL_STATUS_NEEDS_MORE_INPUT) ||
- (pState->status == TINFL_STATUS_HAS_MORE_OUTPUT)));
- }
-
- /* Return how many bytes were copied into user buffer */
- return copied_to_caller;
-}
-
-mz_bool mz_zip_reader_extract_iter_free(
- mz_zip_reader_extract_iter_state *pState) {
- int status;
-
- /* Argument sanity check */
- if ((!pState) || (!pState->pZip) || (!pState->pZip->m_pState))
- return MZ_FALSE;
-
- /* Was decompression completed and requested? */
- if ((pState->status == TINFL_STATUS_DONE) &&
- (!(pState->flags & MZ_ZIP_FLAG_COMPRESSED_DATA))) {
- /* Make sure the entire file was decompressed, and check its CRC.
- */
- if (pState->out_buf_ofs != pState->file_stat.m_uncomp_size) {
- mz_zip_set_error(pState->pZip,
- MZ_ZIP_UNEXPECTED_DECOMPRESSED_SIZE);
- pState->status = TINFL_STATUS_FAILED;
- }
-# ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS
- else if (pState->file_crc32 != pState->file_stat.m_crc32) {
- mz_zip_set_error(pState->pZip, MZ_ZIP_DECOMPRESSION_FAILED);
- pState->status = TINFL_STATUS_FAILED;
- }
-# endif
- }
-
- /* Free buffers */
- if (!pState->pZip->m_pState->m_pMem)
- pState->pZip->m_pFree(pState->pZip->m_pAlloc_opaque,
- pState->pRead_buf);
- if (pState->pWrite_buf)
- pState->pZip->m_pFree(pState->pZip->m_pAlloc_opaque,
- pState->pWrite_buf);
-
- /* Save status */
- status = pState->status;
-
- /* Free context */
- pState->pZip->m_pFree(pState->pZip->m_pAlloc_opaque, pState);
-
- return status == TINFL_STATUS_DONE;
-}
-
-# ifndef MINIZ_NO_STDIO
-static size_t mz_zip_file_write_callback(void *pOpaque, mz_uint64 ofs,
- const void *pBuf, size_t n) {
- (void) ofs;
-
- return MZ_FWRITE(pBuf, 1, n, (MZ_FILE *) pOpaque);
-}
-
-mz_bool mz_zip_reader_extract_to_file(mz_zip_archive *pZip,
- mz_uint file_index,
- const char *pDst_filename,
- mz_uint flags) {
- mz_bool status;
- mz_zip_archive_file_stat file_stat;
- MZ_FILE *pFile;
-
- if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat))
- return MZ_FALSE;
-
- if ((file_stat.m_is_directory) || (!file_stat.m_is_supported))
- return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_FEATURE);
-
- pFile = MZ_FOPEN(pDst_filename, "wb");
- if (!pFile)
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_OPEN_FAILED);
-
- status = mz_zip_reader_extract_to_callback(
- pZip, file_index, mz_zip_file_write_callback, pFile, flags);
-
- if (MZ_FCLOSE(pFile) == EOF) {
- if (status)
- mz_zip_set_error(pZip, MZ_ZIP_FILE_CLOSE_FAILED);
-
- status = MZ_FALSE;
- }
-
-# if !defined(MINIZ_NO_TIME) && !defined(MINIZ_NO_STDIO)
- if (status)
- mz_zip_set_file_times(pDst_filename, file_stat.m_time,
- file_stat.m_time);
-# endif
-
- return status;
-}
-
-mz_bool mz_zip_reader_extract_file_to_file(
- mz_zip_archive *pZip, const char *pArchive_filename,
- const char *pDst_filename, mz_uint flags) {
- mz_uint32 file_index;
- if (!mz_zip_reader_locate_file_v2(pZip, pArchive_filename, NULL,
- flags, &file_index))
- return MZ_FALSE;
-
- return mz_zip_reader_extract_to_file(pZip, file_index,
- pDst_filename, flags);
-}
-
-mz_bool mz_zip_reader_extract_to_cfile(mz_zip_archive *pZip,
- mz_uint file_index,
- MZ_FILE *pFile,
- mz_uint flags) {
- mz_zip_archive_file_stat file_stat;
-
- if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat))
- return MZ_FALSE;
-
- if ((file_stat.m_is_directory) || (!file_stat.m_is_supported))
- return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_FEATURE);
-
- return mz_zip_reader_extract_to_callback(
- pZip, file_index, mz_zip_file_write_callback, pFile, flags);
-}
-
-mz_bool mz_zip_reader_extract_file_to_cfile(
- mz_zip_archive *pZip, const char *pArchive_filename,
- MZ_FILE *pFile, mz_uint flags) {
- mz_uint32 file_index;
- if (!mz_zip_reader_locate_file_v2(pZip, pArchive_filename, NULL,
- flags, &file_index))
- return MZ_FALSE;
-
- return mz_zip_reader_extract_to_cfile(pZip, file_index, pFile,
- flags);
-}
-# endif /* #ifndef MINIZ_NO_STDIO */
-
-static size_t mz_zip_compute_crc32_callback(void *pOpaque,
- mz_uint64 file_ofs,
- const void *pBuf,
- size_t n) {
- mz_uint32 *p = (mz_uint32 *) pOpaque;
- (void) file_ofs;
- *p = (mz_uint32) mz_crc32(*p, (const mz_uint8 *) pBuf, n);
- return n;
-}
-
-mz_bool mz_zip_validate_file(mz_zip_archive *pZip, mz_uint file_index,
- mz_uint flags) {
- mz_zip_archive_file_stat file_stat;
- mz_zip_internal_state *pState;
- const mz_uint8 *pCentral_dir_header;
- mz_bool found_zip64_ext_data_in_cdir = MZ_FALSE;
- mz_bool found_zip64_ext_data_in_ldir = MZ_FALSE;
- mz_uint32 local_header_u32[(MZ_ZIP_LOCAL_DIR_HEADER_SIZE +
- sizeof(mz_uint32) - 1) /
- sizeof(mz_uint32)];
- mz_uint8 *pLocal_header = (mz_uint8 *) local_header_u32;
- mz_uint64 local_header_ofs = 0;
- mz_uint32 local_header_filename_len, local_header_extra_len,
- local_header_crc32;
- mz_uint64 local_header_comp_size, local_header_uncomp_size;
- mz_uint32 uncomp_crc32 = MZ_CRC32_INIT;
- mz_bool has_data_descriptor;
- mz_uint32 local_header_bit_flags;
-
- mz_zip_array file_data_array;
- mz_zip_array_init(&file_data_array, 1);
-
- if ((!pZip) || (!pZip->m_pState) || (!pZip->m_pAlloc) ||
- (!pZip->m_pFree) || (!pZip->m_pRead))
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
-
- if (file_index > pZip->m_total_files)
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
-
- pState = pZip->m_pState;
-
- pCentral_dir_header = mz_zip_get_cdh(pZip, file_index);
-
- if (!mz_zip_file_stat_internal(pZip, file_index,
- pCentral_dir_header, &file_stat,
- &found_zip64_ext_data_in_cdir))
- return MZ_FALSE;
-
- /* A directory or zero length file */
- if ((file_stat.m_is_directory) || (!file_stat.m_uncomp_size))
- return MZ_TRUE;
-
- /* Encryption and patch files are not supported. */
- if (file_stat.m_is_encrypted)
- return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_ENCRYPTION);
-
- /* This function only supports stored and deflate. */
- if ((file_stat.m_method != 0) &&
- (file_stat.m_method != MZ_DEFLATED))
- return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_METHOD);
-
- if (!file_stat.m_is_supported)
- return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_FEATURE);
-
- /* Read and parse the local directory entry. */
- local_header_ofs = file_stat.m_local_header_ofs;
- if (pZip->m_pRead(pZip->m_pIO_opaque, local_header_ofs,
- pLocal_header, MZ_ZIP_LOCAL_DIR_HEADER_SIZE) !=
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE)
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED);
-
- if (MZ_READ_LE32(pLocal_header) != MZ_ZIP_LOCAL_DIR_HEADER_SIG)
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-
- local_header_filename_len = MZ_READ_LE16(
- pLocal_header + MZ_ZIP_LDH_FILENAME_LEN_OFS);
- local_header_extra_len = MZ_READ_LE16(pLocal_header +
- MZ_ZIP_LDH_EXTRA_LEN_OFS);
- local_header_comp_size = MZ_READ_LE32(
- pLocal_header + MZ_ZIP_LDH_COMPRESSED_SIZE_OFS);
- local_header_uncomp_size = MZ_READ_LE32(
- pLocal_header + MZ_ZIP_LDH_DECOMPRESSED_SIZE_OFS);
- local_header_crc32 = MZ_READ_LE32(pLocal_header +
- MZ_ZIP_LDH_CRC32_OFS);
- local_header_bit_flags = MZ_READ_LE16(pLocal_header +
- MZ_ZIP_LDH_BIT_FLAG_OFS);
- has_data_descriptor = (local_header_bit_flags & 8) != 0;
-
- if (local_header_filename_len != strlen(file_stat.m_filename))
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-
- if ((local_header_ofs + MZ_ZIP_LOCAL_DIR_HEADER_SIZE +
- local_header_filename_len + local_header_extra_len +
- file_stat.m_comp_size) > pZip->m_archive_size)
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-
- if (!mz_zip_array_resize(
- pZip, &file_data_array,
- MZ_MAX(local_header_filename_len, local_header_extra_len),
- MZ_FALSE)) {
- mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
- goto handle_failure;
- }
-
- if (local_header_filename_len) {
- if (pZip->m_pRead(pZip->m_pIO_opaque,
- local_header_ofs + MZ_ZIP_LOCAL_DIR_HEADER_SIZE,
- file_data_array.m_p,
- local_header_filename_len) !=
- local_header_filename_len) {
- mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED);
- goto handle_failure;
- }
-
- /* I've seen 1 archive that had the same pathname, but used
- * backslashes in the local dir and forward slashes in the central
- * dir. Do we care about this? For now, this case will fail
- * validation. */
- if (memcmp(file_stat.m_filename, file_data_array.m_p,
- local_header_filename_len) != 0) {
- mz_zip_set_error(pZip, MZ_ZIP_VALIDATION_FAILED);
- goto handle_failure;
- }
- }
-
- if ((local_header_extra_len) &&
- ((local_header_comp_size == MZ_UINT32_MAX) ||
- (local_header_uncomp_size == MZ_UINT32_MAX))) {
- mz_uint32 extra_size_remaining = local_header_extra_len;
- const mz_uint8 *pExtra_data = (const mz_uint8 *)
- file_data_array.m_p;
-
- if (pZip->m_pRead(pZip->m_pIO_opaque,
- local_header_ofs +
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE +
- local_header_filename_len,
- file_data_array.m_p, local_header_extra_len) !=
- local_header_extra_len) {
- mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED);
- goto handle_failure;
- }
-
- do {
- mz_uint32 field_id, field_data_size, field_total_size;
-
- if (extra_size_remaining < (sizeof(mz_uint16) * 2)) {
- mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
- goto handle_failure;
- }
-
- field_id = MZ_READ_LE16(pExtra_data);
- field_data_size = MZ_READ_LE16(pExtra_data + sizeof(mz_uint16));
- field_total_size = field_data_size + sizeof(mz_uint16) * 2;
-
- if (field_total_size > extra_size_remaining) {
- mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
- goto handle_failure;
- }
-
- if (field_id == MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID) {
- const mz_uint8 *pSrc_field_data = pExtra_data +
- sizeof(mz_uint32);
-
- if (field_data_size < sizeof(mz_uint64) * 2) {
- mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
- goto handle_failure;
- }
-
- local_header_uncomp_size = MZ_READ_LE64(pSrc_field_data);
- local_header_comp_size = MZ_READ_LE64(pSrc_field_data +
- sizeof(mz_uint64));
-
- found_zip64_ext_data_in_ldir = MZ_TRUE;
- break;
- }
-
- pExtra_data += field_total_size;
- extra_size_remaining -= field_total_size;
- } while (extra_size_remaining);
- }
-
- /* TODO: parse local header extra data when local_header_comp_size
- * is 0xFFFFFFFF! (big_descriptor.zip) */
- /* I've seen zips in the wild with the data descriptor bit set, but
- * proper local header values and bogus data descriptors */
- if ((has_data_descriptor) && (!local_header_comp_size) &&
- (!local_header_crc32)) {
- mz_uint8 descriptor_buf[32];
- mz_bool has_id;
- const mz_uint8 *pSrc;
- mz_uint32 file_crc32;
- mz_uint64 comp_size = 0, uncomp_size = 0;
-
- mz_uint32 num_descriptor_uint32s =
- ((pState->m_zip64) || (found_zip64_ext_data_in_ldir)) ? 6 : 4;
-
- if (pZip->m_pRead(
- pZip->m_pIO_opaque,
- local_header_ofs + MZ_ZIP_LOCAL_DIR_HEADER_SIZE +
- local_header_filename_len + local_header_extra_len +
- file_stat.m_comp_size,
- descriptor_buf,
- sizeof(mz_uint32) * num_descriptor_uint32s) !=
- (sizeof(mz_uint32) * num_descriptor_uint32s)) {
- mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED);
- goto handle_failure;
- }
-
- has_id = (MZ_READ_LE32(descriptor_buf) ==
- MZ_ZIP_DATA_DESCRIPTOR_ID);
- pSrc = has_id ? (descriptor_buf + sizeof(mz_uint32))
- : descriptor_buf;
-
- file_crc32 = MZ_READ_LE32(pSrc);
-
- if ((pState->m_zip64) || (found_zip64_ext_data_in_ldir)) {
- comp_size = MZ_READ_LE64(pSrc + sizeof(mz_uint32));
- uncomp_size = MZ_READ_LE64(pSrc + sizeof(mz_uint32) +
- sizeof(mz_uint64));
- } else {
- comp_size = MZ_READ_LE32(pSrc + sizeof(mz_uint32));
- uncomp_size = MZ_READ_LE32(pSrc + sizeof(mz_uint32) +
- sizeof(mz_uint32));
- }
-
- if ((file_crc32 != file_stat.m_crc32) ||
- (comp_size != file_stat.m_comp_size) ||
- (uncomp_size != file_stat.m_uncomp_size)) {
- mz_zip_set_error(pZip, MZ_ZIP_VALIDATION_FAILED);
- goto handle_failure;
- }
- } else {
- if ((local_header_crc32 != file_stat.m_crc32) ||
- (local_header_comp_size != file_stat.m_comp_size) ||
- (local_header_uncomp_size != file_stat.m_uncomp_size)) {
- mz_zip_set_error(pZip, MZ_ZIP_VALIDATION_FAILED);
- goto handle_failure;
- }
- }
-
- mz_zip_array_clear(pZip, &file_data_array);
-
- if ((flags & MZ_ZIP_FLAG_VALIDATE_HEADERS_ONLY) == 0) {
- if (!mz_zip_reader_extract_to_callback(
- pZip, file_index, mz_zip_compute_crc32_callback,
- &uncomp_crc32, 0))
- return MZ_FALSE;
-
- /* 1 more check to be sure, although the extract checks too. */
- if (uncomp_crc32 != file_stat.m_crc32) {
- mz_zip_set_error(pZip, MZ_ZIP_VALIDATION_FAILED);
- return MZ_FALSE;
- }
- }
-
- return MZ_TRUE;
-
-handle_failure:
- mz_zip_array_clear(pZip, &file_data_array);
- return MZ_FALSE;
-}
-
-mz_bool mz_zip_validate_archive(mz_zip_archive *pZip, mz_uint flags) {
- mz_zip_internal_state *pState;
- mz_uint32 i;
-
- if ((!pZip) || (!pZip->m_pState) || (!pZip->m_pAlloc) ||
- (!pZip->m_pFree) || (!pZip->m_pRead))
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
-
- pState = pZip->m_pState;
-
- /* Basic sanity checks */
- if (!pState->m_zip64) {
- if (pZip->m_total_files > MZ_UINT16_MAX)
- return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE);
-
- if (pZip->m_archive_size > MZ_UINT32_MAX)
- return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE);
- } else {
- if (pState->m_central_dir.m_size >= MZ_UINT32_MAX)
- return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE);
- }
-
- for (i = 0; i < pZip->m_total_files; i++) {
- if (MZ_ZIP_FLAG_VALIDATE_LOCATE_FILE_FLAG & flags) {
- mz_uint32 found_index;
- mz_zip_archive_file_stat stat;
-
- if (!mz_zip_reader_file_stat(pZip, i, &stat))
- return MZ_FALSE;
-
- if (!mz_zip_reader_locate_file_v2(pZip, stat.m_filename, NULL,
- 0, &found_index))
- return MZ_FALSE;
-
- /* This check can fail if there are duplicate filenames in the
- * archive (which we don't check for when writing - that's up to
- * the user) */
- if (found_index != i)
- return mz_zip_set_error(pZip, MZ_ZIP_VALIDATION_FAILED);
- }
-
- if (!mz_zip_validate_file(pZip, i, flags))
- return MZ_FALSE;
- }
-
- return MZ_TRUE;
-}
-
-mz_bool mz_zip_validate_mem_archive(const void *pMem, size_t size,
- mz_uint flags,
- mz_zip_error *pErr) {
- mz_bool success = MZ_TRUE;
- mz_zip_archive zip;
- mz_zip_error actual_err = MZ_ZIP_NO_ERROR;
-
- if ((!pMem) || (!size)) {
- if (pErr)
- *pErr = MZ_ZIP_INVALID_PARAMETER;
- return MZ_FALSE;
- }
-
- mz_zip_zero_struct(&zip);
-
- if (!mz_zip_reader_init_mem(&zip, pMem, size, flags)) {
- if (pErr)
- *pErr = zip.m_last_error;
- return MZ_FALSE;
- }
-
- if (!mz_zip_validate_archive(&zip, flags)) {
- actual_err = zip.m_last_error;
- success = MZ_FALSE;
- }
-
- if (!mz_zip_reader_end_internal(&zip, success)) {
- if (!actual_err)
- actual_err = zip.m_last_error;
- success = MZ_FALSE;
- }
-
- if (pErr)
- *pErr = actual_err;
-
- return success;
-}
-
-# ifndef MINIZ_NO_STDIO
-mz_bool mz_zip_validate_file_archive(const char *pFilename,
- mz_uint flags,
- mz_zip_error *pErr) {
- mz_bool success = MZ_TRUE;
- mz_zip_archive zip;
- mz_zip_error actual_err = MZ_ZIP_NO_ERROR;
-
- if (!pFilename) {
- if (pErr)
- *pErr = MZ_ZIP_INVALID_PARAMETER;
- return MZ_FALSE;
- }
-
- mz_zip_zero_struct(&zip);
-
- if (!mz_zip_reader_init_file_v2(&zip, pFilename, flags, 0, 0)) {
- if (pErr)
- *pErr = zip.m_last_error;
- return MZ_FALSE;
- }
-
- if (!mz_zip_validate_archive(&zip, flags)) {
- actual_err = zip.m_last_error;
- success = MZ_FALSE;
- }
-
- if (!mz_zip_reader_end_internal(&zip, success)) {
- if (!actual_err)
- actual_err = zip.m_last_error;
- success = MZ_FALSE;
- }
-
- if (pErr)
- *pErr = actual_err;
-
- return success;
-}
-# endif /* #ifndef MINIZ_NO_STDIO */
-
-/* ------------------- .ZIP archive writing */
-
-# ifndef MINIZ_NO_ARCHIVE_WRITING_APIS
-
-static MZ_FORCEINLINE void mz_write_le16(mz_uint8 *p, mz_uint16 v) {
- p[0] = (mz_uint8) v;
- p[1] = (mz_uint8) (v >> 8);
-}
-static MZ_FORCEINLINE void mz_write_le32(mz_uint8 *p, mz_uint32 v) {
- p[0] = (mz_uint8) v;
- p[1] = (mz_uint8) (v >> 8);
- p[2] = (mz_uint8) (v >> 16);
- p[3] = (mz_uint8) (v >> 24);
-}
-static MZ_FORCEINLINE void mz_write_le64(mz_uint8 *p, mz_uint64 v) {
- mz_write_le32(p, (mz_uint32) v);
- mz_write_le32(p + sizeof(mz_uint32), (mz_uint32) (v >> 32));
-}
-
-# define MZ_WRITE_LE16(p, v) \
- mz_write_le16((mz_uint8 *) (p), (mz_uint16) (v))
-# define MZ_WRITE_LE32(p, v) \
- mz_write_le32((mz_uint8 *) (p), (mz_uint32) (v))
-# define MZ_WRITE_LE64(p, v) \
- mz_write_le64((mz_uint8 *) (p), (mz_uint64) (v))
-
-static size_t mz_zip_heap_write_func(void *pOpaque,
- mz_uint64 file_ofs,
- const void *pBuf, size_t n) {
- mz_zip_archive *pZip = (mz_zip_archive *) pOpaque;
- mz_zip_internal_state *pState = pZip->m_pState;
- mz_uint64 new_size = MZ_MAX(file_ofs + n, pState->m_mem_size);
-
- if (!n)
- return 0;
-
- /* An allocation this big is likely to just fail on 32-bit systems,
- * so don't even go there. */
- if ((sizeof(size_t) == sizeof(mz_uint32)) &&
- (new_size > 0x7FFFFFFF)) {
- mz_zip_set_error(pZip, MZ_ZIP_FILE_TOO_LARGE);
- return 0;
- }
-
- if (new_size > pState->m_mem_capacity) {
- void *pNew_block;
- size_t new_capacity = MZ_MAX(64, pState->m_mem_capacity);
-
- while (new_capacity < new_size) new_capacity *= 2;
-
- if (NULL == (pNew_block = pZip->m_pRealloc(pZip->m_pAlloc_opaque,
- pState->m_pMem, 1,
- new_capacity))) {
- mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
- return 0;
- }
-
- pState->m_pMem = pNew_block;
- pState->m_mem_capacity = new_capacity;
- }
- memcpy((mz_uint8 *) pState->m_pMem + file_ofs, pBuf, n);
- pState->m_mem_size = (size_t) new_size;
- return n;
-}
-
-static mz_bool mz_zip_writer_end_internal(mz_zip_archive *pZip,
- mz_bool set_last_error) {
- mz_zip_internal_state *pState;
- mz_bool status = MZ_TRUE;
-
- if ((!pZip) || (!pZip->m_pState) || (!pZip->m_pAlloc) ||
- (!pZip->m_pFree) ||
- ((pZip->m_zip_mode != MZ_ZIP_MODE_WRITING) &&
- (pZip->m_zip_mode !=
- MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED))) {
- if (set_last_error)
- mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
- return MZ_FALSE;
- }
-
- pState = pZip->m_pState;
- pZip->m_pState = NULL;
- mz_zip_array_clear(pZip, &pState->m_central_dir);
- mz_zip_array_clear(pZip, &pState->m_central_dir_offsets);
- mz_zip_array_clear(pZip, &pState->m_sorted_central_dir_offsets);
-
-# ifndef MINIZ_NO_STDIO
- if (pState->m_pFile) {
- if (pZip->m_zip_type == MZ_ZIP_TYPE_FILE) {
- if (MZ_FCLOSE(pState->m_pFile) == EOF) {
- if (set_last_error)
- mz_zip_set_error(pZip, MZ_ZIP_FILE_CLOSE_FAILED);
- status = MZ_FALSE;
- }
- }
-
- pState->m_pFile = NULL;
- }
-# endif /* #ifndef MINIZ_NO_STDIO */
-
- if ((pZip->m_pWrite == mz_zip_heap_write_func) &&
- (pState->m_pMem)) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pState->m_pMem);
- pState->m_pMem = NULL;
- }
-
- pZip->m_pFree(pZip->m_pAlloc_opaque, pState);
- pZip->m_zip_mode = MZ_ZIP_MODE_INVALID;
- return status;
-}
-
-mz_bool mz_zip_writer_init_v2(mz_zip_archive *pZip,
- mz_uint64 existing_size,
- mz_uint flags) {
- mz_bool zip64 = (flags & MZ_ZIP_FLAG_WRITE_ZIP64) != 0;
-
- if ((!pZip) || (pZip->m_pState) || (!pZip->m_pWrite) ||
- (pZip->m_zip_mode != MZ_ZIP_MODE_INVALID))
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
-
- if (flags & MZ_ZIP_FLAG_WRITE_ALLOW_READING) {
- if (!pZip->m_pRead)
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
- }
-
- if (pZip->m_file_offset_alignment) {
- /* Ensure user specified file offset alignment is a power of 2. */
- if (pZip->m_file_offset_alignment &
- (pZip->m_file_offset_alignment - 1))
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
- }
-
- if (!pZip->m_pAlloc)
- pZip->m_pAlloc = miniz_def_alloc_func;
- if (!pZip->m_pFree)
- pZip->m_pFree = miniz_def_free_func;
- if (!pZip->m_pRealloc)
- pZip->m_pRealloc = miniz_def_realloc_func;
-
- pZip->m_archive_size = existing_size;
- pZip->m_central_directory_file_ofs = 0;
- pZip->m_total_files = 0;
-
- if (NULL ==
- (pZip->m_pState = (mz_zip_internal_state *) pZip->m_pAlloc(
- pZip->m_pAlloc_opaque, 1, sizeof(mz_zip_internal_state))))
- return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
-
- memset(pZip->m_pState, 0, sizeof(mz_zip_internal_state));
-
- MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_central_dir,
- sizeof(mz_uint8));
- MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(
- &pZip->m_pState->m_central_dir_offsets, sizeof(mz_uint32));
- MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(
- &pZip->m_pState->m_sorted_central_dir_offsets,
- sizeof(mz_uint32));
-
- pZip->m_pState->m_zip64 = zip64;
- pZip->m_pState->m_zip64_has_extended_info_fields = zip64;
-
- pZip->m_zip_type = MZ_ZIP_TYPE_USER;
- pZip->m_zip_mode = MZ_ZIP_MODE_WRITING;
-
- return MZ_TRUE;
-}
-
-mz_bool mz_zip_writer_init(mz_zip_archive *pZip,
- mz_uint64 existing_size) {
- return mz_zip_writer_init_v2(pZip, existing_size, 0);
-}
-
-mz_bool mz_zip_writer_init_heap_v2(
- mz_zip_archive *pZip, size_t size_to_reserve_at_beginning,
- size_t initial_allocation_size, mz_uint flags) {
- pZip->m_pWrite = mz_zip_heap_write_func;
- pZip->m_pNeeds_keepalive = NULL;
-
- if (flags & MZ_ZIP_FLAG_WRITE_ALLOW_READING)
- pZip->m_pRead = mz_zip_mem_read_func;
-
- pZip->m_pIO_opaque = pZip;
-
- if (!mz_zip_writer_init_v2(pZip, size_to_reserve_at_beginning,
- flags))
- return MZ_FALSE;
-
- pZip->m_zip_type = MZ_ZIP_TYPE_HEAP;
-
- if (0 !=
- (initial_allocation_size = MZ_MAX(
- initial_allocation_size, size_to_reserve_at_beginning))) {
- if (NULL ==
- (pZip->m_pState->m_pMem = pZip->m_pAlloc(
- pZip->m_pAlloc_opaque, 1, initial_allocation_size))) {
- mz_zip_writer_end_internal(pZip, MZ_FALSE);
- return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
- }
- pZip->m_pState->m_mem_capacity = initial_allocation_size;
- }
-
- return MZ_TRUE;
-}
-
-mz_bool mz_zip_writer_init_heap(mz_zip_archive *pZip,
- size_t size_to_reserve_at_beginning,
- size_t initial_allocation_size) {
- return mz_zip_writer_init_heap_v2(
- pZip, size_to_reserve_at_beginning, initial_allocation_size, 0);
-}
-
-# ifndef MINIZ_NO_STDIO
-static size_t mz_zip_file_write_func(void *pOpaque,
- mz_uint64 file_ofs,
- const void *pBuf, size_t n) {
- mz_zip_archive *pZip = (mz_zip_archive *) pOpaque;
- mz_int64 cur_ofs = MZ_FTELL64(pZip->m_pState->m_pFile);
-
- file_ofs += pZip->m_pState->m_file_archive_start_ofs;
-
- if (((mz_int64) file_ofs < 0) ||
- (((cur_ofs != (mz_int64) file_ofs)) &&
- (MZ_FSEEK64(pZip->m_pState->m_pFile, (mz_int64) file_ofs,
- SEEK_SET)))) {
- mz_zip_set_error(pZip, MZ_ZIP_FILE_SEEK_FAILED);
- return 0;
- }
-
- return MZ_FWRITE(pBuf, 1, n, pZip->m_pState->m_pFile);
-}
-
-mz_bool mz_zip_writer_init_file(
- mz_zip_archive *pZip, const char *pFilename,
- mz_uint64 size_to_reserve_at_beginning) {
- return mz_zip_writer_init_file_v2(pZip, pFilename,
- size_to_reserve_at_beginning, 0);
-}
-
-mz_bool mz_zip_writer_init_file_v2(
- mz_zip_archive *pZip, const char *pFilename,
- mz_uint64 size_to_reserve_at_beginning, mz_uint flags) {
- MZ_FILE *pFile;
-
- pZip->m_pWrite = mz_zip_file_write_func;
- pZip->m_pNeeds_keepalive = NULL;
-
- if (flags & MZ_ZIP_FLAG_WRITE_ALLOW_READING)
- pZip->m_pRead = mz_zip_file_read_func;
-
- pZip->m_pIO_opaque = pZip;
-
- if (!mz_zip_writer_init_v2(pZip, size_to_reserve_at_beginning,
- flags))
- return MZ_FALSE;
-
- if (NULL ==
- (pFile = MZ_FOPEN(pFilename,
- (flags & MZ_ZIP_FLAG_WRITE_ALLOW_READING)
- ? "w+b"
- : "wb"))) {
- mz_zip_writer_end(pZip);
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_OPEN_FAILED);
- }
-
- pZip->m_pState->m_pFile = pFile;
- pZip->m_zip_type = MZ_ZIP_TYPE_FILE;
-
- if (size_to_reserve_at_beginning) {
- mz_uint64 cur_ofs = 0;
- char buf[4096];
-
- MZ_CLEAR_ARR(buf);
-
- do {
- size_t n = (size_t) MZ_MIN(sizeof(buf),
- size_to_reserve_at_beginning);
- if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_ofs, buf, n) != n) {
- mz_zip_writer_end(pZip);
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED);
- }
- cur_ofs += n;
- size_to_reserve_at_beginning -= n;
- } while (size_to_reserve_at_beginning);
- }
-
- return MZ_TRUE;
-}
-
-mz_bool mz_zip_writer_init_cfile(mz_zip_archive *pZip, MZ_FILE *pFile,
- mz_uint flags) {
- pZip->m_pWrite = mz_zip_file_write_func;
- pZip->m_pNeeds_keepalive = NULL;
-
- if (flags & MZ_ZIP_FLAG_WRITE_ALLOW_READING)
- pZip->m_pRead = mz_zip_file_read_func;
-
- pZip->m_pIO_opaque = pZip;
-
- if (!mz_zip_writer_init_v2(pZip, 0, flags))
- return MZ_FALSE;
-
- pZip->m_pState->m_pFile = pFile;
- pZip->m_pState->m_file_archive_start_ofs = MZ_FTELL64(
- pZip->m_pState->m_pFile);
- pZip->m_zip_type = MZ_ZIP_TYPE_CFILE;
-
- return MZ_TRUE;
-}
-# endif /* #ifndef MINIZ_NO_STDIO */
-
-mz_bool mz_zip_writer_init_from_reader_v2(mz_zip_archive *pZip,
- const char *pFilename,
- mz_uint flags) {
- mz_zip_internal_state *pState;
-
- if ((!pZip) || (!pZip->m_pState) ||
- (pZip->m_zip_mode != MZ_ZIP_MODE_READING))
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
-
- if (flags & MZ_ZIP_FLAG_WRITE_ZIP64) {
- /* We don't support converting a non-zip64 file to zip64 - this
- * seems like more trouble than it's worth. (What about the
- * existing 32-bit data descriptors that could follow the
- * compressed data?) */
- if (!pZip->m_pState->m_zip64)
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
- }
-
- /* No sense in trying to write to an archive that's already at the
- * support max size */
- if (pZip->m_pState->m_zip64) {
- if (pZip->m_total_files == MZ_UINT32_MAX)
- return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES);
- } else {
- if (pZip->m_total_files == MZ_UINT16_MAX)
- return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES);
-
- if ((pZip->m_archive_size + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE +
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE) > MZ_UINT32_MAX)
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_TOO_LARGE);
- }
-
- pState = pZip->m_pState;
-
- if (pState->m_pFile) {
-# ifdef MINIZ_NO_STDIO
- (void) pFilename;
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
-# else
- if (pZip->m_pIO_opaque != pZip)
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
-
- if (pZip->m_zip_type == MZ_ZIP_TYPE_FILE) {
- if (!pFilename)
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
-
- /* Archive is being read from stdio and was originally opened
- * only for reading. Try to reopen as writable. */
- if (NULL == (pState->m_pFile = MZ_FREOPEN(pFilename, "r+b",
- pState->m_pFile))) {
- /* The mz_zip_archive is now in a bogus state because
- * pState->m_pFile is NULL, so just close it. */
- mz_zip_reader_end_internal(pZip, MZ_FALSE);
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_OPEN_FAILED);
- }
- }
-
- pZip->m_pWrite = mz_zip_file_write_func;
- pZip->m_pNeeds_keepalive = NULL;
-# endif /* #ifdef MINIZ_NO_STDIO */
- } else if (pState->m_pMem) {
- /* Archive lives in a memory block. Assume it's from the heap that
- * we can resize using the realloc callback. */
- if (pZip->m_pIO_opaque != pZip)
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
-
- pState->m_mem_capacity = pState->m_mem_size;
- pZip->m_pWrite = mz_zip_heap_write_func;
- pZip->m_pNeeds_keepalive = NULL;
- }
- /* Archive is being read via a user provided read function - make
- sure the user has specified a write function too. */
- else if (!pZip->m_pWrite)
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
-
- /* Start writing new files at the archive's current central
- * directory location. */
- /* TODO: We could add a flag that lets the user start writing
- * immediately AFTER the existing central dir - this would be safer.
- */
- pZip->m_archive_size = pZip->m_central_directory_file_ofs;
- pZip->m_central_directory_file_ofs = 0;
-
- /* Clear the sorted central dir offsets, they aren't useful or
- * maintained now. */
- /* Even though we're now in write mode, files can still be extracted
- * and verified, but file locates will be slow. */
- /* TODO: We could easily maintain the sorted central directory
- * offsets. */
- mz_zip_array_clear(pZip,
- &pZip->m_pState->m_sorted_central_dir_offsets);
-
- pZip->m_zip_mode = MZ_ZIP_MODE_WRITING;
-
- return MZ_TRUE;
-}
-
-mz_bool mz_zip_writer_init_from_reader(mz_zip_archive *pZip,
- const char *pFilename) {
- return mz_zip_writer_init_from_reader_v2(pZip, pFilename, 0);
-}
-
-/* TODO: pArchive_name is a terrible name here! */
-mz_bool mz_zip_writer_add_mem(mz_zip_archive *pZip,
- const char *pArchive_name,
- const void *pBuf, size_t buf_size,
- mz_uint level_and_flags) {
- return mz_zip_writer_add_mem_ex(pZip, pArchive_name, pBuf, buf_size,
- NULL, 0, level_and_flags, 0, 0);
-}
-
-typedef struct {
- mz_zip_archive *m_pZip;
- mz_uint64 m_cur_archive_file_ofs;
- mz_uint64 m_comp_size;
-} mz_zip_writer_add_state;
-
-static mz_bool mz_zip_writer_add_put_buf_callback(const void *pBuf,
- int len,
- void *pUser) {
- mz_zip_writer_add_state *pState = (mz_zip_writer_add_state *) pUser;
- if ((int) pState->m_pZip->m_pWrite(pState->m_pZip->m_pIO_opaque,
- pState->m_cur_archive_file_ofs,
- pBuf, len) != len)
- return MZ_FALSE;
-
- pState->m_cur_archive_file_ofs += len;
- pState->m_comp_size += len;
- return MZ_TRUE;
-}
-
-# define MZ_ZIP64_MAX_LOCAL_EXTRA_FIELD_SIZE \
- (sizeof(mz_uint16) * 2 + sizeof(mz_uint64) * 2)
-# define MZ_ZIP64_MAX_CENTRAL_EXTRA_FIELD_SIZE \
- (sizeof(mz_uint16) * 2 + sizeof(mz_uint64) * 3)
-static mz_uint32 mz_zip_writer_create_zip64_extra_data(
- mz_uint8 *pBuf, mz_uint64 *pUncomp_size, mz_uint64 *pComp_size,
- mz_uint64 *pLocal_header_ofs) {
- mz_uint8 *pDst = pBuf;
- mz_uint32 field_size = 0;
-
- MZ_WRITE_LE16(pDst + 0,
- MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID);
- MZ_WRITE_LE16(pDst + 2, 0);
- pDst += sizeof(mz_uint16) * 2;
-
- if (pUncomp_size) {
- MZ_WRITE_LE64(pDst, *pUncomp_size);
- pDst += sizeof(mz_uint64);
- field_size += sizeof(mz_uint64);
- }
-
- if (pComp_size) {
- MZ_WRITE_LE64(pDst, *pComp_size);
- pDst += sizeof(mz_uint64);
- field_size += sizeof(mz_uint64);
- }
-
- if (pLocal_header_ofs) {
- MZ_WRITE_LE64(pDst, *pLocal_header_ofs);
- pDst += sizeof(mz_uint64);
- field_size += sizeof(mz_uint64);
- }
-
- MZ_WRITE_LE16(pBuf + 2, field_size);
-
- return (mz_uint32) (pDst - pBuf);
-}
-
-static mz_bool mz_zip_writer_create_local_dir_header(
- mz_zip_archive *pZip, mz_uint8 *pDst, mz_uint16 filename_size,
- mz_uint16 extra_size, mz_uint64 uncomp_size, mz_uint64 comp_size,
- mz_uint32 uncomp_crc32, mz_uint16 method, mz_uint16 bit_flags,
- mz_uint16 dos_time, mz_uint16 dos_date) {
- (void) pZip;
- memset(pDst, 0, MZ_ZIP_LOCAL_DIR_HEADER_SIZE);
- MZ_WRITE_LE32(pDst + MZ_ZIP_LDH_SIG_OFS,
- MZ_ZIP_LOCAL_DIR_HEADER_SIG);
- MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_VERSION_NEEDED_OFS,
- method ? 20 : 0);
- MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_BIT_FLAG_OFS, bit_flags);
- MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_METHOD_OFS, method);
- MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_FILE_TIME_OFS, dos_time);
- MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_FILE_DATE_OFS, dos_date);
- MZ_WRITE_LE32(pDst + MZ_ZIP_LDH_CRC32_OFS, uncomp_crc32);
- MZ_WRITE_LE32(pDst + MZ_ZIP_LDH_COMPRESSED_SIZE_OFS,
- MZ_MIN(comp_size, MZ_UINT32_MAX));
- MZ_WRITE_LE32(pDst + MZ_ZIP_LDH_DECOMPRESSED_SIZE_OFS,
- MZ_MIN(uncomp_size, MZ_UINT32_MAX));
- MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_FILENAME_LEN_OFS, filename_size);
- MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_EXTRA_LEN_OFS, extra_size);
- return MZ_TRUE;
-}
-
-static mz_bool mz_zip_writer_create_central_dir_header(
- mz_zip_archive *pZip, mz_uint8 *pDst, mz_uint16 filename_size,
- mz_uint16 extra_size, mz_uint16 comment_size,
- mz_uint64 uncomp_size, mz_uint64 comp_size,
- mz_uint32 uncomp_crc32, mz_uint16 method, mz_uint16 bit_flags,
- mz_uint16 dos_time, mz_uint16 dos_date,
- mz_uint64 local_header_ofs, mz_uint32 ext_attributes) {
- (void) pZip;
- memset(pDst, 0, MZ_ZIP_CENTRAL_DIR_HEADER_SIZE);
- MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_SIG_OFS,
- MZ_ZIP_CENTRAL_DIR_HEADER_SIG);
- MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_VERSION_NEEDED_OFS,
- method ? 20 : 0);
- MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_BIT_FLAG_OFS, bit_flags);
- MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_METHOD_OFS, method);
- MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_FILE_TIME_OFS, dos_time);
- MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_FILE_DATE_OFS, dos_date);
- MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_CRC32_OFS, uncomp_crc32);
- MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS,
- MZ_MIN(comp_size, MZ_UINT32_MAX));
- MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS,
- MZ_MIN(uncomp_size, MZ_UINT32_MAX));
- MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_FILENAME_LEN_OFS, filename_size);
- MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_EXTRA_LEN_OFS, extra_size);
- MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_COMMENT_LEN_OFS, comment_size);
- MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_EXTERNAL_ATTR_OFS, ext_attributes);
- MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_LOCAL_HEADER_OFS,
- MZ_MIN(local_header_ofs, MZ_UINT32_MAX));
- return MZ_TRUE;
-}
-
-static mz_bool mz_zip_writer_add_to_central_dir(
- mz_zip_archive *pZip, const char *pFilename,
- mz_uint16 filename_size, const void *pExtra, mz_uint16 extra_size,
- const void *pComment, mz_uint16 comment_size,
- mz_uint64 uncomp_size, mz_uint64 comp_size,
- mz_uint32 uncomp_crc32, mz_uint16 method, mz_uint16 bit_flags,
- mz_uint16 dos_time, mz_uint16 dos_date,
- mz_uint64 local_header_ofs, mz_uint32 ext_attributes,
- const char *user_extra_data, mz_uint user_extra_data_len) {
- mz_zip_internal_state *pState = pZip->m_pState;
- mz_uint32 central_dir_ofs = (mz_uint32)
- pState->m_central_dir.m_size;
- size_t orig_central_dir_size = pState->m_central_dir.m_size;
- mz_uint8 central_dir_header[MZ_ZIP_CENTRAL_DIR_HEADER_SIZE];
-
- if (!pZip->m_pState->m_zip64) {
- if (local_header_ofs > 0xFFFFFFFF)
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_TOO_LARGE);
- }
-
- /* miniz doesn't support central dirs >= MZ_UINT32_MAX bytes yet */
- if (((mz_uint64) pState->m_central_dir.m_size +
- MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_size + extra_size +
- user_extra_data_len + comment_size) >= MZ_UINT32_MAX)
- return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_CDIR_SIZE);
-
- if (!mz_zip_writer_create_central_dir_header(
- pZip, central_dir_header, filename_size,
- (mz_uint16) (extra_size + user_extra_data_len),
- comment_size, uncomp_size, comp_size, uncomp_crc32, method,
- bit_flags, dos_time, dos_date, local_header_ofs,
- ext_attributes))
- return mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR);
-
- if ((!mz_zip_array_push_back(pZip, &pState->m_central_dir,
- central_dir_header,
- MZ_ZIP_CENTRAL_DIR_HEADER_SIZE)) ||
- (!mz_zip_array_push_back(pZip, &pState->m_central_dir,
- pFilename, filename_size)) ||
- (!mz_zip_array_push_back(pZip, &pState->m_central_dir, pExtra,
- extra_size)) ||
- (!mz_zip_array_push_back(pZip, &pState->m_central_dir,
- user_extra_data,
- user_extra_data_len)) ||
- (!mz_zip_array_push_back(pZip, &pState->m_central_dir, pComment,
- comment_size)) ||
- (!mz_zip_array_push_back(pZip, &pState->m_central_dir_offsets,
- &central_dir_ofs, 1))) {
- /* Try to resize the central directory array back into its
- * original state. */
- mz_zip_array_resize(pZip, &pState->m_central_dir,
- orig_central_dir_size, MZ_FALSE);
- return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
- }
-
- return MZ_TRUE;
-}
-
-static mz_bool mz_zip_writer_validate_archive_name(
- const char *pArchive_name) {
- /* Basic ZIP archive filename validity checks: Valid filenames
- * cannot start with a forward slash, cannot contain a drive letter,
- * and cannot use DOS-style backward slashes. */
- if (*pArchive_name == '/')
- return MZ_FALSE;
-
- /* Making sure the name does not contain drive letters or DOS style
- * backward slashes is the responsibility of the program using
- * miniz*/
-
- return MZ_TRUE;
-}
-
-static mz_uint
-mz_zip_writer_compute_padding_needed_for_file_alignment(
- mz_zip_archive *pZip) {
- mz_uint32 n;
- if (!pZip->m_file_offset_alignment)
- return 0;
- n = (mz_uint32) (pZip->m_archive_size &
- (pZip->m_file_offset_alignment - 1));
- return (mz_uint) ((pZip->m_file_offset_alignment - n) &
- (pZip->m_file_offset_alignment - 1));
-}
-
-static mz_bool mz_zip_writer_write_zeros(mz_zip_archive *pZip,
- mz_uint64 cur_file_ofs,
- mz_uint32 n) {
- char buf[4096];
- memset(buf, 0, MZ_MIN(sizeof(buf), n));
- while (n) {
- mz_uint32 s = MZ_MIN(sizeof(buf), n);
- if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_file_ofs, buf, s) != s)
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED);
-
- cur_file_ofs += s;
- n -= s;
- }
- return MZ_TRUE;
-}
-
-mz_bool mz_zip_writer_add_mem_ex(
- mz_zip_archive *pZip, const char *pArchive_name, const void *pBuf,
- size_t buf_size, const void *pComment, mz_uint16 comment_size,
- mz_uint level_and_flags, mz_uint64 uncomp_size,
- mz_uint32 uncomp_crc32) {
- return mz_zip_writer_add_mem_ex_v2(
- pZip, pArchive_name, pBuf, buf_size, pComment, comment_size,
- level_and_flags, uncomp_size, uncomp_crc32, NULL, NULL, 0, NULL,
- 0);
-}
-
-mz_bool mz_zip_writer_add_mem_ex_v2(
- mz_zip_archive *pZip, const char *pArchive_name, const void *pBuf,
- size_t buf_size, const void *pComment, mz_uint16 comment_size,
- mz_uint level_and_flags, mz_uint64 uncomp_size,
- mz_uint32 uncomp_crc32, MZ_TIME_T *last_modified,
- const char *user_extra_data, mz_uint user_extra_data_len,
- const char *user_extra_data_central,
- mz_uint user_extra_data_central_len) {
- mz_uint16 method = 0, dos_time = 0, dos_date = 0;
- mz_uint level, ext_attributes = 0, num_alignment_padding_bytes;
- mz_uint64 local_dir_header_ofs = pZip->m_archive_size,
- cur_archive_file_ofs = pZip->m_archive_size,
- comp_size = 0;
- size_t archive_name_size;
- mz_uint8 local_dir_header[MZ_ZIP_LOCAL_DIR_HEADER_SIZE];
- tdefl_compressor *pComp = NULL;
- mz_bool store_data_uncompressed;
- mz_zip_internal_state *pState;
- mz_uint8 *pExtra_data = NULL;
- mz_uint32 extra_size = 0;
- mz_uint8 extra_data[MZ_ZIP64_MAX_CENTRAL_EXTRA_FIELD_SIZE];
- mz_uint16 bit_flags = 0;
-
- if ((int) level_and_flags < 0)
- level_and_flags = MZ_DEFAULT_LEVEL;
-
- if (uncomp_size ||
- (buf_size && !(level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA)))
- bit_flags |= MZ_ZIP_LDH_BIT_FLAG_HAS_LOCATOR;
-
- if (!(level_and_flags & MZ_ZIP_FLAG_ASCII_FILENAME))
- bit_flags |= MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_UTF8;
-
- level = level_and_flags & 0xF;
- store_data_uncompressed =
- ((!level) || (level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA));
-
- if ((!pZip) || (!pZip->m_pState) ||
- (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING) ||
- ((buf_size) && (!pBuf)) || (!pArchive_name) ||
- ((comment_size) && (!pComment)) ||
- (level > MZ_UBER_COMPRESSION))
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
-
- pState = pZip->m_pState;
-
- if (pState->m_zip64) {
- if (pZip->m_total_files == MZ_UINT32_MAX)
- return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES);
- } else {
- if (pZip->m_total_files == MZ_UINT16_MAX) {
- pState->m_zip64 = MZ_TRUE;
- /*return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); */
- }
- if (((mz_uint64) buf_size > 0xFFFFFFFF) ||
- (uncomp_size > 0xFFFFFFFF)) {
- pState->m_zip64 = MZ_TRUE;
- /*return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); */
- }
- }
-
- if ((!(level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) &&
- (uncomp_size))
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
-
- if (!mz_zip_writer_validate_archive_name(pArchive_name))
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_FILENAME);
-
-# ifndef MINIZ_NO_TIME
- if (last_modified != NULL) {
- mz_zip_time_t_to_dos_time(*last_modified, &dos_time, &dos_date);
- } else {
- MZ_TIME_T cur_time;
- time(&cur_time);
- mz_zip_time_t_to_dos_time(cur_time, &dos_time, &dos_date);
- }
-# endif /* #ifndef MINIZ_NO_TIME */
-
- if (!(level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) {
- uncomp_crc32 = (mz_uint32) mz_crc32(
- MZ_CRC32_INIT, (const mz_uint8 *) pBuf, buf_size);
- uncomp_size = buf_size;
- if (uncomp_size <= 3) {
- level = 0;
- store_data_uncompressed = MZ_TRUE;
- }
- }
-
- archive_name_size = strlen(pArchive_name);
- if (archive_name_size > MZ_UINT16_MAX)
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_FILENAME);
-
- num_alignment_padding_bytes =
- mz_zip_writer_compute_padding_needed_for_file_alignment(pZip);
-
- /* miniz doesn't support central dirs >= MZ_UINT32_MAX bytes yet */
- if (((mz_uint64) pState->m_central_dir.m_size +
- MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + archive_name_size +
- MZ_ZIP64_MAX_CENTRAL_EXTRA_FIELD_SIZE + comment_size) >=
- MZ_UINT32_MAX)
- return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_CDIR_SIZE);
-
- if (!pState->m_zip64) {
- /* Bail early if the archive would obviously become too large */
- if ((pZip->m_archive_size + num_alignment_padding_bytes +
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE + archive_name_size +
- MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + archive_name_size +
- comment_size + user_extra_data_len +
- pState->m_central_dir.m_size +
- MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE +
- user_extra_data_central_len +
- MZ_ZIP_DATA_DESCRIPTER_SIZE32) > 0xFFFFFFFF) {
- pState->m_zip64 = MZ_TRUE;
- /*return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); */
- }
- }
-
- if ((archive_name_size) &&
- (pArchive_name[archive_name_size - 1] == '/')) {
- /* Set DOS Subdirectory attribute bit. */
- ext_attributes |= MZ_ZIP_DOS_DIR_ATTRIBUTE_BITFLAG;
-
- /* Subdirectories cannot contain data. */
- if ((buf_size) || (uncomp_size))
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
- }
-
- /* Try to do any allocations before writing to the archive, so if an
- * allocation fails the file remains unmodified. (A good idea if
- * we're doing an in-place modification.) */
- if ((!mz_zip_array_ensure_room(
- pZip, &pState->m_central_dir,
- MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + archive_name_size +
- comment_size +
- (pState->m_zip64 ? MZ_ZIP64_MAX_CENTRAL_EXTRA_FIELD_SIZE
- : 0))) ||
- (!mz_zip_array_ensure_room(pZip, &pState->m_central_dir_offsets,
- 1)))
- return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
-
- if ((!store_data_uncompressed) && (buf_size)) {
- if (NULL ==
- (pComp = (tdefl_compressor *) pZip->m_pAlloc(
- pZip->m_pAlloc_opaque, 1, sizeof(tdefl_compressor))))
- return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
- }
-
- if (!mz_zip_writer_write_zeros(pZip, cur_archive_file_ofs,
- num_alignment_padding_bytes)) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pComp);
- return MZ_FALSE;
- }
-
- local_dir_header_ofs += num_alignment_padding_bytes;
- if (pZip->m_file_offset_alignment) {
- MZ_ASSERT((local_dir_header_ofs &
- (pZip->m_file_offset_alignment - 1)) == 0);
- }
- cur_archive_file_ofs += num_alignment_padding_bytes;
-
- MZ_CLEAR_ARR(local_dir_header);
-
- if (!store_data_uncompressed ||
- (level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) {
- method = MZ_DEFLATED;
- }
-
- if (pState->m_zip64) {
- if (uncomp_size >= MZ_UINT32_MAX ||
- local_dir_header_ofs >= MZ_UINT32_MAX) {
- pExtra_data = extra_data;
- extra_size = mz_zip_writer_create_zip64_extra_data(
- extra_data,
- (uncomp_size >= MZ_UINT32_MAX) ? &uncomp_size : NULL,
- (uncomp_size >= MZ_UINT32_MAX) ? &comp_size : NULL,
- (local_dir_header_ofs >= MZ_UINT32_MAX)
- ? &local_dir_header_ofs
- : NULL);
- }
-
- if (!mz_zip_writer_create_local_dir_header(
- pZip, local_dir_header, (mz_uint16) archive_name_size,
- (mz_uint16) (extra_size + user_extra_data_len), 0, 0, 0,
- method, bit_flags, dos_time, dos_date))
- return mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR);
-
- if (pZip->m_pWrite(pZip->m_pIO_opaque, local_dir_header_ofs,
- local_dir_header, sizeof(local_dir_header)) !=
- sizeof(local_dir_header))
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED);
-
- cur_archive_file_ofs += sizeof(local_dir_header);
-
- if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs,
- pArchive_name,
- archive_name_size) != archive_name_size) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pComp);
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED);
- }
- cur_archive_file_ofs += archive_name_size;
-
- if (pExtra_data != NULL) {
- if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs,
- extra_data, extra_size) != extra_size)
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED);
-
- cur_archive_file_ofs += extra_size;
- }
- } else {
- if ((comp_size > MZ_UINT32_MAX) ||
- (cur_archive_file_ofs > MZ_UINT32_MAX))
- return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE);
- if (!mz_zip_writer_create_local_dir_header(
- pZip, local_dir_header, (mz_uint16) archive_name_size,
- (mz_uint16) user_extra_data_len, 0, 0, 0, method,
- bit_flags, dos_time, dos_date))
- return mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR);
-
- if (pZip->m_pWrite(pZip->m_pIO_opaque, local_dir_header_ofs,
- local_dir_header, sizeof(local_dir_header)) !=
- sizeof(local_dir_header))
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED);
-
- cur_archive_file_ofs += sizeof(local_dir_header);
-
- if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs,
- pArchive_name,
- archive_name_size) != archive_name_size) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pComp);
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED);
- }
- cur_archive_file_ofs += archive_name_size;
- }
-
- if (user_extra_data_len > 0) {
- if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs,
- user_extra_data,
- user_extra_data_len) != user_extra_data_len)
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED);
-
- cur_archive_file_ofs += user_extra_data_len;
- }
-
- if (store_data_uncompressed) {
- if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pBuf,
- buf_size) != buf_size) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pComp);
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED);
- }
-
- cur_archive_file_ofs += buf_size;
- comp_size = buf_size;
- } else if (buf_size) {
- mz_zip_writer_add_state state;
-
- state.m_pZip = pZip;
- state.m_cur_archive_file_ofs = cur_archive_file_ofs;
- state.m_comp_size = 0;
-
- if ((tdefl_init(pComp, mz_zip_writer_add_put_buf_callback, &state,
- tdefl_create_comp_flags_from_zip_params(
- level, -15, MZ_DEFAULT_STRATEGY)) !=
- TDEFL_STATUS_OKAY) ||
- (tdefl_compress_buffer(pComp, pBuf, buf_size, TDEFL_FINISH) !=
- TDEFL_STATUS_DONE)) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pComp);
- return mz_zip_set_error(pZip, MZ_ZIP_COMPRESSION_FAILED);
- }
-
- comp_size = state.m_comp_size;
- cur_archive_file_ofs = state.m_cur_archive_file_ofs;
- }
-
- pZip->m_pFree(pZip->m_pAlloc_opaque, pComp);
- pComp = NULL;
-
- if (uncomp_size) {
- mz_uint8 local_dir_footer[MZ_ZIP_DATA_DESCRIPTER_SIZE64];
- mz_uint32 local_dir_footer_size = MZ_ZIP_DATA_DESCRIPTER_SIZE32;
-
- MZ_ASSERT(bit_flags & MZ_ZIP_LDH_BIT_FLAG_HAS_LOCATOR);
-
- MZ_WRITE_LE32(local_dir_footer + 0, MZ_ZIP_DATA_DESCRIPTOR_ID);
- MZ_WRITE_LE32(local_dir_footer + 4, uncomp_crc32);
- if (pExtra_data == NULL) {
- if (comp_size > MZ_UINT32_MAX)
- return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE);
-
- MZ_WRITE_LE32(local_dir_footer + 8, comp_size);
- MZ_WRITE_LE32(local_dir_footer + 12, uncomp_size);
- } else {
- MZ_WRITE_LE64(local_dir_footer + 8, comp_size);
- MZ_WRITE_LE64(local_dir_footer + 16, uncomp_size);
- local_dir_footer_size = MZ_ZIP_DATA_DESCRIPTER_SIZE64;
- }
-
- if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs,
- local_dir_footer, local_dir_footer_size) !=
- local_dir_footer_size)
- return MZ_FALSE;
-
- cur_archive_file_ofs += local_dir_footer_size;
- }
-
- if (pExtra_data != NULL) {
- extra_size = mz_zip_writer_create_zip64_extra_data(
- extra_data,
- (uncomp_size >= MZ_UINT32_MAX) ? &uncomp_size : NULL,
- (uncomp_size >= MZ_UINT32_MAX) ? &comp_size : NULL,
- (local_dir_header_ofs >= MZ_UINT32_MAX)
- ? &local_dir_header_ofs
- : NULL);
- }
-
- if (!mz_zip_writer_add_to_central_dir(
- pZip, pArchive_name, (mz_uint16) archive_name_size,
- pExtra_data, (mz_uint16) extra_size, pComment, comment_size,
- uncomp_size, comp_size, uncomp_crc32, method, bit_flags,
- dos_time, dos_date, local_dir_header_ofs, ext_attributes,
- user_extra_data_central, user_extra_data_central_len))
- return MZ_FALSE;
-
- pZip->m_total_files++;
- pZip->m_archive_size = cur_archive_file_ofs;
-
- return MZ_TRUE;
-}
-
-mz_bool mz_zip_writer_add_read_buf_callback(
- mz_zip_archive *pZip, const char *pArchive_name,
- mz_file_read_func read_callback, void *callback_opaque,
- mz_uint64 max_size, const MZ_TIME_T *pFile_time,
- const void *pComment, mz_uint16 comment_size,
- mz_uint level_and_flags, const char *user_extra_data,
- mz_uint user_extra_data_len, const char *user_extra_data_central,
- mz_uint user_extra_data_central_len) {
- mz_uint16 gen_flags;
- mz_uint uncomp_crc32 = MZ_CRC32_INIT, level,
- num_alignment_padding_bytes;
- mz_uint16 method = 0, dos_time = 0, dos_date = 0,
- ext_attributes = 0;
- mz_uint64 local_dir_header_ofs,
- cur_archive_file_ofs = pZip->m_archive_size, uncomp_size = 0,
- comp_size = 0;
- size_t archive_name_size;
- mz_uint8 local_dir_header[MZ_ZIP_LOCAL_DIR_HEADER_SIZE];
- mz_uint8 *pExtra_data = NULL;
- mz_uint32 extra_size = 0;
- mz_uint8 extra_data[MZ_ZIP64_MAX_CENTRAL_EXTRA_FIELD_SIZE];
- mz_zip_internal_state *pState;
- mz_uint64 file_ofs = 0, cur_archive_header_file_ofs;
-
- if ((int) level_and_flags < 0)
- level_and_flags = MZ_DEFAULT_LEVEL;
- level = level_and_flags & 0xF;
-
- gen_flags = (level_and_flags & MZ_ZIP_FLAG_WRITE_HEADER_SET_SIZE)
- ? 0
- : MZ_ZIP_LDH_BIT_FLAG_HAS_LOCATOR;
-
- if (!(level_and_flags & MZ_ZIP_FLAG_ASCII_FILENAME))
- gen_flags |= MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_UTF8;
-
- /* Sanity checks */
- if ((!pZip) || (!pZip->m_pState) ||
- (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING) || (!pArchive_name) ||
- ((comment_size) && (!pComment)) ||
- (level > MZ_UBER_COMPRESSION))
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
-
- pState = pZip->m_pState;
-
- if ((!pState->m_zip64) && (max_size > MZ_UINT32_MAX)) {
- /* Source file is too large for non-zip64 */
- /*return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); */
- pState->m_zip64 = MZ_TRUE;
- }
-
- /* We could support this, but why? */
- if (level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA)
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
-
- if (!mz_zip_writer_validate_archive_name(pArchive_name))
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_FILENAME);
-
- if (pState->m_zip64) {
- if (pZip->m_total_files == MZ_UINT32_MAX)
- return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES);
- } else {
- if (pZip->m_total_files == MZ_UINT16_MAX) {
- pState->m_zip64 = MZ_TRUE;
- /*return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); */
- }
- }
-
- archive_name_size = strlen(pArchive_name);
- if (archive_name_size > MZ_UINT16_MAX)
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_FILENAME);
-
- num_alignment_padding_bytes =
- mz_zip_writer_compute_padding_needed_for_file_alignment(pZip);
-
- /* miniz doesn't support central dirs >= MZ_UINT32_MAX bytes yet */
- if (((mz_uint64) pState->m_central_dir.m_size +
- MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + archive_name_size +
- MZ_ZIP64_MAX_CENTRAL_EXTRA_FIELD_SIZE + comment_size) >=
- MZ_UINT32_MAX)
- return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_CDIR_SIZE);
-
- if (!pState->m_zip64) {
- /* Bail early if the archive would obviously become too large */
- if ((pZip->m_archive_size + num_alignment_padding_bytes +
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE + archive_name_size +
- MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + archive_name_size +
- comment_size + user_extra_data_len +
- pState->m_central_dir.m_size +
- MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE + 1024 +
- MZ_ZIP_DATA_DESCRIPTER_SIZE32 +
- user_extra_data_central_len) > 0xFFFFFFFF) {
- pState->m_zip64 = MZ_TRUE;
- /*return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); */
- }
- }
-
-# ifndef MINIZ_NO_TIME
- if (pFile_time) {
- mz_zip_time_t_to_dos_time(*pFile_time, &dos_time, &dos_date);
- }
-# endif
-
- if (max_size <= 3)
- level = 0;
-
- if (!mz_zip_writer_write_zeros(pZip, cur_archive_file_ofs,
- num_alignment_padding_bytes)) {
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED);
- }
-
- cur_archive_file_ofs += num_alignment_padding_bytes;
- local_dir_header_ofs = cur_archive_file_ofs;
-
- if (pZip->m_file_offset_alignment) {
- MZ_ASSERT((cur_archive_file_ofs &
- (pZip->m_file_offset_alignment - 1)) == 0);
- }
-
- if (max_size && level) {
- method = MZ_DEFLATED;
- }
-
- MZ_CLEAR_ARR(local_dir_header);
- if (pState->m_zip64) {
- if (max_size >= MZ_UINT32_MAX ||
- local_dir_header_ofs >= MZ_UINT32_MAX) {
- pExtra_data = extra_data;
- if (level_and_flags & MZ_ZIP_FLAG_WRITE_HEADER_SET_SIZE)
- extra_size = mz_zip_writer_create_zip64_extra_data(
- extra_data,
- (max_size >= MZ_UINT32_MAX) ? &uncomp_size : NULL,
- (max_size >= MZ_UINT32_MAX) ? &comp_size : NULL,
- (local_dir_header_ofs >= MZ_UINT32_MAX)
- ? &local_dir_header_ofs
- : NULL);
- else
- extra_size = mz_zip_writer_create_zip64_extra_data(
- extra_data, NULL, NULL,
- (local_dir_header_ofs >= MZ_UINT32_MAX)
- ? &local_dir_header_ofs
- : NULL);
- }
-
- if (!mz_zip_writer_create_local_dir_header(
- pZip, local_dir_header, (mz_uint16) archive_name_size,
- (mz_uint16) (extra_size + user_extra_data_len), 0, 0, 0,
- method, gen_flags, dos_time, dos_date))
- return mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR);
-
- if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs,
- local_dir_header, sizeof(local_dir_header)) !=
- sizeof(local_dir_header))
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED);
-
- cur_archive_file_ofs += sizeof(local_dir_header);
-
- if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs,
- pArchive_name,
- archive_name_size) != archive_name_size) {
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED);
- }
-
- cur_archive_file_ofs += archive_name_size;
-
- if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs,
- extra_data, extra_size) != extra_size)
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED);
-
- cur_archive_file_ofs += extra_size;
- } else {
- if ((comp_size > MZ_UINT32_MAX) ||
- (cur_archive_file_ofs > MZ_UINT32_MAX))
- return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE);
- if (!mz_zip_writer_create_local_dir_header(
- pZip, local_dir_header, (mz_uint16) archive_name_size,
- (mz_uint16) user_extra_data_len, 0, 0, 0, method,
- gen_flags, dos_time, dos_date))
- return mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR);
-
- if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs,
- local_dir_header, sizeof(local_dir_header)) !=
- sizeof(local_dir_header))
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED);
-
- cur_archive_file_ofs += sizeof(local_dir_header);
-
- if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs,
- pArchive_name,
- archive_name_size) != archive_name_size) {
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED);
- }
-
- cur_archive_file_ofs += archive_name_size;
- }
-
- if (user_extra_data_len > 0) {
- if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs,
- user_extra_data,
- user_extra_data_len) != user_extra_data_len)
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED);
-
- cur_archive_file_ofs += user_extra_data_len;
- }
-
- if (max_size) {
- void *pRead_buf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1,
- MZ_ZIP_MAX_IO_BUF_SIZE);
- if (!pRead_buf) {
- return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
- }
-
- if (!level) {
- while (1) {
- size_t n = read_callback(callback_opaque, file_ofs, pRead_buf,
- MZ_ZIP_MAX_IO_BUF_SIZE);
- if (n == 0)
- break;
-
- if ((n > MZ_ZIP_MAX_IO_BUF_SIZE) ||
- (file_ofs + n > max_size)) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf);
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED);
- }
- if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs,
- pRead_buf, n) != n) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf);
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED);
- }
- file_ofs += n;
- uncomp_crc32 = (mz_uint32) mz_crc32(
- uncomp_crc32, (const mz_uint8 *) pRead_buf, n);
- cur_archive_file_ofs += n;
- }
- uncomp_size = file_ofs;
- comp_size = uncomp_size;
- } else {
- mz_bool result = MZ_FALSE;
- mz_zip_writer_add_state state;
- tdefl_compressor *pComp = (tdefl_compressor *) pZip->m_pAlloc(
- pZip->m_pAlloc_opaque, 1, sizeof(tdefl_compressor));
- if (!pComp) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf);
- return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
- }
-
- state.m_pZip = pZip;
- state.m_cur_archive_file_ofs = cur_archive_file_ofs;
- state.m_comp_size = 0;
-
- if (tdefl_init(pComp, mz_zip_writer_add_put_buf_callback,
- &state,
- tdefl_create_comp_flags_from_zip_params(
- level, -15, MZ_DEFAULT_STRATEGY)) !=
- TDEFL_STATUS_OKAY) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pComp);
- pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf);
- return mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR);
- }
-
- for (;;) {
- tdefl_status status;
- tdefl_flush flush = TDEFL_NO_FLUSH;
-
- size_t n = read_callback(callback_opaque, file_ofs, pRead_buf,
- MZ_ZIP_MAX_IO_BUF_SIZE);
- if ((n > MZ_ZIP_MAX_IO_BUF_SIZE) ||
- (file_ofs + n > max_size)) {
- mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED);
- break;
- }
-
- file_ofs += n;
- uncomp_crc32 = (mz_uint32) mz_crc32(
- uncomp_crc32, (const mz_uint8 *) pRead_buf, n);
-
- if (pZip->m_pNeeds_keepalive != NULL &&
- pZip->m_pNeeds_keepalive(pZip->m_pIO_opaque))
- flush = TDEFL_FULL_FLUSH;
-
- if (n == 0)
- flush = TDEFL_FINISH;
-
- status = tdefl_compress_buffer(pComp, pRead_buf, n, flush);
- if (status == TDEFL_STATUS_DONE) {
- result = MZ_TRUE;
- break;
- } else if (status != TDEFL_STATUS_OKAY) {
- mz_zip_set_error(pZip, MZ_ZIP_COMPRESSION_FAILED);
- break;
- }
- }
-
- pZip->m_pFree(pZip->m_pAlloc_opaque, pComp);
-
- if (!result) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf);
- return MZ_FALSE;
- }
-
- uncomp_size = file_ofs;
- comp_size = state.m_comp_size;
- cur_archive_file_ofs = state.m_cur_archive_file_ofs;
- }
-
- pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf);
- }
-
- if (!(level_and_flags & MZ_ZIP_FLAG_WRITE_HEADER_SET_SIZE)) {
- mz_uint8 local_dir_footer[MZ_ZIP_DATA_DESCRIPTER_SIZE64];
- mz_uint32 local_dir_footer_size = MZ_ZIP_DATA_DESCRIPTER_SIZE32;
-
- MZ_WRITE_LE32(local_dir_footer + 0, MZ_ZIP_DATA_DESCRIPTOR_ID);
- MZ_WRITE_LE32(local_dir_footer + 4, uncomp_crc32);
- if (pExtra_data == NULL) {
- if (comp_size > MZ_UINT32_MAX)
- return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE);
-
- MZ_WRITE_LE32(local_dir_footer + 8, comp_size);
- MZ_WRITE_LE32(local_dir_footer + 12, uncomp_size);
- } else {
- MZ_WRITE_LE64(local_dir_footer + 8, comp_size);
- MZ_WRITE_LE64(local_dir_footer + 16, uncomp_size);
- local_dir_footer_size = MZ_ZIP_DATA_DESCRIPTER_SIZE64;
- }
-
- if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs,
- local_dir_footer, local_dir_footer_size) !=
- local_dir_footer_size)
- return MZ_FALSE;
-
- cur_archive_file_ofs += local_dir_footer_size;
- }
-
- if (level_and_flags & MZ_ZIP_FLAG_WRITE_HEADER_SET_SIZE) {
- if (pExtra_data != NULL) {
- extra_size = mz_zip_writer_create_zip64_extra_data(
- extra_data,
- (max_size >= MZ_UINT32_MAX) ? &uncomp_size : NULL,
- (max_size >= MZ_UINT32_MAX) ? &comp_size : NULL,
- (local_dir_header_ofs >= MZ_UINT32_MAX)
- ? &local_dir_header_ofs
- : NULL);
- }
-
- if (!mz_zip_writer_create_local_dir_header(
- pZip, local_dir_header, (mz_uint16) archive_name_size,
- (mz_uint16) (extra_size + user_extra_data_len),
- (max_size >= MZ_UINT32_MAX) ? MZ_UINT32_MAX : uncomp_size,
- (max_size >= MZ_UINT32_MAX) ? MZ_UINT32_MAX : comp_size,
- uncomp_crc32, method, gen_flags, dos_time, dos_date))
- return mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR);
-
- cur_archive_header_file_ofs = local_dir_header_ofs;
-
- if (pZip->m_pWrite(pZip->m_pIO_opaque,
- cur_archive_header_file_ofs, local_dir_header,
- sizeof(local_dir_header)) !=
- sizeof(local_dir_header))
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED);
-
- if (pExtra_data != NULL) {
- cur_archive_header_file_ofs += sizeof(local_dir_header);
-
- if (pZip->m_pWrite(pZip->m_pIO_opaque,
- cur_archive_header_file_ofs, pArchive_name,
- archive_name_size) != archive_name_size) {
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED);
- }
-
- cur_archive_header_file_ofs += archive_name_size;
-
- if (pZip->m_pWrite(pZip->m_pIO_opaque,
- cur_archive_header_file_ofs, extra_data,
- extra_size) != extra_size)
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED);
-
- cur_archive_header_file_ofs += extra_size;
- }
- }
-
- if (pExtra_data != NULL) {
- extra_size = mz_zip_writer_create_zip64_extra_data(
- extra_data,
- (uncomp_size >= MZ_UINT32_MAX) ? &uncomp_size : NULL,
- (uncomp_size >= MZ_UINT32_MAX) ? &comp_size : NULL,
- (local_dir_header_ofs >= MZ_UINT32_MAX)
- ? &local_dir_header_ofs
- : NULL);
- }
-
- if (!mz_zip_writer_add_to_central_dir(
- pZip, pArchive_name, (mz_uint16) archive_name_size,
- pExtra_data, (mz_uint16) extra_size, pComment, comment_size,
- uncomp_size, comp_size, uncomp_crc32, method, gen_flags,
- dos_time, dos_date, local_dir_header_ofs, ext_attributes,
- user_extra_data_central, user_extra_data_central_len))
- return MZ_FALSE;
-
- pZip->m_total_files++;
- pZip->m_archive_size = cur_archive_file_ofs;
-
- return MZ_TRUE;
-}
-
-# ifndef MINIZ_NO_STDIO
-
-static size_t mz_file_read_func_stdio(void *pOpaque,
- mz_uint64 file_ofs, void *pBuf,
- size_t n) {
- MZ_FILE *pSrc_file = (MZ_FILE *) pOpaque;
- mz_int64 cur_ofs = MZ_FTELL64(pSrc_file);
-
- if (((mz_int64) file_ofs < 0) ||
- (((cur_ofs != (mz_int64) file_ofs)) &&
- (MZ_FSEEK64(pSrc_file, (mz_int64) file_ofs, SEEK_SET))))
- return 0;
-
- return MZ_FREAD(pBuf, 1, n, pSrc_file);
-}
-
-mz_bool mz_zip_writer_add_cfile(
- mz_zip_archive *pZip, const char *pArchive_name,
- MZ_FILE *pSrc_file, mz_uint64 max_size,
- const MZ_TIME_T *pFile_time, const void *pComment,
- mz_uint16 comment_size, mz_uint level_and_flags,
- const char *user_extra_data, mz_uint user_extra_data_len,
- const char *user_extra_data_central,
- mz_uint user_extra_data_central_len) {
- return mz_zip_writer_add_read_buf_callback(
- pZip, pArchive_name, mz_file_read_func_stdio, pSrc_file,
- max_size, pFile_time, pComment, comment_size, level_and_flags,
- user_extra_data, user_extra_data_len, user_extra_data_central,
- user_extra_data_central_len);
-}
-
-mz_bool mz_zip_writer_add_file(mz_zip_archive *pZip,
- const char *pArchive_name,
- const char *pSrc_filename,
- const void *pComment,
- mz_uint16 comment_size,
- mz_uint level_and_flags) {
- MZ_FILE *pSrc_file = NULL;
- mz_uint64 uncomp_size = 0;
- MZ_TIME_T file_modified_time;
- MZ_TIME_T *pFile_time = NULL;
- mz_bool status;
-
- memset(&file_modified_time, 0, sizeof(file_modified_time));
-
-# if !defined(MINIZ_NO_TIME) && !defined(MINIZ_NO_STDIO)
- pFile_time = &file_modified_time;
- if (!mz_zip_get_file_modified_time(pSrc_filename,
- &file_modified_time))
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_STAT_FAILED);
-# endif
-
- pSrc_file = MZ_FOPEN(pSrc_filename, "rb");
- if (!pSrc_file)
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_OPEN_FAILED);
-
- MZ_FSEEK64(pSrc_file, 0, SEEK_END);
- uncomp_size = MZ_FTELL64(pSrc_file);
- MZ_FSEEK64(pSrc_file, 0, SEEK_SET);
-
- status = mz_zip_writer_add_cfile(
- pZip, pArchive_name, pSrc_file, uncomp_size, pFile_time,
- pComment, comment_size, level_and_flags, NULL, 0, NULL, 0);
-
- MZ_FCLOSE(pSrc_file);
-
- return status;
-}
-# endif /* #ifndef MINIZ_NO_STDIO */
-
-static mz_bool mz_zip_writer_update_zip64_extension_block(
- mz_zip_array *pNew_ext, mz_zip_archive *pZip,
- const mz_uint8 *pExt, mz_uint32 ext_len, mz_uint64 *pComp_size,
- mz_uint64 *pUncomp_size, mz_uint64 *pLocal_header_ofs,
- mz_uint32 *pDisk_start) {
- /* + 64 should be enough for any new zip64 data */
- if (!mz_zip_array_reserve(pZip, pNew_ext, ext_len + 64, MZ_FALSE))
- return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
-
- mz_zip_array_resize(pZip, pNew_ext, 0, MZ_FALSE);
-
- if ((pUncomp_size) || (pComp_size) || (pLocal_header_ofs) ||
- (pDisk_start)) {
- mz_uint8 new_ext_block[64];
- mz_uint8 *pDst = new_ext_block;
- mz_write_le16(pDst,
- MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID);
- mz_write_le16(pDst + sizeof(mz_uint16), 0);
- pDst += sizeof(mz_uint16) * 2;
-
- if (pUncomp_size) {
- mz_write_le64(pDst, *pUncomp_size);
- pDst += sizeof(mz_uint64);
- }
-
- if (pComp_size) {
- mz_write_le64(pDst, *pComp_size);
- pDst += sizeof(mz_uint64);
- }
-
- if (pLocal_header_ofs) {
- mz_write_le64(pDst, *pLocal_header_ofs);
- pDst += sizeof(mz_uint64);
- }
-
- if (pDisk_start) {
- mz_write_le32(pDst, *pDisk_start);
- pDst += sizeof(mz_uint32);
- }
-
- mz_write_le16(
- new_ext_block + sizeof(mz_uint16),
- (mz_uint16) ((pDst - new_ext_block) - sizeof(mz_uint16) * 2));
-
- if (!mz_zip_array_push_back(pZip, pNew_ext, new_ext_block,
- pDst - new_ext_block))
- return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
- }
-
- if ((pExt) && (ext_len)) {
- mz_uint32 extra_size_remaining = ext_len;
- const mz_uint8 *pExtra_data = pExt;
-
- do {
- mz_uint32 field_id, field_data_size, field_total_size;
-
- if (extra_size_remaining < (sizeof(mz_uint16) * 2))
- return mz_zip_set_error(pZip,
- MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-
- field_id = MZ_READ_LE16(pExtra_data);
- field_data_size = MZ_READ_LE16(pExtra_data + sizeof(mz_uint16));
- field_total_size = field_data_size + sizeof(mz_uint16) * 2;
-
- if (field_total_size > extra_size_remaining)
- return mz_zip_set_error(pZip,
- MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-
- if (field_id != MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID) {
- if (!mz_zip_array_push_back(pZip, pNew_ext, pExtra_data,
- field_total_size))
- return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
- }
-
- pExtra_data += field_total_size;
- extra_size_remaining -= field_total_size;
- } while (extra_size_remaining);
- }
-
- return MZ_TRUE;
-}
-
-/* TODO: This func is now pretty freakin complex due to zip64, split
- * it up? */
-mz_bool mz_zip_writer_add_from_zip_reader(mz_zip_archive *pZip,
- mz_zip_archive *pSource_zip,
- mz_uint src_file_index) {
- mz_uint n, bit_flags, num_alignment_padding_bytes,
- src_central_dir_following_data_size;
- mz_uint64 src_archive_bytes_remaining, local_dir_header_ofs;
- mz_uint64 cur_src_file_ofs, cur_dst_file_ofs;
- mz_uint32 local_header_u32[(MZ_ZIP_LOCAL_DIR_HEADER_SIZE +
- sizeof(mz_uint32) - 1) /
- sizeof(mz_uint32)];
- mz_uint8 *pLocal_header = (mz_uint8 *) local_header_u32;
- mz_uint8 new_central_header[MZ_ZIP_CENTRAL_DIR_HEADER_SIZE];
- size_t orig_central_dir_size;
- mz_zip_internal_state *pState;
- void *pBuf;
- const mz_uint8 *pSrc_central_header;
- mz_zip_archive_file_stat src_file_stat;
- mz_uint32 src_filename_len, src_comment_len, src_ext_len;
- mz_uint32 local_header_filename_size, local_header_extra_len;
- mz_uint64 local_header_comp_size, local_header_uncomp_size;
- mz_bool found_zip64_ext_data_in_ldir = MZ_FALSE;
-
- /* Sanity checks */
- if ((!pZip) || (!pZip->m_pState) ||
- (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING) ||
- (!pSource_zip->m_pRead))
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
-
- pState = pZip->m_pState;
-
- /* Don't support copying files from zip64 archives to non-zip64,
- * even though in some cases this is possible */
- if ((pSource_zip->m_pState->m_zip64) && (!pZip->m_pState->m_zip64))
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
-
- /* Get pointer to the source central dir header and crack it */
- if (NULL == (pSrc_central_header = mz_zip_get_cdh(pSource_zip,
- src_file_index)))
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
-
- if (MZ_READ_LE32(pSrc_central_header + MZ_ZIP_CDH_SIG_OFS) !=
- MZ_ZIP_CENTRAL_DIR_HEADER_SIG)
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-
- src_filename_len = MZ_READ_LE16(pSrc_central_header +
- MZ_ZIP_CDH_FILENAME_LEN_OFS);
- src_comment_len = MZ_READ_LE16(pSrc_central_header +
- MZ_ZIP_CDH_COMMENT_LEN_OFS);
- src_ext_len = MZ_READ_LE16(pSrc_central_header +
- MZ_ZIP_CDH_EXTRA_LEN_OFS);
- src_central_dir_following_data_size = src_filename_len +
- src_ext_len + src_comment_len;
-
- /* TODO: We don't support central dir's >= MZ_UINT32_MAX bytes right
- * now (+32 fudge factor in case we need to add more extra data) */
- if ((pState->m_central_dir.m_size + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE +
- src_central_dir_following_data_size + 32) >= MZ_UINT32_MAX)
- return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_CDIR_SIZE);
-
- num_alignment_padding_bytes =
- mz_zip_writer_compute_padding_needed_for_file_alignment(pZip);
-
- if (!pState->m_zip64) {
- if (pZip->m_total_files == MZ_UINT16_MAX)
- return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES);
- } else {
- /* TODO: Our zip64 support still has some 32-bit limits that may
- * not be worth fixing. */
- if (pZip->m_total_files == MZ_UINT32_MAX)
- return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES);
- }
-
- if (!mz_zip_file_stat_internal(pSource_zip, src_file_index,
- pSrc_central_header, &src_file_stat,
- NULL))
- return MZ_FALSE;
-
- cur_src_file_ofs = src_file_stat.m_local_header_ofs;
- cur_dst_file_ofs = pZip->m_archive_size;
-
- /* Read the source archive's local dir header */
- if (pSource_zip->m_pRead(pSource_zip->m_pIO_opaque,
- cur_src_file_ofs, pLocal_header,
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE) !=
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE)
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED);
-
- if (MZ_READ_LE32(pLocal_header) != MZ_ZIP_LOCAL_DIR_HEADER_SIG)
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
-
- cur_src_file_ofs += MZ_ZIP_LOCAL_DIR_HEADER_SIZE;
-
- /* Compute the total size we need to copy (filename+extra
- * data+compressed data) */
- local_header_filename_size = MZ_READ_LE16(
- pLocal_header + MZ_ZIP_LDH_FILENAME_LEN_OFS);
- local_header_extra_len = MZ_READ_LE16(pLocal_header +
- MZ_ZIP_LDH_EXTRA_LEN_OFS);
- local_header_comp_size = MZ_READ_LE32(
- pLocal_header + MZ_ZIP_LDH_COMPRESSED_SIZE_OFS);
- local_header_uncomp_size = MZ_READ_LE32(
- pLocal_header + MZ_ZIP_LDH_DECOMPRESSED_SIZE_OFS);
- src_archive_bytes_remaining = src_file_stat.m_comp_size +
- local_header_filename_size +
- local_header_extra_len;
-
- /* Try to find a zip64 extended information field */
- if ((local_header_extra_len) &&
- ((local_header_comp_size == MZ_UINT32_MAX) ||
- (local_header_uncomp_size == MZ_UINT32_MAX))) {
- mz_zip_array file_data_array;
- const mz_uint8 *pExtra_data;
- mz_uint32 extra_size_remaining = local_header_extra_len;
-
- mz_zip_array_init(&file_data_array, 1);
- if (!mz_zip_array_resize(pZip, &file_data_array,
- local_header_extra_len, MZ_FALSE)) {
- return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
- }
-
- if (pSource_zip->m_pRead(pSource_zip->m_pIO_opaque,
- src_file_stat.m_local_header_ofs +
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE +
- local_header_filename_size,
- file_data_array.m_p,
- local_header_extra_len) !=
- local_header_extra_len) {
- mz_zip_array_clear(pZip, &file_data_array);
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED);
- }
-
- pExtra_data = (const mz_uint8 *) file_data_array.m_p;
-
- do {
- mz_uint32 field_id, field_data_size, field_total_size;
-
- if (extra_size_remaining < (sizeof(mz_uint16) * 2)) {
- mz_zip_array_clear(pZip, &file_data_array);
- return mz_zip_set_error(pZip,
- MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
- }
-
- field_id = MZ_READ_LE16(pExtra_data);
- field_data_size = MZ_READ_LE16(pExtra_data + sizeof(mz_uint16));
- field_total_size = field_data_size + sizeof(mz_uint16) * 2;
-
- if (field_total_size > extra_size_remaining) {
- mz_zip_array_clear(pZip, &file_data_array);
- return mz_zip_set_error(pZip,
- MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
- }
-
- if (field_id == MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID) {
- const mz_uint8 *pSrc_field_data = pExtra_data +
- sizeof(mz_uint32);
-
- if (field_data_size < sizeof(mz_uint64) * 2) {
- mz_zip_array_clear(pZip, &file_data_array);
- return mz_zip_set_error(pZip,
- MZ_ZIP_INVALID_HEADER_OR_CORRUPTED);
- }
-
- local_header_uncomp_size = MZ_READ_LE64(pSrc_field_data);
- local_header_comp_size = MZ_READ_LE64(
- pSrc_field_data +
- sizeof(mz_uint64)); /* may be 0 if there's a descriptor */
-
- found_zip64_ext_data_in_ldir = MZ_TRUE;
- break;
- }
-
- pExtra_data += field_total_size;
- extra_size_remaining -= field_total_size;
- } while (extra_size_remaining);
-
- mz_zip_array_clear(pZip, &file_data_array);
- }
-
- if (!pState->m_zip64) {
- /* Try to detect if the new archive will most likely wind up too
- * big and bail early (+(sizeof(mz_uint32) * 4) is for the
- * optional descriptor which could be present, +64 is a fudge
- * factor). */
- /* We also check when the archive is finalized so this doesn't
- * need to be perfect. */
- mz_uint64 approx_new_archive_size =
- cur_dst_file_ofs + num_alignment_padding_bytes +
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE + src_archive_bytes_remaining +
- (sizeof(mz_uint32) * 4) + pState->m_central_dir.m_size +
- MZ_ZIP_CENTRAL_DIR_HEADER_SIZE +
- src_central_dir_following_data_size +
- MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE + 64;
-
- if (approx_new_archive_size >= MZ_UINT32_MAX)
- return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE);
- }
-
- /* Write dest archive padding */
- if (!mz_zip_writer_write_zeros(pZip, cur_dst_file_ofs,
- num_alignment_padding_bytes))
- return MZ_FALSE;
-
- cur_dst_file_ofs += num_alignment_padding_bytes;
-
- local_dir_header_ofs = cur_dst_file_ofs;
- if (pZip->m_file_offset_alignment) {
- MZ_ASSERT((local_dir_header_ofs &
- (pZip->m_file_offset_alignment - 1)) == 0);
- }
-
- /* The original zip's local header+ext block doesn't change, even
- * with zip64, so we can just copy it over to the dest zip */
- if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_dst_file_ofs,
- pLocal_header, MZ_ZIP_LOCAL_DIR_HEADER_SIZE) !=
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE)
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED);
-
- cur_dst_file_ofs += MZ_ZIP_LOCAL_DIR_HEADER_SIZE;
-
- /* Copy over the source archive bytes to the dest archive, also
- * ensure we have enough buf space to handle optional data
- * descriptor */
- if (NULL == (pBuf = pZip->m_pAlloc(
- pZip->m_pAlloc_opaque, 1,
- (size_t) MZ_MAX(
- 32U, MZ_MIN((mz_uint64) MZ_ZIP_MAX_IO_BUF_SIZE,
- src_archive_bytes_remaining)))))
- return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
-
- while (src_archive_bytes_remaining) {
- n = (mz_uint) MZ_MIN((mz_uint64) MZ_ZIP_MAX_IO_BUF_SIZE,
- src_archive_bytes_remaining);
- if (pSource_zip->m_pRead(pSource_zip->m_pIO_opaque,
- cur_src_file_ofs, pBuf, n) != n) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf);
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED);
- }
- cur_src_file_ofs += n;
-
- if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_dst_file_ofs, pBuf,
- n) != n) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf);
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED);
- }
- cur_dst_file_ofs += n;
-
- src_archive_bytes_remaining -= n;
- }
-
- /* Now deal with the optional data descriptor */
- bit_flags = MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_BIT_FLAG_OFS);
- if (bit_flags & 8) {
- /* Copy data descriptor */
- if ((pSource_zip->m_pState->m_zip64) ||
- (found_zip64_ext_data_in_ldir)) {
- /* src is zip64, dest must be zip64 */
-
- /* name uint32_t's */
- /* id 1 (optional in zip64?) */
- /* crc 1 */
- /* comp_size 2 */
- /* uncomp_size 2 */
- if (pSource_zip->m_pRead(
- pSource_zip->m_pIO_opaque, cur_src_file_ofs, pBuf,
- (sizeof(mz_uint32) * 6)) != (sizeof(mz_uint32) * 6)) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf);
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED);
- }
-
- n = sizeof(mz_uint32) *
- ((MZ_READ_LE32(pBuf) == MZ_ZIP_DATA_DESCRIPTOR_ID) ? 6 : 5);
- } else {
- /* src is NOT zip64 */
- mz_bool has_id;
-
- if (pSource_zip->m_pRead(
- pSource_zip->m_pIO_opaque, cur_src_file_ofs, pBuf,
- sizeof(mz_uint32) * 4) != sizeof(mz_uint32) * 4) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf);
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED);
- }
-
- has_id = (MZ_READ_LE32(pBuf) == MZ_ZIP_DATA_DESCRIPTOR_ID);
-
- if (pZip->m_pState->m_zip64) {
- /* dest is zip64, so upgrade the data descriptor */
- const mz_uint8 *pSrc_descriptor = (const mz_uint8 *) pBuf +
- (has_id ? sizeof(mz_uint32)
- : 0);
- const mz_uint32 src_crc32 = MZ_READ_LE32(pSrc_descriptor);
- const mz_uint64 src_comp_size = MZ_READ_LE32(
- pSrc_descriptor + sizeof(mz_uint32));
- const mz_uint64 src_uncomp_size = MZ_READ_LE32(
- pSrc_descriptor + 2 * sizeof(mz_uint32));
-
- mz_write_le32((mz_uint8 *) pBuf, MZ_ZIP_DATA_DESCRIPTOR_ID);
- mz_write_le32((mz_uint8 *) pBuf + sizeof(mz_uint32) * 1,
- src_crc32);
- mz_write_le64((mz_uint8 *) pBuf + sizeof(mz_uint32) * 2,
- src_comp_size);
- mz_write_le64((mz_uint8 *) pBuf + sizeof(mz_uint32) * 4,
- src_uncomp_size);
-
- n = sizeof(mz_uint32) * 6;
- } else {
- /* dest is NOT zip64, just copy it as-is */
- n = sizeof(mz_uint32) * (has_id ? 4 : 3);
- }
- }
-
- if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_dst_file_ofs, pBuf,
- n) != n) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf);
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED);
- }
-
- cur_src_file_ofs += n;
- cur_dst_file_ofs += n;
- }
- pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf);
-
- /* Finally, add the new central dir header */
- orig_central_dir_size = pState->m_central_dir.m_size;
-
- memcpy(new_central_header, pSrc_central_header,
- MZ_ZIP_CENTRAL_DIR_HEADER_SIZE);
-
- if (pState->m_zip64) {
- /* This is the painful part: We need to write a new central dir
- * header + ext block with updated zip64 fields, and ensure the
- * old fields (if any) are not included. */
- const mz_uint8 *pSrc_ext = pSrc_central_header +
- MZ_ZIP_CENTRAL_DIR_HEADER_SIZE +
- src_filename_len;
- mz_zip_array new_ext_block;
-
- mz_zip_array_init(&new_ext_block, sizeof(mz_uint8));
-
- MZ_WRITE_LE32(new_central_header + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS,
- MZ_UINT32_MAX);
- MZ_WRITE_LE32(new_central_header +
- MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS,
- MZ_UINT32_MAX);
- MZ_WRITE_LE32(new_central_header + MZ_ZIP_CDH_LOCAL_HEADER_OFS,
- MZ_UINT32_MAX);
-
- if (!mz_zip_writer_update_zip64_extension_block(
- &new_ext_block, pZip, pSrc_ext, src_ext_len,
- &src_file_stat.m_comp_size, &src_file_stat.m_uncomp_size,
- &local_dir_header_ofs, NULL)) {
- mz_zip_array_clear(pZip, &new_ext_block);
- return MZ_FALSE;
- }
-
- MZ_WRITE_LE16(new_central_header + MZ_ZIP_CDH_EXTRA_LEN_OFS,
- new_ext_block.m_size);
-
- if (!mz_zip_array_push_back(pZip, &pState->m_central_dir,
- new_central_header,
- MZ_ZIP_CENTRAL_DIR_HEADER_SIZE)) {
- mz_zip_array_clear(pZip, &new_ext_block);
- return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
- }
-
- if (!mz_zip_array_push_back(pZip, &pState->m_central_dir,
- pSrc_central_header +
- MZ_ZIP_CENTRAL_DIR_HEADER_SIZE,
- src_filename_len)) {
- mz_zip_array_clear(pZip, &new_ext_block);
- mz_zip_array_resize(pZip, &pState->m_central_dir,
- orig_central_dir_size, MZ_FALSE);
- return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
- }
-
- if (!mz_zip_array_push_back(pZip, &pState->m_central_dir,
- new_ext_block.m_p,
- new_ext_block.m_size)) {
- mz_zip_array_clear(pZip, &new_ext_block);
- mz_zip_array_resize(pZip, &pState->m_central_dir,
- orig_central_dir_size, MZ_FALSE);
- return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
- }
-
- if (!mz_zip_array_push_back(pZip, &pState->m_central_dir,
- pSrc_central_header +
- MZ_ZIP_CENTRAL_DIR_HEADER_SIZE +
- src_filename_len + src_ext_len,
- src_comment_len)) {
- mz_zip_array_clear(pZip, &new_ext_block);
- mz_zip_array_resize(pZip, &pState->m_central_dir,
- orig_central_dir_size, MZ_FALSE);
- return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
- }
-
- mz_zip_array_clear(pZip, &new_ext_block);
- } else {
- /* sanity checks */
- if (cur_dst_file_ofs > MZ_UINT32_MAX)
- return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE);
-
- if (local_dir_header_ofs >= MZ_UINT32_MAX)
- return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE);
-
- MZ_WRITE_LE32(new_central_header + MZ_ZIP_CDH_LOCAL_HEADER_OFS,
- local_dir_header_ofs);
-
- if (!mz_zip_array_push_back(pZip, &pState->m_central_dir,
- new_central_header,
- MZ_ZIP_CENTRAL_DIR_HEADER_SIZE))
- return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
-
- if (!mz_zip_array_push_back(
- pZip, &pState->m_central_dir,
- pSrc_central_header + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE,
- src_central_dir_following_data_size)) {
- mz_zip_array_resize(pZip, &pState->m_central_dir,
- orig_central_dir_size, MZ_FALSE);
- return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
- }
- }
-
- /* This shouldn't trigger unless we screwed up during the initial
- * sanity checks */
- if (pState->m_central_dir.m_size >= MZ_UINT32_MAX) {
- /* TODO: Support central dirs >= 32-bits in size */
- mz_zip_array_resize(pZip, &pState->m_central_dir,
- orig_central_dir_size, MZ_FALSE);
- return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_CDIR_SIZE);
- }
-
- n = (mz_uint32) orig_central_dir_size;
- if (!mz_zip_array_push_back(pZip, &pState->m_central_dir_offsets,
- &n, 1)) {
- mz_zip_array_resize(pZip, &pState->m_central_dir,
- orig_central_dir_size, MZ_FALSE);
- return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED);
- }
-
- pZip->m_total_files++;
- pZip->m_archive_size = cur_dst_file_ofs;
-
- return MZ_TRUE;
-}
-
-mz_bool mz_zip_writer_finalize_archive(mz_zip_archive *pZip) {
- mz_zip_internal_state *pState;
- mz_uint64 central_dir_ofs, central_dir_size;
- mz_uint8 hdr[256];
-
- if ((!pZip) || (!pZip->m_pState) ||
- (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING))
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
-
- pState = pZip->m_pState;
-
- if (pState->m_zip64) {
- if ((mz_uint64) pState->m_central_dir.m_size >= MZ_UINT32_MAX)
- return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES);
- } else {
- if ((pZip->m_total_files > MZ_UINT16_MAX) ||
- ((pZip->m_archive_size + pState->m_central_dir.m_size +
- MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) > MZ_UINT32_MAX))
- return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES);
- }
-
- central_dir_ofs = 0;
- central_dir_size = 0;
- if (pZip->m_total_files) {
- /* Write central directory */
- central_dir_ofs = pZip->m_archive_size;
- central_dir_size = pState->m_central_dir.m_size;
- pZip->m_central_directory_file_ofs = central_dir_ofs;
- if (pZip->m_pWrite(pZip->m_pIO_opaque, central_dir_ofs,
- pState->m_central_dir.m_p,
- (size_t) central_dir_size) != central_dir_size)
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED);
-
- pZip->m_archive_size += central_dir_size;
- }
-
- if (pState->m_zip64) {
- /* Write zip64 end of central directory header */
- mz_uint64 rel_ofs_to_zip64_ecdr = pZip->m_archive_size;
-
- MZ_CLEAR_ARR(hdr);
- MZ_WRITE_LE32(hdr + MZ_ZIP64_ECDH_SIG_OFS,
- MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIG);
- MZ_WRITE_LE64(hdr + MZ_ZIP64_ECDH_SIZE_OF_RECORD_OFS,
- MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE -
- sizeof(mz_uint32) - sizeof(mz_uint64));
- MZ_WRITE_LE16(hdr + MZ_ZIP64_ECDH_VERSION_MADE_BY_OFS,
- 0x031E); /* TODO: always Unix */
- MZ_WRITE_LE16(hdr + MZ_ZIP64_ECDH_VERSION_NEEDED_OFS, 0x002D);
- MZ_WRITE_LE64(hdr + MZ_ZIP64_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS,
- pZip->m_total_files);
- MZ_WRITE_LE64(hdr + MZ_ZIP64_ECDH_CDIR_TOTAL_ENTRIES_OFS,
- pZip->m_total_files);
- MZ_WRITE_LE64(hdr + MZ_ZIP64_ECDH_CDIR_SIZE_OFS,
- central_dir_size);
- MZ_WRITE_LE64(hdr + MZ_ZIP64_ECDH_CDIR_OFS_OFS, central_dir_ofs);
- if (pZip->m_pWrite(pZip->m_pIO_opaque, pZip->m_archive_size, hdr,
- MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE) !=
- MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE)
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED);
-
- pZip->m_archive_size += MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE;
-
- /* Write zip64 end of central directory locator */
- MZ_CLEAR_ARR(hdr);
- MZ_WRITE_LE32(hdr + MZ_ZIP64_ECDL_SIG_OFS,
- MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIG);
- MZ_WRITE_LE64(hdr + MZ_ZIP64_ECDL_REL_OFS_TO_ZIP64_ECDR_OFS,
- rel_ofs_to_zip64_ecdr);
- MZ_WRITE_LE32(hdr + MZ_ZIP64_ECDL_TOTAL_NUMBER_OF_DISKS_OFS, 1);
- if (pZip->m_pWrite(pZip->m_pIO_opaque, pZip->m_archive_size, hdr,
- MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE) !=
- MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE)
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED);
-
- pZip->m_archive_size += MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE;
- }
-
- /* Write end of central directory record */
- MZ_CLEAR_ARR(hdr);
- MZ_WRITE_LE32(hdr + MZ_ZIP_ECDH_SIG_OFS,
- MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG);
- MZ_WRITE_LE16(hdr + MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS,
- MZ_MIN(MZ_UINT16_MAX, pZip->m_total_files));
- MZ_WRITE_LE16(hdr + MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS,
- MZ_MIN(MZ_UINT16_MAX, pZip->m_total_files));
- MZ_WRITE_LE32(hdr + MZ_ZIP_ECDH_CDIR_SIZE_OFS,
- MZ_MIN(MZ_UINT32_MAX, central_dir_size));
- MZ_WRITE_LE32(hdr + MZ_ZIP_ECDH_CDIR_OFS_OFS,
- MZ_MIN(MZ_UINT32_MAX, central_dir_ofs));
-
- if (pZip->m_pWrite(pZip->m_pIO_opaque, pZip->m_archive_size, hdr,
- MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) !=
- MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE)
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED);
-
-# ifndef MINIZ_NO_STDIO
- if ((pState->m_pFile) && (MZ_FFLUSH(pState->m_pFile) == EOF))
- return mz_zip_set_error(pZip, MZ_ZIP_FILE_CLOSE_FAILED);
-# endif /* #ifndef MINIZ_NO_STDIO */
-
- pZip->m_archive_size += MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE;
-
- pZip->m_zip_mode = MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED;
- return MZ_TRUE;
-}
-
-mz_bool mz_zip_writer_finalize_heap_archive(mz_zip_archive *pZip,
- void **ppBuf,
- size_t *pSize) {
- if ((!ppBuf) || (!pSize))
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
-
- *ppBuf = NULL;
- *pSize = 0;
-
- if ((!pZip) || (!pZip->m_pState))
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
-
- if (pZip->m_pWrite != mz_zip_heap_write_func)
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
-
- if (!mz_zip_writer_finalize_archive(pZip))
- return MZ_FALSE;
-
- *ppBuf = pZip->m_pState->m_pMem;
- *pSize = pZip->m_pState->m_mem_size;
- pZip->m_pState->m_pMem = NULL;
- pZip->m_pState->m_mem_size = pZip->m_pState->m_mem_capacity = 0;
-
- return MZ_TRUE;
-}
-
-mz_bool mz_zip_writer_end(mz_zip_archive *pZip) {
- return mz_zip_writer_end_internal(pZip, MZ_TRUE);
-}
-
-# ifndef MINIZ_NO_STDIO
-mz_bool mz_zip_add_mem_to_archive_file_in_place(
- const char *pZip_filename, const char *pArchive_name,
- const void *pBuf, size_t buf_size, const void *pComment,
- mz_uint16 comment_size, mz_uint level_and_flags) {
- return mz_zip_add_mem_to_archive_file_in_place_v2(
- pZip_filename, pArchive_name, pBuf, buf_size, pComment,
- comment_size, level_and_flags, NULL);
-}
-
-mz_bool mz_zip_add_mem_to_archive_file_in_place_v2(
- const char *pZip_filename, const char *pArchive_name,
- const void *pBuf, size_t buf_size, const void *pComment,
- mz_uint16 comment_size, mz_uint level_and_flags,
- mz_zip_error *pErr) {
- mz_bool status, created_new_archive = MZ_FALSE;
- mz_zip_archive zip_archive;
- struct MZ_FILE_STAT_STRUCT file_stat;
- mz_zip_error actual_err = MZ_ZIP_NO_ERROR;
-
- mz_zip_zero_struct(&zip_archive);
- if ((int) level_and_flags < 0)
- level_and_flags = MZ_DEFAULT_LEVEL;
-
- if ((!pZip_filename) || (!pArchive_name) ||
- ((buf_size) && (!pBuf)) || ((comment_size) && (!pComment)) ||
- ((level_and_flags & 0xF) > MZ_UBER_COMPRESSION)) {
- if (pErr)
- *pErr = MZ_ZIP_INVALID_PARAMETER;
- return MZ_FALSE;
- }
-
- if (!mz_zip_writer_validate_archive_name(pArchive_name)) {
- if (pErr)
- *pErr = MZ_ZIP_INVALID_FILENAME;
- return MZ_FALSE;
- }
-
- /* Important: The regular non-64 bit version of stat() can fail here
- * if the file is very large, which could cause the archive to be
- * overwritten. */
- /* So be sure to compile with _LARGEFILE64_SOURCE 1 */
- if (MZ_FILE_STAT(pZip_filename, &file_stat) != 0) {
- /* Create a new archive. */
- if (!mz_zip_writer_init_file_v2(&zip_archive, pZip_filename, 0,
- level_and_flags)) {
- if (pErr)
- *pErr = zip_archive.m_last_error;
- return MZ_FALSE;
- }
-
- created_new_archive = MZ_TRUE;
- } else {
- /* Append to an existing archive. */
- if (!mz_zip_reader_init_file_v2(
- &zip_archive, pZip_filename,
- level_and_flags |
- MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY,
- 0, 0)) {
- if (pErr)
- *pErr = zip_archive.m_last_error;
- return MZ_FALSE;
- }
-
- if (!mz_zip_writer_init_from_reader_v2(
- &zip_archive, pZip_filename, level_and_flags)) {
- if (pErr)
- *pErr = zip_archive.m_last_error;
-
- mz_zip_reader_end_internal(&zip_archive, MZ_FALSE);
-
- return MZ_FALSE;
- }
- }
-
- status = mz_zip_writer_add_mem_ex(&zip_archive, pArchive_name, pBuf,
- buf_size, pComment, comment_size,
- level_and_flags, 0, 0);
- actual_err = zip_archive.m_last_error;
-
- /* Always finalize, even if adding failed for some reason, so we
- * have a valid central directory. (This may not always succeed, but
- * we can try.) */
- if (!mz_zip_writer_finalize_archive(&zip_archive)) {
- if (!actual_err)
- actual_err = zip_archive.m_last_error;
-
- status = MZ_FALSE;
- }
-
- if (!mz_zip_writer_end_internal(&zip_archive, status)) {
- if (!actual_err)
- actual_err = zip_archive.m_last_error;
-
- status = MZ_FALSE;
- }
-
- if ((!status) && (created_new_archive)) {
- /* It's a new archive and something went wrong, so just delete it.
- */
- int ignoredStatus = MZ_DELETE_FILE(pZip_filename);
- (void) ignoredStatus;
- }
-
- if (pErr)
- *pErr = actual_err;
-
- return status;
-}
-
-void *mz_zip_extract_archive_file_to_heap_v2(
- const char *pZip_filename, const char *pArchive_name,
- const char *pComment, size_t *pSize, mz_uint flags,
- mz_zip_error *pErr) {
- mz_uint32 file_index;
- mz_zip_archive zip_archive;
- void *p = NULL;
-
- if (pSize)
- *pSize = 0;
-
- if ((!pZip_filename) || (!pArchive_name)) {
- if (pErr)
- *pErr = MZ_ZIP_INVALID_PARAMETER;
-
- return NULL;
- }
-
- mz_zip_zero_struct(&zip_archive);
- if (!mz_zip_reader_init_file_v2(
- &zip_archive, pZip_filename,
- flags | MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY, 0, 0)) {
- if (pErr)
- *pErr = zip_archive.m_last_error;
-
- return NULL;
- }
-
- if (mz_zip_reader_locate_file_v2(&zip_archive, pArchive_name,
- pComment, flags, &file_index)) {
- p = mz_zip_reader_extract_to_heap(&zip_archive, file_index, pSize,
- flags);
- }
-
- mz_zip_reader_end_internal(&zip_archive, p != NULL);
-
- if (pErr)
- *pErr = zip_archive.m_last_error;
-
- return p;
-}
-
-void *mz_zip_extract_archive_file_to_heap(const char *pZip_filename,
- const char *pArchive_name,
- size_t *pSize,
- mz_uint flags) {
- return mz_zip_extract_archive_file_to_heap_v2(
- pZip_filename, pArchive_name, NULL, pSize, flags, NULL);
-}
-
-# endif /* #ifndef MINIZ_NO_STDIO */
-
-# endif /* #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS */
-
-/* ------------------- Misc utils */
-
-mz_zip_mode mz_zip_get_mode(mz_zip_archive *pZip) {
- return pZip ? pZip->m_zip_mode : MZ_ZIP_MODE_INVALID;
-}
-
-mz_zip_type mz_zip_get_type(mz_zip_archive *pZip) {
- return pZip ? pZip->m_zip_type : MZ_ZIP_TYPE_INVALID;
-}
-
-mz_zip_error mz_zip_set_last_error(mz_zip_archive *pZip,
- mz_zip_error err_num) {
- mz_zip_error prev_err;
-
- if (!pZip)
- return MZ_ZIP_INVALID_PARAMETER;
-
- prev_err = pZip->m_last_error;
-
- pZip->m_last_error = err_num;
- return prev_err;
-}
-
-mz_zip_error mz_zip_peek_last_error(mz_zip_archive *pZip) {
- if (!pZip)
- return MZ_ZIP_INVALID_PARAMETER;
-
- return pZip->m_last_error;
-}
-
-mz_zip_error mz_zip_clear_last_error(mz_zip_archive *pZip) {
- return mz_zip_set_last_error(pZip, MZ_ZIP_NO_ERROR);
-}
-
-mz_zip_error mz_zip_get_last_error(mz_zip_archive *pZip) {
- mz_zip_error prev_err;
-
- if (!pZip)
- return MZ_ZIP_INVALID_PARAMETER;
-
- prev_err = pZip->m_last_error;
-
- pZip->m_last_error = MZ_ZIP_NO_ERROR;
- return prev_err;
-}
-
-const char *mz_zip_get_error_string(mz_zip_error mz_err) {
- switch (mz_err) {
- case MZ_ZIP_NO_ERROR: return "no error";
- case MZ_ZIP_UNDEFINED_ERROR: return "undefined error";
- case MZ_ZIP_TOO_MANY_FILES: return "too many files";
- case MZ_ZIP_FILE_TOO_LARGE: return "file too large";
- case MZ_ZIP_UNSUPPORTED_METHOD: return "unsupported method";
- case MZ_ZIP_UNSUPPORTED_ENCRYPTION:
- return "unsupported encryption";
- case MZ_ZIP_UNSUPPORTED_FEATURE: return "unsupported feature";
- case MZ_ZIP_FAILED_FINDING_CENTRAL_DIR:
- return "failed finding central directory";
- case MZ_ZIP_NOT_AN_ARCHIVE: return "not a ZIP archive";
- case MZ_ZIP_INVALID_HEADER_OR_CORRUPTED:
- return "invalid header or archive is corrupted";
- case MZ_ZIP_UNSUPPORTED_MULTIDISK:
- return "unsupported multidisk archive";
- case MZ_ZIP_DECOMPRESSION_FAILED:
- return "decompression failed or archive is corrupted";
- case MZ_ZIP_COMPRESSION_FAILED: return "compression failed";
- case MZ_ZIP_UNEXPECTED_DECOMPRESSED_SIZE:
- return "unexpected decompressed size";
- case MZ_ZIP_CRC_CHECK_FAILED: return "CRC-32 check failed";
- case MZ_ZIP_UNSUPPORTED_CDIR_SIZE:
- return "unsupported central directory size";
- case MZ_ZIP_ALLOC_FAILED: return "allocation failed";
- case MZ_ZIP_FILE_OPEN_FAILED: return "file open failed";
- case MZ_ZIP_FILE_CREATE_FAILED: return "file create failed";
- case MZ_ZIP_FILE_WRITE_FAILED: return "file write failed";
- case MZ_ZIP_FILE_READ_FAILED: return "file read failed";
- case MZ_ZIP_FILE_CLOSE_FAILED: return "file close failed";
- case MZ_ZIP_FILE_SEEK_FAILED: return "file seek failed";
- case MZ_ZIP_FILE_STAT_FAILED: return "file stat failed";
- case MZ_ZIP_INVALID_PARAMETER: return "invalid parameter";
- case MZ_ZIP_INVALID_FILENAME: return "invalid filename";
- case MZ_ZIP_BUF_TOO_SMALL: return "buffer too small";
- case MZ_ZIP_INTERNAL_ERROR: return "internal error";
- case MZ_ZIP_FILE_NOT_FOUND: return "file not found";
- case MZ_ZIP_ARCHIVE_TOO_LARGE: return "archive is too large";
- case MZ_ZIP_VALIDATION_FAILED: return "validation failed";
- case MZ_ZIP_WRITE_CALLBACK_FAILED: return "write callback failed";
- case MZ_ZIP_TOTAL_ERRORS: return "total errors";
- default: break;
- }
-
- return "unknown error";
-}
-
-/* Note: Just because the archive is not zip64 doesn't necessarily
- * mean it doesn't have Zip64 extended information extra field, argh.
- */
-mz_bool mz_zip_is_zip64(mz_zip_archive *pZip) {
- if ((!pZip) || (!pZip->m_pState))
- return MZ_FALSE;
-
- return pZip->m_pState->m_zip64;
-}
-
-size_t mz_zip_get_central_dir_size(mz_zip_archive *pZip) {
- if ((!pZip) || (!pZip->m_pState))
- return 0;
-
- return pZip->m_pState->m_central_dir.m_size;
-}
-
-mz_uint mz_zip_reader_get_num_files(mz_zip_archive *pZip) {
- return pZip ? pZip->m_total_files : 0;
-}
-
-mz_uint64 mz_zip_get_archive_size(mz_zip_archive *pZip) {
- if (!pZip)
- return 0;
- return pZip->m_archive_size;
-}
-
-mz_uint64 mz_zip_get_archive_file_start_offset(mz_zip_archive *pZip) {
- if ((!pZip) || (!pZip->m_pState))
- return 0;
- return pZip->m_pState->m_file_archive_start_ofs;
-}
-
-MZ_FILE *mz_zip_get_cfile(mz_zip_archive *pZip) {
- if ((!pZip) || (!pZip->m_pState))
- return 0;
- return pZip->m_pState->m_pFile;
-}
-
-size_t mz_zip_read_archive_data(mz_zip_archive *pZip,
- mz_uint64 file_ofs, void *pBuf,
- size_t n) {
- if ((!pZip) || (!pZip->m_pState) || (!pBuf) || (!pZip->m_pRead))
- return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
-
- return pZip->m_pRead(pZip->m_pIO_opaque, file_ofs, pBuf, n);
-}
-
-mz_uint mz_zip_reader_get_filename(mz_zip_archive *pZip,
- mz_uint file_index,
- char *pFilename,
- mz_uint filename_buf_size) {
- mz_uint n;
- const mz_uint8 *p = mz_zip_get_cdh(pZip, file_index);
- if (!p) {
- if (filename_buf_size)
- pFilename[0] = '\0';
- mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER);
- return 0;
- }
- n = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS);
- if (filename_buf_size) {
- n = MZ_MIN(n, filename_buf_size - 1);
- memcpy(pFilename, p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE, n);
- pFilename[n] = '\0';
- }
- return n + 1;
-}
-
-mz_bool mz_zip_reader_file_stat(mz_zip_archive *pZip,
- mz_uint file_index,
- mz_zip_archive_file_stat *pStat) {
- return mz_zip_file_stat_internal(pZip, file_index,
- mz_zip_get_cdh(pZip, file_index),
- pStat, NULL);
-}
-
-mz_bool mz_zip_end(mz_zip_archive *pZip) {
- if (!pZip)
- return MZ_FALSE;
-
- if (pZip->m_zip_mode == MZ_ZIP_MODE_READING)
- return mz_zip_reader_end(pZip);
-# ifndef MINIZ_NO_ARCHIVE_WRITING_APIS
- else if ((pZip->m_zip_mode == MZ_ZIP_MODE_WRITING) ||
- (pZip->m_zip_mode ==
- MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED))
- return mz_zip_writer_end(pZip);
-# endif
-
- return MZ_FALSE;
-}
-
-# ifdef __cplusplus
-}
-# endif
-
-#endif /*#ifndef MINIZ_NO_ARCHIVE_APIS*/
diff --git a/source/kit/miniz/miniz_zip.h b/source/kit/miniz/miniz_zip.h
deleted file mode 100644
index 46c0b43..0000000
--- a/source/kit/miniz/miniz_zip.h
+++ /dev/null
@@ -1,668 +0,0 @@
-#ifndef KIT_MINIZ_MINIZ_ZIP_H
-#define KIT_MINIZ_MINIZ_ZIP_H
-
-#include "miniz_common.h"
-#include "miniz_tdef.h"
-#include "miniz_tinfl.h"
-
-/* ------------------- ZIP archive reading/writing */
-
-#ifndef MINIZ_NO_ARCHIVE_APIS
-
-# ifdef __cplusplus
-extern "C" {
-# endif
-
-enum {
- /* Note: These enums can be reduced as needed to save memory or
- stack space - they are pretty conservative. */
- MZ_ZIP_MAX_IO_BUF_SIZE = 64 * 1024,
- MZ_ZIP_MAX_ARCHIVE_FILENAME_SIZE = 512,
- MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE = 512
-};
-
-typedef struct {
- /* Central directory file index. */
- mz_uint32 m_file_index;
-
- /* Byte offset of this entry in the archive's central directory.
- * Note we currently only support up to UINT_MAX or less bytes in
- * the central dir. */
- mz_uint64 m_central_dir_ofs;
-
- /* These fields are copied directly from the zip's central dir. */
- mz_uint16 m_version_made_by;
- mz_uint16 m_version_needed;
- mz_uint16 m_bit_flag;
- mz_uint16 m_method;
-
- /* CRC-32 of uncompressed data. */
- mz_uint32 m_crc32;
-
- /* File's compressed size. */
- mz_uint64 m_comp_size;
-
- /* File's uncompressed size. Note, I've seen some old archives where
- * directory entries had 512 bytes for their uncompressed sizes, but
- * when you try to unpack them you actually get 0 bytes. */
- mz_uint64 m_uncomp_size;
-
- /* Zip internal and external file attributes. */
- mz_uint16 m_internal_attr;
- mz_uint32 m_external_attr;
-
- /* Entry's local header file offset in bytes. */
- mz_uint64 m_local_header_ofs;
-
- /* Size of comment in bytes. */
- mz_uint32 m_comment_size;
-
- /* MZ_TRUE if the entry appears to be a directory. */
- mz_bool m_is_directory;
-
- /* MZ_TRUE if the entry uses encryption/strong encryption (which
- * miniz_zip doesn't support) */
- mz_bool m_is_encrypted;
-
- /* MZ_TRUE if the file is not encrypted, a patch file, and if it
- * uses a compression method we support. */
- mz_bool m_is_supported;
-
- /* Filename. If string ends in '/' it's a subdirectory entry. */
- /* Guaranteed to be zero terminated, may be truncated to fit. */
- char m_filename[MZ_ZIP_MAX_ARCHIVE_FILENAME_SIZE];
-
- /* Comment field. */
- /* Guaranteed to be zero terminated, may be truncated to fit. */
- char m_comment[MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE];
-
-# ifdef MINIZ_NO_TIME
- MZ_TIME_T m_padding;
-# else
- MZ_TIME_T m_time;
-# endif
-} mz_zip_archive_file_stat;
-
-typedef size_t (*mz_file_read_func)(void *pOpaque, mz_uint64 file_ofs,
- void *pBuf, size_t n);
-typedef size_t (*mz_file_write_func)(void *pOpaque,
- mz_uint64 file_ofs,
- const void *pBuf, size_t n);
-typedef mz_bool (*mz_file_needs_keepalive)(void *pOpaque);
-
-struct mz_zip_internal_state_tag;
-typedef struct mz_zip_internal_state_tag mz_zip_internal_state;
-
-typedef enum {
- MZ_ZIP_MODE_INVALID = 0,
- MZ_ZIP_MODE_READING = 1,
- MZ_ZIP_MODE_WRITING = 2,
- MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED = 3
-} mz_zip_mode;
-
-typedef enum {
- MZ_ZIP_FLAG_CASE_SENSITIVE = 0x0100,
- MZ_ZIP_FLAG_IGNORE_PATH = 0x0200,
- MZ_ZIP_FLAG_COMPRESSED_DATA = 0x0400,
- MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY = 0x0800,
- MZ_ZIP_FLAG_VALIDATE_LOCATE_FILE_FLAG =
- 0x1000, /* if enabled, mz_zip_reader_locate_file() will be
- called on each file as its validated to ensure the
- func finds the file in the central dir (intended for
- testing) */
- MZ_ZIP_FLAG_VALIDATE_HEADERS_ONLY =
- 0x2000, /* validate the local headers, but don't decompress the
- entire file and check the crc32 */
- MZ_ZIP_FLAG_WRITE_ZIP64 =
- 0x4000, /* always use the zip64 file format, instead of the
- original zip file format with automatic switch to
- zip64. Use as flags parameter with
- mz_zip_writer_init*_v2 */
- MZ_ZIP_FLAG_WRITE_ALLOW_READING = 0x8000,
- MZ_ZIP_FLAG_ASCII_FILENAME = 0x10000,
- /*After adding a compressed file, seek back
- to local file header and set the correct sizes*/
- MZ_ZIP_FLAG_WRITE_HEADER_SET_SIZE = 0x20000
-} mz_zip_flags;
-
-typedef enum {
- MZ_ZIP_TYPE_INVALID = 0,
- MZ_ZIP_TYPE_USER,
- MZ_ZIP_TYPE_MEMORY,
- MZ_ZIP_TYPE_HEAP,
- MZ_ZIP_TYPE_FILE,
- MZ_ZIP_TYPE_CFILE,
- MZ_ZIP_TOTAL_TYPES
-} mz_zip_type;
-
-/* miniz error codes. Be sure to update mz_zip_get_error_string() if
- * you add or modify this enum. */
-typedef enum {
- MZ_ZIP_NO_ERROR = 0,
- MZ_ZIP_UNDEFINED_ERROR,
- MZ_ZIP_TOO_MANY_FILES,
- MZ_ZIP_FILE_TOO_LARGE,
- MZ_ZIP_UNSUPPORTED_METHOD,
- MZ_ZIP_UNSUPPORTED_ENCRYPTION,
- MZ_ZIP_UNSUPPORTED_FEATURE,
- MZ_ZIP_FAILED_FINDING_CENTRAL_DIR,
- MZ_ZIP_NOT_AN_ARCHIVE,
- MZ_ZIP_INVALID_HEADER_OR_CORRUPTED,
- MZ_ZIP_UNSUPPORTED_MULTIDISK,
- MZ_ZIP_DECOMPRESSION_FAILED,
- MZ_ZIP_COMPRESSION_FAILED,
- MZ_ZIP_UNEXPECTED_DECOMPRESSED_SIZE,
- MZ_ZIP_CRC_CHECK_FAILED,
- MZ_ZIP_UNSUPPORTED_CDIR_SIZE,
- MZ_ZIP_ALLOC_FAILED,
- MZ_ZIP_FILE_OPEN_FAILED,
- MZ_ZIP_FILE_CREATE_FAILED,
- MZ_ZIP_FILE_WRITE_FAILED,
- MZ_ZIP_FILE_READ_FAILED,
- MZ_ZIP_FILE_CLOSE_FAILED,
- MZ_ZIP_FILE_SEEK_FAILED,
- MZ_ZIP_FILE_STAT_FAILED,
- MZ_ZIP_INVALID_PARAMETER,
- MZ_ZIP_INVALID_FILENAME,
- MZ_ZIP_BUF_TOO_SMALL,
- MZ_ZIP_INTERNAL_ERROR,
- MZ_ZIP_FILE_NOT_FOUND,
- MZ_ZIP_ARCHIVE_TOO_LARGE,
- MZ_ZIP_VALIDATION_FAILED,
- MZ_ZIP_WRITE_CALLBACK_FAILED,
- MZ_ZIP_TOTAL_ERRORS
-} mz_zip_error;
-
-typedef struct {
- mz_uint64 m_archive_size;
- mz_uint64 m_central_directory_file_ofs;
-
- /* We only support up to UINT32_MAX files in zip64 mode. */
- mz_uint32 m_total_files;
- mz_zip_mode m_zip_mode;
- mz_zip_type m_zip_type;
- mz_zip_error m_last_error;
-
- mz_uint64 m_file_offset_alignment;
-
- mz_alloc_func m_pAlloc;
- mz_free_func m_pFree;
- mz_realloc_func m_pRealloc;
- void *m_pAlloc_opaque;
-
- mz_file_read_func m_pRead;
- mz_file_write_func m_pWrite;
- mz_file_needs_keepalive m_pNeeds_keepalive;
- void *m_pIO_opaque;
-
- mz_zip_internal_state *m_pState;
-
-} mz_zip_archive;
-
-typedef struct {
- mz_zip_archive *pZip;
- mz_uint flags;
-
- int status;
-
- mz_uint64 read_buf_size, read_buf_ofs, read_buf_avail,
- comp_remaining, out_buf_ofs, cur_file_ofs;
- mz_zip_archive_file_stat file_stat;
- void *pRead_buf;
- void *pWrite_buf;
-
- size_t out_blk_remain;
-
- tinfl_decompressor inflator;
-
-# ifdef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS
- mz_uint padding;
-# else
- mz_uint file_crc32;
-# endif
-
-} mz_zip_reader_extract_iter_state;
-
-/* -------- ZIP reading */
-
-/* Inits a ZIP archive reader. */
-/* These functions read and validate the archive's central directory.
- */
-mz_bool mz_zip_reader_init(mz_zip_archive *pZip, mz_uint64 size,
- mz_uint flags);
-
-mz_bool mz_zip_reader_init_mem(mz_zip_archive *pZip, const void *pMem,
- size_t size, mz_uint flags);
-
-# ifndef MINIZ_NO_STDIO
-/* Read a archive from a disk file. */
-/* file_start_ofs is the file offset where the archive actually
- * begins, or 0. */
-/* actual_archive_size is the true total size of the archive, which
- * may be smaller than the file's actual size on disk. If zero the
- * entire file is treated as the archive. */
-mz_bool mz_zip_reader_init_file(mz_zip_archive *pZip,
- const char *pFilename,
- mz_uint32 flags);
-mz_bool mz_zip_reader_init_file_v2(mz_zip_archive *pZip,
- const char *pFilename,
- mz_uint flags,
- mz_uint64 file_start_ofs,
- mz_uint64 archive_size);
-
-/* Read an archive from an already opened FILE, beginning at the
- * current file position. */
-/* The archive is assumed to be archive_size bytes long. If
- * archive_size is 0, then the entire rest of the file is assumed to
- * contain the archive. */
-/* The FILE will NOT be closed when mz_zip_reader_end() is called. */
-mz_bool mz_zip_reader_init_cfile(mz_zip_archive *pZip, MZ_FILE *pFile,
- mz_uint64 archive_size,
- mz_uint flags);
-# endif
-
-/* Ends archive reading, freeing all allocations, and closing the
- * input archive file if mz_zip_reader_init_file() was used. */
-mz_bool mz_zip_reader_end(mz_zip_archive *pZip);
-
-/* -------- ZIP reading or writing */
-
-/* Clears a mz_zip_archive struct to all zeros. */
-/* Important: This must be done before passing the struct to any
- * mz_zip functions. */
-void mz_zip_zero_struct(mz_zip_archive *pZip);
-
-mz_zip_mode mz_zip_get_mode(mz_zip_archive *pZip);
-mz_zip_type mz_zip_get_type(mz_zip_archive *pZip);
-
-/* Returns the total number of files in the archive. */
-mz_uint mz_zip_reader_get_num_files(mz_zip_archive *pZip);
-
-mz_uint64 mz_zip_get_archive_size(mz_zip_archive *pZip);
-mz_uint64 mz_zip_get_archive_file_start_offset(mz_zip_archive *pZip);
-MZ_FILE *mz_zip_get_cfile(mz_zip_archive *pZip);
-
-/* Reads n bytes of raw archive data, starting at file offset
- * file_ofs, to pBuf. */
-size_t mz_zip_read_archive_data(mz_zip_archive *pZip,
- mz_uint64 file_ofs, void *pBuf,
- size_t n);
-
-/* All mz_zip funcs set the m_last_error field in the mz_zip_archive
- * struct. These functions retrieve/manipulate this field. */
-/* Note that the m_last_error functionality is not thread safe. */
-mz_zip_error mz_zip_set_last_error(mz_zip_archive *pZip,
- mz_zip_error err_num);
-mz_zip_error mz_zip_peek_last_error(mz_zip_archive *pZip);
-mz_zip_error mz_zip_clear_last_error(mz_zip_archive *pZip);
-mz_zip_error mz_zip_get_last_error(mz_zip_archive *pZip);
-const char *mz_zip_get_error_string(mz_zip_error mz_err);
-
-/* MZ_TRUE if the archive file entry is a directory entry. */
-mz_bool mz_zip_reader_is_file_a_directory(mz_zip_archive *pZip,
- mz_uint file_index);
-
-/* MZ_TRUE if the file is encrypted/strong encrypted. */
-mz_bool mz_zip_reader_is_file_encrypted(mz_zip_archive *pZip,
- mz_uint file_index);
-
-/* MZ_TRUE if the compression method is supported, and the file is not
- * encrypted, and the file is not a compressed patch file. */
-mz_bool mz_zip_reader_is_file_supported(mz_zip_archive *pZip,
- mz_uint file_index);
-
-/* Retrieves the filename of an archive file entry. */
-/* Returns the number of bytes written to pFilename, or if
- * filename_buf_size is 0 this function returns the number of bytes
- * needed to fully store the filename. */
-mz_uint mz_zip_reader_get_filename(mz_zip_archive *pZip,
- mz_uint file_index,
- char *pFilename,
- mz_uint filename_buf_size);
-
-/* Attempts to locates a file in the archive's central directory. */
-/* Valid flags: MZ_ZIP_FLAG_CASE_SENSITIVE, MZ_ZIP_FLAG_IGNORE_PATH */
-/* Returns -1 if the file cannot be found. */
-int mz_zip_reader_locate_file(mz_zip_archive *pZip, const char *pName,
- const char *pComment, mz_uint flags);
-mz_bool mz_zip_reader_locate_file_v2(mz_zip_archive *pZip,
- const char *pName,
- const char *pComment,
- mz_uint flags,
- mz_uint32 *file_index);
-
-/* Returns detailed information about an archive file entry. */
-mz_bool mz_zip_reader_file_stat(mz_zip_archive *pZip,
- mz_uint file_index,
- mz_zip_archive_file_stat *pStat);
-
-/* MZ_TRUE if the file is in zip64 format. */
-/* A file is considered zip64 if it contained a zip64 end of central
- * directory marker, or if it contained any zip64 extended file
- * information fields in the central directory. */
-mz_bool mz_zip_is_zip64(mz_zip_archive *pZip);
-
-/* Returns the total central directory size in bytes. */
-/* The current max supported size is <= MZ_UINT32_MAX. */
-size_t mz_zip_get_central_dir_size(mz_zip_archive *pZip);
-
-/* Extracts a archive file to a memory buffer using no memory
- * allocation. */
-/* There must be at least enough room on the stack to store the
- * inflator's state (~34KB or so). */
-mz_bool mz_zip_reader_extract_to_mem_no_alloc(
- mz_zip_archive *pZip, mz_uint file_index, void *pBuf,
- size_t buf_size, mz_uint flags, void *pUser_read_buf,
- size_t user_read_buf_size);
-mz_bool mz_zip_reader_extract_file_to_mem_no_alloc(
- mz_zip_archive *pZip, const char *pFilename, void *pBuf,
- size_t buf_size, mz_uint flags, void *pUser_read_buf,
- size_t user_read_buf_size);
-
-/* Extracts a archive file to a memory buffer. */
-mz_bool mz_zip_reader_extract_to_mem(mz_zip_archive *pZip,
- mz_uint file_index, void *pBuf,
- size_t buf_size, mz_uint flags);
-mz_bool mz_zip_reader_extract_file_to_mem(mz_zip_archive *pZip,
- const char *pFilename,
- void *pBuf, size_t buf_size,
- mz_uint flags);
-
-/* Extracts a archive file to a dynamically allocated heap buffer. */
-/* The memory will be allocated via the mz_zip_archive's alloc/realloc
- * functions. */
-/* Returns NULL and sets the last error on failure. */
-void *mz_zip_reader_extract_to_heap(mz_zip_archive *pZip,
- mz_uint file_index, size_t *pSize,
- mz_uint flags);
-void *mz_zip_reader_extract_file_to_heap(mz_zip_archive *pZip,
- const char *pFilename,
- size_t *pSize,
- mz_uint flags);
-
-/* Extracts a archive file using a callback function to output the
- * file's data. */
-mz_bool mz_zip_reader_extract_to_callback(
- mz_zip_archive *pZip, mz_uint file_index,
- mz_file_write_func pCallback, void *pOpaque, mz_uint flags);
-mz_bool mz_zip_reader_extract_file_to_callback(
- mz_zip_archive *pZip, const char *pFilename,
- mz_file_write_func pCallback, void *pOpaque, mz_uint flags);
-
-/* Extract a file iteratively */
-mz_zip_reader_extract_iter_state *mz_zip_reader_extract_iter_new(
- mz_zip_archive *pZip, mz_uint file_index, mz_uint flags);
-mz_zip_reader_extract_iter_state *mz_zip_reader_extract_file_iter_new(
- mz_zip_archive *pZip, const char *pFilename, mz_uint flags);
-size_t mz_zip_reader_extract_iter_read(
- mz_zip_reader_extract_iter_state *pState, void *pvBuf,
- size_t buf_size);
-mz_bool mz_zip_reader_extract_iter_free(
- mz_zip_reader_extract_iter_state *pState);
-
-# ifndef MINIZ_NO_STDIO
-/* Extracts a archive file to a disk file and sets its last accessed
- * and modified times. */
-/* This function only extracts files, not archive directory records.
- */
-mz_bool mz_zip_reader_extract_to_file(mz_zip_archive *pZip,
- mz_uint file_index,
- const char *pDst_filename,
- mz_uint flags);
-mz_bool mz_zip_reader_extract_file_to_file(
- mz_zip_archive *pZip, const char *pArchive_filename,
- const char *pDst_filename, mz_uint flags);
-
-/* Extracts a archive file starting at the current position in the
- * destination FILE stream. */
-mz_bool mz_zip_reader_extract_to_cfile(mz_zip_archive *pZip,
- mz_uint file_index,
- MZ_FILE *File, mz_uint flags);
-mz_bool mz_zip_reader_extract_file_to_cfile(
- mz_zip_archive *pZip, const char *pArchive_filename,
- MZ_FILE *pFile, mz_uint flags);
-# endif
-
-# if 0
-/* TODO */
- typedef void *mz_zip_streaming_extract_state_ptr;
- mz_zip_streaming_extract_state_ptr mz_zip_streaming_extract_begin(mz_zip_archive *pZip, mz_uint file_index, mz_uint flags);
- mz_uint64 mz_zip_streaming_extract_get_size(mz_zip_archive *pZip, mz_zip_streaming_extract_state_ptr pState);
- mz_uint64 mz_zip_streaming_extract_get_cur_ofs(mz_zip_archive *pZip, mz_zip_streaming_extract_state_ptr pState);
- mz_bool mz_zip_streaming_extract_seek(mz_zip_archive *pZip, mz_zip_streaming_extract_state_ptr pState, mz_uint64 new_ofs);
- size_t mz_zip_streaming_extract_read(mz_zip_archive *pZip, mz_zip_streaming_extract_state_ptr pState, void *pBuf, size_t buf_size);
- mz_bool mz_zip_streaming_extract_end(mz_zip_archive *pZip, mz_zip_streaming_extract_state_ptr pState);
-# endif
-
-/* This function compares the archive's local headers, the optional
- * local zip64 extended information block, and the optional descriptor
- * following the compressed data vs. the data in the central
- * directory. */
-/* It also validates that each file can be successfully uncompressed
- * unless the MZ_ZIP_FLAG_VALIDATE_HEADERS_ONLY is specified. */
-mz_bool mz_zip_validate_file(mz_zip_archive *pZip, mz_uint file_index,
- mz_uint flags);
-
-/* Validates an entire archive by calling mz_zip_validate_file() on
- * each file. */
-mz_bool mz_zip_validate_archive(mz_zip_archive *pZip, mz_uint flags);
-
-/* Misc utils/helpers, valid for ZIP reading or writing */
-mz_bool mz_zip_validate_mem_archive(const void *pMem, size_t size,
- mz_uint flags,
- mz_zip_error *pErr);
-# ifndef MINIZ_NO_STDIO
-mz_bool mz_zip_validate_file_archive(const char *pFilename,
- mz_uint flags,
- mz_zip_error *pErr);
-# endif
-
-/* Universal end function - calls either mz_zip_reader_end() or
- * mz_zip_writer_end(). */
-mz_bool mz_zip_end(mz_zip_archive *pZip);
-
-/* -------- ZIP writing */
-
-# ifndef MINIZ_NO_ARCHIVE_WRITING_APIS
-
-/* Inits a ZIP archive writer. */
-/*Set pZip->m_pWrite (and pZip->m_pIO_opaque) before calling
- * mz_zip_writer_init or mz_zip_writer_init_v2*/
-/*The output is streamable, i.e. file_ofs in mz_file_write_func always
- * increases only by n*/
-mz_bool mz_zip_writer_init(mz_zip_archive *pZip,
- mz_uint64 existing_size);
-mz_bool mz_zip_writer_init_v2(mz_zip_archive *pZip,
- mz_uint64 existing_size, mz_uint flags);
-
-mz_bool mz_zip_writer_init_heap(mz_zip_archive *pZip,
- size_t size_to_reserve_at_beginning,
- size_t initial_allocation_size);
-mz_bool mz_zip_writer_init_heap_v2(
- mz_zip_archive *pZip, size_t size_to_reserve_at_beginning,
- size_t initial_allocation_size, mz_uint flags);
-
-# ifndef MINIZ_NO_STDIO
-mz_bool mz_zip_writer_init_file(
- mz_zip_archive *pZip, const char *pFilename,
- mz_uint64 size_to_reserve_at_beginning);
-mz_bool mz_zip_writer_init_file_v2(
- mz_zip_archive *pZip, const char *pFilename,
- mz_uint64 size_to_reserve_at_beginning, mz_uint flags);
-mz_bool mz_zip_writer_init_cfile(mz_zip_archive *pZip, MZ_FILE *pFile,
- mz_uint flags);
-# endif
-
-/* Converts a ZIP archive reader object into a writer object, to allow
- * efficient in-place file appends to occur on an existing archive. */
-/* For archives opened using mz_zip_reader_init_file, pFilename must
- * be the archive's filename so it can be reopened for writing. If the
- * file can't be reopened, mz_zip_reader_end() will be called. */
-/* For archives opened using mz_zip_reader_init_mem, the memory block
- * must be growable using the realloc callback (which defaults to
- * realloc unless you've overridden it). */
-/* Finally, for archives opened using mz_zip_reader_init, the
- * mz_zip_archive's user provided m_pWrite function cannot be NULL. */
-/* Note: In-place archive modification is not recommended unless you
- * know what you're doing, because if execution stops or something
- * goes wrong before */
-/* the archive is finalized the file's central directory will be
- * hosed. */
-mz_bool mz_zip_writer_init_from_reader(mz_zip_archive *pZip,
- const char *pFilename);
-mz_bool mz_zip_writer_init_from_reader_v2(mz_zip_archive *pZip,
- const char *pFilename,
- mz_uint flags);
-
-/* Adds the contents of a memory buffer to an archive. These functions
- * record the current local time into the archive. */
-/* To add a directory entry, call this method with an archive name
- * ending in a forwardslash with an empty buffer. */
-/* level_and_flags - compression level (0-10, see MZ_BEST_SPEED,
- * MZ_BEST_COMPRESSION, etc.) logically OR'd with zero or more
- * mz_zip_flags, or just set to MZ_DEFAULT_COMPRESSION. */
-mz_bool mz_zip_writer_add_mem(mz_zip_archive *pZip,
- const char *pArchive_name,
- const void *pBuf, size_t buf_size,
- mz_uint level_and_flags);
-
-/* Like mz_zip_writer_add_mem(), except you can specify a file comment
- * field, and optionally supply the function with already compressed
- * data. */
-/* uncomp_size/uncomp_crc32 are only used if the
- * MZ_ZIP_FLAG_COMPRESSED_DATA flag is specified. */
-mz_bool mz_zip_writer_add_mem_ex(
- mz_zip_archive *pZip, const char *pArchive_name, const void *pBuf,
- size_t buf_size, const void *pComment, mz_uint16 comment_size,
- mz_uint level_and_flags, mz_uint64 uncomp_size,
- mz_uint32 uncomp_crc32);
-
-mz_bool mz_zip_writer_add_mem_ex_v2(
- mz_zip_archive *pZip, const char *pArchive_name, const void *pBuf,
- size_t buf_size, const void *pComment, mz_uint16 comment_size,
- mz_uint level_and_flags, mz_uint64 uncomp_size,
- mz_uint32 uncomp_crc32, MZ_TIME_T *last_modified,
- const char *user_extra_data_local,
- mz_uint user_extra_data_local_len,
- const char *user_extra_data_central,
- mz_uint user_extra_data_central_len);
-
-/* Adds the contents of a file to an archive. This function also
- * records the disk file's modified time into the archive. */
-/* File data is supplied via a read callback function. User
- * mz_zip_writer_add_(c)file to add a file directly.*/
-mz_bool mz_zip_writer_add_read_buf_callback(
- mz_zip_archive *pZip, const char *pArchive_name,
- mz_file_read_func read_callback, void *callback_opaque,
- mz_uint64 max_size, const MZ_TIME_T *pFile_time,
- const void *pComment, mz_uint16 comment_size,
- mz_uint level_and_flags, const char *user_extra_data_local,
- mz_uint user_extra_data_local_len,
- const char *user_extra_data_central,
- mz_uint user_extra_data_central_len);
-
-# ifndef MINIZ_NO_STDIO
-/* Adds the contents of a disk file to an archive. This function also
- * records the disk file's modified time into the archive. */
-/* level_and_flags - compression level (0-10, see MZ_BEST_SPEED,
- * MZ_BEST_COMPRESSION, etc.) logically OR'd with zero or more
- * mz_zip_flags, or just set to MZ_DEFAULT_COMPRESSION. */
-mz_bool mz_zip_writer_add_file(mz_zip_archive *pZip,
- const char *pArchive_name,
- const char *pSrc_filename,
- const void *pComment,
- mz_uint16 comment_size,
- mz_uint level_and_flags);
-
-/* Like mz_zip_writer_add_file(), except the file data is read from
- * the specified FILE stream. */
-mz_bool mz_zip_writer_add_cfile(
- mz_zip_archive *pZip, const char *pArchive_name,
- MZ_FILE *pSrc_file, mz_uint64 max_size,
- const MZ_TIME_T *pFile_time, const void *pComment,
- mz_uint16 comment_size, mz_uint level_and_flags,
- const char *user_extra_data_local,
- mz_uint user_extra_data_local_len,
- const char *user_extra_data_central,
- mz_uint user_extra_data_central_len);
-# endif
-
-/* Adds a file to an archive by fully cloning the data from another
- * archive. */
-/* This function fully clones the source file's compressed data (no
- * recompression), along with its full filename, extra data (it may
- * add or modify the zip64 local header extra data field), and the
- * optional descriptor following the compressed data. */
-mz_bool mz_zip_writer_add_from_zip_reader(mz_zip_archive *pZip,
- mz_zip_archive *pSource_zip,
- mz_uint src_file_index);
-
-/* Finalizes the archive by writing the central directory records
- * followed by the end of central directory record. */
-/* After an archive is finalized, the only valid call on the
- * mz_zip_archive struct is mz_zip_writer_end(). */
-/* An archive must be manually finalized by calling this function for
- * it to be valid. */
-mz_bool mz_zip_writer_finalize_archive(mz_zip_archive *pZip);
-
-/* Finalizes a heap archive, returning a pointer to the heap block and
- * its size. */
-/* The heap block will be allocated using the mz_zip_archive's
- * alloc/realloc callbacks. */
-mz_bool mz_zip_writer_finalize_heap_archive(mz_zip_archive *pZip,
- void **ppBuf,
- size_t *pSize);
-
-/* Ends archive writing, freeing all allocations, and closing the
- * output file if mz_zip_writer_init_file() was used. */
-/* Note for the archive to be valid, it *must* have been finalized
- * before ending (this function will not do it for you). */
-mz_bool mz_zip_writer_end(mz_zip_archive *pZip);
-
-/* -------- Misc. high-level helper functions: */
-
-/* mz_zip_add_mem_to_archive_file_in_place() efficiently (but not
- * atomically) appends a memory blob to a ZIP archive. */
-/* Note this is NOT a fully safe operation. If it crashes or dies in
- * some way your archive can be left in a screwed up state (without a
- * central directory). */
-/* level_and_flags - compression level (0-10, see MZ_BEST_SPEED,
- * MZ_BEST_COMPRESSION, etc.) logically OR'd with zero or more
- * mz_zip_flags, or just set to MZ_DEFAULT_COMPRESSION. */
-/* TODO: Perhaps add an option to leave the existing central dir in
- * place in case the add dies? We could then truncate the file (so the
- * old central dir would be at the end) if something goes wrong. */
-mz_bool mz_zip_add_mem_to_archive_file_in_place(
- const char *pZip_filename, const char *pArchive_name,
- const void *pBuf, size_t buf_size, const void *pComment,
- mz_uint16 comment_size, mz_uint level_and_flags);
-mz_bool mz_zip_add_mem_to_archive_file_in_place_v2(
- const char *pZip_filename, const char *pArchive_name,
- const void *pBuf, size_t buf_size, const void *pComment,
- mz_uint16 comment_size, mz_uint level_and_flags,
- mz_zip_error *pErr);
-
-# ifndef MINIZ_NO_STDIO
-/* Reads a single file from an archive into a heap block. */
-/* If pComment is not NULL, only the file with the specified comment
- * will be extracted. */
-/* Returns NULL on failure. */
-void *mz_zip_extract_archive_file_to_heap(const char *pZip_filename,
- const char *pArchive_name,
- size_t *pSize,
- mz_uint flags);
-void *mz_zip_extract_archive_file_to_heap_v2(
- const char *pZip_filename, const char *pArchive_name,
- const char *pComment, size_t *pSize, mz_uint flags,
- mz_zip_error *pErr);
-# endif
-
-# endif /* #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS */
-
-# ifdef __cplusplus
-}
-# endif
-
-#endif /* MINIZ_NO_ARCHIVE_APIS */
-
-#endif
diff --git a/source/saw/_dep.c b/source/saw/_dep.c
deleted file mode 100644
index f8caaba..0000000
--- a/source/saw/_dep.c
+++ /dev/null
@@ -1,46 +0,0 @@
-// ================================================================
-//
-// Saw code dependencies
-//
-// ================================================================
-
-#if defined(__EMSCRIPTEN__)
-# define SOKOL_GLES3
-# define NANOVG_GLES3 1
-#else
-# define SOKOL_GLCORE33
-# define NANOVG_GL3 1
-#endif
-
-// hotfix for weird GCC bug
-#ifdef __linux__
-# define _GNU_SOURCE
-# include <emmintrin.h>
-#endif
-
-// kit
-//
-#include "../kit/_lib.c"
-
-// sokol
-//
-#define SOKOL_APP_IMPL
-#include "../kit/time.h" // for timespec_get
-#include "../sokol/sokol_app.h"
-
-// miniaudio
-//
-#ifdef __GNUC__
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wunused-result"
-#endif
-#define MINIAUDIO_IMPLEMENTATION
-#include "../miniaudio/miniaudio.h"
-#ifdef __GNUC__
-# pragma GCC diagnostic pop
-#endif
-
-// nanovg
-//
-#include "../nanovg/nanovg.c"
-#include "../nanovg/nanovg_gl.c"
diff --git a/source/saw/_exe.c b/source/saw/_exe.c
deleted file mode 100644
index 9c389bf..0000000
--- a/source/saw/_exe.c
+++ /dev/null
@@ -1,8 +0,0 @@
-// ================================================================
-//
-// Saw executable
-//
-// ================================================================
-
-#include "_lib.c"
-#include "main.c"
diff --git a/source/saw/_gen.c b/source/saw/_gen.c
deleted file mode 100755
index 8618f8d..0000000
--- a/source/saw/_gen.c
+++ /dev/null
@@ -1,115 +0,0 @@
-#if 0
-SRC=${0##*/}
-BIN=${SRC%.*}
-gcc -fsanitize=undefined,address,leak -o $BIN $SRC && ./$BIN && rm $BIN
-exit
-#endif
-
-// ================================================================
-//
-// Saw code generation
-//
-// ================================================================
-
-#include "../kit/types.h"
-
-#include <stdio.h>
-#include <assert.h>
-
-enum {
- MAX_LENGTH = 200,
-};
-
-i64 int_len(u32 x) {
- i64 len = 0;
-
- do {
- x /= 10;
- ++len;
- } while (x > 0);
-
- return len;
-}
-
-i64 print_bytes(FILE *out, FILE *in) {
- i64 size = 0, line_len = MAX_LENGTH;
-
- while (!feof(in)) {
- u32 x = 0;
-
- i64 n = fread(&x, 1, sizeof x, in);
- if (n <= 0)
- break;
-
- i64 len = int_len(x);
-
- line_len += len + 2;
-
- if (line_len >= MAX_LENGTH) {
- fprintf(out, "\n ");
- line_len = 3 + len;
- }
-
- fprintf(out, " %u,", x);
-
- size += n;
- }
-
- return size;
-}
-
-int main(int argc, char **argv) {
- FILE *out = fopen("fonts.inl.h", "wb");
- assert(out != NULL);
-
- fprintf(out, "// "
- "====================================================="
- "===========\n");
- fprintf(out, "//\n");
- fprintf(out, "// Saw generated code\n");
- fprintf(out, "//\n");
- fprintf(out, "// "
- "====================================================="
- "===========\n\n");
-
- fprintf(out, "#ifndef SAW_FONTS_INL_H\n");
- fprintf(out, "#define SAW_FONTS_INL_H\n\n");
- fprintf(out, "#include \"../kit/types.h\"\n\n");
-
- // Write Domitian Roman
- //
- {
- FILE *in = fopen("fonts/domitian_roman.ttf", "rb");
- assert(in != NULL);
-
- fprintf(out, "static u32 saw_ttf_text[] = {");
-
- i64 n = print_bytes(out, in);
-
- fprintf(out, "\n};\n\n");
- fprintf(out, "enum { SAW_TTF_TEXT_SIZE = %lld, };\n\n", n);
-
- fclose(in);
- }
-
- // Write Font Awesome
- //
- {
- FILE *in = fopen("fonts/font_awesome_6_free_solid_900.ttf", "rb");
- assert(in != NULL);
-
- fprintf(out, "static u32 saw_ttf_icons[] = {");
-
- i64 n = print_bytes(out, in);
-
- fprintf(out, "\n};\n\n");
- fprintf(out, "enum { SAW_TTF_ICONS_SIZE = %lld, };\n\n", n);
-
- fclose(in);
- }
-
- fprintf(out, "#endif\n");
- fclose(out);
-
- return 0;
-}
diff --git a/source/saw/_lib.c b/source/saw/_lib.c
deleted file mode 100644
index ca3a780..0000000
--- a/source/saw/_lib.c
+++ /dev/null
@@ -1,5 +0,0 @@
-// ================================================================
-//
-// Saw library
-//
-// ================================================================
diff --git a/source/saw/fonts.inl.h b/source/saw/fonts.inl.h
deleted file mode 100644
index 8d89b08..0000000
--- a/source/saw/fonts.inl.h
+++ /dev/null
@@ -1,8638 +0,0 @@
-// ================================================================
-//
-// Saw generated code
-//
-// ================================================================
-
-#ifndef SAW_FONTS_INL_H
-#define SAW_FONTS_INL_H
-
-#include "../kit/types.h"
-
-static u32 saw_ttf_text[] = {
- 256, 2147487232, 1610613504, 1297368646, 3501982855, 4106945024, 469762048, 1178944583, 1930794257, 281805312, 1644167168, 1397706823, 2991935125, 1959526912, 3090087936, 1112888135, 4025693073,
- 754713088, 1141571584, 841962319, 3603506536, 1744896000, 1610612736, 1885433187, 266928469, 1880162304, 2919628800, 1719233639, 3182708094, 3559325696, 1769865728, 1684104552, 1859704343,
- 3959422976, 905969664, 1634035816, 2298884871, 604045312, 603979776, 2020896104, 2478244280, 3355508736, 2786000896, 1633906540, 100540677, 538443776, 3020881920, 1886937453, 2818635267,
- 1208025088, 536870912, 1701667182, 2451768425, 1084621312, 3993108480, 1953722224, 2159859069, 816382464, 3257008128, 256, 256, 2960016390, 4114354015, 3892513024, 0, 2190046163, 0, 285979873,
- 2701023999, 1426339844, 134217728, 16777728, 0, 256, 4009678338, 2013579264, 1006590719, 16791556, 0, 0, 0, 3875733504, 256, 2801855491, 2304, 16777216, 0, 0, 0, 0, 2365719296, 83922945,
- 2315386880, 22530, 2315406080, 22530, 838884865, 3329, 33883138, 50660613, 1027, 34562, 8, 0, 1146617856, 1073761602, 83566592, 4009678338, 2667825152, 6298369, 40704, 3238068224, 536916226,
- 50339840, 62465, 64000, 1358960129, 872444673, 67171329, 503378945, 654329859, 721422851, 1023463424, 1006652673, 536890625, 536904961, 855662082, 268499456, 285232385, 1124137472, 1459641858,
- 486601729, 1006695425, 268497921, 251720705, 33616897, 218166273, 536933377, 738259969, 503378945, 335606785, 1107360256, 268499456, 838884866, 855662082, 905993730, 721468417, 402713346,
- 251660803, 436232962, 369149186, 369100291, 369124098, 369110018, 369163010, 369115139, 369119489, 4060040449, 369153538, 369124098, 268481027, 285228803, 369103363, 369122306, 369103363,
- 369138690, 402656514, 302015746, 201329155, 134271490, 134277123, 234920706, 151034626, 251697922, 1325419777, 1358978562, 754994433, 855662082, 62465, 520113409, 536933377, 4060031234, 436255745,
- 587227906, 436264705, 385895681, 536882178, 100681218, 352330497, 3640650240, 352332802, 352330497, 268464899, 100681218, 536879618, 134240514, 587214850, 352357121, 503359489, 369116673,
- 302013186, 100676866, 100680195, 335545346, 201337858, 268497921, 973098241, 318856706, 738217217, 855662082, 64000, 1358960129, 1023472641, 201389057, 503378945, 83948545, 318856706, 436270081,
- 285232385, 184609538, 402672897, 838923265, 805330434, 285232385, 184609538, 184569089, 838897665, 855662082, 100674561, 83897345, 1308642561, 302013186, 654341122, 1124137472, 1610632449,
- 536882177, 167791873, 838923265, 503377410, 251719170, 251719170, 721468417, 251660803, 251660803, 251660803, 251660803, 251660803, 251660803, 4143951875, 369149186, 369124098, 369124098,
- 369124098, 369124098, 369119489, 369119489, 218124545, 318787841, 234882563, 285228803, 369103363, 369103363, 369103363, 369103363, 369103363, 1392532994, 503333123, 201329155, 201329155,
- 201329155, 201329155, 151034626, 536894466, 385887234, 536933377, 536933377, 536933377, 536933377, 536933377, 536933377, 503379458, 436255745, 436264705, 436264705, 436264705, 436264705, 134225665,
- 352329473, 4110360321, 4211023617, 536879618, 100681218, 536879618, 536879618, 536879618, 536879618, 536879618, 855662082, 268446722, 302013186, 302013186, 302013186, 302013186, 201337858,
- 4278147330, 201337858, 251660803, 536933377, 251660803, 536933377, 251660803, 536933377, 369149186, 436255745, 369149186, 436255745, 369149186, 436255745, 369149186, 436255745, 369100291,
- 587263746, 234882563, 587227906, 369124098, 436264705, 369124098, 436264705, 369124098, 436264705, 369124098, 436264705, 369124098, 436264705, 369163010, 536882178, 369163010, 536882178, 369163010,
- 536882178, 369163010, 536882178, 369115139, 100681218, 369115139, 100681218, 33575169, 3724484353, 218124545, 4110360321, 369119489, 352329473, 369119489, 352330497, 369119489, 352329473,
- 570471938, 352324866, 4060040449, 3640650240, 369153538, 352332802, 4143918082, 369124098, 352330497, 369124098, 352330497, 369124098, 352367617, 369124098, 536911105, 100688642, 4076806913,
- 285228803, 100681218, 285228803, 100681218, 285228803, 100681218, 402706690, 1191198467, 100675842, 369103363, 536879618, 369103363, 536879618, 369103363, 536879618, 369157635, 536886019,
- 369138690, 352357121, 369138690, 352357121, 369138690, 352357121, 402656514, 503359489, 402656514, 503359489, 402656514, 503359489, 402656514, 503359489, 302015746, 369116673, 302015746,
- 1140894977, 302015746, 302007809, 201329155, 302013186, 201329155, 302013186, 201329155, 302013186, 201329155, 302013186, 201329155, 302013186, 201329155, 302013186, 134277123, 100680195,
- 151034626, 201337858, 151034626, 251697922, 268497921, 251697922, 268497921, 251697922, 268497921, 385895681, 62465, 251660803, 536933377, 4143951875, 503379458, 503333123, 268455169, 402656514,
- 503359489, 302015746, 369116673, 184569089, 184569089, 184569089, 436227329, 1258355200, 1124093185, 1140865281, 33574145, 50363393, 1157687552, 25601, 352381442, 1124137472, 234929410, 234919683,
- 234926593, 352340995, 117504258, 352347395, 3724481537, 167829506, 520113410, 402660354, 352353282, 402672898, 352355330, 402663171, 754983683, 419447553, 402700290, 167821058, 285249283,
- 352328707, 922805506, 754983683, 402663171, 402672898, 167803394, 251676674, 83919362, 117457411, 234914562, 117466115, 452999939, 419447553, 83919362, 637566210, 637577985, 402673154, 419435521,
- 234885634, 637566210, 5378, 4194300673, 637539842, 637577985, 620796161, 402673154, 637539842, 419435521, 285225730, 117442306, 268456194, 4194301185, 822125313, 637539842, 234915842, 50344962,
- 637583361, 637547522, 55041, 285218306, 637568002, 61441, 285253890, 637567234, 251663361, 285218306, 637539842, 234885634, 637567234, 4076814594, 637570050, 553672706, 402672898, 402672898,
- 251711746, 402660354, 755021570, 922761730, 419447553, 419447553, 4110371585, 117499139, 402717955, 251669251, 402700290, 402663171, 234905090, 402663427, 167829506, 520113410, 520113410,
- 402660354, 50394626, 402672898, 50394627, 805339906, 402663171, 402663171, 402700290, 117444355, 285249283, 402663171, 754983683, 402663171, 402672898, 755021570, 251676674, 234905090, 117457411,
- 234914562, 402664451, 117494530, 402666244, 402667524, 234938114, 402669315, 402669058, 755030018, 402678788, 39170, 637592065, 637540354, 402705409, 402695425, 50345986, 637592321, 50333187,
- 922797825, 402678786, 402678786, 402668034, 50350082, 402700290, 402678786, 637539842, 402678786, 268451842, 637583361, 234941185, 4194300673, 453040130, 234945793, 402678786, 16787714, 402671619,
- 402671619, 117447938, 402691842, 402701825, 520147713, 402655235, 134219266, 637592321, 637592321, 234884354, 402695425, 637583361, 637574657, 419435521, 251663361, 4110355713, 50381826, 402710786,
- 234896386, 402668034, 402682626, 4194300673, 402678786, 402669058, 402701825, 754983683, 637539842, 134271490, 100676866, 402659842, 402695425, 452991746, 402695425, 50391555, 50395138, 805339906,
- 922797825, 402700290, 402658818, 402705154, 402668034, 1946138626, 2902407682, 402664707, 402678786, 369149186, 436255745, 83919362, 4194300673, 83919362, 4194300673, 234914562, 234942721,
- 117496834, 16788226, 117494530, 16787714, 402707202, 234896386, 419447553, 117494530, 16787714, 419447553, 687923202, 637592321, 402663171, 402682626, 754983683, 637539842, 234911234, 4194300673,
- 134277123, 100680195, 134277123, 100680195, 134277123, 100680195, 151034626, 201337858, 62465, 62465, 59395, 59395, 62465, 754980353, 754980353, 369104385, 1375751425, 855700481, 855700481,
- 855700481, 570487809, 570487809, 2734710274, 1828775939, 2063628292, 620810240, 369128193, 1107315457, 1107315457, 1409287682, 62465, 1526703872, 318780929, 33568257, 83899905, 352335361,
- 469775873, 318780929, 184563201, 1308674305, 436218882, 268441347, 2818613763, 3674207233, 570484739, 2365645827, 302008323, 754990082, 1191236098, 754990595, 1291907585, 352335108, 1107331074,
- 603982339, 1392571394, 436232450, 671142659, 4160708610, 4261371906, 956340226, 671119618, 151042561, 805368833, 587250177, 939543553, 536931074, 83946242, 67169026, 385936130, 53762, 3238056450,
- 53762, 3238056450, 53762, 3288388098, 4127182594, 4227845890, 4227845890, 4127182594, 3288388098, 2717968387, 2667635715, 2667635715, 53762, 2600522242, 53762, 2600522242, 16830978, 1912655618,
- 369119490, 385937921, 838903809, 1744889859, 419469314, 419469314, 2868963331, 2885740547, 2852186115, 570477569, 1862330371, 2516641795, 805330434, 3909149699, 1526703872, 1157752835, 1124137472,
- 1526780418, 3439388675, 2399200259, 1006692355, 3758155779, 1208078082, 4227911426, 3657492483, 3657492483, 3137398787, 3137398787, 4026591235, 3993035779, 3170953219, 3137397763, 3137397763,
- 3271616515, 3238062083, 3909150723, 3405834243, 3674268675, 184674307, 151119875, 2835407875, 2835407875, 3019958275, 3019958275, 3019958275, 3019957251, 3070289923, 3070289923, 2348869635,
- 2315314179, 2365646851, 2332091395, 2315314179, 3036734467, 3036734467, 3724600323, 3758155779, 3623937027, 2348869635, 3053483267, 1107415554, 2214646274, 620776705, 587222273, 4294961155,
- 3573671939, 3573671939, 59395, 3573671939, 59395, 3573671939, 59395, 59395, 59395, 59395, 59395, 1996613635, 3573671939, 1996613635, 1996613635, 59395, 59395, 59395, 3573671939, 1996613635,
- 1996613635, 59395, 59395, 59395, 3573671939, 1996613635, 1996613635, 59395, 59395, 59395, 59395, 59395, 59395, 59395, 59395, 59395, 59395, 59395, 59395, 3540116483, 4261405699, 4261405699,
- 3540116483, 59395, 59395, 59395, 4294961155, 4093765635, 59395, 59395, 59395, 2097205762, 2097205762, 1140913153, 1140913153, 2382424067, 2516636162, 2046873346, 2113982210, 2449527298, 2516636162,
- 2046873346, 2130759426, 2030096898, 4043367427, 3187729411, 889208322, 1711329794, 2466304514, 956360707, 956360707, 956363265, 2332092419, 2298537987, 2516641795, 2382418434, 1224790530,
- 2516641795, 1694558211, 2516641795, 3321948163, 1140913153, 2566967810, 4110404866, 4110404866, 1879035394, 52482, 52482, 4177513730, 4177513730, 4144024834, 4144024834, 738249986, 738249986,
- 738249986, 4144024834, 2080427266, 52482, 939642114, 4093631490, 52482, 3858746626, 52482, 3858746626, 3925855490, 3925855234, 2197867778, 369114114, 1711333635, 1946214659, 1946214659, 369156355,
- 1946214659, 1946214659, 1459670274, 939642114, 2415971586, 1040305410, 2415971586, 939642114, 2315308290, 939642114, 52482, 52482, 1057082626, 1057082626, 52482, 52482, 52482, 52482, 738202882,
- 2365645059, 2365645059, 2365645059, 2432753923, 872416259, 268496897, 352347906, 385899778, 385900546, 369129219, 385907203, 385938433, 1208022017, 469824513, 218166273, 33616897, 100725761,
- 536933377, 738259969, 503378945, 453047297, 302015234, 469824513, 738210818, 604005122, 385938433, 302038017, 469773314, 402692866, 503336193, 201346305, 469773314, 335606785, 570427907, 402690050,
- 671113986, 402715649, 671113986, 402664450, 738245633, 302052353, 335569666, 201337858, 201329155, 268497921, 234943489, 335603969, 302015234, 302015234, 302015234, 302015234, 302015234, 302015234,
- 738210818, 385938433, 385938433, 385938433, 385938433, 503336193, 503336193, 385895681, 469781761, 402690050, 671113986, 671113986, 671113986, 671113986, 671113986, 536896258, 335569666, 335569666,
- 335569666, 335569666, 234943489, 302015234, 302015234, 302015234, 738210818, 738210818, 738210818, 738210818, 604005122, 385938433, 385938433, 385938433, 385938433, 385938433, 469773314, 469773314,
- 469773314, 402692866, 19713, 117460225, 369118465, 503336193, 201346305, 469773314, 335606785, 335606785, 335606785, 402690050, 402690050, 402690050, 671113986, 671113986, 671113986, 402664450,
- 402664450, 402664450, 738245633, 738245633, 738245633, 738245633, 302052353, 302052353, 335569666, 335569666, 335569666, 335569666, 335569666, 335569666, 201329155, 234943489, 234943489, 335603969,
- 335603969, 335603969, 302015234, 536896258, 738245633, 302052353, 503355906, 604005122, 134220291, 604005122, 704645635, 335606785, 201329155, 201329155, 201329155, 234943489, 402672897, 469773314,
- 402692866, 335606785, 302052353, 134220291, 503336193, 503336193, 738223107, 318780929, 536882177, 100674561, 83897345, 33568257, 352322816, 318774272, 2816, 50331648, 50331648, 469762048, 256,
- 2751725568, 16777984, 469762048, 2281964544, 503382016, 117440513, 2113936896, 2449571585, 453181185, 3372402434, 2315508994, 2701364227, 3506687491, 1594152451, 1963221764, 2634322692, 2869207812,
- 3137647364, 3422863364, 3640971012, 3909411588, 2233396996, 35713822, 505419040, 639640096, 857747488, 1008744992, 1142963744, 2032168992, 2753593120, 2887821088, 3709906720, 253822241, 371266337,
- 471930913, 539041313, 639705633, 790702113, 1579235105, 2820774177, 3290543393, 3575760417, 52559906, 186779938, 253889826, 354554658, 438441762, 589439010, 723658018, 891432482, 1159870242,
- 1646413858, 1797416226, 2569176866, 3139609890, 270729763, 706945315, 35979301, 270863397, 405083173, 606411813, 874851365, 1881488421, 2217050149, 2351269925, 2703594277, 2988813349, 3123033381,
- 3206921253, 3341141029, 3475360549, 3861240101, 1076247590, 1613120038, 1713791782, 456157990, 4293913839, 4294903035, 536870912, 2449580032, 402848257, 3372402178, 2214844418, 2382597123,
- 3506676483, 316675, 1912889860, 2516881412, 2852429828, 3053760004, 3406086148, 3624193796, 3892634116, 2149510660, 35713566, 387978016, 639639584, 840970272, 1008744736, 1142963744, 1948282912,
- 2736815904, 2887821088, 3709906720, 253822241, 371265825, 471930913, 539041313, 639705633, 757147681, 1528902945, 2820771873, 3290543393, 3491874337, 35782690, 186778914, 253889826, 354554146,
- 421664546, 589438242, 656549154, 874655266, 1159870242, 1612859426, 1780638754, 2502066722, 3139609122, 270729763, 690167843, 35979301, 270863397, 405083173, 606411813, 874851365, 1344617509,
- 2217050149, 2351269925, 2686816293, 2988812837, 3106256165, 3206921253, 3324363557, 3475360293, 3861239845, 1076247078, 1613120038, 1697014566, 439380518, 4210016239, 4294902011, 3237995007,
- 1207938815, 2248028159, 1996391678, 3489517821, 3455962877, 3372076029, 2650644477, 1979551741, 1912435709, 1778215933, 1677551613, 1476221437, 1207783421, 1073562621, 1138995171, 635581922,
- 602023138, 400695522, 300029666, 266473698, 3756067554, 3621903585, 3001136353, 2900471521, 1491173345, 1323388897, 1273056481, 1205946593, 1172391649, 1105281761, 954285537, 3839890913,
- 3403732704, 3152067808, 2296427232, 2262861792, 2229306848, 2195751904, 2162196960, 2111864800, 2061532128, 2011199968, 1910534880, 1658873056, 1256213472, 820004576, 467674080, 3235841760,
- 2766123999, 3369967071, 3202205661, 3101539293, 3000874461, 2765990877, 2531106269, 1960674269, 1860006365, 1759341533, 1423793373, 1306349533, 1239239389, 1155352541, 1105019869, 920469213,
- 3621530333, 3554464988, 3034363612, 2967253980, 1595081427, 1376277011, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167904768, 0, 16777217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16777216, 50332160, 83887104,
- 117442048, 150996992, 184551936, 218106880, 251661824, 285216768, 318771712, 352326656, 385881600, 419436544, 452991488, 486546432, 520101376, 553656320, 587211264, 620766208, 654321152, 687876096,
- 721431040, 754985984, 788540928, 822095872, 855650816, 889205760, 922760704, 956315648, 989870592, 1023425536, 1056980480, 1090535424, 1124090368, 1157645312, 1191200256, 1224755200, 1258310144,
- 1291865088, 1325420032, 1358974976, 1392529920, 1426084864, 1459639808, 1493194752, 1526749696, 1560304640, 1593859584, 2214592512, 2264958208, 2432731392, 2617284096, 2684395776, 2751504896,
- 2768282368, 2835392256, 2852169728, 2902502144, 2919279616, 2969612032, 2986390272, 3053499392, 3120608512, 3137386752, 1124252672, 1644195840, 1728078592, 1979729154, 1845534464, 1728211200,
- 1744860160, 2248190722, 2600638464, 2919395584, 1694543618, 2298639616, 2449642242, 2751630593, 2046847488, 2785048065, 2130753536, 1811964160, 1073846530, 2348984834, 2063624960, 1610630658,
- 2197848064, 302093568, 939660033, 1073887490, 1006780674, 3070246146, 3204451075, 1308768257, 1241668098, 1392724738, 1141003267, 1040348928, 1191330306, 2315289088, 2332066048, 2365622272,
- 2399178240, 2466286592, 37888, 2583728640, 2566953728, 1258418432, 1862291969, 1325485569, 2013286401, 1359041281, 19457, 0, 1224736768, 1224736768, 2936012800, 4194304000, 1493237760, 788660224,
- 3691118592, 3808624640, 251920384, 1677983744, 3187933184, 335872000, 1023737856, 1896153088, 2449801216, 3171221504, 3691315200, 856031232, 2483421184, 319225856, 3355901952, 1208483840,
- 4127719424, 1896415232, 3909681152, 2366242816, 134938624, 1393229824, 2802515968, 3456827392, 4111138816, 420216832, 2752249856, 2517434368, 973996032, 135200768, 1779367936, 370147328, 504430592,
- 4077977600, 2467430400, 2450718720, 135528448, 2064908288, 1242890240, 3860135936, 3356884992, 2048327680, 3642163200, 2065170432, 672727040, 152698880, 3071934464, 1377501184, 4045078528,
- 2266759168, 1813839872, 270401536, 2786983936, 958332928, 3374252032, 3827236864, 2082471936, 2686451712, 3122659328, 3860856832, 2216755200, 438435840, 2082603008, 908263424, 3626172416,
- 1629749248, 1277493248, 4028956672, 1814429696, 3626369024, 1814495232, 3374776320, 3223846912, 1663631360, 3240689664, 1932132352, 237699072, 2368405504, 539754496, 2200698880, 573374464,
- 2989293568, 2100166656, 170852352, 3090087936, 1009778688, 2653945856, 3090153472, 422641664, 1899036672, 1899036672, 3627089920, 1999765504, 1144193024, 3694329856, 2503213056, 3140747264,
- 2989817856, 4231331840, 3241541632, 1765212160, 2687959040, 3208052736, 3761700864, 3728211968, 4181196800, 1396244480, 2335768576, 205127680, 2688155648, 3426353152, 1916469248, 641466368,
- 1379663872, 2755395584, 4282122240, 1295843328, 2235367424, 1782448128, 1228865536, 1564475392, 3896508416, 2873163776, 1849819136, 658702336, 205783040, 3997433856, 3510960128, 608632832,
- 3410427904, 4098359296, 474611712, 961216512, 2135687168, 340590592, 2840395776, 860749824, 3863871488, 2639200256, 2437939200, 256966656, 2370895872, 5373952, 2672951296, 995295232, 1850933248,
- 626262016, 3830710272, 2740256768, 1465253888, 878116864, 3931570176, 2824339456, 2539192320, 1431961600, 324730880, 3327852544, 2774269952, 2170355712, 1583218688, 2371813376, 861929472,
- 4099932160, 3043033088, 1818361856, 1281556480, 3361931264, 1147404288, 3043229696, 1332019200, 3966042112, 3496345600, 1298595840, 3395747840, 1013448704, 3664248832, 1969815552, 3446210560,
- 1483341824, 376111104, 3580559360, 2288779264, 1701642240, 862846976, 3899523072, 3564044288, 2238709760, 829489152, 141688832, 3648126976, 2792554496, 1819541504, 4017356800, 1886715904,
- 3916759040, 1601568768, 3816161280, 1702297600, 3698786304, 1383596032, 309919744, 4118347776, 2893676544, 1987772416, 2373713920, 1031602176, 2021523456, 1300168704, 1988100096, 947978240,
- 1719795712, 1031995392, 1535377408, 310706176, 3347382272, 3330670592, 2592538624, 3095920640, 2022244352, 2206859264, 1300955136, 1636564992, 1972174848, 781058048, 1250885632, 4254007296,
- 2962227200, 1301348352, 3499163648, 982646784, 3817996288, 1922236416, 311689216, 3214147584, 1419051008, 2979332096, 2375417856, 1771503616, 4036427776, 1368915968, 1234763776, 93978624,
- 3482976256, 2325413888, 127664128, 3432775680, 1369243648, 362676224, 2610823168, 1470038016, 3583967232, 2225078272, 4154458112, 3399548928, 2376204288, 1755512832, 866385920, 4221829120,
- 3013935104, 2158362624, 1135017984, 3869704192, 1386741760, 3181903872, 1336475648, 3752394752, 2175401984, 581632000, 1605107712, 984416256, 984481792, 3652059136, 3819896832, 2326790144,
- 2142306304, 330432512, 3769761792, 2477981696, 1437859840, 4256432128, 4071948288, 3333816320, 2293694464, 817364992, 230227968, 3032023040, 1689911296, 4038721536, 2612723712, 230424576,
- 3871080448, 3317497856, 1908277248, 499056640, 4005494784, 3217031168, 2646671360, 2059534336, 1472397312, 885260288, 63242240, 3469017088, 3401973760, 2848391168, 1422393344, 415825920,
- 3955818496, 2664038400, 1120600064, 4123721728, 2563506176, 1087176704, 3637313536, 1473118208, 3738042368, 3754885120, 3687841792, 1372717056, 2714959872, 2060713984, 634716160, 4241817600,
- 3101032448, 2077687808, 131596288, 685244416, 1238892544, 1691877376, 2748841984, 3487039488, 450428928, 1389953024, 2698575872, 3940089856, 534380544, 2463760384, 1742405632, 2480603136,
- 115146752, 2329804800, 1189019648, 3890151424, 3420454912, 98697216, 3890348032, 2414018560, 2581856256, 1659174912, 82182144, 1457979392, 535298048, 2179530752, 1927938048, 99287040, 703332352,
- 4058775552, 871235584, 485425152, 3606052864, 1324417024, 2549219328, 1794310144, 1593049088, 771031040, 3891593216, 3958767616, 3270967296, 452526080, 754581504, 4261019648, 4126867456, 33357824,
- 3137142784, 3959291904, 2399076352, 2332033280, 1812005120, 1996620032, 906166528, 3791847680, 1929642240, 453312768, 537264384, 3104178432, 872874240, 906494208, 3825729792, 4077453568,
- 2416574720, 1997209856, 3624599808, 2668364032, 1460470016, 219021568, 2349728000, 386859264, 2903441664, 2316304640, 1091633408, 1074921728, 3910271232, 2719154432, 1981022464, 68485376,
- 3256156416, 2467692800, 1545011456, 1410859264, 555286784, 2501509376, 622592256, 1562181888, 1260257536, 371130624, 3693019392, 1864368384, 1075904768, 3642818816, 1042481408, 3693347072,
- 656802048, 1881604352, 3995599104, 2754150656, 3827958016, 2351628544, 2267808000, 2435645696, 1512964352, 3626959104, 707854592, 3593601280, 2436038912, 3996385536, 1882587392, 2486632704,
- 2755133696, 3862495488, 1211826432, 3225092352, 154992896, 3694985472, 1547567360, 725549312, 3175022848, 3242197248, 2554396928, 3896639744, 4030923008, 2437218560, 1179058432, 1229455616,
- 3024683264, 2588541184, 1749745920, 2236350720, 2974613760, 2253259008, 1062142208, 324010240, 3176136960, 257032448, 2672951552, 609485056, 3226730752, 3847553280, 777453824, 811073792, 978911488,
- 1968832768, 3109748992, 442237184, 643629312, 4049404160, 1717436672, 475988224, 3730768128, 4066377984, 2808152320, 3579969792, 3378708736, 728039680, 2976252160, 2808545536, 4100456704,
- 3194552576, 1265238272, 1248526592, 1349255424, 191693056, 3647799552, 191824128, 3614376192, 1819279616, 259064064, 2859532544, 1668415744, 4218552576, 779354368, 2876571904, 3698721024,
- 4285989120, 611909888, 175767808, 695927040, 444334336, 4001104128, 3313303808, 1652424960, 3917349120, 1350500608, 545259776, 3363832064, 3330343168, 2541879552, 1535377664, 3632595200,
- 3548774656, 2995192064, 3548905728, 3515416832, 881524992, 2089550080, 3247243520, 3532521728, 965738752, 2509308160, 1100087552, 4002545920, 2828206336, 1737752832, 1435828480, 1352007936,
- 630653184, 3902210304, 379126016, 580518144, 2006647040, 2946236672, 3114074368, 2761818368, 933167360, 1503658240, 1772159232, 4238409984, 2409758976, 446890240, 1050935552, 1285882112,
- 4070899968, 2091254016, 614924544, 4071031040, 4171759872, 3802726656, 3903455488, 3534422272, 4138467584, 4272750848, 3031302400, 2192507136, 2192507136, 2628714752, 3064922368, 3501129984,
- 4105109760, 699400448, 1588592896, 2461008128, 3350200576, 615579904, 2175860992, 3719364864, 2897346816, 1337196800, 2293498112, 4071883008, 3904176384, 381026560, 1706426624, 2276851968,
- 2847277312, 1287061760, 1740046592, 2159476992, 3216441600, 1052246272, 4189585664, 1891172608, 3887661312, 1924792576, 3820617984, 2344288512, 2747007232, 2377974016, 2210267392, 1019150592,
- 784335104, 2730492160, 1690370304, 599916800, 985858304, 1891893504, 650445056, 3116761344, 2563178752, 4140302592, 3486056704, 1791623424, 751501568, 2479554816, 2932605184, 3721199872,
- 1221460224, 3519938816, 3486449920, 785383680, 2966421760, 2614165760, 3218211072, 131334400, 232063232, 1020592384, 1758789888, 2496987392, 3285516544, 97911040, 1205207296, 2027290880,
- 2866151680, 3688235264, 265748736, 1574371584, 2430009600, 3755409664, 819462400, 2832728320, 584646912, 2648244480, 4292411648, 2614755584, 920322304, 1742405888, 14418176, 685506816, 3134980352,
- 3789291776, 165478656, 1876754688, 4141678848, 1558053120, 2933784832, 467599616, 1725890816, 2162098432, 3051290880, 3470721280, 316670208, 1054867712, 1759510784, 4292870400, 2950758656,
- 3437297920, 4041277696, 182583552, 820117760, 1424097536, 2078408960, 3403809024, 551747840, 2397241600, 820248832, 2632188160, 166002944, 2514813184, 4293198080, 2498101504, 3638952192, 182911232,
- 1659306240, 2498167040, 3387359488, 65536256, 1072169216, 2716336384, 48824576, 2162753792, 4276683008, 1391067392, 2867462400, 988479744, 3421176064, 1491861760, 3605790976, 1793917184,
- 2347565312, 2951545088, 3521970432, 4109172992, 619577600, 1525547264, 2045640960, 3287154944, 200212736, 804192512, 1424949504, 1827602688, 2263810304, 2800681216, 3320774912, 3857645824,
- 49283328, 670040320, 1274020096, 1877999872, 2498756864, 3287286016, 3891265792, 250675456, 955318528, 1643184384, 2498822400, 3186688256, 3891331328, 452067584, 1156710656, 1878130944, 2716991744,
- 3421634816, 4143055104, 687014144, 1475543296, 2314404096, 3371368704, 4159897856, 670302464, 1727267072, 2549350656, 3321102592, 66388224, 854917376, 1593114880, 2616525056, 3740598528, 569770240,
- 2046165248, 3153461504, 4294312192, 1056375040, 2163671296, 2583101696, 3002532096, 3421962496, 3858170112, 16253184, 1962410240, 335085824, 2147025152, 2583232768, 3271098624, 3707306240,
- 100270336, 519700736, 939131136, 1593442560, 2230976768, 2667184384, 3120169216, 3774480640, 117113088, 536543488, 1073414400, 1912275200, 2767913216, 184287488, 1140588800, 2365325568, 285016320,
- 1945960704, 1258160384, 3992846592, 2600403200, 570425856, 3523215872, 1392574976, 151126528, 1761739264, 2902589952, 386073088, 3456303616, 688128512, 2214855168, 3087270400, 3724804608,
- 100991488, 872743424, 1610940928, 2265252352, 2936340992, 134611456, 1661338112, 2298872320, 2919629312, 3775267328, 84345344, 1090978304, 1980170752, 2852585984, 3708224000, 268960256, 956826112,
- 1678246400, 2617770496, 772342272, 3020489216, 84541952, 3322544640, 1862992384, 755761664, 4060873216, 4144824832, 521011712, 957219328, 1661862400, 3020816896, 3910009344, 588186112, 1594819072,
- 2668560896, 3155100160, 3658416640, 4178510336, 420479488, 823132672, 1561330176, 1963983360, 2349859328, 353436160, 1393623552, 1813053952, 2484142592, 118620672, 3172073984, 1142096384,
- 1175716352, 1008009728, 437649920, 2299986432, 3776446976, 1142489600, 3138978304, 974782976, 3239707136, 723190272, 3474653696, 1243349504, 3357278720, 1813840384, 3877437952, 2082341376,
- 639566336, 2535391744, 606077440, 153158144, 3642819072, 1730281984, 1277362688, 3122856448, 639894016, 4012114432, 2133131776, 1294336512, 4263903744, 1445396992, 3945202176, 2670199296,
- 1244201472, 3425239552, 1546256896, 3777626624, 2016084480, 254542336, 2687238656, 556597760, 2972516864, 1714291200, 456065536, 3324969472, 2637169152, 1899037184, 1177682432, 4197581312,
- 4281532928, 53805568, 4248109568, 523698688, 2906063360, 993526272, 3191341568, 1782120960, 1547305472, 3543794176, 1245381120, 3057320448, 1312555520, 3812360704, 1681719808, 138281472,
- 2889744896, 1161757184, 138412544, 2839544320, 1279328768, 356647424, 3611427328, 1765999104, 4014146048, 2151940608, 105185792, 2806317568, 2588279296, 2974220800, 3041395200, 3343450624,
- 3226075648, 1665860096, 608961024, 3528196608, 3427598848, 2068709888, 4149084672, 2555314688, 844104192, 3008365056, 2773549568, 1414660608, 240321024, 3344105984, 2555642368, 1901396480,
- 928383488, 2622882304, 643236352, 3143041536, 2237137408, 1515782656, 425329152, 3126460928, 1348141568, 375128576, 2891710976, 2120024576, 593363456, 3898475008, 2019492352, 996147712, 190906880,
- 3697345024, 2539782656, 1365443072, 3882025472, 3143893504, 2154103296, 1147535872, 4251320832, 4217831936, 2573730304, 1231618560, 443154944, 4150919680, 2624258560, 3597402624, 2070741504,
- 2775450112, 1332675072, 91226624, 3161457152, 2440102400, 846332416, 4268884480, 3161653760, 3363045888, 2138374656, 913703424, 2406941184, 125305344, 2658664960, 2675507712, 3732472320, 947520000,
- 3095003648, 1266352640, 3380281856, 2205942272, 4185653760, 1870463488, 4185719296, 1769865728, 1280, 4093706240, 50379778, 150996480, 251661312, 288423936, 922947873, 286724897, 52896001,
- 4093720337, 2902371066, 2399054536, 3366605825, 4256957098, 4287299908, 33543422, 4292214270, 50211841, 131327, 16514897, 11928261, 2031627, 372389632, 587600917, 875898402, 355668790, 101123604,
- 352519942, 892675847, 640025383, 605522471, 571873316, 52571171, 16908804, 34216984, 33816858, 387392367, 387392291, 424084003, 337654795, 3942517776, 168105753, 822155270, 2567446, 20185090,
- 37683669, 721093, 318767127, 875898659, 372388662, 386339861, 875898659, 372388662, 1762071573, 270213396, 2499877648, 270213396, 16849680, 252036309, 51320856, 96781314, 253237263, 33554947, 1024,
- 2885873409, 520100608, 352387072, 925042467, 925042467, 926102819, 926102819, 926091059, 355665715, 589760291, 3590402823, 523902829, 557457798, 1846899819, 523902838, 507125381, 638871905,
- 25564549, 3772790808, 2335760608, 3520188728, 2341157073, 196747, 26017566, 14353111, 3997750, 922746950, 656811537, 926168358, 657929782, 117835315, 102176278, 909452053, 370222886, 353769238,
- 101058324, 1042487047, 640038658, 922893863, 369497395, 909512979, 656815157, 117835317, 370414854, 373177311, 739727410, 19727398, 1195114754, 69209379, 1145128503, 425735704, 755247409, 16843009,
- 53568046, 536937476, 1030444551, 460274247, 908988190, 118948114, 1378160658, 252655987, 420364551, 336790551, 707416110, 4244506410, 638653191, 272594261, 191105043, 18883348, 622072598,
- 541075252, 4262199604, 1028852718, 4217517367, 621546243, 3422025, 4280745989, 35783660, 917701, 2687002, 3735605, 372380416, 101979414, 639771398, 909521973, 352723479, 842208788, 640955702,
- 370553345, 101061653, 891691555, 389428788, 336922146, 909259542, 19280949, 3409117475, 707216684, 1464020809, 690768682, 690498352, 2600545328, 707216684, 1464020809, 690768682, 690498352,
- 1291725872, 678297896, 1160294658, 726413357, 1261519703, 1095440171, 1078806336, 2818459710, 808273192, 1129786443, 388713265, 1195393355, 1212039245, 3640836862, 721421056, 4043500799,
- 1140896002, 1526747392, 922812416, 858986006, 352716343, 371664422, 117838869, 842203678, 118961974, 639771398, 587597351, 891692578, 641152564, 926168358, 842217015, 118756630, 369559046,
- 909514518, 656815157, 103228966, 370414854, 926036758, 909574702, 589706293, 370414882, 438411777, 3255896620, 974980359, 740623669, 405748267, 102111757, 605620567, 1563831397, 895302711,
- 235950665, 672810008, 255865647, 1596596257, 269818691, 4179822603, 1261315374, 960772141, 1562129483, 205330721, 19748865, 521537281, 33883411, 1345263121, 186390578, 1058605832, 690105094,
- 928461092, 691037507, 373301053, 724506428, 470762564, 1148732439, 521876004, 67240750, 742335500, 774852399, 2001492799, 639452230, 3873359, 20774913, 43188437, 721093, 656610048, 859190325,
- 336926258, 554988039, 454037531, 3302293761, 404229893, 131855, 4282122241, 36503849, 1638614, 772211968, 891692802, 37631796, 34477879, 336922119, 16915991, 891884333, 659034662, 876817683,
- 506405907, 220142861, 365047070, 557201703, 1685234312, 776686641, 1094855194, 2155634218, 1145384298, 536871168, 285288959, 453039618, 655818752, 909574718, 656815157, 925303342, 370606622,
- 117838869, 322109966, 220081444, 219025183, 321203742, 321733428, 254684967, 366423330, 759514157, 1816035178, 1111566641, 1261378091, 1919168843, 407480923, 16789291, 1442914304, 2969724673, 6144,
- 925312787, 926357299, 923211543, 654775575, 654775575, 656607015, 58959927, 442436140, 1157840393, 2315847307, 302662724, 86248042, 171966978, 76505652, 410849043, 336084484, 68815482, 154359950,
- 855638272, 721553152, 184549378, 889257984, 355669299, 891491619, 318846243, 954261560, 3743482336, 3806476511, 65592, 6684432, 8061146, 922746892, 117575191, 909518599, 3426104887, 925175310,
- 739125545, 640156969, 1227230843, 185808209, 188312648, 65548, 30867473, 2031928, 620756997, 557262625, 4263117079, 18548220, 97977607, 16778563, 4227810048, 1862317824, 2816, 353776183, 572720660,
- 909391142, 606345084, 589436440, 387392367, 387392291, 65571, 42598231, 14025223, 16777219, 33628929, 1015873031, 3590484993, 1292088316, 486539776, 3506564351, 201371906, 6656, 353776129,
- 639771408, 891692583, 102897424, 857084949, 909522738, 19280949, 3814942471, 437932334, 1028118558, 507398465, 37687828, 4272201393, 623192189, 1828804750, 3080685347, 1965308066, 10400860,
- 4282122241, 44171773, 1966262, 908530432, 286734134, 387388948, 656549397, 572727846, 909587719, 873542966, 117908003, 1799751491, 672730674, 187310900, 571089433, 405354627, 2164326920, 422259458,
- 4244970029, 35202991, 16850435, 52298497, 19339522, 973152741, 268435712, 3556900351, 704688386, 926351360, 875889214, 102900518, 925042439, 842217014, 101979414, 1040647942, 101070595, 387322901,
- 572728870, 2853177094, 1277051961, 205075009, 638655757, 1851733582, 3056678679, 1145528133, 16843051, 543579905, 391930401, 1314733237, 659177766, 646458924, 626418720, 3241430084, 33686018,
- 185733122, 34542347, 131329, 4279173121, 47055340, 4063409, 909579008, 372388662, 117838869, 370611734, 235344917, 656548610, 925312550, 370611734, 892744243, 572728884, 925304582, 372453910,
- 909259542, 640955702, 102900518, 721880838, 860562205, 1009935955, 940780069, 1414273843, 72169768, 236654607, 1210913559, 1044730950, 119349781, 17368332, 604311563, 891298619, 674699808,
- 4060156422, 1360995452, 793455939, 655232519, 557729356, 639245363, 671755839, 1563103530, 155993164, 20252173, 1042678017, 523575589, 940646164, 33554944, 3624009215, 620803586, 10240, 19341605,
- 101062455, 858985749, 355939890, 354625062, 387383838, 589702677, 889652770, 922893879, 16978229, 200670744, 206183169, 51905284, 353837847, 151071787, 1093671193, 1142232901, 421084740,
- 3050766601, 466551063, 2358383365, 1191313803, 525009410, 50465823, 16843294, 33758722, 2334072843, 2701025281, 218104064, 3405901055, 989901058, 118685696, 842217014, 336926230, 587597319,
- 640034594, 370620199, 909259542, 589706293, 654771746, 875889214, 372713254, 909259542, 101062455, 387322901, 639771143, 789151526, 1480139839, 1714052146, 170542386, 773329174, 1378435595,
- 625497179, 34874163, 16843266, 726415109, 87510059, 16843009, 1112026629, 3512533577, 1462834461, 609317689, 958470185, 324144683, 1364417817, 103029087, 727140373, 86918424, 50463235, 168824069,
- 84807690, 33554946, 3976142848, 2969752577, 671095040, 923992064, 842217014, 101979414, 639771398, 926299189, 389481022, 386270741, 101123618, 370414854, 892744243, 394470964, 1344617004,
- 1097284447, 1297248353, 809578778, 1803978533, 135348259, 994067207, 1258374469, 1746477842, 1047348310, 2993126543, 455022145, 671617296, 438335133, 1696276237, 1263426922, 65626, 33423148,
- 11600625, 922746917, 926299667, 101065249, 908265223, 640955702, 35534631, 909521459, 100865335, 640026374, 117842467, 840823864, 401997342, 117705240, 16843294, 1160776194, 1143481920, 834088008,
- 303439948, 370279942, 780665098, 487210334, 758003743, 774900491, 16908805, 503448065, 2707077118, 16843346, 196610, 32309022, 11600592, 2883614, 318767160, 875889198, 842217014, 101979414,
- 352460295, 587597332, 891692578, 909522740, 101066519, 857084949, 892745266, 388441652, 875902518, 102900518, 749212693, 1580536883, 929124411, 474036804, 960654400, 289026904, 928027424,
- 692079664, 1832199745, 1109995831, 21116215, 875568473, 793851170, 1210925391, 976362031, 1030241832, 1295274286, 605360186, 927670820, 1143493446, 2521049386, 725557275, 842875447, 131146,
- 32309012, 11600585, 2621466, 891754240, 121058870, 572720646, 875898406, 842217014, 101979414, 318901767, 336922146, 909259542, 656815157, 2283954214, 222693020, 1362369076, 1080376110, 1229681251,
- 1481259035, 1011501118, 235947835, 135336992, 981381153, 1513295627, 1030374202, 2858712977, 505550654, 1280872962, 1180000590, 991446049, 1107296768, 3053517823, 184600577, 5888, 353776183,
- 572720660, 909391142, 353776147, 572720660, 909391142, 606345083, 589436440, 606344982, 589436440, 387392367, 387392291, 609812771, 589501975, 2299671, 4279238658, 31064167, 786632, 922746904,
- 117575191, 909518599, 53884471, 336926258, 639771398, 3426104373, 925175310, 739125545, 640156969, 606344994, 589436440, 1227230845, 185808209, 188312648, 609353996, 589501975, 2299671, 3276801,
- 36635175, 393282, 84214016, 624239893, 1929260802, 67014145, 3993107713, 3897932217, 33613899, 2281714432, 2181114626, 117441280, 352387072, 352662817, 721564961, 4160817406, 2181105918, 952252472,
- 65592, 36110390, 4325939, 318767110, 85263669, 20325685, 17039101, 1424884110, 1441287144, 131257, 33292075, 11928203, 3014690, 909579008, 372388662, 101979414, 34473734, 118952981, 909391142,
- 909522742, 589706293, 319227682, 336926258, 639771398, 724972597, 574302246, 321933620, 690498352, 739579405, 740172301, 1177961761, 394138641, 370680868, 570565410, 672076913, 840707142,
- 707077944, 471077148, 288168974, 824257825, 1026563642, 1442721834, 588715811, 588715811, 402653696, 3556961535, 1208006146, 22528, 101069605, 572720647, 875889198, 842203710, 336921118, 572719630,
- 587337255, 891692578, 855785012, 859248434, 336922115, 37630515, 640037941, 101065251, 370545685, 1043804723, 119931650, 336922118, 926036758, 875902518, 1032978982, 1746411543, 1686589070,
- 2238003257, 1517897294, 1396844595, 419972140, 622339110, 1025778493, 289811278, 72177682, 758651929, 1333479452, 1414762587, 943873170, 4045941532, 538520110, 640817953, 2870811669, 1544825126,
- 1249861686, 929334093, 1013468460, 793731635, 220405588, 757547046, 1344618834, 233438790, 1177230607, 1816472406, 1485525054, 424708952, 19602445, 591201111, 807937633, 644162884, 33564703,
- 4261351168, 3154310146, 855650304, 318832640, 387383838, 589702677, 889652770, 875902519, 556214054, 352716295, 387388948, 589702677, 889652770, 322385463, 909588022, 855848758, 4070048003,
- 219354642, 288635426, 792608016, 772671273, 270328062, 622466579, 235746615, 589640492, 470659603, 202769676, 41876872, 701038012, 50467114, 16843294, 50535938, 571869201, 958808947, 34343947,
- 16915971, 52298241, 2499882499, 203112733, 1375608373, 50342401, 4261353984, 3020046338, 1023422464, 18432, 892745527, 640037905, 372582183, 842150678, 909521718, 372388658, 101127189, 370542342,
- 336926231, 101058310, 639771171, 102900519, 370217735, 909259542, 589706293, 352526882, 842208790, 589706293, 370819362, 605558022, 152324672, 690233357, 1459882786, 706038107, 490682917,
- 573321785, 201733983, 287385377, 328150575, 1666782756, 370108001, 219748125, 726878894, 940116500, 606722561, 503513611, 16843265, 1312966145, 135269938, 706023940, 543110477, 16914969,
- 1828782593, 67421694, 1280331865, 32708609, 943687169, 369099008, 2650991871, 536921346, 119865344, 639771398, 926168358, 389165878, 588580358, 640037941, 101065251, 370545685, 37171763,
- 2053708958, 2925769077, 2120844393, 991889674, 2169909595, 1653756231, 844389746, 1822645046, 691824078, 1210466609, 1276584980, 2489474441, 33569873, 4261352960, 3020091138, 973088256, 926351360,
- 873542966, 656877094, 857085493, 909588018, 372388658, 101979414, 572720647, 640099874, 102900514, 370217735, 909521459, 875902519, 656811559, 572728870, 421476614, 672666886, 589650509, 319630140,
- 1453156870, 3211212350, 656477448, 319821836, 563559229, 1079130438, 239494174, 1830752541, 339027512, 19795216, 186919386, 18744066, 16843010, 1348307532, 23475609, 33620225, 2919073538,
- 404557064, 1200990802, 235344910, 16778002, 4261352960, 3020045314, 23808, 37631799, 640946485, 891758374, 842208790, 842413878, 387330611, 891491590, 640099892, 102900518, 370214662, 909259542,
- 926299703, 101069623, 387322901, 640100131, 102900518, 370544903, 926298675, 909522742, 101069623, 587597333, 640099874, 102900514, 405021191, 352781845, 1279733783, 826478879, 588460574,
- 588260405, 1343689225, 472457768, 607132176, 67973426, 503644419, 16908801, 218629406, 774191154, 656676372, 235628617, 67437067, 1158219555, 1377180232, 203561017, 456209686, 621478403, 700514600,
- 50400037, 16908574, 33620225, 289495104, 134611981, 4261675777, 84017653, 118294022, 255078708, 993144080, 17106713, 99155458, 101058307, 421463851, 19681575, 16843010, 16777729, 4261352960,
- 3020036098, 18944, 35525907, 638916375, 102900518, 1043805447, 873542914, 656877094, 857085493, 926365234, 102176306, 875897621, 640034598, 117842467, 857085457, 909588018, 104019767, 370414854,
- 656876311, 572728870, 100784134, 741349141, 1059530560, 353841196, 387254023, 441403184, 1797600786, 270808098, 370280739, 690758477, 607132183, 118305074, 18744577, 503382530, 856492037, 19801399,
- 640208711, 503513355, 33620226, 201392926, 3238078501, 17507625, 33627651, 16843009, 1096237314, 100928785, 4261741320, 84017653, 873270534, 252589106, 423310125, 66823, 4279631873, 47710956,
- 3604677, 875888896, 589702950, 336922146, 842208790, 909522742, 640955701, 372582183, 909259542, 101127991, 236262662, 639771394, 909391142, 372388662, 352720662, 740786434, 2609728569, 845451855,
- 50530382, 777196558, 874125619, 119342125, 1264665604, 1655665956, 679592299, 339169091, 490013698, 2685537829, 1402628240, 335940883, 269640978, 18745089, 419496193, 403309322, 169218984,
- 1886167642, 302472357, 4804368, 4279631873, 36307965, 5963956, 235340032, 504432386, 353834754, 572728870, 926222086, 892666430, 589505062, 352789026, 387383838, 589702677, 889652770, 889339447,
- 640037905, 372582183, 909259542, 235345207, 370476802, 842216214, 875902774, 656877094, 857085493, 53950002, 353841194, 100729094, 741349141, 1059530560, 353841196, 589107975, 337388522, 387253761,
- 658517040, 808206119, 117904663, 758126357, 1076241728, 353841197, 588120326, 572779042, 387254030, 624962864, 36519974, 184615830, 1073621285, 17507880, 16915971, 52298241, 673516545, 3741450975,
- 17507880, 16915971, 52298241, 673516545, 623493377, 503513355, 16908801, 184615710, 28452902, 2986410241, 17507625, 33627651, 16777474, 4261352960, 3020045057, 9472, 34473729, 35524871, 638916375,
- 102900518, 1043805447, 873542914, 656877094, 857085493, 20395570, 353841211, 100729094, 741349141, 1059530560, 353841196, 387254023, 624962864, 36519974, 184615830, 1073621285, 17507880, 16915971,
- 52298241, 673516545, 623493377, 503513355, 16908801, 4060020992, 922827775, 604025858, 117506048, 285671950, 117835284, 53412366, 842208823, 873542966, 656877094, 857085493, 20395570, 353841207,
- 436928774, 825430809, 85002001, 505683723, 387254040, 624962864, 36519974, 184615830, 1023289637, 507269436, 34875160, 105644545, 37695763, 186984778, 18744065, 66050, 4279631873, 47121149,
- 4456628, 504697600, 353834754, 572728870, 926222086, 288686654, 656811572, 370554151, 926298675, 34473749, 906040583, 372582198, 909259542, 101127479, 369165575, 353834774, 572728870, 3623945990,
- 387253761, 658517040, 808206119, 117904663, 758126357, 1076241728, 353841197, 369164550, 637604364, 554568998, 656878113, 1241642750, 353049623, 151722524, 2768120094, 684541185, 50400038,
- 16843294, 16981506, 19408140, 186984897, 18744065, 503382530, 638255363, 251778600, 453253131, 16908801, 620823070, 382271216, 503447826, 33620226, 16797441, 4261352960, 3020048898, 13056,
- 34473729, 857084167, 909588018, 926299703, 34485047, 587597319, 640099874, 102900514, 909587719, 640946485, 891758374, 842208790, 989935414, 102045488, 1546723585, 168364664, 201392385, 84411680,
- 440944131, 273047062, 722667543, 119086885, 758126357, 1076241728, 60162605, 690293505, 168359677, 19793928, 875692552, 18163516, 16843010, 269943297, 3657510413, 17507625, 33627651, 16777474,
- 4093579264, 3020070403, 18944, 34473729, 35524871, 638916375, 102900518, 1043805447, 101790978, 100861702, 19072774, 386014737, 640029975, 117842467, 37631797, 640946485, 891758374, 842208790,
- 16856886, 842208790, 2550347574, 85333802, 352715009, 1093414935, 590751530, 102045730, 2987005197, 336861959, 84011518, 892081942, 789515829, 353905718, 404030982, 220670764, 19605261, 688259336,
- 672009513, 60162599, 690227970, 623394814, 503513356, 33620226, 184681246, 3389073445, 4262864665, 792662406, 922636034, 34284840, 16915971, 52298241, 673516290, 606716161, 503513611, 16908801,
- 738383101, 16908801, 285212928, 755231999, 973124610, 926351360, 288686654, 656811572, 370554151, 20387634, 640037905, 372582183, 909259542, 235345207, 336660226, 353769238, 504430887, 353834754,
- 572728870, 739313414, 101061912, 472651797, 907812896, 352772353, 842214424, 825561360, 85333804, 16843009, 19398234, 739710469, 252589365, 52114991, 673516290, 606716161, 503513611, 50397441,
- 3607211773, 34284585, 33627651, 52297986, 690227970, 218421501, 268764936, 821971970, 34284840, 16915971, 33554945, 3976140288, 3305307138, 503320832, 838926336, 336926230, 572719630, 875889198,
- 571946550, 370414854, 909259542, 19280949, 1487105938, 1418750524, 861830988, 2069998431, 1417627269, 42959477, 1771721669, 980061522, 1334075701, 710714735, 2691402646, 2626987865, 65710,
- 50200342, 11797060, 318767160, 386014737, 640029975, 117842467, 37631797, 640946485, 891758374, 842208790, 842413878, 353776179, 587597332, 656877090, 842208790, 590624054, 30934562, 806819078,
- 656883756, 389033023, 369624853, 1430924567, 626136855, 1594101258, 1164787822, 168958223, 1091574547, 790210131, 4143809026, 17507880, 16915971, 52298241, 673516545, 623296769, 503513613,
- 16843265, 1011372801, 67254624, 1443104292, 364867, 4279631874, 50070096, 2883781, 83886138, 640033315, 909521973, 370553395, 117838869, 503775758, 370546434, 926298675, 640026389, 589702951,
- 923207458, 571684662, 370414854, 842208791, 640955702, 1795916801, 2858309792, 1520726128, 790256488, 538257463, 1463557670, 421136420, 439492180, 220082324, 1392655119, 2222722330, 2135696683,
- 328171382, 1852679002, 2538822820, 901147752, 51057167, 219023362, 67246105, 201734165, 135212552, 138420256, 2375529474, 1580173387, 2929628834, 369099008, 2634219007, 1308668930, 286457856,
- 387383838, 589702677, 889652770, 889339447, 640037905, 372582183, 842150678, 909587254, 372388658, 101127189, 370345734, 638916374, 102900518, 656811527, 656811559, 925312550, 842215958, 640955702,
- 3624280611, 387253761, 658517040, 808206119, 101127447, 1177098261, 286269260, 489494809, 1700726283, 707795280, 404425443, 151526691, 352788252, 151435277, 134809867, 68094470, 1314153816,
- 2181181209, 640218877, 503513355, 33620226, 201392926, 3238078501, 34284585, 33627651, 1291911425, 288905545, 3640527636, 503450381, 33620226, 4145027851, 185338888, 17566217, 1161839953, 65541,
- 32309016, 12911351, 16777275, 640034595, 572728871, 370414854, 386014743, 336926230, 572720646, 889339431, 35526451, 909521459, 640103477, 640034598, 875898407, 842217014, 101062422, 102809345,
- 689509378, 1247101502, 556869979, 1294676239, 1398429576, 536937219, 1227817736, 777073959, 960304166, 706367049, 709522754, 117914702, 372837890, 1360465178, 205011519, 118032645, 1211384084,
- 371605873, 1126577193, 672605205, 523840838, 168301585, 1227298587, 305816898, 4007704, 4279369729, 38994685, 3408052, 1043805952, 873542914, 102967078, 587663110, 388441652, 858986006, 926364210,
- 588580358, 656811559, 352716323, 386014737, 640029975, 117842467, 353841312, 2600600071, 67244054, 1141113631, 2651408693, 2234194956, 69141252, 2601914625, 100729346, 741349141, 1059530560,
- 16980780, 19408395, 388637607, 1326648577, 19612977, 33620225, 1328629035, 369167635, 1509828136, 17573160, 16915971, 16777729, 3976137728, 3020093186, 13568, 34473729, 118755591, 656548614,
- 873542950, 656877094, 857085493, 355939890, 117575175, 857084945, 288699954, 656811572, 370554151, 926298675, 388822786, 1157694742, 1016567618, 387254072, 624962864, 808271910, 17175831,
- 1752000607, 739775750, 286273844, 2516726069, 604701187, 2766143017, 960381510, 694354291, 50400037, 33685790, 16981505, 4264044043, 1700225192, 692060522, 50465572, 33685790, 65537, 49807112,
- 11797186, 16777263, 336922119, 320018198, 657732918, 370619687, 926102294, 101058325, 34472711, 36578055, 640025383, 372582183, 909259542, 940704055, 3305177376, 874711479, 186652198, 253651973,
- 279843094, 839520533, 269750023, 252906172, 339294244, 37239060, 302121878, 4261610755, 400097541, 50468880, 16843038, 16981507, 1543383326, 556807720, 641084955, 286772737, 18744065, 66050,
- 4278714369, 47711223, 4849852, 774046976, 50538243, 587662854, 640099878, 637740838, 891758374, 387396118, 118830899, 336922118, 320018198, 859243070, 320274974, 641021459, 891758374, 858920470,
- 118830899, 100861702, 101058310, 221437442, 202378513, 252620413, 67383815, 67568130, 370476919, 119477532, 712902970, 33689876, 521895012, 69208598, 2752187143, 335610244, 606742554, 1762198797,
- 2567446048, 16845320, 841550084, 18950951, 608632403, 420485163, 270534917, 370868994, 18744065, 503513345, 286195971, 4262007047, 1144717631, 270482259, 4263387160, 65601843, 34212870, 33627651,
- 50535939, 484900122, 319030307, 234881280, 2281897471, 855686146, 354746368, 589440551, 50791970, 117900806, 572728870, 926222086, 909588022, 657930038, 36644390, 387323447, 355668759, 117835271,
- 370545415, 344457751, 168366105, 330834463, 396167186, 352782101, 386996760, 33686035, 823754941, 2365730066, 2148604430, 187262393, 2962890522, 453909018, 16908574, 439484674, 49416987, 503447809,
- 420807171, 4278452738, 19933653, 119216643, 30940445, 16981518, 4275054874, 35399912, 150995200, 2382560767, 838910722, 923992064, 909193782, 923997974, 859256374, 117640725, 353698318, 387383838,
- 589702677, 889652770, 889339447, 656880693, 656877094, 50492169, 2400728334, 473046631, 690888016, 538844204, 352715018, 1076637719, 742336295, 118822704, 1193245705, 2818710810, 1023541528,
- 2751200812, 255285295, 1077426211, 742010922, 623411483, 503513356, 33620226, 201392926, 428746789, 1194842127, 16777988, 4261351168, 3020062210, 11776, 841023745, 926351934, 352456243, 86188838,
- 922893877, 926299649, 590820918, 117899790, 892745251, 388441652, 37171991, 18546301, 558054161, 570819340, 3724608258, 3372096567, 118826272, 336276993, 185798410, 390152164, 35784193, 2768371969,
- 43791030, 76938647, 957947150, 725233691, 639369987, 17373740, 219811460, 18029331, 1192432392, 336798236, 33627169, 65539, 21561167, 14025248, 385876019, 1026962983, 890320642, 875901990,
- 372713254, 909259542, 118822711, 352456227, 352785428, 336991505, 387319317, 118822707, 572727846, 84498466, 50397443, 673581317, 623383571, 522585094, 16845344, 640556033, 673515012, 3089634068,
- 876024845, 36047115, 319294722, 322648075, 16843021, 85591553, 488508673, 622140673, 371588861, 455803420, 102368514, 65538, 33554513, 14025216, 318767107, 1361248563, 997458235, 721278466,
- 754974976, 4261431551, 889247234, 387121152, 336922118, 286590740, 353637909, 118953492, 572727846, 891750178, 37630775, 875836967, 641012021, 641086772, 656615206, 370554677, 4113969715, 17040393,
- 151258113, 320022821, 67511593, 186589222, 16843009, 639639307, 690292228, 36246291, 957484502, 152308792, 234814733, 923473161, 34411066, 85591554, 488573954, 252779292, 371524098, 505217563,
- 436535820, 16843014, 855638272, 704781057, 100708610, 588447744, 588460819, 3678697219, 3074742850, 2516654849, 1375824638, 256, 4093740031, 50378239, 553975808, 4093714741, 4093709566, 16790141,
- 4194377472, 2768436992, 2560, 640034579, 859190325, 3608614706, 302979472, 2317424141, 274397697, 336465170, 33589793, 4110360576, 3573667585, 889202688, 119865344, 639771398, 926299189, 589702711,
- 117835298, 926230279, 372388662, 35525909, 655693591, 572727846, 892798726, 101058310, 857084949, 20330034, 520846404, 1717256764, 1195311715, 185670167, 943004173, 21452609, 655166211, 168958229,
- 86318858, 454436981, 840179500, 139874863, 1262631488, 1011094035, 521672455, 572539143, 448228953, 33687319, 16908574, 293895938, 472976919, 622210849, 4060021248, 4227986687, 587257346, 12800,
- 909578515, 372388662, 101979414, 101123846, 656810531, 37627655, 640946485, 1043669795, 353580802, 857085460, 875902514, 119677734, 322409990, 1379214148, 371463470, 674766436, 271064635,
- 184615684, 891828238, 688461353, 1346443835, 725696330, 4274913818, 403978403, 607869235, 1209023819, 605229334, 774906374, 399704351, 168172562, 1593706509, 303631319, 1582323050, 16784686,
- 3976141312, 3573652737, 7936, 640099073, 102900518, 857084949, 118961970, 572719630, 875898406, 842217015, 17171991, 218569871, 1229136447, 926045029, 772085002, 1749228092, 1247439674, 117914170,
- 339556097, 1666209561, 537861495, 990580743, 1132938088, 1025188665, 587203072, 1124267263, 738252290, 16384, 640955649, 1043669795, 286734082, 387383838, 656549397, 572727846, 121046790,
- 572720646, 875898407, 909588278, 387330611, 656815157, 102900518, 370545685, 926298675, 2617311806, 674762251, 152447285, 286262017, 85659694, 168171023, 1862607393, 1611668484, 724781875,
- 438773080, 252848691, 1296251702, 590103591, 101127492, 3082092802, 102502935, 134745354, 488741117, 503513608, 16843009, 56450050, 2067737093, 773219904, 2179665171, 621417222, 1547456859,
- 203631413, 33563156, 3976141312, 3573661697, 889201664, 119865344, 101123590, 656810531, 909391142, 842217015, 101979414, 587597319, 387323427, 842208790, 657929782, 640099878, 117842467,
- 370476550, 909259542, 51688705, 943395869, 706633529, 960445750, 16868949, 2453033007, 353242114, 588656973, 37822250, 857411853, 168835876, 590489863, 575024668, 436736516, 1597712428, 623141711,
- 252270184, 721880843, 690296884, 3138589704, 672740914, 689184806, 33686563, 385876224, 1426193919, 755030018, 352387072, 589702663, 352716322, 587675413, 386014737, 640029975, 117842467, 37631797,
- 889655605, 909522231, 909522743, 1426141747, 337580556, 2198544156, 50428935, 875434256, 890442805, 269561397, 21316868, 289019411, 34871088, 268848589, 977147660, 4264887381, 136126949, 35521282,
- 503447809, 503841283, 68878624, 891952918, 339876162, 196630, 48627232, 13959456, 4325430, 16777298, 336926243, 587597319, 103228962, 101058310, 858985493, 336926258, 572720646, 875898406,
- 641152822, 926168358, 891692599, 909522740, 387330611, 572856119, 370414854, 892744243, 570631732, 101058310, 857084949, 892745266, 117581364, 524487516, 168173642, 84214536, 2689338899,
- 2051555637, 929120332, 609684241, 927928094, 1210012993, 473507105, 3523085454, 842937649, 87963695, 504115508, 893473060, 21180500, 1293622138, 18486833, 84083457, 654971920, 1648113476,
- 759572282, 788934168, 387258891, 1208368404, 305225015, 68621076, 993988620, 826099514, 1073630783, 940377604, 658913058, 657533764, 100663552, 1006829055, 956356098, 926351360, 288686654,
- 589506100, 922893877, 909578519, 355611446, 386014741, 640029975, 117842467, 589706257, 352716322, 370545685, 638916375, 102900518, 304940551, 235602959, 691349560, 273418518, 27728931, 688984067,
- 218833701, 842867487, 69614366, 808259856, 873994292, 33758000, 35659272, 470947590, 135072262, 1118633480, 3249408782, 34086432, 16915971, 469828097, 723273018, 505467927, 503513608, 33620226,
- 352322048, 251788799, 486584066, 10496, 35524883, 638916375, 102900518, 1043805447, 875902210, 589506086, 926299701, 353776167, 572720660, 909391142, 268632508, 892612113, 892670740, 68161838,
- 622137861, 623202343, 371335701, 19013910, 563478225, 50464797, 16843294, 33758722, 3776978440, 470359586, 3658486789, 555095331, 555161121, 3640590848, 2801853950, 369143810, 8704, 102109459,
- 371656454, 909259542, 640946485, 891495206, 657929782, 336926258, 639771398, 2671129653, 945106689, 101779212, 302328108, 1344742677, 555099685, 571807521, 4275110178, 1165380380, 33629698,
- 1308720245, 470359586, 3675264005, 571872801, 555095586, 352321792, 620950783, 822138370, 926351360, 288686654, 589506100, 922893877, 909578519, 355678006, 117900834, 387388950, 118829846,
- 370414885, 353834774, 572728870, 773129990, 184815378, 891828238, 1225332265, 1680886045, 2166631962, 2115704845, 4267713330, 286262519, 372453676, 456471828, 503841283, 386269728, 168172562,
- 4261939213, 1142373175, 454303280, 437981029, 488059005, 505449212, 503513608, 33620226, 352321792, 251788799, 486594050, 926351360, 288686654, 589506100, 922893877, 35524887, 638916375, 102900518,
- 305009927, 235602959, 691349560, 50399510, 875434256, 890442805, 33758005, 35659272, 470947590, 135072262, 563674376, 50464797, 16843294, 65538, 66977552, 13959525, 922746970, 889339447, 640037941,
- 909452067, 353842998, 842217015, 909580054, 353776179, 386014741, 640029975, 117842467, 589706257, 352716322, 386014741, 640029975, 117842467, 37631797, 640955701, 101065251, 370414869, 353834774,
- 572728870, 772802310, 84152082, 656741650, 1158227280, 1094007066, 941247512, 50417989, 690950416, 537725733, 506016290, 50406970, 892211472, 890442804, 269561397, 506016260, 268707386, 841886225,
- 892605975, 134349595, 585179166, 85723422, 1426329620, 841685312, 1247222084, 136126926, 35521282, 16908545, 474364188, 567547691, 50464797, 16843294, 33758722, 3005226504, 723273273, 505467927,
- 503513608, 33620226, 100663552, 1006829055, 956355841, 285540352, 572728884, 353699334, 387323412, 640029975, 117842467, 37631797, 640955701, 891495206, 389494326, 909522709, 353710643, 387383838,
- 589702677, 2583758370, 991834685, 286262310, 406073389, 758133784, 84152337, 656741650, 1275667792, 2803639056, 286262017, 186852649, 16981773, 474298908, 550770475, 50464798, 16843294, 33758722,
- 3776978440, 470359586, 68162565, 185483863, 505463214, 503513608, 65794, 4280287234, 16909036, 983253, 16777245, 353769010, 587597332, 891692578, 389428788, 336922146, 842208790, 640955702,
- 1159135526, 2000960618, 929186125, 1110929215, 826943814, 1210664510, 1765528833, 1114917700, 1262906172, 1596014705, 1013663578, 1799640932, 131133, 48758280, 13959466, 3997743, 1043797760,
- 873542914, 589506086, 926299701, 909579543, 372388662, 101979414, 101123846, 354886179, 387383838, 589702677, 319227426, 842208789, 875902518, 119677734, 305006598, 302318607, 1344742677,
- 206702885, 1580866609, 338172728, 1076697714, 268632363, 892612113, 875893780, 760166567, 1196632391, 4212272204, 487064067, 586613025, 85723422, 1610878996, 890112843, 1344288857, 273288516,
- 488750361, 503513608, 33620226, 1003506434, 1312315443, 1587292, 4263706626, 19923687, 2425045, 83886131, 889339447, 587597621, 875898402, 909522743, 924267059, 285672983, 387383838, 589702677,
- 319227426, 572728849, 370414854, 909586995, 975831350, 1745096466, 1851662099, 772494433, 826818838, 16848403, 772870147, 336999473, 828324923, 1380993094, 337977923, 33815327, 4062256392,
- 1668615234, 137772676, 186589449, 318659630, 34086177, 16915971, 2432762369, 1529414913, 342907731, 16785931, 4261352704, 3573642753, 11008, 37631799, 640955701, 891495206, 389494326, 909522709,
- 118960691, 572728867, 336925958, 387388950, 589702677, 352781858, 68096558, 622137861, 153440295, 372052024, 352916252, 874851351, 873927684, 353517629, 52113972, 538839042, 152969953, 269747484,
- 323118852, 779619094, 581709376, 50464541, 16843294, 65538, 32309022, 13959559, 922746931, 370414899, 892744243, 640099892, 891692838, 842217012, 101062422, 875897607, 102900518, 387322901,
- 370606622, 101061653, 656810531, 506017334, 1144338246, 1295196702, 1466188820, 36190752, 1125908738, 808594995, 574041405, 1698241549, 675226178, 697238790, 674508837, 185016605, 1176570135,
- 235621700, 388771351, 640167715, 135013410, 487395600, 726413613, 958270731, 369099008, 1057092863, 520121602, 118685696, 875902773, 389494311, 353699334, 287508279, 842208788, 118961974,
- 572720646, 1281504550, 640615502, 2298807820, 488275977, 219355407, 287310896, 2114008122, 1176704260, 386868522, 524561163, 4264953382, 136324602, 87363851, 3617543, 4279369729, 21299956, 3539157,
- 336658688, 387388950, 589702677, 906429986, 101135670, 640098851, 875902246, 589506086, 926299701, 387191063, 926036758, 875902262, 589506086, 926299701, 268760833, 589637905, 639699979, 742588930,
- 220288068, 353502475, 626009893, 907613449, 86321721, 656741650, 3506513232, 505452030, 503513608, 33620226, 1041638689, 924003623, 505587764, 335879177, 3657303056, 706615363, 581116965, 85723422,
- 16781332, 4194240000, 3405847298, 11520, 101058305, 101057287, 637739783, 891758374, 842208790, 118830902, 387192070, 922893843, 875902519, 372582183, 909259542, 521863735, 1980832014, 839783686,
- 185338028, 305148194, 825307922, 326568217, 705039895, 673781779, 672009768, 45023528, 4263714561, 657919996, 219386625, 18612737, 469828098, 286327298, 719388181, 1779311154, 18422319, 33627138,
- 16777474, 4194240000, 3573622787, 17152, 370553601, 37622551, 892745527, 891758388, 842208790, 118830902, 117900806, 101122574, 52627206, 117899790, 640025379, 372582183, 909259542, 101127479,
- 320279573, 2634089534, 168625687, 168956019, 654782980, 237644322, 438970894, 1142364432, 169086466, 772213509, 118691208, 1714381317, 471144979, 286339891, 640168755, 471028740, 19077913,
- 438506709, 774430462, 311167771, 33692946, 33685788, 33692673, 60568099, 236861223, 1442911264, 168896557, 995099110, 469893416, 16908801, 369230364, 3976072205, 1043939115, 65618, 33423124,
- 13959664, 620757037, 387388951, 589702677, 637994530, 120006438, 101123590, 891488006, 926364211, 791029287, 370554626, 859248407, 119677717, 278142977, 438049043, 488114184, 1795689223, 202769738,
- 1443170057, 2500596241, 220071800, 443811093, 2085358359, 152637010, 35047678, 16915971, 268763649, 123904524, 202183969, 2953779976, 17894318, 437524994, 2943619354, 16780060, 3858631680,
- 3405848578, 14592, 892736293, 891758388, 842208790, 118830902, 50791942, 572720646, 372455207, 926298675, 654454327, 656811523, 370554151, 926298675, 352716565, 370611988, 1999175958, 689580550,
- 688786729, 588454952, 1176292126, 404364338, 488184333, 152508472, 1829638671, 303240715, 286339378, 556151090, 353255433, 254017878, 33756683, 33685788, 33692673, 754861107, 1259289153,
- 1027621655, 573318937, 370804225, 18612737, 469828098, 303431938, 740665368, 268435712, 3523345919, 687918593, 16842752, 926299699, 101135159, 589698310, 654771746, 926351934, 590820918, 117835298,
- 37626631, 842208823, 3338745654, 1300743934, 504497213, 3674473734, 943792440, 371071494, 487893516, 673615632, 504103695, 16909059, 991968441, 4272947506, 218825075, 723726159, 33620753,
- 438508820, 656069647, 185206041, 556213060, 16909081, 973078784, 553734655, 520148482, 353566720, 503776788, 336925954, 639768342, 875898662, 908535334, 1043674422, 101069570, 556868558, 740757029,
- 18563645, 740237325, 1125974304, 35991098, 943897171, 941623566, 1010543920, 1061427979, 456009896, 909315593, 457193914, 16792078, 218043137, 3993127681, 768, 288559365, 4097315585, 519889411,
- 738197760, 318853631, 520148482, 355926016, 908263950, 875902262, 641152566, 875902246, 372385574, 336926486, 34477846, 1125777863, 237448253, 590422309, 1127886373, 723583261, 2534154527,
- 457457576, 2906340363, 153041200, 3124836622, 453917243, 918174016, 453578291, 65582, 45482035, 5570859, 16777242, 587597335, 656811554, 572719662, 908527366, 372388662, 857085463, 571015730,
- 203899936, 522727198, 504108065, 622992942, 873932607, 237252405, 458555705, 302462778, 67898641, 1092301607, 353833015, 131084, 2096977, 13959621, 2031635, 891492096, 909588020, 890451766,
- 370415415, 370545431, 372376343, 587600917, 875898402, 52589366, 16908804, 17439768, 50469377, 605500418, 571873316, 337240355, 336864295, 420872456, 185206039, 365952531, 2416059951, 588650276,
- 588715811, 1023410688, 3221330943, 671101442, 12800, 857080577, 389494322, 587597319, 120006178, 640038691, 875898407, 909522743, 120796979, 101062422, 640099093, 638780198, 102900518, 18224149,
- 757623387, 153432602, 692200980, 470948625, 606019625, 1348871953, 454830094, 690428712, 152831238, 1704858890, 956698896, 2600541247, 202809342, 320932624, 1543701007, 404623720, 865032762,
- 1543964456, 622395740, 188883770, 29425165, 1526858575, 5257043, 4278976513, 48103923, 4653238, 772210944, 101065474, 859190791, 858920471, 926365234, 101061939, 656810531, 120006182, 926299427,
- 891748926, 372389639, 875894550, 842217015, 352720662, 588715028, 640099878, 117842467, 18158854, 925893750, 721691180, 742071855, 67831965, 117640206, 286330906, 707484206, 372060487, 437262350,
- 140509457, 320280598, 525425507, 17439019, 252379425, 976104474, 1744902163, 33620528, 71529537, 251725315, 227816470, 168364551, 825033482, 1090653454, 52311909, 16843053, 1095262314, 858983948,
- 738923013, 588516391, 1498362663, 503316992, 3590414336, 553652994, 12544, 859182867, 389486386, 353768967, 386336276, 101066503, 656810531, 641148679, 909391142, 571942711, 336922118, 842208790,
- 875902518, 810362406, 910640950, 389099312, 823595795, 991703085, 490350632, 372321584, 823530516, 709372895, 724190762, 1143614021, 691016450, 825176105, 623327514, 758193465, 336860720,
- 825045014, 656750877, 321984826, 707413288, 1160325446, 709175594, 83886336, 4026662399, 1107344642, 855703552, 352723733, 588591893, 386014741, 640029975, 117842467, 37631797, 891499829,
- 640955699, 891496231, 36579123, 909587719, 387330611, 320280086, 922959415, 117839155, 2340048385, 27040785, 689115909, 572799014, 338239280, 2627470866, 2165638146, 504712047, 56366366, 270078982,
- 1744896772, 252841542, 1095109905, 662569281, 656415526, 203761751, 35521281, 503447809, 621543683, 271013672, 839388171, 791584807, 354222352, 170729217, 4227728138, 590029219, 1544495661,
- 16908425, 16777235, 14025291, 458755, 856760576, 288555793, 940769571, 20461624, 48037412, 14810838, 4279894018, 47251749, 4260037, 16777302, 640034595, 352723491, 35526420, 352460311, 369559060,
- 236197142, 656548610, 859256374, 857085463, 875902514, 654454311, 875889198, 875898423, 842217014, 101062422, 352716293, 504829460, 909514498, 640037941, 16920103, 520429459, 1295786807, 874253353,
- 575488813, 471869988, 794314281, 101011278, 520429569, 1380396605, 824052782, 558777386, 1782594131, 574432575, 4076733702, 1767117847, 202644504, 1277103891, 354228803, 458688770, 758465302,
- 302909467, 908858639, 608315430, 723923217, 740704337, 1512719152, 927013409, 235479091, 722865426, 1028531252, 1715288621, 722735165, 672514882, 540616730, 101124615, 504637725, 135471914,
- 33556489, 419565824, 2097298433, 385878784, 840105984, 101979414, 891691555, 842217012, 101979414, 891691555, 373569076, 370613019, 383654940, 370613019, 2097290268, 471209755, 454497820,
- 471209755, 454497820, 184550144, 3758288639, 503366146, 1174417920, 352387072, 589702691, 336922146, 842208790, 101062455, 572720647, 875898406, 842217014, 506603286, 236197122, 773989122,
- 1043608834, 237115138, 504632578, 1043477250, 775173378, 437191170, 1094005764, 709044049, 135604561, 1412631052, 875714361, 1059274076, 1686194792, 2221095224, 1686326091, 2238003256, 1500857164,
- 1935094321, 1483948610, 1918317106, 946539010, 894263091, 156053587, 889852689, 1044143413, 2836083805, 1250059321, 962823243, 1250124600, 946111564, 1951871276, 1467171395, 1935094321, 1483948354,
- 131122, 27656472, 12911158, 3735598, 101126912, 639771398, 926299189, 589702711, 101123618, 654771974, 859191093, 370546482, 370414869, 655693591, 119743014, 589505030, 101070135, 857084949,
- 3593942578, 135137873, 1094527268, 757662016, 50859798, 285803009, 1126769443, 117770265, 152638481, 119210764, 50725129, 371014730, 17442573, 33633501, 791159078, 606669322, 67440135, 654578434,
- 187110420, 493233950, 285278733, 16843009, 587812684, 270210082, 131082, 21430322, 11272642, 851974, 118961920, 523711783, 891750146, 2005014327, 397455383, 2954327890, 2734167984, 2920065807,
- 262317837, 229510315, 805306624, 922909184, 83924993, 554893312, 557130513, 872874544, 2550214142, 15393534, 1114113, 20447703, 327711, 656483584, 18293047, 100466202, 84345115, 88278487,
- 184550400, 3758288639, 671138306, 1207972864, 23552, 372388627, 369562645, 370546454, 774051123, 36579074, 336929571, 353834774, 842216739, 638662454, 388441894, 892744243, 589506100, 923207174,
- 352460338, 587337236, 889335330, 386022964, 352456226, 855776788, 889339442, 3439472180, 1934315676, 286796318, 322246936, 219092506, 689182741, 2551517706, 17503248, 286460929, 994122600,
- 270347569, 1245970699, 959997057, 1263240291, 943219843, 1129088357, 842094965, 1111651159, 842160243, 704803415, 324481839, 641544709, 251793431, 606349353, 219578637, 269484290, 788599564,
- 16845585, 674180273, 285933868, 2187606472, 1669614410, 2204317753, 1686391882, 1462840376, 1933722484, 1462907223, 1933656691, 16790104, 436341504, 1325548289, 768, 557129985, 3372106497,
- 436353025, 131125, 25493810, 11600478, 1835023, 372380416, 101979414, 639771398, 909391142, 102897462, 857084949, 892745266, 717694516, 1143547973, 675621161, 757679144, 506347584, 37756466,
- 725887409, 673727528, 1143613765, 775956520, 840777774, 4271901, 3342338, 36372992, 720896, 16777231, 857027381, 588587797, 20259637, 18953505, 3772790803, 4160872504, 4160817406, 3755942145,
- 948471864, 3727358, 17170433, 35389711, 2883758, 909579008, 640955702, 117842467, 909583111, 372388662, 117838869, 922959367, 352785719, 639046676, 706945574, 101123842, 724185703, 119545126,
- 386603017, 1127948849, 661138465, 421733170, 687931667, 202318387, 506012690, 896279297, 707010887, 1428035861, 893129751, 1815034658, 16843009, 117899521, 185533456, 16843009, 83886336, 419497217,
- 838905346, 923992064, 842217014, 101979414, 336926215, 572720646, 640034598, 370554663, 892744243, 572728884, 925304582, 842208790, 640955702, 117842467, 403838471, 1060315180, 827859228,
- 538127182, 168428065, 674042134, 606613801, 118625548, 68421384, 472329246, 201665814, 391001858, 438907154, 1225923117, 103433253, 489166602, 891694856, 86714155, 19138056, 455028481, 588126246,
- 1308623104, 771881473, 167814402, 923992064, 372388662, 117838869, 562712071, 252841238, 4194406425, 236200330, 1511002637, 301990144, 1157764351, 956355841, 286720000, 589702708, 909522211,
- 336664375, 842208791, 892679735, 589702708, 926299427, 370413847, 353834774, 572728870, 909510406, 587597621, 388441634, 101061653, 353502563, 642591013, 907613449, 86321721, 1327830290, 268699981,
- 589637905, 639634444, 709034498, 405215815, 3961591828, 505557762, 335879177, 3657303056, 706615363, 581116965, 152832286, 2516452384, 34086432, 16915971, 606208513, 153566742, 117687563, 50335763,
- 1795106560, 3070381314, 922758400, 15104, 235345153, 504432386, 353834754, 572719662, 889652742, 889339447, 656811537, 909391142, 372388662, 857085463, 285292082, 572727846, 370414854, 856761107,
- 438324482, 16845083, 706156039, 506938672, 826554397, 135665450, 1260735031, 137646381, 1327174432, 4283181604, 34079744, 3426959922, 3053601860, 235078430, 2818384675, 34415910, 16850435,
- 16843009, 218235678, 1946232357, 958142724, 658845011, 33685761, 30146050, 944374033, 50416439, 16841212, 3405792000, 1057076992, 2816, 353776147, 572720660, 909391142, 606345084, 589436440,
- 388251393, 388178710, 16786199, 536829952, 4143919105, 6656, 120796951, 372388662, 587600917, 925312546, 842208790, 589706293, 2366047778, 219750954, 1110321165, 555619642, 219944974, 168957494,
- 1651248657, 539362369, 168176935, 721749535, 67311121, 536871168, 4261416705, 453030146, 655556608, 389494326, 387322897, 640095511, 572662562, 909587719, 638661942, 86312743, 203570732, 321066509,
- 167847720, 388314151, 1308688653, 253647106, 4261679386, 34346656, 16848898, 33691650, 503387660, 2228750, 17432578, 37945760, 786629, 318767128, 336926258, 572720646, 909391142, 352723479,
- 842208788, 640955702, 743719597, 1363291979, 774585178, 824782393, 1338311228, 675621439, 1396981838, 1077229844, 993279823, 131151, 21430322, 11272642, 851974, 657929984, 118822711, 925316903,
- 4211545367, 2954327927, 2004345008, 1454419991, 2920130466, 2718935820, 212733351, 262315, 50200350, 11797207, 2621477, 5242924, 656614656, 37697078, 352716311, 842216213, 638924598, 370484006,
- 638923571, 102900518, 909325575, 892679990, 19072263, 842203443, 875902262, 587670307, 102184743, 504698118, 355669762, 639837734, 572662562, 119670279, 95245058, 2651523335, 33753393, 386859537,
- 488377615, 538258177, 773199916, 404886823, 4278092033, 885195060, 455385085, 1342375184, 178324487, 83952644, 388043282, 386926374, 269944325, 1796480778, 319884815, 822284516, 21837647, 16921345,
- 35205412, 419561729, 1377571841, 43630784, 494599857, 571731507, 1023621664, 594162269, 436275746, 16843009, 50331905, 4261351168, 3020087042, 654312192, 19968, 855712563, 909259521, 590624053,
- 656607011, 101062455, 35525909, 638923543, 572924710, 119677475, 621224454, 859190839, 336926258, 856098566, 104281650, 370414854, 589702679, 889652770, 892745271, 572728884, 883820295, 4248093441,
- 270214322, 122684165, 67805444, 302317828, 639050002, 85397511, 168826630, 2650870815, 607328268, 673467454, 706574963, 16843031, 340279553, 1816214547, 690760760, 34410806, 494599857, 571731507,
- 1023621664, 594162269, 436275746, 16843009, 1493762305, 859640599, 1831223843, 235668226, 151783175, 33620226, 1194747924, 791357475, 262179, 50200335, 11600607, 3670068, 6357086, 909579008,
- 372388662, 117838869, 336926230, 572720646, 640034598, 656811559, 857085495, 875902514, 654778915, 389165623, 892744243, 572728884, 588449542, 587412225, 1060517415, 101062402, 858985749,
- 355939890, 354625062, 355676950, 572728870, 859113222, 892810806, 321455925, 924921879, 891822146, 810561583, 18885142, 67242247, 823140099, 1429482281, 168432669, 234949382, 539635744, 2533895456,
- 885195060, 117812545, 832441097, 285344521, 253169410, 18684941, 740300075, 657331736, 18358805, 1195508353, 674238998, 136064283, 1093085227, 235472680, 201792535, 674105354, 223357491, 771828484,
- 572791582, 46071071, 263912881, 3826454798, 1328612112, 16862519, 604045875, 16914737, 18416129, 3226606612, 131264, 18480939, 13959563, 3014690, 101123328, 639771398, 909391142, 37631798,
- 925316149, 101979414, 101058310, 857084949, 53950258, 336926258, 639771398, 20329525, 992487051, 810693410, 690696211, 353766696, 522259756, 910500140, 2098467142, 405021719, 1394811414, 672142193,
- 823995462, 707077944, 454365213, 288168974, 824323105, 1026563642, 537014314, 588650276, 588715811, 251659008, 4093836799, 805342211, 1040200448, 318832640, 387383838, 589702677, 889652770,
- 875902519, 556214054, 352716295, 387388948, 589702677, 889652770, 322385463, 909588022, 855848758, 640104195, 909391142, 387396147, 317888513, 571282198, 269562938, 690961981, 4264431111,
- 319823072, 925178390, 739118389, 321070387, 203165106, 2282493445, 2420080381, 219287321, 42606870, 701038012, 50467114, 16843294, 50535938, 571869201, 958808947, 34343947, 16915971, 52298241,
- 2499882499, 203112733, 1375608373, 1521101313, 235737616, 9052436, 4279173123, 66323197, 3145868, 4063283, 504561920, 353834754, 572728870, 926222086, 640955702, 119613223, 336922118, 353834774,
- 572728870, 926222086, 907228982, 909522742, 53674807, 859191079, 336926258, 17237766, 370340504, 975310099, 1024463156, 120139582, 3774754318, 370348060, 892806426, 858525197, 2987598629, 84679693,
- 4253551638, 562707582, 236064022, 3154284570, 707381501, 503513617, 33620226, 285410078, 1931613704, 188294723, 50465804, 16843294, 50535938, 496304430, 889985857, 22150686, 562735658, 302845460,
- 50354704, 4261351168, 2349069314, 855650304, 14848, 35525377, 638916375, 102900518, 909587719, 656815157, 101130535, 370414854, 638916375, 102900518, 909587719, 909513527, 926299703, 50541315,
- 656611123, 2550211335, 320213746, 876225037, 1044189201, 235350319, 484507182, 437654288, 221591333, 624110606, 229774115, 369429532, 2130544652, 595410440, 35879289, 701038012, 50467114, 16843294,
- 50535938, 571869201, 958808947, 34343947, 16915971, 52298241, 2499882499, 203112733, 1375608373, 1426139649, 6776743, 4279173123, 66323197, 3145831, 4915251, 504561920, 353834754, 572728870,
- 926222086, 640955702, 119613223, 336922118, 353834774, 572728870, 926222086, 907228982, 909522742, 53674807, 101069587, 656810531, 572728870, 859185927, 387323442, 909259542, 317888513, 571282198,
- 269562938, 690961981, 4264431111, 319823072, 925178390, 739118389, 321070387, 203165106, 2282493445, 496991997, 271269635, 555423517, 487793163, 319640598, 253566239, 3154254358, 707381501,
- 503513617, 33620226, 285410078, 1931613704, 188294723, 50465804, 16843294, 50535938, 496304430, 889985857, 22150686, 724566314, 235538750, 73673996, 370019853, 251659264, 4093836799, 805331971,
- 1056977664, 19200, 35525377, 638916375, 102900518, 909587719, 656815157, 101130535, 370414854, 638916375, 102900518, 909587719, 909513527, 926299703, 50541315, 336926258, 639771398, 859190325,
- 336926258, 639771398, 20329525, 370340504, 975310099, 1024463156, 120139582, 3774754318, 370348060, 892806426, 858525197, 2987598629, 84679693, 4253551638, 454446206, 471209755, 454483484,
- 471209755, 4256956956, 287975880, 35521282, 503447809, 135332611, 1131618838, 202062118, 503513612, 33620226, 771949342, 1092457729, 506792987, 704729598, 387656961, 370940950, 387652375,
- 370940950, 67115799, 4261351168, 2936271874, 855650304, 1258307328, 318832640, 387383838, 589702677, 889652770, 875902519, 556214054, 352716295, 387388948, 589702677, 889652770, 322385463,
- 909588022, 855848758, 372380419, 587600917, 875898402, 102897462, 857084949, 875902514, 4070048038, 219354642, 288635426, 792608016, 772671273, 270328062, 622466579, 235746615, 589640492,
- 470659603, 202769676, 427752840, 708458793, 708524586, 471999260, 35791388, 701038012, 50467114, 16843294, 50535938, 571869201, 958808947, 34343947, 16915971, 52298241, 2499882499, 203112733,
- 1375608373, 2013342209, 975841595, 975776570, 505225764, 488448803, 4278321187, 66977782, 11797132, 7798899, 909584128, 892731703, 656877108, 857085493, 909586994, 372388658, 588580375, 656815157,
- 572728870, 285672966, 842208790, 926299958, 101069623, 336860436, 656611094, 589702695, 285672994, 842208790, 926299958, 859256374, 102041094, 640099078, 889661218, 892745271, 589702709, 117900834,
- 336922118, 638916375, 102900518, 855834887, 354552337, 320930079, 1546395415, 806558092, 372518696, 270808352, 403835171, 690104654, 807014428, 221327908, 503644423, 16908801, 218629406, 774190899,
- 656676372, 235628617, 67437067, 1174996771, 376445512, 474295110, 926223119, 942870031, 889852480, 271132964, 20396558, 467456204, 36963077, 84681472, 503513606, 33620481, 1463878145, 67965249,
- 50399238, 32898564, 218498306, 724710413, 252184847, 423309096, 33621255, 50718974, 721815047, 655958022, 33631058, 50397441, 587796503, 16939560, 527565313, 85462042, 16915971, 2449605121,
- 1946258686, 369099008, 2650939391, 989906178, 117768192, 372388662, 587600917, 925312546, 842208790, 589706293, 654771746, 889335351, 859191092, 101062450, 875897621, 572728870, 336922118,
- 842208790, 101127991, 361824547, 774376717, 487930434, 454626850, 303445517, 118362378, 1385917735, 1770285486, 520686206, 1446075195, 2454800257, 157119074, 343631644, 539362359, 168176935,
- 721684255, 67311121, 1577867782, 1708025241, 1093740860, 605308966, 1569278999, 1011979362, 3551754, 4279631874, 54264573, 6094988, 922746984, 889339447, 640037905, 372582183, 909259542, 858928695,
- 102176306, 875897621, 640034598, 101065251, 370544903, 926298675, 926365238, 352716339, 588715540, 640034599, 117842467, 857085457, 909588018, 926299703, 352716339, 572720646, 572925734, 117842467,
- 640034561, 859190325, 571938610, 102045732, 806819079, 287263815, 840839491, 607462163, 302588688, 573067287, 437263401, 825369648, 16974861, 33627653, 85852418, 942804232, 370421285, 1749624612,
- 34278923, 119735301, 440943881, 406409750, 890637346, 2419654961, 219287321, 462037270, 621478403, 700514600, 50400037, 16908574, 33620225, 289495104, 134611981, 4261675777, 84017653, 118294022,
- 255078708, 993144080, 17106713, 99155458, 101058307, 421463851, 19681575, 16843010, 3825336833, 219352922, 2317423630, 369099264, 1006829055, 1560316931, 26624, 37631799, 640946485, 891758374,
- 842208790, 842413878, 387330611, 891491590, 640099892, 102900518, 370214662, 909259542, 926299703, 101069623, 387322901, 640100131, 102900518, 370544903, 926298675, 909522742, 101069623, 587597333,
- 640099874, 102900514, 909579015, 353776179, 117900820, 353903650, 387254022, 525092656, 506544913, 891491122, 153292836, 676337426, 270280994, 841232410, 50597169, 18744577, 503382530, 839714821,
- 338568504, 1227301910, 185469800, 587465986, 1212483847, 961680922, 369893912, 2327720245, 302847776, 462428686, 621478403, 700514600, 50400037, 16908574, 33620225, 289495104, 134611981,
- 4261675777, 84017653, 118294022, 255078708, 993144080, 17106713, 99155458, 101058307, 421463851, 19681575, 16843010, 3825336833, 236200330, 1511067917, 369099264, 1006829055, 1560316931, 25600,
- 37631799, 640946485, 891758374, 842208790, 842413878, 387330611, 891491590, 640099892, 102900518, 370214662, 909259542, 926299703, 101069623, 387322901, 640100131, 102900518, 370544903, 926298675,
- 909522742, 101069623, 587597333, 640099874, 102900514, 389223175, 587671331, 353903650, 387254022, 525092656, 506544913, 891491122, 153292836, 676337426, 270280994, 841232410, 50597169, 18744577,
- 503382530, 839714821, 338568504, 1227301910, 185469800, 587465986, 1212483847, 961680922, 369893912, 1056059701, 2037982077, 33757987, 19408139, 186984897, 18744065, 16843010, 1480589825, 67965249,
- 50399238, 32898564, 101057794, 825493261, 756027188, 119094066, 4261544197, 117638632, 120260102, 1361516831, 16908588, 33620225, 1739034371, 196711, 50200342, 6554428, 6881373, 922746997,
- 889339447, 640037905, 372582183, 909259542, 858928695, 102176306, 875897621, 640034598, 101065251, 370544903, 926298675, 926365238, 352716339, 588715540, 640034599, 117842467, 857085457, 909588018,
- 926299703, 352716339, 572720646, 572925734, 117842467, 353776147, 572720660, 909391142, 353776179, 572720660, 909391142, 353903650, 387254022, 525092656, 506544913, 891491122, 153292836, 676337426,
- 270280994, 841232410, 50597169, 18744577, 503382530, 839714821, 338568504, 1227301910, 185469800, 587465986, 1212483847, 961680922, 369893912, 380514613, 370613019, 383654940, 370613019, 52108316,
- 673516290, 623493377, 503513355, 16843265, 1073873153, 219234648, 17303044, 4127065091, 100991489, 872877318, 269431857, 423309869, 33621255, 50718974, 721815047, 655957767, 33631313, 16843009,
- 459735810, 471602711, 454760214, 471602711, 1775382, 4279631874, 54198781, 2424972, 16777264, 117575175, 386014737, 640029975, 117842467, 37631797, 640946485, 891758374, 842208790, 656881462,
- 875898406, 389165878, 809173271, 17175831, 387253761, 658517040, 808206119, 117904663, 758126357, 1076241728, 428894509, 369955343, 2516748833, 621478147, 675282473, 50400038, 16843294, 16981506,
- 19408140, 186984897, 18744065, 755040770, 219352922, 2317423630, 369099264, 989986303, 620792835, 12288, 34473729, 35524871, 638916375, 102900518, 1043805447, 873542914, 656877094, 857085493,
- 657929778, 842217015, 101979414, 989923079, 102045488, 352715009, 1076637719, 742336295, 118822704, 806819079, 639975469, 2330668352, 302847521, 42998286, 184615830, 1073621285, 17507880, 16915971,
- 52298241, 673516545, 623493377, 503513355, 16908801, 337742381, 269618446, 131162, 33423117, 9175877, 2883621, 235340032, 504432386, 353834754, 572728870, 926222086, 288686654, 656811572,
- 370554151, 926298675, 588722983, 19072807, 353841211, 100729094, 741349141, 1059530560, 353841196, 387254023, 624962864, 2972532774, 2032368958, 2516722553, 621478147, 675282473, 50400293,
- 16843294, 16981506, 19408140, 186984897, 18744065, 3623944706, 6776743, 4279435267, 54395389, 2424932, 3997745, 235340032, 504432386, 353834754, 572728870, 926222086, 288686654, 656811572,
- 370554151, 926298675, 353776167, 572720660, 909391142, 353776179, 572720660, 909391142, 389036801, 16844309, 806819078, 656883756, 389033023, 352782101, 1076703255, 759178789, 454760181, 471602711,
- 454760158, 471602711, 17012226, 4264109323, 203761727, 35521281, 503447809, 621543683, 700514600, 50400037, 33685790, 387690497, 370940950, 387652375, 370940950, 33561367, 4261350912, 3020091138,
- 1073752576, 926351360, 590689590, 875901749, 656877094, 857085493, 926299698, 370553395, 101061653, 572720647, 639837730, 102900518, 856756999, 370221845, 909259542, 892745526, 640034612,
- 956703267, 1667438879, 672666886, 354506575, 420887352, 660053096, 2489462597, 420874758, 319697948, 3096918587, 590353336, 507400763, 2015518565, 339027533, 4214099216, 606714660, 503513611,
- 16843265, 1552501761, 543587392, 16843076, 2265055745, 4263836414, 201589975, 2840992029, 454641575, 131075, 65863441, 6751021, 5374010, 1043805952, 873542914, 656877094, 840308277, 285292311,
- 656811572, 370554151, 926298675, 34473749, 370413831, 655693335, 35524865, 638916375, 102900518, 104005895, 639771398, 589702695, 908265250, 370553395, 842208791, 405541174, 352716309, 538717208,
- 20323360, 404031201, 271725356, 741422353, 17110551, 1510015233, 83961854, 892081942, 789515829, 488112694, 287981571, 555488797, 487792907, 319640852, 270343710, 52107797, 673516290, 606716161,
- 503513611, 50397441, 3607211773, 34284585, 33627651, 52297986, 690227970, 218421501, 268764936, 821971970, 34284840, 16915971, 1778582017, 168377899, 1680673806, 235867395, 196630, 49086230,
- 9176060, 1966097, 16777257, 353769010, 587337236, 889335330, 389428788, 336922146, 842208790, 640955702, 640034599, 859190325, 18290482, 1487105938, 1418750524, 861830988, 2069998431, 1417627269,
- 1351582325, 302979472, 2317424141, 2589181186, 1787646569, 2220963130, 1554345807, 1804310058, 2493995424, 1514581660, 235737616, 9052436, 4279631875, 66847468, 1114252, 2687006, 372375808,
- 236197142, 773989122, 909391106, 102897462, 370545685, 892744243, 925312564, 372388662, 117838869, 1871839495, 1782339747, 2135708816, 2875143006, 1183152993, 2188727423, 562744207, 236064022,
- 3305279514, 1382652499, 893020813, 1867482209, 2519358629, 1503685515, 2929497255, 337742406, 269618446, 196698, 49086230, 9176060, 1966097, 16777253, 353769010, 587337236, 889335330, 389428788,
- 336922146, 842208790, 640955702, 588722983, 19072807, 1487105938, 1418750524, 861830988, 2069998431, 1417627269, 2542764661, 2032368958, 3305251705, 1382652499, 893020813, 1867482209, 2519358629,
- 1503685515, 2929497255, 1734846449, 369099520, 4228050175, 285239043, 905977344, 838926336, 336926230, 572719630, 875889198, 571946550, 370414854, 909259542, 925250613, 587597363, 640034594,
- 587670051, 372388662, 370546454, 20329011, 1487105938, 1418750524, 861830988, 2069998431, 1417627269, 277840501, 725549853, 555427613, 487793163, 302863382, 319823391, 35329289, 1771721669,
- 980061522, 1334075701, 710714735, 2691402646, 2626987865, 1043057838, 755764755, 252511076, 1443336, 4279631876, 66847468, 1114212, 2752542, 16777270, 353769010, 587337236, 889335330, 389428788,
- 336922146, 842208790, 640955702, 353776167, 572720660, 909391142, 353776179, 572720660, 909391142, 2741998081, 2422881368, 1585400916, 1638620979, 2135328123, 2407691604, 454760155, 471602711,
- 454760158, 471602711, 2589181186, 1787646569, 2220963130, 1554345807, 1804310058, 2493995424, 466202268, 471602711, 454760214, 471602711, 1775382, 5439489, 17498660, 721114, 925312256, 118961943,
- 119998231, 3020357927, 699642665, 3005855157, 3036621235, 666088231, 3005723828, 50341811, 3976142336, 3305250051, 754983168, 14592, 925304631, 640099878, 909521973, 370618931, 389486358,
- 353768967, 587337236, 640099874, 369164582, 857085718, 875902514, 637600038, 589702950, 336922146, 559651350, 152311390, 1923833372, 538071140, 1478514201, 1782260778, 1445745807, 18813476,
- 375062221, 1346049055, 4262560375, 497287469, 909255469, 1125417848, 492313941, 1414010914, 609985903, 1393824520, 1765036830, 1787712580, 152048443, 4276420886, 220077168, 1016636966, 29556309,
- 220209555, 1049401363, 131168, 49086220, 9176055, 4194357, 235340032, 336660226, 572720647, 288695847, 656811572, 370554151, 926298675, 34473749, 370413831, 892744243, 640037905, 372582183,
- 909259542, 640099639, 909391142, 387396147, 388822786, 1157694742, 1016567618, 387254072, 624962864, 808271910, 17175831, 1752000607, 739775750, 286273844, 3489542453, 302979471, 2317424141,
- 33789442, 4264109067, 1111925983, 24328510, 186984803, 18744065, 503382530, 638255363, 1621687848, 23749975, 186919232, 18744066, 755040770, 219352922, 2317423630, 201327104, 4144164095, 889228291,
- 16384, 34473729, 118755591, 656548614, 873542950, 656877094, 857085493, 355939890, 117575175, 857084945, 288699954, 656811572, 370554151, 926298675, 859191077, 336926258, 34014982, 370617591,
- 1111818501, 943495063, 806819079, 639975469, 389033280, 1593902613, 107507048, 875304981, 890310705, 2320629297, 302847521, 42998286, 184681366, 3757975844, 1044530852, 1661039417, 17507625,
- 33627651, 52297986, 673581825, 1465952510, 1073834597, 34284585, 33627651, 2318205186, 235803681, 5902353, 4278976514, 66519788, 3473548, 16777276, 117575175, 101127185, 640098851, 640946485,
- 891758374, 842208790, 118830902, 285671950, 842208788, 873542966, 656877094, 857085493, 624375346, 656611123, 4144112391, 85333804, 2537702657, 121126039, 758126357, 1076241728, 353841197,
- 1751056646, 352741485, 825502744, 825561360, 2101250558, 595163427, 33789442, 4264109067, 1111925983, 24328510, 186984803, 18744065, 503382530, 638255363, 1621687848, 23749975, 186919232, 18744066,
- 3623944706, 6776743, 4278976515, 66519788, 3473508, 5046337, 235340032, 336660226, 572720647, 288695847, 656811572, 370554151, 926298675, 34473749, 370413831, 892744243, 640037905, 372582183,
- 909259542, 372385079, 587600917, 875898402, 372388662, 587600917, 875898402, 754385462, 17110551, 2543272517, 352794684, 1076703255, 759178789, 102045488, 1835556609, 404031080, 271660076,
- 4264637713, 454759994, 471602711, 454760158, 471602711, 33789442, 4264109067, 1111925983, 24328510, 186984803, 18744065, 503382530, 638255363, 1621687848, 23749975, 186919232, 18744066, 2952856066,
- 471209755, 454497820, 471209755, 454497820, 150995456, 2382560767, 838896643, 15616, 842413843, 387331633, 909522707, 236270391, 34473731, 35525909, 638916375, 102900518, 1043805447, 875902210,
- 640034599, 925181735, 372388662, 117838869, 41093383, 406130179, 840853391, 773672988, 505162793, 100731424, 741349141, 1059530560, 353841196, 528222471, 18684487, 371296779, 437129741, 413663888,
- 742195713, 799276030, 588199768, 708851768, 455883312, 203761793, 35521281, 503447809, 621543683, 253333032, 71776216, 562714115, 302845460, 16800272, 4261355520, 3020045826, 17152, 35524883,
- 638916375, 102900518, 1043805447, 873542914, 656877094, 857085493, 355939890, 117575175, 857085461, 859255346, 336926258, 572720646, 371664678, 909521459, 572732469, 100786694, 741349141,
- 1059530560, 353841196, 387254023, 624962864, 808271910, 17175831, 487395596, 1544754212, 1029913454, 185278225, 958667555, 605530402, 2382293761, 17507880, 16915971, 52298241, 673516545, 623493377,
- 503513355, 16908801, 184615710, 18556966, 1196622081, 54091834, 654910723, 59648323, 385876480, 117635071, 805362434, 21760, 37631799, 891490613, 909391159, 859190839, 336926258, 640026374,
- 352723491, 370611732, 101979414, 587597575, 638002978, 119743014, 909588225, 640955702, 352723491, 857084945, 355678003, 842208790, 640955702, 889335335, 909588276, 252847127, 793068804, 676930597,
- 387273795, 403840790, 942549021, 974132529, 774843172, 371992833, 2516677127, 67436801, 994458950, 354162965, 337581083, 875114019, 319760677, 52109351, 538839042, 588126977, 576333378, 1078994208,
- 238771755, 353638153, 991696933, 205135655, 236198700, 16974082, 419694032, 1296174626, 2583590757, 777331501, 556469778, 337326627, 605430046, 2304788, 4280287235, 47645172, 2621605, 4194357,
- 101131520, 891691555, 926365236, 572728870, 117900806, 909587751, 353776179, 386014741, 640095511, 102900514, 104150791, 352716295, 842208788, 654521910, 875898406, 389165878, 2084831511,
- 1111236363, 40068699, 437733183, 437062417, 1463892021, 184746311, 420816653, 520751634, 678757669, 522984214, 187642388, 302979472, 2317424141, 1074288210, 323699258, 121390098, 119478295,
- 1495408705, 387626862, 503448071, 33620481, 387023999, 555495694, 19207727, 319773330, 554962445, 196746, 32833312, 10814167, 3473448, 620757056, 572720647, 909391142, 640038711, 101065251,
- 891750151, 842217015, 504698134, 353834754, 589440551, 923207202, 101123637, 370414854, 909521459, 859191043, 336926258, 17237766, 520846404, 1717256764, 1195311715, 185670167, 943004173, 21452609,
- 655166211, 168958229, 86318858, 454436981, 840179500, 545952815, 236064023, 1448251418, 1111113736, 1142035275, 404162364, 541132575, 3077462306, 34019098, 33627650, 2222916097, 823006993,
- 372187420, 2324824357, 219026465, 5902354, 4280287235, 47645172, 2621605, 3932213, 101131520, 891691555, 926365236, 572728870, 117900806, 909587751, 353776179, 386014741, 640095511, 102900514,
- 104150791, 352716295, 842208788, 855848502, 120005399, 2084831523, 1111236363, 40068699, 437733183, 437062417, 1463892021, 184746311, 420816653, 520751634, 678757669, 522984214, 1731146260,
- 2032368958, 1448223609, 1111113736, 1142035275, 404162364, 541132575, 3077462306, 34019098, 33627650, 2222916097, 823006993, 372187420, 2805793317, 50358119, 4110360576, 2147669761, 889202688,
- 19712, 587597605, 875898402, 641152822, 102900518, 654771974, 859191093, 353703474, 387383838, 572925717, 117842467, 117847351, 336922118, 909259542, 104010550, 639771398, 589702695, 908265250,
- 370553395, 842208791, 2084831542, 1111236363, 40068699, 437733183, 437062417, 1463892021, 184746311, 420816653, 520751634, 678757669, 522984214, 1177498132, 708772893, 471276816, 287509281,
- 223679517, 521870868, 1377441040, 977274966, 303254338, 386350148, 1090985752, 1851335200, 118954679, 18743810, 2130837762, 236392836, 790699057, 402793750, 168377899, 1680673806, 252578820,
- 262166, 32833312, 8192727, 3473448, 5046337, 101131520, 891691555, 926365236, 572728870, 117900806, 909587751, 353776179, 386014741, 640095511, 102900514, 104150791, 352716295, 842208788,
- 839071286, 101979414, 891691555, 842217012, 101979414, 891691555, 1140930100, 1008667516, 1667652418, 390545154, 218829082, 1094202650, 50415447, 354880779, 168432153, 1963271455, 739972648,
- 791811103, 454760103, 471602711, 454760158, 471602711, 1074288210, 323699258, 121390098, 119478295, 1495408705, 387626862, 503448071, 33620481, 387023999, 555495694, 35984943, 370613013, 387324956,
- 370613019, 387324956, 262171, 32833312, 13107927, 3473448, 5046337, 101131520, 891691555, 926365236, 572728870, 117900806, 909587751, 353776179, 386014741, 640095511, 102900514, 104150791,
- 352716295, 842208788, 839071286, 101979414, 891691555, 571946548, 370414854, 892744243, 1140926004, 1008667516, 1667652418, 390545154, 218829082, 1094202650, 50415447, 354880779, 168432153,
- 1963271455, 739972648, 791811103, 976824633, 993667626, 572726314, 572660764, 1074288210, 323699258, 121390098, 119478295, 1495408705, 387626862, 503448071, 33620481, 387023999, 555495694,
- 35984943, 707345248, 690698810, 488776762, 488842014, 50340637, 3976142336, 3573668866, 1442858496, 26368, 909522707, 387330611, 842217014, 353769238, 101123604, 371401478, 370546454, 909521459,
- 101127991, 587597574, 640099874, 101132070, 891691555, 909522740, 640038711, 589702695, 101123618, 388433670, 117575221, 101123590, 857084949, 874853938, 589702950, 101123618, 370542342,
- 1161179699, 371200354, 824066865, 1446325061, 16848920, 2453033007, 369953794, 605499726, 336469546, 1058216963, 491661879, 2064454156, 1245587216, 1080956713, 235602488, 421146381, 251988281,
- 738138629, 420879146, 739378968, 20456232, 537725542, 288890679, 688000271, 823927858, 154504961, 690364680, 707341854, 185469246, 875235079, 136914200, 571085588, 453513476, 386603292, 1141727254,
- 287327034, 738592542, 370414637, 537266960, 1960576532, 101058053, 436800775, 539501857, 405743550, 353836091, 33827635, 65538, 18874138, 13959581, 83886138, 842216967, 101979414, 656810531,
- 857085495, 640955698, 117842467, 36583207, 909587509, 102183475, 656610566, 572728870, 370414854, 926298675, 34473751, 219483393, 1110321165, 572331322, 219879694, 168957494, 637996561, 1798594366,
- 976898650, 119277319, 1126317837, 458450249, 352984114, 339028486, 539362359, 168176935, 721684255, 67311121, 1006983430, 1132937316, 1025188665, 420756771, 2002997335, 537858061, 724743,
- 4279894019, 46137836, 2359461, 4194357, 101131520, 587597574, 640099874, 926299189, 372388662, 117838869, 589497862, 370611734, 909259542, 640104246, 589702950, 101123618, 370545926, 657863219,
- 891692583, 842217012, 3036747543, 337445652, 1597585467, 1026959902, 1716861247, 1345257729, 201495094, 827135246, 522855190, 286065217, 992228123, 688327184, 773595954, 253333537, 555093266,
- 69355146, 739903506, 1331641128, 1747264611, 185534806, 875235079, 136914200, 851120916, 640162102, 589894688, 4026663428, 219287642, 2317423630, 436208384, 3221351679, 604022018, 1073755392,
- 119865344, 101123590, 656810531, 909391142, 842217015, 101979414, 587597319, 387323427, 842208790, 657929782, 640099878, 117842467, 370476550, 909259542, 859191079, 336926258, 17237766, 486741173,
- 959986452, 908729951, 1429815101, 788595046, 43136592, 1293225484, 706942513, 218251551, 607329041, 118100027, 472068649, 562735662, 252841238, 575049753, 436736516, 1597712428, 623141711,
- 252270184, 721880843, 690296884, 3138589704, 672740914, 689184806, 33686563, 337742576, 269618446, 196698, 32309018, 10814144, 3473444, 620757052, 117835271, 639771398, 875898407, 859191094,
- 336926258, 101058310, 370549539, 857085463, 926299698, 656811559, 102900518, 352716295, 842208790, 389219126, 587671331, 51688705, 943395869, 706633529, 960445750, 16868949, 2453033007, 353242114,
- 588656973, 37822250, 857411853, 168835876, 590489863, 1047539228, 2037982077, 69355043, 739903506, 1331641128, 1747264611, 185534806, 875235079, 136914200, 851120916, 640162102, 589894688,
- 16908804, 1734846363, 436208640, 3221351679, 604011778, 1090532608, 19712, 101058341, 572720647, 891692838, 909588020, 353776179, 101123604, 371401478, 370546454, 909521459, 640034615, 572728871,
- 101058310, 857085461, 839071282, 101979414, 891691555, 842217012, 101979414, 891691555, 3036755508, 337445652, 1597585467, 1026959902, 1716861247, 1345257729, 201495094, 827135246, 522855190,
- 286065217, 992228123, 688327184, 773595954, 454760116, 471602711, 454760158, 471602711, 302260806, 673978888, 1666146107, 1449665828, 118165257, 406072071, 336079141, 909294355, 539371545,
- 69413140, 1929445890, 471209755, 454497820, 471209755, 454497820, 134218240, 251788799, 486581506, 10240, 35524883, 638916375, 102900518, 1043805447, 875902210, 589506086, 926299701, 640034615,
- 859190325, 3155629874, 286262017, 339031086, 775238931, 84152337, 656741650, 2416780624, 219287321, 25829654, 563478225, 50464797, 16843294, 33758722, 3776978440, 470359586, 621810693, 219287642,
- 2317423630, 352322048, 386006527, 486581506, 10240, 35524883, 638916375, 102900518, 1043805447, 875902210, 589506086, 926299701, 859191079, 336926258, 3154577158, 286262017, 339031086, 775238931,
- 84152337, 656741650, 2323391824, 302847521, 26220815, 563478225, 50464797, 16843294, 33758722, 3776978440, 470359586, 621810693, 236200330, 1511002637, 4110352896, 738328063, 486581506, 9216,
- 35524883, 638916375, 102900518, 1043805447, 875902210, 589506086, 926299701, 588722983, 3156412199, 286262017, 339031086, 775238931, 84152337, 656741650, 1044522320, 2037982077, 4275110179,
- 136126869, 35521282, 503447809, 503841283, 505602336, 335879177, 1739051024, 4278386791, 33423354, 9503269, 2687005, 318767157, 386014737, 640029975, 117842467, 37631797, 640955701, 891495206,
- 657929782, 336926258, 639771398, 859190325, 336926258, 639771398, 3157668917, 286262017, 339031086, 775238931, 84152337, 656741650, 377890128, 370613019, 383654940, 370613019, 3506510876,
- 488740350, 503513608, 33620226, 134349598, 585179166, 85723422, 465309716, 471602711, 454760214, 471602711, 1775382, 4280287234, 49807852, 2293976, 318767155, 656811575, 386014775, 369563447,
- 353769238, 587597332, 891692578, 859190836, 641144626, 571934503, 370414854, 926036758, 875902518, 2289837607, 573192216, 270675493, 696455823, 1061294891, 1682066033, 1181498680, 704786746,
- 1098353720, 725755463, 555687984, 637677095, 371463746, 421401888, 1075725838, 1814050088, 1199527031, 1246128956, 35209330, 1413755739, 1833326687, 1713315901, 925916478, 100663808, 1006829055,
- 956334082, 20736, 640946437, 101065251, 370414869, 353834774, 572728870, 926222086, 892666430, 589702708, 909522211, 924129079, 842217014, 35525909, 638916375, 102900518, 101069571, 656810531,
- 572728870, 859185927, 387323442, 909259542, 842897921, 69614366, 808259856, 873994292, 269561136, 353502468, 626009893, 588270601, 50439964, 623448336, 520948515, 1057168663, 387780906, 571154715,
- 1410735379, 454955789, 437588255, 974913795, 388701253, 136192212, 35521282, 503447809, 503841283, 505602336, 335879177, 1112998928, 3249408782, 34086432, 16915971, 729874945, 235538750, 73673996,
- 370085388, 536871680, 33746175, 251700482, 671096064, 838926336, 336926230, 572720646, 875898406, 571946550, 370414854, 909259542, 640037941, 640034615, 859190325, 18290482, 1013597463, 1095595844,
- 1866413922, 692470327, 1178480970, 2416855081, 219287321, 25829654, 1147747285, 1010988107, 1900758635, 1516183872, 1681681223, 1030440023, 319773254, 554962445, 196746, 49086240, 10813954,
- 1900559, 16777256, 353769010, 587597332, 891692578, 389428788, 336922146, 842208790, 640955702, 909584166, 353776179, 117900820, 1782912769, 1299661884, 1060594241, 1178744687, 1043417641,
- 2168990022, 219554186, 2417561362, 1765528833, 1114917700, 1262906172, 1596014705, 1013663578, 1799640932, 562710077, 302845460, 50354704, 3976142848, 2768372226, 486543104, 9216, 370553345,
- 101061653, 640033315, 909521973, 352723479, 857085460, 875902514, 858203686, 120005399, 1159135523, 2000960618, 929186125, 1110929215, 826943814, 1210664510, 595410504, 19102073, 1147747285,
- 1010988107, 1900758635, 1516183872, 1681681223, 1030440023, 1734846449, 536871680, 33746175, 251691010, 889199872, 838926336, 336926230, 572720646, 875898406, 571946550, 370414854, 909259542,
- 640037941, 101069623, 656810531, 572728870, 859185927, 387323442, 909259542, 1782912769, 1299661884, 1060594241, 1178744687, 1043417641, 1615341894, 708772637, 454499601, 320998177, 223614493,
- 521870867, 18486545, 1147747285, 1010988107, 1900758635, 1516183872, 1681681223, 1030440023, 155069388, 755764746, 235668580, 67114511, 3976142848, 2097283586, 486543104, 889202944, 838926336,
- 336926230, 572720646, 875898406, 571946550, 370414854, 909259542, 640037941, 353776167, 572720660, 909391142, 353776179, 572720660, 909391142, 1782912769, 1299661884, 1060594241, 1178744687,
- 1043417641, 2353539398, 387652374, 3726384150, 387652374, 18619414, 1147747285, 1010988107, 1900758635, 1516183872, 1681681223, 1030440023, 370613193, 387324956, 370613019, 387324956, 196635,
- 34209843, 555, 983043, 922746907, 51716405, 336926258, 639771398, 322319413, 336926258, 639771398, 859190325, 402388993, 370680611, 387392291, 370680611, 954802979, 605487416, 589436695,
- 4263712535, 387392638, 387392290, 196643, 48889616, 14287122, 2293785, 855638060, 891692599, 859190836, 924259890, 370542359, 101061653, 656810531, 369557767, 909259542, 86389813, 572728887,
- 370414854, 353977104, 776565312, 457057606, 1142365503, 1143950453, 1744911909, 675093230, 4262086972, 1261498102, 1074415424, 1261192486, 504971634, 641538364, 1967795268, 1008671299, 736648705,
- 559047975, 1256759357, 958551646, 301990400, 1157821695, 906011906, 16640, 370413825, 353834774, 572728870, 909510406, 587597621, 640034594, 640955701, 891495206, 389494326, 370611217, 909586995,
- 640955701, 891495206, 657929782, 891692583, 842217012, 4144043799, 688984068, 202056485, 33695265, 1413753923, 84610337, 656741650, 352920912, 708392473, 353502501, 626009893, 253333648, 555093266,
- 4275110282, 136192149, 35521282, 553779457, 658380325, 876024621, 152969896, 269747484, 1138359812, 623517208, 505586468, 335879177, 274343184, 336465170, 33589793, 4110356992, 2768389378,
- 1090532864, 285278208, 387323412, 640029975, 117842467, 120927798, 656548614, 892675622, 589702708, 909522211, 336664375, 842208791, 892679735, 589702708, 909522211, 909583671, 353776179,
- 117900820, 268760833, 589637905, 639699979, 742588930, 220288068, 353502475, 626009893, 907613449, 86321721, 656741650, 3892192592, 219554186, 2417561362, 2516504833, 34086432, 16915971, 622920193,
- 757546518, 2821994259, 470359586, 68162565, 407099902, 606415390, 152969891, 269747484, 337742373, 269618446, 131162, 49610514, 10814021, 3997750, 336658688, 387388950, 589702677, 906429986,
- 101135670, 640098851, 875902246, 589506086, 926299701, 387191063, 926036758, 875902262, 589506086, 926299701, 588722983, 19072807, 286262519, 186852649, 36053260, 1143751426, 185409876, 622137861,
- 153440295, 959846677, 302327082, 1344742677, 2101272357, 595163427, 2516504833, 34086432, 16915971, 622920193, 757546518, 2821994259, 470359586, 68162565, 407099902, 606415390, 152969891,
- 269747484, 1734846416, 301990656, 1157821695, 906001666, 1308639744, 285278208, 387323412, 640029975, 117842467, 120927798, 656548614, 892675622, 589702708, 909522211, 336664375, 842208791,
- 892679735, 589702708, 909522211, 372385079, 587600917, 875898402, 372388662, 587600917, 875898402, 83296566, 623448336, 554437411, 1124205094, 559170604, 302320397, 1344742677, 420808997,
- 623524150, 622137861, 4263858215, 454760157, 471602711, 454760158, 471602711, 2516504833, 34086432, 16915971, 622920193, 757546518, 2821994259, 470359586, 68162565, 407099902, 606415390, 152969891,
- 269747484, 370613160, 387324956, 370613019, 387324956, 131099, 48627212, 10813984, 4456505, 907224320, 656880693, 857085493, 355939890, 117835271, 587597315, 859252514, 909259542, 36583223,
- 640025383, 372582183, 909259542, 101127479, 387388437, 922949142, 372388662, 117838869, 1999175943, 689580550, 688786729, 588454952, 1176292126, 404364338, 488184333, 152508472, 1829638671,
- 303240715, 286339378, 556151090, 353255433, 388008539, 437129741, 604067472, 51776271, 33627138, 35389698, 4265882370, 255476012, 1078138699, 740759869, 436601122, 469893398, 16908801, 369164828,
- 631773202, 2324103468, 219026465, 5902354, 4278124290, 35652327, 3145942, 117440574, 889339447, 589706257, 37631267, 923866935, 842217014, 336926230, 117900806, 639771398, 35525927, 638916375,
- 102900518, 370479879, 909259542, 589706293, 33949474, 68096558, 674762251, 152447285, 591598647, 355884088, 526652964, 573906739, 286262017, 339031086, 2805216532, 1227570463, 1296519764, 66785836,
- 555550722, 303504387, 218760732, 2751334408, 907547704, 1243822172, 373821500, 566038027, 50464797, 16843294, 3494576642, 1483152160, 406347089, 201327360, 537060862, 956333314, 1358972160,
- 321191936, 657732918, 370554151, 926298675, 101058325, 101057287, 925311523, 842208819, 775370550, 637740802, 891758374, 842208790, 118830902, 387192070, 51779095, 336926258, 639771398, 859190325,
- 336926258, 639771398, 20329525, 705066793, 220801306, 472393998, 3407749907, 473056796, 437065754, 406330649, 302975255, 369847566, 825365011, 825364753, 1074340134, 375264526, 370613019,
- 383654940, 370613019, 22420508, 369823524, 18612739, 469828098, 1144193538, 977349886, 1125600015, 655965504, 100737580, 33625626, 33685788, 16915457, 2820149782, 167914533, 471209755, 454497820,
- 471209755, 454497820, 251659008, 4093836799, 805320195, 922759936, 318832640, 387383838, 589702677, 889652770, 875902519, 556214054, 352716295, 387388948, 589702677, 889652770, 322385463,
- 909588022, 855848758, 891369219, 4070048033, 219354642, 288635426, 792608016, 772671273, 270328062, 622466579, 235746615, 589640492, 470659603, 202769676, 3011444104, 939641086, 3372071938,
- 34679337, 16915971, 52298241, 369627395, 641954594, 202115897, 35521282, 503447809, 19792643, 457252245, 4263392524, 3391750481, 196661, 32833312, 5178071, 3473448, 620757049, 572720647, 909391142,
- 640038711, 101065251, 891750151, 842217015, 504698134, 353834754, 589440551, 923207202, 101123637, 370414854, 909521459, 557130003, 192693249, 1531067423, 1057121126, 286922567, 890899723,
- 1196900664, 218825473, 303633703, 622791178, 371750149, 337587227, 4267781938, 1379402184, 977274966, 303254338, 386350148, 1090985752, 1851335200, 118954679, 18743810, 2130837762, 236392836,
- 790699057, 2986419478, 196661, 50200335, 8324084, 3342384, 16777285, 386014739, 640029975, 117842467, 892745525, 656877108, 101058337, 387322901, 640029975, 117842467, 926299957, 926299667,
- 53950006, 855835443, 842208790, 104019766, 587597574, 640034594, 317888513, 571282198, 269562938, 690961981, 4264431111, 319823072, 925178390, 739118389, 321070387, 203165106, 2282493445,
- 511082237, 791559682, 35521342, 1311181834, 134882644, 3372071938, 34679337, 16915971, 52298241, 369627395, 641954594, 202115897, 35521282, 503447809, 19792643, 457252245, 4263392524, 19530065,
- 926362440, 338174251, 605308737, 536871680, 3607229695, 671127554, 1191195904, 119865344, 639771398, 926299189, 589702711, 117835298, 926230279, 372388662, 35525909, 655693591, 572727846,
- 892798726, 101058310, 857084949, 53884466, 857085491, 859256370, 101123590, 640098851, 2084831526, 1111236363, 40068699, 437733183, 437062417, 1463892021, 184746311, 420816653, 520751634,
- 678757669, 522984214, 3358536212, 775815710, 503529007, 655100418, 170218574, 139874824, 1262631488, 1011094035, 521672455, 572539143, 448228953, 33687319, 16908574, 293895938, 472976919,
- 622210849, 925577218, 673262391, 340214036, 131108, 57671439, 12321290, 4522050, 638919936, 102900514, 857084949, 102184754, 639771398, 590820405, 889652770, 875902519, 556214054, 352716295,
- 387388948, 589702677, 889652770, 322385463, 909588022, 322123574, 622264862, 4093772595, 620891655, 571480112, 874647592, 841292826, 1077612056, 235350319, 484507182, 437654288, 221591333,
- 624110606, 229774115, 369429532, 317857804, 4262269718, 461307166, 438501662, 354686993, 455416095, 33628719, 285410078, 1931613704, 188294723, 50465804, 16843294, 50535938, 496304430, 889985857,
- 701037854, 4009890090, 33565185, 1878990848, 3573619714, 1157642240, 354746368, 101058338, 857084949, 102184754, 639771398, 590820405, 923207202, 572720647, 909391142, 640038711, 101065251,
- 891750151, 842217015, 504698134, 891754242, 101058310, 857084949, 20330034, 218568663, 571480082, 874647592, 841292826, 606080014, 520846341, 1717256764, 1195311715, 185670167, 943004173, 21452609,
- 1812794115, 454436981, 840179500, 69081903, 286334983, 521479192, 790308121, 1426194722, 977274966, 303254338, 386350148, 1090985752, 1851335200, 118954679, 293887746, 472976919, 622210849,
- 369099264, 2650991871, 536906755, 11008, 587597605, 891692578, 859191092, 101062450, 875897621, 572728870, 336922118, 842208790, 909574455, 353776179, 117900820, 1763483138, 1672574330, 1770285486,
- 520686206, 1446075195, 2454800257, 4267536994, 371296945, 437129741, 909268112, 3463226203, 824786021, 340272705, 2303465252, 1368679005, 2323841596, 219026465, 5902354, 4279894018, 45875692,
- 2031781, 16777258, 640034595, 352723491, 842208788, 235345719, 639771394, 926168358, 389165878, 925304326, 372388662, 117838869, 479133959, 574557447, 1399146819, 352991026, 440151557, 1798989891,
- 976898650, 2326988551, 302847521, 26220815, 420756791, 2002997335, 119541533, 1748699920, 960726851, 2688359203, 236200330, 1511002637, 369099264, 2650991871, 100699139, 9984, 588722945, 19072807,
- 572720647, 875898406, 842217015, 352716311, 640955683, 102900518, 370414854, 926036758, 2101248257, 595163427, 1763482113, 1672574330, 1770285486, 520686206, 1446075195, 2454800257, 56455778,
- 1734846348, 909275133, 3463226203, 824786021, 340272705, 2303465252, 1368679005, 131132, 32309018, 10814109, 2490374, 389223168, 587671331, 640099077, 102900518, 857084949, 118961970, 572719630,
- 875898406, 842217015, 3758491159, 2032368958, 738272121, 1057818396, 1699300130, 171389523, 1009648917, 979911450, 977951339, 34015034, 1734846373, 420756935, 2002997335, 119541533, 1748699920,
- 960726851, 4004643, 4279631874, 60687084, 720996, 16777260, 336926258, 639771398, 20329525, 572720647, 875898406, 842217015, 352716311, 640955683, 102900518, 370414854, 926036758, 454468865,
- 471209755, 470810908, 2977266281, 2221518435, 151682665, 828062495, 1363640662, 1567777426, 387671043, 370940950, 4043053847, 2740663858, 1013304940, 641806633, 388240456, 1650297164, 3953044,
- 4279894018, 43844076, 2031741, 16777259, 640034595, 352723491, 842208788, 235345719, 639771394, 926168358, 389165878, 839058950, 101979414, 891691555, 2399221300, 1057818396, 1699300130, 171389523,
- 1009648917, 979911450, 977951339, 2282161978, 387652374, 18619414, 420756791, 2002997335, 119541533, 1748699920, 960726851, 20781859, 370613027, 387324956, 131099, 49086230, 9175966, 2555936,
- 101131520, 640033315, 909587509, 102183475, 891491590, 589702708, 352716322, 857085460, 922957618, 656607027, 480117299, 2977266281, 2221518435, 151682665, 828062495, 1363640662, 1567777426,
- 2099411702, 1411611966, 2740663858, 1013304940, 641806633, 388240456, 1650297164, 37507476, 2812766151, 436208128, 2718035199, 520135938, 9728, 640099073, 102900518, 857084949, 118961970,
- 572719630, 875898406, 842217015, 654706199, 587674423, 2399220519, 1057818396, 1699300130, 171389523, 1009648917, 979911450, 977951339, 2298939194, 1048388218, 922821501, 1461261373, 494363472,
- 268902415, 1130904331, 590955399, 1743011099, 50374567, 4261352960, 2349068034, 973088256, 16640, 892745527, 640037905, 372582183, 909259542, 858928695, 353769010, 101123604, 639771171, 589440551,
- 319227426, 842208785, 909588022, 640103477, 640034598, 923148835, 587674423, 523842343, 404031001, 626674984, 220937251, 2640971283, 1731608150, 554502335, 270011431, 2537241875, 1379485217,
- 1180966464, 521215246, 891697261, 2099411557, 337870142, 19795216, 186919386, 18744066, 16843010, 1348307532, 23475609, 33620225, 2919073538, 404557064, 1200990802, 235344910, 1738277650, 50374567,
- 4110361344, 3640829186, 1073753088, 19712, 640955649, 1043669795, 286734082, 387383838, 656549397, 572727846, 121046790, 572720646, 875898407, 909588278, 387330611, 656815157, 102900518, 370545685,
- 926298675, 118686270, 926299687, 389481022, 2617312774, 674762251, 152447285, 286262017, 85659694, 168171023, 1862607393, 1611668484, 724781875, 438773080, 252848691, 1296251702, 590103591,
- 101127492, 220763394, 386146848, 202380826, 3036755479, 470947767, 135072262, 563674376, 50464797, 16843038, 1566310913, 1059718403, 375799931, 3943502638, 169019009, 1011964709, 590034268,
- 19010572, 889787973, 134690143, 990643463, 131166, 50200334, 11797231, 4194346, 909588224, 891499829, 640955699, 891758374, 842208790, 859256374, 353769010, 117835284, 572662534, 640033574,
- 117842467, 355668243, 370544931, 909521459, 875902519, 589702695, 523830818, 107176729, 1328027669, 940908887, 1746474555, 1160206236, 110387759, 471406090, 991104564, 3099105082, 992161811,
- 1696480850, 1299718751, 269759782, 620441101, 186919355, 18744066, 16843010, 1079806284, 1142974076, 16843009, 4270260738, 3623757050, 487326724, 2812892697, 52107591, 587203072, 1124267263,
- 872470018, 18432, 859120385, 589706293, 37631267, 857020215, 504439573, 353834754, 640098854, 102900514, 101136135, 656548614, 909391142, 859191095, 353834546, 656815157, 102900518, 370545685,
- 926298675, 2617311806, 235639185, 691349560, 1397950742, 286262017, 85659694, 168171023, 1862607393, 1611668484, 724781875, 438773080, 252848691, 1296251702, 590103591, 101127492, 606798338,
- 470947613, 135072262, 4263804680, 136126779, 18744066, 33620225, 84106588, 1081818922, 321787494, 2178421517, 621417222, 1547456859, 203631413, 33563156, 4261352960, 906181634, 1627413760,
- 926351360, 288686654, 656811572, 370554151, 926298675, 842215990, 352720662, 640955683, 589702695, 117835298, 857085457, 909588018, 859256630, 336922118, 656611094, 589702695, 285672994, 842208790,
- 926299958, 859256374, 102041094, 639771398, 589440551, 17237538, 572601633, 102045732, 806819079, 287263815, 840839491, 607462163, 302588688, 573067287, 437263401, 825369648, 16974861, 33627653,
- 85852418, 942804232, 370421285, 1749624612, 34278923, 119735301, 440943881, 406409750, 890637346, 4272685361, 456655304, 621478403, 700514600, 50400037, 16908574, 33620225, 289495104, 134611981,
- 4261675777, 84017653, 118294022, 255078708, 993144080, 17106713, 99155458, 101058307, 421463851, 19681575, 16843010, 67305985, 196661, 32309018, 5178048, 3473444, 620757049, 117835271, 639771398,
- 875898407, 859191094, 336926258, 101058310, 370549539, 857085463, 926299698, 656811559, 102900518, 352716295, 842208790, 891360054, 347406625, 991173891, 509557048, 1060976170, 23483705, 911224577,
- 235668114, 372329749, 1092561443, 454102274, 272311347, 841549578, 1261313059, 939641086, 302260806, 673978888, 1666146107, 1449665828, 118165257, 406072071, 336079141, 909294355, 539371545,
- 69413140, 268501506, 131125, 50200342, 8323900, 7274589, 1043805952, 873542914, 656877094, 857085493, 909588018, 372388658, 588580375, 656815157, 572728870, 285672966, 842208790, 909522742,
- 104019767, 370414854, 656876311, 572728870, 370214662, 909259542, 909588023, 104019766, 101061894, 656810531, 572727846, 856884998, 842208790, 104019766, 587597574, 640034594, 353903650, 387254022,
- 525092656, 506544913, 891491122, 153292836, 676337426, 270280994, 841232410, 50597169, 18744577, 503382530, 839714821, 338568504, 1227301910, 185469800, 587465986, 1212483847, 961680922, 369893912,
- 511914293, 791559938, 18743870, 1344605195, 134882644, 184681243, 3238078501, 17507625, 33627651, 16843009, 1096302594, 100928785, 67305736, 33682942, 218498565, 875639815, 841814031, 84351291,
- 3908960769, 101122821, 520563462, 743515929, 16843265, 50462977, 926362498, 338174251, 605308737, 436208384, 3221351679, 604018690, 1191195904, 119865344, 101123590, 656810531, 909391142,
- 842217015, 101979414, 587597319, 387323427, 842208790, 657929782, 640099878, 117842467, 370476550, 909259542, 370553603, 926298675, 117835315, 656548614, 3036751398, 337445652, 1597585467,
- 1026959902, 1716861247, 1345257729, 201495094, 827135246, 522855190, 286065217, 992228123, 688327184, 773595954, 1057103582, 37629742, 202047774, 626282533, 575014922, 436736516, 1597712428,
- 623141711, 252270184, 721880843, 690296884, 3138589704, 672740914, 689184806, 33686563, 925601281, 673262391, 340214036, 131108, 50200342, 6554428, 6881373, 1043805952, 873542914, 656877094,
- 857085493, 909588018, 372388658, 588580375, 656815157, 572728870, 285672966, 842208790, 909522742, 104019767, 370414854, 656876311, 572728870, 370214662, 909259542, 909588023, 104019766, 101061894,
- 656810531, 572727846, 838928134, 101979414, 891691555, 606221876, 117839128, 1194333973, 1125195596, 322051633, 270808355, 387057955, 690104400, 807014428, 221327908, 83952388, 33685790, 134553089,
- 624439821, 605426734, 191383847, 84019982, 151462660, 370821189, 572012882, 825562636, 454430977, 471209755, 33757980, 19408139, 186984897, 18744065, 16843010, 1480589825, 67965249, 50399238,
- 32898564, 101057794, 825493261, 756027188, 119094066, 4261544197, 117638632, 120260102, 1361516831, 16908588, 33620225, 387671811, 370940950, 50338583, 3976141312, 2097332225, 889201664, 16640,
- 101058341, 572720647, 891692838, 909588020, 353776179, 101123604, 371401478, 370546454, 909521459, 640034615, 572728871, 101058310, 857085461, 839071282, 101979414, 891691555, 3036755508,
- 337445652, 1597585467, 1026959902, 1716861247, 1345257729, 201495094, 827135246, 522855190, 286065217, 992228123, 688327184, 773595954, 454760016, 471602711, 302260806, 673978888, 1666146107,
- 1449665828, 118165257, 406072071, 336079141, 909294355, 539371545, 69413140, 1929445890, 471209755, 454497820, 369099008, 1661104127, 1811985410, 858062848, 102041094, 370414854, 389493299,
- 572720646, 926168358, 656810503, 572727846, 926222086, 288686654, 656811572, 370554151, 926298675, 842215990, 352720662, 640955683, 589702695, 117835298, 857085457, 909588018, 859256630, 336922118,
- 656611094, 589702695, 285672994, 842208790, 926299958, 419575350, 571016995, 571480105, 874647592, 790961178, 995104603, 369893912, 405025077, 352781845, 1279733783, 826478879, 588460574,
- 588260405, 1343689225, 472457768, 607132176, 67973426, 503644419, 16908801, 218629406, 774191154, 656676372, 235628617, 2751791627, 19681575, 403708963, 421467428, 556669733, 16843009, 52298241,
- 673516290, 623493377, 503513355, 16843265, 1073873153, 219234648, 17303044, 4127065091, 100991489, 872877318, 269431857, 423309869, 33621255, 50718974, 721815047, 33562375, 1878989312, 3573665025,
- 1224751104, 386203648, 572720646, 926168358, 572720646, 891692838, 909588020, 353776179, 101123604, 371401478, 370546454, 909521459, 101127991, 101058310, 336922119, 53621526, 640099878, 117842467,
- 370476550, 909259542, 571522305, 622598708, 320869156, 706633529, 960445750, 16868949, 2453033007, 353242114, 588656973, 336404266, 50462977, 406194958, 36577808, 857411853, 168835876, 590489863,
- 356789788, 455416095, 84222246, 1597712428, 623141711, 252270184, 721880843, 690296884, 169022472, 16908578, 671615746, 18354211, 422982259, 337651240, 33825577, 131074, 50200342, 9175868, 6553693,
- 1043805952, 873542914, 656877094, 857085493, 909588018, 372388658, 588580375, 656815157, 572728870, 285672966, 842208790, 909522742, 104019767, 370414854, 656876311, 572728870, 370214662,
- 909259542, 909588023, 104019766, 101061894, 656810531, 572727846, 922814214, 656607027, 405021235, 352781845, 1279733783, 826478879, 588460574, 588260405, 1343689225, 472457768, 607132176,
- 67973426, 503644419, 16908801, 218629406, 774191154, 656676372, 235628617, 67437067, 1158219555, 1377180232, 203561017, 20002070, 2099411472, 455310654, 621478403, 700514600, 50400037, 16908574,
- 33620225, 289495104, 134611981, 4261675777, 84017653, 118294022, 255078708, 993144080, 17106713, 99155458, 101058307, 421463851, 19681575, 16843010, 671285761, 10987367, 4279894019, 46137836,
- 2359461, 3932213, 101131520, 587597574, 640099874, 926299189, 372388662, 117838869, 589497862, 370611734, 909259542, 640104246, 589702950, 101123618, 370545926, 53883443, 587674423, 3036754727,
- 337445652, 1597585467, 1026959902, 1716861247, 1345257729, 201495094, 827135246, 522855190, 286065217, 992228123, 688327184, 773595954, 2099411537, 1176730942, 135398434, 992488474, 610488159,
- 156657701, 117902095, 622343211, 320079913, 422982331, 337651240, 33825577, 1731461378, 33597351, 3976140288, 2349062146, 1040188928, 855703552, 120005399, 875889955, 589702950, 336922146,
- 842208790, 909522742, 640955701, 372582183, 909259542, 101127991, 236262662, 639771394, 909391142, 372388662, 352720662, 2101253633, 595163427, 740780033, 2609728569, 845451855, 50530382,
- 777196558, 874125619, 119342125, 1264665604, 1655665956, 679592299, 339169091, 1739033603, 490070375, 2685537829, 1402628240, 335940883, 269640978, 18745089, 419496193, 403309322, 169218984,
- 1886167642, 302472357, 4804368, 4263510020, 35652325, 393381, 4784189, 318767193, 656611123, 587539207, 118756630, 572720646, 101066534, 352716295, 842216212, 101979414, 639771398, 909391142,
- 640038711, 926364725, 875898406, 859190839, 924259890, 102901015, 857084949, 875902514, 102892326, 352716295, 842208788, 875902518, 2101274918, 595163427, 190618369, 541728579, 50858502, 236127493,
- 1094033484, 1078753864, 185677665, 253633623, 1430337359, 622938143, 76422201, 892457470, 942617150, 825492798, 1361321484, 810825025, 2812609091, 461662055, 372329755, 50397466, 336594179,
- 927213322, 658137660, 773336390, 436940550, 1024726805, 1563904006, 320082481, 269222935, 1194998591, 1312764221, 100941822, 924989453, 725886790, 33564465, 3976140288, 2130958338, 1224750848,
- 889257984, 640099892, 352723491, 857085460, 909588018, 875902262, 891758374, 842208790, 118961974, 353699334, 572719630, 875898406, 842217014, 102176278, 372441365, 909259542, 101069623, 572720647,
- 36054567, 959195009, 1335594316, 1311925394, 235078408, 858673940, 758389273, 67575044, 608919876, 1801629557, 1126728129, 4262737743, 1057103481, 37629742, 202047774, 626282533, 67241994,
- 237313333, 1754308626, 219370394, 1695683590, 117510162, 16843038, 50993409, 329783306, 2723809814, 1554346092, 1326453255, 729481545, 556480311, 1195447336, 67118100, 3858636800, 2550276098,
- 1107310080, 1677742592, 587268096, 118756630, 572720646, 101066534, 352716295, 842216212, 101979414, 639771398, 909391142, 640038711, 926364725, 875898406, 859190839, 924259890, 102901015,
- 857084949, 875902514, 102892326, 352716295, 842208788, 875902518, 372441894, 909259542, 101069623, 572720647, 36054567, 1124817927, 102779423, 84084746, 1275990789, 1212233120, 1631603834,
- 1460343095, 1326390820, 525680951, 958734664, 4261711388, 1043673553, 1043869490, 204551173, 1095836702, 1127240757, 1040326378, 54406958, 201982494, 626282023, 2046887946, 827136795, 16849430,
- 268763907, 1143409172, 979516471, 405620263, 187631150, 337057050, 927467069, 336736605, 201594643, 976961296, 1060191559, 71302734, 574098694, 1143424567, 36122923, 926362534, 338174251,
- 605308737, 369099264, 3624070399, 184574979, 17152, 353776129, 572720660, 909391142, 640955667, 572728871, 370414854, 909259542, 892745271, 656815157, 370554151, 926298675, 101058327, 34477333,
- 640033315, 909521973, 370553395, 18155031, 454760115, 471602711, 959195109, 1335594316, 1311925394, 235078408, 858673940, 758389273, 67575044, 608919876, 1801629557, 1126728129, 51656527,
- 370613092, 387324956, 899743259, 302916893, 2590544032, 101520211, 308613652, 503775504, 16843009, 167971353, 370386968, 1822579210, 123512176, 1229918226, 536871936, 537060862, 184581378,
- 1308639744, 24064, 353776147, 572720660, 909391142, 353772289, 101058324, 656810531, 101123590, 856954118, 353776179, 587597332, 891692578, 926365236, 875898406, 640038711, 909587509, 372388662,
- 622278423, 336922146, 909259542, 52835381, 101123618, 370414854, 909521459, 4045812789, 387652374, 18619414, 1124817965, 102779423, 84084746, 1275990789, 1212233120, 1631603834, 1460343095,
- 1326390820, 525680951, 958734664, 4261711388, 1043673553, 1043869490, 204551173, 1095836702, 1127240757, 387677442, 370940950, 4261288727, 827136795, 16849430, 268763907, 1143409172, 979516471,
- 405620263, 187631150, 337057050, 927467069, 336736605, 201594643, 976961296, 1060191559, 71302734, 574098694, 1143424567, 2568491, 4262854658, 47710958, 3604677, 16777284, 656815157, 102900518,
- 370545685, 926298675, 892679734, 656877108, 857085493, 389494322, 352716295, 587337237, 891692578, 859190836, 387323442, 117511430, 926299687, 389481022, 2164393478, 1278815271, 2454690701,
- 139342436, 336462595, 422784595, 70071322, 1141114653, 1965312865, 3245040303, 1329801345, 2734560311, 572526119, 370808836, 924191504, 490013698, 2685537829, 1402628240, 335940883, 269640978,
- 18745089, 419496193, 403309322, 169218984, 1886167642, 302472357, 4232662800, 873010687, 134690143, 973800711, 262240, 48627232, 14680608, 4325430, 6226002, 371392768, 101127189, 639771398,
- 117835303, 336922118, 372388659, 101061653, 640033315, 926299189, 891692599, 641152820, 926168358, 842217014, 389486358, 352723493, 842208788, 640955702, 117842435, 336922118, 909259542, 640955702,
- 102184707, 34473734, 909518599, 190580482, 541728579, 50858502, 236127493, 1094033484, 1078753864, 185677665, 253633623, 1430337359, 622938143, 76422201, 892457470, 942617150, 825492798,
- 1361321484, 810825025, 237518659, 386212129, 202380826, 2046899735, 827136795, 16849430, 268763907, 1143409172, 979516471, 405620263, 187631150, 337057050, 927467069, 336736605, 201594643,
- 976961296, 1060191559, 71302734, 574098694, 1143424567, 36122923, 873010904, 134624863, 990643719, 131166, 66977558, 9175850, 6422534, 389218560, 587671331, 34473733, 35524871, 638916375,
- 102900518, 1043805447, 641021186, 572728098, 504694562, 353834754, 572728870, 926222086, 288686654, 656811572, 370554151, 926298675, 34473749, 370545927, 909259571, 640955703, 891758374, 842208790,
- 2046900022, 2032368958, 755114873, 102045488, 352715009, 1076637719, 742336295, 118822704, 3928169747, 18095139, 806819078, 656883756, 389033023, 352782101, 1076703255, 759178789, 102045488,
- 572722689, 237118442, 806819079, 639975469, 2349018432, 1332176807, 621478147, 675282473, 50400038, 16843294, 16981506, 3743950092, 685703682, 50400038, 16843294, 16981506, 19408140, 186984897,
- 18744065, 503382530, 638255363, 16888360, 699531521, 50400037, 33685790, 131073, 50200326, 9175868, 4194361, 1043805952, 873542914, 891495206, 389481022, 909522705, 353710643, 387383838, 589702677,
- 285672994, 572728884, 353699334, 387323412, 640029975, 117842467, 588722963, 102958887, 68096557, 674762251, 152447285, 472059980, 268632487, 589637905, 589237515, 991834685, 286262310, 406073389,
- 2184197144, 2032368958, 52110201, 538839042, 303498754, 218760732, 2902329352, 2919960130, 136192193, 35521282, 16908545, 474298908, 550770475, 50464798, 16843294, 2811167490, 33580903, 4261352960,
- 3020040451, 1728077056, 855703552, 504439573, 353834754, 572728870, 926222086, 892666430, 589505062, 352789026, 387383838, 589702677, 889652770, 889339447, 859120401, 640037941, 372582183,
- 909259542, 235345207, 555026178, 640037941, 372582183, 909259542, 235345207, 352651010, 858986006, 892810802, 1448527618, 387253761, 658516783, 808206119, 319231255, 602546973, 100733980,
- 741349141, 1059530560, 353841196, 123164423, 758126357, 1076241728, 353841197, 2415984902, 806819079, 639975469, 388967488, 4261479702, 572722705, 237118442, 4264895746, 187050120, 35521281,
- 503447809, 621543683, 33742632, 187050207, 35521281, 503447809, 621543683, 897057064, 186984724, 18744065, 503382530, 621478147, 689181737, 50400037, 33685790, 16981505, 1227433227, 16843113,
- 16804097, 4261348864, 3590470658, 16640, 859120403, 589706293, 37631267, 857020215, 924132117, 842217014, 35525909, 638916375, 102900518, 640946439, 101065251, 370414869, 353834774, 572728870,
- 926222086, 1479868990, 235621709, 691349560, 2543257878, 472059980, 268632487, 589637905, 589237515, 991834685, 286262310, 406073389, 758133784, 33820434, 387790106, 168172562, 2131232781,
- 239247413, 549563915, 50464798, 16843294, 974913794, 388701253, 136192212, 35521282, 503447809, 503841283, 131104, 33423106, 6751052, 3932197, 235340032, 504432386, 353834754, 572728870, 926222086,
- 288686654, 656811572, 370554151, 926298675, 101069607, 656810531, 572728870, 859185927, 370611762, 20329011, 353841211, 100729094, 741349141, 1059530560, 353841196, 387254023, 624962864, 204292134,
- 725549853, 471276816, 320998176, 307500573, 270477088, 2516720150, 621478147, 675282473, 50400293, 16843294, 16981506, 19408140, 186984897, 18744065, 3003187714, 168377899, 1680673806, 370086922,
- 3724476928, 654441983, 486572034, 13568, 35524883, 638916375, 102900518, 1043805447, 875902210, 589506086, 926299701, 101069623, 656810531, 572728870, 859185927, 387323442, 909259542, 268632508,
- 892612113, 892670740, 68161838, 622137861, 1462063143, 708772637, 454499601, 320998177, 206837277, 521870868, 18552080, 563478225, 50464797, 16843294, 33758722, 3776978440, 470359586, 2869957637,
- 168377899, 1680673806, 252578820, 131094, 33423117, 3539781, 2687013, 235340032, 504432386, 353834754, 572728870, 926222086, 288686654, 656811572, 370554151, 926298675, 557130039, 389036801,
- 16844309, 806819078, 656883756, 389033023, 352782101, 1076703255, 759178789, 29949450, 60162616, 690293505, 623394814, 503513356, 33620226, 201392926, 3238078501, 17507625, 33627651, 894238978,
- 4110352896, 738328063, 486559490, 8448, 35524883, 638916375, 102900518, 1043805447, 875902210, 589506086, 926299701, 557130039, 268632508, 892612113, 892670740, 68161838, 622137861, 2032488487,
- 939641086, 2516504833, 34086177, 16915971, 52298241, 538839042, 152969953, 269747484, 33568069, 4261352960, 2130918145, 922756352, 117506048, 285671950, 387383838, 589702677, 889652770, 889339447,
- 640037905, 372582183, 909259542, 372450615, 909259542, 101069623, 572720647, 19277351, 353841211, 100729094, 741349141, 1059530560, 353841196, 387254023, 624962864, 4264378406, 1040326369,
- 54406958, 201982494, 626282023, 2516715530, 621478147, 675282473, 50400038, 16843294, 16981506, 19408140, 186984897, 18744065, 3405840898, 725038891, 1091839778, 2364487, 4279566338, 36962813,
- 1900696, 318767151, 386014737, 640029975, 117842467, 37631797, 640955701, 891495206, 657929782, 857085491, 859256370, 101123590, 640098851, 50445350, 875434256, 890442805, 269561397, 353502468,
- 626009893, 1057103513, 37629742, 202047774, 626282533, 3506505738, 488740350, 503513608, 33620226, 134349598, 585179166, 85723422, 734203924, 556480311, 1195447336, 16786452, 1878988288,
- 3020050689, 14080, 235345153, 504432386, 353834754, 572727846, 370414854, 389493299, 572720646, 926168358, 117842467, 37631797, 640946485, 891758374, 842208790, 809173302, 17175831, 387253761,
- 135204144, 270018337, 571484194, 622598708, 1042623794, 353841196, 387254023, 624962864, 3020046374, 184615710, 1073621285, 17507880, 570564099, 605556765, 622403349, 19017499, 16981506, 19408140,
- 186984897, 18744065, 33554946, 1878988032, 2936163073, 1023422720, 354746368, 572727846, 370414854, 389493299, 572720646, 926168358, 572727846, 926222086, 892666430, 589702708, 909522211,
- 504436535, 839063298, 101979414, 891691555, 251737652, 369362692, 571480097, 874647592, 824515610, 319363353, 288241202, 302318608, 1344742677, 50399525, 357765392, 370549282, 505094689, 303506689,
- 521479192, 790308121, 33620257, 134349598, 585179166, 85723422, 4261679124, 136126869, 596705794, 555816469, 2168598, 4279631874, 54198781, 2424932, 16777265, 117575175, 386014737, 640029975,
- 117842467, 37631797, 640946485, 891758374, 842208790, 841430838, 101979414, 891691555, 989935156, 102045488, 352715009, 1076637719, 742336295, 118822704, 806819079, 639975469, 378613056, 370613019,
- 2516720668, 621478147, 675282473, 50400038, 16843294, 16981506, 19408140, 186984897, 18744065, 2952856066, 471209755, 454497820, 352321792, 251788799, 486593793, 286457856, 387383838, 589702677,
- 889652770, 889339447, 640037941, 909452067, 29112118, 772870147, 320091444, 288240949, 302318608, 1344742677, 4275110181, 136126869, 35521282, 503447809, 503841283, 505602336, 335879177, 131088,
- 37486370, 11797140, 4849701, 235340032, 504432386, 353834754, 572728870, 926222086, 288686654, 656811572, 370554151, 926298675, 34473733, 101978375, 34473734, 372704047, 892744243, 640037905,
- 372582183, 909259542, 809959735, 17175831, 387253761, 658517040, 808206119, 117904663, 758126357, 1076241728, 810352941, 17175831, 320412171, 118567219, 520815889, 119021092, 758126357, 1059464768,
- 60162605, 690293505, 640172030, 503513355, 33620226, 201392926, 3238078501, 17507625, 33627651, 52297986, 673581825, 1346190590, 655892028, 33620500, 823330380, 692716095, 50400037, 33685790,
- 262145, 31850005, 11535050, 2687005, 4980800, 504435456, 353834754, 572728870, 926222086, 892666430, 589702708, 909522211, 372385591, 587600917, 875898402, 370214198, 654771718, 842208790,
- 873542966, 589506086, 926299701, 353776167, 572720660, 909391142, 268632508, 892612113, 892670740, 68161838, 622137861, 623202343, 371335701, 19013910, 1429143882, 285674552, 86584326, 656741650,
- 371598672, 353837345, 3506512418, 488740350, 503513608, 33620226, 134349598, 585179166, 85723422, 601493524, 555816469, 3726710550, 1984634110, 19268165, 24933634, 152969806, 269747484, 370549211,
- 370549282, 4278321185, 20709361, 9175875, 2818084, 235340032, 336660226, 235341318, 922955522, 909259542, 640946485, 891758374, 842208790, 858208054, 120005399, 808911139, 17175831, 320412171,
- 118567219, 520815889, 119021092, 758126357, 1076241728, 2101260077, 595163427, 17012226, 4264109323, 1011956796, 338106398, 1275199746, 1060180742, 623462914, 503513355, 16908801, 1734846424,
- 3640590848, 268559870, 369140994, 7424, 102109459, 371656454, 909259542, 640946485, 891495206, 657929782, 656611123, 27206407, 204952880, 738595079, 353502505, 626009893, 595410497, 19102073,
- 1260191441, 637683062, 2088043009, 505564673, 335879177, 1739051024, 131175, 49217046, 11797199, 5308484, 504697600, 353834754, 572728870, 926222086, 288686654, 656811572, 370554151, 926298675,
- 34473749, 906040583, 372582198, 909259542, 101127479, 369165575, 353834774, 572728870, 318834438, 909518599, 922893879, 3624273431, 387253761, 658517040, 808206119, 117904663, 758126357,
- 1076241728, 353841197, 369164550, 637604364, 554568998, 656878113, 1241642750, 353049623, 151722524, 2768120094, 554575950, 437716002, 386666518, 3443851575, 17507880, 16915971, 52298241,
- 673516545, 623493377, 503513355, 16908801, 184615710, 30812198, 68684559, 33685787, 16915969, 3372150821, 33624598, 16843294, 4249813250, 873010615, 134690143, 973800711, 131168, 49217045,
- 14025253, 4063281, 1043805952, 873542914, 891495206, 389481022, 909522705, 571814711, 369559302, 370611990, 621221171, 370545685, 638916375, 102900518, 654776071, 1043805750, 102184706, 305009926,
- 235602959, 691349560, 491325718, 442773577, 226567214, 847125272, 4160643107, 739315716, 336999217, 684078389, 69345550, 269883927, 456595212, 503841283, 386269728, 168172562, 4261939213,
- 1142373175, 454303280, 437981029, 488059005, 505449212, 503513608, 33620226, 873010682, 134690143, 973800711, 4278255713, 33554678, 590336, 922746951, 386014741, 640029975, 572662562, 926222086,
- 288686654, 656811572, 370554151, 842150706, 118830902, 352780814, 657864247, 857085493, 355939890, 117900807, 387388951, 589440533, 654778914, 235078035, 572136974, 504632350, 253631264, 218366989,
- 572136975, 471077918, 236854050, 3305177870, 486607882, 403245341, 521936667, 237106886, 135533839, 4212922375, 471767798, 386007304, 16843009, 134283799, 1359027740, 17374238, 16848386, 34996481,
- 505153793, 269208480, 16847874, 34996481, 3937671937, 385941790, 16450050, 4279631874, 55182077, 3342476, 16777278, 117575175, 842208785, 926299958, 926365238, 117575219, 572720646, 572925734,
- 117842467, 892745525, 640037905, 372582183, 909259542, 909584183, 353776179, 117900820, 389036801, 553715221, 175660081, 16845321, 85986305, 1174603016, 1578506824, 135729222, 522529555, 387254041,
- 624962864, 2318221350, 219554186, 2417626642, 17012226, 4247332107, 134875382, 134295048, 1010053634, 33625383, 16843009, 219158274, 702153006, 50400037, 33685790, 562703617, 302845460, 33577488,
- 4261352704, 2349013249, 671096064, 926351360, 288686654, 589506100, 922893877, 35524887, 638916375, 102900518, 909579015, 353776179, 117900820, 252849685, 940444420, 371799336, 268632329,
- 892612113, 892670740, 371296804, 437129741, 33758096, 35659272, 470947590, 135072262, 563674376, 50464797, 16843294, 2330198530, 219026465, 5902354, 4262854658, 38404846, 3342516, 16777280,
- 117575175, 842208785, 926299958, 926365238, 117575219, 572720646, 572925734, 117842467, 892745525, 640037905, 372582183, 909259542, 654770999, 1043805750, 102184706, 809173254, 17175831,
- 2019307809, 17434890, 537657601, 50661381, 370821190, 386942558, 623579912, 352786719, 1076703255, 759178789, 537798469, 437781538, 369823766, 60162615, 690293505, 168359677, 19793928, 875692552,
- 18163516, 16843010, 269943297, 3657510413, 17507625, 33627651, 1341915394, 1597245717, 117966645, 1614416645, 352322048, 251784958, 486594050, 10752, 37631799, 640946485, 1043669795, 286734082,
- 387383838, 589702677, 386336290, 909518599, 922893879, 352716311, 68096558, 674762251, 152447285, 286262017, 339031086, 1094006035, 572526119, 370808836, 924191504, 134349595, 100802590, 102502935,
- 134745354, 488741117, 503513608, 33620226, 873010682, 134690143, 973800711, 131168, 50200342, 12059210, 4194355, 235340032, 370214658, 926298675, 909522742, 238237495, 101058306, 656810531,
- 572727846, 926222086, 873542966, 656877094, 857085493, 389494322, 909518599, 922893879, 17171991, 353841211, 824246534, 151681116, 16843018, 134553612, 1212547845, 1180571162, 319297296, 421471531,
- 806819079, 639975469, 677588288, 69345293, 269883927, 37230092, 184615830, 4143786277, 134744584, 34079022, 658256946, 16908565, 33620225, 772608023, 623499777, 503513355, 16908801, 873010899,
- 134690144, 973866247, 131168, 33423125, 14221949, 2752541, 1043805952, 873542914, 891495206, 389481022, 386014737, 640029975, 117842467, 908527379, 37631798, 101062455, 252849685, 940444420,
- 371799336, 268632329, 892612113, 892670740, 537733364, 437716002, 386666518, 33758006, 35659272, 470947590, 135072262, 563674376, 50464797, 16843294, 369426946, 895431945, 84346887, 6240780,
- 4279631874, 38404861, 3342516, 16777279, 117575175, 842208785, 926299958, 926365238, 117575219, 572720646, 572925734, 117842467, 892745525, 640037905, 372582183, 909259542, 372380471, 587600917,
- 875898402, 809173302, 17175831, 2019307809, 17434890, 537657601, 50661381, 370821190, 386942558, 623579912, 352786719, 1076703255, 759178789, 606345083, 589436440, 17012226, 4247332107, 134875382,
- 134295048, 1010053634, 33625383, 16843009, 219158274, 702153006, 50400037, 33685790, 618790401, 589501975, 2299671, 4280287234, 40239613, 1900758, 922746921, 889339447, 589706257, 37631267,
- 504436535, 353834754, 572728870, 838928134, 101979414, 891691555, 773862964, 184815378, 891828238, 17372713, 772870147, 320091444, 184628533, 405021719, 455287318, 503841283, 386269728, 168172562,
- 4245161997, 136126872, 35521282, 16908545, 370615448, 387392291, 65571, 50200326, 11797066, 318767163, 842208785, 926299958, 926365238, 117575219, 572720646, 572925734, 117842467, 892745525,
- 925304629, 640037941, 372582183, 909259542, 235345207, 924124930, 824301591, 151681116, 16843018, 117776396, 1212548101, 1180571162, 319297296, 421471531, 124981347, 758126357, 1076241728,
- 353841197, 277479686, 3590216193, 134744584, 50790702, 708522290, 16908566, 33620225, 772608023, 1176517825, 186984943, 18744065, 503382530, 621478147, 542422313, 4076798208, 838991359, 620811778,
- 890437632, 589506100, 922893877, 389484823, 35524871, 638916375, 102900518, 1043805447, 120927490, 235628583, 691349560, 258410774, 268632438, 892612113, 892670740, 68161838, 2248216678, 470947814,
- 135072262, 1072430600, 3606988832, 34086177, 16915971, 52298241, 538839042, 2113270, 4279304194, 53281772, 3801228, 922746949, 889339447, 640037905, 372582183, 924267030, 640946433, 891758374,
- 842208790, 118830902, 285671950, 370611732, 285288213, 387383838, 589702677, 17237538, 842217015, 101979414, 739313415, 101061912, 472651797, 907812896, 352772353, 842214424, 825561360, 85333804,
- 16843009, 19398234, 739710469, 252589365, 906049071, 219554186, 2417626642, 184681243, 3238078501, 34284585, 16850435, 2935816961, 606721793, 503513611, 16908801, 184681246, 3640469796, 117968132,
- 1275203589, 623390974, 503513611, 33620226, 562750466, 302845460, 33577488, 4261348864, 2768387074, 1140865280, 285540352, 572728884, 353699334, 387323412, 640029975, 117842467, 37631797,
- 640955701, 891495206, 389494326, 909522709, 353710643, 387383838, 589702677, 922945058, 372388662, 117838869, 1033502983, 641408562, 756092932, 404239408, 288174132, 302318608, 1344742677,
- 273418533, 27728931, 688984067, 218833701, 545976863, 236064023, 17010714, 474298908, 550770475, 50464798, 16843294, 33758722, 3776978440, 470359586, 68162565, 185483863, 505463214, 503513608,
- 16843010, 337742587, 269618446, 131162, 65994257, 11797037, 4653114, 1043805952, 873542914, 656877094, 840308277, 285292311, 656811572, 370554151, 926298675, 34473749, 370413831, 655693335,
- 35524865, 638916375, 102900518, 654771463, 1043805750, 102184706, 405541126, 352716309, 538717208, 20323360, 404031201, 271725356, 741422353, 17110551, 1510015233, 83961854, 892081942, 789515829,
- 659751222, 69345294, 269883928, 456594955, 621478403, 700514600, 50465572, 16843038, 28245251, 186919383, 18744066, 503382530, 604701187, 81329449, 84346893, 4266394128, 186984496, 35521282,
- 4194435329, 1597245717, 117966645, 1614416645, 100663808, 1006825214, 956355841, 17920, 640946437, 101065251, 370414869, 353834774, 572728870, 926222086, 892666430, 589702708, 909522211, 924129079,
- 842217014, 35525909, 638916375, 102900518, 908527367, 37631798, 101062455, 842897921, 69614366, 808259856, 873994292, 269561136, 353502468, 626009893, 588270601, 50439964, 623448336, 520948515,
- 554576085, 437716002, 386666518, 469828407, 723273018, 505467927, 503513608, 33620226, 134349598, 585179166, 85723422, 1459884052, 2919960130, 136192193, 35521282, 368836865, 895431689, 84346887,
- 6306315, 4279304194, 53281772, 3801228, 922746945, 889339447, 640037905, 372582183, 924267030, 640946433, 891758374, 842208790, 118830902, 285671950, 370611732, 285288213, 387383838, 589702677,
- 17237538, 587674423, 739324711, 101061912, 472651797, 907812896, 352772353, 842214424, 825561360, 85333804, 16843009, 19398234, 739710469, 252589365, 2399221295, 1048388218, 52110205, 673516290,
- 606716161, 503513611, 50397441, 3607211773, 34284585, 33627651, 52297986, 690227970, 218421501, 268764936, 821971970, 34284840, 16915971, 671285761, 10987367, 4278583298, 37487357, 3735717,
- 83886144, 589706257, 352716322, 370545685, 638916375, 102900518, 1043805447, 875902210, 589506086, 926299701, 909579543, 355611446, 386014741, 640029975, 50733603, 587674423, 2583769895, 991834685,
- 286262310, 406073389, 758133784, 84152337, 656741650, 1275667792, 2803639056, 286262017, 186852649, 2056855309, 2101247266, 469828387, 723273018, 505467927, 503513608, 33620226, 134349598,
- 585179166, 85723422, 1459884052, 2919960130, 136192193, 35521282, 1057095937, 10987367, 4279762946, 45023997, 786573, 318767174, 909518599, 922893879, 17171991, 589706257, 352716322, 370545685,
- 638916375, 102900518, 1043805447, 875902210, 589506086, 926299701, 909579543, 355611446, 370545685, 638916375, 102900518, 554575693, 437781537, 369823766, 1033437495, 641408562, 756092932,
- 404239408, 288174132, 302318608, 1344742677, 273418533, 78060579, 623448336, 537725731, 152417793, 120938292, 184878856, 368992314, 1161436161, 3558288156, 34086432, 16915971, 52298241, 538839042,
- 152969953, 269747484, 239228676, 549563915, 50464798, 16843294, 1191182592, 4177716734, 1107346690, 922812416, 909574718, 370618931, 370218262, 654771718, 842208790, 873542966, 589702695,
- 101123618, 336663814, 387388950, 589702677, 889652770, 889339447, 640037905, 909452067, 18298678, 505039881, 572332831, 606091892, 995766785, 101779212, 354756908, 1613637957, 69212449, 893194512,
- 1042227261, 252788277, 336725509, 995174707, 1112080905, 50926615, 1713124355, 1243217467, 637683063, 2088043009, 728288513, 455089178, 4263198228, 136192127, 35521282, 503447809, 503841283,
- 584122656, 35391774, 267283, 4261806081, 32440805, 3670229, 909579008, 355611446, 101062161, 370550535, 892744243, 589706257, 352716322, 370545685, 638916375, 102900518, 1043805447, 875902210,
- 589506086, 926299701, 273460247, 27728931, 205018415, 738595079, 506608937, 268707387, 875572497, 808720408, 68161837, 622137861, 153440295, 239237633, 3338579467, 38106699, 1963065638, 975176060,
- 388701253, 136192212, 35521282, 503447809, 503841283, 505602336, 335879177, 50332688, 3976140288, 906230786, 503320832, 8704, 370553345, 34477077, 36577827, 909521973, 352723479, 857085460,
- 875902514, 891369254, 1871839521, 1782339747, 2135708816, 2875143006, 1183152993, 2188727423, 3372098703, 3305256961, 1382652499, 893020813, 1867482209, 2519358629, 1503685515, 2929497255,
- 50345318, 3976142848, 1325531650, 486543104, 8448, 370553345, 101061653, 640033315, 909521973, 352723479, 857085460, 875902514, 557262374, 385950005, 1144810053, 1648446839, 930037559, 1244218946,
- 692469297, 3372120648, 3573626881, 1262774587, 1799111284, 1081166662, 1197104929, 1466186859, 1715301188, 196661, 49086230, 8324092, 1966097, 16777264, 353769010, 587337236, 889335330, 389428788,
- 336922146, 842208790, 640955702, 370553637, 926298675, 117835315, 656548614, 2449548838, 1012441967, 1280610410, 1597202047, 2239455659, 1968471878, 3992883074, 775815966, 503463471, 655035137,
- 170349135, 1405420040, 2370988442, 1630878314, 2775535492, 2341874268, 2807668843, 3836648596, 725038891, 1091840033, 2364487, 4280287235, 33686252, 983192, 3080221, 372375808, 101979414,
- 639771398, 909391142, 102897462, 370545685, 892744243, 656811572, 857085491, 859256370, 101123590, 640098851, 1159135526, 2000960618, 929186125, 1110929215, 826943814, 1210664510, 1057103557,
- 54406702, 201982494, 626282023, 3573614602, 1262774587, 1799111284, 1081166662, 1197104929, 1466186859, 3829230404, 725038891, 1091840033, 2364487, 4279631876, 66847468, 1114262, 2752542, 16777270,
- 353769010, 587337236, 889335330, 389428788, 336922146, 842208790, 640955702, 909522727, 353776179, 117900820, 909522739, 353776179, 117900820, 2741998081, 2422881368, 1585400916, 1638620979,
- 2135328123, 2407691604, 487489749, 286395660, 2155382550, 218897678, 2266370322, 2589181186, 1787646569, 2220963130, 1554345807, 1804310058, 2493995424, 2487660188, 236130831, 1645221388,
- 319950740, 269880334, 262242, 49086240, 11469314, 1900559, 3473449, 372375808, 101979414, 639771398, 909391142, 102897462, 370545685, 892744243, 656811572, 859190839, 336926258, 856098566,
- 859190839, 336926258, 17237766, 1013597463, 1095595844, 1866413922, 692470327, 1178480970, 2158708777, 218897678, 2266370322, 487489656, 286395660, 3573647126, 1262774587, 1799111284, 1081166662,
- 1197104929, 1466186859, 1178430276, 319950740, 269880334, 303010914, 369888787, 33579536, 3976140288, 3305292291, 1879071744, 858062848, 102041094, 639836934, 102900514, 587597319, 891692578,
- 859190836, 387323442, 926094870, 842217014, 101062422, 875897621, 640034598, 101065251, 370544903, 926298675, 926365238, 352716339, 588715540, 640034599, 117842467, 857085457, 909588018, 557200951,
- 656815121, 572728870, 370414854, 909259542, 53884471, 151462815, 857032006, 721952275, 942089816, 1554279452, 208710239, 286210874, 695733518, 891359292, 587728932, 1310134793, 455614758,
- 522918671, 67973682, 503644419, 16908801, 218629406, 706885170, 623121685, 235628102, 4261741067, 436404844, 2306419776, 592279363, 33755979, 760293028, 67174913, 1526990085, 2792254370, 50791773,
- 16843267, 570556673, 289484615, 134611981, 4261675777, 84017653, 118294022, 255078708, 993144080, 17106713, 99155458, 101058307, 18810667, 320937871, 2342262039, 324574565, 2167565, 4280287235,
- 18875372, 2949333, 4849721, 101131520, 587597574, 103228962, 639771398, 909391142, 372388662, 859190807, 336926258, 101058310, 370549539, 857085463, 20395570, 370414882, 909259542, 86389813,
- 640099892, 117842467, 369559046, 909259542, 51648515, 909972252, 774655283, 1715614799, 1215052858, 824921397, 1733701191, 1345257729, 201495094, 827201037, 4247532834, 1176994035, 1346452269,
- 218794497, 941635104, 34410257, 472134185, 69355057, 656082961, 1076310064, 1799899505, 740958780, 156722976, 117902095, 622343211, 18617129, 1867100260, 1834705727, 791128444, 387726104, 69939734,
- 33554946, 4261352960, 2349047042, 1493192192, 286457856, 387383838, 589702677, 889652770, 889339447, 640037905, 372582183, 842150678, 909587254, 372388658, 101127189, 370345734, 638916374,
- 102900518, 656811527, 656811559, 925312550, 842215958, 640955702, 654713379, 842217015, 101979414, 30934791, 806819078, 656883756, 389033023, 352716565, 1279666456, 420548639, 186461465,
- 1348820742, 3811192857, 588782346, 470353949, 219481887, 185140920, 101189897, 1476661002, 424563813, 562702639, 252841238, 2181206041, 640218877, 503513355, 33620226, 201392926, 3238078501,
- 34284585, 33627651, 1291911425, 288905545, 3640527636, 503450381, 33620226, 4145027851, 185338888, 17566217, 1161839953, 562714629, 319622676, 33577487, 4261352704, 2768401921, 905980672,
- 926351360, 892666430, 589702708, 909522211, 924129079, 842217014, 639829783, 352723491, 370545685, 638916375, 102900518, 909579015, 353776179, 117900820, 252849685, 353502468, 626009893, 756037641,
- 152247318, 623646485, 387187764, 306199860, 1479685141, 219554186, 2417626642, 134349595, 585179166, 85723422, 1728319508, 185996098, 775958136, 119349932, 35521282, 16908545, 337742589, 269618446,
- 131162, 49217046, 11797149, 5963854, 504435456, 353834754, 572728870, 926222086, 288686654, 656811572, 370554151, 909259315, 842413875, 353776179, 101058324, 370545415, 640029975, 117842467,
- 656877094, 640099878, 372713254, 909259570, 589706293, 118687266, 926299687, 389481022, 30934534, 806819078, 656883756, 389033023, 352716565, 1279666456, 420548639, 186461465, 1348820742,
- 3811192857, 588782346, 470353949, 219481887, 185140920, 101189897, 1476661002, 424563813, 237510959, 386146849, 202380826, 2181183255, 640218877, 503513355, 33620226, 201392926, 3238078501,
- 34284585, 33627651, 1291911425, 288905545, 3640527636, 503450381, 33620226, 4145027851, 185338888, 17566217, 1161839953, 360381445, 895431689, 84346887, 6306315, 4262789122, 24510958, 2818261,
- 922746936, 889339447, 640037941, 909452067, 353842998, 859190839, 587667250, 102900518, 370414869, 353834774, 572728870, 118949638, 926299687, 389481022, 773129734, 84152082, 656741650, 940123472,
- 471215376, 387254547, 70526252, 1026823956, 873796160, 237456690, 402924064, 185603610, 52115222, 538839042, 152969953, 269747484, 323118852, 779619094, 581709376, 50464541, 16843294, 152435202,
- 120938292, 184878856, 33579066, 4261352960, 2349047042, 1426083328, 286457856, 387383838, 589702677, 889652770, 889339447, 640037905, 372582183, 842150678, 909587254, 372388658, 101127189,
- 370345734, 638916374, 102900518, 656811527, 656811559, 925312550, 842215958, 640955702, 923148835, 587674423, 30946087, 806819078, 656883756, 389033023, 352716565, 1279666456, 420548639, 186461465,
- 1348820742, 3811192857, 588782346, 470353949, 219481887, 185140920, 101189897, 1476661002, 424563813, 578428207, 595410557, 4143809026, 17507880, 16915971, 52298241, 673516545, 606716161,
- 503513611, 16843265, 1497976065, 185864504, 185456894, 16915970, 453706241, 201914128, 168364812, 1162936588, 2617591104, 10987367, 4279566338, 41288189, 2818213, 922746930, 889339447, 640037941,
- 909452067, 353842998, 859190839, 587667250, 102900518, 370414869, 353834774, 572728870, 923993862, 656607027, 305009971, 302318607, 1344742677, 272107813, 320607789, 739710217, 335819813,
- 1077752855, 842274066, 2099411633, 455310654, 503841283, 505602336, 335879177, 1114047504, 2013992467, 2888712238, 34020642, 16915971, 1090650625, 10987367, 4279762946, 66519532, 3866764, 16777286,
- 640034595, 572728871, 370414854, 386014743, 336926230, 572720646, 889339431, 35526451, 909521459, 640103477, 640034598, 875898407, 842217014, 101062422, 859191079, 336926258, 17237766, 33956031,
- 1042880788, 1531598146, 253833513, 2286758705, 55794263, 136315139, 659107587, 640569653, 1228487956, 1110055502, 1311394421, 4077324092, 219554186, 2417626642, 372837890, 1360465178, 205011519,
- 118032645, 1211384084, 371605873, 1126577193, 672605205, 523840838, 168301585, 1227298587, 305816898, 2856134424, 236200330, 1511002637, 503316992, 2265050367, 855680258, 15872, 336933687,
- 909259542, 656815157, 640099878, 859190325, 102176306, 891488006, 572728884, 370414854, 386014743, 101979414, 639771398, 322319911, 842217015, 101979414, 506005255, 1144338246, 1295196702,
- 1466188820, 36190752, 1125908738, 808594995, 574041405, 1698241549, 675226178, 2320696582, 302847265, 2408585231, 875570473, 119610664, 554243851, 189613126, 741218062, 674177815, 203694630,
- 219222024, 1278291229, 504171307, 2325676345, 219026465, 5902099, 4279762946, 66519532, 393356, 318767170, 656611123, 587539207, 656811559, 102900518, 387322901, 370606622, 101979414, 656548614,
- 859111998, 855776791, 892745266, 640034612, 656811559, 909391142, 372388662, 4110812695, 2032368958, 1191256953, 335676960, 1111370009, 693848661, 823075121, 1468550443, 50549594, 50864129,
- 891767087, 338046545, 1313421629, 1967270426, 1011755594, 2349008647, 3613878183, 219813433, 977228055, 151325752, 1091831561, 1097943092, 875107878, 605373222, 759572503, 336666425, 387648008,
- 1698842919, 655888954, 131133, 32309022, 10814087, 3801139, 355677952, 842208788, 640955702, 656811559, 909391142, 387330611, 587662854, 589706293, 336922146, 35526422, 336926231, 572720646,
- 909518630, 588722963, 690161447, 892814878, 857873988, 1682183245, 674898007, 469828098, 841888579, 925711664, 958139682, 1059209829, 2365916712, 2032368958, 697246585, 674508837, 185016605,
- 1176570135, 235621700, 388771351, 640167715, 135013410, 487395600, 726413613, 958270731, 1739016706, 65639, 18874136, 12911351, 16777303, 640034595, 572728871, 370414854, 386014743, 336926230,
- 906430214, 353776179, 572720660, 372713254, 892482326, 572728884, 925304582, 572727814, 889339431, 35526451, 909521459, 640103477, 640034598, 875898407, 842217014, 101062422, 102809345, 689509378,
- 1247101502, 556869979, 2066428175, 218962028, 977415720, 237051413, 906828824, 285872662, 170264334, 1465255950, 536937219, 1227817736, 777073959, 960304166, 706367049, 709522754, 117914702,
- 372837890, 1360465178, 205011519, 118032645, 1563705620, 71112066, 757538854, 102697478, 370223877, 1493566467, 689317377, 356722228, 1177032484, 287258925, 453642260, 1112090391, 403847781,
- 16792871, 536813056, 3573647105, 19712, 859178775, 336926258, 639771398, 370554663, 875901491, 102900518, 590817031, 908535330, 355677494, 842208788, 640955702, 656811559, 909391142, 387330611,
- 587662854, 589706293, 336922146, 35526422, 336926231, 219600134, 1110321165, 555619642, 219944974, 152245814, 637996561, 675160588, 1176372486, 507786551, 340603682, 542598212, 33695802, 860036097,
- 1026568750, 220346157, 974216732, 656418308, 520750637, 288031751, 100926230, 504171352, 623457337, 489174064, 386598689, 1145446665, 386796365, 588721198, 572925999, 268962852, 756878609,
- 33577024, 3976140800, 2349070081, 1107311360, 587268096, 656811559, 102900518, 387322901, 370606622, 101979414, 656548614, 859111998, 855776791, 892745266, 640034612, 656811559, 909391142,
- 372388662, 654706199, 587674423, 3204526887, 335676960, 1111370009, 693848661, 823075121, 1468550443, 50549594, 50864129, 891767087, 338046545, 1313421629, 1967270426, 1011755594, 2058880775,
- 2101247266, 957219363, 386734614, 943341393, 151586060, 876680199, 641823048, 640952598, 388240707, 959268392, 135532831, 655825674, 979714633, 1025972242, 2812766190, 503316992, 2265050367,
- 855680258, 14848, 336933687, 909259542, 656815157, 640099878, 859190325, 102176306, 891488006, 572728884, 370414854, 386014743, 101979414, 639771398, 322319911, 587674423, 506016551, 1144338246,
- 1295196702, 1466188820, 36190752, 1125908738, 808594995, 574041405, 1698241549, 675226178, 2041316614, 2101247267, 623480611, 489174064, 386598689, 1145446665, 386796365, 588721198, 572925999,
- 268962852, 756878609, 187386929, 20520461, 2812766179, 301990144, 1392651775, 1308668930, 926351360, 288686654, 589768244, 117900806, 656815139, 857085463, 926036531, 352716343, 640034595,
- 101065511, 35524885, 638916375, 906437414, 353776179, 572720660, 372713254, 892482326, 572728884, 925304582, 2684814882, 118822704, 379257346, 520356368, 893649923, 211683657, 75836188, 17047299,
- 43718161, 352715010, 975712279, 218961697, 960704295, 237051413, 906894104, 285872662, 539494158, 52111161, 673581825, 706979585, 319619351, 725954895, 16843009, 826616578, 17634127, 4263913494,
- 203761753, 18744065, 637811970, 103622432, 84287242, 51777835, 39716356, 65537, 19201814, 7143999, 318767161, 892810503, 926295860, 352716311, 587675413, 857084945, 389494322, 117835271, 842216967,
- 101979414, 656810531, 857085495, 640955698, 117842467, 640038695, 1313628725, 203828996, 159974662, 253565568, 806163225, 370021636, 774376717, 504707650, 471338529, 303445517, 118362378, 19607335,
- 588579966, 254093894, 1126959895, 906372639, 539359998, 890309384, 989922820, 656418308, 520750637, 288032006, 100926230, 858915932, 301990400, 1392705023, 872451075, 15104, 37631799, 640946485,
- 101065511, 874710791, 370616102, 842216214, 104281906, 656610566, 589768230, 286590470, 387383838, 589702677, 319227426, 587674423, 815805223, 34018583, 269916930, 52364290, 1228227588, 470588937,
- 50627883, 285279263, 33725206, 387253761, 658517040, 2469150503, 1048388218, 52110205, 673581825, 706979585, 319619351, 725954895, 16843009, 826616578, 17634127, 4263913494, 203761753, 35521281,
- 50462977, 2812765992, 1140851200, 3221353727, 520155138, 11264, 926222099, 908538933, 101062455, 121050389, 370413859, 926298675, 101058327, 891691555, 908527379, 37631798, 101062455, 72240272,
- 101459503, 2148108549, 420420890, 70257939, 876220704, 554575804, 437781537, 369823766, 75366711, 709239573, 186060581, 639583275, 4210963974, 185081893, 117781777, 3137419059, 1580534037,
- 117966645, 1614416645, 301990144, 1392705023, 1006679042, 587268096, 875901749, 102967078, 587663110, 388441652, 858986006, 926364210, 588580358, 656811559, 352716323, 588591893, 386014741,
- 640029975, 117842467, 37631797, 1812136245, 2600600172, 67244054, 1141113631, 2651408693, 2234194956, 69141252, 2601914625, 1835860482, 387253761, 658517040, 808206119, 17241367, 597763162,
- 218175274, 1160859411, 16843051, 1160446465, 219369265, 640161281, 685909153, 50400293, 16843294, 16981506, 2631179, 4279369729, 37683700, 2556013, 355668736, 370414883, 926298675, 101058327,
- 891691555, 859120437, 926222133, 908538933, 101062455, 121050389, 2139076387, 437197850, 70192147, 876155169, 1313624401, 203828996, 159909126, 604373375, 136324458, 87363851, 2218210055,
- 352614436, 623527459, 738924303, 103161157, 131126, 49086220, 6751223, 4915221, 104005888, 639771398, 589702695, 908265250, 387330611, 389165846, 117575175, 101127185, 640098851, 640946485,
- 891758374, 842208790, 118830902, 285671950, 842208788, 873542966, 656877094, 857085493, 37172786, 1057168922, 371003690, 571154716, 1410735379, 556146962, 753674767, 17110551, 2543272517,
- 352794684, 1076703255, 759178789, 102045488, 1835556609, 404031080, 271660076, 53556497, 155069287, 755764746, 252971620, 184681375, 3757975844, 1044530852, 1661039417, 17507625, 33627651,
- 52297986, 673581825, 1465952510, 1073834597, 34284585, 33627651, 33554690, 4110356992, 2147632386, 1308636672, 285278208, 387323412, 640029975, 117842467, 120927798, 656548614, 892675622,
- 589702708, 909522211, 336664375, 842208791, 892679735, 589702708, 909522211, 104015671, 639771398, 589702695, 908265250, 370553395, 842208791, 83296566, 623448336, 554437411, 1124205094, 559170604,
- 302320397, 1344742677, 420808997, 623524150, 622137861, 1512394791, 708772893, 471276816, 287509281, 223679517, 521870868, 18486544, 546701009, 50464798, 16843294, 371532034, 321726270, 581448759,
- 85723422, 4261679124, 504906713, 2737055018, 470359586, 2869957637, 168377899, 1680673806, 252578820, 131094, 49086220, 3539959, 3735605, 235340032, 336660226, 572720647, 288695847, 656811572,
- 370554151, 926298675, 34473749, 370413831, 892744243, 640037905, 372582183, 909259542, 891365175, 754385441, 17110551, 2543272517, 352794684, 1076703255, 759178789, 102045488, 1835556609,
- 404031080, 271660076, 3593549073, 922864126, 33789442, 4264109067, 1111925983, 24328510, 186984803, 18744065, 503382530, 638255363, 1621687848, 23749975, 186919232, 18744066, 1291911682, 131125,
- 49610514, 5177925, 3801142, 336658688, 387388950, 589702677, 906429986, 101135670, 640098851, 875902246, 589506086, 926299701, 387191063, 926036758, 875902262, 589506086, 926299701, 557130023,
- 268760833, 589637905, 639699979, 742588930, 220288068, 353502475, 626009893, 907613449, 86321721, 656741650, 4265026896, 20447688, 546701009, 50464798, 16843294, 371532034, 321726270, 581448759,
- 85723422, 4261679124, 504906713, 2737055018, 470359586, 1158681605, 131125, 49086220, 8324087, 4653073, 372445952, 909259542, 101069623, 572720647, 86386215, 117575175, 101127185, 640098851,
- 640946485, 891758374, 842208790, 118830902, 285671950, 842208788, 873542966, 656877094, 857085493, 4281808434, 775881246, 503463471, 655035137, 170349135, 754319624, 17110551, 2543272517,
- 352794684, 1076703255, 759178789, 102045488, 1835556609, 404031080, 271660076, 53556497, 926362495, 338174251, 605308737, 184681418, 3757975844, 1044530852, 1661039417, 17507625, 33627651,
- 52297986, 673581825, 1465952510, 1073834597, 34284585, 33627651, 33554690, 4110356992, 2550285570, 1207963904, 856883200, 842208790, 104019766, 587597574, 640034594, 370413829, 353834774,
- 572728870, 909510406, 587597621, 640034594, 640955701, 891495206, 389494326, 370611217, 909586995, 640955701, 891495206, 2419537462, 775881246, 503463471, 655035137, 170218575, 73728264, 623448336,
- 554437411, 1124205094, 559170604, 302320397, 1344742677, 420808997, 623524150, 622137861, 35999783, 926362520, 338174251, 605308737, 546700968, 50464798, 16843294, 371532034, 321726270, 581448759,
- 85723422, 4261679124, 504906713, 2737055018, 470359586, 1053701, 4278976515, 66519788, 3473583, 5046337, 235340032, 336660226, 572720647, 288695847, 656811572, 370554151, 926298675, 34473749,
- 370413831, 892744243, 640037905, 372582183, 909259542, 372385079, 587600917, 875898402, 102897462, 857084949, 875902514, 754385446, 17110551, 2543272517, 352794684, 1076703255, 759178789,
- 102045488, 1835556609, 404031080, 271660076, 4264637713, 976824750, 976890154, 572660778, 572660508, 33789442, 4264109067, 1111925983, 24328510, 186984803, 18744065, 503382530, 638255363,
- 1621687848, 23749975, 186919232, 18744066, 4211147266, 975841595, 975776570, 505225764, 488448803, 196643, 49610514, 13107781, 4325430, 16777294, 370545681, 638916375, 102900518, 892745223,
- 572720647, 891692583, 640037941, 909452067, 286734134, 857085716, 892745522, 640037941, 909452067, 841430838, 101979414, 891691555, 571946548, 370414854, 892744243, 4144047668, 688984068,
- 202056485, 33695265, 1413753923, 84610337, 656741650, 352920912, 708392473, 353502501, 626009893, 976824766, 993667626, 572726314, 572660764, 2516504833, 34086432, 16915971, 622920193, 757546518,
- 2821994259, 470359586, 68162565, 407099902, 606415390, 152969891, 269747484, 707345395, 690698810, 488776762, 488842014, 50340637, 3976137728, 2516842242, 1073755392, 19200, 34473729, 118755591,
- 656548614, 873542950, 656877094, 857085493, 355939890, 117575175, 857084945, 288699954, 656811572, 370554151, 926298675, 859191077, 336926258, 856098566, 842217015, 101979414, 4144105223, 85333804,
- 2537702657, 121126039, 758126357, 1076241728, 353841197, 1751056646, 352741485, 825502744, 825561360, 478166526, 286395675, 2155382550, 302848796, 42407441, 184681366, 3757975844, 1044530852,
- 1661039417, 17507625, 33627651, 52297986, 673581825, 1465952510, 1073834597, 34284585, 33627651, 2485977346, 202248993, 2489454614, 202248993, 6426646, 4279369731, 38077172, 3539119, 4980801,
- 336658688, 387388950, 589702677, 906429986, 101135670, 640098851, 875902246, 589506086, 926299701, 387191063, 926036758, 875902262, 589506086, 926299701, 859191077, 336926258, 856098566, 842217015,
- 101979414, 4144039687, 688984068, 202056485, 33695265, 1413753923, 84610337, 656741650, 352920912, 708392473, 353502501, 626009893, 478194430, 269618459, 2155382551, 302848796, 25630480, 546701009,
- 50464798, 16843294, 371532034, 321726270, 581448759, 85723422, 4261679124, 504906713, 2737055018, 470359586, 621810693, 236134804, 1645286668, 236134804, 1645286668, 201326848, 4144132095,
- 1208005634, 352387072, 117575175, 117575185, 370414854, 389493299, 572720646, 926168358, 572720646, 288695847, 656811572, 370554151, 926298675, 34473749, 370413831, 892744243, 640037905, 372582183,
- 909259542, 388822786, 33621270, 874982164, 673320984, 439624208, 522986780, 1016341822, 387254072, 624962864, 808271910, 17175831, 1752000607, 739775750, 286273844, 515113525, 604701187,
- 1272970793, 740114783, 605556772, 622403349, 136261147, 1933131272, 623469313, 503513355, 16908801, 184615710, 2835228710, 1785026400, 606683137, 503513611, 131585, 4279369729, 25363055, 4784341,
- 638919936, 102900514, 857084949, 102184754, 639771398, 590820405, 117842466, 120927798, 656548614, 892675622, 589702708, 909522211, 336664375, 842208791, 892679735, 589702708, 909522211, 336664375,
- 35067414, 34014277, 270016790, 571484194, 622598708, 201856050, 33693980, 1413753923, 84610337, 656741650, 352920912, 708392473, 353502501, 626009893, 286262281, 620830235, 605557271, 622403349,
- 19017499, 371532034, 321726270, 581448759, 85723422, 4261679124, 504906713, 2737055018, 470359586, 68162565, 505452030, 33554952, 4160686080, 2349062147, 1358956032, 855703552, 120005399,
- 774045987, 50538243, 587662854, 640099878, 637740838, 891758374, 387396118, 118830899, 336922118, 320018198, 859243070, 320274974, 641021459, 891758374, 858920470, 118830899, 100861702, 101058310,
- 2101271553, 595163427, 221413121, 202378513, 252620413, 67383815, 67568130, 370476919, 119477532, 712902970, 33689876, 521895012, 69208598, 2752187143, 335610244, 606742554, 1762198797, 2567446048,
- 16845320, 2810970884, 318596967, 723989033, 4266852641, 405480518, 151329040, 50466848, 50402843, 16843038, 16981507, 285675791, 20971017, 995312699, 538447903, 20184606, 201720809, 503513610,
- 503513601, 4246340355, 69410022, 33559300, 4194240000, 2768381955, 1241515520, 855703552, 120005399, 372447011, 1041438486, 909588226, 656880693, 857085493, 355939890, 117835271, 117575175,
- 587662854, 117575171, 637739783, 891758374, 842208790, 118830902, 387192070, 17055251, 595410564, 2518907257, 168625687, 168956019, 654782980, 237644322, 438970894, 1142364432, 169086466,
- 772213509, 118691208, 1714381317, 471144979, 286339891, 640168755, 471028740, 35855129, 1734846373, 438506537, 774430462, 311167771, 33692946, 33685788, 33692673, 60568099, 236861223, 1442911264,
- 168896557, 995099110, 469893416, 16908801, 369230364, 3976072205, 1043939115, 131154, 50200329, 9175950, 3735558, 389218560, 587671331, 842413831, 387331633, 909522707, 236270391, 34473731,
- 35525909, 638916375, 102900518, 1043805447, 875902210, 640034599, 1392584487, 2032368958, 1942823801, 890110722, 510103320, 491789362, 472656174, 17440798, 806819078, 656883756, 389033023,
- 2080966421, 488261407, 1739033603, 18365799, 4264312066, 1479517179, 941821751, 808075320, 2166041658, 17573160, 16915971, 52298241, 673516545, 3624868238, 50612023, 201327104, 537060862,
- 100705538, 16384, 588722945, 321062695, 875902483, 372582183, 909259542, 101127479, 100861702, 656548614, 857092919, 926365234, 52888110, 656877094, 857085493, 355939890, 336922119, 370546455,
- 2101215233, 595163427, 705066918, 220801306, 472393998, 3407749907, 473056796, 437065754, 406330649, 302975255, 369847566, 825365011, 825364753, 1074340134, 2768377102, 4268189607, 254017880,
- 33756683, 33685788, 33692673, 754861107, 1259289153, 1027621655, 573318937, 370804225, 18612737, 469828098, 303431938, 740665368, 150995712, 2382560767, 838886403, 1241529856, 923992064, 909193782,
- 923997974, 859256374, 117640725, 353698318, 387383838, 589702677, 889652770, 889339447, 656880693, 656877094, 353776183, 572720660, 909391142, 353776179, 572720660, 909391142, 50492169, 2400728334,
- 473046631, 690888016, 538844204, 352715018, 1076637719, 742336295, 118822704, 1193245705, 385096986, 370613019, 383654940, 370613019, 2818710556, 1023541528, 2751200812, 255285295, 1077426211,
- 742010922, 623411483, 503513356, 33620226, 201392926, 428746789, 1194842127, 467206916, 471602711, 454760214, 471602711, 1775382, 4279173122, 58589949, 3014796, 16777273, 1043472641, 859256578,
- 638910990, 889529123, 20382270, 909588022, 237188918, 587663106, 875902518, 387393318, 925185843, 372388662, 117838869, 4269605383, 990970138, 51126595, 50471430, 473423361, 622905598, 771819285,
- 252318731, 1071909651, 100734785, 16843298, 850830594, 2326068892, 302847521, 42998286, 76938647, 957947150, 725233691, 639369987, 17373740, 219811460, 18029331, 1192432392, 336798236, 33627169,
- 562703619, 302845460, 33577488, 4261351424, 2768425473, 872425728, 16842752, 926299699, 101135159, 589698310, 654771746, 926351934, 590820918, 117835298, 37626631, 842208823, 925185846, 372388662,
- 117838869, 4274454791, 1028491206, 102633988, 953877509, 104349985, 202776090, 270341290, 254289551, 52300803, 3103851011, 842735676, 545971198, 252841238, 2952892440, 184644606, 590302989,
- 16978219, 589108226, 450105114, 168106279, 656622603, 33757473, 562703361, 319622676, 33577487, 4261351168, 1677950466, 973090304, 16842752, 37630497, 238237495, 589698306, 1043662115, 906049282,
- 909522742, 34480951, 908265223, 640955702, 857151271, 372385079, 587600917, 875898402, 4269605430, 990970138, 51126595, 50471430, 473423361, 622905598, 771819285, 252318731, 1071909651, 100734785,
- 16843298, 850830594, 384499356, 370613019, 2533497884, 235181565, 456726813, 53164592, 740695043, 2214660378, 319625742, 134288155, 474419987, 554963746, 50463004, 370613168, 387324956, 131099,
- 33423120, 8192722, 3473449, 855703808, 926365238, 101058355, 572728853, 1042745094, 909588226, 572733238, 117900806, 922893859, 909259542, 372385591, 587600917, 875898402, 4274454838, 1028491206,
- 102633988, 953877509, 104349985, 202776090, 270341290, 254289551, 52300803, 3103851011, 842735676, 454760140, 471602711, 1946071041, 1326254849, 288039727, 335675651, 253371165, 421993172,
- 1141574149, 421603107, 2936078851, 471209755, 454497820, 251658752, 2114125311, 771787779, 13568, 841023745, 926351934, 352456243, 86188838, 922893877, 926299649, 590820918, 117899790, 892745251,
- 388441652, 624374551, 587674423, 2097296167, 285285118, 203506491, 35784195, 937296131, 550043164, 17241381, 169085742, 3825931023, 18301247, 16916998, 3064267265, 3774782514, 1048388218,
- 2533499773, 235181565, 456726813, 53164592, 740695043, 2214660378, 319625742, 134288155, 474419987, 554963746, 50463004, 2812766065, 268435968, 3523345919, 687908098, 12288, 909312257, 859256630,
- 352716295, 102900518, 37627655, 909522743, 102900535, 587663110, 372703806, 926298675, 120796967, 20129571, 2277965511, 302267725, 67438110, 1092696283, 505022008, 346688534, 646909981, 201527080,
- 33751838, 540850433, 2059743803, 2101247266, 4272947491, 218825075, 723726159, 33620753, 438508820, 656069647, 185206041, 556213060, 16909081, 2812766064, 385876224, 1426193919, 687921154,
- 352387072, 589702663, 352716322, 386014737, 640029975, 117842467, 37631797, 889655605, 909522231, 909522743, 1426141747, 337580556, 17506076, 772870147, 320091444, 288240949, 1162150928, 974525185,
- 337063953, 105762050, 1041697808, 559939130, 50464797, 16843294, 33758722, 18882056, 521536539, 423769386, 1446978, 4261412865, 47776250, 2556098, 33751296, 926299655, 842208823, 236140342,
- 389482242, 101070610, 656803591, 102900518, 104269575, 640026374, 961033985, 50726582, 471471115, 458231582, 168959266, 112213867, 50987526, 387257349, 1763379222, 419562244, 4268491053, 49086116,
- 119023386, 21903380, 16908704, 17052929, 655755043, 100730911, 2519277329, 185931268, 83886850, 4261351168, 1426387970, 385878784, 1392517632, 22016, 353776129, 572720660, 909391142, 352723479,
- 842208788, 640955702, 859191079, 336926258, 386336518, 386014739, 640029975, 117842467, 892745525, 656877108, 101058337, 387322901, 640029975, 117842467, 926299957, 926299667, 53950006, 2281767731,
- 708458793, 708524586, 471999260, 2602705436, 219554186, 2417561362, 370340457, 975310099, 1024463156, 120139582, 3774754318, 370348060, 892806426, 858525197, 2987598629, 84679693, 4253551638,
- 1001325438, 976890409, 607791403, 589176098, 589110563, 337742367, 269618446, 3372084826, 34679337, 16915971, 52298241, 369627395, 641954594, 202115897, 35521282, 503447809, 19792643, 457252245,
- 4263392524, 2752849, 4280287237, 64422388, 2621533, 4259893, 5767245, 101131520, 891691555, 926365236, 572728870, 117900806, 909587751, 353776179, 386014741, 640095511, 102900514, 104150791,
- 352716295, 842208788, 839071286, 101979414, 891691555, 571946548, 370414854, 892744243, 925312564, 372388662, 117838869, 2084831495, 1111236363, 40068699, 437733183, 437062417, 1463892021,
- 184746311, 420816653, 520751634, 678757669, 522984214, 1060057620, 708458793, 708524586, 471999260, 2837586460, 219423626, 2417561362, 1074288210, 323699258, 121390098, 119478295, 1495408705,
- 387626862, 503448071, 33620481, 387023999, 555495694, 35984943, 707345248, 690698810, 488776762, 488842014, 2332893981, 235803681, 5967634, 4294377219, 59507709, 655500, 8519806, 909574400,
- 353776179, 117900820, 926299905, 875902465, 891758374, 842208790, 842413874, 387330611, 891491590, 640099892, 102900518, 370214662, 909259542, 926365239, 335939123, 370414613, 656876311, 572728870,
- 370214662, 909259542, 909588023, 104019766, 101061894, 572925731, 926222119, 892679734, 572728870, 101123846, 387192070, 640029975, 117842467, 288555777, 562699778, 236064022, 2969407514, 18814242,
- 521605921, 428629036, 791162899, 891295284, 153292836, 692983826, 270280994, 841232410, 17239345, 33627653, 85852418, 926092552, 370421285, 1749624612, 34278923, 119735301, 440944137, 726013552,
- 185539653, 235878197, 306198579, 690238730, 974000169, 3503030583, 2330002140, 219026465, 4250538002, 872613178, 203620354, 50464261, 16908574, 1090650370, 219234647, 17303044, 4127065091,
- 100991489, 842272013, 134811435, 992946191, 17106713, 99155458, 101058307, 421529131, 19616295, 16843010, 152049411, 41560099, 1912733953, 403446303, 35521285, 33685761, 26017426, 262260, 49086238,
- 10814172, 5308426, 7471201, 909574400, 353776179, 117900820, 909522693, 387330611, 842217014, 353769238, 101123604, 371401478, 370546454, 909521459, 101127991, 587597574, 640099874, 101132070,
- 891691555, 909522740, 640038711, 589702695, 101123618, 388433670, 117575221, 101123590, 857084949, 874853938, 589702950, 101123618, 370542342, 20329011, 371296828, 420418061, 1658977936, 823533585,
- 1160846915, 408302891, 788594968, 43136592, 1310067980, 707008305, 51645982, 926880540, 203247146, 276499730, 692731431, 943746583, 219024130, 957946415, 84870409, 707526426, 404297243, 673976839,
- 1711355939, 924847370, 252786719, 841548301, 19995684, 337742586, 269618446, 154495834, 690364680, 707341854, 185469246, 875235079, 136914200, 571085588, 453513476, 386603292, 1141727254,
- 287327034, 738592542, 370414637, 537266960, 1960576532, 101058053, 436800775, 539501857, 405743550, 353836091, 33827635, 262146, 65863454, 9175837, 2883594, 4456504, 909574400, 353776179,
- 117900820, 925304579, 640099878, 909521973, 370618931, 389486358, 353768967, 587337236, 640099874, 369164582, 857085718, 875902514, 637600038, 589702950, 336922146, 2320367894, 302847521,
- 3700431374, 375267675, 1578895636, 1348760235, 1444487186, 606754848, 1418684987, 304371244, 4274848031, 337581658, 2188857403, 19791377, 590159268, 2205693490, 2330001940, 235803681, 4250538001,
- 1478317410, 1209541149, 1537568596, 336791588, 877862483, 2387887209, 269695850, 3842053641, 505180414, 2561025549, 3271447868, 539071233, 2358776589, 67133502, 3925807104, 2768376322, 587208960,
- 922758144, 926089216, 875898406, 842217014, 389486358, 353768967, 587597332, 120006178, 370542337, 892744243, 923084340, 102900518, 320214037, 842217015, 101979414, 1125123847, 1916802329,
- 625356361, 490675006, 1282753559, 1042629679, 451831809, 1228679229, 4009164298, 1195395888, 562705162, 236064022, 641765402, 1917529157, 1008605505, 1143356697, 1131760172, 20717338, 657188958,
- 1025593957, 1581967520, 20521558, 337742421, 269618446, 131162, 32439832, 12911351, 4718651, 656605440, 640099878, 352723491, 504829460, 370546434, 101061653, 1042752035, 389231874, 842203678,
- 875902518, 656811559, 640099878, 909521973, 387330611, 117638662, 926299687, 389481022, 3204515334, 335676960, 1111370009, 693848661, 823075121, 1468550443, 50549594, 50864129, 891767087,
- 338046545, 1313421629, 1967270426, 1011755594, 670304007, 69345294, 269883928, 37164555, 437664014, 1062278925, 84686906, 336005385, 1900557377, 689317441, 356722228, 1177032484, 287258925,
- 453642260, 1112090391, 403847781, 3439082791, 1597245717, 117966645, 1614416645, 503316992, 2265050878, 855692545, 16384, 336933687, 909259542, 656815157, 640099878, 859190325, 102176306,
- 891488006, 572728884, 370414854, 386014743, 101979414, 639771398, 322319911, 909518599, 922893879, 688260631, 892814878, 857873988, 1682183245, 674898007, 469828098, 841888579, 925711664,
- 958139682, 1059209829, 1879377448, 572591656, 370808580, 924257296, 807741839, 555558964, 152505095, 1296320033, 773262859, 790828844, 606217768, 286263308, 825040141, 218835788, 2835233054,
- 1597245717, 117966645, 1614416645, 301990400, 1392701182, 872461314, 16640, 37631799, 640946485, 101065511, 874710791, 370616102, 842216214, 104281906, 656610566, 589768230, 286590470, 387383838,
- 589702677, 386336290, 909518599, 922893879, 2684749335, 118822704, 379257346, 520356368, 893649923, 211683657, 75836188, 17047299, 43718161, 352715010, 1076637719, 742336295, 537798487, 437781538,
- 369823766, 16980791, 19408395, 388637607, 1326648577, 19612977, 33620225, 1328629035, 369167635, 1509828136, 17573160, 16915971, 368706049, 895431689, 84346887, 6306315, 4262854658, 37683694,
- 2031725, 318767148, 892810503, 926295860, 352716311, 587675413, 857084945, 389494322, 587597319, 322250274, 909518599, 922893879, 1644561943, 788811340, 84282406, 444598665, 320409373, 537145357,
- 104086033, 572591656, 370808580, 924257296, 352615937, 623527459, 722147087, 103161668, 637206070, 285935648, 856098101, 363200055, 895431689, 84346887, 6306315, 17498113, 37945854, 393381,
- 389223168, 587671331, 595410568, 35879289, 1734846373, 184549632, 1124204033, 100705538, 923992064, 656607027, 578463539, 595410557, 2808561154, 65703, 18481675, 5177923, 16777219, 18953505,
- 29949507, 890896952, 436207872, 872544769, 285251586, 856883200, 842208790, 104019766, 587597574, 640034594, 1057103386, 37629742, 202047774, 626282533, 2550269962, 725038891, 1091840033, 2364487,
- 38469633, 45023257, 721021, 372380416, 587600917, 875898402, 454458934, 471209755, 461177372, 471602711, 1775382, 37945346, 34275584, 721096, 318767127, 336926258, 639771398, 389428277, 336922146,
- 909259542, 2837853237, 708458793, 708524586, 471999260, 35791388, 707345352, 690698810, 488776762, 488842014, 16786205, 1879000064, 62720, 4096, 101062423, 891691555, 104019764, 857084949,
- 571532594, 622598708, 405284146, 356786704, 455416095, 522264880, 16783376, 386007552, 2147634177, 5888, 101069569, 656810531, 572728870, 859185927, 387323442, 909259542, 52244225, 487664191,
- 186718999, 371004194, 504630356, 353378075, 729809435, 235538750, 73673996, 370085388, 50332160, 2030172673, 167816962, 5376, 859191059, 336926258, 856098566, 842217015, 101979414, 2147682055,
- 302848796, 2022118929, 219880576, 2266370322, 563411457, 369888787, 563372560, 369888787, 16802320, 16925952, 3674383360, 3584, 640099091, 909391142, 353776179, 2349270548, 33821231, 437589530,
- 16909314, 68165491, 404495384, 1905156, 33554435, 40108289, 721115, 2490391, 372380416, 587600917, 875898402, 372384054, 587600917, 875898402, 656607030, 875898406, 372388662, 117838869, 505222706,
- 488510485, 487920897, 504632606, 305026078, 370803205, 84023830, 354327810, 337517845, 354295317, 337517845, 1939611157, 402984735, 68688924, 50339090, 4244575488, 3674398722, 939535872, 18688,
- 504574721, 638916354, 102900518, 909444870, 640955702, 36382503, 336922119, 353834519, 572728870, 909444870, 909522742, 839062327, 842215958, 657667634, 891692835, 875898406, 372388662, 117838869,
- 4112281857, 488379409, 253178676, 891629087, 940049184, 924152200, 923276555, 421147432, 421536561, 320734471, 403600863, 791158565, 803802655, 50397970, 437655066, 3070362882, 589872125, 35717640,
- 33620226, 218628385, 2366966279, 286006150, 553976069, 33686018, 117768481, 19610882, 31063713, 259257089, 68291076, 404495384, 1839876, 4390913, 28770507, 720959, 372380416, 587600917, 875898402,
- 605518902, 571873316, 608108835, 589501975, 2299671, 4279107586, 43778811, 8061147, 385876106, 909522741, 889404983, 640099892, 859121446, 858915358, 909521458, 389231415, 588579342, 640090670,
- 102900518, 101979399, 336925716, 857019924, 909325879, 926299958, 352716339, 588715540, 774317606, 589506306, 387257350, 387191815, 858920470, 909588018, 909522742, 34485045, 101061909, 656548387,
- 589701670, 117842466, 640099075, 909391142, 353776179, 2517042708, 68756239, 16908801, 537331719, 757536813, 252843803, 961096735, 17305668, 18940162, 134480643, 672681291, 285278489, 437080125,
- 50529041, 33686049, 83960065, 890373893, 17775674, 335610113, 1026438178, 117901369, 537265414, 369231108, 688397089, 1010965535, 908071700, 305089846, 370803204, 67246613, 16850437, 1107693836,
- 1900248678, 101190239, 33628417, 16843009, 857869835, 237249834, 17304068, 841815554, 302386200, 19014425, 218563075, 841101585, 540024353, 117906730, 167838470, 2004288012, 17435905, 84346114,
- 454762261, 590621441, 33689618, 50397441, 1929773571, 402919455, 68688924, 33561874, 4261350912, 3674373891, 2399174656, 890699776, 1043542582, 37631746, 775173428, 36579074, 370554151, 909521459,
- 102896951, 117835271, 504698119, 842150658, 875902774, 640090670, 372582182, 909259542, 102962487, 34473734, 504632597, 370553602, 36574487, 101065251, 909522183, 926299703, 889339444, 589702709,
- 101123618, 370414868, 386014743, 572925461, 101065251, 640099075, 909391142, 353776179, 2315716116, 520162054, 16845598, 67174658, 235209991, 1009327902, 807670818, 86125350, 16843268, 1096170524,
- 388247594, 101057281, 791420167, 958604605, 489163563, 16974598, 33751297, 338632965, 622864931, 756492081, 84215581, 16843009, 959992369, 67188824, 587989762, 472260644, 942085140, 68300641,
- 353769986, 50594330, 100794654, 739119377, 1213691210, 68629340, 16909316, 16908831, 119472385, 454166537, 18638408, 16908545, 710232355, 67503634, 33628162, 18809089, 319294215, 2199595816,
- 221013423, 18743562, 16843009, 100801793, 622593543, 927020038, 33761800, 622133762, 242766343, 33819917, 16843038, 1929576961, 402919455, 68688924, 33561874, 4261350912, 3674381057, 1090531840,
- 890699776, 926299699, 875889214, 774308398, 372582146, 909259542, 588592950, 235340302, 370414851, 370546454, 640029975, 50733603, 640034595, 859190325, 336926258, 294192902, 67377446, 33620483,
- 184680706, 1008936739, 589897521, 488640022, 16843272, 134414593, 672728839, 606222128, 305094458, 370803204, 67246613, 151133699, 2554924046, 1044585856, 202311213, 18809092, 16843010, 201654559,
- 1900742158, 1498298495, 67372328, 16915970, 1929511425, 402919455, 68688924, 50339090, 3959362816, 3674349315, 637539328, 13568, 370553345, 34477077, 656810531, 875898406, 909522742, 117842455,
- 336922118, 857085463, 875902514, 587540006, 891692583, 842217012, 101979414, 1774715143, 1698190490, 2337361798, 975709741, 948384307, 471885626, 1763914782, 1082225738, 794426997, 436339730,
- 35263766, 1404961284, 2370987927, 926759529, 1363968303, 774515854, 556150055, 1652571753, 2443460419, 2521928805, 68165491, 404495384, 1905156, 4278648834, 48562940, 4194523, 16777295, 34477363,
- 352521735, 370611732, 638916374, 102900514, 1043805447, 909522690, 874919221, 656815157, 774317606, 909444867, 52311862, 922893847, 87504438, 640034595, 859190325, 336926258, 2650932998,
- 1111299143, 219879196, 84280580, 689774382, 911616285, 203366669, 16974850, 268502274, 894056201, 992680237, 841290262, 319239239, 302587683, 804388106, 436339730, 35263766, 246546948, 795301655,
- 539177255, 106522389, 503449349, 520225282, 167969281, 1178930697, 68423451, 50857738, 2019627036, 469833279, 201657352, 1652641836, 910107663, 940581393, 68165491, 404495384, 1905156, 4279566338,
- 38405118, 917723, 318767217, 640034595, 859190325, 336926258, 385943302, 909588018, 909522742, 34485047, 587597333, 640098850, 889334562, 908535348, 892745271, 640099892, 102900518, 370414854,
- 352716311, 572662549, 589432327, 908535330, 640955700, 372451110, 35526422, 857085463, 891692599, 909522740, 370553395, 117838869, 794560006, 436339730, 35263766, 49938692, 185552956, 84215049,
- 84156418, 488773378, 336734226, 857146139, 741409538, 556149029, 1312252447, 1381514867, 138412802, 638788369, 388111380, 84148737, 16974367, 235800582, 19676696, 845766488, 2641055366, 338440022,
- 1929445935, 402919455, 68688924, 3925679378, 84215579, 286724878, 708127498, 16908826, 605685505, 606866198, 1950500471, 1177035557, 2506971264, 287446046, 33620244, 17433858, 691282963, 486673928,
- 67307803, 2485459716, 710253413, 1603030315, 321484614, 4278452254, 33423325, 14352961, 3342375, 5111871, 909447936, 236402486, 370414850, 370546454, 640029975, 117842467, 909521717, 892745271,
- 640099892, 572925734, 353776131, 572720660, 909391142, 353776161, 572720660, 909391142, 640099079, 909391142, 353776179, 436667924, 136463160, 16843265, 386204933, 456402980, 254815767, 33756195,
- 67568899, 135401739, 505222675, 488510485, 487920897, 504632606, 305026078, 370803205, 84023830, 152866817, 705171218, 1161187914, 84286022, 35521029, 469893378, 218957826, 826370668, 16843523,
- 504234241, 505222421, 505287956, 505222421, 2619217172, 84877171, 404495384, 1905156, 4278845442, 47514364, 3014839, 16777272, 35525427, 640029975, 101065251, 909522183, 656815157, 117582631,
- 387192070, 638916374, 102900518, 909522183, 926299703, 372376339, 842150706, 1711354678, 336721180, 859053340, 773787415, 52442405, 1904752648, 353056533, 858273544, 590420250, 84351264,
- 1977553694, 522524686, 236924712, 3153966850, 34087720, 16908833, 18940417, 168234248, 461802773, 17109260, 33693957, 18940418, 1023543045, 4271964459, 66009, 4280221699, 36242173, 3801267,
- 6225997, 909448960, 926299703, 892810292, 640099892, 859121446, 858920471, 926298674, 842215990, 353769238, 101058324, 387323399, 101979414, 572662534, 589702695, 117842466, 370545939, 926298675,
- 590624054, 336004642, 51713030, 857085461, 875902514, 589702950, 352781858, 102713863, 16843011, 487131654, 272831008, 336661276, 487467557, 389491468, 722679350, 388900393, 1299859286, 420286727,
- 235540517, 225909786, 857999888, 327958803, 16848158, 1259545114, 706552410, 320474448, 219480833, 621873167, 2558099977, 84292167, 35586309, 16908801, 1193479949, 370224711, 185205260, 1715496234,
- 16843068, 3019964929, 151060766, 2001674761, 673448963, 821954579, 1610876191, 272903248, 453116183, 65673, 50069272, 11665920, 385876041, 909522741, 872627767, 640037941, 654454311, 35526453,
- 37368626, 909522742, 389231410, 588580358, 640090670, 102900518, 335939079, 504627741, 370546434, 36574515, 101065251, 388568601, 16908804, 84214273, 622857220, 439232280, 252251924, 858731803,
- 554439213, 553779720, 67306241, 441338888, 33626149, 84280065, 673980424, 320021042, 520433955, 252183041, 1227165958, 1633509500, 101058344, 18809347, 16843265, 201392385, 607992342, 168038180,
- 637600008, 1430212671, 608648531, 84412176, 16908832, 33554945, 4261352704, 3087165442, 855645952, 855703552, 387323415, 320280086, 637673238, 589505062, 587662882, 37697078, 909588243, 101057287,
- 857084949, 842413875, 892745526, 656811572, 136720641, 84216325, 145622024, 521148932, 873866026, 959885948, 402786824, 286370332, 444138755, 1328555804, 135666554, 352651267, 347603480, 219028751,
- 1107167256, 658246419, 16843010, 990123793, 749338944, 4269345066, 257377731, 16846352, 167969282, 1010242567, 402653440, 738393087, 2097197314, 890699776, 926299703, 875889470, 640034598,
- 506672423, 842215938, 926299698, 102183731, 774051078, 640034562, 117842467, 335942677, 336860436, 926094614, 909521718, 859256375, 336922118, 639833878, 36579110, 102966055, 118953236, 370611220,
- 842215958, 909522742, 926299703, 859256374, 353698318, 572720646, 572925730, 572662566, 254150406, 17045795, 117506562, 757073672, 472655640, 521081367, 1144604717, 33687568, 50528545, 1296762884,
- 18425880, 1346179329, 51452429, 35717891, 553714178, 117769473, 1010447634, 16843023, 874648577, 137968687, 33949447, 50462977, 84156418, 455153154, 471738888, 320093250, 87438880, 201392414,
- 1715537425, 1601258367, 17172490, 16908577, 184615169, 607927062, 168038180, 369230088, 219688490, 672796169, 33751331, 823201031, 471872802, 489300016, 50726663, 34343425, 218199927, 84017418,
- 521471239, 100994053, 875170321, 34607652, 16843010, 16777987, 4261352704, 3003277826, 18944, 101069605, 570823957, 656548387, 572728870, 1043662626, 641152773, 572727846, 34473734, 875963143,
- 656815157, 842215990, 35526450, 842150706, 236271414, 858982146, 922893874, 1023541822, 369493029, 890311708, 677334563, 373838373, 1312106018, 488919667, 1913921059, 101059433, 18875140,
- 303497473, 640882191, 976567850, 505354279, 2960533013, 1300832127, 135408213, 2902853383, 455298340, 16843009, 706288386, 2674673457, 16855666, 218433800, 420752678, 388571923, 16843265,
- 453050625, 2968623918, 117965825, 2691848, 4279762945, 34538493, 8585394, 909448960, 909521714, 892745271, 640955703, 36579110, 370554151, 909521459, 102896951, 352521735, 504828948, 842150658,
- 875902774, 640090670, 372582182, 909259542, 102962487, 34473734, 336986653, 370545685, 387323415, 587345429, 117835298, 926299701, 876033590, 892666430, 572728870, 335939334, 387322901, 353829406,
- 589440550, 436602402, 721488646, 50463767, 117900033, 505286149, 337787945, 723922980, 50529571, 469827841, 708924732, 18293809, 117835267, 1026501661, 725164837, 102574091, 16843523, 168561411,
- 588519965, 824516650, 489494311, 17106183, 822149377, 1480144978, 33816888, 606276611, 337389088, 54011668, 167903518, 540083474, 1684027854, 67372328, 35586306, 16843010, 84477727, 1146433302,
- 17502209, 16908545, 727009315, 67503634, 33628162, 18809089, 302516999, 2434672936, 973627730, 50533177, 18743554, 16843009, 100801793, 622593543, 910242822, 33761801, 655884802, 242568713,
- 33819917, 16843038, 196609, 49020717, 12452599, 4194347, 620757074, 656811555, 103228966, 101058310, 909517575, 656815157, 353769011, 504829462, 926036738, 859243070, 336922118, 372376342,
- 236197142, 639771394, 891692583, 909588020, 102897462, 352716295, 370546452, 892744243, 36054580, 67183131, 790759173, 101066290, 35782916, 553779713, 134349057, 589038604, 67784972, 537068291,
- 2063729153, 945134185, 1347389285, 673590668, 2268214074, 543701304, 590618395, 2188659305, 703362368, 101189405, 134611201, 539500039, 840965681, 34342689, 16978719, 67698946, 538909192,
- 807346227, 2538844673, 1770869351, 792149306, 2387692673, 657336876, 1763780141, 1113751614, 1704043584, 16798100, 4261353728, 2969709313, 12800, 909325591, 37631798, 36582453, 654454311,
- 857085493, 926299698, 34480917, 352521735, 387323412, 353834518, 572728870, 638654982, 50594841, 33685762, 587923969, 826024744, 371403039, 136126222, 16843010, 117965569, 807803399, 992158263,
- 151133699, 2504723470, 1095048827, 202311213, 18809092, 16843010, 201654559, 1883964942, 1481521792, 67372327, 16915970, 65537, 50134808, 11731639, 318767209, 336860423, 504829462, 638916354,
- 101065251, 909587719, 909522742, 36582453, 654454311, 857085493, 355939890, 235341318, 906108162, 906116918, 891761717, 842208790, 236271414, 68028162, 504825607, 370546436, 353834519, 572728870,
- 70125318, 17817127, 167969025, 159328035, 674111505, 68689687, 33620997, 184746756, 942482465, 993663005, 134747688, 268960264, 394097929, 405085195, 538518807, 135074593, 1463164691, 1159400514,
- 354301272, 136127245, 471536903, 521734668, 1009461273, 1174487126, 1262695694, 185143589, 503448331, 33620227, 84017438, 1599867143, 710646132, 67372293, 33759234, 18874882, 251921155, 445726004,
- 1963527688, 101193340, 16850179, 35455233, 118032644, 1345395728, 1092160317, 337457748, 52044557, 35652354, 402784514, 1413032488, 65597, 50134794, 12059316, 16777282, 370546483, 387323415,
- 387323411, 35526422, 640029975, 101065251, 840316167, 892744243, 656811572, 101057283, 370545685, 572921111, 102900514, 842478855, 322372158, 909522743, 136728833, 84216325, 78512905, 34406663,
- 454757126, 371143205, 86191397, 405602567, 2350388485, 186456448, 673391652, 756813594, 403900701, 2853378068, 67178769, 253016066, 386797085, 172097032, 35652879, 16977423, 16908833, 19071489,
- 336071686, 1996569399, 1514320382, 101452303, 16850691, 117513729, 20002842, 36318378, 65546, 66322193, 11666043, 83886194, 656811555, 640100134, 370419494, 387323415, 589702677, 889652770,
- 1043805718, 640955650, 640034598, 370554151, 926298675, 504824606, 909514499, 926299703, 842208790, 118830902, 235341318, 335939330, 35525653, 387323415, 572925461, 101065251, 909260039, 892745271,
- 892675893, 17108487, 235344315, 807739912, 85999135, 824182277, 488255011, 506472759, 33883398, 134678018, 775040285, 354161937, 605689871, 404888859, 1124995608, 557260596, 387326747, 504766507,
- 50529561, 16843009, 134612740, 690102559, 571412251, 438119477, 17304841, 725494559, 219486238, 1293098767, 2269341261, 334822211, 503450901, 33685762, 369885472, 2141082640, 86069327, 520226055,
- 33686017, 1295595042, 877148985, 2384340532, 1333543536, 33686018, 117506336, 655164936, 912272942, 389772642, 17106436, 16843038, 52363521, 1026163971, 978352058, 1585864261, 3487299, 4279566337,
- 34210802, 5505204, 842340096, 37631798, 875968309, 774321205, 372582146, 909259542, 386080311, 36644404, 656811572, 909252405, 101061943, 335744519, 370414613, 788993814, 370415109, 35525653,
- 387323415, 589702677, 538248738, 117901091, 335610115, 488180488, 337193243, 1428756254, 22973289, 184615425, 343092007, 555822126, 50660616, 16843010, 890903045, 18989006, 134480385, 488704263,
- 622864921, 152896567, 2134444297, 622115698, 135532044, 503448326, 16908801, 2793499958, 930829168, 859258461, 52429071, 18875394, 235277066, 1685997602, 993610297, 84216618, 703134783, 927941669,
- 372995427, 17172229, 33620512, 922747648, 2919431935, 788574210, 2751490304, 588447744, 656811572, 369244727, 858920471, 909586994, 858927670, 352456215, 892610083, 774317606, 237118211, 34473730,
- 909517587, 656815157, 370546483, 387323415, 858920471, 926364210, 1043805750, 104019714, 370414854, 36578071, 656548391, 572727846, 570820386, 50466339, 640037941, 370553639, 386014743, 842208790,
- 858986290, 842215990, 909522742, 926299703, 352456243, 102175764, 572662534, 589440551, 101130786, 639771426, 16851336, 588974082, 589178397, 806688304, 505814563, 34085667, 18874626, 269682946,
- 927082268, 472730170, 34014988, 16916295, 18809346, 84149250, 154870296, 251987471, 371931658, 33620483, 33627650, 18809090, 52567303, 235414298, 135202053, 570695708, 42993436, 35652868,
- 134676740, 1242827533, 135596864, 336078888, 72178700, 67438343, 85918214, 385941765, 705370656, 591408156, 472662306, 538577706, 858462210, 17501729, 16843009, 521014017, 168176692, 51455234,
- 16843522, 50594305, 4263315970, 489824949, 354496799, 67375895, 16843012, 100729089, 352912906, 540221463, 706752798, 16845092, 16843009, 3976078345, 874713616, 34539563, 34151196, 16843267,
- 268764421, 118885910, 320877358, 33884673, 33685762, 33554945, 3959368960, 3187865346, 637539328, 838926336, 336926230, 572719630, 640034598, 926299189, 571946550, 101058310, 370611221, 909259542,
- 640037941, 2590613249, 2271557717, 764170319, 859449382, 960005938, 521871464, 1248404276, 1967161972, 2538847746, 1770869351, 792149306, 2387692673, 657336876, 1763780141, 1113751614, 1704043584,
- 16798100, 4261353472, 2986479363, 30720, 102896897, 352716295, 353633812, 387192341, 353829406, 572719662, 889652742, 909588022, 875968310, 775173943, 640034563, 119677475, 572727814, 51250950,
- 387192341, 370606622, 638916374, 102900514, 842413319, 926299699, 892600894, 654454324, 891748910, 840368670, 370546482, 926298675, 909325878, 251868722, 67510319, 16843011, 707135745, 539566868,
- 388444454, 84352810, 16843013, 84017409, 990512648, 506207307, 420353823, 16843796, 16843009, 117965313, 639966216, 1159666989, 17499713, 33822762, 67174914, 235210246, 555294238, 756754732,
- 222903062, 489701903, 707598906, 531694107, 352979975, 403507478, 2155126297, 119546635, 16850433, 16843009, 117834269, 153032965, 1767383594, 186796932, 17040643, 118426113, 994189583, 1091860323,
- 67377475, 35521028, 18743809, 135399938, 1669154081, 389439822, 33817604, 16850689, 16843009, 16843009, 65793, 4279762945, 37618429, 4849845, 909448960, 37630770, 926365239, 640037927, 656811559,
- 370546485, 842150706, 909522742, 353776179, 587597332, 640099874, 372713254, 909259542, 589706293, 352781858, 35525649, 387323415, 589702677, 85526050, 488571145, 17105675, 134414594, 606209801,
- 254160151, 840503305, 169808949, 1765699177, 337645633, 67371777, 1091574803, 424498507, 67181870, 470287879, 657925416, 486752043, 184811777, 3795389962, 288108217, 17106181, 16843040, 16843266,
- 1614499153, 184878137, 84216329, 1145525253, 436733771, 1548529406, 67310385, 35521028, 16777473, 4261349888, 3003275010, 22784, 71185687, 654454327, 891749166, 858920470, 926299698, 842215990,
- 101062450, 387191829, 891692579, 774317606, 572662530, 387323399, 369558286, 842215958, 1043805750, 104019714, 102044934, 572662562, 587345447, 168166946, 942286872, 739588688, 706873380,
- 386930459, 773661214, 657476683, 336795947, 16843029, 33620256, 1040848398, 773599576, 1030302504, 943409203, 1212229666, 524961842, 101058055, 100934917, 269687832, 1278682164, 907877176,
- 370868799, 1396255012, 826023229, 590950155, 18551581, 16843009, 722927874, 370676512, 838995720, 67241246, 2470183426, 1011429720, 16852283, 101124098, 606478603, 18555725, 16843009, 16777473,
- 4244573952, 3036821762, 18944, 909522199, 889404983, 572981820, 101123590, 654771974, 875836981, 657732661, 842203934, 104281654, 639833862, 36582694, 587345447, 336922118, 504824350, 773134082,
- 102900482, 455906566, 67569159, 1111163137, 202180894, 18745091, 944782593, 1311252017, 117784927, 16850433, 303106049, 892410384, 50397698, 235209990, 925703967, 555027745, 35587116, 436471043,
- 913475654, 20073550, 386204420, 385954077, 118169122, 34739472, 16843011, 1546388228, 34342682, 51258148, 1375797762, 1413838779, 33755693, 520225539, 16843009, 65537, 50134789, 12124781, 16777280,
- 34477363, 352521735, 370611732, 638916374, 102900514, 1043805447, 909522690, 874919221, 656815157, 774317606, 909444867, 52311862, 922893847, 654443070, 1111298886, 219878941, 84280580, 689708845,
- 928393246, 203366670, 16974850, 268502274, 894121737, 975903020, 824513047, 319239240, 503520803, 246546989, 812078615, 539111719, 106392085, 503449349, 520225282, 167969281, 1229000201, 34934812,
- 67634954, 2019627035, 469833279, 201657352, 1669418796, 893330703, 5453572, 4278648835, 37422077, 3932337, 5898314, 891748608, 891486766, 842203678, 588592950, 101123590, 370542342, 336926231,
- 117835271, 370611734, 773134102, 102900482, 37631239, 656810551, 875898406, 924005942, 875836980, 103232565, 370414854, 335942931, 370414613, 892745237, 640099892, 16871425, 405349387, 723726632,
- 722346034, 16909078, 644369665, 1546171535, 117768753, 505878792, 622405418, 606742843, 2000683529, 1464090415, 16872098, 2340782595, 2147549659, 1111440519, 252659714, 520426005, 33620225,
- 100802305, 521013515, 1007685891, 256350597, 387908114, 33817606, 16843038, 18743809, 421600518, 1063591960, 4265437768, 1010002500, 839784484, 1549927237, 2432790880, 626663955, 927547175,
- 1096837123, 1776215, 4279107585, 41157374, 4915385, 909448960, 909522742, 640104247, 589702950, 889659938, 387323447, 909522711, 892745271, 858993174, 822485525, 34480647, 504563463, 355676930,
- 572728870, 36570914, 656811559, 352716583, 589702677, 353247778, 520488469, 291739688, 504959278, 2400061959, 1612193302, 34475131, 605291013, 67253767, 353175320, 2742492707, 337058842, 455415303,
- 152114448, 218696460, 1263669274, 153097064, 503389194, 50594561, 2748528423, 470957852, 370679298, 3014142764, 168039697, 419501582, 352780801, 4271908910, 170339322, 33620256, 269619214,
- 2417831449, 136682093, 16777473, 4261349120, 3003276803, 31744, 909513985, 892745271, 640099892, 926168358, 355926590, 336922146, 370546454, 101127189, 335939334, 387322901, 353834518, 572728870,
- 859113222, 922893874, 656811573, 909391142, 892745271, 891495988, 370606622, 117838869, 336922118, 370546454, 875968279, 640955700, 36579110, 370554151, 909521459, 102962487, 34473734, 118752789,
- 1043193089, 36187418, 956367106, 623581196, 16851511, 629735939, 134294612, 656017161, 572536622, 454044217, 16977438, 2300990762, 16843522, 791295523, 19664155, 805437953, 657921844, 33685761,
- 587989506, 792339239, 371402526, 68561422, 16843265, 1279066369, 420351747, 806500425, 203362585, 84219467, 488571396, 236456236, 2433888817, 34409516, 1074075149, 67372859, 16915970, 102629889,
- 825243159, 722210305, 875565458, 705305102, 84025116, 1142359816, 420552460, 1312559664, 34343448, 320478028, 1163932175, 67833353, 33627905, 520159489, 84608770, 220142348, 16801641, 4278131456,
- 3221364483, 25344, 909252389, 926299703, 859256374, 353699334, 572720646, 572925730, 875954731, 656815157, 909522742, 656815157, 572728870, 336922118, 101062422, 387191829, 119677475, 572727814,
- 875898662, 858203686, 504829462, 370546434, 640038707, 909587509, 370553395, 117838869, 1023542790, 256851202, 84150795, 102760965, 488773125, 320022546, 873858075, 822280705, 640230700, 929242913,
- 1480487758, 16909395, 571606849, 471082771, 67245857, 50470917, 235406849, 742201358, 1767856129, 2641076327, 338440022, 119233840, 319685893, 923408145, 34609986, 201392386, 521077512, 606866198,
- 1950500471, 1177035557, 2523748480, 253630493, 17500163, 268567041, 708060178, 486673928, 67307803, 2485459716, 1431673701, 1180666957, 504572279, 419431168, 721550847, 838893315, 1241529856,
- 890699776, 926299699, 875889214, 774308398, 372582146, 909259542, 588592950, 235340302, 370414851, 370546454, 640029975, 319169059, 336926258, 639771398, 859190325, 336926258, 639771398, 439759925,
- 68757009, 16909060, 33620482, 589832971, 689910076, 521016867, 16910365, 50397441, 436668168, 574042150, 353516323, 336928285, 380443934, 336928285, 503520542, 202246402, 511415627, 103629125,
- 17042447, 16908575, 18809089, 101583877, 981495883, 86464590, 503448580, 50397442, 353770880, 370417181, 353770781, 370417181, 196637, 50134789, 8323949, 4980800, 16777304, 34477363, 352521735,
- 370611732, 638916374, 102900514, 1043805447, 909522690, 874919221, 656815157, 774317606, 909444867, 52311862, 922893847, 841286206, 101979414, 891691555, 842217012, 101979414, 891691555, 654456372,
- 1111298886, 219878941, 84280580, 689708845, 928393246, 203366670, 16974850, 268502274, 894121737, 975903020, 824513047, 319239240, 503520803, 367590957, 336928285, 366877982, 336928285, 2986482974,
- 1733695246, 573646640, 1466570016, 34014470, 33686046, 50463007, 1091438858, 353377353, 134679042, 1628445444, 18235256, 84674588, 2169449484, 1059393379, 1396114485, 353771003, 370417181,
- 353770781, 353639965, 196638, 49413926, 14353015, 4521998, 16777307, 640034595, 859190325, 336926258, 352388870, 117835271, 772212230, 101066498, 656810531, 875898406, 842217014, 1043797782,
- 909522690, 840308279, 926298675, 117835285, 370546439, 657863219, 640090670, 102900518, 387322901, 909259542, 16924215, 68300589, 353769986, 17039898, 420287544, 286726158, 151917329, 926835743,
- 336795735, 1044604473, 151132765, 16843527, 387449089, 336463371, 220208159, 487729193, 3641575450, 185536009, 941766673, 571281214, 255008334, 34278409, 287142657, 471603205, 471008280, 85704957,
- 117638659, 488179462, 909317403, 1361062189, 1030572074, 403125046, 100993558, 16845323, 35389697, 1753228833, 2801934127, 304494636, 1432101407, 1512198181, 571480864, 131121, 32571174, 14353030,
- 4194353, 639828224, 640034598, 352723491, 842208788, 638007094, 102900518, 857084949, 118961970, 656548614, 926168358, 909391142, 372388662, 654706199, 640034595, 859190325, 336926258, 1996556038,
- 151585052, 790179082, 187643192, 201658387, 875628822, 792476996, 1162154763, 1497184843, 1080244559, 119420454, 288323079, 370803205, 67312150, 606287873, 839978252, 36645417, 16852994, 791292205,
- 589368091, 1413686305, 692264475, 252453951, 1939683867, 402919200, 51911708, 33560345, 4059961344, 3674360322, 1845517824, 890437632, 389494326, 353699334, 855785015, 370611762, 336860438,
- 352781830, 387323412, 589702677, 117835298, 926298677, 1010120246, 892679682, 640099892, 119677734, 353699334, 370415383, 640029975, 102900514, 926222086, 926299703, 875902518, 640034598,
- 622993955, 640100131, 909391142, 353776179, 403113492, 170215728, 89129473, 839787294, 117968972, 117506305, 740304673, 807736090, 119347750, 117508108, 557124618, 185476159, 874250497, 169357612,
- 556145937, 202449675, 67240450, 319816453, 604049668, 16978479, 370547203, 17105434, 319102351, 370346000, 88415244, 640353801, 171259925, 1432300564, 153431195, 16914691, 486670593, 537133827,
- 1163412528, 858010696, 437719859, 488640297, 356342347, 35389964, 33620225, 33686043, 1326517515, 105728599, 1936786180, 68291092, 404495383, 1905156, 4279828482, 33948157, 2556123, 318767158,
- 926299701, 352456215, 387323412, 353834518, 572728870, 859113222, 909588022, 640955702, 656811559, 590815782, 891692583, 842217012, 101979414, 1127749895, 33687842, 84214017, 690296581, 790043188,
- 337841968, 84083203, 285934599, 797313297, 436339730, 35263766, 479199492, 135205385, 944851755, 102384708, 503448837, 33620482, 218628636, 1097624077, 16974896, 1936851201, 402985245, 68688924,
- 67116306, 4160687616, 3674402049, 1040200192, 1493191168, 654376960, 353769015, 101123604, 656548614, 875898406, 909522740, 656815157, 909453094, 236402486, 370414850, 857085463, 875902514,
- 102900518, 353776131, 572720660, 909391142, 353776161, 572720660, 909391142, 640099079, 909391142, 353776179, 17237524, 862781975, 725300792, 692463677, 16847124, 151520001, 525087801, 33882634,
- 688589577, 1011695128, 2466972211, 354295062, 18750996, 505287955, 488510485, 68300627, 353769986, 17039898, 371726485, 1765622885, 589112886, 187577617, 976491046, 68232213, 85721348, 520622098,
- 791504733, 286264883, 1531926378, 486998273, 505222422, 505287956, 505222421, 2619217172, 68100211, 404495384, 1905156, 4280680450, 24576753, 3539156, 620757068, 101058325, 117835271, 103219758,
- 639771398, 891692583, 859190836, 924259890, 909574718, 370554678, 909259570, 101061943, 370607879, 909259542, 654454311, 572728870, 370414854, 842208791, 37631798, 219444994, 387452441, 236130577,
- 1046748937, 320362295, 1130772756, 35282238, 16975625, 402718977, 235277079, 538713876, 304621837, 235411997, 252578265, 574099723, 219102776, 857624098, 185338127, 50666292, 101122822, 454891783,
- 758526741, 709959721, 909995336, 370673459, 184943882, 16843018, 553786369, 795377702, 749142559, 521283128, 626351138, 542777936, 824315931, 512, 4009882110, 939576578, 24064, 640038199,
- 926299189, 842217014, 118756630, 370611734, 117838869, 101123590, 656548614, 503780884, 370546434, 640029975, 101065251, 909522183, 318914103, 926299701, 590624054, 101123618, 236193542, 336925698,
- 370546454, 909521459, 640103477, 572662566, 302055764, 996743955, 509299523, 456593441, 675089687, 840179990, 16843049, 134875651, 740300823, 807736090, 68824870, 2030174978, 1041442607, 239084876,
- 16844552, 16908545, 622933280, 256254265, 419832615, 1665421238, 525614096, 1196308012, 218380401, 710093067, 722475603, 453643543, 638275148, 33819940, 35193347, 33620225, 268960029, 28274440,
- 117580074, 1802707210, 689317167, 975832870, 453586490, 455031386, 1765102383, 329504, 4277796609, 33096177, 4391113, 771961600, 372582147, 909259542, 101127479, 370414854, 924260118, 875902518,
- 372582182, 909259542, 51254583, 35455751, 370606622, 640029975, 101065251, 37631239, 2010133813, 403837711, 472391188, 255342357, 319165221, 357387283, 656873231, 622268968, 404427545, 22943005,
- 201918722, 439099438, 640689427, 17244713, 338372158, 35520775, 486670850, 235471361, 842406665, 909566424, 67833619, 33620251, 201399297, 4264968482, 2399601914, 67903778, 35193605, 33620225,
- 604438813, 33575210, 4060030464, 3489853441, 956311552, 117506048, 572728870, 370414854, 370546454, 336926231, 572720646, 891692838, 641152564, 909391142, 859190839, 51844658, 336922146, 370546454,
- 892744243, 640099892, 571374593, 639573291, 742475291, 1009062444, 1530546540, 1533356570, 555430455, 270876708, 1031541785, 302977093, 1111172927, 35852563, 270008937, 622139420, 571941422,
- 1297626138, 690831476, 2120178241, 489624593, 538783002, 4261872668, 642997744, 774578768, 1513051489, 16794144, 4043253248, 3556869633, 12544, 640033537, 589702695, 336922146, 909259542,
- 640026423, 352723491, 842208788, 101127991, 640098851, 641152053, 909521973, 387330611, 1996555782, 151585052, 790179082, 187643192, 201658387, 875628822, 792476996, 1162154763, 1497184843,
- 1080244559, 119420454, 590872839, 286067748, 791292210, 19399170, 707341569, 554375983, 1126441251, 1126046548, 203702057, 3808015, 4280614913, 43319642, 3670234, 102170880, 352716295, 370611732,
- 372381462, 101127189, 656810531, 859243070, 842208790, 657732918, 36579110, 891692583, 572733200, 372713254, 909259542, 1242331393, 507857710, 875565343, 843132217, 388568638, 67437830, 607653391,
- 269889822, 640820786, 3224121108, 590685454, 691805463, 3036822813, 706285614, 1716680853, 17501980, 910041884, 336202027, 370284054, 370681882, 16844039, 520883718, 268523630, 1176048225, 1188648,
- 4262985729, 21627633, 6160596, 909447936, 102184758, 924128518, 842203710, 370546454, 101979157, 336922374, 353834518, 572728870, 889652742, 909588018, 37500214, 875902262, 640034598, 101130787,
- 387257606, 387322903, 572925461, 101065251, 926364935, 909588022, 640955702, 589702695, 806887970, 17442121, 503664642, 1278348835, 17238032, 554107137, 439099431, 640689427, 201792794, 168231176,
- 1059140876, 17501732, 741612545, 285874225, 186721821, 34345251, 84148738, 68358147, 495911185, 135271173, 470554131, 101254469, 940910123, 739510837, 748377439, 419629349, 16843010, 50535682,
- 1144004612, 877151576, 322122532, 254351895, 1514872096, 34346301, 16843292, 35324417, 218825218, 1247235857, 50595405, 637534976, 4043436543, 302041858, 822092288, 353566720, 372446742, 909259542,
- 656811575, 572728870, 641008902, 102900518, 857085447, 909588018, 372376374, 101061653, 640033315, 909521973, 271590785, 387129379, 302193446, 590942222, 335627328, 656881957, 1309354810,
- 238296635, 1753025808, 1215118449, 1026908739, 395051374, 16843009, 1815478529, 2503488046, 16911061, 2761294337, 1697327151, 2796802305, 1499573619, 2724950694, 65628, 33423129, 14024966,
- 318767143, 926299701, 352456215, 387323412, 353834518, 572728870, 859113222, 909588022, 640955702, 656811559, 941171238, 34153027, 83951874, 622265605, 387593257, 588197935, 50463508, 184813317,
- 17371409, 302587024, 1261111311, 1145321553, 84215322, 33693186, 35389953, 1779240200, 70271340, 16843011, 285212928, 855832063, 1459672577, 890437632, 389494326, 101975558, 922893831, 372717110,
- 909259542, 102896951, 386336518, 370546454, 355938867, 101123590, 101058310, 654519815, 120006182, 370611732, 638916374, 572727846, 889652770, 909588022, 875968310, 640034615, 940704303, 17310275,
- 352387329, 438908456, 404554001, 437849867, 506211358, 269783400, 186001184, 84411669, 336336652, 336400406, 572795161, 84222773, 605750532, 236463906, 674110477, 50603293, 16843010, 218628354,
- 2415992333, 252840220, 723720200, 588264768, 404564534, 16843024, 504044545, 310470172, 68558351, 33751318, 84149763, 285935368, 539109142, 1610751536, 84214102, 16849666, 18612737, 319030791,
- 1684801564, 17502016, 16777473, 4244571904, 3523348226, 15104, 35534611, 52302615, 640029975, 117842467, 909522741, 36582453, 101132071, 370414854, 572921111, 117842467, 922959413, 654454327,
- 102900518, 443292423, 2786665251, 420614927, 438902036, 423180054, 134353182, 1313345811, 655824144, 353576998, 437459495, 1595416344, 202776343, 167981608, 698941959, 1061364235, 723936510,
- 503449108, 33686018, 151191837, 420021262, 3333894197, 269173035, 35324685, 35324161, 960569354, 726154466, 16856079, 268435712, 738333183, 1644221953, 119865344, 572720646, 335947558, 387322901,
- 654770702, 875889214, 874915636, 909390901, 875902774, 656811814, 926299701, 352456215, 370611732, 1043804723, 640955651, 589702695, 889659938, 389481022, 336921358, 35526422, 640029975, 102900514,
- 16924167, 906775951, 287052573, 268961281, 269620243, 16843266, 16843009, 956893187, 169823284, 134350082, 1161172233, 50791980, 50660097, 151131152, 691547162, 50399509, 252182787, 387254021,
- 135012388, 35135506, 1264386305, 100994828, 537595920, 286076729, 554372881, 253306668, 992419375, 555159570, 622802493, 17040401, 269616412, 1717444104, 271591724, 302596386, 1009661726, 50660918,
- 168172801, 487066125, 610165335, 17112627, 469893378, 33620225, 1710615, 4294573825, 33292793, 3342537, 639829248, 640034598, 36569895, 656811559, 857085493, 355939890, 336922118, 909579031,
- 640955702, 370554151, 926298675, 117575189, 268501518, 84214828, 1946553350, 84347658, 605687559, 840375088, 236792878, 134964331, 656156952, 371596061, 219158293, 120338984, 235735308, 234950171,
- 67770394, 503383301, 33686018, 185139484, 3992855822, 186587895, 470027280, 33686018, 369623580, 1837127193, 822083840, 2499894015, 1342233090, 923992064, 875898406, 656811575, 857085495,
- 389494322, 386336262, 101122574, 370414854, 389493299, 589702663, 370414882, 857085463, 336926230, 572720647, 37627686, 370553655, 892744243, 656811828, 640090670, 909521973, 925893299, 472127342,
- 675093783, 221003037, 33883913, 287387687, 859908645, 235214866, 2080972047, 806361623, 1093482804, 689323570, 84215319, 940445444, 372317732, 824652304, 391058725, 39584056, 1647265294, 319882281,
- 287516742, 16920085, 201851137, 1108478219, 54473001, 16851975, 406135684, 469830415, 724975139, 370412041, 437654038, 118888488, 83951877, 1597181199, 3423017, 4280680450, 32506353, 852180,
- 16777246, 336926258, 572720646, 909391142, 102897462, 387322901, 842208790, 640955702, 385951271, 1815900520, 1031103816, 1161638765, 1058148112, 323107623, 3556844305, 1934388854, 1198686784,
- 1562328427, 575678035, 1432432171, 1109416495, 234881280, 1828909311, 1174457857, 117506048, 353633813, 370611732, 640029975, 117842467, 875889214, 589506356, 337057063, 117835284, 790766342,
- 857093890, 1043805746, 640955651, 101065255, 37627655, 842216247, 118961974, 16908033, 789055751, 353575966, 50534433, 1429668098, 67305774, 406196229, 253368337, 285937949, 50528770, 570622466,
- 119022894, 303437588, 2609337201, 17302562, 693005448, 505874991, 470025477, 33686018, 911230763, 20398365, 1043826231, 738923040, 421074445, 202380829, 322386735, 103691290, 253168909, 85005073,
- 4522500, 4261609474, 17695473, 3145941, 922746943, 370414869, 638916374, 102900518, 842336006, 909522742, 892614199, 909521973, 926299703, 842217014, 336926230, 117835271, 572720646, 370545923,
- 909521459, 656815157, 2820809510, 539435271, 605296940, 522266161, 17040902, 50462977, 640954889, 1446518848, 1007689264, 405283390, 908077363, 658844962, 1025579292, 2501710462, 50864680,
- 16843289, 85787137, 471336453, 2654486279, 287126582, 438454324, 978792983, 891371072, 17699877, 438345743, 741758000, 2234703, 4280680449, 26935642, 4063444, 372446976, 909259542, 640103477,
- 654454311, 875898406, 909522742, 842217015, 101062422, 640033543, 656811559, 354558758, 370611732, 372381462, 101127189, 656810531, 245563966, 505624846, 839915057, 338047526, 404566058, 723663884,
- 490087476, 469894663, 16843265, 841289225, 286990719, 758723377, 389886529, 101062441, 437666053, 118888488, 83951877, 1729891598, 408498752, 370223116, 907808524, 68488495, 386404883, 392116130,
- 469830415, 724975139, 370412041, 131094, 49413926, 13893933, 2687001, 102039808, 353765126, 587597332, 640099874, 909521973, 387330611, 87175958, 336922146, 857085463, 875902514, 36054822,
- 590419501, 1198341422, 706370618, 474442813, 673982769, 1056243248, 1041440581, 323107624, 3288408849, 17830431, 1900631872, 1093217600, 1030572122, 17500936, 1179800413, 1432432171, 1109416495,
- 256, 3137466879, 755027457, 352387072, 370611732, 926298675, 101123863, 639771398, 889335335, 117575223, 922893863, 858920499, 926299698, 640026391, 67502370, 271125764, 470096157, 286855706,
- 118173983, 855704070, 119154489, 303437588, 119545156, 290085161, 958990339, 3666477359, 604907303, 487853322, 402982681, 655756563, 84016934, 253169165, 17896209, 33686787, 66117, 4279304193,
- 32506359, 3277013, 925303040, 336926230, 101058310, 640098851, 875836710, 892745271, 640099892, 909522215, 34477879, 387322901, 842208790, 640955702, 17179171, 862781978, 725300792, 692463677,
- 16847124, 151520001, 525087801, 33882634, 688589577, 1011695128, 17498675, 371726485, 1765622885, 589112886, 187577617, 976491046, 68232213, 85721348, 520622098, 791504733, 286264883, 1531926378,
- 131073, 49413670, 13893982, 5046333, 892675328, 37631028, 842217015, 336926230, 352781830, 370606622, 638916374, 102900518, 909260039, 1026962999, 656811522, 875898406, 102184758, 352716550,
- 370611732, 909521687, 875902519, 572728870, 352716295, 16848641, 1712849410, 1009932345, 50416238, 386402826, 439230489, 439630367, 135005981, 589188410, 273371177, 570954515, 2233540133,
- 322707463, 439295523, 118099220, 1309287957, 270416228, 1748790792, 1114523203, 589596422, 50463757, 16914690, 52232706, 773850115, 436428843, 946085657, 287142735, 856429068, 527185742, 486607908,
- 995438361, 269763433, 16789806, 3908960256, 3523342337, 15360, 35525413, 926094871, 117575189, 656867886, 639043079, 102900518, 909260039, 36574007, 589702695, 654778914, 387323447, 909522711,
- 842208821, 101061943, 1662189831, 84347660, 471344920, 270212640, 1342968084, 251731037, 437260053, 321004561, 388374655, 439619850, 34015492, 388965228, 302926638, 521146659, 2232622366,
- 454820095, 19007244, 134678038, 638715911, 1239079972, 16843283, 622271490, 1582304257, 639701558, 287905794, 2894480452, 51264544, 385948675, 65575, 49413649, 14156155, 620757084, 336860437,
- 370611734, 638916374, 102900518, 909260039, 1026962999, 926230020, 875902518, 656811814, 926299701, 352456215, 890705428, 654454324, 389481022, 35455502, 909522742, 589706293, 654771746, 387323447,
- 336926230, 101058310, 67272961, 588974083, 521809439, 488256570, 3540519943, 50397441, 876153096, 34217804, 1161232900, 16843009, 303371796, 16908554, 320286538, 218310707, 460063238, 235670557,
- 1646465813, 907227393, 84680254, 419563015, 33685762, 67306269, 338308896, 2601527594, 474880302, 67375396, 302324737, 1579091984, 1145646439, 807177485, 137775671, 151587594, 1061827356,
- 991210536, 1093746974, 402719060, 421137448, 605896215, 1178148427, 637534464, 1526921215, 973133057, 922812416, 336926230, 101058310, 103227939, 640098851, 909391142, 101062455, 336922119,
- 842208790, 657732918, 842208790, 336934710, 857085718, 875902514, 102900518, 1668940039, 757416253, 941439270, 1228090908, 1461787692, 404099154, 807151369, 52240158, 84152073, 218761485,
- 908861461, 184760385, 682426631, 1162438936, 539307102, 506476857, 2119645028, 336401695, 1013068812, 1195587937, 16852243, 674693377, 1797132850, 22958677, 196609, 33423119, 10289676, 3342375,
- 318767167, 926299701, 352456215, 387323412, 353834518, 572728870, 859113222, 909588022, 640955702, 656811559, 840114726, 101979414, 891691555, 842217012, 101979414, 891691555, 941241908, 17310275,
- 83951874, 605488389, 387593257, 588263726, 50463508, 184813317, 520622609, 354295062, 2921143828, 354295316, 18750996, 302587024, 1261045775, 1178941009, 84215322, 33693186, 35389953, 1812794632,
- 53559658, 16843011, 354291201, 337517845, 354295317, 337517845, 50339349, 4160688384, 2634215425, 1040200192, 18944, 372713217, 101979414, 587597319, 640034594, 926168117, 875902518, 656811814,
- 926299701, 352456215, 370611732, 909259542, 589706293, 839058978, 101979414, 891691555, 842217012, 101979414, 891691555, 436287028, 942894338, 1026243382, 338249256, 16843025, 956893187, 169823284,
- 151127298, 405342987, 859589950, 377031426, 336928285, 366877982, 336928285, 2499878430, 1695950872, 912866628, 287513894, 638266933, 356135954, 67375396, 302324737, 1562314768, 858729831,
- 1779503118, 22761303, 354289409, 337517845, 371006997, 337517845, 50339349, 4060030464, 3674402817, 503319808, 12032, 353776129, 587597332, 875898402, 571946550, 370414854, 857085463, 875902514,
- 656811814, 891692835, 875898406, 372388662, 117838869, 1902647041, 1699245116, 862797173, 252724541, 992427794, 588321602, 51523371, 370803457, 84023830, 1853281281, 2185261900, 1030440818,
- 642997535, 774578768, 1513051489, 1934377504, 285868817, 471603204, 487719960, 234881536, 3976329215, 838916866, 16640, 372713217, 101979414, 587597319, 640034594, 926168117, 875902518, 656811814,
- 926299701, 352456215, 370611732, 909259542, 589706293, 589760034, 891692583, 842217012, 101979414, 35062023, 909652845, 675097403, 286533958, 50397441, 876153096, 34217804, 185139717, 1041770763,
- 36912205, 305072139, 370803204, 67246613, 672699649, 1027892502, 489043561, 775229731, 873604619, 287577402, 469828612, 135270917, 761748767, 269366063, 1331128849, 1936392539, 402985245, 68688924,
- 33561874, 4160693760, 3674364674, 1224740352, 587268096, 891692583, 842217012, 101979414, 372709127, 101979414, 587597319, 587605794, 640034594, 926299189, 117835287, 370414854, 909259542,
- 371668021, 909259542, 370414903, 842208791, 640955702, 117842467, 288315137, 370803205, 84023830, 1094542097, 958803237, 773601309, 472664371, 273831713, 654907414, 522072092, 252248861, 151848196,
- 538250506, 943797804, 34016003, 253784833, 471603204, 487719960, 1763190983, 744375625, 960045093, 929308208, 354385495, 873206797, 962673762, 622020419, 16843009, 305276983, 1381329694, 65886,
- 4294115074, 37815025, 3539148, 16777284, 587337251, 656811554, 640099878, 891496226, 102184758, 370414854, 842208791, 590689590, 640099874, 926168358, 389165878, 907351574, 118961974, 656811783,
- 572728870, 370414854, 35001879, 1057229827, 1496925289, 117506612, 219218443, 171729690, 303301121, 1094401062, 659764274, 876886321, 103069510, 286792454, 1965754118, 1041437187, 875703349,
- 22157098, 1486710862, 273314367, 16843531, 136251165, 755767316, 2605654877, 319886475, 1497195545, 550576168, 100999238, 20251142, 1447842085, 909458759, 235739231, 637534976, 1728246270,
- 1023463682, 1577078016, 889520128, 640090670, 909391142, 875836214, 37627686, 101062455, 387191829, 101979446, 117835271, 370410013, 370546454, 640029975, 117842467, 926298677, 155006518,
- 101123618, 387322901, 487002902, 858920452, 909588018, 19280949, 506275358, 1027552786, 33639280, 303371283, 16909066, 423839736, 67184941, 588974084, 488254751, 488256570, 554175495, 960827941,
- 24057647, 520489735, 1277104184, 67186237, 1981286153, 1013729870, 1045115420, 151718408, 978003465, 18423569, 511333604, 268503051, 909783053, 101123604, 16914690, 52232706, 773850115, 593829419,
- 459976206, 671811389, 343428995, 1117847817, 793076509, 421331307, 1869961519, 553648640, 1040379647, 1124081154, 18176, 101062419, 352716295, 842208788, 36583222, 859190325, 336926258, 369559046,
- 926298675, 640955702, 875898407, 372388662, 101979414, 587597319, 103228962, 639771398, 909391142, 926299703, 3173061921, 253960220, 741938707, 102379034, 404619782, 302781969, 337910794,
- 338236207, 320413723, 387393304, 625219092, 588721180, 1093282103, 303767590, 1124152361, 2768354814, 338042142, 840975641, 488446273, 587796510, 269818413, 705769520, 992350741, 639643168,
- 689377569, 1630284101, 624373548, 773926442, 1512846159, 2603030050, 131123, 50069272, 10093356, 8978557, 926226176, 1043805750, 640955651, 656811559, 35533621, 842150706, 859256374, 101062451,
- 36578069, 589702695, 352781858, 336856596, 370414613, 909587221, 926299699, 104019766, 370414854, 640033559, 654454311, 335946531, 336008981, 370546452, 909259570, 926299703, 909588022, 238237494,
- 102044930, 572662534, 639772199, 102900259, 656610055, 875898406, 372388662, 588195351, 33621017, 134676738, 405610503, 387722279, 757010194, 272906568, 553779720, 67306241, 407718664, 16849192,
- 223362321, 50532634, 33693955, 18940162, 302449925, 255605301, 16843009, 791945748, 117979452, 16909831, 33751553, 33883168, 135995670, 1109138986, 538121276, 385300022, 320283011, 269814541,
- 16850437, 1090916620, 1900248934, 101190239, 33628417, 16843009, 1010505227, 68101156, 33622026, 405678614, 437127437, 50406184, 286066434, 540353073, 706752540, 101123869, 201982211, 24606466,
- 33622541, 352651013, 84673823, 705302790, 269624372, 16843266, 33751809, 370429692, 219221261, 196625, 50069272, 8323884, 8978557, 385876117, 909522741, 889404983, 640099892, 859121446, 858915358,
- 909521458, 389231415, 588580358, 640090670, 102900518, 101979399, 336925716, 857019924, 909325879, 926299958, 352716339, 588715540, 774317606, 589506306, 387257350, 387191815, 858920470, 909588018,
- 909522742, 926299703, 352456243, 587597333, 640098850, 572728866, 319227426, 336926258, 639771398, 859190325, 336926258, 639771398, 641086517, 68756239, 16908801, 537331719, 740759597, 252843804,
- 961031455, 34082884, 50405634, 1258816515, 422058061, 1024524545, 286920016, 553845507, 16908802, 84214049, 976556551, 16846652, 571736321, 960245556, 101123848, 33620226, 69206531, 555090437,
- 506071067, 339493404, 909516819, 505222545, 488510485, 505222877, 488510485, 16850437, 1090916620, 1900248934, 101190239, 33628417, 16843009, 1010505227, 68101156, 33622026, 405678614, 437127437,
- 50406184, 286066434, 540353073, 706752540, 101123869, 201982211, 24606466, 33622541, 352651013, 84673823, 705302790, 269624372, 16843266, 50529025, 353770884, 370417181, 353770781, 370417181,
- 65565, 37748495, 11862730, 16777330, 926299669, 842203710, 370546454, 101127189, 639771398, 656811559, 842208823, 875902518, 102900518, 335748359, 370611734, 638916374, 102900518, 909522183,
- 889404983, 891683644, 117835298, 101123590, 925304582, 657732661, 842203678, 104281654, 639833862, 36582694, 570568231, 352716323, 151396097, 455946003, 510214419, 558570523, 252129886, 50463243,
- 773065479, 1785079878, 52901660, 503842310, 406732075, 741357598, 117835547, 788594948, 117970738, 33686790, 16850433, 625696581, 1130253353, 503383813, 134283521, 386667025, 20398373, 1272709377,
- 151257602, 657195528, 2672061987, 19605332, 201985025, 2152204809, 125665619, 556148745, 440878126, 33817603, 33620511, 50470658, 1092224005, 757163644, 893726759, 117835267, 286269462, 1009582341,
- 34739472, 67174660, 442248195, 604113927, 33754659, 774111745, 131083, 50069272, 10355456, 5636169, 926226176, 1043805750, 875901955, 774317606, 389359362, 858915358, 926286394, 858928694,
- 101062451, 36578069, 589702695, 101123618, 35460102, 386014740, 355669526, 572719662, 588449286, 909522743, 353776179, 419890708, 68626710, 16843266, 67437826, 405086220, 337260071, 453970191,
- 758329141, 136383506, 18940418, 134480643, 622480972, 16908568, 134546947, 841493536, 588452642, 2233520177, 151785995, 437587723, 33627909, 285609736, 1618757925, 120086877, 33752582, 33620255,
- 16843009, 974523393, 254026813, 17304068, 1346315777, 1028871487, 118498375, 35652872, 33620226, 176291330, 235931409, 989709, 4281139201, 44106475, 4522174, 640090368, 640034598, 101130787,
- 387322901, 842203710, 370546454, 926298675, 117835285, 572720646, 589702950, 369559074, 909259542, 101062455, 587597319, 891692578, 859190836, 34477874, 40108551, 420021761, 1233990489, 654377280,
- 185408043, 723788575, 606737426, 521803018, 369758759, 287592980, 2769558047, 727530876, 84215562, 1916562234, 2959172270, 141588086, 33686537, 320091394, 1578702343, 252146772, 152771339,
- 202313482, 169940754, 269816080, 186911238, 495746063, 235932191, 1545346832, 2708237477, 689448793, 16786480, 3959371520, 3187804674, 17152, 370553655, 857085463, 875902514, 654454311, 891692838,
- 859190836, 118953522, 117835271, 656811559, 640099878, 352723491, 370546452, 387323415, 101979414, 572720647, 926230310, 993408564, 118096413, 1345604880, 319567453, 693776168, 1164327229,
- 36460075, 84082952, 17105947, 621679619, 558316853, 926233104, 827333182, 746147629, 16922442, 858115585, 1395270929, 119490888, 403442440, 1012803612, 303116632, 620967954, 841155110, 135595779,
- 926499864, 219418657, 688788493, 593442142, 320081723, 421205837, 419430656, 721550847, 838906114, 890699776, 926299699, 875889214, 774308398, 372582146, 909259542, 588592950, 235340302, 370414851,
- 370546454, 640029975, 436609571, 68757009, 16909060, 33620482, 589832971, 689910076, 521016867, 16910365, 50397441, 436668168, 574042150, 503528227, 202246402, 511415627, 103629125, 17042447,
- 16908575, 18809089, 101583877, 981495883, 86464590, 503448580, 65794, 4279828483, 53150205, 3276927, 4849726, 859117312, 1043805750, 775173378, 36579074, 370554151, 909521459, 237180215, 51250946,
- 370545685, 387323415, 589702677, 840107554, 101979414, 891691555, 842217012, 101979414, 891691555, 286930484, 67377446, 33620483, 184680706, 1008936995, 589897521, 488574486, 16843272, 134414593,
- 639239943, 589444912, 487920187, 504632606, 488025373, 504632606, 35521309, 1259081225, 1159625621, 252063041, 520160268, 16843265, 83959553, 1258688012, 1312456816, 67446616, 35521028, 2147680513,
- 487921181, 487986206, 487921181, 487986206, 4110352640, 855719679, 872460802, 923205632, 926036758, 53818934, 36582452, 656811559, 656876070, 857085493, 926298674, 117835285, 286589454, 117835284,
- 572719630, 875836711, 572591116, 67504936, 100794881, 252446212, 319555850, 405223978, 673197094, 100992796, 101056769, 575290125, 124786446, 1074865182, 1510867273, 220217971, 33817860, 520159489,
- 16843265, 84082976, 505286149, 943019262, 1311577123, 185992240, 131095, 66125575, 11600607, 8585329, 102039808, 117835526, 352785414, 353699334, 336925718, 370542356, 842412851, 353776179,
- 587597332, 640098850, 102900518, 909522183, 1060517431, 53359618, 589702695, 589432355, 101065251, 117575175, 572720646, 875898662, 372713268, 909586995, 909522742, 640037941, 523449639, 926298626,
- 842215990, 352532022, 842208790, 640955702, 572728871, 118818594, 522839298, 16844293, 16843009, 219024897, 85529358, 2001041522, 219284812, 605759517, 522855990, 17106183, 16843265, 100926467,
- 421276709, 370411556, 16843795, 572202767, 269102688, 554435085, 303969572, 50595349, 271263499, 123028582, 1007757361, 522921252, 321002053, 488658504, 386682407, 2969698583, 84214046, 369299462,
- 202978836, 353440011, 101384706, 1526792449, 1013399640, 16843265, 100801794, 505021703, 2154139931, 84681289, 167839497, 2759406380, 1077225838, 219546114, 503780375, 1718492463, 892625211,
- 537005617, 16908547, 16843009, 102735357, 726688004, 35066179, 33589531, 4244576256, 2986538499, 2583726592, 889257984, 656811572, 891758118, 840308531, 926298675, 117835285, 100798214, 370480390,
- 370480404, 372388658, 353769238, 587597332, 640098850, 102900518, 909522183, 892745271, 640100149, 572662566, 335939334, 370545685, 386014743, 589440533, 101065250, 842413319, 926299699, 892600894,
- 654454324, 891748910, 842208790, 571815734, 51250950, 387191829, 842208790, 353580594, 842208790, 640955702, 117842467, 1224873237, 100926466, 1108485154, 537994770, 538976301, 16846087, 16843009,
- 957353998, 1729506114, 88832069, 673123602, 556868640, 218765605, 672465160, 891561803, 33632317, 201523459, 774251555, 504827933, 184953907, 68692481, 16908802, 84280836, 723394062, 992027960,
- 86190897, 16843523, 1568024833, 1914708767, 1192436250, 173823319, 2315327513, 576083237, 17303812, 33620511, 67182081, 756024578, 101457467, 102043665, 134414617, 1081026569, 33635175, 503447809,
- 84148738, 2386639147, 16843265, 170465538, 155015732, 33819917, 16843294, 33627649, 554177034, 1315142981, 68630113, 16909316, 33686047, 151461633, 1361908741, 169083202, 4261544450, 67522035,
- 1162497889, 1430651393, 251658496, 604241151, 2030089474, 352387072, 1043805750, 372388611, 353768983, 370545671, 640029975, 117842467, 909522741, 889339447, 640099892, 102900518, 335748359,
- 370611734, 638916374, 102900518, 909522183, 889404983, 891683644, 117835298, 101123590, 925304582, 657732661, 842203678, 104281654, 639833862, 36582694, 570568231, 352716323, 151396097, 455681044,
- 1984565270, 17764636, 891954442, 891034683, 405475113, 16908548, 1276910871, 691348795, 134612483, 1044196126, 808984088, 101129004, 16843783, 135737903, 33883655, 18743554, 1264534785, 1582049573,
- 17237315, 16843038, 202510600, 927016215, 3691053313, 67240523, 17041159, 1125656109, 640306742, 52364043, 520290818, 319488769, 473639686, 387399477, 671745555, 1143873830, 67312199, 35586564,
- 520225281, 67437314, 1719419162, 807873825, 100873541, 538314502, 17109264, 353385517, 17039890, 738395137, 201792092, 237184002, 33620483, 732708, 4279762946, 62325500, 6881438, 318767222,
- 336860423, 504829462, 638916354, 101065251, 909587719, 909522742, 36582453, 654454311, 857085493, 355939890, 235341318, 906108162, 906116918, 891761717, 842208790, 236271414, 68028162, 504825607,
- 370546436, 353834519, 572728870, 70125318, 925045543, 859190839, 336926258, 266209030, 50397441, 2133271306, 773853449, 404690728, 17040644, 50529282, 757342475, 974658872, 135669819, 134350856,
- 2104822032, 622594839, 421861144, 219357472, 908006152, 453788247, 506812485, 488836373, 454362888, 420088860, 724048159, 1916819004, 302744864, 252381707, 1174477333, 1262695694, 185143589,
- 503448331, 33620227, 84017438, 1599867143, 710646132, 67372293, 33759234, 18874882, 251921155, 445726004, 1963527688, 101193340, 16850179, 35455233, 118032644, 1345395728, 1092160317, 337457748,
- 52044557, 35652354, 402784514, 1413032488, 2177499453, 268898570, 253365518, 402653696, 251919871, 184602115, 35328, 774316801, 909391106, 320287283, 654454327, 857085493, 355939890, 117835299,
- 35455502, 336925718, 370611734, 773134102, 102900482, 909444870, 909522742, 891748927, 101123893, 101058310, 35521295, 640029975, 102900514, 909444870, 909521714, 892745271, 640955703, 36579110,
- 370554151, 909521459, 102896951, 117835271, 352785428, 924129047, 2600535102, 505444901, 554899208, 36566067, 791487754, 958604605, 489163563, 16974598, 202048257, 337255690, 622864931, 706160433,
- 84215584, 16908545, 1445863713, 388567596, 16910386, 539567114, 336862246, 103561255, 388694283, 16974340, 84346627, 689839630, 605299260, 590030384, 16909317, 553713921, 825507885, 1093141306,
- 185537297, 4265022993, 455095683, 18874631, 520159490, 134940417, 506013714, 140595857, 51591482, 503382531, 16843009, 35455233, 470157062, 2190614565, 623129394, 322068274, 171514928, 102308611,
- 16850434, 503382273, 302645761, 3458216197, 677666873, 33817605, 33693441, 520159489, 302516487, 488182299, 109605734, 960901154, 33571897, 4127133184, 2835569410, 1040199936, 859242496, 909259542,
- 654519863, 891758118, 506934838, 926357252, 859243582, 117835285, 101122574, 656810531, 856883774, 909259542, 101069623, 1613111843, 505616142, 705636150, 353710128, 1009329453, 420876055,
- 304822565, 438508050, 1192565783, 375557669, 705368089, 421663545, 1812268550, 727388442, 102303547, 1178352454, 1228481369, 1668048681, 18753574, 84674588, 1429018378, 673672847, 808799031,
- 739125562, 791397886, 138088220, 370545674, 861889027, 1364216364, 402653440, 251885823, 1929425154, 354746368, 572728870, 101058310, 640033543, 589702695, 889652770, 926299703, 875889470,
- 654454324, 589768230, 891494950, 842208790, 102053686, 101058310, 370410247, 924194327, 370618930, 909259570, 71186230, 640037941, 656811559, 855776821, 926299698, 117835285, 336921358, 386014740,
- 858986006, 1110118147, 357256236, 554176526, 353308679, 1093487945, 472058668, 50726151, 84083201, 387056644, 101253905, 488982077, 489497899, 33817862, 67371522, 637671959, 506273302, 119355956,
- 17041157, 101057025, 372055303, 573125157, 672342313, 100927264, 16843010, 470089986, 538708010, 336593410, 741092109, 269749547, 18743810, 67568642, 1298216473, 625572960, 100992014, 18809089,
- 503382274, 134743554, 3137220906, 185286735, 16843017, 67372290, 2186094094, 794906724, 33884165, 16843037, 503382273, 84346113, 1769684247, 456680013, 168822028, 167772672, 3573742847, 771798786,
- 14336, 504574721, 638916354, 102900518, 909444870, 640955702, 36382503, 336922119, 353834519, 572728870, 909444870, 909522742, 839062327, 842215958, 20133426, 301276262, 874322964, 521082675,
- 540353838, 2285373443, 188159345, 674695189, 823728691, 119087139, 3742572037, 622333557, 523184159, 4256629262, 136521915, 33693954, 553779457, 118294529, 2257392906, 85003291, 35718401,
- 553779714, 34014465, 2701208381, 16898558, 520094208, 688061695, 1241559298, 23552, 926299415, 875889214, 892679988, 656811572, 891758118, 840308531, 37435187, 117835287, 654454307, 572719662,
- 34473734, 370546453, 842412851, 353776179, 587597332, 640098850, 572662566, 121046790, 842208790, 640955702, 572728871, 118818594, 33955658, 33620226, 520619525, 356717090, 1652301112, 50662454,
- 35455749, 118032389, 354370099, 33627171, 235798785, 420744461, 1199273221, 319114618, 237312525, 454692618, 588906869, 559565331, 223291934, 50403094, 84937749, 152639241, 1535914812, 69225801,
- 520160774, 151060738, 741426709, 50466088, 33620740, 373572626, 16843073, 1732270171, 16908604, 525337089, 1331758086, 386941996, 8985346, 4280221699, 36242173, 3801267, 6225997, 909448960,
- 926299703, 892810292, 640099892, 859121446, 858920471, 926298674, 842215990, 353769238, 101058324, 387323399, 101979414, 572662534, 589702695, 117842466, 370545939, 926298675, 590624054, 336004642,
- 51713030, 857085461, 875902514, 589702950, 352781858, 102713863, 16843011, 487131654, 272831008, 336661276, 487467557, 389491468, 722679350, 388900393, 1299859286, 420286727, 235540517, 225909786,
- 857999888, 327958803, 16848158, 1259545114, 706552410, 320474448, 219480833, 621873167, 2558099977, 84292167, 35586309, 16908801, 1193479949, 370224711, 185205260, 1715496234, 16843068, 3019964929,
- 151060766, 2001674761, 673448963, 821954579, 1610876191, 272903248, 453116183, 65673, 50069272, 11665920, 385876041, 909522741, 872627767, 640037941, 654454311, 35526453, 37368626, 909522742,
- 389231410, 588580358, 640090670, 102900518, 335939079, 504627741, 370546434, 36574515, 101065251, 388568601, 16908804, 84214273, 622857220, 439232280, 252251924, 858731803, 554439213, 553779720,
- 67306241, 441338888, 33626149, 84280065, 673980424, 320021042, 520433955, 252183041, 1227165958, 1633509500, 101058344, 18809347, 16843265, 201392385, 607992342, 168038180, 637600008, 1430212671,
- 608648531, 84412176, 16908832, 33554945, 2029978368, 2969757698, 2332057088, 859242496, 909588018, 909522742, 640037941, 523449639, 926298626, 842479158, 355677750, 117835299, 486999558, 336926466,
- 35526422, 352521751, 891692579, 640090670, 639772454, 656549415, 572727846, 570820358, 117835271, 101123590, 891488020, 925247028, 857158451, 909521459, 909588023, 909456436, 892613686, 36582439,
- 589702695, 101130786, 235349543, 51250946, 639637763, 119676685, 655033605, 1147539756, 724634970, 673462803, 269884971, 17111596, 33620225, 655230468, 101188651, 16850948, 202114306, 118561543,
- 588334900, 102437139, 271531015, 641013544, 33751302, 102760705, 858950154, 957883440, 403185471, 16843011, 134414849, 623446024, 923341064, 67709714, 16843012, 707599373, 1762986248, 1048072539,
- 34484533, 50397984, 16843009, 520159489, 118885377, 1204690965, 756243228, 134809633, 738853122, 135410742, 656933391, 84018449, 16843009, 33620225, 251724033, 454821396, 168301067, 306004249,
- 33751297, 201991943, 824973847, 2164788760, 203706183, 17040388, 167837953, 639963141, 1349558383, 402653440, 738393087, 2097197314, 890699776, 926299703, 875889470, 640034598, 506672423,
- 842215938, 926299698, 102183731, 774051078, 640034562, 117842467, 335942677, 336860436, 926094614, 909521718, 859256375, 336922118, 639833878, 36579110, 102966055, 118953236, 370611220, 842215958,
- 909522742, 926299703, 859256374, 353698318, 572720646, 572925730, 572662566, 254150406, 17045795, 117506562, 757073672, 472655640, 521081367, 1144604717, 33687568, 50528545, 1296762884, 18425880,
- 1346179329, 51452429, 35717891, 553714178, 117769473, 1010447634, 16843023, 874648577, 137968687, 33949447, 50462977, 84156418, 455153154, 471738888, 320093250, 87438880, 201392414, 1715537425,
- 1601258367, 17172490, 16908577, 184615169, 607927062, 168038180, 369230088, 219688490, 672796169, 33751331, 823201031, 471872802, 489300016, 50726663, 34343425, 218199927, 84017418, 521471239,
- 100994053, 875170321, 34607652, 16843010, 16777987, 4244570880, 3003314691, 40192, 370554113, 926298675, 119670293, 235341318, 54200067, 909588023, 657732918, 857085493, 355939890, 101122574,
- 387318287, 353829406, 639837734, 572662566, 36570886, 336930599, 504829462, 638916354, 102900518, 909587719, 37631798, 235340605, 640026370, 102900514, 909522183, 909588023, 909522742, 640100151,
- 36579110, 370554151, 926298675, 336922133, 387383838, 53346875, 16920103, 557526386, 120404768, 371786253, 16843011, 436470017, 1865356810, 185405454, 387523868, 572528932, 1578961941, 1770071590,
- 303373598, 285347593, 185009689, 1125652758, 37635682, 184877828, 943334175, 993465620, 118758935, 1040385028, 440819778, 118167320, 354493956, 420940817, 655500563, 623257681, 168640311,
- 438181908, 622335780, 487131932, 254752318, 16846369, 67306242, 2466390029, 33686304, 16850947, 353437954, 1213345311, 387353404, 50791703, 16843037, 84024577, 1981090057, 2308976430, 17244197,
- 16843040, 537002241, 22708568, 710890312, 50660612, 33693186, 18743810, 67437570, 439563285, 1442924617, 35871870, 537002497, 403441409, 405739553, 791832114, 121979950, 33818375, 16843037,
- 100867329, 1344868870, 1733573700, 84088375, 16777989, 3959369728, 3187824386, 16128, 37619475, 842217015, 336926230, 101058310, 387323399, 101979414, 572720647, 640034598, 35534631, 892744243,
- 640034612, 909583139, 909522742, 640037941, 117842467, 492570118, 16974339, 2052096367, 287318597, 656678947, 589842451, 1867026512, 84214839, 1212228624, 913464878, 237779991, 338241039,
- 1429284127, 390801464, 251795729, 522198017, 1378761243, 373499190, 117968652, 1378683917, 1125995051, 336536094, 639568151, 1195989264, 672010536, 235472641, 1261511225, 236132139, 65574,
- 66977560, 11665935, 16777342, 654454327, 857085493, 355939890, 117835299, 35455502, 336925718, 370611734, 773134102, 102900482, 909444870, 909522742, 891748927, 101123893, 101058310, 35521295,
- 640029975, 102900514, 909444870, 909521714, 892745271, 640955703, 36579110, 370554151, 909521459, 102896951, 117835271, 352785428, 924129047, 671220798, 621412909, 624766765, 187382051, 50732328,
- 50397443, 487197707, 706941978, 657532192, 119548439, 16844037, 555811074, 304895534, 137500457, 604635394, 472260649, 942085140, 17499692, 33822507, 117637379, 504235271, 574368030, 640689172,
- 67445547, 16843010, 1076699393, 37368116, 455095578, 18874631, 520159490, 134940417, 506013714, 140595857, 51591482, 503382531, 16843009, 35455233, 470157062, 2190614565, 623129394, 322068274,
- 171514928, 102308611, 16850434, 503382273, 302645761, 3458216197, 677666873, 33817605, 33693441, 520159489, 302516487, 488182299, 109605734, 960901154, 33571897, 4261353472, 2835549955, 2332036096,
- 855703552, 909259542, 101069623, 19276323, 654454327, 857085493, 355939890, 117835299, 35455502, 336925718, 370611734, 773134102, 102900482, 909444870, 909522742, 891748927, 101123893, 101058310,
- 35521295, 640029975, 102900514, 909444870, 909521714, 892745271, 640955703, 36579110, 370554151, 909521459, 102896951, 117835271, 352785428, 924129047, 503383102, 727388442, 85591866, 1144863559,
- 36505089, 791487754, 958604605, 489163563, 16974598, 202048257, 337255690, 622864931, 706160433, 84215584, 16908545, 1445863713, 388567596, 16910386, 539567114, 336862246, 103561255, 388694283,
- 16974340, 84346627, 689839630, 605299260, 590030384, 16909317, 553713921, 825507885, 1604911930, 1363749939, 901512784, 17242912, 16908576, 117513985, 672270347, 1385242153, 960104545, 33751827,
- 16850433, 16843009, 117834269, 539302918, 858948242, 1597121828, 472912690, 453184057, 503449113, 16843009, 33627649, 822415882, 1614401056, 67446884, 520159748, 16843266, 151461633, 303763976,
- 1936071961, 807536264, 1144600902, 402653440, 3070426367, 1761653506, 118685696, 370414613, 35526422, 589698327, 117835298, 909522741, 892745271, 654454324, 891748910, 842208790, 102053686,
- 34473734, 909509149, 892731967, 372582196, 909259542, 34477367, 117706247, 69080839, 387323415, 638916374, 102900518, 654585351, 16846814, 587858689, 285835047, 388509216, 84154399, 67240196,
- 554369795, 490220836, 674970136, 134744086, 152045570, 186088821, 387458332, 555751717, 319294739, 1113011743, 1480923916, 219487797, 117972259, 203168533, 421468426, 1446783784, 239468864,
- 625689397, 185272593, 52298243, 503447809, 117768705, 1952406537, 86662041, 33817605, 33686304, 50405378, 873399299, 135958845, 2088044814, 50726934, 16843037, 67247361, 268896521, 1028665628,
- 1413552395, 219422002, 33757731, 33693699, 672662017, 1028929834, 117440768, 4144165119, 1627435266, 352387072, 101123618, 101979398, 370480404, 35526420, 36574487, 101065251, 909522183, 926299703,
- 775173942, 640034563, 570827555, 101065251, 117575175, 572720646, 875898662, 372713268, 909586995, 909522742, 640037941, 523449639, 926298626, 909586998, 4144117298, 67510320, 16843011, 723912961,
- 539632404, 405156134, 84352810, 16908549, 67305729, 791152132, 337846564, 17044246, 455020289, 170811426, 201461008, 506799137, 67507474, 723979011, 1514432016, 304820493, 707274042, 531694111,
- 352979975, 403507478, 2155060761, 136258571, 16850433, 16843009, 117834269, 304027654, 1233151386, 151325730, 738853127, 1856272691, 37762345, 386733570, 790497044, 996568605, 825570401, 52429326,
- 16843265, 16843009, 285212928, 2063856639, 1912648194, 587530240, 640099878, 640034599, 387322919, 353834518, 572728870, 372573958, 37631798, 640037941, 656811559, 857085493, 506934834, 52303619,
- 926299671, 372717110, 909259542, 101127479, 34473734, 353633799, 386014740, 353834518, 589440550, 117835298, 926298677, 892679734, 120927527, 3137406222, 135137041, 523248930, 84222014, 590422022,
- 924654126, 102641705, 33686789, 487065350, 288240173, 253041685, 455350808, 404234781, 876809746, 455161631, 722933283, 421402144, 16974597, 67174657, 520619527, 455680545, 891424527, 152706348,
- 520161293, 506150443, 252515608, 1296896799, 1132938086, 353629435, 35521037, 537002497, 269880321, 1333763668, 117776720, 18809349, 570556930, 961362230, 875841595, 1888362022, 38763586,
- 537002498, 134676737, 774311174, 1647730734, 68631413, 503383302, 16843009, 50536193, 3124570629, 1161449591, 1130268254, 16790838, 4261353472, 2986479363, 33536, 842413335, 926299699, 926234166,
- 640037941, 654454311, 857085493, 926299698, 117842453, 336921358, 35526420, 909259315, 775173431, 640034562, 370554151, 926298675, 101065493, 486673927, 353637890, 387323412, 353834518, 572719662,
- 889652742, 909588022, 1043609398, 641021186, 102900518, 353633799, 504829460, 638916354, 572727846, 102368774, 388694283, 16974340, 84346627, 689839630, 605299260, 590030384, 16974597, 1008468225,
- 824852821, 50403108, 486999558, 624766764, 187382051, 50732328, 50397443, 487197707, 706941978, 657532192, 119352599, 16844037, 1378943233, 945305912, 50463745, 539239180, 336862246, 503527463,
- 302645761, 3458216197, 677666873, 33817605, 33693441, 520159489, 369428743, 21255471, 16845584, 587268609, 304829768, 33818118, 16908576, 117513985, 672270347, 1385242153, 960104545, 33751827,
- 16850433, 16843009, 117834269, 103095302, 154550580, 33686314, 153556994, 219051342, 503448589, 16843009, 754975232, 4144163839, 335592962, 9728, 370553345, 34477077, 656810531, 875898406,
- 909522742, 117842455, 336922118, 857085463, 875902514, 2667652646, 945134185, 1347389285, 673590668, 2268214074, 543701304, 590618395, 2188659305, 3187832128, 1382520659, 1027238285, 1283534647,
- 707563089, 640493358, 2151573793, 2755674722, 1368679825, 402653440, 251919871, 2013311490, 352387072, 101123618, 101979398, 370480404, 35526420, 36574487, 101065251, 909522183, 926299703,
- 926364726, 654519860, 572728870, 570820386, 117842467, 370475790, 35526420, 387323415, 589440533, 889652770, 909324854, 37631798, 775173428, 36579074, 35534119, 389165591, 842208790, 909522742,
- 909260339, 539954947, 16974854, 151060737, 588524070, 824582185, 522852135, 17106183, 16843009, 101188866, 474692362, 387915308, 68425998, 16843009, 33620225, 470288136, 489498149, 104940831,
- 405405963, 33686020, 101057537, 505286149, 690757913, 991309083, 1108282697, 440016176, 35334701, 201793457, 152442122, 2652444685, 587956340, 503383840, 16843009, 35455233, 419759878, 573180191,
- 1266968920, 84085538, 167837956, 554632975, 2002991938, 423837972, 33817604, 33620510, 167903518, 1159792658, 1632527229, 67376950, 520159748, 16843009, 16843009, 16843009, 65537, 50200344,
- 11862590, 385876042, 858928693, 909574718, 874985271, 640099878, 389359398, 858920470, 926298674, 842217014, 101979414, 639771398, 656811559, 857085495, 875902514, 102900518, 336663815, 370606622,
- 638916374, 102900518, 17368345, 51059999, 16908549, 118032387, 756491298, 269029158, 339030553, 1852377631, 272722238, 50402336, 471008260, 1430995216, 489560397, 101123073, 623385608, 1059792695,
- 16850179, 235539204, 783934009, 84218156, 18874629, 33685761, 1297154305, 70869051, 168364805, 1409615109, 122373191, 2935888392, 322001996, 33817603, 16843294, 754974976, 2684546047, 687914498,
- 587268096, 656811559, 572728870, 336922119, 842208790, 102184758, 101058310, 656810531, 875898406, 842217014, 33689111, 16916098, 1494812934, 1078561844, 1029606991, 101264221, 1815741701,
- 848383291, 2959162167, 141588341, 33686793, 118690869, 1381898518, 1402233720, 269098781, 471797774, 2352032818, 1503751250, 824776743, 251658496, 956497151, 1241560322, 890699776, 1043805750,
- 37500163, 101065255, 117835271, 909453063, 875902004, 52307764, 909521459, 386270775, 891692579, 774308398, 101065474, 35525653, 386014743, 587345429, 2500199970, 101129004, 16843783, 152977979,
- 117640205, 1023475998, 506542160, 1096764968, 503383813, 134283521, 437260817, 33699121, 84280065, 522128901, 220280621, 70000917, 84083231, 2286295556, 1280194162, 50594098, 823990021, 505550593,
- 353371915, 16974354, 50594049, 119168044, 589562380, 33686286, 2008764929, 304960581, 50528771, 16850690, 65793, 4279107585, 39518965, 3211449, 372455168, 926298675, 640090926, 909453094, 69089078,
- 1043805975, 355677956, 235341318, 587597570, 1042753058, 386818050, 657858083, 808462863, 623711509, 253180969, 958732566, 437391915, 471276067, 2384807701, 270079586, 322513419, 101062946,
- 958617861, 1818700105, 505947747, 201858049, 756484613, 661557077, 894121768, 237582896, 734395948, 990845999, 370412040, 196630, 66977543, 11600443, 4849724, 16777306, 36582695, 35534115,
- 926298675, 101065493, 117835271, 370611734, 101127189, 370542342, 387323415, 587345429, 889652770, 574030398, 640034598, 909521973, 909391635, 875902004, 352716327, 353572372, 336925702, 907351572,
- 640955702, 1879123495, 604700929, 824711209, 540158755, 51784462, 1291911426, 3029280360, 36789288, 419956485, 657071655, 691741977, 34153514, 1060075328, 1923241796, 2181234945, 31165317,
- 1015513089, 1208107583, 303369999, 16850693, 520159745, 151717378, 285417230, 2575645712, 34737991, 67507999, 18743812, 33620225, 486932766, 538450209, 1783119717, 1782906429, 405027891, 54866446,
- 1902140514, 571707649, 1059530074, 1745041225, 441925984, 65563, 50265870, 12124788, 385876043, 926299701, 926365238, 656811559, 572662566, 372716807, 924260118, 909588022, 840316214, 571814707,
- 570896646, 117899790, 855776787, 640030003, 119677475, 640090670, 120006438, 638915846, 572662566, 102044942, 2552766214, 288231779, 168238617, 504794894, 209412120, 33882638, 906437652, 119014402,
- 505615629, 471507831, 369562647, 353377061, 185338129, 270142729, 325602130, 470419744, 50404865, 925303556, 1058841555, 503454738, 724309528, 353481640, 370018820, 33626369, 674108679, 737869472,
- 18876967, 269353473, 773394450, 2590871581, 16844837, 402653440, 503544063, 2063642882, 890699776, 909324854, 37631798, 775173173, 640034562, 572924711, 370554147, 926298675, 117835285, 336003598,
- 386336532, 857085460, 370618930, 909259570, 71186230, 36579125, 656811559, 855776821, 926299698, 117835285, 352781830, 387191815, 236388894, 656610562, 572982062, 640034598, 117842467, 572727814,
- 102237702, 505479433, 33883397, 67437314, 286724612, 1023805699, 723330374, 136129317, 16909571, 100729089, 637737752, 506207766, 102578996, 33752837, 67174913, 436800266, 841291295, 556343849,
- 119743763, 16843783, 755630337, 101319987, 117506337, 354691346, 1110319415, 961088783, 673000979, 503587372, 117899777, 1600663048, 625573216, 100992014, 18809089, 503382274, 84412161, 119875346,
- 1922710346, 17376812, 67437057, 1243745028, 680683651, 50532134, 18678019, 16843009, 83959297, 689768455, 1902607475, 85597705, 1228934401, 723982620, 16844308, 16843265, 16908545, 117440768,
- 3137535487, 1560326914, 891617280, 235341318, 639771394, 891692583, 640037943, 370554151, 926298675, 101058325, 352716295, 370611732, 909259542, 640955703, 36579110, 370554151, 909521459,
- 237180215, 51250946, 370545685, 387323415, 589702677, 889652770, 926299699, 37041718, 185341452, 354298662, 287143242, 621412623, 423311146, 254293533, 33757483, 471668739, 874920780, 33686057,
- 656608002, 506411555, 236331815, 34086176, 16843009, 117901315, 1009657626, 573842726, 68822545, 1471677443, 117572100, 640483848, 1547059992, 34350634, 33686559, 33627907, 1409946379, 390084150,
- 168170518, 1180511079, 67833352, 33627905, 520159489, 235668737, 2037336582, 710824757, 33817605, 16843294, 167845378, 473369358, 402653440, 453311743, 2600513794, 352387072, 101123590, 336856838,
- 35526407, 640030003, 36579107, 572662562, 889652742, 909324854, 37631798, 775173429, 640034562, 589440551, 857085493, 355939890, 235341318, 336856834, 337053447, 842208790, 840308530, 926298675,
- 657785918, 640090670, 506799910, 842150658, 102053686, 68028166, 35525895, 389165619, 842215958, 71186230, 36579125, 656811559, 855776821, 70661682, 119743770, 16909063, 638255361, 34802986,
- 691876965, 3768918828, 86072465, 505479434, 33883397, 84214529, 219615493, 1178404368, 623582501, 50863403, 16843269, 369492225, 287379737, 939791375, 67372593, 33620227, 185205761, 371202314,
- 606614054, 723001125, 84084510, 16843010, 420873729, 252715282, 825754388, 50594822, 16908545, 151718404, 622206746, 690104626, 514916897, 134677761, 2013932061, 438104172, 16850951, 16843009,
- 503448066, 117899777, 1516514568, 744050301, 84280849, 18809089, 503382274, 84412161, 119875346, 1922710346, 17442347, 84477697, 2135499277, 555917157, 50529037, 16850177, 503382273, 101189377,
- 2370905871, 657158767, 117506313, 571278601, 2674229065, 51192098, 486605571, 16843009, 65537, 75038488, 11600426, 83886242, 654454311, 589496878, 102893319, 889652770, 909324854, 37631798,
- 775173429, 640034562, 589440551, 857085493, 355939890, 235341318, 336856834, 337053447, 842208790, 840308530, 926298675, 657785918, 640090670, 506799910, 842150658, 102053686, 68028166, 35525895,
- 389165619, 842215958, 71186230, 36579125, 656811559, 855776821, 926299698, 117835285, 336004614, 504825620, 34477826, 32768789, 286328578, 1821200400, 576649585, 303634984, 553716229, 84215070,
- 84082946, 386991365, 1023807501, 723330374, 136129317, 16909571, 100729089, 554768662, 68423441, 67514680, 16843524, 168034562, 538511883, 674375190, 404694308, 50798123, 16843269, 369492225,
- 270602777, 939725839, 67372593, 33620227, 185205761, 371137033, 573125157, 622010665, 50792227, 16843010, 87239691, 428344842, 51391019, 16843779, 16843009, 117571870, 1680672775, 1498316122,
- 101060908, 520159493, 16843265, 134676766, 623317509, 2587576839, 170273650, 151453953, 1226968325, 580871551, 50531617, 18678019, 16843009, 134676766, 1361514246, 728919949, 16845095, 218433799,
- 1702840610, 220275359, 16974595, 16843037, 503382273, 134677761, 2013932061, 438231404, 1041039621, 33562185, 4244573696, 2969748482, 1577077504, 352387072, 101123590, 101057039, 336991509,
- 370545941, 842412851, 353776179, 587597332, 640098850, 572662566, 909444871, 37631798, 640037941, 572728871, 101058310, 875897607, 925312550, 389231158, 909521459, 370545923, 892744243, 640099892,
- 119677475, 3288400413, 218570784, 16843009, 235733249, 420679181, 1199273477, 319114618, 237312525, 471734285, 16846871, 67240193, 726928388, 83953193, 168173570, 572345094, 592073738, 440869420,
- 1514804003, 1344937505, 35001360, 67182257, 756024578, 101457467, 118689809, 16843025, 1732270171, 16908604, 169148674, 1359613712, 1128041897, 286393632, 724633108, 1027610636, 16843025,
- 3422355713, 1627718989, 272903247, 356123159, 196693, 66912024, 11600423, 5374016, 385876101, 1043805749, 875836674, 875902263, 640099878, 859121446, 858920471, 355939890, 101123590, 118752775,
- 387257350, 858986006, 842215990, 101979414, 572662534, 572728871, 923207202, 857085447, 875902514, 589702950, 352789026, 859112711, 1043805750, 640955650, 36579110, 370554151, 909521459, 237180215,
- 51250946, 370414868, 370546454, 640029975, 1124475427, 33687071, 84017409, 572459014, 638665490, 539762961, 100998954, 16908545, 219024897, 85529357, 1950577775, 219284810, 252320307, 24451866,
- 1158881818, 622599762, 370674508, 290259201, 67377446, 33686019, 587923970, 826024744, 371403295, 136126223, 16843010, 117965569, 807803399, 975381047, 269227267, 420940037, 2352167945, 541935963,
- 17171972, 33620511, 83959297, 51381765, 203108145, 16861707, 1096309505, 50412391, 525337089, 1365246982, 387007275, 3364428546, 235471390, 2174175500, 138828329, 17042447, 16908575, 18809089,
- 68029445, 1667322421, 693652779, 33817605, 16843294, 402653696, 570621183, 1090564354, 21248, 926299415, 875889214, 892679988, 656811572, 891758118, 840308531, 926298675, 117835285, 335939334,
- 353633799, 857085463, 858928691, 336926258, 572720646, 640034594, 102900259, 369571591, 909259542, 656815157, 572662566, 1124537607, 33687071, 84017409, 572459014, 638665490, 539762961, 100998954,
- 16908545, 219024897, 85529613, 2051505013, 219350349, 168699162, 1964710415, 321067521, 505502282, 369970986, 352518423, 151326732, 1007229207, 1230736435, 100933709, 35586310, 503382529,
- 100992257, 791741200, 1242237979, 1526792449, 1013399640, 16843265, 102715394, 743399684, 35065924, 16812315, 3959368960, 3154291458, 17920, 35534647, 926298675, 104281654, 639771398, 572728871,
- 909444870, 909522742, 387330611, 842208790, 640038710, 589702695, 101058338, 37619463, 859190839, 353769010, 587597332, 640099874, 605040422, 1630554947, 185409670, 338569473, 1377048074,
- 590026019, 538449419, 520818469, 304751907, 85333263, 2234062876, 120747850, 52234252, 1006764546, 2943829102, 1974362465, 70741573, 537421317, 1280315430, 489636126, 604636693, 186783762,
- 286527504, 202313482, 1328744966, 1296383268, 18094090, 455089948, 2740591136, 1503751023, 336536094, 402653696, 939846655, 1409334786, 26112, 102896897, 352521735, 370611220, 926299671, 842217014,
- 336926230, 572719630, 640034598, 117842471, 336925702, 35526422, 572921111, 102900259, 909444870, 909521714, 872562231, 36582453, 654454311, 857085493, 570766898, 101058310, 370611221, 909259542,
- 640037941, 590032129, 16974597, 2032402689, 790437894, 2590597023, 2271557717, 665020752, 604049426, 67188033, 587989762, 489563684, 857610000, 17499692, 33822762, 67174914, 235210246, 942349854,
- 20652325, 543636176, 590618140, 2188659305, 2969728320, 84477727, 1163144468, 34280449, 660028417, 2538817086, 1770869351, 693592890, 33699668, 1309222680, 218959477, 35521028, 503382273,
- 302645761, 2101682440, 912346723, 67372055, 35586306, 756613634, 1047077158, 1061380736, 2489684388, 65617, 50200320, 11797121, 16777321, 117575191, 101123590, 101058310, 589702663, 889652770,
- 909574718, 909522742, 891692599, 909588020, 372388662, 857085463, 926298674, 101127479, 34473734, 504632341, 370546434, 857085463, 638923542, 102900518, 909522183, 889339447, 640037940, 589702695,
- 336922146, 909259542, 436576257, 387788076, 168040495, 67503109, 219225621, 538846496, 1109006878, 219418918, 657352029, 204159514, 455417154, 705826062, 621613871, 84215066, 100925954, 302843140,
- 50793736, 390086923, 757609759, 117835545, 16843010, 1226254880, 172973648, 275972368, 674969375, 102842656, 134481677, 16843269, 151199234, 1445143328, 337385267, 776496148, 134942535, 16843265,
- 536936706, 100991489, 1650928391, 642547811, 33817357, 16843009, 16843294, 84024834, 1411646468, 1468491339, 84350777, 1380270149, 131073, 32636710, 13894097, 4653112, 891753216, 909588022,
- 909522742, 387330611, 387388950, 353829406, 572728870, 121046790, 101122574, 891691555, 54409012, 640038711, 572728871, 655558406, 235341318, 352716546, 842208788, 84089701, 219811075, 673000478,
- 219222853, 83952385, 455089946, 522128398, 589892610, 521799180, 188563511, 994321428, 151519512, 571884060, 167952405, 791675920, 656673558, 1208043553, 33702663, 118491137, 404426001, 3559994900,
- 33887769, 33686047, 537481987, 235079708, 642923073, 252315911, 606012684, 201928719, 58979838, 235733252, 874252298, 33565477, 4060030464, 2080567809, 1056976384, 385941504, 572720646, 640099878,
- 117842467, 906428942, 372388662, 101061653, 656810531, 909391142, 855785015, 370546482, 120992307, 336922146, 370546454, 892744243, 640099892, 520674049, 302849840, 303571743, 50868252, 436339203,
- 1885808717, 1229548604, 370415463, 1514673171, 388897839, 319489812, 272973257, 658444815, 286474811, 326828579, 167910437, 505874444, 521932810, 1836520722, 1145074508, 1163999040, 1026107003,
- 50596131, 1398652166, 723669030, 794124590, 4333658, 4279762947, 28377598, 3014856, 5046333, 842203392, 369562645, 101061653, 656548387, 572728103, 889659910, 926299699, 892679734, 656811572,
- 891758118, 840308275, 909259315, 840308487, 875901491, 117842467, 286524948, 857085447, 875902514, 572662566, 18158855, 1685462533, 894578556, 654904070, 654842911, 504303146, 67437843, 117769730,
- 622274068, 303043362, 19341844, 1929841160, 236194910, 387055873, 1010577932, 185665857, 1297729537, 728107295, 16852804, 35389697, 1359152644, 1245980246, 50659614, 33626882, 22634754, 50482260,
- 4261878045, 33829353, 775107390, 3552257, 4279762945, 27066877, 3932360, 638919936, 102900518, 909325575, 909522742, 640955701, 640034598, 370554151, 906115635, 34477875, 874914581, 587345461,
- 117842466, 352716308, 370545685, 18224663, 456337668, 254815767, 84218654, 84279812, 874910727, 319569496, 255081246, 503646725, 604701185, 570949929, 33620266, 419759109, 33693211, 35389953,
- 1359152644, 1245980246, 50659614, 33626882, 990839041, 218633791, 170602498, 554762497, 845817647, 84220215, 131077, 42073859, 13107487, 8061022, 909326080, 889404983, 774317620, 389359362,
- 858915358, 909521458, 102053687, 101065506, 352716295, 370415381, 386014743, 588579598, 774321190, 36579074, 589440551, 807608870, 235341346, 101058306, 117835271, 36582435, 859190823, 857151283,
- 926036759, 926220862, 640037941, 572728871, 34473734, 1258425863, 84482305, 100993033, 369689609, 909056795, 622337569, 775696179, 34080027, 67376668, 117768453, 437848325, 50726915, 16843038,
- 202115845, 238499354, 185074964, 555484675, 118697517, 16909575, 52297985, 201525254, 1209402126, 723329312, 117969491, 83951874, 223546629, 134744094, 302252290, 537602336, 1229601809, 69479453,
- 33686018, 33685787, 33685761, 16849665, 1208419590, 1025720655, 50528814, 688390658, 135278900, 623182605, 50595087, 16843011, 84017409, 386402054, 236521248, 691286288, 16843016, 50921729,
- 691680530, 389956123, 33754373, 656410882, 4942926, 4280680450, 29164017, 1966292, 620757039, 587597591, 891692578, 859191092, 336926258, 34473748, 370549511, 857085463, 370550578, 926298675,
- 640099878, 117842467, 2818639366, 1548423177, 1295408959, 1632784455, 1076367361, 201427511, 759764237, 1159980610, 404625961, 453510401, 238232134, 139527687, 1782263338, 977109573, 302274407,
- 34014473, 389490177, 48900646, 687931907, 591335982, 2888225, 4278386689, 16909301, 9240779, 102039808, 101065506, 991233543, 657864194, 842208790, 571815734, 117900806, 35526423, 570824471,
- 101058339, 824583687, 640099878, 388179750, 387323412, 353829406, 572728870, 859113222, 1043805750, 590689538, 101123590, 101123846, 640091910, 572990246, 1043801890, 657929987, 891486766,
- 842208790, 369506102, 906115863, 775173430, 36582658, 370554151, 842150706, 100139318, 337838600, 219219203, 71713814, 252582423, 773986077, 1530926631, 538973983, 151453975, 370814722, 319227403,
- 656675622, 33633029, 168100611, 841554970, 691214875, 51586063, 855704066, 285410818, 21762338, 286328327, 19857942, 352388874, 505747994, 655769692, 488055342, 387583503, 356730628, 101319693,
- 33751554, 622992649, 286202408, 3355518745, 134349083, 1366565132, 16846698, 219939073, 2102729759, 220340266, 50403842, 117572099, 456530697, 772159282, 85604660, 33686532, 16843292, 134355970,
- 773459469, 134491691, 389027844, 117965164, 50528770, 134355457, 2099916823, 220142677, 16843036, 1365905153, 134808833, 52703016, 33818633, 33685787, 922747136, 2499932415, 889246977, 926351360,
- 842208790, 892745271, 572728884, 101058310, 117835271, 908535334, 372388662, 117838869, 101979414, 656810531, 857093927, 875902514, 102900518, 218827159, 219757835, 472791568, 184684857, 84410889,
- 688062978, 1666002511, 1752053811, 625092691, 1261636372, 809188663, 684792075, 186122754, 824579370, 184618257, 84345352, 437129751, 674710806, 1478168887, 319834939, 824642337, 20195884,
- 402653440, 1258487295, 1811990785, 926351360, 926351934, 891748910, 842208790, 355939890, 102965766, 101058310, 370414869, 35526422, 640029975, 117842467, 926299701, 71120438, 503776014, 638916354,
- 102900518, 909325575, 909522742, 640955701, 640034598, 370554151, 909259570, 570823991, 117835271, 52233734, 705768633, 17577541, 706813193, 403708466, 134555176, 85204226, 100795652, 403309829,
- 422783258, 556347677, 67568922, 976500772, 503841317, 489826337, 254358297, 84218654, 84279812, 623252487, 437197352, 151333426, 51585026, 746652163, 1045245457, 101650701, 33692930, 18546946,
- 33948929, 1176918096, 50404426, 469893379, 33685762, 84214302, 273233159, 605558876, 708785978, 33952532, 16908830, 67247106, 1448149766, 508183590, 33752321, 33685787, 16850178, 235800834,
- 257702193, 131095, 50200344, 12517963, 7929964, 1043805952, 775370498, 372582146, 842150678, 102053686, 101065506, 352716295, 370545685, 386014743, 589702677, 889652770, 909588022, 235158838,
- 35522307, 640029975, 117842467, 909521717, 892745271, 640037941, 656811559, 840308277, 926298675, 119670293, 101123590, 50535686, 842208819, 104019766, 639771398, 705768633, 17577541, 706813193,
- 403708466, 134555176, 85204226, 100795652, 403309829, 422783258, 556347677, 67568922, 976500772, 503841317, 489826337, 254358297, 84218654, 84279812, 623252487, 437197352, 151333426, 51585026,
- 436666883, 992696850, 1191516423, 2168798267, 1294864684, 252775742, 35455494, 453050882, 100991233, 643321858, 18631238, 33620739, 33620508, 84024834, 1228211973, 404249616, 1060583972, 101913642,
- 33693186, 35389953, 1359152644, 1245980246, 50659614, 33626882, 18678274, 235471361, 1547251982, 671225615, 1227567966, 16797776, 4127135744, 3590404610, 22272, 909522195, 101062455, 1040647700,
- 909522690, 857085495, 355939890, 117835298, 387323655, 842208790, 101061943, 117835271, 772212230, 640034563, 370411303, 387323415, 572925461, 102900259, 909522183, 926299703, 657929270, 36644390,
- 574830617, 16843016, 908596481, 17898025, 252385309, 740170265, 2439519788, 656412692, 85265174, 386663688, 269882380, 689509389, 590684708, 84149509, 656548891, 470617624, 622667822, 16909060,
- 16908545, 504171784, 152866817, 403181330, 893397795, 708190992, 17831965, 469827841, 1713118731, 504304257, 18220054, 100860419, 117966084, 655757579, 506470434, 22437890, 453117189, 33620225,
- 101122332, 136057604, 255878252, 16843019, 50331904, 788721919, 1593886721, 352387072, 102965766, 101058310, 370414871, 35526422, 640029975, 117842467, 926299701, 54329918, 656811572, 572728870,
- 34473734, 117835271, 572719630, 640952102, 372713254, 926298675, 875889470, 36579110, 504837415, 842215938, 926299698, 117845762, 85204226, 33621253, 168101125, 841619993, 691150105, 84285730,
- 151192068, 456263690, 134749709, 50397704, 789385236, 168172087, 50528527, 454826257, 100796445, 134677253, 454428932, 557199131, 858003487, 19807278, 33627080, 1359152644, 1262757462, 50528541,
- 35389953, 503448065, 84215042, 171063065, 875963199, 67306258, 151126531, 2000889632, 540483879, 303038977, 419762708, 923874603, 739259965, 33686563, 18547202, 16843266, 16777730, 4160690176,
- 3405881090, 28672, 640033541, 656811559, 370545703, 386014743, 572925461, 117842467, 926037255, 909588022, 875902262, 774317606, 372582146, 909259570, 386014775, 924254750, 372704318, 926036758,
- 101058325, 352716295, 370545685, 387323415, 587345429, 117842466, 909522741, 892745271, 120006196, 1375798286, 84215829, 354632740, 33620482, 555752969, 67637539, 219619369, 85204226, 100795397,
- 386532613, 219287579, 220086554, 353835539, 336336155, 286795037, 639044625, 274138121, 50533407, 67437058, 505616134, 286465831, 253699870, 33756195, 335741443, 303836194, 185731344, 1250904589,
- 1418023212, 84741641, 33693186, 469828097, 84148737, 643191043, 18696773, 33686275, 16908571, 808987164, 472725291, 894516523, 52177192, 18678531, 235801090, 845888048, 100997175, 18678277,
- 33620225, 117571868, 1365052429, 707802393, 691887687, 65573, 50200344, 13173067, 318767222, 840308247, 926298675, 640955701, 656811559, 857085493, 926298674, 589432341, 101123590, 336925958,
- 504829462, 638916354, 102900518, 909522183, 1026962999, 572925442, 102900259, 336925959, 370611734, 638916374, 102900518, 909325575, 909522742, 640955701, 640034598, 370554151, 909259570,
- 570823991, 117835271, 353699334, 471882425, 437325072, 101123091, 841622295, 672665626, 34080038, 67441693, 84279813, 437783045, 488190761, 438380849, 453248773, 404300582, 35201569, 419759109,
- 489826338, 254358297, 84218654, 84279812, 623252487, 437197352, 151333426, 51585026, 83952131, 16843010, 1241976577, 84215605, 33692931, 18546946, 33948929, 1176918096, 50404426, 469893379,
- 33685762, 84214302, 256456199, 16843042, 839852289, 84220215, 35521029, 469893378, 50725890, 1143363153, 83959370, 18547203, 486670850, 151126273, 976293390, 131078, 32636710, 13894128, 1966093,
- 372375808, 101061653, 891691555, 389428788, 336922146, 370546454, 892744243, 640099892, 1902647041, 1699245116, 862797173, 252724541, 992427794, 588321602, 1853281281, 2185261900, 1030440818,
- 642997535, 774578768, 1513051489, 16794144, 4261353472, 3355527938, 24832, 570823937, 117835299, 353699334, 387323412, 353829406, 572728870, 909444870, 909522742, 640942909, 640034598, 101131043,
- 34473734, 370410269, 387323415, 589702677, 889652770, 926299699, 892679734, 656811572, 891758118, 35526423, 842150706, 37172790, 34080075, 67441693, 84279813, 437783045, 488190761, 438380849,
- 50595589, 805964296, 554968605, 84149530, 84345858, 841490969, 691214621, 85138959, 100795397, 638846725, 824925979, 638917407, 775761715, 18597889, 33948929, 1176918096, 50404426, 469893379,
- 33685762, 84214302, 189347335, 859185983, 67306259, 100991489, 842471684, 1075719713, 84215346, 33693186, 35389953, 1359152644, 1245980246, 50659614, 33626882, 16843009, 33554946, 4059959296,
- 3556842242, 1191196672, 890437632, 118961974, 842217015, 101979414, 117835271, 572720646, 336860455, 370611734, 638916374, 102900518, 1043662598, 875902210, 640090926, 572662566, 370545943,
- 909521459, 589706293, 285607458, 34424403, 1380327499, 253304675, 622406724, 36254485, 436667140, 439099429, 640689427, 17244713, 50594305, 101978884, 908106508, 658844962, 1008615759, 512688423,
- 1527193861, 1466572102, 303914030, 185473584, 1397170203, 117706794, 35193350, 33620225, 604504349, 1918560298, 67903041, 3428713221, 1429215776, 509496887, 65581, 32571174, 13894043, 16777253,
- 656811555, 640099878, 336929315, 842208790, 101127991, 891691555, 909588020, 859191094, 102176306, 478937350, 16843265, 841289225, 810166911, 319500859, 1969439813, 1024202781, 607398689,
- 101129526, 353187841, 135402244, 1682022935, 554376248, 828996899, 671881306, 252450321, 16791068, 4261350912, 3405897217, 16896, 102966035, 101058310, 926230279, 657732661, 858915358, 909521458,
- 386270775, 53356323, 85795623, 370611732, 638916374, 102900518, 909325575, 909522742, 892675893, 806562508, 100795938, 16849925, 539708225, 706614037, 117784394, 16850177, 690885895, 84345888,
- 841490969, 691214622, 51651343, 16843522, 285933981, 18884615, 202842410, 50466842, 50528513, 337269804, 68166432, 705105665, 1110199621, 84215599, 33693186, 35389953, 1561070856, 87387219,
- 4194238720, 4177651966, 1124124929, 857145344, 926036758, 53936958, 891749166, 842208790, 118830902, 336922118, 35591702, 889339447, 891758132, 842208790, 236271414, 100861699, 587597319,
- 1042753058, 386799362, 102378278, 303303432, 303304587, 673060120, 943133980, 34743823, 1209404426, 51385165, 673654806, 421861138, 521673235, 439127320, 270152721, 101062944, 774157061, 773394699,
- 643432746, 17241131, 33686046, 50404610, 184880904, 3074236956, 271332294, 67834120, 33620251, 167910401, 4265165088, 422144429, 336202016, 50337302, 4059962112, 3305290498, 1493191424, 26368,
- 859182337, 336926258, 572720646, 336925991, 387323412, 353834518, 572728870, 842336006, 909522742, 587596861, 875898402, 842217014, 637680919, 640034612, 656549415, 1043669799, 236402434,
- 570889474, 370414854, 842208791, 640955702, 352723507, 370611732, 892744243, 2449548852, 1481659182, 1194808367, 33685800, 522853380, 974985517, 85926452, 1328481288, 1412455502, 19481655,
- 201916673, 202313986, 691086856, 33622041, 858765825, 740037143, 3929616428, 303510575, 841820956, 666435898, 1265465410, 691487091, 557922602, 168625679, 16914690, 85787138, 958925061, 943198510,
- 1198424896, 841891437, 621874226, 17436182, 469827841, 185535238, 1111566857, 1415326766, 824142391, 2121029217, 1782011228, 1465921823, 16809581, 4093578752, 3523345921, 15360, 35534611,
- 909580055, 857089846, 571815730, 117900806, 857085463, 34477367, 656811527, 101058343, 589702663, 889652770, 926351934, 640090926, 119677475, 504654862, 1244338209, 536940825, 287182607,
- 1863456278, 455810401, 505420825, 387715867, 286673746, 236261121, 387127821, 1930630681, 202580251, 70003718, 2835416842, 739772457, 593840424, 50531105, 336856604, 556305797, 134616577,
- 470222599, 527073061, 16911910, 18547201, 2333545734, 253440297, 143879, 4279762945, 21693057, 7274696, 504702208, 35526402, 352521751, 892610083, 774308398, 36315906, 587597319, 119677447,
- 909522741, 892745271, 640037941, 656811559, 857085493, 355939890, 117835271, 52233734, 387323412, 857150998, 926298675, 54329918, 656811572, 891758118, 842208790, 118830902, 101123590, 33358086,
- 84215042, 52041738, 503514632, 201654785, 1548093451, 302976042, 120398098, 185532767, 85204239, 100795397, 638846725, 437858603, 537930291, 33751827, 84149506, 454304281, 134950700, 67240455,
- 622134789, 437924650, 487533360, 84149524, 1145054966, 50528538, 688390658, 135278900, 639959565, 100860944, 33620228, 18612482, 50725890, 1143363153, 67182154, 18612739, 486605314, 235471361,
- 489566221, 926032174, 100992281, 50660354, 607269907, 926026558, 84280345, 33627394, 18612482, 33948929, 65614, 50200321, 13173009, 620757078, 926299699, 238368310, 639771394, 656811559, 640090670,
- 372582182, 842215958, 118830902, 336921102, 857085718, 892810802, 656815157, 891748910, 858920470, 355939890, 101130758, 352716550, 387322901, 353834518, 572728870, 620824326, 51651343, 774570498,
- 1278021401, 17369876, 84148993, 623252487, 437197352, 487598642, 302974233, 437402918, 50660385, 622664458, 437197352, 151333426, 51650306, 84345861, 841490969, 691214621, 218628634, 120865551,
- 421462536, 757540623, 84021034, 18547203, 486670850, 755696130, 237445430, 352781339, 122505753, 33752068, 33685787, 16850178, 336464130, 859801686, 33883398, 16908830, 65538, 66977560, 13107505,
- 620757122, 589702677, 84354855, 117835298, 909522741, 892745271, 656815157, 891758118, 842208790, 118830902, 101123590, 335748358, 370611734, 842209046, 1023557175, 640037891, 656811559, 857085493,
- 355939890, 117835271, 335748358, 370611734, 842209046, 1023557175, 640037891, 656811559, 857085493, 355939890, 117835271, 370411014, 50470423, 34934577, 4265071957, 522723304, 337448724, 67372293,
- 689309189, 437858603, 537930291, 33751827, 84149506, 1259545113, 33817869, 100992002, 841622805, 724637977, 51650320, 67437061, 321001733, 67439947, 84148738, 707073286, 823794227, 337907499,
- 33751810, 520552706, 16849945, 50398209, 469827841, 100925953, 643191043, 117657431, 18612740, 486605314, 235471361, 489566221, 926032174, 100992281, 386206978, 1042558000, 423047691, 50595332,
- 33685789, 33627393, 1477643785, 841035293, 84220215, 84738566, 606875671, 926026558, 67503129, 33627395, 18612482, 235735041, 627533905, 331794, 4279762945, 19923841, 9437384, 504702208, 35526402,
- 352521751, 892610083, 640090670, 120006438, 101065221, 909587719, 909522742, 640955701, 656811559, 857085493, 355939890, 117835271, 52233734, 387323412, 857150998, 37631794, 640942909, 640034598,
- 370554151, 926298675, 101058325, 52233735, 387323412, 857150998, 37631794, 640942909, 640034598, 370554151, 926298675, 101058325, 33949191, 84017634, 403309829, 101188378, 33627651, 118229765,
- 934812197, 673179902, 487527455, 67437844, 369493252, 422652713, 271201050, 50533152, 67437058, 321001733, 67439947, 84148738, 707073286, 823728434, 337580075, 84018435, 572065028, 84757267,
- 67240452, 622134789, 437924650, 487533360, 84149524, 1161766646, 50528538, 688390658, 135278900, 623182605, 84083983, 50398209, 469827841, 100925953, 643191043, 117657431, 18612740, 486605314,
- 235471361, 489566221, 926032174, 100992281, 386206978, 1042558000, 423047691, 50595332, 33685789, 33627393, 1477643785, 841035293, 84220215, 84738566, 606875671, 926026558, 67503129, 33627395,
- 18612482, 33948929, 131153, 50200327, 13173008, 5832775, 102039808, 101058338, 335939079, 859190805, 336926258, 572720646, 572925730, 102900514, 909587719, 892745526, 874971708, 640090670,
- 101130787, 587663110, 656811574, 842215990, 840308502, 53883443, 118756373, 842208790, 640955702, 119677475, 107217173, 321061384, 419496195, 1549209117, 70603567, 336594957, 890835990, 370937644,
- 16845060, 218366979, 118235955, 503513605, 101254657, 135270158, 723001903, 607594000, 219615745, 1094466354, 17502473, 16850377, 269814786, 36382999, 725303297, 16852804, 18612737, 235275266,
- 353044610, 507525144, 218628874, 773789449, 238764054, 16843010, 817692162, 68229638, 858996226, 3408174, 4279762947, 25101053, 3604681, 7929927, 372577024, 909259542, 570823991, 117835271,
- 353633798, 842217014, 101979414, 572662534, 589440551, 889652770, 926299703, 37500214, 36582439, 321267239, 857085447, 875902514, 572662566, 387257607, 926299701, 892666430, 656811572, 891758118,
- 842208790, 355939890, 102965766, 101058310, 370414869, 35526422, 640029975, 403055139, 471151154, 134620977, 51585794, 471466241, 743788558, 218378572, 488248841, 254555417, 151262748, 67305729,
- 2081752836, 202773249, 976565292, 3641381129, 84220194, 67240452, 588711429, 270152234, 86386712, 337445384, 33883141, 168101126, 858331672, 19995929, 33627053, 18678274, 353108481, 724113168,
- 994050306, 19350571, 469893377, 100925953, 185106958, 1127815189, 84085794, 833158659, 876413444, 872492595, 35554870, 419759365, 862597687, 84220214, 35455749, 453050882, 100991233, 643321348,
- 35408453, 33620739, 33620508, 402653696, 2969697791, 939575553, 18432, 370554131, 926298675, 119670293, 101123590, 907351046, 372388662, 101061653, 656548387, 589439526, 889652770, 926299703,
- 37500214, 36582439, 321267239, 857085447, 875902514, 572662566, 404034823, 471151154, 134620977, 51585794, 488177921, 794580750, 218379603, 370413576, 741677332, 68557839, 50397449, 336004101,
- 387055996, 1010512397, 185665857, 18590977, 486670850, 201457921, 689377301, 1073807915, 658778939, 33620225, 67240220, 109186566, 958011400, 51126851, 2835219205, 1040319537, 19804979, 16791092,
- 4043251456, 3573657089, 11776, 640037669, 117842467, 101123590, 640026374, 859190823, 336926258, 572720646, 372713255, 926298675, 572728870, 506922758, 922825474, 1062471701, 34683164, 134351115,
- 50528517, 1798196778, 1164524670, 185812549, 1380600115, 152113923, 187774220, 471800086, 292050672, 134938893, 386205442, 370806290, 1900637311, 186721088, 38951207, 906166785, 66307, 4279762946,
- 32244465, 4915412, 318767195, 840308245, 855784983, 336926258, 572720646, 590685735, 119677475, 370414869, 370546454, 640029975, 117842467, 909521717, 892745271, 640037941, 656811559, 840308277,
- 926298675, 119670293, 101123590, 572855558, 387192070, 842208790, 640955702, 481895975, 118758175, 1749182527, 1231830129, 101921174, 589633028, 84149506, 841490969, 691214621, 85138959, 100795397,
- 638846725, 253372453, 86651418, 320864777, 16909059, 524631622, 992493075, 588321602, 17831169, 1597964545, 1282307636, 914636915, 153551413, 85538610, 503448837, 33620482, 100925980, 643191043,
- 18762308, 453116677, 33686017, 33620253, 823004681, 1398644026, 774587986, 1513051489, 16794144, 4261349376, 3422678529, 23552, 101062437, 117835271, 637994502, 572662562, 909260039, 909522742,
- 926299703, 875898406, 842217015, 387323442, 355939894, 102965766, 101058310, 370414869, 35526422, 640029975, 101065251, 909522183, 889339447, 656815157, 572728870, 370414854, 20329011, 706413362,
- 270470939, 218499335, 504500504, 454759955, 219746068, 1024202255, 856905540, 991825930, 422319670, 486672389, 84149524, 84215298, 790239242, 504567599, 421666854, 33817861, 437453314, 1043673361,
- 4144694836, 607461135, 169159190, 33687563, 471599389, 336666388, 1158549790, 68178225, 16974593, 18546945, 50726145, 1160140879, 50469962, 469893379, 16843010, 84024834, 924386565, 1364017458,
- 738526741, 20393256, 637534976, 3171021311, 234926594, 1040198912, 587268096, 889335335, 842217012, 387323415, 101127955, 640033315, 909587509, 353776179, 235344916, 371394306, 370546454,
- 371667507, 909259542, 656811575, 102900518, 17171975, 544875845, 303564831, 470357527, 269077250, 1597987915, 1346850102, 268525906, 2318876712, 353176577, 3863096649, 438912291, 83957790,
- 575019784, 101125683, 289475586, 286002963, 436736533, 148307203, 1782263338, 977109573, 302274407, 34014473, 389490177, 48900646, 687931907, 591335982, 2888225, 4280680452, 45941233, 1966237,
- 3866671, 620757063, 587597591, 891692578, 859191092, 336926258, 34473748, 370549511, 857085463, 370550578, 926298675, 640099878, 117842467, 840107526, 101979414, 891691555, 842217012, 101979414,
- 891691555, 2818651700, 1548423177, 1295408959, 1632784455, 1076367361, 201427511, 759764237, 1159980610, 404625961, 453510401, 238232134, 370673159, 336928285, 350035486, 336928286, 139533854,
- 1782263338, 977109573, 302274407, 34014473, 389490177, 48900646, 687931907, 591335982, 19665441, 353705579, 353639965, 353705502, 353639965, 65566, 21364494, 13828843, 318767216, 858920469,
- 355939890, 589505062, 909579559, 372388662, 118822423, 117575188, 101123590, 656548387, 857085479, 889339442, 640099892, 119677734, 387252750, 353829406, 589440550, 589432327, 909521717, 889404983,
- 874984500, 570894118, 389351202, 656811572, 589768230, 909522211, 117905207, 447812614, 639045148, 286266396, 339686707, 1143545897, 16850451, 167969538, 606283309, 184878851, 453380618, 151524388,
- 506399499, 101001031, 117506305, 623191328, 139922450, 487461145, 67306520, 16843010, 236328705, 67260180, 235603204, 1462504985, 33622044, 156172801, 620822785, 1017970945, 404492050, 1145327911,
- 303704141, 370691901, 16851457, 1686259997, 336940883, 252131608, 514989597, 486606361, 16843009, 117768477, 2000229381, 471794791, 19810327, 537011969, 50530843, 52232449, 235212050, 1643327,
- 4279762946, 43844093, 3932348, 620757064, 589702677, 889652770, 926299699, 892679734, 656811572, 891758118, 976426518, 389232130, 588579342, 775238694, 572662530, 101975814, 336925958, 370611734,
- 925041430, 842217014, 101979414, 688128263, 773266227, 320737072, 33817861, 336004358, 1045967910, 991826700, 168103732, 33627653, 19473419, 19538440, 67437057, 539040005, 168892549, 420810251,
- 33693211, 35389953, 1359152644, 1245980246, 50659614, 33626882, 990839041, 218633791, 170602498, 554762497, 845817647, 84220215, 2163998981, 219221015, 989709, 4280680449, 26935792, 3211476,
- 639828224, 640034598, 572728871, 387191829, 926299698, 36570903, 857085475, 118961970, 639771398, 926299189, 909588022, 387330611, 2348877318, 16908572, 621676801, 788627250, 68428855, 657138441,
- 1012206879, 319500859, 1969439813, 1024202781, 607398689, 101129526, 369899521, 135402244, 100967191, 50528517, 33698818, 475483137, 2099454219, 408564073, 370223116, 907808524, 637534464,
- 2013393407, 939578369, 859242496, 387323415, 909259542, 656815157, 640099878, 859190325, 102176306, 639829766, 589702950, 336922146, 35526422, 336926231, 572720646, 892745255, 506475572, 269156609,
- 1026504227, 825112100, 1247162125, 35863331, 18678019, 907741960, 504967208, 589435402, 978924644, 84296775, 589434257, 674504718, 286466592, 975374357, 235685951, 472986381, 656739615, 236919073,
- 202114821, 1227772449, 840112681, 918313, 4279828482, 33948157, 2556076, 318767155, 926299701, 352456215, 387323412, 353834518, 572728870, 859113222, 909588022, 640955702, 656811559, 840114726,
- 101979414, 891691555, 941176372, 34153027, 83951874, 622265605, 387593257, 588197935, 50463508, 184813317, 1829310737, 387915542, 18882326, 302587024, 1261111311, 1145321553, 84215322, 33693186,
- 35389953, 1779240200, 70271340, 16843011, 387980545, 371269655, 50339863, 4261351168, 2634157057, 855648000, 16128, 909522195, 34477879, 370545685, 387323415, 589702677, 889652770, 926299699,
- 875902518, 640034598, 321005095, 336926258, 639771398, 859190325, 336926258, 639771398, 439759925, 136463160, 16843265, 386204933, 439626020, 271658519, 33756195, 67568899, 135401739, 505222687,
- 488510485, 505287854, 505287701, 152866817, 705171218, 1161187659, 84286022, 35521029, 469893378, 218957826, 826370668, 16843523, 504234241, 505222421, 505287956, 505222421, 1971476, 4277468930,
- 46465260, 2556076, 50331699, 857085479, 889339442, 640037940, 654454311, 926299701, 352716311, 34477076, 117835271, 572662534, 353776147, 572720660, 909391142, 168430337, 321068038, 33751304,
- 555419650, 169823026, 33620740, 738853636, 19145766, 521571336, 521541407, 586022432, 1445003521, 1582660508, 67374378, 453050627, 151917319, 1313368889, 421739620, 407846160, 549454614, 555751191,
- 2103062, 4278386690, 29623024, 6291656, 83886192, 926299701, 37552702, 656811572, 572728870, 117575175, 235341318, 639771394, 657732903, 842208823, 54409014, 656815157, 891748910, 838999575,
- 909259315, 121059126, 101130758, 101058310, 909514004, 353776179, 587597332, 640098850, 102900518, 370542391, 892744243, 572728884, 353699618, 421671937, 33883397, 118097923, 304288046, 16910344,
- 219157507, 102381359, 285675274, 488315929, 84214536, 67634947, 454759945, 471938351, 774971669, 35335484, 570558726, 33620755, 1393433882, 860827225, 420023556, 756420657, 387055991, 959983372,
- 185600318, 84024835, 1142490629, 908273478, 33755700, 151127301, 2000889632, 540483879, 319947265, 723060003, 1027019061, 590090294, 33686020, 33626882, 33685762, 18612481, 353108481, 724113423,
- 994050306, 19350571, 1409417473, 1040319537, 19804979, 33568308, 4261353472, 3372343298, 2382396928, 353566720, 387323442, 842215958, 892679990, 640099892, 372582182, 842150678, 102053686,
- 101065506, 335939079, 859190805, 336926258, 572720646, 572925730, 102900259, 909522183, 1023557175, 572925442, 102900259, 336925959, 370611734, 638916374, 102900518, 909325575, 909522742,
- 640955701, 640034598, 370554151, 909259570, 570823991, 117835271, 85263878, 857085461, 875902514, 572662566, 3105166599, 387719456, 302716426, 117708316, 706942726, 420485682, 117843496, 34874882,
- 505020929, 777474830, 201601871, 421336329, 387917343, 84220449, 639369732, 487789600, 84024098, 555353348, 421343784, 504310067, 67437843, 117769730, 673523220, 840568602, 34145578, 50533152,
- 305594626, 942541847, 285883448, 219742475, 16843009, 101646593, 84358213, 35455749, 453050882, 302645761, 741022483, 993919234, 19350315, 503447809, 84215042, 271857946, 16843042, 840245761,
- 84220215, 35521029, 469893378, 50725890, 1143363153, 83959370, 18547203, 486670850, 151126273, 875629838, 33829324, 758199102, 3551234, 4279107585, 36831998, 7340243, 370479872, 909259570,
- 572921143, 354886435, 859190839, 370611762, 336860438, 352716295, 387323412, 589702677, 1040647714, 640955651, 589702695, 34473762, 35526421, 640029975, 101131042, 859120418, 1043805750, 875836675,
- 656815143, 119677447, 640948021, 640034598, 891495207, 389494326, 335939335, 236722865, 337389079, 892539152, 539563071, 269698089, 16843022, 472194822, 521606437, 16974360, 185272065, 658906671,
- 16844293, 622855937, 202515749, 286853207, 68689166, 16909315, 385941761, 1326714390, 84149250, 236523019, 136075052, 33620481, 16845135, 16852225, 252853421, 1024727323, 287377202, 822817573,
- 486607146, 33620225, 674318134, 322123544, 121182228, 2988252432, 17176862, 16843037, 83959041, 957613319, 520382327, 776476444, 36110593, 50993952, 486605059, 84742659, 420691726, 402653696,
- 973272575, 1459665922, 25344, 909522195, 101062455, 1040647700, 909522690, 857085495, 355939890, 117835298, 387323655, 842208790, 101061943, 117835271, 772212230, 640034563, 370411303, 387323415,
- 572925461, 102900259, 909522183, 926299703, 657929270, 36644390, 926360375, 842217014, 118756630, 574830617, 16843016, 908596481, 17898025, 252385309, 740170265, 2439519788, 656412692, 85265174,
- 386663688, 269882380, 689509389, 590684708, 84149509, 656548891, 470617624, 622667822, 16909060, 16908545, 504171784, 176496876, 168366606, 2415996174, 252840220, 723720200, 588264768, 404564534,
- 16843024, 504044545, 310470172, 68558351, 33751318, 84149763, 285935368, 539109142, 1610751536, 84214102, 16849666, 18612737, 319030791, 1684801564, 17502016, 2156527873, 285937162, 1906957,
- 4279762946, 39518967, 6029530, 318767208, 840308277, 926298675, 119670293, 101123590, 335748358, 909514518, 926299703, 842208790, 355939890, 117835271, 353699334, 387323412, 353834518, 572728870,
- 926222086, 909588022, 872627510, 51250983, 117835271, 892811047, 656811572, 589637158, 891692583, 842217012, 622335766, 437197352, 168045106, 51650306, 16843267, 588919846, 370353219, 622005265,
- 337448740, 33883141, 336004358, 405941030, 288043802, 50533152, 909312770, 220081735, 51648284, 100794625, 18089733, 545461793, 185406232, 2902528276, 33685787, 16850178, 235800834, 257636913,
- 185598774, 841500211, 16856421, 18612482, 50726145, 1143363153, 67182154, 35389955, 486670593, 218759681, 255406606, 1024727900, 1114000712, 50468655, 2654209797, 508183590, 2349008129, 219616078,
- 286069005, 4194238976, 4177651966, 1124122370, 20480, 857092887, 54409010, 53347127, 370554151, 926298675, 101058325, 370545685, 1043792415, 640955650, 370554151, 926298675, 117640725, 101123587,
- 639771398, 318914087, 842208819, 104019766, 639771398, 639045143, 134617643, 2333217803, 403837967, 472391189, 255342357, 167907878, 1296569868, 369299475, 304621352, 320414999, 404690970,
- 286928013, 537926196, 84280857, 1527847531, 436681259, 993740805, 774157126, 773394699, 643432746, 17241131, 33686046, 50404610, 184880904, 3074236956, 271332294, 67834120, 33620251, 167910401,
- 4265165088, 422144429, 336202016, 2214794774, 1210790750, 16797777, 2180978688, 3355527938, 26368, 572925701, 117842467, 587661838, 36582694, 102900259, 909587719, 909522742, 640955701, 640034598,
- 370554151, 926298675, 101058325, 486934023, 370545667, 387323415, 926298675, 37552702, 656811572, 891758118, 842208790, 118830902, 101123590, 336925958, 370611734, 1258428182, 270213928, 168637745,
- 520488713, 806618371, 690494768, 337448737, 33817861, 336004358, 422652710, 271201050, 50533152, 67437058, 790763781, 118173484, 33620743, 722863107, 437924650, 487533360, 84149524, 117769730,
- 33760533, 134875138, 288303374, 237776135, 18612737, 50725890, 1143363153, 67182154, 18612739, 486605314, 235471361, 673591306, 926029879, 100992281, 50660354, 774647827, 473181505, 50793480,
- 33685789, 16849921, 1308755461, 1246111321, 50594332, 131074, 50134808, 11600419, 5832775, 891491072, 891692595, 891758118, 840308531, 926298675, 117835285, 336860422, 588591879, 118948381,
- 858986006, 842215990, 101979414, 572662534, 589702695, 117842466, 926299427, 892797502, 322254645, 857085447, 875902514, 589702950, 352789026, 1246391815, 503382273, 289608245, 740364582, 69021728,
- 2458976517, 235798785, 420679181, 1199273477, 319114619, 237312780, 454692618, 34021137, 16843009, 588906842, 576408083, 206645278, 16848663, 370750972, 17897990, 33620511, 100802049, 219810568,
- 70584599, 321391901, 1526792449, 1013399640, 16843265, 252515586, 420940037, 475237496, 85946110, 743399685, 35065924, 33589786, 4261353472, 3372331265, 1308638720, 856883200, 640099878, 372582182,
- 909259542, 570823991, 117575175, 588591893, 909509149, 353776179, 587597332, 640098850, 102900514, 909587719, 892745526, 891748924, 118956839, 842208790, 640955702, 119677475, 842142997, 117834753,
- 842147348, 657529877, 419563781, 1812072216, 220011117, 1395612759, 151847989, 421337367, 470756405, 17433621, 25703169, 839653138, 172047420, 1979779856, 84152090, 18547203, 486670850, 117506305,
- 889394452, 34215445, 725303297, 16852804, 18612737, 218498050, 403244673, 3995477275, 1040319537, 19804979, 50345524, 3959368960, 3187865346, 771757056, 18176, 370553345, 34477077, 656810531,
- 875898406, 909522742, 34473729, 640033315, 589702695, 117835298, 370546454, 909586995, 909583670, 372388662, 857085719, 775370290, 102900482, 352716295, 1772028181, 1698190746, 2354073479,
- 975709741, 25637427, 959450429, 370086693, 823860254, 723785247, 588842529, 950621297, 16648971, 474037253, 655895069, 1176381214, 1900217650, 543701323, 3187810075, 1382520659, 1027238285,
- 1283534647, 707563089, 76086830, 84283665, 252842769, 1208683524, 2773833788, 38815008, 269291284, 303043354, 759727196, 996745510, 196618, 32636710, 13894128, 2228237, 16777267, 336926258,
- 572720646, 909391142, 101127990, 656548614, 572728870, 370542342, 926298675, 354760246, 372388662, 842208791, 640038710, 17179171, 1014065175, 1969571948, 382037309, 269032990, 320738844,
- 169548813, 1059994703, 4261544970, 236862956, 404821271, 169745163, 1128283464, 1853281281, 2185261900, 1030440818, 151783933, 101519894, 1047223819, 1109529399, 269163780, 1561069595, 16801121,
- 4160686080, 3120747522, 11008, 909513509, 387330611, 589702677, 50791970, 587662094, 52888110, 656877094, 857085493, 355939890, 336922119, 3263234327, 187182355, 269225233, 186062858, 219287220,
- 137496587, 3155104783, 604967690, 336869432, 557332538, 3993073923, 84026415, 268567340, 574946842, 438575661, 641084955, 286772737, 18744065, 503382530, 85131523, 65542, 49938182, 13304091,
- 83886111, 640025379, 372582183, 909259542, 101127479, 320279573, 859190803, 353841714, 17237542, 145502757, 824314636, 856822320, 152645937, 806388087, 134874398, 118694180, 219386625, 18612737,
- 469828098, 286327298, 31522325, 36119339, 622199327, 402653440, 4261542911, 1241527555, 890699776, 926299703, 892601150, 656811572, 891748910, 840308503, 926036531, 926299703, 909588022, 355677494,
- 387323413, 572925735, 117842467, 487851526, 35525634, 857085463, 587345429, 419825186, 68626710, 16843266, 67437826, 304422924, 320670776, 1864314629, 33892148, 16843011, 101450529, 470833721,
- 472193294, 50397697, 537396486, 573712428, 824382227, 33627909, 285609736, 1618757925, 120086877, 33752582, 16974111, 251724033, 454821396, 201790219, 274149646, 16843265, 1413226498, 1028871493,
- 118498375, 35652872, 33620226, 402653440, 2634153471, 956317698, 587268096, 336011810, 353699334, 387323412, 353834518, 572728870, 859113222, 909588022, 875902262, 640099878, 842344230, 907482930,
- 37631798, 370422583, 19076886, 638259991, 33620248, 419759109, 456337698, 254815767, 84218654, 84279812, 136713223, 1248264462, 269618261, 85852678, 17761546, 554762657, 845817647, 84220215,
- 35521029, 469893378, 50725890, 1143363153, 83959370, 18547203, 16908804, 892341765, 272252694, 452985088, 4194434047, 1610658306, 892796928, 117842466, 858920487, 875901719, 774317606, 389359362,
- 858920471, 926364210, 102171195, 774047494, 36579074, 117842467, 52233734, 842150707, 773142326, 488841986, 35525634, 857085463, 587345429, 117835298, 909522741, 872562231, 537987965, 370213157,
- 35330821, 251987205, 940712224, 135470859, 1650204459, 50662454, 35455749, 134809605, 320945968, 33625885, 656871441, 655955997, 17900846, 134546947, 841493536, 605164323, 689317936, 50464022,
- 23258625, 16854529, 592333137, 67503621, 50405121, 151060737, 758269460, 50466087, 33620485, 692541740, 16846351, 16843055, 1045628679, 118498119, 35652872, 33620226, 33627906, 319491848, 16793120,
- 4261353472, 3355549185, 19456, 909259575, 640030007, 336925987, 370611734, 638916374, 102900518, 909325575, 909522742, 572667701, 890713351, 640037941, 656811559, 857085493, 859177530, 352456215,
- 36579107, 102900259, 352456199, 322222357, 841356317, 67437088, 673257989, 773266228, 337841968, 16908803, 890377486, 117769730, 1479812628, 521276479, 84882491, 18744842, 673450754, 690096385,
- 3959488769, 19202305, 839782145, 84220215, 35521029, 469893378, 118294530, 21632562, 67371559, 18762308, 453116677, 16843265, 373242639, 170602519, 554762497, 1451823, 4278386689, 48235383,
- 10879155, 372572416, 909259542, 570823991, 117835271, 990315278, 926299906, 875902518, 370554151, 926298675, 117575189, 503451398, 52303618, 352521751, 657729059, 640090670, 53356326, 336921135,
- 504829462, 638916354, 102900518, 909587719, 37631798, 235340605, 640026370, 102900514, 909522183, 909588023, 909522742, 640100151, 36579110, 370554151, 926298675, 336922133, 387383838, 53346875,
- 16920103, 557526386, 120404768, 371786253, 16843011, 571343105, 242167566, 470486033, 605493541, 354557977, 643702028, 809575718, 522722826, 134485535, 18875398, 453574913, 405410589, 1008470788,
- 37621559, 184877828, 943334175, 993465620, 118758935, 1040385028, 440819778, 118167320, 354493956, 420940817, 655500563, 623257681, 168640311, 438181908, 639112996, 487131931, 254752318, 16846369,
- 67306242, 2466390029, 33686304, 16850947, 353437954, 1213345311, 387353404, 50726423, 16843037, 84024577, 1981090057, 1378627374, 858263357, 151853087, 305477419, 503451400, 303833891, 235281712,
- 323440420, 1599293441, 84214826, 35521027, 503448066, 84148737, 859051268, 21514522, 593264214, 33685762, 201785632, 790110488, 845558296, 1162096175, 67569415, 16850178, 52232449, 689047046,
- 1413235792, 51787623, 197893, 4278386689, 32309889, 9109707, 102039808, 101065506, 991233543, 657864194, 842208790, 571815734, 117900806, 386014743, 588711430, 775238694, 36579075, 337060647,
- 504829462, 638916354, 102900518, 909325575, 37631798, 102970677, 101058310, 101058311, 640034567, 572663587, 54408999, 774321975, 372581122, 909259542, 387319351, 909509179, 36582453, 654454325,
- 840308277, 909259315, 134608897, 51651330, 370477317, 386156100, 487525914, 657334807, 425410582, 169354276, 18743563, 386532097, 1026101268, 33633070, 168100611, 841554970, 691214875, 51586063,
- 855704066, 285410818, 21762338, 286328327, 19857942, 352388874, 505747994, 655769692, 488055342, 387583503, 356730628, 101319693, 33751554, 622992649, 286202408, 3355518745, 134349083, 1366565132,
- 16846698, 219939073, 2102729759, 102050083, 136142896, 488112653, 252909333, 775967538, 85604660, 33686532, 16843292, 134355970, 773459469, 134491691, 389027844, 117965164, 50528770, 134355457,
- 2099916823, 220142677, 16843036, 1365905153, 134808833, 52703016, 33818633, 33685787, 805306624, 1459757055, 1476443650, 924254208, 640099878, 506930982, 909259522, 640103477, 925049638, 909588022,
- 640955702, 102900518, 117835271, 922893831, 372388662, 101979414, 117835271, 370611734, 101061653, 859178759, 336926258, 639771398, 370554663, 875901491, 102900518, 1126560775, 84160871,
- 1092882437, 1918774856, 742135606, 690360078, 824516372, 1260927061, 270078231, 50463517, 1350659841, 539116922, 606085905, 1195905831, 219501696, 1110321165, 555619642, 236656654, 152245814,
- 1466699281, 253697539, 520689428, 1230573606, 236005447, 151453992, 824326414, 320285515, 19211790, 455024668, 911355450, 202785573, 218564623, 1079127308, 906115426, 656418308, 520750637,
- 288031751, 262934, 4281794561, 26542374, 5177557, 574035712, 925312806, 909259542, 589706293, 923207202, 842208790, 892745271, 572728884, 101058310, 117835271, 908535334, 372388662, 117838869,
- 101979414, 859178759, 336926258, 639771398, 370554663, 875901491, 102900518, 572893959, 185867845, 1027033907, 420163643, 235604238, 219757834, 472791568, 184684857, 84410889, 688062978,
- 1666002511, 1483618355, 218961226, 977415720, 236986133, 890116889, 285807126, 307651855, 655040784, 875179057, 36176129, 705370114, 288433685, 134938893, 386205442, 370806290, 908605253,
- 911743762, 70583881, 757538854, 119474694, 370223876, 16778243, 2046760960, 3003292674, 26624, 336922387, 387323412, 353829406, 102900518, 926222086, 909588022, 775173430, 36579074, 370554151,
- 926298675, 117835285, 35455502, 37697078, 657732918, 857085493, 355939890, 235340302, 369559300, 52303638, 352456215, 36579107, 654585383, 16846814, 587858689, 285835047, 388509216, 84154399,
- 67240196, 554369795, 490220836, 674970136, 134744086, 152045570, 186088821, 387458332, 555751717, 319294739, 1113011743, 575945996, 438517045, 101319954, 184615201, 1009392411, 691810609,
- 890127873, 287656771, 51055369, 16981506, 18743809, 151454978, 2574540636, 84224603, 537003012, 33686019, 50528544, 1026821892, 235412113, 377255177, 486737416, 16843009, 151257629, 470812425,
- 188567601, 857821240, 185737275, 491273998, 572857881, 809183255, 2570799, 4279762945, 17760897, 5636310, 370606336, 387323415, 588711430, 775238694, 53356290, 656811559, 387322887, 353834518,
- 589440550, 117842466, 926299701, 909588022, 640104244, 889401126, 389494326, 101975558, 922893831, 372717110, 909259542, 102896951, 134285062, 504305041, 185210398, 16850433, 102307591, 556143627,
- 86259487, 453313541, 405217828, 773590286, 69541160, 16843267, 134283777, 169741581, 136463160, 16843009, 691415061, 486609178, 420416280, 741088794, 2164523294, 320605715, 492843013, 570559752,
- 85269027, 522457865, 35598877, 83973728, 18547205, 469893377, 67503873, 1812470803, 185548900, 16843009, 252840220, 723720200, 588264768, 404564534, 16843024, 504044545, 65564, 50134808, 11731659,
- 16777344, 386014727, 370611734, 387323670, 589702677, 772212258, 354887427, 387191831, 876021525, 37566004, 336922407, 387323412, 353829406, 102900518, 926222086, 909588022, 775173430, 36579074,
- 370554151, 926298675, 117835285, 35455502, 892810806, 858203700, 926353158, 909588022, 891761717, 842208790, 236271414, 34473730, 626327815, 910372119, 588071721, 369559581, 151788572, 807411226,
- 891894062, 20185345, 18552577, 167969025, 159328035, 674111505, 68689687, 33620997, 184746756, 942482465, 993663005, 134747688, 269746696, 889258254, 454689281, 387923487, 405085195, 538518807,
- 151851809, 21253671, 739648171, 1076310846, 52044558, 35652354, 537002242, 674704430, 321980723, 18156299, 756287521, 386467884, 1262695702, 185143589, 503448331, 33620227, 84017438, 1599867143,
- 710646132, 67372293, 33759234, 18874882, 251921155, 445726004, 403574547, 437140524, 538581572, 135667517, 18678534, 486605057, 151585794, 1044849415, 402653440, 973272575, 1962989057, 388300800,
- 118952980, 926233654, 640025149, 370411303, 387323415, 572925461, 102900259, 909522183, 926299703, 657929270, 53421606, 926299701, 335939095, 909510406, 54329919, 858207270, 118752774, 889339447,
- 842208790, 571815734, 117900806, 370611735, 926036758, 117835285, 101123590, 53348102, 19277351, 788594953, 268828929, 67437834, 572791557, 219027495, 489172508, 33752101, 33620225, 218957825,
- 1127746078, 16844834, 185073921, 16911363, 16855041, 757992961, 186129680, 505026831, 1746807852, 537924753, 353048103, 201656325, 370412567, 437587472, 353313320, 252127387, 235602192, 102250242,
- 151913734, 22437890, 453117189, 33620225, 101122332, 136057604, 255878252, 16843019, 302586881, 588777487, 120930347, 50921993, 874121737, 235539714, 236526098, 203043118, 16843009, 471730972,
- 252871014, 369366558, 50463489, 134546438, 387058695, 336470054, 1946091776, 3070426367, 1912648194, 587399168, 656811574, 907093299, 909522742, 926299703, 657732918, 857085493, 355939890,
- 235340302, 386336516, 387323415, 370611734, 640029975, 117842467, 656868398, 336860423, 504829462, 638916354, 101065251, 909587719, 37631798, 875968055, 657732661, 892610086, 656815159, 572728870,
- 101058310, 100737367, 21628426, 135333906, 522074909, 186064702, 387458332, 555751717, 302517523, 1113077279, 764943116, 472059710, 454362889, 420088860, 741023007, 373183289, 16843023, 656607747,
- 537921919, 504899631, 33752088, 16843010, 16843009, 772345097, 103361308, 4244702465, 306398743, 128646659, 991758097, 524164893, 50726934, 16843037, 67247361, 252119305, 1028665884, 730863883,
- 438505275, 537068035, 33620482, 925575964, 236272464, 625689397, 185272593, 52298243, 503447809, 117768705, 639699461, 404891941, 689384213, 840115763, 67446059, 101978373, 4278255664, 49676204,
- 14025018, 318767197, 352716311, 37619463, 926299703, 842208790, 571815734, 117900806, 370611735, 926036758, 117835285, 101123590, 53348102, 656811559, 387323399, 353834518, 589440550, 117842466,
- 1043805749, 640955651, 572728871, 101058310, 908265223, 925312550, 16845238, 672465154, 270149943, 186195201, 504961550, 1730030636, 537859472, 353048103, 201460229, 370477848, 420744464,
- 908206889, 67175715, 605750532, 236463906, 674110477, 50530877, 117637377, 370552589, 33883910, 100736515, 17761801, 437323990, 271546887, 489305635, 16846872, 186384641, 2170952734, 371068690,
- 67180036, 67502849, 185010181, 572986897, 35532832, 83973728, 18547205, 469893377, 453184259, 677082178, 84411415, 538315016, 994055726, 16777486, 2046760960, 2986483459, 33792, 842413335,
- 926299699, 926234166, 640037941, 654454311, 857085493, 926299698, 117842453, 336921358, 35526420, 909259315, 775173431, 640034562, 370554151, 926298675, 117842453, 336004614, 504825620, 34484994,
- 774316821, 640034562, 117842467, 926299701, 876033590, 892666430, 572728870, 335939334, 387322901, 353829406, 589440550, 436602402, 721488646, 50463767, 117900033, 505286149, 337787945, 723922980,
- 50529571, 469827841, 708924732, 18293809, 117835267, 1026501661, 725164837, 117908516, 16843267, 858524417, 554043909, 218497281, 1043533068, 756687891, 84215581, 16843009, 959992369, 67188824,
- 587989762, 472260644, 942085140, 33627651, 822415882, 1614401056, 67446884, 520159748, 16843266, 151461633, 1429149189, 185598276, 33620225, 1430790913, 101061163, 18874884, 503382274, 503777030,
- 1819740970, 85597921, 441008398, 304621336, 17040644, 100801793, 622593543, 910242822, 33761801, 655884802, 242568713, 33819917, 16843038, 65537, 42139416, 13173068, 318767231, 840308247,
- 926298675, 640955701, 656811559, 857085493, 926298674, 589432341, 101123590, 504698118, 35526402, 352521751, 640034595, 589702695, 889652770, 909588022, 637680950, 572727846, 352781858, 370545685,
- 387323415, 589702677, 889652770, 926299699, 892679734, 656811572, 891758118, 858920470, 355939890, 101130758, 101058310, 1522078997, 219159584, 68360721, 588711431, 270152234, 86386713, 354222600,
- 17105925, 84215042, 68819210, 503514887, 134611457, 35729160, 438380073, 453248773, 404300582, 35201569, 419759109, 489826338, 254358297, 84218654, 84279812, 623252487, 437197352, 151333426,
- 51585026, 83952131, 16843010, 1241976577, 84215605, 33692931, 18546946, 33948929, 1125996624, 50469704, 134349059, 271660073, 136457239, 33688072, 84214302, 256456199, 16843042, 839852289,
- 84220215, 35521029, 469893378, 50725890, 1143363153, 83959370, 18547203, 486670850, 151126273, 976293390, 65542, 35651350, 12911262, 83886141, 842216967, 101979414, 656810531, 857085495, 640955698,
- 117842467, 36583207, 909587509, 102183475, 891491590, 589702708, 352716322, 857085460, 118961970, 639771398, 219574529, 1110320655, 572396602, 236656910, 168957493, 688328209, 2924383584,
- 2120844393, 991889674, 2169909595, 1653756231, 470375794, 369851239, 637810962, 103622432, 67575562, 51777835, 241042948, 3462305633, 824786021, 340272705, 2303465252, 1368679005, 909249084, 65537,
- 19463962, 13959581, 385876029, 859190791, 336926258, 639771398, 370554663, 875901491, 102900518, 641148679, 926168358, 372388662, 352716311, 640034595, 352723491, 842208788, 235345719, 639771394,
- 168301283, 1110320905, 555619387, 219814414, 152245814, 604442129, 1516984910, 506929225, 119277319, 1126252557, 844326217, 85264951, 119159598, 36704782, 656418306, 520750637, 288031751,
- 100991510, 1417155414, 288965511, 591207186, 1461261373, 494363472, 268902415, 16777483, 4244571392, 3103943938, 16384, 236270337, 51250946, 387322901, 353834518, 572727846, 926222086, 909574718,
- 641021238, 640955700, 656811559, 889652014, 506934838, 37623555, 33701431, 1024673319, 454434114, 100992013, 471805189, 1445469737, 522260023, 50594316, 17105409, 1261898000, 723070005, 621942586,
- 120866865, 52306707, 2986487070, 1733695246, 573646640, 1466570016, 34014470, 33686046, 50463007, 1091438858, 353377353, 134679042, 1628445444, 18235256, 84674588, 2169449484, 1059393379,
- 1396114485, 4194238720, 4177654270, 1124124929, 53673984, 891749166, 842208790, 118830902, 336922118, 387388950, 892745271, 891758132, 842208790, 236271414, 486737667, 386014722, 638916374,
- 102900518, 1043662598, 3493147906, 303239031, 673059864, 943133980, 101917967, 1296831251, 655822613, 387065895, 454236453, 1578442008, 151585281, 740306444, 807736090, 119679270, 723926529,
- 503383828, 33686018, 151126301, 907741454, 920770610, 185537334, 16849668, 18612482, 910238220, 117766910, 203498127, 419628292, 16843010, 117513474, 5319204, 4278517761, 40698620, 5570745,
- 840246528, 355939894, 354615854, 370546454, 572921111, 117842467, 909522741, 892810807, 570885941, 371656482, 890712882, 892610101, 640034612, 117648935, 926299701, 1041695518, 37631746, 236270391,
- 51250946, 679215381, 454829357, 36187430, 656737545, 673065244, 672020310, 17565210, 470039097, 386924816, 117536773, 923471361, 422327627, 303512107, 877146405, 505615111, 422387203, 1111298886,
- 219878941, 17752068, 19792129, 1913323777, 34014467, 33686046, 67240223, 241174278, 16843021, 184680750, 35132683, 436341255, 1064853779, 136053014, 738985228, 258179407, 70598437, 237916983,
- 812078615, 522400038, 4278255637, 32636665, 13173241, 385876059, 53347125, 370554151, 926298675, 101058325, 370545685, 909580055, 640955702, 370554151, 926298675, 117640725, 353699587, 842216215,
- 638924598, 336929574, 370611734, 638916374, 102900518, 1043662598, 872561922, 572663604, 370554119, 259510067, 337121555, 337389598, 638531640, 320014099, 269765964, 673654551, 421861138,
- 488119059, 16866837, 588650755, 355478813, 134612482, 757079834, 807670554, 119679270, 741284865, 353579056, 641597717, 17241131, 33686046, 33627394, 470355465, 3789042229, 252917557, 18547723,
- 469828097, 1092750337, 83557942, 17106439, 16852225, 288700973, 33883397, 16843289, 18678273, 1378427911, 50725130, 16852738, 234881280, 1744992511, 1224784130, 318832640, 104006174, 774047494,
- 53356290, 101132071, 640029973, 119677475, 926299701, 926365238, 656811559, 572662566, 372716807, 924260118, 909588022, 840316214, 571814707, 570896646, 17236494, 454533993, 319557141, 134356739,
- 235475730, 1377575189, 538142795, 320604681, 101061909, 1670916127, 420556305, 235538206, 404625039, 235699040, 335676674, 37095204, 218568708, 18752277, 620428928, 1679559202, 505881906,
- 554961685, 1838166330, 17311130, 18743553, 654509059, 480498487, 35394111, 739645470, 296986667, 235537429, 18415894, 773129986, 65576, 25296654, 13763043, 620757057, 924194327, 588580358,
- 639837734, 36579111, 101132071, 640026374, 117842467, 922893877, 654519863, 572662566, 506930951, 924260098, 371668534, 355938867, 117835298, 492904705, 168433963, 17039902, 236390658, 1376785172,
- 17897035, 219026703, 420942618, 460526358, 101454625, 168045612, 342622727, 723001630, 17897802, 504303392, 303437329, 522882554, 860693505, 101200677, 437192715, 527073048, 16911910, 18547201,
- 2333545734, 253440297, 402797063, 739772457, 593840424, 50531105, 336856604, 117440768, 3473045759, 1795207938, 891617280, 235341318, 639771394, 891692583, 640037943, 370554151, 926298675,
- 101058325, 352716295, 370611732, 909259542, 875836983, 640037941, 654454311, 857085493, 926299698, 101065493, 335939079, 387056143, 236388894, 639833347, 36582694, 589702695, 889652770, 926299699,
- 37041718, 185341452, 354298662, 287143242, 621412623, 423311146, 254293533, 33757483, 471668739, 874920780, 33685801, 587989506, 792339239, 371402526, 68561422, 16843265, 50462977, 70265612,
- 537069320, 100729089, 1007488012, 354159937, 68822545, 1471677443, 117572100, 640483848, 1547059992, 34350634, 33686559, 33627907, 1409946379, 390084150, 168170518, 118368043, 138829099, 17042190,
- 16908575, 35586305, 184945414, 1869027863, 319945982, 167838736, 305411628, 654446344, 84152872, 503382276, 185469441, 16784439, 2180972800, 3372290818, 24576, 909521701, 892745271, 572719630,
- 640034598, 654454311, 891758118, 858920470, 355939890, 352456199, 370611732, 926298675, 640955701, 654454311, 840308277, 926298675, 119670293, 101123590, 370414869, 387323415, 588579598, 641020966,
- 589702950, 17244706, 337841957, 721551875, 755964206, 151721036, 67305729, 638846725, 253372453, 271200794, 251992349, 305997330, 84156698, 488311299, 253372453, 86651418, 337576457, 117769475,
- 52761863, 503514632, 134611457, 437475344, 134355478, 876809997, 520226823, 656871193, 34548269, 453116677, 33686017, 184680989, 656487981, 117709582, 1279859477, 50594823, 33626882, 18678274,
- 235471361, 1015567892, 50594353, 858392578, 218632241, 136261122, 16777490, 4261349120, 3003300610, 31488, 909251841, 875902774, 774317606, 372582146, 909259542, 588592950, 235340302, 370414851,
- 370546454, 640029975, 117842467, 909521717, 1026962999, 101058306, 117575175, 336991511, 387191831, 892614151, 641021751, 891692583, 640037943, 370554151, 926298675, 101058325, 352716295,
- 370611732, 657798423, 656815157, 353633843, 2231437063, 455616796, 33686018, 589767435, 656289594, 537794083, 16910365, 50397441, 436668168, 641478183, 287454245, 50600486, 201724676, 287383560,
- 16843016, 16856321, 574911745, 621412637, 423311146, 254293533, 33757483, 439495683, 16843053, 33620277, 50539009, 728172039, 235423325, 520160267, 16843265, 83959553, 1241910796, 1396013423,
- 67447390, 35521028, 503447809, 185469441, 1462115383, 33685763, 16910086, 521739039, 185664260, 34540545, 34287677, 1196366386, 203827804, 33824514, 18809602, 169020162, 1296315988, 84216341,
- 54081797, 252381711, 3750146, 4278255617, 17892093, 7405769, 909321472, 909522742, 117835317, 336004614, 370480916, 118953236, 641021494, 36583206, 656811559, 840308277, 926298675, 119670293,
- 336921102, 37558038, 874984500, 104015668, 117904646, 926299669, 640955701, 654454311, 840308277, 926298675, 119670293, 101123590, 370414869, 387323415, 589702677, 17237538, 337841957, 151126531,
- 185010707, 16843026, 1593901359, 50397778, 336004356, 438838566, 707926543, 486672645, 824902937, 19923201, 335610113, 84155419, 488311299, 253372453, 86651418, 337576457, 117703939, 673323269,
- 857283890, 134355497, 876809997, 16909058, 134480642, 336400905, 268506374, 1174545962, 254422349, 33752322, 33685787, 16850178, 908921602, 201929522, 336466701, 118096388, 637667847, 67176998,
- 1243157767, 67372877, 18547203, 486670850, 151126273, 2287342606, 84292415, 35521029, 131330, 4279762945, 46924541, 6160563, 102957312, 51250950, 926299669, 842203710, 35526422, 35525908,
- 640029975, 117842467, 909522741, 889339447, 640099892, 102900518, 335942663, 370545685, 386014743, 589702677, 889652770, 909574718, 640955702, 640034598, 370554151, 926298675, 621879809, 50529561,
- 286261505, 573187085, 310337300, 16909572, 891888906, 907811644, 405475369, 16908548, 1260133656, 657925435, 16974337, 656673283, 673987878, 555950641, 50528780, 117901315, 1043147286, 557000229,
- 167875842, 756616463, 67257425, 50792194, 369966147, 708066337, 520227622, 50463235, 184746271, 959055635, 390083869, 151458583, 151988526, 155144998, 16976909, 16843295, 50470402, 3289057032,
- 660032700, 33817860, 33685789, 65538, 50265870, 13828658, 318767188, 926299701, 101123863, 924128532, 842217014, 370546454, 118756373, 336925702, 353834518, 572728870, 37619462, 656815157,
- 572728870, 352456199, 386014743, 572925461, 859113251, 1043805750, 875901955, 774308398, 1445793282, 33622044, 672415489, 323234080, 16846352, 472194822, 521606437, 16974616, 789252871, 86459934,
- 16843014, 539303943, 2299270950, 68689166, 16909315, 16843009, 35522562, 302194068, 1057883405, 3624278291, 453907260, 842863641, 605101833, 707857969, 18678025, 1006764289, 924794963, 403968819,
- 487524153, 455126302, 18678023, 18678273, 235144965, 1500857378, 911236139, 50858500, 419430656, 721550847, 838906114, 890699776, 926299699, 875889214, 774308398, 372582146, 909259542, 588592950,
- 235340302, 370414851, 370546454, 640029975, 436609571, 68757009, 16909060, 33620482, 589832971, 689910076, 521016867, 16910365, 50397441, 436668168, 574042150, 503528227, 202246402, 511415627,
- 103629125, 17042447, 16908575, 18809089, 101583877, 981495883, 86464590, 503448580, 65794, 4278648833, 45810305, 6750387, 104146176, 34473734, 656810531, 926230054, 656811572, 857085493, 355939890,
- 117835271, 336922118, 370546454, 926298675, 640037941, 654454311, 857085493, 926299698, 34480917, 352521735, 387323412, 353834518, 589496878, 101123618, 909517575, 656815157, 909252406, 37041974,
- 185341452, 354298662, 287143242, 621412623, 423311146, 254293533, 33757483, 471668739, 874920780, 33686057, 656608002, 506411555, 236331815, 34086175, 16843009, 117901315, 740173848, 352790322,
- 319227925, 17237537, 503781634, 2734753305, 33686636, 755107847, 910366758, 203827804, 33824514, 18809602, 169020162, 1077294676, 101979671, 1563125514, 185468998, 18809092, 16843010, 201654559,
- 1850410510, 1582511226, 67372330, 16850434, 219220993, 626072917, 34214403, 622855682, 65549, 42336001, 13173009, 83886178, 36582947, 858928679, 1027015230, 587337218, 640099874, 36579110,
- 656811559, 840308277, 926298675, 34473749, 387322901, 909259542, 875902263, 36579110, 370554151, 909259570, 570823991, 117835271, 336925958, 370546454, 640029975, 117842467, 1258357262, 117702942,
- 151323399, 153035009, 422456065, 340536591, 16845067, 117769219, 673523220, 840568602, 421335082, 638717701, 555356733, 167970052, 673520923, 840568602, 34145578, 84087839, 419759876, 457908770,
- 84349715, 259719942, 120206641, 436732161, 471928859, 520226823, 656871193, 34548269, 453116677, 33686017, 184680989, 656487981, 117709582, 1296701717, 50594823, 33626882, 18678274, 235471361,
- 1065899540, 84215347, 33693186, 235407367, 65576, 33423129, 11600427, 385876018, 909521717, 889339447, 654454324, 891748910, 842208790, 355939894, 117575203, 336921358, 370611734, 638916374,
- 102900518, 421925146, 33752068, 16908801, 673385218, 523320355, 236331817, 34086175, 16843009, 117901315, 925902362, 54207266, 235471390, 2073381644, 759252254, 67899142, 33627905, 520159489,
- 235668737, 2154842886, 660098618, 33817605, 16843294, 687866368, 3020091135, 486588418, 12288, 656807681, 119677734, 926299687, 372388662, 101979414, 639771398, 37631285, 639829299, 572662566,
- 336004614, 370546454, 909521459, 133714433, 1906332208, 101058898, 1852927492, 2723831205, 395807852, 20201000, 1833306734, 639505705, 117847871, 1111844113, 1258372966, 2118613505, 235997499,
- 2757507600, 1520527981, 85759392, 36569605, 33620227, 1142634018, 7749967, 4280680450, 29164017, 1966292, 318767150, 859191079, 353769010, 587597588, 875898402, 37631796, 640037683, 589702695,
- 640030498, 117842467, 370611732, 909586995, 269040438, 1614765131, 1346850101, 285303122, 2335588647, 353176577, 3863162185, 438781218, 117905696, 474433051, 1946224391, 992881160, 1031947881,
- 89614138, 101059088, 389490179, 48900646, 620888323, 1144984624, 33565714, 4076804096, 604180227, 1728078592, 117506048, 235340814, 908527362, 875902006, 654454324, 891758118, 842208790, 571815734,
- 101058310, 370542343, 923090455, 842208790, 588592950, 101123590, 353699590, 504828950, 773134082, 102900482, 909444870, 909522742, 875837239, 874919207, 623260711, 34943797, 1530874962, 287584322,
- 286463250, 33620485, 100861186, 942354717, 825958693, 101065765, 16843012, 1160773890, 1127493942, 421797165, 186264091, 50666795, 16843009, 707135745, 539632404, 388444453, 84352556, 16974085,
- 4261478657, 1510144726, 1669880943, 52247626, 184812548, 793069106, 777490540, 117966100, 33693441, 85917954, 504956422, 479558059, 1213162308, 38234192, 520159746, 185534721, 3189252115,
- 588021875, 503383840, 16843009, 35455233, 419759878, 369482011, 1144273171, 2954823176, 33565997, 4160690176, 2046974722, 1610636288, 890437632, 858920470, 355939890, 101130758, 101058310,
- 370410269, 926299671, 372717110, 842150678, 118830902, 101123590, 336925958, 370611734, 638916374, 102900518, 909587719, 909522742, 657720125, 117640711, 654771718, 875902775, 640099878, 859125542,
- 673519637, 840568602, 34210858, 50533407, 637600002, 1126373940, 286659364, 606409484, 85204239, 100795652, 638846725, 437793323, 537996083, 33751827, 1194734339, 470621742, 16978967, 84279809,
- 4202632199, 18590977, 486670850, 151126273, 976293390, 53874523, 1177750288, 895824424, 16908545, 83951900, 1448149766, 508183590, 33752065, 16843292, 33627394, 839781642, 459018041, 1296579860,
- 388973158, 117768962, 1143381556, 83959370, 757965315, 754975488, 4144163839, 285261314, 905978112, 922812416, 572728870, 101058310, 370545941, 909259315, 587345431, 117835298, 370546454, 53883443,
- 353769010, 587337236, 640099874, 909391142, 37107255, 2332560515, 444157297, 2755071501, 674573686, 1615861541, 1314272817, 588515627, 2138133874, 1436183019, 1334273336, 640519248, 842218024,
- 23658887, 1061789836, 254365469, 721486337, 16843009, 910295297, 43472216, 1737970447, 979995986, 2167355197, 747524428, 50343466, 4060030464, 3556896769, 553651968, 12032, 370546487, 842150706,
- 589702711, 353699362, 857088791, 909588018, 639776566, 706945574, 372380418, 101061653, 891691555, 2939565620, 371402286, 270734607, 1060981001, 503778116, 238758005, 100730373, 271725608,
- 2098668062, 1815900520, 1031103816, 16905837, 1650393345, 621630813, 304820414, 16851247, 1853227521, 2185261900, 1030440818, 234881536, 1979905535, 855650307, 14080, 51254529, 587337223,
- 1042753058, 372455170, 926298675, 775370294, 640034562, 909522215, 386014775, 386014743, 624362302, 34943797, 1363745654, 958734928, 571679031, 84280857, 588713476, 286531090, 1260459053,
- 773396547, 389818658, 590226708, 202378793, 909580551, 2952662829, 246547194, 2491968543, 575949384, 370412040, 371397142, 642521372, 476939844, 469834275, 251989000, 1245727531, 253173017,
- 1281584181, 757944596, 4194238976, 4177651966, 1124104706, 18176, 857092887, 54409010, 53347127, 370554151, 926298675, 101058325, 370545685, 1043792415, 640955650, 370554151, 926298675, 117640725,
- 101123587, 639771398, 318914087, 387265333, 723916558, 185075226, 260772372, 353899028, 354166814, 638531639, 201982482, 323831830, 672531216, 387065895, 437459237, 2367168280, 873536044,
- 421531674, 1761936902, 774157306, 773394699, 643432746, 17241131, 33686046, 50404610, 184880904, 3074236956, 271332294, 67834120, 33620251, 167910401, 4265165088, 422144429, 336202016, 302192150,
- 33565997, 4160686080, 2349062147, 1426065920, 654376960, 875898406, 389165878, 774050583, 50538243, 587662854, 640099878, 637740838, 891758374, 387396118, 118830899, 336922118, 320018198,
- 859243070, 320274974, 641021459, 891758374, 858920470, 118830899, 100861702, 101058310, 428868866, 369955343, 850496033, 269291789, 246316300, 70387471, 117572100, 352810756, 521477142, 2114533895,
- 34673706, 461136898, 537531935, 185272068, 16876708, 707271188, 151325988, 136192105, 17434777, 3775005697, 219352922, 2317423630, 841553661, 18950951, 608632403, 420485163, 270534917, 370868994,
- 18744065, 503513345, 286195971, 4262007047, 1144717631, 270482259, 4263387160, 65601843, 34212870, 33627651, 50535939, 484900122, 319030307, 100663808, 671349247, 1124115714, 19968, 370553601,
- 37622551, 892745527, 891758388, 842208790, 118830902, 117900806, 101122574, 52627206, 117899790, 640025379, 372582183, 909259542, 101127479, 320279573, 657916990, 875898406, 389165878, 396165399,
- 1930038534, 67768848, 572983090, 235809322, 270150186, 38016793, 84546574, 2284717835, 84349717, 325463906, 857478426, 856756531, 69609523, 421270356, 2419467035, 219287321, 25829654, 438506709,
- 774430462, 311167771, 33692946, 33685788, 33692673, 60568099, 236861223, 1442911264, 168896557, 995099110, 469893416, 16908801, 369230364, 3976072205, 1043939115, 257580882, 336465171, 33589793,
- 4160686080, 2349062147, 1426082304, 587530240, 52888366, 117835267, 656811555, 52897318, 656877094, 389158453, 355939095, 352716295, 320280084, 922893843, 386014771, 892736275, 656877094,
- 840308277, 355939123, 50791943, 101123590, 909574406, 353776179, 117900820, 221437442, 202378513, 252620413, 67383815, 67568130, 370476919, 119477532, 712902970, 33689876, 521895012, 69208598,
- 2752187143, 335610244, 606742554, 1762198797, 2567446048, 16845320, 2330197508, 302847521, 160438543, 723989033, 4266852641, 405480518, 151329040, 50466848, 50402843, 16843038, 16981507, 285675791,
- 20971017, 995312699, 538447903, 20184606, 201720809, 503513610, 503513601, 4246340355, 69410022, 3741455108, 236200330, 1511002637, 100663808, 671349247, 1124115714, 19968, 370553601, 37622551,
- 892745527, 891758388, 842208790, 118830902, 117900806, 101122574, 52627206, 117899790, 640025379, 372582183, 909259542, 101127479, 320279573, 925303870, 372388662, 117838869, 396165383, 1930038534,
- 67768848, 572983090, 235809322, 270150186, 38016793, 84546574, 2284717835, 84349717, 325463906, 857478426, 856756531, 69609523, 421270356, 2316706587, 302847521, 26220815, 438506709, 774430462,
- 311167771, 33692946, 33685788, 33692673, 60568099, 236861223, 1442911264, 168896557, 995099110, 469893416, 16908801, 369230364, 3976072205, 1043939115, 562716498, 302845460, 50354704, 4160686080,
- 1677973507, 385878784, 25088, 353776129, 572720660, 909391142, 353776179, 572720660, 909391142, 53355283, 100860711, 639829766, 640034598, 640025383, 372582183, 857151282, 101127479, 370414854,
- 1041437463, 506672898, 320018178, 640038198, 372582183, 858993174, 101127479, 101057287, 17171975, 454760092, 471602711, 454760158, 471602711, 286077586, 2097942541, 118427310, 33817650,
- 1996752642, 471209223, 973545237, 338329097, 1677853201, 371137404, 117710858, 2225343243, 437518593, 220473896, 543754501, 144246814, 67174666, 387671043, 370940950, 387652375, 370940950,
- 2482772759, 723989033, 4266852641, 405480518, 151329040, 50466848, 50402843, 16843038, 16981507, 285675791, 20971017, 995312699, 538447903, 20184606, 201720809, 503513610, 503513601, 4246340355,
- 69410022, 50336516, 4194240000, 2097293315, 385878784, 23296, 353776129, 572720660, 909391142, 353776179, 572720660, 909391142, 370553607, 37622551, 892745527, 891758388, 842208790, 118830902,
- 117900806, 101122574, 52627206, 117899790, 640025379, 372582183, 909259542, 101127479, 320279573, 1040254014, 387652374, 3726384150, 387652374, 1360796694, 168625687, 168956019, 654782980,
- 237644322, 438970894, 1142364432, 169086466, 772213509, 118691208, 1714381317, 471144979, 286339891, 640168755, 471028740, 35855129, 370613117, 387324956, 370547739, 387324956, 588556315,
- 685702682, 2349538094, 35459602, 33627138, 35389698, 2620531458, 506930947, 18096142, 287845718, 1342301706, 33630267, 33685788, 33692673, 4262202646, 960441324, 33575486, 4261349632, 2349043202,
- 1023422976, 923992064, 909193782, 923997974, 859256374, 117640725, 353698318, 387383838, 589702677, 889652770, 889339447, 656880693, 656877094, 640034597, 859190325, 152508210, 235078259,
- 1737431093, 1344025118, 740896285, 169877020, 387253761, 658517040, 808206119, 151459095, 440868732, 2421555485, 219287321, 42606360, 33626280, 4227738685, 928526243, 943203087, 976235072,
- 679549740, 50400293, 16843294, 16981506, 2384995596, 936906521, 1443038279, 219287642, 2317423630, 201327104, 537060862, 956343554, 17408, 892736293, 891758388, 842208790, 118830902, 50791942,
- 572720646, 372455207, 926298675, 654454327, 656811523, 370554151, 926298675, 352716565, 370611988, 640094998, 909391142, 387396147, 108472577, 690559530, 673779213, 505615132, 843455691, 219683356,
- 941431066, 252253976, 191696402, 840045334, 839979313, 153167409, 353701440, 302979472, 2317293581, 254017878, 33756683, 33685788, 33692673, 754861107, 1259289153, 1027621655, 573318937, 370804225,
- 18612737, 469828098, 303431938, 740665368, 274368257, 336465170, 16812577, 3674210304, 352449537, 768, 557130021, 218035201, 987493377, 256, 3892566784, 50337025, 556072960, 3892519221, 3892517116,
- 16792283, 3674210304, 352446467, 768, 557130021, 419227651, 987490307, 512, 4093708031, 50372607, 1792, 555032853, 555032885, 218035201, 218035201, 865678279, 754974976, 3909139969, 201377026,
- 923992064, 117835287, 654770702, 749614646, 86320143, 303570457, 37558541, 956962989, 151468907, 1074595336, 65644, 12452141, 12911337, 318767116, 909518599, 922893879, 1745225239, 639897388,
- 404560388, 1025051922, 169399809, 138176826, 218499080, 16804672, 1744770560, 1845547520, 3072, 101062455, 908527367, 37631798, 1025052101, 604974123, 488244262, 1074621976, 169359211, 138111546,
- 16779272, 3405861376, 3087203072, 3072, 640034579, 35534631, 387323415, 925247726, 370150423, 553981722, 382402848, 205152305, 117966597, 3432501, 20119554, 46203326, 786629, 318767129, 101062455,
- 117575175, 926299687, 101062455, 117575175, 3023451687, 623120172, 404625669, 1025051922, 604974333, 504956197, 420287000, 413991485, 996882698, 101189895, 913063949, 1798900248, 134809403,
- 1816136966, 855638528, 3238116865, 201377026, 6400, 908527379, 37631798, 101062455, 908527383, 37631798, 101062455, 604974190, 488244262, 420287000, 254584637, 436544804, 219289629, 3590405401,
- 1765411352, 134744124, 1799359750, 973740087, 134757736, 1074595336, 131179, 23592755, 7209153, 1638412, 102184704, 654771974, 1043805750, 102184706, 654771974, 1043805750, 420340226, 254552893,
- 436479524, 233052189, 741031193, 86320143, 1847074074, 929775629, 1782188568, 134744123, 1799359750, 973740087, 134757481, 65544, 33292066, 11928274, 318767175, 370618903, 892547862, 656811572,
- 370554663, 926298675, 101058327, 926094613, 352716311, 118953492, 656811559, 589506086, 370545685, 637998871, 654778915, 889339447, 654779189, 875902518, 321333030, 337123599, 67255052, 486867461,
- 201655563, 100795676, 91437829, 16908801, 403116805, 185734670, 33816891, 203228418, 33889548, 989922051, 16909683, 3540058625, 16909057, 891360564, 33887792, 84017409, 440744982, 184878900,
- 218695950, 16844043, 16908545, 1281773134, 67443237, 605684996, 1313565005, 218825991, 185469193, 570425600, 3523282943, 2499851778, 923992064, 370611734, 892547862, 656877108, 857085495,
- 389494322, 101058311, 842208533, 909522742, 101062455, 387322901, 656811527, 589506086, 387323412, 118756630, 857014798, 909588018, 102184758, 370414854, 640026391, 589702695, 370414883, 118953750,
- 572728870, 925304582, 892679734, 117842467, 654771718, 875902518, 372713254, 370546454, 640955187, 891692838, 37631796, 102900533, 117835271, 892745255, 86124084, 336204562, 88804627, 486867462,
- 201655563, 33686812, 206243076, 319493650, 33621265, 268763394, 320015634, 50416398, 16974593, 223019267, 302716433, 33621266, 285540610, 303368979, 84036365, 470090244, 184878348, 100795677,
- 286083845, 286525974, 16843269, 319948034, 219288842, 33685835, 33686275, 302795521, 269618454, 16843269, 17163521, 33620226, 1010766127, 16909587, 319095297, 406399505, 33620527, 168100097,
- 252250381, 16909579, 369164801, 655504440, 287901962, 18298932, 16908546, 151849477, 84610825, 33620226, 605236993, 85141039, 33620226, 1010569989, 33632020, 84017409, 151588619, 17107469,
- 16908546, 271857688, 654969129, 389624593, 16843265, 252380418, 854281, 10682369, 29295053, 983273, 372375808, 101979414, 639771398, 909391142, 674300214, 1076241984, 658581287, 3909173287,
- 656949286, 1093019456, 658515751, 1828717312, 2063858687, 184577792, 587208448, 841285632, 101979414, 891691555, 841037364, 101979414, 891691555, 841037364, 101979414, 891691555, 4076942900,
- 405021719, 4263715350, 606345161, 589436440, 605532162, 571873316, 388198179, 388178711, 388178711, 388178711, 388178711, 371467031, 117449495, 3976166144, 3305307395, 436211200, 889202944,
- 1342194688, 21504, 370553345, 101061653, 891691555, 389428788, 336922146, 909259542, 19280949, 353769010, 587597332, 875898402, 571946550, 370414854, 892744243, 841295412, 336926230, 572720646,
- 909391142, 102897462, 857084949, 875902514, 19071270, 638189875, 1076241213, 625752617, 673523521, 707011109, 638189862, 1076241213, 625752617, 673523521, 707011109, 639828262, 1076241213,
- 625752617, 673523521, 707011109, 676855078, 36210433, 709044145, 1412057390, 692662080, 1027753751, 1027426625, 664534596, 1227762243, 792745002, 1192700233, 1229012290, 390348093, 774521639,
- 1079257673, 388581679, 1094533703, 1144864328, 3640839934, 620757248, 3170941697, 184590338, 588447744, 859190839, 336926258, 440338182, 269684038, 269161486, 531741441, 185471765, 33560343,
- 3137410560, 2684504321, 385878784, 588447744, 859190839, 336926258, 588711686, 859190839, 336926258, 439355142, 269684038, 269161486, 205986359, 336465940, 3137409291, 320151473, 387386126,
- 354398603, 369757716, 65560, 21430338, 11272457, 922746886, 891750167, 2006062903, 397455383, 2869928696, 896524, 4325377, 17367367, 393388, 657929984, 118822711, 393705282, 2723590320, 212733351,
- 262315, 32702292, 11272888, 1507339, 3670055, 372389632, 587600917, 875898402, 372384054, 587600917, 875898402, 52635446, 875898406, 372388662, 101979157, 52630279, 892610086, 842217012, 336860438,
- 411961094, 421012002, 134292001, 404890136, 3408011545, 50405914, 454498332, 449774338, 469893666, 35395606, 404907523, 421667352, 404890135, 421667352, 20062743, 170137991, 539436576, 454560775,
- 2265020926, 118233371, 539371040, 454561031, 256, 4093769474, 50342147, 553713664, 4093714741, 4093709566, 3340034, 5963521, 38863104, 196785, 19079936, 20214323, 2969711811, 318767616, 520160513,
- 117485058, 4864, 336933395, 875897379, 352723479, 842208788, 640955702, 2173402530, 623061381, 606283563, 3888295426, 1310448590, 1381919325, 6056284, 16908290, 35848463, 2556081, 318767146,
- 924002083, 352716311, 842216213, 638924598, 370484006, 353834774, 572663335, 117582371, 909587719, 892679990, 144681223, 51064747, 218237698, 604638490, 353042707, 421271072, 201918988, 672472602,
- 2013334293, 17923073, 251924500, 21976147, 16920833, 17701417, 16849154, 35193089, 1427770881, 16826817, 83952896, 2919372801, 16640, 909510419, 353776179, 587597332, 640034594, 656811559,
- 370620199, 909259542, 589706293, 654771746, 37631797, 640955445, 370554663, 926298675, 353633815, 118952980, 639771171, 419778854, 1127552294, 707743537, 33685787, 50858756, 654712084, 825569047,
- 387716649, 16843024, 83951873, 404240665, 17111098, 454165761, 36183331, 202338934, 1277899586, 84217646, 353963270, 187894536, 791688462, 85397046, 721881351, 302714930, 17111837, 83952130,
- 117836551, 17106954, 131073, 17105173, 11403809, 2490393, 102039808, 926287622, 842217014, 101979414, 639771398, 926299189, 121058870, 101123618, 842208277, 640955702, 1347355137, 436405259,
- 993072933, 1009270309, 289162053, 357246239, 1258818085, 36186146, 1477904803, 335741772, 691355408, 1263937089, 170228039, 315558925, 1998326799, 858467637, 469762304, 855707393, 637578754,
- 923992064, 590820918, 117900806, 875968035, 657732661, 370554663, 926298675, 101127475, 656869126, 119677475, 294855431, 328929310, 402981898, 16843009, 573910793, 204026146, 338501231, 67832583,
- 17239557, 907733274, 436928802, 152509220, 504104197, 33621008, 3256221954, 20143670, 65793, 18022403, 35520773, 1507502, 3080228, 640029440, 859190325, 336926258, 370542342, 101061653, 891691555,
- 103233332, 370414854, 892744243, 388441652, 640955702, 352723491, 472211988, 1009858376, 657466912, 875053608, 523147845, 589638684, 524099376, 505423411, 434110757, 1043340841, 723199793,
- 607000090, 1042628389, 352602415, 673131283, 388182575, 554655271, 572858156, 33564956, 83954432, 2919372801, 603985920, 655556608, 926299701, 587597319, 875898402, 842217014, 101979414, 319161863,
- 336922146, 909259542, 1009136693, 90001432, 270534692, 1059339825, 1078344999, 740692283, 573254179, 19409186, 336137221, 119359073, 691291401, 1280779583, 170095687, 847315216, 808922411, 3747880,
- 21889025, 41484559, 3866669, 875888896, 102900518, 370611477, 353834774, 572924711, 117842467, 909522741, 640038199, 926229283, 353842998, 842217015, 370611477, 353834774, 639837986, 572662562,
- 471793927, 19469849, 285935105, 302452750, 488702474, 17042961, 202441985, 153690377, 1528958753, 184942849, 218171918, 117770244, 251729163, 589702059, 152599826, 402784773, 16843009, 167903768,
- 186483740, 352518423, 253898244, 152596842, 402784773, 65793, 4279894018, 38798075, 5374134, 16777315, 922893875, 909579543, 389165878, 589701895, 353699362, 387323412, 640029975, 572720931,
- 909444870, 892745526, 640103441, 372582182, 909259542, 859190839, 102176306, 639829766, 640034598, 117842467, 353699334, 909324854, 504694578, 857085698, 909588018, 640955701, 322175271, 404232216,
- 655240713, 135403539, 522458388, 319816748, 408761902, 1176274730, 136195117, 503843852, 659174188, 1042232855, 756814161, 34146075, 101122591, 523848741, 50403886, 536939013, 16865320, 806028548,
- 100933150, 2013336583, 151585282, 288707843, 661129490, 462497333, 33687064, 16843292, 52495107, 1191905287, 172536065, 553911816, 16843523, 33620482, 589387813, 118036009, 403374850, 16898830,
- 505595442, 68224779, 3173779460, 68898, 4279238658, 36045821, 2687190, 16777295, 909521665, 120796983, 638912006, 117842467, 922893863, 926299703, 101065251, 1042482951, 857093890, 389494322,
- 589706293, 37631267, 923866935, 504432407, 353834754, 572728870, 926222086, 892666430, 3338741511, 1300743934, 504497213, 3674473734, 943792440, 371071494, 487893516, 673615632, 504103695,
- 16909059, 991968441, 235640114, 691349560, 258410774, 268632438, 875900433, 892670740, 68161838, 2952859750, 184644606, 590302989, 16978219, 589108226, 450105114, 168106279, 656622603, 33757473,
- 400967681, 168172562, 4261939213, 1210073067, 488756990, 503513608, 33620226, 134349598, 1056317470, 131104, 66715560, 11797032, 5701688, 504430848, 353834754, 572728870, 926222086, 288686654,
- 656811572, 370554151, 926298675, 842215990, 101979414, 639771398, 370550567, 892744243, 102900532, 926222081, 657732661, 389494326, 353699334, 354617143, 842208788, 101127991, 20259363, 352715114,
- 1076637719, 742336295, 118822704, 756487688, 387405130, 235545938, 1080975108, 420431213, 454232594, 2790474000, 402730777, 285355822, 67833112, 1275548419, 353308686, 503848459, 4253155906,
- 187050230, 35521281, 503447809, 621543683, 650182952, 50466085, 16908574, 1213399297, 37314620, 67511300, 93406038, 318986494, 219424532, 134874640, 338041609, 2535916563, 252449044, 4327457,
- 4292542209, 47251948, 4194501, 923219712, 891692567, 389482293, 909522742, 102183475, 891491590, 589702708, 117835298, 654784307, 36381222, 857150998, 654784307, 371401511, 909259542, 587601719,
- 640099874, 138155558, 889258287, 1041051656, 1228827689, 520686168, 823998243, 570699083, 361104582, 269813789, 50397697, 2063906317, 335807546, 840780135, 1430651168, 371484989, 755170332,
- 252841474, 19595536, 909332097, 641806633, 388240456, 106134339, 335610670, 805703456, 1969684740, 908662291, 1277244473, 570426368, 2835563263, 536918274, 1140862976, 20480, 907491095, 101922614,
- 118822662, 909574718, 389165878, 336926230, 235341318, 925049602, 926299703, 640955702, 235086631, 318834434, 909574718, 336933427, 572719630, 120006182, 857081619, 892745266, 102900532, 387397922,
- 1145965860, 21889340, 436668419, 895578521, 1328425508, 1883971635, 1502366296, 1293897773, 1009857852, 471996171, 206327297, 856890391, 1093042767, 235614294, 1545999379, 606805030, 574562875,
- 21299764, 20464648, 1195903658, 723592968, 1279660577, 1198857257, 595236941, 1158289430, 674169348, 1717022567, 1068039683, 4262933327, 1117323772, 1058487384, 1669351588, 134677049, 3522429390,
- 1266370597, 33574008, 33590528, 3422705411, 654316288, 838926336, 336921118, 572719630, 875889198, 571933246, 336921102, 842203678, 875889214, 4160815662, 929136456, 1249993272, 929202507,
- 1099129912, 777153340, 1047351855, 793931070, 40850479, 2170763468, 1652640329, 2204252216, 1635797579, 1395603767, 1832795501, 1395601234, 1816018797, 67120722, 3942584832, 2718055427, 452988672,
- 1073757184, 838926336, 336926230, 572720646, 875898406, 571946550, 370414854, 892744243, 589637172, 589702695, 370414882, 926298675, 34473751, 640033315, 909587509, 387330611, 19203590, 2046951715,
- 942823225, 1379221602, 727528494, 927281969, 4265948207, 168174507, 1282021168, 438638400, 637866766, 1446516529, 978147376, 119352348, 4265017605, 2432778612, 1462861313, 929054008, 1044011058,
- 1227371869, 1281708612, 3244642371, 2131889461, 235625292, 235347476, 945172745, 237910382, 1630542097, 2600625661, 754974976, 251853055, 1090570242, 322371584, 906116871, 590624054, 121059107,
- 906104631, 909522742, 859190839, 336926258, 117900806, 856954118, 909522738, 587601719, 875898402, 909522743, 572732469, 101058310, 2318206727, 275911283, 204736266, 2805115402, 88121620,
- 302579976, 661270281, 134422809, 252263690, 101324814, 861476103, 1057888531, 353633290, 1009263687, 17244945, 959526841, 119677499, 2719357726, 3612423768, 201394183, 1245514520, 302719018,
- 516890656, 186388487, 1779304199, 790370080, 151986132, 774451991, 7222632, 4282843138, 42730168, 2752699, 16777313, 587601203, 640099874, 102900518, 370414854, 387323415, 656811527, 909391142,
- 389165878, 370611734, 926036758, 118699574, 572728870, 370414854, 370546454, 101127189, 656548614, 640090926, 842475302, 370611734, 909259542, 36582453, 891692583, 859190836, 1325536818, 644940324,
- 975247413, 709109801, 739514653, 925763110, 1732067356, 288443455, 320081948, 101457421, 203766791, 487988517, 135796486, 1428307719, 171261475, 353963533, 18488334, 557597743, 555560472,
- 302449196, 655034385, 992945471, 2718718210, 876818729, 556353067, 303043647, 403121415, 995571480, 220936801, 439428654, 4264169764, 724568003, 453842461, 454113334, 422589965, 235616033,
- 354559766, 421726229, 488649786, 218701095, 321202710, 992088622, 50348068, 11520, 84087299, 1543522048, 27648, 101062437, 587597319, 237446690, 639771394, 859190325, 909514546, 656811575,
- 875898406, 34477879, 336922119, 370546454, 922893847, 842217014, 101979414, 68028166, 857085447, 1040397874, 909522690, 589706293, 235341346, 101975810, 36569862, 589702695, 336922146, 842208790,
- 236513026, 1310462230, 1196958249, 489699111, 792221511, 841451077, 694570245, 182659365, 304165418, 623258166, 151337555, 1595345164, 1045117240, 285886830, 472259091, 1109410360, 858367829,
- 589172515, 958472234, 101320718, 3623944706, 437652231, 672608539, 540615215, 571123521, 572461608, 370350870, 472396296, 2418163232, 606077535, 2318095649, 286006571, 1009651476, 421153064,
- 1262092565, 1481252152, 1647327304, 1295457363, 556936758, 20910358, 454824771, 575545872, 690958886, 725035543, 4263387655, 168035236, 353110795, 253234707, 1291846144, 2751591935, 805351938,
- 16128, 370414903, 926298675, 355611446, 587597588, 36579106, 587597351, 909391138, 926299703, 1043792446, 372388610, 101061653, 908531207, 909522742, 589706293, 34473762, 252710630, 117906459,
- 825694472, 100995874, 488767747, 168101895, 35133200, 235802888, 522009908, 1163077157, 555745794, 387651599, 85142804, 1203897864, 672736555, 587794187, 436938063, 489040175, 185074697,
- 1578966032, 673734016, 640624706, 1518560811, 875187491, 593178140, 408297756, 67134523, 4076803328, 3020041732, 2046829824, 2449507840, 774176768, 102900482, 926287622, 875902518, 656811814,
- 842203678, 104281654, 101061894, 387322901, 889525780, 1043805746, 909587714, 657732916, 891748910, 842208790, 52311862, 791032855, 640037890, 840381735, 102053686, 51250950, 336860436, 118953494,
- 336987439, 504632598, 370546434, 640029975, 17179171, 336926258, 639771398, 389428277, 336922146, 909259542, 69612597, 958533678, 557462580, 16843281, 16843009, 958533890, 557331764, 16843025,
- 16843009, 589359355, 50792199, 135528705, 454891787, 504633641, 1767188759, 16866955, 655032578, 773092139, 136388908, 33752325, 83951873, 3459586586, 16851391, 117965826, 421339401, 925179946,
- 1330142979, 1380338268, 690306653, 656615219, 50610478, 67305729, 100991503, 67502593, 67308549, 50594049, 67242501, 100729350, 1242104581, 151587101, 3144843065, 235676948, 50726932, 33627650,
- 1832255746, 1399891585, 1046296443, 17773367, 67240736, 185205024, 1210191366, 1245275262, 187317049, 4231988485, 1143286248, 1969436495, 117773883, 35651846, 3674276353, 1565149520, 1481067350,
- 1127627547, 1178025558, 131151, 39321410, 9568585, 5242947, 102170880, 370414854, 855784983, 336926258, 587597319, 875898402, 372388662, 117838869, 370414854, 926298675, 875902518, 102900518,
- 117835271, 336926230, 639771398, 909521973, 875898423, 352456215, 842208788, 640955702, 1175135745, 1325860159, 740773993, 1361264438, 523314726, 336596246, 388240657, 437466137, 454631200,
- 1059729213, 941170461, 204547369, 538384669, 604510233, 454825756, 688951809, 487602263, 626807310, 1213609023, 573321001, 202385437, 16913422, 572199188, 677848605, 673196321, 1076117538,
- 1177689678, 655697974, 607921460, 723971963, 706745374, 1192826654, 603980288, 4026709247, 1778432514, 31744, 34477861, 654454279, 875889198, 101070644, 117640711, 572720646, 656811559, 908535334,
- 504837942, 101127938, 857084949, 875902514, 572728871, 336922118, 35526422, 654775317, 875902518, 640099878, 909521973, 387330611, 506921534, 34477827, 504829191, 352524035, 775357246, 34481922,
- 33689095, 571872945, 420878883, 84083725, 739967235, 168231712, 1444481805, 86454829, 319361544, 219617302, 370347784, 555616786, 624836632, 840711970, 655954975, 357502503, 419763994, 1395805727,
- 258228528, 1045444375, 505225495, 942936596, 50397976, 3960476170, 976304167, 572527658, 439165976, 34080522, 454039855, 589043743, 1208816158, 437071968, 50857754, 725110845, 725824791, 219679239,
- 554895629, 302975009, 419956748, 2770146325, 1044766890, 354103326, 740300321, 794435114, 303960350, 471404044, 1378963016, 558521395, 958345778, 439236172, 152903694, 1178224949, 17570088,
- 184960906, 386995726, 473713457, 185605413, 33562902, 1728008960, 3087191042, 1241530112, 554893312, 387323442, 336926230, 117835271, 924255006, 35522327, 387323415, 639771413, 654780198, 36579127,
- 336929571, 353829406, 926037281, 892811062, 640038417, 842208039, 589706293, 352716322, 1024983379, 487862604, 991502880, 488708151, 558635555, 135073371, 420808709, 320148300, 1680105744,
- 639571024, 268648225, 4043186468, 17435950, 503841025, 3074865186, 572742482, 129499659, 1125519376, 506084392, 420417828, 2167553317, 353737493, 117769480, 83960837, 2836440325, 271396790,
- 321463476, 606339591, 202704650, 682295611, 4261481252, 1145738970, 1512711, 18481154, 36831870, 2490534, 318767157, 842208819, 640955702, 891692583, 842217012, 639833878, 102900518, 387322901,
- 336921118, 639771398, 389227829, 588329783, 587408145, 588325635, 1191324442, 773924125, 775498038, 721499953, 421338118, 690691618, 859443244, 218186035, 1345599312, 893125675, 19596348,
- 337264873, 168366868, 791093279, 387722545, 269292312, 471009546, 875571992, 4294954024, 235002110, 235008766, 33616638, 486615040, 2969742083, 1107306240, 855703552, 288699958, 285418243,
- 353834518, 909522211, 640028983, 859120419, 355668755, 286590499, 857150996, 858071829, 288699954, 117835299, 354497827, 656811555, 387322147, 355669526, 185402147, 144182810, 504431001, 17899129,
- 235866625, 1887732077, 420420373, 1778228747, 689119244, 385949230, 18305537, 53030430, 370542600, 19988918, 788601873, 1845596158, 202622974, 34870274, 671159052, 4262596119, 305398220,
- 3573420801, 335614236, 18222356, 739967301, 455893088, 263388673, 335676421, 4160684288, 1744961536, 587250178, 891486208, 891692595, 909522740, 387330611, 101979414, 555037447, 892745269,
- 572728884, 370414854, 3188266263, 658923090, 2068005499, 1398621480, 1458568894, 1566338123, 1398164332, 2355796508, 943206228, 1804293167, 1397955738, 1986168118, 1635224201, 5453699, 4294835969,
- 38470203, 6684852, 908530432, 372388662, 101979414, 117835271, 370611734, 236197142, 639771394, 656811559, 875902518, 102900518, 118952981, 875898406, 842217014, 35526422, 336922135, 909259542,
- 640955702, 102900518, 1042745094, 891696898, 842217012, 101979414, 842208775, 875902518, 572728870, 1092071174, 1496724063, 320874038, 908993576, 623124505, 556486719, 387135299, 688590364,
- 337975578, 453906715, 672405804, 404428832, 674829331, 841499176, 874525779, 588784438, 1613051188, 403904029, 840306440, 623131427, 1277372479, 790054658, 895038759, 253449005, 504172310,
- 794173978, 709319216, 101524508, 219483649, 421800989, 387324183, 706286113, 252973082, 419497232, 892280856, 1513567576, 606605365, 456075541, 474293515, 219355427, 790502678, 1143680590,
- 16784424, 3070179584, 3103955458, 27136, 640026369, 589702695, 336922146, 35526422, 336926231, 572720646, 875898406, 102184758, 857084949, 892745522, 36579124, 891692583, 926299700, 640099878,
- 102900518, 336922119, 370546454, 909586995, 102184758, 101058310, 656810531, 875898406, 909522742, 370553395, 859190807, 387323442, 1788346935, 453052422, 908529950, 520821521, 656542239,
- 1093019713, 554239784, 589773071, 35460119, 555028998, 404359707, 402786052, 1126437146, 623519506, 1564306466, 404295483, 421532698, 976710953, 959655029, 1461526563, 639439407, 490219039,
- 454956303, 1249903129, 385943301, 354824975, 621485086, 858722087, 656950570, 470820160, 437980951, 421215272, 69935641, 723195912, 622337854, 100866855, 789320449, 1333088550, 858469005,
- 572460601, 422718987, 775171882, 1196990262, 976369546, 454564104, 269419542, 131087, 49610536, 3605067, 2162712, 354484480, 842208790, 102184758, 639771398, 909391142, 389165878, 889656854,
- 572728870, 34932486, 592772683, 1614949960, 1798710057, 1165709389, 1901165125, 1965631818, 741165604, 352395848, 991764926, 1078793795, 1448444746, 675826050, 563685477, 2585861663, 150995456,
- 2885809663, 570479361, 11776, 387322935, 842208790, 842217015, 101979414, 572720647, 1043608870, 372388610, 117838869, 908527110, 909522742, 589706293, 139789858, 574033415, 185423186, 302912011,
- 1683318877, 963137583, 1128876091, 910319139, 556149595, 1799167010, 254024114, 206642457, 302451473, 1449546512, 793864505, 1261121337, 823397657, 286464006, 454432547, 65631, 16777264, 852713,
- 922746969, 892744243, 640099892, 775369781, 926168322, 336922118, 35526422, 387323415, 656811575, 875898407, 370545719, 336926231, 656811527, 370611719, 101979414, 892614151, 656811572, 774317606,
- 101066498, 387322901, 336921118, 570820103, 420753443, 604833552, 153166434, 604045630, 487196209, 201854496, 34014781, 121579294, 759240471, 974195972, 725158408, 335614992, 605105970, 303765522,
- 286332428, 152705557, 638847043, 218634788, 873598984, 639653683, 1108614697, 50923027, 104151062, 203365131, 121507080, 572064008, 202194477, 974460948, 404175163, 138153239, 742929416, 34348314,
- 537723141, 554707509, 270145554, 320475145, 420749073, 923736095, 65801, 2293761, 46006528, 1966101, 908146432, 640955702, 572728102, 891692838, 372717108, 842209046, 101061653, 554119943,
- 187498824, 825628168, 152705166, 51317529, 2393252118, 789384966, 1904934437, 925250600, 151459900, 471149591, 34543635, 1060511420, 16806188, 14336, 335687169, 10752, 909521719, 656815157,
- 640099878, 926299189, 370611734, 118756630, 336922118, 370611734, 101979414, 654454279, 2472026887, 639437065, 302717727, 587926537, 52636456, 84017666, 151389957, 218563853, 1888300301, 641427235,
- 201524254, 304355343, 269553946, 454821126, 386929677, 673321744, 423505696, 403579940, 1611995163, 536872192, 3707958527, 50376962, 922754816, 1342194688, 590544896, 654652161, 389494326,
- 387322897, 640095511, 572662562, 909587719, 638661942, 637601575, 909391142, 353776179, 369559060, 101979414, 639771398, 657929269, 336922118, 909259542, 656815157, 892745239, 572728884,
- 3289650438, 885195060, 738565885, 218899006, 672342806, 654967079, 219620660, 21889281, 1193027058, 540881207, 673657127, 1144269122, 455028634, 807609644, 471809567, 505423384, 1487995429,
- 286920478, 379649540, 402784780, 402784513, 369885698, 34479617, 427228706, 1043340841, 723199793, 590288410, 1042628389, 352537135, 656419603, 388247855, 286219815, 606083108, 2759714, 4278517765,
- 48038644, 196785, 2621467, 6750260, 19084032, 640025395, 859190325, 336926258, 370542342, 101061653, 891691555, 103233332, 370414854, 892744243, 388441652, 875902518, 102900518, 922817557,
- 842217014, 101979414, 336926215, 572720646, 640034598, 370554663, 892744243, 572728884, 925304582, 842208790, 640955702, 117842467, 20235527, 627455171, 842483741, 824647740, 675424294, 798704948,
- 623647775, 1025454115, 639114271, 4263845664, 739774978, 473903904, 1311856673, 555750187, 369756674, 690498833, 203696177, 134681109, 503583751, 370943788, 34342189, 421461681, 1043340841,
- 723200048, 607000090, 1042628389, 352537135, 656419603, 388247855, 286219815, 606083108, 19471394, 303517212, 756689201, 625545754, 168176196, 136128535, 724903471, 134556455, 16851974, 639311663,
- 2297368, 4278452229, 48104180, 196785, 2621467, 7667763, 19084032, 640025395, 859190325, 336926258, 370542342, 101061653, 891691555, 103233332, 370414854, 892744243, 388441652, 640955702,
- 352723491, 906428692, 372388662, 101061653, 640098851, 640034598, 389490471, 842208790, 640955702, 117842467, 1043805479, 875836674, 372713254, 909259542, 335943479, 387191829, 572662535,
- 883762726, 1312080641, 927472933, 639646770, 1109927728, 2588226600, 739975214, 523248421, 640884798, 4263845409, 639173948, 826488085, 455749455, 67240449, 335742987, 388433437, 691090735,
- 269949974, 16843009, 419758337, 974657593, 16844056, 588976645, 2969708573, 689512190, 826159134, 439032615, 623128086, 792601919, 320144457, 791093291, 655827762, 740364126, 471999520, 1918566697,
- 859966479, 254692395, 218498309, 185079065, 890112819, 238432048, 151454999, 271723271, 454889995, 33685765, 185009409, 134874886, 65797, 4279697413, 48038644, 196785, 2621467, 5963828, 19084032,
- 640025395, 859190325, 336926258, 370542342, 101061653, 891691555, 103233332, 370414854, 892744243, 388441652, 875902518, 102900518, 923079701, 590820918, 117900806, 875968035, 657732661, 370554663,
- 926298675, 101127475, 656869126, 119677475, 20220167, 623588547, 842483740, 807870524, 675424295, 798704948, 623647775, 1025454115, 639114271, 4263845409, 504468234, 169057040, 18351364, 151060737,
- 572667183, 1863067953, 118762782, 84151051, 2969700110, 689512190, 809381918, 439032616, 623062806, 792601919, 320144202, 791093291, 655827762, 605097822, 572792856, 3909167388, 19019290,
- 455350795, 84216087, 68165132, 16908801, 1580646934, 16843059, 65537, 48168960, 2818770, 16777225, 621221665, 118957365, 4258398753, 4262974097, 387842530, 24052434, 2150912613, 1362460493,
- 3238002944, 218234880, 151048706, 589365248, 321324817, 654775091, 1379960577, 2152562484, 1862422837, 486611154, 3524846590, 256, 3523403520, 151005954, 890306560, 87500577, 925304085, 399666946,
- 3808304641, 1694618135, 2134200640, 1379172429, 3238002944, 218234880, 151048706, 285278208, 587405111, 286734083, 894535425, 880758144, 4258398802, 4262974097, 387842530, 7275218, 1, 47317725,
- 983081, 925303040, 654644485, 118956343, 388314405, 3530490375, 4263379223, 4258404322, 4262974196, 387842530, 1369637330, 2135785525, 877810228, 897600895, 65617, 33554628, 13763088, 16777231,
- 856893191, 287770387, 587405111, 18298627, 2134200650, 1362460749, 1300247889, 38876543, 18338415, 400752158, 3539271122, 31653399, 13768478, 4294311681, 46596811, 589974, 17237248, 922945303,
- 36112133, 2969381575, 948055383, 3407227649, 1291987212, 654382538, 1462599222, 4227793152, 3439512575, 151033346, 17235968, 388310791, 20391683, 3411018245, 942342422, 4250414722, 1308757167,
- 914238807, 3390429694, 16823293, 3422551039, 2516765954, 2304, 654391043, 621220663, 688199479, 777539842, 3590207618, 1828899606, 3400793385, 903478804, 5647486, 4294311681, 46596811, 589974,
- 922812672, 321324311, 33621783, 3417374151, 953548310, 39267714, 4251779664, 2116834994, 338100533, 5046986, 4291035138, 34603623, 196787, 385875987, 320935201, 856893191, 287770387, 587405111,
- 3340187395, 3120449281, 2134200707, 1362460749, 1300247889, 1599157631, 3538420282, 4263379224, 4258404578, 4262974196, 387842530, 65746, 64946338, 5833332, 16777227, 118956309, 388314405,
- 53813511, 3532782964, 31653399, 47322910, 4099473967, 1300247634, 3025220991, 2667577856, 1224943360, 151032066, 4864, 656487699, 85263671, 554907431, 891619095, 554112805, 3527869087, 4263379223,
- 1674713058, 399686141, 503440126, 1191367191, 1363200769, 2135850805, 3808318004, 1300247634, 5322111, 10420226, 38339367, 589969, 16777235, 621221665, 118957365, 557121825, 352663335, 53946117,
- 3535404361, 31653399, 47322910, 39255367, 18338375, 400752158, 1389035986, 2135850804, 2734575925, 2134200640, 1379172429, 256, 3506593280, 604044033, 556072960, 118953494, 908526638, 922959415,
- 554108439, 101130517, 370542343, 387323415, 3506577687, 370203901, 504698891, 640819482, 723456015, 404169507, 604118547, 201766141, 117771531, 101451009, 3242983942, 404234514, 538912028,
- 219095596, 740632603, 573118495, 235669310, 17237005, 101125383, 2600468736, 922929407, 604019970, 286720000, 654771718, 909588022, 504837942, 637998851, 588326694, 640034577, 120006183, 117900806,
- 555023889, 942086166, 523177491, 623319835, 370679597, 104731681, 17239303, 218500363, 37225991, 185930024, 321855000, 505623312, 606284319, 353048600, 47774993, 201721424, 218825221, 101059589,
- 16822525, 1577058304, 4211200258, 9728, 908145973, 909521718, 926299703, 556213798, 640033077, 52311847, 117835287, 654770958, 37172790, 16974412, 17173509, 352716039, 45415695, 202772516,
- 623057433, 268906038, 573251592, 202971170, 1052839958, 218563586, 67567879, 1041307398, 404168979, 824650786, 135005993, 723789852, 555227168, 65554, 46727067, 10289719, 318767133, 387322163,
- 856752703, 926299665, 117640727, 654519847, 387323447, 203505406, 1040587532, 404168979, 841428258, 672865062, 404696101, 34808087, 531692957, 102239243, 3640479746, 403379728, 908469529,
- 723459628, 404235043, 1119499, 65538, 47317561, 2097188, 922746926, 656811527, 389494326, 554107406, 925303342, 102176278, 908527366, 505493302, 102826242, 370542342, 909517079, 3961923127,
- 811877140, 339961135, 353766661, 387151105, 1091831053, 1714433639, 436671552, 344718875, 1694567703, 152124670, 285804552, 168870913, 1208616968, 695425295, 274428712, 657136141, 203172901,
- 662132752, 257324585, 624177938, 134290219, 218959126, 252974605, 986637, 4285661186, 39518921, 1966248, 620757037, 117575191, 925312550, 286725654, 654771718, 372717110, 637998870, 907093798,
- 504430902, 909514498, 640028983, 33949223, 1563430732, 2183535181, 1175392077, 305215012, 645877775, 256672294, 624374033, 268041798, 218696206, 269620238, 3020885261, 1246437909, 930229535,
- 337774357, 421364481, 1849365511, 913518126, 504891156, 588545534, 788427521, 84347659, 17828360, 135007954, 33557255, 5632, 1090665218, 167773952, 922812416, 52626227, 588715827, 1251148055,
- 3914590558, 2545306206, 3112698187, 1090699261, 11817145, 4279697410, 64291318, 2293762, 318767155, 859190823, 352460338, 117835284, 639771398, 909391142, 372388662, 909514518, 589706293,
- 638780962, 102900518, 370414854, 926298675, 711603766, 975124015, 338315875, 1782781987, 926111799, 740045658, 50603058, 840584790, 472654306, 808011306, 373170474, 2969704210, 889983284,
- 1028292704, 1696885373, 1027168821, 487276905, 388637723, 4262366080, 957882491, 1262566241, 1596140336, 838861056, 1996554240, 184566018, 892534784, 891499827, 891499827, 4046590241, 32633329,
- 1419990085, 3221050530, 1744831232, 2063854591, 402702594, 754983680, 922812416, 353765143, 587337236, 120006178, 891696935, 855785012, 637600050, 34480675, 18224149, 842208769, 875889214,
- 561374466, 1647859062, 2236172929, 1830775605, 2187475013, 2113832521, 1952107265, 810905664, 4261937691, 1082285617, 36722032, 1780574552, 2185854823, 909785186, 1650597983, 1652640368, 32046392,
- 1446006173, 1446068592, 1644056321, 1901473888, 33581888, 6400, 3204612098, 83886592, 20119552, 52503809, 21496089, 31653151, 3204628890, 20201981, 131284, 33554457, 12518016, 327682, 18944768,
- 420680451, 3791546114, 46258687, 37879231, 19725963, 65748, 50331819, 11731494, 16777246, 922885665, 572593441, 640034598, 926299189, 557004342, 101064981, 117835271, 4247126817, 2085094858,
- 4263182674, 711411953, 1364741191, 20994856, 1189477903, 657074008, 20316677, 997150265, 454574593, 1768003630, 303377055, 572260674, 4084773, 4289462275, 52691864, 1900571, 2752545, 355664128,
- 355665699, 857081633, 572593441, 925042471, 909391142, 859190839, 20133683, 924197687, 101065527, 117835271, 2288826370, 4076794474, 19607397, 1341455897, 1011233586, 676419758, 760823899,
- 1553006150, 1777535456, 643319370, 33892394, 1123500724, 239208942, 3663498358, 355115113, 1191012114, 4157903576, 622992385, 16793428, 43520, 3020039427, 7680, 557129985, 640099878, 891365158,
- 387330593, 336926230, 101058310, 557130019, 37107222, 46857696, 690488630, 4266088231, 1208943077, 1279732582, 1579569496, 32636479, 1216107035, 1044527361, 471999829, 454574593, 1768069165,
- 320088736, 1866137922, 570425600, 3305177088, 419481345, 556072960, 640033077, 859120391, 370611762, 101979414, 589497863, 907424565, 2533264385, 1577478657, 800373579, 841948227, 1311913274,
- 1598733236, 1313159112, 303052289, 1161913373, 907615337, 16797185, 2248109824, 3959585283, 9472, 336666881, 355676950, 842216737, 638662454, 891495206, 572724513, 336663814, 355676950, 842216737,
- 2969712438, 673351678, 282918417, 16851241, 51390753, 573051147, 4262537250, 556339420, 4257284609, 321005858, 36250131, 304360615, 4247463186, 321005913, 2695699, 4288020481, 55444354, 1245185,
- 51577088, 922893857, 320931635, 588718339, 19071534, 30326844, 658717775, 4248247056, 49215359, 152767332, 37503264, 4270194391, 722338200, 2701252138, 900324865, 16782390, 3892326400, 587273730,
- 768, 555032851, 4276486448, 992149786, 3909091840, 419627008, 50346498, 3840, 555032851, 389362453, 588591893, 590684949, 4247782121, 4198235088, 50019322, 3422174010, 3392915969, 4278255818,
- 16777306, 11600465, 587202563, 1915945251, 885195060, 16822530, 1811956993, 3238109954, 4352, 924268289, 355927831, 654776103, 121054983, 2097223477, 993541180, 1401851475, 943472181, 26119762,
- 2223252382, 1141929763, 2116055310, 242687618, 16781380, 3405792000, 1057076992, 2816, 353776147, 572720660, 909391142, 606345084, 589436440, 388251393, 388178710, 16786199, 3707722496, 2768461570,
- 1792, 654770949, 387126071, 1643693057, 2177406224, 4211156006, 4266140720, 86246254, 3439329792, 738416384, 620813569, 13056, 101062437, 656810531, 639771398, 909391142, 389165878, 842217014,
- 637998870, 102900518, 857084949, 572864050, 336922118, 909259542, 640955702, 404818691, 1278679075, 912472617, 1479816281, 691692598, 588789580, 454041880, 1179005972, 4263121973, 557261202,
- 924988487, 1236420385, 791087114, 894907218, 1379096373, 185018159, 1174932297, 138818869, 557195498, 908084530, 4469537, 9371651, 22479717, 1769684, 3866665, 909508864, 370553395, 101061653,
- 656810531, 572720646, 875898406, 842217014, 640030486, 101065251, 857084949, 926299954, 370611734, 857085718, 875902514, 572728870, 653459718, 1379087699, 861024561, 724192822, 1395865165,
- 844312880, 620974901, 840837441, 1026506782, 73730345, 353632517, 791552778, 523312704, 1577140520, 1395734590, 827536435, 944129592, 859001905, 2134389075, 874460222, 893398560, 134557196,
- 152771842, 539901983, 3350324, 3932161, 61604608, 327782, 856765184, 1008017681, 53347138, 1121778790, 3758096640, 3959554048, 83944450, 354746368, 18284833, 4110281730, 4265063937, 37831044,
- 2130518500, 1208025344, 2181105151, 50392322, 855703552, 1208034065, 3976346170, 33560828, 33553408, 1979962113, 117441280, 856883200, 856892177, 989602577, 976919866, 2348512771, 2348512516,
- 3657433344, 235077632, 100681986, 322109440, 52630323, 1123932675, 3587131637, 3086829826, 251589121, 3657433344, 235077632, 100681986, 50397184, 322110243, 4245553939, 3477664835, 4249420501,
- 4266197687, 15859982, 12255233, 36045568, 1572982, 873542400, 909522742, 387330611, 588322070, 640103441, 101130787, 381358357, 1468475672, 572887135, 2453676610, 18431389, 711411467, 1364741191,
- 4127094858, 1046877953, 1530431864, 16837118, 47872, 1979852291, 6656, 336671507, 842208791, 892745271, 336671505, 101058310, 656810531, 3140822566, 2436899394, 235617949, 672667202, 2405324936,
- 34672934, 1760231030, 445216829, 369175375, 1749546750, 1481393962, 1063134801, 4026532096, 4177684223, 604002307, 890699776, 926036758, 288686654, 909588020, 387330611, 589702677, 101123618,
- 101978389, 587597319, 535832098, 237398033, 471467536, 336364097, 168758542, 907429930, 1478436897, 2517436996, 407110724, 20927289, 694700878, 1191313757, 421200388, 2835261242, 556430692,
- 50332189, 2013261312, 1208219138, 671097344, 12800, 639833345, 387323399, 336926230, 101123590, 891488006, 926291507, 875898406, 909522742, 51843639, 336922129, 907097878, 640955702, 36054567,
- 396503286, 672212509, 810561586, 612398858, 140467748, 674192213, 555559187, 980219862, 523907694, 51841559, 3809231940, 403377927, 1530081883, 2257913148, 1761887234, 1281758324, 186277173,
- 486606866, 26934532, 794830085, 4244567876, 540099081, 151523393, 3170894592, 704904703, 184578306, 587208448, 841285632, 101979414, 891691555, 841037364, 101979414, 891691555, 838940212,
- 101979414, 891691555, 3909236276, 455550746, 4263912987, 640031538, 656808732, 639307777, 639310886, 438796327, 472262427, 438773275, 472262172, 4043384347, 639310631, 639310886, 3137340160,
- 671350271, 184578306, 587208448, 838926336, 101979414, 891691555, 841037364, 101979414, 891691555, 838940212, 101979414, 891691555, 3892459060, 455550490, 4263978523, 640031282, 656808732,
- 639242497, 639310886, 661717543, 640097050, 656808732, 640031770, 4263910172, 471475983, 454829606, 262182, 66977723, 7406119, 1507339, 3080227, 372375808, 587600917, 875898402, 372384054,
- 587600917, 875898402, 372375862, 587600917, 875898402, 372384054, 587600917, 875898402, 451346998, 471476006, 872294182, 472262170, 36120091, 640031237, 656808987, 639316734, 639310886, 661717543,
- 640097050, 656808732, 640031770, 4263910172, 454698767, 454829607, 471476006, 454829606, 196646, 57802947, 197157, 1835032, 318767136, 859190823, 504829490, 926036738, 572720663, 640099878,
- 117842467, 354489633, 4263580961, 1012146235, 774780186, 957293368, 1681995055, 589963028, 1092958036, 4250075715, 4250075821, 644284845, 302856254, 973542418, 268785196, 1596728592, 3884603,
- 12648450, 19334044, 1573072, 318767153, 859190823, 504829490, 926036738, 572720663, 640099878, 117842467, 859190823, 504829490, 926036738, 572720663, 640099878, 4228260387, 1012211771, 758003226,
- 957293880, 1682060592, 606674964, 1076246356, 1428175635, 775297596, 254031663, 1110782264, 689968228, 624383268, 640942400, 302856254, 956765202, 268784940, 3190564112, 238632485, 118755858,
- 89533498, 740691984, 3909091584, 419628544, 318772226, 922812416, 355665687, 354486051, 925304609, 926102819, 537015585, 3090560067, 453068501, 876988414, 1188279864, 2399266814, 996874885,
- 445201290, 998914927, 3405775616, 990074368, 50376193, 184551168, 554893312, 555032853, 555032853, 46866709, 43056496, 43056496, 26279280, 995572654, 16792400, 3590314752, 1241656835, 6912,
- 588591873, 555037447, 555032839, 590817031, 590820149, 557261109, 389488949, 3585831682, 4009687075, 4265017637, 1095319983, 4163228601, 4263711233, 1112474059, 1001783625, 995244877, 999293329,
- 994917202, 33554836, 2817, 2365777666, 167773696, 352387072, 622134533, 354488629, 4276290081, 4270653811, 4275831080, 1066205732, 3997158348, 1000209976, 151060992, 3858890752, 100699394, 2560,
- 85263617, 321201461, 18945313, 4275568905, 4270653736, 3674276467, 2365728254, 1072576751, 3992833227, 131131, 64356265, 4719160, 786438, 85262592, 889263365, 386340133, 939730197, 419620861,
- 2399302141, 1912530919, 3997976578, 604065005, 1682741803, 11488355, 4289265666, 37225429, 393288, 318767116, 889263361, 85271845, 657929477, 4254007977, 4246274673, 4270784999, 48752497,
- 735903304, 3981237502, 2947563246, 6579020, 11796481, 36438784, 2097261, 588579072, 117835298, 387192070, 858980894, 572662549, 36579110, 926299189, 53674558, 1127346476, 2474646324, 725430041,
- 606597617, 2102726933, 526082372, 37110834, 235291245, 2761309453, 84609336, 235012930, 1649508179, 202188433, 65541, 50331828, 7143981, 318767136, 372388403, 352460311, 235341332, 891495170,
- 909521459, 875902519, 587345447, 670217251, 1443960099, 1516389501, 927150878, 1127281394, 2474646070, 758853401, 40698610, 2152992003, 647061841, 1107627276, 1007423238, 171484056, 33555467,
- 3103765504, 3087150083, 671096064, 855703552, 369304341, 355676950, 640033315, 925042471, 909391142, 855785015, 20133683, 102900499, 352716550, 3036812820, 500864375, 4075957810, 455553063,
- 2939176743, 840915809, 557069891, 3517513288, 876753174, 37912348, 570311277, 21103622, 1800800006, 2439167318, 84675878, 27852107, 219023051, 1766823485, 3019899392, 755216127, 520137986, 10496,
- 120796929, 336926230, 34473734, 587670307, 859120439, 587345427, 842216739, 855840278, 926299698, 657732918, 1210134786, 1650613291, 1127423578, 1193624631, 3682952997, 556079630, 740815602,
- 807836193, 2149201475, 1248002709, 1636902749, 203854433, 1381106957, 65143106, 21102851, 115014916, 2554072079, 33568677, 46848, 1979853827, 402658304, 352387072, 101130785, 556995605, 656548117,
- 926168358, 20133430, 52507937, 1755512364, 30293548, 2140798562, 509629244, 1577141078, 1828885501, 474117634, 1117738538, 2087796527, 4245754943, 33571466, 46848, 1979853827, 436213248, 554893312,
- 370611762, 101127189, 557130019, 640955698, 589702695, 557126433, 1577170709, 1327651149, 4268832869, 3462529433, 1225991208, 144899626, 1979870466, 1866472214, 1109540479, 306720670, 3439135497,
- 83903042, 4261383168, 3422706691, 419435264, 620764928, 11008, 35533313, 34477077, 36577827, 37631029, 773918999, 287380226, 285540926, 50470433, 34476321, 2169108481, 1647851618, 2202749826,
- 1664628835, 268526981, 3379973127, 2018046206, 4273798732, 2001405934, 1209139657, 3422702456, 1250059064, 945980235, 1266836023, 929268556, 1240530489, 3187559286, 1309076734, 335662457, 21723210,
- 118489414, 50361931, 3909061120, 3087161859, 536875776, 11520, 35533313, 34477077, 36577827, 37631029, 640033027, 589702695, 101123618, 371262726, 370546454, 926298675, 4127274550, 946045256,
- 1250059321, 946111049, 3850658872, 470244098, 1199516442, 338331724, 4250206741, 437979045, 1296465963, 353708679, 1681504258, 2185841282, 1681406052, 2202749314, 3120445539, 941769777, 524306751,
- 1127312443, 1245722659, 3809344, 4287430661, 39519208, 1245367, 2031641, 2818085, 506593536, 236197122, 773989122, 1043608834, 641143554, 84353571, 892737287, 119997236, 624046870, 352724791,
- 1224212756, 943219329, 1229619812, 943219586, 3175580772, 1399548755, 3233719553, 3267325509, 4268320858, 1186906541, 1681504002, 2185841282, 1664628835, 2202749314, 3304994915, 625230526,
- 1784071103, 3282894444, 3245229761, 1768576700, 2332033792, 1493428479, 318813954, 654318848, 838926336, 336921118, 572719630, 875889198, 16974398, 237118246, 18093314, 842208769, 875889214,
- 2169042433, 1681406050, 2185841282, 1681406051, 2785124996, 1832806996, 369241938, 1767201278, 793996606, 1681504002, 2185841282, 1664628835, 2202749314, 3690805347, 792897281, 1765698898,
- 1526605569, 1834102595, 50358334, 3892283904, 3087162115, 520096512, 13056, 353776129, 572720660, 909391142, 35533331, 34477077, 36577827, 37631029, 34480663, 35525653, 37630515, 36582453,
- 588902913, 605624611, 2168987172, 1681471587, 2185841283, 1681406052, 1815954309, 1395601234, 1832861549, 1412378452, 596377967, 589568281, 19077657, 2187671852, 1686260042, 2187606072, 1669614409,
- 1412381752, 1815953005, 1395535443, 1849638508, 16789074, 46336, 755116547, 1792, 355668275, 354489633, 855786165, 755158525, 16073717, 11862017, 36307712, 458797, 588316928, 557130037, 1126826805,
- 839044861, 3556584706, 16073717, 14548993, 33620736, 458873, 588325120, 588587317, 4040032529, 49357570, 4249043766, 65738, 50331872, 7930371, 16777223, 355668275, 20133153, 4260381648, 2030235869,
- 1128516349, 3623879168, 201551871, 100681218, 2560, 320025363, 119735091, 3625263413, 1255395144, 49628411, 4266000944, 4260102420, 1111658938, 2348810752, 1543700480, 67162114, 2304, 16847155,
- 287384849, 25952513, 4251451752, 4268229220, 30211788, 4264821148, 879034060, 117523201, 16841214, 2046866944, 2550250754, 1280, 354489601, 3171029283, 20196862, 32126104, 16842782, 34602818,
- 14811727, 83886101, 926299153, 842217014, 638916374, 102900518, 352716295, 339869969, 962206230, 302848017, 975638038, 4044033550, 1531428866, 53093921, 33836548, 1327045147, 6749517, 4286840833,
- 43057423, 1310946, 336658688, 101058310, 891757091, 842208790, 909522742, 2432766261, 1528370963, 303570234, 992414999, 34278925, 1178664418, 707141980, 33836551, 1327110428, 10093132, 4280614913,
- 52625721, 327727, 387126016, 621220611, 3149609923, 20185403, 469636859, 1448958, 4280483841, 52494649, 327727, 654508288, 20382483, 3141255969, 872496059, 18220542, 384106981, 4294902016,
- 3892566784, 50338305, 891748352, 50402593, 1061149673, 3573612800, 335677183, 50392578, 285540352, 3573616947, 3892574783, 16783612, 117429505, 436332803, 1280, 287380737, 3909292323, 20917246,
- 738082586, 16782338, 117374976, 436278274, 1280, 557130021, 3573621521, 335686654, 4248820543, 16842988, 64684245, 15598313, 16777221, 287380769, 18088499, 1072496085, 37689857, 65555, 47906816,
- 15598100, 889192453, 856760629, 1070924049, 3556851675, 16838141, 117429505, 3993168131, 1792, 555032833, 856761105, 3573617666, 1061104638, 4265548289, 15205163, 4278190081, 34865670, 458990,
- 891364608, 288559393, 4275372323, 1070924075, 20962111, 1637588, 4278190081, 32047878, 458778, 891364608, 287380769, 4275372323, 4276683563, 1071333163, 2883135, 1, 48825307, 458990, 856752384,
- 555032849, 1070924085, 402445569, 3556841985, 1061104894, 256, 3909289727, 184610306, 556072960, 856760629, 555032849, 3573621521, 3573623806, 4275372351, 1071333163, 754897921, 2883135, 2,
- 32047997, 196727, 889192455, 622141749, 51716405, 51903721, 1061125609, 4145083, 4285989122, 40960518, 196846, 83886087, 53678371, 34681617, 4198449009, 3892574783, 3892517116, 16783612, 117429505,
- 1996613891, 2304, 354488581, 354489633, 3573616929, 738071554, 738120961, 1064370938, 2315140988, 1996554496, 3909289727, 151001601, 589627392, 554771217, 588325141, 1065169666, 2315153922,
- 738122559, 4265546754, 16908331, 50790263, 7799273, 720901, 588316928, 85270801, 554771217, 1068892437, 2315153922, 28705087, 47119672, 4273684337, 1068892553, 256, 335677183, 151025409, 556072960,
- 557130037, 588325173, 738120961, 738120961, 2101285890, 4248796223, 65679, 34012928, 1704306, 620757001, 554771217, 588325173, 1052115217, 1912768766, 738122559, 4248818945, 13959660, 4278190082,
- 24248838, 327799, 16777227, 287388961, 891355939, 35852577, 47054131, 4273684338, 1052115336, 4248778753, 1064763791, 16796414, 2097206529, 3993168131, 2304, 554775297, 555032853, 3573621013,
- 4275372351, 4258595115, 4277011180, 1065107337, 1996554496, 3909344000, 151055874, 285278208, 354488627, 288559393, 20919042, 1066335607, 3556841985, 37694718, 2948627, 7799042, 48825213, 327918,
- 620757003, 287380769, 354489139, 20123937, 4247978678, 29114254, 1061879415, 1895972796, 20941310, 65718, 41746432, 15598100, 16777225, 554775313, 557130037, 1070924085, 3573673213, 1996565502,
- 2415752961, 4160575, 1, 41026267, 590063, 554762496, 856760629, 34681617, 26148210, 41762424, 1072496111, 738120961, 33608961, 2097152000, 3993137666, 184550656, 287637504, 891359539, 288559397,
- 855782689, 26148159, 1258176120, 4247913148, 29048719, 1061879415, 3573612800, 3909289727, 184610306, 855703552, 555032849, 555032853, 3573621521, 4275372351, 4275372331, 3993124651, 2084538878,
- 9043519, 4285989122, 48825094, 458990, 620757003, 856761105, 18161937, 36901155, 20922226, 1070464375, 738122559, 754903043, 53214783, 16974056, 50790263, 15598313, 589827, 83886095, 319894289,
- 287380769, 588321075, 18161937, 29114231, 1061879415, 4206231871, 419227651, 20934914, 4270849462, 1068892553, 256, 335677183, 184610306, 285278208, 287510835, 891368737, 3573626145, 738082623,
- 738120961, 1996584705, 1996560636, 4160575, 4278190082, 41026054, 458990, 620757003, 287388961, 857936179, 17904401, 25755256, 3141418616, 20962111, 51969236, 1637608, 4278190083, 41026054, 196846,
- 983049, 287507712, 856752947, 87367953, 287388961, 1064436259, 4265605951, 4269211978, 1068892553, 4276618234, 4269212041, 1073364810, 33573630, 117374976, 1996613891, 184550144, 554762240,
- 553984277, 555032885, 3909296913, 3573618684, 3909299198, 20917246, 1069236087, 9043519, 4278190081, 32047878, 720922, 891364608, 287380769, 287510819, 4269211939, 4276683657, 1065172873,
- 4265557979, 4275372331, 196651, 50790144, 7799273, 589827, 285212687, 86054177, 554771217, 891363605, 52629793, 35126505, 3053535090, 2315161341, 20952577, 4273684343, 1068892553, 4914751, 2,
- 65602429, 196634, 889192459, 622141749, 554775313, 53813525, 1072496105, 402445569, 4198449021, 1576968961, 16793407, 3674210304, 3993168131, 2816, 287388981, 288559411, 354488627, 2101311233,
- 3682009407, 4275306815, 4275306796, 50347820, 2097152000, 3993168131, 150995712, 3840, 354497845, 555032869, 285422353, 891359539, 2298407171, 1241413633, 4265605695, 1061125450, 3053535226,
- 1996589566, 4147966, 4278190081, 65602310, 1245187, 557131008, 856760629, 555032849, 555032853, 554771217, 4275372341, 1070924075, 738120961, 738120961, 3156999743, 2348892028, 2084533502,
- 25820735, 16793463, 117374976, 3993168131, 4864, 557130021, 856765201, 554775313, 588325141, 588325649, 2315155201, 2101311233, 4269211967, 1065172873, 3556851675, 3556846846, 4265553150,
- 4275372331, 262187, 50790144, 15598313, 720901, 1507345, 354484480, 53678369, 554775313, 588318005, 555032849, 287388961, 24248867, 1061879415, 1258176507, 20935170, 4270783926, 1068892553,
- 20936449, 25820854, 1061879415, 25820922, 4265557942, 16842826, 50790356, 1704424, 16777234, 117842709, 117899790, 875897621, 909588022, 870843191, 976247491, 1040318745, 1932671510, 1058669036,
- 1428571395, 857689969, 1669751347, 91695, 4294835969, 17957382, 1245210, 372441856, 117579287, 657793813, 656811572, 589768230, 1944793859, 18364723, 1109197375, 1451895606, 18481459, 2254647142,
- 523449186, 609843027, 73500, 16645889, 34734811, 1179886, 859121408, 37631798, 859125557, 101062165, 52626951, 811385139, 1057102393, 859379713, 1071377012, 1428571395, 857689713, 1669751091,
- 16803631, 3674264577, 3993167875, 4864, 656548645, 892666414, 337057075, 370611734, 53679894, 1961571304, 1041709362, 910302722, 861244203, 1664051163, 859005573, 1484214815, 35527717, 256,
- 3909351936, 50392578, 288686080, 3909292321, 4277404154, 65548, 50790144, 16384233, 352321539, 51454225, 4093770473, 16780542, 117374976, 3993168131, 768, 287379733, 66775299, 1637608, 4294967041,
- 49545478, 196846, 554764032, 4110483729, 4243063802, 16842776, 50790388, 15598313, 83886083, 17899793, 4210360820, 419227651, 2304, 1107537407, 50392834, 184551168, 318770944, 452990720, 587210496,
- 859111424, 856761109, 856761109, 858071829, 858071829, 855974677, 858071829, 855974677, 858071829, 2812748565, 2812782503, 2812759553, 2812759297, 2812785662, 2812759297, 2812785662, 2812759297,
- 4093749076, 2817851815, 2812782503, 2812782503, 2812782502, 256, 3892512255, 1191243266, 890306560, 892540211, 892540211, 355669299, 354628899, 354628899, 892540195, 892540211, 355669299,
- 354628899, 354628899, 892540195, 892540211, 355669299, 354628899, 354628899, 891499811, 891499827, 2812753203, 2796005286, 2796005286, 2812716967, 2812716711, 2812782247, 2796005286, 2796005286,
- 2812782503, 2789737127, 2795939494, 2812782502, 2812782503, 2812782503, 2812782503, 2812782503, 2812782503, 2812782503, 10987431, 4278190085, 48825094, 1376494, 1900569, 2424865, 354488576,
- 355669283, 355669283, 891491619, 891491619, 321066275, 86193459, 623064371, 86193459, 52639027, 2812782569, 2796005287, 2812782503, 1308731303, 3003033254, 1308731303, 3993151142, 2812782247,
- 2795939495, 1291953830, 2812782503, 10921638, 8192001, 38797948, 196687, 554776320, 3540090129, 4275241340, 131117, 41681021, 5177936, 458755, 554776320, 287384849, 3540090145, 2197902846,
- 24935934, 674102995, 16810753, 2986361856, 520270081, 768, 287379767, 2993488196, 2482924801, 1140851200, 2969678336, 50339586, 1792, 287379767, 554770725, 4268556612, 4263313851, 1828827875,
- 19436542, 65565, 50331790, 6685018, 855638019, 2383487249, 1711393794, 16816894, 3540030976, 1661090818, 512, 34808101, 3545955900, 9437651, 7995394, 22413861, 131324, 620756997, 51581729,
- 4267049475, 2358111780, 3607176591, 469853438, 33613054, 520125952, 151554, 83886592, 288817152, 623183109, 4275175806, 4263444844, 3774947297, 2408221424, 2449473792, 1510130176, 33565698,
- 83951616, 4267311633, 3044475192, 16804353, 2332071424, 453131266, 512, 33751809, 47436604, 24182299, 131216, 35913850, 16449878, 327682, 52499200, 2048070403, 2381241345, 4211183500, 2617321982,
- 469886206, 2130706944, 1359093504, 33554434, 1280, 285409837, 4266721797, 1053950254, 4045398526, 25624304, 16813849, 3254810880, 738345218, 512, 1090650669, 3355523326, 11908546, 15794177,
- 50266663, 196719, 34149120, 16974321, 33291787, 4263772491, 14614234, 4290641922, 36373493, 196772, 318767111, 29230601, 4265017654, 33029833, 4262002953, 21758455, 4272553560, 4267180456,
- 19202523, 131108, 16777269, 15991551, 589829, 318976768, 654512947, 4160946963, 3242313923, 2695175881, 25231784, 4270521971, 1124154242, 3355327489, 1711276544, 1828847616, 268437250, 8192,
- 35533313, 101061653, 640033315, 909521973, 101065239, 370545685, 909521459, 640037941, 1546939905, 1967532103, 1182156872, 893483079, 1513502041, 895104823, 117595190, 895371049, 1179022920,
- 1950894455, 1513504069, 911882038, 926374710, 16790873, 1124111104, 4043391234, 3840, 370553345, 101061653, 640033315, 909521973, 1631349249, 1013070138, 976904763, 988873058, 1648049250,
- 996292921, 3826236, 4281925634, 44958598, 196859, 16777235, 17899793, 352716322, 857085460, 892745266, 52831796, 25951406, 658515640, 673661223, 1109862209, 2348612354, 3590223107, 673661223,
- 1109862209, 658515752, 956302080, 2919468799, 318767875, 721426176, 838926336, 336921118, 572719630, 875889198, 287638078, 570757409, 336921102, 842203678, 875889214, 4177592878, 743269433,
- 996560428, 743270203, 23613229, 25951473, 1450196917, 1918316849, 1450394177, 1951937073, 1311597314, 1731869286, 1311517774, 1698380648, 4238355278, 2121597835, 1081235506, 827814466, 1114855473,
- 827748929, 956301824, 3036762880, 251711233, 7936, 370553363, 101061653, 640033315, 909521973, 101065239, 370545685, 909521459, 640037941, 861287927, 892622387, 1446261591, 624698421, 606485795,
- 1008935739, 1446235905, 861353013, 859199284, 591016789, 1025909563, 607921188, 2374437, 9109509, 39781137, 721125, 2359319, 4980792, 372375808, 587600917, 875898402, 372388662, 587600917,
- 875898402, 370541878, 926298675, 587597332, 840115746, 336921118, 572719630, 875889198, 571933246, 336921102, 842203678, 875889214, 2298544686, 354295316, 3978173972, 337518100, 4263386645,
- 1551701180, 974355804, 2121091178, 1652640241, 2204383288, 1669614411, 2238003512, 1433419585, 1918251313, 1450328641, 1951936817, 337515010, 354295317, 337517845, 354295317, 1433083157,
- 1364549985, 26165623, 2204383672, 1686326090, 2237937720, 1669483340, 1462841399, 1916878962, 1446064470, 1916879475, 67121237, 251693312, 3858915331, 520098560, 939535104, 838926336, 336921118,
- 572719630, 875889198, 570884670, 370414854, 892744243, 573777460, 370414854, 892744243, 503653940, 909259522, 587597367, 4194379298, 946045513, 1266967353, 946111564, 629564729, 337518100,
- 3273530901, 354295316, 4263386389, 1782120851, 25128264, 1532788243, 971375229, 1263174756, 960062596, 1263306340, 3560465027, 504697886, 487920926, 487920670, 487920925, 1098338667, 1632991887,
- 131169, 66125718, 11207250, 3735593, 925303040, 892810775, 387323187, 369563447, 588591895, 118949638, 117835303, 641016597, 925304615, 589768230, 926298933, 352716322, 857085460, 892745266,
- 19277364, 1344688185, 1194738742, 1327845427, 1903233066, 626010888, 557914192, 1345864246, 454316070, 158429443, 776809953, 808406574, 1311714893, 642769665, 1879583568, 1344801648, 1144344358,
- 1345603127, 454250534, 124875012, 1327910955, 924795673, 1294945860, 776941358, 791694895, 33566029, 4211052032, 3372369154, 771759616, 352387072, 354620723, 891499811, 640038195, 891692583,
- 859190836, 353769010, 101123604, 102892294, 370414854, 909259542, 640955702, 2491744550, 2509584532, 873603358, 1013201722, 976970813, 1025577780, 741099819, 1244474698, 21703980, 2553564435,
- 88945816, 1696533260, 996425018, 977101883, 185278309, 1244493569, 743058732, 757943084, 33565514, 3841935616, 3674378754, 1006644224, 117506048, 336926230, 572720646, 875898406, 842217014,
- 640038679, 926299189, 926299698, 372388662, 387322901, 336926230, 86385187, 352716322, 857085460, 892745266, 36054580, 892298541, 1128492353, 1849770350, 1714302531, 319764545, 221657878, 84543250,
- 50663703, 4263578898, 810693096, 842158640, 1362178129, 582504706, 1849899623, 1114521921, 306277955, 269551033, 218171402, 218827027, 542515479, 285542666, 1362203172, 810692914, 842093105,
- 16789585, 38400, 4060238083, 10752, 37631265, 926299703, 101123590, 639771398, 909391142, 506934839, 35526403, 101061653, 371663395, 18159382, 674769941, 18553364, 402851336, 1194013277,
- 3141943595, 656281883, 1144991804, 742927129, 1694845293, 336139372, 1394809120, 84545336, 1059401252, 827993893, 1009551487, 824587824, 622999874, 1986995262, 1315962, 6619137, 42009344, 4063440,
- 891363584, 104281654, 101058310, 640033315, 909521973, 370553395, 891692567, 859190836, 353769010, 1040647700, 372388610, 101979414, 639771398, 656811559, 504829462, 3506575106, 1735279870,
- 152047617, 791699488, 1210724175, 572067884, 806623006, 1362178385, 555160624, 739251746, 1345268296, 526199857, 17961482, 638852634, 303312182, 370769543, 757933322, 1210920268, 235734059,
- 723268382, 1193945671, 506666027, 721620239, 1261317448, 170011181, 1531255833, 320673574, 65546, 50331798, 15008335, 553648158, 774308654, 909391106, 389165878, 907482646, 370553395, 101061653,
- 17171975, 857672691, 841825617, 793718547, 235483487, 797255945, 1008349263, 644111923, 1248415557, 540756536, 1294616106, 2501517325, 623461418, 1799051594, 65694, 65077190, 15008286, 318767123,
- 922893863, 236389406, 53348098, 1900941012, 873077841, 423906373, 560034105, 1481653775, 1477464833, 322006922, 1365138507, 2240495129, 1733827637, 65642, 17891396, 10158769, 922746914, 370488081,
- 370611990, 587666453, 875902518, 287778342, 101123590, 639771398, 909521973, 753742387, 855705350, 303773527, 472783886, 336530433, 606020415, 471807265, 988545455, 1023478279, 1113223017,
- 707084585, 4261687369, 338240731, 438247708, 2044702, 4288217090, 37356194, 3342555, 16777277, 117835285, 572720646, 909391142, 372388662, 355668247, 387323668, 285677078, 101123590, 639771398,
- 909521973, 890712627, 640034612, 656811559, 386080295, 2130772526, 370150657, 656483908, 237124388, 321653791, 740512773, 269287681, 572933399, 574367016, 67771168, 537930264, 201458187, 36386334,
- 3271637527, 338240980, 438247708, 102708254, 233570565, 923079715, 4264977173, 338240916, 438247708, 186594334, 118628840, 470358032, 1026294197, 974596141, 100676935, 1711273215, 335796482,
- 117441280, 318770944, 452990720, 891486208, 858199347, 286729013, 287511841, 858199347, 889266961, 858199347, 202122037, 3892972043, 1650596609, 21711844, 185273529, 17566731, 2936251914,
- 935328823, 4248896311, 17566755, 4278583306, 40239092, 1311705, 458755, 1245199, 1769495, 859120384, 892544789, 859117347, 557130513, 288565009, 859111715, 892544789, 185338915, 1659177482,
- 2182807906, 1510034251, 185273100, 167840780, 1090729894, 928119863, 603799811, 167840780, 1878982912, 3942777600, 184578051, 889389056, 855708471, 18166549, 3415279363, 319357561, 2561539356,
- 30015868, 41483879, 4229768390, 1071907284, 256, 3607183615, 151024387, 890568704, 288559411, 288559411, 1329680376, 3825422272, 3825409276, 16829947, 1056899072, 1946408705, 2304, 287388945,
- 287510819, 3607171363, 55525711, 3405467684, 452781571, 16836099, 167770367, 3976386306, 2816, 354497795, 287510819, 287510817, 887030280, 1158938181, 1162192898, 2667799036, 2667799036,
- 4177461504, 3607235071, 184610050, 889651200, 288559411, 288559393, 872944947, 1173160261, 54916916, 56753311, 1164049567, 4143972608, 3473031423, 151024387, 286720000, 288559411, 355668275,
- 1329745911, 855949560, 3825409276, 5184764, 4294377473, 63898174, 589940, 554768128, 588325653, 4145095441, 1341708289, 906281538, 52100176, 1768678, 4281073665, 44237321, 1835246, 873535232,
- 37631798, 370553395, 588322069, 640103441, 117842467, 286589454, 438245676, 1563846482, 1145392779, 1816554820, 101781280, 1634599671, 908340084, 1552502045, 44563802, 1095010961, 874066999,
- 2667396170, 738197760, 2734819839, 469822722, 288817152, 387191091, 842208790, 37631798, 288559413, 101123604, 639771398, 1160521510, 945823551, 169244243, 440730634, 1451501598, 21859937,
- 4249092777, 490641268, 406273569, 36519471, 1332739448, 1010248550, 6261580, 4281073666, 44237321, 196845, 385875975, 554775313, 739324689, 1173160261, 4242801655, 4242801436, 131100, 20905975,
- 7537623, 458755, 856758016, 856765201, 1112536849, 889504335, 889506811, 50383867, 2969533440, 167924738, 100664064, 2304, 354497815, 622007077, 24904481, 3995664088, 25624298, 961578516,
- 3506538809, 20525054, 131101, 46006272, 10224079, 458755, 557135104, 557131029, 4258202133, 3201237553, 1201096519, 16842823, 38010680, 7341036, 16777231, 857027329, 369164565, 353703445, 19076387,
- 377553208, 27852317, 486609987, 39452949, 4263322646, 457768491, 336003331, 4278255653, 37814259, 7603194, 50331662, 859124533, 387323393, 588584214, 453845781, 280166931, 469827860, 472908562,
- 373619752, 184680988, 16787471, 1090453504, 3053493250, 3328, 372454677, 389494582, 117575171, 2692739875, 810030891, 640357381, 22003840, 256602986, 488365822, 16777484, 1090512383, 1946392321,
- 2816, 16856327, 859124533, 891486465, 4267049243, 18029482, 326958724, 3590397080, 672978433, 3875399421, 65576, 50200832, 7603071, 285212684, 372384053, 117579542, 17114663, 406205639, 1210452486,
- 4160638737, 173024259, 3829079839, 133380623, 3858694400, 3959570687, 151024643, 889651200, 857027329, 891486485, 316211739, 321387804, 4026735768, 284957736, 4278255656, 37814249, 7537643,
- 117440521, 857027329, 354484501, 3556906785, 1560091411, 1291684098, 686424951, 1331690523, 3925803264, 3926016255, 234910723, 922943488, 18945313, 337057558, 354617108, 35002147, 41549263,
- 17047423, 51518209, 4233120298, 201600401, 671418116, 2197816064, 1409419775, 402713858, 738206464, 285278208, 35524915, 117838869, 285672966, 640028963, 891692583, 286471732, 101123590, 370611221,
- 907088662, 892745526, 939599412, 760362854, 756426284, 891643425, 1663311895, 320740434, 588397121, 320937349, 3724627518, 4059959041, 928726539, 287334708, 3925739541, 453515009, 811016472,
- 2080274259, 252014337, 1398356753, 17961272, 110231143, 1496846608, 16802887, 201266688, 4009830402, 11264, 37622551, 926299703, 842203710, 572724245, 640100134, 102900518, 909575943, 372388658,
- 353768983, 639771412, 369305383, 437716594, 421728521, 558581018, 487540552, 437073677, 136848397, 202008100, 621675016, 153945867, 1334249229, 384696821, 369899838, 269093402, 52964105, 50465794,
- 112601123, 117702913, 18745097, 2013139969, 1711276544, 1040396545, 117485826, 5632, 354497811, 287510819, 322113811, 588329747, 587408145, 1712399107, 1114446849, 1212841186, 1577534075, 34102587,
- 4265623665, 4265607616, 4269801920, 4263313891, 4266787200, 4266787246, 196782, 65535860, 14877295, 2424849, 16777282, 353769266, 587597588, 640034594, 926299189, 336921398, 842208791, 875889214,
- 572719662, 119865870, 572728870, 336922118, 842208790, 102184758, 639771398, 909391142, 20067126, 1869651953, 2577034865, 976961136, 1740403254, 2068222052, 1580545374, 2101889148, 151139678,
- 540089651, 555890980, 874521402, 1277637403, 878130224, 1748260659, 1836180226, 1852940192, 1468610922, 1865714507, 2315748350, 1597334373, 2101888893, 1580545374, 606412924, 624566813, 472136741,
- 674113055, 926308661, 67122521, 3892278272, 3808587523, 587206912, 956313600, 838926336, 336926231, 572720647, 891692583, 909588020, 387192067, 909259542, 875902519, 572728871, 286459399,
- 336933427, 588711686, 890577703, 892744243, 589506100, 1889530113, 2590929263, 993947801, 3161601594, 1150248039, 1751265662, 1720879970, 2425149794, 1263281698, 792810304, 1495146792, 1836180226,
- 1852940192, 1468610922, 1865714507, 2315748350, 859202405, 1720879460, 4267862114, 1954611636, 2752524584, 416847510, 1775644, 18219010, 46859021, 1507484, 318767168, 588718391, 354877998,
- 387323398, 909452053, 101791030, 889521926, 892679734, 891495988, 856888115, 117835285, 35525909, 891491607, 288686654, 352527107, 387323398, 17765909, 270141290, 19016481, 3961856520, 908992048,
- 696451354, 2753762841, 698900579, 83952151, 516627224, 411240731, 470155651, 2550399519, 372584856, 640219905, 471597836, 19077379, 1144390425, 402988279, 320662304, 33160732, 302062599, 628187168,
- 469961249, 403309340, 4262199577, 3629908378, 84748589, 196636, 65535860, 14877295, 2424849, 16777285, 353769266, 587597588, 640034594, 926299189, 336921398, 842208791, 875889214, 572719662,
- 858063374, 640026389, 352723491, 842208788, 587608887, 891692578, 859190836, 387323442, 4043387443, 1903128735, 1889114734, 909785918, 1684520050, 1585137296, 2086548789, 1585268808, 366018869,
- 607131157, 808793134, 253498444, 776942458, 170938415, 35921934, 1910702601, 1906286701, 2302241390, 881544023, 126090863, 895706506, 1212644703, 892690045, 2492169310, 1597522948, 1700023637,
- 928461442, 37183033, 67111945, 3892278272, 3808587523, 620761344, 1560301824, 838926336, 336926231, 572720647, 891692583, 909588020, 387192067, 1043477270, 775173378, 237118210, 1043666690,
- 875902210, 891758118, 336933427, 387323399, 842208791, 587608887, 656877090, 572728870, 504694562, 51713794, 909521429, 875902519, 17179171, 1869651953, 2577034865, 976961136, 1740403254,
- 2068222052, 1580545374, 2101889148, 431109470, 369559318, 1820838681, 336140313, 51777031, 474481948, 135202858, 151132954, 369426693, 505165338, 1075841297, 3808564766, 2678091121, 963276401,
- 2336970633, 2214489908, 1667598855, 1199398709, 895384904, 4185677365, 436863773, 404472091, 1629225481, 470684240, 856766231, 958539371, 1224808224, 67640351, 1225982237, 251921665, 2050609,
- 4283891713, 59638073, 524403, 389494528, 588329745, 1347880707, 3410513816, 3744686365, 3338386947, 927745, 4281860353, 60686601, 196722, 856753408, 1714946321, 4217963767, 65687, 17432464,
- 15532703, 385875977, 657864245, 370225937, 1314557958, 2197972481, 2064522743, 4257153663, 9080120, 4282122497, 38994441, 1573101, 641008896, 641152566, 53356326, 288568629, 236263190, 18159362,
- 1949369151, 460212576, 50926608, 1168965990, 4144110926, 1064063460, 556796175, 1177560597, 3976115254, 204676013, 3612763702, 2415919360, 2634091007, 218164994, 890437632, 370611766, 588322070,
- 2416061969, 572682555, 503408157, 483459656, 639838722, 1560108657, 1834925570, 16842805, 34209593, 15532614, 16777231, 504631603, 638916354, 36579110, 1715011893, 859907342, 421752128, 3976333595,
- 1850894589, 487138115, 505752065, 4675901, 4287234049, 44040457, 1048813, 909457152, 288559413, 369559046, 588580630, 2928289297, 2189493094, 1711440263, 339009026, 4262789554, 309552629,
- 4201412880, 10623745, 4281860353, 38076937, 1114350, 873530624, 909588022, 102045494, 352521735, 188219665, 1864505115, 170027071, 4144104971, 1413459458, 690231869, 1225989121, 1261512470,
- 8977723, 4278190081, 59703616, 327795, 557126912, 17904401, 1338003264, 3455837187, 256, 2399223551, 83915779, 890306560, 287510817, 55545601, 3405467684, 16836099, 1090469633, 1929629442, 1280,
- 288559365, 1057035553, 3225485647, 486290180, 16842831, 37683007, 7603151, 83886085, 555032849, 20906257, 3267362448, 4233115140, 65562, 34275584, 4522447, 285212675, 34939189, 973799887, 65594,
- 35914496, 11731919, 285212682, 640033077, 370619175, 436344087, 1226121498, 56241716, 420565028, 220012565, 65605, 35914496, 7603151, 285212675, 34939189, 1344537551, 65616, 37814016, 9437135,
- 352321539, 34939189, 1330626767, 738197760, 191487, 755035649, 388300800, 101123590, 639771398, 909391142, 891692599, 842217012, 370546454, 640026391, 336929315, 118953750, 352724519, 909259540,
- 156407553, 1646137364, 945897272, 421282360, 1513773167, 67964182, 909117019, 1578507882, 1229208845, 2570861183, 304422420, 1210656032, 373306671, 1041638164, 270344269, 840048680, 521486375,
- 20777475, 1428827137, 65577, 50331789, 13107797, 16777233, 353769266, 587337236, 891692834, 909588020, 1788080129, 2170632040, 1835503946, 40579639, 2489870536, 929202506, 1184655716, 6828416,
- 9240577, 39060224, 196807, 554775296, 3338833169, 972932866, 2365587968, 1409482752, 50382594, 1792, 287379763, 554770725, 4257677965, 4252566112, 4257677959, 2013407033, 2432696832, 1476591616,
- 268486658, 9472, 370618881, 101127189, 640098851, 37631029, 370414851, 842208791, 875889214, 572719662, 17172230, 1751814900, 2425514089, 1647799655, 775091073, 1900119387, 1462776149, 2303672946,
- 3355588143, 2475976808, 1768188009, 1619019932, 127794743, 1529770301, 1098078001, 827814722, 4932425, 4281597955, 47252213, 1573038, 3997738, 369557760, 101979414, 639771398, 1043608870,
- 372388610, 101979414, 640091911, 104281141, 370414854, 842208791, 322188598, 892745239, 640099892, 117842467, 336922118, 4194375190, 889456163, 1765816410, 2540847421, 1098009429, 400378454,
- 1868972574, 740172069, 690762280, 387530063, 285686819, 50924816, 152699146, 940777756, 2202875741, 1888834640, 978858816, 706307136, 1061178942, 1940926046, 555971137, 19735857, 1108767751,
- 407513664, 553713955, 403774253, 196640, 18088208, 15008479, 2031631, 318767149, 353769010, 587597332, 891692578, 389428788, 352716322, 857085460, 892745266, 52831796, 857158453, 588591927,
- 656607029, 1765996053, 1114258750, 1044146242, 1513570921, 945435701, 875714617, 625255512, 608380422, 36452651, 1114259429, 1027369281, 1765753706, 1530274623, 861419065, 959993650, 3338548827,
- 4156802039, 3772833759, 352322048, 2281897471, 755030018, 23040, 637998337, 102900518, 924128518, 504439559, 353834754, 572728870, 926222086, 288686654, 892810503, 926365238, 842217014, 637998341,
- 102900518, 924128518, 504439559, 353834754, 572728870, 926222086, 288686654, 892810503, 926365238, 20067126, 521276499, 186588180, 24905603, 772870147, 320091444, 288240949, 1162150928, 974525185,
- 337063953, 302796801, 521933855, 2080867083, 286262017, 339031086, 775238931, 1157959441, 370344261, 322184506, 105762050, 1041697808, 889476410, 488760830, 503513608, 33620226, 134349598,
- 453058590, 706680324, 1108951605, 1292572180, 386666502, 72694334, 568720949, 50464797, 16843294, 33758722, 18882056, 521536539, 423769386, 50342466, 4261353216, 3624028930, 1241525504, 22016,
- 637998337, 102900518, 924128518, 504439559, 353834754, 572728870, 926222086, 288686654, 892810503, 926365238, 842217014, 35524883, 638916375, 102900518, 1043805447, 875902210, 589506086, 657929781,
- 336926258, 639771398, 20329525, 521276501, 186588180, 24250233, 873533443, 336869430, 288240949, 1162150928, 974525185, 337063953, 268632510, 875900433, 892670740, 68161838, 622137861, 354173785,
- 370549282, 3439469089, 202376781, 1429880343, 3858642180, 34151712, 16915971, 52298241, 538839042, 369367809, 1110780447, 370426393, 2566846206, 34086177, 16915971, 52298241, 538839042, 152969951,
- 3659663644, 555095331, 555161121, 385876224, 1308818943, 1291900930, 925171712, 288686654, 354624308, 589702663, 352716322, 587675413, 386014737, 640029975, 117842467, 37631797, 889655605,
- 909522231, 909522743, 387330611, 353834518, 389494326, 386014737, 640029975, 117842467, 305026049, 706282511, 337647126, 2198544156, 50428935, 909381904, 890508344, 269561397, 21316868, 289019411,
- 268965680, 134678288, 153041971, 286262017, 339031086, 456471827, 503841283, 939000096, 202376725, 1429880088, 3858642180, 34151712, 16915971, 52298241, 538839042, 369367809, 1110780447, 370426393,
- 33620994, 252386306, 2600274443, 34086177, 16915971, 67109377, 4261352960, 3624035331, 1509960960, 2197845760, 352387072, 589702663, 352716322, 587675413, 386014737, 640029975, 117842467, 37631797,
- 889655605, 909522231, 909522743, 352662067, 589702663, 352716322, 587675413, 386014737, 640029975, 117842467, 37631797, 889655605, 909522231, 859191095, 504435506, 353834754, 572728870, 926222086,
- 892666430, 589702708, 926299427, 353776167, 572720660, 909391142, 302797825, 521933855, 2080867083, 286262017, 339031086, 775238931, 1157894161, 370344261, 389026106, 205717780, 471080722,
- 125373215, 268632434, 943076369, 892670996, 84873518, 318850373, 874854934, 50442259, 875434256, 890442805, 269561397, 353502468, 474175781, 371335701, 35791126, 268848589, 977147660, 4264887381,
- 136126949, 35521282, 503447809, 503841283, 68878624, 891952918, 339876162, 105712406, 1041697808, 889476410, 488695294, 503513609, 33620226, 134349598, 453058590, 706680324, 1108951605, 4277599786,
- 136126872, 35521282, 503447809, 503841283, 505601824, 571022345, 370484186, 387326241, 196641, 66977559, 14156404, 5963821, 16777337, 640026389, 101065251, 121050389, 35524899, 638916375,
- 102900518, 1043805447, 118568194, 909457205, 909588278, 87175990, 640026389, 101065251, 121050389, 35524899, 638916375, 102900518, 1043805447, 118568194, 909457205, 909588278, 322057014, 889339447,
- 656815121, 37631267, 504436535, 353834754, 572728870, 1426130694, 337580556, 2198544156, 50428935, 875434256, 890442805, 269561397, 21316868, 289019411, 18093872, 521276473, 186588180, 24905603,
- 772870147, 320091444, 288240949, 1162150928, 974525185, 337063953, 252849698, 940444420, 371864871, 268632329, 892612113, 892670740, 105762050, 1041697808, 889476410, 488760830, 503513608,
- 33620226, 134349598, 453058590, 706680324, 1108951605, 1292572180, 386666502, 72694334, 568720949, 50464797, 16843294, 33758722, 18882056, 521536539, 423769386, 4246082626, 134349635, 100802590,
- 469831959, 135072262, 563674376, 50464797, 16843294, 131074, 32309015, 14746077, 2031632, 506593536, 101979394, 639771398, 909391142, 102897462, 370414854, 909259542, 640037941, 1226508033,
- 1833053509, 945765699, 490105918, 1093086529, 642858023, 383844673, 1413765428, 1832796537, 1232487495, 1331045154, 1680368988, 610294383, 1207959808, 2902588927, 654370305, 637861888, 119677734,
- 37631797, 590614837, 101123618, 656869126, 355927102, 352716336, 370545681, 2902529815, 572547112, 488585347, 486868745, 254153235, 1040777744, 70733393, 487463963, 16988184, 52298498, 505087746,
- 170071041, 67962631, 234957061, 34542869, 420873760, 455069694, 196871, 4280025089, 30867963, 2883809, 237122304, 908534530, 1043806006, 590624002, 654771746, 842217015, 101979414, 37357319,
- 104280627, 387322901, 116720174, 289424693, 51709960, 642002045, 491462774, 1244478228, 1027824729, 606472586, 37529351, 1464271105, 16843059, 153487884, 1145117258, 522606877, 1210274575,
- 660351813, 487918169, 34410254, 16777474, 335482112, 3774987009, 12032, 909522707, 353776179, 839321108, 370553395, 34477077, 808920867, 842208790, 875902518, 119677734, 875902517, 102900518,
- 1040647687, 457380152, 825514063, 1076298500, 2204778278, 604388677, 1765676338, 641416768, 708354096, 236992288, 1315963142, 960566542, 623069730, 1882924862, 306001498, 1715342604, 339622716,
- 695540516, 203102262, 131076, 18087682, 14549464, 2162713, 909255936, 640030007, 654775587, 1042751799, 389494532, 352716336, 68030727, 493486343, 722804020, 118312492, 319550974, 1111900985,
- 51195675, 772624899, 103035444, 1140917051, 383123970, 554691330, 1432445529, 873013022, 25977719, 1312690221, 801355, 4278583297, 29557005, 3735770, 842151680, 370553395, 51254293, 587345443,
- 842208823, 875902518, 102900518, 908527366, 875836726, 656815157, 855776823, 389494322, 621217286, 3946198535, 822281732, 1176974676, 20606045, 134421787, 1933584935, 473581897, 202446881,
- 67305729, 741418246, 927738652, 84281104, 503899390, 1193407789, 1448683322, 436480582, 923537688, 1178486889, 117771015, 353904147, 1092097832, 33688110, 67305985, 18161688, 463020, 4280287234,
- 47448556, 1638577, 318767144, 859190839, 336926258, 572720646, 909391142, 922893879, 101061911, 117842455, 336922118, 909259542, 2200319029, 624569367, 1731944272, 1383096641, 1093737037,
- 2257003824, 289416043, 1078134536, 21316923, 421728843, 1833195112, 1736216382, 521552306, 135335963, 544644392, 455019802, 1314744933, 16800331, 570371072, 3573674241, 9984, 117842455, 909513511,
- 102900023, 587663110, 892745268, 656811572, 855776823, 926299698, 101057301, 1864771079, 151787785, 506600948, 404223486, 503776266, 16843010, 1160776193, 1143481920, 834088008, 420225100,
- 218170076, 1580107777, 521996861, 640356152, 774243334, 33686801, 33685761, 1522007582, 33641121, 503317248, 3489787135, 503361794, 939535360, 772997120, 909391106, 372388662, 117838869, 336921118,
- 572720646, 875898406, 389428791, 352716327, 842208788, 875902518, 907487014, 640955702, 352723491, 858564628, 996029716, 1144480080, 1075593530, 1480147564, 537999923, 808931475, 1093222476,
- 929903910, 927082801, 1493254709, 573845533, 1328501045, 793259329, 674902554, 775776318, 978138193, 606344464, 1178028834, 709109843, 462832681, 925581088, 1244806466, 452985344, 3489733631,
- 436264961, 10240, 909453079, 101136182, 639771398, 909391142, 372388662, 117838869, 571671054, 370414854, 892744243, 640099892, 2626167399, 873285126, 777073690, 1665164603, 457788274, 1045973560,
- 993806920, 537792583, 554176997, 188382896, 978989839, 2436721219, 1051354239, 35529239, 1313626258, 558257505, 3872836, 4279369730, 22020861, 3080434, 385876018, 572991014, 891487750, 926299703,
- 370357011, 353834774, 587345442, 587337250, 892482357, 656811828, 101123619, 856954118, 657663795, 356717788, 170468614, 237244693, 313337528, 202577185, 18622503, 640228866, 524355851, 80478472,
- 1191775241, 1420564227, 16843011, 18612737, 18818049, 712441492, 469827875, 16843009, 421265665, 68172822, 487985161, 3282641680, 469762816, 3523346175, 704701953, 1073755904, 840105984, 859189814,
- 336926258, 370476806, 101979414, 640036899, 102900515, 909522183, 640946485, 370554147, 37368114, 372249879, 892744243, 572728884, 857027846, 590624050, 95553058, 35596322, 876759373, 1516786238,
- 51457828, 522269467, 321986323, 335685171, 370939155, 1061438004, 2031818255, 18812264, 788595172, 71183921, 792723714, 16865613, 202637569, 1073816350, 18616602, 80931841, 909259584, 1470417413,
- 16778321, 4076809216, 4060155906, 9472, 101058341, 640033315, 909521973, 370553395, 117835287, 774907683, 102900482, 370414854, 909259542, 235930167, 1329294620, 2252883836, 1112021596, 17106448,
- 588252188, 1395993146, 1063203887, 1244022581, 1092359718, 1985038448, 135334720, 1143224868, 923998227, 1648508512, 1906231, 4280549378, 20316926, 2097382, 318767154, 909260338, 353776179,
- 587597332, 639772194, 101065251, 909522211, 640946485, 840316195, 101068823, 372248853, 909259542, 589706293, 126813730, 120535343, 2084997752, 622789968, 839909916, 337381678, 1041116706,
- 436273504, 1733888544, 706304868, 16901121, 2102485873, 16843078, 638260225, 556138791, 687938585, 4262272792, 1929511602, 107503458, 385876224, 3389128191, 1476455425, 840105984, 1043470102,
- 372388099, 117835287, 807872035, 102900518, 352727089, 857092117, 859125298, 353633798, 387322900, 640037923, 822485539, 387323412, 842208816, 909127990, 101069623, 572720647, 572719662, 842336006,
- 288699958, 656811572, 540806167, 943336454, 373695525, 469894660, 1112016133, 906110486, 504635438, 16843009, 656805150, 33627935, 757545473, 436604986, 839058433, 858458199, 907216939, 170207033,
- 19539979, 33620711, 67240450, 658444804, 101323326, 39068982, 505424154, 319490575, 538975775, 1411580427, 201590850, 1009592370, 16844063, 469893377, 19408139, 153100815, 65537, 33423122,
- 15466916, 16777291, 336922118, 774051606, 589439746, 370414855, 638916374, 572662566, 1043662598, 873542914, 891495974, 840373810, 909522742, 823538227, 587661838, 774317606, 589439746, 352716308,
- 842215959, 20395574, 16843118, 167975937, 67377176, 639896647, 336870447, 639840037, 621481255, 574950952, 373442569, 1009123599, 16974852, 50725148, 491009030, 16844297, 386073161, 17041945,
- 221452616, 539305994, 2332166687, 34150424, 33620508, 167844865, 771824669, 470293277, 50528514, 419954945, 236659232, 67243060, 1329138178, 487129643, 65565, 49479452, 15794448, 620757042,
- 372381232, 355938867, 338757126, 102175765, 640033315, 909521973, 118960691, 640034595, 101065251, 370545685, 926298675, 875902518, 1375807270, 120139297, 369434655, 1315005955, 2202880637,
- 309283922, 1375863579, 760165186, 540496944, 16846130, 29503773, 51905025, 889653259, 1900226112, 1165379911, 456159777, 1046427425, 188310593, 322374409, 69656, 4279762945, 25821949, 5505255,
- 506593536, 1043346178, 571814658, 286590470, 355669524, 572991014, 842336006, 892679734, 572728870, 336922374, 355669526, 572728870, 842336006, 288699958, 589702708, 387323445, 355939890,
- 352716322, 857085461, 892810802, 589702708, 688356353, 604119854, 772353329, 941754663, 404901399, 623194171, 725947148, 203048479, 1043277348, 842734102, 202253862, 1344023080, 792598047,
- 336274726, 1143482438, 707004436, 16901889, 16843009, 673384476, 405266686, 16843036, 152830465, 26811163, 2516648193, 470359069, 33620226, 454756892, 404306433, 16849927, 469893377, 2165774087,
- 16843009, 136456292, 503316736, 738328063, 654370561, 808648704, 891486734, 892745266, 640037905, 370554147, 1043346226, 571814658, 286590470, 857085460, 572925461, 758129320, 220604171, 606480141,
- 588259373, 688533042, 655035174, 472984104, 469827841, 18685193, 135796536, 16908572, 119275777, 3372095768, 470293789, 16777729, 1845431296, 3875613697, 9472, 387323411, 855785010, 101065237,
- 101978389, 807608867, 640955702, 370554673, 892744243, 640037905, 1327177763, 773980704, 606537768, 106587147, 151126534, 437327119, 673713176, 16901889, 16843009, 623053340, 1902496510, 302845461,
- 638193411, 513737001, 16779549, 4261354496, 3875612674, 18432, 859189761, 117842453, 387323655, 353834518, 824321570, 654778914, 370414855, 638923542, 102900518, 909260039, 873542966, 891495974,
- 840373810, 355664446, 352716322, 909514517, 926299703, 372388405, 738842625, 320937993, 100910750, 84742933, 453908250, 185260057, 1026565926, 809310232, 185280039, 1326262309, 757269290,
- 623380519, 403244553, 389887252, 18882819, 203096550, 81105426, 17634822, 4076929308, 421108228, 16915463, 152830465, 587276319, 470359584, 16843010, 403053569, 167874331, 1093997591, 72989,
- 4279500801, 30671357, 3277031, 370545408, 37630487, 102896947, 336663814, 372315670, 909259542, 859256369, 101123590, 639774982, 589701670, 909444898, 873542966, 337847846, 18829339, 120008227,
- 34350373, 622988290, 101596996, 34015262, 587416379, 52638002, 354759471, 19473931, 16843239, 469827841, 4263123465, 455216354, 940441857, 607529497, 16843010, 102499073, 889269276, 398357,
- 4280418305, 31589108, 4915431, 372380416, 909259030, 907220535, 37631798, 857085495, 571815730, 286590470, 355669524, 589702690, 587337264, 892744245, 34480913, 587408135, 857084945, 640033301,
- 101065265, 909260067, 873542966, 237118246, 805904683, 209855277, 622532637, 756157466, 592322057, 840961059, 406203402, 136784672, 553787442, 304233790, 891355838, 69809425, 638332714, 891620902,
- 16967425, 4267180545, 859708395, 473714745, 469959169, 4263189514, 471278280, 16843265, 521411585, 2320192001, 2583776393, 354599678, 16843292, 470424578, 557252892, 65560, 49479448, 15139204,
- 385876032, 573637166, 891487750, 288699954, 891495988, 842208790, 506541622, 35526402, 873542423, 842343206, 842208790, 571815734, 286590470, 822222356, 287506727, 857085460, 674567154, 204483331,
- 824648760, 269235471, 907222568, 791164748, 587334422, 657395769, 725747972, 34416679, 4266656258, 604766912, 16843558, 469893377, 1258366232, 18617111, 419496450, 843275842, 17046330, 471147060,
- 16908546, 538905372, 503632126, 17439267, 399376004, 33556246, 4076808192, 4060166658, 452988672, 838926336, 336926230, 572720646, 875898406, 571946550, 370414854, 892744243, 989931060, 1212248907,
- 1967541628, 1048331590, 1415664966, 22957894, 1181433330, 1145601357, 1984841073, 1500324418, 1685094767, 16808552, 4261353472, 3959542785, 13568, 54407699, 353776177, 587597332, 371664674,
- 892744243, 572728884, 336660230, 353834518, 572728870, 889652770, 288699954, 572991028, 370554147, 790692497, 1448025901, 372461358, 319620630, 758920240, 219423243, 959456805, 807867923,
- 455553827, 386338091, 48496966, 1040318978, 641935929, 906501640, 121121585, 395836933, 469895960, 16908546, 18946332, 18095685, 65820, 4280811522, 20578934, 721138, 16777277, 336922146, 909259542,
- 52835381, 573638178, 875898406, 842217014, 336926230, 352781830, 370611762, 370546454, 355938867, 117835526, 640099878, 572728871, 909522183, 1176961335, 1179935061, 20995663, 1182090766,
- 1263696965, 1832862067, 505350214, 487133193, 119805220, 68166413, 573061920, 302057004, 271785258, 1500368897, 1685094767, 603880040, 1165050881, 1027765838, 2001225323, 184682059, 67568653,
- 369625356, 51125000, 235999491, 403898632, 204312, 4279762945, 19399421, 4128999, 372380416, 909521431, 842085938, 101979414, 370546439, 807605555, 925959214, 842208790, 590624054, 336660258,
- 355669526, 572728870, 889652770, 892745266, 656815121, 152576802, 570632264, 1478438448, 2588425807, 2081691152, 758328605, 419759134, 1765550602, 621483818, 322514984, 590358294, 453781287,
- 17239339, 16843495, 942866689, 3155836719, 588844051, 590822967, 1023475984, 4262092586, 102045326, 33620508, 419961857, 507838745, 16777492, 4076809216, 4060188673, 11264, 117835265, 656811555,
- 102900518, 370611221, 101979414, 656548614, 859111998, 842208788, 640955702, 891692583, 842217012, 84046337, 134290433, 825433867, 1214017595, 1295999802, 16909113, 993604636, 1413690692,
- 1230662468, 906809345, 136323618, 1227633944, 1110902022, 472796722, 505683219, 859583287, 50537258, 1481195832, 301990144, 3657563647, 889251585, 573767680, 842336006, 588330294, 117835298,
- 352716336, 640037923, 372381493, 842215730, 926103090, 352716308, 824583715, 589496878, 857084945, 4196804117, 891961372, 741027361, 16843024, 1140982300, 2569152007, 86454291, 469893677,
- 268501249, 539831083, 37953588, 554966017, 369586177, 68358421, 288436241, 33620226, 255013646, 370482698, 580058631, 33627157, 335544576, 1308816127, 805365505, 838926336, 355677750, 352716322,
- 587600917, 892675618, 891495988, 857085490, 859190834, 352716309, 857084949, 875902258, 891495974, 18224690, 740952293, 203695371, 1567581536, 923677218, 739182901, 556470061, 210257473, 688727332,
- 31719720, 420027394, 1633998874, 501901398, 33627156, 18481410, 1207113490, 450726979, 35391514, 65537, 49872652, 15139102, 318767156, 355939890, 102900514, 387322901, 320280342, 640955702,
- 372389155, 355939094, 235340302, 774047491, 36579075, 506606887, 1175817474, 604767766, 168363798, 158294789, 722216737, 391121449, 235672089, 237645354, 774639922, 268964140, 688593179,
- 3825279018, 169607426, 370344974, 33099031, 269293599, 16915470, 151067651, 1747197981, 707029363, 711882093, 17175572, 16843036, 201326848, 4194498815, 838920193, 838926336, 926089758, 117575189,
- 587408131, 771957507, 372582146, 909259542, 571814710, 352723491, 320280084, 322114355, 892745523, 1107436340, 505880323, 387469313, 981010444, 947651202, 504629612, 373563417, 271460874,
- 388171531, 38666757, 42673793, 21630025, 16843239, 134355971, 1761483287, 2583586561, 589398273, 18612493, 469893378, 352653067, 31587847, 4220124791, 2102825, 4279238657, 31719934, 3145965,
- 101070592, 589702663, 1043662626, 657929986, 102900518, 909522225, 387323447, 355677975, 117900834, 504829463, 638916354, 119677734, 658316014, 302584339, 387651616, 509176083, 739445796,
- 419696208, 1584283149, 1762925340, 268698468, 202971154, 757008171, 1097082312, 469893377, 454691585, 70556309, 67830816, 1830299140, 437263526, 134524810, 50862108, 33620252, 234881280,
- 3758226943, 771812609, 573767680, 842343174, 808793398, 774308398, 1043669762, 370554626, 909514519, 236270391, 336933124, 355669526, 4045809186, 840646427, 656610598, 404230675, 623841298,
- 371463939, 524362324, 791680324, 621614887, 943460900, 454302723, 1060841092, 135862554, 101188124, 690489601, 980762011, 1246041614, 493300034, 35392286, 65537, 33423124, 15139293, 318767153,
- 855776818, 355939890, 857092097, 825636402, 859243070, 101123590, 656548614, 640680245, 572728102, 34537998, 875902518, 1041447462, 890124355, 2986223976, 1260661793, 169614386, 67313411,
- 1181227266, 1241594304, 118895910, 135936050, 18612738, 3875602689, 33620225, 1526603009, 16908802, 472197391, 33631547, 2785089539, 184680705, 68556056, 303174680, 196629, 50200338, 13763152,
- 3342384, 385876030, 589702690, 587597346, 909522741, 322114359, 387388950, 36577813, 34480675, 842216739, 640103477, 117842727, 336922118, 858207027, 640104231, 909391142, 387396147, 741412316,
- 690292226, 605099274, 2904995854, 320151826, 472393484, 689832449, 1091111718, 3422619679, 151783684, 2887189319, 428879188, 369955343, 33786401, 469893377, 522453249, 1996395521, 16851754,
- 16843036, 469827841, 272373273, 370149636, 2837647389, 274375363, 336465170, 50367009, 4261351936, 3523366914, 855650304, 15872, 640033303, 101065251, 909587747, 856897334, 387323411, 773985559,
- 237118210, 859120386, 657732914, 102967078, 352716295, 657666836, 925312819, 372388662, 117838869, 822991879, 621150764, 286591529, 649596452, 354489005, 673647635, 503447836, 151725609, 17309505,
- 201917644, 386090761, 2319733932, 302847521, 59775247, 33620226, 604045596, 4271112479, 19081846, 16849921, 16843009, 1008081180, 269026320, 588258582, 2325922729, 219026465, 5902354, 4279369731,
- 38798077, 3145934, 3801139, 639768320, 102900518, 926229254, 322385462, 370545459, 571807511, 572719662, 891486734, 875901491, 589768231, 101058310, 858985493, 52900647, 656611123, 232530695,
- 100805681, 352987429, 3087934481, 554872102, 655102741, 33627176, 187050270, 136265993, 151309313, 54987020, 374647831, 2032368958, 33760121, 469893377, 522453249, 1996395521, 16851754, 16843036,
- 469827841, 272373273, 370149636, 2837647389, 2806579651, 50358119, 4261351936, 2768392194, 855650304, 19200, 640033303, 101065251, 909587747, 856897334, 387323411, 773985559, 237118210, 859120386,
- 657732914, 102967078, 352716295, 657666836, 856893235, 572720646, 640034598, 587670051, 372388662, 857085718, 232535602, 100805681, 352987429, 3087934481, 554872102, 655102741, 33627176, 187050270,
- 136265993, 151309313, 54987020, 2438245399, 708772637, 454499601, 320998177, 206837277, 521870868, 52106512, 33620226, 604045596, 4271112479, 19081846, 16849921, 16843009, 1008081180, 269026320,
- 588258582, 536986537, 168377899, 1680673806, 252578820, 262166, 50200338, 11141712, 3342384, 4915263, 639768320, 102900518, 926229254, 322385462, 370545459, 571807511, 572719662, 891486734,
- 875901491, 589768231, 101058310, 858985493, 52900647, 336926258, 639771398, 859190325, 336926258, 639771398, 3694539829, 36450573, 170468614, 237244693, 313337528, 202577185, 18622503, 640228866,
- 524355851, 80478472, 1191775241, 1420564227, 471602522, 454760214, 471602655, 454760214, 16843267, 16849922, 2483101476, 589985534, 18612481, 16843009, 370744321, 151261244, 270341648, 29600035,
- 370613029, 387324956, 370613019, 387324956, 262171, 50200338, 15008336, 3342384, 4915263, 639768320, 102900518, 926229254, 322385462, 370545459, 571807511, 572719662, 891486734, 875901491,
- 589768231, 101058310, 858985493, 321336103, 336926258, 639771398, 389428277, 336922146, 909259542, 3693491253, 36450573, 170468614, 237244693, 313337528, 202577185, 18622503, 640228866, 524355851,
- 80478472, 1191775241, 1420564227, 976824587, 993667626, 572726314, 572660764, 16843267, 16849922, 2483101476, 589985534, 18612481, 16843009, 370744321, 151261244, 270341648, 29600035, 707345248,
- 690698810, 488776762, 488842014, 16786205, 536816640, 4060155906, 16128, 101058341, 859178759, 336926258, 639771398, 370554663, 875901491, 102900518, 775366407, 909391106, 372388662, 101062422,
- 807871239, 572719662, 336922118, 842208790, 268580662, 963058446, 671943959, 356139566, 403579166, 372641052, 235997714, 1900620039, 1552304192, 272779290, 469828870, 975376388, 793982250,
- 893345588, 642393671, 1023482901, 656418308, 520750637, 288032006, 100926230, 1816331615, 1081495876, 604508427, 323232826, 1614222104, 929186366, 33561878, 4261353216, 3523398145, 1660966912,
- 840105984, 1043470102, 372388099, 117835287, 807872035, 102900518, 352727089, 857092117, 859125298, 353633798, 387322900, 640037923, 822485539, 387323412, 842208816, 909127990, 101069623,
- 572720647, 572719662, 842336006, 288699958, 656811572, 640034597, 859190325, 387389234, 102775820, 624441900, 68568612, 85721606, 373442565, 775291430, 18748448, 503382273, 522659341, 16908575,
- 976037690, 18482704, 1462895364, 724773640, 959845128, 185214247, 335620648, 302979472, 2317424141, 16967425, 33686018, 1058145284, 168967719, 1411724806, 539564546, 185208606, 538844947,
- 587336480, 67650132, 757608972, 17112892, 33620225, 673516316, 539102977, 1515913481, 235737616, 9052436, 4279697410, 46793213, 5767378, 318767203, 840373810, 842072894, 101062422, 656810759,
- 572728880, 103821574, 372249877, 892744243, 335939123, 370414613, 640951063, 102900518, 370545713, 857092119, 808531506, 104019766, 587597574, 587345442, 889652770, 892745266, 640037905, 909588263,
- 353776179, 117900820, 540806167, 943336454, 373695525, 469894660, 1112016133, 906110486, 504635438, 16843009, 656805150, 33627935, 757545473, 436604986, 839058433, 858458199, 907216939, 170207033,
- 2737448971, 219554186, 2417561362, 16967425, 33686018, 1058145284, 168967719, 1411724806, 539564546, 185208606, 538844947, 587336480, 67650132, 757608972, 17112892, 33620225, 673516316, 539102977,
- 2321219849, 219026465, 5902354, 4279697410, 46793213, 5767374, 318767199, 840373810, 842072894, 101062422, 656810759, 572728880, 103821574, 372249877, 892744243, 335939123, 370414613, 640951063,
- 102900518, 370545713, 857092119, 808531506, 104019766, 587597574, 587345442, 889652770, 892745266, 640037905, 389223207, 587671331, 540806167, 943336454, 373695525, 469894660, 1112016133,
- 906110486, 504635438, 16843009, 656805150, 33627935, 757545473, 436604986, 839058433, 858458199, 907216939, 170207033, 3509200907, 2032368958, 3875611513, 33685762, 67371522, 1042759442, 906365458,
- 436360229, 253632553, 521341706, 186654750, 1112810242, 839648264, 524037416, 16843013, 186384897, 251734053, 17375266, 1738998273, 196711, 33423127, 11141834, 6553688, 318767216, 840373810,
- 842072894, 101062422, 656810759, 572728880, 103821574, 372249877, 892744243, 335939123, 370414613, 640951063, 102900518, 370545713, 857092119, 808531506, 104019766, 587597574, 587345442, 889652770,
- 892745266, 640037905, 372389671, 587600917, 875898402, 372388662, 587600917, 875898402, 1007425334, 975963680, 1176773944, 33948694, 1208288540, 36050498, 337653302, 16843038, 638393857, 18816807,
- 658112770, 101726765, 50594074, 721966898, 319302451, 623327542, 707267338, 471602562, 454760214, 471602655, 454760214, 16967425, 33686018, 1058145284, 168967719, 1411724806, 539564546, 185208606,
- 538844947, 587336480, 67650132, 757608972, 17112892, 33620225, 673516316, 539102977, 467534089, 471602711, 454760214, 471602711, 1775382, 4280156162, 36438525, 2556114, 855638066, 587337264,
- 909521461, 640946485, 372581158, 808661526, 355664446, 352716322, 370545681, 640030003, 640095010, 909391142, 387396147, 758129320, 220604171, 606480141, 588259373, 688533042, 655035174, 472984104,
- 253333550, 555093266, 16843146, 488442140, 404174849, 33627144, 469827841, 4263057415, 136125896, 33685788, 303061543, 554962445, 131210, 33423134, 13763130, 3276839, 238039808, 842343170,
- 288699958, 589702708, 840308277, 37630003, 102896947, 336663814, 355669526, 52569638, 842217015, 101979414, 581437191, 655043888, 655166758, 539829286, 775037712, 187050250, 707274507, 2321226801,
- 302847521, 26220815, 152830209, 939597085, 470292503, 16843265, 403119105, 499711513, 18614301, 2317812226, 219026465, 5902354, 4279697410, 38732285, 2556110, 855638062, 587337264, 909521461,
- 640946485, 372581158, 808661526, 355664446, 352716322, 370545681, 640030003, 389219106, 587671331, 758129320, 220604171, 606480141, 588259373, 688533042, 655035174, 472984104, 595410465, 19102073,
- 152830209, 939597085, 470292503, 16843265, 403119105, 499711513, 18614301, 2815296002, 50358119, 4261354752, 2852276225, 855648000, 16128, 34484275, 909260067, 873542966, 891495974, 858920470,
- 855785008, 101065237, 370413845, 638923542, 839066150, 101979414, 891691555, 842217012, 101979414, 891691555, 581449268, 655043888, 655166758, 539829286, 775037712, 187050250, 707274507, 358947889,
- 387324956, 366943003, 387324956, 16849691, 487136257, 389546269, 18614296, 16843010, 421005084, 488491262, 33627144, 387688962, 370940950, 387652375, 370940950, 33561367, 4076804096, 2768405506,
- 1476411392, 773259264, 102904066, 842343174, 873542966, 372581158, 909259542, 35533110, 386014743, 640946483, 372389155, 909259542, 102896951, 336663814, 657523230, 336667393, 322115094, 587597363,
- 640099874, 119677734, 842216995, 370611734, 4063638067, 52966675, 940322859, 254879524, 672140341, 1278612254, 372189239, 958595587, 69676816, 657146377, 33688872, 3237892098, 639896578,
- 1057168856, 387780906, 571154715, 1410735379, 454956044, 454365215, 16843011, 404488705, 390791461, 33627155, 1108934914, 976372574, 872481819, 35394850, 469828097, 4263517963, 589169872,
- 2214660634, 370658814, 730595847, 235538750, 73673996, 370085388, 671089408, 973271807, 251712002, 637541120, 838926336, 336926230, 572720646, 875898406, 571946550, 370414854, 892744243, 656877108,
- 875898406, 389165878, 1262158103, 2085110131, 1182090829, 1178500165, 1179935061, 2418171471, 219287321, 25829654, 1181433330, 1145601357, 1984841073, 1500324418, 1685094767, 1515682408, 235737616,
- 9052436, 4280811523, 37356274, 983250, 2490395, 372375808, 101979414, 639771398, 909391142, 102897462, 857084949, 875902514, 909584166, 353776179, 117900820, 1934310145, 1299990593, 1162245446,
- 1430666876, 1330009185, 562732894, 252841238, 4060188697, 1296460605, 1900300413, 1115049541, 1868131618, 1751412865, 562714490, 302845460, 50354704, 4076808192, 3456252418, 452988672, 8704,
- 370553345, 101061653, 640033315, 909521973, 352723479, 842208788, 640955702, 588722983, 19072807, 1098074939, 1179483208, 2084914805, 1632978494, 1582253652, 595410533, 19102073, 1181433330,
- 1145601357, 1984841073, 1500324418, 1685094767, 2818472552, 50358119, 4076808192, 2768386562, 452988672, 13056, 370553345, 101061653, 640033315, 909521973, 352723479, 842208788, 640955702,
- 101069623, 656810531, 572728870, 859185927, 387323442, 909259542, 1934310145, 1299990593, 1162245446, 1430666876, 1330009185, 52249182, 487664191, 186718999, 371004194, 504630356, 353378075,
- 1039270171, 2102216299, 1165050952, 574781006, 2171558253, 2053661808, 155069397, 755764746, 235668580, 67114511, 4076808192, 2852272642, 452988672, 855648000, 838926336, 336926230, 572720646,
- 875898406, 571946550, 370414854, 892744243, 841426484, 101979414, 891691555, 842217012, 101979414, 891691555, 989935156, 1212248907, 1967541628, 1048331590, 1415664966, 2841530182, 370940949,
- 3743095575, 370940949, 18553623, 1181433330, 1145601357, 1984841073, 1500324418, 1685094767, 467303016, 471602711, 454760214, 471602711, 1775382, 4280287235, 20579050, 524538, 2555935, 573636864,
- 387192070, 822158849, 909391142, 389165878, 369563447, 101061653, 120005155, 369164583, 892744243, 1176961332, 167843669, 1055522352, 1649572933, 1008483652, 1299990588, 474368095, 4160659457,
- 1330010672, 1500368897, 67188556, 1199242821, 1115049563, 991575092, 2102222913, 474299720, 4227752449, 1180987465, 335544832, 1308816127, 805360130, 15104, 909521409, 102896947, 336925958,
- 639771398, 640955701, 372389155, 909259542, 102052662, 336925958, 892482326, 640037941, 372389155, 640100118, 909391142, 387396147, 705225985, 606407468, 1868914700, 238166621, 252261687,
- 722414892, 2286305569, 220537868, 2425366569, 219287321, 25829654, 469893604, 3625589001, 1750491492, 471080426, 16908801, 387055898, 2353219571, 135928541, 1124139548, 219287642, 2317423630,
- 335544832, 1308816127, 805360130, 15104, 909521409, 102896947, 336925958, 639771398, 640955701, 372389155, 909259542, 102052662, 336925958, 892482326, 640037941, 372389155, 909584150, 353776179,
- 117900820, 705225985, 606407468, 1868914700, 238166621, 252261687, 722414892, 2286305569, 220537868, 2330535977, 302847521, 26220815, 469893604, 3625589001, 1750491492, 471080426, 16908801,
- 387055898, 2353219571, 135928541, 1124139548, 236200330, 1511002637, 335544832, 1308816127, 805359106, 14080, 909521409, 102896947, 336925958, 639771398, 640955701, 372389155, 909259542, 102052662,
- 336925958, 892482326, 640037941, 372389155, 389228310, 587671331, 705225985, 606407468, 1868914700, 238166621, 252261687, 722414892, 2286305569, 220537868, 1053239337, 2037982077, 31719715,
- 420027394, 1633998874, 501901398, 33627156, 18481410, 1207113490, 450726979, 35391514, 1739057665, 196711, 49479444, 11141710, 3932208, 16777288, 859190834, 101065237, 101979413, 891691555,
- 589706293, 370553397, 909521459, 101061939, 370414869, 892678707, 589702708, 370553397, 353776165, 572720660, 909391142, 353776179, 572720660, 909391142, 705225985, 606407468, 1868914700,
- 238166621, 252261687, 722414892, 2286305569, 220537868, 4127074345, 370940949, 3743095575, 370940949, 18553623, 469893604, 3625589001, 1750491492, 471080426, 16908801, 387055898, 2353219571,
- 135928541, 3321954844, 471209755, 454497820, 471209755, 454497820, 234881536, 3758226943, 771805698, 14592, 587604531, 892744245, 36581429, 587345447, 922893877, 387388950, 859256374, 822349333,
- 370545685, 639767859, 909574950, 353776179, 117900820, 457120753, 588588594, 403837735, 789582360, 605487909, 1092768790, 806700063, 219621167, 1007821861, 562707512, 252841238, 469995545,
- 646191892, 421150523, 35391513, 151062024, 1033578792, 370031221, 692210245, 186522983, 33620508, 337742375, 269618446, 196698, 50200338, 6488656, 3342384, 385876023, 589702690, 587597346,
- 909522741, 322114359, 387388950, 36577813, 34480675, 842216739, 640103477, 117842727, 336922118, 858207027, 891369255, 822991905, 621150764, 286591529, 649596452, 354489005, 673647635, 503447836,
- 151725609, 17309505, 201917644, 386090761, 4273231020, 54002120, 33620226, 604045596, 4271112479, 19081846, 16849921, 16843009, 1008081180, 269026320, 588258582, 900318121, 301990656, 1342373375,
- 805358594, 1157640960, 571932672, 572728870, 891487750, 926299703, 370357011, 353834774, 587345442, 587337250, 892482357, 656811828, 101123619, 856954118, 657663795, 370553603, 926298675,
- 117835315, 656548614, 232531494, 100805681, 352987429, 3087934481, 554872102, 655102741, 33627176, 187050270, 136265993, 151309313, 54987020, 1968483351, 775881246, 503463471, 621546241, 170218576,
- 16909064, 18612737, 18818049, 712441492, 469827875, 16843009, 421265665, 68172822, 487985161, 3282641680, 925583105, 673262391, 340214036, 131108, 41025298, 15860070, 4456513, 639763712, 352723750,
- 842208788, 101062455, 891691555, 589444916, 587337250, 892482357, 656811828, 101123619, 856954118, 639767859, 102900518, 926229254, 322385462, 370545459, 858068759, 105906727, 621223197, 673320984,
- 439624208, 120530204, 689832453, 1091111718, 3422619679, 151783684, 822936391, 621150764, 286591529, 649596452, 354489005, 2893413907, 16843604, 386997791, 421467428, 556669733, 469827841,
- 272373273, 370149636, 472059933, 33620226, 604045596, 4271112479, 19081846, 12822785, 4281073666, 34603762, 2425042, 620757040, 587597319, 891692578, 859190836, 387323442, 587662854, 36581415,
- 101065251, 370545685, 926298675, 859191041, 336926258, 34014982, 1830555152, 1199329083, 442271304, 101728840, 68944133, 708453136, 875516725, 1194671967, 2329542182, 302847521, 1250957583,
- 1092359718, 1985038448, 135334720, 1143224868, 923998227, 1648508512, 18683447, 337742550, 269618446, 131162, 49479468, 13500944, 2883621, 101131520, 639771398, 909391142, 372388662, 101062422,
- 807871239, 572719662, 336922118, 842208790, 855848758, 120005399, 235930147, 1329294620, 2252883836, 1112021596, 17106448, 588252188, 1395993146, 1063203887, 3978708789, 2032368958, 642392953,
- 1883315222, 1081495880, 604508427, 323232826, 1614222104, 929186366, 2097290518, 6776743, 4281073666, 34603762, 2425002, 620757041, 587597319, 891692578, 859190836, 387323442, 587662854, 36581415,
- 101065251, 370545685, 926298675, 353776131, 572720660, 909391142, 470683650, 2085567341, 1552304199, 272779290, 469828870, 975376388, 793982250, 893345588, 382281287, 370613019, 642391068,
- 1883315222, 1081495880, 604508427, 323232826, 1614222104, 929186366, 1493310742, 471209755, 454497820, 738198016, 268628735, 620809730, 11264, 101058341, 640033315, 909521973, 370553395, 117835287,
- 774907683, 102900482, 370414854, 909259542, 859243319, 858202887, 470683650, 2085567341, 1552304199, 272779290, 469828870, 975376388, 793982250, 893345588, 2060330567, 2101247266, 371608099,
- 1215316252, 188773969, 975439889, 403915812, 1046492947, 372728386, 1729495581, 50374567, 4278133760, 3456251394, 838868992, 14592, 842412563, 372388662, 101061653, 572924451, 102900518, 909452038,
- 873542966, 372581158, 103814962, 806425862, 842208790, 640955702, 923148835, 587674423, 126825255, 120535343, 2084997752, 622789968, 839909916, 337381678, 1041116706, 436273504, 1733888544,
- 706304868, 2099411543, 19103038, 1895891428, 1182617955, 16843009, 656804628, 421602817, 405340444, 3002993951, 1651704322, 2869323871, 10987367, 4279697410, 46793213, 5767292, 318767196,
- 840373810, 842072894, 101062422, 656810759, 572728880, 103821574, 372249877, 892744243, 335939123, 370414613, 640951063, 102900518, 370545713, 857092119, 808531506, 104019766, 587597574, 587345442,
- 889652770, 892745266, 640037905, 891364647, 1007425313, 975963680, 1176773944, 33948694, 1208288540, 36050498, 337653302, 16843038, 638393857, 18816807, 658112770, 101726765, 50594074, 721966898,
- 319302451, 623327542, 707267338, 3372125697, 3875616769, 33685762, 67371522, 1042759442, 906365458, 436360229, 253632553, 521341706, 186654750, 1112810242, 839648264, 524037416, 16843013,
- 186384897, 251734053, 17375266, 33568123, 4261353216, 3305294337, 1778407424, 840105984, 1043470102, 372388099, 117835287, 807872035, 102900518, 352727089, 857092117, 859125298, 353633798,
- 387322900, 640037923, 822485539, 387323412, 842208816, 909127990, 101069623, 572720647, 572719662, 842336006, 288699958, 656811572, 370553655, 926298675, 117835315, 656548614, 202843686, 738598972,
- 606419002, 100931142, 84220930, 638992968, 539899394, 16850452, 220070145, 522135334, 973144577, 272248103, 67181062, 139932163, 137048875, 658060819, 671812133, 35546410, 1043279423, 184622594,
- 1414538508, 17304101, 33620711, 67240450, 658444804, 101323326, 39068982, 505424154, 319490575, 538975775, 1411580427, 201590850, 1009592370, 16844063, 469893377, 19408139, 153100815, 925628673,
- 673262391, 340214036, 131108, 33423127, 11141834, 6553688, 372380416, 54407703, 387330609, 587662854, 640689958, 822485539, 353699376, 842208816, 104019254, 336925702, 588715540, 589702708,
- 338757154, 806819350, 909259542, 926298161, 117835315, 773989126, 102900482, 909260039, 873542966, 925312550, 336926258, 639771398, 389428277, 102775820, 624441900, 68568612, 85721606, 373442565,
- 775291430, 18748448, 503382273, 522659341, 16908575, 976037690, 18482704, 1462895364, 724773640, 959845128, 185214247, 385034792, 370613019, 3875609628, 33685762, 67371522, 1042759442, 906365458,
- 436360229, 253632553, 521341706, 186654750, 1112810242, 839648264, 524037416, 16843013, 186384897, 251734053, 17375266, 370613214, 387324956, 65563, 41025303, 15466765, 318767210, 840373810,
- 842072894, 101062422, 656810759, 572728880, 103821574, 372249877, 892744243, 335939123, 370414613, 640951063, 102900518, 370545713, 857092119, 808531506, 104019766, 587597574, 370414854, 389493299,
- 572720646, 926168358, 773989126, 102900482, 909260039, 873542966, 388441638, 102775820, 624441900, 68568612, 85721606, 373442565, 775291430, 18748448, 503382273, 522659341, 16908575, 976037690,
- 18482704, 151520004, 571480102, 857870376, 757406747, 721956131, 319302451, 623327542, 707267338, 16967425, 33686018, 1058145284, 168967719, 1411724806, 539564546, 185208606, 538844947, 587336480,
- 67650132, 757608972, 553721660, 605491486, 622468629, 18885915, 16843009, 621485058, 571408680, 67872, 4279697410, 46793213, 5767378, 318767199, 840373810, 842072894, 101062422, 656810759,
- 572728880, 103821574, 372249877, 892744243, 335939123, 370414613, 640951063, 102900518, 370545713, 857092119, 808531506, 104019766, 587597574, 587345442, 889652770, 892745266, 640037905, 859256615,
- 858202887, 540806167, 943336454, 373695525, 469894660, 1112016133, 906110486, 504635438, 16843009, 656805150, 33627935, 757545473, 436604986, 839058433, 858458199, 907216939, 170207033, 4079626251,
- 1048388218, 3875611517, 33685762, 67371522, 1042759442, 906365458, 436360229, 253632553, 521341706, 186654750, 1112810242, 839648264, 524037416, 16843013, 186384897, 251734053, 17375266,
- 2812766111, 469762560, 268628735, 838913538, 14592, 840314917, 926036758, 822478357, 387192084, 639771398, 909391142, 389165878, 640099079, 102900518, 370414854, 909259542, 892745271, 52897332,
- 656611123, 1375806215, 120139297, 369434655, 1315005955, 2202880637, 309283922, 1375863579, 760165186, 540496944, 16846130, 1044656413, 2037982077, 16892451, 184752130, 1077217032, 1198605094,
- 558200393, 555430002, 1094606647, 151730532, 403912459, 604111120, 6776743, 4280025090, 34603762, 3276997, 620757060, 372381232, 355938867, 338757126, 102175765, 640033315, 909521973, 118960691,
- 640034595, 101065251, 370545685, 926298675, 875902518, 855844646, 842208790, 104019766, 587597574, 640034594, 773935617, 538904361, 1711478277, 1249726049, 1280475981, 52105839, 859984386,
- 1412443471, 221388855, 823984385, 1057103538, 37629742, 202047774, 626282533, 29493258, 51905025, 889653259, 1900226112, 1165379911, 456159777, 1046427425, 188310593, 322374409, 33624088,
- 926362395, 338174251, 605308737, 469762560, 268628735, 838904322, 15872, 840314917, 926036758, 822478357, 387192084, 639771398, 909391142, 389165878, 640099079, 102900518, 370414854, 909259542,
- 892745271, 52897332, 336926258, 639771398, 20329525, 690889042, 85991175, 1634075414, 1296727374, 1867272835, 33757970, 1328759378, 928264237, 17642016, 607198465, 387652374, 3256622102, 402784513,
- 117967619, 1126580277, 1984513905, 812785989, 1597448475, 962871614, 923470091, 17831955, 387645442, 370940950, 33561367, 4261353472, 3456272898, 1526748160, 838926336, 808649246, 355664446,
- 352716322, 857084945, 656811541, 889652770, 892745266, 589702709, 352781858, 857085460, 589702677, 889652770, 892745266, 640037905, 370554147, 926298647, 101065237, 370545941, 926298675, 640037941,
- 389219107, 587671331, 688356353, 604119854, 772353329, 941754663, 404901399, 623194171, 725947148, 203048479, 1043277348, 842734102, 202253862, 1344023080, 792598047, 336274726, 1143482438,
- 707004436, 595410506, 19102073, 16843239, 469827841, 4264043272, 471345120, 16843009, 453581826, 16881947, 496369921, 35391772, 469893377, 18553610, 119019834, 16843036, 119276033, 25237271,
- 1677787393, 17310248, 1734846211, 512, 1241644543, 654355714, 16128, 34484275, 909260067, 873542966, 891495974, 858920470, 855785008, 101065237, 370413845, 638923542, 856891942, 572720646,
- 640034598, 587670051, 372388662, 857085718, 581449266, 655043888, 655166758, 539829286, 775037712, 187050250, 707274507, 494410801, 287981315, 555423517, 487793163, 336352278, 270474014, 16849685,
- 487136257, 389546269, 18614296, 16843010, 421005084, 488491262, 33627144, 1043049730, 202246665, 201614381, 1445646, 4278648834, 37683709, 2556028, 855638059, 587337264, 909521461, 640946485,
- 506798886, 1043346178, 571814658, 286590470, 857085460, 318909973, 2820748577, 187510818, 218965543, 757343783, 841158688, 656935725, 673582091, 2317103402, 939641086, 469827841, 18685193,
- 135796536, 16843036, 469827841, 4263057415, 136060616, 16843036, 3491586, 4279631874, 36700669, 2556101, 855638073, 587337264, 909521461, 640946485, 372581158, 808661526, 355664446, 352716322,
- 370545681, 640030003, 372441890, 909259542, 101069623, 572720647, 2821072423, 187510818, 218965543, 757343783, 841158688, 640223790, 673647371, 2669424938, 775881246, 503463471, 621546241,
- 170218576, 16843016, 488442140, 404174849, 33627144, 469827841, 4263057415, 136125896, 33685788, 926362565, 338174251, 605308737, 503316736, 1124168191, 939583233, 806551552, 355664446, 352716322,
- 370545681, 640030003, 336922147, 926036758, 587597335, 875898402, 807608887, 891486734, 892745266, 640037905, 370554147, 841195314, 640223790, 673647371, 604840727, 690032919, 439558928, 221193500,
- 758129164, 220604171, 606480141, 3825279021, 469827841, 4263057415, 136125896, 520159516, 605491486, 622403349, 18951707, 152830209, 939597085, 470292503, 33554945, 1845431296, 3456257793,
- 738206976, 370343936, 1043470102, 571814658, 286590470, 572720660, 892743715, 925967924, 842208790, 873542966, 321070630, 656611123, 455090951, 570564687, 654845998, 1516505892, 33687046,
- 286592777, 671881242, 2101244968, 595163427, 16901889, 16843009, 623053340, 1902496510, 302845461, 638193411, 513737001, 50399517, 6776743, 4263247874, 19399339, 4718823, 16777301, 355677746,
- 117900834, 370611735, 571807510, 573645350, 119998242, 370545685, 640030003, 117842467, 909521461, 640946485, 842343206, 1043470102, 571814658, 353699334, 926299671, 892810806, 51786290, 117575191,
- 909518599, 20330039, 153881048, 2652053792, 352715718, 436538643, 421203479, 638257880, 406663207, 657472792, 621480742, 709823784, 657269507, 153430024, 337119494, 51854645, 242294817, 691479822,
- 690753065, 19277829, 203096550, 81105426, 17634822, 4076929308, 421108228, 16915463, 152830465, 587276319, 470359584, 16843010, 403053569, 167874331, 1093997591, 4244708637, 1227230939, 185808209,
- 188312648, 131084, 33423124, 13501140, 3997746, 370545408, 37630487, 102896947, 336663814, 372315670, 909259542, 859256369, 101123590, 639774982, 589701670, 909444898, 873542966, 925050406,
- 842217015, 101979414, 454297351, 587276112, 621225774, 33688613, 1143284236, 503713343, 989988616, 841155395, 788734769, 185935155, 2322213158, 302847521, 26220815, 16843239, 469827841, 4263123465,
- 455216354, 940441857, 607529497, 16843010, 102499073, 889269276, 1476793365, 236200330, 1511002637, 335544832, 3556879358, 838919937, 16128, 387323411, 855785010, 101065237, 370413845, 370553110,
- 825635379, 104019766, 101058310, 640033329, 572728866, 909522183, 640946485, 385950502, 117899790, 926299687, 454309430, 587276112, 621225774, 33688613, 1143284236, 503713343, 989988616, 841155395,
- 788734769, 185935155, 503392550, 925240846, 722348328, 640091689, 16901889, 16843009, 437913884, 571269886, 234946843, 908728632, 16843300, 469958913, 19667974, 101979445, 655292157, 322196040,
- 963397643, 33557515, 4261352448, 3875656705, 1056977408, 370343936, 1043470102, 571814658, 286590470, 823531028, 842208790, 926298422, 117835315, 573638150, 639772198, 889659939, 288699958,
- 589702708, 34477861, 908527367, 909522742, 525343508, 657335041, 203760903, 571212290, 239027237, 117972486, 54737666, 590426659, 624111363, 690359061, 235842817, 690566949, 86584334, 3875612200,
- 16843009, 152830209, 3808303642, 18555404, 423104001, 35927594, 16843009, 470162435, 355795244, 236717588, 894519590, 1816660755, 789305, 4279762946, 42205938, 4194506, 385876043, 573637166,
- 891487750, 288699954, 891495988, 842208790, 506541622, 35526402, 873542423, 842343206, 842208790, 571815734, 286590470, 822222356, 287506727, 857085460, 859191043, 336926258, 4060546822, 52966675,
- 940322859, 254879524, 672140341, 1278612254, 372189239, 958595587, 69676816, 657146377, 33688872, 3237892098, 639896578, 371296778, 420418061, 16843664, 469893377, 1258366232, 18617111, 419496450,
- 843275842, 17046330, 471147060, 16908546, 538905372, 503632126, 17439267, 399376004, 100796182, 236200330, 1511002637, 402653696, 2214764798, 1073800961, 19712, 822226455, 587597346, 892744245,
- 589706257, 857085493, 825636402, 504824350, 288560898, 891495988, 857085490, 355939890, 352716322, 35525649, 587278129, 370545681, 236394291, 654771970, 909588022, 890499638, 808125224, 656685068,
- 204803889, 320743440, 674712630, 33756719, 789592355, 1107887143, 220735275, 1342308866, 201507070, 243934756, 691479822, 690753065, 52832261, 16843009, 622337026, 320293633, 33685788, 1581390081,
- 456798787, 573833476, 16915477, 186384642, 3506315295, 438509060, 4270063882, 118888397, 1227230819, 185808209, 188312648, 131084, 49479448, 13238916, 4653120, 36574976, 101065265, 909260067,
- 640946485, 370554147, 909521459, 386014769, 857145886, 589706257, 370553397, 926298675, 101065237, 504631573, 19345666, 370413859, 924005142, 656607027, 890499635, 808125224, 656685068, 204803889,
- 320743440, 674712630, 33756719, 789592355, 1107887143, 220735275, 1342308866, 201507070, 2052859428, 2101247266, 16843555, 469893377, 1258366232, 18617111, 419496450, 843275842, 17046330,
- 471147060, 16908546, 538905372, 503632126, 17439267, 399376004, 1241646870, 10987367, 4280811523, 37356274, 983165, 2031643, 372375808, 101979414, 639771398, 909391142, 102897462, 857084949,
- 875902514, 891369254, 1262158113, 2085110131, 1182090829, 1178500165, 1179935061, 4267466319, 20447688, 1181433330, 1145601357, 1984841073, 1500324418, 1685094767, 897088104, 671089408, 973271807,
- 251708674, 754981632, 838926336, 336926230, 572720646, 875898406, 571946550, 370414854, 892744243, 858203700, 842208790, 104019766, 587597574, 640034594, 1934310145, 1299990593, 1162245446,
- 1430666876, 1330009185, 35578718, 1043279423, 184622594, 1414538508, 17304101, 1181433330, 1145601357, 1984841073, 1500324418, 1685094767, 737507944, 556480311, 1195447336, 67118100, 4076808192,
- 3691133442, 452988672, 822093312, 838926336, 336926230, 572720646, 875898406, 571946550, 370414854, 892744243, 925312564, 372388662, 117838869, 909587207, 353776179, 117900820, 1934310145,
- 1299990593, 1162245446, 1430666876, 1330009185, 478202206, 286395675, 2155382550, 302848796, 25630225, 1181433330, 1145601357, 1984841073, 1500324418, 1685094767, 2488760936, 202248993, 2489454614,
- 202248993, 6426646, 4279762946, 36176637, 4128974, 318767178, 840373810, 909260342, 353776177, 386336276, 355669526, 70135843, 370554673, 892744243, 119677748, 370545681, 640030003, 102900259,
- 909260039, 873542966, 589440806, 859191095, 336926258, 403113734, 52971529, 523120674, 1212043096, 336990362, 858594684, 84155949, 1009388057, 186067561, 959457317, 807867923, 203892515, 118303515,
- 371296912, 420418061, 48693648, 16843009, 1060059187, 202619930, 1043800857, 17834807, 1596603649, 378469898, 35390997, 469828097, 18422024, 18095685, 337742424, 269618446, 131162, 44826136,
- 15139112, 4980799, 372380416, 909521431, 842085938, 101979414, 370546439, 807605555, 925959214, 842208790, 590624054, 336660258, 355669526, 572728870, 889652770, 892745266, 656815121, 385950498,
- 117899790, 926299687, 152581686, 570632264, 1478438448, 2588425807, 2081691152, 758328605, 419759134, 1765550602, 621483818, 322514984, 590358294, 453781287, 17239339, 621678150, 237578551,
- 671426860, 48693542, 16843009, 1060059187, 202619930, 1043800857, 17834807, 1596603649, 378469898, 35390997, 469828097, 18422024, 18095685, 638514941, 322261321, 963397643, 33557515, 4261353472,
- 3389138946, 1174421248, 840105984, 909252374, 825635382, 336926258, 370607878, 588591894, 822357552, 857085495, 875902514, 285680163, 857085460, 589702677, 117842466, 909521461, 640946485,
- 925049383, 587674423, 152580903, 570632264, 1478438448, 2588425807, 2081691152, 758328605, 419759134, 1765550602, 621483818, 322514984, 590358294, 453781287, 4094102827, 1048388218, 3875611517,
- 16843010, 792212225, 331094591, 925047052, 270743358, 708641025, 2399013471, 470160662, 16908546, 421070876, 337528065, 2808584193, 131239, 32702252, 12976784, 3604524, 101056768, 640033543,
- 572728871, 387192070, 336926230, 572720646, 889339431, 857084979, 875902514, 640034598, 859190325, 909584178, 353776179, 117900820, 84046337, 134290433, 825433867, 1214017595, 1295999802, 16909113,
- 993604636, 1413690692, 1230662468, 371296961, 420418061, 214958480, 539107894, 741677064, 923076169, 776876610, 605885212, 1009989406, 52636211, 1229010947, 562702680, 302845460, 33577488,
- 4076809216, 3254947841, 855649280, 100728832, 639829766, 589702950, 336922146, 353768983, 587597332, 37627682, 370422581, 892744243, 640099892, 909391142, 858206771, 120005399, 41025827, 18612485,
- 857672456, 1550859057, 1063467592, 33765709, 959716353, 1127564347, 1516979284, 2101246537, 595163427, 906809345, 136323618, 1227633944, 1110902022, 472796722, 505683219, 859583287, 50537258,
- 1481195832, 1734846416, 738197760, 2415993599, 1191244289, 100728832, 639829766, 589702950, 336922146, 353768983, 117900820, 372388662, 587600917, 925312546, 842208790, 589706293, 654771746,
- 572727863, 889339431, 857084979, 875902514, 640034598, 859190325, 41025842, 18612485, 857672456, 1550859057, 407657800, 774376717, 504773186, 454692384, 303445516, 118493193, 1292371751, 16909113,
- 993604636, 1413690692, 1230662468, 906809345, 136323618, 1227633944, 1110902022, 1041063487, 656418308, 520750637, 304809222, 100926229, 487791707, 859250212, 589968188, 1094189827, 33577033,
- 4076809216, 3254947841, 855649280, 100728832, 639829766, 589702950, 336922146, 353768983, 587597332, 37627682, 370422581, 892744243, 640099892, 909391142, 925315635, 656607027, 41025843, 18612485,
- 857672456, 1550859057, 1063467592, 33765709, 959716353, 1127564347, 1516979284, 578444105, 595410557, 906809345, 136323618, 1227633944, 1110902022, 472796722, 505683219, 859583287, 50537258,
- 1481195832, 2812766057, 301990144, 3657510399, 1342236417, 825425920, 889652770, 288699954, 101065251, 101068807, 640951061, 840381734, 858862102, 859189810, 101061687, 640033557, 587345457,
- 370413859, 640030003, 859178787, 336926258, 639771398, 370554663, 875901491, 102900518, 300099335, 557130045, 271330094, 469827841, 105120258, 328802855, 755312432, 18612738, 722469121, 874523947,
- 387203868, 774376717, 504773186, 454692384, 303445516, 118493193, 337379586, 124780833, 319886614, 825233668, 16843281, 858983938, 354290191, 2466121494, 18617634, 637811970, 103622432, 84287242,
- 51712555, 33555972, 4261351936, 3389184513, 1006646528, 573767680, 842336006, 588330294, 117835298, 352716336, 640037923, 372381493, 842215730, 926103090, 352716308, 824583715, 589496878,
- 857084945, 52831765, 587674423, 486159143, 557132352, 271330094, 469827841, 121897474, 328802854, 755312432, 18612738, 722469121, 874523947, 2049065760, 2101247266, 469828131, 1879122196,
- 286594567, 806421523, 16912689, 856556033, 503975731, 4261877269, 471147154, 1661075969, 10987367, 4279500802, 38666994, 3145901, 16777288, 859190834, 101065237, 101979413, 891691555, 589706293,
- 370553397, 909521459, 101061939, 370414869, 892678707, 589702708, 370553397, 101069607, 656810531, 119677734, 842216995, 370611734, 909259542, 705225985, 606407468, 1868914700, 238166621,
- 252261687, 722414892, 2286305569, 220537868, 488974377, 271204099, 372316189, 371004194, 504630612, 152310298, 3825277717, 152830465, 1691884057, 3932706401, 18617373, 436273666, 4078375425,
- 3716956999, 470293018, 751370498, 436930621, 218391597, 386336781, 335544832, 1308816127, 788560898, 13056, 909521409, 102896947, 336925958, 639771398, 640955701, 372389155, 909521431, 101061939,
- 370414869, 892678707, 589702708, 370553397, 557130023, 705225985, 606407468, 1868914700, 405938781, 739188301, 556470061, 210257473, 688727332, 3372091176, 3825285121, 152830465, 1691884057,
- 3932706401, 35394589, 436273665, 4078375425, 3716956999, 470293018, 895680770, 335544832, 1308816127, 872465666, 17920, 101065217, 101979413, 891691555, 589706293, 389165621, 842208790, 355677751,
- 353699334, 842208788, 640955701, 372581158, 858920471, 909586994, 372450615, 909259542, 101069623, 572720647, 36054567, 203695438, 1567581536, 319173154, 270999571, 388113434, 1178673451,
- 623119496, 269689372, 403966216, 1526601246, 775881246, 503463726, 621546241, 170218576, 164299017, 1691884057, 3932706401, 18617373, 16908545, 387055898, 2353219571, 135928541, 16843036,
- 3724607745, 725038891, 1091905568, 2430023, 4279500803, 38666994, 3408117, 4980800, 102891776, 336925958, 639771398, 640955701, 842151203, 857085463, 859191090, 352716309, 857084949, 875902258,
- 891495974, 840308502, 926036531, 838940470, 101979414, 891691555, 571946548, 370414854, 892744243, 1308763700, 1611408421, 576548709, 320013874, 437266208, 722936356, 2286305569, 472196108,
- 135271202, 504894473, 686358038, 707410490, 472529722, 471671075, 3405849122, 3625589001, 1750491492, 471080426, 33620225, 302062081, 1128788759, 437968268, 16849928, 16843009, 691736065,
- 725236266, 572799529, 589504029, 2366493, 4279500803, 38666994, 3539164, 4980801, 102891776, 336925958, 639771398, 640955701, 842151203, 857085463, 926036274, 102052662, 336925958, 892482326,
- 640037941, 387331363, 842215958, 926299954, 859191077, 336926258, 856098566, 842217015, 101979414, 1308755719, 1611408421, 576548709, 320013874, 18035217, 388113434, 1178673451, 623119496,
- 269689372, 403966216, 1727927838, 219880576, 2266370322, 454852728, 370217485, 164299143, 1691884057, 3932706401, 18617373, 16908545, 387055898, 2353219571, 135928541, 16843036, 1073807617,
- 236134804, 1645221388, 236134804, 1645221388, 335544576, 1308782591, 1157687041, 570490880, 353699334, 352716564, 842208788, 101062455, 891691555, 587609908, 892675618, 891495988, 370618930,
- 926036758, 102052662, 336925958, 892482326, 640037941, 387331363, 842215958, 926299954, 606424578, 406079244, 271065616, 471544610, 622667557, 841112943, 538120966, 605687847, 556472098, 210257473,
- 572269860, 151523347, 371070996, 420072193, 763025434, 403711020, 438179108, 522853157, 3932706310, 18617373, 16908545, 387055898, 2353219571, 135928541, 16843036, 65793, 4278976514, 49939192,
- 3670222, 318767167, 909588018, 590353715, 102900514, 370611221, 322114327, 926094131, 875902518, 372389155, 857085491, 34477367, 52626183, 52626211, 891748910, 858068502, 120005399, 638551843,
- 17437216, 404948745, 1308688645, 2334556418, 117786882, 336922186, 1342576922, 135010072, 42089081, 158087292, 538517012, 1040646469, 2037982077, 31719715, 186384641, 84936209, 31587844,
- 4220124791, 587735570, 16843036, 134355971, 1761483287, 2583586561, 589398273, 18612493, 1739057666, 131175, 33423118, 14025440, 3473454, 102904576, 909260067, 774911285, 36579074, 37631267,
- 387323447, 926299671, 68031795, 370414897, 571814678, 855844390, 120005399, 1058795811, 354824731, 303245091, 269621272, 386082095, 575936036, 356785985, 388443952, 304358669, 1042102332,
- 2037982077, 337380131, 992379931, 421075519, 134355976, 671678726, 1966971689, 1159073338, 1730757194, 470490653, 3590455554, 6776743, 4279107587, 48235005, 3473578, 5046337, 926290688, 372717110,
- 907482902, 922893879, 68031795, 370414897, 571814678, 589702695, 102958626, 909260067, 774911285, 36579074, 372389667, 587600917, 875898402, 372388662, 587600917, 875898402, 285740598, 386474531,
- 173282852, 522261522, 806700050, 219621167, 554771493, 286468899, 438178330, 588588594, 403837735, 361435672, 387324956, 366943003, 387324956, 3691059995, 84214529, 690489603, 606146971, 237123899,
- 1112163606, 505243433, 16849931, 469893377, 646191892, 421150523, 468322329, 471602711, 454760214, 471602711, 1775382, 4279500802, 48038397, 3801282, 16777285, 857092097, 825636402, 909574718,
- 101069621, 587597319, 20260642, 589702704, 34480675, 875823631, 875968053, 657732661, 372389172, 857085491, 624375346, 842217015, 101979414, 3657500423, 740405758, 456280868, 16911387, 33817375,
- 3225839641, 642384185, 839325237, 34085432, 16849922, 505614338, 890977075, 3254659432, 219554186, 2417561362, 1526647297, 16908802, 69477644, 758848516, 402850305, 16885249, 353897218, 33621014,
- 219156481, 370020877, 16843269, 805372417, 236200330, 1511002637, 335544832, 3707895295, 973117954, 17920, 372244737, 909521459, 922893873, 104019254, 101058310, 891757091, 640036865, 237118243,
- 872550146, 909522228, 875836724, 842347559, 370553622, 926298675, 353776167, 572720660, 909391142, 2986269185, 1260661793, 203103026, 52363522, 1746469380, 20561990, 372581962, 439890439,
- 469893640, 268566785, 993205795, 694695195, 454760166, 471602711, 1526647297, 16908802, 69477644, 758848516, 402850305, 16885249, 353897218, 33621014, 219156481, 370020877, 16843269, 3003187713,
- 471209755, 454497820, 335544832, 3707895295, 973128194, 16640, 372244737, 909521459, 922893873, 104019254, 101058310, 891757091, 640036865, 237118243, 872550146, 909522228, 875836724, 842347559,
- 370553622, 926298675, 120796967, 20129571, 565313242, 843785260, 34347803, 67313409, 1181227266, 1241594304, 118895910, 135936050, 18612738, 588251649, 456864542, 3744032821, 1048388218,
- 3389072253, 33708798, 621543682, 470025252, 33631547, 2785089539, 184680705, 68556056, 268501505, 302845200, 33887758, 33620225, 2808574977, 327847, 50200338, 9110352, 1507339, 5570594, 16777304,
- 336926258, 639771398, 389428277, 336922146, 909259542, 656815157, 842217015, 101979414, 570623751, 587597574, 909522741, 322114359, 387388950, 640098837, 102900518, 891487751, 875901491, 589768231,
- 101058310, 858985493, 640098837, 657667878, 958998529, 975841850, 589048379, 572267554, 562731810, 252841238, 174034969, 186062619, 237244693, 313337528, 118691105, 153757463, 438642443, 524355849,
- 80478472, 1191775241, 555157507, 1420577827, 691791106, 725236266, 572799529, 589504029, 522394909, 236200330, 1511002637, 16851197, 16849921, 2483101476, 589985534, 18612481, 16843009, 370744321,
- 151261244, 270341648, 16849955, 12829185, 4280287236, 37356266, 458962, 2424861, 16777264, 336922146, 19267863, 909391142, 389165878, 369563447, 101061653, 120005155, 369164583, 892744243,
- 909584180, 353776179, 117900820, 1430660865, 805962007, 1161751038, 1147294332, 1010572349, 1598913608, 18630216, 821558944, 4249831002, 219554186, 2417561362, 1500368897, 67188556, 1199242821,
- 1115049563, 991575092, 2102222913, 474299720, 4227752449, 1180987465, 337742579, 269618446, 131162, 27328044, 15860112, 3866670, 101056768, 588580359, 640099878, 352723491, 370546452, 101061653,
- 1042752035, 338900226, 909259542, 656815157, 875898406, 53621558, 117575191, 909518599, 20330039, 16974706, 134290433, 825433867, 1214017595, 1295999802, 16909113, 993604636, 1413690692,
- 1230662468, 621678127, 237578551, 671426860, 231735590, 67707942, 403185698, 105458741, 843200261, 320613966, 924722205, 708000819, 939721507, 4250421569, 1227230916, 185808209, 188312648, 131084,
- 28048914, 15139290, 4915262, 909260544, 572723509, 805766662, 588580358, 640099892, 858920757, 858993174, 859189810, 117838903, 588580358, 774972966, 287515394, 355669524, 640034594, 102900259,
- 388171271, 117575191, 909518599, 1949709879, 724443445, 16846892, 16849921, 353190914, 2567375643, 86454291, 16843053, 16849921, 724242433, 204742701, 438575379, 488972051, 246810124, 691479822,
- 690753065, 421931013, 1879122196, 286594567, 521208851, 35201815, 268566785, 437590303, 354290188, 2466121494, 18617634, 16843009, 638467073, 322261321, 963397643, 33557515, 1845435904, 3875633410,
- 1375742208, 840105984, 909260598, 102896947, 336663814, 355669526, 589440550, 570885666, 842343174, 288699958, 589702708, 840308277, 926298657, 355677746, 352716322, 587600913, 909124386,
- 824587317, 857085495, 288699954, 589702708, 857085493, 705077042, 85202478, 185280041, 824846375, 721882396, 101913388, 218965543, 757343783, 174588192, 353641253, 186918663, 101079652, 252248578,
- 404361493, 438839308, 16851023, 16843236, 421005084, 488491262, 33627144, 469827841, 18685193, 135796536, 16908572, 169607425, 3405653283, 236286309, 251859469, 19473930, 152903327, 131356,
- 4280549378, 20316926, 1376486, 318767166, 352716336, 588591893, 370552853, 892744243, 572728884, 572658438, 589701671, 587597346, 892745269, 859120437, 589706293, 857085493, 842150706, 858928695,
- 336926258, 30410246, 444760577, 1733888544, 706304868, 303170644, 269032474, 470363698, 575688724, 507317806, 604766465, 237314592, 2084997752, 521714689, 3257426957, 1651704322, 4261832799,
- 16843074, 638260225, 2083029543, 18618657, 1895891201, 1182617955, 134218240, 3758227456, 1711335425, 29696, 926298679, 875902483, 842343206, 842208790, 909588022, 389165874, 587662854, 589702695,
- 120653346, 926298647, 352716339, 588715540, 589702708, 388171298, 842208790, 859255094, 587597319, 572728866, 892405254, 889339447, 639772208, 102900259, 352716295, 355669524, 572728870, 570492678,
- 117900806, 892745267, 134360628, 2635936031, 674376210, 354430517, 487405628, 893523492, 436404995, 592059148, 1795302683, 503386400, 33752065, 589828382, 67382544, 1124935444, 203297857,
- 1277049879, 705761111, 16919070, 539171073, 538052872, 790501150, 272440861, 19673870, 841353582, 27991068, 134546177, 20192028, 235544860, 33692680, 33620738, 473636616, 101122892, 555942315,
- 218967569, 505619252, 79430151, 2287472130, 33817345, 252843522, 17642291, 721486081, 152178999, 33686044, 952500482, 87175513, 1144659243, 33556768, 4278133760, 3858839042, 1040192768, 806551552,
- 353699334, 354620723, 857085488, 875902514, 102900518, 656548371, 572728866, 891487750, 892679734, 892548387, 891495988, 842208790, 926036531, 842215990, 101979414, 16896006, 538608258, 1684494602,
- 1412045147, 437391876, 839911708, 337381678, 774000720, 18758926, 539233281, 2014192930, 24921738, 220141756, 46278756, 1600287490, 1123944040, 16843009, 656804628, 561784962, 16849945, 1668350209,
- 4619601, 4280942594, 18482162, 1442034, 16777326, 572728870, 336922118, 842208790, 37631798, 875902260, 101061414, 640033315, 909521973, 857092659, 909588018, 372388662, 101062422, 640688903,
- 640034598, 101065251, 370545969, 909259058, 338900278, 336922118, 588715542, 589702708, 352781858, 842208790, 859255094, 36577799, 101065251, 101065251, 1024505345, 844312869, 491215660, 50466859,
- 1075053313, 2018383170, 1367098948, 472602668, 555552558, 791416342, 50594576, 50791448, 136530715, 857086754, 68491557, 16908830, 186515714, 890250018, 220340235, 471221568, 874905866, 875695923,
- 318965013, 162398481, 1197420311, 171861563, 942936328, 276958513, 73203243, 1199262218, 305884747, 16908548, 520225794, 639638589, 33883400, 16886786, 118889741, 335813920, 504896795, 16976414,
- 201458362, 33655384, 16843009, 65537, 33423124, 15139284, 318767167, 842479154, 571814710, 353699334, 352785719, 823531028, 842208790, 926298422, 117835315, 573638150, 639772454, 889659939,
- 892679734, 892810503, 589702708, 857085493, 2653958960, 354624265, 623183637, 41054732, 622988290, 101596996, 34015262, 621429563, 187115558, 354759471, 638271038, 525277993, 31719681, 152830209,
- 1164646938, 210191660, 16849698, 706295822, 16917558, 50397441, 740034076, 640427609, 101979568, 131356, 4278976514, 49939192, 3277006, 16777277, 855776818, 34477367, 52626183, 52626211, 891748910,
- 842208790, 355677750, 102900514, 387322901, 856896275, 909587219, 656618549, 891692583, 842217012, 1107433239, 505880323, 387469313, 981010444, 947651202, 504629612, 373563417, 271460874,
- 388171531, 38666757, 42673793, 2169113673, 302979472, 2317424141, 16901889, 35390209, 4263122696, 4268163432, 562102681, 469830947, 33620481, 84871964, 3791521557, 2315155201, 538323451, 303061592,
- 554962445, 131210, 49872652, 13501178, 3997746, 506593536, 355939074, 50790926, 52626211, 36569891, 370554151, 909521459, 589436211, 336922146, 856889110, 856896275, 875902519, 909583651,
- 353776179, 117900820, 520307202, 1342250535, 135010072, 42089081, 158087292, 538517012, 705304132, 118165550, 33888035, 645988942, 206111371, 2330984010, 302847521, 26220815, 16843239, 134355971,
- 1761483287, 2583586561, 589398273, 18612493, 469893378, 352653067, 31587847, 4220124791, 1478497833, 236200330, 1511002637, 201327360, 4194498815, 838904322, 1241529856, 838926336, 926089758,
- 117575189, 587408131, 771957507, 372582146, 909259542, 571814710, 352723491, 320280084, 322114355, 892745523, 841294644, 101979414, 891691555, 842217012, 101979414, 891691555, 1107441204,
- 505880323, 387469313, 981010444, 947651202, 504629612, 373563417, 271460874, 388171531, 38666757, 42673793, 4266265673, 471602675, 454760214, 471602655, 454760214, 16901889, 35390209, 4263122696,
- 4268163432, 562102681, 469830947, 33620481, 84871964, 3791521557, 2315155201, 538323451, 370613215, 387324956, 370613019, 387324956, 131099, 33423118, 13763296, 3735598, 102904576, 909260067,
- 774911285, 36579074, 37631267, 387323447, 926299671, 68031795, 370414897, 571814678, 655566374, 875898406, 389165878, 1058795799, 354824731, 303245091, 269621272, 386082095, 575936036, 356785985,
- 388443952, 304358669, 2419341372, 219287321, 59384086, 2216367132, 440351526, 470292761, 17172482, 2603165705, 238712125, 1112163606, 505243433, 16915467, 274343682, 336465170, 16812577,
- 4261353472, 3875656705, 20480, 589443333, 807609894, 237121826, 842343170, 892745526, 656815121, 589440802, 840308277, 37630003, 102896947, 1041569030, 372388098, 101061653, 656876067, 909259542,
- 589706293, 352781858, 370546452, 858927127, 604057621, 758384391, 587334161, 738929455, 352388392, 218629667, 539829255, 775037712, 187050250, 1327771153, 860827222, 218502678, 1010053139,
- 321063725, 824378113, 33751297, 16843009, 169284124, 490209552, 469828119, 16843265, 403119105, 67447577, 709112577, 503850563, 791754248, 3909551412, 270010638, 33561603, 4076805120, 218304514,
- 1090522112, 922812416, 117835287, 654770702, 840119862, 840315670, 355938867, 117835568, 387192084, 639771398, 909391142, 389165878, 640099079, 102900518, 370414854, 909259542, 892745271, 19342900,
- 554575971, 437716257, 386666518, 621090358, 34806055, 319234079, 1634075393, 1296727374, 1867272835, 33757970, 1328759378, 928264237, 17642016, 36773121, 873010935, 134624863, 990643719, 33422686,
- 68682241, 117965065, 1126580277, 1984513905, 812785989, 1597448475, 962871614, 923470091, 17831955, 402653696, 2315451903, 1560340225, 26112, 926298625, 355677746, 352716322, 588591893, 857084949,
- 656811541, 102904098, 909260039, 641021238, 102900518, 370414855, 638923542, 102900518, 909260039, 590689590, 875901749, 891495974, 842208790, 926298673, 101065237, 891360533, 589702708, 857092661,
- 352654870, 842208790, 20264758, 690555647, 772215828, 1381108007, 1293367330, 991428898, 203760944, 522929427, 604772934, 373174054, 640826138, 1381109286, 472524812, 369172048, 623259454,
- 134349067, 369568292, 4263781141, 675681499, 18105384, 16843236, 673384476, 670509057, 16849944, 469893377, 2568690441, 16843009, 152837526, 16843292, 453647362, 472446491, 470226969, 33620481,
- 387385116, 573047327, 16849928, 20616449, 973144321, 335544832, 3556900351, 184608513, 16640, 353776129, 572720660, 909391142, 926298663, 355677746, 352716322, 370545681, 857085489, 909194802,
- 101069623, 856032775, 572991010, 119677734, 892745269, 640037905, 370554147, 1392587315, 387652374, 2652642326, 354624265, 623183637, 201458188, 1061430562, 136185358, 1144717831, 639961601,
- 789260072, 185935155, 1327180070, 1107362079, 471209755, 454497820, 16843170, 437913884, 571269886, 234946843, 908728632, 16843300, 469958913, 19667974, 101979445, 131356, 4279369729, 31064573,
- 4587751, 909260544, 891499829, 572732723, 805766662, 588580358, 640099892, 858920757, 858993174, 859189810, 117838903, 588580358, 774972966, 354624258, 354620723, 355669524, 640034594, 102900259,
- 1948452359, 1768497461, 271330094, 469827841, 1140982017, 186323982, 806590727, 19727655, 469827841, 268501249, 1764567851, 204742761, 438575379, 488972051, 337184268, 2854788641, 286594567,
- 521208851, 35201815, 268566785, 437590303, 354290188, 682231574, 471147164, 16843009, 50331905, 2048, 3473072130, 1946183168, 32512, 926298679, 875902483, 842343206, 842208790, 909588022,
- 389165874, 587662854, 589702695, 120653346, 926298647, 352716339, 588715540, 589702708, 388171298, 842208790, 859255094, 587597319, 572728866, 892405254, 889339447, 639772208, 102900259, 352716295,
- 355669524, 572728870, 570492678, 117900806, 892745267, 922889780, 842217015, 101979414, 520619783, 312286513, 891826730, 1008017454, 605883704, 53821974, 203031299, 455297563, 543883813, 18743569,
- 503448324, 270739473, 335807533, 1094913319, 386670100, 1464606268, 506073359, 16843306, 136323865, 505418249, 489627159, 235945246, 1845570611, 473048585, 16886556, 168297731, 219554186,
- 2417561362, 20192028, 235544860, 33692680, 33620738, 473636616, 101122892, 555942315, 218967569, 505619252, 79430151, 2287472130, 33817345, 252843522, 17642291, 721486081, 152178999, 33686044,
- 952500482, 87175513, 1144659243, 2321418528, 219026465, 5902354, 4280156161, 19661309, 2687207, 909251328, 859189815, 101065237, 370413845, 638923542, 572727846, 102893318, 909260067, 873542966,
- 891495974, 2670859798, 372124166, 640222484, 673647371, 219951402, 321661703, 640091667, 640093453, 18885924, 16843236, 421005084, 488491262, 33627144, 469827841, 18685193, 135796536, 131356,
- 4280156162, 36438525, 721066, 318767157, 336926258, 639771398, 389428277, 842479154, 571814710, 286590470, 857085460, 572925461, 117842467, 891487778, 892745266, 640037905, 370554147, 454468914,
- 471209755, 705040668, 85202478, 185280041, 824846375, 721882396, 101913388, 218965543, 757343783, 464126496, 471602711, 3323664150, 469827841, 4263057415, 136125896, 16908572, 152830209, 939597085,
- 470292503, 33554945, 4076809216, 4060166147, 1560292864, 100728832, 352716550, 656811555, 102900518, 370611221, 101979414, 656548614, 859111998, 842208788, 640955702, 891692583, 842217012,
- 117835269, 639833350, 589702950, 336922146, 353768983, 587597332, 37627682, 370422581, 892744243, 640099892, 909391142, 436417075, 16843523, 185073948, 993080095, 977820784, 961363811, 469828099,
- 1144731956, 1146372917, 4266220139, 16974736, 134290433, 825433867, 1214017595, 1295999802, 16909113, 993604636, 1413690692, 1230662468, 638439425, 570689828, 890767392, 84298028, 1311916599,
- 487791662, 859250212, 589968188, 1094189827, 220354633, 67707942, 403185698, 105458741, 843200261, 320613966, 924722205, 708000819, 939721507, 5785921, 4279435266, 18809182, 458759, 318767123,
- 588518706, 389297442, 336922146, 909259542, 2720412725, 2239859581, 723854121, 19145511, 3471294983, 1565400027, 1548901994, 16800873, 1761550336, 167902720, 6912, 909518647, 336664375, 353834774,
- 589440551, 889659938, 892745271, 120006161, 1043072293, 369953826, 656937763, 874973697, 17635109, 515001857, 68229647, 202809598, 18350594, 35127809, 18222082, 570560030, 100663552, 469854463,
- 738199297, 924254208, 875902518, 102900518, 925042439, 842217014, 101979414, 54396679, 118830903, 387191829, 589440550, 117899818, 707946246, 538781227, 186124551, 992096535, 1747722563, 589509159,
- 16847641, 253899561, 690229772, 896304158, 707010887, 1428035861, 893129751, 1815034658, 16843009, 117899521, 185533456, 16843009, 83886336, 419520255, 838862593, 926351360, 842217014, 101979414,
- 336926215, 572720646, 640034598, 370554663, 892744243, 572728884, 925304582, 842208790, 640955702, 117842467, 403838471, 1060315180, 827859228, 538127182, 168428065, 674042134, 606613801,
- 118625548, 68421384, 472329246, 201665814, 303517328, 756689201, 625545754, 168176196, 136128535, 724903471, 134556455, 16851974, 639311663, 2297368, 4278321154, 19071336, 2555914, 385876010,
- 924002083, 352716311, 842216213, 638924598, 370484006, 353834774, 572663335, 117582371, 909587719, 892679990, 144681223, 51064747, 218237698, 604638490, 353042707, 421271072, 201918988, 672472602,
- 2013334293, 335614251, 1393493008, 16863060, 687931953, 33623578, 16843033, 16914689, 3243579918, 65729, 23002885, 459032, 922746945, 859190791, 336926258, 572720646, 656811559, 656877094,
- 370546487, 892744243, 572728884, 891750150, 889339447, 656815156, 857085495, 389494322, 336925702, 587667220, 640033314, 639173969, 826488085, 455749455, 67240449, 335742987, 388433437, 691090735,
- 269949974, 16843009, 419758337, 974657593, 16844056, 588976645, 1926178845, 859966479, 254692395, 218498309, 185079065, 890112819, 238432048, 151454999, 271723271, 454889995, 33685765, 185009409,
- 134874886, 65797, 4279566338, 18940254, 1638407, 620757030, 117835285, 909522742, 353776179, 587597332, 875898402, 909522742, 102893367, 336922119, 892744243, 33629748, 67850319, 388307459,
- 1042627377, 1128610856, 622793020, 170202443, 673336072, 386530344, 50547800, 893325332, 1445347625, 628705099, 3473673482, 470552338, 724383095, 65587, 23658268, 459059, 385876006, 926299703,
- 117835299, 909517575, 875836724, 372713255, 909259542, 118829879, 654771718, 572662567, 2468546311, 2601524753, 84150803, 16843032, 892274945, 691085858, 756969228, 185272084, 118359300, 907733389,
- 436928802, 152509220, 504104197, 33621008, 3256221954, 20143670, 65793, 4279435267, 18743646, 1507335, 3080228, 640038656, 859190325, 336926258, 370542342, 101061653, 891691555, 103233332,
- 370414854, 892744243, 388441652, 640955702, 352723491, 472211988, 1009858376, 657466912, 875053608, 523147845, 589638684, 524099376, 505423411, 689518885, 826159134, 439032615, 623128086,
- 792601919, 320144457, 791158571, 655827762, 740364126, 471999775, 131113, 23002891, 459032, 2359320, 891754240, 121058870, 572720646, 909391142, 372388662, 117838869, 571672070, 370414854,
- 892744243, 406595124, 604331344, 823140360, 658449470, 994068029, 590095889, 572664618, 211953705, 1180767241, 1158219549, 624896308, 1950829655, 17828387, 757805697, 807940151, 57, 234881024,
- 16821760, 0, 1493172224, 16823296, 0, 134217984, 16785409, 0, 83886592, 16790785, 0, 721421056, 16814849, 0, 234882048, 16833793, 0, 201327872, 16778754, 0, 234882560, 50344194, 151257344,
- 2986344448, 50331648, 151257344, 268435712, 50335233, 151257344, 167772672, 50342145, 151257344, 1442841344, 50346753, 151257344, 469763072, 50380545, 151257344, 402654464, 50392065, 151257344,
- 469763584, 1124078338, 1879076608, 1912633600, 1728080128, 1946183680, 838868992, 822095872, 536884224, 2030068224, 671096832, 1375753472, 687888128, 721431296, 1140858880, 1929405696, 1728080128,
- 536899072, 536880640, 1694516224, 1694529024, 1862298624, 1828745216, 1845519616, 771781632, 1124076032, 1879076608, 1912633600, 1728080128, 1946183680, 838868992, 822095872, 536885504, 2030068224,
- 1140858880, 1845518592, 1694525696, 536898560, 1694515712, 1778413056, 1828741376, 1845520640, 1291853824, 1811966208, 1694526464, 771781120, 1866661888, 1769109872, 544499815, 875638834,
- 544825888, 1465013544, 539700009, 1769170244, 639659623, 1986348064, 1886350437, 1953391981, 1866664494, 1769109872, 544499815, 959524914, 544825888, 1768841540, 1109421157, 1634365029, 544106861,
- 1819044173, 3043941, 1862288384, 1761635584, 1761637376, 1845518592, 1866727424, 1769236845, 28257, 7274578, 6357101, 1375731822, 1851878767, 4587520, 7209071, 4587636, 7471215, 6619239, 3276832,
- 3145774, 3801120, 4456480, 7143535, 7602281, 6357097, 2097262, 7274578, 6357101, 2097262, 2097210, 3211313, 3211309, 2949170, 3145778, 3735601, 1852786176, 1919895156, 840983911, 975188014,
- 1836008480, 1634301033, 1867653230, 544104813, 825303098, 758264109, 959524914, 4456448, 7143535, 7602281, 6357097, 2949230, 7274578, 6357101, 1140850798, 1953066351, 762208617, 1634561874,
- 1442840686, 1912628480, 1761637120, 1845522176, 822091776, 805318144, 12288, 1936876886, 544108393, 808463921, 4456448, 7143535, 7602281, 6357097, 2949230, 7274578, 6357101, 1140850798, 1953066351,
- 762208617, 1634561874, 110, 512, 0, 838907391, 0, 0, 0, 0, 0, 60419, 67109632, 100664576, 134219520, 167774464, 201329408, 234884352, 268439296, 301994240, 335549184, 369104128, 402659072,
- 436214016, 469768960, 503323904, 536878848, 570433792, 603988736, 637543680, 671098624, 704653568, 738208512, 771763456, 805318400, 838873344, 872428288, 905983232, 939538176, 973093120,
- 1006648064, 1040203008, 1073757952, 1107312896, 1140867840, 1174422784, 1207977728, 1241532672, 1275087616, 1308642560, 1342197504, 1375752448, 1409307392, 1442862336, 1476417280, 1509972224,
- 1543527168, 1577082112, 1610637056, 33644800, 2214634240, 3170927872, 3892352512, 2382398976, 2634058496, 2751506688, 2315256577, 2197871104, 4060123904, 2365649664, 2281740032, 3724591872,
- 2650861824, 4110461440, 4127257600, 2902499840, 3338717440, 1644211712, 2415944448, 3405800448, 3355469056, 3472935424, 3439381504, 3909144064, 3540018688, 3506491392, 1728098048, 2432757760,
- 3556824576, 1744884992, 3976260352, 1778419968, 1795188992, 1811967232, 2684382720, 1895853824, 1912631296, 1962963712, 1979741184, 3925899008, 2046851072, 2063628544, 2080406784, 2701178880,
- 2113961728, 2164293632, 3993037824, 67222016, 100730113, 134285057, 4244637953, 167902720, 201394945, 4278193409, 234946561, 268504833, 285278465, 318837249, 352392193, 385947137, 419502081,
- 453057025, 4160756737, 486668544, 520166913, 553721857, 587276801, 620831745, 654386689, 687941633, 721496577, 4194315265, 755095296, 788606465, 822161409, 855716353, 889271297, 922826241,
- 956381185, 989936129, 3808485888, 1023491073, 1057046017, 1090600961, 1124155905, 1157710849, 1191265793, 1224820737, 2952808961, 1258402048, 1291930625, 1325485569, 1359040513, 1392595457,
- 4211102721, 3825269760, 1426187520, 1459705345, 1493260289, 1526815233, 1560370177, 1593925121, 1627480065, 1661035009, 1694589953, 1728144897, 1761699841, 3137366529, 1812032257, 1845587201,
- 3875595776, 2785046273, 1895919617, 1929474561, 1963029505, 1996584449, 2030139393, 3774928896, 3674241537, 3707821056, 3640713216, 2063720192, 2097249281, 2130804225, 2164359169, 2197914113,
- 2231469057, 2265024001, 2298578945, 2332133889, 2365688833, 2399243777, 2432798721, 2466353665, 2499908609, 2533463553, 2567018497, 2600573441, 2634128385, 2667683329, 2701238273, 2734793217,
- 2768348161, 2801903105, 2835458049, 2869012993, 2902567937, 2936122881, 2969677825, 3003232769, 3020004096, 3053565185, 3087120129, 3120675073, 3154230017, 3187784961, 3221339905, 3254894849,
- 3288449793, 3322004737, 3355559681, 3389114625, 3422669569, 3456224513, 3489779457, 3523334401, 3556889345, 3590444289, 3623999233, 3657554177, 3691109121, 3724664065, 3758219009, 3791773953,
- 3825328897, 3858883841, 3892438785, 3925993729, 3959548673, 3993103617, 4026658561, 4060213505, 4093768449, 4127323393, 4160878337, 4194433281, 4227988225, 4261543169, 196353, 33685762, 67240706,
- 100795650, 134350594, 167905538, 201460482, 235015426, 268570370, 302125314, 335680258, 369235202, 402790146, 436345090, 469900034, 503454978, 537009922, 570564866, 604119810, 637674754, 671229698,
- 704784642, 738339586, 771894530, 805449474, 839004418, 872559362, 906114306, 939669250, 973224194, 1006779138, 1040334082, 1073889026, 1107443970, 1140998914, 1174553858, 1208108802, 1241663746,
- 1275218690, 1308773634, 1342328578, 1375883522, 1409438466, 1442993410, 1476548354, 1510103298, 1543658242, 2986368258, 1577235200, 3053477634, 3288381184, 3019923458, 3305157888, 3254813184,
- 2868938496, 1627571712, 3187696130, 1661124352, 3154142210, 1711432962, 1744987906, 1778542850, 1812097794, 1828910848, 1862430210, 1895985154, 1929540098, 1963095042, 1996649986, 2030204930,
- 2063759874, 2080541696, 2114092290, 2147647234, 2181202178, 2214757122, 2248312066, 2281867010, 2315421954, 2348976898, 2382531842, 2416086786, 2449641730, 2483196674, 2516751618, 2550306562,
- 2583861506, 2617416450, 2634192896, 2818612738, 2684526338, 2718081282, 2583732994, 4009793792, 2768413698, 2801968642, 2818745600, 2835517952, 2869078530, 2902633474, 2936188418, 2617290754,
- 2986520834, 3020075778, 2801841410, 3053620992, 2483074818, 3087176960, 3120740610, 3154295554, 3187850498, 3221405442, 3254960386, 3288515330, 3322070274, 3355625218, 3389180162, 3422735106,
- 3456290050, 3489844994, 3523399938, 3556954882, 3590509826, 3624064770, 3657619714, 3691174658, 3724729602, 3758284546, 3791839490, 3825394434, 3858949378, 3892504322, 3926059266, 3959614210,
- 3993169154, 4026724098, 4060279042, 4093833986, 4127388930, 4160943874, 4194498818, 4228053762, 4261608706, 261890, 33751299, 67306243, 100861187, 134416131, 167971075, 201526019, 235080963,
- 268635907, 302190851, 319011072, 352523267, 386078211, 419633155, 453188099, 486743043, 520297987, 553852931, 587407875, 620962819, 654517763, 688072707, 721627651, 755182595, 788737539, 822292483,
- 855847427, 889402371, 922957315, 956512259, 990067203, 1023622147, 1057177091, 1090732035, 1124286979, 1157841923, 1191396867, 1224951811, 1258506755, 1292061699, 1325616643, 1359171587,
- 1392726531, 1426281475, 1459836419, 1493391363, 3238051840, 1526946307, 1560501251, 1594056195, 1627611139, 1661166083, 1694721027, 1728275971, 1761830915, 1795385859, 1828940803, 1862495747,
- 1896050691, 1929605635, 1963160579, 1996715523, 2030270467, 2063825411, 2097380355, 2130935299, 2164490243, 2198045187, 2231600131, 2265155075, 2298710019, 2332264963, 2365819907, 2399374851,
- 2432929795, 2466484739, 2500039683, 2533594627, 2567149571, 2600704515, 2634259459, 2667814403, 2701369347, 2734924291, 2768479235, 2802034179, 2835589123, 2869144067, 2902699011, 2936253955,
- 2969808899, 3003363843, 3036918787, 3070473731, 3104028675, 3137583619, 3171138563, 3204693507, 3238248451, 3271803395, 3305358339, 3338913283, 3372468227, 3406023171, 3439578115, 3473133059,
- 3506688003, 3540242947, 3573797891, 3607352835, 3640907779, 3674462723, 3708017667, 3741572611, 3775127555, 3808682499, 3842237443, 3875792387, 3909347331, 3942902275, 3976457219, 4010012163,
- 1963454467, 808479086, 1963405377, 808479086, 1090995265, 1919115629, 1627876975, 1919115629, 1090940527, 1986359906, 1650525797, 1702258034, 1735344391, 1801809519, 1735352583, 1801809519,
- 1768112907, 1836409714, 2019912806, 1768121099, 1836409714, 2019912806, 1868841738, 1667457396, 175402597, 1953457251, 1701012321, 1141273710, 1869767011, 1667499630, 1852797537, 1919108102,
- 125067631, 1667329349, 124678002, 1667329381, 107900786, 1701995077, 1694918006, 1986359906, 1682246245, 1667331183, 1953391971, 1868850442, 1667457396, 125070949, 1869049669, 124478830,
- 1869049701, 107701614, 1918985029, 1694920303, 1869767011, 1665600366, 1969451625, 1701602925, 1667697528, 1969451625, 1701602925, 1682377336, 1667331183, 1953391971, 1868850954, 1667457396,
- 208957029, 1836016455, 1667326317, 1953391971, 1868785420, 1633774957, 1852138339, 1665665908, 1969451625, 1701602925, 1667763064, 1969451625, 1701602925, 1648886904, 1745121889, 108159330,
- 1818850377, 1762026852, 1684826484, 1833502565, 1869767521, 1835599726, 1869767521, 1648952942, 1702258034, 1919052038, 124089957, 1869049673, 124478830, 1869049705, 40592750, 1761757769,
- 1665796970, 1969451625, 1701602925, 1667894136, 1969451625, 1701602925, 1665862776, 1634561391, 1701012321, 1795978350, 1835888483, 1667457377, 208957029, 1701996395, 1634496101, 1667851374,
- 1667320838, 107312245, 1969447276, 1275880820, 1835888483, 1667457377, 208957029, 1836016492, 1667326317, 1953391971, 1633897478, 107900786, 1918985068, 1275358831, 74739556, 1953457260,
- 1667321350, 107312245, 1969447278, 1309435252, 1835888483, 1667457377, 208957029, 1836016494, 1667326317, 1953391971, 1633897990, 107900786, 1918985070, 1846242927, 1936683105, 1886351988,
- 1157850472, 1694721902, 1325885294, 1919115629, 1862757999, 1919115629, 1325821551, 1986359906, 1651443301, 1702258034, 1969770253, 1918986094, 1634495861, 1863152757, 1735292264, 1836413537,
- 1953849708, 1667322374, 107312245, 1969447282, 1376544116, 1835888483, 1667457377, 208957029, 1836016498, 1667326317, 1953391971, 1633899014, 107900786, 1918985074, 1392930415, 1953850209,
- 1634928229, 1702131043, 1768117003, 1836409714, 2019912806, 1768125195, 1836409714, 2019912806, 1868780556, 1633774957, 1852138339, 1668549748, 1634561391, 1701012321, 1409709166, 1869767011,
- 1668548206, 1852797537, 1633833988, 1651770482, 1426485857, 1684826484, 1953826405, 1701080169, 1634555143, 1852797539, 1634563335, 1852797539, 1919046918, 107312741, 1701995125, 1426417014,
- 1735289202, 1769108741, 1426941806, 1735292264, 1836413537, 1953849708, 1969779981, 1918986094, 1634495861, 1426551925, 1852794735, 1963420517, 1852794735, 1460366181, 1668442467, 1818652021,
- 1997240421, 1668442467, 1818652021, 1493923941, 1668442467, 1818652021, 2030794853, 1668442467, 1818652021, 1510373477, 1953850209, 1635386981, 1702131043, 1868847626, 1667457396, 175402597,
- 1953457274, 1701012321, 1812296814, 1936158319, 1769095434, 1667327854, 174421109, 1852404321, 1969447271, 1091003764, 1969447237, 1627874676, 1969447269, 1326146932, 1935764595, 1969447272,
- 1863017844, 1935764595, 1969447272, 1393321332, 1835888483, 1667457377, 208957029, 1836016499, 1667326317, 1953391971, 1768846599, 1093743152, 1768846599, 1110520368, 1768846599, 960705072,
- 1852797957, 1678603119, 1701995881, 1953720691, 1936682607, 1886142730, 1869898088, 125005678, 812215925, 204945459, 1769173061, 1953394540, 1936682607, 1635009800, 1869508468, 1867057523,
- 1869898100, 208891758, 1667853647, 1953394546, 1936682607, 1936741644, 1852796009, 1869508468, 1833896563, 1952540517, 1936682607, 1953458449, 1701405793, 1769170290, 1852798067, 1090876271,
- 1634234476, 1952793092, 1632044385, 123825517, 812215925, 120863027, 1769173061, 74346348, 1635018074, 1635009795, 1701336069, 1225023860, 90272879, 1886413131, 1632372321, 1633968749, 41241858,
- 1476556110, 1833895785, 1869767529, 1766851182, 1869107715, 1734955781, 1409507693, 1426552161, 1818850160, 1342402159, 1124297064, 1342400872, 1963420019, 858810734, 1225537857, 1684108399,
- 1701995881, 259221875, 1769173077, 1684959084, 1701995881, 175335795, 1752198241, 1852798049, 1695314799, 1818850160, 1869901423, 141782894, 1952543845, 1936682607, 1953458441, 1852798049,
- 1964274543, 1818850160, 1768189551, 1936028261, 1869902697, 91451246, 1752198241, 1700922465, 1728405876, 1634561377, 1818584069, 1694982516, 1818850160, 2047110767, 56718437, 90272869, 1952802932,
- 1869153377, 1795514740, 1634758753, 1835101190, 123823202, 812215925, 37962291, 2013427054, 1835992937, 1869767529, 1752302446, 1853163375, 1127428201, 1769145650, 56716647, 125133172, 1769173109,
- 57569132, 57239664, 57239651, 90796912, 1734700399, 1869155425, 1768186228, 1936028261, 1963946857, 1818850160, 1768189551, 1936028261, 1863086953, 1919117677, 1869901423, 208891758, 1769173109,
- 1953394540, 1936682607, 1701670666, 1869898087, 108228462, 1952802932, 1879322977, 103901544, 1734700399, 1963405665, 875587950, 1627992112, 828991846, 858927152, 1768317193, 808464745, 1627992373,
- 828991846, 842346544, 1768317193, 808464745, 1627992885, 828991846, 875900976, 1768317193, 808464745, 1627993397, 828991846, 909455408, 1768317193, 808464745, 1627993909, 828991846, 943009840,
- 1768317193, 808464745, 1627994421, 828991846, 808857648, 1768317193, 808464745, 1963405622, 875587950, 1627997232, 828991846, 842412080, 1768317193, 825241961, 1627993396, 828991846, 925970480,
- 1768317193, 808464745, 1627994161, 828991846, 959524912, 1768317193, 808464745, 1627992114, 828991846, 825372720, 1768317193, 808464745, 1627992626, 828991846, 875704368, 1768317193, 808464745,
- 1627993394, 828991846, 909258800, 1768317193, 808464745, 1627993906, 828991846, 942813232, 1768317193, 808464745, 1627994418, 828991846, 808661040, 1768317193, 808464745, 1627992371, 828991846,
- 842215472, 1768317193, 808464745, 1627992883, 828991846, 875769904, 1768317193, 808464745, 1627993395, 828991846, 909324336, 1768317193, 808464745, 1627993907, 828991846, 942878768, 1768317193,
- 808464745, 1627994419, 828991846, 808726576, 1768317193, 808464745, 1627992372, 828991846, 842281008, 1768317193, 808464745, 1627992884, 828991846, 875835440, 1768317193, 808464745, 1627993396,
- 828991846, 909389872, 1768317193, 808464745, 1627993908, 828991846, 942944304, 1768317193, 808464745, 1627994420, 828991846, 892743728, 1768317193, 808464745, 1627993654, 828991846, 926298160,
- 1768317193, 808464745, 1627994166, 828991846, 959852592, 1768317193, 808464745, 1627992119, 828991846, 842477616, 1768317193, 808464745, 1627992887, 828991846, 876032048, 1768317193, 808464745,
- 1627993399, 828991846, 909586480, 1768317193, 808464745, 1627993911, 828991846, 943140912, 1768317193, 808464745, 1627994423, 828991846, 808988720, 1768317193, 808464745, 1627992376, 828991846,
- 842543152, 1768317193, 808464745, 1627992888, 828991846, 876097584, 1768317193, 808464745, 1627993400, 828991846, 909652016, 1768317193, 808464745, 1627993912, 828991846, 943206448, 1768317193,
- 808464745, 1627994424, 828991846, 809054256, 1768317193, 808464745, 1627992377, 828991846, 842608688, 1768317193, 808464745, 1627992889, 828991846, 876163120, 1768317193, 808464745, 1627993401,
- 828991846, 909717552, 1768317193, 808464745, 1963407161, 875587950, 1627992117, 828991846, 825700400, 1768317193, 808464745, 1627994425, 828991846, 808464688, 1768317193, 825241961, 1627992368,
- 828991846, 842019120, 1768317193, 825241961, 1627992880, 828991846, 875573552, 1768317193, 825241961, 1627993392, 828991846, 909127984, 1768317193, 825241961, 1627993904, 828991846, 942682416,
- 1768317193, 825241961, 1963407664, 875587950, 1627997237, 828991846, 808530224, 1768317193, 825241961, 1963406137, 875587950, 1963405878, 875587950, 1963406134, 875587950, 1963405879, 875587950,
- 1963406135, 875587950, 1963406391, 875587950, 1627993399, 828991846, 808792112, 1768317193, 808464745, 1963407417, 875587950, 1963405881, 875587950, 1963406137, 875587950, 1963406905, 875587950,
- 1963407161, 875587950, 1963407417, 875587950, 1963407673, 875587950, 1963409721, 875587950, 1963409977, 875587950, 1963410233, 875587950, 1963410489, 875587950, 1963405377, 875587950, 1963405633,
- 875587950, 1963405889, 875587950, 1963406145, 875587950, 1963409729, 875587950, 1963409985, 875587950, 1963410753, 875587950, 1963411009, 875587950, 1963405378, 875587950, 1963405634, 875587950,
- 1963405890, 875587950, 1963406146, 875587950, 1963406914, 875587950, 1963407170, 875587950, 1963407426, 875587950, 1963407682, 875587950, 1963409730, 875587950, 1963409986, 875587950, 1963405379,
- 875587950, 1963409987, 875587950, 1963410243, 875587950, 1963411011, 875587950, 1627994180, 828991846, 909391920, 1768846599, 843396144, 1768846599, 860173360, 1768846599, 944059440, 1768846599,
- 960836656, 1768846599, 1162163248, 1768846599, 1178940464, 1919375110, 107312737, 1634887543, 1460036982, 1953850209, 1635190373, 1702131043, 1768183561, 1936028261, 1997108073, 1919248740,
- 1936290661, 1919375622, 107312737, 1634887545, 1963418998, 808610158, 1627992624, 812214630, 942682672, 1684960525, 1668510309, 1684370031, 1896705122, 1702129525, 1702258034, 1684370290,
- 1852402950, 107312245, 1868785011, 1695114350, 1634493304, 1818387565, 1768846599, 1160982578, 1919253004, 1886745455, 1869181541, 1868958834, 1970500213, 1769104752, 1712091759, 1936029289,
- 1919250549, 192049001, 1937271155, 1919250549, 225603433, 1702258035, 1886745454, 1869181541, 1768230258, 1937008743, 1919250549, 208826217, 1701734766, 1701868915, 1919904114, 1970499081,
- 1769104752, 1812230767, 107049577, 1702061424, 1157914996, 124744309, 845770357, 122044720, 845770357, 155468848, 1768515169, 875704630, 1853163320, 808530537, 1716062278, 1953194354, 1963422325,
- 825387374, 1627992625, 912877926, 959984177, 1768317193, 858863209, 1997222453, 1919248741, 1634890867, 1376285555, 1801548390, 124941684, 845770357, 121975089, 845770357, 120599089, 845770357,
- 120992305, 845770357, 121123377, 845770357, 155464241, 1769239397, 1702125933, 1853163364, 842084969, 1818297670, 124285029, 845770357, 120992561, 845770357, 154612529, 1701146223, 1952999273,
- 1752435816, 1701143922, 1952999273, 1712026472, 1701148265, 1952999273, 1930195816, 1852143205, 1751607653, 158558324, 1869771361, 1717922935, 1918961524, 1970761586, 1918962288, 1920429938,
- 1952999273, 1920098569, 1868855151, 1628008055, 2003792498, 1752461154, 1920098569, 1886746479, 1963421284, 825387374, 1963406905, 825387374, 1963407161, 825387374, 1963407417, 825387374,
- 1628191033, 2003792498, 1852076149, 241529698, 1920098659, 1701273961, 1970562418, 1963421298, 825387374, 1963406403, 825387374, 1628190275, 2003792498, 1819042404, 175400549, 1869771361,
- 1818387575, 1628270709, 2003792498, 1919705700, 1952999273, 1920098572, 1650751343, 2003788908, 1918962798, 1685548914, 1868721250, 1963419764, 825387374, 1963537732, 1702259054, 1818325874,
- 1769497867, 1852142707, 1818323316, 1886217480, 1702066548, 1919354996, 1701405793, 1694987374, 1701668204, 1846178926, 1818588271, 1852140901, 1970473076, 1752459363, 1963422817, 842164590,
- 1963410480, 842164590, 1963406129, 842164590, 1628190001, 1919251571, 1835758441, 124286049, 845770357, 205074738, 1886351984, 1769239151, 1818324591, 1953656586, 1869049704, 90988910, 1818717793,
- 1853163365, 842150505, 1853163315, 842150505, 1853163317, 842150505, 1853163319, 842150505, 1852378168, 1936876916, 1769235301, 1963290223, 1852795246, 1768846599, 1160917554, 1701344265,
- 1868981618, 1963418994, 842164590, 1963406643, 842164590, 1661548339, 1919381103, 1953391989, 1970365707, 1818326633, 1701015141, 1768846599, 842412594, 1768846599, 1094070834, 1768846599,
- 1110848050, 1869770764, 1936876912, 1702060661, 1919946356, 1919250543, 1701868915, 1952805746, 1953459721, 1935832435, 1963422821, 842164590, 1913402680, 1701602917, 1651864440, 242509171,
- 1818649970, 1970501733, 1936876912, 1963422821, 842164590, 1963406649, 842164590, 1661875769, 1818456681, 1819635045, 1819306356, 1853163385, 959591017, 1853163320, 959591017, 1853163321,
- 1093808745, 1853163314, 1093808745, 1853163315, 1093808745, 1701842228, 1852141682, 1969449316, 124936556, 845770357, 88228402, 1937076072, 1701973349, 1735355510, 1818321769, 175402862,
- 1702129257, 1818325607, 1762291828, 1734702190, 1651270002, 1851853172, 1818586215, 175400549, 1818717793, 1734963813, 1393063016, 808464710, 137375792, 825312851, 808464432, 809915144, 808464433,
- 1179846704, 808465200, 1393045552, 808595526, 137375792, 875578963, 808464432, 809915144, 808464440, 1179846704, 808466736, 1393045552, 808857670, 137375792, 925910611, 808464432, 809915144,
- 808464437, 1179846704, 808465204, 1393045552, 808727110, 137375792, 825574995, 808464432, 893801224, 808464434, 1179846704, 808466739, 1393045552, 808596038, 137375792, 825378387, 808464432,
- 843469576, 808464437, 1179846704, 808464437, 1393045552, 809055302, 137375792, 942884435, 808464432, 843469576, 808464440, 1179846704, 808466226, 1393045552, 808858182, 137375792, 909330003,
- 808464432, 860246792, 808464439, 1179846704, 808464948, 1393045552, 809054534, 137375792, 808601171, 808464432, 843469576, 808464435, 1179846704, 808466228, 1393045552, 808989766, 137375792,
- 825509459, 808464432, 877024008, 808464437, 1179846704, 808465972, 1393045552, 808465478, 137375792, 875906643, 808464432, 893801224, 808464435, 1179846704, 808465460, 1963405360, 892496238,
- 1963410486, 892496238, 1963410742, 892496238, 1963410998, 892496238, 1963405367, 1869374064, 1678207843, 1869374062, 1644522339, 1801678700, 1650879495, 1801678700, 1651798535, 1801678700,
- 1937009671, 1701077352, 1634235141, 1678206308, 1634235243, 1711891812, 1701604457, 2020565604, 1768846599, 826357042, 942753798, 104018997, 892875080, 1711943989, 1701604457, 1667592804,
- 1920206708, 1969709417, 1853163376, 1110782569, 1853163317, 1110782569, 1920206649, 1919377769, 1920206708, 1684496745, 1853163374, 1110782569, 1853163334, 1127559785, 1920206643, 1818714473,
- 1853163366, 1127559785, 1853163318, 1127559785, 1768097335, 1701602162, 942753798, 154350389, 1651928681, 1701604469, 1852377460, 1919509366, 174419043, 1852141679, 1819047266, 1929999461,
- 1701603693, 1701011814, 1986947340, 1818848627, 1667327589, 1970471781, 1701185134, 1701601645, 1818324228, 1886586213, 73753697, 1651862627, 1634035717, 1678210162, 1869439337, 1829463150,
- 1667855221, 1869507681, 1829660020, 1667855221, 1869507681, 1650746740, 1853163372, 825242473, 1853163329, 825242473, 1853163330, 1111901545, 1853163334, 1128678761, 1853163312, 1128678761,
- 1853163313, 1128678761, 1853163314, 1128678761, 1853163315, 1128678761, 1853163316, 1128678761, 1853163317, 1128678761, 1853163318, 1128678761, 1853163319, 1128678761, 1853163320, 1128678761,
- 1853163321, 1128678761, 1853163329, 1128678761, 1853163330, 1128678761, 1853163331, 1128678761, 1853163332, 1128678761, 1853163333, 1128678761, 1853163334, 1145455977, 1853163312, 1145455977,
- 1853163313, 1145455977, 1853163314, 1145455977, 1853163315, 1145455977, 1853163316, 1145455977, 1853163317, 1145455977, 1853163318, 1145455977, 1853163319, 1145455977, 1853163320, 1145455977,
- 1853163321, 1145455977, 1853163329, 1145455977, 1853163330, 1145455977, 1853163331, 1145455977, 1853163332, 1145455977, 1853163333, 1145455977, 1853163334, 1162233193, 1853163312, 1162233193,
- 1853163313, 1162233193, 1853163314, 1162233193, 1853163315, 1162233193, 1853163316, 1162233193, 1853163317, 1162233193, 1853163318, 1162233193, 1853163319, 1162233193, 1853163320, 1162233193,
- 1853163321, 1162233193, 1853163329, 1162233193, 1853163330, 1162233193, 1853163331, 1179010409, 1853163329, 1179010409, 1853163330, 1179010409, 1853163331, 1179010409, 1853163332, 1179010409,
- 1853163333, 1179010409, 1717961286, 1768318467, 1818650115, 1919253001, 1852780143, 1862823285, 1865311598, 141391214, 779057012, 1836412527, 1919448074, 1865311589, 158168430, 1920298854,
- 1970171694, 1768294765, 1865311606, 141391214, 779643251, 1836412527, 1986360074, 1865313893, 174945646, 1751607653, 1852780148, 1846111605, 778399337, 1836412527, 1932419332, 778175587,
- 1661231987, 73626414, 1668492900, 1932420356, 778437731, 1728340851, 73626414, 1668492904, 1932421380, 778699875, 1795449715, 73626414, 1668492908, 1932422404, 778962019, 1862558579, 73626414,
- 1668492912, 1932423428, 779224163, 1929667443, 73626414, 1668492916, 1932424452, 779486307, 1996776307, 73626414, 1668492920, 1932425476, 779748451, 1628005235, 1986097767, 1668492901, 1667326217,
- 778400885, 1628332915, 1668442467, 1818652021, 1932425317, 1952516451, 1701080169, 207844142, 1701405793, 1769170290, 1668492915, 1769103624, 1932420974, 1667435363, 1818846309, 1932419436,
- 1734674787, 1702257010, 157512494, 1969447269, 1932420468, 1667567203, 1969451625, 1701602925, 1668492920, 1768187148, 1936028261, 1932424041, 1734936931, 1702257010, 157512494, 1969447273,
- 1932420468, 1667829347, 1969451625, 1701602925, 1668492920, 1768188172, 1936028261, 1932424041, 1953368419, 1701080169, 157512494, 1634887535, 1932420470, 1634666851, 1702131043, 241398574,
- 1919509359, 1718449507, 779642220, 1862886259, 1684826484, 1668492901, 1768189708, 1936028261, 1932424041, 1936656739, 1752392044, 157512494, 1634887541, 1932420470, 1635060067, 1702131043,
- 241398574, 1919509365, 1718449507, 779642220, 1963746163, 1919248740, 1936290661, 157512494, 1969447289, 1932420468, 1835076195, 1869767521, 1668492910, 1919049993, 778401381, 1628070771,
- 1852794735, 1932421989, 1633880419, 1702131043, 241398574, 1919509347, 1718449507, 779642220, 1661821811, 1635020644, 1852138339, 1668492916, 1633903369, 778989426, 1678336883, 1869767011,
- 1668492910, 1634559242, 1852797539, 157512494, 1701995109, 1932420470, 1684344163, 1667331183, 1953391971, 174289710, 1869049701, 778790254, 1695114099, 1869767011, 1668492910, 1768122126,
- 1836409714, 2019912806, 157512494, 1701995111, 1932420470, 1684475235, 1667331183, 1953391971, 241398574, 1919509352, 1718449507, 779642220, 1762222963, 1684826484, 1668492901, 1634560266,
- 1852797539, 157512494, 1701995113, 1932420470, 1869154915, 1701736295, 1668492907, 1768122894, 1836409714, 2019912806, 258175790, 1836016491, 1667326317, 1953391971, 157512494, 1969447276,
- 1932420468, 1668026211, 1634561391, 1701012321, 1932424302, 1668024675, 1852797537, 157512494, 1969447278, 1932420468, 1668157283, 1634561391, 1701012321, 1932424302, 1668155747, 1852797537,
- 174289710, 1667329391, 778989426, 1862886259, 1986359906, 1668492901, 1969778448, 1918986094, 1634495861, 1932424309, 1634863459, 1702131043, 258175790, 1836016498, 1667326317, 1953391971,
- 157512494, 1918985074, 1932422767, 1634928995, 1702131043, 241398574, 1919509363, 1718449507, 779642220, 1930126195, 1768187235, 778136684, 1929995123, 1869767011, 1668492910, 1868788751,
- 1633774957, 1852138339, 1668492916, 1633907721, 778989426, 1963549555, 1684826484, 1668492901, 1634563338, 1852797539, 157512494, 1701995125, 1932420470, 1920272483, 778530409, 1964008307,
- 1735292264, 1836413537, 1953849708, 174289710, 1869049717, 778790254, 1997431667, 1668442467, 1818652021, 1932425317, 1668877923, 1969451625, 1701602925, 1668492920, 1768192268, 1936028261,
- 1932424041, 1635387747, 1702131043, 224621358, 1953457274, 1701012321, 1932424302, 1668942179, 1852797537, 224621358, 1852404321, 1969447271, 1932420468, 1936658019, 1752392044, 1953850209,
- 1668492901, 1868788495, 1633774957, 1852138339, 1668492916, 1768846602, 1110520368, 90403630, 1932421737, 1667500387, 1952542578, 90403630, 1932420449, 1952777827, 1668492904, 778399493,
- 1812554611, 1935764595, 1668492904, 1919383305, 778401377, 1997103987, 1953850209, 1668492901, 1768191756, 1936028261, 1932424041, 1735985507, 1702257010, 140735278, 1919903860, 1668492910,
- 1868785423, 1633774957, 1852138339, 1668492916, 1633839111, 1668492914, 1868852231, 1668492916, 1633842183, 1668492914, 1634033930, 1702131043, 191066926, 1819570020, 1769173861, 140735278,
- 1920216681, 1668492907, 1919248141, 1684955501, 779316322, 2047435635, 779055717, 1936092777, 1701736200, 1718511918, 2004093043, 1852386927, 1946841958, 1701147240, 1718511918, 1868958067,
- 1764651637, 158557806, 1702259046, 1718511918, 1769146483, 1852386936, 1930064742, 1852143205, 1718511918, 1768229491, 779380839, 1936092777, 1852403209, 1852386917, 29542, 16777216, 0, 5339865, 0,
- 2190046163, 0, 1306662618, 256, 3072, 1509970432, 184549888, 83886336, 100663552, 33555968, 2063599360, 2080375040, 33586688, 1174568704, 1191313664, 33572610, 1862420482, 1879179520, 33583874,
- 1359180802, 1375928576, 33576451, 3942864643, 67109120, 33554432, 16777216, 16777216, 0, 256, 1476397568, 67140096, 1414284868, 2036537856, 671116402, 1801810535, 1634481152, 1073770100, 1024,
- 4294901760, 512, 67109120, 0, 16842751, 67109120, 0, 16842751, 67109120, 0, 33619967, 16777216, 1701511680, 234909298, 1702521203, 5120, 256, 1024, 30720, 0, 16777216, 33555456, 33554432,
- 1578699264, 1142423808, 1024, 369198592, 1442922497, 1778476033, 2852234241, 3993094145, 167966721, 1375875074, 1443038211, 3053678595, 3657682947, 604251140, 604251140, 604251140, 3489869316,
- 3993096195, 1208233476, 1610897924, 1812227588, 3355751940, 1006967301, 1745179141, 4026902021, 403109381, 1409689094, 3087427078, 1275581958, 3087500807, 4161267207, 1678259720, 3221776904,
- 67750408, 1544096265, 3490286089, 1879712266, 3020592650, 4161459722, 1410072074, 1812686347, 3020659211, 3423320587, 845323, 2953613836, 336449036, 672050701, 2685297166, 1276069391, 3893334543,
- 1880108560, 403820048, 2417153553, 135514642, 1142105619, 1980968464, 2920516627, 169136147, 1309944852, 2048160788, 3323240468, 974455829, 3725955093, 840307734, 1343631894, 2618716694,
- 3558260246, 471332374, 3893840407, 270010904, 167777816, 3690930688, 4009703936, 3690954752, 3690955008, 3690955264, 3690955520, 3690955776, 3690956032, 4009729280, 4009703425, 2936079616,
- 3238125055, 3254894847, 3774983679, 3791718144, 50392831, 4143936000, 4009718528, 3741284608, 301990144, 234932735, 3388932352, 2969527809, 2986306817, 3237966081, 2885644801, 2986308353,
- 2331997441, 2952757249, 2952759809, 3640627201, 3523187201, 3472855809, 3556743681, 3070180610, 2348941568, 117494527, 3875497473, 3875499265, 3858723585, 3724509185, 4060053761, 3724511745,
- 3640627457, 1828784384, 1929492735, 2030151935, 2046943999, 2348936959, 2449595903, 2516703743, 2567037951, 2583813631, 33610495, 3690922240, 3070180610, 1593902080, 2046941695, 2181162239,
- 2516706559, 151053567, 3036634881, 3623838721, 3187632385, 4143935745, 3523179009, 3355407361, 3741283585, 3556739073, 3237972994, 1593903104, 1828818431, 2046945279, 2114050559, 2181156095,
- 2348931583, 2567031807, 2600586239, 738248959, 3439304704, 3925844480, 3439305472, 3439305728, 3539969280, 3539970048, 3539970560, 3439307520, 44032, 3841961216, 44544, 3154096640, 3154097152,
- 3539973632, 3170875648, 3556752384, 3472826625, 3254738689, 3254741249, 3774835969, 83915009, 167801345, 3640619777, 2852092161, 3070196225, 2701098497, 2734653953, 3841950465, 2701102081,
- 2701102593, 2701103105, 2516554241, 2818545921, 3758070273, 2784992001, 3623846403, 3623846915, 3841950979, 34307, 34819, 3154086659, 3539963651, 3372192003, 3372192771, 2684359680, 2717957119,
- 2734734335, 2751511551, 2768294655, 2818620415, 2868951551, 2919283199, 2986403071, 3053500927, 2063838719, 2097397759, 2114166783, 2130943999, 2147729407, 2181275647, 2231610879, 2281949439,
- 2399338496, 2483269119, 100714751, 3154093056, 3154097664, 3674192896, 3372187395, 3154087683, 3674182659, 16781568, 218164991, 234918399, 251700479, 453022207, 469808895, 3053500159, 1593949183,
- 1711389439, 1828828671, 1895937535, 1929447168, 2365698047, 2567023103, 2348984319, 2399384063, 2483271423, 100710655, 3942612993, 3623847937, 4026501633, 4177497345, 4026503681, 4093613057,
- 218104320, 251695615, 302027263, 3305068033, 3271514369, 3271514625, 3388956417, 3456067841, 3305074945, 2482991617, 4160721153, 3388976897, 3674192385, 3305095425, 3388981761, 3439314433,
- 3355430401, 3271547393, 4211073281, 4160741889, 4261406209, 16777728, 1023592959, 100710143, 4009689344, 2449411328, 2768178688, 2449411840, 3070171904, 3070172160, 2147550208, 2315369215,
- 2416031231, 2466373375, 16831743, 3825175041, 2281767168, 16828415, 2768211969, 218108416, 251716863, 805367039, 889241087, 973127935, 2063641855, 1711395071, 1828828671, 1895937791, 1912719103,
- 1929490687, 1963047423, 2147586047, 2315369215, 2416031231, 2449595903, 2466371583, 2583811071, 67164415, 3422495232, 3456065281, 3573516289, 3539962882, 218108928, 251688959, 570458111, 805346559,
- 973136895, 1342177792, 1593941503, 1761713919, 1828822783, 2030163967, 2046926335, 2114039807, 2181144063, 2265033471, 2315374847, 2348933631, 2382470143, 2449573631, 2583810559, 2348995327,
- 134256383, 4076810240, 3875497473, 3875499265, 3909055233, 3825172481, 4143939841, 3825175041, 3724513537, 805307648, 1342236671, 1828845567, 2181160447, 2348938751, 83948799, 2801738240,
- 3271506432, 2919194369, 3003083009, 3305075201, 218107648, 251718143, 453046783, 469823999, 805366527, 1342226687, 1828840191, 1929493503, 2030153983, 2046944767, 2348937727, 2449596671,
- 2516704511, 2567038719, 2583814399, 302046719, 3841920256, 3976138496, 3271503872, 3237950720, 2902407680, 3724496896, 3506404096, 3070191105, 3070192897, 3338629377, 2969530881, 3774839041,
- 3976165889, 3976167937, 3690957825, 3623850497, 3690961153, 2566864130, 2181103872, 134277887, 3674153472, 3892269056, 3724500737, 3909057025, 3909059073, 3909061633, 3909064193, 3909064961,
- 2030109440, 2114054911, 2583816959, 184605439, 2818515456, 3254729216, 2919194369, 3439289345, 3003083009, 3925831937, 3288297985, 3204412417, 3556734209, 3372189697, 3086978050, 1342178304,
- 2046945535, 2281826559, 2348878336, 335603199, 2013203712, 2264862464, 3774814976, 2315198976, 4127144448, 3539947520, 2466209537, 3992937985, 2550098177, 3976162561, 100692225, 4160713217,
- 4143936257, 3741284865, 3539959297, 3741286913, 3506408449, 3506411777, 3472857857, 2701102082, 805308160, 1342239999, 1711405055, 1828841727, 2348935423, 2432824575, 2483144959, 486596607,
- 2650737920, 2784956160, 3539933952, 3338607616, 3254723072, 3976146944, 83899648, 151009792, 3019853824, 3288300288, 3305070337, 3305072897, 3774835969, 100692225, 184578561, 3623842561,
- 3053418753, 3070196225, 3053420033, 3070198273, 3875504897, 3053423617, 2751434241, 3053424641, 3724513793, 3053426945, 3741293057, 3053427457, 117456130, 218107392, 251696639, 570465791,
- 805353983, 889242111, 2063598080, 1593942527, 1711389951, 1828828927, 1895937791, 1929446144, 2365699839, 2567024639, 2348983295, 201372671, 2919178752, 3758044416, 2986293760, 3003080449,
- 3103746305, 3841945857, 3019862529, 3523184641, 4278160385, 4261385729, 4278163713, 4261387009, 805309184, 1342230015, 1711397887, 1828831999, 2030158591, 2046942975, 2114054911, 2348932863,
- 2432817663, 2516694015, 2567036927, 67164671, 2298421760, 3724488704, 2331991809, 3539954945, 218107648, 251718143, 453048063, 469827583, 1342239743, 2063659007, 2147607295, 2164330496, 2181165055,
- 2197946367, 2231496191, 2332162303, 2348936703, 2416045823, 2516709119, 184611583, 3909032960, 4026486784, 4009721345, 3992944897, 4076831489, 4177495297, 33589249, 3992947713, 117477633,
- 3992949505, 3976173057, 2164326656, 352382719, 4026466816, 3925806336, 4143910656, 4294908672, 4093582336, 4026486784, 3808393984, 268468225, 4026499329, 4294935041, 3992945409, 4177495297,
- 3992947457, 4009724929, 4244606209, 4009725953, 4143943937, 3892286209, 67147777, 4009728257, 83925505, 2147549696, 2281827839, 234938879, 3875491840, 3875502337, 4093606401, 3875503617,
- 3858727169, 4093608449, 3120531457, 4211051265, 3841952769, 3741289985, 3808400897, 3841956097, 453024257, 3808402177, 2315321600, 335606015, 4026486784, 4009720065, 4060051969, 4009721345,
- 3992944897, 4060054017, 4076831489, 4177495297, 33589249, 3875506945, 3992947713, 3992948737, 117477633, 50369025, 3992949505, 201364481, 3976173057, 3992951041, 83925505, 3976174337, 1342180096,
- 2030168831, 2046946303, 2114059007, 2181164031, 2348940031, 2449598975, 2516706047, 2567040511, 2583816703, 2600592383, 285273599, 3959360768, 4194242304, 4143927296, 3523181312, 4160715009,
- 67140097, 4160716289, 4127162625, 67142145, 4043277569, 4110388225, 4127166465, 4026503937, 4177499649, 4110391553, 4278163969, 4177500929, 218108928, 251719679, 1342240767, 2063656959, 2030165503,
- 2046946303, 2147612671, 2181153279, 2315384831, 2332146943, 2348934655, 2416043775, 2432821503, 2449588479, 2466374143, 2516705023, 2567039999, 2583815935, 2600592383, 1023601663, 318813951,
- 2701069568, 3019837184, 4244577024, 3992919040, 3959377920, 83917568, 3959388417, 4177492481, 3959389697, 3942613249, 3137308673, 3925838849, 3942617089, 3892286209, 3892286977, 3925842177,
- 469801473, 3892288257, 83901698, 1342179584, 2030167551, 2046945023, 2114057727, 2181162751, 2348938751, 2567038207, 2583815423, 2600591103, 117500159, 4294934017, 3992944641, 3690956801,
- 4076833281, 4194274561, 4026503681, 4143944705, 1342179328, 2030167039, 2281825279, 2348940031, 2567037439, 2583814655, 2600536320, 1023599103, 134280703, 3741254144, 3825171200, 4026499073,
- 3439298561, 4110387713, 4227828993, 50368769, 4177499137, 2281767168, 352374015, 3338603776, 3590262528, 3992918784, 3690929152, 3892269056, 4076829440, 3892279553, 4060051969, 50363393,
- 3892280833, 4026501121, 3858729985, 3523186177, 3875508225, 218140929, 3841954561, 3825178113, 3858733313, 151034369, 3825179393, 4110368002, 2147550208, 2281830911, 2432814335, 2483094784,
- 16842495, 4294938881, 1342180096, 2030162943, 2046940415, 2114052607, 2181158143, 2231493119, 2348940287, 2516701951, 2567032831, 2583810815, 2600536320, 100716543, 4110385153, 3506407425,
- 4177496577, 4227828993, 50368769, 4227830785, 2315321600, 67173887, 3992944641, 4076833281, 4194274561, 4143944705, 2147550720, 2281830655, 2315374079, 2365717759, 2432827135, 2483094784,
- 100728575, 4043276289, 3506407425, 4110387713, 4211051777, 16814337, 4177499137, 2734760960, 2818692607, 2902574847, 3003188480, 3120682751, 3171010303, 3221346303, 3271677695, 3322006527,
- 3472950016, 3506547711, 3540112127, 3556884735, 3573652735, 3590444031, 3607214335, 3640775423, 3657551359, 3674323199, 3691108095, 3707883007, 3724647423, 3741437439, 3758214399, 3774978815,
- 3791771647, 3808552703, 3825314047, 3842100991, 3858879231, 3909212671, 3976321791, 3993099263, 4076971263, 4160854783, 4244748543, 117499391, 3372198401, 3472862465, 3204432129, 3388981761,
- 3355428353, 3137325313, 83945729, 2852194048, 2902575103, 3238121983, 3254894079, 3322006783, 3372336639, 3909203199, 285213440, 3086983937, 4127176193, 3237985537, 3103768577, 2969551617,
- 16830209, 3875524609, 3841971201, 4261402113, 3858750721, 3875528705, 3774865665, 3087000065, 4110410497, 2382358017, 3875533569, 3439328513, 2734761472, 2818687231, 2852247807, 2902528256,
- 2936084224, 3003216383, 3053578495, 3120689151, 3171014911, 3221340927, 3238117631, 3271627008, 3322004735, 3456177408, 3473000703, 3489770751, 3540108543, 3556883455, 3573654527, 3590442239,
- 3607213567, 3640774143, 3657550591, 3674321919, 3691106559, 3707882239, 3724648959, 3741436671, 3758214143, 3774980351, 3808547583, 3825314815, 3842100735, 3858877951, 3976320767, 3993097215,
- 4076971007, 4160856319, 503362559, 3841920256, 3825143296, 3976138496, 4043250432, 3909032960, 3506404096, 2986320641, 184592385, 3741297153, 4043287809, 3959404033, 184596993, 3070213377,
- 2986328065, 3338649857, 3959407105, 3120546561, 2231354881, 2667563265, 4093629953, 285268481, 3690978561, 3707756545, 3607093505, 3053445633, 3942638337, 2768233985, 3657427201, 285276161,
- 2835348737, 2852195840, 2902583551, 2936139519, 3036794367, 3238125311, 3254905087, 3322014207, 3338792447, 3573670911, 3774995199, 3791780095, 3909212159, 4160877823, 4244759551, 251716351,
- 3942623745, 3758075137, 3456085761, 3523196161, 3942629633, 3590308353, 3657418241, 3808413441, 3690976513, 4177518849, 4009746945, 3825198593, 4110412033, 3825203201, 3976199425, 218114304,
- 234911743, 251699967, 453017599, 469810431, 2734796543, 2818692607, 2902574847, 3003188480, 3120682751, 3171010303, 3221346303, 3271677695, 3322006527, 3472950016, 3506547711, 3540112127,
- 3556884735, 3573652735, 3590444031, 3607214335, 3640775423, 3657551359, 3674323199, 3691108095, 3707883007, 3724647423, 3741437439, 3758214399, 3774978815, 3791771647, 3808552703, 3825314047,
- 3842100991, 3858879231, 3909212671, 3976321791, 3993099263, 4076971263, 4160854783, 4244748543, 16836095, 3909075713, 2734756096, 3053564415, 3171020543, 3221338879, 3271669247, 3472995583,
- 3489790975, 3556892671, 3590446847, 3707893503, 3758219263, 3774996735, 3791772159, 3808538879, 3858886143, 4076965887, 4244758783, 352371455, 3875514369, 4043287041, 3690966273, 3506417409,
- 3640636161, 3573527809, 3707745793, 3875518977, 4043292929, 3539976705, 3506422785, 3590309377, 3590311425, 3875527169, 3976192257, 4194296321, 3875529729, 4043302401, 3758091777, 3875534849,
- 4143971585, 2734756096, 3053564671, 3171021055, 3221339135, 3271668735, 3472994559, 3489791231, 3556893183, 3590447103, 3707894015, 3758219519, 3774996991, 3791772671, 3808539391, 3858886655,
- 4076964095, 4244759039, 268486655, 3237980161, 3925846529, 3305090305, 2919214849, 3221205761, 3070211329, 3489641985, 3237984769, 3925852417, 3137323521, 3204432897, 3472868865, 3825191169,
- 3321875969, 3724532225, 3724539905, 218109696, 234911743, 251712767, 453019391, 469819647, 2818691583, 2936124671, 3003224831, 3120679167, 3221337343, 3322014975, 3456233983, 3473005311,
- 3523338239, 3540123135, 3556896511, 3590443775, 3657558271, 3707889407, 3758215423, 3808546303, 4076985343, 4160867839, 302049023, 67151873, 4294945281, 83930369, 4194283265, 4244616449,
- 4060067329, 67156481, 3590307073, 3573530625, 4294951169, 3506422529, 4211065857, 4278177281, 3674202369, 3925860865, 3707758081, 134281217, 3909090561, 218115840, 234921471, 251706879, 453027327,
- 469816063, 2063648511, 2734801919, 2818694911, 2852244991, 2902525440, 2936081408, 3003237631, 3053575679, 3120687615, 3171012095, 3221348607, 3238125567, 3254846976, 3271624448, 3456227327,
- 3473004031, 3506550783, 3523337983, 3540113919, 3556887807, 3573659135, 3590447103, 3607217407, 3640778495, 3657554431, 3674327807, 3691111167, 3707886079, 3724654079, 3741440511, 3758217471,
- 3774984447, 3791774719, 3808555775, 3825318655, 3842104063, 3858882303, 3909215743, 3993102079, 4076980991, 4160860415, 4244753151, 771813887, 1912540416, 3137277440, 2180976384, 3204389632,
- 2952731648, 2969533184, 3120538369, 3539970049, 184592897, 2063576833, 3791631105, 3892295169, 3539974657, 3154099457, 3137323009, 184598785, 218153473, 3204432641, 251708929, 3237989889,
- 2801782529, 3187658753, 3053441793, 2650788865, 3338654977, 2952779265, 3355432705, 3305101569, 2919225857, 3405765377, 3305102337, 2650791169, 3305102849, 3321880321, 2650791937, 3439321345,
- 3657425409, 2835342081, 3355436033, 3355436289, 3506431489, 3439324417, 2650795521, 2650796801, 2919233537, 3623877889, 2818641408, 2902571263, 2936124927, 3003233023, 3036791807, 3120674047,
- 3254892799, 3288447487, 3322003199, 3372343295, 3456230143, 3540110335, 3657561087, 4160875519, 251718655, 3187647233, 3925849601, 3271539969, 3187654657, 3187655425, 4127182593, 3640644609,
- 4060075521, 3657424129, 3674202113, 3573539073, 2936005121, 3909083905, 2751456769, 3674206977, 2852194048, 2902572543, 3238119679, 3254891519, 3322004479, 3372333311, 3909200639, 117504255,
- 3187649025, 3355421953, 3019882753, 3271541249, 3103770113, 2852112641, 4177520897, 2818640896, 2852243199, 2902582271, 2936126207, 3003232255, 3120676863, 3238119167, 3254903807, 3322001919,
- 3372338431, 3456228863, 4160865791, 83941887, 4026523905, 3909083649, 3909084673, 335607809, 3825204481, 3573614592, 3590448127, 3774996479, 3791717120, 3825331711, 3858887679, 3993104127,
- 4244759551, 134277375, 4194292993, 3925857793, 4294959361, 4261405185, 4261405697, 4261406209, 4043304449, 4177526017, 218107392, 234921727, 251723263, 453027583, 469824511, 3540116735, 3657563903,
- 3707893503, 3758226687, 3808557823, 3993043200, 4076990207, 4160879359, 4244764415, 134224384, 4294956289, 3909080577, 33610241, 4143964673, 4194296833, 4143965697, 4227853825, 4060085505,
- 3489728512, 3556898303, 3590449407, 3707895551, 3758221823, 3808553471, 4076992255, 4244761087, 150998528, 4143961345, 4244625921, 4278182145, 4160741889, 4194296833, 4160742913, 4026527233,
- 4244633601, 4076862721, 4160815360, 150998784, 151047937, 4110405633, 4110406657, 50386433, 4110408961, 4127186945, 4294959873, 4127191809, 50396417, 3573614848, 3590448127, 3657555967, 3775000063,
- 3791717120, 3825331711, 3909219327, 4160880383, 4244762111, 251717887, 3288272128, 318770688, 3590262528, 50338560, 4261354496, 3741308161, 3825194497, 3623868929, 83943681, 4060078593, 4143965185,
- 4076856833, 3841977857, 4194300673, 3976199425, 2902527232, 3473007615, 3573675775, 3590391552, 3657560319, 3707832832, 3775000319, 3791717632, 3808497664, 3825333503, 3858826240, 3993046016,
- 4160815616, 352324096, 2952727808, 4278128128, 3086946048, 4177468160, 3959364608, 4211047168, 4076850945, 4227846913, 4261401601, 4194293249, 4093630977, 4261403905, 4227850241, 302047489,
- 469819905, 33612545, 385934849, 4009750017, 4227855105, 4093638657, 385940737, 218108672, 234923263, 251718911, 453030655, 469826303, 2063657471, 3473014015, 3540121087, 3556836352, 3590448895,
- 3657498880, 3707895295, 3758220543, 3774996735, 3808500480, 3858887167, 3993051648, 4076989695, 4160872703, 218168831, 4093628929, 4026520321, 4043298049, 3875526145, 4177517057, 134275329,
- 4194296321, 4227851265, 4194297345, 33614081, 3959418369, 4177524737, 4110417153, 3472951040, 3556836608, 3707890687, 3758222591, 3808554239, 4076993023, 4244761855, 117444352, 50385921, 67166209,
- 3791642881, 3556762113, 3774866945, 3758090497, 3590323457, 3657500672, 3775000063, 3791717120, 3858885375, 3909217023, 3993108223, 4160873727, 4244762111, 167831039, 3909080321, 3841971713,
- 4076853761, 134275329, 4076855809, 4177519617, 4093634049, 33614081, 4076861441, 3992976641, 3540060160, 3657563903, 3707893503, 3758226687, 3808557823, 3993043200, 4076990207, 4160879359,
- 83949311, 3992969473, 3657425409, 3925861889, 3959417089, 3774872833, 3556837376, 3758164224, 3774941696, 3791775999, 3858881023, 3909215999, 4076988159, 4244703744, 151052543, 67161857,
- 4026519553, 4026520577, 4278179329, 4026522881, 4043300865, 4211073793, 4043305729, 4278189313, 3472952064, 3556897023, 3590447871, 3657563391, 3707894015, 3758220031, 3774997247, 3808499200,
- 3858885887, 3993050368, 4076988415, 654369535, 2919211777, 3338643457, 4294945281, 83930369, 3607081729, 3338648065, 2986327297, 2935996417, 4294951169, 2701116161, 50382337, 3204435457,
- 2365574913, 2667565313, 2818560769, 2147472385, 2835338497, 2281690625, 2667566849, 2667567361, 2801785345, 2667567873, 2667568129, 2147474689, 2667568641, 2046811905, 2063589377, 1912594689,
- 2097144321, 2466243329, 2717901825, 2667570433, 2030036481, 1962928385, 2667572481, 2801790465, 2063594241, 2801793025, 3321888001, 3540060160, 3657563391, 3707892991, 3758221055, 3808551679,
- 3993105407, 4076989951, 4160873215, 16839935, 3690937346, 1023541504, 184605695, 3456053248, 2784967168, 3892269056, 3321851137, 2852090369, 3841947905, 3976165889, 3976167937, 3841952769,
- 3657404929, 3841956609, 2248147200, 234881280, 301993728, 587211264, 738207232, 788540672, 822095872, 922760448, 973092864, 1509969920, 2147511040, 2181071104, 2214626048, 2634056960, 3204496640,
- 939589889, 1476482561, 1543592705, 1610702593, 1661034753, 1711367169, 1761699841, 1795254785, 1828809729, 1862364673, 1895919617, 1929474561, 1963029505, 2046916865, 2114026497, 2147581697,
- 2181136641, 2265023233, 2315356161, 2348911361, 2382466305, 2432798721, 2466353665, 2516685825, 2567018497, 2600573441, 2818679297, 2869012737, 2936122625, 2969677825, 3020009985, 3053565185,
- 3171006721, 3221339905, 3254894849, 3288449793, 3405891841, 3439447041, 3489779457, 3523334401, 3573666817, 3623998977, 3707885825, 3758219009, 3791773953, 3825328897, 3942770945, 3976326145,
- 4160877057, 4211210497, 84081921, 1006765570, 2348956930, 2585002496, 1024, 2081478669, 822092800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3690968831,
- 3070202367, 37375, 0, 51711, 0, 0, 0, 3690921984, 0, 0, 3388932096, 0, 3388932096, 0, 0, 0, 0, 51711, 2768226815, 3070207231, 46847, 3070211839, 0, 0, 0, 0, 3690921984, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51711, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3070164992, 0, 0, 0, 3070164992, 0, 2768175104, 0, 0, 0, 0, 0, 0, 0, 42239, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 46847, 3070207231, 42239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3388983807, 0, 0, 0, 0, 3388932096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 42239, 0, 0, 0, 42239, 0, 32767, 0, 0, 0, 0, 0, 3690921984, 2147418112, 0, 0, 0, 0, 4009689088, 0, 0, 0, 0, 0, 0, 3690921984, 3388932096, 3690978303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 3690921984, 56319, 4009735935, 0, 0, 2768175104, 2449450239, 3388932096, 46847, 2768226815, 51711, 0, 3388932096, 3388983807, 2768217343, 3070164992, 0, 0, 3070207743, 42751, 51711,
- 2801729536, 46847, 2801729536, 46847, 3070207743, 3388932096, 0, 0, 0, 3388932096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37375, 0, 0, 2768175104, 32767, 3388932096, 32767,
- 2449459711, 37375, 3388932096, 0, 3388978943, 2449445375, 2147418112, 0, 0, 42239, 0, 51711, 2768175104, 46847, 0, 0, 42239, 2768175104, 0, 0, 0, 2449450239, 0, 2768236287, 3388932096, 2768217343,
- 0, 0, 3388983807, 2768226815, 42239, 42239, 0, 3070164992, 0, 4009689088, 0, 3472871167, 0, 0, 3472818176, 52991, 42239, 0, 0, 2768175104, 42239, 37375, 0, 2768226815, 42239, 0, 0, 3388932096,
- 2768217343, 37375, 42751, 0, 0, 3690921984, 0, 2801729536, 2801772287, 0, 0, 0, 0, 0, 0, 0, 0, 4009689088, 0, 0, 0, 0, 61183, 0, 0, 61183, 0, 4009689088, 56319, 0, 0, 3690921984, 3388932096,
- 3070164992, 3388932096, 0, 51711, 0, 0, 0, 0, 61183, 0, 56319, 0, 0, 0, 0, 0, 0, 3690921984, 0, 0, 0, 0, 0, 0, 61183, 0, 61183, 4009689088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61183, 0, 0, 0, 0, 0, 0,
- 14080, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56319, 0, 51711, 0, 0, 0, 0, 0, 0, 3388932096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3690921984, 0, 3690921984, 0, 0, 0, 0, 0, 0, 0, 56319, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3388932096, 0, 0, 0, 56319, 0, 51711, 51711, 3388932096, 0, 0, 0, 0, 3690921984, 0, 4009689088, 0, 0, 0, 0, 0, 0, 0, 61183, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51711, 0, 61183, 0, 0, 0, 0, 0, 0, 4009689088, 0, 0, 0, 0, 0, 0, 0, 56319, 4009689088, 4009689088, 0, 0, 0, 0, 3388932096, 0, 3070164992, 0, 0, 0, 0, 0, 0, 0,
- 46847, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3690921984, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 4009689088, 0, 4009735935, 4009689088, 0, 61183, 61183, 61183, 61183, 3070164992, 61183, 1241513984, 0, 0, 0, 4177461248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4009689088, 0, 0, 0, 0, 0,
- 4009689088, 0, 61183, 0, 61183, 0, 0, 0, 0, 4177461248, 4009689088, 0, 0, 0, 0, 0, 0, 0, 61183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3690921984, 0, 3388932096, 0, 0,
- 0, 0, 0, 0, 0, 51711, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51711, 0, 56319, 0, 0, 0, 0, 0, 0, 3690921984, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2449408000, 0, 0, 0, 0, 0, 0, 0,
- 37375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42239, 0, 37375, 0, 0, 0, 0, 0, 0, 2449408000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2768175104, 0, 0, 0, 0, 0, 0, 0, 42239, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46847, 0, 42239, 0, 0, 0, 0, 0, 0, 2768175104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4009689088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 51711, 61183, 37375, 0, 0, 0, 0, 0, 4009689088, 2449408000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1879048704, 570434048, 587202816, 33563392, 620766464, 654312192, 67118848, 754986240, 805307648,
- 100675584, 822096128, 855639808, 134230784, 889206016, 905971968, 167785984, 922760960, 939526912, 201340928, 973093376, 1191185664, 268453632, 1392530176, 1459624192, 503338752, 1476417536,
- 2147491840, 16811264, 2415955968, 2449474304, 100701696, 2550175744, 2566915584, 167812096, 2634063104, 3221228800, 16826368, 3254829568, 3288334592, 16827392, 3456159232, 3489661696, 50384896,
- 4177590528, 4211082496, 83950336, 4244700416, 4278191360, 83951360, 16843009, 201393408, 100666369, 234950145, 268502528, 100667393, 335614977, 352389120, 419435777, 369169921, 385943552,
- 419436289, 402724865, 419497984, 419436801, 570499585, 604047616, 151004161, 637609473, 671156480, 167782401, 704719361, 738265600, 167783425, 771829249, 805374464, 167784449, 838939137, 872483328,
- 201339905, 889271553, 906043392, 218117633, 939603969, 1090587904, 16793857, 1157711105, 1224803840, 151013633, 788672258, 805440512, 536883202, 822227202, 838994944, 536883714, 855782146,
- 872549376, 536884226, 889337090, 1006767360, 402668546, 1073889282, 1375934208, 268456451, 1627611395, 1677921792, 251683843, 1711498755, 1778585856, 302017027, 1812163587, 1845695232, 335572483,
- 1862496003, 1879250176, 369127427, 1912828419, 1929583104, 453014275, 1946383363, 1963138048, 486569219, 1979938307, 1996693248, 553678595, 2013493251, 2030248448, 587233539, 2147711747,
- 2315456000, 335579651, 2416151299, 2432898304, 486577155, 2500039939, 2516787968, 234919939, 2634259715, 2902658816, 318811907, 2986586115, 3003323392, 352367875, 3087250947, 3103988224, 453032963,
- 3187916035, 3204652032, 486589443, 3305358595, 3322093824, 587253507, 3406023427, 3422752256, 352373763, 3439578371, 3456310016, 469814787, 3473133315, 3489862144, 251711491, 3523465731,
- 3556970240, 318821379, 3607352579, 3624083712, 587257859, 3691240451, 3707966208, 469818627, 2936013312, 16777472, 218113536, 218107136, 234884608, 251664128, 469765888, 452991744, 469765120,
- 620764160, 570434048, 805306624, 33566720, 889206016, 905970432, 67122688, 922760960, 939525376, 100677632, 973093376, 1107298048, 134234624, 1140868096, 1157630464, 234898688, 1174423040,
- 1191186432, 302008064, 1207977984, 1224741632, 352340224, 1241532928, 1342181120, 419450880, 1358975232, 1375738624, 486560256, 1392530176, 1409294592, 587224064, 1442862592, 1459628032, 704665344,
- 1476417536, 1509960704, 788552192, 2248179712, 2449473792, 33592832, 2550175744, 2566914560, 67148800, 2634063104, 2667579136, 302030592, 2785058816, 2801797120, 167814912, 2868946944, 2885685248,
- 251703040, 3053498880, 3087014144, 419477504, 3154163968, 3170904064, 788577536, 3204497152, 3221237504, 16826368, 3238052096, 3254781952, 16826880, 3271607040, 3288336384, 16827392, 3305161984,
- 3338668032, 167823104, 3372271872, 3405777408, 167824128, 3439381760, 3472886272, 234934016, 3506491648, 3539996160, 268489472, 3573601536, 3607105536, 268490496, 3640711424, 3674214400, 268491520,
- 3707821312, 3741324032, 318824192, 3774931200, 3808432896, 318825216, 3842041088, 3875542272, 352380672, 3909150976, 3942649600, 251718400, 3976260864, 4009758464, 251719424, 4043370752,
- 4076867328, 251720448, 201395201, 218169856, 419433729, 234950145, 251724288, 419434241, 268505089, 285278720, 419434753, 302060033, 318833152, 419435265, 352392449, 385949952, 553654017,
- 419502337, 453058816, 587209473, 486612225, 520168192, 587210497, 553722113, 570499840, 50340353, 604054529, 637600512, 50341377, 671164417, 687932416, 671099137, 704719361, 721486848, 671099649,
- 738274305, 755041280, 671100161, 771829249, 788595712, 671100673, 805384193, 822150144, 671101185, 838939137, 855704576, 671101697, 872494081, 889259520, 738211073, 906049025, 922814208, 788543233,
- 939603969, 1090586368, 16793857, 1124156161, 1140916480, 134235137, 1157711105, 1208025600, 587220993, 1224820993, 788660992, 100675330, 805449730, 822225920, 100675842, 839004674, 855780352,
- 100676354, 872559618, 889334784, 117454082, 906114562, 1023553280, 536886530, 1090666754, 1375936256, 302011907, 1627611395, 1661143296, 184574723, 1694721283, 1728254208, 335570691, 1745053699,
- 1761809920, 402680067, 1862496003, 1896028672, 503345411, 1912828419, 1929585152, 604009219, 1946383363, 1963140864, 687895811, 1979938307, 1996696320, 755005187, 2013493251, 2030251520, 805337347,
- 2147711747, 2164459776, 184582403, 2231599619, 2248347904, 402688259, 2416151299, 2432899584, 687903747, 2500039939, 2516791296, 151033859, 2617481475, 2650999552, 285254147, 2768478979,
- 2785219584, 369141251, 2852366083, 3003324416, 436253955, 3087250947, 3103990272, 604027907, 3187916035, 3204654848, 687916035, 3305358595, 3322096896, 805357315, 3406023427, 3422750976, 436259843,
- 3439578371, 3456312320, 654364163, 3473133315, 3506640896, 151048451, 3540243203, 3573750272, 755029763, 3624130563, 3657641984, 335600131, 3674462979, 3707966976, 654368003, 3724795395, 16779520,
- 570466048, 620765952, 754984704, 822095872, 889205504, 922760704, 973092864, 1392527104, 1476417280, 2164293632, 2197848576, 2231403520, 2449510400, 2483065600, 2516620544, 2566952960, 2600507904,
- 2634062848, 3254829056, 3456156672, 4177580032, 4244699904, 16908032, 234949633, 335613953, 369169665, 402724609, 570497281, 637608961, 704718849, 771828737, 838938625, 889271297, 939603457,
- 1157710081, 788678913, 822226946, 855781890, 889336834, 1073888258, 1627607555, 1711498243, 1812163075, 1862495747, 1912827907, 1946383107, 1979938051, 2013492995, 2063825155, 2097380355,
- 2130935299, 2315485187, 2349042435, 2382597379, 2416152323, 2449707267, 2483262211, 2516817155, 2550372099, 2902695171, 2936253955, 2969808899, 3003363843, 3036918787, 3070473731, 3104028675,
- 3137583619, 3171138563, 3204693507, 3238248451, 3271803395, 3305358339, 3338913283, 3422800643, 3456355587, 3489910531, 3557020163, 3590575363, 3624130307, 3708017667, 256, 570493440, 67169281,
- 1414284868, 2036537856, 939551858, 1801810535, 1634489856, 1946185332, 1024, 4294901760, 2560, 50332160, 83887104, 167774464, 201329408, 67112448, 0, 167837695, 33554432, 67109632, 150996224,
- 184551936, 234884096, 1024, 4294901760, 2560, 50332160, 83887104, 167774464, 201329408, 771755520, 1514211072, 1308631109, 542396995, 1162104320, 1778393173, 541871949, 1330808320, 2248155213,
- 541217363, 1381263872, 1308631115, 4294901760, 3328, 33554688, 67109632, 100664576, 167774464, 201329408, 234884352, 4294901760, 2816, 50332160, 83887104, 150996736, 184551936, 234884096,
- 4294901760, 2816, 50332160, 83887104, 150996480, 184551936, 234884096, 4294901760, 3072, 50332160, 83887104, 134219264, 167774464, 201329408, 251661824, 1953259873, 845372416, 1677747059,
- 1836019300, 1768319488, 1879073134, 1667330662, 1768453632, 2348840051, 1634167148, 1768722944, 2583716199, 1818455916, 1970184192, 2785047149, 1836412527, 1919921152, 2986372708, 1718511987,
- 1836300288, 3187699811, 1936749939, 50176, 33554944, 768, 16777472, 16777216, 2048, 369099008, 150994944, 184551936, 218106880, 251661824, 285216768, 4608, 352321792, 33554432, 335549184, 16777216,
- 5120, 67109120, 16777216, 1792, 150995200, 16777216, 5888, 100663552, 16777216, 0, 83886336, 872421632, 1140866048, 1409305600, 1677745152, 1946184704, 2214624256, 2483063808, 2751503360,
- 3019942912, 3288382464, 3556822016, 3825261568, 4194364416, 256, 3456106752, 256, 3489792256, 256, 436535552, 768, 1711603968, 256, 1946484992, 256, 2047148288, 256, 2651128064, 256, 2785345792,
- 256, 2852454656, 256, 2919563520, 1024, 3053781248, 1024, 3959750912, 1024, 67502336, 1024, 973472000, 1024, 1879441664, 1024, 2785411328, 1024, 3691380992, 1024, 302448896, 1024, 1208418560, 1024,
- 2114388224, 1024, 2550595840, 256, 3121021184, 256, 3188130048, 1536, 3255239680, 101245959, 16789512, 16777216, 33573896, 2147485185, 1644388611, 1677943555, 1711498499, 1745053443, 1778608387,
- 1812163331, 1845718275, 1879273219, 1912828163, 1946383107, 1979938051, 2013492995, 2047047939, 2063851779, 2097380355, 2130935299, 3506667523, 2181267715, 2214822659, 2248377603, 2281932547,
- 3523447043, 2332264963, 2365819907, 2399374851, 2432929795, 2466484739, 2500039683, 3338918147, 2533594627, 2567149571, 2600704515, 2634259459, 2651049987, 2684591875, 2718146819, 2751701763,
- 3657671939, 3674449411, 2818811651, 2852366595, 3473137411, 2885921539, 2919476483, 3691228931, 2953040899, 2986586371, 3020141315, 3540235523, 3070473731, 3104028675, 3137583619, 3171138563,
- 3708009987, 3221470979, 3255025923, 3288580867, 3322135811, 3372468227, 3406023171, 3422805507, 3456355587, 3590575363, 3624130307, 2147483904, 1124090368, 1157645312, 1191200256, 1224755200,
- 1258310144, 1291865088, 1325420032, 1358974976, 1392529920, 1426084864, 1459639808, 1493194752, 1526749696, 2684395264, 2717950208, 2751505152, 2785060096, 2818615040, 2852169984, 2885724928,
- 2919279872, 2952834816, 2986389760, 3019944704, 3053499648, 3103832064, 3137387008, 3170941952, 3204496896, 3271606528, 3338716416, 3405826304, 3472936192, 3540046080, 3607155968, 3674265856,
- 3741375744, 3808485632, 3875595520, 3942705408, 4009815296, 4076925184, 4144035072, 4227922432, 130560, 67174913, 134284801, 251727105, 318836993, 385946881, 453056769, 520166657, 587276545,
- 654386433, 721496321, 788606209, 855716097, 922825985, 1006713345, 1107377665, 1174488065, 1241597953, 839004162, 906114050, 4194370048, 1627650560, 1661166083, 1694721027, 1728275971, 1761830915,
- 1795385859, 1828940803, 1862495747, 1896050691, 1929605635, 1963160579, 1996715523, 2030270467, 1627617795, 1661166083, 1694721027, 1728275971, 1761830915, 1795385859, 1828940803, 1862495747,
- 1896050691, 1929605635, 1963160579, 1996715523, 2030270467, 2063825411, 2097380355, 2130935299, 2164490243, 2198045187, 2231600131, 2265155075, 2298710019, 2315506179, 2349042435, 2382597379,
- 2416152323, 2449707267, 2483262211, 3640890627, 2063851779, 2097380355, 2130935299, 3506667523, 2181267715, 2214822659, 2248377603, 2281932547, 3523447043, 2332264963, 2365819907, 2399374851,
- 2432929795, 2466484739, 2500039683, 3338918147, 2516817411, 2533594883, 2550372355, 2567149827, 2583927299, 2600704771, 2617482243, 2634259715, 3489910787, 2651037187, 2667814659, 2684592131,
- 2701369603, 2718147075, 2734924547, 2751702019, 2768479491, 3657685507, 2785256963, 3674462979, 2802034435, 2818811907, 2835589379, 2852366851, 3473137411, 2869144323, 2885921795, 2902699267,
- 2919476739, 2936254211, 3691240451, 3557020675, 2953031683, 2969809155, 2986586627, 3003364099, 3020141571, 3036919043, 3053703939, 3070473731, 3087251203, 3104028675, 3120806147, 3137583619,
- 3154361091, 3171138563, 3187916035, 3708009987, 3204701443, 3221470979, 3238248451, 3255025923, 3271803395, 3288580867, 3305358339, 3322135811, 3338913283, 3355691011, 3372468483, 3389245955,
- 3406023427, 3422805507, 3439578115, 3456355587, 3573796355, 3590575363, 3607352835, 3624130307, 33609731, 570428928, 15104, 1526743552, 2147490304, 872449280, 2516616960, 2550151680, 1241560576,
- 4009801728, 4043335936, 2701193472, 4144034560, 4177568256, 2801797121, 285281281, 318879488, 3170909697, 1107378433, 1140975872, 3942664705, 906112770, 33616384, 318778368, 1308771842, 2030063362,
- 1929409024, 1359106050, 1392660994, 1426215938, 1442998784, 1057061376, 1208043265, 33575936, 251659776, 6656, 1107313152, 1325403136, 218124288, 1409307648, 503385856, 268443393, 1057046273,
- 16781824, 16781312, 50333696, 956446722, 16815106, 234881280, 100663552, 16787712, 503382528, 33562369, 184556544, 2030063362, 1929409024, 1359106050, 1392660994, 1426215938, 33576450, 285213184,
- 6656, 1325420288, 16779776, 3506636288, 16777728, 436211968, 16777216, 1040320000, 16777472, 16781312, 1040320000, 16777472, 16781312, 1174603264, 16777728, 436211968, 16777216, 33568256,
- 536873472, 100663808, 100666880, 268436224, 100667648, 1308754688, 33558784, 234882560, 50333184, 1325535232, 50333184, 1325551106, 33554688, 1325535488, 436207872, 134217984, 100663808,
- 1191316480, 285213184, 33572610, 16797442, 100663552, 905969920, 167772672, 33562624, 234882560, 50363648, 318771200, 50363648, 318787074, 100663808, 2097155584, 268436224, 2097181184, 1308754688,
- 16806400, 301990400, 16808192, 33568256, 536873472, 100663808, 2080378368, 268436224, 2080380160, 1308754688, 33559808, 234882560, 50363392, 1342312448, 50363392, 1342328322, 33554688, 2030047744,
- 905969920, 167772672, 33562624, 234882560, 50360322, 419434496, 50360322, 419450370, 100663808, 1879182848, 268436224, 1879200770, 1308754688, 16798722, 301990400, 16808192, 33568256, 536873472,
- 100663808, 2113932800, 268436224, 2113934592, 1308754688, 33559808, 234882560, 50363904, 1342312448, 50363904, 1342328322, 33554688, 1929384960, 905969920, 167772672, 33562624, 234882560, 50360578,
- 419434496, 50360578, 419450370, 100663808, 1895960064, 268436224, 1895977986, 1308754688, 16798722, 335544832, 16806656, 33568256, 536873472, 100663808, 1912737280, 268436224, 1912740096,
- 1308754688, 33560832, 234882560, 50360834, 1409421312, 50360834, 1409437186, 33554688, 1359091200, 905969920, 167772672, 33562624, 234882560, 50361090, 419434496, 50361090, 419450370, 100663808,
- 1929514496, 268436224, 1929532418, 1308754688, 16798722, 402653696, 16798466, 16784384, 33556480, 234882560, 50353411, 1241532160, 33575683, 16796160, 1191182592, 603980032, 134217984, 134218496,
- 369102848, 50353667, 1291863808, 33575427, 1409500928, 1291846144, 16777472, 16795392, 3942647296, 16777472, 16798720, 369034752, 16777472, 50347777, 402653440, 301990144, 16777216, 402653184,
- 16777472, 33571328, 285212928, 6656, 16777984, 16783360, 4608, 256, 16783360, 1342177536, 16777728, 436211968, 50331648, 436208128, 16785408, 5120, 256, 16783360, 1107296512, 16777472, 33558272,
- 285212928, 6656, 33555200, 536877568, 335544576, 16777216, 402653184, 16777472, 16797696, 251658496, 16777728, 436211968, 33554432, 33556992, 2046847488, 33554688, 1342194176,
-};
-
-enum { SAW_TTF_TEXT_SIZE = 198512, };
-
-static u32 saw_ttf_icons[] = {
- 256, 2147486464, 805307136, 1112888135, 3402852299, 1685849344, 3569942528, 841962319, 1960987233, 939589632, 1610612736, 1885433187, 241597417, 1612120064, 950534144, 1719233639, 700498825,
- 1691680768, 2505442304, 1684104552, 1358632488, 3154116608, 905969664, 1634035816, 2533840644, 4093640704, 603979776, 2020896104, 49394, 2550202368, 3356819456, 1633906540, 4162758155, 2562654208,
- 3423928320, 1886937453, 1510049797, 402718720, 536870912, 1701667182, 2041869625, 4230677760, 3976396800, 1953722224, 3889493656, 3962504448, 1984692224, 256, 197891, 192329496, 4114354015, 133376,
- 0, 2792000993, 0, 743303905, 3036672767, 3422653442, 134217728, 16777728, 0, 256, 3237986305, 2147614720, 3841916928, 16815106, 0, 0, 0, 1912930304, 256, 1493266949, 5376, 16777216, 0, 0, 0, 0,
- 50463744, 83919875, 1275133952, 26113, 1275152128, 26113, 419493120, 33792, 50921474, 0, 8388608, 1048832, 0, 0, 1463877632, 2147503443, 4294909952, 3237986305, 3221291008, 16384, 256, 956366848,
- 42241, 687874048, 32769, 49152, 16384, 49153, 16385, 32769, 32769, 49153, 16385, 16385, 1, 16385, 16385, 32769, 16385, 16385, 16385, 16385, 16385, 32769, 49153, 32769, 16385, 2, 32769, 16385,
- 32769, 32769, 16385, 16385, 49153, 32769, 16385, 16385, 16385, 16385, 49153, 32769, 49153, 16385, 49153, 16385, 16385, 32769, 32769, 32769, 16386, 32769, 32769, 32769, 0, 2, 2, 16386, 16386, 16386,
- 16386, 32770, 32770, 2, 2, 16386, 32770, 16386, 32770, 32770, 32770, 32770, 16386, 2, 16386, 32770, 32770, 32770, 32770, 49153, 49153, 2, 2, 2, 49153, 32770, 32770, 32770, 32770, 2, 32770, 32770,
- 49153, 49153, 16386, 16386, 49153, 49153, 16385, 16385, 32769, 49153, 32770, 32769, 2, 2, 2, 49153, 2, 49153, 2, 32769, 49153, 16386, 32769, 2, 16386, 32769, 2, 16385, 32769, 16386, 2, 16386,
- 16385, 32769, 32769, 32769, 32769, 32770, 32769, 32770, 49153, 32769, 32770, 32769, 32769, 2, 2, 16386, 32770, 2, 32769, 16386, 16386, 2, 49153, 32769, 2, 32769, 16386, 16386, 16386, 32769, 32769,
- 16386, 1, 2, 2, 49153, 2, 2, 2, 2, 32770, 16386, 32770, 2, 32770, 32770, 32770, 32770, 32770, 16386, 32770, 32770, 16386, 16386, 16386, 16386, 32770, 32770, 2, 2, 32770, 2, 32770, 49153, 2, 16386,
- 2, 16385, 16385, 2, 32770, 16386, 32770, 32770, 32770, 32770, 16386, 49153, 16386, 32770, 32770, 32770, 32770, 32770, 16386, 32769, 16386, 32769, 32770, 32770, 2, 2, 2, 16386, 32770, 2, 32769,
- 16386, 32770, 49153, 32770, 16386, 16386, 16386, 16386, 16386, 16386, 32770, 16386, 32770, 32769, 32769, 2, 16386, 32770, 32770, 32770, 32770, 16386, 16386, 16386, 16386, 16386, 16386, 2, 2, 16386,
- 16386, 32770, 32770, 32770, 32770, 32770, 16386, 32770, 32770, 32770, 32770, 32770, 32770, 16386, 16385, 16385, 2, 32769, 16386, 32770, 2, 32770, 32769, 2, 16386, 2, 2, 32770, 32770, 32770, 16385,
- 32770, 2, 2, 32770, 32770, 16386, 32770, 32770, 16386, 32770, 32770, 16386, 16386, 32770, 32770, 32770, 49153, 32770, 49153, 32770, 16386, 16386, 16386, 16386, 16386, 16386, 32770, 16386, 2, 32770,
- 16385, 16386, 16386, 2, 2, 2, 16386, 2, 32770, 32770, 32770, 16386, 32770, 32770, 32770, 32770, 2, 16386, 16386, 16386, 16386, 16386, 16386, 32770, 32770, 32770, 32770, 32770, 32770, 32770, 32770,
- 32770, 2, 32770, 32770, 32770, 16386, 32770, 32769, 2, 2, 2, 49153, 49153, 49153, 32769, 32770, 16386, 16386, 16386, 32770, 16386, 16386, 16386, 32770, 16385, 16386, 16386, 2, 32770, 2, 2, 32770,
- 32770, 32770, 32770, 32770, 32770, 32770, 32770, 32770, 32770, 2, 2, 32770, 2, 32770, 16385, 32769, 16386, 16386, 32770, 2, 32770, 49153, 2, 2, 2, 2, 16386, 49153, 2, 2, 2, 2, 49153, 32769, 2, 2,
- 2, 32770, 2, 16386, 2, 16386, 2, 2, 2, 2, 16386, 49153, 49153, 2, 16385, 49153, 32770, 49153, 2, 49153, 2, 49153, 32769, 2, 2, 49153, 32769, 32769, 16386, 49153, 49153, 49153, 49153, 49153, 2,
- 49153, 49153, 16386, 2, 32769, 2, 32769, 2, 2, 16385, 2, 2, 32769, 16385, 32769, 2, 2, 16385, 49153, 16385, 16385, 2, 2, 2, 2, 2, 2, 2, 2, 49153, 49153, 32769, 32769, 2, 49153, 49153, 49153, 2, 2,
- 2, 49153, 16386, 32770, 2, 16386, 49153, 2, 2, 49153, 2, 2, 16386, 16386, 2, 16386, 16385, 2, 2, 2, 2, 32770, 32770, 16386, 2, 32769, 2, 2, 16386, 2, 49153, 2, 49153, 49153, 16386, 49153, 2, 2, 2,
- 2, 2, 32769, 32769, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 32770, 32770, 32770, 49153, 2, 49153, 49153, 49153, 49153, 49153, 2, 2, 2, 49153, 2, 2, 32770, 16386, 16385, 16385, 1, 1, 2, 16385, 16385, 16385,
- 2, 2, 2, 49153, 16386, 16386, 2, 32769, 49153, 32770, 32770, 49153, 16386, 2, 49153, 32770, 32770, 32770, 2, 32770, 2, 49153, 49153, 2, 2, 49153, 49153, 16385, 16385, 49153, 49153, 32770, 49153,
- 32769, 49153, 49153, 2, 2, 2, 2, 2, 32770, 16386, 49153, 16386, 32770, 16386, 49153, 2, 49153, 32770, 49152, 2, 2, 16386, 2, 32769, 32770, 2, 49153, 2, 2, 2, 2, 2, 2, 16386, 49153, 2, 49153, 32768,
- 49153, 2, 16386, 49153, 32769, 32769, 49153, 49153, 49153, 16386, 2, 49153, 49153, 49153, 16385, 16385, 49153, 16385, 32769, 2, 32769, 32769, 16386, 16386, 16386, 16386, 16386, 16386, 2, 2, 32769,
- 32769, 2, 2, 16385, 16385, 2, 32769, 2, 2, 49153, 2, 2, 16385, 32770, 49153, 2, 32770, 32770, 2, 32769, 16385, 2, 2, 16386, 2, 2, 2, 49153, 49153, 2, 32769, 32769, 32769, 32769, 32769, 32769,
- 32769, 32769, 2, 2, 2, 2, 49153, 49153, 2, 49153, 49153, 2, 2, 2, 2, 32769, 2, 32770, 32769, 32770, 49153, 2, 2, 16386, 49153, 2, 16386, 2, 16386, 16386, 32770, 16386, 16386, 49153, 16386, 16386,
- 2, 16386, 49153, 32770, 2, 2, 32769, 49153, 32769, 2, 2, 32770, 32770, 32770, 2, 16385, 32770, 32769, 32769, 2, 32770, 32770, 32770, 49153, 49153, 16386, 16386, 16386, 16386, 16386, 16385, 1,
- 16386, 32770, 49153, 2, 32770, 32769, 32769, 32769, 32769, 49153, 2, 2, 2, 16386, 49153, 2, 32770, 2, 32770, 49153, 49153, 49153, 49153, 16386, 16385, 2, 16386, 2, 2, 2, 49153, 16386, 2, 2, 16386,
- 2, 32770, 2, 32770, 2, 16386, 32770, 49153, 32770, 2, 2, 16386, 2, 32769, 16386, 16385, 16385, 16385, 16385, 16385, 2, 2, 49153, 2, 2, 2, 49153, 2, 49153, 2, 49153, 2, 49153, 2, 49153, 2, 2, 2, 2,
- 16386, 2, 2, 2, 16385, 2, 2, 16385, 16386, 2, 32769, 2, 1, 2, 2, 2, 2, 2, 49153, 2, 2, 32770, 49153, 16386, 2, 32769, 32769, 16386, 32769, 32769, 32769, 32769, 32769, 16386, 32770, 32769, 2, 2,
- 49153, 49153, 16386, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16385, 49153, 49153, 49153, 16385, 2, 49153, 32770, 2, 32769, 2, 16386, 2, 32770, 2, 2, 32770, 49153, 16386, 2, 32769, 16386, 32769, 32769, 16386,
- 49153, 16386, 32770, 32769, 49153, 16386, 2, 16386, 2, 32770, 16386, 32769, 32769, 32770, 32770, 32770, 2, 32770, 2, 2, 2, 32770, 2, 2, 32770, 2, 32770, 32770, 2, 2, 16386, 16386, 16386, 16386,
- 32770, 32770, 32770, 2, 32770, 16386, 49153, 2, 2, 2, 2, 16386, 32770, 32770, 32770, 16385, 32770, 49153, 32770, 32770, 32770, 32770, 32770, 49153, 32770, 32770, 49153, 32770, 32770, 32770, 49153,
- 32770, 32770, 32770, 2, 16386, 16386, 16386, 16386, 32770, 32770, 2, 2, 32770, 16386, 32770, 49153, 49153, 49153, 49153, 49153, 49153, 49153, 16386, 16386, 2, 16386, 2, 16386, 49153, 32770, 32770,
- 16386, 49153, 16386, 32770, 16386, 16386, 16386, 16386, 49153, 2, 49153, 16386, 32769, 32770, 2, 2, 32770, 1, 32770, 2, 32770, 2, 2, 16386, 32770, 2, 2, 2, 32770, 16385, 2, 2, 2, 49153, 32769,
- 16386, 32770, 49153, 32769, 49153, 2, 49153, 16386, 2, 2, 2, 2, 32770, 2, 2, 2, 16386, 2, 32769, 32769, 16386, 2, 32769, 32769, 32769, 16386, 32769, 2, 16386, 2, 16386, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 32770, 2, 2, 2, 2, 49153, 16385, 2, 2, 16386, 2, 2, 32770, 2, 2, 2, 2, 2, 2, 2, 32770, 16386, 16386, 2, 2, 2, 2, 32769, 2, 2, 49153, 2, 2, 2, 32770, 32770, 49153, 2, 2, 32770,
- 32770, 2, 32770, 16386, 2, 2, 2, 16386, 32769, 2, 2, 16386, 16386, 32770, 2, 49153, 16386, 49153, 2, 16385, 2, 49153, 2, 16386, 2, 2, 2, 2, 32770, 32770, 16386, 2, 49153, 32770, 16386, 2, 32770, 2,
- 32770, 2, 2, 2, 2, 2, 2, 2, 16386, 16386, 32770, 16385, 32770, 32770, 16386, 16385, 49153, 32770, 32770, 2, 32770, 32769, 2, 2, 2, 2, 16386, 2, 2, 16386, 16386, 49153, 16386, 2, 2, 32770, 32770,
- 32770, 2, 32770, 2, 32770, 49153, 49153, 49153, 32770, 49153, 2, 2, 2, 16386, 2, 2, 32770, 32770, 2, 32770, 16386, 2, 16386, 49153, 16386, 16386, 49153, 32770, 32770, 32770, 2, 49153, 16386, 32770,
- 2, 2, 2, 49153, 32769, 16386, 32770, 2, 32769, 32770, 16386, 16386, 32769, 16386, 2, 32770, 32770, 2, 49153, 16386, 49153, 32770, 2, 32770, 32770, 49153, 32770, 2, 2, 2, 2, 16386, 2, 2, 32770,
- 32770, 49153, 32769, 2, 2, 16386, 49153, 32770, 32770, 32770, 2, 2, 2, 49153, 2, 16386, 16386, 49153, 2, 16386, 2, 49153, 49153, 2, 2, 2, 2, 16386, 32770, 2, 32770, 32770, 2, 2, 49153, 49152, 2, 2,
- 2, 32770, 2, 16386, 49153, 2, 2, 2, 32770, 2, 2, 32769, 32769, 49153, 2, 16386, 32770, 2, 2, 2, 32770, 32769, 49153, 2, 2, 32769, 16386, 49153, 2, 2, 16386, 32769, 2, 2, 2, 32769, 16386, 2, 49153,
- 16386, 16386, 2, 49153, 32770, 2, 2, 2, 2, 49153, 2, 49153, 49153, 49153, 32770, 32770, 49153, 49153, 49153, 16386, 2, 2, 2, 49153, 32770, 32770, 16386, 16386, 16386, 16386, 16386, 16386, 16386,
- 32770, 32770, 32770, 32769, 2, 2, 32769, 32770, 67108864, 50331648, 603979776, 67108864, 3359506432, 16777984, 603979776, 167772928, 3359506432, 2755527680, 839843840, 167772168, 553660935,
- 620765696, 654321152, 687876096, 738208512, 771763456, 956313344, 989870592, 1526749696, 1560304640, 1593859584, 1627414528, 1660969472, 1694524416, 1728079360, 1761634304, 1795189248, 1828744192,
- 1862299136, 1895854080, 1929409024, 1962963968, 1996518912, 2030073856, 2063628800, 2097183744, 2130738688, 2164293632, 2197848576, 2231403520, 2264958464, 2298513408, 2332068352, 2365623296,
- 2399178240, 2432733184, 2466288128, 2499843072, 2533398016, 2566952960, 2600507904, 2634062848, 2667617792, 2701172736, 2734727680, 2768282624, 2801837568, 2835392512, 2868947456, 2902502400,
- 2936057344, 2969612288, 3003167232, 3036722176, 3070277120, 3103832064, 3137387008, 3170941952, 3204496896, 3238051840, 3271606784, 3305161728, 3338716672, 3372271616, 3405826560, 3439381504,
- 3472936448, 3506491392, 3540046336, 3573601280, 3607156224, 3640711168, 3674266112, 3707821056, 3741376000, 3774930944, 3808485888, 3842040832, 3875595776, 3909150720, 3942705664, 3976260608,
- 4009815552, 4043370496, 4076925440, 4110480384, 4144035328, 4177590272, 4211145216, 4244700160, 4278255104, 16842753, 50397697, 83952641, 117507585, 151062529, 184617473, 218172417, 251727361,
- 285282305, 318837249, 352392193, 385947137, 419502081, 453057025, 486611969, 520166913, 553721857, 587276801, 620831745, 654386689, 687941633, 721496577, 755051521, 788606465, 822161409, 855716353,
- 889271297, 922826241, 956381185, 989936129, 1023491073, 1057046017, 1090600961, 1124155905, 1157710849, 1191265793, 1224820737, 1258375681, 1291930625, 1325485569, 1359040513, 1392595457,
- 1426150401, 1459705345, 1493260289, 1526815233, 1560370177, 1593925121, 1627480065, 1661035009, 1694589953, 1728144897, 1761699841, 1795254785, 1828809729, 1862364673, 1895919617, 1929474561,
- 1963029505, 1996584449, 2030139393, 2063694337, 2097249281, 2130804225, 2164359169, 2197914113, 2231469057, 2265024001, 2298578945, 2332133889, 2365688833, 2399243777, 2432798721, 2466353665,
- 2499908609, 2533463553, 2567018497, 2600573441, 2634128385, 2667683329, 2701238273, 2734793217, 2768348161, 2801903105, 2835458049, 2869012993, 2902567937, 2936122881, 2969677825, 3003232769,
- 3036787713, 3070342657, 3103897601, 3137452545, 3171007489, 3204562433, 3238117377, 3271672321, 3305227265, 3338782209, 3372337153, 3405892097, 3439447041, 3473001985, 3506556929, 3540111873,
- 3573666817, 3607221761, 3640776705, 3674331649, 3707886593, 3741441537, 3774996481, 3808551425, 3842106369, 3875661313, 3909216257, 3942771201, 3976326145, 4009881089, 4043436033, 4076990977,
- 4110545921, 4144100865, 4177655809, 4211210753, 4244765697, 4278320641, 16908290, 50463234, 84018178, 117573122, 151128066, 184683010, 218237954, 251792898, 285347842, 318902786, 352457730,
- 386012674, 419567618, 453122562, 486677506, 520232450, 553787394, 587342338, 620897282, 654452226, 688007170, 721562114, 755117058, 788672002, 822226946, 855781890, 889336834, 922891778, 956446722,
- 990001666, 1023556610, 1057111554, 1090666498, 1124221442, 1157776386, 1191331330, 1224886274, 1258441218, 1291996162, 1325551106, 1359106050, 1392660994, 1426215938, 1459770882, 1493325826,
- 1526880770, 1560435714, 1593990658, 1627545602, 1661100546, 1694655490, 1728210434, 1761765378, 1795320322, 1828875266, 1862430210, 1895985154, 1929540098, 1963095042, 1996649986, 2030204930,
- 2063759874, 2097314818, 2130869762, 2164424706, 2197979650, 2231534594, 2265089538, 2298644482, 2332199426, 2365754370, 2399309314, 2432864258, 2466419202, 2499974146, 2533529090, 2567084034,
- 2600638978, 2634193922, 2667748866, 2701303810, 2734858754, 2768413698, 2801968642, 2835523586, 2869078530, 2902633474, 2936188418, 2969743362, 3003298306, 3036853250, 3070408194, 3103963138,
- 3137518082, 3171073026, 3204627970, 3238182914, 3271737858, 3305292802, 3338847746, 3372402690, 3405957634, 3439512578, 3473067522, 3506622466, 3540177410, 3573732354, 3607287298, 3640842242,
- 3674397186, 3707952130, 3741507074, 3775062018, 3808616962, 3842171906, 3875726850, 3909281794, 3942836738, 3976391682, 4009946626, 4043501570, 4077056514, 4110611458, 4144166402, 4177721346,
- 4211276290, 4244831234, 4278386178, 16973827, 50528771, 84083715, 117638659, 151193603, 184748547, 218303491, 251858435, 285413379, 318968323, 352523267, 386078211, 419633155, 453188099, 486743043,
- 520297987, 553852931, 587407875, 620962819, 654517763, 688072707, 721627651, 755182595, 788737539, 822292483, 855847427, 889402371, 922957315, 956512259, 990067203, 1023622147, 1057177091,
- 1090732035, 1124286979, 1157841923, 1191396867, 1224951811, 1258506755, 1292061699, 1325616643, 1359171587, 1392726531, 1426281475, 1459836419, 1493391363, 1526946307, 1560501251, 1594056195,
- 1627611139, 1661166083, 1694721027, 1728275971, 1761830915, 1795385859, 1828940803, 1862495747, 1896050691, 1929605635, 1963160579, 1996715523, 2030270467, 2063825411, 2097380355, 2130935299,
- 2164490243, 2198045187, 2231600131, 2265155075, 2298710019, 2332264963, 2365819907, 2399374851, 2432929795, 2466484739, 2500039683, 2533594627, 2567149571, 2600704515, 2634259459, 2667814403,
- 2701369347, 2734924291, 2768479235, 2802034179, 2835589123, 2869144067, 2902699011, 2936253955, 2969808899, 3003363843, 3036918787, 3070473731, 3104028675, 3137583619, 3171138563, 3204693507,
- 3238248451, 3271803395, 3305358339, 3338913283, 3372468227, 3406023171, 3439578115, 3473133059, 3506688003, 3540242947, 3573797891, 3607352835, 3640907779, 3674462723, 3708017667, 3741572611,
- 3775127555, 3808682499, 3842237443, 3875792387, 3909347331, 3942902275, 3976457219, 4010012163, 4043567107, 4077122051, 4110676995, 4144231939, 4177786883, 4211341827, 4244896771, 4278451715,
- 17039364, 50594308, 84149252, 117704196, 151259140, 184814084, 218369028, 251923972, 285478916, 319033860, 352588804, 386143748, 419698692, 453253636, 486808580, 520363524, 553918468, 587473412,
- 621028356, 654583300, 688138244, 721693188, 755248132, 788803076, 822358020, 855912964, 889467908, 923022852, 956577796, 990132740, 1023687684, 1057242628, 1090797572, 1124352516, 1157907460,
- 1191462404, 1225017348, 1258572292, 1292127236, 1325682180, 1359237124, 1392792068, 1426347012, 1459901956, 1493456900, 1527011844, 1560566788, 1594121732, 1627676676, 1661231620, 1694786564,
- 1728341508, 1761896452, 1795451396, 1829006340, 1862561284, 1896116228, 1929671172, 1963226116, 1996781060, 2030336004, 2063890948, 2097445892, 2131000836, 2164555780, 2198110724, 2231665668,
- 2265220612, 2298775556, 2332330500, 2365885444, 2399440388, 2432995332, 2466550276, 2500105220, 2533660164, 2567215108, 2600770052, 2634324996, 2667879940, 2701434884, 2734989828, 2768544772,
- 2802099716, 2835654660, 2869209604, 2902764548, 2936319492, 2969874436, 3003429380, 3036984324, 3070539268, 3104094212, 3137649156, 3171204100, 3204759044, 3238313988, 3271868932, 3305423876,
- 3338978820, 3372533764, 3406088708, 3439643652, 3473198596, 3506753540, 3540308484, 3573863428, 3607418372, 3640973316, 3674528260, 3708083204, 3741638148, 3775193092, 3808748036, 3842302980,
- 3875857924, 3909412868, 3942967812, 3976522756, 4010077700, 4043632644, 4077187588, 4110742532, 4144297476, 4177852420, 4211407364, 4244962308, 4278517252, 17104901, 50659845, 84214789, 117769733,
- 151324677, 184879621, 218434565, 251989509, 285544453, 319099397, 352654341, 386209285, 419764229, 453319173, 486874117, 520429061, 553984005, 587538949, 621093893, 654648837, 688203781, 721758725,
- 755313669, 788868613, 270535456, 320868640, 404755488, 471865632, 538975520, 639639840, 840970272, 958411552, 2753575456, 2837489696, 2887821856, 3089151008, 572636448, 2434895905, 2468450849,
- 2502005793, 3122763553, 3290544929, 505549346, 69403427, 673389347, 706947363, 2569218851, 3911438115, 3978553891, 4045663779, 4163105571, 4213438755, 3173318179, 3055919141, 3492138789,
- 4230347557, 19267622, 69600038, 354816294, 539368742, 589701670, 707142950, 774253606, 942026534, 1059469606, 1109803046, 1529240102, 1562795046, 1596349990, 1713792294, 2049339942, 2116451110,
- 2166784038, 2200338982, 2233893926, 2519110438, 2602998054, 2703663142, 2737218086, 2770773030, 2804327974, 2837882918, 2871437862, 3173429798, 3290873382, 3324429606, 3911638822, 4146522662,
- 4247190054, 36110375, 86443047, 170330407, 203885351, 287772455, 321327655, 354882599, 489100839, 824647975, 1176978471, 1311198247, 1411863335, 1462195495, 2502386727, 2535953959, 891892777,
- 455806251, 606805035, 115363883, 316673504, 1994408416, 2564851424, 2850069216, 3034623200, 3152066528, 3638611936, 3839942624, 1021391329, 1390493921, 1776378849, 2078371297, 2413921761,
- 2833357793, 3168907489, 3370239201, 3588346849, 3991001057, 4142003169, 165871329, 769794786, 2313305570, 3085081826, 3319970786, 3470969570, 3957516002, 2950897379, 4125340387, 1172585700,
- 1826900196, 2011460580, 2430893028, 2783220964, 2967776740, 3437540324, 3873758948, 3991202788, 65400548, 803546597, 1491423205, 1961193445, 2414184421, 2649070309, 2867175909, 3034951653,
- 66061040, 116393456, 334499568, 368055536, 435164912, 468720368, 502275312, 1055923952, 1156595952, 1190151664, 1542475504, 1576033520, 1727028976, 1760585712, 1861249520, 2163244784, 2280687344,
- 2314242288, 2347797232, 2448461552, 2532349424, 2565904368, 2716901104, 2935005936, 3471880944, 3740324336, 3824214256, 3857769712, 4008765168, 4126209264, 4159764208, 133299952, 200345841,
- 250678513, 317788657, 368121073, 502340849, 586227441, 670114801, 703670513, 787557105, 988886513, 1190215409, 1324435441, 1441879281, 1592875505, 2029086193, 2297529329, 2431749873, 2515637233,
- 2549192433, 2649856497, 2968628977, 3018961393, 3388062705, 3639725809, 3673283057, 3740392433, 3975276273, 4159829745, 4210162161, 32702193, 200411122, 770842354, 972175090, 1257392626,
- 1358057202, 1827823090, 2029156338, 2079488754, 2347926514, 2381483250, 2448592626, 2515702514, 2633145074, 2767363826, 3069356274, 3119691762, 3153246962, 3186801906, 3237134066, 3287466738,
- 3555905266, 3706901746, 3891455474, 3992120050, 4143117042, 4277336562, 217253363, 519249139, 854796531, 1542666483, 1626562035, 2180211699, 2280882931, 2784202995, 3253977075, 3388196339,
- 3522416627, 3774078451, 3992184307, 4260625395, 116719603, 586420468, 636757236, 921974004, 1022638836, 1106526196, 1173636084, 1274300404, 1358188276, 1492407284, 1609850356, 1727292148,
- 1928621556, 2046063860, 2146729460, 2280948468, 2398391284, 2549388532, 2717163252, 3019156980, 3203709684, 3304375028, 3472148212, 3690255348, 3824476148, 167110388, 754265077, 838152437,
- 922039797, 1106591989, 2650116597, 2817893109, 3036000757, 3186997493, 3421881845, 3539324661, 3673544693, 3757432053, 3841319413, 3958761461, 4260753141, 83231222, 334893302, 536222198, 636887542,
- 821439222, 1022769142, 1156989430, 1257654262, 1375096822, 1492538870, 1660313334, 1811310326, 1878420982, 1995863286, 2096527862, 2230747126, 2532739574, 2717293558, 2851514358, 3086396918,
- 3203841014, 3304505590, 3489057014, 3556168182, 3623278070, 3740719606, 3874939894, 3992381686, 4210488054, 16252150, 251071735, 402068983, 586620663, 737618423, 1039609847, 1140277495, 1308051447,
- 1459049463, 1610046455, 1828153847, 1945596151, 2180480503, 2297922807, 2499251447, 2633471735, 2734137591, 2885134071, 3069685495, 3187129079, 3271016695, 3405235703, 3505901303, 3673674487,
- 3975669495, 4093112311, 4160222711, 49871863, 184027128, 217582584, 284691960, 385356536, 502798584, 804793080, 1257783032, 1358449912, 1593332728, 1844995064, 2113436152, 2281210616, 2549649912,
- 3438854648, 3656964088, 4026066424, 4294967288, 536870912, 587211264, 654321152, 687876096, 738208256, 771763456, 805318400, 989870592, 1526742016, 1560304640, 1593859584, 1627414528, 1660969472,
- 1694524416, 1728079360, 1761634304, 1795189248, 1828744192, 1862299136, 1895854080, 1929409024, 1962963968, 1996518912, 2030073856, 2063628800, 2097183744, 2130738688, 2164293632, 2197848576,
- 2231403520, 2264958464, 2298513408, 2332068352, 2365623296, 2399178240, 2432733184, 2466288128, 2499843072, 2533398016, 2566952960, 2600507904, 2634062848, 2667617792, 2701172736, 2734727680,
- 2768282624, 2801837568, 2835392512, 2868947456, 2902502400, 2936057344, 2969612288, 3003167232, 3036722176, 3070277120, 3103832064, 3137387008, 3170941952, 3204496896, 3238051840, 3271606784,
- 3305161728, 3338716672, 3372271616, 3405826560, 3439381504, 3472936448, 3506491392, 3540046336, 3573601280, 3607156224, 3640711168, 3674266112, 3707821056, 3741376000, 3774930944, 3808485888,
- 3842040832, 3875595776, 3909150720, 3942705664, 3976260608, 4009815552, 4043370496, 4076925440, 4110480384, 4144035328, 4177590272, 4211145216, 4244700160, 4278255104, 16842753, 50397697, 83952641,
- 117507585, 151062529, 184617473, 218172417, 251727361, 285282305, 318837249, 352392193, 385947137, 419502081, 453057025, 486611969, 520166913, 553721857, 587276801, 620831745, 654386689, 687941633,
- 721496577, 755051521, 788606465, 822161409, 855716353, 889271297, 922826241, 956381185, 989936129, 1023491073, 1057046017, 1090600961, 1124155905, 1157710849, 1191265793, 1224820737, 1258375681,
- 1291930625, 1325485569, 1359040513, 1392595457, 1426150401, 1459705345, 1493260289, 1526815233, 1560370177, 1593925121, 1627480065, 1661035009, 1694589953, 1728144897, 1761699841, 1795254785,
- 1828809729, 1862364673, 1895919617, 1929474561, 1963029505, 1996584449, 2030139393, 2063694337, 2097249281, 2130804225, 2164359169, 2197914113, 2231469057, 2265024001, 2298578945, 2332133889,
- 2365688833, 2399243777, 2432798721, 2466353665, 2499908609, 2533463553, 2567018497, 2600573441, 2634128385, 2667683329, 2701238273, 2734793217, 2768348161, 2801903105, 2835458049, 2869012993,
- 2902567937, 2936122881, 2969677825, 3003232769, 3036787713, 3070342657, 3103897601, 3137452545, 3171007489, 3204562433, 3238117377, 3271672321, 3305227265, 3338782209, 3372337153, 3405892097,
- 3439447041, 3473001985, 3506556929, 3540111873, 3573666817, 3607221761, 3640776705, 3674331649, 3707886593, 3741441537, 3774996481, 3808551425, 3842106369, 3875661313, 3909216257, 3942771201,
- 3976326145, 4009881089, 4043436033, 4076990977, 4110545921, 4144100865, 4177655809, 4211210753, 4244765697, 4278320641, 16908290, 50463234, 84018178, 117573122, 151128066, 184683010, 218237954,
- 251792898, 285347842, 318902786, 352457730, 386012674, 419567618, 453122562, 486677506, 520232450, 553787394, 587342338, 620897282, 654452226, 688007170, 721562114, 755117058, 788672002, 822226946,
- 855781890, 889336834, 922891778, 956446722, 990001666, 1023556610, 1057111554, 1090666498, 1124221442, 1157776386, 1191331330, 1224886274, 1258441218, 1291996162, 1325551106, 1359106050,
- 1392660994, 1426215938, 1459770882, 1493325826, 1526880770, 1560435714, 1593990658, 1627545602, 1661100546, 1694655490, 1728210434, 1761765378, 1795320322, 1828875266, 1862430210, 1895985154,
- 1929540098, 1963095042, 1996649986, 2030204930, 2063759874, 2097314818, 2130869762, 2164424706, 2197979650, 2231534594, 2265089538, 2298644482, 2332199426, 2365754370, 2399309314, 2432864258,
- 2466419202, 2499974146, 2533529090, 2567084034, 2600638978, 2634193922, 2667748866, 2701303810, 2734858754, 2768413698, 2801968642, 2835523586, 2869078530, 2902633474, 2936188418, 2969743362,
- 3003298306, 3036853250, 3070408194, 3103963138, 3137518082, 3171073026, 3204627970, 3238182914, 3271737858, 3305292802, 3338847746, 3372402690, 3405957634, 3439512578, 3473067522, 3506622466,
- 3540177410, 3573732354, 3607287298, 3640842242, 3674397186, 3707952130, 3741507074, 3775062018, 3808616962, 3842171906, 3875726850, 3909281794, 3942836738, 3976391682, 4009946626, 4043501570,
- 4077056514, 4110611458, 4144166402, 4177721346, 4211276290, 4244831234, 4278386178, 16973827, 50528771, 84083715, 117638659, 151193603, 184748547, 218303491, 251858435, 285413379, 318968323,
- 352523267, 386078211, 419633155, 453188099, 486743043, 520297987, 553852931, 587407875, 620962819, 654517763, 688072707, 721627651, 755182595, 788737539, 822292483, 855847427, 889402371, 922957315,
- 956512259, 990067203, 1023622147, 1057177091, 1090732035, 1124286979, 1157841923, 1191396867, 1224951811, 1258506755, 1292061699, 1325616643, 1359171587, 1392726531, 1426281475, 1459836419,
- 1493391363, 1526946307, 1560501251, 1594056195, 1627611139, 1661166083, 1694721027, 1728275971, 1761830915, 1795385859, 1828940803, 1862495747, 1896050691, 1929605635, 1963160579, 1996715523,
- 2030270467, 2063825411, 2097380355, 2130935299, 2164490243, 2198045187, 2231600131, 2265155075, 2298710019, 2332264963, 2365819907, 2399374851, 2432929795, 2466484739, 2500039683, 2533594627,
- 2567149571, 2600704515, 2634259459, 2667814403, 2701369347, 2734924291, 2768479235, 2802034179, 2835589123, 2869144067, 2902699011, 2936253955, 2969808899, 3003363843, 3036918787, 3070473731,
- 3104028675, 3137583619, 3171138563, 3204693507, 3238248451, 3271803395, 3305358339, 3338913283, 3372468227, 3406023171, 3439578115, 3473133059, 3506688003, 3540242947, 3573797891, 3607352835,
- 3640907779, 3674462723, 3708017667, 3741572611, 3775127555, 3808682499, 3842237443, 3875792387, 3909347331, 3942902275, 3976457219, 4010012163, 4043567107, 4077122051, 4110676995, 4144231939,
- 4177786883, 4211341827, 4244896771, 4278451715, 17039364, 50594308, 84149252, 117704196, 151259140, 184814084, 218369028, 251923972, 285478916, 319033860, 352588804, 386143748, 419698692,
- 453253636, 486808580, 520363524, 553918468, 587473412, 621028356, 654583300, 688138244, 721693188, 755248132, 788803076, 822358020, 855912964, 889467908, 923022852, 956577796, 990132740,
- 1023687684, 1057242628, 1090797572, 1124352516, 1157907460, 1191462404, 1225017348, 1258572292, 1292127236, 1325682180, 1359237124, 1392792068, 1426347012, 1459901956, 1493456900, 1527011844,
- 1560566788, 1594121732, 1627676676, 1661231620, 1694786564, 1728341508, 1761896452, 1795451396, 1829006340, 1862561284, 1896116228, 1929671172, 1963226116, 1996781060, 2030336004, 2063890948,
- 2097445892, 2131000836, 2164555780, 2198110724, 2231665668, 2265220612, 2298775556, 2332330500, 2365885444, 2399440388, 2432995332, 2466550276, 2500105220, 2533660164, 2567215108, 2600770052,
- 2634324996, 2667879940, 2701434884, 2734989828, 2768544772, 2802099716, 2835654660, 2869209604, 2902764548, 2936319492, 2969874436, 3003429380, 3036984324, 3070539268, 3104094212, 3137649156,
- 3171204100, 3204759044, 3238313988, 3271868932, 3305423876, 3338978820, 3372533764, 3406088708, 3439643652, 3473198596, 3506753540, 3540308484, 3573863428, 3607418372, 3640973316, 3674528260,
- 3708083204, 3741638148, 3775193092, 3808748036, 3842302980, 3875857924, 3909412868, 3942967812, 3976522756, 4010077700, 4043632644, 4077187588, 4110742532, 4144297476, 4177852420, 4211407364,
- 4244962308, 4278517252, 17104901, 50659845, 84214789, 117769733, 151324677, 184879621, 218434565, 251989509, 285544453, 319099397, 352654341, 386209285, 419764229, 453319173, 486874117, 520429061,
- 553984005, 587538949, 621093893, 654648837, 688203781, 721758725, 755313669, 788868613, 270535456, 320868640, 404755488, 471865632, 538975520, 639639840, 840970272, 958411552, 2753575456,
- 2837489696, 2887821856, 3089151008, 572636448, 2434895905, 2468450849, 2502005793, 3122763553, 3290544929, 505549346, 69403427, 673389347, 706947363, 2569218851, 3911438115, 3978553891, 4045663779,
- 4163105571, 4213438755, 3173318179, 3055919141, 3492138789, 4230347557, 19267622, 69600038, 354816294, 539368742, 589701670, 707142950, 774253606, 942026534, 1059469606, 1109803046, 1529240102,
- 1562795046, 1596349990, 1713792294, 2049339942, 2116451110, 2166784038, 2200338982, 2233893926, 2519110438, 2602998054, 2703663142, 2737218086, 2770773030, 2804327974, 2837882918, 2871437862,
- 3173429798, 3290873382, 3324429606, 3911638822, 4146522662, 4247190054, 36110375, 86443047, 170330407, 203885351, 287772455, 321327655, 354882599, 489100839, 824647975, 1176978471, 1311198247,
- 1411863335, 1462195495, 2502386727, 2535953959, 891892777, 455806251, 606805035, 98586667, 316673504, 1507868640, 2548073952, 2850069216, 3034623200, 3152066528, 3638611936, 3823165408, 971059681,
- 1390493921, 1776378849, 2078371297, 2413921505, 2833357537, 3168907489, 3370239201, 3588346849, 3991001057, 4142003169, 165871329, 769794530, 2313305570, 3085081826, 3319970786, 3454192354,
- 3957516002, 2950897379, 4125340131, 1172585700, 1826899940, 1994683364, 2430892772, 2783220964, 2950998244, 3051664356, 3773091556, 3991202020, 4024757988, 669321189, 1373975269, 1910856421,
- 2313516773, 2632290789, 2850398437, 3034951653, 66060528, 116393200, 284166128, 368055536, 401610480, 468720368, 502275312, 569384688, 1106264304, 1190151664, 1357924336, 1576033520, 1626365680,
- 1760585712, 1794140656, 2163241200, 2280686576, 2314242288, 2347797232, 2431684080, 2532348912, 2565904368, 2700123376, 2750456560, 3236999408, 3606106352, 3807437040, 3857769712, 3891324656,
- 4126208240, 4159764208, 15857904, 166791409, 233901297, 317788401, 368121073, 502339825, 552673009, 619783153, 703670513, 737225457, 938553585, 1089551857, 1223772145, 1441878257, 1542543089,
- 1978753265, 2247197425, 2431749873, 2515636721, 2549192433, 2633079281, 2968628209, 3002184177, 3237066993, 3639725553, 3673283057, 3706838001, 3941720305, 4159829745, 4210161905, 15924209,
- 183633138, 569513970, 955397106, 1257390322, 1358056946, 1827820018, 2029154802, 2079488498, 2347926514, 2381483250, 2431815410, 2515702514, 2633145074, 2700254706, 3035801586, 3119691762,
- 3153246962, 3186801906, 3237134066, 3287466482, 3505571826, 3690124530, 3891455474, 3992120050, 4126339570, 4277336562, 166920947, 519249139, 854796531, 1492334579, 1626562035, 2180211443,
- 2264105715, 2784202995, 3253976819, 3388196339, 3522416115, 3774078451, 3992184307, 4260625139, 116719603, 586420468, 636757236, 921973492, 1022638580, 1106526196, 1173636084, 1274300404,
- 1358188276, 1492407284, 1609850100, 1727291892, 1895065844, 2012509428, 2129952244, 2230616564, 2381614068, 2532610292, 2717163252, 3019156980, 3186931956, 3304374516, 3455370996, 3606369268,
- 3807698676, 4210353908, 754259445, 838151669, 922039029, 1106589685, 2482324213, 2767560693, 3019221749, 3136665333, 3354771445, 3505769973, 3673544693, 3740654837, 3841319413, 3958761461,
- 4243975925, 83231222, 334893302, 536222198, 620110326, 787884534, 1005991926, 1156989430, 1257654262, 1375096822, 1492538358, 1660313078, 1777755382, 1878420982, 1995863286, 2079750390, 2180415478,
- 2532739062, 2700515574, 2851514358, 3069619702, 3203841014, 3287728374, 3489057014, 3556168182, 3623278070, 3723942390, 3874939638, 3975604470, 4210487542, 4294376694, 251071479, 402068727,
- 586620663, 737618167, 1006055159, 1140277495, 1308051447, 1459048951, 1593268983, 1811376631, 1928818679, 2163703031, 2264368119, 2482474231, 2633471735, 2734137335, 2851579127, 3052908023,
- 3187128823, 3271016439, 3388458231, 3505900791, 3623342839, 3975668983, 4076335095, 4160222711, 49871607, 184026616, 217582584, 267914744, 368579320, 502798584, 804792312, 1257783032, 1358449912,
- 1593332728, 1844995064, 2079881720, 2230878712, 2549649912, 3438854392, 3656964088, 4026066424, 4294967288, 57855, 57599, 0, 3707699200, 3690921984, 0, 55807, 3623813120, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 668991488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 673197600, 4162790432, 3542081823, 3256861471, 2988422175, 2837424927, 42527, 2216659487,
- 891257119, 723463711, 169810463, 35587359, 3978229022, 3659457566, 3340684830, 3038690334, 2820583966, 2787026718, 2350813470, 2199816734, 1646164254, 1226725406, 3961388573, 3474838045,
- 3256731165, 2837299229, 1931322653, 3793543964, 1511825436, 1360810524, 672935452, 605824540, 219942940, 4212915483, 4162583067, 4129027867, 4095472923, 62235, 4011586075, 3961253403, 3927698203,
- 3894143259, 3860588315, 3810256155, 3625704475, 2299647003, 2282815488, 2266038272, 34321, 34065, 33809, 2182152192, 2165374976, 32529, 32017, 2064711680, 31249, 2014380032, 30481, 30225,
- 1947301137, 1896968977, 0, 28433, 1829858833, 1796303889, 0, 1712417041, 25873, 1662084113, 1427199505, 1343312145, 20241, 0, 1259424785, 0, 1209073664, 18193, 17937, 1141982481, 0, 1041301504,
- 1024524288, 15377, 15121, 14865, 940652817, 890320657, 13329, 839987985, 823197696, 789655569, 386998289, 5649, 235995136, 3345, 185666577, 4228909329, 64272, 4128307728, 4010865168, 58896, 58640,
- 3809534992, 3608207376, 3591372800, 3574595584, 3524318224, 3306213392, 3188769552, 3071327504, 3020947456, 2987393024, 2685445136, 2668625920, 0, 36624, 36368, 35856, 2215641088, 2182086656,
- 2131788048, 29712, 29200, 28944, 28688, 1829765120, 1762656256, 26640, 1494245648, 1443911696, 1360024592, 1292914448, 1175472400, 873480976, 705704720, 470810624, 4228906255, 4178573839, 0,
- 3473921807, 2735717135, 2668601871, 2567937039, 2366609423, 2265942799, 1947172879, 1896808448, 1645177615, 1343181071, 1125056512, 1074741775, 1024409359, 990854159, 957299215, 873412111,
- 823079695, 705637647, 672082191, 604972303, 554639887, 7951, 437197583, 370088207, 336532751, 219091727, 4279107584, 4128176654, 4077843470, 4044288526, 3876514574, 3809404174, 57614, 3222194958,
- 3205365760, 3188588544, 3171811328, 3155034112, 3121527566, 3071195406, 3037640206, 3004085262, 2970530318, 2886643726, 2836310542, 2802755598, 2735645966, 2651758606, 2383319310, 2165214222,
- 2047770382, 1947104526, 1863217678, 1712221198, 1594778382, 1527667982, 1427003662, 1393447950, 1292783886, 1225673230, 1175340814, 1091454222, 1057898510, 1007566350, 957233934, 739126542,
- 588130318, 521019918, 336467726, 286134798, 202247950, 84805134, 51250190, 17695246, 4211998221, 4161665293, 4077778189, 3943558157, 3742230797, 3641564685, 3524122637, 3389902605, 3339569421,
- 3121462285, 3037575181, 2903355405, 2819468045, 2634917389, 2584583181, 2433587469, 2383253261, 2316143885, 2198701069, 2081259021, 2047703821, 1997371405, 1863151885, 1812819213, 1779264269,
- 1712154381, 1678599437, 1460494349, 1343050253, 1292717581, 1242385421, 1108165645, 0, 1024262144, 990723085, 940390669, 722285581, 420292365, 218959373, 135072269, 4195155468, 3859607820,
- 3792495884, 3624722700, 2869744396, 2534187276, 38412, 1913422092, 256, 31247, 1947170319, 1880060431, 1812922368, 1745813504, 26127, 1611620879, 1544486912, 1477401103, 1410291215, 470766095,
- 470752271, 470752271, 470752271, 470752271, 470752271, 470752271, 470752271, 470752271, 470752271, 470752271, 470752271, 470752271, 470752271, 403642895, 336533007, 269423119, 202313231, 135203343,
- 68093455, 983567, 4228840974, 4161731086, 4094621198, 4027511310, 3960401422, 3893291534, 3826181646, 3759071758, 3691961870, 3624851982, 3557742094, 3490632206, 1578094094, 1578093070, 3289302542,
- 1980744206, 739229198, 3087972878, 3020855311, 2953753102, 2886643214, 2819533326, 2752402959, 2685313550, 235904526, 2551093774, 2483983886, 2416873998, 2349764110, 2282654222, 2215544334,
- 2148434446, 2081324558, 2014214670, 1947104782, 1879994894, 1812885006, 1745775118, 1913546254, 1611555342, 1544445454, 1477335566, 1410225678, 1343115790, 1276005902, 1208896014, 1141786126,
- 1074676238, 1007566350, 940456462, 873346574, 806236686, 739126798, 672016910, 1712268814, 537797134, 470687246, 403577358, 336467470, 269357582, 202247694, 135137806, 68027918, 918030, 4228775437,
- 4161665549, 4094555661, 4027445773, 3960335885, 3893225997, 3826116109, 3759006221, 3691896333, 3624786445, 3557676557, 3490566669, 3423456781, 3356346893, 3289237005, 3222127117, 3155017229,
- 3087907341, 3020797453, 2953687565, 2886577677, 2819467789, 2752357901, 2685248013, 2618138125, 2551028237, 2483918349, 2416808461, 2349698573, 2282588685, 2215478797, 2148368909, 2081259021,
- 2014149133, 1947039245, 1879929357, 1812819469, 1745709581, 1678599693, 1611489805, 1544379917, 1477270029, 1410160141, 1343050253, 1275940365, 1208830477, 1141720589, 1074610701, 1007500813,
- 940390925, 873281037, 806171149, 739061261, 671951373, 604841485, 537731597, 470621709, 403511821, 336401933, 269292045, 202182157, 135072269, 67962381, 852493, 4228709900, 4161600012, 4094490124,
- 4027380236, 3960270348, 3893160460, 3826050572, 3758940684, 3691830796, 3624720908, 3557611020, 3490501132, 3423391244, 3356281356, 3289171468, 3222061580, 3154951692, 3087841804, 3020731916,
- 2953622028, 2886512140, 2819402252, 2752292364, 2685182476, 2618072588, 2550962700, 2483852812, 2416742924, 2349633036, 2282523148, 2215413260, 2148303372, 2081193484, 2014083596, 1946973708,
- 1879863820, 1812753932, 1745644044, 1678534156, 1611424268, 1544314380, 1477204492, 1410094604, 1342984716, 1275874828, 1208764940, 1141655052, 1074545164, 1007435276, 940325388, 873215500,
- 806105612, 738995724, 671885836, 604775948, 537666060, 470556172, 403446284, 336336396, 269226508, 202116620, 135006732, 67896844, 786956, 4228644363, 4161534475, 4094424587, 4027314699,
- 3960204811, 3893094923, 3825985035, 3758875147, 3691765259, 3624655371, 3557545483, 3490435595, 3423325707, 3356215819, 3289105931, 3221996043, 3154886155, 3087776267, 3020666379, 2953556491,
- 2886446603, 2819336715, 2752226827, 2685116939, 2618007051, 2550897163, 2483787275, 2416677387, 2349567499, 2282457611, 2215347723, 2148237835, 2081127947, 2014018059, 1946908171, 1879798283,
- 1812688395, 1745578507, 1678468619, 1611358731, 1544248843, 1477138955, 1410029067, 1342919179, 1275809291, 1208699403, 1141589515, 1074479627, 1007369739, 940259851, 873149963, 806040075,
- 738930187, 671820299, 604710411, 537600523, 470490635, 403380747, 336270859, 269160971, 202051083, 134941195, 67831307, 721419, 4228578826, 4161468938, 4094359050, 4027249162, 3960139274,
- 3893029386, 3825919498, 3758809610, 3691699722, 3624589834, 3557479946, 3490370058, 3423260170, 3356150282, 3289040394, 3221930506, 3154820618, 3087710730, 3020600842, 2953490954, 2886381066,
- 2819271178, 2752161290, 2685051402, 2617941514, 2550831626, 2483721738, 2416611850, 2349501962, 2282392074, 2215282186, 2148172298, 2081062410, 2013952522, 1946842634, 1879732746, 1812622858,
- 1745512970, 1678403082, 1611293194, 1544183306, 1477073418, 1409963530, 1342853642, 1275743754, 1208633866, 1141523978, 1074414090, 1007304202, 940194314, 873084426, 805974538, 738864650,
- 671754762, 604644874, 537534986, 470425098, 403315210, 336205322, 269095434, 201985546, 134875658, 67765770, 655882, 4228513289, 4161403401, 4094293513, 4027183625, 3960073737, 3892963849,
- 3825853961, 3758744073, 3691634185, 3624524297, 3557414409, 3490304521, 3423194633, 3356084745, 3288974857, 3221864969, 3154755081, 3087645193, 3020535305, 2953425417, 2886315529, 2819205641,
- 2752095753, 2684985865, 2617875977, 2550766089, 2483656201, 2416546313, 2349436425, 2282326537, 2215216649, 2148106761, 2080996873, 2013886985, 1946777097, 1879667209, 1812557321, 1745447433,
- 1678337545, 1611227657, 1544117769, 1477007881, 1409897993, 1342788105, 1275678217, 1208568329, 1141458441, 1074348553, 1007238665, 940128777, 873018889, 805909001, 738799113, 671689225, 604579337,
- 537469449, 470359561, 403249673, 336139785, 269029897, 201920009, 134810121, 67700233, 590345, 4228447752, 4161337864, 4094227976, 4027118088, 3960008200, 3892898312, 3825788424, 3758678536,
- 3691568648, 3624458760, 3557348872, 3490238984, 3423129096, 3356019208, 3288909320, 3221799432, 3154689544, 3087579656, 3020469768, 2953359880, 2886249992, 2819140104, 2752030216, 2684920328,
- 2617810440, 2550700552, 2483590664, 2416480776, 2349370888, 2282261000, 2215151112, 2148041224, 2080931336, 2013821448, 1946711560, 1879601672, 1812491784, 1745381896, 1678272008, 1611162120,
- 1544052232, 1476942344, 1409832456, 1342722568, 1275612680, 1208502792, 1141392904, 1074283016, 1007173128, 940063240, 872953352, 805843464, 738733576, 671623688, 604513800, 537403912, 470294024,
- 403184136, 336074248, 268964360, 201854472, 134744584, 67634696, 524808, 4228382215, 4161272327, 4094162439, 4027052551, 3959942663, 3892832775, 3825722887, 3758612999, 3691503111, 3624393223,
- 3557283335, 3490173447, 3423063559, 3355953671, 3288843783, 3221733895, 3154624007, 3087514119, 3020404231, 2953294343, 2886184455, 2819074567, 2751964679, 2684854791, 2617744903, 2550635015,
- 2483525127, 2416415239, 2349305351, 2282195463, 2215085575, 2147975687, 2080865799, 2013755911, 1946646023, 1879536135, 1812426247, 1745316359, 1678206471, 1611096583, 1543986695, 1476876807,
- 1409766919, 1342657031, 1275547143, 1208437255, 1141327367, 1074217479, 1007107591, 939997703, 872887815, 805777927, 738668039, 671558151, 604448263, 537338375, 470228487, 403118599, 336008711,
- 268898823, 201788935, 134679047, 67569159, 459271, 4228316678, 4161206790, 4094096902, 4026987014, 3959877126, 3892767238, 3825657350, 3758547462, 3691437574, 3624327686, 3557217798, 3490107910,
- 3422998022, 3355888134, 3288778246, 3221668358, 3154558470, 3087448582, 3020338694, 2953228806, 2886118918, 2819009030, 2751899142, 2684789254, 2617679366, 2550569478, 2483459590, 2416349702,
- 2349239814, 2282129926, 2215020038, 2147910150, 2080800262, 2013690374, 1946580486, 1879470598, 1812360710, 1745250822, 1678140934, 1611031046, 1543921158, 1476811270, 1409701382, 1342591494,
- 1275481606, 1208371718, 1141261830, 1074151942, 1007042054, 939932166, 872822278, 805712390, 738602502, 671492614, 604382726, 537272838, 470162950, 403053062, 335943174, 268833286, 201723398,
- 134613510, 67503622, 393734, 4228251141, 4161141253, 4094031365, 4026921477, 3959811589, 3892701701, 3825591813, 3758481925, 3691372037, 3624262149, 3557152261, 3490042373, 3422932485, 3355822597,
- 3288712709, 3221602821, 3154492933, 3087383045, 3020273157, 2953117696, 4026904069, 2818943493, 537306629, 2684690438, 2617613829, 2550503941, 134649349, 939919366, 637936134, 403063302, 34075142,
- 1611012614, 3154491909, 3120936965, 2080799750, 3490022406, 3490022405, 2919673349, 3724926469, 3825547782, 2416283653, 1946526214, 2147845637, 2114287109, 1309044741, 1879385094, 1409642501,
- 1879500805, 1644533765, 1476770309, 2382729221, 2248529413, 2651236870, 2651239941, 2449897989, 2483460614, 2047242758, 1946579974, 1812363782, 3490026501, 3389377029, 805710854, 604385286,
- 637937158, 3053782021, 2751833605, 973513221, 805710854, 604384262, 604381190, 3120917509, 772207620, 1040524293, 2684723205, 2516951045, 2483396101, 2617613317, 1208306181, 1980078085, 1007083525,
- 738600454, 436606469, 772205061, 4093974534, 67438085, 872743429, 235275269, 2114289157, 3892683269, 2751783941, 2718212612, 3859128324, 1241837061, 2181399557, 2080740356, 1208240644, 839136260,
- 939819012, 3053828612, 2248509957, 2550494725, 3892614661, 28164, 0, 0, 0, 0, 0, 0, 51717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53763, 0, 0, 0,
- 0, 0, 0, 0, 168034304, 2952986624, 0, 41476, 14852, 2818876420, 470024192, 0, 37380, 335812612, 0, 3087251459, 0, 14851, 13315, 0, 201588736, 3076, 27651, 0, 3053649920, 29699, 0, 48131, 0, 0, 0,
- 2281935876, 35843, 906231808, 3724792835, 0, 16900, 43523, 1040449536, 1812163587, 872611840, 0, 26115, 55810, 50178, 0, 0, 35843, 3053584384, 0, 0, 0, 4161010691, 0, 21507, 0, 0, 54787, 0, 0,
- 31747, 18947, 0, 1946353664, 2248278016, 0, 0, 0, 0, 2080571392, 2114125824, 0, 2181234688, 3389194240, 59394, 31235, 30723, 1140998658, 3187802112, 0, 0, 26627, 26115, 25603, 1979867651,
- 1577254912, 0, 32259, 0, 0, 0, 0, 0, 0, 1644298240, 0, 0, 2650931200, 40450, 0, 0, 0, 0, 0, 0, 1745027072, 0, 0, 4160880640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18946, 0, 0, 0, 4194435072, 0, 0, 0, 0,
- 0, 0, 40450, 1879113728, 1845559296, 1711341568, 1543569408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2684354560, 2617281536, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13825, 0, 50332160, 83887104, 117442048, 335549184, 369104128,
- 402659072, 436214016, 469768960, 503323904, 536878848, 570433792, 603988736, 637543680, 671098624, 704653568, 738208512, 771763456, 805318400, 838873344, 2701169152, 2365688833, 2466352641,
- 2533463041, 2583795969, 2734792449, 2919345409, 3204558593, 3305227265, 3338782209, 3372337153, 3422669313, 3456224513, 3523334401, 3607220993, 3640776705, 3724663297, 3909215489, 4026658561,
- 4160878337, 167904002, 436344834, 637672962, 822226946, 939668226, 973224194, 1073888770, 1191331330, 1258440706, 1291996162, 1375882754, 1426215682, 1510102786, 2013426178, 2097314306, 2231533570,
- 2265089538, 2298644482, 2332199426, 2466417666, 2600637442, 2718080002, 2919409922, 3238182402, 3439511042, 3674394370, 3825393154, 3858949378, 3892504322, 3926059266, 3959614210, 3993169154,
- 257794, 84083203, 134415875, 235080963, 268635907, 436410371, 671292163, 721627651, 755182595, 990064387, 1040399619, 1090731779, 1224950531, 1409504003, 1443058947, 1476613891, 1594055171,
- 1644388611, 1912826883, 2047047171, 2097380355, 2130935299, 2248376323, 2567146499, 3708005379, 3825459971, 3859014915, 3892569859, 3993233667, 369422851, 1678009092, 2533655044, 2701433092,
- 2818877188, 3120870148, 3322201348, 3422865668, 3540307716, 3842300932, 4177849604, 251985925, 688203525, 889532421, 973420293, 3072, 1885929472, 0, 3355967488, 536870912, 553648128, 16777216,
- 570425344, 570425344, 838860800, 587202560, 620756992, 50331648, 637534208, 637534208, 838860800, 654311424, 654311424, 838860800, 671088640, 671088640, 838860800, 687865856, 687865856, 838860800,
- 704643072, 721420288, 100663296, 738197504, 738197504, 838860800, 754974720, 754974720, 134217728, 771751936, 771751936, 838860800, 788529152, 788529152, 838860800, 805306368, 956301312, 150994944,
- 973078528, 973078528, 838860800, 989855744, 989855744, 838860800, 1006632960, 1509949440, 318767104, 1526726656, 1526726656, 838860800, 1543503872, 1543503872, 838860800, 1560281088, 1560281088,
- 838860800, 1577058304, 1577058304, 838860800, 1593835520, 1593835520, 838860800, 1610612736, 1610612736, 838860800, 1627389952, 1627389952, 402653184, 1644167168, 1644167168, 419430400, 1660944384,
- 1660944384, 436207616, 1677721600, 1677721600, 452984832, 1694498816, 1694498816, 469762048, 1711276032, 1711276032, 486539264, 1728053248, 1728053248, 503316480, 1744830464, 1744830464, 520093696,
- 1761607680, 1761607680, 536870912, 1778384896, 1778384896, 553648128, 1795162112, 1795162112, 570425344, 1811939328, 1811939328, 587202560, 1828716544, 1828716544, 603979776, 1845493760,
- 1845493760, 620756992, 1862270976, 1862270976, 637534208, 1879048192, 1879048192, 654311424, 1895825408, 1895825408, 671088640, 1912602624, 1912602624, 687865856, 1929379840, 1929379840, 704643072,
- 1946157056, 1946157056, 721420288, 1962934272, 1962934272, 738197504, 1979711488, 1979711488, 754974720, 1996488704, 1996488704, 771751936, 2013265920, 2013265920, 788529152, 2030043136,
- 2030043136, 805306368, 2046820352, 2046820352, 822083584, 2063597568, 2063597568, 838860800, 2080374784, 2080374784, 838860800, 2097152000, 2097152000, 838860800, 2113929216, 2113929216, 838860800,
- 2130706432, 2130706432, 838860800, 2147483648, 2147483648, 838860800, 2164260864, 2164260864, 838860800, 2181038080, 2181038080, 838860800, 2197815296, 2197815296, 838860800, 2214592512,
- 2214592512, 838860800, 2231369728, 2231369728, 838860800, 2248146944, 2248146944, 838860800, 2264924160, 2264924160, 838860800, 2281701376, 2281701376, 838860800, 2298478592, 2298478592, 838860800,
- 2315255808, 2315255808, 838860800, 2332033024, 2332033024, 838860800, 2348810240, 2348810240, 838860800, 2365587456, 2365587456, 838860800, 2382364672, 2382364672, 838860800, 2399141888,
- 2399141888, 838860800, 2415919104, 2415919104, 838860800, 2432696320, 2432696320, 838860800, 2449473536, 2449473536, 838860800, 2466250752, 2466250752, 838860800, 2483027968, 2483027968, 838860800,
- 2499805184, 2499805184, 838860800, 2516582400, 2516582400, 838860800, 2533359616, 2533359616, 838860800, 2550136832, 2550136832, 838860800, 2566914048, 2566914048, 838860800, 2583691264,
- 2583691264, 838860800, 2600468480, 2600468480, 838860800, 2617245696, 2617245696, 838860800, 2634022912, 2634022912, 838860800, 2650800128, 2650800128, 838860800, 2667577344, 2667577344, 838860800,
- 2684354560, 2684354560, 838860800, 2701131776, 2701131776, 838860800, 2717908992, 2717908992, 838860800, 2734686208, 2734686208, 2248278016, 2751463424, 2751463424, 838860800, 2768240640,
- 2768240640, 2281832448, 2785017856, 2785017856, 838860800, 2801795072, 2801795072, 838860800, 2818572288, 2818572288, 838860800, 2835349504, 2835349504, 3473014784, 2852126720, 2852126720,
- 838860800, 2868903936, 2868903936, 1191313408, 2885681152, 2885681152, 838860800, 2902458368, 2902458368, 838860800, 2919235584, 2919235584, 251854848, 2936012800, 2936012800, 838860800,
- 2952790016, 2952790016, 838860800, 2969567232, 2969567232, 838860800, 2986344448, 2986344448, 838860800, 3003121664, 3003121664, 838860800, 3019898880, 3019898880, 838860800, 3036676096,
- 3036676096, 838860800, 3053453312, 3053453312, 3238133760, 3070230528, 3070230528, 838860800, 3087007744, 3087007744, 838860800, 3103784960, 3103784960, 838860800, 3120562176, 3120562176,
- 838860800, 3137339392, 3137339392, 1208090624, 3154116608, 3154116608, 838860800, 3170893824, 3170893824, 838860800, 3187671040, 3187671040, 838860800, 3204448256, 3204448256, 838860800,
- 3221225472, 3221225472, 838860800, 3238002688, 3238002688, 838860800, 3254779904, 3254779904, 838860800, 3271557120, 3271557120, 838860800, 3288334336, 3288334336, 838860800, 3305111552,
- 3305111552, 838860800, 3321888768, 3321888768, 838860800, 3338665984, 3338665984, 838860800, 3355443200, 3355443200, 838860800, 3372220416, 3372220416, 838860800, 3388997632, 3388997632, 838860800,
- 3405774848, 3405774848, 838860800, 3422552064, 3422552064, 838860800, 3439329280, 3439329280, 838860800, 3456106496, 3456106496, 838860800, 3472883712, 3472883712, 838860800, 3489660928,
- 3489660928, 838860800, 3506438144, 3506438144, 838860800, 3523215360, 3523215360, 838860800, 3539992576, 3539992576, 838860800, 3556769792, 3556769792, 838860800, 3573547008, 3573547008, 838860800,
- 3590324224, 3590324224, 838860800, 3607101440, 3607101440, 2483093504, 3623878656, 3623878656, 838860800, 3640655872, 3640655872, 838860800, 3657433088, 3657433088, 838860800, 3674210304,
- 3674210304, 838860800, 3690987520, 3690987520, 838860800, 3707764736, 3707764736, 838860800, 3724541952, 3724541952, 838860800, 3741319168, 3741319168, 838860800, 3758096384, 3758096384, 838860800,
- 3774873600, 3774873600, 838860800, 3791650816, 3791650816, 838860800, 3808428032, 3808428032, 838860800, 3825205248, 3825205248, 838860800, 3841982464, 3841982464, 838860800, 3858759680,
- 3858759680, 838860800, 3875536896, 3875536896, 838860800, 3892314112, 3892314112, 838860800, 3909091328, 3909091328, 838860800, 3925868544, 3925868544, 838860800, 3942645760, 3942645760, 838860800,
- 3959422976, 3959422976, 838860800, 3976200192, 3976200192, 838860800, 3992977408, 3992977408, 838860800, 4009754624, 4009754624, 838860800, 4026531840, 4026531840, 838860800, 4043309056,
- 4043309056, 838860800, 4060086272, 4060086272, 838860800, 4076863488, 4076863488, 838860800, 4093640704, 4093640704, 838860800, 4110417920, 4110417920, 838860800, 4127195136, 4127195136, 838860800,
- 4143972352, 4143972352, 3909287936, 4160749568, 4160749568, 838860800, 4177526784, 4177526784, 838860800, 4194304000, 4194304000, 838860800, 4211081216, 4211081216, 838860800, 4227858432,
- 4227858432, 838860800, 4244635648, 4244635648, 838860800, 4261412864, 4261412864, 838860800, 4278190080, 4278190080, 838860800, 65536, 65536, 838860800, 16842752, 16842752, 838860800, 33619968,
- 33619968, 838860800, 50397184, 50397184, 838860800, 67174400, 67174400, 838860800, 83951616, 83951616, 838860800, 100728832, 100728832, 838860800, 117506048, 117506048, 838860800, 134283264,
- 134283264, 838860800, 151060480, 151060480, 838860800, 167837696, 167837696, 838860800, 184614912, 184614912, 838860800, 201392128, 201392128, 838860800, 218169344, 218169344, 838860800, 234946560,
- 234946560, 838860800, 251723776, 251723776, 838860800, 268500992, 268500992, 838860800, 285278208, 285278208, 838860800, 302055424, 302055424, 838860800, 318832640, 318832640, 838860800, 335609856,
- 335609856, 838860800, 352387072, 352387072, 838860800, 369164288, 369164288, 838860800, 385941504, 385941504, 838860800, 402718720, 402718720, 838860800, 419495936, 419495936, 838860800, 436273152,
- 436273152, 838860800, 453050368, 453050368, 838860800, 469827584, 469827584, 838860800, 486604800, 486604800, 838860800, 503382016, 503382016, 838860800, 520159232, 520159232, 838860800, 536936448,
- 536936448, 838860800, 553713664, 553713664, 838860800, 570490880, 570490880, 838860800, 587268096, 587268096, 838860800, 604045312, 604045312, 838860800, 620822528, 620822528, 838860800, 637599744,
- 637599744, 838860800, 654376960, 654376960, 838860800, 671154176, 671154176, 838860800, 687931392, 687931392, 838860800, 704708608, 704708608, 838860800, 721485824, 721485824, 838860800, 738263040,
- 738263040, 838860800, 755040256, 755040256, 838860800, 771817472, 771817472, 838860800, 788594688, 788594688, 838860800, 805371904, 805371904, 838860800, 822149120, 822149120, 838860800, 838926336,
- 838926336, 838860800, 855703552, 855703552, 838860800, 872480768, 872480768, 838860800, 889257984, 889257984, 838860800, 906035200, 906035200, 838860800, 922812416, 922812416, 838860800, 939589632,
- 939589632, 838860800, 956366848, 956366848, 838860800, 973144064, 973144064, 838860800, 989921280, 989921280, 838860800, 1006698496, 1006698496, 838860800, 1023475712, 1023475712, 838860800,
- 1040252928, 1040252928, 838860800, 1057030144, 1057030144, 838860800, 1073807360, 1073807360, 838860800, 1090584576, 1090584576, 838860800, 1107361792, 1107361792, 838860800, 1124139008,
- 1124139008, 838860800, 1140916224, 1140916224, 838860800, 1157693440, 1157693440, 838860800, 1174470656, 1174470656, 838860800, 1191247872, 1191247872, 838860800, 1208025088, 1208025088, 838860800,
- 1224802304, 1224802304, 838860800, 1241579520, 1241579520, 838860800, 1258356736, 1258356736, 838860800, 1275133952, 1275133952, 838860800, 1291911168, 1291911168, 838860800, 1308688384,
- 1308688384, 838860800, 1325465600, 1325465600, 838860800, 1342242816, 1342242816, 838860800, 1359020032, 1359020032, 838860800, 1375797248, 1375797248, 838860800, 1392574464, 1392574464, 838860800,
- 1409351680, 1409351680, 838860800, 1426128896, 1426128896, 838860800, 1442906112, 1442906112, 838860800, 1459683328, 1459683328, 838860800, 1476460544, 1476460544, 838860800, 1493237760,
- 1493237760, 838860800, 1510014976, 1510014976, 838860800, 1526792192, 1526792192, 838860800, 1543569408, 1543569408, 838860800, 1560346624, 1560346624, 838860800, 1577123840, 1577123840, 838860800,
- 1593901056, 1593901056, 838860800, 1610678272, 1610678272, 838860800, 1627455488, 1627455488, 838860800, 1644232704, 1644232704, 838860800, 1661009920, 1661009920, 838860800, 1677787136,
- 1677787136, 838860800, 1694564352, 1694564352, 838860800, 1711341568, 1711341568, 838860800, 1728118784, 1728118784, 838860800, 1744896000, 1744896000, 838860800, 1761673216, 1761673216, 838860800,
- 1778450432, 1778450432, 838860800, 1795227648, 1795227648, 838860800, 1812004864, 1812004864, 838860800, 1828782080, 1828782080, 838860800, 1845559296, 1845559296, 838860800, 1862336512,
- 1862336512, 838860800, 1879113728, 1879113728, 838860800, 1895890944, 1895890944, 838860800, 1912668160, 1912668160, 838860800, 1929445376, 1929445376, 838860800, 1946222592, 1946222592, 838860800,
- 1962999808, 1962999808, 838860800, 1979777024, 1979777024, 838860800, 1996554240, 1996554240, 838860800, 2013331456, 2013331456, 838860800, 2030108672, 2030108672, 838860800, 2046885888,
- 2046885888, 838860800, 2063663104, 2063663104, 838860800, 2080440320, 2080440320, 838860800, 2097217536, 2097217536, 838860800, 2113994752, 2113994752, 838860800, 2130771968, 2130771968, 838860800,
- 2147549184, 2147549184, 838860800, 2164326400, 2164326400, 838860800, 2181103616, 2181103616, 838860800, 2197880832, 2197880832, 838860800, 2214658048, 2214658048, 838860800, 2231435264,
- 2231435264, 838860800, 2248212480, 2248212480, 838860800, 2264989696, 2264989696, 838860800, 2281766912, 2281766912, 838860800, 2298544128, 2298544128, 838860800, 2315321344, 2315321344, 838860800,
- 2332098560, 2332098560, 838860800, 2348875776, 2348875776, 838860800, 2365652992, 2365652992, 838860800, 2382430208, 2382430208, 838860800, 2399207424, 2399207424, 838860800, 2415984640,
- 2415984640, 838860800, 2432761856, 2432761856, 838860800, 2449539072, 2449539072, 838860800, 2466316288, 2466316288, 838860800, 2483093504, 2483093504, 838860800, 2499870720, 2499870720, 838860800,
- 2516647936, 2516647936, 838860800, 2533425152, 2533425152, 838860800, 2550202368, 2550202368, 838860800, 2566979584, 2566979584, 838860800, 2583756800, 2583756800, 838860800, 2600534016,
- 2600534016, 838860800, 2617311232, 2617311232, 838860800, 2634088448, 2634088448, 838860800, 2650865664, 2650865664, 838860800, 2667642880, 2667642880, 838860800, 2684420096, 2684420096, 838860800,
- 2701197312, 2701197312, 838860800, 2717974528, 2717974528, 838860800, 2734751744, 2734751744, 838860800, 2751528960, 2751528960, 838860800, 2768306176, 2768306176, 838860800, 2785083392,
- 2785083392, 838860800, 2801860608, 2801860608, 838860800, 2818637824, 2818637824, 838860800, 2835415040, 2835415040, 838860800, 2852192256, 2852192256, 838860800, 2868969472, 2868969472, 838860800,
- 2885746688, 2885746688, 838860800, 2902523904, 2902523904, 838860800, 2919301120, 2919301120, 838860800, 2936078336, 2936078336, 838860800, 2952855552, 2952855552, 838860800, 2969632768,
- 2969632768, 838860800, 2986409984, 2986409984, 838860800, 3003187200, 3003187200, 838860800, 3019964416, 3019964416, 838860800, 3036741632, 3036741632, 838860800, 3053518848, 3053518848, 838860800,
- 3070296064, 3070296064, 838860800, 3087073280, 3087073280, 838860800, 3103850496, 3103850496, 838860800, 3120627712, 3120627712, 838860800, 3137404928, 3137404928, 838860800, 3154182144,
- 3154182144, 838860800, 3170959360, 3170959360, 838860800, 3187736576, 3187736576, 838860800, 3204513792, 3204513792, 838860800, 3221291008, 3221291008, 838860800, 3238068224, 3238068224, 838860800,
- 3254845440, 3254845440, 838860800, 3271622656, 3271622656, 838860800, 3288399872, 3288399872, 838860800, 3305177088, 3305177088, 838860800, 3321954304, 3321954304, 838860800, 3338731520,
- 3338731520, 838860800, 3355508736, 3355508736, 838860800, 3372285952, 3372285952, 838860800, 3389063168, 3389063168, 838860800, 3405840384, 3405840384, 838860800, 3422617600, 3422617600, 838860800,
- 3439394816, 3439394816, 838860800, 3456172032, 3456172032, 838860800, 3472949248, 3472949248, 838860800, 3489726464, 3489726464, 838860800, 3506503680, 3506503680, 838860800, 3523280896,
- 3523280896, 838860800, 3540058112, 3540058112, 838860800, 3556835328, 3556835328, 838860800, 3573612544, 3573612544, 838860800, 3590389760, 3590389760, 838860800, 3607166976, 3607166976, 838860800,
- 3623944192, 3623944192, 838860800, 3640721408, 3640721408, 838860800, 3657498624, 3657498624, 838860800, 3674275840, 3674275840, 838860800, 3691053056, 3691053056, 838860800, 3707830272,
- 3707830272, 838860800, 3724607488, 3724607488, 838860800, 3741384704, 3741384704, 838860800, 3758161920, 3758161920, 838860800, 3774939136, 3774939136, 838860800, 3791716352, 3791716352, 838860800,
- 3808493568, 3808493568, 838860800, 3825270784, 3825270784, 838860800, 3842048000, 3842048000, 838860800, 3858825216, 3858825216, 838860800, 3875602432, 3875602432, 838860800, 3892379648,
- 3892379648, 838860800, 3909156864, 3909156864, 838860800, 3925934080, 3925934080, 838860800, 3942711296, 3942711296, 838860800, 3959488512, 3959488512, 838860800, 3976265728, 3976265728, 838860800,
- 3993042944, 3993042944, 838860800, 4009820160, 4009820160, 838860800, 4026597376, 4026597376, 838860800, 4043374592, 4043374592, 838860800, 4060151808, 4060151808, 838860800, 4076929024,
- 4076929024, 838860800, 4093706240, 4093706240, 838860800, 4110483456, 4110483456, 838860800, 4127260672, 4127260672, 838860800, 4144037888, 4144037888, 838860800, 4160815104, 4160815104, 838860800,
- 4177592320, 4177592320, 838860800, 4194369536, 4194369536, 838860800, 4211146752, 4211146752, 838860800, 4227923968, 4227923968, 838860800, 4244701184, 4244701184, 838860800, 4261478400,
- 4261478400, 838860800, 4278255616, 4278255616, 838860800, 131072, 131072, 838860800, 16908288, 16908288, 838860800, 33685504, 33685504, 838860800, 50462720, 50462720, 838860800, 67239936, 67239936,
- 838860800, 84017152, 84017152, 838860800, 100794368, 100794368, 838860800, 117571584, 117571584, 838860800, 134348800, 134348800, 838860800, 151126016, 151126016, 838860800, 167903232, 167903232,
- 838860800, 184680448, 184680448, 838860800, 201457664, 201457664, 838860800, 218234880, 218234880, 838860800, 235012096, 235012096, 838860800, 251789312, 251789312, 838860800, 268566528, 268566528,
- 838860800, 285343744, 285343744, 838860800, 302120960, 302120960, 838860800, 318898176, 318898176, 838860800, 335675392, 335675392, 838860800, 352452608, 352452608, 838860800, 369229824, 369229824,
- 838860800, 386007040, 386007040, 838860800, 402784256, 402784256, 838860800, 419561472, 419561472, 838860800, 436338688, 436338688, 838860800, 453115904, 453115904, 838860800, 469893120, 469893120,
- 838860800, 486670336, 486670336, 838860800, 503447552, 503447552, 838860800, 520224768, 520224768, 838860800, 537001984, 537001984, 838860800, 553779200, 553779200, 838860800, 570556416, 570556416,
- 838860800, 587333632, 587333632, 838860800, 604110848, 604110848, 838860800, 620888064, 620888064, 838860800, 637665280, 637665280, 838860800, 654442496, 654442496, 838860800, 671219712, 671219712,
- 838860800, 687996928, 687996928, 838860800, 704774144, 704774144, 838860800, 721551360, 721551360, 838860800, 738328576, 738328576, 838860800, 755105792, 755105792, 838860800, 771883008, 771883008,
- 838860800, 788660224, 788660224, 838860800, 805437440, 805437440, 838860800, 822214656, 822214656, 838860800, 838991872, 838991872, 838860800, 855769088, 855769088, 838860800, 872546304, 872546304,
- 838860800, 889323520, 889323520, 838860800, 906100736, 906100736, 838860800, 922877952, 922877952, 838860800, 939655168, 939655168, 838860800, 956432384, 956432384, 838860800, 973209600, 973209600,
- 838860800, 989986816, 989986816, 838860800, 1006764032, 1006764032, 838860800, 1023541248, 1023541248, 838860800, 1040318464, 1040318464, 838860800, 1057095680, 1057095680, 838860800, 1073872896,
- 1073872896, 838860800, 1090650112, 1090650112, 838860800, 1107427328, 1107427328, 838860800, 1124204544, 1124204544, 838860800, 1140981760, 1140981760, 838860800, 1157758976, 1157758976, 838860800,
- 1174536192, 1174536192, 838860800, 1191313408, 1191313408, 838860800, 1208090624, 1208090624, 838860800, 1224867840, 1224867840, 838860800, 1241645056, 1241645056, 838860800, 1258422272,
- 1258422272, 838860800, 1275199488, 1275199488, 838860800, 1291976704, 1291976704, 838860800, 1308753920, 1308753920, 838860800, 1325531136, 1325531136, 838860800, 1342308352, 1342308352, 838860800,
- 1359085568, 1359085568, 838860800, 1375862784, 1375862784, 838860800, 1392640000, 1392640000, 838860800, 1409417216, 1409417216, 838860800, 1426194432, 1426194432, 838860800, 1442971648,
- 1442971648, 838860800, 1459748864, 1459748864, 838860800, 1476526080, 1476526080, 838860800, 1493303296, 1493303296, 838860800, 1510080512, 1510080512, 838860800, 1526857728, 1526857728, 838860800,
- 1543634944, 1543634944, 838860800, 1560412160, 1560412160, 838860800, 1577189376, 1577189376, 838860800, 1593966592, 1593966592, 838860800, 1610743808, 1610743808, 838860800, 1627521024,
- 1627521024, 838860800, 1644298240, 1644298240, 838860800, 1661075456, 1661075456, 838860800, 1677852672, 1677852672, 838860800, 1694629888, 1694629888, 838860800, 1711407104, 1711407104, 838860800,
- 1728184320, 1728184320, 838860800, 1744961536, 1744961536, 838860800, 1761738752, 1761738752, 838860800, 1778515968, 1778515968, 838860800, 1795293184, 1795293184, 838860800, 1812070400,
- 1812070400, 838860800, 1828847616, 1828847616, 838860800, 1845624832, 1845624832, 838860800, 1862402048, 1862402048, 838860800, 1879179264, 1879179264, 838860800, 1895956480, 1895956480, 838860800,
- 1912733696, 1912733696, 838860800, 1929510912, 1929510912, 838860800, 1946288128, 1946288128, 838860800, 1963065344, 1963065344, 838860800, 1979842560, 1979842560, 838860800, 1996619776,
- 1996619776, 838860800, 2013396992, 2013396992, 838860800, 2030174208, 2030174208, 838860800, 2046951424, 2046951424, 838860800, 2063728640, 2063728640, 838860800, 2080505856, 2080505856, 838860800,
- 2097283072, 2097283072, 838860800, 2114060288, 2114060288, 838860800, 2130837504, 2130837504, 838860800, 2147614720, 2147614720, 838860800, 2164391936, 2164391936, 838860800, 2181169152,
- 2181169152, 838860800, 2197946368, 2197946368, 838860800, 2214723584, 2214723584, 838860800, 2231500800, 2231500800, 838860800, 2248278016, 2248278016, 838860800, 2265055232, 2265055232, 838860800,
- 2281832448, 2281832448, 838860800, 2298609664, 2298609664, 838860800, 2315386880, 2315386880, 838860800, 2332164096, 2332164096, 838860800, 2348941312, 2348941312, 838860800, 2365718528,
- 2365718528, 838860800, 2382495744, 2382495744, 838860800, 2399272960, 2399272960, 838860800, 2416050176, 2416050176, 838860800, 2432827392, 2432827392, 838860800, 2449604608, 2449604608, 838860800,
- 2466381824, 2466381824, 838860800, 2483159040, 2483159040, 838860800, 2499936256, 2499936256, 838860800, 2516713472, 2516713472, 838860800, 2533490688, 2533490688, 838860800, 2550267904,
- 2550267904, 838860800, 2567045120, 2567045120, 838860800, 2583822336, 2583822336, 838860800, 2600599552, 2600599552, 838860800, 2617376768, 2617376768, 838860800, 2634153984, 2634153984, 838860800,
- 2650931200, 2650931200, 838860800, 2667708416, 2667708416, 838860800, 2684485632, 2684485632, 838860800, 2701262848, 2701262848, 838860800, 2718040064, 2718040064, 838860800, 2734817280,
- 2734817280, 838860800, 2751594496, 2751594496, 838860800, 2768371712, 2768371712, 838860800, 2785148928, 2785148928, 838860800, 2801926144, 2801926144, 838860800, 2818703360, 2818703360, 838860800,
- 2835480576, 2835480576, 838860800, 2852257792, 2852257792, 838860800, 2869035008, 2869035008, 838860800, 2885812224, 2885812224, 838860800, 2902589440, 2902589440, 838860800, 2919366656,
- 2919366656, 838860800, 2936143872, 2936143872, 838860800, 2952921088, 2952921088, 838860800, 2969698304, 2969698304, 838860800, 2986475520, 2986475520, 838860800, 3003252736, 3003252736, 838860800,
- 3020029952, 3020029952, 838860800, 3036807168, 3036807168, 838860800, 3053584384, 3053584384, 838860800, 3070361600, 3070361600, 838860800, 3087138816, 3087138816, 838860800, 3103916032,
- 3103916032, 838860800, 3120693248, 3120693248, 838860800, 3137470464, 3137470464, 838860800, 3154247680, 3154247680, 838860800, 3171024896, 3171024896, 838860800, 3187802112, 3187802112, 838860800,
- 3204579328, 3204579328, 838860800, 3221356544, 3221356544, 838860800, 3238133760, 3238133760, 838860800, 3254910976, 3254910976, 838860800, 3271688192, 3271688192, 838860800, 3288465408,
- 3288465408, 838860800, 3305242624, 3305242624, 838860800, 3322019840, 3322019840, 838860800, 3338797056, 3338797056, 838860800, 3355574272, 3355574272, 838860800, 3372351488, 3372351488, 838860800,
- 3389128704, 3389128704, 838860800, 3405905920, 3405905920, 838860800, 3422683136, 3422683136, 838860800, 3439460352, 3439460352, 838860800, 3456237568, 3456237568, 838860800, 3473014784,
- 3473014784, 838860800, 3489792000, 3489792000, 838860800, 3506569216, 3506569216, 838860800, 3523346432, 3523346432, 838860800, 3540123648, 3540123648, 838860800, 3556900864, 3556900864, 838860800,
- 3573678080, 3573678080, 838860800, 3590455296, 3590455296, 838860800, 3607232512, 3607232512, 838860800, 3624009728, 3624009728, 838860800, 3640786944, 3640786944, 838860800, 3657564160,
- 3657564160, 838860800, 3674341376, 3674341376, 838860800, 3691118592, 3691118592, 838860800, 3707895808, 3707895808, 838860800, 3724673024, 3724673024, 838860800, 3741450240, 3741450240, 838860800,
- 3758227456, 3758227456, 838860800, 3775004672, 3775004672, 838860800, 3791781888, 3791781888, 838860800, 3808559104, 3808559104, 838860800, 3825336320, 3825336320, 838860800, 3842113536,
- 3842113536, 838860800, 3858890752, 3858890752, 838860800, 3875667968, 3875667968, 838860800, 3892445184, 3892445184, 838860800, 3909222400, 3909222400, 838860800, 3925999616, 3925999616, 838860800,
- 3942776832, 3942776832, 838860800, 3959554048, 3959554048, 838860800, 3976331264, 3976331264, 838860800, 3993108480, 3993108480, 838860800, 4009885696, 4009885696, 838860800, 4026662912,
- 4026662912, 838860800, 4043440128, 4043440128, 838860800, 4060217344, 4060217344, 838860800, 4076994560, 4076994560, 838860800, 4093771776, 4093771776, 838860800, 4110548992, 4110548992, 838860800,
- 4127326208, 4127326208, 838860800, 4144103424, 4144103424, 838860800, 4160880640, 4160880640, 838860800, 4177657856, 4177657856, 838860800, 4194435072, 4194435072, 838860800, 4211212288,
- 4211212288, 838860800, 4227989504, 4227989504, 838860800, 4244766720, 4244766720, 838860800, 4261543936, 4261543936, 838860800, 4278321152, 4278321152, 838860800, 196608, 196608, 838860800,
- 16973824, 16973824, 838860800, 33751040, 33751040, 838860800, 50528256, 50528256, 838860800, 67305472, 67305472, 838860800, 84082688, 84082688, 838860800, 100859904, 100859904, 838860800,
- 117637120, 117637120, 838860800, 134414336, 134414336, 838860800, 151191552, 151191552, 838860800, 167968768, 167968768, 838860800, 184745984, 184745984, 838860800, 201523200, 201523200, 838860800,
- 218300416, 218300416, 838860800, 235077632, 235077632, 838860800, 251854848, 251854848, 838860800, 268632064, 268632064, 838860800, 285409280, 285409280, 838860800, 302186496, 302186496, 838860800,
- 318963712, 318963712, 838860800, 335740928, 335740928, 838860800, 352518144, 352518144, 838860800, 369295360, 369295360, 838860800, 386072576, 386072576, 838860800, 402849792, 402849792, 838860800,
- 419627008, 419627008, 838860800, 436404224, 436404224, 838860800, 453181440, 453181440, 838860800, 469958656, 469958656, 838860800, 486735872, 486735872, 838860800, 503513088, 503513088, 838860800,
- 520290304, 520290304, 838860800, 537067520, 537067520, 838860800, 553844736, 553844736, 838860800, 570621952, 570621952, 838860800, 587399168, 587399168, 838860800, 604176384, 604176384, 838860800,
- 620953600, 620953600, 838860800, 637730816, 637730816, 838860800, 654508032, 654508032, 838860800, 671285248, 671285248, 838860800, 688062464, 688062464, 838860800, 704839680, 704839680, 838860800,
- 721616896, 721616896, 838860800, 738394112, 738394112, 838860800, 755171328, 755171328, 838860800, 771948544, 771948544, 838860800, 788725760, 788725760, 838860800, 805502976, 805502976, 838860800,
- 822280192, 822280192, 838860800, 839057408, 839057408, 838860800, 855834624, 855834624, 838860800, 872611840, 872611840, 838860800, 889389056, 889389056, 838860800, 906166272, 906166272, 838860800,
- 922943488, 922943488, 838860800, 939720704, 939720704, 838860800, 956497920, 956497920, 838860800, 973275136, 973275136, 838860800, 990052352, 990052352, 838860800, 1006829568, 1006829568,
- 838860800, 1023606784, 1023606784, 838860800, 1040384000, 1040384000, 838860800, 1057161216, 1057161216, 838860800, 1073938432, 1073938432, 838860800, 1090715648, 1090715648, 838860800, 1107492864,
- 1107492864, 838860800, 1124270080, 1124270080, 838860800, 1141047296, 1141047296, 838860800, 1157824512, 1157824512, 838860800, 1174601728, 1174601728, 838860800, 1191378944, 1191378944, 838860800,
- 1208156160, 1208156160, 838860800, 1224933376, 1224933376, 838860800, 1241710592, 1241710592, 838860800, 1258487808, 1258487808, 838860800, 1275265024, 1275265024, 838860800, 1292042240,
- 1292042240, 838860800, 1308819456, 1308819456, 838860800, 1325596672, 1325596672, 838860800, 1342373888, 1342373888, 838860800, 1359151104, 1359151104, 838860800, 1375928320, 1375928320, 838860800,
- 1392705536, 1392705536, 838860800, 1409482752, 1409482752, 838860800, 1426259968, 1426259968, 838860800, 1443037184, 1443037184, 838860800, 1459814400, 1459814400, 838860800, 1476591616,
- 1476591616, 838860800, 1493368832, 1493368832, 838860800, 1510146048, 1510146048, 838860800, 1526923264, 1526923264, 838860800, 1543700480, 1543700480, 838860800, 1560477696, 1560477696, 838860800,
- 1577254912, 1577254912, 838860800, 1594032128, 1594032128, 838860800, 1610809344, 1610809344, 838860800, 1627586560, 1627586560, 838860800, 1644363776, 1644363776, 838860800, 1661140992,
- 1661140992, 838860800, 1677918208, 1677918208, 838860800, 1694695424, 1694695424, 838860800, 1711472640, 1711472640, 838860800, 1728249856, 1728249856, 838860800, 1745027072, 1745027072, 838860800,
- 1761804288, 1761804288, 838860800, 1778581504, 1778581504, 838860800, 1795358720, 1795358720, 838860800, 1812135936, 1812135936, 838860800, 1828913152, 1828913152, 838860800, 1845690368,
- 1845690368, 838860800, 1862467584, 1862467584, 838860800, 1879244800, 1879244800, 838860800, 1896022016, 1896022016, 838860800, 1912799232, 1912799232, 838860800, 1929576448, 1929576448, 838860800,
- 1946353664, 1946353664, 838860800, 1963130880, 1963130880, 838860800, 1979908096, 1979908096, 838860800, 1996685312, 1996685312, 838860800, 2013462528, 2013462528, 838860800, 2030239744,
- 2030239744, 838860800, 2047016960, 2047016960, 838860800, 2063794176, 2063794176, 838860800, 2080571392, 2080571392, 838860800, 2097348608, 2097348608, 838860800, 2114125824, 2114125824, 838860800,
- 2130903040, 2130903040, 838860800, 2147680256, 2147680256, 838860800, 2164457472, 2164457472, 838860800, 2181234688, 2181234688, 838860800, 2198011904, 2198011904, 838860800, 2214789120,
- 2214789120, 838860800, 2231566336, 2231566336, 838860800, 2248343552, 2248343552, 838860800, 2265120768, 2265120768, 838860800, 2281897984, 2281897984, 838860800, 2298675200, 2298675200, 838860800,
- 2315452416, 2315452416, 838860800, 2332229632, 2332229632, 838860800, 2349006848, 2349006848, 838860800, 2365784064, 2365784064, 838860800, 2382561280, 2382561280, 838860800, 2399338496,
- 2399338496, 838860800, 2416115712, 2416115712, 838860800, 2432892928, 2432892928, 838860800, 2449670144, 2449670144, 838860800, 2466447360, 2466447360, 838860800, 2483224576, 2483224576, 838860800,
- 2500001792, 2500001792, 838860800, 2516779008, 2516779008, 838860800, 2533556224, 2533556224, 838860800, 2550333440, 2550333440, 838860800, 2567110656, 2567110656, 838860800, 2583887872,
- 2583887872, 838860800, 2600665088, 2600665088, 838860800, 2617442304, 2617442304, 838860800, 2634219520, 2634219520, 838860800, 2650996736, 2650996736, 838860800, 2667773952, 2667773952, 838860800,
- 2684551168, 2684551168, 838860800, 2701328384, 2701328384, 838860800, 2718105600, 2718105600, 838860800, 2734882816, 2734882816, 838860800, 2751660032, 2751660032, 838860800, 2768437248,
- 2768437248, 838860800, 2785214464, 2785214464, 838860800, 2801991680, 2801991680, 838860800, 2818768896, 2818768896, 838860800, 2835546112, 2835546112, 838860800, 2852323328, 2852323328, 838860800,
- 2869100544, 2869100544, 838860800, 2885877760, 2885877760, 838860800, 2902654976, 2902654976, 838860800, 2919432192, 2919432192, 838860800, 2936209408, 2936209408, 838860800, 2952986624,
- 2952986624, 838860800, 2969763840, 2969763840, 838860800, 2986541056, 2986541056, 838860800, 3003318272, 3003318272, 838860800, 3020095488, 3020095488, 838860800, 3036872704, 3036872704, 838860800,
- 3053649920, 3053649920, 838860800, 3070427136, 3070427136, 838860800, 3087204352, 3087204352, 838860800, 3103981568, 3103981568, 838860800, 3120758784, 3120758784, 838860800, 3137536000,
- 3137536000, 838860800, 3154313216, 3154313216, 838860800, 3171090432, 3171090432, 838860800, 3187867648, 3187867648, 838860800, 3204644864, 3204644864, 838860800, 3221422080, 3221422080, 838860800,
- 3238199296, 3238199296, 838860800, 3254976512, 3254976512, 838860800, 3271753728, 3271753728, 838860800, 3288530944, 3288530944, 838860800, 3305308160, 3305308160, 838860800, 3322085376,
- 3322085376, 838860800, 3338862592, 3338862592, 838860800, 3355639808, 3355639808, 838860800, 3372417024, 3372417024, 838860800, 3389194240, 3389194240, 838860800, 3405971456, 3405971456, 838860800,
- 3422748672, 3422748672, 838860800, 3439525888, 3439525888, 838860800, 3456303104, 3456303104, 838860800, 3473080320, 3473080320, 838860800, 3489857536, 3489857536, 838860800, 3506634752,
- 3506634752, 838860800, 3523411968, 3523411968, 838860800, 3540189184, 3540189184, 838860800, 3556966400, 3556966400, 838860800, 3573743616, 3573743616, 838860800, 3590520832, 3590520832, 838860800,
- 3607298048, 3607298048, 838860800, 3624075264, 3624075264, 838860800, 3640852480, 3640852480, 838860800, 3657629696, 3657629696, 838860800, 3674406912, 3674406912, 838860800, 3691184128,
- 3691184128, 838860800, 3707961344, 3707961344, 838860800, 3724738560, 3724738560, 838860800, 3741515776, 3741515776, 838860800, 3758292992, 3758292992, 838860800, 3775070208, 3775070208, 838860800,
- 3791847424, 3791847424, 838860800, 3808624640, 3808624640, 838860800, 3825401856, 3825401856, 838860800, 3842179072, 3842179072, 838860800, 3858956288, 3858956288, 838860800, 3875733504,
- 3875733504, 838860800, 3892510720, 3892510720, 838860800, 3909287936, 3909287936, 838860800, 3926065152, 3926065152, 838860800, 3942842368, 3942842368, 838860800, 3959619584, 3959619584, 838860800,
- 3976396800, 3976396800, 838860800, 3993174016, 3993174016, 838860800, 4009951232, 4009951232, 838860800, 4026728448, 4026728448, 838860800, 4043505664, 4043505664, 838860800, 4060282880,
- 4060282880, 838860800, 4077060096, 4077060096, 838860800, 4093837312, 4093837312, 838860800, 4110614528, 4110614528, 838860800, 4127391744, 4127391744, 838860800, 4144168960, 4144168960, 838860800,
- 4160946176, 4160946176, 838860800, 4177723392, 4177723392, 838860800, 4194500608, 4194500608, 838860800, 4211277824, 4211277824, 838860800, 4228055040, 4228055040, 838860800, 4244832256,
- 4244832256, 838860800, 4261609472, 4261609472, 838860800, 4278386688, 4278386688, 838860800, 262144, 262144, 838860800, 17039360, 17039360, 838860800, 33816576, 33816576, 838860800, 50593792,
- 50593792, 838860800, 67371008, 67371008, 838860800, 84148224, 84148224, 838860800, 100925440, 100925440, 838860800, 117702656, 117702656, 838860800, 134479872, 134479872, 838860800, 151257088,
- 151257088, 838860800, 168034304, 168034304, 838860800, 184811520, 184811520, 838860800, 201588736, 201588736, 838860800, 218365952, 218365952, 838860800, 235143168, 235143168, 838860800, 251920384,
- 251920384, 838860800, 268697600, 268697600, 838860800, 285474816, 285474816, 838860800, 302252032, 302252032, 838860800, 319029248, 319029248, 838860800, 335806464, 335806464, 838860800, 352583680,
- 352583680, 838860800, 369360896, 369360896, 838860800, 386138112, 386138112, 838860800, 402915328, 402915328, 838860800, 419692544, 419692544, 838860800, 436469760, 436469760, 838860800, 453246976,
- 453246976, 838860800, 470024192, 470024192, 838860800, 486801408, 486801408, 838860800, 503578624, 503578624, 838860800, 520355840, 520355840, 838860800, 537133056, 537133056, 838860800, 553910272,
- 553910272, 838860800, 570687488, 570687488, 838860800, 587464704, 587464704, 838860800, 604241920, 604241920, 838860800, 621019136, 621019136, 838860800, 637796352, 637796352, 838860800, 654573568,
- 654573568, 838860800, 671350784, 671350784, 838860800, 688128000, 688128000, 838860800, 704905216, 704905216, 838860800, 721682432, 721682432, 838860800, 738459648, 738459648, 838860800, 755236864,
- 755236864, 838860800, 772014080, 772014080, 838860800, 788791296, 788791296, 838860800, 805568512, 805568512, 838860800, 822345728, 822345728, 838860800, 839122944, 839122944, 838860800, 855900160,
- 855900160, 838860800, 872677376, 872677376, 838860800, 889454592, 889454592, 838860800, 906231808, 906231808, 838860800, 923009024, 923009024, 838860800, 939786240, 939786240, 838860800, 956563456,
- 956563456, 838860800, 973340672, 973340672, 838860800, 990117888, 990117888, 838860800, 1006895104, 1006895104, 838860800, 1023672320, 1023672320, 838860800, 1040449536, 1040449536, 838860800,
- 1057226752, 1057226752, 838860800, 1074003968, 1074003968, 838860800, 1090781184, 1090781184, 838860800, 1107558400, 1107558400, 838860800, 1124335616, 1124335616, 838860800, 1141112832,
- 1141112832, 838860800, 1157890048, 1157890048, 838860800, 1174667264, 1174667264, 838860800, 1191444480, 1191444480, 838860800, 1208221696, 1208221696, 838860800, 1224998912, 1224998912, 838860800,
- 1241776128, 1241776128, 838860800, 1258553344, 1258553344, 838860800, 1275330560, 1275330560, 838860800, 1292107776, 1292107776, 838860800, 1308884992, 1308884992, 838860800, 1325662208,
- 1325662208, 838860800, 1342439424, 1342439424, 838860800, 1359216640, 1359216640, 838860800, 1375993856, 1375993856, 838860800, 1392771072, 1392771072, 838860800, 1409548288, 1409548288, 838860800,
- 1426325504, 1426325504, 838860800, 1443102720, 1443102720, 838860800, 1459879936, 1459879936, 838860800, 1476657152, 1476657152, 838860800, 1493434368, 1493434368, 838860800, 1510211584,
- 1510211584, 838860800, 1526988800, 1526988800, 838860800, 1543766016, 1543766016, 838860800, 1560543232, 1560543232, 838860800, 1577320448, 1577320448, 838860800, 1594097664, 1594097664, 838860800,
- 1610874880, 1610874880, 838860800, 1627652096, 1627652096, 838860800, 1644429312, 1644429312, 838860800, 1661206528, 1661206528, 838860800, 1677983744, 1677983744, 838860800, 1694760960,
- 1694760960, 838860800, 1711538176, 1711538176, 838860800, 1728315392, 1728315392, 838860800, 1745092608, 1745092608, 838860800, 1761869824, 1761869824, 838860800, 1778647040, 1778647040, 838860800,
- 1795424256, 1795424256, 838860800, 1812201472, 1812201472, 838860800, 1828978688, 1828978688, 838860800, 1845755904, 1845755904, 838860800, 1862533120, 1862533120, 838860800, 1879310336,
- 1879310336, 838860800, 1896087552, 1896087552, 838860800, 1912864768, 1912864768, 838860800, 1929641984, 1929641984, 838860800, 1946419200, 1946419200, 838860800, 1963196416, 1963196416, 838860800,
- 1979973632, 1979973632, 838860800, 1996750848, 1996750848, 838860800, 2013528064, 2013528064, 838860800, 2030305280, 2030305280, 838860800, 2047082496, 2047082496, 838860800, 2063859712,
- 2063859712, 838860800, 2080636928, 2080636928, 838860800, 2097414144, 2097414144, 838860800, 2114191360, 2114191360, 838860800, 2130968576, 2130968576, 838860800, 2147745792, 2147745792, 838860800,
- 2164523008, 2164523008, 838860800, 2181300224, 2181300224, 838860800, 2198077440, 2198077440, 838860800, 2214854656, 2214854656, 838860800, 2231631872, 2231631872, 838860800, 2248409088,
- 2248409088, 838860800, 2265186304, 2265186304, 838860800, 2281963520, 2281963520, 838860800, 2298740736, 2298740736, 838860800, 2315517952, 2315517952, 838860800, 2332295168, 2332295168, 838860800,
- 2349072384, 2349072384, 838860800, 2365849600, 2365849600, 838860800, 2382626816, 2382626816, 838860800, 2399404032, 2399404032, 838860800, 2416181248, 2416181248, 838860800, 2432958464,
- 2432958464, 838860800, 2449735680, 2449735680, 838860800, 2466512896, 2466512896, 838860800, 2483290112, 2483290112, 838860800, 2500067328, 2500067328, 838860800, 2516844544, 2516844544, 838860800,
- 2533621760, 2533621760, 838860800, 2550398976, 2550398976, 838860800, 2567176192, 2567176192, 838860800, 2583953408, 2583953408, 838860800, 2600730624, 2600730624, 838860800, 2617507840,
- 2617507840, 838860800, 2634285056, 2634285056, 838860800, 2651062272, 2651062272, 838860800, 2667839488, 2667839488, 838860800, 2684616704, 2684616704, 838860800, 2701393920, 2701393920, 838860800,
- 2718171136, 2718171136, 838860800, 2734948352, 2734948352, 838860800, 2751725568, 2751725568, 838860800, 2768502784, 2768502784, 838860800, 2785280000, 2785280000, 838860800, 2802057216,
- 2802057216, 838860800, 2818834432, 2818834432, 838860800, 2835611648, 2835611648, 838860800, 2852388864, 2852388864, 838860800, 2869166080, 2869166080, 838860800, 2885943296, 2885943296, 838860800,
- 2902720512, 2902720512, 838860800, 2919497728, 2919497728, 838860800, 2936274944, 2936274944, 838860800, 2953052160, 2953052160, 838860800, 2969829376, 2969829376, 838860800, 2986606592,
- 2986606592, 838860800, 3003383808, 3003383808, 838860800, 3020161024, 3020161024, 838860800, 3036938240, 3036938240, 838860800, 3053715456, 3053715456, 838860800, 3070492672, 3070492672, 838860800,
- 3087269888, 3087269888, 838860800, 3104047104, 3104047104, 838860800, 3120824320, 3120824320, 838860800, 3137601536, 3137601536, 838860800, 3154378752, 3154378752, 838860800, 3171155968,
- 3171155968, 838860800, 3187933184, 3187933184, 838860800, 3204710400, 3204710400, 838860800, 3221487616, 3221487616, 838860800, 3238264832, 3238264832, 838860800, 3255042048, 3255042048, 838860800,
- 3271819264, 3271819264, 838860800, 3288596480, 3288596480, 838860800, 3305373696, 3305373696, 838860800, 3322150912, 3322150912, 838860800, 3338928128, 3338928128, 838860800, 3355705344,
- 3355705344, 838860800, 3372482560, 3372482560, 838860800, 3389259776, 3389259776, 838860800, 3406036992, 3406036992, 838860800, 3422814208, 3422814208, 838860800, 3439591424, 3439591424, 838860800,
- 3456368640, 3456368640, 838860800, 3473145856, 3473145856, 838860800, 3489923072, 3489923072, 838860800, 3506700288, 3506700288, 838860800, 3523477504, 3523477504, 838860800, 3540254720,
- 3540254720, 838860800, 3557031936, 3557031936, 838860800, 3573809152, 3573809152, 838860800, 3590586368, 3590586368, 838860800, 3607363584, 3607363584, 838860800, 3624140800, 3624140800, 838860800,
- 3640918016, 3640918016, 838860800, 3657695232, 3657695232, 838860800, 3674472448, 3674472448, 838860800, 3691249664, 3691249664, 838860800, 3708026880, 3708026880, 838860800, 3724804096,
- 3724804096, 838860800, 3741581312, 3741581312, 838860800, 3758358528, 3758358528, 838860800, 3775135744, 3775135744, 838860800, 3791912960, 3791912960, 838860800, 3808690176, 3808690176, 838860800,
- 3825467392, 3825467392, 838860800, 3842244608, 3842244608, 838860800, 3859021824, 3859021824, 838860800, 3875799040, 3875799040, 838860800, 3892576256, 3892576256, 838860800, 3909353472,
- 3909353472, 838860800, 3926130688, 3926130688, 838860800, 3942907904, 3942907904, 838860800, 3959685120, 3959685120, 838860800, 3976462336, 3976462336, 838860800, 3993239552, 3993239552, 838860800,
- 4010016768, 4010016768, 838860800, 4026793984, 4026793984, 838860800, 4043571200, 4043571200, 838860800, 4060348416, 4060348416, 838860800, 4077125632, 4077125632, 838860800, 4093902848,
- 4093902848, 838860800, 4110680064, 4110680064, 838860800, 4127457280, 4127457280, 838860800, 4144234496, 4144234496, 838860800, 4161011712, 4161011712, 838860800, 4177788928, 4177788928, 838860800,
- 4194566144, 4194566144, 838860800, 4211343360, 4211343360, 838860800, 4228120576, 4228120576, 838860800, 4244897792, 4244897792, 838860800, 4261675008, 4261675008, 838860800, 4278452224,
- 4278452224, 838860800, 327680, 327680, 838860800, 17104896, 17104896, 838860800, 33882112, 33882112, 838860800, 50659328, 50659328, 838860800, 67436544, 67436544, 838860800, 84213760, 84213760,
- 838860800, 100990976, 100990976, 838860800, 117768192, 117768192, 838860800, 134545408, 134545408, 838860800, 151322624, 151322624, 838860800, 168099840, 168099840, 838860800, 184877056, 184877056,
- 838860800, 201654272, 201654272, 838860800, 218431488, 218431488, 838860800, 235208704, 235208704, 838860800, 251985920, 251985920, 838860800, 268763136, 268763136, 838860800, 285540352, 285540352,
- 838860800, 302317568, 302317568, 838860800, 319094784, 319094784, 838860800, 335872000, 335872000, 838860800, 352649216, 352649216, 838860800, 369426432, 369426432, 838860800, 386203648, 386203648,
- 838860800, 402980864, 402980864, 838860800, 419758080, 419758080, 838860800, 436535296, 436535296, 838860800, 453312512, 453312512, 838860800, 470089728, 470089728, 838860800, 486866944, 486866944,
- 838860800, 503644160, 503644160, 838860800, 520421376, 520421376, 838860800, 537198592, 537198592, 838860800, 553975808, 553975808, 838860800, 570753024, 570753024, 838860800, 587530240, 587530240,
- 838860800, 604307456, 604307456, 838860800, 621084672, 621084672, 838860800, 637861888, 637861888, 838860800, 654639104, 654639104, 838860800, 671416320, 671416320, 838860800, 688193536, 688193536,
- 838860800, 704970752, 704970752, 838860800, 721747968, 721747968, 838860800, 738525184, 738525184, 838860800, 755302400, 755302400, 838860800, 772079616, 772079616, 838860800, 788856832, 788856832,
- 838860800, 186646528, 186646528, 838860800, 270532608, 270532608, 838860800, 287309824, 287309824, 838860800, 320864256, 320864256, 3724607488, 337641472, 337641472, 838860800, 404750336,
- 404750336, 838860800, 421527552, 421527552, 838860800, 471859200, 471859200, 1375862784, 488636416, 488636416, 1392640000, 538968064, 538968064, 838860800, 555745280, 555745280, 838860800,
- 639631360, 639631360, 838860800, 807403520, 807403520, 838860800, 840957952, 840957952, 838860800, 857735168, 857735168, 838860800, 958398464, 958398464, 1258422272, 975175680, 975175680,
- 1275199488, 2753560576, 2753560576, 2718040064, 2820669440, 2820669440, 2265055232, 2837446656, 2837446656, 2315386880, 2854223872, 2854223872, 3674341376, 2887778304, 2887778304, 2231500800,
- 3021996032, 3021996032, 3842244608, 3089104896, 3089104896, 923074560, 3172990976, 3172990976, 2298609664, 572588032, 572588032, 235077632, 2418081792, 2418081792, 3607166976, 2434859008,
- 2434859008, 3640721408, 2451636224, 2451636224, 3623944192, 2468413440, 2468413440, 3657498624, 2485190656, 2485190656, 1392705536, 2501967872, 2501967872, 1409482752, 2535522304, 2535522304,
- 1510146048, 3122724864, 3122724864, 822214656, 3139502080, 3139502080, 2667642880, 3290497024, 3290497024, 939655168, 304218112, 304218112, 3724607488, 505544704, 505544704, 4060282880, 52625408,
- 52625408, 1291976704, 69402624, 69402624, 1308753920, 455278592, 455278592, 84082688, 673382400, 673382400, 1510080512, 690159616, 690159616, 3439394816, 706936832, 706936832, 3456172032,
- 723714048, 723714048, 369360896, 2569207808, 2569207808, 2919301120, 3475177472, 3475177472, 3422617600, 3911385088, 3911385088, 3372285952, 3928162304, 3928162304, 3305177088, 3978493952,
- 3978493952, 3389063168, 3995271168, 3995271168, 3288399872, 4045602816, 4045602816, 1124270080, 4079157248, 4079157248, 100859904, 4163043328, 4163043328, 3338731520, 4179820544, 4179820544,
- 3355508736, 4213374976, 4213374976, 2533425152, 4263706624, 4263706624, 2617376768, 3173253120, 3173253120, 2567110656, 2686779392, 2686779392, 503447552, 3055878144, 3055878144, 3321954304,
- 3475308544, 3475308544, 1426194432, 3492085760, 3492085760, 3204513792, 4213506048, 4213506048, 503447552, 4230283264, 4230283264, 503447552, 2490368, 2490368, 2600599552, 19267584, 19267584,
- 402784256, 52822016, 52822016, 889520128, 69599232, 69599232, 327680, 287703040, 287703040, 2097283072, 354811904, 354811904, 654639104, 489029632, 489029632, 167903232, 539361280, 539361280,
- 3976462336, 572915712, 572915712, 688193536, 589692928, 589692928, 251985920, 623247360, 623247360, 2701393920, 707133440, 707133440, 3305373696, 740687872, 740687872, 3003383808, 774242304,
- 774242304, 3120824320, 791019520, 791019520, 3422814208, 942014464, 942014464, 2818834432, 958791680, 958791680, 1459748864, 1059454976, 1059454976, 3858890752, 1076232192, 1076232192, 3825336320,
- 1109786624, 1109786624, 3842113536, 1512439808, 1512439808, 2080571392, 1529217024, 1529217024, 2130903040, 1545994240, 1545994240, 2147680256, 1562771456, 1562771456, 2047016960, 1579548672,
- 1579548672, 2097348608, 1596325888, 1596325888, 2114125824, 1696989184, 1696989184, 2348875776, 1713766400, 1713766400, 3724673024, 1915092992, 1915092992, 2919366656, 2049310720, 2049310720,
- 2919366656, 2066087936, 2066087936, 2919366656, 2116419584, 2116419584, 4060282880, 2149974016, 2149974016, 3842179072, 2166751232, 2166751232, 3892510720, 2183528448, 2183528448, 3875733504,
- 2200305664, 2200305664, 3825401856, 2217082880, 2217082880, 3808624640, 2233860096, 2233860096, 3858956288, 2468741120, 2468741120, 1912733696, 2519072768, 2519072768, 33751040, 2569404416,
- 2569404416, 2566979584, 2602958848, 2602958848, 2181300224, 2686844928, 2686844928, 3842048000, 2703622144, 2703622144, 855769088, 2720399360, 2720399360, 3909222400, 2737176576, 2737176576,
- 3925999616, 2753953792, 2753953792, 3942776832, 2770731008, 2770731008, 3875667968, 2787508224, 2787508224, 3959554048, 2804285440, 2804285440, 3892445184, 2821062656, 2821062656, 3976331264,
- 2837839872, 2837839872, 3993108480, 2854617088, 2854617088, 1426194432, 2871394304, 2871394304, 1426194432, 2988834816, 2988834816, 4009885696, 3173384192, 3173384192, 3322019840, 3190161408,
- 3190161408, 1979908096, 3290824704, 3290824704, 889520128, 3307601920, 3307601920, 3540254720, 3324379136, 3324379136, 4177788928, 3743809536, 3743809536, 637665280, 3911581696, 3911581696,
- 3372482560, 3928358912, 3928358912, 3707961344, 4146462720, 4146462720, 805634048, 4196794368, 4196794368, 3473145856, 4247126016, 4247126016, 3993174016, 2555904, 2555904, 436338688, 36110336,
- 36110336, 436338688, 69664768, 69664768, 436338688, 86441984, 86441984, 2097283072, 153550848, 153550848, 805437440, 170328064, 170328064, 3691249664, 187105280, 187105280, 134414336, 203882496,
- 203882496, 218300416, 254214144, 254214144, 1224933376, 287768576, 287768576, 1677983744, 304545792, 304545792, 1661206528, 321323008, 321323008, 2466316288, 338100224, 338100224, 2466316288,
- 354877440, 354877440, 2483093504, 371654656, 371654656, 2483093504, 489095168, 489095168, 2802057216, 556204032, 556204032, 3322150912, 824639488, 824639488, 100663296, 1143406592, 1143406592,
- 1023606784, 1176961024, 1176961024, 1023606784, 1277624320, 1277624320, 2483093504, 1311178752, 1311178752, 990052352, 1395064832, 1395064832, 369098752, 1411842048, 1411842048, 369098752,
- 1428619264, 1428619264, 33554432, 1462173696, 1462173696, 33554432, 1680277504, 1680277504, 2348875776, 2502361088, 2502361088, 117440512, 2519138304, 2519138304, 3724607488, 2535915520,
- 2535915520, 3909287936, 875102208, 875102208, 1644363776, 891879424, 891879424, 1627586560, 220921856, 220921856, 1409482752, 455802880, 455802880, 2248343552, 472580096, 472580096, 2248343552,
- 606797824, 606797824, 1426194432, 1344995328, 1344995328, 2365652992, 98566144, 115343360, 855638016, 232783872, 232783872, 889192448, 316669952, 316669952, 905969664, 1071644672, 1105199104,
- 922746880, 1507852288, 1994391552, 973078528, 2246049792, 2262827008, 1476395008, 2548039680, 2564816896, 1509949440, 2598371328, 2598371328, 1543503872, 2850029568, 2850029568, 1560281088,
- 2900361216, 2900361216, 1577058304, 3034578944, 3034578944, 1593835520, 3084910592, 3084910592, 1610612736, 3152019456, 3152019456, 1627389952, 3487563776, 3487563776, 973406208, 3638558720,
- 3638558720, 1644167168, 3755999232, 3755999232, 1660944384, 3823108096, 3839885312, 1677721600, 836829184, 836829184, 1711276032, 971046912, 1021378560, 1728053248, 1088487424, 1088487424,
- 1795162112, 1390477312, 1390477312, 1811939328, 1675689984, 1675689984, 1828716544, 1776353280, 1776353280, 1845493760, 1843462144, 1843462144, 1862270976, 2078343168, 2078343168, 1879048192,
- 2229338112, 2246115328, 1895825408, 2413887488, 2413887488, 1929379840, 2598436864, 2615214080, 1946157056, 2833317888, 2833317888, 1979711488, 2967535616, 2967535616, 1996488704, 3168862208,
- 3168862208, 2013265920, 3303079936, 3303079936, 2030043136, 3370188800, 3370188800, 2046820352, 3554738176, 3554738176, 2063597568, 3588292608, 3588292608, 2080374784, 3621847040, 3621847040,
- 2097152000, 3990945792, 3990945792, 2113929216, 4091609088, 4091609088, 2130706432, 4141940736, 4141940736, 2147483648, 4276158464, 4276158464, 2164260864, 165806080, 165806080, 2181038080,
- 568459264, 585236480, 2197815296, 769785856, 769785856, 2231369728, 1038221312, 1038221312, 2248146944, 2313289728, 2313289728, 2264924160, 2632056832, 2632056832, 2281701376, 3085041664,
- 3085041664, 2298478592, 3152150528, 3152150528, 2315255808, 3319922688, 3319922688, 2332033024, 3403808768, 3403808768, 2348810240, 3454140416, 3470917632, 2365587456, 3873570816, 3873570816,
- 2399141888, 3957456896, 3957456896, 2415919104, 518193152, 518193152, 2432696320, 2950889472, 2950889472, 2449473536, 2984443904, 3001221120, 2466250752, 4125294592, 4125294592, 2499805184,
- 1021575168, 1021575168, 2516582400, 1172570112, 1172570112, 2533359616, 1206124544, 1222901760, 2550136832, 1826881536, 1826881536, 2583691264, 1944322048, 1944322048, 2600468480, 1994653696,
- 2011430912, 2617245696, 2061762560, 2078539776, 2650800128, 2430861312, 2430861312, 2684354560, 2497970176, 2497970176, 2701131776, 2783182848, 2783182848, 2717908992, 2833514496, 2917400576,
- 2734686208, 2950955008, 2967732224, 2835349504, 3018063872, 3018063872, 2868903936, 3051618304, 3437494272, 2885681152, 3471048704, 3739484160, 3288334336, 3773038592, 3873701888, 3573547008,
- 3907256320, 3957587968, 3690987520, 3991142400, 3991142400, 3758096384, 4007919616, 4007919616, 2701131776, 4024696832, 65339392, 3774873600, 132448256, 635764736, 4127195136, 669319168, 803536896,
- 352387072, 853868544, 1340407808, 503382016, 1373962240, 1491402752, 1006698496, 1524957184, 1877278720, 1140916224, 1910833152, 1961164800, 1510014976, 1994719232, 2279931904, 1577123840,
- 2313486336, 2414149632, 1879113728, 2447704064, 2598699008, 1996554240, 2632253440, 2649030656, 2164326400, 2699362304, 2716139520, 2197880832, 2850357248, 2867134464, 2231435264, 2951020544,
- 2951020544, 2264989696, 3034906624, 3034906624, 2281766912, 15728640, 49283072, 2298544128, 66060288, 66060288, 805437440, 82837504, 99614720, 2348875776, 116391936, 116391936, 2365652992,
- 133169152, 250609664, 2382430208, 284164096, 334495744, 2516647936, 351272960, 351272960, 1090715648, 368050176, 368050176, 2583756800, 384827392, 384827392, 2332164096, 401604608, 435159040,
- 2600534016, 451936256, 451936256, 1426259968, 468713472, 468713472, 1476591616, 485490688, 485490688, 2650865664, 502267904, 502267904, 2013396992, 519045120, 519045120, 2667642880, 569376768,
- 1055916032, 2684420096, 1089470464, 1089470464, 1224933376, 1106247680, 1156579328, 3187736576, 1173356544, 1173356544, 2147614720, 1190133760, 1190133760, 2097283072, 1206910976, 1324351488,
- 3254845440, 1357905920, 1542455296, 3389063168, 1559232512, 1559232512, 3506503680, 1576009728, 1576009728, 3523280896, 1592786944, 1592786944, 3590389760, 1626341376, 1727004672, 3607166976,
- 1743781888, 1743781888, 117440512, 1760559104, 1760559104, 3724607488, 1777336320, 1777336320, 100663296, 1794113536, 1861222400, 3741384704, 1894776832, 2129657856, 3825270784, 2163212288,
- 2163212288, 4076929024, 2213543936, 2263875584, 4093706240, 2280652800, 2280652800, 2466381824, 2297430016, 2297430016, 2483159040, 2314207232, 2314207232, 4160815104, 2330984448, 2330984448,
- 2348875776, 2347761664, 2347761664, 4177592320, 2381316096, 2398093312, 4194369536, 2431647744, 2448424960, 4227923968, 2481979392, 2515533824, 4261478400, 2532311040, 2532311040, 503447552,
- 2549088256, 2549088256, 2902523904, 2565865472, 2565865472, 16908288, 2632974336, 2666528768, 33685504, 2700083200, 2716860416, 84017152, 2733637632, 2733637632, 1040318464, 2750414848, 2934964224,
- 117571584, 2968518656, 3002073088, 318898176, 3236954112, 3471835136, 369229824, 3505389568, 3522166784, 620888064, 3606052864, 3740270592, 654442496, 3773825024, 3773825024, 805437440, 3807379456,
- 3824156672, 822214656, 3840933888, 3840933888, 2567176192, 3857711104, 3857711104, 3909156864, 3874488320, 3874488320, 4144037888, 3891265536, 4008706048, 855769088, 4042260480, 4109369344,
- 989986816, 4126146560, 4126146560, 1057161216, 4142923776, 4142923776, 2348941312, 4159700992, 4159700992, 2835480576, 4176478208, 4277141504, 1073872896, 15794176, 133234688, 1191313408,
- 150011904, 150011904, 1594032128, 166789120, 200343552, 1325531136, 217120768, 217120768, 1426194432, 233897984, 250675200, 1375862784, 284229632, 301006848, 1409417216, 317784064, 317784064,
- 1812135936, 351338496, 351338496, 4009820160, 368115712, 368115712, 4026597376, 418447360, 485556224, 1442971648, 502333440, 502333440, 2734751744, 519110656, 519110656, 1526857728, 552665088,
- 586219520, 1543634944, 602996736, 602996736, 4160815104, 619773952, 670105600, 1593966592, 686882816, 686882816, 369098752, 703660032, 703660032, 1661075456, 720437248, 720437248, 33554432,
- 737214464, 787546112, 1677852672, 821100544, 904986624, 1744961536, 938541056, 988872704, 1845624832, 1039204352, 1055981568, 1912733696, 1089536000, 1190199296, 1946288128, 1206976512, 1206976512,
- 2046951424, 1223753728, 1324417024, 2063728640, 1357971456, 1425080320, 2181169152, 1441857536, 1441857536, 67108864, 1458634752, 1508966400, 2265055232, 1542520832, 1592852480, 2332164096,
- 1626406912, 1710292992, 2399272960, 1978728448, 2029060096, 2499936256, 2196832256, 2213609472, 2567045120, 2247163904, 2297495552, 2600599552, 2398158848, 2398158848, 1459814400, 2431713280,
- 2431713280, 1443037184, 2448490496, 2482044928, 2667708416, 2515599360, 2515599360, 2718040064, 2532376576, 2532376576, 1174536192, 2549153792, 2549153792, 2734817280, 2582708224, 2582708224,
- 2751594496, 2633039872, 2649817088, 2768371712, 2884698112, 2935029760, 2801926144, 2968584192, 2968584192, 2869035008, 2985361408, 2985361408, 1040384000, 3002138624, 3018915840, 2885812224,
- 3102801920, 3153133568, 2919366656, 3237019648, 3388014592, 2986475520, 3455123456, 3471900672, 3154247680, 3639672832, 3639672832, 3187802112, 3656450048, 3656450048, 3187802112, 3673227264,
- 3673227264, 3204579328, 3690004480, 3690004480, 1426194432, 3706781696, 3740336128, 3221356544, 3773890560, 3874553856, 3271688192, 3941662720, 3975217152, 3389128704, 4142989312, 4142989312,
- 3439460352, 4159766528, 4159766528, 3439460352, 4176543744, 4193320960, 3456237568, 4210098176, 4210098176, 385875968, 4226875392, 4277207040, 3489792000, 15859712, 32636928, 3556900864, 82968576,
- 133300224, 3590455296, 183631872, 200409088, 3657564160, 401735680, 519176192, 3691118592, 569507840, 770834432, 3825336320, 871497728, 921829376, 4043440128, 955383808, 972161024, 4110548992,
- 1089601536, 1240596480, 4144103424, 1257373696, 1257373696, 196608, 1307705344, 1324482560, 16973824, 1358036992, 1358036992, 100859904, 1374814208, 1576140800, 50528256, 1827799040, 1827799040,
- 268632064, 1911685120, 2012348416, 285409280, 2029125632, 2029125632, 402849792, 2045902848, 2062680064, 402849792, 2079457280, 2079457280, 2885877760, 2213675008, 2213675008, 50462720, 2347892736,
- 2347892736, 436404224, 2364669952, 2364669952, 436404224, 2381447168, 2381447168, 453181440, 2398224384, 2398224384, 453181440, 2431778816, 2448556032, 469958656, 2465333248, 2465333248, 50331648,
- 2515664896, 2515664896, 83886080, 2599550976, 2599550976, 503513088, 2633105408, 2633105408, 3540058112, 2649882624, 2666659840, 520290304, 2700214272, 2767323136, 553844736, 2817654784,
- 2834432000, 637730816, 3035758592, 3069313024, 671285248, 3086090240, 3086090240, 704839680, 3119644672, 3119644672, 721616896, 3136421888, 3136421888, 721616896, 3153199104, 3153199104, 738394112,
- 3169976320, 3169976320, 738394112, 3186753536, 3186753536, 755171328, 3203530752, 3203530752, 755171328, 3237085184, 3237085184, 2382430208, 3253862400, 3270639616, 771948544, 3287416832,
- 3287416832, 788725760, 3354525696, 3471966208, 805502976, 3505520640, 3555852288, 939720704, 3572629504, 3572629504, 1912799232, 3690070016, 3706847232, 1006829568, 3857842176, 3857842176,
- 1040384000, 3891396608, 3891396608, 1057161216, 3941728256, 3941728256, 1073938432, 3992059904, 3992059904, 1090715648, 4059168768, 4075945984, 1107492864, 4126277632, 4143054848, 1141047296,
- 4193386496, 4193386496, 1174601728, 4277272576, 4277272576, 1191378944, 49479680, 99811328, 1208156160, 166920192, 217251840, 1275265024, 485687296, 485687296, 1342373888, 519241728, 519241728,
- 1359151104, 687013888, 687013888, 1375928320, 854786048, 854786048, 2936078336, 938672128, 955449344, 1392705536, 1492320256, 1542651904, 1426259968, 1576206336, 1576206336, 1493368832, 1626537984,
- 1626537984, 1510146048, 1660092416, 1676869632, 1526923264, 2180186112, 2180186112, 956432384, 2196963328, 2196963328, 973209600, 2264072192, 2280849408, 1560477696, 2431844352, 2431844352,
- 1594032128, 2784165888, 2784165888, 1610809344, 3203596288, 3220373504, 1627586560, 3253927936, 3253927936, 1661140992, 3321036800, 3321036800, 1677918208, 3388145664, 3388145664, 1694695424,
- 3455254528, 3488808960, 1711472640, 3522363392, 3522363392, 1761804288, 3723689984, 3723689984, 1778581504, 3774021632, 3774021632, 1795358720, 3857907712, 3857907712, 1812135936, 3992125440,
- 3992125440, 1828913152, 4210229248, 4227006464, 1845690368, 4260560896, 4260560896, 2533621760, 4294115328, 4294115328, 1879244800, 116654080, 116654080, 1896022016, 284426240, 284426240,
- 1912799232, 586416128, 586416128, 1929576448, 619970560, 619970560, 1946353664, 636747776, 636747776, 671285248, 854851584, 888406016, 1963130880, 921960448, 921960448, 2013462528, 972292096,
- 989069312, 2030239744, 1022623744, 1022623744, 2063794176, 1072955392, 1072955392, 2080571392, 1106509824, 1106509824, 2097348608, 1140064256, 1140064256, 2114125824, 1173618688, 1173618688,
- 2130903040, 1207173120, 1207173120, 2147680256, 1274281984, 1274281984, 2164457472, 1324613632, 1324613632, 2181234688, 1358168064, 1358168064, 2198011904, 1408499712, 1408499712, 2214789120,
- 1492385792, 1492385792, 2231566336, 1559494656, 1576271872, 2248343552, 1609826304, 1609826304, 2281897984, 1643380736, 1660157952, 2298675200, 1727266816, 1727266816, 2332229632, 1760821248,
- 1844707328, 2349006848, 1895038976, 1928593408, 2449670144, 1962147840, 1962147840, 2500001792, 2012479488, 2046033920, 2516779008, 2113142784, 2113142784, 1073872896, 2129920000, 2146697216,
- 2567110656, 2180251648, 2197028864, 2600665088, 2230583296, 2280914944, 2634219520, 2348023808, 2348023808, 2701328384, 2381578240, 2398355456, 2718105600, 2431909888, 2499018752, 2751660032,
- 2532573184, 2549350400, 2835546112, 2666790912, 2666790912, 2869100544, 2717122560, 2717122560, 2349006848, 2918449152, 2918449152, 2885877760, 3019112448, 3019112448, 2902654976, 3102998528,
- 3136552960, 2919432192, 3186884608, 3203661824, 2969763840, 3237216256, 3270770688, 3003318272, 3304325120, 3304325120, 3053649920, 3337879552, 3337879552, 3070427136, 3455320064, 3472097280,
- 3087204352, 3555983360, 3555983360, 3120758784, 3606315008, 3690201088, 3137536000, 3740532736, 3757309952, 3238199296, 3807641600, 3824418816, 3271753728, 3874750464, 3874750464, 671285248,
- 4210294784, 167051264, 3305308160, 368377856, 737476608, 3573743616, 754253824, 754253824, 335544320, 771031040, 821362688, 3959619584, 838139904, 838139904, 352321536, 854917120, 905248768,
- 4026728448, 922025984, 922025984, 318767104, 938803200, 1089798144, 4093837312, 1106575360, 1106575360, 83886080, 1123352576, 2448752640, 4261609472, 2482307072, 2650079232, 1308884992, 2683633664,
- 2733965312, 1493434368, 2767519744, 2817851392, 1560543232, 2868183040, 2985623552, 1627652096, 3019177984, 3035955200, 1761869824, 3069509632, 3103064064, 1795424256, 3136618496, 3186950144,
- 1845755904, 3220504576, 3321167872, 1912864768, 3354722304, 3421831168, 2030305280, 3455385600, 3472162816, 2114191360, 3505717248, 3539271680, 2147745792, 3623157760, 3623157760, 2198077440,
- 3673489408, 3673489408, 2214854656, 3707043840, 3707043840, 2231631872, 3740598272, 3757375488, 2248409088, 3790929920, 3790929920, 2281963520, 3841261568, 3841261568, 2298740736, 3891593216,
- 3891593216, 2315517952, 3958702080, 3958702080, 2332295168, 4009033728, 4009033728, 2349072384, 4243914752, 4260691968, 2365849600, 32899072, 32899072, 2399404032, 83230720, 83230720, 2416181248,
- 284557312, 284557312, 2432958464, 334888960, 334888960, 2449735680, 435552256, 435552256, 2466512896, 536215552, 536215552, 2483290112, 569769984, 569769984, 2500067328, 620101632, 636878848,
- 2516844544, 703987712, 720764928, 2550398976, 787873792, 821428224, 2583953408, 938868736, 938868736, 2634285056, 1005977600, 1022754816, 2651062272, 1106640896, 1106640896, 2684616704, 1156972544,
- 1156972544, 2701393920, 1207304192, 1207304192, 2718171136, 1257635840, 1257635840, 2734948352, 1341521920, 1341521920, 2751725568, 1375076352, 1375076352, 2768502784, 1408630784, 1442185216,
- 2785280000, 1492516864, 1492516864, 2835611648, 1576402944, 1593180160, 2852388864, 1660289024, 1660289024, 2885943296, 1693843456, 1727397888, 2902720512, 1777729536, 1811283968, 2953052160,
- 1844838400, 1844838400, 3003383808, 1878392832, 1878392832, 3020161024, 1962278912, 1962278912, 3036938240, 1995833344, 1995833344, 3053715456, 2029387776, 2046164992, 3070492672, 2079719424,
- 2096496640, 3104047104, 2146828288, 2146828288, 3137601536, 2180382720, 2230714368, 3154378752, 2281046016, 2314600448, 3221487616, 2532704256, 2532704256, 3271819264, 2566258688, 2616590336,
- 3288596480, 2700476416, 2717253632, 3355705344, 2817916928, 2817916928, 3389259776, 2851471360, 2851471360, 3406036992, 2918580224, 2918580224, 3422814208, 3069575168, 3086352384, 3439591424,
- 3153461248, 3153461248, 3473145856, 3203792896, 3203792896, 3489923072, 3237347328, 3237347328, 3506700288, 3287678976, 3304456192, 3523477504, 3371565056, 3371565056, 3557031936, 3489005568,
- 3489005568, 3573809152, 3522560000, 3522560000, 3590586368, 3556114432, 3556114432, 3607363584, 3589668864, 3589668864, 3624140800, 3623223296, 3623223296, 3640918016, 3656777728, 3656777728,
- 3657695232, 3723886592, 3740663808, 3674472448, 3807772672, 3824549888, 3708026880, 3874881536, 3874881536, 3741581312, 3908435968, 3908435968, 3758358528, 3975544832, 3992322048, 3775135744,
- 4042653696, 4076208128, 3808690176, 4210425856, 4210425856, 3859021824, 4243980288, 4243980288, 3875799040, 4294311936, 16187392, 3892576256, 200736768, 217513984, 3926130688, 251068416, 251068416,
- 3959685120, 351731712, 368508928, 3976462336, 402063360, 402063360, 4010016768, 519503872, 519503872, 4026793984, 586612736, 586612736, 4043571200, 687276032, 704053248, 4060348416, 737607680,
- 737607680, 4093902848, 787939328, 804716544, 4110680064, 1006043136, 1039597568, 4144234496, 1089929216, 1089929216, 4194566144, 1140260864, 1140260864, 4211343360, 1207369728, 1207369728,
- 4228120576, 1308033024, 1308033024, 4244897792, 1375141888, 1408696320, 4261675008, 1459027968, 1459027968, 17104896, 1526136832, 1542914048, 33882112, 1593245696, 1610022912, 67436544, 1777795072,
- 1777795072, 100990976, 1811349504, 1828126720, 117768192, 1878458368, 1895235584, 151322624, 1928790016, 1945567232, 184877056, 2096562176, 2113339392, 218431488, 2163671040, 2180448256, 251985920,
- 2214002688, 2230779904, 285540352, 2264334336, 2297888768, 319094784, 2364997632, 2364997632, 369426432, 2482438144, 2499215360, 386203648, 2532769792, 2532769792, 419758080, 2633433088,
- 2633433088, 436535296, 2683764736, 2700541952, 453312512, 2734096384, 2734096384, 486866944, 2767650816, 2801205248, 503644160, 2851536896, 2885091328, 553975808, 2918645760, 2935422976, 604307456,
- 3052863488, 3069640704, 637861888, 3119972352, 3136749568, 671416320, 3187081216, 3187081216, 704970752, 3220635648, 3237412864, 721747968, 3270967296, 3270967296, 755302400, 3304521728,
- 3321298944, 772079616, 3388407808, 3405185024, 805634048, 3438739456, 3472293888, 839188480, 3505848320, 3505848320, 889520128, 3539402752, 3539402752, 906297344, 3623288832, 3673620480, 923074560,
- 3841392640, 3874947072, 990183424, 3975610368, 3975610368, 1040515072, 4025942016, 4025942016, 1057292288, 4076273664, 4093050880, 1074069504, 4126605312, 4126605312, 1107623936, 4160159744,
- 4160159744, 1124401152, 4210491392, 4227268608, 1141178368, 49807360, 49807360, 1174732800, 100139008, 133693440, 1191510016, 184025088, 184025088, 2583756800, 200802304, 200802304, 2449473536,
- 217579520, 217579520, 2583756800, 234356736, 234356736, 1241841664, 267911168, 284688384, 1258618880, 318242816, 318242816, 1292173312, 368574464, 385351680, 1308950528, 418906112, 418906112,
- 1342504960, 502792192, 502792192, 1359282176, 670564352, 720896000, 1376059392, 804782080, 804782080, 1443168256, 1056440320, 1056440320, 1459945472, 1257766912, 1257766912, 1476722688, 1291321344,
- 1291321344, 1493499904, 1358430208, 1358430208, 1510277120, 1408761856, 1408761856, 1527054336, 1593311232, 1593311232, 1543831552, 1677197312, 1677197312, 1560608768, 1844969472, 1844969472,
- 1577385984, 2046296064, 2046296064, 1594163200, 2079850496, 2113404928, 1610940416, 2180513792, 2197291008, 1661272064, 2230845440, 2281177088, 1694826496, 2448949248, 2448949248, 1761935360,
- 2549612544, 2549612544, 1778712576, 3237478400, 3254255616, 1795489792, 3438804992, 3438804992, 1829044224, 3623354368, 3623354368, 1845821440, 3656908800, 3656908800, 1862598656, 3858235392,
- 3858235392, 268632064, 4026007552, 4026007552, 1879375872, 4294443008, 4294443008, 1896153088, 2146500864, 2146500864, 4244832256, 150143232, 150143232, 50659328, 200474880, 200474880, 168099840,
- 234029312, 234029312, 939786240, 250806528, 250806528, 956563456, 267583744, 267583744, 973340672, 284360960, 284360960, 268566528, 435355904, 435355904, 2617376768, 569573632, 569573632,
- 839057408, 653459712, 653459712, 4211343360, 670236928, 670236928, 4177788928, 703791360, 703791360, 134545408, 720568576, 720568576, 151322624, 770900224, 770900224, 1258618880, 838009088,
- 838009088, 3171090432, 854786304, 854786304, 2969698304, 921895168, 921895168, 1325727744, 1274216704, 1274216704, 4278255616, 1324548352, 1324548352, 2164523008, 1341325568, 1341325568,
- 2164523008, 1760755968, 1760755968, 1275396096, 1794310400, 1794310400, 520355840, 1962082560, 1962082560, 1057161216, 2012414208, 2012414208, 3288530944, 2029191424, 2029191424, 923009024,
- 2180186368, 2180186368, 3758161920, 2196963584, 2196963584, 3523346432, 2482176256, 2482176256, 2785148928, 2549285120, 2549285120, 3137536000, 2582839552, 2582839552, 1694695424, 2666725632,
- 2666725632, 2399207424, 2683502848, 2683502848, 2030174208, 2817720576, 2817720576, 2751528960, 2834497792, 2834497792, 4228055040, 2918383872, 2918383872, 2617507840, 3002269952, 3002269952,
- 3791847424, 3052601600, 3052601600, 2315321344, 3237150976, 3237150976, 1996685312, 3253928192, 3253928192, 1526857728, 3270705408, 3270705408, 872742912, 3287482624, 3287482624, 3942907904,
- 3321037056, 3321037056, 1543766016, 3337814272, 3337814272, 4244701184, 3371368704, 3371368704, 2181234688, 3404923136, 3404923136, 1996750848, 3455254784, 3455254784, 3775004672, 3505586432,
- 3505586432, 2281897984, 3555918080, 3555918080, 2265120768, 3572695296, 3572695296, 3875799040, 3606249728, 3606249728, 2080636928, 3656581376, 3656581376, 2751725568, 3690135808, 3690135808,
- 3020161024, 3774021888, 3774021888, 2583756800, 3807576320, 3807576320, 2835480576, 3857907968, 3857907968, 1073872896, 3908239616, 3908239616, 1325662208, 3958571264, 3958571264, 84148224,
- 4109566208, 4109566208, 2734751744, 4159897856, 4159897856, 2852192256, 83099904, 83099904, 3557031936, 150208768, 150208768, 3489923072, 166985984, 166985984, 3624140800, 250872064, 250872064,
- 3808690176, 368312576, 368312576, 3607363584, 536084736, 536084736, 872677376, 1106510080, 1106510080, 3808493568, 1307836672, 1307836672, 2466381824, 1324613888, 1324613888, 2483159040,
- 1374945536, 1374945536, 3775070208, 1442054400, 1442054400, 251920384, 1693712640, 1693712640, 2382430208, 1710489856, 1710489856, 3405971456, 2079588608, 2079588608, 3708026880, 2163474688,
- 2163474688, 134479872, 2314469632, 2314469632, 2734882816, 2398355712, 2398355712, 1610809344, 2499019008, 2499019008, 553975808, 2582905088, 2582905088, 2348875776, 2599682304, 2599682304,
- 2348875776, 2616459520, 2616459520, 2348875776, 2633236736, 2633236736, 2348875776, 2717122816, 2717122816, 922877952, 2750677248, 2750677248, 3305242624, 2817786112, 2817786112, 3221291008,
- 2851340544, 2851340544, 1191378944, 2901672192, 2901672192, 2885877760, 2968781056, 2968781056, 1359282176, 3002335488, 3002335488, 67108864, 3019112704, 3019112704, 50462720, 3153330432,
- 3153330432, 1325531136, 3170107648, 3170107648, 335675392, 3203662080, 3203662080, 486670336, 3220439296, 3220439296, 3741515776, 3237216512, 3237216512, 3741515776, 3253993728, 3253993728,
- 4009820160, 3270770944, 3270770944, 4026597376, 3304325376, 3304325376, 2332164096, 3321102592, 3321102592, 1795293184, 3337879808, 3337879808, 1795293184, 3421765888, 3421765888, 1375928320,
- 3438543104, 3438543104, 4194369536, 3455320320, 3455320320, 369295360, 3472097536, 3472097536, 469893120, 3488874752, 3488874752, 17039360, 3572760832, 3572760832, 2885746688, 3606315264,
- 3606315264, 3624075264, 3706978560, 3706978560, 3959685120, 3723755776, 3723755776, 1342373888, 3740532992, 3740532992, 131072, 3757310208, 3757310208, 1308950528, 3774087424, 3774087424,
- 2818703360, 3790864640, 3790864640, 738525184, 3807641856, 3807641856, 100794368, 3874750720, 3874750720, 2332229632, 4042522880, 4042522880, 3389128704, 4059300096, 4059300096, 1728249856,
- 4143186176, 4143186176, 2550202368, 4159963392, 4159963392, 4093706240, 4227072256, 4227072256, 1845821440, 16056576, 16056576, 3892379648, 32833792, 32833792, 1543700480, 83165440, 83165440,
- 1107492864, 150274304, 150274304, 2785083392, 183828736, 183828736, 2801860608, 200605952, 200605952, 4144103424, 217383168, 217383168, 3372351488, 234160384, 234160384, 2332098560, 301269248,
- 301269248, 4110483456, 318046464, 318046464, 2717974528, 334823680, 334823680, 33685504, 351600896, 351600896, 1040318464, 368378112, 368378112, 3439460352, 385155328, 385155328, 2902523904,
- 401932544, 401932544, 386007040, 418709760, 418709760, 2684485632, 636813568, 636813568, 3791716352, 670368000, 670368000, 285343744, 687145216, 687145216, 3724804096, 754254080, 754254080,
- 2432958464, 888471808, 888471808, 1426194432, 905249024, 905249024, 1426194432, 1207238912, 1207238912, 2802057216, 1240793344, 1240793344, 3087269888, 1257570560, 1257570560, 2952986624,
- 1274347776, 1274347776, 2986606592, 1291124992, 1291124992, 3070492672, 1307902208, 1307902208, 3338928128, 1324679424, 1324679424, 3741581312, 1408565504, 1408565504, 2600534016, 1811218688,
- 1811218688, 100794368, 1861550336, 1861550336, 3624075264, 1911881984, 1911881984, 3976462336, 1978990848, 1978990848, 3758227456, 2012545280, 2012545280, 4010016768, 2079654144, 2079654144,
- 131072, 2113208576, 2113208576, 1594163200, 2197094656, 2197094656, 805437440, 2297757952, 2297757952, 4194369536, 2331312384, 2331312384, 1241710592, 2348089600, 2348089600, 1661206528,
- 2364866816, 2364866816, 3506569216, 2515861760, 2515861760, 1208287232, 2532638976, 2532638976, 184745984, 2767520000, 2767520000, 2348875776, 2784297216, 2784297216, 1594032128, 2834628864,
- 2834628864, 2919301120, 2851406080, 2851406080, 3422683136, 2868183296, 2868183296, 486670336, 2985623808, 2985623808, 1829044224, 3035955456, 3035955456, 84017152, 3069509888, 3069509888,
- 2919301120, 3086287104, 3086287104, 2818703360, 3103064320, 3103064320, 3741515776, 3119841536, 3119841536, 2348941312, 3153395968, 3153395968, 3070361600, 3220504832, 3220504832, 4009820160,
- 3254059264, 3254059264, 4026597376, 3421831424, 3421831424, 2332164096, 3472163072, 3472163072, 2348941312, 3589603584, 3589603584, 956497920, 3606380800, 3606380800, 939720704, 3639935232,
- 3639935232, 2684420096, 3656712448, 3656712448, 2483093504, 3925147904, 3925147904, 3909156864, 3941925120, 3941925120, 4144037888, 4210360576, 4210360576, 402849792, 16122112, 16122112,
- 1006895104, 32899328, 32899328, 1426325504, 49676544, 49676544, 1141112832, 66453760, 66453760, 1023672320, 83230976, 83230976, 1040449536, 100008192, 100008192, 1057226752, 116785408, 116785408,
- 1090781184, 167117056, 167117056, 3204644864, 183894272, 183894272, 1828978688, 234225920, 234225920, 1074003968, 284557568, 284557568, 1476526080, 401998080, 401998080, 1359216640, 418775296,
- 418775296, 1392771072, 435552512, 435552512, 1375993856, 469106944, 469106944, 1157890048, 485884160, 485884160, 1191444480, 502661376, 502661376, 1174667264, 552993024, 552993024, 302252032,
- 586547456, 586547456, 1778647040, 653656320, 653656320, 906231808, 737542400, 737542400, 2047082496, 754319616, 754319616, 990117888, 771096832, 771096832, 1761869824, 787874048, 787874048,
- 1963196416, 871760128, 871760128, 889454592, 922091776, 922091776, 1560543232, 1123418368, 1123418368, 1442971648, 1156972800, 1156972800, 1577320448, 2180382976, 2180382976, 4043505664,
- 2264269056, 2264269056, 4110548992, 2331377920, 2331377920, 2281766912, 2381709568, 2381709568, 3640786944, 2432041216, 2432041216, 1795424256, 2448818432, 2448818432, 1090650112, 2532704512,
- 2532704512, 2952921088, 2549481728, 2549481728, 2298740736, 2566258944, 2566258944, 2936143872, 2599813376, 2599813376, 637665280, 2633367808, 2633367808, 4043571200, 2717253888, 2717253888,
- 973406208, 2734031104, 2734031104, 3741450240, 2801139968, 2801139968, 2634285056, 2868248832, 2868248832, 3926065152, 2885026048, 2885026048, 3590389760, 2901803264, 2901803264, 2718105600,
- 2918580480, 2918580480, 151257088, 2968912128, 2968912128, 872415232, 3002466560, 3002466560, 3624009728, 3036020992, 3036020992, 1476722688, 3069575424, 3069575424, 268697600, 3187015936,
- 3187015936, 939851776, 3220570368, 3220570368, 889389056, 3254124800, 3254124800, 906166272, 3438674176, 3438674176, 4093771776, 3472228608, 3472228608, 503578624, 3505783040, 3505783040,
- 3187933184, 3539337472, 3539337472, 3993042944, 3790995712, 3790995712, 1778515968, 3824550144, 3824550144, 2617311232, 3958767872, 3958767872, 1728315392, 3975545088, 3975545088, 1711538176,
- 4042653952, 4042653952, 721747968, 4227203328, 4227203328, 2667839488, 3774284032, 3774284032, 1426194432, 3791061248, 3791061248, 1426194432, 3807838464, 3807838464, 1426194432, 3824615680,
- 3824615680, 1426194432, 3841392896, 3841392896, 1426194432, 3858170112, 3858170112, 2248343552, 3874947328, 3874947328, 2248343552, 3891724544, 3891724544, 2248343552, 3908501760, 3908501760,
- 2248343552, 3925278976, 3925278976, 2248343552, 3942056192, 3942056192, 2248343552, 3958833408, 3958833408, 2248343552, 234422528, 234422528, 2348875776, 251199744, 251199744, 2348875776,
- 385417472, 385417472, 262144, 452526336, 452526336, 134414336, 502857984, 502857984, 3070427136, 603521280, 603521280, 1107558400, 704184576, 704184576, 1124335616, 1106837760, 1106837760,
- 621019136, 1123614976, 1123614976, 453312512, 1140392192, 1140392192, 470089728, 1157169408, 1157169408, 1040384000, 1324941568, 1324941568, 1979908096, 1408827648, 1408827648, 1006960640,
- 1442382080, 1442382080, 335872000, 1526268160, 1526268160, 1157955584, 2012807424, 2012807424, 3473080320, 2432237824, 2432237824, 2566914048, 2616787200, 2616787200, 3791912960, 2801336576,
- 2801336576, 3909353472, 3036217600, 3036217600, 2198077440, 3086549248, 3086549248, 2063859712, 3455648000, 3455648000, 2583822336, 3774415104, 3774415104, 2231631872, 3791192320, 3791192320,
- 2348875776, 3875078400, 3875078400, 3271819264, 3925410048, 3925410048, 1728184320, 3942187264, 3942187264, 2785214464, 3975741696, 3975741696, 2466447360, 3992518912, 3992518912, 2164391936,
- 4026073344, 4026073344, 1812070400, 4042850560, 4042850560, 235143168, 4076404992, 4076404992, 3925934080, 4093182208, 4093182208, 1023541248, 4193845504, 4193845504, 3657629696, 4227399936,
- 4227399936, 4026793984, 4244177152, 4244177152, 1325400064, 4277731584, 4277731584, 4278386688, 2046427392, 2046427392, 2315452416, 2063204608, 2063204608, 1006764032, 2449080576, 2449080576,
- 3506700288, 2616852736, 2616852736, 100925440, 3069837568, 3069837568, 3959619584, 3254386944, 3254386944, 2416181248, 0, 1677721600, 1677721600, 3120562176, 2281766912, 2936143872, 855834624,
- 3355639808, 553910272, 1359216640, 2953052160, 218431488, 2097479680, 168165376, 2013659136, 50790400, 2349268992, 3557228544, 2299002880, 235470848, 1560870912, 3020488704, 34209792, 2634678272,
- 1812660224, 3406495744, 1057751040, 3087794176, 235732992, 1762459648, 3104636928, 1074659328, 2618163200, 4178444288, 1376714752, 3138322432, 4161732608, 1527775232, 3004170240, 655425536,
- 2148597760, 420610048, 2282881024, 2836594688, 4044554240, 1293156352, 2585001984, 253034496, 2132082688, 3507814400, 655753216, 655753216, 3843424256, 3541499904, 1779957760, 1343815680,
- 1461321728, 1562050560, 1729888256, 941621248, 1176633344, 3894542336, 2971860992, 707067904, 36110336, 3743875072, 4264034304, 1529479168, 2502623232, 1613496320, 2888630272, 1563295744,
- 4130209792, 758185984, 1798438912, 389218304, 3660775424, 2184445952, 2922708992, 1932918784, 1563885568, 2151153664, 892928000, 389677056, 4147773440, 3963289600, 926744576, 1681784832,
- 1816133632, 1900085248, 3443654656, 977469440, 2822963200, 1212416000, 4265869312, 2856648704, 1883635712, 3393585152, 1229389824, 877133824, 3511156736, 2689138688, 1279918080, 3309961216,
- 189530112, 558694400, 390987776, 709820416, 391118848, 3528458240, 1129381888, 4216389632, 340983808, 3780313088, 1632894976, 2958295040, 693436416, 3361013760, 2035679232, 3226927104, 1482162176,
- 4116185088, 2102984704, 1348075520, 3227123712, 1062928384, 828112896, 3948675072, 3093102592, 1214119936, 2891841536, 2304704512, 157286400, 3244294144, 1147207680, 4267769856, 1902247936,
- 1851981824, 644087808, 3882090496, 3060072448, 3362127872, 208142336, 4184342528, 2808676352, 1919614976, 543948800, 3630956544, 1533870080, 4033675264, 2272133120, 91160576, 2372861952, 879820800,
- 510787584, 1098055680, 3362979840, 2155085824, 410320896, 2977234944, 4101373952, 4151771136, 2943877120, 1853423616, 1165688832, 3413901312, 25034752, 1048510464, 2474639360, 3095461888,
- 2390884352, 2894266368, 3515088896, 679870464, 2592538624, 1284046848, 277479424, 59506688, 3381395456, 3851223040, 2509111296, 328204288, 932249600, 3012689920, 2073231360, 2257846272, 1268056064,
- 3667197952, 1972764672, 899088384, 3499556864, 2828533760, 1301872640, 1218052096, 1268449280, 1721499648, 1302134784, 1721630720, 3902668800, 3114270720, 513933312, 2057502720, 3701735424,
- 1453719552, 1755774976, 2947022848, 4020830208, 548077568, 581697536, 1521287168, 1152319488, 3702456320, 313589760, 3887136768, 4088528896, 766771200, 2931032064, 2427781120, 968294400, 532152320,
- 565772288, 4105764864, 3803840512, 851181568, 3988520960, 2310864896, 2025717760, 364838912, 1354760192, 331415552, 3451977728, 868352000, 3368157184, 4039376896, 3435462656, 1824980992,
- 2177368064, 4207476736, 348848128, 4056612864, 3150708736, 2379022336, 1104019456, 282001408, 4157538304, 3150970880, 2446393344, 2412904448, 1892876288, 1188298752, 584384512, 383123456,
- 4292214784, 2312568832, 1104740352, 1641742336, 1054605312, 501022720, 64880640, 31391744, 2749300736, 2480996352, 333578240, 4192337920, 2850226176, 1105461248, 2632253440, 1810235392, 82247680,
- 2129068032, 250085376, 3588751360, 3924361216, 2263482368, 1156251648, 2162950144, 1542258688, 3404529664, 4176347136, 1173356544, 1240530944, 3673292800, 150208512, 4025810944, 670433280,
- 1157038080, 3119972352, 1928855552, 3791192064, 1727725568, 3590062080, 4244439040, 2566848512, 2332033280, 2113995008, 1677852928, 1929576704, 1174667520, 134545664, 4161077504, 4077256960,
- 3439788288, 3305636096, 4094230784, 67830016, 839647488, 1980563712, 722338048, 1645150464, 286261504, 1292960000, 4245750016, 34799872, 1259602176, 2299855104, 1612054784, 1108803840, 2769813760,
- 3793289472, 2870673664, 3776708864, 3122462976, 2585657600, 2451505408, 1646264576, 3256942848, 3240231168, 2871197952, 2669936896, 1931804928, 1680212224, 1831272704, 1026031872, 3660054784,
- 3475570944, 3190423808, 3005939968, 3224109312, 2787967232, 539885824, 439288064, 3710845184, 372310272, 1446117632, 2922578176, 2821980416, 3610575104, 1681260800, 372703488, 3728146688,
- 1698169088, 423166208, 3208184064, 154861824, 4198170880, 2319253760, 4030529792, 2520645888, 4248699136, 2956919040, 2453668096, 1547763968, 1547829504, 4198629632, 1866662144, 1212416256,
- 2806317312, 1933967616, 2689007872, 239599872, 3712483584, 3997761792, 3830055168, 3377135872, 424476928, 843972864, 1833894144, 2253390080, 693240064, 1884487936, 458555648, 3545563392,
- 1213661440, 4049076480, 2606301440, 73072896, 2992308480, 1616642304, 308084992, 3797745920, 3177054464, 2187264256, 4234084608, 325124352, 1986068736, 3747676416, 1717698816, 3143762176,
- 593690880, 2355298560, 3110338816, 476381440, 3060072704, 895877376, 2087059712, 3848667392, 2221342976, 4234608896, 2640838912, 1600717056, 2087321856, 493551872, 2422931712, 560726272,
- 3513516288, 1181548800, 3765240064, 3714973952, 3664707840, 1047527680, 2859467008, 611385600, 1752236288, 3966828800, 4268884224, 125042944, 3866362112, 1114964224, 3832873216, 2004222208,
- 3145072896, 1668743424, 3866558720, 1601700096, 3950510336, 1199112448, 276431104, 3615097088, 2004549888, 410779904, 3095134464, 1551696128, 1300103424, 209649920, 3430875392, 813695232,
- 3347054848, 226558208, 1753284864, 3649110272, 2357330176, 2105737472, 3565355264, 1166278912, 2810446080, 3800301824, 1082458368, 2005205248, 3666149632, 1267073280, 2743468288, 59179264,
- 1183252736, 2324103424, 361234688, 2038956288, 344523008, 2357788928, 1183449344, 3884581120, 4203413760, 2139881728, 3599499520, 780992768, 2257387776, 3717005568, 1385038080, 462356736,
- 3834577152, 378536192, 2576351488, 1620115712, 3968925952, 2559705344, 1905459456, 1603535104, 3734241536, 1653932288, 1905656064, 1251410176, 3264676096, 781713664, 1922564352, 3046637824,
- 1654194432, 379191552, 1520042240, 3348758784, 1167786240, 3281715456, 1889272064, 43843840, 2409431296, 3181314304, 2527068416, 3768582400, 2158035200, 60948736, 2845966592, 1235419392, 816054528,
- 3718512896, 2258960640, 3953459456, 1772486912, 3617980672, 1218904320, 3819372800, 2074607872, 229179648, 4121493760, 3869901056, 3601531136, 3349938432, 3081568512, 1085145344, 3350069504,
- 1353646336, 3668902144, 3803185408, 2091974912, 2360475904, 3518103808, 1421017344, 364118272, 531955968, 901120256, 2461401344, 297206016, 4155965696, 1639448832, 431554816, 2679701760,
- 3602448640, 1371144448, 918225152, 1404829952, 1824325888, 280887552, 1925054720, 3267232000, 2327773440, 801112320, 1707081984, 2629828864, 3535798528, 146866432, 1522598144, 3166765312,
- 4072734976, 700580096, 2277638400, 566427904, 3535995136, 600047872, 4190372096, 3485794560, 1841692928, 4291166464, 2781282560, 1288175872, 4089970944, 3922264320, 3351904512, 1120600320,
- 3184197888, 1053556992, 583860480, 651034880, 3704488192, 2815361280, 1372586240, 3620733184, 1540423936, 3604021504, 1389494528, 3469869312, 1238565120, 2362638592, 3503489280, 349438208,
- 1473511680, 3000238336, 181731584, 1624572160, 4258595072, 2631270656, 2950103296, 4023845120, 2815951104, 1658388736, 4174971136, 3369730304, 1608253696, 1910309120, 3671916800, 2245918976,
- 819921152, 2078212352, 182452480, 14745856, 333578496, 2246181120, 1306722560, 367264000, 1994653952, 1927610624, 434503936, 3823501568, 887554304, 2699493632, 1558708480, 216596736, 2196308224,
- 4142465280, 1827275008, 3823763712, 4075487488, 2230059264, 1861026048, 3823960320, 1491992832, 284098816, 2045706496, 972030208, 2498756864, 4243587328, 1727070464, 3606118656, 1492254976,
- 3589406976, 2817720576, 854851840, 2532573440, 4210295040, 1593114880, 234225920, 2868248832, 502792448, 3136815360, 1324941568, 200933632, 1358561536, 3657040128, 3371892992, 3086745856,
- 2684158208, 2331902208, 2499739904, 2701132288, 1291911680, 4144038400, 1308754432, 2785149440, 4244767232, 1426260480, 201589248, 2718171648, 2751791616, 101057024, 1879441920, 2080834048,
- 3725001216, 1376256512, 1359544832, 336200192, 3272212992, 1208680960, 84673024, 3909878272, 722338304, 705626624, 353370624, 2953839104, 2735800832, 135397888, 3927048704, 403964416, 3558081024,
- 2887057920, 1024852480, 3876979200, 3424059904, 1830289920, 337183232, 2635661824, 1058669056, 169542144, 3927638528, 1931215360, 622658048, 1813905920, 3978166784, 1444872704, 287310336,
- 3223323136, 589365760, 1596064256, 3676439040, 1998782976, 891552256, 505741824, 1562771968, 136774144, 2317812224, 1663566336, 489226752, 2016018944, 707461632, 2385183232, 774636032, 3341550080,
- 925696512, 1848574464, 4197384704, 2100298240, 103875072, 2788229632, 355598848, 1060307456, 1312031232, 1077215744, 3660907008, 3660972544, 3375825408, 104333824, 976814592, 1027211776,
- 2436563456, 3292267008, 2134704640, 624820736, 3359506944, 2839478784, 2252341760, 3057713664, 3829531136, 4456960, 591725056, 4198826496, 3259367936, 2152137216, 4266066432, 1917321728,
- 1346961920, 122290688, 3460956672, 1380647424, 38535680, 4115399168, 1766654464, 3712811520, 1330512384, 3243115008, 642712064, 2102329856, 1531970048, 1280377344, 1448215040, 2840723968,
- 139657728, 55837184, 2639528448, 1213530624, 3763667456, 2438332928, 374800896, 3025601024, 1012400640, 2841117184, 1951990272, 1029308928, 744161792, 3327853056, 1734083072, 3546022400,
- 2321351168, 408814080, 3713925632, 2120155648, 3495887360, 1365246464, 3965714944, 1080099328, 2304836096, 274858496, 2019688960, 476250624, 3714253312, 3496215040, 2808414720, 1701184000,
- 1281819136, 2489909760, 778764800, 2506883584, 2876047872, 292487680, 4033806848, 2658140672, 2993750528, 208798208, 3413246464, 2322792960, 326369792, 2742288896, 1702167040, 729154048,
- 4051042816, 3078029824, 2105016832, 930677248, 2356806144, 1417347584, 1954284032, 3497787904, 24969728, 2507997696, 662569472, 1820262912, 931201536, 2155938304, 1082262016, 3514958336,
- 1971520000, 1317274112, 3984851456, 2273640960, 528876032, 2961572352, 2860974592, 2005402112, 847839744, 2307457536, 512360960, 1837761024, 3146383872, 176882176, 1519059456, 4069196288,
- 3062628864, 915210752, 2660041216, 93192704, 2307785216, 227475968, 2408514048, 311427584, 3029336576, 881918464, 3297837568, 1838285312, 3817996800, 3214082560, 798228992, 3130262016, 479527424,
- 2140471808, 4019520000, 1469448704, 647430656, 2325152256, 3633775104, 882377216, 429457920, 3264807424, 1134166528, 3080323584, 513475072, 2241528320, 3583705600, 1318846976, 3097231872,
- 1251803648, 3768386048, 2006843904, 446628352, 966787584, 916521472, 3567321600, 10682880, 2594374144, 1218707968, 3768844800, 2577728000, 379978240, 3886416384, 2477195776, 1252524544, 732496384,
- 665453056, 2628387328, 1353384448, 1789592064, 883687936, 195887616, 481165824, 3886940672, 766444032, 3903783424, 2209350144, 246481408, 3434152448, 1823605248, 1102250496, 2159280640, 2394227200,
- 884343296, 62325248, 2193031680, 129499648, 2495087104, 582550016, 3652780544, 2277114368, 4206494208, 2814050816, 549192192, 2881225216, 2646409728, 2663252480, 2847867392, 2176844288, 851509760,
- 3166765568, 683803136, 3099722240, 1455620608, 29622784, 29688320, 2512716288, 1774584320, 516358656, 3284599296, 1237910016, 415891968, 2596930048, 1221263872, 3217818112, 1707934208, 1322123776,
- 583991808, 4157538816, 2999976448, 114426368, 248709632, 2882732544, 3084124672, 550830592, 2765423104, 1809187328, 165085696, 3268870656, 3034055168, 1238958592, 3084452352, 869925376, 1524302336,
- 4275765760, 3168535040, 1541276160, 383713792, 3705602560, 2329936384, 1155596800, 3554738688, 2883715584, 1608712704, 3722641920, 2598633984, 1004864000, 3387359744, 3370648064, 3320381952,
- 2129265152, 283836928, 1055654400, 3488350720, 1055719936, 4125950464, 2666398208, 233832960, 3522167296, 2263941632, 586285568, 1173553664, 418644480, 3421766144, 586482176, 334889472, 2834694656,
- 536281600, 2566324736, 116916736, 2566390272, 804848128, 200933888, 3405382144, 2013004288, 3925606912, 2986148352, 1375601152, 4278059520, 1912537600, 2164261632, 1946223360, 704774912, 486736640,
- 2902655744, 328448, 2399470336, 1896219392, 3993371392, 1896284928, 856163072, 1007223552, 3456697088, 1695154944, 3725198080, 1242235648, 1410073344, 3339453184, 1980564224, 688784128, 202310400,
- 3339649792, 1141900032, 3222274816, 907150080, 4229038848, 2215838464, 1964245760, 3893625600, 3759473408, 1410728704, 2115437312, 219742976, 2853765888, 3004826368, 2115699456, 605815552,
- 4045144832, 136184576, 2250113792, 555680512, 2552169216, 1579156224, 941687552, 3072393984, 2787246848, 2736980736, 2485388032, 2233795328, 1646658304, 472318720, 4196860672, 2284323584,
- 506004224, 3005809408, 1848247040, 3106603776, 2435580672, 2754413312, 858653440, 3241018112, 2133787392, 523305728, 3174105856, 2536637184, 1160971008, 2855469824, 3140748032, 3325362944,
- 876020480, 540541696, 3443000064, 2050556672, 3409576704, 1866203904, 1346175744, 557712128, 3762225920, 4248830720, 725811968, 272892672, 440730368, 877003520, 4031120128, 3863413504, 3678929664,
- 2286486272, 1380582144, 3662283520, 625738496, 1380778752, 2622358272, 4249813760, 38929152, 3344106240, 1800667904, 3008692992, 2069234432, 777454336, 374866688, 3562537728, 3008955136, 911868672,
- 744162048, 2824536832, 1901855488, 3965453056, 1767703296, 4082959104, 643760896, 2673804032, 593494784, 4183819008, 3345023744, 1499595520, 4167172864, 3445818112, 2623800064, 1717895936,
- 1634075392, 3177644800, 1986528000, 57213696, 2657682176, 3379168000, 1516962560, 3848995584, 2372666112, 795673344, 3597468416, 4285399808, 1282409216, 4184867584, 3950052096, 2138178304,
- 1114833664, 359924480, 2423522048, 225772288, 2037777152, 4269146880, 1937244928, 377029376, 2809725696, 1920598784, 1685783296, 159122176, 1551696640, 914227968, 763298560, 3011445504, 2088764160,
- 1182860032, 3967877888, 3229745920, 2927821568, 1719927552, 3900965632, 2005205760, 176554752, 2928018176, 2642871040, 2508718848, 126419712, 2139685632, 3750363904, 1770783488, 1015939840,
- 3784180480, 4153410304, 3784377088, 3146908416, 1385366272, 4086498048, 3516138240, 1989542656, 3717661440, 2761491200, 77202176, 3030057728, 1956381440, 3701211904, 1855783680, 3500016384,
- 3969843968, 3835691776, 966918912, 3970106112, 2913272576, 3282436864, 480838400, 2913534720, 2007630592, 2997617408, 3282895616, 414188288, 414384896, 2746417920, 682885888, 3384017664,
- 1807024896, 146146048, 179766016, 213385984, 1270416128, 3988325120, 2428109568, 1186661120, 280756992, 3602645760, 3166503680, 3686662912, 2310996736, 465634048, 3099656960, 1824654080,
- 1606615808, 1606681344, 3569615616, 3653567232, 2110128896, 902234880, 1237844736, 1774781184, 4157211392, 2345337600, 1254884096, 1372390144, 4056744704, 4140761856, 433128192, 265421568,
- 3469869824, 2010317568, 4275372800, 3604349696, 3470197504, 1255736064, 869925632, 3453616896, 3118138112, 1474036480, 3034317568, 2396848896, 903807744, 4024369920, 3672113920, 1591804672,
- 1256325888, 2296513280, 686031616, 333775616, 2548433664, 1525089024, 4108780288, 585696000, 4276683520, 2649359104, 736887552, 2364343040, 1978532608, 2247033600, 703660800, 166920960, 1223951104,
- 4059300608, 2566193920, 1475740416, 2448884480, 1895301888, 1777926912, 117113600, 4227531520, 368902912, 788398848, 3858629376, 2063532800, 939525120, 3422553088, 3523347456, 2801992704,
- 1778648064, 117834752, 3372614656, 1342637056, 3641115648, 3003646976, 1879639040, 3993633792, 420217856, 3473671168, 84804608, 2601387008, 3842966528, 3272606720, 370213888, 3037856768, 185795584,
- 1645413376, 403964928, 2417230848, 4212458496, 2987787264, 488047616, 2920743936, 571999232, 152634368, 3172533248, 3390702592, 438043648, 3944481792, 3021800448, 1528693760, 136250368, 236979200,
- 471925760, 975307776, 4028761088, 1193542656, 1545929728, 3307602944, 455607296, 2200437760, 2536047616, 2619999232, 2519401472, 371983360, 3945530368, 2351760384, 3693937664, 573441024,
- 3442344960, 1982792704, 707789824, 3576693760, 3308323840, 909247488, 3694265344, 2721252352, 640943104, 2889090048, 2234844160, 4181066752, 1630995456, 4164355072, 2637693952, 1396245504,
- 674890752, 2101019648, 2302411776, 87884800, 3040674816, 1648231424, 1077871616, 3024028672, 3862955008, 1228997632, 3980592128, 105186304, 3729064960, 2537948160, 3511092224, 927466496,
- 3074950144, 4048094208, 2823422976, 2555053056, 2236351488, 1867318272, 1481507840, 1599013888, 1783628800, 1330709504, 3981509632, 2790392832, 626197504, 2136146944, 1062470656, 55903232,
- 3444900864, 2505442304, 1280, 2147598591, 33603585, 134219008, 452987648, 288817152, 389482263, 51459879, 287778567, 556996116, 288699954, 555951668, 1514145314, 861559091, 1499080281, 18095207,
- 471602208, 350289428, 201407004, 2256978054, 4110321344, 2256946689, 341900816, 18095132, 471602336, 4076798464, 1308680447, 218144769, 6400, 101978387, 891691555, 859190289, 570627634, 909583911,
- 370618931, 322962951, 320015629, 538119437, 185273367, 202839820, 17566475, 218169216, 17634067, 320015616, 336876542, 336860180, 33559572, 3741253632, 2718023681, 1207976960, 823328768, 117900838,
- 352723491, 858986004, 102900487, 857084949, 369493811, 926291479, 101135159, 907417366, 842217271, 640955702, 859251491, 875902514, 925049638, 640099894, 587663110, 119944759, 3038971699,
- 184751373, 320015685, 1159019021, 219353869, 268569146, 51711245, 50945803, 353176848, 222628611, 973935379, 319636757, 154799379, 218959875, 1594557205, 118489610, 23008607, 219153056, 218960709,
- 219381779, 221975309, 268567062, 221988109, 268567317, 219366669, 327160589, 991104269, 33756429, 994381072, 2157778189, 167772416, 872530175, 1711325185, 823328768, 353699362, 101058310,
- 370607623, 370546454, 370618647, 387323670, 101127702, 654706183, 640099878, 369493766, 387323415, 842019633, 370414897, 892744243, 909588021, 657864502, 640099878, 640100134, 656811814, 909583910,
- 909522742, 907417367, 656815671, 825500199, 875897634, 319660070, 639177496, 101516806, 823396883, 622330645, 17041677, 386138369, 253241101, 420220972, 201983493, 17970452, 218960641, 420747283,
- 201721124, 336204551, 402855472, 50924837, 33620226, 672075277, 369962776, 219087363, 50463024, 331350291, 117711629, 555492874, 118689306, 17174285, 101190662, 134873863, 50727187, 118227715,
- 202115333, 235472409, 319628035, 52497683, 489032200, 336402977, 84937735, 151717633, 167905030, 101648136, 134480902, 218959619, 17302294, 1248548, 4278190083, 25166326, 917642, 2490394, 19988736,
- 640098822, 906049332, 336992050, 101127173, 875898407, 370619959, 101127169, 875898407, 370619959, 3237902081, 151656970, 171966729, 4278782490, 538976256, 538976288, 536871200, 538976288,
- 18882592, 163642953, 169478665, 151601153, 622008842, 303239954, 319956261, 3690861075, 320016933, 304424210, 1184531, 4294901505, 25297376, 3145888, 573641472, 655693062, 101123622, 118953750,
- 370607622, 355940118, 842208788, 389362998, 909587990, 925312806, 640103990, 889653030, 230696500, 436957203, 201721606, 101479026, 203032071, 218960751, 436957203, 184944135, 101479027, 186254855,
- 2684425072, 1132924179, 202049030, 1145374234, 202054151, 2286094086, 219353869, 101139336, 102370060, 436618565, 117836811, 319653698, 268435712, 2952917247, 520130561, 352387072, 353776179,
- 589497876, 587600917, 892675618, 891691555, 858994228, 859190325, 71218, 320015760, 219385869, 227545869, 2416775955, 319622419, 328232961, 2417167629, 219353869, 218960784, 319655955, 65555,
- 27262976, 14680128, 889192461, 556996116, 875902514, 572597030, 17634054, 320015616, 218169101, 319668243, 319622419, 131091, 31522560, 10486080, 2097170, 355537152, 857085460, 892745266,
- 640037941, 101065251, 353776183, 587600917, 892675618, 1227568692, 726215724, 741099819, 681585481, 673724472, 79928, 726215808, 2150385963, 724257068, 674772041, 943204480, 942178344, 4278124800,
- 123135, 503358721, 823328768, 372388625, 721818645, 891691522, 858994228, 637929233, 926295591, 370619959, 319635616, 1616907539, 219353869, 436940352, 184878856, 286330976, 2701033473, 319622419,
- 319622419, 119481345, 436931333, 151666696, 4278255625, 31522810, 10486080, 318767141, 353776177, 101123860, 556996119, 875902514, 925049638, 640955702, 119677734, 387188231, 926364182, 790794038,
- 135249688, 70921, 219353869, 657099187, 725362754, 168364319, 404621850, 573530113, 280958754, 219354131, 730338061, 658647100, 436870954, 520685834, 4278255640, 31522813, 10486080, 285212721,
- 857084977, 386271027, 842216214, 101979414, 656548643, 119940647, 387384838, 858986006, 892745266, 589702708, 657864483, 572728102, 2651656966, 134746244, 706635798, 491724330, 419824141,
- 101256204, 523701762, 624764495, 371604773, 134746244, 319680534, 319651841, 336924536, 706616874, 151782171, 202966534, 622927108, 1025910333, 353335333, 16782100, 3774872831, 2734784513, 9728,
- 856109331, 859190325, 353703474, 353776179, 589497876, 587600917, 892675618, 640098851, 909513527, 3172341271, 219393643, 220205837, 537727763, 319622419, 151589600, 419856391, 17370124, 227598962,
- 2416775955, 319622419, 320015696, 252661773, 202375440, 419825161, 4261347584, 1073864959, 805347329, 588447744, 370607623, 372388659, 587600917, 656876067, 101131814, 370611974, 842216214,
- 875902518, 589506086, 909259575, 589706293, 554050083, 151134209, 513281802, 1394485802, 100928281, 151784473, 839779334, 1025921822, 641541413, 228922738, 3222082323, 2248216844, 202051504,
- 706616874, 151783446, 202966534, 622795528, 1025910333, 219377701, 987917, 4278190082, 20972000, 1835169, 318767150, 35522353, 101061653, 640033315, 892350517, 909456436, 909522743, 387323415,
- 640099892, 101058338, 387322901, 909586966, 708831286, 1227565380, 726215724, 143729922, 34212634, 370547215, 437655092, 873862682, 18486806, 738347883, 1227631431, 742992683, 16908545, 179055417,
- 453511426, 220994293, 739052813, 220994074, 739052813, 256, 1157750527, 335585281, 823197696, 858986004, 387319299, 322385430, 589702966, 319169057, 113559565, 436931590, 151642119, 16716553,
- 2147554061, 2969441037, 101128715, 2147552262, 319819792, 768, 1073864959, 486580225, 1207972608, 335609856, 370542342, 101061653, 639771427, 909391142, 891692599, 859190836, 370553395, 825241607,
- 825241635, 352723491, 858986004, 875902514, 824648486, 875902514, 572728102, 370414854, 825241651, 19935283, 403772208, 591012636, 591012672, 319887388, 539179555, 2149792291, 639242272, 440408614,
- 270149158, 438707483, 640031264, 536944666, 286338586, 975380534, 591012643, 286340640, 975378990, 2738496291, 639244838, 639244838, 437921344, 437921318, 131110, 31457024, 10486080, 2752529,
- 909382400, 389166647, 336926230, 570820358, 388376103, 369493795, 926291479, 876033591, 640037941, 101065251, 370545685, 370547264, 437655092, 873862682, 1478104598, 34095105, 135989770, 721626257,
- 1227631689, 21244203, 220994048, 739052813, 220994074, 739052813, 436947846, 167905544, 87501484, 726215683, 724322603, 16788551, 4261347328, 2197914369, 5120, 640037121, 352716039, 369432340,
- 641087286, 908404007, 108855606, 3237874713, 1073811986, 101062924, 4210953225, 151782913, 151809537, 336175110, 111151380, 420219913, 109282054, 131097, 20971536, 4194736, 1769485, 841028352,
- 101979414, 639770915, 389428277, 353776161, 555943444, 875898402, 1610690614, 219353869, 319660286, 1610681619, 219353869, 319660286, 322961683, 320015629, 3222473997, 319622419, 319622419,
- 4261347584, 2147614207, 335577857, 823328768, 85407286, 118756630, 656803333, 624375334, 52831781, 17570054, 4262597184, 102304960, 17565958, 217775622, 208535817, 161482249, 2684949524, 202115334,
- 2206402073, 33560838, 3774812160, 2684432385, 905980416, 336789504, 639771398, 909521973, 372388659, 336925974, 101123846, 101979413, 891691555, 926364725, 875902262, 572728102, 656544518,
- 859191078, 118888242, 219369478, 975377165, 975380515, 706486051, 218960651, 489367571, 438311462, 202854438, 386665227, 185273367, 220201228, 588059411, 975381306, 975176739, 218635025, 320015617,
- 422576653, 69407260, 4263912986, 336860326, 336860180, 131092, 46202624, 12583168, 4915263, 372375808, 336925974, 639771398, 640942653, 638001699, 101065251, 370545685, 926298675, 842208790,
- 875902262, 572728870, 336922118, 842208790, 640955702, 640033315, 909521973, 101127191, 875898407, 370619959, 1463091201, 218960692, 202183443, 589898249, 975381306, 288168227, 672540173,
- 1198802232, 1162179655, 319637364, 1463094547, 1968649268, 538976288, 538976288, 1463058433, 319627317, 1344277779, 403182349, 589511203, 269624122, 674763280, 1165248288, 1195865157, 219366772,
- 1463030541, 878130485, 319956416, 623186451, 303239954, 4261347840, 2197937663, 369139713, 6400, 370610963, 637929222, 119744295, 640091654, 322385702, 322057014, 2027816743, 218760488, 537204748,
- 403054534, 101321996, 352876584, 1212691221, 3774778369, 85462112, 1275922950, 101322060, 1611405317, 4262731777, 11382240, 4278190083, 20972000, 1441952, 2687007, 842208000, 336926230, 353768967,
- 587597332, 1025909283, 389428226, 875902514, 488842022, 909259522, 589706293, 593510435, 471737146, 591012642, 640031360, 640031354, 444620826, 538584614, 975413249, 287518499, 975381306,
- 2686068259, 3223722656, 639244838, 645939328, 2497050, 4294573825, 25166297, 2359463, 372310272, 875968306, 103163431, 369493511, 907417111, 657733175, 101130790, 640099846, 909588006, 1224807990,
- 168368905, 1869556490, 488451115, 1869556524, 151652907, 1310656795, 354361166, 1310662421, 154206542, 152766729, 740105516, 728986411, 740105516, 151656969, 353705737, 1381113631, 353705759, 512,
- 2147606783, 268476417, 6912, 370413841, 909259571, 640955702, 572728102, 372381446, 101979414, 287515398, 1046485542, 1715223654, 639262782, 726215840, 1613515051, 3237896193, 1715217946,
- 1013333566, 1227561510, 726215724, 16793601, 3774808064, 2684436481, 8448, 372388627, 587600917, 842208547, 101979414, 857023267, 336926258, 572728070, 872561958, 232800310, 3758953235, 320015776,
- 232824845, 3758953235, 19277338, 218960800, 219381779, 327160589, 638782733, 446734362, 65574, 31522560, 10486080, 318767132, 353776179, 589497876, 372388629, 587600917, 101979427, 1025909283,
- 1077294082, 320015840, 228646925, 2685211411, 319622419, 329253158, 2148732173, 319622419, 320015776, 446742541, 65574, 31522560, 10486209, 318767149, 370611762, 641087286, 589702695, 352716322,
- 857085460, 926299698, 589506102, 336922146, 104018710, 639771398, 909391142, 908058678, 152766742, 487195145, 1715350349, 1046887484, 71197243, 2417171970, 219353869, 978848637, 724257068,
- 375390537, 167905555, 453581322, 1046887454, 926705214, 487995741, 319622419, 1227573559, 726215724, 256, 2147606783, 536911873, 556072960, 587600917, 288695842, 842217012, 555029782, 859190325,
- 35460658, 572720660, 1073820966, 219349247, 219353869, 70413, 319622419, 319622419, 319668416, 2147552531, 219353869, 319651968, 3768585491, 219353869, 256, 1073864959, 536911873, 856883200,
- 353776179, 589497876, 372388625, 587600917, 891691553, 858994228, 639771409, 540423221, 319651968, 1616907539, 219353869, 319619327, 1616907539, 18027277, 218960800, 331415059, 320015629, 18025741,
- 218960704, 65555, 31522560, 10486080, 16777245, 286590498, 572720660, 875902246, 102900518, 370414869, 909259542, 873542966, 220201254, 673724435, 218960696, 742992659, 321603884, 219389953,
- 942145791, 220211256, 537727763, 724257068, 76873, 16782093, 3741253632, 2684436993, 8448, 370607873, 637929222, 352790311, 572720660, 288699686, 842217012, 924128534, 389166647, 922817558,
- 84446345, 119147275, 219365765, 219353869, 2603488013, 168368905, 3415042561, 134683147, 1136659205, 320015723, 134313997, 219353869, 178270137, 1771785, 4280287233, 20972000, 1179808, 102896384,
- 370413845, 909259571, 589706293, 640946467, 320015680, 319676429, 331353363, 219389953, 319652094, 319622419, 319643649, 256, 3221348607, 520136193, 101908480, 370413845, 892744243, 857085713,
- 288831282, 842208788, 873542966, 117909031, 387393063, 319622419, 286329477, 219383050, 370610957, 245736718, 403152641, 319652094, 369167635, 3356364488, 319679230, 2147552531, 336004888, 1374456,
- 4278190081, 25166298, 1704102, 103879424, 370413845, 892744243, 924188945, 873542966, 102900518, 637604117, 219354389, 117510925, 320148751, 4262661389, 2650869753, 2164135432, 219353869,
- 3304990721, 369625106, 319651841, 3640528147, 1129729, 4278190082, 29360608, 1114272, 318767139, 370611762, 101058324, 656810531, 909587494, 640943414, 119678503, 336922118, 840308502, 3761649207,
- 353782315, 726275605, 353782315, 21632533, 875838475, 1010054264, 2016687164, 20722740, 623192928, 723854678, 1445274923, 2687182117, 505309244, 1013456414, 505309244, 6823454, 4278190082,
- 20972000, 1376416, 285212702, 370414869, 892744243, 909259573, 640955702, 572728102, 859117318, 336926258, 219357958, 744493837, 1227565897, 639262764, 942170176, 1610688568, 319652064, 727715091,
- 1227631689, 3235522091, 942155832, 512, 3238117375, 385916929, 12800, 909521975, 370553395, 654775317, 101131814, 102176518, 640033315, 370618629, 909522710, 909518631, 640037941, 101065251,
- 370545685, 1077293619, 741099819, 1193290569, 185211401, 608700418, 726215723, 154016001, 34277914, 488255496, 1044276796, 1715223654, 3225297214, 724257068, 724970569, 134351446, 1460279817,
- 2437491477, 134351671, 940251657, 1042959134, 1715223654, 1013333566, 131091, 31391488, 10486082, 2424860, 842208000, 336926230, 370607878, 637929222, 354625319, 572720660, 872561958, 909252406,
- 589706293, 1883247907, 841433384, 84431912, 119212555, 219373415, 2317751053, 556740385, 664797552, 1210918977, 436959504, 184879111, 319651986, 3231714579, 803218970, 2687443233, 4244570368,
- 1140973311, 1560322561, 823328768, 924268086, 387323399, 909587990, 640034598, 117843495, 386336262, 370607655, 370546454, 370618903, 387323670, 101127702, 654706183, 640099878, 117843495,
- 370611718, 370546454, 372322583, 909522742, 640103991, 640034598, 640098855, 656811814, 909583910, 472715363, 705234181, 51842313, 168627459, 1075972399, 103226138, 218505248, 369825030, 33626167,
- 202255132, 33686021, 756030725, 321522972, 403441417, 218891524, 302253826, 1059197491, 103226139, 352718086, 406263307, 723255809, 33885198, 17105410, 67372631, 151068704, 218956546, 50534157,
- 84279561, 539757324, 488965381, 252188175, 134285075, 168364558, 453644036, 67372557, 50728450, 218891522, 17045261, 268828931, 201655811, 622865419, 135663389, 17240847, 151654151, 168756234,
- 65563, 31522560, 10486144, 318767127, 372388659, 587600917, 101978403, 891691555, 639771409, 540423221, 319660192, 327159059, 2148732173, 18027277, 218960800, 228654611, 17634067, 218960736, 65555,
- 31522560, 10486144, 318767135, 353699362, 857085460, 892745266, 589706293, 353699362, 587597332, 891692578, 539374645, 1463030541, 878130485, 319622419, 589511203, 18031418, 3758953376, 875845429,
- 232797527, 3758953235, 589511203, 232792890, 4278255635, 31522813, 10682755, 318767123, 320275974, 926036758, 656815635, 50791974, 338044419, 2684750349, 152376584, 218760608, 2198149132, 18351746,
- 202901150, 336888062, 403472385, 218760454, 956418046, 16779789, 3758095871, 2734768898, 7936, 386270739, 909579795, 370348855, 322377239, 640099894, 50530054, 119677734, 640025347, 84610325,
- 387385488, 122769671, 2416449303, 202181381, 1433273624, 119019527, 403009109, 403021313, 377552396, 18219265, 384433687, 18219265, 85462144, 4262267653, 388235738, 31260183, 724262, 4294967041,
- 25231839, 2031777, 386334976, 101123606, 120006438, 640091654, 657930022, 909588006, 924260118, 370619958, 2407072022, 167905423, 2265520651, 169478535, 2399666699, 184682639, 2265520650,
- 186255751, 1812005386, 436972460, 184682505, 34316962, 186255624, 436907179, 167905289, 34251683, 1706248, 4294901505, 25297376, 1573026, 389092096, 389428791, 117904918, 587600917, 892675618,
- 926295591, 2251953718, 186255494, 2584216842, 319622419, 168102042, 2466322955, 84589756, 186255368, 319657687, 3616935187, 134748683, 4278255621, 31522810, 10486150, 285212698, 857084977,
- 386269491, 841036566, 640955702, 906044195, 555951655, 219350562, 233570044, 18090249, 320015680, 352451597, 336136461, 319668478, 319651841, 319862270, 218960658, 256639251, 1249811, 2, 16777728,
- 1769600, 318767174, 842217012, 924128534, 336926258, 656876294, 117908259, 875898402, 118960950, 859191091, 389494067, 389165845, 372388631, 101979414, 639771427, 589706293, 587597347, 589768226,
- 892675618, 331363892, 1611861261, 219353869, 16850784, 319643679, 2690649363, 218699616, 320872467, 538380557, 321603884, 319635469, 254020883, 823926064, 319644687, 224395539, 202183443,
- 218960652, 67374099, 218960652, 395578387, 67382281, 722929964, 319630409, 319622419, 370809366, 222301459, 196627, 46202624, 12583168, 4587547, 318767193, 353699362, 352723495, 926094868,
- 389231415, 892744215, 119744052, 119944245, 857084949, 857085491, 859256370, 336926258, 842216214, 640955702, 656614182, 891495206, 588580647, 587663138, 822412834, 353699335, 842208788, 875902262,
- 589702951, 319676450, 320015712, 18833421, 224403201, 1611469587, 219409683, 472977252, 604975133, 219353869, 722668864, 387984457, 538119433, 151851808, 319643671, 51557633, 319622419, 134418947,
- 331350280, 319556621, 202575117, 319554564, 202575117, 3759344908, 370347328, 320215578, 320015629, 726215693, 69994775, 386477060, 103535635, 319619335, 117509395, 469766, 4278190082, 21037760,
- 2490560, 620757046, 656881201, 589706293, 352723491, 589702933, 84346402, 370414854, 336933683, 841036566, 858207542, 858076722, 353703474, 589497876, 892675618, 1073886772, 322243585, 319627277,
- 84740203, 16713227, 537727754, 1090591270, 536946202, 3103658765, 235801168, 235556874, 185450766, 319650094, 1579486483, 3741647623, 319688202, 639966112, 1293131802, 173017614, 1342836238,
- 83889674, 3237937152, 3221308930, 536876032, 1090532608, 21504, 370618625, 589497863, 587600917, 656811555, 909588262, 336922418, 892482355, 589509685, 842073378, 336926230, 639771398, 640037941,
- 891691555, 571684404, 909391142, 353776179, 874972692, 372388662, 101979414, 891691555, 572728884, 3496345894, 369625104, 3121880096, 121725202, 420073487, 272633916, 4262477840, 1063862520,
- 235538958, 171135794, 219287054, 218960659, 237835027, 624764426, 235538958, 235545652, 264288257, 342889493, 325206300, 146804499, 269500624, 1061163072, 235552873, 1395853838, 168431154,
- 318832398, 320015629, 2282949901, 1025838602, 235801126, 238298122, 536871936, 637714687, 385925121, 1207973376, 24832, 101979411, 336922119, 909259542, 640103477, 875902246, 102900518, 372388151,
- 336925974, 370611761, 101061653, 640033315, 909587509, 892417079, 322319924, 875898402, 875902774, 353710643, 336926230, 842081542, 117904919, 656548614, 909583911, 873542451, 372388662, 159387925,
- 556732678, 101789473, 336862217, 857681948, 503382302, 673726759, 18753345, 523443713, 236067860, 302911504, 356253980, 1074792712, 168627465, 151523136, 219357205, 1342247693, 135597477,
- 790698774, 370876719, 2752321032, 1545346068, 2753508126, 654442753, 658581553, 824721703, 16843303, 506666916, 337404158, 855971856, 87232528, 471076888, 252974144, 1074334016, 18092816,
- 320015648, 14745101, 4280287236, 19268288, 1507520, 4718646, 318767200, 117838869, 370414854, 892744243, 640034612, 640955701, 923148835, 370553393, 823399701, 353769238, 587597332, 891692578,
- 926299956, 875901236, 571684406, 909391142, 859059511, 370480434, 101979414, 336670977, 639771398, 572723509, 926361127, 387396150, 587597590, 285608320, 790700335, 470353425, 807146516, 18756383,
- 1093082625, 658581544, 503382302, 471080755, 269487634, 18616846, 218960668, 152379411, 171970312, 255855130, 18155784, 353215824, 555423240, 455159599, 219547670, 471602340, 523443804, 33620388,
- 1093153063, 675358503, 16918321, 857711617, 476118558, 85463060, 3541045459, 336599045, 4261413148, 320015840, 337641741, 155193108, 319832073, 524308, 48299776, 10486144, 2490397, 3735600,
- 5046339, 6619225, 556864256, 353703474, 353776179, 53151252, 572728870, 572720902, 873542950, 573642550, 926291221, 840381493, 590624023, 907351330, 387330327, 572732469, 354563861, 842208277,
- 389297461, 354558772, 842208277, 656540981, 859191078, 118888242, 102901510, 857084949, 875902514, 3221303334, 222305300, 1879905043, 1057409288, 104802858, 471602193, 302911540, 268896592,
- 291047184, 1880100879, 1611665424, 269488144, 388944126, 773265175, 387389230, 319630871, 319622419, 480248083, 219410452, 925438733, 337389879, 471072769, 211292224, 2148565769, 269512961,
- 152240497, 269522956, 281022480, 269533200, 281022480, 673755152, 673720360, 326117416, 320015629, 1248525, 4294967047, 25232063, 9830593, 11010204, 21365168, 5767500, 372310272, 369559318,
- 372651799, 117839383, 386340359, 101127190, 103229218, 386336263, 101123606, 103229222, 370607878, 101058326, 117843751, 118756887, 656876038, 589440774, 654706183, 926361126, 101132070, 908470054,
- 892614455, 572928279, 892666425, 909456432, 909522228, 657928247, 909583910, 907482934, 926299958, 925247015, 387397174, 640104246, 372651830, 926291735, 926295591, 387388982, 389429046, 53884471,
- 656810545, 102905649, 857084949, 875902514, 856962854, 590624050, 641143586, 637929255, 926295591, 657925687, 909587494, 907482930, 657929783, 909588006, 907482902, 640104246, 909522726, 926291735,
- 926164519, 387396150, 858920758, 389428791, 117904918, 909580054, 102110998, 353634055, 840315175, 353698361, 102044720, 101061908, 386347015, 101127702, 103229190, 117835526, 118887959, 656868870,
- 370607878, 637929222, 117843751, 117839383, 656877062, 654706438, 654706183, 825697830, 857092647, 589706247, 336922146, 909259542, 117911809, 185926658, 51185424, 252119042, 84478978, 101582341,
- 118558215, 117572101, 34408199, 68292098, 50726664, 117902851, 84348418, 101582341, 18289673, 218236162, 34014983, 269161732, 33688839, 487524103, 16844566, 184615170, 50464262, 50857742, 33752328,
- 84018699, 168168965, 67506961, 252052995, 404096260, 117834501, 84086279, 202181386, 3121414661, 1074337552, 219353869, 856888077, 269488144, 185926787, 34408208, 252118786, 84478978, 84870661,
- 118558215, 117572101, 34408199, 85069314, 50661129, 117902850, 84414210, 84870661, 18289673, 218236162, 34014983, 252450052, 33688839, 487524103, 16844566, 184615170, 50464007, 50857742, 33752328,
- 84018699, 168168965, 67506961, 252052995, 404096260, 117768709, 84086279, 202181386, 118292997, 822019847, 2148079376, 319622419, 319622419, 218283777, 353046535, 117899780, 67243271, 84481561,
- 101057807, 17042183, 218564610, 117899778, 135334149, 118358787, 50529543, 101127193, 84215310, 251726601, 33687303, 185599757, 117572629, 34408199, 17040645, 33620225, 33816833, 34016261,
- 118358788, 50464007, 84480263, 235211011, 84018694, 151983112, 67374854, 218629635, 235342346, 117768707, 50529037, 117903105, 16904190, 218960718, 218960659, 269496339, 261619216, 50599180,
- 218564360, 370738178, 101647625, 185074949, 134349060, 33688839, 151324423, 50530321, 84346638, 337117954, 101582343, 185140485, 117903105, 118292994, 68487952, 117901058, 84214285, 16843012,
- 16843265, 201654788, 50594311, 84346638, 285737986, 151193096, 101060101, 336069890, 252053775, 100860932, 185142536, 50466311, 51185413, 251724547, 33687303, 16908045, 320015759, 320015629,
- 4278125568, 33734399, 2516632065, 2768279808, 45312, 369570049, 372651799, 117839383, 386340359, 101127190, 103229218, 386336263, 101123606, 103229222, 370607878, 101058326, 102049575, 117839111,
- 118756887, 656876038, 101132038, 640034566, 656815927, 656803335, 926365222, 823604532, 825304614, 875901749, 909588021, 926168886, 925247015, 387397174, 909588022, 640034615, 389428791, 657929751,
- 909588006, 907482902, 908470071, 387331639, 909587991, 909522711, 18224663, 339158807, 909579799, 640103477, 574031367, 370414854, 892744243, 2801870388, 219226116, 50532618, 17762570, 117902099,
- 185013255, 185275152, 151651076, 33755402, 185079570, 67372810, 34343442, 185467649, 336004871, 605883143, 168887044, 67308041, 168628512, 167969553, 505941769, 16843018, 16974593, 67635468,
- 168366851, 50793476, 34082563, 135529990, 135927054, 134808325, 470222355, 117703968, 68290826, 252907526, 285410319, 4262070538, 338965682, 404232216, 404232216, 235801216, 235801098, 286105857,
- 167969824, 51448329, 186459140, 117904391, 67832583, 151978755, 167969298, 403376137, 302253323, 67569930, 67436805, 185932545, 117904391, 18025223, 50989327, 218763523, 50602001, 285870346,
- 117965827, 16843267, 100729346, 152045061, 50659586, 134809875, 386597892, 201590028, 134747142, 420152834, 336071702, 151192837, 202183434, 67375625, 84740615, 251724804, 50530825, 95092241,
- 236727045, 470682893, 218959388, 168717326, 168693258, 50335242, 3237937152, 3221291010, 822089472, 15104, 102900499, 35591189, 909588257, 589706293, 656810531, 119744038, 352723491, 875897109,
- 119743270, 336933427, 589374243, 859059490, 336922419, 841036566, 1563768118, 17894145, 69679, 268575770, 421418251, 504957193, 471080833, 337379330, 269359636, 16723984, 252710960, 18095199,
- 18617504, 67834304, 1077984515, 184878427, 303177232, 337436702, 471101552, 269488192, 338722832, 806624284, 768, 1107476735, 587251713, 1342196480, 873660416, 842216246, 857019670, 353703474,
- 589497876, 587600917, 891691555, 639771445, 909391157, 822162227, 36374023, 892675618, 858994228, 54212151, 336926258, 570567430, 858985493, 387331639, 805635606, 3761320752, 170920462, 235550734,
- 238553614, 235548682, 235801144, 1342257162, 2704024703, 320015776, 590161165, 1074810413, 219353869, 269488192, 537819001, 4261743114, 2818638212, 168693258, 805965368, 171445770, 940183054,
- 170920462, 1573453326, 1074598683, 472126221, 319622419, 173543440, 537791749, 262146, 46202624, 12583296, 6160454, 9371767, 102891776, 588518677, 875902242, 102900518, 336859413, 572925717,
- 387188231, 858986007, 641152562, 909391142, 926286399, 589706293, 353699362, 891429652, 589706293, 353699362, 891429652, 52835381, 353769239, 100798228, 36643363, 1060386086, 842216962, 640102695,
- 34546211, 521409798, 842208770, 892731967, 654386996, 253895462, 336922114, 857080351, 906116914, 19346485, 269684032, 218960656, 571227155, 1896614667, 521362755, 286136121, 153030161, 219353862,
- 269488909, 319622419, 336793616, 117905671, 117573401, 419889671, 119080711, 3473344258, 134742542, 137367042, 34484232, 235014152, 17303600, 134352560, 806224392, 238028808, 34080770, 134754318,
- 219398145, 2953842896, 219353869, 33681662, 202062338, 1795891724, 68293952, 386797079, 337578244, 319669000, 275778835, 319664144, 279973139, 319672336, 119126526, 34014978, 117905671, 117573401,
- 419889671, 137414663, 34484232, 235014152, 805832752, 134742542, 820968962, 238028808, 34080770, 134754318, 134352432, 117441032, 3120504832, 3221299202, 385878784, 1325409024, 1795185664, 45056,
- 891691521, 842217012, 101979414, 891691543, 842217012, 101979414, 101127169, 875898407, 370619959, 909390083, 353776179, 825308949, 389428791, 117904918, 924194566, 389428791, 117904918, 101123846,
- 336925958, 891692565, 909521189, 118887959, 640099847, 909186855, 370546486, 824379143, 926294819, 102117671, 825427719, 372388657, 587600917, 336929315, 372388659, 587600917, 336929315, 372388659,
- 587600917, 336929315, 372388659, 587600917, 908534307, 656815157, 875902246, 909588278, 228589846, 218960659, 223548179, 218960659, 2482901779, 404232216, 404232216, 218960768, 88353555, 84478227,
- 168181253, 88999435, 84412691, 219033093, 506736188, 86769954, 101189907, 33627397, 88545036, 84477972, 220206853, 620823557, 772474375, 235571293, 209455630, 235576332, 211552782, 235568140,
- 209455630, 235559948, 850397710, 455279144, 1009200130, 2147555851, 319622419, 319622419, 218960768, 218960659, 485555731, 235736334, 219028508, 335613453, 219353869, 141970225, 319096069,
- 101346057, 159844870, 319096069, 134369033, 912137509, 402785288, 143730502, 319096069, 50409992, 135595796, 335873286, 134817800, 119147288, 168431133, 235670542, 202246666, 168431116, 235670542,
- 504236554, 740035080, 135073030, 622415662, 33555975, 3221225471, 3238101250, 1241527296, 823328768, 859191063, 386340658, 842217015, 37421599, 353703474, 589497876, 657864487, 386336550,
- 387323703, 118887959, 19334662, 909583910, 103874870, 654706211, 101123623, 589768454, 892675618, 657929780, 488121469, 441586195, 471931737, 17057816, 471092228, 2972324892, 168365077, 387599629,
- 2265058695, 101057032, 2969372692, 101057032, 41877780, 237505793, 218694417, 1817972264, 286792724, 409189121, 356648720, 772740425, 2148801539, 279125012, 151784714, 2064782652, 107614732,
- 34080788, 114295046, 34080788, 251812350, 185536002, 235015945, 2148801619, 203538, 4294967046, 25232063, 2818241, 4784187, 6094929, 318767205, 909580081, 118960691, 859191063, 855777074,
- 909584149, 117909031, 370620183, 370546455, 654706183, 925246977, 822162998, 101065478, 117843751, 656868870, 824653091, 587600917, 891691555, 858993717, 336929303, 875901491, 355611429, 587600917,
- 891691555, 842208311, 572732469, 405044519, 1376916253, 555440410, 71833628, 202738433, 1292700169, 226957082, 34113282, 135529990, 34124029, 18089478, 218169983, 51449384, 237505801, 320871516,
- 319627277, 268900624, 3758166032, 219353168, 538119456, 269488144, 409189121, 356648720, 772740425, 276872451, 151784714, 2064782652, 107614732, 34080788, 114295046, 34080788, 251812350, 185536002,
- 235015945, 3021577043, 219353869, 281022672, 3222278160, 319672336, 269487379, 134221840, 3237937152, 3221323778, 1023422720, 1426082048, 1828741376, 2231400704, 825556992, 370546452, 370414869,
- 858862387, 892679730, 892744243, 639772469, 926364725, 842215733, 657732918, 656811559, 589496878, 84280866, 875898402, 372388662, 386274325, 842208788, 640955702, 923148835, 336922146, 909259542,
- 119944245, 842208788, 640955702, 654713379, 336922146, 909259542, 925250613, 842208788, 640955702, 117842467, 336922146, 909259542, 791032885, 219351304, 235546784, 1797002320, 1829964809,
- 169480724, 34014762, 810825992, 1013333528, 319643649, 319622419, 168715027, 168693258, 177737226, 168431118, 237112846, 235801098, 672008714, 168693258, 504237578, 235538958, 235538958, 235801128,
- 235801098, 171724256, 222891032, 134876691, 118494236, 34801933, 303702030, 137694223, 1227688466, 1046822186, 319622419, 319622419, 235801248, 235801098, 168431118, 168431118, 235567118,
- 235538958, 168730126, 168693258, 169348618, 168431118, 243404302, 235801098, 920074, 4294967045, 25559743, 3014849, 5898318, 7471206, 892413184, 909259569, 656880693, 774317606, 572728066,
- 640091910, 369493766, 907411735, 858207799, 573580070, 656811811, 623322663, 370611249, 336925974, 825438998, 892744243, 909259573, 572991287, 926168358, 84288823, 336922146, 909259542, 656815157,
- 336922146, 909259542, 925250613, 842208788, 640955702, 17179171, 437392576, 117844490, 1413023746, 1143347248, 336081692, 134350342, 336089090, 67832582, 16847365, 722535719, 352193797, 319359023,
- 170434573, 420499470, 155069189, 4261614348, 1744968645, 168693258, 1242435082, 168693258, 504237578, 235538958, 235538958, 303695482, 137694223, 1227688466, 672471082, 134742534, 821954068,
- 235340550, 270471695, 51061249, 171724168, 222891032, 134876691, 69340691, 34801933, 3241342977, 235538958, 235538958, 168431152, 168431118, 235542542, 235538958, 262158, 46202656, 12583200,
- 2228240, 4980800, 338769664, 353768983, 857084949, 926168371, 907478567, 656814899, 656811559, 589496878, 84346402, 808453922, 353699377, 926298675, 891429687, 926102324, 875897379, 590820147,
- 639772465, 859190325, 336926258, 137306118, 2148340489, 4161395974, 30416920, 117844489, 1413023746, 1833113648, 320536859, 361828365, 2130773538, 159977488, 2618298514, 227936788, 218960659,
- 1306530579, 202902076, 2685603145, 530648848, 168630120, 168953909, 1210730797, 235777849, 337223701, 537923587, 1346375696, 319622419, 319622419, 1024, 180479, 637583361, 1946183680, 31744,
- 387199285, 353703446, 858986004, 892679730, 892744243, 909259573, 656880693, 774317606, 572728066, 842466822, 370545685, 370619959, 369493780, 355611414, 102900500, 118888198, 103163654, 588518662,
- 640955682, 654706470, 641087270, 891429670, 909259572, 874915638, 370619959, 875902518, 352723463, 842208788, 640955702, 842208279, 572732469, 319359023, 319668237, 338041408, 705305106, 134350598,
- 405820473, 3762054718, 186521104, 67374091, 286523660, 336662544, 185273345, 504040459, 370151446, 185338654, 17566475, 269488149, 201397520, 202048516, 135667211, 168693258, 504237578, 269488144,
- 171724256, 222891032, 537727763, 440408614, 889982738, 755634696, 1698507337, 353374306, 185273345, 184880389, 269489694, 185277974, 202050316, 269554689, 18092304, 185273100, 371067660, 504762384,
- 84739339, 17566475, 1611665429, 235538958, 235538958, 269488208, 768, 1090699519, 637583361, 1040200192, 891617280, 101979939, 639770915, 572732725, 926168358, 859190821, 890705714, 858994228,
- 353703474, 336008727, 119678214, 857085702, 657864498, 856950566, 875901491, 572728102, 538968582, 4263126529, 539368127, 17437453, 101385473, 325716236, 319627277, 318835765, 304477182, 621941523,
- 320016933, 3222312210, 1075916560, 27275041, 640031393, 236167194, 98503182, 626919171, 219353869, 218836601, 545264398, 538976288, 4028637216, 790695952, 4278386735, 46202874, 12583296, 2293791,
- 318767163, 386271025, 355676950, 858986004, 891429685, 858993717, 907351346, 657732403, 321005095, 656610611, 354558741, 54203924, 875902514, 875897635, 572728102, 282122758, 538314760, 1084232732,
- 272633872, 177216787, 2082015696, 540065984, 806624272, 471085248, 219357200, 18025952, 353353912, 471101460, 272633984, 236332560, 4261986314, 2694877392, 471602192, 228593684, 100668179,
- 3237937152, 3221323778, 1174407936, 3221260032, 3556822016, 570490880, 907351302, 890712627, 118957620, 101127190, 370480149, 842208791, 101979414, 101130787, 336925703, 118756887, 654710567,
- 370611990, 892744243, 641020981, 640034598, 572728871, 907351302, 909182742, 909518375, 875901491, 640033315, 640103991, 640026119, 572732469, 101061653, 101131815, 101062167, 336929315, 370553395,
- 370607623, 370554423, 842208277, 909521973, 822547991, 654718774, 909587494, 641020981, 572728867, 909391142, 909586995, 875902007, 926164519, 890713654, 572728884, 117835271, 336004614, 370414869,
- 926364211, 875898402, 372388662, 386274325, 891429652, 20067124, 236129600, 319689234, 235798896, 16843009, 471602178, 16843284, 235798785, 386930198, 189276180, 104080651, 655627298, 472126476,
- 170004009, 17566475, 269488149, 201397520, 202050315, 269884939, 186521104, 185273100, 286523660, 336662544, 185273345, 504040204, 370151446, 3809151774, 286725407, 16911886, 335675649, 18095132,
- 33620226, 571280910, 605825294, 338103316, 872817172, 3104508709, 168693258, 1041108490, 269488144, 219398145, 2081164412, 29561613, 17770254, 16843265, 337379585, 16849940, 16908545, 237440769,
- 51451414, 51513369, 50799924, 643377921, 487603751, 152575017, 202108675, 269884939, 186521104, 185273100, 269811980, 353374224, 185273345, 504040204, 370151446, 202050334, 17566475, 269488404,
- 201397265, 419969547, 672010499, 33620238, 469828097, 18617364, 16908545, 655229441, 151194894, 489233432, 640106000, 16984921, 53748999, 168431293, 168431118, 269492238, 327696, 46202644,
- 13238636, 2555915, 5177395, 318767216, 924194580, 657732918, 117835558, 369493809, 370414871, 909259571, 640103733, 909588276, 589702711, 621158947, 924194580, 657732918, 117835558, 336992049,
- 336922375, 842216214, 909456694, 640100150, 572728102, 118884102, 640103473, 335939335, 924194583, 859125046, 370611221, 875968311, 119940903, 588584198, 538976320, 538976288, 33826336, 337384472,
- 807146528, 71307280, 354552580, 19800108, 538976420, 538976288, 272633888, 337391632, 337384480, 33817112, 355213358, 2634353442, 1074466575, 188745479, 257953551, 121637647, 252395527, 2147573775,
- 320016933, 304424210, 3457291027, 119805490, 471602292, 288311572, 54530350, 705892099, 319956362, 623186451, 303239954, 772882605, 340340497, 1947474972, 840311815, 252914207, 101722883,
- 121637638, 188745492, 537921030, 101060640, 336019467, 101400583, 2101254, 4294967042, 25232063, 2162881, 620757050, 370546481, 654706183, 925246977, 387397174, 859186727, 387396147, 370553395,
- 101061653, 120784675, 572728070, 590821158, 589497863, 892613922, 892610359, 3103864628, 100796606, 4245165062, 100796592, 3339195398, 134808104, 1695093560, 539759220, 2551327776, 319373825,
- 34146360, 86730545, 537799176, 2508196128, 134747142, 3489728002, 134747142, 2375812610, 2953841927, 303176977, 1916670237, 2886143248, 34473530, 40791554, 199170, 4280352771, 27263424, 1507520,
- 4718632, 909382400, 372388659, 389165845, 118756887, 656876038, 354624294, 858851107, 387388978, 589497878, 926361122, 873936438, 102900518, 572724501, 370414854, 336933683, 909259542, 842216757,
- 640955702, 327164707, 319635469, 572006716, 436865289, 117711370, 2500558908, 318907673, 3122406914, 318907932, 243016706, 537790986, 168693258, 168431136, 235544590, 18876942, 320015776,
- 170006285, 151587354, 538969378, 484448546, 3759941929, 175645209, 537529870, 235538958, 235801120, 168697866, 50335242, 3237945600, 3221331969, 671094528, 14848, 859190291, 353776179, 387396147,
- 101127190, 640100130, 588587811, 842215687, 370611990, 572728070, 909588262, 640948022, 589702950, 34473762, 857084949, 327169586, 319635469, 572006716, 436865289, 117711370, 2500558908, 318907673,
- 3122406914, 318907932, 346301442, 134547224, 403113224, 437921300, 228589862, 386732819, 169478690, 86116617, 421666848, 690560224, 572121116, 572985544, 151389705, 437266210, 67116574, 3170832384,
- 3221352449, 1459623680, 1795187456, 385941504, 336926230, 101122574, 889400871, 926365236, 120730422, 101979426, 119940870, 102110982, 354558726, 372388628, 386270998, 372651798, 856954134,
- 909391154, 924194614, 908470070, 892482358, 639771444, 657864486, 637929254, 120861990, 875898402, 372388662, 386274325, 891429652, 20067124, 370195725, 1095970579, 1396775450, 269882159,
- 117900989, 504762375, 185273355, 335612939, 286265361, 185336084, 185273355, 269489694, 185277974, 202050316, 269489409, 18157584, 185273100, 371067660, 235801128, 235801098, 269488190, 1354563856,
- 622075399, 526149731, 1545538829, 337994600, 55576350, 353374320, 185273345, 504040204, 370151446, 202050334, 17566475, 269488404, 201397265, 202050315, 269884939, 186521104, 185273100, 269811980,
- 168726544, 168693258, 270536202, 33558544, 3237937152, 3221291010, 1308640256, 822149120, 875901717, 842216246, 101979414, 354558755, 372388629, 721818645, 891691522, 858994228, 589509685,
- 875898402, 842216246, 857019670, 859190325, 336926258, 639771398, 589706293, 336791074, 572596998, 557135142, 557850625, 235550743, 137890318, 320015696, 232841229, 1343034131, 235548680,
- 389024270, 674775073, 219363368, 219353869, 952111885, 671153960, 29360440, 387498080, 168431137, 320342030, 320015629, 403901709, 168431112, 404168974, 943204544, 320015656, 320015629, 942191614,
- 2107448, 4278190085, 16777920, 721088, 2293783, 5505093, 656544512, 859191078, 118888242, 656545542, 859191078, 118888242, 101988102, 891691555, 842217012, 372380950, 101979413, 639770915,
- 909391157, 387199795, 352723491, 858986004, 875902514, 87435046, 372388659, 587600917, 891691555, 483407412, 235736334, 219028508, 626265613, 303239954, 319956261, 322638355, 320015629, 672337165,
- 4264048696, 943204544, 1478000680, 674773032, 590883008, 16719387, 639246496, 448797222, 1610688038, 404232216, 404232216, 538976416, 538976288, 319676448, 319622419, 674802963, 943204480,
- 942178344, 674765605, 674773032, 487207199, 437921335, 437921318, 262182, 29425424, 12583344, 3670058, 7143490, 858854144, 336926258, 354624262, 909580054, 336992050, 370542343, 101061653,
- 640033315, 909521973, 572732727, 909391142, 352723479, 857084949, 892679730, 872883764, 353710643, 891429652, 355607335, 117904405, 336925958, 842216214, 640955702, 926294819, 892679735, 572728884,
- 101123846, 907417366, 2956343095, 320015712, 741871629, 169478677, 253233417, 962541586, 775446329, 219165264, 377295635, 370548254, 203562526, 1946946572, 654576897, 1074269205, 135007240,
- 654901804, 286596878, 50398492, 235407368, 16908547, 218960832, 604578323, 168364310, 404228634, 1597579066, 962541624, 138041396, 218960674, 371117075, 505288288, 504782870, 1611402292, 225184780,
- 721749250, 135274520, 134745100, 738921996, 352523535, 34608159, 50532103, 151062536, 4294902784, 2164441087, 604029185, 989867008, 15872, 924266771, 841036598, 353769239, 555943444, 355677463,
- 355677463, 118887959, 19334662, 909583910, 639768374, 926364725, 389355287, 587600917, 1025909283, 85275394, 589771057, 18484744, 1275992716, 4262401542, 2151689146, 34092864, 135529990, 34124029,
- 101975558, 252057103, 474007141, 471130132, 27263296, 353115323, 185168405, 18945551, 3398984756, 135530027, 17170952, 135530192, 381747720, 386468623, 841269328, 471602242, 2694860820, 4278386816,
- 46137343, 12648833, 4522034, 318767181, 909580081, 389161267, 101062167, 572720647, 101066534, 656810531, 890701574, 926036758, 355939889, 370546453, 654706183, 925246977, 822162998, 572596998,
- 369245478, 857092375, 857028402, 572720679, 925247015, 135739431, 274989328, 101661192, 84351778, 202121748, 571675681, 3003844620, 151523857, 139921157, 335939074, 145816840, 335939074, 319874049,
- 639287550, 134743813, 3536654611, 117772303, 17113889, 220474555, 890723085, 268502055, 269487373, 2349271309, 16844132, 1141998337, 134747142, 3489728002, 134747142, 168427010, 2202016294,
- 83951873, 17213061, 2045444, 4294967043, 25232063, 2687169, 4849726, 389092096, 557004342, 336922118, 639043334, 909391142, 372388662, 101979414, 370607878, 101058326, 640024871, 20330039,
- 117835313, 589497862, 925247266, 909588022, 926168374, 589706245, 336922146, 909259542, 554449191, 589037843, 989987097, 723127563, 439097883, 1847142167, 101057032, 2969372692, 101057032,
- 105906452, 520553998, 152301073, 151521545, 34539524, 219405825, 219353869, 3137409805, 622532397, 689320298, 1092234771, 878130469, 842356532, 1443116627, 134747142, 3489728002, 134747142,
- 561970690, 303172909, 235933712, 1780485662, 739645004, 438707738, 2500122, 4294967044, 25232063, 3080385, 4849725, 318767190, 909514545, 353776179, 907478804, 372388662, 386339861, 657732918,
- 842216246, 101979414, 370615075, 101058326, 640024871, 389428791, 387323699, 590426160, 875898402, 858855222, 555943447, 875898402, 572864054, 909583911, 370618931, 640091655, 555033355, 220796207,
- 942151464, 35395861, 740956181, 2986937407, 100796606, 4245165062, 100796592, 256644102, 3592423497, 3326020872, 285718592, 269203198, 536951844, 387389230, 388902423, 18290455, 319823547,
- 387916079, 940904736, 337257000, 168570147, 137117450, 335975693, 100796424, 335990785, 3238135816, 220015161, 2688494600, 185601937, 3223600165, 673720360, 673720360, 768, 180479, 1593884673,
- 1996516096, 352387072, 924194324, 389166647, 117904406, 857085446, 353776179, 589497876, 386270754, 118756887, 656876038, 352716326, 587600917, 892675618, 119940660, 656541191, 926364710,
- 589702710, 891691555, 858994228, 657864242, 926164519, 387396150, 892745238, 859190325, 336008754, 909579799, 640103477, 571934215, 370414854, 892744243, 536946228, 135408929, 151591689, 34736137,
- 218831135, 185406227, 302128921, 151652872, 302516507, 219357485, 757142285, 453576977, 134809865, 404685330, 320015628, 521669645, 151523842, 152766729, 556601864, 319622419, 404232304, 404232216,
- 235569176, 235538958, 195035406, 302128921, 151587080, 302516507, 219357485, 757142285, 453576722, 134809865, 404685330, 320015628, 521669645, 151523842, 152766729, 556601864, 319622419, 135408929,
- 151591689, 34736137, 218831135, 483201811, 235736334, 219028508, 240389645, 235801098, 920074, 4294967043, 25232063, 3932353, 7077957, 389092096, 842413878, 907417367, 875902262, 372388662,
- 370414869, 909588246, 336992050, 369493767, 842216214, 101979414, 102900515, 370546455, 654706183, 925246977, 823604790, 875902487, 388113190, 352716337, 587600917, 892675618, 119940660, 656541191,
- 926364710, 589702710, 891691555, 858994228, 1613182770, 453575425, 756156425, 218960673, 304947475, 152766728, 302516489, 202907394, 219353869, 35592971, 100796570, 4245165062, 100796592,
- 1172968454, 219421698, 320738431, 554896653, 151523885, 151587099, 520229384, 319622168, 353111315, 1270546704, 151585538, 520229384, 319621913, 420154643, 135397919, 453576969, 756156425,
- 218960673, 2031494675, 134747142, 3489728002, 134747142, 104314626, 3978040327, 202841602, 219353869, 35592204, 151586834, 134814473, 320941330, 236129549, 1280, 2147664127, 1593884673, 1929406208,
- 3238049024, 571670528, 336925958, 656868870, 101130790, 370611988, 589497862, 336922146, 842216214, 117904918, 370611206, 909588274, 353703446, 842208788, 875902262, 387397174, 909586966,
- 640100148, 858994230, 875902514, 572728102, 926361126, 640103478, 101123874, 892675622, 571942452, 842216501, 338105365, 639771398, 859190325, 872748594, 336929315, 640091654, 370607623, 572720646,
- 842208277, 101127702, 909579799, 336926230, 875901491, 370619958, 657864498, 859190822, 590624050, 925247010, 572925750, 640026119, 587600917, 875898402, 372388662, 403573440, 118098976, 117901076,
- 369167370, 235539730, 302844430, 168558870, 336004871, 537659911, 168431128, 203429902, 118753034, 201983751, 219289089, 168693258, 18223629, 117901836, 168236039, 236462092, 269488166, 218960704,
- 218960659, 272630035, 186521104, 185273355, 286523660, 336662544, 185273345, 504040459, 370151446, 218434334, 202050309, 269489409, 18157584, 84609804, 504038669, 218960662, 218960659, 247464211,
- 370281738, 118098945, 118753031, 404753418, 235538958, 168566808, 117904391, 17566215, 168694038, 235539982, 201397777, 117901066, 201983764, 168695840, 538447370, 336005644, 168232711, 303431948,
- 3759016461, 269488144, 320015680, 320015629, 269488221, 185336085, 185338635, 269489694, 185277974, 202050316, 269554689, 18092304, 184812556, 371067660, 504762384, 67898123, 352390148, 320015712,
- 320015629, 768, 3221340415, 1342226433, 1711299072, 825688064, 353699335, 587601684, 891691555, 926364725, 872627510, 842216246, 842019120, 387330609, 842208790, 909522742, 858796083, 858861616,
- 52237874, 370611988, 101979413, 639771427, 926168373, 587597367, 321332770, 386271014, 909579799, 386277671, 926364182, 572925750, 67882759, 2148404491, 805837844, 68426760, 386793729, 421398279,
- 117906969, 83955223, 805837844, 2148801544, 1174608916, 404235277, 197397796, 806095883, 202115851, 202156798, 805572100, 235146252, 220320516, 320186381, 3256097800, 206048270, 105517327,
- 118234132, 101650182, 337382407, 252791302, 235685900, 471602370, 118007828, 185272275, 216137223, 806030092, 185273356, 84216587, 84609840, 262149, 29425408, 12583360, 6029392, 8913012, 372314880,
- 909259542, 352716599, 857084949, 892744243, 656880693, 872627494, 572728102, 573583664, 117842481, 572720646, 640034598, 824324131, 590426160, 52233762, 101123860, 370414869, 926036787, 875902246,
- 570898231, 909583911, 370618931, 908527111, 909580055, 117904919, 101127703, 101132071, 926361127, 873932327, 372388662, 842208533, 101979414, 891421227, 604870453, 220469272, 337380166, 136057984,
- 337381424, 234946820, 503777047, 119413017, 17700615, 136057861, 337381424, 185405056, 393153284, 202050316, 185341719, 137825291, 135270153, 268961801, 151521296, 151982088, 252250376, 251201807,
- 135137802, 168693258, 17833992, 185272186, 134730503, 471602344, 202293780, 286198856, 471074378, 252053260, 201786895, 1241912348, 1208749841, 348261900, 353568796, 554503592, 336860379,
- 336860180, 134793492, 134746128, 252708873, 151586825, 151588623, 269420808, 235540488, 235407886, 269355530, 65568, 35651584, 6291776, 620757028, 101132083, 640100130, 842413876, 909580055,
- 890705714, 842217012, 336925974, 572728070, 909391142, 2471723009, 169478761, 168364448, 1770588698, 2836011530, 319622419, 228592915, 2472547091, 2684946794, 151656970, 157977097, 223586825,
- 2685211411, 219353869, 16782093, 536870912, 1610694658, 9216, 654783233, 117908006, 370611206, 389494578, 926364182, 857084949, 892679730, 589506100, 336922146, 1400897814, 436890003, 151625738,
- 2299140618, 169478761, 218960809, 2685211411, 18027277, 157979424, 436903945, 2315847946, 2852718954, 320015699, 319660045, 319622419, 512, 3221340415, 453033985, 14592, 370618643, 570820372,
- 336930599, 639771398, 101135669, 874915618, 842413879, 370414851, 909254963, 909391157, 353776179, 587600917, 891691553, 859190325, 2163676722, 436865289, 219367690, 172561165, 151587354,
- 2904164992, 68883, 219353869, 674763533, 942145791, 319622419, 176207617, 151587354, 319673162, 1255345427, 436865289, 4262035466, 319635616, 222301459, 1074598675, 674773032, 320015680, 768,
- 3221347839, 939565057, 1056979712, 387121152, 353776179, 589497876, 372388631, 587600917, 102111011, 656803335, 101131047, 640034566, 572733239, 909391142, 590820147, 875898402, 926102326,
- 389165878, 855772967, 1531444775, 219353869, 221449536, 403510035, 218760470, 537204748, 403054534, 101321996, 319625237, 221449491, 320015680, 138959629, 537597205, 2416778016, 2894856461,
- 319622419, 218960672, 403452947, 218760709, 168643660, 202900742, 218960692, 219357203, 346821389, 1078808000, 83894304, 3237937152, 3221307393, 771762688, 956314880, 16896, 372388115, 372380949,
- 118756630, 336926230, 589497862, 587600917, 892675618, 1025909283, 859190276, 909391155, 857023239, 892744243, 119744052, 37426467, 875902514, 2418221862, 857674509, 488117534, 538915614,
- 319622419, 370676294, 320031248, 339750960, 1075059740, 541077552, 337386516, 331350304, 857612301, 253568031, 857677362, 319627294, 404753683, 706115090, 538316922, 1619006221, 471077916,
- 337404064, 50338836, 3237937152, 3221307393, 1157643264, 20224, 588591379, 69010978, 858986004, 857084949, 892679730, 370414899, 892744243, 909521461, 656815157, 640955702, 892679207, 572728884,
- 588584198, 589706293, 890701346, 353776179, 354616852, 353776179, 589497876, 269103157, 101849110, 319622419, 218960672, 506666771, 756357149, 218960675, 219357203, 1880101645, 337386516,
- 471602208, 2684456980, 2047874592, 309728810, 319627288, 538971411, 219353869, 523443744, 487535134, 188425764, 220201474, 537727763, 320015648, 337404109, 473963540, 1612452884, 256, 2147598591,
- 503365633, 339017728, 120795926, 370414854, 926036787, 875902483, 925049638, 640955702, 102900515, 2416775943, 202441007, 3238596611, 2333021702, 185598510, 17960105, 3172142528, 285934595,
- 152633614, 2064977931, 269157637, 33557520, 3237937152, 3221340161, 738206464, 286326784, 556996116, 892744243, 891495988, 288699954, 36382260, 654709781, 637929255, 572732725, 909382406,
- 555032883, 674768418, 220209153, 218960659, 537727763, 906498592, 1611794486, 322975784, 4278190349, 18025728, 683736672, 218960696, 219365395, 319635457, 101190335, 134621995, 4265131786,
- 1074990488, 196627, 48299840, 10486080, 3604505, 318767189, 858994230, 387388978, 353776179, 587600913, 891691553, 859190289, 875894579, 117908003, 119677734, 387188231, 926364182, 389165878,
- 336922119, 87175987, 842208277, 857093943, 909588274, 572925748, 587597575, 909584162, 589509685, 419812642, 420510224, 441125381, 4263126566, 640031360, 200624922, 588776197, 337850930, 336004871,
- 504697863, 51909918, 4279258379, 50662144, 842146584, 117904419, 336008199, 354295317, 1292567320, 259981584, 521081362, 16718374, 438707738, 639238145, 51072416, 337847064, 117904391, 353702919,
- 184877848, 51072304, 337847064, 117904391, 353702919, 184877848, 536871424, 1644282111, 738246657, 13056, 387323137, 101127702, 656811782, 909587989, 102110998, 352781831, 572720660, 775238950,
- 909391106, 875902774, 372388662, 352716295, 18290196, 186985984, 453511172, 421073930, 135989780, 621478920, 218960686, 709438739, 321734954, 1074990349, 691484457, 119775233, 169543708, 268960779,
- 268892166, 168494088, 119342875, 320015651, 906437389, 1345335376, 220399414, 191959827, 1143811396, 327691, 48299776, 10486016, 2228244, 4063280, 318767180, 286590498, 556996116, 875902514,
- 572597030, 640946485, 352723479, 857084949, 892679730, 876029492, 102900518, 370414869, 892744243, 352723511, 857084949, 892679730, 876029492, 102900518, 370414869, 892744243, 789777696, 227541281,
- 4262269715, 1930629232, 219353869, 1930629901, 319622419, 319622419, 320015680, 320015629, 218960755, 218960659, 329253139, 565247501, 218960687, 1342246931, 331354893, 319635469, 222301459,
- 319635475, 228592915, 2148340499, 224398611, 1611469587, 224400141, 3758953235, 219353869, 1024, 188671, 335585281, 805315072, 15872, 352723475, 857084945, 892744225, 555951668, 873542946,
- 370415398, 909259571, 589706293, 386277923, 336922146, 842216214, 640955702, 102897443, 857084949, 892744243, 539174452, 556733197, 319655937, 1895697683, 324211472, 319643661, 224398611,
- 319643667, 226495763, 537727763, 219353869, 320015680, 329253133, 565247501, 218960687, 1342246931, 224400141, 218960659, 323818259, 320015629, 1611861261, 319622419, 319622419, 1280, 188671,
- 117481473, 318770176, 637541376, 838926336, 587663155, 588724023, 655693367, 587663153, 824391479, 587663155, 87438389, 587600917, 891691553, 62914869, 1543601923, 1989542271, 2144996968, 25123841,
- 25118346, 3657508358, 2164136486, 2684429850, 25100671, 370305152, 2130804544, 1073839873, 3768591898, 438707738, 65760, 31522560, 10486208, 318767224, 924194609, 842217015, 336925974, 352716551,
- 857085716, 909588246, 372388659, 117904405, 370611974, 587600917, 656876067, 119670566, 387192070, 353703447, 572720660, 119940903, 572720647, 875902246, 657864503, 589702964, 101123878, 639771427,
- 926364725, 640100150, 859190325, 387396147, 926037782, 657863990, 892675623, 842217012, 101056985, 421138945, 18024740, 16974082, 303046403, 304355589, 17171969, 85533714, 52367378, 33686017,
- 604574465, 34675225, 302056966, 170137882, 33620498, 33686017, 85069856, 17966105, 302056966, 302324004, 33758992, 16908801, 604574466, 2382436889, 17171969, 85533714, 52367378, 33685762,
- 152240641, 303700260, 17171969, 605624850, 16913161, 33685762, 303046403, 304355589, 17171969, 85533714, 52367378, 33685762, 152240641, 303700260, 17171969, 605624850, 16913161, 33685762,
- 303046403, 2365701, 4278190084, 16777916, 2490564, 5832754, 83886181, 909259573, 909456694, 640955702, 352723491, 353834516, 589497876, 640103477, 352716551, 370611988, 336803383, 639771398,
- 859190325, 354752050, 101065251, 101061909, 857084949, 875902514, 875898662, 355676982, 924194580, 875902519, 119940903, 909378310, 353776179, 572720660, 272630054, 354630179, 555822875, 638917423,
- 235802650, 134762508, 235866960, 168431240, 168431118, 284753422, 354630179, 555822875, 638917423, 235802650, 134762508, 235866960, 168431240, 168431118, 589834254, 161948474, 790698279, 655958319,
- 639280905, 101060648, 185026570, 172492555, 2818639366, 168693258, 772673034, 591012648, 421988775, 556740385, 2802394905, 271066650, 1208616454, 118164231, 101059144, 235559166, 235538958, 262158,
- 29425408, 12583360, 4456459, 6029392, 639767296, 859190325, 336926258, 640956166, 352723491, 353834516, 858986004, 352716309, 842208788, 640955702, 842216743, 909456694, 640955702, 352723491,
- 353834516, 589497876, 892675618, 574043702, 909391142, 353776179, 335742484, 639771398, 859190325, 173020722, 168431118, 793120270, 456073505, 807942165, 556735253, 354103073, 356001840, 555822875,
- 320150319, 319660045, 181410581, 168431118, 243404302, 235801098, 17697290, 168431192, 168431118, 790697998, 655958319, 942155529, 421988679, 556740385, 1191782169, 153561144, 790698279, 655958319,
- 319629065, 153554195, 168689959, 168693258, 3103657482, 168693258, 921098, 4278190085, 16777920, 2556100, 5046323, 6619225, 640745728, 352716551, 370611988, 892679735, 353776179, 352716309,
- 842208788, 640955702, 640955687, 891495206, 101975860, 891691555, 842217012, 909514518, 589706293, 336922146, 102045462, 370414854, 892744243, 120006196, 572720660, 909391142, 85340723, 875898402,
- 372388662, 17175573, 1342967346, 189794312, 437259791, 790304038, 456073505, 591012629, 168744976, 168693258, 352849418, 555822875, 353704751, 555822875, 135600943, 235538958, 235538958, 235554817,
- 235538958, 113115406, 185026570, 172492555, 672138758, 161946150, 790698279, 655958319, 975415049, 1209018403, 168693258, 1393430026, 555296521, 421605167, 164497703, 790698279, 655958319,
- 235555081, 235538958, 168698382, 168693258, 50335242, 3204390912, 3254870529, 1157643776, 19200, 369570067, 909522711, 118887959, 857085447, 101127702, 926287651, 370611766, 117835526, 654706183,
- 926361126, 101132070, 640034566, 640038711, 909521973, 909522743, 118887959, 352716337, 370611988, 656815895, 219088639, 219611916, 251858189, 184615169, 252315652, 168825398, 67635227, 187770891,
- 218961667, 235340557, 386075918, 51186957, 656678674, 51063620, 218959127, 354754143, 1041173815, 2550206222, 788726298, 50531597, 20712727, 169543681, 201840909, 168494088, 102631451, 51186986,
- 470619907, 221512963, 386073357, 1260013325, 911093292, 218967305, 1947665155, 656751377, 50736672, 66809, 4280287233, 27328992, 4260000, 370423552, 872561943, 389165878, 389165878, 118887959,
- 656868870, 102900518, 909247005, 387331639, 101123606, 639771398, 909391142, 372388662, 118887959, 640091654, 102900518, 708206598, 151719187, 370872849, 117771018, 168499720, 235472646, 152450591,
- 34146587, 726473994, 1010591294, 1294679654, 151128605, 369760777, 1227628342, 1328660523, 923357971, 117904141, 436733455, 117771019, 151913479, 320233481, 168428041, 505088282, 1044276796,
- 454966374, 168434185, 370346242, 33573163, 3237937152, 3221307394, 620765440, 554893312, 286594610, 589497876, 372388631, 587600917, 891691553, 858994228, 639771447, 909381941, 554770693,
- 448790848, 2954503718, 319636747, 16715027, 219353869, 447744837, 3657508390, 3221307646, 438747137, 639295742, 218960672, 218960659, 438706195, 639246337, 14745152, 4278190083, 25166272, 2556064,
- 4259891, 372375808, 353776149, 354616852, 587600917, 587605794, 891692578, 859190836, 590681906, 875898402, 875770678, 387187510, 892745494, 119940916, 841025286, 101979414, 639770915, 20329525,
- 219352352, 319623955, 520623373, 591012644, 589511203, 319627293, 320867603, 538976403, 538976288, 1073831968, 219353869, 319668478, 329253139, 218960653, 224436243, 588452627, 975381306,
- 321982755, 219352333, 620822291, 303239954, 319956261, 331682323, 320015629, 1248525, 4278190087, 16777920, 852167, 2687005, 4784185, 6422613, 909185792, 118888215, 572728070, 121054759, 353776161,
- 587600913, 891691553, 389428241, 386271010, 926036758, 119940918, 857084949, 892744243, 589706293, 386277923, 857084949, 892744243, 589706293, 923148835, 924194580, 657732918, 923141926, 909583911,
- 389165875, 101123862, 1074465669, 184812552, 67373952, 2147550472, 438707738, 639271166, 236747302, 470682893, 218959388, 219376654, 471010656, 471089172, 1611469760, 337384205, 538711104,
- 404232216, 404232216, 67649589, 192940804, 1074267140, 213582091, 168247308, 118098442, 4279903803, 640031232, 436207898, 404250662, 404232216, 279975960, 219353869, 471602192, 319623188,
- 336596243, 476847132, 235736334, 219028508, 1083772429, 168430087, 205522698, 4194239232, 1073922303, 369147905, 1090529280, 101908480, 336926487, 387323671, 909391142, 909588278, 555951655,
- 102892834, 387188231, 842208790, 875968310, 388376103, 370607921, 656868871, 640091655, 640104247, 387397175, 370619959, 3071281924, 50479117, 675226898, 185274475, 424738329, 1109893377,
- 336794388, 1109862210, 336794388, 606344258, 185273356, 185279781, 606342156, 185273356, 185279781, 396951820, 273670163, 16855050, 1210787876, 327354417, 668997399, 558768417, 556214049,
- 555830817, 623209255, 202115851, 202122276, 623184651, 202115851, 202122276, 65547, 31522560, 10486144, 16777262, 372388657, 587600917, 117908003, 353776179, 589497876, 587597319, 891691555,
- 858994228, 590821170, 875898402, 926102326, 989935158, 320015653, 135669005, 319639597, 929762579, 622670091, 219353869, 755504677, 320015696, 188181261, 329253169, 336792845, 218960748, 538674451,
- 319622419, 219376660, 461705997, 131104, 48299776, 10486016, 1572873, 909247744, 354497845, 20125204, 589506100, 640100130, 102900515, 3221296405, 16655898, 3221297702, 278927910, 538120970,
- 539368064, 3772783142, 1073817114, 420292122, 1075455514, 256, 1073864959, 771792897, 856883200, 336926258, 354624262, 353776179, 589497876, 372388629, 587600917, 101979427, 891691555, 639771445,
- 859190325, 875902259, 231755830, 2953646867, 320015760, 223383565, 1343034131, 319622419, 320015632, 18026509, 218960800, 219373587, 322966285, 1074990349, 219353869, 218960704, 228614163, 196627,
- 29425408, 12583296, 3211306, 318767158, 353703474, 336992022, 656541191, 857024294, 336926258, 352781830, 572720660, 775238950, 909391106, 875902774, 101058358, 387322901, 926299699, 319668259,
- 151661371, 420027145, 319651873, 321734954, 756223245, 1227500105, 689115949, 1076442935, 1544106274, 219398145, 153750051, 151652635, 324798744, 911224845, 319628039, 119737619, 808472630,
- 587675216, 193205005, 1143811396, 573638923, 768, 1073930495, 788570113, 1073755648, 822149120, 372388629, 101979413, 101131043, 101131043, 119743238, 572728070, 926361127, 589506102, 892675618,
- 557004340, 859190325, 855840306, 590821170, 354559751, 841036564, 35861557, 319623184, 373493011, 455019786, 1746017542, 1612252698, 67766544, 269681704, 320015626, 247464205, 3473803786,
- 352453889, 278204521, 276824336, 143130896, 223350035, 1258886931, 409474065, 2685340940, 219355407, 135466352, 4262333962, 1077609982, 269488304, 327696, 46071552, 12583168, 1310729, 6750290,
- 16777329, 354558772, 842208277, 640755509, 387384839, 657864470, 335950087, 118888215, 640100102, 335939362, 118888215, 640100102, 335939362, 118888215, 640100102, 335939362, 370546455, 892745271,
- 589706293, 353699362, 656868884, 822157862, 892679734, 572728884, 336925958, 336929542, 322307846, 101123878, 926357015, 273678646, 1661997072, 151850249, 218958112, 117933577, 185273181,
- 336033035, 1963394823, 185273099, 118753117, 190646023, 889916171, 117904391, 1864852487, 321529136, 336792845, 336034823, 707076865, 319622419, 606668298, 135142442, 235735328, 17375240,
- 1074794672, 221843472, 806160649, 218695949, 118753072, 185273181, 117929227, 1963398151, 185273099, 117901149, 190646036, 889916171, 336004871, 237462535, 709563933, 320015770, 134948621,
- 4261903367, 709564043, 320015770, 134752013, 508899171, 166134018, 135147533, 238030089, 768, 1090699519, 453033985, 855648000, 908394496, 589702439, 84346402, 370414854, 336933683, 841036566,
- 858207542, 338114098, 640091655, 909587509, 856102423, 336926258, 891429667, 1073886772, 16714753, 184880392, 167837446, 639634707, 440467738, 220201254, 539025427, 538976288, 1080041504,
- 3222286113, 230764304, 50847755, 235593477, 463475470, 2686068261, 304426259, 621941523, 320016933, 556762386, 790695952, 4211015936, 1073864447, 973119489, 823197696, 37426708, 588715570,
- 336922146, 104018710, 572728070, 387384839, 909587990, 908535590, 842217270, 640955702, 656810787, 892744243, 53159476, 219350562, 655953984, 319658249, 161025299, 391125287, 3759343368, 134748683,
- 764480005, 220465731, 588059411, 221777670, 2953646867, 319635472, 319651841, 219354395, 454365965, 2685212438, 185206024, 107415578, 219360317, 370807565, 319622419, 65555, 31457024, 10551680,
- 16777263, 372388615, 587600917, 370546467, 654706183, 101979431, 891691555, 639771445, 859190325, 909391155, 353776179, 372651797, 17176087, 229219925, 2836206355, 151128734, 2869566216, 319622419,
- 320015648, 219357197, 178983693, 34146331, 327706625, 2282949901, 168434440, 2056390914, 219353869, 218960800, 319660051, 2457472275, 168428041, 65563, 31522560, 10486144, 318767184, 352723505,
- 352716309, 588715540, 336922146, 839006998, 640955702, 639771427, 909391142, 370414903, 892744243, 842217013, 370414871, 892744243, 370611765, 909522710, 656811559, 589706293, 353699362, 119677734,
- 2418422837, 1043469069, 219223834, 2685211411, 320015776, 975413261, 320215587, 135466253, 319228168, 605228301, 219546122, 151195405, 219359546, 151458573, 18024711, 822940576, 624582167,
- 219355713, 219353869, 975377165, 305405475, 320015684, 16867085, 320015711, 756892685, 33754893, 1210977558, 319631635, 18943251, 319627521, 4278124800, 2147606783, 604020737, 353566720, 387331639,
- 117900822, 372388629, 587600917, 891691553, 637929269, 926295591, 909391159, 2148938291, 68619639, 2299333635, 320015840, 218169101, 386733843, 218891012, 218960681, 2206204179, 218891042,
- 654579469, 218960794, 2819429139, 218891015, 184817421, 320015766, 256, 2147606783, 755015681, 840105984, 504698134, 336925954, 639771398, 640955701, 101978407, 891691555, 352716305, 587600917,
- 892675618, 926299700, 3224777781, 1227690765, 218960682, 321468179, 689114381, 218960695, 759769619, 329253139, 906437389, 228601936, 2685211411, 4262151213, 320015844, 186384653, 228601156,
- 2685211411, 120999984, 1248547, 6, 25166336, 2490496, 4128819, 5439561, 16777309, 387396145, 839072534, 336925974, 101123846, 639771398, 640034599, 909391157, 926024507, 822294071, 892675622,
- 353706531, 555161108, 892679734, 354624308, 621217300, 842216212, 589509685, 354555682, 842216212, 119747637, 842216212, 589509685, 708837666, 488121890, 390598665, 1814573857, 555826714,
- 678173246, 1209475379, 421333264, 294789669, 520628243, 414318872, 321390623, 281345553, 3759149280, 269488144, 3490713824, 269525008, 2147553440, 554703127, 1093227799, 319888138, 169546003,
- 391457089, 387518497, 1041950462, 1426599970, 101066521, 139794727, 440279600, 269488266, 269488192, 269504528, 65552, 29228800, 12779904, 16777283, 370542385, 101979413, 891691555, 589706293,
- 352782114, 572720660, 101058343, 925247015, 640955703, 352723491, 587600917, 37561890, 842217012, 842216983, 926291734, 389428791, 771823126, 322579219, 471010573, 604374548, 152243475, 219677718,
- 1308953612, 471077916, 319622419, 152112403, 706157849, 571016975, 202184708, 898957580, 3492560645, 219353869, 18617552, 319658852, 202128401, 219677701, 471083739, 231740444, 3490517779,
- 236129616, 135270926, 202137350, 1573893, 4278190087, 25166560, 983200, 1638420, 2293790, 4587567, 909382400, 372384051, 101979413, 639770915, 857028405, 590816820, 87437845, 857015842, 857084967,
- 387188021, 892745494, 119940916, 336930566, 841036566, 101979414, 639770915, 875902246, 372388662, 18490976, 640031392, 442564122, 641744934, 639254566, 639262721, 438714432, 673767678, 673720360,
- 720381992, 177209630, 4262071822, 540483952, 235538958, 639262721, 450894374, 1075455526, 2686851648, 646325824, 639295514, 388919360, 773265175, 387389230, 519055895, 168431146, 557260814,
- 235801328, 768, 3221347071, 755016961, 855650304, 387121152, 909391155, 353776179, 372388629, 587600917, 118756643, 589768454, 587600917, 892675618, 891691555, 858994228, 909587509, 657790739,
- 2356876583, 218960697, 319627283, 387976467, 1684082198, 319622419, 320015648, 370614285, 981864388, 3235025409, 219353869, 218960832, 119046163, 2157057031, 219353869, 218960768, 119062547,
- 383516166, 1448493078, 1280, 2147598591, 33603585, 134219008, 452987648, 288817152, 389482263, 51459879, 287778567, 556996116, 288699954, 555951668, 1514145314, 861559091, 1499080281, 18095207,
- 471602208, 350289428, 201407004, 2256978054, 4110321344, 2256946689, 341900816, 18095132, 471602336, 768, 2147672319, 637575169, 1291858432, 823328768, 35526450, 909521459, 842217015, 336663830,
- 656548614, 572719662, 101123590, 891691555, 389428241, 842208788, 640955702, 84288035, 117908017, 572728871, 386270983, 909522710, 387330611, 657864470, 120464935, 1883572231, 1181763399,
- 319227655, 118692635, 1883637511, 1181763399, 319227655, 323296027, 320015629, 18025741, 1460079888, 185337626, 134890760, 1445073160, 592785713, 151521551, 2684422012, 286393090, 33755665,
- 2633896731, 50469651, 303108370, 320537091, 454255617, 320015744, 320015629, 562039309, 223807753, 100863502, 50726920, 3071085838, 196618, 31522560, 10486144, 2621474, 318767150, 387330611,
- 353776179, 589497876, 589497862, 587600917, 37561890, 875898402, 875901750, 640030518, 35463971, 926298675, 1480228928, 319619851, 184749331, 325073496, 219352333, 319623955, 523373288, 840917088,
- 1235222794, 218960695, 1615410963, 219353869, 219373696, 224400141, 605847571, 608190528, 262172, 31522560, 10486144, 3801141, 4587585, 842208000, 842209046, 101979414, 353772323, 842204948,
- 101979414, 101065507, 336929571, 639771398, 639763005, 859190325, 891691573, 892548660, 639055412, 35463971, 875902515, 354617127, 1883255347, 320230451, 219353869, 16843009, 219353869, 861148691,
- 218960720, 320015635, 320015629, 550179597, 29315118, 1352540417, 899678510, 218960683, 151586579, 218960647, 1077226259, 219353869, 219365472, 320869133, 1074990349, 543167245, 136331296,
- 1611139080, 65568, 46202624, 12583168, 318767150, 101127473, 370414869, 118830903, 336925958, 926364211, 842208791, 657732917, 370619687, 875902262, 875898663, 572728870, 2998928902, 2869431566,
- 34473530, 40791554, 973475330, 235735211, 303894962, 17899025, 175522402, 168311057, 726677763, 237635589, 18816769, 84421134, 54087723, 288950282, 289568266, 740368684, 1024, 180479, 469803009,
- 989865216, 17408, 336925969, 909259542, 389231925, 909579798, 908535606, 640955702, 572728102, 859117318, 336926258, 574038790, 335682822, 909259542, 842216757, 875902518, 354625062, 842216739,
- 101979414, 319622419, 419772458, 84610060, 657466932, 223356993, 556810259, 3491835695, 219353869, 523244301, 857611827, 338702367, 2147556380, 319660256, 2357202195, 84216588, 293604377,
- 1093151815, 2697794343, 790700335, 2685211488, 320015744, 857628685, 506666783, 337404064, 16784404, 3774808064, 2684436482, 11008, 572724481, 588584198, 353699362, 352723491, 858986004, 892679730,
- 892744243, 909259573, 842216757, 640955702, 102900515, 224428033, 319643667, 320015712, 319651853, 1611861344, 224400141, 2148340499, 2147554061, 1611469664, 325061907, 320015629, 219373581,
- 1611469664, 319622419, 262163, 47251200, 11534720, 4587531, 6160466, 102896384, 857084949, 875902514, 555030310, 891692597, 842217012, 101979414, 842208519, 101979414, 370483491, 101979414,
- 891691555, 892810804, 891691553, 858994228, 891692597, 842217012, 101979414, 857084965, 875902514, 102900518, 352723459, 842208788, 640955702, 235801216, 235801098, 356516118, 555822875,
- 1075125039, 219353869, 454361343, 790700335, 16717083, 219353869, 790304064, 456073505, 168702721, 168693258, 178785802, 168431118, 2013335054, 235538958, 235538958, 154613601, 790698279,
- 655958319, 219363081, 154604301, 790698279, 655958319, 219363081, 154604301, 790698279, 655958319, 235801152, 235801098, 168742654, 168693258, 67112458, 3237937152, 3221291010, 704651520,
- 1107310080, 286326784, 353834516, 858986004, 892679730, 370414881, 909259571, 909522229, 640946485, 102900003, 859189527, 387396147, 101979937, 891691555, 842217012, 639763734, 859190325,
- 336926258, 319754502, 319627277, 219348993, 252906784, 4263587601, 2184126880, 431888646, 3774747142, 218960656, 218960659, 220201235, 218960659, 1879118611, 555016446, 319631371, 538971411,
- 219353869, 337709872, 790700033, 404252975, 319643720, 319622419, 219360531, 219353869, 16782093, 3774873343, 2684453121, 16640, 102904083, 101127445, 370546438, 118830903, 370607622, 355940118,
- 858986004, 926299698, 656815669, 352781862, 589496846, 909522741, 119940647, 909587719, 640034614, 875890439, 319643686, 51121449, 386733828, 51121449, 386733828, 861932819, 16987477, 319687954,
- 958595585, 227098658, 386138892, 227112717, 386138892, 18052877, 906826656, 219612171, 117640460, 386140958, 51186701, 319662087, 137581105, 16847630, 570952978, 664412216, 218961668, 488768268,
- 219612199, 570625037, 1248547, 4278190084, 20972224, 1507520, 3473443, 318767175, 353776161, 587600913, 656607011, 656607011, 891691555, 322319377, 925247266, 389165878, 654706454, 101123618,
- 370546452, 926298675, 640103478, 909514534, 589706293, 336922146, 336926486, 1077228083, 639287297, 269490726, 283119680, 437260352, 783951398, 387389207, 387395118, 724440855, 353703498,
- 724257302, 353703498, 248859158, 336862226, 269357596, 650117392, 446758426, 538976294, 18490912, 4263909984, 673720512, 673720360, 623636520, 623203877, 623192875, 723854678, 270009741, 337386516,
- 1929713680, 83890192, 3237937152, 3221299202, 671094528, 1157639168, 23808, 859191059, 369237810, 34542613, 790766342, 875898370, 19989303, 387396150, 17241110, 656876038, 654390310, 589633287,
- 859191095, 369237810, 34542613, 790766342, 875898370, 909588229, 35598899, 252974358, 572720642, 891683375, 34532148, 235013381, 637863206, 84214286, 86380034, 2097256197, 588130318, 2214465038,
- 588130063, 415564046, 2365462633, 51722497, 352520200, 956761913, 134742805, 137893123, 356083457, 50857987, 134756373, 134419768, 957678344, 647299335, 237372677, 33883394, 84223502, 84020774,
- 2935882245, 235830529, 237440547, 235832062, 19402275, 409540678, 121181511, 51722503, 352520200, 940050488, 134742805, 121181693, 51722503, 352520200, 940050488, 134742805, 512, 180479, 234930177,
- 27648, 101134593, 874915618, 842413879, 655627799, 387323697, 389166647, 117904406, 389416726, 389166647, 117904406, 370611990, 570820359, 369567527, 118888215, 656541191, 387319591, 117904919,
- 656876038, 656541191, 926364710, 926164519, 389166647, 924259863, 926164519, 387397175, 657921814, 926364710, 1492713782, 117904391, 336025607, 198051591, 120456710, 117901076, 520751162,
- 336018208, 772212487, 185337864, 1327238155, 773852189, 185273376, 474946572, 556605197, 185273099, 203181853, 169478725, 172296457, 84614172, 520815885, 470425094, 202050332, 520429323, 186457354,
- 1486291211, 336004871, 117921799, 201790471, 120457222, 118753031, 153166138, 117914374, 772215815, 202049542, 488442635, 537206796, 185273355, 537664540, 185278724, 471599884, 151602444,
- 1158289930, 475012106, 184878347, 186526751, 186470172, 537594635, 470490667, 185343055, 768, 3221340415, 184600321, 1308638208, 335609856, 909579799, 640103477, 822543879, 589694743, 352716322,
- 857085460, 892745266, 120792884, 370611718, 909588278, 925049638, 656877110, 101123878, 370546438, 53884727, 640099874, 909522740, 387330611, 101127190, 406847750, 404232216, 1930958872, 286209834,
- 724257068, 1227631689, 407244075, 218959619, 69009942, 643962397, 1511393809, 187246124, 453511172, 604514570, 218967066, 439094541, 218967066, 19664141, 219028624, 471600653, 235736334, 53875813,
- 741099819, 1227565897, 2048795180, 50468365, 378342671, 789719843, 487861002, 169543710, 520619019, 448134662, 372512278, 370809366, 370553878, 4278255642, 31522815, 10551680, 318767170, 370546481,
- 842208533, 101979414, 336929571, 842216214, 892679734, 589506100, 875898402, 842216246, 336925974, 589497862, 892675618, 891691555, 858994228, 656815157, 925247015, 136590902, 220213284, 537727763,
- 589303059, 219358010, 320015632, 942149645, 540366644, 220215336, 537727763, 218631184, 352452880, 83992577, 320873526, 2685603085, 975377165, 319627299, 319622419, 891299896, 674772055, 218960800,
- 302849811, 352452865, 1051917, 4278190092, 16777952, 852128, 2687003, 5111872, 6946908, 8781944, 10616980, 318767280, 858986004, 875902514, 572728102, 102897414, 857084949, 892744243, 119744052,
- 336922146, 842216214, 640955702, 338757411, 370611990, 842216214, 909588278, 640955702, 102900003, 857084983, 892744243, 589506100, 336004642, 842216214, 640955702, 102900515, 352723495, 858986004,
- 875902514, 337060646, 842216214, 640955702, 102900515, 352723495, 858986004, 875902514, 337060646, 842216214, 640955702, 102900515, 352723495, 858986004, 875902514, 572990246, 370414854, 909259571,
- 589706293, 269094576, 168693258, 403573264, 168693258, 235801104, 235577354, 168823310, 1208618510, 33632060, 216534034, 788595218, 4262137916, 3759147830, 168823310, 269094414, 241176074,
- 235540490, 168823310, 235542542, 168823310, 3356102158, 168823310, 269094414, 169348618, 269094414, 168693258, 269094504, 168693258, 403573264, 168693258, 235801104, 235565066, 168823310, 17436174,
- 235801224, 235801098, 168431162, 168431118, 168708110, 168693258, 896208394, 202248788, 252448784, 188044305, 172494864, 168431118, 168431118, 168431118, 240520718, 235801098, 1611532810,
- 168693258, 1443761674, 235538958, 235538958, 235801184, 235801098, 168431190, 168431118, 168708110, 168693258, 33558026, 3237944832, 3221315585, 1040190208, 571670528, 370607623, 909586995,
- 352527911, 842208788, 859125046, 370414899, 892744243, 842216245, 875902262, 640100134, 723658534, 101130755, 369493767, 926291479, 3222541623, 218959388, 236723214, 1678642445, 319622419,
- 219351048, 271061773, 573313805, 455607558, 218235394, 772146689, 101136919, 102370315, 415236357, 404232216, 4262991896, 319644033, 1616907539, 219353869, 537727840, 554054947, 16917531,
- 207693574, 101123610, 423036684, 256, 1090699519, 1241563137, 891617280, 118757155, 587600917, 572727843, 639762987, 640942653, 102900515, 101974557, 589431339, 572728098, 875902246, 572732725,
- 926168358, 859190821, 890705714, 858994228, 353703474, 336008727, 538968582, 286720257, 33620496, 286793986, 1074598679, 286724877, 50405400, 286261507, 319627287, 83951882, 151782923, 537727850,
- 204804877, 27267841, 268764065, 286725905, 319635480, 406850835, 286725905, 1157694064, 168693267, 117638623, 319628638, 779685139, 319687947, 256, 1090699519, 721469441, 891617280, 101979939,
- 925311779, 656880694, 387384870, 387384839, 891691555, 639771445, 624374837, 842217014, 118888215, 537003540, 438698272, 105981563, 336295430, 190135304, 442900231, 319627302, 83951882, 151782923,
- 318835967, 446759328, 88293414, 140313871, 1196624659, 640945161, 236167194, 98503182, 199231235, 1248781, 4278190082, 21037760, 1835200, 620757048, 337060661, 572596998, 590689574, 875898402,
- 909518135, 387396147, 101975830, 572724517, 856954133, 856954163, 892678707, 892678707, 891495220, 572728116, 18882562, 3221101094, 220210714, 16845331, 201722629, 17628937, 819199507, 271585296,
- 271585312, 537931792, 2701238288, 438707738, 235803552, 50716426, 218882055, 810554126, 806363152, 271585296, 271585312, 536871168, 1644282111, 855687169, 571670528, 236262662, 370414850,
- 336926486, 909259542, 926299445, 640103990, 587597606, 891692578, 859190836, 907417394, 656815671, 875898662, 319676454, 707414317, 219360585, 623776525, 134743051, 723651099, 589511203, 573252410,
- 134748938, 774179588, 331350291, 906437389, 1345335376, 220399414, 588059411, 453516295, 134482698, 591012634, 438516259, 168494088, 119277595, 1248547, 4278190082, 25166272, 2031808, 318767149,
- 372388629, 587600917, 101979427, 891691555, 639771445, 859190325, 909391155, 51786291, 557004340, 336926258, 572596998, 225501222, 1879905043, 319622419, 320015728, 219377677, 333452045, 222298381,
- 4262269715, 18025920, 219377824, 225448717, 1879905043, 319622419, 320015728, 319632382, 319622419, 196627, 46202628, 12779836, 1703948, 16777259, 858985489, 657864498, 101131779, 119943431,
- 370607623, 892482355, 822293557, 857085463, 926298657, 589706807, 17179169, 182456320, 3758490884, 738921223, 75499020, 2148074756, 184867344, 906046277, 67847467, 4245162242, 17369322, 281083568,
- 17303561, 50596416, 3758818140, 268961800, 3506310368, 875833615, 218566441, 4278321165, 29360125, 12648707, 9240687, 103879424, 370611735, 372446998, 370546454, 101127703, 370542342, 101127703,
- 101058310, 640754471, 640034598, 925247015, 370619958, 372315926, 907417366, 909588023, 656811814, 656877094, 656811569, 640099878, 909456439, 858142518, 640099878, 909587511, 909522742, 387323415,
- 101127702, 640034566, 117843495, 924129030, 909588022, 656811814, 640100134, 117835526, 370611718, 387323415, 1093677107, 151192321, 34873098, 168897042, 84477455, 135008515, 84542479, 353771524,
- 234953011, 67309095, 84675842, 51189508, 504300294, 169874441, 16843538, 168231425, 302191901, 285806889, 50596870, 16977943, 201658634, 520356099, 439555351, 201925383, 386138893, 119473677,
- 302653204, 286395466, 16843010, 168167171, 186586129, 33620753, 168297217, 16848159, 117902176, 118163206, 135073798, 504957971, 101391635, 504892178, 151594010, 218235908, 16843013, 218896388,
- 33621260, 34145537, 134480643, 34146064, 185009414, 235208966, 185730572, 16850200, 17506069, 403444231, 436273438, 67701286, 50790660, 218961667, 117507085, 84083457, 50454792, 134942979,
- 101057290, 50529285, 252183555, 100796422, 101385989, 1536, 188671, 453025793, 838871808, 1174420736, 20992, 355606803, 572597012, 370414854, 588579643, 656811554, 891691555, 873674292, 640104246,
- 909522726, 588584727, 823600674, 389494325, 908539654, 925316149, 101979414, 387330563, 589506055, 370411317, 892744243, 572728884, 2416001030, 1895698448, 219353869, 941141785, 36588077,
- 640031233, 67636410, 67307785, 1212156178, 92278282, 1126848005, 2097218139, 932910340, 210048087, 244847119, 235801098, 17697290, 319819936, 3222473997, 640436523, 4263909914, 17697112, 152175617,
- 386074889, 1175260744, 572719873, 101131323, 307692806, 20455442, 1546664968, 172015624, 168431118, 50335246, 3237937152, 3221291010, 1593852416, 26624, 352723457, 352716309, 387388948, 336925974,
- 656548614, 117843495, 387388934, 336926486, 909259542, 909522229, 640955701, 891692839, 858994228, 370612018, 641087286, 656811815, 86389813, 370414869, 892744243, 370619189, 909522710, 909518631,
- 640037941, 102900515, 842216727, 101979414, 227541283, 674046739, 505558050, 386995220, 117971467, 320342789, 218960663, 690823955, 522335265, 252772887, 102304778, 168560902, 4262662929,
- 218960739, 87566867, 185338905, 807810053, 1344815399, 809505549, 556740385, 219398145, 658312214, 353188900, 352527374, 118491934, 436931333, 101519112, 320015635, 1007359245, 1008993063,
- 604902669, 101130262, 202115334, 134546969, 319623684, 228646976, 2148340499, 84610188, 2148276485, 673990417, 3440584513, 555823008, 196655, 31522560, 10486208, 2031631, 318767151, 857084945,
- 892744243, 589706257, 117842467, 857084949, 892744243, 589706293, 621158947, 286590498, 858986004, 288699954, 2686658100, 337646620, 538188828, 480254996, 471080980, 337646620, 342884636,
- 538188828, 337386516, 2701029377, 337386516, 471097345, 346084380, 2685672476, 2619087892, 3774747676, 337386516, 471080961, 512, 188671, 520134657, 17152, 640955649, 102900003, 370414869,
- 588591923, 387384866, 926364182, 589506102, 909259573, 101131015, 589768482, 639841077, 572733222, 336925958, 841036566, 875902262, 371401510, 857933574, 438697986, 639271166, 782768678,
- 1175129104, 1174868999, 772803595, 1076239016, 772867475, 1402144017, 117706241, 640031303, 444596506, 1192896038, 17630471, 1075839315, 438707738, 1076238912, 122030878, 504055303, 115746368,
- 1074139152, 638526222, 639254554, 440408614, 237178662, 768, 33743103, 50372609, 939528960, 556072960, 840245557, 875902262, 572597030, 336925958, 823341846, 355611445, 102900501, 840308503,
- 641087287, 875897635, 570632998, 336925958, 842216214, 4273996086, 444596608, 4263126566, 640031360, 273735706, 185339942, 118753094, 269224774, 2418093862, 639275024, 446700070, 2151686182,
- 440408614, 1075455526, 1073817114, 504369216, 117917195, 270404422, 438710049, 640031296, 768, 33743103, 251699201, 939529216, 337969152, 572596998, 875902246, 841036598, 858068246, 388178741,
- 589497876, 892675618, 54212148, 353703474, 118895155, 656541191, 859186727, 590624051, 637534755, 444661274, 18490918, 4263910016, 2417008704, 2686068448, 438707738, 563089552, 202384943,
- 336021003, 202065415, 1343235600, 640031264, 639254554, 1086331430, 640031296, 639254554, 504373551, 117917195, 270404422, 393232, 46202624, 12583168, 4128785, 5701709, 7012449, 639763712,
- 926164519, 842217014, 336992022, 654706183, 387388977, 926036758, 875902519, 656811815, 572728871, 654706439, 640100134, 117908003, 101123846, 370611974, 909588246, 119944983, 386270727, 858986007,
- 52901426, 842216212, 589509685, 119944994, 370611974, 120010295, 119940918, 370607623, 1157628215, 572662646, 1162180131, 572662646, 57964067, 218831108, 151784725, 67572233, 101122826, 218565379,
- 184877829, 84677395, 270729987, 100927499, 168824347, 353331210, 184748839, 503908139, 805832970, 269488144, 95883280, 134549263, 84872965, 185338908, 202121227, 1161825035, 998914875, 994395451,
- 993757755, 33725253, 252774160, 185536012, 436930839, 168756231, 100991234, 50794255, 554111234, 185402895, 67306757, 117772234, 319100675, 4261876739, 269488373, 84217717, 84875279, 188223237,
- 537660427, 202115851, 4294902784, 2164441087, 738246913, 1258303744, 23040, 907489555, 389165875, 909587766, 336992050, 119670535, 842209046, 101979414, 118760227, 118887959, 19334662, 909583910,
- 103874870, 388445447, 120006165, 640098822, 909588276, 590685751, 875898402, 909325110, 353776183, 587600917, 891691555, 657863733, 1879837897, 1073813273, 151656970, 16859145, 222298633,
- 1074598675, 34118147, 135529990, 34124029, 18089478, 2838964368, 1059533705, 151656970, 50544649, 319635471, 20974867, 288893087, 285968395, 2663055672, 16845571, 168364352, 20974106, 219354387,
- 235868941, 135530104, 17170952, 135530192, 1291715080, 2255881511, 570789996, 168364351, 37751322, 321134850, 252906765, 69744881, 185667851, 3680260, 4278190084, 20972224, 1441984, 2818073,
- 285212739, 857084945, 641151521, 909391142, 572732727, 590689574, 654640674, 102897429, 387188231, 842208790, 875968310, 119940647, 355611413, 354624276, 891429652, 891429685, 892547892, 640824116,
- 83886362, 1227366917, 319651895, 19274400, 665878656, 320017474, 656884244, 320017474, 806830612, 271585296, 269496336, 17829936, 444661376, 1259864358, 257834028, 2148340519, 2155895334,
- 555820896, 656482638, 1310794023, 1344741665, 806359088, 271585296, 1060880, 4278190084, 25166528, 1507520, 3211304, 318767176, 891691569, 909588276, 389161267, 336926231, 640026374, 117908003,
- 101974557, 639771427, 355664445, 571946291, 857019654, 119944245, 842217012, 840242454, 336925974, 572728070, 875902246, 254096182, 239863318, 445382938, 335957006, 388501262, 474095662, 471130132,
- 231784512, 1561542675, 790700335, 219353869, 320015776, 369099021, 1913195279, 158471445, 18157323, 538972431, 340795520, 1343495196, 278962336, 808455443, 555750157, 807481135, 226495763,
- 2148340499, 50336525, 3237937152, 3221291010, 2751502336, 45056, 370422035, 102052659, 909584135, 572925748, 335939335, 926029335, 117839671, 640955683, 352723491, 857084949, 892679730, 118953523,
- 119678503, 387388422, 909586966, 925312820, 588584726, 336922146, 842216214, 640955702, 909452067, 101127991, 840308500, 875968311, 119678503, 926295815, 370414899, 892744243, 589706293, 353699362,
- 925312547, 926029335, 656880694, 101130790, 118953748, 859121446, 875902514, 572728102, 118757126, 891692806, 389429044, 639768342, 859190325, 336926258, 168738822, 405024272, 117901067, 121112340,
- 118753031, 102504459, 168431138, 168431118, 470163982, 336005912, 939984647, 117904391, 622332679, 235540525, 173017614, 269094414, 186131502, 336004871, 117913607, 185013255, 570825752, 235538958,
- 235538958, 404489762, 118753035, 121112327, 117901076, 757405707, 235801104, 235556874, 404232240, 404232216, 235552792, 235538958, 178782478, 470163982, 336005912, 939984647, 117904391, 622332679,
- 235540525, 173017614, 269094414, 186131502, 336004871, 117913607, 185013255, 570825752, 235538958, 235538958, 404489762, 118753035, 121112327, 117901076, 757405707, 235801104, 235556874, 772803086,
- 118167588, 118753031, 117901112, 403375892, 237110812, 235801098, 219028690, 471600653, 235736334, 168431236, 168431118, 4278321166, 46137343, 12648833, 9437267, 389092096, 389166647, 117904406,
- 892810775, 891691555, 858994228, 336926258, 354624262, 657921814, 909587494, 370612018, 570820372, 369567527, 875901719, 372388662, 101979413, 891691555, 117842741, 118887959, 19334662, 909583910,
- 103874870, 842208519, 101979414, 639771427, 859190325, 656815411, 336992007, 656541191, 926164519, 387396150, 589768247, 587600917, 892675618, 842217012, 857019670, 1596405558, 118753057,
- 403375879, 168832293, 1342836238, 168693258, 405024272, 117901067, 121112340, 118753031, 102504459, 168431138, 168431118, 302260750, 100796575, 4245165062, 100796592, 1912673286, 168828443,
- 1342836238, 168693258, 405024272, 117901067, 121112340, 118753031, 102504459, 168431138, 168431118, 33628686, 558611201, 336004871, 471337735, 168698374, 168693258, 102895114, 118167580, 117901076,
- 118753080, 403375879, 168832293, 1342836238, 168693258, 2082349840, 134747142, 3489728002, 134747142, 241434114, 168698372, 168693258, 102895114, 118167580, 117901076, 118753080, 403375879,
- 168832293, 1342836238, 168693258, 657680, 4278190084, 25166528, 721088, 6357071, 16777329, 572728884, 370414854, 389427763, 372388657, 587600917, 857019683, 721819414, 640033282, 101135669,
- 874915618, 842413879, 336992023, 656541191, 370414887, 590689075, 875898402, 640889654, 909391142, 353776179, 335873556, 570820358, 891692583, 909588020, 370546482, 572928295, 640091911, 387384839,
- 909588246, 219365377, 219353869, 185930509, 219353869, 571675424, 1347423244, 120277292, 117904391, 336017415, 117913607, 117904391, 540026936, 219353869, 941036555, 389556264, 556209921,
- 555830817, 555820839, 656482638, 68027469, 185277757, 187173900, 17582091, 320015712, 320015629, 218960707, 626032659, 1227555353, 117900844, 118753031, 939984696, 117904391, 671483655, 219402296,
- 705499917, 943204377, 3442088232, 320094759, 658641939, 320094759, 71439379, 473695493, 185273356, 1208749096, 327691, 46202624, 12583296, 5177355, 7143521, 16777335, 572728884, 370414854,
- 389427763, 372388657, 587600917, 857019683, 721819414, 640033282, 101135669, 874915618, 842413879, 336992023, 656541191, 370414887, 590689075, 875898402, 640889654, 909391142, 353776179, 571672084,
- 874915622, 859190839, 370611762, 101058324, 352723495, 842208788, 640955702, 353706535, 892482324, 1073820725, 319622419, 319622419, 319621909, 320867603, 202121747, 1227640912, 336004907,
- 939984647, 939987975, 336004871, 674760455, 319627312, 336268563, 673724439, 663164728, 320017474, 656884244, 320017474, 170344980, 168431118, 269094414, 1610682384, 219353869, 1125323533,
- 319622419, 421875840, 742992642, 117901062, 939987975, 121112327, 117901076, 942147079, 218960848, 422186259, 674773032, 2751343129, 1310794023, 656875809, 558768417, 241182497, 235801098,
- 2416839178, 269504528, 67113040, 3237937152, 3221323778, 1325402880, 2063622400, 872480768, 102900518, 857084949, 823604786, 353776179, 589497876, 372446485, 36374039, 891692578, 570820405,
- 926164519, 389166647, 118756887, 656876038, 857084949, 572732723, 909391142, 640037683, 859190325, 336926258, 639767302, 926164519, 842217014, 336992022, 923141639, 572925750, 640091911, 387384839,
- 370607623, 370620215, 657864498, 322961703, 320015629, 353570061, 320015627, 320020493, 1342966818, 726215760, 118753031, 121112327, 121112340, 118753031, 807942151, 320015648, 387189517,
- 942155832, 1109886743, 336794388, 1109862210, 336794388, 202118210, 621022724, 202050341, 203695116, 621480716, 68027429, 19139596, 320015712, 320015629, 218960707, 626032659, 1227555353,
- 117900844, 118753031, 939984696, 117904391, 671483655, 219402296, 705499917, 943204377, 4264171816, 555820963, 656482638, 1310794023, 3039240481, 84216587, 202122276, 623184651, 202115851,
- 84223012, 2427659, 4278190084, 25166528, 721088, 5898321, 16777329, 572728884, 370414854, 389427763, 372388657, 587600917, 842208547, 387192119, 570567430, 892675622, 656541191, 926364710,
- 387396150, 101127190, 354887458, 858986004, 639771445, 859190325, 891692595, 842217012, 101979414, 352723479, 875901717, 909379366, 353776179, 353776149, 587600917, 891691555, 859190325, 219365377,
- 219353869, 185930509, 219353869, 134754336, 1342966535, 726215760, 118753031, 121112327, 121112340, 118753031, 807942151, 320015648, 387189517, 942155832, 319661847, 794628928, 221192481,
- 2685211411, 219353869, 319643649, 319622419, 219366163, 30413581, 34476065, 103565611, 117901063, 121112340, 336017415, 117901063, 3493341190, 319622419, 672737805, 422066232, 219368746, 319631408,
- 791617824, 219361313, 320015744, 319651853, 768, 1073922303, 1006682113, 1308640512, 823590912, 926164519, 387396150, 639771445, 993408053, 101135619, 874915618, 842413879, 336992023, 656541191,
- 842208551, 101979414, 924131619, 370618934, 101123860, 875889442, 372388662, 352654613, 572720660, 2301965606, 168364384, 1613302298, 219353869, 700465248, 151656970, 436887561, 151609354,
- 688527882, 320015712, 698416653, 151656970, 436887561, 218960659, 318767379, 923995405, 169478752, 1932134665, 319622419, 151595635, 1611274762, 174065929, 151587354, 219378474, 712184589,
- 436865289, 17391626, 319651904, 2155875603, 320015744, 83918861, 3237937152, 3221323778, 1124088320, 1426082816, 27648, 570831127, 874915623, 389166647, 572732695, 909391142, 120914747, 640098822,
- 909588276, 387396147, 101127190, 354887458, 353699379, 909579553, 336992050, 891496199, 842217012, 856888598, 587600917, 926230050, 353699362, 640955699, 859190279, 353703474, 353703474, 589497876,
- 892675618, 2536715828, 1611274762, 436865289, 222308618, 1074598675, 170491968, 151587354, 218958432, 151609354, 688527882, 16714571, 169478697, 1079445769, 319622419, 219365504, 233837325,
- 1561542675, 790700335, 219353869, 320015776, 151598861, 169478752, 1932134665, 319622419, 151595635, 1611274762, 174065929, 151587354, 420967210, 153776912, 169478665, 319652055, 16715027,
- 320015744, 219402253, 319631408, 791617824, 219361313, 320015744, 319651853, 1792, 2147664127, 503365633, 905980416, 1308639744, 1979734528, 285278208, 37426708, 892679730, 589506100, 589706293,
- 353699362, 640955683, 102900515, 858993687, 336926002, 891429667, 355611415, 589501461, 875902242, 858993685, 336926002, 891429667, 355611447, 589501461, 875902242, 858993685, 336926002, 891429667,
- 572928293, 387188231, 102900503, 857084949, 335939379, 926029335, 657733175, 337387521, 471113824, 236459036, 672008714, 341840924, 537935900, 270536720, 269492240, 537923616, 270536720, 269492400,
- 537923616, 270536720, 436905982, 436799754, 320015731, 152728333, 169478665, 17369424, 341900944, 3759414300, 172497940, 1208618510, 471602320, 537923636, 271585296, 537923616, 269512720,
- 806359072, 269492240, 275779616, 269492240, 168364535, 320408090, 420678925, 151656970, 436883465, 4278452234, 46071806, 12583234, 5636122, 7798886, 639771904, 101135669, 874915618, 842413879,
- 336992023, 656541191, 101979431, 389423879, 842208790, 909195062, 370611735, 101058326, 656811559, 572720646, 640034598, 101123623, 639771398, 117835303, 640099846, 926299958, 372315958, 909259542,
- 571814183, 117843495, 117835526, 859190325, 638923013, 640099879, 587597606, 842216753, 220201238, 436869395, 1342769418, 1342839306, 436865289, 521345290, 286397185, 689181992, 370349328,
- 51252508, 319624707, 806685469, 237639705, 100861957, 405409290, 152449049, 369955614, 219022083, 353572380, 353642768, 488521000, 286272530, 470288661, 135266836, 269554953, 505221676, 1612453008,
- 450039059, 436865289, 151605258, 169478736, 3541698825, 222696205, 252578829, 303042059, 219546375, 67309069, 235669262, 67241740, 117703682, 101453324, 235078671, 51776781, 252776967, 4061007627,
- 17568992, 33885710, 471120133, 33929520, 34475269, 484447244, 4278125056, 1107476223, 1191231489, 33536, 842215699, 857019670, 570820405, 926164519, 389166647, 118756887, 656876038, 372388629,
- 118756629, 656811814, 101131814, 640098851, 101058338, 640098851, 117835526, 891684614, 859190325, 909391155, 370549523, 926298675, 370619953, 118887959, 640091654, 101066534, 656810531, 103228966,
- 587597319, 103228962, 637929222, 926295591, 389429046, 857085489, 909588018, 471105648, 436869504, 1342769418, 1342839306, 436865289, 338696458, 101057820, 739250453, 505290002, 287838493,
- 504372749, 271323677, 101061905, 269753349, 285333276, 689181992, 370349328, 51252508, 319624707, 806685469, 237639705, 100861957, 405409290, 152449049, 369955614, 219022083, 353572380, 353642768,
- 17961256, 3490979008, 151591571, 1342839306, 173017353, 151587354, 337416986, 34212960, 235799810, 336858113, 185142284, 234949652, 33686798, 341838858, 471126044, 235690750, 269355791, 369297170,
- 51252493, 201788932, 34016270, 67371524, 202247175, 50597638, 369954062, 286394115, 235866895, 184552716, 3120496640, 3221309186, 637540864, 1040200192, 1442859520, 1845518848, 2248178176, 37376,
- 372388627, 101979413, 891691555, 570820405, 926164519, 639771447, 87438389, 654706452, 926168358, 118888246, 654706452, 926168358, 118888246, 925247266, 389165878, 386270998, 654706452, 926168358,
- 387323702, 654706452, 926168358, 622204726, 925247266, 389165878, 386270998, 654706452, 926168358, 118888246, 925247266, 389165878, 621152022, 654706452, 926168358, 655759158, 925247266, 389165878,
- 2684749590, 320015744, 3373468941, 151656970, 221497865, 2902528787, 404232216, 404232216, 404232320, 404232216, 236728344, 470682893, 218959388, 404231182, 404232216, 411047960, 404232216,
- 4262991896, 219028688, 471600653, 235736334, 404232212, 404232216, 236761112, 470682893, 218959388, 412352782, 404232216, 806885400, 218959388, 236723214, 17698061, 2148340672, 219353869,
- 151636531, 3372882442, 319622419, 219028560, 471600653, 235736334, 219028636, 471600653, 235736334, 404232396, 404232216, 236736536, 470682893, 218959388, 236723214, 470682893, 218959388,
- 404239374, 404232216, 475011096, 235736334, 219028508, 407637517, 404232216, 2954369048, 218959388, 236723214, 873336077, 404232216, 404232216, 768, 1073930495, 218144769, 1140860928, 841285632,
- 101979414, 639770915, 859190325, 570820389, 874915623, 389166647, 909391127, 353776179, 842413845, 622073367, 118756913, 656541191, 926164519, 387396150, 859190325, 353703474, 36845111, 320015648,
- 218168845, 34411283, 436887575, 151609354, 688527882, 319622419, 169478697, 163053065, 436887561, 151609354, 688527882, 319622419, 538577449, 319622419, 319622419, 151609481, 169478752, 3542747401,
- 219353869, 151595731, 170138122, 157288986, 436887561, 705235210, 320015827, 153801485, 234882560, 1912783103, 453033985, 855648000, 2516598528, 45568, 372388115, 909579541, 336992050, 570820359,
- 874915623, 389166647, 909391127, 101127191, 875898407, 370619959, 101127175, 875898407, 370619959, 640098821, 842217015, 101127703, 336933125, 572728070, 120927526, 640091654, 909588262, 842216246,
- 909522711, 372388659, 859182871, 387330611, 117839383, 656877062, 587600917, 891691555, 101058357, 925247015, 656877111, 587600917, 891691555, 117835573, 117839383, 321332742, 926164529, 387396150,
- 859190325, 353703474, 389166647, 117904406, 2418483718, 118951434, 117901076, 118753088, 117901120, 236390164, 336860386, 336860180, 336900116, 336860180, 939594772, 185273367, 202839820,
- 4262202123, 806163393, 85660429, 101255187, 705373701, 353899544, 405408546, 187308052, 337122594, 638265880, 134809093, 320537875, 319631373, 135464219, 604309001, 320537090, 319631373, 604176667,
- 134809093, 129762579, 118753031, 168431127, 336008974, 1074202375, 17241095, 1980370624, 117901079, 121636628, 336019463, 386336519, 3356363382, 185273367, 202839820, 1997277963, 185273367,
- 202839820, 1057753867, 336860180, 336860180, 319629161, 841420051, 84215305, 356976659, 356453657, 1058347289, 1192565005, 84153352, 657590534, 219353869, 101265959, 135464197, 839123524,
- 320015671, 53622541, 336086019, 151389444, 336024065, 386336519, 235801206, 118978058, 118753031, 460608, 3, 25166336, 852096, 4456502, 102896384, 370413845, 892744243, 388379665, 119678513,
- 387188231, 926029335, 656880694, 335939379, 926029335, 657733175, 119678503, 387388422, 875968291, 589706277, 286590498, 842208788, 220214582, 218960659, 181015315, 157288986, 436887561, 705235210,
- 151595750, 1611274762, 174065929, 151587354, 153806378, 219381761, 219353869, 2147554061, 3237874963, 219353869, 319635457, 1611204937, 1611274762, 436865289, 170469642, 151587354, 169478752,
- 168364384, 690555418, 221452810, 4262269715, 320015808, 262157, 31522592, 10486240, 3276824, 6619211, 119668992, 842217013, 909580054, 353703447, 572728084, 926361127, 822552102, 336922118,
- 891691799, 657929780, 859191078, 353710643, 654706452, 336926213, 370607878, 589497863, 875902242, 387397175, 875902518, 842073895, 587601207, 120006178, 891692806, 858993717, 118888242, 18224647,
- 269488128, 508242448, 168429346, 67858448, 337643524, 319920436, 486686979, 67641882, 275778308, 17238538, 438108729, 67373090, 168849419, 287377162, 278725395, 705695760, 119676491, 1880099338,
- 134480907, 20190240, 37815136, 136452637, 1879770116, 118098448, 991105313, 270349332, 705695760, 119676491, 1880099338, 134480907, 705695781, 119676491, 1880099338, 134480907, 489952288, 62918672,
- 438108737, 67373090, 168849419, 287377162, 65555, 46202624, 12583168, 318767166, 638924593, 909583139, 572925748, 335939335, 840308503, 657733175, 372388647, 370545685, 909259571, 589706293,
- 891691555, 840308497, 657733175, 119678503, 387188231, 704066070, 712188701, 436865289, 151609354, 169478752, 1932134665, 975382042, 319635491, 440405267, 436873510, 1611204874, 1611274762,
- 436865289, 2754226433, 436873489, 1611204874, 1611274762, 436865289, 438708490, 321075747, 638782733, 705888538, 436865289, 151609354, 169478752, 327689, 46202624, 12583296, 2883616, 7274574,
- 318767254, 387388422, 352723491, 858986004, 926299954, 909588021, 640955701, 352723491, 572925717, 370611219, 875902519, 101131815, 101134599, 840308500, 336934711, 909259542, 657732917, 640755494,
- 590426403, 336922146, 352400150, 387199281, 372315926, 909259571, 589706293, 875968291, 119678503, 640955655, 319169059, 909259569, 589706293, 808464675, 101130801, 806684167, 355545392, 842208788,
- 389362998, 909586966, 151594804, 219376137, 1611469587, 84280583, 318898948, 1762856205, 552409610, 538976288, 2367692832, 168364394, 325650970, 34802957, 218760195, 320015712, 37749005, 218760195,
- 320015712, 157946637, 169478665, 218960745, 219376915, 1611469587, 50596365, 218960642, 436889875, 17369354, 169478839, 218960745, 67240723, 101057537, 319643654, 1779633427, 620822281, 303239954,
- 319956261, 1770328595, 151656970, 219376137, 1611469587, 84280583, 218960649, 1610613011, 84280583, 218960649, 436889875, 1778977034, 320015635, 219411454, 84480781, 1611007494, 219353869,
- 151611923, 662026, 4278190085, 16777920, 1507520, 4587567, 6946910, 573636864, 588584198, 386271010, 926029335, 640103991, 875897635, 103875366, 858986007, 857084949, 892679730, 909586995,
- 572925735, 102901511, 857084949, 387192115, 909588246, 640100148, 353699335, 370618629, 892679735, 892744243, 589506100, 640103477, 335939335, 352723495, 842208788, 640955702, 319619073, 151524640,
- 436879375, 135217162, 320869641, 151523172, 219357205, 354423565, 1074726921, 3372882442, 219353869, 252974112, 1074334016, 18092816, 319832073, 319627284, 337644819, 155193363, 320015680,
- 320015629, 219398145, 252974112, 1074334016, 538186512, 2013139725, 538186512, 219353869, 269685792, 1762199872, 319622419, 151524640, 436879375, 135217162, 924849417, 151523136, 219357205,
- 354423565, 1074726921, 321722890, 320015629, 1248525, 4278714374, 24642248, 1704120, 3866671, 7536727, 318767247, 387388422, 352723491, 858986004, 892679730, 572728884, 655693062, 823599654,
- 35526406, 909521459, 774321719, 102900482, 656545542, 859191078, 118888242, 120656646, 589706293, 353699362, 858986004, 875902514, 925049638, 640103478, 372310306, 355940146, 842208788, 875902262,
- 572728102, 370414854, 101135155, 372311316, 875968306, 842213159, 640955702, 102900515, 370414869, 892744243, 117903157, 235546175, 174066190, 168431118, 336019214, 201787248, 825313843, 101528394,
- 1244859654, 860500273, 319956398, 623186451, 303239954, 168706026, 168693258, 235801184, 121579018, 4245948167, 118753209, 168431167, 1611271694, 168693258, 34029350, 118753095, 641664775,
- 168693258, 235801184, 17697290, 118753201, 168431167, 1611271694, 168693258, 3959897894, 1041828876, 423505197, 1041828876, 1698573613, 538976288, 538976288, 641675521, 168693258, 235801184,
- 1057884682, 117904391, 117905406, 235546175, 174066190, 168431118, 336019214, 117901063, 239011604, 235801098, 235560970, 2492942, 4278190082, 29360576, 2359488, 16777288, 387188273, 102900503,
- 336925958, 909259542, 909391157, 101135155, 840308500, 875968311, 572925735, 335950083, 572725015, 336925958, 909259542, 909391157, 101135155, 840308500, 875968311, 572925735, 151595265, 975426346,
- 218960675, 3541706259, 168364330, 157288986, 436887561, 705235306, 322447507, 320015629, 153785101, 169478665, 1611204960, 3070302730, 688527882, 539179555, 219353869, 690362912, 151656970,
- 436887561, 4262027274, 169478903, 539506729, 219353869, 689114400, 151656970, 436887561, 614410, 4294377220, 16777920, 2293936, 5439559, 318767199, 335939377, 840308503, 657733175, 372388647,
- 370414869, 892744243, 589706293, 875968291, 321005095, 119678513, 387388422, 352723491, 857084949, 892679730, 858994228, 387188231, 926364182, 388445238, 924194580, 657732918, 621152038, 657864498,
- 119677734, 4178974470, 1342769488, 151656970, 227744265, 218960659, 2468886547, 168364314, 436864026, 436799754, 322447507, 320015629, 152736525, 169478665, 688458064, 538976288, 538976288,
- 304464126, 621941523, 320016933, 1353122066, 1342839306, 436865289, 219355402, 320015648, 942153741, 169478681, 167247369, 169478665, 539506713, 219353869, 420678944, 151656970, 436883465,
- 304420618, 621941523, 320016933, 539007762, 538976288, 50339872, 3774808064, 2684436482, 687869184, 17664, 891691539, 557004340, 336926258, 822420230, 389166647, 118756887, 656876038, 587600917,
- 892675618, 656541191, 822424614, 926364710, 387396150, 101127190, 354887458, 572720660, 120927526, 220209670, 34411283, 320015616, 1625947405, 1611274762, 436865289, 219359498, 170464013, 17369626,
- 1611204937, 1611274762, 436865289, 219359498, 170464013, 325058842, 320015629, 2299727117, 1611204960, 151656970, 231942665, 3540849427, 168364330, 436872218, 151609354, 169478752, 3542747401,
- 219353869, 600787, 4278190082, 16777920, 1245376, 16777266, 286594610, 336926230, 639771398, 926299189, 120992785, 353776179, 857084949, 892679730, 858994228, 286594610, 555943444, 288695842,
- 79412, 302912269, 639244838, 3272805906, 940772688, 322447400, 471093261, 1627264028, 18619412, 4262269888, 303892727, 438707738, 17308946, 2148732169, 683674899, 3223861304, 337384205, 471130366,
- 536941596, 33561620, 3237945344, 3221299201, 989867008, 823328768, 858861875, 842215729, 101979414, 353706531, 370546452, 101979413, 639771427, 909391157, 892679735, 639771444, 322319413,
- 875902514, 572925734, 352716295, 140514836, 235538544, 285739534, 438705689, 505813632, 168300825, 340397582, 84548124, 436864270, 247464220, 135137802, 286003777, 448799031, 3222939174, 202454817,
- 235421970, 4262332938, 219355778, 101059880, 319629325, 262170, 29425440, 12583200, 3407881, 4718654, 102896384, 892540181, 119744052, 102175793, 102175765, 102175765, 857084949, 892744243,
- 892741428, 892741428, 892741428, 640100148, 119677731, 873924103, 355611443, 572728084, 355611415, 572728084, 175649845, 168722446, 370348968, 638981654, 639270938, 370546198, 253432595, 441195030,
- 1075515158, 269508624, 1611665504, 274731024, 168738817, 235546664, 319888039, 320019739, 320019741, 640031261, 320019738, 320019741, 286464797, 168828698, 269094414, 269488232, 269488224, 131088,
- 48299776, 10486016, 3670049, 338759936, 892739863, 807609908, 640033570, 638001699, 102900518, 572728839, 572655366, 352723505, 387322929, 857085463, 926298675, 892745271, 555951668, 17368610,
- 438700526, 738525441, 169023005, 639047462, 487985930, 16844076, 792471066, 202506753, 34737384, 272379649, 188153355, 285212944, 437325583, 186981158, 320346131, 639313163, 307508597, 269487118,
- 1410404108, 269486901, 1280, 2147664127, 385925121, 956312832, 1291862784, 352387072, 353776179, 117838869, 856101909, 288699954, 555951668, 822150690, 656876038, 572724245, 101135669, 926361127,
- 370612022, 856954149, 892678689, 572597044, 336929029, 841036566, 858207542, 588518706, 875897379, 342884353, 51253788, 471602387, 350289428, 70975772, 270861326, 185279760, 188746764, 4245438475,
- 1610682553, 2701004816, 4267704592, 17634240, 3490909440, 1611665504, 1351614736, 270537756, 150144280, 18095112, 471602336, 84263422, 269515044, 202122361, 205523723, 2685091852, 537923616,
- 232808464, 2685211411, 269488144, 1024, 1073930495, 838901761, 973092352, 15872, 372384019, 587600917, 355669283, 353699362, 589497876, 892675618, 572728884, 336925958, 572728070, 875902246,
- 859120422, 639771445, 87438389, 657659171, 657659171, 540218659, 319619074, 1210584339, 219363368, 940772640, 322447400, 319627277, 675817528, 18027277, 2152747189, 1350586448, 329253200,
- 1074990349, 1076377728, 219353869, 943204416, 319635496, 675286291, 322994232, 1074990349, 1077952576, 393280, 46202656, 10486144, 3080235, 3604531, 5832777, 841028352, 101979414, 857023267,
- 589702677, 637994530, 352723491, 587600917, 891691555, 589706293, 590689077, 875898402, 354616630, 354625331, 354625331, 101975347, 656541191, 875898406, 842413878, 655758871, 119678513, 119940871,
- 370611974, 1077294903, 319619074, 1210584339, 874526999, 151590484, 219363368, 940772640, 220743720, 3036746515, 1350586448, 1347453008, 556242945, 555830817, 555820839, 656482638, 68027469,
- 185277757, 187173900, 17582091, 218960800, 323502099, 36451861, 222308408, 1074598675, 1082144808, 319622419, 1077952576, 667959360, 320017474, 656884244, 320017474, 84165140, 203176965, 671812364,
- 189271052, 536872704, 2147664127, 721461249, 855650048, 1224750848, 1593857280, 554893312, 336926258, 354624262, 640030003, 117842467, 102900518, 101979413, 639771427, 640955701, 892548387,
- 891691555, 587544116, 589771541, 589771541, 570503957, 874915622, 859190839, 370611762, 101058324, 352723495, 842208788, 640955702, 353706535, 892482324, 37762101, 320015616, 390604813, 1412702265,
- 671680790, 537727800, 674763533, 319629384, 1354039571, 1347453008, 22040704, 339879688, 1108611859, 339879719, 1108611859, 235801127, 235801098, 269488138, 219389953, 1212158733, 741741843,
- 1076377602, 219353869, 2151163968, 218960704, 1077952531, 4265623616, 555820960, 656482638, 1310794023, 1613177121, 235538958, 235538958, 273682576, 1069072, 4280287238, 25166528, 2818208, 3342383,
- 4784183, 318767203, 353776161, 589497876, 638923541, 102900518, 572728839, 336925958, 572728070, 875902246, 859120422, 639771445, 87438389, 657659171, 657659171, 20124963, 640099874, 909522740,
- 387330611, 101127190, 657864454, 117908006, 101131815, 101127959, 926357015, 926029335, 1076307766, 319619074, 1210584339, 874526999, 151590484, 219363368, 940772640, 220743720, 3036746515,
- 1350586448, 1347453008, 1109854209, 336794388, 1109862210, 336794388, 202118210, 621022724, 202050341, 203695116, 621480716, 68027429, 19139596, 218960800, 323502099, 36451861, 222308408,
- 1074598675, 1082144808, 319622419, 1077952576, 2701017152, 1310794023, 656875809, 558768417, 196421409, 604308747, 185338916, 186983691, 604769291, 184878372, 100672779, 3237945344, 2684452866,
- 805317632, 939537408, 1476411648, 336789504, 355676950, 372380963, 370414869, 909259571, 909391157, 387330611, 875902774, 858994230, 909259573, 589706293, 84288033, 36377907, 857944885, 839197461,
- 588584214, 120992821, 352723477, 857084949, 892744243, 589706293, 589706293, 320865826, 675817485, 537727800, 674763533, 151856406, 523443727, 319629320, 16649491, 2013336333, 1345343568,
- 1347473488, 319649793, 222499648, 2685211411, 219353869, 790700335, 319651841, 674791488, 320015680, 942161933, 151981842, 506666777, 218960704, 1076695827, 324026432, 221261837, 321921043,
- 319651853, 226495763, 790704147, 4278321199, 48168958, 8388930, 6684714, 355537152, 842208788, 840242454, 825431575, 859190325, 353703474, 926036273, 875901750, 909259574, 640955701, 102900003,
- 119943937, 572720646, 640755494, 101123591, 370546438, 926299703, 842208790, 909522742, 370611767, 909259542, 387323447, 909587990, 656811814, 103876390, 639771398, 672926481, 505221396, 942155832,
- 336665886, 285940776, 16649491, 838931213, 286397185, 689181992, 370349328, 51252508, 319624707, 806750749, 237639705, 100861957, 405409290, 169160729, 369955614, 219022083, 353572380, 353642768,
- 610271528, 472387851, 2148797564, 674773032, 2081166464, 185673756, 320015652, 219008510, 185536012, 118624270, 218961411, 235143950, 202247175, 33817095, 201786372, 252054542, 219022084,
- 117642765, 185536786, 33558031, 3237937152, 3221340161, 788534784, 823328768, 858994228, 353703474, 640955699, 572728102, 353699334, 338757427, 389231382, 858986006, 926365234, 892744243,
- 555951668, 1029703202, 1026240555, 709175600, 692398640, 219373616, 469833477, 471001618, 218437122, 4262269715, 18025856, 1027418920, 705169451, 1160325445, 222300202, 420664595, 332730905,
- 320015629, 4294902272, 1023591423, 1275118081, 39168, 387326739, 909522739, 118887959, 589497863, 387323669, 117839383, 36644358, 572720646, 117909286, 640091654, 909588262, 590690103, 640100130,
- 372651830, 909317911, 908470071, 387331639, 909522711, 118887959, 118894853, 909522711, 118887959, 656868871, 118888199, 654706183, 926361126, 654706215, 657794598, 654706183, 926361126, 924260150,
- 926361127, 370619958, 386336534, 909588278, 370546486, 909575943, 102110998, 268543239, 33820935, 185141777, 335742978, 34612768, 168558856, 100798218, 303958034, 302521874, 168755718, 134286346,
- 539365378, 17302548, 285870347, 118555905, 117711376, 68356361, 319035930, 67569929, 50866689, 319229455, 117573384, 470879515, 101391371, 152240917, 251922441, 270732814, 420614160, 134747142,
- 170067458, 470558223, 67962385, 151587345, 252643075, 251725843, 17566218, 319304710, 134415878, 302732545, 17500437, 671748354, 67770131, 269039632, 168558850, 302973992, 671420178, 33623049,
- 272108047, 320276996, 34671144, 352914177, 155781906, 117703699, 154810889, 319030279, 320011273, 17240072, 135464710, 269028895, 252386068, 50792757, 638128644, 151062797, 85008137, 117639199,
- 755503878, 353043468, 655558928, 67307785, 135531025, 173015563, 251724045, 86327050, 336070659, 589829, 46202624, 12583296, 2687005, 4259893, 5832781, 7798885, 285212812, 857084945, 909391155,
- 353776179, 926036757, 875898406, 875902774, 572597030, 842209030, 588518677, 892674595, 859051828, 353710643, 572728084, 842217269, 588518677, 892674595, 859055924, 353710643, 572728084, 842217269,
- 588518677, 892674595, 859051828, 353710643, 572728084, 370415413, 926029335, 875902518, 572925734, 923141639, 387397169, 101123862, 926361127, 875897379, 640103219, 476058652, 1612452884,
- 488115735, 337386787, 471130366, 269492304, 274731040, 537923616, 270561296, 3222282256, 269492240, 544215072, 270536720, 270536800, 1611669520, 1310794023, 656875809, 558768417, 193799969,
- 202127371, 202050360, 274275340, 203184400, 1627295745, 340794388, 1343495196, 625022994, 3088598825, 3290176532, 269492240, 269488160, 269492240, 270536752, 1880104976, 270536720, 537931792,
- 270536720, 537923600, 668995600, 320017474, 656884244, 320017474, 203178516, 185284620, 185338936, 269491467, 150997789, 3237937152, 3221323778, 687873280, 1090532608, 1493191936, 1996514560,
- 34560, 372384019, 101061909, 387322901, 891495174, 572728884, 588584198, 288695842, 353842740, 842216212, 590624053, 573776419, 856954133, 892678707, 353837876, 842216212, 590624053, 572989987,
- 856954133, 892678707, 353837876, 842216212, 590624053, 573776419, 856954133, 892678707, 335618868, 570820358, 891692583, 909588020, 370546482, 572928295, 640091911, 387384839, 909588246, 337641776,
- 488840476, 1612123672, 471077916, 471602272, 270536740, 1880104976, 270536720, 537931792, 270536720, 537923760, 271585296, 537923616, 269512720, 17829920, 555820880, 656482638, 1310794023,
- 1294410017, 1023675908, 202050333, 185280524, 3221294152, 414716956, 1092954439, 340791832, 1343495196, 2684425244, 552606740, 270536720, 269492240, 537923616, 270536720, 270536832, 269492240,
- 537923616, 270536720, 4262469648, 339879920, 1108611859, 339879719, 1108611859, 1006961924, 185338908, 202123275, 167775048, 3237937152, 3221323778, 687873280, 1090532608, 1493191936, 1996514560,
- 2365620992, 554893312, 353703474, 336922118, 587601686, 640955683, 352723491, 639771413, 909381941, 856954135, 892678707, 572728116, 353706547, 842216212, 590624053, 856954135, 892678707,
- 572728116, 353706535, 842216212, 590624053, 856954135, 892678707, 572728116, 353706547, 842216212, 590624053, 656810515, 909587494, 372388662, 118756887, 572982790, 370414854, 892744243, 572991028,
- 856954133, 875902258, 337641776, 488840476, 1612123672, 471077916, 471602272, 270536740, 1880104976, 270536720, 537931792, 270536720, 537923760, 271585296, 537923616, 269512720, 3222278176,
- 320094759, 658641939, 320094759, 658641939, 168693258, 168693258, 17829904, 3088325824, 623462168, 1343363137, 337386516, 18095184, 4028372128, 537923616, 270536720, 269492240, 537923616,
- 537952272, 270536720, 269492240, 537923616, 270536720, 556228862, 555830817, 555820839, 656482638, 168431200, 168431118, 1343262734, 273682448, 2304, 2147664127, 486588417, 889202944, 1291862272,
- 1694521600, 2432726784, 554893312, 353703474, 336922118, 587601686, 640955683, 352723491, 639771413, 909381941, 856954135, 892678707, 572728116, 353706547, 842216212, 590624053, 856954135,
- 892678707, 572728116, 353706535, 842216212, 590624053, 856954135, 892678707, 572728116, 353706547, 842216212, 590624053, 656810515, 909587494, 372388662, 118756887, 909575686, 119678503, 119940871,
- 118953734, 924194566, 840308535, 656881207, 337641776, 488840476, 1612123672, 471077916, 471602272, 270536740, 1880104976, 270536720, 537931792, 270536720, 537923760, 271585296, 537923616,
- 269512720, 3222278176, 320094759, 658641939, 320094759, 339874835, 235146252, 186983684, 604769291, 185338916, 69543179, 202114062, 482345252, 1192802324, 406922537, 471093266, 475010076,
- 346030356, 270594076, 269492240, 537923616, 270536720, 2148540432, 269492240, 537923616, 270536720, 269492240, 1627263008, 1310794023, 656875809, 558768417, 196421409, 604308747, 185338916,
- 186983691, 604769291, 184878372, 134227211, 3237937152, 3221323778, 603985920, 1006645248, 1409304576, 1879072768, 554893312, 286594610, 589497876, 589706293, 353699362, 891691555, 389428241,
- 858985493, 875902258, 857875235, 336925986, 892482355, 388183093, 858985493, 875902258, 656548643, 336925986, 892482355, 388183093, 858985493, 875902258, 857875235, 336925986, 892482355, 925054005,
- 857019954, 336926002, 588325667, 808858641, 471080961, 476058652, 1612452884, 605821972, 269492240, 275779616, 269492240, 270536752, 2953846800, 270536720, 537931792, 270536720, 537923696,
- 227545104, 269520915, 18038928, 4262730944, 1344017504, 337386516, 18095184, 4028372128, 537923616, 270536720, 269492240, 537923616, 537952272, 270536720, 269492240, 537923616, 270536720,
- 269292384, 3237875840, 319676417, 2304, 1073922303, 503365633, 905980416, 1308639744, 1711299072, 2248175360, 554893312, 353703474, 102044934, 336925958, 875897623, 102900518, 572724501, 873542950,
- 336926518, 892482355, 589509685, 354562850, 858985493, 875902258, 336926499, 892482355, 589509685, 354559778, 858985493, 875902258, 336926499, 892482355, 589509685, 354562850, 858985493, 875902258,
- 102897443, 892540181, 872883764, 372388662, 372380949, 101979413, 639771427, 909391157, 536948787, 236985364, 475597074, 1612452884, 605821972, 269492240, 275779616, 269492240, 270536752,
- 2953846800, 270536720, 537931792, 270536720, 537923696, 228593680, 1561542675, 790700335, 219353869, 320015776, 482345229, 773886484, 303892505, 1343164800, 337386516, 18095184, 4028372128,
- 537923616, 270536720, 269492240, 537923616, 537952272, 270536720, 269492240, 537923616, 270536720, 806163344, 538119472, 556740385, 2148340528, 219353869, 1248640, 4278190088, 25166272, 1573056,
- 3145764, 5505084, 7077982, 318767234, 353776161, 587600913, 640955683, 352723491, 639771413, 909381941, 856954135, 892678707, 572728116, 353706547, 842216212, 590624053, 856954135, 892678707,
- 572728116, 353706535, 858986004, 892679730, 354558772, 859120405, 590624050, 353710615, 891429652, 352793653, 842208788, 875902262, 102900518, 101131815, 856954133, 389362994, 892745494, 572732469,
- 19928341, 471602208, 337403924, 341842964, 270801948, 537923616, 269512720, 806359072, 269492240, 274206752, 169871886, 269488142, 1477447712, 537923600, 471077916, 471077916, 185337539, 102961168,
- 269486860, 337428481, 471097598, 471602256, 337399828, 471113729, 269492464, 537923616, 270536720, 269492240, 278925344, 235801176, 269490186, 269500432, 270536736, 269492240, 471602208, 471080980,
- 67769628, 274729987, 171191056, 1611399940, 2822160, 4278190088, 20972222, 2425024, 3997745, 5570633, 7602273, 285212794, 857084945, 909391155, 353776179, 926036757, 874971694, 993264445,
- 875902722, 572597030, 842209030, 588518677, 892674595, 859051828, 353710643, 572728084, 859055925, 353710643, 572728084, 842217269, 588518677, 892674595, 859051828, 353710643, 572728084, 120657717,
- 370414854, 924194582, 875889214, 388376359, 889651726, 476058652, 1612452884, 723847434, 537919762, 337390118, 471130366, 269492304, 274731040, 537923616, 537944080, 270536720, 269492336,
- 274731040, 537923616, 259565328, 154614294, 372913929, 1594456079, 573051650, 1627295745, 340794388, 1343495196, 1212685316, 134283805, 286269464, 471602335, 270536900, 269492240, 270536720,
- 269525008, 806359072, 269492240, 269488160, 269492240, 268841042, 390877984, 1276576772, 101720147, 425329712, 3155243833, 1536, 2147598591, 402702337, 805315584, 1375747072, 26624, 372384019,
- 101978389, 875897635, 102900518, 572724501, 873542950, 336926518, 892482355, 589509685, 354562850, 858985493, 875902258, 336926499, 892482355, 589509685, 119940898, 336925958, 892678707, 909579799,
- 590624053, 655693090, 354558772, 857084949, 892679730, 354558772, 572724245, 536948789, 337386516, 336862304, 471097372, 537928732, 270536720, 537923696, 271585296, 537923616, 201724688, 588255243,
- 269159430, 269525008, 471077916, 269488144, 337428481, 471097598, 471602256, 337399828, 471113729, 269492464, 537923616, 270536720, 269492240, 177803296, 1611399940, 875237392, 201524234,
- 722473056, 1074794539, 337386516, 1074794560, 150999056, 3237937152, 3221323778, 654318336, 1056977664, 1459636992, 1862296320, 32000, 372384019, 101057053, 588715029, 589706293, 353699362,
- 891691555, 389428241, 858985493, 875902258, 857875235, 336925986, 892482355, 388183093, 858985493, 875902258, 656548643, 336925986, 892482355, 388183093, 858985493, 875902258, 857875235, 336925986,
- 892482355, 86193205, 654706452, 926168358, 118888246, 858994228, 336926258, 572728070, 536948774, 589110292, 337402378, 341842964, 270801948, 537923616, 269512720, 806359072, 269492240, 279973920,
- 269492240, 270536752, 1880104976, 270536720, 672137488, 673720360, 3760728104, 644228663, 3658421303, 3221296143, 1625297948, 321075728, 471093264, 475010076, 346030356, 270594076, 269492240,
- 537923616, 270536720, 2148540432, 269492240, 537923616, 270536720, 269492240, 783290400, 387389207, 387395118, 653989655, 254162743, 268440596, 3237937152, 3221323778, 603985920, 1006645248,
- 1409304576, 1778409472, 2113958912, 2449508352, 2852166656, 3321935872, 286326784, 858986004, 859190325, 353703474, 892744243, 589706257, 386277921, 353710643, 572728084, 389297461, 842216244,
- 588518677, 926229027, 353710643, 572728084, 657732917, 842216244, 588518677, 926229027, 353710643, 572728084, 389297461, 842216244, 588518677, 87368227, 352723491, 909259541, 590681397, 353699362,
- 355873331, 102900533, 842208533, 640943926, 336929571, 892547862, 589706293, 370414883, 640956211, 336929571, 322122518, 353699362, 842208788, 875902262, 640948006, 352723491, 857084949, 657798706,
- 353699362, 842208788, 875902262, 1611930662, 471077916, 471602272, 350289428, 270553116, 1611669520, 269492240, 544215072, 270536720, 270536896, 1880104976, 537923616, 537944080, 270536720,
- 554729473, 790695983, 271524112, 554708769, 790695983, 270610304, 789586223, 556732449, 270610192, 269492527, 168693258, 1443761674, 235538958, 235538958, 235801256, 235801098, 1627295745,
- 340794388, 1343495196, 2684425244, 3290176532, 269492240, 269488160, 269492240, 270536752, 1880104976, 270536720, 537931792, 270536720, 537923600, 791678992, 556732449, 556732528, 273624848,
- 789586223, 271524127, 275787553, 554708769, 790724655, 19865872, 1745489408, 168693258, 1074661992, 168693258, 235801120, 168704010, 235801120, 235544586, 4194238720, 180479, 805357313, 823328768,
- 859191063, 924260146, 118888246, 353769223, 386336532, 654706454, 587597607, 120006434, 925247238, 891692855, 657930036, 641087270, 285614243, 1193412113, 84609806, 286353946, 201864551, 560271117,
- 101781766, 219112737, 1731528716, 1885540625, 17698315, 291729596, 85617169, 1192102667, 286328354, 258285830, 889719821, 1729171815, 218892341, 102851855, 537268497, 235802788, 536872704,
- 3758211327, 218152961, 1023415808, 1426082048, 1912628224, 352387072, 572720660, 875902246, 372388662, 119681287, 640103175, 908273443, 842216246, 370611990, 335748374, 572728070, 557135142,
- 587600917, 1025909283, 926299139, 352723479, 842208788, 640955702, 857084951, 875902514, 102900518, 842412289, 336992023, 656541191, 624174631, 370618934, 101123860, 874915618, 236454199,
- 235801098, 1577978378, 3490907147, 3607823379, 438896897, 136911500, 320016157, 319623181, 219349247, 320015632, 235548175, 235538958, 168746510, 168693258, 3221097994, 805770247, 336004871,
- 17248263, 118753175, 120588039, 117901076, 173058049, 1342836238, 3524136458, 188036363, 488445963, 470241048, 541075473, 219353869, 319627296, 1075842323, 119279912, 168431156, 168431118,
- 235542542, 235538958, 121569550, 336015367, 805766919, 117904391, 118753031, 117901104, 83887892, 3237937152, 3221291010, 738206720, 1090532608, 19712, 370553345, 101979413, 892740387, 656880693,
- 589506086, 117900834, 336925958, 639771415, 909391157, 908268342, 355677493, 909190932, 389165875, 570893079, 909391142, 353776179, 339150356, 639771398, 859190325, 71218, 642085959, 470493978,
- 303891989, 102568564, 722148373, 1950688794, 3222001330, 1946485409, 2651718149, 235801097, 235801098, 168431294, 168431118, 1170211086, 448808820, 1879968294, 306188576, 1074926869, 242229265,
- 3222939146, 4265964615, 672008704, 98635304, 240659205, 235801098, 403573258, 168693258, 921098, 4280156163, 18875072, 721088, 6619186, 656544512, 859191078, 118888242, 338756358, 639771398,
- 101135669, 640034566, 859191095, 387396147, 101123606, 354887462, 572720660, 590689574, 353710593, 924128534, 858993717, 336926002, 857016071, 336926002, 370615075, 572728070, 572732725, 875902246,
- 875901750, 891434295, 2956145460, 320016933, 304424210, 756159251, 319622419, 186255117, 872875531, 889992476, 101135388, 119147275, 218960653, 402722835, 269488144, 889917456, 739250224,
- 118096407, 219156540, 269292307, 17829904, 538976320, 538976288, 228654624, 3020755731, 117836565, 1376459271, 189934893, 101123866, 229905675, 2148340499, 1947230209, 91034377, 1410338872,
- 454099980, 1544556560, 1611664392, 227544339, 152248339, 1052772, 4294967044, 24249024, 721088, 4653115, 318767213, 386271010, 926036758, 52832054, 857084977, 892679730, 370414899, 892744243,
- 909259573, 370616103, 909522710, 589702951, 101123874, 907417366, 101136183, 20132630, 386271010, 926036758, 52832054, 370414899, 892744243, 370546485, 657864247, 589506087, 101123874, 907417366,
- 336934711, 909259542, 304455733, 621941523, 320016933, 219376914, 319820557, 303238413, 520292872, 169543453, 990381067, 607861540, 184747835, 487070218, 134873887, 629670162, 303239954, 319956261,
- 271389203, 319622419, 186255117, 872875531, 889992476, 101135388, 119147275, 218960653, 549454099, 538976288, 4263518240, 320015648, 223367181, 1343034131, 643696653, 117965579, 793643547,
- 453660207, 184748039, 218652198, 539004929, 538976288, 2164138016, 320015712, 185971725, 436668166, 757944843, 119147346, 353043975, 320015796, 131085, 29425408, 12583392, 2752545, 120652032,
- 336926230, 639771398, 657929269, 639771398, 859190325, 909580082, 372388662, 84284437, 926365207, 336013094, 270901761, 555822867, 278004783, 791617810, 3088523553, 555822593, 3757974319,
- 621348754, 28837381, 587911202, 791617813, 2148273185, 555822856, 541726511, 471936813, 75517996, 100913154, 67112009, 3237937152, 3221323777, 587208448, 1392527104, 823328768, 857151026,
- 286594610, 555943444, 288695842, 858994228, 571946550, 370414854, 892744243, 822552116, 387319317, 892810774, 842216246, 117904405, 336925958, 909259542, 892745525, 589506100, 337053218, 909259542,
- 589706293, 532678178, 438700338, 4279903782, 640031232, 839525658, 320015647, 320015629, 151585891, 33821193, 135215622, 168692780, 538971658, 305797669, 219361309, 219353869, 3221295885,
- 438705188, 639287550, 1073814054, 605824538, 218960704, 218960659, 151168275, 151257874, 251986441, 119145481, 235539981, 303172110, 354753061, 320015819, 320015629, 4278126080, 1107476223,
- 402702337, 889202432, 1375749120, 36352, 352723475, 336922146, 841036566, 640955702, 640033571, 638001699, 909181734, 103163686, 369493767, 926291479, 117843493, 387319303, 926365206, 822552118,
- 640099894, 101123846, 907417366, 103167799, 369493767, 926291479, 119944759, 101131825, 639771398, 119943463, 101058310, 924194327, 372717110, 909259542, 926299703, 370546454, 926298675, 370611734,
- 641087286, 640099879, 101069063, 3760595491, 639252520, 1073814054, 438707738, 489424130, 789256225, 151324016, 805704456, 134808837, 1996555540, 805638920, 134808838, 87033108, 84271109, 85133321,
- 151324208, 2533692424, 805638920, 134808838, 87033108, 303249925, 336930833, 320147497, 235740182, 219546371, 353049875, 706222384, 50857230, 705563142, 372250904, 219356681, 235078422, 320216077,
- 338235413, 3221301269, 438708280, 438707738, 622536218, 4263450904, 101910748, 1342768389, 100995848, 91293957, 139462917, 84280595, 336089097, 101910556, 1342768389, 100995848, 91293957,
- 139462917, 84280595, 336089097, 202182046, 235605774, 50795024, 235736342, 118359043, 118230540, 67240962, 235669252, 68093452, 218959363, 302449430, 252382993, 393230, 48299776, 10486144, 2424835,
- 4128821, 5570633, 354484480, 841023777, 336925974, 388178694, 353776179, 555943444, 875898402, 926102326, 891691555, 557200437, 353776179, 587600913, 891691555, 389428241, 856954146, 875901491,
- 856950563, 875901491, 388113187, 336922146, 909259542, 19280949, 29425280, 29425216, 640031296, 1258976538, 219353869, 319619327, 172690707, 640031349, 339798529, 1075059740, 605821972, 270536720,
- 537931792, 270536720, 320015648, 320015629, 31481857, 3759810080, 320874010, 320015629, 538119437, 450894374, 4262730790, 471602336, 341836052, 269500444, 273682448, 330305552, 320015629, 1248525,
- 4278190086, 29360608, 983200, 3080223, 5177407, 318767199, 858994228, 353703474, 589497876, 120923682, 387331639, 117839383, 656803335, 926295591, 353776179, 587600917, 891691555, 389428277,
- 353776179, 587600917, 891691555, 120992821, 858994228, 353703474, 589497876, 657794594, 353776179, 587600917, 891691555, 3224777781, 222301459, 1074598675, 929895181, 537336076, 923534854,
- 537336076, 1087964935, 219353869, 320015680, 319635533, 222301459, 330502931, 319635469, 222301459, 222330899, 1074598675, 18027277, 320015744, 319635469, 542051603, 923535111, 537336076,
- 923534854, 320215308, 319635469, 222301459, 219389971, 320015680, 319635469, 320015648, 319635469, 325061907, 319635469, 222301459, 262163, 48299776, 8388992, 2293779, 4522037, 556864256,
- 336926258, 101058311, 654706439, 875898407, 925958454, 370414854, 639770903, 370619701, 101983538, 656541191, 875898406, 842413878, 655758871, 119678513, 119940871, 370611974, 808859447, 471113729,
- 1311903251, 320027154, 18617306, 352393994, 450428435, 705813030, 556231425, 555830817, 555820839, 656482638, 68027469, 185277757, 187173900, 17582091, 403971200, 1006963470, 235809581, 337120932,
- 351141404, 958400521, 3491374615, 655363491, 320017474, 656884244, 320017474, 84165140, 203176965, 671812364, 189271052, 768, 1073922303, 788578817, 1325416704, 50397184, 589702695, 117900834,
- 640091910, 387384839, 640091910, 387384839, 859190835, 857151026, 640103991, 656803591, 656815635, 587269670, 336922146, 841036566, 640955702, 556868387, 352723475, 857084949, 892679730,
- 4093716020, 234950063, 17697033, 1711473165, 168824592, 1627718975, 285804820, 839471180, 171056927, 219109191, 56693261, 100960515, 4262594569, 319627335, 134419, 219353869, 3762355744, 168693258,
- 17698314, 2397568693, 151850249, 1476460942, 286068238, 503711080, 202576390, 606346292, 286218012, 70715920, 154206467, 84214802, 219366398, 219353869, 3221295885, 170920462, 805965326, 67112458,
- 3204447999, 3221307906, 872419840, 1946171392, 823328768, 588580386, 387384866, 641087265, 640951075, 573637923, 336925958, 387323671, 909317910, 842413878, 857150999, 926299958, 892679735,
- 86189620, 388044065, 101131825, 639771398, 119943463, 101058310, 924194327, 372717110, 909259542, 926299703, 370546454, 926298675, 370611734, 641087286, 640099879, 101069063, 3760595491, 273355533,
- 18156044, 201987408, 219368208, 319619327, 33829644, 219224601, 672205594, 270145809, 67246107, 219352115, 1073848574, 330547454, 354947346, 353380628, 219944467, 369296142, 186454797, 404303893,
- 134549034, 235537923, 806950954, 320735510, 50533901, 370937102, 688919827, 19404052, 470619072, 202905612, 2148732188, 360385811, 16926737, 184615697, 286002184, 17892099, 353454082, 1074990459,
- 218990176, 185536012, 118624270, 218961411, 235143950, 202247175, 33817095, 201786372, 252054542, 219022084, 117642765, 185536786, 83889679, 3237937152, 3221307394, 419436032, 922757888, 16640,
- 370413841, 926032179, 875898406, 590690102, 892675618, 84288035, 571938087, 335939334, 857085463, 909588018, 640034612, 891691527, 842217012, 101979414, 353710631, 891429652, 438711349, 84213761,
- 927541282, 2685603200, 2147558938, 1109897344, 336794388, 1109862210, 336794388, 235546434, 235538958, 269486606, 4269801744, 19274368, 1009535768, 321326942, 1512472589, 660635776, 558768417,
- 556214049, 555830817, 168751143, 168693258, 281021962, 1343230032, 262160, 46202624, 12583232, 1638422, 3473451, 336662784, 841036566, 891692599, 892810804, 891691555, 102900533, 387262213,
- 370611732, 909522738, 656815157, 101130790, 588519174, 875897379, 640824115, 83886362, 1227366917, 319651895, 19274400, 656441472, 558768417, 556214049, 555830817, 2148589607, 276828176,
- 2164162561, 402728474, 1581001803, 219358991, 2153391744, 1109913728, 336794388, 1109862210, 336794388, 269494082, 327696, 46202624, 12583232, 1638422, 3604523, 285212760, 857084945, 641151521,
- 909391142, 572732727, 590689574, 654640674, 102897429, 387188231, 842208790, 875968310, 119940647, 875898402, 372388662, 654709781, 859190321, 353776179, 352782100, 891429652, 926364725, 590624054,
- 353706531, 891429652, 72230, 673318149, 226506569, 639279123, 2961211393, 320094759, 658641939, 320094759, 658641939, 168693258, 1242435082, 321393176, 270014491, 119539984, 269101070, 4269801744,
- 19274368, 1009535768, 321326942, 1512472589, 660635776, 558768417, 556214049, 555830817, 168751143, 168693258, 311299594, 471014168, 268766221, 84479760, 235406353, 269485578, 1024, 1073921791,
- 402702337, 771758848, 13312, 370413841, 926032179, 875889198, 892811062, 891691555, 102900533, 387262213, 352716593, 387323412, 37631766, 656880693, 34477862, 438711559, 235929601, 319826213,
- 226516240, 639279123, 2810216449, 974524280, 923339063, 2014254650, 318922505, 2147557928, 639271166, 1263214088, 102568220, 219361061, 2153391744, 103834240, 1280516112, 386139159, 270553932,
- 1510223878, 288569625, 393404, 46202624, 12124544, 2621463, 6029392, 7602280, 909255936, 640955702, 117843495, 589702919, 34473762, 370545685, 101986615, 891691555, 926299700, 35526454, 102896901,
- 370414869, 909254963, 640955701, 640955683, 102900515, 857084949, 842342677, 640955702, 102900515, 891691525, 842217012, 101979414, 587600951, 875898402, 372388662, 891691525, 842217012, 101979414,
- 1227636737, 153886251, 772475161, 134810889, 723726870, 438725705, 437528090, 151587081, 2701005850, 219353869, 319635458, 219352339, 320015648, 222363149, 537727763, 536941325, 219353869,
- 2467500813, 319622419, 319622419, 319676670, 319622419, 1227579411, 726341676, 185139465, 285608238, 740705591, 460335945, 303768869, 134683683, 589039368, 219373634, 320015680, 319635469,
- 320015712, 1074990349, 218960704, 332206867, 320015629, 538119437, 219353869, 756224781, 319622419, 319622419, 4177461760, 1157814783, 822126337, 15616, 370618625, 370546454, 101127703, 101058310,
- 654706439, 641152806, 640034598, 654706471, 657930022, 389429030, 909587991, 640104246, 337065527, 909259542, 589706293, 318834210, 457517390, 151726621, 489294601, 1311327515, 85136145, 203034121,
- 1560876044, 202510613, 302788142, 324867345, 236588054, 320013577, 218960766, 218960659, 999948563, 370417155, 269488945, 353775635, 238682910, 823462924, 151523335, 204933650, 1343558161,
- 286397776, 286537484, 822546440, 3876326166, 219353869, 1250061, 4278190084, 25166528, 1638592, 3866653, 922746949, 842348337, 640955702, 102892331, 857084949, 857084945, 53753650, 623056179,
- 352723491, 355669524, 336922119, 841036566, 657732918, 909260071, 589706293, 355665699, 588715796, 2939500087, 320015665, 1077952525, 219353869, 269494328, 20987968, 319627264, 175508755,
- 906042409, 1980377372, 219353869, 88104992, 87075633, 334909243, 320015629, 4262661389, 104343776, 1616773404, 218960800, 297768723, 690560020, 3205567516, 218960791, 161497107, 139415304,
- 4278321161, 29425663, 12583297, 1966098, 556864256, 118888242, 587597315, 656810531, 909583875, 370618647, 370619959, 539165247, 151928833, 35455242, 547758126, 18678318, 406259978, 555818783,
- 119021343, 180355580, 1828589066, 522922783, 185439233, 252550154, 252776719, 6032655, 4294967043, 25231808, 1179840, 3080222, 556864256, 118888242, 587597315, 656810531, 909583875, 370618643,
- 370619959, 388170303, 572720660, 909391142, 842413878, 537009687, 151928833, 35455242, 547758126, 18678318, 222365962, 538976288, 286072864, 438746876, 420619802, 84804873, 17963273, 235539136,
- 723479806, 2483101483, 4262071053, 269486039, 269488144, 428140807, 202973987, 84681507, 589499397, 117442048, 4177643519, 570472705, 1744848128, 2818607872, 50432, 117846291, 101979412, 102965795,
- 654706183, 909583910, 875898423, 389165878, 372651830, 923145751, 907482677, 353776179, 387319572, 101123606, 656811814, 639771426, 641020981, 925247015, 822294070, 858920726, 336926258, 370611733,
- 101058326, 103228967, 891691555, 656815924, 909588006, 103875862, 336926215, 656548614, 637929222, 926295591, 892614454, 842217012, 909588019, 370546486, 370422053, 118887959, 640091654, 926168358,
- 859186727, 353710643, 656868884, 640759558, 909522726, 353768983, 370607892, 572728070, 909391157, 892737303, 382281268, 52045331, 67505155, 202181911, 101845252, 202250790, 403447837, 1930167044,
- 235674912, 302392858, 202179593, 100931341, 453182220, 219485221, 386138892, 51119860, 337976067, 51121429, 537728772, 437128221, 152176166, 218958852, 162595095, 438699538, 538774542, 67376909,
- 336923917, 50535205, 386139660, 4262267917, 152048584, 319030534, 488774409, 117769228, 84740924, 157093647, 319095814, 488774409, 117769483, 84740669, 18091791, 51119736, 337976067, 51121429,
- 537728772, 437128221, 152176166, 218958852, 167852311, 455410961, 538774542, 67311628, 320212236, 50534950, 386139660, 4262202637, 638850512, 201523994, 219612166, 151260173, 438699538, 538774542,
- 50599948, 488644364, 639241740, 67703302, 386731276, 51119620, 338041347, 51121429, 322705412, 302319646, 67504393, 723596558, 218434336, 84360458, 605163269, 151589636, 890110982, 186657569,
- 1024068869, 251987207, 521279250, 4278125568, 1107484927, 654352385, 1409297408, 22784, 370553143, 842217271, 36377621, 336922146, 839072534, 842217271, 875902262, 570567462, 101058311, 825242149,
- 640751395, 587663142, 993277218, 892744194, 53159476, 587663138, 353699362, 37426708, 909588274, 807535926, 168309553, 2037845536, 1074794512, 219353869, 760090688, 220540195, 2685211411,
- 2133077408, 2147550477, 179962113, 2037845536, 1074794512, 219353869, 760090688, 220540195, 2685211411, 2133077408, 2164131085, 233832705, 274205189, 218960656, 321133587, 319635469, 537550362,
- 84774946, 269506570, 319622419, 219358236, 454233408, 572525149, 2048, 2147664127, 184598529, 973084416, 1879067648, 2382397952, 39424, 857084947, 875902514, 102900518, 352723463, 842208788,
- 640955702, 102904071, 102900501, 387192085, 336922118, 842208790, 875902518, 892610342, 589706293, 52835363, 640099874, 909522740, 387330611, 101127190, 118765318, 842208790, 875902518, 892741414,
- 589706293, 589706275, 588580386, 353699362, 117839124, 101979926, 656541191, 875898406, 842413878, 51779095, 336922146, 909259542, 388379701, 336922146, 909259542, 4029035573, 319622419, 319622419,
- 320015664, 320015629, 135466285, 721489418, 742992694, 908806444, 134876714, 739904787, 218959117, 739908140, 218959117, 336504364, 1227632459, 19609131, 319293966, 135466253, 439619082, 370860046,
- 370553878, 370547226, 437655092, 320015824, 320015629, 320015683, 320015629, 319660033, 319622419, 219356435, 219353869, 324014861, 269094413, 1343357443, 726215729, 824985899, 33755728, 219023888,
- 448855571, 372512278, 370809366, 370553878, 589717530, 1227567143, 307245356, 168821251, 320015630, 269094413, 857145859, 739911203, 218959117, 739908140, 218959117, 323354924, 320015629,
- 806554893, 319622419, 319622419, 536871424, 1610793215, 1459666945, 28928, 387257619, 909522710, 908470055, 387331639, 35460631, 875902259, 909522743, 118887959, 387319303, 892811030, 859190325,
- 85792306, 856098580, 336926258, 570764038, 909391142, 640103219, 909378877, 320221747, 891691555, 87766580, 336926258, 354624262, 354628899, 172318755, 84084495, 151193628, 789125642, 790183961,
- 168434185, 85723138, 168691715, 218960709, 72748563, 168693258, 2151710752, 235801120, 240518154, 319622419, 235544640, 2149583374, 169902144, 537529870, 25182336, 1546731680, 285477134, 436871942,
- 167905544, 1042685236, 641605664, 34223133, 169478408, 68224547, 828116232, 320015680, 20660237, 269882916, 168431204, 168431118, 370238222, 989930518, 320015680, 168702974, 168693258, 538971658,
- 262176, 46202624, 12583296, 3211275, 9044061, 119668992, 857085702, 657864498, 389093158, 909587990, 640100134, 117908003, 370607622, 121059094, 370611718, 859256630, 924194327, 623326774,
- 52233762, 370611988, 909259571, 657732917, 656879911, 101130790, 369237780, 654706438, 54339111, 824256052, 52233762, 101123860, 1059464743, 657733122, 34546214, 352716593, 857084949, 926364211,
- 872627510, 390070566, 202050316, 185341719, 336989195, 117838855, 505153282, 454960678, 101122568, 185796628, 168430593, 134480144, 168820996, 4261481482, 471273904, 1125782372, 421600276,
- 436871183, 537463050, 151193616, 322113041, 287244823, 238228247, 134351377, 151592976, 537532938, 471931151, 320488212, 18291812, 336860352, 336860180, 101819412, 336005121, 421074695, 118753047,
- 285606152, 17828441, 587860993, 17566243, 3171553281, 1077416215, 1679566949, 1326717971, 270082350, 168364320, 253757978, 185014024, 454177806, 287854632, 672208663, 303769680, 118165044,
- 537856023, 151656970, 420487177, 340733473, 476320540, 943744296, 50337553, 3237937152, 3221323778, 1023414528, 27136, 117842433, 370611206, 909259542, 657733175, 570762790, 335748358, 857085719,
- 892744243, 656880693, 640100145, 335939362, 102105631, 656868871, 872627494, 573645094, 335748358, 654706439, 37692966, 640103478, 822218530, 353699335, 858986004, 909588274, 640942909, 1008877569,
- 286331153, 1008869948, 286331153, 298253884, 325327895, 471089946, 537860385, 151656970, 135274505, 235997443, 35066675, 320278815, 168889907, 537921538, 436865289, 420421642, 1125391393,
- 476320538, 583008535, 507780638, 505553438, 505299998, 286736418, 677724216, 471032860, 556683028, 153096217, 169478665, 386404128, 873335559, 1344805650, 387387688, 676341777, 238293531,
- 135726859, 436871183, 537463050, 773921040, 320607311, 1697127524, 387004480, 768, 1073922303, 570464769, 1258304512, 825688064, 875902246, 372651830, 909580055, 370546486, 118756629, 102900518,
- 387192070, 572720647, 639768359, 926164519, 842217014, 336992022, 923141639, 117909041, 857085702, 386271027, 909588246, 589506087, 808465975, 1109603140, 403442712, 1144202050, 824845569,
- 35532879, 202379276, 339879884, 1108611859, 339879719, 1108611859, 1611138825, 151126791, 117710628, 123734023, 604570115, 747898142, 1345586753, 404096521, 370674700, 877660422, 302582278,
- 909201455, 185270829, 555820843, 656482638, 1310794023, 3777437985, 105383174, 154535944, 1208288774, 906496006, 196617, 46202624, 10092864, 3407906, 922746947, 892675633, 909588020, 924260118,
- 370619958, 336925974, 572728839, 336922118, 587597591, 337979170, 570820358, 891692583, 909588020, 370546482, 119943463, 119940871, 370611974, 808859447, 590562352, 202119234, 857948696, 707068228,
- 506482481, 269487106, 660341004, 558768417, 556214049, 555830817, 185290023, 185277757, 187173900, 2483832843, 872825132, 369494352, 403442712, 1342768662, 151651892, 827338514, 184692022,
- 1109878027, 336794388, 1109862210, 336794388, 202114114, 202120252, 203950859, 739340, 4278190084, 20972224, 2228378, 4194356, 922746954, 892675633, 909588020, 924260118, 370619958, 336925974,
- 572728839, 336922118, 587597591, 571942690, 874915622, 859190839, 370611762, 101058324, 352723495, 842208788, 640955702, 353706535, 892482324, 808465461, 1109603140, 403442712, 1144202050,
- 824845569, 35532879, 202379276, 339879884, 1108611859, 339879719, 1108611859, 235801127, 235801098, 269488138, 104934548, 101273652, 202119190, 151393816, 168178768, 1345262089, 36517425,
- 657132299, 558768417, 556214049, 555830817, 168714279, 168693258, 277876234, 1343230032, 196624, 46202624, 10092864, 3407906, 922746942, 892675633, 909588020, 924260118, 370619958, 336925974,
- 572728839, 336922118, 587597591, 337979170, 570820358, 891692583, 909588020, 370546482, 589509639, 856954146, 808464947, 1109603140, 403442712, 1144202050, 824845569, 35532879, 202379276,
- 556227585, 555830817, 555820839, 656482638, 276828224, 2484109328, 872825132, 369494352, 403442712, 1342768662, 151651892, 827338514, 184692022, 1109878027, 336794388, 1109862210, 336794388,
- 269494082, 196624, 46202624, 10092864, 3407906, 922746956, 892675633, 909588020, 924260118, 370619958, 336925974, 572728839, 336922118, 587597591, 571942690, 874915622, 859190839, 370611762,
- 101058324, 572732455, 572724501, 858985493, 842208277, 842216757, 589509685, 860106800, 202916387, 591534092, 620839987, 810496298, 269222430, 667683856, 320017474, 656884244, 320017474, 269959700,
- 269496336, 806359088, 2486177808, 872825132, 369494352, 403442712, 1342768662, 151651892, 827338514, 184692022, 556215051, 555830817, 555820839, 656482638, 806359248, 271585296, 269496336, 768,
- 1073922303, 570464769, 1291858944, 825688064, 875902246, 372651830, 909580055, 370546486, 118756629, 102900518, 387192070, 572720647, 639768359, 926164519, 842217014, 336992022, 923141639,
- 640103985, 640091911, 387384839, 370607623, 370620215, 656881207, 860106800, 202916387, 591534092, 620839987, 810496298, 269222430, 667683856, 320017474, 656884244, 320017474, 202654228, 621480716,
- 202050341, 203695116, 621480716, 202050341, 747906060, 1345586753, 404096521, 370674700, 877660422, 302582278, 909201455, 185270829, 555820843, 656482638, 1310794023, 3039240481, 202115851,
- 202122276, 623184651, 202115851, 202122276, 2427659, 4278321157, 33423810, 524478, 1769489, 4522021, 640034048, 35534119, 34477335, 909522183, 858857783, 353834518, 824640046, 355926590, 923207174,
- 875901717, 372388662, 101979413, 891691555, 336929589, 639771398, 909391157, 18231859, 1012337341, 121528122, 979320327, 4262090556, 1460289861, 1046428220, 1597900551, 173489210, 219373709,
- 219353869, 325063437, 320015629, 3759344909, 1091196732, 979320327, 1046428224, 1460289799, 173489212, 1597900609, 1046428282, 1460289799, 1077952572, 219353869, 320015808, 222314509, 3222082323,
- 1250061, 4278190084, 16777920, 2293952, 3997735, 620757075, 353776177, 36374036, 842209045, 101979414, 656548643, 572728103, 875902246, 842217014, 889394710, 641140515, 353699335, 892482324,
- 924194613, 875902262, 353706531, 572732455, 370414869, 892744243, 572732469, 588518677, 3758175522, 219353869, 1442992160, 168693258, 2164722016, 858091535, 1078095169, 781927017, 201730848,
- 588255243, 269159430, 269525008, 471077916, 269488144, 218960864, 235056659, 118360586, 941962105, 1010920770, 2164326245, 67825719, 274729987, 171191056, 1611399940, 724242448, 339742736,
- 1075059740, 272633872, 262160, 46202624, 10486081, 3866671, 5636167, 637609216, 859190325, 907482674, 372388662, 369562645, 101979414, 840308487, 657733175, 101131814, 908470054, 387331639,
- 101127190, 101978886, 891691555, 842217012, 639767830, 859190325, 336926258, 19997958, 587597334, 891691553, 909521937, 3388913665, 269753345, 587924506, 53420308, 286530838, 203492178, 436800524,
- 85133579, 403244548, 437916985, 319766295, 320015629, 219352333, 218960659, 1476268819, 34432257, 3288207638, 538455841, 104202542, 337384454, 789778447, 151653153, 605362473, 202134026, 168501516,
- 100992516, 68356361, 420808717, 85400137, 319644417, 319622419, 219385107, 219353869, 4268299021, 404753563, 1023484207, 136466, 4278190085, 20972224, 1179808, 3407905, 4980800, 640881408,
- 859191095, 387396147, 101123862, 656548643, 369176871, 555943430, 288695842, 20330036, 891692849, 926364725, 370612022, 118756629, 335611399, 639771398, 859190325, 571938354, 909391142, 353776179,
- 33293844, 68879621, 67712521, 453313819, 154536196, 1694618373, 303366669, 790742014, 3221299224, 805832752, 137365512, 4261949448, 218960832, 218960659, 319668243, 319622419, 139985171, 134754312,
- 805832752, 4265674760, 404753563, 1023484207, 4261549330, 151329718, 453314870, 85656580, 84489737, 1476461595, 219353869, 3977450253, 319622419, 319622419, 768, 2147664127, 721469441, 1291861248,
- 824508416, 102900515, 101974557, 589431339, 572728098, 875902246, 572732725, 926168358, 859190821, 639047474, 101065251, 117838853, 640098822, 909391142, 389166647, 824645142, 117908006, 101131815,
- 924194583, 1090598455, 319635457, 538448151, 16974593, 538382608, 17437453, 101385473, 231999756, 810364429, 556219137, 555830817, 555820839, 656482638, 68027469, 185277757, 187173900, 1611417611,
- 406850835, 286725905, 1157694064, 168693267, 117638623, 1210778299, 339879741, 1108611859, 339879719, 1108611859, 1006961924, 185338908, 202123275, 67111752, 3237937152, 3221323778, 1023421184,
- 1392527616, 824508416, 102900515, 101974557, 589431339, 572728098, 875902246, 572732725, 926168358, 859190821, 639047474, 101065251, 656810519, 909587494, 372388662, 118756887, 572982790,
- 370414854, 892744243, 572991028, 856954133, 875902258, 1073824001, 286724877, 50405400, 286261507, 319627287, 83951882, 151782923, 772607444, 665530445, 320017474, 656884244, 320017474, 170344980,
- 168431118, 269094414, 325062672, 286801933, 1880168215, 323289346, 3741978126, 3137798917, 3444058882, 1310794023, 656875809, 558768417, 241182497, 235801098, 2416839178, 269504528, 50335824,
- 3237937152, 3221323778, 1023421184, 22272, 589508901, 35456546, 36374036, 589439778, 891691555, 892679221, 891691555, 908408628, 389165878, 572728855, 571934214, 874915622, 859190839, 370611762,
- 101058324, 640103991, 654772002, 386271014, 386270999, 389494550, 909586966, 1090594599, 319635457, 538448151, 16974593, 538382608, 17437453, 101385473, 231999756, 810364429, 339879851, 1108611859,
- 339879719, 1108611859, 67898388, 623182862, 202115851, 202122276, 623184651, 201592324, 325067788, 286801933, 1880168215, 323289346, 3741978126, 3137798917, 3444058882, 1310794023, 656875809,
- 558768417, 196421409, 604308747, 185338916, 186983691, 604769291, 184878372, 50341131, 3237937152, 3221323778, 1157639424, 21760, 909390117, 926299703, 640096054, 117842467, 336922117, 355676950,
- 336925972, 842216214, 37433907, 37566002, 858994228, 909521431, 656815157, 117900838, 572728871, 352456199, 924194324, 572720660, 909391142, 389429046, 536936990, 756027158, 2316570394, 184880392,
- 167837446, 387976722, 50401297, 404750595, 219354897, 1227669536, 153886251, 772475161, 134810889, 723726870, 438725705, 437528090, 151587081, 442635290, 874191160, 2030177816, 3741647623,
- 319688202, 1879179589, 286725905, 319635480, 742992800, 153832216, 772475137, 923862537, 1227630149, 622555179, 588389157, 134743836, 2300680, 4294639362, 25166528, 1048768, 16777267, 857019954,
- 336926002, 588325667, 909391121, 856764679, 639771441, 640955701, 102900515, 101979413, 639771427, 572732725, 926361127, 18297398, 1880296928, 1081085968, 1090597651, 219353869, 320015680,
- 319635469, 134747680, 403300369, 331350281, 276828173, 1073856766, 2668826016, 219389950, 320015712, 319643661, 364907795, 146804245, 4278386696, 46071806, 13041986, 5963807, 16777367, 101127703,
- 102048547, 572720647, 119678503, 572720646, 891758119, 640098851, 53884727, 370619939, 909259542, 389427511, 370546454, 654706183, 103228966, 639771398, 656811559, 101058310, 656810531, 101123590,
- 908470054, 909588023, 370553111, 389427763, 926298673, 370619953, 118887959, 640091654, 101066534, 656810531, 103228966, 587597319, 103228962, 637929222, 926295591, 389429046, 857085489, 909588018,
- 18224663, 135508019, 34608903, 505289987, 287838493, 504372749, 268632605, 319293207, 17961904, 672207379, 271127573, 471208725, 50531853, 487787798, 422581515, 84814360, 168166152, 421014030,
- 503911984, 51776787, 470617603, 269816598, 672470057, 271127683, 471208725, 50531853, 487787798, 422581515, 84814360, 168166152, 421014030, 503911984, 51776787, 470617603, 269816598, 672470057,
- 286397200, 2159673640, 1226184206, 336855553, 185142284, 1224868116, 2148406806, 230948365, 252578829, 303042059, 219546375, 67309069, 235669262, 67241740, 117703682, 101453324, 235078671,
- 51776781, 252776967, 2114850571, 269355791, 369297170, 51252493, 201788932, 34016270, 67371524, 202247175, 50597638, 369954062, 286394115, 235866895, 202181900, 327694, 46071552, 13042022, 2555921,
- 8388676, 16777404, 101123604, 640034594, 926299189, 370618934, 335947542, 572725015, 858985493, 387188231, 909588246, 388376359, 909584180, 118888215, 354624262, 640034598, 572720647, 119678503,
- 909510406, 370549527, 926298675, 370619953, 118887959, 640091654, 101066534, 656810531, 103228966, 587597319, 103228962, 637929222, 926295591, 389429046, 857085489, 909588018, 370553111, 926298675,
- 370619953, 118887959, 640091654, 101066534, 656810531, 103228966, 587597319, 103228962, 637929222, 926295591, 389429046, 857085489, 909588018, 556212225, 555830817, 555820839, 656482638, 470091155,
- 1494224985, 184878364, 202127371, 329780024, 2954040144, 386336787, 268698384, 505221676, 672210206, 537989137, 285283110, 689181992, 370349328, 51252508, 319624707, 806685469, 237639705,
- 100861957, 405409290, 152449049, 369955614, 219022083, 353572380, 353642768, 303173928, 336930833, 320147497, 235740182, 219546371, 353049875, 706222384, 50857230, 705563142, 372250904, 219356681,
- 235078422, 320216077, 338235413, 319825941, 1109864449, 336794388, 1109862210, 336794388, 235150402, 269491460, 68027421, 188222476, 1326200843, 221914666, 370049037, 50484246, 336331022,
- 185338900, 2068387845, 185536012, 118624270, 218961411, 235143950, 202247175, 33817095, 201786372, 252054542, 219022084, 117642765, 185536786, 218893839, 252578941, 303042059, 219546375, 67309069,
- 235669262, 67241740, 117703682, 101453324, 235078671, 51776781, 252776967, 202247947, 196621, 46202624, 12583296, 4194359, 83886167, 909391153, 909391159, 589702967, 84346402, 370414854, 336933683,
- 370414869, 858927923, 839007026, 872561974, 842216246, 335682838, 640889622, 353776147, 875897621, 571803446, 336925958, 842216214, 875902262, 875897638, 102900518, 236093441, 146153770, 101385485,
- 302645503, 286728206, 50528528, 286793729, 1074598679, 286724877, 227543297, 1125335059, 219353869, 320015776, 555822861, 310386735, 622397469, 127863865, 182387971, 1158876686, 292553217,
- 403773207, 320015680, 286801933, 16846615, 808455443, 807408397, 226495763, 2148340499, 556798733, 50343727, 3237937152, 3221323778, 1073753600, 20480, 589501477, 590689570, 875902242, 875901747,
- 355611443, 909521685, 655831603, 102900518, 352716039, 858986004, 857084949, 925247009, 370611732, 909522738, 656815157, 101130790, 372324102, 654706439, 909583911, 909580055, 272630066, 271585312,
- 537931792, 1192765456, 3574337065, 184880392, 167837446, 639634707, 571146522, 556212265, 555830817, 555820839, 656482638, 1208749267, 203950859, 487262988, 1343095869, 271585296, 271585312,
- 589115408, 50838274, 235593477, 446698254, 759896102, 320094759, 658641939, 320094759, 71439379, 206048011, 185280524, 1008471052, 262149, 46202624, 12583296, 4194350, 5636172, 588522752,
- 892674595, 892674595, 892547892, 842216244, 909317397, 389165878, 572728871, 100992774, 857084949, 370414899, 640033075, 117842487, 370611206, 909259542, 657733175, 570893862, 909391142, 353776179,
- 841418260, 588518677, 875902242, 537935873, 269496336, 270536752, 692525096, 148179982, 101385485, 319422719, 438706189, 690096897, 339879856, 1108611859, 339879719, 1108611859, 235801127,
- 235801098, 269488138, 806359120, 806363152, 489689104, 129696291, 182387971, 2685603342, 1259873818, 555820989, 656482638, 1310794023, 4029096225, 235538958, 235538958, 273682624, 1069072,
- 4278190083, 25166528, 3014848, 5898304, 588522752, 892674595, 892674595, 892547892, 842216244, 909317397, 389165878, 572728871, 100992774, 857084949, 370414899, 640033075, 117842487, 370611206,
- 909259542, 657733175, 386344486, 570820374, 101132071, 926361127, 909583911, 909580055, 118888242, 537935873, 269496336, 270536752, 692525096, 148179982, 101385485, 319422719, 438706189, 690096897,
- 339879856, 1108611859, 339879719, 1108611859, 202122256, 621022724, 202050341, 203695116, 621480716, 68027429, 273681420, 537931792, 269496336, 35855664, 84084667, 235801311, 639279123, 666716952,
- 558768417, 556214049, 555830817, 187011111, 604308747, 185338916, 186983691, 604769291, 184878372, 4278386699, 46202874, 12583296, 2293776, 16777279, 353699362, 856765201, 875902258, 640951075,
- 572928263, 386270983, 355676950, 556996116, 118563633, 842216244, 842208533, 588518677, 588518691, 892674595, 892674595, 20132660, 1074990560, 1880100976, 403298323, 135389193, 320869896, 21037325,
- 270536896, 806359088, 806363152, 19927056, 2685211584, 1073856766, 219185168, 134752275, 353701568, 18025920, 269496673, 270536752, 806359088, 1056784, 4294901507, 21103294, 5963968, 11599989,
- 909185792, 389165878, 101127702, 589702918, 336922146, 857085718, 842084400, 389429046, 842208790, 909195062, 370611735, 101058326, 656811559, 572720646, 640034598, 101123623, 573645574, 589439778,
- 640034594, 909521973, 370618931, 101058326, 572728871, 925964038, 370612022, 118757141, 656811814, 101131814, 640098851, 322188583, 926298673, 370619953, 118887959, 640091654, 101066534, 656810531,
- 103228966, 587597319, 103228962, 637929222, 926295591, 389429046, 857085489, 909588018, 1360401943, 572405012, 101256223, 302782725, 573842452, 353505563, 319951144, 336930832, 320147497,
- 235740182, 219546371, 369761555, 706222384, 50857230, 705563142, 16974104, 353698305, 1597590594, 220275513, 386204684, 706287373, 325118532, 17588243, 352913153, 304877585, 488513053, 339739649,
- 320147497, 235740182, 219546371, 353049875, 706222384, 50857230, 705563142, 372250904, 219356681, 235078422, 320216077, 338235413, 303114261, 19402771, 236327480, 202119430, 872941065, 154017060,
- 218893828, 252578829, 303042059, 219546375, 67309069, 235669262, 67241740, 117703682, 1829766668, 895170629, 202900491, 134482957, 239603240, 269109262, 67372176, 235799810, 336858113, 276365825,
- 185581822, 118624270, 218961411, 235143950, 202247175, 33817095, 201786372, 252054542, 219022084, 117642765, 185536786, 218893839, 920589, 4278190083, 20971968, 852160, 2949149, 370414336,
- 909259571, 589706293, 117842467, 857084945, 892744243, 589706257, 386277923, 353776179, 587600917, 891691555, 540423221, 230690067, 3222082323, 639636237, 639287322, 448797222, 226517030,
- 2148340499, 18027277, 320015776, 320015629, 450952845, 18490918, 640031264, 1611469658, 219353869, 1248608, 4278190085, 20971968, 852160, 3145757, 6029380, 370414336, 909259571, 589706293,
- 117842467, 857084945, 892744243, 589706257, 386277923, 859182898, 336933427, 570632966, 859059494, 859189527, 336933427, 570632966, 859059494, 839332403, 858994199, 101979442, 336929571, 892674595,
- 891691555, 320877364, 319668237, 230690067, 438706195, 640031424, 639287322, 320019824, 570829341, 371201560, 1510351384, 103423251, 538318882, 102897686, 488447274, 706548499, 370680326,
- 404099088, 2684421666, 219353869, 2366837517, 639295742, 536943142, 438707738, 403052054, 102244898, 403052150, 102244898, 102110816, 270541336, 404889616, 65542, 46202624, 12583168, 16777287,
- 353703447, 909391127, 487993907, 587600899, 892675618, 370611491, 588518677, 590624035, 588584226, 875902242, 590690103, 587600917, 54339106, 842217012, 924128534, 926364725, 20067126, 2416258063,
- 235538958, 235538958, 268778384, 1611665504, 2419721744, 235538958, 235538958, 69993872, 3053521675, 1292700775, 235541332, 540543502, 235801112, 857802762, 269485829, 1074794560, 84348944,
- 168304947, 403312142, 235550752, 1410533902, 1728843085, 196618, 29425408, 12583296, 2686999, 318767159, 102900501, 857084949, 892744243, 589506100, 589706293, 117842467, 857084949, 892744225,
- 640037941, 102900515, 909378822, 353776179, 587600917, 1614095906, 235801096, 235573258, 235407886, 235556874, 18490976, 589699584, 595600186, 74554, 319622419, 319622419, 236496897, 235801098,
- 403573258, 4061007370, 640031424, 975421466, 591012643, 219353869, 320015712, 524301, 46202624, 12583200, 2949137, 5242937, 7209050, 8585333, 101978880, 656541191, 875898406, 842413878, 387323415,
- 858986035, 875902514, 572728102, 640033543, 101065251, 370545685, 657863219, 386271010, 926036758, 388376374, 353699362, 352723491, 858986004, 875902514, 891495206, 336012852, 842216214, 590689590,
- 353706535, 858986004, 859125298, 875902514, 386018086, 842216739, 570889237, 370414854, 909259571, 589706293, 370547440, 437655092, 873862682, 739907094, 1746210632, 337386516, 1208948072,
- 674451210, 1093084993, 2186228520, 320016933, 304424210, 3675394835, 174067210, 4027190798, 168693258, 477761120, 471105556, 319877344, 319635469, 471602192, 806363156, 2819624976, 168693258,
- 235801264, 439353610, 218959148, 437922829, 218959148, 272247821, 471077916, 658518032, 1093150785, 546324519, 538976288, 2686459936, 235407886, 235801098, 135137802, 350227978, 1880366108,
- 223350816, 470618899, 1075581972, 1343229984, 235538958, 235538958, 520094976, 1644347647, 218152961, 637540096, 1140864256, 872480768, 102900518, 370414869, 892744243, 891360519, 589506100,
- 822543906, 857081351, 657863201, 555951655, 103884578, 370611990, 641087286, 103163687, 101134597, 370546438, 909522743, 19277351, 168431192, 168431118, 104462, 230690067, 136072467, 2550206995,
- 470291218, 3170770445, 50682910, 319383560, 134415622, 34867304, 50882576, 135529989, 100927592, 2818642694, 168693258, 235801232, 539006986, 1729303309, 505286712, 4128913424, 1208357896,
- 151520005, 88606227, 105382403, 50858259, 335955973, 198664, 4294639362, 17171136, 1704128, 16777274, 353706531, 352723491, 556996116, 875902514, 891495206, 892678707, 822420276, 589435925,
- 370607623, 926032179, 572991286, 354628903, 354628899, 354628899, 268514595, 230690832, 17634067, 320015776, 273727501, 31522320, 118763521, 3221297159, 336004888, 1073807664, 1076903976,
- 281018664, 218960752, 218960659, 1074798611, 29679632, 387321376, 537794071, 3233858561, 3233857728, 768, 2147664127, 369147905, 721430528, 554893312, 353703474, 354497827, 572724531, 909391142,
- 875901747, 336921910, 355676950, 589497876, 288695842, 858994228, 25174807, 1076238912, 4089495806, 134950176, 2583766573, 476056851, 471121940, 1620055068, 650117472, 3760201754, 136326496,
- 639295499, 319643776, 471602384, 337641748, 50356252, 3741318655, 2734784513, 486542848, 11008, 100872467, 640034566, 909513527, 924194327, 118887985, 654706179, 322381350, 840382006, 336663830,
- 639771398, 909381941, 402948286, 84675852, 202900608, 222432269, 54526480, 269290773, 352534530, 320015720, 320015629, 2164160001, 67373837, 2147552280, 67439629, 352525591, 226557453, 352453392,
- 226492685, 219349520, 319652094, 2147552531, 67113741, 3237937152, 3221291010, 654318336, 1191194624, 823590912, 774316550, 909391107, 372388662, 101062422, 101061909, 101061909, 101130755,
- 842208791, 640103991, 352723479, 875901717, 909379366, 353776179, 353776149, 587600917, 891691555, 859190325, 169609944, 624441363, 808802100, 671626577, 185732662, 304422933, 621941523, 320016933,
- 319662866, 794628928, 221192481, 2685211411, 219353869, 403442739, 559241548, 724850485, 1040657737, 487069994, 453992210, 538994945, 538976288, 326115360, 221261837, 790700051, 321921327,
- 319651853, 226495763, 4278517779, 48168959, 10486080, 4915272, 5701712, 16777311, 370553395, 808457493, 587600945, 102111011, 656803335, 101131047, 640034566, 119748407, 640091654, 657930022,
- 654706183, 322381350, 387323702, 389429015, 857151254, 36575026, 639771427, 389428277, 824652551, 590546727, 891684659, 570766900, 842208277, 939602997, 1131431184, 420225327, 151586053,
- 1344734483, 152241712, 503644936, 319173707, 100861960, 105851688, 34080788, 218755078, 689308942, 84807176, 235880490, 827602952, 235801104, 1764695613, 3090161937, 554782246, 269528833,
- 1134559504, 556287344, 319368239, 151323909, 50873924, 135529989, 50873898, 135464454, 140841271, 335939074, 187695368, 856424962, 33688631, 788881932, 168701002, 682102282, 1630152706, 555227152,
- 269488176, 131088, 46202624, 12583168, 3473433, 640951552, 102900518, 370414854, 909259542, 840308535, 657733175, 657864231, 336992049, 570820359, 926164519, 639771447, 859190325, 874915635,
- 20067895, 962541728, 943218489, 1059207519, 436895258, 2131298570, 1219433747, 122160903, 117901076, 235566623, 527829518, 336004871, 945764848, 960061240, 320157791, 168364415, 444467738,
- 122190655, 122160916, 118753031, 168431135, 336011022, 67110663, 3237937152, 3221291010, 654317824, 1124087040, 874840064, 572728870, 336922118, 842208790, 370620214, 875968306, 909518631,
- 859190309, 353703474, 572720660, 876033318, 372388662, 101979413, 891691555, 859190327, 353703474, 572720660, 2684433702, 960061240, 1597519967, 440345145, 169478782, 327092489, 248053269,
- 235801098, 1343097354, 235538958, 235538958, 168431184, 168431118, 1597632526, 962541624, 356015929, 151617299, 2114591242, 169492250, 1074400782, 168693258, 235801248, 235577354, 174066190,
- 1611271694, 168693258, 33555200, 2147664127, 989904897, 1879067904, 855703552, 353703474, 654706452, 353765159, 117835284, 372388629, 587600917, 101979427, 891691555, 639771445, 859190325,
- 36582707, 909521973, 387330611, 925247287, 102893366, 387188231, 842208790, 875968310, 656811559, 104273713, 370414854, 656868887, 640091655, 640104247, 926361127, 909583911, 909580055, 4160827955,
- 252578416, 421989135, 658318361, 235801112, 168695818, 169348618, 403312142, 723795494, 891169865, 187110933, 441976326, 218959148, 437922829, 218959148, 501951501, 371663164, 990251284, 168364091,
- 172950785, 1091109379, 117835047, 69028875, 3221293835, 275778062, 655033862, 674178585, 436612164, 235538958, 235801120, 168697866, 102370826, 740836396, 303311689, 252389142, 370835471,
- 370553878, 370547226, 437655092, 437406318, 1025650254, 906363417, 67438390, 17584139, 755436043, 134809925, 172627715, 1024, 2147664127, 201367553, 1174419456, 20224, 572731667, 370414869,
- 891688727, 909195060, 372388662, 372388631, 101979413, 117835527, 892745269, 589702708, 352716322, 638916372, 640034599, 909391157, 372311347, 118756630, 892745271, 86193205, 842217012, 588584214,
- 520644511, 956702488, 656885274, 394337093, 1193816865, 286210596, 437922842, 975182380, 858277668, 2835420961, 537268239, 4261944856, 218960856, 268517395, 655971592, 387385350, 925463609,
- 388049207, 188819797, 1293103121, 403972876, 1060056895, 1293560088, 168964115, 391457089, 1109405729, 135730971, 1427711750, 319655944, 12586259, 3, 25166336, 589952, 2293779, 588316928,
- 288695842, 322123316, 372384017, 101978389, 336920867, 842216214, 875902262, 572728102, 3221225734, 438707738, 438305248, 4263126566, 1074598656, 219353869, 18025792, 645987968, 436207898,
- 25230886, 4279903872, 19274240, 319668256, 230690067, 150999827, 3237937152, 3221307393, 520097536, 922757888, 1325417216, 1728076544, 28928, 370413841, 909259571, 640946485, 102900515, 859190295,
- 353776179, 587600917, 891691555, 891691543, 842217012, 101979414, 587600919, 875898402, 372388662, 891691575, 842217012, 101979414, 587600919, 875898402, 372388662, 891691575, 842217012, 101979414,
- 587600919, 875898402, 372388662, 355611395, 572728084, 438711349, 640031424, 639287322, 2148340544, 219353869, 269684096, 168693258, 235802122, 235538958, 235538958, 235801144, 235801098,
- 168431118, 168431118, 235550734, 235538958, 168693262, 168693258, 1082658314, 272633872, 2164162561, 438707738, 639270913, 319650342, 222301459, 2148340499, 235538958, 235538958, 235801144,
- 235801098, 168431150, 168431118, 235550734, 235538958, 168701454, 168693258, 171445770, 168431118, 1577127438, 269488144, 1536, 2147664127, 453033985, 1509963776, 1677745920, 30208, 572724993,
- 370414854, 101135155, 840308500, 892745527, 640100148, 335939362, 875966721, 119678503, 336922119, 840308503, 657733175, 909259559, 589706293, 102896419, 909579541, 118888242, 353776179, 842204948,
- 120927542, 640098822, 639771447, 121058357, 891487764, 874714373, 639764278, 926164519, 842217014, 336992022, 33949191, 179181335, 2919894542, 117901079, 121636628, 336019463, 1509820167,
- 336004871, 117915655, 118753088, 2920744711, 168693258, 639241902, 254480403, 376768020, 452068894, 722473766, 1963332623, 2986745366, 3221297702, 449193536, 218959148, 437922829, 218959148,
- 2533436429, 168431127, 336008974, 1074202375, 118098439, 117901120, 128581140, 117901076, 168429376, 117915655, 386339847, 235538958, 438718465, 252646358, 371072021, 438700813, 252646615,
- 371072021, 440404749, 1086341158, 438314522, 372512278, 370809366, 370553878, 458778, 46202624, 12583168, 3866667, 4522048, 5177418, 16777307, 824387121, 352723491, 858986004, 572925703, 101058311,
- 924194327, 907417399, 336934711, 909259542, 825308469, 19277620, 857084949, 892744225, 589706293, 386277921, 588584498, 587600951, 588580149, 858207796, 119939605, 654706452, 926168358, 18224950,
- 1611467479, 219353869, 156849427, 175114520, 453511426, 173759242, 325650713, 34802957, 472251907, 346030356, 4262730780, 807146592, 808459284, 2684425244, 807148592, 543169556, 538976288,
- 18882592, 219351479, 1280578317, 140511240, 34212379, 139349513, 325715969, 219353869, 100992864, 346087166, 2685672476, 2216434708, 346035228, 812658716, 812653588, 304430108, 621941523,
- 320016933, 983058, 46202624, 12583168, 1507337, 3342373, 4653117, 5963857, 7667813, 8323194, 8978564, 318767253, 370414882, 875901491, 102893350, 857084949, 892744243, 119744052, 336922146,
- 842216214, 640955702, 370411299, 909259571, 589706293, 923148835, 842208788, 589706293, 354562850, 842208788, 388379701, 102900532, 842208277, 102901558, 842208277, 120862006, 102900532, 842208277,
- 336921910, 841036566, 875902262, 572597030, 372381446, 339157781, 87368454, 909386517, 571814695, 118753062, 891692806, 389429044, 789622806, 2569998369, 168693258, 235801136, 235556874, 175114766,
- 1745489422, 170920462, 805965326, 804261386, 556732449, 789610512, 791613473, 271524112, 562048801, 790695983, 790696048, 4281278736, 18095104, 471602336, 341900820, 471085084, 337391664,
- 472948737, 471085084, 538976352, 538976288, 281018656, 554708769, 168693807, 168693258, 239603210, 235801098, 1611532810, 168693258, 2651721226, 554708769, 790695983, 2419007760, 270610192,
- 556740911, 270610192, 556732432, 2692689680, 337386516, 471602336, 2685672580, 1882201108, 1880888368, 624696368, 303239954, 319956261, 16781843, 3237937152, 3238100994, 27136, 637939973,
- 891692839, 336930613, 639771398, 352793909, 101123860, 640034566, 875902775, 120665911, 640026118, 926299189, 925247287, 908470071, 387331639, 117904919, 926168343, 842216501, 353768725, 640104213,
- 909522743, 118887959, 118888199, 370546439, 101061653, 824649510, 353703447, 17176087, 118687952, 320341552, 403901709, 319238150, 100730632, 2235696682, 540030230, 697901613, 639109389, 134677254,
- 154142228, 405935624, 840435720, 805964054, 134681606, 388367875, 2569539082, 807415074, 1132795445, 17181189, 117507642, 940115768, 319635231, 524225811, 939985208, 117833991, 909182996,
- 2052523529, 773130518, 87434271, 269297944, 336081706, 134350342, 672009536, 102311474, 956827705, 841357574, 1074597671, 101057032, 707987476, 388566544, 522466821, 369693998, 151410554,
- 336015671, 1536, 2147664127, 1660995073, 3070276352, 3204496128, 49920, 924201239, 892679735, 370414903, 892744243, 926291765, 892613926, 907490599, 859190839, 859182898, 926291762, 925312806,
- 925312822, 119940918, 387384839, 657732871, 572732469, 352720149, 909584149, 119940903, 118953734, 118953734, 336922118, 926291478, 101127479, 101127445, 353706533, 590624035, 588584226, 856954146,
- 572724531, 858985493, 354558741, 355676948, 892482324, 336933685, 892678707, 856954163, 859125042, 590624050, 842216739, 589509685, 892482357, 891495220, 354558772, 875897621, 355677461, 355677447,
- 588591911, 588591893, 537333417, 219357186, 86709005, 673191430, 419762186, 235805200, 51255834, 2686587908, 235145521, 235866141, 33759239, 135802124, 204281864, 119538434, 487001614, 822674446,
- 472456864, 1964191788, 119407931, 806380801, 269488144, 269488144, 269488144, 269488144, 806359088, 269488144, 269488144, 269488144, 269488144, 808464432, 808464512, 235343408, 688128832,
- 319631904, 724700435, 437126150, 388039427, 251989539, 370546195, 68879365, 168241688, 118372906, 104861191, 388376070, 153814553, 419834633, 103097878, 118439942, 708447752, 405341962, 471805444,
- 319296039, 71047014, 238889991, 269488327, 269488144, 269496336, 269488176, 269488144, 269488144, 269488144, 269496336, 269488176, 269488144, 808480784, 2150641744, 3153968, 1703937, 19268128,
- 917600, 101126912, 841036566, 640100150, 102900518, 319450256, 314704146, 376179219, 1294806349, 280825089, 3171950624, 2960678, 4294704903, 25166528, 2687168, 4259893, 5832781, 7209054, 842203392,
- 857019670, 859190325, 353703474, 353776179, 587600917, 909588003, 842213159, 590624053, 654778915, 389428277, 336925986, 892482355, 119747637, 858985493, 875902258, 388113187, 858985493, 875902258,
- 388113187, 336925986, 892482355, 623064117, 859248391, 370356519, 555943431, 925247266, 842216979, 341856257, 168699932, 337120778, 2048138268, 336724225, 269484873, 1191445792, 269497372,
- 806359072, 269492240, 278925344, 537923616, 269488144, 4262465568, 806963888, 180231997, 4262726153, 151655813, 319471114, 482345235, 172527636, 1208618510, 350229532, 570491164, 537950754,
- 1551237648, 272636948, 537923616, 270561296, 1880104976, 537923616, 537944080, 270536720, 1076460195, 298253967, 303174162, 289014033, 512, 2348990719, 184598529, 9472, 640098817, 842217015,
- 101127703, 639774977, 322384949, 389165878, 859191063, 370612018, 721818645, 774898178, 387389207, 387395118, 3674019607, 3624476951, 185865227, 201797758, 159647500, 1266358564, 673718273,
- 673720360, 2701010984, 235935521, 286349569, 185290697, 420548568, 131108, 46202624, 12845378, 3997753, 370606336, 101123846, 86452006, 926364437, 925315847, 372388631, 587600917, 891691553,
- 858994228, 859190289, 353703474, 859191095, 924260146, 926295591, 18232887, 35858227, 554183184, 386731808, 2952665603, 441136425, 1128143682, 320015753, 218168845, 269292307, 235538958, 386338436,
- 1812399895, 218956569, 4265222159, 1879803589, 547062529, 50596153, 1482558733, 1259575455, 331288910, 320015629, 18025741, 235801096, 656615178, 470947093, 51842395, 4263577860, 167780445,
- 3774808064, 2835447810, 268438272, 1090529536, 1392528640, 1677745920, 2181065216, 336789504, 909579799, 640103477, 352781831, 926168358, 589506097, 352716322, 353834516, 858986004, 892679730,
- 909391142, 857084933, 892744243, 892745269, 589702708, 369566243, 118756630, 370611219, 875902519, 101131815, 353775895, 570492692, 370607623, 909586995, 872621607, 925242679, 336926257, 640956167,
- 572728102, 336922118, 336926486, 842216214, 909456694, 471615542, 471604252, 268966940, 539237536, 605958943, 1074598684, 438309645, 219350529, 471010624, 523443748, 370943008, 470294554,
- 471604252, 2015108124, 16715792, 320016933, 304424210, 1964118803, 277876752, 857620496, 857677855, 320611358, 319635469, 1744905244, 286330912, 270540816, 3188723985, 404230740, 857609284,
- 221651487, 320015643, 858199565, 231225376, 453841683, 522335757, 336862771, 657662008, 270545409, 537923857, 286330912, 403881488, 704713240, 538976288, 538976288, 303624446, 306319956, 705828888,
- 505295647, 908205875, 319630093, 220925203, 327734, 48299776, 10879360, 1507339, 3211301, 16777352, 654706452, 926168358, 118888246, 925247266, 389165878, 117835542, 353776161, 555943444,
- 875898402, 656549174, 859191078, 118888242, 355534086, 589497876, 892675618, 654706183, 926361126, 858994230, 909580082, 842216246, 907482902, 372388659, 102110999, 656803335, 101979431, 639771427,
- 101135669, 640034566, 656815927, 101979431, 639771427, 101135669, 102110983, 656803335, 336881665, 336860180, 400036884, 202050316, 185341719, 42404875, 320015680, 230751501, 3707835155, 185273367,
- 202839820, 4262202123, 806163393, 85660429, 101255187, 705373701, 353899544, 405408546, 187308052, 337122594, 638265880, 134809093, 320537875, 319631373, 135464219, 604309001, 320537090, 319631373,
- 604176667, 134809093, 2013332755, 185273367, 202839820, 2668366603, 336860180, 336860180, 218960848, 218960659, 336908307, 336860180, 661197844, 219353869, 101265959, 135464197, 219747655,
- 421074239, 420298517, 336086805, 151389444, 319629106, 841420051, 84215305, 38012947, 221721092, 923603731, 1141048114, 84153352, 67111174, 3204382720, 3221308162, 1627392768, 2097179904,
- 571670528, 909583911, 370618931, 822543879, 387396147, 909588278, 521548339, 118887938, 656868870, 120006438, 387388951, 101123606, 637677350, 570832695, 117835569, 355479559, 117835526, 589440774,
- 102109991, 656803335, 370615079, 637929222, 587605799, 892675618, 572864052, 909583911, 370618931, 822543879, 118953750, 101123846, 874915618, 475019063, 235736334, 219028508, 892079629, 344134421,
- 589236262, 252524577, 101256213, 453777670, 336135952, 386074674, 218959107, 1192624919, 17893655, 152700930, 67437059, 17632517, 54096897, 369954062, 353377795, 218959874, 152568597, 638782735,
- 236759553, 470682893, 218959388, 67341838, 117706280, 169478717, 20711689, 404232288, 404232216, 1007231000, 235082019, 170204965, 202119430, 135136777, 910235408, 224136201, 218301207, 424564749,
- 67190818, 17308427, 50595078, 4264953350, 51777022, 2265779715, 51711355, 2416775170, 2148340491, 404760090, 404232216, 4028110872, 606929669, 155059977, 169478665, 262203, 46202632, 12714290,
- 3735597, 6946885, 925958400, 370619958, 101123862, 336660230, 639771398, 354628917, 572720660, 638661926, 640100134, 372651830, 370546455, 120992307, 925247266, 389165878, 554043158, 925247266,
- 389165878, 117835542, 387396147, 353776179, 589497876, 354887458, 572720660, 590689574, 587600917, 54339106, 3892393524, 219611913, 151194893, 320678152, 269683981, 319622419, 151529757, 218959107,
- 118031127, 840900402, 219028561, 471600653, 235736334, 236758270, 470682893, 218959388, 740369422, 220079639, 806163219, 319621649, 269683981, 319622419, 595919142, 50531597, 555945239, 3472756531,
- 219353869, 319651968, 838929683, 589378319, 50534157, 505613581, 403121959, 404232216, 404232216, 404232216, 538449944, 219364133, 336532237, 320015843, 226525197, 3205305107, 639262721,
- 4278125824, 2181218559, 302040321, 704650752, 2365601280, 822149120, 100992806, 370546438, 369435959, 641087286, 119678247, 857085702, 657864498, 119670566, 857085702, 657864498, 387188006,
- 892745494, 119940916, 372311814, 909522710, 926295847, 370414903, 909259571, 370619701, 369493783, 926291479, 370414903, 909259571, 370619701, 909522710, 640034599, 119677731, 589702695, 117842467,
- 589506055, 117900834, 370611718, 355940150, 858986004, 892679730, 269504513, 118219006, 203032070, 268505089, 101128460, 3506309895, 185273367, 202839820, 3339455243, 185273367, 202839820,
- 17566475, 336860193, 336860180, 319153428, 84281608, 453116452, 221252883, 50404115, 151389476, 453317384, 221252883, 319101715, 84281608, 405408550, 571807764, 337127947, 571157016, 403970069,
- 86379306, 319293702, 219355909, 18025776, 2684946876, 185342215, 2543257095, 185337606, 335808026, 336860180, 1611928596, 336860180, 336860180, 185341736, 387386379, 202050316, 84281818,
- 1141379845, 926024706, 219353869, 50541111, 68421700, 839452165, 320015655, 154281741, 319096070, 420824840, 420822797, 222237977, 138876185, 100992020, 220672521, 655168275, 1024, 2147664127,
- 184598529, 939527936, 21248, 640098835, 842217015, 101127703, 590689027, 120926471, 640091654, 909588262, 389165875, 117839383, 656877062, 372384021, 587600917, 572728097, 909391142, 909377843,
- 353776179, 842413845, 118756887, 656541191, 926164519, 387396150, 219028672, 471600653, 235736334, 1074794532, 202966813, 990250507, 907949596, 101136924, 102370315, 223871261, 4262269715,
- 225988744, 17634067, 218960816, 436869395, 1342769418, 1342839306, 436865289, 1610684682, 404232216, 404232216, 1616945406, 101461951, 202966791, 1630416481, 117905676, 3207531526, 319622419,
- 319622419, 319651841, 452136211, 436865289, 151605258, 169478736, 1706249, 4278190084, 25166528, 721088, 3670031, 318767188, 925247266, 389165878, 50726678, 119747891, 101135665, 640034566,
- 859191095, 387396147, 101123606, 354887462, 353776161, 555943444, 639771427, 859190325, 336998657, 656541191, 101979431, 891691555, 570820405, 926164519, 389166647, 219028672, 471600653, 235736334,
- 1074794532, 202966813, 990250507, 907949596, 101136924, 102370315, 223871261, 4262269715, 225988744, 34411283, 168364343, 320408090, 420678925, 151656970, 436883465, 408944906, 404232216,
- 4262991896, 3210764448, 117836847, 1628182791, 207695406, 101123865, 331296524, 320015629, 18025741, 169478727, 4078569737, 219353869, 151591667, 1342839306, 50333961, 3170893055, 3221340161,
- 1090521856, 19712, 101130771, 842208791, 640103991, 892743955, 656811828, 589702695, 117842467, 101123591, 370611735, 389223959, 909587990, 807872294, 909391157, 353776179, 857150997, 370611718,
- 338114358, 640091655, 909587509, 786437655, 387389207, 387395118, 195499799, 839123460, 1277312533, 1142177572, 101318913, 134547202, 295698690, 218695974, 219375121, 1025970957, 218564353,
- 906831632, 370546198, 370546198, 673759233, 673720360, 2180917288, 168431885, 474416389, 1696473632, 336658945, 84281354, 218714113, 153489682, 221250099, 621613843, 554567982, 268700938,
- 218962306, 421072141, 218959117, 33555200, 2181218559, 184598529, 1493184768, 570490880, 909583911, 370618931, 335742471, 639771398, 101135669, 640034566, 859191095, 387396147, 101123606,
- 354887462, 572720660, 590689574, 924266753, 118888246, 117905159, 101127703, 101132071, 926361127, 640099879, 640104247, 387397175, 842217015, 236773377, 470682893, 218959388, 219358222, 119345933,
- 101387289, 907819527, 974927390, 202049031, 320669210, 269683981, 1277028350, 84281099, 840513576, 151650565, 138099464, 83954185, 33753679, 86458633, 1275791110, 185271325, 404250625, 404232216,
- 2164135960, 219353869, 101461983, 202966791, 1630416481, 117905676, 3744402438, 219353869, 1246626176, 151520023, 690373897, 84627208, 909510404, 184812807, 184618064, 1160578826, 50858249, 674327,
- 4280156163, 27263424, 721095, 4980786, 118751488, 891692806, 389429044, 355534614, 572720660, 590689574, 587600917, 892675618, 654706183, 926361126, 842216246, 102110999, 656803335, 101979415,
- 891691555, 859190325, 353703474, 572720660, 875902246, 268509731, 404232216, 404232216, 218960648, 219353107, 119345933, 101387289, 907819782, 1243426084, 185205256, 237570330, 554568202,
- 237049623, 135137802, 479199496, 235736334, 219028508, 4124511757, 219353869, 319651968, 803147027, 101123596, 778112026, 436951075, 184682505, 235538516, 386402830, 1880564001, 168693258,
- 33556592, 3237944832, 3221323778, 1241516800, 571670528, 909583911, 370618931, 822281735, 572720660, 120927526, 640091654, 909588262, 875889211, 842216246, 336925974, 572728070, 859125030,
- 590689045, 372388629, 721818645, 101978371, 891691555, 482353973, 235736334, 219028508, 321129997, 487787789, 185342215, 473630214, 474825270, 471130132, 350229532, 3233824796, 320015632,
- 943722509, 319622419, 408944912, 404232216, 4262991896, 320015744, 187752205, 436602630, 1345282315, 337386516, 471602400, 3223334932, 218960704, 232848915, 2148340499, 4278125568, 1073922303,
- 184600321, 1090531072, 20480, 370611219, 875902519, 101131815, 336933651, 909259542, 370619701, 657929751, 572728102, 369493767, 926291479, 370414903, 892744243, 387322935, 909586966, 640955702,
- 119678503, 825689606, 101123862, 925247271, 924260150, 404254774, 404232216, 271063064, 319622419, 201523741, 907816216, 974927390, 202049031, 320669210, 2282949901, 1310794023, 656875809,
- 558768417, 215164705, 185288716, 185338920, 188554507, 236752897, 470682893, 218959388, 2159345166, 219353869, 50606047, 776674083, 437018926, 201721606, 319676207, 661654803, 320017474, 656884244,
- 320017474, 184828436, 202131467, 202050344, 205265932, 4278125824, 1073922303, 184600321, 1090531072, 1459637504, 336789504, 909579799, 640103477, 856884743, 857084949, 892679730, 907482647,
- 589702967, 117908003, 370611718, 355940150, 842208788, 570504502, 335939334, 857085463, 909588018, 640034612, 891691527, 842217012, 101979414, 353710631, 891429652, 410006581, 404232216, 672667672,
- 218960656, 50470163, 472717324, 473308726, 184944442, 486939148, 319622419, 1109858305, 336794388, 1109862210, 336794388, 235546434, 235538958, 269486606, 479199504, 235736334, 219028508,
- 3036548621, 320015744, 70246157, 1260069635, 207695406, 101123610, 232730380, 17634067, 555820800, 656482638, 1310794023, 4029096225, 235538958, 235538958, 273682624, 1069072, 4294901508, 20972224,
- 721095, 4259887, 318767179, 924194580, 657732918, 319162150, 370414899, 892744243, 387323701, 640104246, 119677731, 387319303, 926365206, 857084949, 926234162, 370611732, 909522738, 656815157,
- 101130790, 588519174, 875897379, 1882338099, 404232216, 404232216, 219353128, 35459853, 756550659, 907949596, 101136924, 102370315, 218960669, 556238867, 555830817, 555820839, 656482638, 276828384,
- 17858576, 219028624, 471600653, 235736334, 226538750, 3742176019, 587400239, 774785819, 102370401, 789317127, 320015839, 1109880845, 336794388, 1109862210, 336794388, 269494082, 4278452240,
- 46202878, 13041984, 3080203, 5832769, 387191552, 892745494, 119940916, 355668742, 842208788, 389362998, 926291734, 589506087, 101123874, 907417366, 336934711, 909259542, 102891829, 387188231,
- 842208790, 875968310, 119940647, 355611413, 354624276, 891429652, 891429685, 892547892, 1882338100, 404232216, 404232216, 219353128, 35459853, 756550659, 907949596, 101136924, 102370315, 218960669,
- 655884563, 320017474, 656884244, 320017474, 806830612, 271585296, 269496336, 17829936, 219028624, 471600653, 235736334, 226538750, 3742176019, 587400239, 774785819, 102370401, 789317127, 320015839,
- 654311693, 558768417, 556214049, 555830817, 271601703, 269496336, 806359088, 4278517776, 46202878, 13041984, 3080203, 5046337, 318767214, 924194580, 657732918, 319162150, 370414899, 892744243,
- 387323701, 640104246, 119677731, 387319303, 926365206, 857084949, 20264498, 101123618, 370546452, 926298675, 640103478, 639764262, 859190325, 336926258, 875636486, 842216246, 118756630, 588518663,
- 875902242, 892745527, 572728116, 588518677, 410006818, 404232216, 672667672, 218960656, 50470163, 472717324, 473308726, 184944442, 486939148, 319622419, 1109858305, 336794388, 1109862210,
- 336794388, 235546434, 235538958, 303581710, 404427560, 152047640, 672007968, 17829898, 219028624, 471600653, 235736334, 226538750, 3742176019, 587400239, 774785819, 102370401, 789317127, 320015839,
- 654311693, 558768417, 556214049, 555830817, 168751143, 168693258, 311299594, 471014168, 268766221, 84479760, 235406353, 269485578, 4278125568, 1073922303, 184600321, 1090531072, 23040, 370611219,
- 875902519, 101131815, 336933651, 909259542, 370619701, 657929751, 572728102, 369493767, 926291479, 370414903, 892744243, 117842433, 370611206, 909259542, 657733175, 823600678, 118888199, 120006406,
- 925247238, 925247287, 924260150, 1880495926, 404232216, 404232216, 219353128, 35459853, 756550659, 907949596, 101136924, 102370315, 218960669, 655884563, 320017474, 656884244, 320017474, 605307412,
- 185338916, 186983691, 604769291, 185338916, 186983691, 2415987723, 218959388, 236723214, 4262333709, 319652020, 803147027, 455279364, 1630416459, 117840396, 3744402438, 219353869, 556204033,
- 555830817, 555820839, 656482638, 186983787, 604769291, 185338916, 186983691, 604769291, 185338916, 33555200, 2181218559, 184600321, 1694514432, 335609856, 640091655, 909587509, 570627607,
- 121059110, 640091654, 909588262, 842216246, 370611990, 637929222, 370616103, 354624262, 572720660, 590689574, 587600917, 892675618, 924266755, 118888246, 117905159, 101127703, 101132071, 926361127,
- 640099879, 640104247, 387397175, 842217015, 404230146, 404232216, 143267864, 572916490, 202054150, 255133446, 487333172, 120917812, 436996870, 52830726, 319948810, 269683981, 319622419, 189537753,
- 671417863, 87169336, 134810113, 151534395, 1325728010, 151126794, 101001025, 491522823, 17500932, 219028624, 471600653, 235736334, 135107838, 101464179, 202966791, 488446297, 420239641, 201721607,
- 218657592, 320015712, 224419853, 1611469587, 390753793, 151586819, 136914501, 67439439, 120993287, 1342899205, 168493324, 155528455, 386074633, 50334282, 3741318911, 2684436994, 838870528, 28160,
- 336933139, 924194582, 387331639, 117900822, 637994758, 119678503, 572720646, 640038695, 909391157, 387330611, 925247266, 389165878, 117835542, 857085475, 825701938, 387323702, 101127702, 640034566,
- 587597351, 640099874, 117843750, 572720646, 101066534, 656803335, 909588006, 823604791, 842208790, 3224778550, 1060971823, 51776873, 1762463235, 353439505, 287838483, 185605645, 555554060,
- 319622419, 319956352, 623186451, 303239954, 672203058, 271127573, 471208725, 50531853, 487787798, 422581515, 84814360, 168166152, 421014030, 503911984, 51776787, 470617603, 269816598, 672470057,
- 2147553809, 205465632, 51908116, 369954062, 33822723, 185402721, 51054859, 692590995, 320015648, 538976397, 538976288, 235718176, 269355791, 369297170, 51252493, 201788932, 34016270, 67371524,
- 202247175, 50597638, 369954062, 286394115, 235866895, 33557772, 3204397312, 3221348865, 1023422720, 570490880, 336925958, 101058310, 370414869, 892744243, 389493813, 909579798, 858203958,
- 370546483, 657864247, 589506087, 909522215, 640955701, 101130759, 842208791, 640103991, 319627265, 925702945, 319622419, 436707333, 117771275, 643826012, 185211656, 237766660, 557405976, 482153255,
- 235736334, 219028508, 3221294605, 487197971, 1360137008, 319638065, 256511251, 84736014, 186255111, 67842959, 169543688, 22025018, 170477333, 404755213, 404232216, 1579032, 4278190083, 25035454,
- 3276992, 6946878, 355533056, 352781844, 389165847, 117839383, 656877062, 370615075, 637929222, 352724775, 587600917, 892675618, 909588020, 875902262, 372388662, 101127175, 875898407, 370619959,
- 656803589, 640104231, 657466147, 657930022, 389429030, 859191063, 924260146, 118888246, 118888199, 386336518, 654706454, 556204033, 236472121, 184813612, 638065418, 123470160, 436931589, 319135751,
- 923995405, 320936749, 2685603085, 404232216, 404232216, 52916225, 302064643, 18030359, 675416322, 185009669, 184819020, 1276969995, 84281099, 34160935, 89065987, 134810113, 688562177, 1342248263,
- 453655059, 184813576, 436965171, 201656071, 1242500856, 219353869, 307310922, 169685003, 1024660237, 218959388, 236723214, 3926789389, 822281508, 18154257, 1160578571, 50858249, 168446487,
- 134420298, 759564553, 34277894, 84627212, 50333444, 3238002431, 3221307905, 536873728, 15104, 101130771, 842208791, 640103991, 336933123, 909259542, 370619701, 909522710, 589702951, 120653603,
- 370611718, 121059126, 858985990, 857084949, 892679730, 101060913, 219028640, 471600653, 235736334, 218960660, 419896595, 101059340, 120986683, 101135726, 102370315, 167978530, 219353608, 840766221,
- 404275201, 404232216, 2701006872, 320015744, 187752205, 436602630, 909074699, 102370393, 940312071, 1611466867, 219353869, 16777568, 4278583324, 46071806, 12583232, 3276811, 5832766, 7143523,
- 656544512, 859191078, 118888242, 103876358, 640034566, 859191095, 387396147, 101123606, 354887462, 572720660, 590689574, 587600917, 892675618, 101127205, 875898407, 370619959, 859190279, 353703474,
- 572720660, 101132071, 640034566, 926299959, 51844918, 842216244, 589501461, 370607906, 656868871, 3224778534, 218959388, 236723214, 2702052621, 185342215, 473630214, 489497654, 167905354,
- 789125643, 319622419, 218960656, 411566355, 404232216, 270014488, 555161377, 320543527, 436608055, 101256203, 269486128, 279980300, 940576824, 254804240, 806225672, 17237774, 404232288, 404232216,
- 101503000, 203032071, 1478700641, 134814219, 4114156290, 219353869, 319651968, 299830547, 218959388, 236723214, 2215513357, 388047127, 321330022, 135018551, 186254598, 33754976, 1661020683,
- 571478032, 252577560, 235345928, 327694, 46202656, 12517667, 1572877, 3342373, 318767165, 353776183, 589501461, 875898402, 926160694, 336926259, 639771398, 842216199, 590677783, 875898402,
- 372311350, 102110999, 656803335, 119739687, 101979443, 639771427, 127465269, 177672202, 33754383, 556728988, 2829594401, 2736002665, 387387800, 270297857, 252184653, 906502158, 331356073,
- 319651853, 151892481, 252714759, 1628310026, 134744072, 1328492321, 391750406, 353833233, 243342354, 134809632, 539908623, 320015648, 327693, 29425437, 12517859, 1572877, 5046331, 318767193,
- 858986004, 875902258, 101131046, 352720646, 842208788, 657732918, 370553107, 657864247, 925312551, 656877110, 36648503, 386271014, 589506055, 873924386, 839333173, 117834551, 387319303, 926365206,
- 857084949, 891691575, 842217012, 101979414, 2534018976, 2550598160, 34737418, 790700335, 537413634, 151523086, 604111692, 34277127, 235800632, 134745614, 404119310, 2920881202, 3037005344,
- 139267606, 537792264, 219362824, 235801192, 235801098, 252352769, 151461648, 1124991245, 790693896, 134750511, 135238910, 236980233, 1074005377, 17177099, 134745696, 235800584, 185115656,
- 1845560313, 50397838, 243341328, 134809632, 225335823, 168738835, 168693258, 134221322, 3154051072, 3238068226, 402656256, 754983680, 1224751360, 2063622656, 823328768, 353777207, 589501461,
- 389297442, 336926257, 639771398, 121058357, 389493809, 572728098, 655832358, 842216246, 336925974, 640098871, 842217015, 101127703, 372388615, 101979413, 639771427, 909391157, 101134595, 892675623,
- 891691555, 858994228, 909587509, 353769239, 875640596, 389429047, 857019670, 336926258, 354624262, 654706452, 1866933799, 1863322375, 637764881, 36051482, 42997026, 319651843, 101026238,
- 2686851648, 320016933, 304424210, 1158812435, 321264192, 319651853, 205549094, 173542926, 1477053966, 1074531854, 1074282504, 1477316108, 168693258, 202247768, 3019966528, 118096140, 252776462,
- 436799808, 152708646, 320647689, 168629103, 438698345, 545588512, 538976288, 538976288, 220207654, 537727763, 4278068762, 101059128, 168697872, 270536202, 940180998, 185273095, 171443979,
- 537921030, 235538958, 117837856, 473099, 4278190086, 16777920, 721095, 4259890, 6160463, 318767212, 924194580, 657732918, 319162150, 336933681, 909259542, 370619701, 909522710, 589702951,
- 117908003, 370611718, 355940150, 842208788, 822293814, 387388422, 909586966, 640100148, 101123362, 840308500, 875968311, 19015207, 926029361, 657733175, 117908006, 369431558, 875968306, 572925735,
- 387188231, 404232400, 404232216, 319825944, 487787789, 185342215, 473564934, 473308726, 184944442, 486939148, 319622419, 1342638065, 117904391, 336023559, 122734849, 118753031, 117901136,
- 120192532, 122685204, 118753031, 3607168848, 117904391, 336023559, 17237767, 219028624, 471600653, 235736334, 226538750, 3742176019, 117836847, 1628182791, 207695406, 101123865, 232730380,
- 17634067, 118753241, 117901136, 122685204, 336023559, 1342637831, 117904391, 117901310, 118753104, 122685191, 117901076, 1342641159, 336004871, 196615, 46202637, 13369632, 1900561, 16777296,
- 102900529, 369493767, 926291479, 288560439, 387196710, 892745494, 119940916, 589505798, 856954146, 353699349, 353699362, 858986004, 858985493, 656881202, 892678707, 891495220, 892679735, 572728116,
- 889656597, 875898676, 607258881, 139268671, 537792264, 566244872, 673720463, 673720360, 270532904, 269488144, 219353869, 138088464, 739705354, 892342288, 269488139, 69648, 243343140, 134809632,
- 28203535, 779097132, 387389207, 387395118, 270669591, 319382544, 2416775968, 274731789, 274466828, 286986256, 273943556, 1829058576, 276039955, 768, 180479, 419480833, 1291855104, 385941504,
- 336663830, 639771398, 120000821, 587600913, 288695842, 909588276, 640098837, 842217015, 101127703, 587600899, 892675618, 654706183, 926361126, 858994230, 387388978, 101123606, 354887462, 572720660,
- 590689574, 283119617, 319622419, 219398336, 3759149837, 185341712, 387386379, 202050316, 168431135, 319101710, 84281608, 405408550, 187308052, 151389478, 453317384, 235538958, 2159804688,
- 3237876489, 219353869, 1852714241, 319673342, 1073810707, 159385875, 336860373, 336860180, 183041556, 2936671758, 84281650, 1191711493, 353966357, 68421703, 839452165, 235801263, 67131402,
- 3204382720, 3221323778, 1040190208, 2046840320, 571670528, 909583911, 370618931, 352781831, 117900807, 640091654, 909588262, 859191095, 35591730, 101127702, 640100102, 386344743, 370611990,
- 637929222, 925237807, 119670327, 387388977, 117900807, 640098822, 87504692, 874915633, 842413879, 118756887, 909259527, 589706293, 891691555, 858994228, 353769010, 587597332, 336992035, 3491890695,
- 218959388, 236723214, 1879969037, 50928136, 218896388, 302122252, 589236276, 252524577, 101255958, 453777670, 336135952, 386074674, 218959107, 1192624919, 17893655, 67313154, 117706280, 169478717,
- 20711689, 151605364, 169478736, 320473353, 674773032, 320015744, 1227653133, 742992683, 151591443, 1610684938, 404232216, 404232216, 201523560, 185403418, 202900484, 51852808, 622798094, 202966538,
- 235276556, 1092030472, 1544292662, 50534157, 1314393357, 20980249, 755172744, 1040648484, 436865289, 1345927946, 1342839306, 436865289, 674765066, 219363368, 1227559693, 726215724, 169478681,
- 262153, 46071552, 12583296, 4063243, 6946894, 656544512, 859191078, 118888242, 118818566, 101123846, 640034566, 926299959, 842217015, 369237782, 101058326, 656811815, 370607911, 102110999,
- 791021063, 926361090, 822551046, 118953750, 101123846, 874915618, 824522551, 118756887, 656541191, 926364710, 891691555, 858994228, 926164519, 483406390, 235736334, 219028508, 141561357, 67307802,
- 202181656, 873595397, 555949832, 370085176, 101058827, 270208025, 840173831, 51839752, 386731277, 390534659, 33624329, 671351582, 1023869966, 151656970, 3791731721, 1342769488, 151656970,
- 227744265, 2467107603, 168364314, 408944922, 404232216, 1746409496, 436994817, 67833096, 135010308, 235083574, 170204965, 202119430, 135136777, 910235408, 224136201, 218301207, 424564749,
- 2281783330, 606929669, 155059977, 169478665, 173077819, 156240410, 169478665, 218960665, 436869395, 134220042, 3204382720, 3221323778, 1040190208, 1778404864, 2248177664, 2717946880, 571670528,
- 909583911, 370618931, 352781831, 117900807, 640091654, 909588262, 859191095, 35591730, 101127702, 640100102, 386344743, 370611990, 637929222, 925237807, 119670327, 387388977, 117900807, 640098822,
- 624375604, 336992049, 570820359, 926164519, 639771447, 859190325, 874915635, 657602103, 353703474, 572720660, 875902246, 336926518, 639771398, 909391157, 118895155, 353703474, 572720660, 875902246,
- 336926518, 639771398, 909391157, 3491115571, 218959388, 236723214, 1879969037, 50928136, 218896388, 302122252, 589236276, 252524577, 101255958, 453777670, 336135952, 386074674, 218959107,
- 1192624919, 17893655, 67313154, 117706280, 169478717, 20711689, 151605474, 169478736, 2467957001, 219353869, 151591571, 177543690, 168431118, 237112846, 235801098, 403573258, 168693258, 571346442,
- 235538958, 235538958, 404250625, 404232216, 23599128, 135924739, 67373837, 906497048, 621675287, 101328159, 151784473, 268963334, 154550551, 386751500, 218956547, 572083800, 92799296, 153365763,
- 151600647, 990517770, 436883701, 151605258, 420092426, 319622419, 169478681, 168726537, 235801136, 235548682, 235540632, 168823310, 246550030, 235540490, 168823310, 170948622, 805965326, 921098,
- 4280352772, 19071678, 721088, 5111870, 16777316, 925247266, 389165878, 117835542, 117835541, 654706183, 926361126, 909588278, 521548339, 118887938, 656868870, 120006438, 387388951, 101123606,
- 637677350, 570832695, 387330311, 117835543, 656541191, 926364710, 118894887, 117900807, 656868870, 926361126, 387397174, 2952869431, 218959388, 236723214, 1879969037, 50928136, 218896388,
- 302122252, 589236276, 252524577, 101255958, 453777670, 319358736, 386074673, 218959107, 1192624919, 17893655, 67313154, 117706280, 169478717, 624691465, 19662862, 419905538, 118241036, 419905543,
- 136328716, 404250625, 404232216, 23599128, 135924739, 67373837, 906497048, 621675287, 101328159, 151784473, 268963334, 154550551, 386751500, 218956547, 572083800, 92799296, 153365763, 151600647,
- 990517770, 1275988092, 191824900, 102762247, 208603930, 924780295, 196622, 46202624, 12583296, 3735591, 16777289, 353769010, 101062421, 387322901, 656548614, 589432615, 875902242, 120928055,
- 892675590, 892811060, 20330036, 101123604, 640034594, 926299189, 370618934, 640755478, 654772002, 386271014, 926357015, 301990198, 592253213, 52240938, 1845625354, 235012718, 128727558, 297273357,
- 663814430, 558768417, 556214049, 555830817, 235162919, 186465540, 671878155, 206048011, 740409345, 405558289, 1177103693, 520161560, 136973856, 826747653, 1107822850, 1416168713, 4263586833,
- 339879824, 1108611859, 339879719, 1108611859, 1006961924, 185338908, 202123275, 67111752, 3237937152, 3221323778, 956311296, 1325417728, 838926336, 353703446, 352716311, 102176276, 656876067,
- 572727815, 926168373, 101135671, 875902246, 875902775, 570504758, 874915622, 859190839, 370611762, 101058324, 352723495, 842208788, 640955702, 353706535, 892482324, 78901, 1292967186, 488778275,
- 33688067, 33713774, 2889483790, 3087535367, 16850449, 320094759, 658641939, 320094759, 658641939, 168693258, 168693258, 17829904, 288104896, 1293429844, 407251245, 538902793, 84421134, 36783915,
- 155322377, 290744581, 16654636, 1310794023, 656875809, 558768417, 241182497, 235801098, 2416839178, 269504528, 50335824, 3237937152, 3221323778, 956311296, 21248, 370553345, 102176021, 370414854,
- 572720663, 570894119, 892674595, 892811060, 891684359, 926364725, 909521973, 656810497, 909587494, 372388662, 118756887, 909575686, 119678503, 119940871, 118953734, 924194566, 840308535, 656881207,
- 487718913, 706956561, 167976226, 1852703234, 101581314, 218606650, 504477704, 1109852417, 336794388, 1109862210, 336794388, 202118210, 621022724, 202050341, 203695116, 621480716, 68027429,
- 19139596, 288104896, 1293429844, 407251245, 538902793, 84421134, 36783915, 155322377, 290744581, 16654636, 1310794023, 656875809, 558768417, 196421409, 604308747, 185338916, 186983691, 604769291,
- 184878372, 50341131, 3237937152, 3221323778, 905981184, 19712, 101127443, 370414869, 118830903, 336925958, 926364211, 842208791, 657719869, 907490599, 926168375, 640955687, 102900518, 372376838,
- 891491605, 352794164, 353699362, 858986004, 892679730, 891495988, 572728884, 146325510, 984352525, 33689094, 33713774, 1077544462, 1711676675, 286399761, 1342247198, 322966285, 320015683,
- 319660045, 556731667, 1644244769, 151349588, 34146370, 86722353, 17705480, 234954527, 84416530, 554845995, 286464273, 739333178, 2737578273, 808455443, 807408397, 226495763, 2148340499, 556798733,
- 167784239, 3774808064, 2684485121, 419433216, 889202432, 1291862272, 1694521600, 2281730304, 571670528, 370414869, 892678707, 570893876, 370414854, 909259571, 589706293, 352723463, 858986004,
- 875902514, 336012070, 842216214, 640955702, 102900515, 370414903, 892678707, 572728884, 353706547, 842208788, 640955701, 572732439, 336925958, 892744243, 352723495, 842208277, 875902262, 572732423,
- 336925958, 892744243, 370553095, 370414871, 909254963, 909522229, 589706807, 2953191969, 270610192, 235575599, 170920462, 1342836238, 168693258, 235801200, 168716298, 235801136, 235548682,
- 270610416, 2148540719, 270610192, 554708783, 790695983, 271524224, 275787553, 554708769, 872741935, 17634084, 605228288, 251725108, 188284427, 278921487, 271524112, 539959568, 235538958, 235538958,
- 168431176, 168431118, 235560974, 235538958, 554741262, 554700847, 554700847, 554700847, 789618735, 789581857, 556736545, 556732432, 269488144, 269492527, 629940527, 218236726, 34411283, 186988039,
- 83890449, 3237937152, 3221307394, 285214720, 1107308544, 22784, 353776147, 875897621, 372388662, 891491605, 554120756, 336926258, 352716295, 117839636, 587600917, 892675618, 892675622, 875898402,
- 639762742, 926164519, 842217014, 336992022, 923141639, 117909041, 857085702, 386271027, 909588246, 589506087, 224409143, 3440590867, 322966285, 222298611, 1211564307, 319951107, 923995405,
- 320015689, 1109892353, 336794388, 1109862210, 336794388, 134678850, 33752928, 69149705, 1611138823, 151126791, 17047332, 1611469760, 320015712, 224419853, 219389971, 1561330436, 135270716,
- 319636228, 188943635, 320879192, 4262661389, 555820960, 656482638, 1310794023, 3777437985, 105383174, 154535944, 1208288774, 906496006, 327689, 46202624, 12583232, 1114120, 4325424, 318767185,
- 353703474, 909391139, 353776179, 875897621, 841025334, 118756630, 336922118, 352781847, 572720660, 641021222, 573912358, 909391142, 117838853, 640098822, 909391142, 389166647, 824645142, 654772006,
- 386271014, 926357015, 319643702, 231543616, 4078125075, 319635457, 55064321, 219353617, 1228346125, 34804493, 555820845, 656482638, 1310794023, 1294410017, 490539787, 202115851, 1208683304,
- 331350284, 224419853, 1611469587, 2685603168, 50597139, 289168656, 1124337680, 219353869, 978848579, 218960672, 1109905427, 336794388, 1109862210, 336794388, 202114114, 202120252, 203950859,
- 739340, 4278190086, 20972224, 524480, 3145745, 5111874, 318767192, 353703474, 909391139, 353776179, 875897621, 841025334, 118756630, 336922118, 352781847, 572720660, 641021222, 573912358,
- 909391142, 656810497, 909587494, 372388662, 118756887, 572982790, 370414854, 892744243, 572991028, 856954133, 875902258, 1074990432, 319671571, 32707392, 18025792, 285427767, 218960658, 222902035,
- 2634093331, 320094759, 658641939, 320094759, 658641939, 168693258, 168693258, 17829904, 1611469760, 320015712, 224419853, 219389971, 1561330436, 135270716, 319636228, 188943635, 320879192,
- 4262661389, 555820960, 656482638, 1310794023, 1613177121, 235538958, 235538958, 273682576, 1069072, 4278190085, 20972224, 524480, 3145745, 4980802, 372380416, 891491605, 842217012, 588584214,
- 120992821, 353776161, 101058324, 102175765, 101979399, 891691555, 891692597, 891691573, 335885876, 570820358, 891692583, 909588020, 370546482, 589509639, 856954146, 224408115, 3440590867,
- 322966285, 222298611, 1211564307, 319951107, 923995405, 320015689, 556215554, 555830817, 555820839, 656482638, 276828224, 17858576, 1611469760, 320015712, 224419853, 219389971, 1561330436,
- 135270716, 319636228, 188943635, 320879192, 3490909453, 320094759, 658641939, 320094759, 658641939, 1052688, 4278190085, 20972224, 524480, 3145745, 5898306, 372380416, 891491605, 842217012,
- 588584214, 120992821, 353776161, 101058324, 102175765, 101979399, 891691555, 891692597, 891691573, 570504756, 874915622, 859190839, 370611762, 101058324, 572732455, 572724501, 858985493, 842208277,
- 842216757, 589509685, 1074990432, 319671571, 32707392, 18025792, 285427767, 218960658, 222902035, 2634093331, 320094759, 658641939, 320094759, 390206483, 271585296, 269496336, 806359088, 219398145,
- 319643744, 1616907539, 329257741, 268633101, 269565021, 222495752, 1124930323, 540694539, 319622419, 556245246, 555830817, 555820839, 656482638, 806359248, 271585296, 269496336, 1280, 1073922303,
- 134266881, 805310720, 1526743552, 840105984, 588584214, 859190325, 353703474, 909391139, 372384007, 101127189, 387192070, 336922374, 639771398, 640038197, 639776053, 20329525, 640099874, 909522740,
- 387330611, 101127190, 909195014, 117909031, 101131815, 101127959, 926357015, 909579799, 224405287, 3440590867, 322966285, 222298611, 1211564307, 319951107, 923995405, 320015689, 1109892353,
- 336794388, 1109862210, 336794388, 202118210, 623184651, 202115851, 202122276, 623184651, 202115851, 331350308, 224419853, 1611469587, 2685603168, 50597139, 289168656, 1124337680, 219353869,
- 978848579, 218960672, 664862227, 558768417, 556214049, 555830817, 185316647, 606342156, 185273356, 185279781, 606342156, 185273356, 262181, 46202624, 12583296, 2687001, 4784185, 389087488,
- 117904918, 654710295, 637929255, 640104247, 906116918, 856102706, 353703474, 589497876, 892675618, 856110644, 353703474, 589497876, 892675618, 872756788, 842216246, 336925974, 572728070,
- 1644246310, 84215604, 201394470, 103755526, 638124556, 872875270, 51249944, 319651914, 226495763, 2161316627, 219353869, 320015744, 219393281, 320015744, 319651853, 17336833, 874841357, 402917639,
- 118031129, 218441012, 103811073, 219412998, 320015808, 319668237, 2148340544, 219353869, 1611861376, 219353869, 320015680, 327693, 48299776, 10486144, 1441808, 2228252, 318767155, 353703474,
- 336922419, 639771398, 909381941, 587663109, 924268343, 117912375, 117912359, 923088675, 859190325, 286594610, 572720660, 540357926, 1431638797, 319622419, 1518469395, 106580486, 1241930272,
- 1256850779, 1514800730, 324347393, 320015629, 18025741, 537727904, 319665834, 2147552531, 3040875277, 3221992715, 196414389, 3037443520, 221686453, 4262269715, 320015744, 100704269, 3237937152,
- 3221323778, 486543104, 956312320, 1543526400, 570490880, 336663814, 841036566, 873542966, 839328550, 336925974, 639771398, 909391157, 101979415, 891691555, 859190325, 839063090, 336925974,
- 639771398, 909391157, 352723461, 858986004, 840246037, 336925974, 842216214, 875902262, 590689078, 120927029, 20259605, 320015712, 218104077, 2148340499, 168693258, 571346442, 235538958, 235538958,
- 235801112, 235801098, 319638270, 1210584339, 219363368, 940772640, 1479026728, 331350352, 222363149, 17634067, 3356691904, 171969038, 1074400782, 1085804042, 168693258, 235801152, 168709633,
- 235801152, 235552778, 218960696, 945831955, 319635496, 675286291, 1077960760, 4210752, 4280287235, 25166528, 3342496, 5570629, 573641472, 100861702, 857084949, 909391155, 891695923, 587609908,
- 892675618, 842217012, 907351318, 389165878, 589702695, 101979427, 891691555, 370414389, 926029335, 875902518, 572925734, 923141639, 117904945, 640100102, 387397175, 3576837687, 1980178708,
- 3373735939, 16846099, 218301447, 218960659, 759896083, 120262929, 323687457, 1074990349, 1310794023, 656875809, 558768417, 215164705, 185288716, 185338920, 71113995, 396361998, 162856468,
- 1075844873, 151458573, 318838809, 319635469, 573246739, 343409449, 319635479, 4265610515, 339879856, 1108611859, 339879719, 1108611859, 1208683268, 187173900, 470551563, 67110204, 3237945344,
- 2684452866, 1157640960, 1526747392, 823328768, 50791970, 370414854, 875901747, 640889654, 104281141, 891691555, 859190325, 353703474, 842217014, 640034583, 336929571, 639771398, 571946293,
- 335939334, 857085463, 909588018, 640034612, 891691527, 842217012, 101979414, 353710631, 891429652, 349516853, 58066721, 331945760, 117506317, 319619844, 319622419, 288181016, 554117905, 219368212,
- 667947789, 320017474, 656884244, 320017474, 170344980, 168431118, 269094414, 2684424208, 3036550167, 538380553, 118689088, 18356489, 222301459, 722277139, 2013473058, 222304020, 1074598675,
- 555820992, 656482638, 1310794023, 4029096225, 235538958, 235538958, 273682624, 1069072, 4280287235, 25166528, 3342496, 6225989, 573641472, 100861702, 857084949, 909391155, 891695923, 587609908,
- 892675618, 842217012, 907351318, 389165878, 589702695, 101979427, 891691555, 102897461, 387188231, 842208790, 875968310, 119940647, 101127703, 120006434, 925247238, 925247287, 924260150, 370618934,
- 555013383, 537097735, 219400471, 67567873, 320015619, 403901709, 286338379, 337708843, 218960715, 1109905427, 336794388, 1109862210, 336794388, 203690050, 68027404, 185279781, 606342156, 185273356,
- 235152677, 17566724, 4262729632, 386468276, 319635488, 404293895, 1074598657, 219353869, 53027371, 1075254392, 219353869, 556253248, 555830817, 555820839, 656482638, 185279888, 606340357,
- 185273356, 185279781, 606342156, 185271557, 536871936, 2147664127, 687906817, 1073755904, 22272, 336933121, 909259542, 842216757, 102176534, 102044934, 588584198, 589706293, 353699362, 891691555,
- 907228980, 873935670, 102900518, 370414869, 892744243, 352723511, 875901717, 909379366, 353776179, 353776149, 587600917, 891691555, 859190325, 219357185, 340464397, 706610977, 538054203, 319622419,
- 52434889, 337708918, 218960779, 218960659, 319664147, 794628928, 221192481, 2685211411, 219353869, 222339073, 1074598675, 72684567, 135867456, 1082135069, 219353869, 152510528, 340525321,
- 319668247, 222301459, 806163219, 808455443, 555750157, 807481135, 226495763, 2148340499, 33559309, 0, 1577156610, 721427712, 353566720, 909248059, 103163687, 640095509, 655693062, 353699366,
- 50734631, 336922146, 841036566, 640955702, 1082146851, 1077952576, 168956740, 1662453378, 107157254, 386294551, 320015648, 222298637, 17634067, 270723915, 201788098, 118133899, 177507084,
- 2492140551, 3925739274, 319622419, 319622419, 768, 2147614720, 855670785, 1795176192, 571670528, 370414854, 588591923, 336922146, 355676950, 352723491, 858986004, 102900501, 857084949, 572724531,
- 370414854, 87884347, 554775331, 640947985, 85787179, 909259571, 589706293, 842216739, 640955702, 859120419, 875902514, 891495206, 892744243, 589506100, 909259573, 235801112, 168298506, 134876686,
- 235801096, 168298506, 134876686, 235801096, 404234250, 1889534264, 404752910, 235544600, 134744590, 168693258, 235538440, 134744590, 168693258, 235538440, 168722433, 237506058, 537790986,
- 235538958, 168431136, 168699918, 1477971466, 408440912, 2147582206, 403573272, 1481658456, 168431128, 168699918, 236981770, 537790986, 235538958, 50335272, 3237937152, 3221291010, 570427648, 16896,
- 908470035, 372388659, 370476807, 52303638, 587600917, 891691553, 922893876, 926298417, 875968279, 119678503, 572925703, 387188231, 335939351, 926029335, 840308535, 657733175, 151400384, 151700490,
- 100871942, 977081604, 4264048679, 657991872, 102055226, 120545799, 118753031, 336015151, 788989703, 117901103, 791611156, 117904391, 1197474055, 135336200, 67248199, 1110248962, 942161501,
- 1564354616, 51260738, 120573957, 117901076, 117911343, 788993031, 118753071, 791611143, 336004871, 393223, 46202624, 12976512, 3801134, 5505094, 7733350, 857145600, 353703474, 572728870, 892733190,
- 572728884, 370414854, 104280627, 573645575, 857019654, 639770929, 909381941, 909587251, 353706503, 842216212, 590624053, 353706503, 842216212, 590624053, 353710647, 336933427, 891429667, 335885365,
- 570820358, 891692583, 909588020, 370546482, 654782759, 386271014, 926357015, 572925750, 1988645377, 1259871252, 372514093, 606352399, 388248628, 17114388, 4265616922, 471602416, 310933012,
- 537923808, 270536720, 269492240, 269488320, 17834000, 555820880, 656482638, 1310794023, 1663508769, 185277757, 187173900, 202131467, 3137408516, 2064915547, 252848418, 874781462, 874783796,
- 641215243, 337403930, 471089153, 281414491, 1074794560, 1074823184, 272633872, 269488320, 270536720, 339879920, 1108611859, 339879719, 1108611859, 203176964, 671812364, 189271052, 117441803,
- 3237937152, 3321987074, 973090304, 1409304064, 1912628736, 31744, 842209025, 638915862, 102900518, 875902471, 102900518, 857084949, 117847858, 102904099, 825431317, 891691553, 859190289, 120993587,
- 336925986, 892482355, 119747637, 336925986, 892482355, 925054005, 857019698, 588518706, 892674595, 639767348, 926164519, 842217014, 336992022, 654706183, 336922146, 909259542, 656815157, 336925986,
- 892678707, 2287075636, 404493430, 874327371, 607391510, 607400996, 86316055, 1076238849, 471134462, 2289439772, 269541394, 537923616, 270536720, 269533200, 270536720, 339879872, 1108611859,
- 339879719, 1108611859, 235801127, 235801098, 269488138, 475773697, 690125588, 454430482, 607400996, 722154532, 1612326456, 1073812508, 190520340, 272634054, 2148548624, 269500432, 281022528,
- 269488144, 2164133920, 1310794023, 656875809, 558768417, 241182497, 235801098, 2416839178, 269504528, 100667472, 3237937152, 3321987074, 973090304, 1409304064, 2147509760, 385941504, 353776179,
- 589702677, 906429986, 589706293, 336922146, 926036758, 824379142, 353699362, 572600627, 873542950, 926102326, 354551606, 858985493, 875902258, 354551587, 858985493, 875902258, 355612451, 355611413,
- 572728084, 322188597, 640099874, 909522740, 387330611, 101127190, 909584134, 119678503, 119940871, 118953734, 924194566, 840308535, 19346999, 343312466, 759896092, 253113373, 874783796, 337060916,
- 436274469, 4043194406, 337386516, 3759310966, 270536720, 269492240, 3222278176, 269488144, 666898464, 320017474, 656884244, 320017474, 605045268, 235146252, 186983684, 604769291, 185338916,
- 69543179, 202114062, 475773697, 690125588, 454430482, 607400996, 722154532, 1612326456, 1073812508, 190520340, 272634054, 2148548624, 269500432, 281022528, 269488144, 2164133920, 1310794023,
- 656875809, 558768417, 630204193, 84216587, 202122276, 623184651, 202115851, 84223012, 100666123, 3237937152, 3221307394, 838870528, 1241529856, 1644189184, 570490880, 118822150, 352723491,
- 857084949, 909391155, 353776179, 909259541, 640955701, 858202915, 875902258, 118753059, 891692806, 389429044, 842204438, 588518677, 892674595, 859047220, 353710643, 572728084, 842204469, 588518677,
- 892674595, 842211636, 588518677, 892674595, 220201268, 442915347, 2954503718, 471077916, 640031408, 1331258906, 406851600, 404232216, 4279769112, 269492224, 2147553312, 269492240, 2432569376,
- 537923616, 546308368, 270536720, 219398145, 438714687, 1881545440, 337386516, 3759810160, 272639514, 485494848, 235736334, 219028508, 269225485, 1074794560, 269488144, 806359104, 269500432,
- 1074794560, 272633872, 1792, 2147664127, 620807937, 1023422720, 1459636480, 1996513280, 117506048, 352723491, 857084945, 891498785, 825439796, 926299187, 909521973, 370553395, 640955669, 640099107,
- 858993671, 336926002, 891429667, 858993685, 336926002, 891429667, 640098871, 842217015, 101127703, 572732455, 856954133, 875901491, 840377123, 588584214, 120992821, 352723477, 857084949, 892744243,
- 589706293, 589706293, 771819042, 471103112, 268506140, 1075455552, 857607698, 506666783, 2289439772, 537980946, 270536720, 269492240, 871370784, 421141017, 437859123, 270735642, 270536720,
- 230690832, 1125335059, 219353869, 320015776, 555822861, 1538982191, 3237876764, 442506260, 136122918, 506666777, 2149528350, 207297556, 1074794711, 272633872, 269500432, 741092488, 741092396,
- 269514796, 269488160, 806163280, 538119472, 2148340528, 219353869, 806555008, 3092257, 4278190084, 25166272, 1114304, 2752542, 822083629, 859190289, 353776161, 102900497, 572724501, 909185830,
- 119940916, 370607623, 909588274, 119940916, 370607623, 117782322, 18490933, 2149980672, 446698253, 84257574, 207620875, 68027404, 184878528, 202153995, 17042948, 2147581973, 438707738, 219406590,
- 2399217280, 201592324, 185294860, 71304453, 202114062, 84609952, 2155902213, 268436480, 4026645759, 385925121, 956313856, 16640, 370546433, 34477077, 774309383, 909391107, 859191095, 355534642,
- 842208788, 875902262, 119681315, 589497863, 640100130, 388113187, 859059490, 924063026, 891429652, 20067124, 370195725, 1095970579, 1396775450, 269882159, 117900989, 673724519, 50662200, 805831976,
- 52954376, 940179717, 1343229968, 269488144, 122731777, 1663374366, 220159080, 1750867725, 504636771, 2583908359, 943204470, 67794472, 906364470, 269520900, 269488144, 67112976, 3170832384,
- 3221352449, 889198336, 1241530880, 385941504, 336926230, 101122574, 889400871, 926365236, 53621558, 352716593, 370611988, 892678707, 892744243, 589509685, 589506087, 587600917, 354559778,
- 857084949, 37566002, 588519203, 859059490, 3171746098, 789779984, 437928275, 321868609, 113053718, 258344711, 40045314, 556797187, 121638959, 640422921, 268961818, 319622419, 269506568, 3170963472,
- 337512272, 1550344997, 520949023, 627271772, 1342643732, 518192643, 84673540, 856490282, 270541103, 440406542, 806387750, 219353869, 271589408, 33558544, 3170832384, 3221352449, 738203392,
- 385941504, 336926230, 101122574, 889400871, 926365236, 120730422, 387388465, 909588246, 589706293, 654772002, 102900518, 280825089, 1395594006, 1092229697, 370356051, 117882128, 1393719047,
- 307432203, 303700260, 437389063, 3170968601, 337512272, 1550344997, 520949023, 627271772, 1342643732, 303750403, 1376521298, 605624850, 302450450, 262180, 31522560, 10486208, 2490383, 4587580,
- 336662784, 841036566, 873542966, 572597030, 909186822, 875894551, 353710643, 654706452, 588518695, 875902242, 858993687, 588518706, 842208547, 589501461, 572724245, 355939637, 891429652, 842216501,
- 1073814054, 438707738, 639287550, 1107757900, 185339920, 269500935, 272634016, 271593488, 269496336, 269488288, 4267704592, 640031424, 440402202, 73082406, 275148299, 51159056, 1718487812,
- 211816464, 269488140, 1343229984, 1080037392, 2685407392, 196624, 31522560, 10486208, 1769487, 318767158, 353776161, 587600913, 891691553, 389428241, 924194580, 657732918, 386271014, 119940885,
- 101123846, 907417366, 370620215, 892744243, 589706293, 20973090, 640031296, 448855578, 410658342, 404232216, 1343756312, 269487145, 134557959, 102304780, 454244124, 388048667, 2684428567,
- 3237878310, 438707738, 639254529, 219028592, 471600653, 235736334, 187317124, 1611596546, 101062924, 926419977, 1713055507, 2171159, 4278190084, 29360608, 983200, 7077984, 318767224, 353776161,
- 587600913, 891691553, 389428241, 352723505, 654706196, 101130790, 102110996, 102900486, 857084949, 118887986, 370611206, 372651826, 370414870, 892744243, 389428788, 909586966, 908470068, 909259574,
- 589706293, 925247010, 640103478, 637929250, 640955686, 891691527, 842217012, 101979414, 587600919, 875898402, 372388662, 440402240, 4263126566, 640031424, 336464570, 336005658, 168232711,
- 168694273, 235539982, 118096146, 118753031, 236198410, 319687178, 336005659, 185009927, 168759554, 252317198, 118161937, 118753031, 236133130, 320015658, 320015629, 168431179, 168431118, 648020238,
- 448855578, 18490918, 1042684480, 302909966, 117901825, 168236039, 168694810, 454233610, 118753034, 17434375, 235540241, 286198286, 117901825, 168236039, 168694555, 437521930, 118753034, 17434375,
- 235539986, 218960802, 218960659, 235544595, 235538958, 131086, 29425408, 12583296, 6553692, 808784640, 640955700, 352723491, 353710100, 570567447, 370414854, 909259571, 389231415, 892674595,
- 336922118, 389231382, 352723491, 858986004, 856954135, 926234418, 355611447, 354624276, 892744243, 589506100, 842216247, 589501461, 909259541, 589706293, 891422499, 355611444, 219340564,
- 1510019597, 555157512, 286267169, 470615835, 571478277, 321402926, 386999297, 19337495, 16846864, 269495043, 942149648, 69740600, 269494300, 942155816, 2671847480, 17829904, 16845717, 202510860,
- 84607233, 555161377, 277876242, 607454815, 387987496, 521605393, 17829889, 269509420, 673724496, 269520952, 673724496, 269500472, 67112976, 3237937152, 3221323778, 1006645248, 2449491968,
- 823328768, 924260146, 118888246, 353769223, 386336532, 654706454, 587597607, 120006434, 925247238, 891692855, 657930036, 389429030, 389429015, 386271010, 926036758, 119940918, 572720660, 909391142,
- 85340723, 842203677, 101979414, 639770915, 859190325, 875902241, 102900518, 353768725, 101123604, 640034594, 892810293, 842217012, 909391127, 353776179, 336926229, 570820358, 891692583, 875902772,
- 102900518, 402983584, 117901881, 171382275, 51787530, 956958471, 168428569, 171448581, 369362951, 940116280, 117900054, 85473546, 319956234, 623186451, 303239954, 218960645, 218960659, 1748500755,
- 219353869, 319668477, 2818641171, 319622419, 84940056, 353371404, 287387416, 555822863, 269817903, 268766213, 219355157, 3221295885, 51787785, 956958471, 168428824, 171513861, 369297159, 923404855,
- 117900054, 85473546, 419760650, 134679096, 154670596, 538976352, 538976288, 319635488, 319622419, 140516627, 218960808, 218960659, 218671123, 353178387, 621617165, 285541649, 220204325, 120529173,
- 791617815, 537736481, 85009677, 220532997, 221580576, 50336531, 0, 2147565570, 335548672, 8192, 572724481, 555029766, 288695842, 557004340, 889394738, 102901043, 857084949, 875902514, 2151678502,
- 2701005581, 438707738, 639287297, 553549952, 219353869, 18027277, 219390016, 18491008, 640031232, 3229656830, 319622419, 319622419, 1024, 1073922303, 268484353, 738208000, 14336, 892744193,
- 656811572, 235348518, 370414850, 352723495, 857084945, 909391137, 875901747, 102966054, 639771398, 590811943, 891691557, 842217012, 101979414, 639246337, 84482322, 420021518, 449193490, 18490918,
- 2148340576, 176495142, 840900402, 2155936265, 319660286, 319622419, 589299987, 589499417, 201655564, 420225827, 438706211, 639238399, 2685603200, 605824538, 2164136996, 219381888, 219353869,
- 16782093, 3238002687, 3338748162, 8448, 101134593, 386269959, 839006998, 875902262, 387396147, 839006998, 52901431, 640100134, 199232769, 151068674, 282070538, 101323533, 336159747, 168710172,
- 35651849, 18079755, 235446458, 185524478, 3054310155, 315163914, 17762827, 2684882464, 196621, 46202624, 12583296, 3473435, 318767165, 119940657, 640955655, 352723491, 103163669, 387319303,
- 926029335, 389428791, 117900807, 102900501, 857084949, 892744225, 891495988, 656877095, 892408102, 389165876, 336065047, 168699911, 120065546, 17237780, 302469128, 17256455, 34318453, 319651864,
- 1073876243, 236065549, 2819293720, 50727443, 139460925, 2049181441, 168693258, 17245306, 118753032, 1208354376, 2148471815, 94375176, 319622419, 319622419, 135110661, 3103657600, 2063927926, 512,
- 1073922303, 704692225, 19456, 370618625, 117904405, 640099846, 557266742, 118887959, 656868870, 926168358, 389166647, 117900822, 640034593, 120993335, 387323669, 101127703, 656540203, 572728871,
- 101979413, 656540203, 909588262, 20330295, 134762728, 118753104, 554172679, 119631614, 336004609, 134762503, 118753104, 554107142, 119706369, 336004609, 34318510, 151650840, 339480591, 100877321,
- 269292298, 168365968, 184686594, 3120632744, 185272136, 17254407, 118753032, 336010782, 100730631, 185272136, 134629383, 503780359, 118753054, 27656455, 2685208448, 302713615, 1980368265,
- 185275149, 135110671, 33558144, 3237937152, 3221307394, 1191191808, 823328768, 372384007, 336925974, 639771398, 640955701, 370614563, 101058326, 891692839, 909588276, 102111026, 370611479,
- 118888215, 570567430, 589702951, 336925986, 570567430, 926361127, 909588278, 1895899512, 236992289, 705563146, 563084830, 117833991, 139462420, 336023560, 3003188999, 402787240, 252250626,
- 152321040, 168166212, 2416971027, 34212111, 2819293720, 513147155, 673265440, 168693258, 506076712, 117904391, 122160641, 1208421131, 336005126, 125829507, 185573389, 92869131, 319649290,
- 2685340427, 243271693, 134218496, 956481791, 453033985, 1493186304, 823328768, 117900822, 656876038, 909583910, 890705718, 842217012, 924128534, 822416950, 117900822, 656876038, 909583910,
- 890705718, 842217012, 924128534, 352785974, 387388951, 721815318, 656876034, 354558758, 721818645, 640098818, 926299959, 131216951, 122685441, 122685202, 336004609, 168699911, 120065546, 124190996,
- 122685441, 122685202, 336004609, 168699911, 120065546, 195622932, 167909378, 1007685385, 54790420, 219351558, 152014864, 35127818, 18065419, 118753104, 1208354376, 134681607, 2049181441, 168693258,
- 17245306, 118753032, 1208354376, 134681607, 2049181441, 168693258, 17245306, 125829438, 185573389, 92869131, 319649290, 2685340427, 243271693, 4278125056, 2181218559, 302041089, 13312, 389420289,
- 387388951, 587597590, 656811811, 388441639, 387323669, 101127703, 656540203, 572728871, 101979413, 656540203, 909588262, 20330295, 2819822477, 35127819, 2450458890, 2819884039, 2819034892,
- 35127819, 269420810, 1141445692, 319424003, 261099533, 402786825, 329779970, 251771393, 218595343, 185274272, 2148538666, 19202825, 2685208448, 302713615, 1980368265, 185275149, 135110671,
- 50335360, 3237937152, 3221307393, 520096000, 10496, 859190289, 353776161, 555163925, 336663859, 639771398, 354628917, 572720660, 890320166, 572732421, 856954133, 219362610, 319619073, 18399486,
- 168695824, 249564682, 17697290, 269488128, 228589840, 537727763, 2432571424, 168693258, 235538440, 1879116302, 269520920, 1052736, 4278190086, 20972224, 590016, 2687007, 4784179, 318767187,
- 353699362, 640955681, 286590755, 842208788, 859125046, 857084949, 288699954, 388178741, 336926002, 892674595, 102905652, 891360533, 119744052, 370413845, 892744243, 336933685, 909259542, 590680373,
- 355604259, 572724245, 540292405, 70413, 249564435, 2685274634, 235538958, 279498776, 229642256, 318767379, 168747021, 245370378, 403573258, 269527248, 331350288, 220209165, 4263010323, 235801232,
- 168298506, 17436174, 276830320, 1074794560, 219406352, 319627296, 2432571488, 168693258, 235538440, 1879116302, 1074823192, 272633872, 1792, 1073921535, 335594241, 1140861184, 1258309632,
- 1946181632, 823328768, 101127702, 370611221, 637929222, 875898407, 87438903, 387331633, 118756630, 640091654, 892745510, 908470068, 102109959, 656803335, 101131047, 640034566, 891687735, 842217012,
- 387192086, 923214631, 824652551, 387192070, 101123606, 891692838, 909522740, 622204439, 118756630, 640091654, 892745510, 908470068, 1058420279, 268765708, 201983248, 352655373, 18351381, 85462479,
- 402986261, 84544525, 168103952, 168200609, 85527564, 85318677, 168561689, 638355718, 287709722, 1359906318, 195251238, 151454731, 251925257, 152241167, 570492681, 319033103, 67569929, 117705483,
- 18024713, 202966462, 673983528, 84220172, 942935051, 185349176, 202048773, 876099636, 84216588, 740822041, 420227116, 215154334, 168166681, 204287244, 419759626, 271450380, 640031253, 552277274,
- 3595809568, 421338393, 67375881, 639895815, 118039590, 185795588, 606479908, 67372809, 488179987, 319363357, 459780, 4278190086, 16777920, 3145924, 3670067, 4128828, 318767177, 386270727,
- 336933654, 120795926, 352723491, 858986004, 858992688, 858992690, 875902514, 656614182, 892744243, 909586997, 640100134, 657924883, 654776115, 118960391, 51853111, 336933427, 891429667, 211874356,
- 336135689, 537201939, 320015685, 4261502989, 224329985, 1158484755, 319620384, 151390484, 974037004, 1949973365, 155139845, 595078434, 278962955, 17866768, 419844285, 223351308, 219398163,
- 219353869, 331354893, 202526733, 122684953, 2402368766, 926233884, 489039389, 269877571, 1052688, 4278190087, 25166528, 1966272, 3538986, 5111874, 8061018, 336658688, 839006998, 875902262,
- 891495206, 572728884, 588584198, 589706293, 386277923, 842216244, 588518677, 389358115, 353710643, 572728084, 355743029, 842216244, 588518677, 926229027, 353710643, 572728084, 355743029, 842216244,
- 588518677, 624239139, 572728884, 336860422, 336922135, 355676950, 842208788, 859125046, 875902514, 909518630, 337387521, 471113824, 236459036, 672008714, 341840924, 537935900, 270536720, 269492240,
- 537923616, 270536720, 269492400, 537923616, 270536720, 674816254, 553728040, 319824430, 269683981, 252915489, 2415984897, 471097598, 350229532, 235554844, 2420640270, 874257428, 270536720,
- 537931792, 270536720, 537923696, 271585296, 537923616, 269512720, 4027584544, 674773032, 386140164, 2687377961, 219353869, 337784480, 134482466, 4244570368, 179455, 536920065, 824508416, 926364182,
- 640103478, 101123874, 654776084, 117835558, 370607619, 926295351, 19343158, 169806680, 336860256, 190780474, 222389003, 1342509330, 319687942, 68222977, 3946974212, 358550283, 336860217, 186583648,
- 67912291, 16716036, 84741651, 303105616, 67125517, 3237937152, 3305177090, 754982144, 1291861248, 638779392, 352716551, 370611988, 892679735, 858986035, 875902514, 572728102, 875897607, 370414871,
- 909259571, 640955701, 102900515, 352723461, 857084949, 892744243, 589706293, 352723507, 857084949, 892744225, 589706293, 3222278129, 264245778, 106499856, 471095321, 425202716, 320887046,
- 319660045, 228592915, 218169107, 1611469587, 219353869, 320015712, 218104077, 17634067, 1611139771, 152310793, 151652448, 471353362, 404493332, 1089606216, 219353869, 320015680, 1074598797,
- 219353869, 320015680, 319635469, 222301459, 327699, 46202624, 12583296, 3014697, 4587578, 285212769, 857084945, 857084979, 859125298, 842208788, 842216758, 640955702, 872561955, 589702951,
- 640955683, 102900003, 389231877, 656540949, 859191078, 118888242, 118760710, 891692806, 389429044, 370606358, 101123860, 874915618, 572733239, 909391142, 640103219, 842413876, 940577820,
- 2151163944, 942155832, 320015648, 323818253, 337392410, 471122174, 1295228929, 236749054, 470682893, 218959388, 408158478, 404232216, 4262991896, 117919985, 118753104, 2787575559, 168693258,
- 117909414, 2415989767, 471122174, 674773032, 674773032, 319622419, 437461056, 806571283, 3827047444, 3490925920, 404232216, 404232216, 219028528, 471600653, 235736334, 122692865, 122685204,
- 118753031, 168431143, 336013070, 83887879, 3237937152, 3221323778, 771762432, 1174419968, 22272, 370413841, 370422579, 892744243, 857084979, 859125298, 875902514, 37561126, 640100148, 875897635,
- 572597030, 859112710, 570758423, 909583911, 370618931, 337970695, 640091655, 909587509, 572855831, 909391142, 842413878, 352460311, 337380884, 673724432, 674791480, 220215336, 319623955, 857346893,
- 3237876764, 2684427284, 2164149555, 218959388, 236723214, 17698061, 404232276, 404232216, 515964440, 169678122, 168038404, 19535133, 348192400, 943204380, 943204392, 218960680, 320880659,
- 323818266, 471602224, 323838180, 404232400, 404232216, 236728344, 470682893, 218959388, 455570446, 220866830, 705496582, 656084521, 1024, 2147672319, 906010625, 1174419968, 20992, 102896915,
- 370414869, 102896947, 857084949, 857084979, 859125298, 842208788, 842216758, 640955702, 640955683, 891691811, 589702695, 589702691, 84288035, 85406517, 925247266, 389165878, 621152022, 654706452,
- 926168358, 538318646, 219353869, 219353869, 673724448, 674791480, 220215336, 638391059, 889259034, 873668616, 3759283464, 1610688026, 3405654827, 218959388, 236723214, 17698061, 404232276,
- 404232216, 543162648, 224398611, 219357203, 942150413, 942155832, 219359288, 438309645, 1996554790, 302912785, 1616943654, 404232400, 404232216, 236728344, 470682893, 218959388, 393230, 48299776,
- 10486144, 3866679, 5439559, 8388714, 842208000, 842209046, 337057558, 842209044, 840242454, 101979414, 101983011, 891691555, 587600931, 590685730, 875898402, 573911862, 875902246, 875901750,
- 857015606, 387186983, 892745494, 119940916, 119678214, 857085702, 657864498, 640755494, 353699335, 892482324, 924194613, 875902262, 353706531, 572732455, 370414869, 892744243, 572732469, 588518677,
- 3764401442, 872946962, 889724947, 639239169, 219353869, 673724448, 674791480, 220215336, 218960659, 638391059, 727071233, 404276734, 404232216, 1879119896, 218959388, 236723214, 4279110925,
- 269159430, 201728784, 2685407243, 337383440, 269491220, 2684424208, 286592530, 16843127, 320870950, 672337165, 673724472, 321402936, 538119437, 224398611, 639246355, 4284506208, 219028480,
- 471600653, 235736334, 404232212, 404232216, 67815704, 274729987, 171191056, 1611399940, 724242448, 339742736, 1075059740, 272633872, 327696, 46071552, 12583296, 4915241, 6226003, 318767211,
- 370553393, 489755925, 353834500, 120002324, 891692806, 926364725, 654706485, 875902246, 875902775, 873936438, 841036598, 336925974, 336922374, 572728070, 590689574, 587600917, 891691555, 891692597,
- 657655607, 572728102, 352723479, 842208788, 640955702, 857084935, 875902514, 102900518, 253300936, 1510088194, 117835867, 142291462, 2282227207, 476518927, 335544596, 235803164, 235540490,
- 269094560, 302910986, 283119696, 261623557, 235801283, 235801098, 168431346, 168431118, 515899662, 23138344, 16995213, 136384802, 52305415, 537396485, 1361577224, 84214565, 84492296, 672164434,
- 471117854, 283120668, 170591512, 671747598, 235801128, 402991882, 825331984, 168718351, 168693258, 169348618, 168431118, 134221326, 3237937152, 3221323778, 452988160, 872425216, 1442857216,
- 1845518848, 336658432, 841036566, 640955702, 102900003, 857084945, 892744225, 555951668, 336791074, 909579799, 640103477, 336004615, 909325078, 589707062, 84288035, 892744243, 589506100, 370542370,
- 589705511, 101130787, 336922119, 842216214, 657732918, 387196710, 892745494, 119940916, 119678726, 857085702, 657864498, 34213414, 235801168, 179371274, 34213390, 235801168, 179371274, 538989326,
- 538976288, 322117664, 671569421, 1611796252, 3456181786, 638782802, 252796954, 174008860, 202203147, 302321969, 319676430, 537399558, 538976288, 1897930784, 387389231, 388902679, 18290455,
- 235801256, 235801098, 235546366, 235538958, 624820494, 303239954, 319956261, 231019027, 204283411, 322577929, 153491981, 35663371, 254807299, 320015633, 839913485, 319956366, 623186451, 303239954,
- 673720347, 673720360, 458792, 48299776, 11141504, 1572875, 3866662, 5439559, 318767201, 654706452, 926168358, 118888246, 858994228, 101062450, 639771399, 640037125, 858994215, 336926258, 824648454,
- 353769238, 589497876, 875898402, 909588023, 926036787, 654706452, 926168358, 118888246, 925247266, 389165878, 84281110, 353776161, 555943444, 875898402, 539022134, 538976288, 649273376, 252862490,
- 1443309851, 3456176909, 253504008, 639262737, 867765523, 219350546, 85069536, 218902801, 548801376, 538976288, 4045414432, 387389231, 388902679, 4262926103, 222298800, 4245492499, 320015808,
- 304439297, 621941523, 320016933, 639288594, 506268681, 773722899, 438700299, 205394701, 219221810, 269292307, 51195920, 319956352, 623186451, 303239954, 673720453, 673720360, 219406376, 219353869,
- 167777037, 3237937152, 3221323778, 469765632, 956312320, 1560298752, 1979738368, 2399175424, 823328768, 118756887, 656876038, 909587494, 842401074, 118756887, 656541191, 20395046, 926164529,
- 389166647, 117904406, 656744966, 909587494, 370612018, 570820372, 640098817, 842217015, 101127703, 842479111, 858994227, 387323698, 353769238, 589497876, 875898402, 640098855, 842217015, 101127703,
- 389165831, 587662854, 875898402, 639829302, 859186982, 353776179, 572982804, 909583911, 370618931, 1210648071, 336004871, 117917703, 889328647, 117904391, 336021511, 4245096199, 1208420344,
- 117904391, 336021511, 122177794, 118753031, 117901128, 635633172, 303239954, 319956261, 244388371, 100729128, 101076998, 16846631, 2953448964, 471862794, 235802126, 235740188, 1178012942,
- 588778509, 269170694, 948306207, 202908422, 521553421, 236732432, 470682893, 218959388, 1220083982, 117904391, 336021511, 117901063, 118753031, 117901128, 1459488532, 1208423431, 336004871,
- 117917703, 118753096, 122160903, 17237780, 538976256, 538976288, 153505824, 604438785, 218825218, 168693258, 404257549, 404232216, 102766616, 270149385, 1344214539, 101263130, 269162015, 404232304,
- 404232216, 524312, 46202624, 12583296, 2031631, 3670059, 5832773, 7405669, 841028352, 336663830, 572596998, 873542950, 336664374, 841036566, 873542966, 572597030, 118757126, 891692806, 389429044,
- 909379350, 389165875, 587662854, 637871650, 859186982, 353776179, 656606740, 353769238, 589497876, 875898402, 909588023, 926036787, 654706452, 926168358, 118888246, 925247266, 389165878,
- 1611007766, 942194689, 1090398264, 137902120, 3221294355, 219353869, 319635710, 404232352, 404232216, 371163160, 403443014, 188220963, 107806992, 218896419, 270472774, 237670667, 2953448964,
- 235146762, 1342572074, 404263430, 404232216, 633346072, 303239954, 319956261, 3221295635, 3237881912, 674773032, 942161921, 230751840, 17634067, 320015680, 219028573, 471600653, 235736334,
- 102700705, 270149385, 153557520, 185999110, 671559440, 235539723, 185403918, 1879115560, 218959388, 236723214, 1812860173, 538976288, 538976288, 2560, 2147664127, 302039041, 721427968, 1275082752,
- 1677744128, 2315286272, 40192, 101979411, 891691555, 859190325, 353776179, 388171284, 925247266, 389165878, 117835542, 102183475, 572720902, 909391142, 640033541, 858994215, 336926258, 353772294,
- 589497876, 875898402, 909588023, 389165875, 656553750, 859191078, 118888242, 118761222, 891692806, 389429044, 639776534, 859190325, 353776179, 587600917, 892675618, 372388609, 587600917, 891691555,
- 859190325, 85268018, 909391155, 353776179, 587600917, 891691555, 238040628, 319687178, 235563021, 472386062, 235802126, 235740188, 1178012942, 588778509, 269170694, 948306207, 202908422, 521553421,
- 235168784, 235581450, 103419396, 101076998, 236728874, 470682893, 218959388, 538995726, 538976288, 175644704, 1745489422, 168694541, 3774680586, 235801176, 319645706, 235538958, 240699393,
- 319687178, 235563021, 1485832462, 168693258, 236129640, 2953710090, 404232216, 404232216, 654902816, 369823770, 656035871, 371131913, 218828811, 168693258, 120064781, 1208418561, 404232216,
- 404232216, 319956256, 623186451, 303239954, 168431211, 1745687310, 168693258, 241237592, 319687178, 235563021, 1482164750, 168693258, 236129640, 920074, 4278190084, 16777920, 1704096, 3145758,
- 285212735, 288560660, 842208788, 891696950, 842348340, 640955702, 102892331, 588591895, 387322903, 909586966, 640955702, 119678503, 825689606, 101123862, 925247271, 924260150, 940380982, 220862504,
- 319627279, 1077939475, 1611861312, 662716480, 558768417, 556214049, 555830817, 202167079, 671812424, 185273356, 17513757, 4262661504, 389556448, 941957650, 219392813, 756224781, 1109897312,
- 336794388, 1109862210, 336794388, 185271362, 671878216, 202115851, 801820, 4278190085, 16777920, 2556064, 7536683, 9109631, 37425920, 336926258, 102048518, 387188231, 102900502, 857084949,
- 352716594, 572720646, 571553062, 909391142, 590689047, 891691539, 842217012, 874915638, 389166647, 875902486, 372388662, 924193813, 370618934, 369493780, 353776179, 572720660, 336992006, 656541191,
- 336922150, 639771398, 119944245, 640098822, 641087284, 352723511, 842208788, 640955702, 857084951, 875902514, 102900518, 1077952544, 219353869, 269485060, 555155713, 16848673, 354815248, 319633448,
- 1077955859, 235801208, 252712458, 336004871, 237506311, 672008714, 118753039, 269420295, 235801110, 252712458, 336004871, 237506311, 672008714, 118753039, 269420295, 320015698, 320015629,
- 168431131, 168431118, 329253134, 1913851149, 772867074, 388038928, 268509463, 940642071, 320864552, 2685603085, 250150496, 672008714, 118753039, 269420295, 235801110, 252712458, 336004871,
- 237506311, 672008714, 118753039, 269420295, 235801110, 252712458, 336004871, 1479020295, 319622419, 319622419, 235801184, 235801098, 1280, 2147664127, 234930177, 2097179392, 2466285824, 822149120,
- 656541191, 926364710, 370618934, 389097236, 909580054, 336992050, 118884103, 909580086, 336992050, 387319559, 637994502, 369567527, 336922135, 637932820, 369567527, 118888215, 656541191, 570820391,
- 926164519, 874915639, 842413879, 387323671, 874915639, 389429047, 924259863, 926164519, 571684407, 874915622, 859190839, 370611762, 101058324, 352723495, 842208788, 640955702, 353706535, 892482324,
- 4177605685, 118753112, 123209479, 3456567060, 772146699, 117904391, 168311303, 121315359, 117901076, 570885678, 151721274, 387653644, 271324697, 556605197, 185273099, 203181853, 169478725,
- 172296457, 84614172, 520815885, 470425094, 202050332, 520429323, 186457354, 1109903883, 336794388, 1109862210, 336794388, 235546434, 235538958, 269486606, 1486291216, 336004871, 117921799,
- 201790471, 120457222, 118753031, 153166138, 117914374, 772215815, 570689029, 201918234, 688718624, 16843057, 202444292, 186713120, 470486027, 155520028, 169478665, 1344014917, 84216604, 506208011,
- 491723787, 185273099, 186526496, 203181852, 655425035, 558768417, 556214049, 555830817, 168714279, 168693258, 277876234, 1343230032, 131088, 29425440, 12583392, 4259893, 338755840, 355676950,
- 572720660, 875902246, 572728870, 353699334, 842208788, 875902262, 372388662, 370414869, 909259542, 872627510, 572728102, 101979910, 891691555, 842217012, 939524374, 286728232, 1025840913,
- 624764454, 471077916, 386994455, 640040229, 640951613, 2419599398, 235538958, 235538958, 942170113, 387387832, 1025921041, 641541413, 471602344, 387033108, 642781463, 1025844541, 1443936294,
- 540554278, 168693258, 921098, 4278190085, 25166560, 852128, 3932187, 8192092, 841028352, 101979414, 639770915, 322319413, 353776161, 555943444, 875898402, 909190966, 924260146, 370618934,
- 386336532, 101127190, 120006434, 640098822, 657930036, 388314150, 389166647, 117904406, 118756887, 656876038, 656541191, 926364710, 926164519, 823603766, 387396150, 389166647, 117904406, 118756887,
- 656876038, 656541191, 926364710, 540288551, 319635458, 3237809427, 219353869, 319635458, 3237809427, 202576653, 923210759, 118753079, 926353159, 336004871, 121059079, 117901076, 17250103,
- 121059081, 117901076, 117913399, 923210759, 118753079, 926353159, 336004871, 118753221, 336017207, 923207431, 117901111, 926353172, 117904391, 121059079, 219389953, 219353869, 2164134669,
- 319622419, 319622419, 923207673, 117901111, 926353172, 117904391, 121059079, 118753031, 336017207, 121059079, 118753031, 336017207, 923207431, 117901111, 926353172, 117904391, 923207431, 117901111,
- 926353172, 117904391, 121059079, 118753031, 336017207, 4278125056, 1090633983, 184601089, 14848, 101127187, 875898407, 370619959, 639771395, 101136183, 640034566, 859191095, 370612018, 637929222,
- 370616103, 354624262, 572720660, 590689574, 587600917, 3761579554, 538976288, 538976288, 168301192, 136060675, 67832347, 992230152, 121316411, 436865795, 52370696, 319948810, 269683981, 319622419,
- 304447489, 621941523, 320016933, 227278354, 187063816, 453445635, 791629322, 119212622, 638255880, 1343031390, 219353869, 319639632, 33557779, 3237940736, 3389092353, 956304128, 335609856,
- 640091655, 909587509, 805770775, 842208791, 909588278, 370546486, 117835527, 587600913, 892675618, 101979427, 891691555, 656877073, 909588006, 370611990, 538968065, 538976288, 57090080, 891163409,
- 436670992, 117771020, 321723410, 538119437, 319622419, 118758188, 436931333, 18223880, 319956352, 623186451, 303239954, 486932878, 84679449, 186255111, 4262865692, 320015870, 224419853, 17634067,
- 489231619, 117971467, 555551493, 1024, 1073922303, 369147905, 721426688, 14848, 370413841, 926032179, 875898406, 590690102, 892675618, 84288035, 337057063, 840308502, 892745271, 640099892,
- 101058338, 118894903, 656868871, 389429030, 641087255, 83886362, 1227366917, 319651895, 19274400, 656441472, 558768417, 556214049, 555830817, 202167079, 671812424, 185273356, 17513757, 444661376,
- 1259864358, 257834028, 2148340519, 2155895334, 339879920, 1108611859, 339879719, 1108611859, 1208683268, 187173900, 470551563, 67111996, 3237937152, 3221307394, 419436032, 1140861696, 286326784,
- 556996116, 640038706, 926299189, 639771445, 572732725, 354878726, 117842455, 370611206, 909259542, 657733175, 823600678, 118888199, 120006406, 925247238, 925247287, 924260150, 638981942, 83886362,
- 1227366917, 319651895, 19274400, 665878656, 320017474, 656884244, 320017474, 605307412, 185338916, 186983691, 604769291, 185338916, 186983691, 2147552267, 639271166, 743118849, 655318588,
- 645926163, 1619034202, 1310794023, 656875809, 558768417, 627779361, 202050341, 203695116, 621480716, 202050341, 203695116, 83888908, 3204382720, 3221323778, 486542592, 1124088576, 20224, 808653075,
- 875901232, 909522742, 825439541, 117838869, 857150742, 855777074, 657523473, 102111011, 656803335, 639770919, 909381941, 372384051, 101978389, 589767459, 353699367, 288436272, 654706452, 926168358,
- 1075189558, 455948096, 572997665, 390539521, 1141066766, 1414146199, 185271559, 4263577626, 471602428, 337642004, 2853444636, 88437035, 404232216, 404232216, 3237904385, 307310922, 169685003,
- 356985098, 289341697, 1073808730, 2117124350, 117971467, 473041669, 341836052, 4262730780, 1075582112, 1242500711, 236716033, 470682893, 218959388, 65550, 46202624, 12583168, 16777290, 335682865,
- 639771398, 640942653, 352723491, 353768981, 101123604, 640098851, 909391142, 909391159, 389165878, 909521973, 370553395, 370545941, 117838869, 656548614, 875898406, 875902774, 102900518, 219357185,
- 388043533, 437657879, 134618915, 589235720, 924849690, 538582561, 924918071, 588912160, 134743583, 438509318, 387391766, 2152202529, 319670304, 549981459, 388047127, 455345933, 85737237, 356457477,
- 218571803, 236992289, 540483862, 220280608, 354100231, 84220991, 454377244, 386729764, 33562913, 3774808064, 2684452866, 671097856, 874840064, 639969062, 117842467, 336922119, 353834774, 556996116,
- 102899989, 857084949, 842216225, 590689590, 33895713, 4262993280, 690562490, 136583242, 320737043, 4267704589, 320015744, 1082130701, 3223065680, 1073856766, 221125525, 556077731, 252578607,
- 1963262742, 321917709, 471010573, 961118228, 4294902784, 3238117631, 1040236545, 1509969408, 26112, 355676435, 352723491, 387322901, 857081351, 926364211, 857085747, 657863219, 892745255,
- 589706293, 842216739, 370546455, 657864247, 555951655, 101123874, 907417366, 389429047, 353776179, 587600917, 891691555, 389428277, 572720660, 909391142, 387330611, 875898402, 372388662,
- 1460016149, 942155889, 88215828, 220727301, 931149577, 136842505, 289539333, 673724436, 202183537, 134747142, 453838338, 737082922, 33951002, 101976072, 2153516045, 219353869, 320015744, 218960685,
- 218960659, 319643667, 319622419, 814743827, 396372024, 88214823, 926353678, 1107627529, 2685871885, 254818344, 100796432, 268964870, 135274785, 33949459, 1880035336, 220204307, 537727763,
- 230691597, 218960659, 321721107, 320015629, 1248525, 4294639362, 17171136, 1900736, 318767137, 389161265, 352782102, 353776179, 36374036, 875898402, 892547894, 909583911, 557265175, 364904736,
- 3608086537, 320015680, 224419853, 1074598675, 151523287, 3674117109, 320126977, 330552848, 320015629, 3004370189, 336793814, 16815059, 3237937152, 3271622658, 9216, 119943425, 35456517, 102900518,
- 857084949, 892679730, 589698341, 336922146, 909259542, 875893045, 252572417, 253214974, 943204369, 20457512, 672206592, 673724472, 163184952, 403136516, 788897096, 791617825, 2454573089, 555822853,
- 18951983, 1067016, 4278190082, 16777920, 1638592, 620757035, 589702708, 352716322, 857085460, 389494322, 909586966, 908535604, 639764278, 926164519, 842217014, 336992022, 17171975, 962541728,
- 943218489, 1059207519, 436895258, 2131298570, 667948307, 320017474, 656884244, 320017474, 972046868, 1597519967, 945764665, 159322901, 169478665, 1849629310, 1310794023, 656875809, 558768417,
- 16787233, 3774808064, 2583756802, 6656, 891695415, 926299189, 387388982, 389428791, 353703446, 101123860, 807871011, 590562352, 202119234, 857948696, 213135428, 2483818512, 872825132, 369494352,
- 403442712, 1342768662, 742458932, 723881, 4279500801, 19727034, 1966272, 389087488, 370611735, 370607879, 656868871, 640091655, 640104247, 37697079, 20067126, 328220733, 1745749511, 269484824,
- 310411537, 419631120, 101060200, 155226131, 2919306260, 318969220, 2456227347, 168561683, 201999428, 1737626380, 51581710, 1213461, 4278190082, 29360576, 1114304, 922746913, 640099874, 909522740,
- 387330611, 101127190, 842204934, 336926230, 572596998, 909391142, 1008918582, 286331153, 1008869948, 286331153, 828133436, 219230289, 286096638, 583029040, 507780638, 505553438, 505299998,
- 1362112546, 286330161, 810627341, 2304, 188671, 251699201, 654318336, 1056977664, 1459636992, 1996515072, 286326784, 556996116, 288699954, 555951668, 873661986, 355611443, 589501461, 858076450,
- 336926002, 891429667, 874853429, 355611443, 589501461, 858076450, 336926002, 891429667, 874853429, 355611443, 589501461, 858076450, 336926002, 891429667, 872887349, 842216246, 336925974, 572728070,
- 857158950, 353703474, 589497876, 892675618, 438711860, 639270913, 2164136486, 271590938, 537923616, 544211216, 270536720, 537960702, 270536720, 270561281, 4262469648, 270536864, 17834000,
- 269492336, 334499872, 319651853, 226495763, 226500627, 2148340499, 18027277, 448855648, 18490918, 640031296, 269539070, 806359072, 269492240, 275779616, 269492240, 270536752, 1880104976, 270536720,
- 537931792, 270536720, 320015648, 319635469, 325061907, 319635469, 222301459, 327699, 48299776, 10486016, 458755, 983051, 16777247, 355669283, 657659171, 35463989, 553858355, 286594610, 555943444,
- 288695842, 3221304884, 2694881440, 2694881504, 639270913, 2164136486, 19277338, 2151710816, 1082163392, 98432, 3237878310, 438707738, 639254529, 2560, 188671, 251699201, 385880832, 520100608,
- 654320384, 788540160, 13056, 372384019, 101978389, 639770915, 909381941, 857023255, 892540215, 857023283, 892540165, 857023283, 892540215, 857023237, 892540215, 857023283, 444596544, 4263126566,
- 640031360, 945313906, 1482201176, 2421719294, 1480611928, 1482217726, 1486379064, 648020312, 448855578, 18490918, 1076238912, 1077952576, 1077952576, 1077952576, 1077952640, 117456960, 3774808064,
- 2684420098, 318770944, 452990720, 587210496, 9984, 370413841, 909254963, 640946485, 102900003, 588591895, 891360549, 588591879, 891360549, 588591879, 891360549, 2147555878, 438707738, 639271166,
- 20987968, 2147549056, 2147565632, 1082130687, 4286579008, 4267704576, 640031424, 440402202, 1075455526, 2151694400, 1077952576, 1077952640, 65600, 18874368, 6291904, 16777235, 119678513, 572925703,
- 387188231, 926029335, 20198913, 169478839, 436890089, 2148075786, 17439242, 1459685632, 1793722633, 436865289, 151617546, 436862977, 536871168, 1610686464, 536895489, 822149120, 336992007,
- 656541191, 570820391, 926164519, 874915639, 389166647, 842413847, 18093591, 157968983, 169478665, 436889961, 1778977034, 168364394, 1768491546, 151656970, 1768499457, 151656970, 157968905,
- 169478665, 436889961, 1778977034, 168364394, 131098, 46202624, 12583168, 3735577, 640951552, 102900518, 370414854, 909259542, 840308535, 657733175, 120993319, 639771445, 859190325, 909391155,
- 353776179, 372388629, 587600917, 101979427, 19276323, 962541728, 943218489, 1059207519, 436895258, 2131298570, 1088951571, 168693258, 168431168, 235552782, 239077902, 4027451914, 943218489,
- 1597585759, 2131957048, 436865289, 1058700810, 168706102, 171970058, 1074400782, 235538958, 235801152, 512, 180479, 419479553, 9984, 640037925, 101065251, 370545685, 926298675, 926029335,
- 656880694, 858076726, 336926258, 572728070, 909391142, 1597546497, 945764665, 574185272, 176036415, 151587354, 4262794111, 235573480, 177211918, 972033550, 1597519967, 945764665, 159322901,
- 169478665, 977214078, 235538958, 235538958, 268435968, 4026650879, 218152961, 13824, 101979393, 891691555, 859190325, 587666994, 336922118, 842208790, 875902518, 640034598, 389428791, 336926230,
- 572720646, 875898406, 372651830, 17176087, 218960672, 218960659, 486641683, 827338530, 573591600, 134351390, 671750665, 1114456367, 792816962, 152701480, 2684420616, 320015840, 319676429,
- 1176004115, 793784617, 691097392, 436803654, 134351371, 1110990881, 1832993133, 559953986, 185205256, 327706, 46202656, 12583264, 1769485, 3604521, 16777285, 286590498, 842208788, 873542966,
- 102893350, 370413845, 892744243, 119944209, 572728884, 336663814, 909259542, 102901557, 370414869, 892744243, 119944245, 572728884, 336925958, 909259542, 222298677, 218960659, 227349267, 218960659,
- 325915411, 320015629, 2685603085, 219353869, 1829966605, 319622419, 319622419, 219398145, 319635710, 3221294355, 325063437, 228654605, 17634067, 2148732256, 219353869, 319619327, 331353363,
- 319660045, 228592915, 319651859, 222301459, 856851, 4278910978, 32833984, 5243072, 16777308, 656877109, 119940902, 656877063, 589702950, 117835554, 654771719, 117835558, 101123591, 352720663,
- 101127956, 387388951, 924194582, 387388983, 857085718, 926299954, 389494327, 926299926, 909588023, 892741415, 909584180, 640098823, 842217015, 101127703, 168226817, 151849476, 403978255, 370017292,
- 252974613, 337120260, 218697528, 101319690, 36440837, 84618242, 168036870, 940509453, 67901460, 353768718, 201592597, 255333400, 84479241, 184878857, 738329132, 388953355, 773265175, 387389230,
- 18415895, 268964113, 302320655, 255396368, 33817347, 269105423, 252445970, 303106064, 203950606, 671878413, 286395914, 202313736, 152048133, 67243834, 974062084, 85069833, 135270156, 168694289,
- 218958888, 2601134092, 673720360, 673720360, 256, 1090699519, 1073790977, 824508416, 639969078, 117842467, 336922117, 355676950, 336925972, 842216214, 37433907, 37566002, 858994228, 35460658,
- 37426708, 858927922, 892744243, 657798709, 37106227, 4278976832, 84740096, 16713227, 537793034, 17830167, 536937219, 320278808, 319635469, 555225367, 33620482, 18288912, 319627265, 3758820801,
- 3741647623, 319688202, 1879179589, 286725905, 319635480, 406850835, 286725905, 2684552464, 131091, 46202624, 12583168, 2293777, 102891776, 387188231, 842208790, 875968310, 119940647, 842217012,
- 387257622, 101127702, 640100102, 1157628213, 572662646, 1162180131, 572662646, 241006115, 1426983434, 101057545, 190842899, 994426881, 993757755, 993740101, 1161509770, 235801208, 104430346,
- 67700755, 218578950, 512, 1073930495, 637575169, 13312, 336933121, 909259542, 842216757, 370349846, 587600917, 640955683, 352723491, 639771413, 322384949, 389232182, 572728884, 336925958,
- 909259542, 318767413, 1259539725, 1980178708, 3373735939, 319622419, 52434889, 337708918, 218960779, 218960659, 1084227859, 219353869, 4262729536, 386468276, 319635488, 541068563, 17369367,
- 3222737996, 219353869, 320015680, 196621, 46202624, 12583168, 3145754, 16777276, 842413845, 118756887, 656541191, 926164519, 387396150, 859190325, 855840306, 926029335, 372388663, 101979413,
- 639770915, 909391157, 352723461, 842208788, 640955702, 172564481, 151587354, 169478784, 168364416, 323553818, 3759344909, 890383718, 442838547, 4263126566, 640031360, 235571713, 235538958,
- 4087349518, 168364362, 159386138, 436895753, 1242106122, 320015859, 321762302, 438709523, 640031264, 639246362, 168431160, 168431118, 131086, 48299776, 10486016, 2555926, 556864256, 387388978,
- 336925974, 572596998, 875902246, 909522743, 856109335, 370612018, 926036787, 858994231, 234977575, 956637974, 4263126530, 36051584, 371393849, 152318768, 2014578958, 151914772, 19936020,
- 3826588576, 442238984, 1545217574, 367265800, 314589211, 470946332, 16826386, 3657373952, 2801922049, 12800, 640034561, 101058310, 370546454, 842413878, 118756887, 656803334, 926295590, 387331638,
- 909391127, 353776179, 587600917, 891691555, 20133428, 1377767810, 354361170, 1377771285, 453582674, 722078217, 741045107, 724311325, 304837491, 319622419, 226495763, 17634067, 354357536,
- 1377771285, 354361170, 151592725, 738794249, 724311325, 741045107, 288103709, 320015667, 319651853, 319622419, 268435968, 4026653183, 721463041, 24064, 101069111, 925247015, 909522742, 890705686,
- 842217012, 336925974, 808526598, 572731696, 909391142, 640103219, 101123622, 926036231, 842216242, 101979414, 823599907, 926291478, 909522742, 118887959, 101058310, 657532710, 587600917, 892675618,
- 892745012, 1765160758, 202184708, 605095180, 728986411, 218960658, 1879905043, 219353869, 1377767714, 1310334802, 33686274, 320015728, 521216525, 438260306, 219677708, 285543436, 1936927524,
- 219353643, 33624845, 217384454, 402916620, 740568845, 288103709, 320015651, 319647757, 319622419, 353705745, 24713503, 319622419, 353705745, 203626783, 402916620, 740568845, 288103709, 320015651,
- 50491405, 101188353, 458757, 48299776, 10486080, 1769487, 3342375, 5177409, 285212765, 857084945, 892744225, 589706257, 386277921, 875898402, 372388662, 923145237, 572720660, 909391142, 118895155,
- 875898402, 372388662, 923145237, 353776179, 589497876, 875898402, 842209078, 101979414, 639771427, 389428277, 353776179, 589497876, 875898402, 18490934, 640031424, 440466970, 319651878, 319622419,
- 219353875, 219353869, 220205837, 218960659, 3763540755, 168693258, 235801312, 235593738, 182454798, 3758755342, 168693258, 235801312, 3237896193, 438707738, 639254529, 219404838, 219353869,
- 226497293, 218960659, 334304019, 320015629, 4161998093, 235538958, 235538958, 168431200, 168431118, 168714254, 168693258, 33558026, 3237937152, 3221340161, 587204608, 873660416, 372388662,
- 36377877, 353699362, 556996116, 892679730, 589506100, 640037941, 101065251, 556765205, 1084239649, 640031248, 440402202, 270149158, 673726759, 805381953, 556740385, 3222939184, 438707738,
- 807803584, 656884008, 16787521, 3237937152, 3221340161, 8960, 909579539, 926029335, 353777207, 117904405, 119940870, 101979399, 891691555, 875893045, 372388662, 926631232, 153308706, 571809040,
- 1077626185, 218960704, 218960659, 278921491, 303763217, 302449938, 135723025, 488839949, 226496528, 1879905043, 220213249, 16782099, 3774808064, 2684420098, 11520, 370553345, 572728855, 336925958,
- 909259542, 640942909, 102900518, 335748358, 909259542, 640955701, 1040654883, 889192706, 235289177, 471602192, 1160716564, 1950828404, 337719109, 269753372, 1496974862, 1395683329, 337380915,
- 790369408, 808456225, 1162179655, 808470388, 472850704, 471105556, 810758918, 256, 1073863423, 318809601, 285278208, 654706452, 639771431, 909391157, 909587251, 1073813015, 2265912083, 640031300,
- 260523034, 2147554067, 135627006, 645402121, 639254554, 134811256, 512, 3221347071, 318809601, 10752, 117908993, 352723491, 857084949, 924194611, 873542966, 103166231, 387319303, 118756630,
- 370607622, 909522710, 19280949, 2265912109, 640031300, 260523034, 140317459, 33949204, 118624775, 335939074, 320016392, 235511041, 1075455608, 242755098, 18155529, 109712768, 319293442, 387386887,
- 135464718, 218563080, 639047462, 1024, 2147670783, 402695681, 1207972096, 23552, 103166209, 387319303, 336926230, 101058310, 924194327, 875902518, 640747302, 369493766, 353768983, 101123604,
- 370546438, 892745271, 822552116, 101123622, 353769238, 101058324, 924194327, 875902518, 119940902, 102900487, 370414869, 370619187, 288699959, 135660084, 33949204, 808462599, 117638953, 805835782,
- 141376058, 33949459, 488445960, 100796440, 537400071, 140257063, 33949204, 118624775, 335939074, 320016392, 2265912192, 640031300, 260523034, 2684424979, 134742534, 1629554451, 560019512,
- 134746887, 1948714754, 594822212, 134676998, 974390804, 339354146, 134681606, 1310328322, 810429741, 134742534, 386795283, 319229463, 117573640, 387393037, 235511846, 1075455608, 242755098,
- 18155529, 151000448, 3774808064, 2684469249, 318770944, 654320384, 989869824, 1644190208, 27136, 370414865, 909259571, 640955701, 102900515, 588591895, 370414855, 909259571, 640955701, 102900515,
- 588591895, 352723475, 857084949, 892744243, 589706293, 891491591, 856954119, 892678707, 355611444, 842216212, 590624053, 588518690, 875897379, 388113187, 590624050, 856954146, 590624050, 471078178,
- 471097364, 341840924, 1077952540, 1611930688, 337386516, 1075582048, 351289408, 1611930652, 337386516, 272646160, 269488160, 269500432, 270536720, 1880113168, 1343229968, 17829904, 471097456,
- 341840924, 1076108316, 471097520, 341840924, 1076108316, 337412097, 471602272, 471097364, 3493871680, 1074794656, 269488144, 269488224, 281022480, 269488144, 1052688, 4278190086, 16777952, 983200,
- 2687001, 4784185, 318767187, 353776179, 587600913, 891691555, 859190289, 336663858, 288694819, 842216244, 336663830, 572728070, 873542950, 842216246, 336663830, 572728070, 873542950, 909383478,
- 372388659, 101978389, 639771427, 859046709, 336663858, 406135331, 235801104, 235540490, 269509134, 168843280, 269094414, 1779305994, 235801104, 235540490, 168735246, 235801104, 235540490,
- 269488192, 245367056, 175177226, 17436174, 269355664, 269508862, 235970561, 175177226, 17436174, 235801232, 175177226, 17436174, 403573392, 168693258, 235565310, 2550204942, 1627262992, 33558544,
- 3942580224, 2684466433, 486543616, 873529344, 842216246, 336992023, 570820359, 891692839, 352723511, 842208788, 640955702, 462754844, 303214611, 305468294, 225448880, 218960659, 1879118611,
- 2954042388, 2249340179, 330306323, 219378971, 219353869, 50336525, 3774808064, 2684421122, 687871744, 13568, 572928257, 387188231, 118756887, 387188231, 926364182, 656815670, 387388421, 926364182,
- 656880694, 572728102, 337057030, 639771398, 859190325, 1493243442, 117904391, 421101575, 117901168, 443549460, 4263121169, 329782055, 327553589, 437495827, 2417759382, 319622419, 319622419,
- 117938433, 2164724743, 1897547802, 117904391, 1159426311, 456989509, 303212563, 305468294, 337384360, 320015680, 320015629, 1024, 3221340415, 402702337, 721428736, 13568, 842211603, 336663830,
- 840246022, 101979414, 572597027, 873542950, 102896438, 857084949, 338113825, 892482355, 572728116, 336929303, 892482355, 23077684, 319627296, 319622419, 4263513363, 943204576, 320015656,
- 3758096653, 269533200, 269488320, 269533200, 219398145, 319668478, 218960704, 19413011, 4265093184, 218960768, 284180499, 272633872, 1052688, 4278190081, 25166272, 1376448, 875630848, 841036598,
- 336663830, 656548614, 587597607, 473245218, 337641748, 134876700, 110795270, 17697288, 471602320, 172555796, 1819018254, 658948, 4278190084, 16777920, 1048768, 3211287, 318767165, 387396147,
- 588584214, 354625333, 909391139, 35463425, 355677473, 555943444, 892675618, 891691555, 859190325, 353776161, 587600917, 352723495, 842208788, 640955702, 320529280, 490738461, 19284195, 16842522,
- 438714368, 639238399, 638782752, 444596506, 806163238, 168693258, 17698314, 320672704, 490947354, 639262816, 269525246, 440418368, 1075455526, 442502419, 1612326438, 243798797, 235801098, 920074,
- 4278190082, 16777952, 1638560, 318767147, 858994230, 387388978, 353776179, 587600913, 891691553, 859190289, 102897459, 387188231, 842208790, 875968310, 2502305319, 2047875333, 168106256, 640031307,
- 444661274, 1260004902, 220994165, 739052813, 220994074, 739052813, 303005441, 639569682, 436272922, 18490918, 1613109760, 873862682, 437917206, 372512278, 33561110, 3774808064, 2684469249,
- 687875584, 320012288, 353776179, 589497876, 875898402, 657666870, 842204963, 101979414, 639771427, 859190325, 859181875, 120001330, 219842814, 1611469587, 219353869, 312480258, 320015618,
- 319643661, 2283408659, 571872776, 2332112952, 219387390, 219353869, 808456973, 319622419, 319622419, 4262816513, 9803248, 4278190083, 25166304, 2228384, 3473451, 370413824, 353710899, 352723491,
- 54203924, 892745266, 908535348, 640037941, 102892331, 859120407, 336926258, 858982150, 336926258, 321069830, 219156493, 806163219, 975413264, 505160227, 2149792291, 319631376, 443576544,
- 1888101926, 640031264, 2147586074, 2694845197, 319622419, 589511203, 790827322, 321075747, 438730925, 641738266, 2497050, 4278190081, 25166304, 2031776, 370414336, 587412275, 336922146, 842216214,
- 640955702, 856892195, 875902514, 572728102, 219381766, 222004544, 3222082323, 219353869, 222004544, 3222082323, 2147554061, 3237876493, 319622419, 319622419, 219365377, 1250061, 4278190082,
- 21365472, 2752672, 318767179, 572720660, 875902246, 839007030, 336925974, 639771398, 287520053, 353776179, 589497876, 875898402, 288568118, 389096739, 587597590, 842208547, 117904919, 656876038,
- 859191078, 572732723, 926361127, 322974262, 471010573, 342913044, 218960668, 220217363, 2148340499, 219353869, 3070312480, 151523136, 354426901, 1074726921, 1074403850, 352913423, 152379424,
- 171970312, 222298394, 806163219, 337386516, 320015664, 3237879821, 319622419, 319622419, 1077362689, 3222541072, 1074730004, 272632073, 348132371, 155193363, 512, 3221347071, 704684033, 19200,
- 587600915, 892675618, 37434932, 353703474, 572720660, 590689574, 372388629, 587600917, 891691555, 858994228, 822289205, 370619959, 892540181, 389429044, 118756887, 640091655, 354628917, 654706452,
- 1077159463, 319622419, 2964329500, 219356180, 276828941, 219353869, 320015712, 931139597, 336793664, 252974272, 1074334016, 3222541072, 1074795284, 222298377, 806163219, 337386516, 320015664,
- 327163917, 320015629, 2148732173, 255916030, 538249480, 151524640, 436879375, 135217162, 538973449, 252184853, 1706560, 4278190084, 29360608, 852128, 2687003, 16777271, 589506100, 336922146,
- 842216214, 640947510, 102900515, 857084949, 624308787, 556996116, 875902514, 572597030, 640942342, 102900003, 857084949, 20328993, 3758953248, 219353869, 320015840, 319676429, 232787219, 333512211,
- 226492685, 4262269715, 18025856, 4262269888, 320015744, 226492685, 226492691, 218960659, 234033939, 218960659, 227349267, 218960659, 4093514515, 219353869, 1250061, 4278190084, 29360608, 852128,
- 2687003, 16777271, 589497876, 875898402, 842216246, 101979926, 639770915, 859190325, 18231841, 557004340, 336926258, 572596998, 101983526, 639771427, 859190325, 18231859, 3222082400, 219353869,
- 1611861440, 2164133139, 219353869, 319651841, 219365630, 319651841, 2164133139, 1610683149, 230690067, 3222082323, 2147554061, 219353869, 2366837517, 219353869, 4262662925, 320015859, 320015629,
- 320015757, 320015629, 1024, 3221348607, 218144769, 687872768, 14080, 589706241, 352723491, 858986004, 873805362, 572728102, 370414854, 909259571, 857084965, 892744225, 555951668, 872482338,
- 572597030, 370414854, 909254963, 219398145, 320015840, 319676429, 232787219, 3758953235, 1090392845, 2147552531, 219353869, 319652094, 219398145, 319652094, 2147552531, 2147554061, 219353869,
- 4078113549, 219353869, 2366837517, 219353869, 4262662925, 320015859, 320015629, 1024, 3221348607, 218144769, 687872768, 14080, 587600897, 891691553, 557004340, 336664114, 572596998, 909391142,
- 372384051, 859190309, 353776161, 555943444, 335881762, 572596998, 909391142, 372384051, 219398145, 319652094, 2147552531, 219353869, 319652094, 2147552531, 1090392845, 2147552531, 219353869,
- 319652094, 219398145, 319652094, 2147552531, 2147554061, 219353869, 4262662925, 320015859, 320015629, 320015731, 320015629, 320015859, 320015629, 268436992, 192767, 251695105, 721427712,
- 1224751360, 22784, 372388627, 101979413, 639771427, 909391157, 372384023, 587600917, 891691553, 555169332, 336926258, 572596998, 909391142, 372384023, 587600917, 891691553, 874985012, 842216246,
- 336925974, 572728070, 857158950, 353703474, 589497876, 892675618, 807941684, 168693258, 235801136, 220201378, 4262269715, 320015840, 220201229, 4262269715, 320015840, 220201229, 4262269715,
- 320015840, 805965475, 168693258, 403573296, 235801136, 235548682, 244318478, 235548682, 170920462, 219353102, 219353869, 329257741, 320015629, 2685603085, 319622419, 319622419, 235801240,
- 235548682, 240650766, 235548682, 170920462, 4278517774, 31522810, 10486208, 1769485, 3604521, 285212740, 556996116, 875902514, 572597030, 370415366, 909259571, 589706293, 386277923, 336922146,
- 842216214, 640955702, 370410787, 909254963, 589706293, 889594401, 907417393, 640955701, 335939335, 2147552531, 219353869, 319652094, 3222082496, 219353869, 538119616, 219353869, 320015808,
- 325123597, 226492685, 4262269715, 1712524672, 135401992, 2147550822, 219353869, 2366837517, 219353869, 1829966605, 319622419, 319622419, 320015776, 320015629, 151408550, 151690762, 268783366, 1280,
- 3221348607, 218144769, 687872768, 1140864768, 336658432, 841036566, 640955702, 102900003, 857084951, 892744243, 589506100, 571934242, 370414854, 909259571, 589706293, 857084933, 892744225,
- 555951668, 825689634, 656880694, 353699366, 322377236, 226492685, 4262269715, 3222474112, 230690067, 3222082323, 220205837, 3222082323, 219353869, 219373822, 319651841, 2164133139, 109056781,
- 302540294, 2147551250, 219353869, 2366837517, 219353869, 1829966605, 319622419, 319622419, 320015776, 320015629, 84936102, 168363599, 101255838, 512, 1073872896, 251691009, 8192, 370413841,
- 909254963, 640946485, 102900003, 254161189, 386014466, 909579799, 640946485, 436207898, 4279903782, 36051456, 1611665711, 274730510, 1073811729, 639238399, 72230, 36054554, 171969033, 168919057,
- 151587392, 318767379, 768, 188671, 251699201, 855648000, 286326784, 556996116, 288699954, 555951668, 822412834, 101127703, 656540459, 909588262, 387396147, 842217015, 640098851, 842217015,
- 101127703, 2147555878, 438707738, 639271166, 142099457, 3490645511, 118448160, 121637126, 436734732, 218957655, 219028685, 471600653, 235736334, 3237896193, 438707738, 639254529, 212894758,
- 219024653, 151605260, 403341345, 404232216, 1579032, 4278190081, 25166273, 1310912, 640942336, 102900518, 504632582, 840308482, 16989751, 894907520, 624187189, 169031736, 940771868, 75064,
- 875845429, 1428239703, 202919001, 1498159116, 131157, 46202624, 12583168, 1703944, 101983488, 839983878, 335877654, 840308502, 892745271, 640099892, 101058338, 1463074817, 878130485, 994394366,
- 993757755, 993740101, 1161509770, 878130624, 1463058433, 594953525, 1982013986, 594953541, 1982013986, 512, 2147598591, 402702337, 10240, 909521431, 53359669, 589506087, 68028194, 370545685,
- 370422055, 336933427, 640033315, 842216501, 878130624, 674179611, 34539787, 671811855, 874195503, 556739415, 857673744, 1074794526, 456480564, 893733702, 235670542, 1179338037, 878130459,
- 271524272, 523443728, 196624, 29425408, 12255739, 1441801, 16777276, 118756887, 909584135, 389481778, 117900807, 925247238, 858207799, 336926258, 572728070, 336663814, 841036566, 875902262,
- 372388662, 101979413, 639770915, 909381941, 286447617, 509746705, 3858640401, 162030248, 168777996, 69075978, 319643715, 224398611, 17634067, 320015616, 940772621, 671153960, 2852206648, 271454482,
- 287203871, 2825038061, 85853193, 1477315339, 219396877, 219353869, 319619327, 224398611, 1611469587, 674773032, 942145537, 256, 180479, 1409335297, 822149120, 118756887, 656876038, 640103189,
- 842413876, 336992023, 570820359, 926164519, 924132151, 370618934, 101123860, 640100130, 842413876, 590681879, 118756887, 656876038, 926364710, 370618934, 856098580, 570820405, 926164519, 20067895,
- 151601175, 151656970, 151587443, 1074403850, 171968777, 151587354, 168391434, 151587354, 169478720, 168364352, 1929972250, 168364298, 155191834, 436879369, 168364298, 436865395, 1074333962,
- 3070302730, 169478720, 1930037513, 169478665, 171968777, 155191834, 169478665, 151679753, 169478665, 1074334016, 151656970, 158534153, 151656970, 436879369, 151601162, 151656970, 151587443,
- 1074403850, 65545, 33226496, 8782144, 620757019, 336930599, 639771398, 909381941, 353776179, 909588245, 286594583, 17172244, 319602700, 320015629, 202575117, 303239104, 2684818194, 319656202,
- 1073810707, 219353869, 228592273, 4262725897, 151590080, 256, 195327, 620791297, 908394496, 657723701, 889653030, 119940916, 640955655, 352723491, 857084945, 892679730, 909579799, 370619701,
- 303230465, 313265939, 330043155, 320015629, 2886929677, 2886865679, 336134927, 152322049, 1989086473, 218695956, 319649423, 3237874963, 219353869, 151883638, 2406880265, 131085, 50003712, 8782080,
- 1966092, 891757824, 389429045, 336663830, 354878983, 654706452, 875898407, 389429047, 16915734, 262974668, 319951379, 252908251, 3222015168, 118625039, 2401905295, 336136461, 152355070, 339764745,
- 2685208841, 168759050, 151588256, 8396820, 4278190081, 25166296, 983208, 87102208, 118756630, 640091653, 926159157, 536955190, 3774748439, 404232472, 2962817305, 236657422, 235802544, 476053788,
- 33558030, 0, 2147565569, 520097536, 856883200, 286594610, 589497876, 288695842, 858994228, 286594610, 589497876, 288695842, 540030516, 337386516, 471602208, 471081172, 337646620, 2147556380,
- 3774747676, 337386516, 471080961, 3774747676, 337386516, 471080961, 256, 2147549184, 251691009, 286326784, 556996116, 288699954, 555951668, 438699554, 639238145, 16718374, 1073817114, 639238399,
- 72230, 2500122, 4278190082, 16777978, 852102, 922746911, 892679971, 101131815, 387191061, 336934678, 926357015, 657732918, 101131815, 20251165, 319794348, 3675460114, 3222213394, 264244236,
- 2399605267, 227486250, 4262725897, 151590080, 152322150, 178261257, 2685013775, 336136461, 16810016, 4211015680, 2248212482, 9728, 891695415, 909587473, 875894551, 387397175, 859190325, 286594610,
- 572720660, 120927526, 891692806, 302384949, 269685266, 269685419, 218960811, 218960659, 319859475, 51424018, 1073812489, 218695956, 152336015, 1989086473, 219353869, 319668478, 2406878483,
- 336136461, 888694, 4278190081, 20972026, 1835142, 925054720, 370414903, 892744243, 589706257, 353699362, 119940903, 336663814, 20256279, 219352256, 219353869, 3222016781, 303174415, 178259731,
- 320015761, 222298381, 2433553171, 151887882, 3237876745, 592148, 4294508290, 29950432, 983200, 318767133, 117908017, 857085702, 909586977, 52832039, 556996116, 875902514, 572597030, 236314630,
- 218895792, 543162655, 2954235148, 337442062, 471097345, 2701005852, 2684427284, 471384079, 387718429, 1895698624, 337386516, 1842196, 4278190081, 16777696, 1245344, 925972224, 370618934, 386336532,
- 101127190, 640100130, 180357428, 151587354, 151628458, 3221887498, 163632905, 169478665, 436906409, 3221817610, 16783882, 3774824448, 2684436481, 4864, 640102693, 335939362, 101127959, 840308500,
- 875968311, 180369153, 151587354, 151628458, 3221887498, 163632905, 169478665, 436906409, 3221817610, 33561098, 3237937152, 3221291010, 822087936, 570753024, 874915622, 859190839, 370611762,
- 101058324, 857084967, 892679730, 892744243, 589506100, 589706293, 353699362, 352723491, 858986004, 1984233473, 589439523, 1984251254, 589439523, 168713590, 171970058, 1074400782, 235538958,
- 235801152, 1161838602, 998914875, 994395451, 993757755, 235579461, 239077902, 1074661898, 168693258, 168431168, 131086, 46202624, 12583168, 2031633, 639763712, 926164519, 842217014, 336992022,
- 50726407, 336922146, 842216214, 640955702, 1157628195, 572662646, 1162180131, 572662646, 177042979, 2416578062, 168693258, 993740096, 1161509770, 2319137605, 21314363, 168431128, 168431118, 131086,
- 46202624, 12583168, 3211281, 639763712, 926164519, 842217014, 336992022, 50726407, 387388422, 387188231, 926364182, 926029335, 656880694, 657733175, 117908006, 19015207, 594953472, 1982013986,
- 594953541, 1982013986, 788989846, 117901103, 791611156, 117904391, 120532743, 118753031, 336015151, 993740096, 1161509770, 2319137605, 21314363, 118753105, 336015151, 788989703, 117901103,
- 791611156, 117904391, 120532743, 512, 180479, 285261825, 9472, 656810501, 909587494, 372388662, 118756887, 823330310, 640103478, 654772002, 101130790, 370611988, 79666, 572749381, 1165370146,
- 572749381, 745939746, 336004871, 120549127, 117901076, 118753088, 993740096, 1161509770, 2319137605, 21314363, 118753071, 795805447, 336004871, 117915655, 768, 180479, 285261825, 1090532608,
- 570753024, 874915622, 859190839, 370611762, 101058324, 102052099, 907417366, 859190583, 336933427, 352716551, 857084949, 926234162, 640955702, 102900515, 857084951, 875902514, 102900518,
- 1984233473, 589439523, 1984251254, 589439523, 151296886, 68290825, 255460866, 235678728, 537790986, 974791968, 321920274, 320015629, 1074990349, 2319137605, 1162165051, 998914875, 1526809915,
- 51513602, 34146307, 67702533, 235734810, 168693258, 438637074, 231413029, 218960659, 50336531, 3237937152, 3221291010, 754979072, 14592, 656810501, 909587494, 372388662, 118756887, 572982790,
- 370414854, 909259571, 589706293, 640955683, 102900515, 857084949, 574035251, 370414854, 892744243, 75316, 572749381, 1165370146, 572749381, 1836458786, 168693258, 235801168, 168691722, 235801136,
- 219158538, 218960659, 1161827091, 998914875, 994395451, 993757755, 168734789, 168693258, 173542922, 168431118, 332414990, 320015629, 1248525, 4278190083, 16777920, 3080384, 6750299, 102891776,
- 34477333, 102900487, 857084949, 386014771, 857084949, 892679730, 859243070, 875902514, 774054694, 875898626, 842203942, 640955702, 909517603, 370414903, 892744243, 387323445, 352723491, 858986004,
- 889652742, 572728884, 638915846, 102905638, 857084949, 875902514, 218104102, 860696339, 319621639, 118099219, 321867059, 789777677, 168244045, 219353869, 1295189770, 362943279, 219353869,
- 742328853, 319622419, 352993068, 219353869, 742328853, 319622419, 227229484, 218960659, 3221295891, 118099219, 321867059, 789777677, 168244045, 219353869, 1295189770, 218960687, 860696339,
- 319621639, 219406590, 1059853069, 319624458, 169151763, 219360319, 1059853069, 319624458, 169151763, 219376703, 219353869, 50336525, 3237937152, 3221291010, 385878784, 10496, 101069093, 640033315,
- 926299189, 906048261, 372388662, 101979414, 387322917, 909586966, 640955702, 119678503, 1862338054, 891238679, 286471255, 4261492737, 523835380, 322197301, 994399230, 993757755, 993740101,
- 1161509770, 873664804, 958346583, 201448983, 1463030544, 1480138549, 572749381, 1165370146, 572749381, 7742242, 1, 29360384, 1769600, 925972224, 370618934, 554108692, 336926258, 388047622,
- 101127190, 640100130, 178260276, 151587354, 221446506, 4262269715, 151612109, 2685016586, 161535753, 169478665, 218960745, 436889875, 2684946698, 16783882, 0, 2147598337, 6912, 101134629,
- 874915618, 572602167, 909391142, 640098611, 842413876, 336992023, 178304769, 151587354, 231603818, 17634067, 151611955, 2685016586, 161523977, 169478665, 218960745, 436889875, 2684946698, 16783882,
- 3774808064, 2684452865, 6912, 370618643, 570820372, 336668455, 639771398, 101126453, 874915618, 842413879, 151625943, 1762269706, 319622419, 169478761, 178260233, 2694250778, 151656970, 3456002569,
- 219353869, 157954817, 169478665, 16779680, 3774808064, 2684452865, 6912, 640102679, 842413876, 873535255, 372388662, 909578517, 336992050, 570820359, 151625897, 1762269706, 319622419, 169478761,
- 178260233, 178263834, 151587354, 221446506, 4262269715, 151612109, 2685016586, 65545, 48299776, 10879232, 16777256, 387397169, 118756630, 640091655, 572732725, 370414854, 336926231, 656548614,
- 875889454, 858994230, 855716917, 195038995, 319791115, 942170131, 201983759, 117703688, 806954016, 24129871, 2416839069, 168693258, 134811280, 674775061, 151460631, 34342922, 1059723012, 810496298,
- 67114304, 3774808064, 2684469249, 620761600, 1258305536, 856883200, 336926258, 354624262, 572720660, 875902246, 857019190, 336926258, 572728070, 875902246, 372388662, 372388609, 101979413,
- 891691555, 639771445, 322319413, 587600917, 891691555, 858994228, 859190325, 1612715570, 219353869, 218960704, 1076695827, 219353869, 320015712, 18025741, 319643648, 319622419, 320015680,
- 1611469709, 219353869, 218960704, 329253139, 1074990349, 219353869, 4262661472, 219365568, 219353869, 320015712, 219362049, 320015712, 219365389, 3237876493, 320015712, 1074990349, 1250061,
- 4278190084, 29360608, 1179808, 3670053, 318767179, 587600917, 891691555, 858994228, 859190325, 855840306, 353703474, 572720660, 590689574, 875898402, 857014582, 336926258, 572728070, 875902246,
- 372388662, 372388611, 587600917, 101979427, 891691555, 2687906869, 224398611, 1074598675, 319622419, 319643776, 319622419, 320015680, 222317825, 1611469587, 219353869, 1612714765, 219353869,
- 218960704, 2147554067, 320015712, 1074990349, 4262662925, 1611469811, 219353869, 218960704, 1073742099, 319622419, 224398611, 4093514515, 319622419, 320015680, 319643661, 268435712, 2952896512,
- 218161152, 874840064, 572597030, 370414854, 909254963, 219394049, 319660286, 1610681619, 230691597, 218960659, 50336531, 3237937152, 3221291010, 520098048, 11008, 656810501, 909587494, 372388662,
- 118756887, 570623494, 336925958, 909259542, 640955701, 857084935, 875902514, 102900518, 1984233473, 589439523, 1984251254, 589439523, 235554166, 235538958, 219359758, 219353869, 1161827085,
- 998914875, 994395451, 993757755, 243269957, 235565066, 175114766, 319676430, 319622419, 327699, 46202624, 12583168, 3080203, 4325435, 318767177, 572728102, 370414854, 824640059, 858994228,
- 924260146, 842216246, 118756630, 353776179, 587600917, 891691553, 859190325, 874849843, 572728102, 858982151, 855979570, 639771413, 859112757, 587600917, 35130815, 286725905, 882966856, 439616036,
- 874125336, 171189250, 320015658, 222363149, 705499923, 391119114, 219677201, 289931554, 3230727703, 18617488, 337428480, 387283713, 672600337, 690762788, 607398953, 219353877, 320015680, 319635469,
- 386995475, 3071752981, 806624480, 471118048, 256, 188671, 889233409, 855703552, 909588018, 353769266, 587337236, 656810531, 353699334, 572720660, 875902246, 808466230, 909588017, 825241651,
- 892482355, 572728116, 20329991, 891316240, 34341390, 1447175445, 1581056306, 236787983, 890112522, 405217579, 269502488, 893081616, 1610701841, 84220449, 1765556025, 944451152, 270876439,
- 168693258, 492779536, 268765462, 1161107984, 512, 3221340415, 503365633, 13824, 117835283, 336922118, 842208790, 875902518, 640034598, 119678503, 637994502, 321005095, 875898402, 372651830,
- 387323415, 926357014, 370611766, 2667972358, 336935459, 1063599129, 322725438, 439029519, 168169478, 707004435, 809308166, 68819266, 638387216, 84870412, 68027673, 538906643, 1193392897, 474227492,
- 1094806336, 1008090987, 406789918, 386467334, 86518794, 859463934, 102771991, 806356481, 100730383, 117507613, 353783330, 4261348096, 1124262143, 453025793, 1174416640, 838926336, 370546454,
- 101127703, 101058310, 656810531, 640099878, 926299703, 336016950, 840308502, 892745271, 640099892, 101058338, 657731895, 372454950, 102110998, 656803335, 909391142, 842208791, 1025507638,
- 774055008, 201655564, 1612981038, 610286909, 84684323, 590220293, 659775524, 558768417, 556214049, 555830817, 33787943, 824116229, 640158217, 51004711, 168428552, 2684429850, 1210065200, 453774363,
- 807477320, 1210065200, 453774363, 807477320, 339879904, 1108611859, 339879719, 1108611859, 67766809, 522649864, 168510503, 185214504, 50464004, 4278386726, 46137343, 12648833, 3473437, 318767181,
- 909514545, 387330611, 370611734, 117835271, 118887959, 19334662, 909583910, 387258166, 657732918, 372454950, 118888214, 875902487, 572728870, 102175494, 639771398, 656811559, 909522726, 352720695,
- 857085460, 560998194, 1614623573, 187573283, 671745542, 34105629, 135529990, 34124029, 3222537734, 33752922, 824116229, 655165449, 675358481, 1233334812, 1025785627, 774055008, 134546700, 22941976,
- 472400167, 442022657, 539045923, 202120008, 1377779481, 134747142, 3489728002, 134747142, 1174509058, 168431373, 654379012, 522068255, 1093149984, 4278064167, 806489913, 457711649, 722537484,
- 168446743, 2572584, 4294639363, 17171168, 983200, 2687005, 573636864, 386269959, 841036566, 52901431, 372377382, 101979413, 891691555, 389428277, 572720660, 909391142, 18231859, 3624670976,
- 386665227, 202878977, 215485195, 235801111, 235801098, 218960682, 218960659, 346030355, 336892158, 336860180, 2148823041, 175114766, 1879707150, 232787466, 218960659, 16782099, 3237937152,
- 3221307394, 11776, 656617729, 572728102, 588715782, 589506087, 387192098, 352716567, 842216212, 120796983, 858985990, 859256626, 892745266, 19277364, 157644002, 151533587, 728183042, 237635589,
- 18816769, 84421134, 36792107, 322439177, 292840713, 740368684, 279969793, 984352525, 33689094, 33713774, 2889483790, 2953841927, 303176977, 134222109, 3237937152, 3221340161, 620763904, 1023422720,
- 1426082048, 1828741376, 571670528, 588584198, 353699362, 640955681, 875897635, 102900518, 891491605, 285681204, 556996116, 288699954, 858993669, 336926002, 891429667, 858993719, 336926002,
- 891429667, 355611447, 589501461, 875902242, 858993669, 336926002, 891429667, 355611447, 589501461, 875902242, 858993687, 336926002, 891429667, 806555008, 3221298196, 321917980, 2148732173,
- 337415443, 471097345, 537952510, 270536720, 270536832, 2416975888, 537923616, 268500752, 537923616, 270569488, 2148540432, 269492240, 3221295136, 471862547, 338702356, 319627292, 538971411,
- 4274000653, 471602416, 1343226132, 270536720, 269492240, 806359072, 269492240, 277876768, 269492240, 270536752, 269492240, 270536720, 196624, 47906560, 10879232, 2621464, 16777293, 588584198,
- 386336546, 858994231, 370611221, 892745527, 640100148, 101134593, 102900515, 857084949, 926364211, 909587735, 656880693, 352716582, 656548629, 589506087, 336922146, 842216214, 857085719, 387192115,
- 345243926, 522006560, 269101608, 252974112, 1074334016, 721288720, 222302218, 1074598675, 3944684848, 1074334016, 538186512, 496568848, 319635504, 272633107, 807246090, 18027552, 538249630,
- 943008294, 135602189, 155193353, 1074400525, 956300815, 218960653, 2267686419, 218710017, 255855117, 538249480, 321309965, 219352333, 354428621, 16779273, 3774873087, 2684420098, 10752, 640954661,
- 102900518, 370414854, 117835287, 101123590, 354620423, 386270009, 909259542, 926299703, 909259542, 1157628470, 1950828404, 35068229, 134481932, 16974339, 184812552, 286403094, 925960476,
- 3494212679, 943218489, 1025653087, 220205594, 50531079, 117506307, 134941194, 302452744, 50356024, 3774808064, 2684469249, 486544128, 9984, 336933649, 909259542, 355677493, 587597332, 1025910306,
- 859190274, 353776179, 875901717, 842216246, 2148865302, 942155832, 1046887552, 322725438, 319635469, 1074598848, 536941325, 943204448, 1046503464, 1715223654, 222330942, 1074598675, 320015680,
- 16793613, 1610620928, 1610735617, 4864, 101134611, 840308500, 370620215, 875968306, 572925735, 151634153, 2836011530, 169478825, 180357385, 3226927386, 151656970, 162179593, 169478665, 16779712,
- 536879104, 536993793, 4864, 640102711, 842413876, 909580055, 336992050, 570820359, 151634153, 2836011530, 169478825, 180357385, 180365594, 151587354, 151628458, 3221887498, 4278321161, 33554682,
- 8388934, 4063263, 590423296, 892675618, 640098851, 842413879, 118888215, 354624262, 858986004, 336926258, 842208006, 857019670, 118888242, 656541191, 909583911, 875901747, 572728102, 909391142,
- 678432769, 135602232, 171970313, 255855130, 538249480, 225447187, 1880298259, 354433064, 1074726921, 1074403850, 352913423, 1879905056, 538120973, 343943224, 155193108, 319832073, 319651860,
- 319622419, 674775041, 252974208, 1074334016, 2148799248, 219353869, 50336525, 3120496640, 3221307138, 788538112, 15104, 857084945, 320287283, 556996118, 875902514, 572597030, 841033511, 909588278,
- 639705894, 102900515, 370611219, 875902519, 101131815, 101130789, 842208791, 640103991, 103680526, 671429633, 169869594, 4262071822, 84153568, 639180801, 402991367, 258342420, 235548195, 404232320,
- 404232216, 475005208, 235736334, 219028508, 2818641421, 4261809674, 237050609, 336464394, 2568429084, 236986131, 236732158, 470682893, 218959388, 404231182, 404232216, 16783384, 3774808064,
- 2684420098, 5376, 891691543, 859190289, 387396147, 842216214, 336663830, 440410886, 2149197350, 169022240, 639279120, 639638054, 440402202, 219748902, 16718374, 33564186, 3774872575, 2684437762,
- 603984640, 825688064, 891368246, 589506100, 640100130, 102900515, 825692437, 370607623, 926032179, 640103991, 1495408931, 1342252306, 460659238, 437459475, 1948654198, 151587184, 311427347,
- 151613450, 1895699209, 539025426, 437462299, 4263126547, 281053416, 3222278160, 1052688, 4280287233, 18874816, 2621632, 389092096, 101127190, 287778594, 389166647, 117904406, 656876038, 909587494,
- 286725938, 656541191, 926364710, 1622618678, 436865289, 170469642, 151587354, 169478752, 168364384, 690555418, 151656970, 436887561, 174110465, 151587354, 718994986, 436865289, 151609354,
- 169478752, 19532041, 151595558, 1611274762, 65545, 37748736, 4194560, 620757032, 656541233, 926364710, 336992033, 656541191, 926164519, 389166647, 117904406, 874915617, 389166647, 118756887,
- 436901633, 705235210, 153803518, 169478665, 1611204960, 151656970, 637610505, 168364330, 157288986, 151603465, 688527882, 169478697, 174065929, 157288986, 169478665, 436873513, 1611204874, 662026,
- 4278190084, 16777952, 1310880, 3145762, 318767166, 286590498, 556996116, 875902514, 572597030, 640946485, 857084951, 892744243, 589506100, 571934242, 370414854, 909259571, 589706293, 352723463,
- 556996116, 875902514, 220209958, 18951955, 320015760, 275840525, 219370259, 320015808, 319668237, 320015648, 319651853, 226495763, 17634067, 320015616, 329253133, 565247501, 218960687, 1342246931,
- 224400141, 218960659, 323818259, 320015629, 1611861261, 319622419, 319622419, 768, 188671, 201367553, 855648000, 101908480, 857023267, 389165878, 86193459, 892548660, 842216244, 926094613,
- 842216246, 336663830, 572596998, 339162406, 909579799, 640103477, 249366023, 594771983, 1931684394, 653393585, 272633882, 252523296, 640031409, 444661274, 741124134, 741092396, 1191259180,
- 404242439, 639246432, 269488144, 438699801, 639287550, 862984742, 421141017, 437859123, 33560858, 3237937152, 3221291010, 805315584, 572850176, 587597607, 101979427, 336929571, 572728070,
- 875902246, 891696951, 859190836, 353769010, 50726420, 386271010, 926036758, 19277622, 555359312, 237505031, 168699914, 118360656, 1345259681, 793784625, 386486319, 202050316, 185341719, 140512267,
- 170395425, 235546638, 173017614, 471507207, 791629873, 1345401168, 335544623, 336860180, 1315860, 4294967044, 24642239, 5308600, 11403357, 16777402, 353765155, 370607892, 117900807, 654706438,
- 117900839, 587597574, 656811810, 120006183, 656811782, 640099879, 891696951, 640104244, 926365239, 389429046, 926365207, 859191094, 370618929, 387323671, 370619959, 387323671, 387188502, 892745494,
- 119940916, 657522950, 656548614, 640091655, 656811815, 641152806, 656811815, 926168358, 909588278, 925247287, 909588278, 387397175, 389165878, 370619959, 387323671, 369559318, 387323671, 118756630,
- 101123846, 118888199, 101123846, 572982791, 370607623, 909586995, 889267751, 33691137, 67439638, 100926212, 270274569, 251921940, 168430090, 335938320, 151985424, 67306502, 386663940, 202834434,
- 50594822, 252249349, 101978141, 185143299, 51317259, 487592966, 67504399, 100926467, 404232401, 404232216, 344523032, 185207307, 135138068, 134677767, 218694924, 34610440, 268566785, 151914269,
- 134679557, 252184325, 168498186, 185862922, 101124110, 84674311, 487066889, 16843280, 119345154, 201656590, 117835527, 473108232, 235736334, 219028508, 956370445, 168430356, 235607051, 117769992,
- 151325704, 270338061, 33620226, 235347216, 118228233, 134677768, 185862671, 336267786, 117968395, 201787142, 135072005, 16912413, 487588353, 84479495, 101123852, 856623111, 218959388, 236723214,
- 4262333709, 33691296, 67439638, 100926212, 270274569, 251921940, 185207306, 335938319, 152050704, 67306502, 369952260, 219546114, 50594822, 269026565, 101978140, 168431364, 51382794, 470815750,
- 67504400, 100926467, 404232401, 404232216, 4278321176, 46202877, 12583299, 5177382, 573650688, 101123623, 656548614, 37304102, 926299952, 909588022, 891692599, 859190836, 353769010, 923141652,
- 505885745, 101979394, 370611719, 387323670, 37298966, 587597590, 640099874, 572720679, 1042753062, 825806850, 537792011, 67373840, 50397450, 167970563, 940905221, 1597585759, 3076470840, 878130689,
- 168104725, 33752835, 167838210, 269222660, 202182176, 1378891825, 1664748602, 102260795, 185009669, 16844555, 84345347, 890572044, 793784605, 825315375, 145764176, 1294992392, 355802415, 117771277,
- 16908802, 118164231, 403047686, 86325794, 33577528, 3137278976, 3221336321, 318771200, 822149120, 654706449, 657930022, 1060517670, 856897026, 2149581090, 51384338, 101607449, 1083183878, 17015305,
- 1224654849, 202115652, 241668627, 352523027, 16650884, 512, 188671, 453025793, 14592, 101134629, 874915618, 572733239, 909391142, 640103219, 842413876, 336992023, 102900517, 370413845, 372388659,
- 587600917, 891691555, 859190289, 353776179, 4144039444, 169478784, 3544844553, 219353869, 151603923, 2148145674, 1084292617, 219353869, 320015680, 942161933, 222308408, 2158564115, 436865289,
- 219367690, 172561165, 151587354, 2904164992, 16715027, 219353869, 674763533, 942145537, 319622419, 4244570624, 2214707455, 570474497, 11008, 370422035, 101135155, 101123846, 556996119, 657864498,
- 656811559, 909259559, 589706293, 319169057, 857084949, 892679730, 487396128, 170531595, 168429057, 272630032, 17173002, 186329610, 320015645, 218169101, 219381779, 2684424973, 261362445, 251862833,
- 235736334, 824115983, 219386895, 4262662925, 319643795, 6294803, 4278190082, 16777920, 1704128, 16777277, 353776179, 587600917, 892675618, 656541191, 926364710, 891691555, 856110644, 336926258,
- 572728070, 856953109, 892678689, 842217012, 336925974, 572596998, 873542950, 2688549174, 219353869, 180949773, 151587354, 319640522, 225501971, 1879905043, 1073811472, 218960656, 4263587603,
- 791617984, 219398145, 320015776, 164254477, 169478665, 218960841, 219357203, 4262466317, 1880101056, 219353869, 791617904, 557842721, 131119, 48299776, 10486016, 3735581, 639762688, 859190325,
- 353776179, 587600913, 891691555, 858994228, 288699954, 119744052, 570820401, 926164519, 639771447, 859190325, 874915635, 389166647, 18093591, 320015712, 942161933, 222308408, 1074598675, 219353869,
- 436895817, 1242106122, 320015827, 155898637, 169478665, 1610680704, 319622419, 16721976, 219363368, 219353869, 319619073, 151617719, 1225398794, 319622419, 169478729, 176163081, 196634, 46202624,
- 12583232, 4587579, 16777297, 336008754, 842204948, 101979414, 117835271, 336922118, 842216214, 101979414, 639771427, 859190325, 892744243, 640099892, 640034598, 859190325, 892610099, 120796710,
- 387323441, 639047190, 822421286, 590820918, 906429958, 344981814, 1778450716, 556600842, 287197986, 437261846, 219353869, 320015808, 370153997, 1260261654, 237838881, 16869898, 75437084, 638654499,
- 119279890, 588794625, 470242308, 19206929, 68426944, 168690696, 539059013, 436537379, 320213007, 320015629, 370347277, 85593872, 555754248, 235554147, 335808516, 1160933404, 152506647, 2386844703,
- 1144145175, 386473820, 768, 180479, 436256769, 1023422720, 385941504, 909586966, 640100148, 101123874, 840308500, 336934711, 909259542, 102900533, 370414869, 909254963, 640955701, 101983011,
- 891691555, 891691543, 842217012, 101979414, 172564481, 151587354, 169478784, 168364416, 323553818, 3759344909, 438707738, 639270913, 645929510, 4029028890, 168693258, 17698314, 151603795,
- 2148145674, 176163081, 151587354, 319681354, 438701331, 640031264, 639246362, 438707738, 168431208, 168431118, 4278321166, 31391742, 10617283, 3473446, 338755840, 386270727, 101123606, 103163654,
- 572720647, 926168358, 640103990, 909522742, 926291479, 372388662, 657862919, 101058342, 370607623, 20330039, 134546368, 724045572, 288977451, 168366373, 84092442, 655229960, 947071787, 152118545,
- 3945142794, 251921679, 84823089, 201592592, 174063937, 287641865, 724267832, 134483495, 438698757, 621873418, 728971281, 68036395, 637732104, 252707897, 810290693, 268764176, 16793896, 3237937152,
- 3271623426, 7680, 370618643, 387319559, 389428791, 118887959, 587597319, 889335330, 926365236, 681907766, 875632395, 436742253, 235823116, 369367044, 2074238221, 1477251142, 2801867535, 672340832,
- 187774061, 103286022, 240651803, 2725987856, 68488797, 918552, 4278190082, 29360608, 983200, 318767143, 353776161, 587600913, 891691553, 389428241, 336922119, 842208790, 657864503, 117909031,
- 909584166, 1076242215, 639254529, 3237878310, 1965434394, 1715212076, 201592638, 238030853, 439751945, 335940377, 648020230, 448855578, 18490918, 1629887040, 1041171468, 739196006, 85198609,
- 907680011, 806226197, 65552, 29425408, 12583360, 318767141, 372388629, 101979413, 639770915, 909391157, 875901747, 842217014, 102110998, 656803335, 572728870, 451973126, 4263126566, 640031424,
- 1093079066, 289811240, 202115334, 654902809, 19865880, 438710320, 640031424, 639287322, 658581552, 420226094, 201917958, 3086613, 4278190084, 20972256, 589984, 1900563, 318767143, 353776161,
- 875897109, 336921910, 572596998, 389362982, 856954146, 875901491, 856954659, 875901491, 1075979043, 639287297, 36094205, 4263126554, 1881545280, 272633872, 2148544528, 276828176, 438738945,
- 639246368, 639287488, 2160073254, 269488144, 269488144, 768, 3221346047, 352362497, 905978112, 336658432, 506606358, 370414850, 892744243, 587345460, 336660002, 909579799, 640103477, 574031367,
- 370414854, 370553395, 857084949, 875902514, 219349550, 929136457, 319622419, 1452765761, 538972941, 538976288, 220209184, 1041044243, 219364454, 1328354061, 226492776, 2137077523, 320015689,
- 1922520589, 2482901825, 320016933, 304424210, 3675394835, 319622419, 222193212, 1007489811, 2969448, 4278190084, 16777952, 917664, 2752542, 285212726, 859182385, 890712609, 555951668, 571934242,
- 336925958, 841036566, 875902262, 570893094, 909391142, 353776179, 339150356, 639771398, 859190325, 622532146, 455442433, 2164136486, 440411674, 18490918, 640031360, 319651866, 319622419, 219378451,
- 219353869, 1610683149, 3088586936, 3659933210, 440408614, 1075455526, 327165466, 320015629, 538119437, 219353869, 1250061, 4278190082, 16777920, 2687174, 16777268, 353768981, 352781844, 654706452,
- 589506087, 587600917, 891691555, 891691573, 993408053, 926364163, 118888246, 589497862, 372388629, 3758175511, 236065294, 722408468, 319384139, 319635469, 438707738, 1778983008, 319826763,
- 1865170964, 1007225148, 2684431471, 354485908, 2483429653, 252250133, 226511660, 2148340499, 442505766, 254561062, 677513480, 673931307, 4278255747, 46006269, 12779779, 318767176, 909580081,
- 387388951, 370619959, 370607879, 117904919, 101127703, 370607879, 656868871, 101123591, 101132071, 656877095, 640091655, 640104247, 926361127, 909583911, 640104247, 387397175, 909588023, 170733011,
- 268635661, 168431166, 222237188, 772408324, 67373614, 68304653, 1041107466, 219022096, 170732810, 251923981, 168431166, 239014404, 772408323, 67373614, 68304653, 1041107466, 219022096, 774813953,
- 218366986, 168038975, 255725066, 168627716, 218770733, 1041236750, 67766798, 67976978, 774769156, 218366986, 168038975, 272502282, 168627715, 218770733, 1041236750, 67766798, 51265298, 327684,
- 33554432, 8388864, 1441800, 3276836, 16777307, 842208547, 640955702, 102900487, 857084949, 892744243, 876029492, 572728102, 370414854, 909259571, 102900487, 857084949, 892744243, 572991028,
- 875902246, 353710643, 842208788, 875902262, 572728102, 352716551, 370545685, 891695923, 641152564, 20395061, 231788768, 1085084435, 219353869, 320015680, 806163251, 219353869, 1611861296,
- 320015680, 319635469, 706635027, 286724112, 438703889, 187053339, 742992687, 320342281, 1610680587, 218960704, 219398163, 219353869, 222302989, 218960659, 328405779, 320015629, 1611861261,
- 272113194, 387004432, 441979159, 789259814, 1227636290, 353439531, 319882785, 83889937, 0, 2147549186, 369100800, 838870016, 23296, 588591891, 875898402, 842209078, 101979414, 639771427, 657863733,
- 858994228, 336926258, 572728070, 842209062, 101979414, 639771427, 926299189, 892679730, 354558772, 587600917, 892675618, 858994228, 370612018, 101979413, 908272390, 656815157, 657732918, 231788576,
- 1085084435, 219353869, 320015680, 806163251, 219353869, 1611861296, 320015680, 319635469, 706635027, 286724112, 438703889, 187053339, 742992687, 320342281, 1610680587, 218960704, 219398163,
- 219353869, 222302989, 218960659, 328405779, 320015629, 1611861261, 272113194, 387004432, 441979159, 789259814, 1227636290, 353439531, 319882785, 83889937, 3237937152, 3221323777, 369100800,
- 838870016, 23552, 892540179, 572728884, 336926470, 909259542, 640955701, 654713379, 353699362, 842208788, 875902262, 336926502, 909259542, 640955701, 117842467, 587600945, 875897379, 909259571,
- 589706293, 352723491, 387388437, 842216214, 892679734, 639771398, 572720679, 322969639, 3222473997, 319622419, 319622419, 320015680, 320015629, 218960787, 218960659, 506093587, 940576824,
- 286725905, 623254104, 1044524812, 254495020, 102831377, 252777233, 3503333377, 2903708429, 320015680, 319635469, 219362067, 320015664, 319631373, 319635552, 222301459, 509940499, 386928682,
- 639045905, 624237338, 1227566860, 403245356, 592659, 4278190085, 25166272, 524480, 2359318, 6029362, 859117312, 587600917, 892806690, 842217012, 336925974, 639771398, 891691527, 859190325,
- 353703474, 892798484, 842217012, 336925974, 639771398, 640954663, 354558755, 842216212, 101979414, 639771427, 926168373, 858994231, 353769010, 572728853, 589694726, 1075840802, 319622419,
- 218960832, 218960659, 319635475, 319622419, 219386643, 219353869, 710939405, 269498398, 387387704, 639260689, 1110379557, 726215742, 555028751, 286462214, 3503300623, 2903708429, 320015680,
- 319635469, 219362067, 320015664, 319631373, 319635552, 222301459, 509940499, 386928682, 639045905, 641014554, 1227566859, 403245356, 592659, 4278190082, 16777920, 1114304, 620757036, 101123604,
- 640034594, 926299189, 370618934, 101131542, 370611988, 875968306, 842213159, 640955702, 909583139, 572925748, 994377730, 993757755, 993740101, 1161509770, 124839934, 336031751, 1191642887,
- 235801270, 122140170, 3222537991, 572749381, 1165370146, 572749381, 1014375202, 118753136, 117901168, 239535892, 1192102410, 117904391, 512, 180479, 285261825, 11264, 926299189, 370618934,
- 101979414, 656541191, 923084326, 656880694, 101130790, 588715796, 336922146, 120795926, 370611206, 993740082, 1161509770, 2319137605, 21314363, 117927961, 118753136, 3058108167, 168693258,
- 117917622, 1170215943, 572662646, 1162180131, 572662646, 1883010595, 1879512071, 336004871, 168707847, 122097162, 460564, 4278190082, 16777920, 1114304, 83886124, 640099874, 909522740, 387330611,
- 101127190, 640094982, 101123874, 840308500, 336934711, 909259542, 370619701, 875968306, 1984233473, 589439523, 1984251254, 589439523, 124796022, 124782356, 118753031, 168431175, 336021262,
- 1161824007, 998914875, 994395451, 993757755, 1880686917, 124782343, 117901076, 235583047, 1203112462, 336004871, 512, 180479, 285261825, 11264, 387330561, 101127190, 639771398, 926164519,
- 386086454, 926364182, 640103478, 889653026, 572728884, 655693062, 101130790, 1157628180, 572662646, 1162180131, 572662646, 1883010595, 1879512071, 336004871, 168707847, 122097162, 17237780,
- 993740224, 1161509770, 2319137605, 4265950011, 117928167, 118753136, 3058108167, 168693258, 117917622, 151000071, 3237937152, 3221291010, 318769408, 687872512, 973090816, 1342196224, 22272,
- 589771813, 387192070, 372717107, 856101909, 657732918, 640037159, 588715559, 656811814, 572728870, 117835526, 824379142, 101070646, 352716551, 640882452, 389493813, 370611761, 909259542, 909588023,
- 655762231, 387323427, 590423334, 909510406, 3120783361, 62522115, 2063794973, 369821704, 271072091, 252840225, 84805906, 302583301, 554242575, 1530603536, 134744854, 1073939323, 235475471,
- 151913733, 152178450, 1948912048, 674978582, 276059649, 3227204135, 538976033, 1612717857, 522264863, 522264863, 273692704, 674718262, 101191970, 571541510, 912406057, 540561424, 522264863,
- 522264863, 135340799, 302515718, 926296353, 273692727, 912417334, 33574928, 3237937152, 3221291010, 889202944, 824508416, 101132066, 891691555, 641152820, 909521973, 370618931, 101123862,
- 856954133, 926364211, 370611766, 101061653, 352723461, 842208788, 640955702, 438067201, 471602358, 179704872, 372001067, 84084758, 957351245, 88933639, 721814288, 180682313, 168431118, 176164366,
- 472388790, 448140316, 726215708, 84935430, 956761421, 88933648, 370542595, 1479231788, 235538958, 235538958, 4194240000, 192767, 335585537, 922757376, 1392526592, 24320, 103166227, 640091911,
- 335939362, 857085719, 909588274, 640747302, 654771974, 101130790, 370611988, 926364211, 339158582, 842216214, 640955702, 102900515, 857084949, 892744243, 589506100, 336004642, 841036566, 640955702,
- 102900003, 101130791, 842208791, 640103991, 118753176, 336008759, 671549191, 118098695, 134285128, 923210759, 118753046, 120063751, 1208420875, 322961671, 319676429, 232787219, 3758953235,
- 219353869, 1074990560, 536939795, 219353869, 319676670, 219028592, 471600653, 235736334, 17275393, 118897928, 118753031, 1342703400, 110695431, 373098241, 336004871, 134686727, 1830029136,
- 219353869, 2903708429, 219353869, 2903708429, 219353869, 588452621, 404232216, 404232216, 4194238720, 117627903, 318808065, 101908480, 336926487, 924194583, 926233910, 589702966, 184820257,
- 1074640656, 3071414544, 420154128, 18436350, 3759347593, 805965903, 336136203, 387178623, 196631, 48299776, 12583168, 1900551, 318767153, 857019682, 119747637, 858994228, 353703474, 353776179,
- 889334549, 858994228, 101979397, 639770915, 355677493, 858986004, 892679730, 144705720, 2417435080, 440410391, 3229663270, 20978214, 4263126656, 3223722624, 222301459, 143655187, 134752296,
- 388047127, 1612326440, 3223722592, 640031360, 220233754, 537727763, 256, 180479, 1140899841, 822149120, 101127703, 857023267, 909587509, 336992023, 654706439, 590689574, 389165845, 101123862,
- 640100130, 858994231, 336929589, 656868871, 926364710, 353769270, 590689045, 925247266, 20067895, 135217175, 1612715273, 1074730004, 272632073, 543167507, 252250133, 169478720, 151523136,
- 341843989, 155193108, 319832073, 354443284, 1074726921, 3070302730, 336793664, 152379488, 171970312, 255855130, 538249480, 252974176, 1074334016, 1611928336, 151524640, 436879375, 135217162,
- 1612715273, 1074795284, 393225, 46202624, 12583296, 1507339, 3866665, 6160461, 119673600, 857085702, 657864498, 119677222, 857085702, 657864498, 370409766, 808465203, 891692593, 589707060,
- 84288035, 892744243, 589506100, 353765154, 805766676, 370419504, 926029335, 875902518, 572925734, 50726407, 857084977, 892744225, 589702708, 101065251, 387395216, 774772503, 387389207, 388907521,
- 773265175, 387389230, 231931159, 403953160, 706221314, 2499886892, 1057818838, 353905196, 3037992706, 873862682, 437917206, 372512278, 274733590, 189399307, 624698384, 607921526, 673759233,
- 673720360, 673720360, 673720360, 3590203432, 823266568, 168430621, 151798079, 185220908, 305208587, 220994144, 739052813, 220994074, 739052813, 269214206, 1009060624, 3941412, 4279042050, 24314577,
- 2818223, 620757079, 637928967, 925247015, 389428791, 117904918, 370611718, 909588274, 640034612, 637929223, 926295591, 387331639, 84284950, 372651575, 118887959, 654706183, 926361126, 640099894,
- 101123874, 370546452, 372651831, 117839383, 656803335, 37103142, 1243443268, 153427018, 453443871, 134548234, 352588033, 1897349912, 991237911, 436929048, 184813575, 644426498, 4245885724,
- 1243378140, 136715338, 453443871, 134548234, 352588033, 1880572696, 991172632, 436929048, 184813320, 644426753, 3021148956, 320019568, 728311324, 134482690, 34216711, 387267352, 1125609751,
- 285480216, 184879105, 17308170, 472189215, 1879394890, 471012124, 36399653, 117965835, 402787098, 387388731, 407050352, 17892373, 185206024, 520161306, 1243358473, 65610, 48299776, 10486144,
- 889192479, 926299185, 909391156, 372388662, 842216983, 118756630, 336926230, 555943430, 908469794, 742992682, 404048428, 104343581, 975387435, 680590883, 795879233, 50663242, 741034284, 674762788,
- 1191710994, 591012654, 33571111, 3237937152, 3221340161, 754983424, 822149120, 353776179, 354616852, 370611988, 587600917, 891691553, 909588276, 639776053, 859190325, 338761523, 657655559,
- 590689574, 220209153, 168629011, 472451692, 689752830, 218721546, 537727763, 2871137056, 20976419, 218960832, 252871955, 471077296, 337389865, 303018001, 218960773, 522503443, 606025784, 262277,
- 29425408, 12583417, 3407915, 4980800, 925958400, 370618934, 369166100, 101061653, 640033315, 909521973, 924267059, 572720679, 875898406, 842217014, 336926230, 389486343, 101127190, 335619874,
- 909579799, 640103477, 571672071, 370607623, 909586995, 75303, 356259213, 3875407366, 523443719, 505295647, 336928563, 353642279, 505295647, 857677619, 1077806878, 352716444, 3019773244, 404232216,
- 404232216, 219028528, 471600653, 235736334, 361562113, 101582357, 353691390, 505295647, 857677619, 673646366, 523443720, 505295647, 320151347, 110903487, 353699342, 236739841, 470682893, 218959388,
- 418709006, 404232216, 1579032, 4278190082, 29360576, 1114304, 318767140, 286590498, 858986004, 892679730, 640100148, 102892835, 370413845, 909259571, 354628917, 892539171, 471602384, 471121940,
- 336479246, 471131390, 350229532, 1086341148, 337428481, 471130366, 349967388, 2148418574, 3774747676, 337386516, 73776, 4278255680, 29360127, 12190140, 16777275, 117904406, 640098822, 909588276,
- 572925748, 335939335, 926029335, 641087031, 103163431, 101058311, 370546454, 909588278, 572925748, 570820359, 926164519, 20067895, 2954040172, 84217349, 134778885, 2416449544, 1008080149,
- 253210646, 1024923407, 548935485, 538973461, 2552255572, 403179528, 1512019976, 3089113119, 1812018194, 2953982994, 235209989, 403214341, 2416445448, 353778710, 1024962581, 253171517, 548935439,
- 538989652, 2552239381, 134748168, 539006984, 3089062431, 196627, 31522560, 10486208, 2162705, 318767149, 387396147, 336925974, 572596998, 873542950, 336926518, 842216214, 875902262, 572728102,
- 119674630, 857085702, 657864498, 452149286, 638799123, 448855578, 320480806, 319668237, 230690067, 304455699, 621941523, 320016933, 329253138, 4078572365, 438707738, 639254529, 319635552,
- 222301459, 548213523, 538976288, 2105376, 4278190081, 29360608, 983200, 336662784, 841036566, 873542966, 572597030, 18490886, 640031296, 448855578, 4267704614, 640031424, 440402202, 50341414, 0,
- 2147598337, 452988160, 10496, 857084945, 892744225, 555951668, 336922146, 841036566, 640955702, 102900003, 589706245, 352723489, 556996116, 219362866, 319651841, 2164133139, 219353869, 319651841,
- 2164133139, 3221295885, 2164133139, 219353869, 319651841, 319643649, 319622419, 319663379, 319622419, 319663379, 319622419, 393235, 49348361, 9437440, 1638411, 3473447, 5046337, 656544512,
- 859191078, 118888242, 841037574, 101979414, 639770915, 389428277, 353776161, 555943444, 875898402, 841029430, 101979414, 639770915, 120992821, 925247266, 389165878, 923141910, 654706452, 926168358,
- 1075189558, 218959388, 236723214, 1678642445, 319627265, 3774745875, 219353869, 319627265, 3774745875, 219353869, 319627265, 3774745875, 1930629901, 218959388, 236723214, 336465165, 404232216,
- 404232216, 404238337, 404232216, 324016152, 320015629, 2685603085, 319622419, 319622419, 218960800, 218960659, 404246547, 404232216, 483399704, 235736334, 219028508, 83889677, 3774809088,
- 2684420098, 1023417088, 1493191424, 26368, 857084947, 572724531, 370414854, 909259571, 589706293, 640955683, 102900515, 118894867, 370607623, 909259571, 589706293, 909522723, 117843495, 387319303,
- 926365206, 571683382, 370414854, 909254963, 589706293, 352723461, 556996116, 875902514, 570762022, 370414854, 909254963, 589706293, 134876696, 235801104, 235556874, 235932174, 235544586,
- 1208617279, 268830218, 235801176, 270737674, 1041502209, 50662417, 101976072, 2383348747, 219353869, 319619073, 16715027, 219353869, 319619073, 16715027, 219353869, 319619073, 2281770259,
- 241176074, 235801098, 2014185994, 4262333962, 1309281241, 235802379, 638454282, 387133458, 135272707, 50726164, 17174536, 218960656, 218960659, 219389971, 219353869, 329257741, 320015629, 1248525,
- 4278190082, 16777950, 3670178, 318767202, 387319345, 370546454, 808465175, 372388657, 587600917, 891691553, 858994228, 925247270, 909522224, 389428791, 370611734, 101058326, 656811559, 101123622,
- 656814359, 101127731, 101058310, 640758055, 825304870, 640099878, 909522726, 387323415, 370611734, 926299958, 27338294, 218432003, 18557967, 320015826, 222363149, 1561137939, 68027915, 437987078,
- 772350528, 51186955, 151852548, 756812074, 79109392, 84429834, 437987078, 856826432, 50725906, 67439629, 134483223, 220861188, 487599388, 16908805, 67963440, 235603979, 218960649, 218960659,
- 470616851, 740294949, 100993804, 50530561, 218959127, 17367555, 218498052, 436734427, 187441184, 50726156, 50398736, 219612161, 17042189, 218562819, 100992258, 252320525, 512, 3221348607,
- 788570113, 15616, 857084947, 370414899, 909259542, 859125046, 875902514, 572728102, 370414854, 336933683, 639771398, 842216757, 640955702, 102900515, 857084931, 892744225, 555951668, 319817250,
- 1227558925, 726215724, 320015632, 319643661, 940576019, 272115752, 219353869, 269684064, 2147552531, 219353869, 319652094, 319651841, 726215808, 2150385963, 319622419, 319622419, 943204480,
- 219381800, 4262662925, 320015731, 320015629, 1280, 188671, 50372609, 184551168, 520097536, 859242496, 353706805, 857158963, 892805941, 556209443, 286594610, 555943444, 288695842, 2688562740,
- 2688589984, 3768623264, 639270913, 2164136486, 3223725594, 1616945248, 1614831712, 438755424, 639287550, 1073814054, 33564186, 3237937152, 3221291010, 352325632, 823590912, 926029335, 657733121,
- 119678503, 18089473, 389490481, 655237902, 243073295, 672015118, 243531278, 1763204097, 237178648, 259850510, 237178407, 243531278, 402981160, 67115113, 3237937152, 3221323778, 771762432,
- 1174419968, 554893312, 353703474, 387396147, 839064854, 101979414, 101983011, 891691555, 587600931, 590685730, 288695842, 352663092, 19346739, 924194580, 657732918, 621152038, 386271010, 926036758,
- 807806774, 471089153, 1293097523, 320015635, 674766861, 947927080, 272115752, 18619412, 4266492036, 404232349, 404232216, 477102360, 235736334, 219028508, 3221294605, 321917980, 320475981,
- 219365408, 942150413, 942155832, 337389624, 471089153, 1293115552, 236716287, 470682893, 218959388, 404231182, 404232216, 100669464, 0, 2147565570, 335548160, 503322880, 889201408, 554893312,
- 286594610, 555943444, 288695842, 873674292, 890577702, 590689842, 573911809, 590690054, 572986900, 335939334, 857085463, 909588018, 640034612, 448790848, 4263126566, 640031296, 437921370,
- 2147565606, 1076238912, 449193536, 218959148, 437922829, 218959148, 2147560461, 16718374, 438707738, 639238145, 639287550, 438747200, 641728767, 639254694, 370547232, 437655092, 873862682, 1709590,
- 16449281, 21365056, 917504, 657536768, 859191078, 370618913, 570820359, 135233673, 70921, 252184853, 1226443392, 336793728, 2148537108, 4278255625, 25166074, 4194630, 318767118, 118888241,
- 572596998, 926361127, 2159489590, 352913423, 152371455, 176164616, 2151088410, 336859920, 159387667, 256, 3221232128, 234907137, 825688064, 909579799, 657723701, 101123878, 276826388, 320082963,
- 2835972112, 151523200, 352321813, 2148468745, 16783882, 436224000, 1711341569, 3584, 101134647, 288695847, 389429044, 4145288727, 336793728, 2148537108, 260090121, 18155784, 134812928, 436895759,
- 768, 188671, 251699201, 385880832, 286326784, 556996116, 288699954, 555951668, 857146914, 285287185, 438702371, 639270913, 2164136486, 2688558618, 2692743584, 3237896193, 438707738, 639254529,
- 16734758, 16711681, 33554433, 3774872319, 2684438017, 486542848, 823328768, 370607623, 926032179, 640100150, 372310818, 909588274, 555951655, 386271010, 135233673, 70921, 252184853, 169478784,
- 2148145674, 352913423, 135594239, 2533429001, 336793728, 2148537108, 155844105, 319848457, 252974100, 4211015936, 1174528255, 234921984, 823590912, 640103991, 119677219, 370611974, 260093746,
- 4279568648, 134812928, 436895759, 319848471, 269685780, 16779648, 3758160639, 2684438017, 3584, 370618643, 555943431, 925247266, 3073521207, 151523200, 352386837, 2148468745, 2533431818, 336793728,
- 2148537108, 131081, 33554432, 8388864, 1900559, 556864256, 336926258, 654706439, 875898407, 370607926, 355940146, 555943444, 808789538, 471113729, 320068115, 471602138, 287969754, 4263126746,
- 19274368, 403971200, 235840526, 337120932, 228814876, 449880845, 1713702, 4279238657, 31916505, 3342503, 925963008, 387331638, 117839382, 656803334, 101130790, 370546452, 909522742, 640034598,
- 889652998, 572728884, 336925958, 842216214, 640955702, 521240099, 522146386, 522130709, 153047634, 168429851, 728986411, 740105516, 728986411, 218960658, 2148340499, 219353869, 521216001,
- 522130709, 522146386, 153031957, 152766729, 740105516, 728986411, 740105516, 319632145, 226495763, 218960659, 131091, 46202624, 12583168, 3735588, 389087488, 117904406, 842413847, 336992023,
- 570820359, 874915623, 120010551, 656876038, 926364710, 822293046, 118961943, 118756887, 656541191, 926164519, 20067895, 151588927, 168061444, 152046106, 436893705, 151588874, 168061444, 152046106,
- 436893705, 758841742, 151585339, 169478768, 1879640368, 3070302730, 169478672, 151284228, 436867081, 151615498, 169478672, 151284228, 436867081, 4262033418, 758842071, 436863291, 151613450,
- 169478704, 16779632, 3086948864, 3372328449, 5632, 856109313, 118888242, 640091653, 572733239, 624371239, 18224950, 376392797, 4279306248, 336925440, 376458506, 17893384, 336925440, 364090113,
- 299896596, 3004698383, 3759084565, 986897, 4278190081, 20972256, 5832864, 336925440, 355676950, 352723491, 102900501, 370414869, 909259571, 640955701, 875897635, 588591923, 353699362, 858986004,
- 892679730, 589506100, 355611445, 102900501, 370414869, 909259571, 640955701, 875897635, 891495206, 892744243, 589706293, 3490062883, 2550666268, 336077079, 1075059740, 337386516, 144181256,
- 337386516, 471602240, 144181268, 471602184, 471089172, 554177564, 336107543, 1075059740, 1879120916, 672928832, 471865121, 471089172, 339743772, 671621148, 339743772, 1075059740, 136846356,
- 1075059744, 337386516, 538711104, 472391959, 471089172, 131100, 46202625, 12583231, 4849712, 573636864, 236262662, 369493762, 859190839, 370611762, 909586995, 372388662, 842208791, 859190839,
- 370611762, 36579126, 640955687, 119681283, 587600917, 640100130, 101058342, 370546455, 892744243, 536946229, 1833046797, 352389191, 321194504, 67447837, 84151822, 740105516, 235799557, 489424132,
- 134882579, 1191706901, 219365997, 118099474, 100795659, 135007257, 654967557, 238035224, 219398145, 1715472146, 134810687, 455413516, 622530576, 269490981, 202319131, 1057753352, 302465126,
- 3506311949, 168260364, 151782410, 202966534, 806884613, 815905, 4278190083, 16777920, 1638592, 3735597, 842076928, 842209046, 588584214, 286590498, 891691555, 859190289, 389428787, 389165875,
- 353703447, 589497876, 892675618, 657863697, 336922146, 909259542, 2686858293, 956833042, 556801044, 471109679, 137958428, 1278247453, 239341076, 348132380, 173808668, 168431118, 3221294606,
- 337382930, 4263587600, 18095344, 236721216, 1141800978, 349967374, 269753372, 471076865, 168431192, 168431118, 196622, 29425424, 12583280, 2359323, 620757043, 640033585, 640037159, 875898407,
- 842217014, 336926230, 117835271, 117835313, 892675618, 101979443, 859190275, 590624050, 352716322, 20067092, 453484560, 67634191, 827338527, 523194417, 251922436, 790714139, 795946912, 521146401,
- 269491763, 338303040, 755370502, 793784631, 925978416, 101320237, 798501396, 554700833, 558891311, 504369199, 1056563, 4278190082, 29360576, 1769664, 16777271, 570820401, 926164519, 639770935,
- 859190325, 874915617, 389166647, 18093591, 874915633, 842413879, 118756887, 372384007, 587600917, 336992033, 19006983, 436887735, 705235210, 319671806, 855706899, 168364330, 157288986, 157329918,
- 436887561, 705235210, 319632129, 3455978771, 168364330, 1613299994, 436865289, 219359498, 170464013, 151587354, 4263119456, 436887702, 151609354, 688527882, 319622419, 169478697, 131081, 48299776,
- 10486144, 3866655, 556865280, 892745266, 908535348, 589706293, 640026402, 101065251, 102044693, 370414854, 640759574, 842413876, 875894551, 372388662, 909579541, 336992050, 570820359, 1879150631,
- 992164387, 674760235, 1242896413, 726215724, 1093088810, 117901175, 237438740, 655231498, 117904391, 336023559, 975380487, 138882595, 942150161, 724313104, 84094025, 674187791, 128395073,
- 117901076, 235570727, 663095822, 336004871, 117919751, 512, 2147672319, 520134657, 15104, 841036055, 875902518, 892741414, 572728884, 589702663, 352716322, 101061908, 370545685, 909586743,
- 370612018, 570820372, 336930599, 639771398, 101135669, 874915618, 594542992, 725295930, 489175046, 743052568, 707479852, 2000758582, 118753104, 117901136, 237438740, 655231498, 117904391,
- 591012640, 285755182, 272115730, 1227566116, 251986732, 1093152586, 122738983, 336023559, 654771975, 235801222, 120030730, 1312519, 4278190083, 29360576, 1114304, 6160466, 639776512, 926164519,
- 842217014, 336992022, 117835271, 101061937, 857084949, 875902514, 909453094, 389165875, 352716309, 858985493, 590624050, 859190325, 353703474, 856954146, 892678707, 891758132, 336926230, 572596998,
- 909391142, 891691543, 842217012, 101979414, 289153760, 1007751441, 289153570, 1007751441, 555159938, 388044567, 1544096017, 454363401, 269488144, 319622419, 269488144, 1211634971, 2097024273,
- 1195970829, 168693258, 3222146570, 1142824482, 572661278, 507780638, 993468958, 387128837, 320282913, 21038366, 587544833, 269494294, 319625232, 270011667, 371724304, 271779107, 286080095,
- 1597771025, 168431225, 168431118, 131086, 46202656, 12714288, 5177411, 640750336, 101123878, 336925958, 35526422, 909521459, 909522229, 589706293, 336922146, 336926486, 572720646, 909518630,
- 640955701, 103163687, 387319303, 101979415, 891691555, 909522741, 891691525, 842217012, 101979414, 219612302, 1243091994, 1311769399, 793784622, 556735253, 354103073, 723464990, 1228276800,
- 203035672, 201655320, 674765325, 219822120, 223150348, 218960659, 2852197139, 134482701, 2031427847, 772495418, 1345268809, 654919473, 791617817, 153557281, 506666823, 1460415033, 555055418,
- 184813575, 68619533, 942176521, 158935096, 331159300, 320015629, 1248525, 4278190084, 16777952, 458944, 2031637, 318767145, 842216244, 589501717, 287379733, 640955701, 102900515, 102893333,
- 370413845, 17904435, 288699954, 589506100, 2416488465, 19963912, 2417434880, 440410391, 538584614, 639262721, 18881062, 671615112, 27328032, 388505696, 672604449, 16718374, 2147558938, 438731006,
- 639238145, 33587454, 3238001407, 3221341697, 687873792, 823328768, 353703474, 353703446, 370611988, 555943431, 925247266, 892679735, 892810804, 101922356, 640098851, 338899765, 923995616,
- 235352393, 4262791177, 151524736, 1227884558, 305795895, 319953691, 3221307456, 185797907, 1225996888, 319752502, 252908307, 323565065, 319510586, 335418125, 454169363, 196635, 48299776, 10486144,
- 1966101, 318767148, 857084949, 892744243, 909521459, 640037941, 572597027, 859112710, 336926258, 570761990, 370414854, 909254963, 589706293, 3223861344, 589314088, 975381306, 3237888035,
- 2147554061, 640031264, 220266010, 34411283, 320015616, 3766485261, 674773032, 589511203, 2903712570, 437921408, 219398182, 219353869, 67113741, 3237937152, 3221323778, 704647680, 1577075200,
- 286457856, 909391155, 353776179, 873542421, 572728102, 102893318, 842208533, 589501461, 355611413, 354624276, 858986004, 287514897, 892744243, 891429685, 892547892, 875897379, 875901747, 842212646,
- 842208533, 588518677, 588518691, 892674595, 892674595, 892547892, 475054132, 1344017428, 346035228, 471109660, 1343230032, 1343230032, 24122396, 342913200, 269504540, 269504592, 3573423184,
- 270012432, 269490192, 269490192, 4270850328, 471093296, 22025244, 471602384, 806624324, 272633872, 471109648, 1627299841, 277877788, 269500432, 538711088, 269490192, 269490192, 269488152, 83890200,
- 3237937152, 3221323778, 771762432, 1174419968, 25088, 370413841, 370422579, 892744243, 857084979, 859125298, 875902514, 37561126, 640100148, 875897635, 572597030, 859112710, 570758423, 909583911,
- 370618931, 337970695, 640091655, 909587509, 872486423, 355611443, 355611413, 589501461, 589501461, 590689570, 875902242, 337392435, 673724432, 674791480, 220215336, 319623955, 857346893,
- 3237876764, 2684427284, 2164149555, 218959388, 236723214, 17698061, 404232276, 404232216, 278986264, 271585312, 537931792, 269496336, 4270850352, 672928960, 673724472, 321402936, 1074990349,
- 320475936, 338694989, 1625562140, 416289613, 404232216, 806885400, 218959388, 236723214, 17698061, 806359092, 806363152, 271585296, 83890208, 3774808064, 3221291010, 352323328, 687873792, 17664,
- 353706515, 590624051, 859190279, 487993907, 287379714, 588325685, 288695842, 20133428, 372388625, 101978389, 588579619, 336925986, 336933683, 892482355, 892482357, 589509685, 589509685, 2684925986,
- 388089864, 4280358800, 438312960, 18490918, 639246432, 819993126, 271585296, 271585312, 537931792, 143655184, 134752296, 388047127, 2701008936, 4263534593, 18491008, 4263909888, 645923200,
- 436272922, 806355238, 806363152, 271585296, 271585312, 512, 2147664127, 1157677057, 20224, 857084947, 656610611, 572728102, 571806982, 370414854, 370414899, 926036787, 588591927, 336922146,
- 842216214, 640955702, 859251491, 909588274, 656880693, 656614182, 892744243, 589506100, 856098338, 588518706, 875897379, 134876832, 218707744, 219352339, 319623955, 151851789, 168304695,
- 1879707150, 168693258, 208955408, 252667403, 1946946406, 235540584, 175114766, 272650254, 17842192, 2416839336, 219351351, 218960704, 319635475, 244332297, 235801098, 2416839178, 268838404,
- 69600784, 168431248, 283250190, 1052688, 4280287237, 16777952, 1638560, 2818081, 4128821, 336663296, 842216214, 926233910, 892679734, 589506100, 589706293, 17179169, 355611445, 621220885,
- 572724245, 859059509, 336926514, 892674595, 389165876, 572724245, 859059509, 438706226, 1378228960, 539826453, 4262269747, 18025952, 135082848, 269543678, 272633872, 1074794512, 269488144,
- 2701033473, 438707738, 638133538, 757098007, 320015648, 228129790, 2382563430, 3759149280, 283119632, 269541392, 3759149280, 131088, 31522560, 10486208, 3145743, 841028352, 336663830, 572596998,
- 873542950, 640943414, 352723491, 875897621, 102900518, 370414869, 892744243, 336933685, 909259542, 20985141, 640031296, 448855578, 704718374, 235538958, 168431232, 168431118, 168722446, 2684423690,
- 3237878310, 438707738, 639254529, 235801208, 173035530, 3490319886, 168693258, 235556944, 6818318, 4278190082, 29360608, 983200, 318767151, 353776161, 587600913, 891691553, 322319377, 842208788,
- 859125046, 875902514, 891495206, 572728884, 588584198, 336922146, 1077097238, 639254529, 3237878310, 2720409114, 235538958, 235801152, 168706058, 171970058, 1074400782, 438738945, 639287550,
- 1073814054, 3372099098, 168693258, 168431168, 235552782, 239077902, 920074, 2097154, 29360384, 1245312, 922746919, 842413873, 118756887, 336992007, 656541191, 624174631, 389166641, 117904406,
- 118756887, 656876038, 691483686, 169478816, 2324302089, 436865289, 17408010, 169478761, 2324302089, 436865289, 151625738, 151625943, 2299140618, 169478793, 178260233, 151628314, 2299140618,
- 169478793, 178260233, 33557018, 16384, 2147606529, 654316288, 824508416, 656541191, 926364710, 926164519, 387396150, 822416406, 640098822, 657930036, 909587494, 370612018, 3607168788, 169478816,
- 2324302089, 436865289, 4262043658, 169478807, 2324302089, 436865289, 151625738, 151625897, 2299140618, 169478793, 178260233, 151628314, 2299140618, 169478793, 178260233, 33557018, 8192, 2684461057,
- 654316288, 823328768, 118756887, 656876038, 656541191, 926364710, 823341622, 101127190, 120006434, 640098822, 909588276, 2700547890, 436865289, 176785674, 151587354, 2853833376, 436865289,
- 176785674, 151587354, 169478816, 178296577, 151587354, 151620234, 2685016586, 177733129, 151587354, 151620234, 2685016586, 33556745, 3774816256, 2147590145, 654316288, 823590912, 657733175,
- 117908006, 119678503, 387388422, 823341590, 640103478, 654772002, 101130790, 370611988, 2700556082, 436865289, 176785674, 151587354, 2853833376, 436865289, 176785674, 151587354, 169478816,
- 436903959, 2315847946, 168364426, 161483290, 436889857, 2315847946, 168364426, 161483290, 65545, 16777248, 8388864, 922746899, 842413873, 118756887, 336992007, 656541191, 691283495, 169478816,
- 2324302089, 436865289, 3607732234, 168364448, 2307459610, 151656970, 436903945, 1073742080, 536936448, 318799873, 824508416, 119678503, 387388422, 387188231, 926364182, 385954870, 169478816,
- 2324302089, 436865289, 3607732234, 168364448, 2307459610, 151656970, 436903945, 536871168, 2684444672, 318783489, 823328768, 387188231, 926364182, 926029335, 656880694, 2697536038, 436865289,
- 176785674, 151587354, 18483872, 436903991, 2315847946, 168364426, 161483290, 536871168, 2684444672, 318783489, 825688064, 926164519, 387396150, 389166647, 117904406, 2697536006, 436865289,
- 176785674, 151587354, 1763314336, 169478816, 2324302089, 436865289, 630794, 4278190082, 25166560, 852128, 318767132, 353776161, 554771217, 873538321, 556860214, 336926258, 572596998, 909391142,
- 444596608, 2164146214, 39003712, 755697754, 538639904, 2684422957, 16718374, 16711681, 639238145, 134979838, 539831584, 33557256, 3237937152, 3221340161, 452988672, 554893312, 286594610, 555943444,
- 288695842, 571684404, 370414854, 892744243, 20981300, 640031296, 448855578, 230303270, 218960659, 3221295891, 2164136486, 438707738, 639270913, 219377918, 219353869, 33559309, 3237941248,
- 3221319681, 452988672, 856883200, 286594610, 589497876, 288695842, 571684404, 370414854, 892744243, 3763349044, 438707738, 640031456, 320015754, 320015629, 438747137, 639271166, 2147555878,
- 1895704090, 319622419, 319622419, 512, 3221299200, 520118273, 15872, 35467573, 858986004, 892679730, 589506100, 859190325, 892744243, 589506100, 84280866, 370410013, 909259571, 640955701,
- 875897635, 842216246, 640955702, 102900515, 1075455494, 438707738, 135733568, 219353869, 540483848, 438697985, 640031296, 388055066, 320015624, 924911629, 541648928, 640031264, 639254554,
- 320935688, 538119437, 541598007, 640031264, 639254554, 320935688, 538119437, 131127, 18874368, 6291904, 4063262, 37561600, 589506100, 353699362, 858986004, 587600917, 352723491, 858986004,
- 624309810, 872561969, 572728102, 336925958, 355676950, 589497876, 336922146, 842216214, 3221304886, 440408614, 1075455526, 218634017, 135074579, 4280301345, 1075455488, 438707738, 135733568,
- 219353869, 540483848, 538986648, 438707738, 136714816, 219357463, 924848909, 538986529, 438707738, 136714816, 219357463, 924848909, 4194240256, 178687, 184600321, 587208448, 1006644992, 1426082048,
- 335609856, 640091655, 909587509, 336664087, 640091655, 909587509, 572855831, 909583911, 370618931, 337970695, 640091655, 909587509, 822416919, 656811782, 389429030, 51779350, 640091697, 909583911,
- 370611735, 909583891, 370619959, 101123591, 404238337, 404232216, 404232216, 404232216, 16717848, 218959388, 236723214, 17698061, 404232372, 404232216, 344981016, 134683418, 454693908, 336857095,
- 134683418, 454824724, 348981255, 437978888, 117969940, 2415991323, 218959388, 236723214, 4262333709, 219028548, 471600653, 235736334, 404232324, 404232216, 236728344, 470682893, 218959388,
- 135581966, 337255175, 453445652, 336724250, 437978888, 117904660, 3338541852, 119216660, 437523464, 526107, 4278190081, 16777920, 1114304, 639763712, 926164519, 842217014, 336992022, 17171975,
- 594953472, 1982013986, 594953541, 1982013986, 993740096, 1161509770, 2319137605, 4537147, 4278190084, 16777920, 1114304, 3211301, 83886141, 640099874, 909522740, 387330611, 101127190, 119940870,
- 370546438, 926298675, 119940918, 572720646, 370419494, 892744243, 572728884, 102905606, 857084949, 875902514, 1157628198, 572662646, 1162180131, 572662646, 178353699, 285936908, 975776058,
- 218893073, 556600842, 321006881, 303173133, 3222473998, 219353869, 1074926094, 2319137605, 1162165051, 998914875, 213599547, 336333323, 202646050, 269224714, 226827035, 218960659, 320017171,
- 320015629, 1248525, 4278190084, 16777920, 1114304, 3276838, 83886142, 640099874, 909522740, 387330611, 101127190, 909518598, 387330611, 657864470, 572728870, 386270982, 338114070, 909259542,
- 589706293, 574031394, 370414854, 892744243, 75316, 572749381, 1165370146, 572749381, 2792760098, 589509897, 251988277, 1175192847, 205925677, 185011973, 235737869, 219025938, 319668243, 302910739,
- 994394130, 993757755, 993740101, 1161509770, 656875131, 67440414, 858990608, 33885992, 319666950, 319622419, 219353875, 219353869, 67113741, 3237937152, 3221291010, 486543616, 855648512, 570753024,
- 874915622, 859190839, 370611762, 101058324, 352723459, 842208788, 640955702, 857084951, 875902514, 102900518, 336929287, 892482355, 74548, 572749381, 1165370146, 572749381, 2507547426, 219353869,
- 1913786894, 302910739, 319622674, 3222278288, 1161826320, 998914875, 994395451, 993757755, 324010309, 320015629, 538119437, 219353869, 2366837517, 269488144, 1024, 2147614720, 285245441, 687873280,
- 18688, 372384019, 101979414, 572596998, 875898406, 570766902, 370607623, 909586995, 336012839, 909579799, 640103477, 354878983, 352723491, 858986004, 857084949, 892679730, 892744243, 589506100,
- 589706293, 29361698, 878130432, 4281685812, 878130432, 1694586676, 185273367, 202839820, 2131495691, 336860180, 336860180, 235544800, 236980750, 537790986, 168693258, 168431136, 880804110,
- 1463104855, 894907444, 1748260661, 336860180, 336860180, 185341832, 387386379, 202050316, 168697937, 169872906, 537529870, 235538958, 235801120, 3584, 1073872896, 251691009, 654318336, 1056977664,
- 1459636992, 1862296320, 2264955648, 2667614976, 43776, 372384019, 101978389, 639770915, 909381941, 353706519, 842216212, 590624053, 856954119, 892678707, 572728116, 353706519, 842216212, 590624053,
- 856954167, 892678707, 572728116, 353706519, 842216212, 590624053, 856954119, 892678707, 572728116, 353706551, 842216212, 590624053, 856954119, 892678707, 572728116, 353706551, 842216212, 590624053,
- 856954119, 892678707, 572728116, 353706551, 842216212, 590624053, 856954119, 892678707, 572728116, 353706519, 842216212, 590624053, 448790848, 4263126566, 640031296, 537923626, 271585296,
- 537923616, 269488144, 806359072, 269492240, 269488160, 269492240, 283119664, 1880154128, 270536720, 537931792, 270536720, 537923696, 271585296, 537923616, 269512720, 806359072, 269492240,
- 269488160, 269492240, 438730753, 639238399, 72230, 272639514, 537923616, 270561296, 1611669520, 269492240, 548409376, 270536720, 270536800, 1880104976, 537923616, 537968656, 270536720, 269492336,
- 274731040, 537923616, 270561296, 1611669520, 269492240, 544215072, 270536720, 270536800, 1056784, 4278190084, 29360576, 2359488, 5767247, 318767200, 353699362, 336925969, 909259542, 909587765,
- 926357015, 873542966, 101123878, 119940898, 640955655, 926232855, 389429013, 370611765, 370611479, 656807191, 656807207, 387388981, 656811829, 117907989, 117900821, 389363509, 924202289, 101127479,
- 101134647, 926037287, 320015648, 1074990349, 1229273920, 270341410, 575546121, 323304247, 320421907, 302779924, 202058004, 521605910, 705366817, 219419672, 134686476, 499138609, 403572763,
- 353703462, 3221298977, 4263513363, 223363826, 1611469587, 589107216, 369626395, 303110145, 303170823, 269553435, 1236996877, 84232976, 100812801, 205391114, 20971780, 205915910, 50415363,
- 101073676, 151142401, 201458239, 2739015233, 33948238, 2550728008, 1174537477, 131081, 48299776, 10486080, 2097170, 118952704, 370611206, 909588274, 640100148, 335939362, 352723457, 556996116,
- 875902514, 2852725542, 168364458, 163580442, 436912137, 67850, 219353869, 319627265, 1761676563, 436906409, 3221817610, 3221887498, 436865289, 219393534, 219353869, 50336525, 3204382720,
- 3254878210, 553651456, 13568, 118887937, 654706179, 322381350, 823604790, 387396150, 117904406, 640098822, 657930036, 824521766, 117904406, 118756887, 656876038, 926364710, 2298556982, 2147683341,
- 218961668, 75498252, 436886807, 151613450, 169478768, 1515849993, 165150217, 156916233, 169478665, 1879640432, 3204520458, 4262270724, 51121472, 17635076, 2064387520, 175114505, 158337562,
- 169478665, 436885849, 169478666, 436885849, 1879640330, 1879710218, 131081, 48299795, 10879296, 3801106, 336990976, 370607879, 570820372, 874915623, 842413879, 842208535, 336926230, 101122574,
- 891691555, 909522740, 589706293, 118756643, 640100102, 926364725, 3507885878, 2391672583, 335939335, 252677639, 2501117838, 793784624, 119546905, 201851908, 940508938, 320020520, 185311247,
- 320016288, 336107777, 109545222, 117966612, 237637254, 1075840902, 707874608, 68627007, 168299522, 387647241, 356530216, 2416838920, 168693258, 134811280, 234881280, 3053580031, 335582721,
- 822149120, 654706179, 892675622, 656810531, 624375334, 18224950, 335909038, 2953775883, 50467339, 1610681099, 17764116, 195100260, 302121739, 185577483, 2416251915, 986888, 4278190081, 16777920,
- 3408064, 856752384, 336926258, 354624262, 572720660, 118568230, 572724531, 588330278, 875898402, 892547894, 842217012, 923866390, 926102819, 370618934, 3221292820, 320015648, 219357197, 3016954637,
- 539368160, 219353869, 218960672, 4088648467, 169478710, 1392576777, 219409918, 220205837, 17634067, 641782579, 318767386, 538119437, 219353869, 1087622654, 168364343, 67111450, 3237937152,
- 3221340161, 1124076288, 1526746880, 571670528, 909391142, 353776179, 876021268, 102900518, 387322901, 101061909, 857084949, 875902514, 875898662, 842216246, 892679734, 875902518, 102900518,
- 387322901, 587600917, 889659939, 339162678, 639771398, 859190325, 570496562, 909391142, 353776179, 173016596, 168431118, 793120270, 456073505, 790304021, 456073505, 1612326421, 354630179,
- 555822875, 638917423, 488857626, 250092309, 235801098, 4262332938, 235801288, 235801098, 168712193, 168693258, 555224586, 421605167, 130484519, 555296521, 421605167, 436668711, 591012646,
- 421988615, 556740385, 118040345, 1477518874, 169420553, 168431118, 2130578958, 235538958, 235538958, 4294902784, 2164441087, 771801345, 1308636416, 21760, 907489555, 370611766, 924256022,
- 640103478, 101123878, 908470054, 372651831, 102110743, 370607879, 101058326, 640024871, 389428791, 656815639, 822552102, 335939351, 924194327, 387331639, 117900822, 640099846, 389494310, 656803351,
- 2468816422, 440681756, 521277472, 337123424, 184686651, 67569690, 1764491531, 320019494, 143547164, 335939074, 145816840, 335939074, 184906448, 2436043535, 387399218, 35142421, 134683147,
- 721554180, 320611945, 3131120659, 371019301, 1941635350, 437521430, 422074656, 407050080, 17892373, 168494344, 520161306, 1243358473, 1868176714, 134747142, 3489728002, 134747142, 341484290,
- 118689576, 406661157, 68491331, 84410641, 135924490, 621354753, 491407900, 302748186, 3806749, 4278190082, 29360320, 721063, 318767143, 924194580, 657732918, 117835558, 858986004, 102900501,
- 857084949, 892744243, 589506100, 589706293, 805708323, 404232216, 404232216, 537727792, 320015648, 319651853, 320867603, 319635469, 236744705, 470682893, 218959388, 319663118, 218960832, 218960659,
- 319676435, 131091, 33554432, 12910848, 4784153, 840237312, 101979414, 639762987, 859190325, 640098869, 909588278, 855971351, 924260146, 842216246, 101979414, 386343715, 353776179, 589497876,
- 120006434, 572728070, 909391142, 657929011, 891691555, 3758175796, 219353869, 319627296, 152309011, 537659654, 4262400015, 152117312, 285824598, 320015648, 1515851533, 320015631, 152117261,
- 285824598, 320015648, 1515851533, 320015631, 327196673, 320015629, 1343425805, 102304786, 151652368, 2054819378, 218960654, 327188499, 236129549, 319715962, 2148732173, 218960768, 131091, 46202624,
- 8388864, 4784175, 842208000, 909580055, 372388659, 587600917, 857147171, 336926258, 572728070, 101132071, 639771427, 859190325, 589772595, 875898402, 840237366, 101979414, 639762987, 859190325,
- 640098869, 909588278, 538973719, 1448478993, 220205321, 252515091, 219109978, 537727763, 1448478993, 220205321, 252515091, 219109978, 3439399699, 219353869, 319627296, 152309011, 537659654,
- 17764367, 2054819456, 218960654, 327188499, 236129549, 319715962, 2148732173, 218960768, 2147548947, 319622419, 319622419, 420221520, 168300550, 131081, 48299815, 10027296, 2031641, 909181184,
- 370612018, 856098580, 336926258, 570632966, 874915623, 657921847, 20125447, 305468195, 2198999690, 320015740, 1762252557, 307237659, 2319773714, 23679100, 2316440199, 2199008531, 319622419,
- 890458131, 2319678738, 16797821, 3237937152, 3221291010, 25344, 587600915, 352723491, 857084949, 859191090, 336926258, 656548614, 102900518, 370414869, 909259571, 640103477, 859190325, 336926258,
- 336922119, 842216214, 875902262, 389165878, 909259542, 589706293, 587597602, 892675618, 589506100, 875898402, 875902519, 102900518, 370611221, 2030636736, 151919636, 336464397, 337386516,
- 218762772, 337382921, 219023737, 437921299, 235737894, 471087369, 168626446, 471077902, 236196892, 235474186, 154735644, 638782734, 321264154, 156696845, 957619214, 319622665, 639244838, 151915795,
- 236721273, 235539721, 471602196, 168694804, 470681869, 235501844, 438702861, 219358746, 339282190, 218697244, 336858634, 336862236, 33557006, 3237941248, 3221319681, 1056967936, 840105984,
- 336925974, 639771398, 909391157, 370414855, 909259542, 875902262, 372388662, 101979413, 857016070, 336926258, 570567430, 909391142, 775238451, 875902210, 372388662, 943204544, 943204392, 591012696,
- 237189667, 672008714, 170928965, 1208618510, 235801160, 1160458250, 168431144, 952107278, 942186536, 681584696, 589879352, 975381306, 235546659, 757598734, 570765898, 235538958, 235538958,
- 1244792098, 235546669, 4278321166, 46137343, 12648833, 4784164, 389092096, 859190325, 353703474, 892679703, 842217012, 336925974, 370546439, 654706183, 925246977, 822162998, 857016070, 336926258,
- 570567430, 909391142, 775238451, 875902210, 336926519, 842208790, 951658295, 305670184, 168431118, 144644110, 335939074, 145816840, 335939074, 505115137, 235801136, 172509194, 805965326, 19416363,
- 591012655, 3137409556, 942159505, 248326200, 170401564, 671747598, 108800304, 34080788, 114295046, 34080788, 68051966, 168431138, 168431118, 839197198, 52964682, 587801859, 402234, 4279238657,
- 32506300, 1573056, 573636864, 101058311, 35525653, 1043797527, 640955651, 19277607, 3171288832, 789779984, 437928275, 321868609, 113053718, 1342423041, 622075399, 526149731, 1545538829, 337994600,
- 55576350, 512, 3221340415, 453033985, 9472, 859190291, 353703474, 909391155, 353776179, 372388629, 891360533, 858994228, 101978373, 639770915, 325062965, 2148732173, 319622419, 4263253040,
- 806624320, 337403905, 471113982, 319660033, 538971411, 219353869, 806624288, 2149323824, 471134462, 268506140, 4278125312, 180479, 805356033, 1107311104, 822149120, 101123878, 875897607, 572728102,
- 102044934, 369493766, 926291479, 102053686, 857019654, 656815157, 387330869, 909579799, 53753141, 370414883, 909259571, 891421493, 355611444, 217317652, 85237774, 537727809, 1109988109, 151454994,
- 419762697, 3760462905, 88153124, 202285076, 652271628, 639262746, 269488240, 50968833, 403899424, 219353869, 624167452, 67441417, 288688391, 573967645, 908234896, 68363021, 168362784, 4262420495,
- 639246449, 1610684966, 269488144, 4244570624, 179455, 755023873, 14592, 924197687, 355939894, 924194580, 892679735, 37631798, 656811828, 101065254, 587662855, 101123874, 858986007, 101123590,
- 656549143, 859191078, 118888242, 234986758, 185730834, 1493961740, 772081187, 67441970, 1279662867, 50601801, 890579282, 235341575, 33948778, 33623558, 185273367, 202839820, 1057753867, 100861197,
- 118385411, 355796743, 50614825, 1179404575, 84153115, 103690773, 207168261, 285871116, 3121484295, 336860180, 336860180, 512, 180479, 285261825, 9216, 117838885, 640098822, 909391142, 389166647,
- 120002070, 387388422, 909586966, 925312820, 640103478, 1157628450, 998914875, 994395451, 993757755, 124318021, 336029703, 1460078343, 117901143, 1984282644, 589439523, 1984251254, 589439523,
- 124269686, 124258068, 118753031, 336025431, 33556231, 3237937152, 3221291010, 603984128, 875888640, 842413878, 353768983, 101123604, 640034594, 875968279, 572925735, 387188231, 335939351,
- 1160910359, 998914875, 994395451, 993757755, 124318021, 336029703, 1460078343, 117901143, 1984282644, 589439523, 1984251254, 589439523, 124269686, 124258068, 118753031, 336025431, 33556231,
- 3237937152, 3221291010, 603984128, 570753024, 874915622, 859190839, 370611762, 101058324, 572925751, 335939335, 926029335, 840308535, 20198967, 594953472, 1982013986, 594953541, 1982013986,
- 336029748, 117925895, 1460081671, 118753111, 994394119, 993757755, 993740101, 1161509770, 117926129, 118753128, 1465321223, 336004871, 512, 180479, 285261825, 9216, 387330561, 101127190, 639771398,
- 926164519, 386348598, 926364182, 640103478, 654772002, 101130790, 1157628180, 572662646, 1162180131, 572662646, 1748268579, 1745294343, 336004871, 123164423, 17237780, 993740224, 1161509770,
- 2319137605, 4047846203, 1745291112, 117904391, 123164423, 1312519, 4278190082, 20972224, 721088, 16777318, 572728884, 370414854, 389427763, 372388657, 587600917, 842208547, 120927542, 640098822,
- 909588276, 370612018, 570820372, 336930599, 36374022, 891692578, 570820405, 926164519, 389166647, 118756887, 656876038, 857084949, 572732723, 909391142, 640037683, 859190325, 336926258, 322961670,
- 320015629, 353570061, 320015627, 674242573, 336004920, 939984647, 939987975, 336004871, 1227556615, 743460908, 117910345, 117901076, 118753080, 117901112, 939984660, 220213288, 185406227,
- 674764564, 18298920, 320015712, 320015629, 218960707, 674811923, 117901062, 939987975, 121112327, 117901076, 1227621895, 742992683, 117901062, 939987975, 121112327, 117901076, 942147079, 218960848,
- 422186259, 674773032, 33565209, 3237937152, 3221340161, 855647488, 840105984, 370546454, 657864247, 572728870, 353699334, 352723491, 857084949, 892744225, 589706293, 909391139, 639771411,
- 859190325, 353776179, 417334804, 419825959, 101256204, 673924625, 437266241, 18490918, 640031296, 1093660698, 320015680, 319635469, 427819283, 101256213, 604772614, 675358510, 3222939184,
- 438707738, 807803584, 3237883681, 319622419, 319622419, 1280, 180479, 285261825, 788538112, 1291862272, 337969152, 570820358, 891692583, 909588020, 370546482, 387322885, 909586966, 640955702,
- 119678503, 570754566, 909583911, 370618931, 572982791, 335939334, 857085463, 909588018, 640034612, 857084935, 875902514, 102900518, 758366209, 757949997, 757936947, 858598758, 994394366, 993757755,
- 993740101, 1161509770, 388890625, 773265175, 387389230, 1109863959, 336794388, 1109862210, 336794388, 219367234, 219353869, 868225805, 437918042, 859003417, 437918042, 1160993305, 572662646,
- 1162180131, 572662646, 680883747, 673720360, 3760728104, 1310794023, 656875809, 558768417, 227551009, 218960659, 50336531, 2130708480, 16892161, 385878784, 8960, 370611255, 875902519, 101131815,
- 370611223, 875902519, 101131815, 101130807, 842208791, 640103991, 471604232, 471604252, 471638044, 471604252, 551033884, 269553936, 286269472, 549457937, 269553936, 286269472, 538972177, 269553936,
- 286269472, 471339025, 471604252, 1842204, 4294967043, 25231592, 721057, 2293783, 389166848, 587597590, 925247266, 389166902, 587597590, 925247266, 118765366, 891692806, 389429044, 270549014,
- 537923857, 286330912, 270540816, 537923857, 286330912, 471619600, 471604252, 475536412, 471604252, 2686196764, 471604252, 471604252, 286269544, 538972177, 269553936, 1024, 3221348607, 251699201,
- 905978624, 16896, 372384019, 101978389, 639770915, 909381941, 857084951, 353769010, 842208788, 640955702, 102900518, 857084949, 336926258, 909259542, 640037941, 352723491, 842208788, 640955702,
- 1074143779, 639254529, 3237878310, 975578650, 1530333710, 168431158, 1164985102, 168693258, 168705323, 1160318474, 319687210, 320015629, 18025741, 4263126688, 640031424, 440402202, 235563046,
- 171399990, 1158286862, 1779319664, 725421578, 168693258, 237585706, 320015746, 320015629, 512, 180479, 285261825, 8448, 387322933, 909586966, 640955702, 119678503, 825689606, 370612022, 117904405,
- 891692806, 994391093, 993757755, 993740101, 1161509770, 2416709052, 210766603, 1170213901, 572662646, 1162180131, 572662646, 120092195, 218650631, 139986701, 2953709319, 196622, 33554432, 8388928,
- 3473449, 318767173, 353776161, 117838869, 336922118, 370546454, 101979413, 639770915, 909391157, 892745271, 640099892, 875902246, 859051830, 353710625, 572597012, 336930613, 841036566, 875902262,
- 572597030, 3221307398, 118040090, 236065294, 438700295, 639254782, 302909193, 151457298, 17848870, 4262465568, 320868576, 222298381, 4262269715, 18025920, 1075455616, 67307783, 420483097,
- 118031108, 640031296, 151470106, 270074883, 50600208, 440403721, 269512742, 2953842848, 320015808, 319668237, 131091, 31522560, 10486208, 1900559, 841028352, 336663830, 572596998, 873542950,
- 102897462, 857084949, 892744243, 1076045364, 639254529, 3237878310, 1915102746, 168693258, 235801232, 648020234, 448855578, 18490918, 3357940288, 235538958, 235538958, 256, 1610727679, 570474497,
- 858980352, 288699954, 656541191, 926364710, 387396150, 101127190, 287778594, 589497876, 875898402, 224403510, 436881683, 2148075786, 2148145674, 436865289, 674777354, 320015712, 855706899,
- 168364362, 159386138, 436895753, 1242106122, 942198270, 319622419, 256, 1610727679, 570474497, 856883200, 286594610, 119678503, 387388422, 926364182, 640103478, 285673250, 589506100, 336922146,
- 224403478, 436881683, 2148075786, 2148145674, 436865289, 674777354, 320015712, 219381761, 155897342, 169478665, 2148075904, 151656970, 855722505, 219363368, 33559309, 3774808064, 2684469249,
- 587206400, 554893312, 286594610, 555943444, 288695842, 822425140, 640103478, 654772002, 101130790, 370611988, 20985650, 640031296, 448855578, 721495590, 336004871, 120549127, 117901076, 118753088,
- 438738945, 639287550, 1073814054, 129050138, 117901076, 117911407, 1074205703, 50333447, 3774808064, 2684469249, 436211456, 10240, 372384019, 101978389, 639770915, 909381941, 572928261, 924256007,
- 120009782, 117900849, 924194566, 926365239, 1073823783, 438707738, 639287550, 203424038, 1192561697, 3691777045, 51315206, 1007224327, 1198065161, 438738945, 639287550, 1073814054, 208414234,
- 356979980, 2265719052, 154929414, 251856646, 1198065154, 512, 3221348607, 251699201, 10752, 102899969, 370413845, 909254963, 640946485, 372388615, 101979413, 891691555, 570820405, 926164519,
- 639771447, 20329525, 448855680, 18490918, 640031296, 235575546, 235538958, 118753159, 1585907463, 17698314, 4263126688, 640031424, 440402202, 168718374, 235801248, 126313994, 118753031, 168431239,
- 131086, 46202624, 12583216, 5177388, 336930048, 842216214, 892745527, 640100148, 352723491, 102900501, 504632582, 857085698, 892744243, 640099892, 909391142, 842213171, 640955702, 102900515,
- 370413845, 909254963, 640955701, 352723491, 555947029, 873542946, 219373569, 2332625924, 176819212, 1343491853, 438780200, 50798628, 168296964, 218498312, 820126256, 219353869, 791617840,
- 557842721, 218960687, 3237875731, 222355472, 192743443, 2081099792, 1024398345, 589840679, 51585843, 101190145, 319095818, 2150637841, 319622419, 3237880111, 556740385, 320015664, 269496333,
- 1064961, 4278190083, 16777920, 1114304, 2818079, 639763712, 926164519, 842217014, 336992022, 654706183, 909588278, 101123878, 369493767, 101988151, 891691555, 842217012, 1157628182, 572662646,
- 1162180131, 572662646, 219313699, 369440773, 84775182, 236324152, 218960766, 218960659, 994394131, 993757755, 993740101, 1161509770, 2433549755, 939857422, 244387077, 226297110, 218960659,
- 33559315, 3774808064, 2684469249, 520097536, 553975808, 288695842, 557004340, 286594610, 824641044, 909588274, 589506087, 386271010, 2147554839, 639287550, 1073814054, 3123062298, 174589707,
- 3490711046, 168166928, 639633512, 440402202, 4263126566, 2149980864, 252407816, 185536014, 33556592, 3774808064, 2684469249, 520097536, 554893312, 286594610, 555943444, 288695842, 823604788,
- 101123874, 858986007, 657864498, 20981287, 640031296, 448855578, 196748838, 101345287, 282071046, 1745487366, 648020232, 448855578, 18490918, 2149980736, 252407816, 185536014, 33556592, 3774808064,
- 2684469249, 503320320, 285278208, 555943444, 288695842, 557004340, 872879666, 119940903, 336925958, 926357015, 650117430, 448855578, 18490918, 2149980736, 252407816, 185536014, 1610680432,
- 639287550, 1073814054, 3123062298, 174589707, 3490711046, 168166928, 16779368, 3774808064, 2684436481, 17664, 639771447, 859190325, 859190835, 353776179, 589497876, 856098338, 336926258, 337847046,
- 353637653, 353776179, 589497876, 858986006, 336926258, 572728070, 572729126, 909391142, 892613427, 271594549, 219353869, 1181685532, 320015640, 1210783757, 319651347, 2425359635, 219353869,
- 726143870, 320015640, 1866864653, 319626263, 3490712851, 319622419, 219369791, 606868237, 319622419, 51380997, 218960645, 321659923, 1360203021, 218960703, 268763923, 4278255621, 31522811,
- 10486083, 318767161, 842208561, 101979414, 336929571, 842208519, 101979414, 656548131, 909588262, 572732725, 909391142, 875901747, 842217014, 370546455, 654706183, 572728871, 225472518, 1879905043,
- 319670039, 16715027, 168364307, 219155997, 269292307, 354630179, 202199316, 219612420, 436931153, 1075839270, 319622419, 19279148, 319622419, 823201808, 321657623, 1074990349, 119749155, 202900507,
- 453315597, 50341379, 3724476416, 2684469761, 620764160, 32512, 336925969, 909259542, 389231925, 909579798, 908535606, 640955702, 572728102, 859117318, 336926258, 823599878, 909522742, 387323415,
- 909587990, 640034598, 101066279, 370607623, 370546454, 387323671, 118888214, 101058310, 640099879, 640755494, 117843495, 370611718, 372315926, 370546454, 372322583, 926299958, 640034614, 656811559,
- 656811555, 640952102, 319622419, 419772458, 84610060, 657466932, 223356993, 556810259, 3508612911, 285542401, 68420619, 67377164, 419826701, 607328517, 67633925, 487393036, 152830732, 16908547,
- 285542146, 68027659, 84083464, 84219917, 50465803, 67699714, 319229959, 103157798, 201590531, 203361543, 101846529, 16843011, 228647040, 2148340499, 84610188, 2148276485, 673990417, 3440584513,
- 555823008, 84348975, 16909058, 218366213, 51907852, 67175938, 404496907, 84937235, 17042442, 50530058, 50989060, 16908803, 16974341, 184877569, 85462028, 16843009, 84017668, 134415106, 337127955,
- 168235018, 134546701, 16909060, 4278255620, 31522814, 10617154, 318767161, 909522711, 118887959, 372388615, 587600917, 842208547, 101979414, 336929571, 639771398, 572732725, 909391142, 590689075,
- 875898402, 657666870, 909588006, 1701133078, 185276936, 878642949, 219353869, 319639632, 324013331, 1343425805, 219353869, 319639632, 1597246739, 185271559, 2559705370, 117771160, 2383092232,
- 319622419, 218960672, 319635475, 322964755, 538119437, 319622419, 135924622, 33555719, 3774808064, 2684452865, 939536128, 856883200, 353769010, 587597332, 842208547, 101979414, 336929571,
- 639771398, 572732725, 909391142, 590689075, 875898402, 892547894, 840382004, 640955702, 1611997987, 658581648, 1881686311, 320015776, 219389965, 220205837, 537727763, 320015648, 2635276301,
- 556740385, 664797552, 1093150785, 219357223, 220205837, 537727763, 319622419, 218960672, 319668243, 555823072, 67149871, 3758095871, 2734752514, 922760192, 1023425024, 387121152, 859191091,
- 857151282, 389428791, 117904918, 353776179, 589497876, 640091655, 119744295, 654706438, 639771431, 859190325, 908470067, 387331639, 859256599, 924260135, 708852030, 102308102, 70860842, 202181656,
- 219427333, 688722707, 404227897, 707668486, 119019526, 319629625, 840174867, 202181637, 185618968, 1493634642, 2315325451, 404269226, 202222248, 202900485, 218960790, 18328083, 2829588225,
- 385941783, 218960810, 403478035, 4144760068, 473968174, 3026524, 4278190082, 25166272, 1114304, 285212692, 857084945, 892744225, 639771409, 572732725, 354878726, 72230, 226502170, 639279123,
- 25198593, 444661376, 18490918, 2148340512, 2155895334, 1280, 2147598591, 285261825, 503321600, 838871040, 856883200, 857084949, 101978419, 639770915, 909381941, 119740211, 856954146, 875901491,
- 354551587, 842216212, 119747637, 856954146, 875901491, 329269283, 438730765, 639238399, 2155928102, 2685407376, 278925328, 269525008, 2685407392, 3221295120, 4262661504, 640031456, 444596506,
- 276856870, 1074794512, 269488144, 269488192, 262160, 48299815, 10486035, 3538972, 5242957, 925964032, 640099894, 285673222, 572728884, 655430918, 101131814, 370611974, 339161651, 120795926,
- 857085702, 892744243, 589506100, 640103991, 102900515, 34546195, 370611718, 859256630, 924194327, 36648502, 389482278, 34166968, 152766985, 218960672, 453582867, 151128330, 235801176, 856494994,
- 151523146, 319651861, 1244859667, 352913423, 1611861376, 272632084, 202115334, 1476855321, 202966535, 268830988, 338168128, 174069268, 34146587, 771826697, 219353869, 153408254, 453576962,
- 2685034506, 273224461, 219354131, 273224461, 18027539, 545264147, 101062924, 235801609, 101058828, 2149583897, 673746962, 654312448, 318955775, 469803009, 1291859456, 20480, 370618643, 637929222,
- 336668455, 639771398, 101126453, 640034566, 859191095, 909382450, 389165875, 856098582, 336926258, 572728070, 926361127, 321266211, 369237810, 637929222, 119744295, 640091654, 906116902,
- 3089576725, 151128408, 537467658, 319622419, 169543968, 1476985353, 2450394634, 360713491, 1242499081, 320015667, 152403981, 860491528, 341840653, 101728265, 420219913, 123209478, 202119430,
- 1074791945, 18098185, 453664918, 151128329, 231931428, 17634067, 34153518, 169543945, 3774745184, 336859917, 219367695, 320082701, 18041104, 545264173, 101062924, 235801609, 101058828, 2149583897,
- 2658322, 4278648837, 20972256, 1835168, 3670058, 5505094, 925964032, 640099894, 285673222, 572728884, 655430918, 101131814, 370611974, 858993203, 875902514, 572728102, 370414854, 909259575,
- 589706293, 352723491, 859248148, 875902514, 572728102, 370414854, 909259575, 589706293, 352723491, 1486362132, 168362505, 320866587, 538119437, 151657225, 173541634, 548539918, 219353869,
- 320015648, 319643661, 224398611, 2685211411, 219353869, 320015776, 319676429, 232787219, 1612059411, 151591690, 19138818, 320015662, 617807373, 151585289, 174066203, 319622419, 319622419,
- 218960768, 218960659, 219381779, 219353869, 327160589, 320015629, 1248525, 4278648837, 20972256, 1835168, 3670058, 5505094, 389092096, 101123606, 287778598, 572720660, 118568230, 640091654,
- 909588262, 571683379, 909391142, 372388659, 587600917, 891691559, 858994228, 336926258, 572990214, 909391142, 372388659, 587600917, 891691559, 858994228, 336926258, 1486365446, 168362505,
- 320866587, 538119437, 151657225, 173541634, 229772814, 537727763, 219353869, 320015648, 319643661, 224398611, 2685211411, 219353869, 320015776, 319676429, 2516651283, 152767072, 604570121,
- 319673086, 771820819, 151128356, 1611275017, 323026442, 320015629, 2148732173, 319622419, 319622419, 218960768, 218960659, 219381779, 219353869, 67113741, 3741263616, 2751531010, 973085952,
- 1509967360, 369164288, 842208533, 101979414, 639762987, 859190325, 101135667, 908470054, 20330295, 656876081, 909588006, 286725910, 842217012, 923866390, 370619958, 101123862, 386270775, 909579798,
- 640034614, 640037127, 859190325, 336926258, 101058311, 925247015, 269337345, 219353869, 319631408, 101715219, 67377164, 254807307, 168750078, 151128408, 537467658, 319622419, 169543968, 1476985353,
- 151843850, 202966534, 101058828, 588912921, 858072116, 436744469, 134482699, 269130241, 218960736, 218960659, 67253267, 386731275, 4261810180, 174066236, 34146587, 771826697, 219353869, 153408254,
- 453576962, 2903138314, 202119430, 419825161, 1997081612, 605892105, 606352436, 67846685, 186255368, 654312448, 134405887, 503358465, 1207974656, 23552, 119943425, 386270727, 926357014, 102900501,
- 991302677, 892744194, 589506100, 824521781, 101123874, 907417366, 336672567, 909259542, 370610485, 909522710, 19277607, 656803377, 909588006, 102110998, 101134599, 907417366, 892745527, 572728884,
- 370414854, 252625665, 84675888, 101455876, 320015632, 221261837, 269292307, 168743166, 151128408, 537467658, 319622419, 169543968, 1476985353, 202375434, 151389721, 102304780, 120916230, 185271304,
- 372246554, 874783796, 177864994, 402919430, 84675852, 219362306, 219353869, 274731789, 174066192, 34146587, 3539870729, 219353869, 153366017, 453576962, 4262092810, 201918131, 101062924, 420219913,
- 436930877, 184813576, 606346562, 488911924, 131118, 48299776, 10682624, 3997741, 640745728, 101123846, 486934279, 387388419, 842216214, 657732918, 875902518, 892745255, 892741428, 589506100,
- 909588278, 102892838, 370414869, 909259571, 640955701, 322502947, 184681505, 723781417, 1629362214, 234953748, 370214675, 337386002, 34084240, 3556644356, 219353869, 320015680, 77529357, 856364054,
- 773654049, 874917913, 470817308, 84215060, 202182681, 387062275, 337448462, 203957020, 328933651, 319676429, 232787219, 131091, 48103168, 10486016, 3932204, 637928704, 656811815, 54339111,
- 909588276, 372388659, 369562645, 118756630, 336926230, 336926215, 371401478, 102110999, 891691557, 859190325, 353776179, 587600917, 554907905, 688587268, 640361479, 341909016, 319684892, 303436039,
- 2417237018, 67242005, 231996950, 1074598675, 219353869, 336987167, 102839051, 806956573, 438055974, 85203984, 270075141, 436407309, 235804434, 589042717, 554896424, 3758953307, 219353869, 1248736,
- 4280287233, 23069120, 1769664, 657528576, 909587494, 286725938, 842217012, 923866390, 370618934, 101123860, 159426850, 169478665, 218960713, 436881683, 2148075786, 2151094794, 151656970,
- 1929464329, 219353869, 155880958, 169478665, 16779648, 3237945344, 3221315585, 6912, 370618643, 570820372, 336668455, 639771398, 101126453, 874915618, 842413879, 151617751, 1225398794, 319622419,
- 169478729, 176163081, 2159477018, 151656970, 2382252553, 219353869, 155874049, 169478665, 16779648, 536870912, 1610678274, 6912, 909586743, 336992050, 841025287, 101979414, 370614563, 570820372,
- 874915623, 436895753, 1242106122, 319648513, 2382236947, 168364362, 159386138, 151617751, 1225398794, 319622419, 169478729, 176163081, 65562, 35651584, 6291712, 620757019, 570820401, 926164519,
- 639770935, 859190325, 874915617, 389166647, 18093591, 436895991, 1242106122, 319655422, 1929448723, 168364362, 159386138, 151617705, 1225398794, 319622419, 169478729, 176163081, 4278321178,
- 29425662, 12583234, 4063243, 119673600, 857085702, 657864498, 355533606, 842208788, 859125046, 857084949, 892679730, 657863219, 370546471, 657864247, 589702695, 117842467, 387319303, 926365206,
- 857081351, 219028640, 471600653, 235736334, 218960740, 219353107, 135402253, 572916490, 202054150, 255133446, 487333172, 120917812, 436996870, 52830726, 3221293066, 404232216, 404232216, 224428286,
- 1611469587, 320015712, 135094285, 101464179, 203032071, 488446297, 437016857, 201721606, 218657592, 4278125056, 1107411199, 184600321, 12544, 370611219, 875902519, 101131815, 336933651, 909259542,
- 370619701, 909522710, 589702951, 117908003, 370611718, 355940150, 842208788, 410006838, 404232216, 672667672, 218960656, 419896595, 101059340, 506862651, 121248822, 436996870, 219356422,
- 2415989517, 218959388, 236723214, 4262333709, 319652020, 803147027, 101123596, 778112026, 437018926, 201721606, 319676207, 50334995, 3204447999, 3254845954, 1090531072, 21248, 117908993, 101131815,
- 117834255, 118953734, 521541382, 370611714, 370620215, 37697079, 657864502, 657864487, 637677350, 387322887, 909586966, 640955702, 119678503, 337053190, 570820358, 891692583, 909588020, 370546482,
- 134769153, 117987930, 1813250568, 84083720, 50675262, 342624260, 117966850, 134765146, 1813250567, 84083720, 50675262, 342624260, 370856194, 370553878, 370547226, 437655092, 505291488, 572399172,
- 1142824482, 19013150, 1040516031, 67306814, 34892808, 1510410503, 134743898, 141300738, 1040515844, 67306814, 34892808, 1510410248, 134744154, 141300737, 220994299, 739052813, 220994074, 739052813,
- 289153562, 1007751441, 289153570, 1007751441, 256, 2214715647, 503357441, 588447744, 387323698, 101058326, 370545685, 909586995, 101127703, 639771398, 909391142, 151117878, 33754122, 791750666,
- 252653648, 151389452, 1043157022, 1715223654, 16883713, 369495051, 1345401170, 184681263, 572328202, 1044276796, 50347110, 3774808064, 2684420098, 419434240, 8960, 352723475, 857084949, 892744225,
- 589706293, 370413829, 909254963, 872747317, 355611443, 572728084, 320015648, 230686989, 4262269715, 18490944, 4263909952, 278925504, 17866768, 537727904, 219353869, 2148732192, 639238399, 72230,
- 269488208, 512, 180479, 234930177, 25088, 352723457, 857084949, 892744243, 119944245, 387188273, 102183447, 102900487, 857084949, 102175795, 335939335, 926029335, 890705463, 355611444, 389494293,
- 909586966, 640100148, 859125287, 875902514, 639836966, 926103079, 640103478, 336004898, 589506055, 891684642, 19015207, 288892928, 285968395, 151650104, 151060800, 319635458, 255855891, 155190019,
- 169478665, 271853119, 1059533584, 151656970, 50544649, 319635471, 37752083, 1073807625, 436865289, 385957898, 370765849, 436879362, 674807809, 286329604, 942146571, 169478761, 353567040, 319622419,
- 33693988, 169478720, 574556425, 269545221, 1059194351, 436865289, 33701898, 219358241, 303371021, 436879362, 1074333962, 185270529, 155189505, 512, 3221348607, 251699201, 7936, 909381941,
- 372384051, 101978389, 639770915, 387199287, 909579799, 657732917, 101123878, 1073814054, 438707738, 639287550, 191891584, 252579343, 537423883, 639254529, 3237878310, 3123062298, 174589707,
- 3490711046, 168166928, 33556584, 3237937152, 3221291010, 587206912, 570753024, 874915622, 859190839, 370611762, 101058324, 117842435, 370611206, 909259542, 657733175, 75302, 572749381, 1165370146,
- 572749381, 1165370146, 218967066, 439094541, 218967066, 1076628749, 2319137605, 1162165051, 998914875, 1610695995, 873862682, 437917206, 372512278, 50338326, 3237937152, 3221291778, 721423104,
- 22528, 640098835, 842217015, 101127703, 352716295, 857085460, 909588018, 370546486, 587597319, 891692578, 909588020, 102110998, 842215735, 101979414, 857154339, 387388978, 387331639, 117900822,
- 656877062, 572728102, 572728112, 640100134, 372388662, 236765207, 470682893, 218959388, 689988366, 538915614, 319098421, 84281608, 741231380, 775564105, 50598409, 223117832, 1057821459, 689521929,
- 202578185, 201655320, 386674701, 184820741, 83951966, 386212631, 286661892, 1610679067, 404232216, 404232216, 607718551, 555627295, 84281626, 638063365, 742992687, 51466803, 302647560, 218960708,
- 404500499, 201655876, 68684813, 202048528, 387779169, 371398259, 4278255632, 31522811, 10486083, 318767177, 842208561, 101979414, 857023267, 336926258, 102966022, 842208519, 101979414, 656548131,
- 909588262, 639771447, 859190325, 572732723, 909391142, 875901747, 842217014, 370546455, 654706183, 572728871, 225472518, 1879905043, 320015728, 302280973, 320015815, 318832397, 487196937,
- 219022089, 269292307, 320015632, 975376397, 1360270627, 84151309, 173083927, 19274251, 219357216, 320869133, 571673869, 219349277, 269488909, 269365521, 319622419, 218960672, 975380499, 68880163,
- 202181656, 637737733, 1024, 2248335615, 83927041, 872418048, 16384, 859120407, 588449287, 389165877, 372388615, 372384023, 101127703, 102834950, 354624262, 891691555, 639775541, 909378365,
- 875897651, 87241526, 572728884, 856954133, 2184525362, 896262146, 1040375968, 336106805, 536939297, 186736180, 878584075, 554426622, 336594964, 386992156, 470290711, 2684424212, 67374869,
- 1612715279, 1610686528, 289415264, 237839631, 254094606, 337403921, 269555504, 386994320, 3558609968, 1476662543, 988420, 4278190083, 29360608, 983200, 2883612, 841028352, 336663830, 572596998,
- 873542950, 857085750, 641152818, 572597030, 823592710, 656548614, 370414887, 909254963, 20985141, 640031296, 448855578, 62137894, 2583888643, 4278981122, 34737152, 218958519, 219384074, 319619073,
- 438738945, 639287550, 1073814054, 32515610, 269247489, 108989456, 226384134, 2114786067, 4211016448, 100843775, 419480321, 1140865024, 823328768, 370612022, 101058326, 101979427, 639770915,
- 639776053, 926295591, 892540183, 892540211, 892540211, 840176947, 118888243, 572596998, 926361127, 926234418, 336922146, 909259542, 4079367221, 182455565, 302121739, 4262071819, 185469552,
- 184746514, 1076391178, 1076379696, 338690305, 4262987527, 117905472, 16855060, 320015808, 320015629, 101104897, 185861216, 168300044, 134876686, 336268047, 3233840388, 3233857728, 236978628,
- 370611990, 3288408078, 218960800, 218960659, 4278321171, 48234494, 10486144, 4849722, 842072320, 353764631, 100992788, 656876067, 909588278, 117909031, 352716550, 387323413, 101127702, 656868871,
- 925247270, 909588022, 875902262, 891692855, 908408628, 370620163, 926364211, 101061655, 640033315, 202129409, 269490177, 202172670, 245304332, 101686546, 496832262, 100998164, 100926467, 117835010,
- 50530368, 84608773, 974786056, 402722832, 2400171020, 286396944, 1463029646, 878130485, 1694801921, 101781766, 973341797, 104663054, 1040584463, 774117387, 169216536, 119552021, 268501764,
- 117967106, 302650120, 807146794, 285611049, 73729553, 865175806, 2436040198, 353706258, 327713, 33554432, 8388992, 1638421, 3211310, 285212786, 991302673, 909254915, 640946485, 36380963, 553977378,
- 388440337, 101123606, 589768486, 654706183, 926361126, 120730422, 824521479, 353699362, 352723491, 37426708, 657786630, 101130790, 102176532, 101058311, 924194327, 372717111, 907417367, 656815671,
- 908534311, 842217271, 640955702, 875889195, 3222939174, 69680, 438707738, 806355199, 19274432, 4278190400, 71339520, 268896262, 155846915, 134680579, 88081414, 319622413, 135069990, 201864204,
- 591923212, 101651211, 101058064, 67766284, 50529799, 302253840, 319227408, 84152327, 34736132, 34413057, 202115074, 204214280, 16728065, 438707738, 639238145, 16718374, 268931280, 134611971,
- 101192724, 118489860, 725945488, 67636336, 201852940, 234951705, 268830214, 84216838, 118489858, 17040904, 67439624, 117703691, 201592839, 69541121, 201852940, 788484, 4278190087, 16777920,
- 1048768, 2949152, 4522041, 6094929, 909382400, 389165875, 353703447, 589772067, 874717973, 842216246, 336663830, 572728070, 838939942, 336663830, 572596998, 387003686, 336922146, 909259542,
- 388379701, 842208788, 640955702, 386277923, 336922146, 909259542, 119944245, 842208788, 640955702, 2147885603, 448993830, 1074994451, 2151727901, 220204307, 537727763, 3758166797, 219353869,
- 319668478, 320015744, 320015629, 218960723, 218960659, 319627283, 319622419, 219393299, 219353869, 2147554061, 487794202, 1128471059, 319643677, 3237874963, 219353869, 219357185, 319619327,
- 536939795, 218960704, 218960659, 319627283, 319622419, 219376915, 219353869, 220205837, 218960659, 117445395, 3237937152, 3221323777, 603985920, 1006645248, 1409304576, 24576, 372384019, 101978389,
- 875897635, 102900518, 572724501, 873542950, 336926518, 892482355, 589509685, 354562850, 858985493, 875902258, 336926499, 892482355, 589509685, 354559778, 858985493, 875902258, 336926499, 892482355,
- 589509685, 354562850, 858985493, 875902258, 536948771, 337386516, 336862304, 471097372, 537928732, 270536720, 537923696, 271585296, 537923616, 269529104, 806359072, 269492240, 275779616, 269492240,
- 337428481, 471097598, 471602256, 337399828, 471113729, 269492464, 537923616, 270536720, 269492240, 276828192, 537923616, 270536720, 269492240, 537923616, 4278321168, 29425662, 13238594, 3342347,
- 387191552, 892745494, 119940916, 858854150, 857084949, 892679730, 924194327, 656881206, 572728870, 101123846, 907417366, 336934711, 909259542, 538992693, 538976288, 540024864, 319622419, 186255125,
- 671548939, 589512210, 120066622, 436931334, 219354375, 2147554061, 320016933, 304424210, 4262597395, 319643803, 566234387, 117900811, 507448090, 1058939426, 117905931, 3223390982, 219353869,
- 4278125824, 33743103, 201369089, 905976064, 1325417216, 823328768, 101131814, 370546438, 120993335, 119940657, 370607622, 909522710, 352727303, 857084949, 909588274, 857085719, 892679730, 36579124,
- 101065251, 907424037, 656815671, 101123622, 907421462, 656815671, 101123622, 839639830, 169023512, 404238859, 772704531, 235213586, 319958542, 453324294, 1477513492, 290985751, 85660689, 356796442,
- 21513237, 237900359, 303171086, 101649966, 171055197, 404230923, 319425330, 589325057, 540608520, 134751008, 320424505, 405867274, 185209625, 286175793, 68883457, 369493526, 18094852, 1296436753,
- 810360350, 404296458, 319425329, 1378949145, 538977032, 587728953, 3743776, 4278190083, 16777918, 1376450, 1900569, 101126912, 336925958, 370611990, 909522743, 640955701, 354821927, 321324823,
- 3944036149, 387388608, 370589715, 387388352, 2920726547, 2697899694, 121944577, 368186657, 138676001, 554124296, 555086357, 1141392391, 4265492030, 3157966029, 1792, 1073921023, 100713473,
- 805317632, 1006647040, 1224753920, 822149120, 386336550, 909379383, 389429047, 353768983, 387396117, 353703446, 101123860, 101132071, 891692839, 926299189, 87242295, 118818613, 117909041,
- 822556439, 923219255, 924256049, 907486759, 352793909, 50537217, 3914420558, 341839892, 336617492, 274727171, 392175892, 393310742, 337797142, 50421776, 2605842433, 1364067075, 1381120849,
- 1364283127, 90374990, 26149202, 522132737, 102568206, 604506148, 1896946950, 470230017, 237336338, 839518762, 705301042, 309797903, 19138332, 1495292422, 503382281, 615391007, 510140512, 18751263,
- 1527055019, 50357280, 3305046016, 3221291010, 1140858880, 26624, 369493779, 926291479, 842217015, 101127959, 387388951, 926365206, 119940918, 589702919, 103880482, 370611974, 587600917, 657732899,
- 101123878, 370611988, 892679735, 892744243, 640100148, 120661286, 370414854, 909259571, 589706293, 891691555, 389494580, 657864470, 119940647, 101123591, 118664983, 436931590, 302584071, 489031954,
- 268567054, 51448407, 218891287, 472324878, 216216885, 85460742, 257953043, 121637647, 252395527, 942170127, 419895566, 254970110, 220211256, 537727763, 855970573, 218893851, 285415172, 34625290,
- 2466319874, 102435612, 470484487, 272371471, 68161544, 151650840, 168431448, 759042056, 186255356, 218695719, 101720083, 121637638, 188745492, 537921030, 387721272, 403049255, 656152400, 218960697,
- 151851795, 135221768, 1460668682, 386075146, 135270404, 1024, 188671, 134258689, 956312832, 17664, 859189523, 387396147, 103876385, 335682822, 842216214, 557135158, 857084949, 1026961971,
- 656815106, 589702695, 117842467, 587600919, 875898402, 372388662, 891691525, 842217012, 101979414, 3054897287, 4263118870, 370296282, 220204307, 322961683, 319627277, 170070550, 515251762,
- 322243122, 320015629, 18025741, 320015648, 320015629, 353716993, 537331019, 221286420, 806163219, 320015664, 344993805, 493160224, 3223135011, 219353869, 756224781, 319622419, 319622419, 1024,
- 180479, 838909953, 1191197440, 21248, 842215699, 806688022, 370553136, 370546455, 101974557, 639771427, 354497845, 589497876, 37561890, 926365236, 808924726, 875901232, 573638454, 656475911,
- 570893094, 370414854, 892744243, 335881780, 909259542, 589706293, 2160068130, 790434573, 370287369, 220204307, 331415059, 319627277, 153293334, 236133679, 18483222, 369629734, 320015867, 320015629,
- 219353857, 219353869, 3221295885, 35654931, 124066595, 814748704, 219353869, 319631408, 2419068179, 1694965780, 537010971, 360715021, 2685750091, 319622419, 319622419, 320015648, 320015629, 256,
- 3221340415, 889241601, 907214848, 387396147, 101979414, 370615075, 587600917, 353769251, 589497876, 587600917, 892675618, 891691555, 590821172, 875898402, 572733239, 926168358, 134743507,
- 235312389, 122231049, 1260456461, 2835942917, 319622419, 84806312, 218767691, 169429255, 3120629261, 128124422, 1225656585, 218761479, 168298329, 319627278, 236981523, 1493633034, 118032909,
- 151588425, 196615, 29425408, 12583360, 2424849, 16777273, 589702708, 352716322, 370545685, 909521459, 587597621, 640034594, 370414887, 909259542, 104150326, 336921862, 842208790, 892679734,
- 101123590, 640098851, 1019216166, 1715355238, 1046887484, 926705214, 1197630023, 1007361040, 1715355238, 4263250748, 1046887527, 188507710, 1648824348, 470828898, 605450241, 371463702, 371463728,
- 1461068822, 235280665, 605447689, 371463702, 2299398502, 371463766, 1444291606, 419827209, 919065, 4278190087, 32506304, 1245376, 2555926, 4063280, 6029382, 336662784, 892547862, 858994228,
- 639771445, 572732725, 354878726, 35463687, 892482324, 909259573, 589706293, 859120405, 336926258, 354563846, 858985493, 892679730, 354625076, 842216739, 924062997, 856954133, 859125042, 590624050,
- 842216739, 589509685, 807020066, 2161121830, 446698253, 2155872550, 269488208, 555816720, 168824855, 274075150, 471080976, 269489180, 269500432, 537923616, 806359072, 4269801744, 2418416256,
- 328214042, 1512472589, 283148416, 269496400, 387391776, 238047265, 1343097354, 470843408, 471089172, 1074815104, 1077964816, 271585296, 269492240, 768, 2147598591, 285261825, 889197568, 856883200,
- 857084949, 101978419, 639770915, 909381941, 119740211, 119940657, 387384838, 926036758, 857085751, 909588274, 103163686, 640091911, 117908003, 219390016, 4279903872, 640031232, 2441117914,
- 151654659, 87032586, 554045714, 286393889, 167981061, 51448329, 285613851, 18810385, 319652032, 639295742, 2147555878, 2172659226, 50530825, 295701009, 274685712, 285909009, 151651075, 269507161,
- 196698, 29425408, 12583296, 1310737, 318767157, 370414899, 336671539, 572596998, 873542950, 588722998, 640037127, 386270727, 369493783, 926291479, 370546487, 657864247, 641087271, 117843495,
- 329269255, 438730765, 639238399, 2155928102, 135530084, 788857608, 134415663, 604378120, 135530020, 788857608, 134415663, 604378120, 226541569, 450952723, 18490918, 2149980800, 84084858,
- 1107825670, 101976130, 872940293, 84084788, 1107825670, 101976130, 872940293, 1024, 2147598591, 285261825, 671093760, 12544, 336933651, 288568086, 555943444, 288695842, 389232180, 102893347,
- 370410013, 892744243, 909259573, 589706293, 859120405, 336926258, 329269254, 438730765, 639238399, 2155928102, 235801208, 739117578, 539765792, 269233196, 2160066832, 3774747405, 438707738,
- 639270913, 168718464, 235550824, 757074446, 1747722271, 202117176, 262160, 29425408, 12583296, 1310737, 3735584, 355668736, 858986004, 587600913, 891691553, 859190289, 336012055, 909259542,
- 589706293, 823592482, 654772002, 119677734, 370607623, 926024763, 640100150, 219390016, 4279903872, 640031232, 3229647066, 319622419, 319622419, 805636248, 151586061, 84226053, 808454405, 67786792,
- 89654789, 226541569, 450952723, 18490918, 2149980800, 320015744, 320015629, 356910893, 139462664, 134809608, 491528, 4278190087, 25166272, 1114304, 1966100, 3276840, 5111876, 355668736, 858986004,
- 587600913, 891691553, 859190289, 338109207, 892482355, 572728116, 858985493, 590624050, 336929315, 892482355, 572728116, 101134599, 857084949, 875902514, 589702951, 857154083, 588518706, 875897379,
- 219390016, 4279903872, 640031232, 2692776154, 269492240, 537923616, 270536720, 269492240, 403050528, 437921282, 102236710, 270077465, 537923616, 2160066832, 3774747405, 438707738, 639270913,
- 269504640, 269504528, 269504528, 140007440, 623188744, 1476921371, 269512728, 83890192, 3237937152, 3221323777, 335548672, 1006643456, 19968, 336933651, 288568086, 555943444, 288695842, 389232180,
- 640751395, 370607623, 101979414, 370607623, 892745271, 822552116, 587663142, 336925986, 370619187, 892679735, 103880500, 336926231, 387319303, 892745494, 1076242228, 2148340640, 16718374,
- 3659933210, 235044992, 336463880, 219486746, 470681608, 175645218, 270607367, 119808272, 204016138, 84412427, 185337089, 17502224, 319652032, 639295742, 2147555878, 1652565530, 151850504,
- 437922828, 218696748, 974194702, 238691107, 270731268, 136515632, 2148205572, 202055435, 151784457, 184815109, 421008140, 67111954, 3237937152, 3221323777, 335548672, 805315584, 856883200,
- 857084949, 101978419, 639770915, 909381941, 119740211, 857084949, 892744243, 589706293, 386277923, 892482326, 572732469, 1075119879, 2148340640, 16718374, 3659933210, 331382912, 319643661,
- 224398611, 67366163, 50596876, 2160066861, 3774747405, 438707738, 639270913, 224436352, 1611469587, 2064847629, 208145410, 4201986, 4278190084, 25166272, 1114304, 2621460, 318767164, 370414899,
- 336671539, 572596998, 873542950, 588722998, 875966727, 119678503, 387188231, 926029335, 656880694, 572928311, 387188231, 335939351, 926029335, 657733175, 219390016, 4279903872, 640031232,
- 1736474842, 336004871, 117911559, 118753072, 2401175303, 117904391, 119480071, 118753031, 17237808, 319652032, 639295742, 2147555878, 2709530138, 117904391, 336015367, 117911559, 520557575,
- 117901121, 522127124, 117904391, 336015367, 393223, 46202624, 12583168, 3997708, 5636170, 7274595, 657532160, 656548614, 857085447, 825701938, 101123606, 101066502, 656810531, 640099846, 640038694,
- 926299189, 909588006, 909514550, 387330611, 370611766, 370542358, 654709781, 892745267, 120006196, 118756630, 589702711, 386336290, 389165878, 891695367, 103233332, 370414854, 387200791, 892745494,
- 119940916, 980353286, 421272601, 523835194, 124926239, 386467842, 743514122, 169890092, 34081047, 488446215, 134350617, 537532169, 1361849425, 152504864, 419889672, 21437725, 286462736, 219024954,
- 522139927, 423237433, 2535005212, 289017358, 1813058323, 404232216, 404232216, 235813412, 320016698, 152504848, 419889672, 119086365, 386467842, 743514122, 169890092, 34081047, 488446215,
- 134350617, 537532169, 1361849425, 523835150, 974600479, 421272601, 320016594, 218970640, 471603608, 957823513, 389619487, 219028591, 471600653, 235736334, 256, 180479, 704690433, 823328768,
- 235349542, 370414850, 909259542, 640955702, 103163686, 387319303, 336926230, 572720646, 875898406, 909522742, 219612383, 1160729397, 1950828404, 894644037, 50599948, 1312492812, 892688180,
- 994980951, 2684423181, 251923469, 1195009096, 1950696820, 1214528071, 218891279, 302257933, 1463107941, 894907444, 68314433, 65559, 45809408, 12976387, 16777246, 17245745, 387192070, 389429015,
- 101123862, 387192085, 389494550, 926299926, 4060165651, 1090392592, 3411546640, 168495628, 353633448, 242762767, 1073941774, 213516547, 167837450, 738792211, 185273013, 100972299, 134747732,
- 103893520, 17762311, 33559712, 3237937152, 3221291010, 1090530816, 907214848, 372388662, 101979414, 639771398, 925247015, 370619958, 909259542, 640955702, 102900518, 102110983, 639771427,
- 909391157, 842077975, 387257622, 101127190, 640100130, 909391157, 895296331, 1162179655, 1244219252, 134548255, 403380743, 1463099191, 894907444, 521815592, 1846545419, 186519050, 1091439319,
- 336004871, 235358215, 673412353, 1195865157, 370689396, 168499720, 303040517, 892688180, 438187095, 236849951, 202403338, 168711947, 336019806, 1208420103, 174590471, 65550, 31522560, 10486208,
- 285212745, 858986004, 572724501, 370414854, 909247035, 589706293, 355677475, 352723491, 37426708, 875902514, 891495206, 909259573, 723924021, 352723458, 858986004, 859120405, 875902514, 570567462,
- 269292294, 320015632, 221261837, 269292307, 319623392, 808455443, 219353869, 319623184, 808455443, 219353869, 219209744, 806163219, 18025776, 2417167744, 218960816, 218960659, 328241171, 320015629,
- 2954038541, 218960784, 218960659, 326135827, 320015629, 536871168, 3221348607, 570466305, 571670528, 336922118, 858986006, 857084949, 288699954, 370413875, 892744243, 909259537, 589706293,
- 1227669539, 742992683, 218960672, 219357203, 220205837, 2685211411, 1227595777, 726215724, 320015712, 4267704589, 320015776, 325058829, 1248525, 4278190086, 16777936, 1769648, 3342375, 5963855,
- 889192567, 858994228, 842217014, 842209046, 101979414, 101065507, 656810531, 925245987, 842208788, 640955702, 923148835, 842208788, 640955702, 923148835, 857151026, 336926258, 102966022, 639771398,
- 639771431, 859190325, 657864243, 875902514, 102900518, 924193813, 353776179, 589497876, 572720646, 572729126, 909391142, 909521715, 320221747, 654915341, 153557273, 320015863, 654964493, 153557273,
- 2148732215, 319622419, 319622419, 218960832, 218960659, 655958035, 319633161, 154602771, 655956263, 319682313, 167185683, 319653671, 319622419, 232216083, 3607958291, 421078793, 223807783,
- 1460474643, 421078793, 319627303, 354097941, 319622419, 354097941, 319622419, 319622419, 319656723, 319622419, 354108179, 319622419, 354097941, 319622419, 321919765, 320015629, 1074990349,
- 319622419, 354097941, 319622419, 1776405, 4278190081, 29360608, 2818208, 656549120, 336926215, 859182855, 336926258, 639771398, 657929269, 639771398, 859190325, 641144626, 859190325, 336926258,
- 660603142, 16866844, 673651806, 673724472, 475922744, 943204391, 1578903336, 673724417, 467679288, 101058095, 941305606, 943204392, 788923944, 673724443, 103750456, 943204358, 3680296, 4278190082,
- 29360608, 983200, 318767159, 353776161, 587600913, 891691553, 87438353, 572728884, 353637638, 572728839, 370414854, 389493299, 370414868, 892744243, 572728884, 372713223, 1077293619, 639254529,
- 3237878310, 19277338, 437921370, 454316326, 438707738, 642847771, 640031258, 1427248922, 437719637, 648020262, 448855578, 18490918, 2149980736, 438707738, 338494212, 639244838, 67317012, 438707738,
- 772679194, 2494255, 4278190083, 16777920, 1507520, 4522033, 370606336, 34542613, 790766342, 875898370, 859177535, 822548274, 118756887, 336926215, 572720646, 875898406, 842217014, 842413847,
- 842215687, 589509685, 352716322, 842208277, 909391157, 120507137, 51392007, 285345800, 772212526, 117900049, 156267524, 940311305, 1597585759, 962541624, 167911973, 268989722, 1025902608,
- 1024462885, 51481601, 285411080, 755501101, 134677265, 103682307, 173040390, 570559002, 945764645, 960061240, 51132511, 269508617, 136723749, 721948688, 196669, 46202624, 12583168, 3932202,
- 620757068, 657929777, 925247270, 120006199, 656548614, 386336295, 117835542, 924259847, 387323698, 842208791, 926299959, 570897206, 874915622, 859190839, 370611762, 101058324, 370618627, 587597575,
- 656876067, 909588262, 52207873, 50464573, 807410435, 134743607, 556742406, 33751835, 469974279, 101058887, 421007874, 34740249, 1510475526, 572749381, 1165370146, 572749381, 930489122, 319098416,
- 289149189, 235213573, 727191088, 134489651, 675416071, 84225554, 1109922350, 67634952, 86717222, 1174930692, 138806790, 1167918340, 998914875, 994395451, 993757755, 591790405, 288887050, 168900625,
- 150997539, 3774810112, 2416048129, 738205696, 1140865024, 1543524352, 1946183680, 32768, 370553143, 892745527, 353842741, 370611988, 909588278, 36579110, 101065251, 386270727, 856954135, 892678707,
- 572728116, 856954133, 892678707, 572728116, 353706551, 842216212, 590624053, 856954135, 892678707, 572728116, 353706547, 842216212, 590624053, 856954135, 892678707, 572728116, 353706519, 842216212,
- 590624053, 856954117, 892678707, 572728116, 185927206, 1296897617, 353063190, 34019078, 1531253770, 1146828856, 117574165, 270536721, 269492240, 537923616, 269512720, 806359072, 269492240,
- 275779616, 269492240, 270536752, 269492240, 270536720, 280034832, 3759149280, 134926096, 386341635, 924589111, 52102935, 220727816, 806750747, 372252961, 2265783050, 537923616, 270561296,
- 1611669520, 269492240, 537923616, 270536720, 269492240, 537923616, 270536720, 270536800, 269492240, 537923616, 327696, 48299776, 10486016, 1835017, 3670062, 318767164, 353699362, 640955699,
- 590419747, 117900834, 352716550, 857084949, 892744243, 336667411, 842216214, 875902262, 656877095, 354887206, 640955699, 102900515, 857023239, 1611861376, 1679822099, 134287884, 320541957,
- 319651853, 219374820, 454233472, 34014485, 325087250, 319627277, 20987936, 537727904, 1611861280, 675023888, 993340707, 219353869, 3237888001, 219353869, 590165307, 269237288, 220209216,
- 2689405715, 768, 2147598591, 134266881, 771756288, 840105984, 588584214, 859190325, 353703474, 909391139, 372384007, 587600917, 117838869, 587600917, 892675618, 892675622, 875898402, 319643702,
- 231543616, 4078125075, 319635457, 927534355, 319622419, 319637815, 331350291, 224419853, 1611469587, 2685603168, 319622419, 190331424, 320015683, 1477133069, 219357242, 100668173, 3774808064,
- 2684420098, 721427200, 1056978176, 1392527616, 286457856, 891429652, 589706257, 286590498, 556996116, 288699954, 555951668, 873924130, 842216246, 336925974, 572728070, 876033318, 355611443,
- 572728084, 858993685, 588518706, 872882723, 355606835, 572597012, 557003797, 588518706, 274735649, 218960656, 18951955, 640031344, 450952730, 168706086, 235801200, 235565066, 271585488, 269496336,
- 806359088, 17879056, 4279242752, 17829888, 4279242752, 1610682368, 269537534, 319623169, 4043181331, 438710049, 639254529, 235549222, 173017614, 1477053966, 1343229968, 1343229968, 1343229968,
- 1052688, 4278190083, 25166550, 1573024, 3997745, 103888640, 874915618, 859190839, 370611762, 570820372, 589702695, 823592482, 101123618, 908470054, 859190839, 370611762, 101058326, 388376103,
- 654706452, 926168358, 907417398, 151591689, 1520450570, 171745370, 152766729, 1296927028, 1261164169, 135989790, 638190089, 1647785825, 151063078, 487201544, 538973516, 538976288, 167059488,
- 152701450, 977486650, 168434185, 960049673, 152706663, 436865538, 640033289, 169478434, 436797962, 304455710, 621941523, 320016933, 655378, 29425408, 12583296, 2031631, 3604523, 5308485, 6881373,
- 8454261, 841028352, 336663830, 572596998, 873542950, 102897462, 370414869, 909259571, 640955701, 640943907, 352723491, 842208788, 909248310, 589706293, 336922146, 370411286, 909259571, 589706293,
- 923148835, 875902514, 102900518, 387322901, 572728884, 370414854, 926298675, 875902514, 102900518, 387322901, 572728884, 370414854, 120992307, 875902514, 102900518, 1075188757, 639238145, 16718374,
- 975578650, 219353869, 320015808, 219389965, 219353869, 220205837, 218960659, 320017171, 319643661, 224398611, 319651859, 319622419, 219360531, 219353869, 222302989, 218960659, 321721107, 320015629,
- 538119437, 219353869, 18027277, 4263126720, 640031360, 444596506, 219365414, 320015648, 319627277, 320015776, 320015629, 218960755, 218960659, 319635475, 319622419, 219386643, 219353869, 222302989,
- 218960659, 323818259, 320015629, 1074990349, 219353869, 1930629901, 319622419, 319622419, 4294902528, 2164441087, 637583617, 1006645504, 823328768, 926299671, 859190325, 353703474, 353703446,
- 370611988, 823406599, 118887959, 19334662, 909583910, 556859702, 925247266, 892679735, 587608339, 891692834, 655635251, 540348819, 319622419, 137382199, 140118286, 335939074, 145816840, 335939074,
- 3942545153, 235472917, 315437064, 319953691, 3137421376, 119806579, 320015635, 1477120781, 910758714, 18026249, 135530055, 17170952, 135530192, 1610482184, 151982867, 4261759286, 303240177,
- 33561371, 3237937152, 3221340161, 520099072, 907214848, 389165875, 372388631, 587600917, 891691553, 858994228, 101057285, 639771427, 159843111, 152336404, 319643655, 2164133139, 219353869,
- 354419040, 4128447489, 352394259, 303214081, 218960654, 218960659, 2919129107, 320477715, 33575681, 3237937152, 3221291010, 855642368, 570753024, 874915622, 859190839, 370611762, 101058324,
- 874919207, 389166647, 909586966, 640034612, 101058310, 370546454, 875968310, 119678503, 74246, 572749381, 1165370146, 572749381, 2121671458, 1108875031, 118752792, 1092159239, 270080322,
- 1108941072, 117905729, 403116807, 994394178, 993757755, 993740101, 1161509770, 1108804039, 118953752, 135464711, 420483097, 423707161, 420548889, 117904390, 33560327, 3221225471, 3221291010,
- 838866688, 822149120, 370618934, 386336532, 101127190, 640100130, 842413876, 822548247, 101127991, 842208533, 118961975, 119743238, 640099846, 892811046, 492175668, 488447315, 151587430,
- 2685016586, 436865289, 2042169610, 604338221, 762905607, 706812024, 135727656, 453378568, 488481537, 1713197853, 169478665, 178260233, 151587354, 762888202, 604439673, 2033022981, 33954583,
- 169281544, 2173480, 4280287234, 21103296, 786625, 620757028, 926364711, 370611766, 101123862, 353644807, 587597332, 891691555, 858994228, 640103986, 926299189, 645092097, 220401389, 2701788428,
- 857620248, 319655967, 218434835, 1057030416, 795365677, 34320669, 253889548, 85927418, 506666755, 319622419, 101059863, 147757, 4278190085, 29360576, 1114304, 3473443, 15073466, 859181824,
- 370612018, 101979413, 891691555, 926364725, 389165878, 353703447, 572720660, 875902246, 909587255, 387396147, 336925974, 639771398, 120862005, 892540209, 842217012, 857019670, 859190325, 353703474,
- 353703474, 572720646, 640034598, 824583719, 70856742, 119677734, 590360597, 117835526, 572720646, 640034598, 807872039, 589706531, 806684450, 101123619, 587597319, 640099874, 656811814, 825566000,
- 572728881, 825241607, 54079536, 102893360, 117835271, 572720646, 909391143, 909391155, 85340723, 101979441, 639770915, 857093429, 909588018, 370611767, 909259542, 372717111, 857085463, 909588018,
- 370611767, 1446130454, 67503620, 286721560, 2550535953, 67503620, 286721560, 2147882769, 101057560, 386275332, 3088519441, 218960704, 219365395, 622531341, 168300294, 117704724, 16908546, 84346629,
- 84017409, 169019143, 67572490, 33620486, 117900545, 33620229, 319227653, 118688266, 16909828, 100991234, 16843784, 117571842, 169084932, 438701583, 319622419, 219365377, 319652094, 487657230,
- 84280586, 287050244, 84548625, 168035588, 470880540, 84215050, 287115781, 96141583, 185215749, 387387651, 168493841, 721749291, 285412106, 51451671, 86706699, 185215749, 387387651, 1980433169,
- 319631408, 808455443, 219353869, 1192896048, 84411652, 16909571, 84214018, 83952129, 134743301, 33882885, 83952129, 16908549, 134546693, 84083976, 16908546, 33621253, 50659841, 1191774213,
- 221259290, 1441272595, 219353869, 118228309, 50594819, 118230023, 50594564, 118230023, 50594819, 33557511, 3774808064, 2684420098, 788534272, 286457856, 841036564, 101979414, 639770915, 909381941,
- 320221747, 891691569, 926364725, 387396150, 926357014, 387388982, 336925974, 272638726, 319655937, 1895697683, 219361057, 224400141, 172951571, 119998750, 152373269, 138480156, 2147552531,
- 319860990, 789777677, 223346977, 3556643603, 206834963, 202070793, 134285359, 167840021, 1141639501, 50336525, 3237945344, 3221307138, 520096512, 10496, 909259557, 640037941, 352723491, 370422021,
- 909259542, 657864247, 640955687, 84020743, 924194595, 909588022, 3744465190, 1715210759, 4262004542, 1114456560, 102582055, 178062593, 928922119, 2683178498, 656214794, 3490316550, 1715341065,
- 4278651452, 390163778, 101581845, 168291996, 1715668993, 168468301, 120211739, 131082, 48299776, 10486016, 2949140, 336663296, 372384051, 587600917, 891691553, 859190289, 822416946, 656541191,
- 570820391, 926164519, 389166647, 842413847, 1075058199, 227541264, 4262269715, 321855856, 18025741, 436895895, 173619466, 151587354, 169478768, 436889913, 2147551498, 319860990, 789777677,
- 223346977, 2154042131, 1513752841, 436865289, 151613450, 151611962, 50338314, 0, 2147565570, 587206912, 13568, 102900481, 370414854, 842216214, 875902518, 337061414, 589497862, 891692578,
- 859190836, 370553395, 656810501, 909587494, 372388662, 118756887, 2147550726, 591012800, 3223534115, 589511203, 1463065914, 1463140405, 894907444, 878130624, 739934462, 218959117, 739908140,
- 218959117, 591397164, 975381306, 591012643, 2149792291, 875845429, 1463104855, 2505520180, 873862682, 437917206, 372512278, 33561110, 0, 2147565570, 587206912, 856883200, 353769010, 587597332,
- 640033315, 909521973, 117842455, 370611206, 909259542, 657733175, 3233818150, 875845429, 901789015, 1463039063, 220994293, 739052813, 220994074, 739052813, 1463058433, 878130485, 892688180,
- 442512471, 372512278, 370809366, 370553878, 327706, 48299776, 10486144, 5374012, 6815843, 16777324, 387396147, 372388662, 101979414, 639771398, 909391142, 101132087, 101065507, 640033315,
- 909521973, 924267059, 639771431, 859190325, 387396147, 572729139, 909391142, 352727315, 842208788, 640955702, 386343459, 101123606, 822421286, 926361122, 102900514, 857084949, 657929778, 657666865,
- 924263223, 321075201, 336814601, 589511203, 975381306, 353704483, 823002965, 590432262, 975381306, 453972003, 235547670, 204999182, 580197128, 235801114, 506074013, 506079774, 85984518, 319293702,
- 261815813, 51906320, 707403266, 86448670, 1224833823, 826016040, 3037831169, 591012614, 589511203, 874390330, 210708497, 975388975, 591012643, 236926212, 168692234, 168706086, 4043181578,
- 706616340, 706616874, 319306753, 151389445, 822942213, 706616874, 1697650720, 5460763, 4280287238, 18875072, 3408064, 4718654, 6291540, 16777322, 353699362, 573642033, 336925958, 336933654,
- 336933654, 842216214, 859125046, 857084949, 892744243, 892744245, 892744245, 589706293, 640955701, 859190277, 572724531, 890713382, 353776179, 587600917, 891691525, 842217012, 101979414, 891691553,
- 842217012, 101979414, 589501443, 859059490, 536949299, 319650661, 219352339, 220204307, 219398163, 219352352, 320015635, 4227758861, 1886391571, 1890587405, 219353869, 319680766, 319622419,
- 219349267, 218960659, 272438035, 2685407392, 784335120, 320868386, 319635469, 538119584, 219353869, 319627296, 320867603, 219389965, 538119488, 2687377936, 329257741, 329261069, 319643661,
- 218960752, 218960659, 218960659, 218960659, 272630035, 50335760, 3774808064, 2684436482, 838864640, 21504, 370413841, 909254963, 640946485, 102900003, 102904087, 857084949, 909522738, 118887959,
- 572720646, 909391142, 387330611, 101123606, 388376358, 842208788, 389428791, 101127702, 639771398, 859190325, 370611762, 637929222, 572728871, 18490886, 640031424, 440466970, 471124006, 236327964,
- 117969926, 621676033, 943204373, 237311272, 134676742, 2047739412, 236327964, 117969926, 621676033, 943204373, 237311272, 134676742, 370017812, 1610685460, 639287550, 1073814054, 2317755930,
- 471077916, 117573392, 252122119, 673724433, 118427960, 17172244, 338694151, 34017308, 118753031, 674763023, 252786728, 101127175, 470812417, 512, 3221348607, 453025793, 14080, 372388627, 336925974,
- 639771398, 640955701, 336667427, 639771398, 909381941, 639771393, 909381941, 353776179, 909259541, 909381941, 353776179, 101061649, 975413280, 218960675, 2149197331, 319622419, 2687303955,
- 219353869, 444601101, 218960678, 20587283, 591012768, 320015776, 639279117, 319660286, 2147552531, 1090392845, 68883, 219353869, 18491104, 320015648, 601947661, 67117882, 3120496640, 3221307138,
- 788538112, 1526741760, 336658432, 842216214, 370545431, 909254963, 589706293, 656876065, 926298657, 589706807, 589506081, 336791074, 909579799, 640103477, 572851719, 370607623, 909586995,
- 872621607, 892547894, 842217012, 857019670, 336926258, 354624262, 572720660, 590689574, 168699426, 872482350, 18491397, 235801120, 350289418, 536937732, 688334361, 4262729733, 774049637, 411045386,
- 404232216, 18356248, 219028560, 471600653, 235736334, 738725104, 201852940, 202115116, 135015432, 137104392, 178782476, 4059956750, 168698138, 471076362, 328800030, 4262338591, 219028542,
- 471600653, 235736334, 404232212, 404232216, 134218008, 201862156, 204212236, 738985992, 135007240, 50334764, 3120496640, 3221307138, 1174419968, 20992, 842215699, 655700759, 101130790, 370611988,
- 909588274, 572925748, 859113223, 117904946, 555943430, 556996119, 336926258, 572596998, 637740838, 639771427, 322319413, 925247266, 389165878, 621152022, 654706452, 926168358, 404100918,
- 3222217773, 118753047, 121636615, 121636628, 118753031, 404007703, 638003461, 98631193, 536941572, 168693258, 672850174, 100742149, 235801134, 219028642, 471600653, 235736334, 404239361, 404232216,
- 3221297176, 118973984, 118753031, 1074202432, 117904391, 526784263, 504862995, 168694812, 438373898, 235278081, 4262332938, 404232192, 404232216, 236728344, 470682893, 218959388, 65550, 46202624,
- 12583168, 16777232, 336992049, 570820359, 874915623, 842413879, 215489537, 571201548, 202168331, 19008472, 571201716, 202168331, 186780632, 50334936, 3204447999, 3221307906, 788539392, 27392,
- 572724499, 118822150, 387384838, 909259542, 389166647, 926036758, 656815671, 640955687, 875897635, 572728102, 557123334, 119940885, 119943447, 572720646, 640755494, 101123591, 370546438, 926299703,
- 842208790, 909522742, 370611767, 909259542, 387323447, 909587990, 656811814, 103876390, 639771398, 471085248, 218567212, 270080613, 672206110, 421403921, 118318362, 337390610, 2148340528, 18879245,
- 336882688, 286397223, 689181992, 370349328, 51252508, 319624707, 806685469, 237639705, 100861957, 405409290, 152449049, 369955614, 219022083, 353572380, 353642768, 547356968, 260051996, 1544364806,
- 201919247, 1544492044, 252060429, 538711168, 3356693261, 119823195, 219016967, 185536012, 118624270, 218961411, 235143950, 202247175, 33817095, 201786372, 252054542, 219022084, 117642765,
- 185536786, 67112463, 3237937152, 3221340161, 1409302272, 1543526400, 823328768, 909588018, 372388662, 353768983, 369559060, 856101909, 118756658, 353768967, 555943444, 875898402, 640104246,
- 858993717, 926168358, 875898406, 909522742, 387330611, 840373782, 104150326, 354886179, 858986004, 842413874, 120788503, 926357287, 3759605511, 84084485, 538381838, 590029579, 1007223070,
- 556204301, 4262269223, 655428988, 218179361, 503384380, 186854179, 235804448, 1023869701, 875304721, 286731316, 34151436, 470352139, 540033100, 537935984, 33861633, 574031619, 185340935, 101058322,
- 51189529, 1243177218, 286330156, 424291341, 218301025, 101062935, 202052103, 924976916, 67240711, 236001232, 286131718, 84220439, 3223347226, 538984576, 262272, 48299776, 10486144, 5701697,
- 8323187, 858849536, 924260146, 842216246, 336925974, 388178694, 372388662, 101979414, 639771398, 909391142, 101066551, 588715029, 640955702, 891495206, 858994228, 924260146, 639771431, 322319413,
- 336922161, 909259542, 589706293, 370615074, 637929222, 104006951, 639771398, 909391142, 372388662, 640033559, 352723491, 842208788, 639772470, 859190325, 336926258, 1058537734, 789449751,
- 219417609, 1041044243, 588518199, 975381306, 591012643, 487527706, 54919971, 1613515051, 459607315, 274869523, 235801146, 438702017, 438707738, 85721860, 319293702, 1137769989, 590300681,
- 975381306, 155594531, 337643331, 438707738, 221519892, 218960659, 2684424979, 120068629, 220204307, 587621907, 975381306, 591012643, 487666718, 271008534, 739250192, 220212041, 1378685715,
- 168431134, 317324814, 640031255, 891689498, 84218632, 739051782, 591012668, 1008941603, 638980652, 371595802, 218960650, 218960659, 196627, 46202624, 13238528, 2424843, 16777320, 654706452,
- 926168358, 118888246, 353776179, 587600917, 101058339, 639771427, 572729127, 875902246, 103876406, 101123591, 370611735, 909259542, 909588023, 640099879, 925247015, 370619958, 370611735, 101979414,
- 117835271, 572720646, 640034598, 891692583, 909588020, 909588023, 102110998, 538984449, 538976288, 1080041504, 219358746, 302058242, 302851597, 218237697, 759309843, 117638424, 505155335,
- 1362046801, 135142685, 419693320, 34343468, 856297474, 101323295, 185209608, 1478562077, 559427889, 168500497, 168167443, 154345234, 184615441, 304447489, 621941523, 320016933, 438732050,
- 1662192944, 219156493, 806163299, 149562906, 84017677, 134744325, 134744586, 33883401, 34082050, 201918992, 152045826, 168887818, 117904912, 168428556, 201591306, 269879047, 168169738, 34148361,
- 269093132, 512, 188671, 385915393, 16128, 842208791, 926299959, 656876067, 572720647, 101132071, 387326755, 892679717, 640099892, 654771974, 101131814, 336925958, 858994199, 909588274, 387396147,
- 842217015, 857085719, 269487332, 84390924, 34546536, 269420330, 235614470, 117790501, 1141426177, 406987571, 1108872204, 155464483, 90899459, 268836866, 691209999, 101650183, 352649752, 94964491,
- 1426267911, 426642957, 1006962467, 872814872, 369494352, 403442712, 1342768662, 404358708, 256640257, 223572494, 274189, 4279238658, 24117696, 1114304, 318767164, 370611732, 909522738, 656815157,
- 101130790, 355538694, 353776179, 589497876, 587600917, 892675618, 891691555, 858994228, 889335349, 859190836, 353769010, 1342572052, 1008343582, 505289242, 440146458, 546315802, 219353869,
- 218960672, 319627283, 689966355, 1345267265, 793784625, 268517670, 252654622, 506728207, 252654622, 3409186575, 218960675, 319627283, 320867603, 588451085, 726217223, 791629873, 1227567440, 196658,
- 31522560, 10486208, 2359329, 16777270, 118953734, 102900518, 370414854, 909259542, 640955702, 370620199, 892679735, 589506100, 825300770, 656810499, 909587494, 372388662, 118756887, 570492422,
- 874580742, 1328625453, 827338544, 271536177, 186725647, 168693519, 3764916336, 252654622, 506728207, 252654622, 20188943, 554373009, 1345265461, 793784625, 472993839, 557061427, 268830219,
- 806226544, 438219006, 437926938, 437919262, 505027132, 268435968, 1879163135, 1023459585, 20224, 386270739, 101062422, 370545685, 572724503, 370414854, 336933683, 909259542, 842216757, 640955702,
- 1043669795, 640955650, 909588007, 103163686, 587597319, 640099874, 909379366, 389166647, 336926230, 570820358, 1210459687, 201851658, 673850383, 169880389, 537529870, 235538958, 235801120,
- 1160454154, 237185576, 167970828, 218635018, 655824679, 35325965, 1008343582, 505289242, 440146458, 3103858202, 252320520, 776738827, 87181869, 168431130, 235540494, 235932174, 437127690,
- 759837189, 186141742, 135989775, 269091592, 168825876, 874438915, 252645135, 874389044, 252645135, 196660, 29425504, 12583408, 4063291, 16777296, 118953734, 572728870, 336922118, 353834518,
- 352723491, 858986004, 857084949, 892679730, 892744243, 589506100, 889339445, 389490484, 892745494, 589706293, 823599651, 101975857, 656541191, 875898406, 842413878, 18224663, 655033938, 506795286,
- 606816556, 169354814, 403312142, 235538958, 235801112, 1025972234, 655956260, 235867915, 1745907722, 370547296, 437655092, 873862682, 18486806, 655036337, 722735638, 1143483465, 236586540,
- 537790986, 168693258, 168431136, 738597390, 640624708, 101394201, 175116294, 447754254, 218959148, 437922829, 218959148, 33565709, 3237937152, 3221291010, 1845517312, 588447744, 336925986,
- 926357015, 335939351, 926029335, 352720695, 387323412, 102900501, 857084949, 370414899, 892744243, 909259573, 589706293, 37631267, 656815157, 924194615, 875902262, 119677731, 118953734, 119677734,
- 875968295, 119678503, 909584135, 336799271, 570820358, 891692583, 909588020, 370546482, 168845424, 337577738, 117901063, 252118804, 658318367, 235801104, 168693770, 168824330, 269094414, 270810662,
- 119489807, 1611663882, 134480907, 891962655, 118434357, 336004871, 521406215, 3842245640, 873862682, 437917206, 372512278, 3221297686, 67854352, 337577988, 118753031, 252118791, 1143485738,
- 236062252, 135137802, 168693258, 168431112, 738595342, 807086148, 136267028, 1611334660, 118098448, 522143007, 336004879, 117901063, 168238868, 436272906, 218959148, 437922829, 218959148, 50342925,
- 3237941248, 3221319682, 1006637312, 29440, 656810551, 909587494, 372388662, 118756887, 825689606, 589702708, 352716322, 387323412, 102900501, 857084949, 370414899, 892744243, 909259573, 589706293,
- 37631267, 353834503, 352723491, 858986004, 857084949, 892679730, 892744243, 589506100, 889339445, 589702708, 369559074, 842216983, 336926230, 572720646, 515900967, 252645172, 505295887, 252645172,
- 814887951, 1345401167, 692135471, 320015648, 219357197, 220205837, 537727763, 405160233, 220211232, 537727763, 319622419, 320015648, 1093214221, 827273254, 370554141, 522591758, 857611827,
- 236856863, 437919392, 505027132, 1008343582, 1881020954, 791629873, 1227567440, 321062706, 538119437, 219353869, 218960672, 839328531, 119038793, 218960675, 319627283, 320867603, 588451085,
- 726217223, 305090609, 387782672, 522138398, 488054323, 1024, 2147672319, 553689089, 905978880, 26112, 372388609, 118756629, 120006406, 101979414, 639771398, 909391142, 372388662, 640104215,
- 823604791, 370410801, 926029335, 875902518, 572925734, 84280839, 908534321, 842208823, 875902518, 842278694, 892745265, 640104245, 875639093, 858994231, 353703474, 654706452, 353765159, 17171988,
- 235565112, 554372879, 1345265461, 810496305, 472993584, 557061682, 1745225227, 438219006, 437926938, 437919262, 505027132, 505556993, 134746909, 337523487, 319816209, 34021672, 175116294,
- 185536270, 790574369, 245367120, 101740554, 874580742, 1345402669, 827338543, 271601457, 186725647, 3761245967, 252654622, 506728207, 252654622, 3459518223, 18814476, 421475102, 117509931,
- 689246492, 84543265, 168693508, 101060720, 758391051, 793784631, 768, 2147664127, 285261825, 1795177472, 574029824, 874915622, 859190839, 370611762, 101058324, 640954679, 102900518, 370414854,
- 588584726, 336922146, 355676950, 842208788, 859125046, 875902514, 891495206, 369558078, 909259542, 640955702, 370620199, 892679735, 589506100, 386271010, 589694743, 387319586, 372388662, 101979414,
- 656548614, 874426374, 252645135, 874389044, 252645135, 1328583220, 793784625, 539574566, 219353869, 218960672, 319627283, 689966355, 407905857, 1328621122, 353308720, 252644129, 275778062,
- 554370566, 389491988, 168235286, 506666763, 740242206, 513808160, 440146458, 438181402, 437926938, 1345417246, 827338543, 120736043, 218960675, 319627283, 320867603, 588451085, 2387161607,
- 1345265177, 355671089, 101392660, 175116294, 185536270, 102700321, 503455772, 857677619, 1515038, 4280287235, 16777952, 3342528, 4718646, 842203392, 336925974, 656868871, 336992007, 656541191,
- 353765159, 587597332, 891692578, 859190836, 924259890, 926164519, 387396150, 925247287, 825300790, 387322881, 909586966, 640955702, 119678503, 2013332998, 252578416, 371264271, 117901081,
- 488179476, 827273247, 791629873, 840708432, 119151894, 118753031, 186717721, 4268230150, 437919376, 505027132, 1008343582, 18749978, 1879707328, 184944144, 119084577, 117901076, 925703193,
- 791629873, 1328623952, 487526448, 118753049, 370738951, 252644129, 503381808, 252645172, 505295887, 252645172, 33567759, 3237937152, 3338747905, 1224750848, 823328768, 370607623, 588591923,
- 336922146, 355676950, 236262448, 370414850, 909259542, 640955702, 892610342, 909259573, 589706293, 842216739, 656881207, 101978918, 656541191, 875898406, 842413878, 2501252631, 67373120, 169879563,
- 537529870, 723795494, 1227631689, 641606699, 235801120, 187179018, 1074267140, 370827275, 370553878, 370547226, 437655092, 121682689, 236456458, 403573258, 738590977, 1227630660, 742992683,
- 103564328, 236454145, 403573258, 1074203146, 446299660, 218959148, 437922829, 218959148, 33565709, 268443648, 1879142402, 1140855040, 574029824, 874915622, 859190839, 370611762, 101058324,
- 336933687, 909259542, 355677493, 924194580, 657733175, 101131815, 891491605, 572728884, 588584198, 572719662, 336922118, 842208790, 516961846, 252645172, 505295887, 252645172, 579875855, 235538958,
- 185536288, 1342637904, 537857803, 235538958, 1244792098, 810496301, 758206256, 508572234, 440146458, 438181402, 437926938, 171464734, 940183054, 101060664, 336023563, 101404679, 943198214,
- 168693258, 675621688, 825315375, 1160261456, 268435968, 1879163135, 285261825, 10752, 387322899, 909586966, 640955702, 119678503, 823592454, 587600917, 892675618, 875889198, 842217014, 336926230,
- 508560902, 440146458, 438181402, 437926938, 219385886, 1093210893, 827338534, 640634929, 504365377, 252645172, 505295887, 252645172, 2211132431, 219353869, 1228015491, 793784619, 724652079,
- 33567305, 268439552, 1879142401, 587206912, 571670528, 335939334, 857085463, 909588018, 640034612, 656810499, 909587494, 372388662, 118756887, 515900934, 252645172, 505295887, 252645172, 790508559,
- 404232018, 791630359, 404232018, 805392919, 1008343582, 505289242, 440146458, 3774750234, 1579755823, 791619881, 694036777, 100675369, 3774808064, 2684420098, 452988672, 922756864, 1325417216,
- 554893312, 353703474, 555943444, 892675618, 570766900, 370414854, 892744243, 337061428, 909259542, 589706293, 553977378, 353703474, 555943444, 892675618, 570766900, 370414854, 892744243, 337061428,
- 909259542, 589706293, 20973090, 640031360, 444661274, 838936102, 168693258, 638455306, 235538958, 235538958, 2147596542, 438707738, 639271166, 171049254, 168431118, 237899278, 235801098, 17697290,
- 1075455648, 438707738, 1210456640, 235538958, 235538958, 235801112, 235801098, 1075455658, 438707738, 1210456640, 235538958, 235538958, 235801112, 235801098, 768, 2147664127, 285261825, 1090527488,
- 336789504, 840308502, 892745271, 640099892, 101058338, 857084931, 892744225, 589702708, 101065251, 857084965, 892679730, 892744243, 589506100, 589706293, 353699362, 352723491, 858986004, 505291360,
- 572399172, 1142824482, 1612848670, 2214661393, 1362104589, 1362189361, 251134256, 1074661898, 168693258, 168431168, 235552782, 20974094, 289153600, 1007751441, 289153570, 1007751441, 286096638,
- 1362169105, 2035363888, 168693258, 168431168, 235552782, 239077902, 920074, 4278190083, 25166528, 1114304, 4259873, 370414336, 926029335, 875902518, 572925734, 50726407, 556996116, 875902514,
- 589506086, 17172002, 387388422, 387188231, 926364182, 926029335, 656880694, 657733175, 117908006, 1612850727, 1142824482, 572661278, 507780638, 291512862, 226754829, 827404305, 810627420,
- 117954305, 117911343, 788993031, 118753071, 791611143, 336004871, 120532743, 574619924, 286331196, 572668945, 286331196, 2097036305, 219222285, 808472881, 119669073, 791611156, 117904391,
- 120532743, 118753031, 336015151, 788989703, 33556271, 3774808064, 2684452866, 771760640, 571670528, 336663814, 909259542, 857814325, 370414899, 892744243, 589706293, 352723491, 873538325,
- 119674662, 857085702, 657864498, 319627302, 319622419, 3760193537, 319622419, 232794168, 2199117843, 387389230, 388902423, 18290455, 4262269856, 320015744, 220209165, 3758953235, 219363368,
- 218104224, 673734675, 673720360, 50341928, 3237937152, 3221340161, 805314560, 15360, 841036051, 336663830, 370607878, 572728070, 119744295, 572728070, 641152806, 873542950, 336926518, 841036566,
- 875902262, 572597030, 119674630, 857085702, 657864498, 90150, 573519912, 134546734, 923340072, 218707840, 84281128, 942613038, 17634056, 320015616, 218169101, 236757011, 470682893, 218959388,
- 952107278, 604045096, 86902070, 926353678, 772083209, 19150341, 1614292992, 320015712, 319643661, 404278547, 404232216, 83892248, 3237937152, 3221340161, 805314560, 1275084800, 22528, 841036051,
- 336663830, 370607878, 572728070, 119744295, 572728070, 641152806, 873542950, 336926518, 842216214, 875902262, 572728102, 102905606, 370414869, 909259571, 640955701, 370409763, 892744243, 572728884,
- 102900998, 857084949, 875902514, 90150, 573519912, 134546734, 923340072, 218707840, 84281128, 942613038, 1343034120, 219353869, 3490909520, 219353869, 320015696, 333512205, 320015629, 18025741,
- 320015648, 320015629, 674807809, 908329215, 235220485, 154613513, 86902030, 74806, 1619015720, 219353869, 320015712, 1611469587, 219353869, 4279438688, 320015616, 320015629, 218960659, 218960659,
- 196627, 35651584, 6291776, 2293771, 16777255, 353706529, 841036564, 624178485, 353776161, 353776149, 587600917, 587600917, 891691553, 87438389, 20259093, 276889296, 276824336, 2147578110,
- 319631137, 556731667, 790724862, 4270915887, 270533024, 2685407392, 556744720, 1074598672, 554701581, 2686529327, 2153787169, 196736, 35651584, 6291776, 2293771, 16777255, 353706529, 841036564,
- 624178485, 353776161, 353776149, 587600917, 587600917, 891691553, 87438389, 20259093, 276889296, 276824336, 2147578110, 319631137, 556731667, 790724862, 4281401647, 270532864, 2685407392,
- 556744720, 1074598672, 554701581, 2686529327, 2153787169, 196736, 35651584, 6291776, 2293771, 16777255, 353706529, 841036564, 624178485, 353776161, 353776149, 587600917, 587600917, 891691553,
- 389428277, 20259605, 276889296, 276824336, 2147578110, 319631137, 556731667, 790724862, 29421871, 278925344, 1074831376, 319824175, 319635469, 791617808, 790732833, 8421472, 3, 20972064, 720992,
- 2555939, 572588288, 856954133, 892678689, 841033012, 840242454, 336925974, 336929542, 572596998, 875902246, 588584758, 4275044661, 17830016, 1895698560, 790724609, 219353869, 2164138287,
- 2435788577, 270532960, 2685407392, 556744720, 1074598672, 554701581, 2686529327, 2153787169, 131200, 35651584, 6291776, 2293771, 841028352, 588518677, 892674593, 336922420, 841036566, 842347830,
- 875902262, 875897638, 572597030, 2147569670, 2164133904, 556744720, 790724609, 219353869, 2164138287, 536948513, 269525008, 2685407392, 556740385, 1074598672, 554701581, 16789295, 3724476416,
- 2684436481, 6912, 909390097, 85406259, 101979414, 370615075, 637929222, 101132071, 891691555, 118032654, 218567169, 87651849, 420219912, 122829318, 17631498, 101583241, 151652339, 420246029,
- 201917958, 218652276, 4278255625, 29360127, 12648705, 285212748, 389428785, 387323415, 926365238, 370611766, 102958854, 857019654, 336926258, 354624262, 387388948, 101127702, 640100102, 101066534,
- 637929223, 926295591, 892745271, 639771445, 859190325, 640955699, 640034599, 135140353, 269495321, 235411756, 285278484, 572065805, 320015648, 421666829, 17894664, 135140353, 269495321, 235411756,
- 285278484, 572065805, 320015648, 421666829, 17894664, 17894819, 303497729, 16914194, 218960129, 604176661, 219373593, 425726733, 16843300, 286067989, 386007297, 35066386, 219218177, 16847886,
- 1612260354, 319622419, 35920224, 1310977, 4278190084, 20972224, 2556096, 4456500, 318767190, 352716305, 842208788, 371275574, 909259542, 656815157, 892745233, 572728884, 639698694, 102900518,
- 622203925, 286725681, 639698694, 926290215, 370414871, 909259571, 640955701, 102900515, 370414871, 909259571, 640955701, 336929571, 236987142, 303703570, 1375799325, 437394696, 235803174,
- 303703570, 2935883805, 437394696, 3070300710, 135204616, 252227326, 319358991, 319651853, 226495763, 219381779, 320015744, 438714381, 4009642241, 437394696, 235803174, 303703570, 302057501,
- 437394696, 235803174, 303703570, 135204637, 252243710, 302057487, 1614810888, 219353869, 320015712, 319627437, 224398611, 639246355, 768, 2147664127, 654360577, 1627403264, 353566720, 336922118,
- 909259542, 370553655, 892744243, 891758132, 875902518, 102900518, 640033543, 352723491, 825693716, 353834547, 639829766, 322319655, 857085491, 875902514, 909453094, 640955702, 117842467, 387323171,
- 353834547, 639829766, 354628903, 336922118, 909259542, 638717472, 136122906, 303892690, 236070426, 438702606, 3523747090, 437394696, 3529839142, 135204616, 252643538, 487117512, 304421650,
- 621940238, 136122907, 772281161, 135204616, 1074727122, 438702606, 1224809746, 303892594, 236070426, 438702606, 1913134354, 437394696, 235803174, 303703570, 135204637, 252643442, 4261966344,
- 638717583, 136122906, 303892594, 236070426, 253169944, 252211720, 690554895, 437394696, 33559078, 3774808064, 2684469249, 436211968, 554893312, 353703474, 352723491, 639771413, 909381941,
- 889327361, 858993717, 440402240, 471101478, 640031456, 1075878401, 21172256, 3759810208, 644879388, 440402202, 549518886, 1127030848, 131088, 46202624, 12583168, 2228242, 859119872, 587600917,
- 891691555, 859190325, 354620723, 891691575, 859190325, 353776179, 587600917, 641736705, 639295514, 1077942822, 640031392, 639295514, 1077942822, 438707738, 1076239072, 438722784, 640031456,
- 639295514, 4294903040, 2147664127, 721469441, 1073753600, 1442857984, 637599744, 102900518, 102900487, 857084949, 286725683, 352723491, 37426708, 875902514, 287515430, 842217270, 640955702,
- 389481251, 926298631, 656877110, 119677734, 386270727, 824514070, 369566487, 909259542, 656815671, 572728871, 101058311, 554401793, 186717204, 320015744, 638087693, 320015776, 230735885,
- 2685211411, 225576998, 1208816403, 793266248, 67242055, 268984069, 90114064, 1191707140, 2437459710, 793184309, 34096943, 140444677, 1594363920, 2684421125, 252776719, 319622419, 3657306153,
- 319622419, 319622419, 688924417, 319622419, 2088558846, 136457568, 245565201, 285713166, 3693945352, 757207420, 285745709, 235840263, 1116067, 4278190082, 25166272, 2949312, 318767159, 842211635,
- 101979414, 118756643, 353769223, 353776149, 589497876, 639771425, 859190325, 926364725, 892675623, 875898402, 875626806, 101132071, 540218645, 536871200, 219353869, 793003055, 219353869, 536936224,
- 219353869, 793003055, 18027277, 1145314317, 3221340188, 319622419, 1143947787, 188886852, 319622419, 319622419, 1143947787, 188886852, 319622419, 472402942, 672941124, 196619, 29425408, 12583296,
- 3473453, 318767165, 842211635, 101979414, 118756643, 353769223, 353776149, 589497876, 639771425, 859190325, 926364725, 892675623, 875898402, 387192630, 892679731, 858854179, 120006438, 18882566,
- 319627264, 1143934227, 319631172, 4280290579, 319627264, 1143934227, 319631172, 2685422867, 2685452304, 1145308933, 331350279, 185797901, 1145319234, 319504943, 320015629, 185797901, 1145319234,
- 319504943, 1259539725, 488118301, 146865675, 121914375, 512, 2147598591, 755023873, 14080, 857813779, 336926258, 336929542, 370607879, 372380949, 587600917, 572727587, 909391142, 926168371,
- 891692855, 891691573, 823604788, 924260116, 590689590, 73760, 320015648, 1145319181, 320015663, 16719885, 320015648, 1145319181, 320015663, 1145314381, 3221340188, 319622419, 1143947787, 188886852,
- 319622419, 319622419, 1143947787, 188886852, 319622419, 1142696011, 187178052, 768, 2147598591, 755023873, 1090533120, 336658432, 336933654, 101127959, 102896917, 857084949, 842211635, 640955702,
- 657732899, 892745511, 892744245, 589506100, 102900513, 355676439, 654771988, 823211302, 926364725, 353703447, 1143934227, 319631172, 18877715, 319627264, 1143934227, 319631172, 4280290579,
- 319627264, 1142734944, 1142692932, 2684427332, 1108022029, 793003055, 219351874, 219353869, 1108022029, 793003055, 219351874, 756224781, 1142695947, 4264041540, 472386443, 672941124, 65547,
- 29425440, 12583344, 318767154, 907482674, 387330611, 372388662, 842216983, 335748374, 336922374, 572728070, 657798438, 875902246, 336934711, 54342195, 328218164, 302907931, 235019027, 35328786,
- 471077390, 219357997, 840109472, 269031214, 3221298192, 436998682, 303696914, 269753356, 1076383760, 319645967, 710937875, 505822246, 270206995, 807154704, 16784404, 3237937152, 3221348353, 15616,
- 336933121, 892678707, 842217012, 336925974, 892678707, 842217012, 336925974, 589497862, 640100130, 842413876, 892606231, 859190289, 353703474, 892482324, 859190325, 536942130, 219353104, 269488909,
- 319622419, 321998640, 208749405, 203557643, 218960700, 319819795, 18025741, 269537440, 320015792, 269529101, 320015728, 1345441805, 191578159, 185338914, 16974394, 320015632, 269529101, 320015824,
- 256, 131072, 788562689, 859242496, 925247015, 387397174, 924194609, 908535606, 842216246, 353703447, 721815060, 891691522, 640038708, 590820405, 875898402, 3538298934, 84217616, 1137446941,
- 251987215, 270075211, 740569646, 1076050467, 203166752, 3020691986, 4028045073, 270337346, 1074073360, 252642581, 319690757, 1899965476, 472070691, 34411284, 236065563, 386994455, 256, 131072,
- 738230273, 336658432, 839006998, 101979414, 102892075, 991302677, 336926467, 842216214, 872627510, 723920679, 470163971, 340815892, 1343495196, 471602224, 575680532, 1611469646, 1897141005,
- 1345272354, 18617456, 471602256, 471602196, 840700948, 320015630, 202387469, 816061731, 65564, 46202656, 12714274, 318767173, 842208791, 909522743, 118887959, 857081351, 909588274, 370546486,
- 101057287, 825241607, 590426160, 656876067, 909587494, 370612018, 640100150, 372651830, 857085719, 656881202, 909588006, 87684886, 637802004, 218961666, 19137294, 34211080, 219612198, 1375931405,
- 137118988, 1900240139, 571149068, 168113932, 201539330, 68684813, 118162219, 53805577, 369954061, 349480961, 235778581, 219611651, 151586474, 67964288, 4262270724, 53947117, 571173696, 889916428,
- 3473278468, 50599948, 177147148, 231081739, 218301462, 4278125568, 3221340415, 771801089, 1107310592, 19456, 640094483, 101058342, 370546455, 858986007, 842216241, 54343222, 572728884, 589702663,
- 640026402, 889659939, 572728884, 336925446, 892674595, 858927924, 336926002, 892674595, 336926516, 892674595, 2150773556, 220269112, 1208616205, 120146457, 272631048, 472070691, 34411284,
- 236262171, 302979333, 286332686, 269512727, 271585296, 274731024, 17829904, 1270742680, 168428813, 576720161, 587269161, 271590202, 203166768, 219093522, 294915090, 3892188951, 1611665504,
- 274731024, 269508624, 1611665504, 327696, 29425437, 12583360, 1441800, 3014692, 318767193, 353699362, 640955699, 352723479, 857084949, 892679730, 353838644, 842208788, 875902262, 102900518,
- 640037157, 386270727, 101135127, 336925958, 857085719, 909521459, 587609397, 103228962, 354886179, 589497876, 859059490, 892744243, 36382260, 1074990560, 319640339, 319622419, 219362067, 219353869,
- 3724415757, 202119429, 1179059722, 639702840, 1044524811, 254495020, 102831377, 252777233, 272113194, 387004432, 1176113431, 219398145, 319672528, 1074598816, 219353869, 1074990400, 320015680,
- 319635469, 168599571, 202966278, 604184739, 624237337, 1227566860, 403245356, 17369875, 269494814, 386994455, 512, 2147622912, 520119809, 13824, 909580033, 286594583, 572720660, 120927526,
- 656548614, 101979431, 891691555, 909587473, 859190277, 353776179, 589497876, 587600917, 892675618, 19276323, 242644570, 219354646, 173413133, 1443500048, 319622419, 3036550678, 230690067,
- 1074598675, 319622419, 18025792, 329162323, 4279699208, 320015616, 225681421, 228619021, 17634067, 134682368, 320015654, 3759344909, 219353869, 50336736, 3237937152, 3221291010, 754979072, 13824,
- 656810501, 909587494, 372388662, 118756887, 352519686, 857084949, 892679730, 370546483, 657864247, 892745255, 589506100, 890701346, 353776179, 19072532, 594953472, 1982013986, 594953541,
- 1982013986, 168431269, 69549326, 118032659, 336601604, 173547823, 222310414, 1074598675, 2319137605, 1162165051, 998914875, 1744913723, 235561072, 1380452878, 67372809, 189466899, 790697251,
- 322986510, 1248525, 4278190083, 25166528, 196800, 2162707, 287380224, 336659233, 841036566, 873542966, 572597030, 102896390, 857084949, 892744225, 1076045364, 16646146, 35268160, 640031232,
- 436272666, 319651878, 2147552531, 219353869, 3774775297, 3774750721, 438707738, 639246337, 325516838, 320015629, 1248525, 4278190083, 29360576, 1769664, 4522021, 909382400, 353776179, 875901717,
- 372388662, 842208533, 555029782, 859190325, 336659763, 572596998, 387003686, 353699362, 352723491, 858986004, 857084949, 892679730, 892744243, 589506100, 1613116469, 319622419, 218960768,
- 471085075, 337395966, 476053808, 346095124, 235593756, 235801144, 168704010, 171445770, 940183054, 228589838, 537727763, 320015648, 337387533, 471085104, 351338112, 18095132, 168704016, 168431160,
- 235550734, 238553614, 940444170, 50335242, 3237937152, 3221340161, 620763904, 13056, 352723475, 102900501, 891360533, 589506100, 589706293, 353699362, 640955683, 370413831, 909254963, 587665717,
- 875898402, 842216246, 101979414, 806555008, 3221298196, 321917980, 2148732173, 337415443, 471097345, 235581576, 179309070, 3221294606, 471862547, 338702356, 319627292, 538971411, 4274000653,
- 471602416, 3088056596, 235538958, 235538958, 768, 3221340415, 453033985, 1157637376, 571670528, 588584198, 353699362, 640955681, 875897635, 102900518, 891491605, 285681204, 556996116, 288699954,
- 370607879, 570820372, 101132071, 874915618, 640104247, 842413876, 909580055, 336992050, 806555008, 3221298196, 321917980, 2148732173, 337415443, 471097345, 120532879, 118753031, 336015151,
- 788989703, 117901103, 791611156, 117904391, 219398145, 806624288, 538711088, 219353869, 319627296, 351338176, 18095132, 791638288, 117904391, 120532743, 118753031, 336015151, 788989703, 117901103,
- 196628, 29425408, 12583360, 2424859, 318767160, 353699362, 352723491, 875897109, 891495206, 572728884, 588584198, 119944245, 857084945, 892744225, 101123857, 640100130, 842413876, 909580055,
- 336992050, 806555008, 3221298196, 321917980, 2148732173, 337415443, 471097345, 336031863, 117915655, 788993031, 118753119, 331350279, 337387533, 471085104, 320015648, 220209165, 4043227155,
- 337386516, 1886457857, 121636615, 117901076, 117923631, 16782343, 3774816256, 2684428290, 7168, 372388627, 909579541, 924128534, 35460662, 555943444, 54339106, 1077950004, 211620621, 386702615,
- 1627264028, 18029588, 2534216608, 219022932, 235295807, 343971853, 1343495196, 319680560, 268436224, 805421311, 285261825, 721428224, 336789504, 840308502, 892745271, 640099892, 101058338,
- 352723511, 891429652, 842217012, 335746069, 909259542, 587609397, 655370018, 558768417, 556214049, 555830817, 639275047, 674762768, 219361296, 269488909, 805376016, 320094759, 658641939, 320094759,
- 423760915, 269490726, 269498408, 319647998, 61017363, 196611, 29425408, 12583417, 2949144, 318767158, 842217012, 842208534, 336992023, 587597575, 891691553, 859190325, 101979397, 656548131,
- 926361127, 892547894, 842208563, 101975830, 891691555, 333460277, 2568162573, 70255879, 117780484, 319653886, 2684423443, 2281573651, 187696391, 117780491, 228606105, 219398163, 20976397,
- 320015776, 70255885, 87032846, 222301459, 222355475, 187696403, 537210891, 233640736, 1611469587, 768, 1073930751, 50372353, 385879296, 285540352, 823595303, 288699959, 117909044, 352727301,
- 924193809, 2147553591, 261218496, 4269739029, 202706799, 2164333695, 914357815, 17827386, 68029775, 268830515, 235778558, 2197893637, 256, 179711, 369147905, 554893312, 286594610, 589497876,
- 640091655, 572732725, 873542950, 2147565622, 438707738, 151550859, 639262729, 650117414, 450952730, 84303142, 642779652, 438305050, 196646, 46202624, 12583168, 2031633, 83886125, 640099874,
- 909522740, 387330611, 101127190, 640942854, 352723491, 857084949, 926234162, 572728884, 336925958, 909259542, 1157628213, 572662646, 1162180131, 572662646, 325416483, 320015629, 2148732173,
- 319622419, 319622419, 993740096, 1161509770, 2319137605, 21314363, 320015680, 319651853, 226495763, 2148340499, 219353869, 512, 180479, 285261825, 8448, 656810501, 909587494, 372388662, 118756887,
- 570623494, 336925958, 842216214, 875902262, 74534, 572749381, 1165370146, 572749381, 2239111970, 219353869, 320015744, 994394125, 993757755, 993740101, 1161509770, 219373569, 320015744, 319651853,
- 1024, 3221340415, 134266881, 788538112, 15104, 892540179, 572728884, 875890438, 842217014, 353703446, 353776179, 587600917, 891691553, 859190325, 352723479, 842208788, 640955702, 857084951,
- 875902514, 102900518, 438730912, 506471962, 857677619, 471089182, 16721976, 337393704, 235801176, 235801098, 168431246, 168431118, 810549518, 640031280, 857681994, 523443742, 3490978864, 674773032,
- 807146704, 235538958, 235538958, 235801112, 235801098, 1024, 1073922303, 671138305, 1006645760, 17920, 856109331, 926295591, 387388982, 353776179, 119735828, 555943430, 656877090, 875898402,
- 926102326, 370619958, 590611222, 336925986, 926233139, 336925986, 892678707, 590616372, 336925986, 4248121907, 89253969, 319359238, 223763716, 873272083, 4262863621, 86185700, 320015668, 73225741,
- 101255443, 269488194, 269508624, 269512720, 2634092560, 319397277, 151389444, 218960819, 454479635, 332338715, 3004370189, 67438089, 283835923, 269508624, 274731120, 269508624, 274731024, 196624,
- 46202624, 12583168, 4456465, 889192528, 370611732, 909522738, 656815157, 101130790, 388183814, 926036758, 387331639, 117900822, 336922374, 102110999, 656803335, 572728871, 101058311, 925247015,
- 892679735, 640100134, 909522726, 640098871, 842217015, 101127703, 2319137605, 1162165051, 998914875, 27411771, 724248588, 302582824, 151454724, 35396108, 151585565, 402854410, 34014978, 152175384,
- 486738186, 203037442, 67372810, 202860562, 386665227, 185273367, 1984282636, 589439523, 1984251254, 589439523, 285544822, 117703953, 68290826, 855968517, 173409798, 151192593, 101075210, 50924105,
- 1443500292, 87164678, 302253323, 101124362, 336860180, 336860180, 486540288, 3858873087, 184598529, 989868288, 17664, 640098835, 842217015, 101127703, 389165831, 117839383, 656877062, 353769237,
- 587600917, 892675618, 892675623, 654706183, 926361126, 822556214, 101058327, 925247015, 926295813, 370620214, 481297927, 235736334, 219028508, 405016077, 139271472, 453643012, 238175752, 319622419,
- 102961997, 151784473, 772550406, 51787020, 218959127, 1986134275, 84215816, 218958198, 404250625, 404232216, 639637528, 135989863, 1577780232, 336474718, 320015705, 323834637, 205925146, 419825161,
- 488135948, 223950043, 386073357, 44769549, 2869298182, 592141, 4278190085, 20972256, 983200, 2687013, 4259896, 841028352, 336663830, 572596998, 873542950, 640751414, 117908003, 370611718,
- 859256630, 924194327, 656881206, 926360369, 857084949, 892744243, 589506100, 857146914, 336926258, 1076044550, 639287297, 1090394662, 2955290138, 101650183, 151389512, 151327497, 319031890,
- 67504393, 1880435273, 674761230, 942159928, 540020234, 337386516, 648020256, 448855578, 18490918, 2368084544, 160435469, 100992019, 152245001, 319030534, 908731657, 940444304, 238561320, 336862242,
- 262172, 46202624, 12779778, 2031635, 5242930, 102891776, 857084949, 353769010, 842208788, 640955702, 102893350, 857084949, 875902514, 370419494, 353776179, 842208788, 640955702, 102900518,
- 101058343, 35525653, 926298675, 656815671, 117909031, 909584166, 640100150, 169345318, 856296974, 168702547, 1765740042, 320015672, 320015629, 604638765, 168431156, 641541390, 1485442570,
- 2068189198, 353263010, 218306564, 320561166, 825519400, 671417867, 3221297926, 235538958, 171135794, 1074400782, 331366249, 320015629, 1209208077, 607391242, 168693258, 237321510, 352589933,
- 2074238222, 1477316678, 671488782, 875632395, 436742253, 235823116, 4143911936, 2315441919, 184592897, 520098560, 855648000, 1191197440, 1593856768, 1929407232, 2264956672, 2600506112, 2936055552,
- 3271604992, 52992, 370611217, 875902519, 101131815, 875897367, 336933427, 101130791, 842208791, 640103991, 572724231, 842216501, 370611207, 875902519, 101131815, 572724247, 842216501, 370611207,
- 875902519, 101131815, 101130791, 842208791, 640103991, 101130807, 842208791, 640103991, 370611223, 875902519, 101131815, 572724247, 842216501, 370611207, 875902519, 101131815, 875897367, 336933427,
- 101130791, 842208791, 640103991, 572724231, 842216501, 370611207, 875902519, 101131815, 875897383, 336933427, 101130791, 842208791, 640103991, 572724231, 842216501, 370611207, 875902519, 101131815,
- 538976288, 538976288, 269488352, 319956240, 623186451, 303239954, 269488309, 538988560, 538976288, 284172320, 1343229968, 538976288, 538976288, 319956320, 623186451, 303239954, 319956347,
- 623186451, 303239954, 538976347, 538976288, 269545504, 542117904, 538976288, 1075847200, 269488144, 320016933, 304424210, 353506067, 269488144, 538976336, 538976288, 269508640, 304418832,
- 621941523, 320016933, 269489426, 542117904, 538976288, 18882592, 319956320, 623186451, 303239954, 269488341, 538988560, 538976288, 283123744, 621809680, 303239954, 319956261, 270864915, 621809680,
- 303239954, 319956261, 549130771, 538976288, 2686459936, 538976288, 538976288, 319956288, 623186451, 303239954, 269488165, 319956240, 623186451, 303239954, 269488341, 538988560, 538976288,
- 283123744, 621809680, 303239954, 319956261, 275452435, 1343229968, 538976288, 538976288, 269488352, 319956240, 623186451, 303239954, 1536, 180479, 721470209, 1711299072, 2147512832, 38912,
- 909510401, 823591481, 387330864, 370546454, 353768983, 572720660, 640955686, 656811559, 640099878, 640037155, 87438903, 654706225, 1043801638, 372388610, 101979414, 353699335, 587597332, 875898402,
- 909259574, 909391157, 875902519, 572728870, 639763206, 859190325, 336926258, 101988102, 891691555, 842217012, 842401558, 336992023, 656541191, 926164519, 572720660, 909391142, 353776179, 572720660,
- 640955686, 17179171, 51056270, 16974081, 336070151, 321066251, 403901709, 84871183, 16909315, 101256193, 4294842630, 219026434, 822411536, 1345400140, 286660911, 220148510, 336401171, 504108572,
- 723464990, 319644992, 319622419, 219386643, 219353869, 177672973, 155191834, 169478665, 246417728, 789449226, 237969697, 319687178, 18025741, 135601597, 50397697, 185664773, 221398807, 588059411,
- 218632241, 16974339, 202966529, 249956620, 335675664, 709241870, 573657135, 269686590, 506666758, 319622419, 419828764, 740298279, 958280479, 219396606, 219353869, 228594445, 218960659, 152441619,
- 436879369, 1074333962, 176364042, 554307086, 169946927, 218762766, 33559315, 3187605504, 3271655426, 2063613184, 823328768, 372651783, 117839383, 372651783, 117839383, 370611719, 637929222,
- 572728871, 370414854, 909586995, 370546486, 117835271, 572728113, 892675622, 909588276, 370546486, 121057537, 640099846, 121059126, 640099846, 641152822, 926295591, 370611766, 892744243, 572728884,
- 654706183, 909583910, 858863414, 370553395, 118756629, 654706183, 396174886, 152701797, 1359675912, 51842405, 1343032579, 117904422, 102370060, 386995980, 202838295, 202054150, 738985735,
- 591923226, 1443701562, 202119430, 390070537, 152701542, 1376387592, 51842405, 1359744259, 117904422, 102370060, 386995980, 202838295, 202054150, 738985735, 591923226, 1426989882, 202119430,
- 781320457, 167905365, 1141447179, 218956572, 369366796, 436937484, 185009671, 286332692, 118166551, 186255110, 587340822, 520692538, 151825179, 4263052806, 139800144, 436865794, 52184073,
- 386665741, 587994628, 101128715, 387189511, 337056017, 117835531, 471206682, 591012610, 2870681353, 101058828, 262169, 46202624, 12583168, 1769485, 6422602, 875954432, 119678503, 387188231,
- 20394518, 640103478, 101123874, 840308500, 842076983, 336926230, 352716295, 587600917, 336922146, 909259542, 875902262, 892745271, 589702708, 117835298, 370611718, 909522742, 353776151, 842208788,
- 640955702, 352723491, 842208788, 909391158, 151648001, 671750666, 436865289, 166264330, 169478665, 168364416, 532220442, 203300403, 219421718, 520950547, 370220595, 827273241, 87116845, 235737089,
- 1074004500, 236129579, 789449226, 237969697, 319687178, 436898049, 671680778, 151656970, 183041545, 151587354, 169478784, 1996556553, 740242206, 421989920, 320607238, 504565005, 268836659,
- 574494483, 707743793, 336473158, 235929858, 324024873, 235801101, 791617802, 235801121, 1248522, 4280287236, 18875072, 2752701, 4587575, 16777350, 572728884, 655693062, 640102705, 101058342,
- 118888215, 640100102, 101058342, 387323671, 353768983, 907351061, 824522038, 101131814, 907482886, 121058871, 119940657, 387384838, 858992947, 825698086, 387388934, 590426403, 336922146, 842216214,
- 589501461, 336922146, 842216214, 589501461, 336922146, 842216214, 589501461, 336922146, 842216214, 892679734, 656877108, 537003558, 319622419, 319112235, 84216073, 185206334, 319114758, 84216072,
- 1007488558, 572404782, 319149310, 84281353, 201392669, 335890199, 84216072, 84746263, 119865604, 1563298566, 235801224, 202144778, 235801244, 202152970, 235801212, 202144778, 235801180, 1160425482,
- 1009200169, 536943115, 219353869, 141970225, 319096069, 101346312, 159844870, 319096069, 134369033, 912137509, 402785288, 143730502, 319096069, 16986632, 135595796, 335873286, 134817800, 119147288,
- 168431133, 235670542, 202246666, 168431116, 235670542, 688785930, 772287045, 119871823, 4278452230, 46137343, 12648833, 3276829, 4522041, 389092096, 842217014, 370546454, 101127703, 370607878,
- 101058326, 640024871, 389428791, 875902487, 859186727, 370611734, 875960071, 103163686, 100741383, 120979719, 589432113, 640099874, 656811814, 861217136, 606298173, 101059374, 1763518474,
- 101057032, 2969372692, 101057032, 123387924, 67437059, 134820127, 521283085, 2959419935, 437938945, 571256318, 50735105, 606298173, 17042478, 588929211, 1210065200, 420219931, 106045247, 34080788,
- 114295046, 34080788, 252528534, 134482442, 555689729, 1193287454, 136189247, 249691693, 369688839, 556853314, 169560096, 256, 3221348607, 1040228353, 822149120, 572719630, 572728870, 889652742,
- 572728884, 336663814, 909259542, 37622069, 370553395, 926298675, 587597333, 589702690, 352781858, 842217014, 842208790, 20395574, 505880768, 724246291, 556079392, 218960660, 218960659, 622924819,
- 724246553, 253300512, 537860367, 253766443, 420154137, 724246543, 656282144, 193986848, 269485838, 218369547, 219353869, 319652094, 855706899, 269159940, 3489924368, 269485316, 54526725, 118493189,
- 100666126, 4294901760, 2147581954, 939529472, 1275085824, 1610635264, 906035200, 35598899, 925308211, 119940918, 656803335, 389494310, 370546481, 654706183, 101058310, 117843751, 656868870,
- 909587747, 118960691, 370607622, 858076950, 587600917, 891691555, 571946037, 842208277, 858076213, 336926002, 572728070, 339162406, 875901491, 1124147747, 404496667, 2332099656, 168430869,
- 554525453, 201656841, 34571895, 253955086, 671942403, 151195918, 1544431629, 488130588, 374608403, 1007751431, 1357577751, 220204307, 269496339, 1356857616, 537727760, 270537485, 17829904,
- 772740459, 276872451, 151784714, 218434126, 772349709, 237505915, 151651342, 235015943, 252250895, 3763539458, 1141313584, 404174866, 3766096392, 219353869, 281022672, 3222278160, 319672336,
- 269487379, 33558544, 3237937152, 3221291010, 486541568, 355926016, 842208791, 657798967, 389165365, 353703447, 555943444, 892675618, 909588276, 303013696, 3231584019, 449122066, 2164136486,
- 3306825242, 1982853135, 796265227, 2450211470, 451944467, 4028245542, 194122528, 536872448, 180479, 251707393, 654318336, 989868288, 17664, 372384019, 101978389, 639770915, 909381941, 352723475,
- 842216212, 589706293, 370611239, 875902519, 101131815, 588518693, 875902242, 839332403, 588518677, 875902242, 588518679, 875902242, 23081523, 640031264, 450952730, 562701862, 281022511, 543170863,
- 538976288, 18882592, 269488208, 269488144, 269492240, 3221295120, 2164136486, 438707738, 639270913, 556785918, 790695952, 319956320, 623186451, 303239954, 269500491, 276828224, 1074794560,
- 272666640, 1064976, 4278190086, 20972256, 983200, 2555931, 3866673, 318767173, 353776161, 587600913, 891691553, 322319377, 336922146, 892482355, 656614964, 924194580, 657732918, 84281126,
- 856954146, 875901491, 354551587, 842216212, 119747637, 856954146, 875901491, 3221307427, 438707738, 639254782, 790719014, 789626896, 538992673, 538976288, 73760, 276828176, 269516816, 2148536448,
- 276828176, 648020240, 448855578, 18490918, 4280687168, 270610176, 1613701392, 320016933, 304424210, 85070611, 269488144, 269488192, 269500432, 50335760, 3237937152, 3221291010, 503319552, 10752,
- 587597349, 908535330, 842216246, 370418966, 926029335, 875902518, 572925734, 84280839, 925247266, 389165878, 17172246, 726276751, 286935595, 608183354, 1166212666, 998914875, 994395451, 993757755,
- 704643397, 336925972, 353643050, 507515925, 488514082, 1164124963, 572662646, 1162180131, 572662646, 609580579, 606348324, 2368548, 4278190084, 25166272, 983232, 2555931, 318767153, 353776161,
- 587600913, 891691553, 322319377, 336922146, 892482355, 656614964, 924194580, 657732918, 923141926, 856954146, 875901491, 81955, 438707738, 639238399, 790723110, 789626896, 538992673, 538976288,
- 269492256, 269508624, 438747137, 639271166, 2147555878, 3237881370, 269492527, 627060513, 303239954, 319956261, 276501011, 1052688, 4278190087, 20972256, 458912, 1900561, 3342377, 4653117,
- 909381888, 372384051, 287376661, 555943444, 926230050, 842216212, 589706293, 923148835, 386271010, 926036758, 388376374, 842216212, 589509685, 856954146, 875901491, 354558755, 842216212, 589509685,
- 18490914, 4247132864, 641729216, 440466970, 3389734950, 1981161227, 628104982, 303239954, 319956261, 277549587, 2148536448, 276828176, 269516816, 2148536448, 442499344, 538584614, 639295742,
- 185276966, 522130955, 538976447, 538976288, 269488160, 269504528, 269504528, 196624, 29425424, 12583216, 3604504, 318767178, 353776177, 387322901, 101979414, 891691555, 909522740, 909391157,
- 336933127, 101123633, 370545685, 909521459, 640103477, 892417063, 589702708, 319161890, 656815153, 572732469, 101061909, 857084949, 346043954, 285608220, 790700335, 470353425, 503382364, 673726759,
- 18753345, 523443713, 2686333727, 269487634, 337383950, 2147556372, 228922396, 454428693, 556740385, 369628699, 471114765, 16884784, 674309890, 1093084993, 36122920, 530841857, 857611827, 403759614,
- 269538053, 270009811, 1842196, 4279238659, 19923392, 1573056, 4849719, 842076928, 336925974, 353769238, 572720660, 926168358, 892679734, 822556212, 103879701, 336922119, 842208790, 875902518,
- 874980903, 640955697, 102900518, 875631366, 875898662, 353706531, 336922118, 909259542, 152835232, 556732678, 101789473, 22813705, 1093082625, 658581544, 503382302, 857677619, 236101662, 302911504,
- 471077916, 337412097, 135597477, 790698774, 370876719, 2752321032, 2754616340, 654442753, 658581553, 824721703, 16843303, 506666916, 3791532830, 3003455504, 95621136, 471076888, 196636, 29425424,
- 12583216, 3604504, 318767178, 353776177, 387322901, 101979414, 891691555, 909522740, 909391157, 336933127, 101123633, 370545685, 909521459, 640103477, 892417063, 589702708, 319161890, 656815153,
- 572732469, 101061909, 857084949, 346043954, 285608220, 790700335, 470353425, 503382364, 673726759, 18753345, 523443713, 2686333727, 269487634, 337383950, 2147556372, 228922396, 454428693,
- 556740385, 369628699, 471114765, 16884784, 674309890, 1093084993, 36122920, 530841857, 857611827, 403759614, 269513477, 270009715, 1842196, 4279238659, 19923392, 1573056, 4849719, 842076928,
- 336925974, 353769238, 572720660, 926168358, 892679734, 822556212, 103879701, 336922119, 842208790, 875902518, 874980903, 640955697, 102900518, 875631366, 875898662, 353706531, 336922118, 909259542,
- 152835232, 556732678, 101789473, 22813705, 1093082625, 658581544, 503382302, 857677619, 236101662, 302911504, 471077916, 337412097, 135597477, 790698774, 370876719, 2752321032, 2754616340,
- 654442753, 658581553, 824721703, 16843303, 506666916, 3791532830, 855971856, 87232528, 471076888, 196636, 29425424, 12583216, 3538967, 318767170, 117838869, 370414854, 892744243, 640034612,
- 640955701, 923148835, 370553393, 823399701, 353769238, 587597332, 891692578, 926299956, 875901236, 571684406, 909583911, 370618931, 158336519, 556732678, 101789473, 336862217, 857681948, 503382302,
- 673726759, 18753345, 523443713, 218959388, 236723214, 17698061, 353215824, 555423240, 455159599, 219547670, 471602340, 523443804, 33620388, 1093153063, 675358503, 16918321, 857711617, 409009694,
- 404232216, 1579032, 4278190088, 16777952, 2687136, 4259893, 5832781, 7405669, 318767229, 101978417, 891691555, 859190289, 907482930, 909580054, 336992050, 570820359, 926164519, 925247031,
- 572728871, 639768326, 859190325, 336926258, 101979910, 891691555, 842217012, 639776022, 859190325, 336926258, 101979910, 891691555, 842217012, 639776022, 859190325, 336926258, 101979910, 891691555,
- 842217012, 639776534, 859190325, 336926258, 219365382, 691737357, 487595561, 117513027, 117901076, 118753184, 352388871, 168890373, 3222605583, 219353869, 856888077, 319622419, 319622419,
- 219353869, 856888077, 319622419, 319622419, 219353869, 856888077, 319622419, 319622419, 320015648, 320015629, 3304995841, 219353869, 992558081, 84873245, 117899541, 2684818439, 336004871,
- 1125843207, 352981277, 218960875, 218960659, 319635475, 319622419, 219378451, 219353869, 222302989, 218960659, 326308627, 320015629, 1074990349, 219353869, 320017165, 319622419, 319622419, 512,
- 180479, 771801089, 18688, 555036947, 336926258, 572596998, 909391142, 909391155, 387396147, 389165878, 336992054, 570820359, 641148455, 657929269, 52568870, 336929073, 336922374, 639771398,
- 354497845, 572720660, 641021222, 23082278, 320015744, 222363149, 755831571, 253173792, 371068686, 117902608, 118753128, 101910797, 218498063, 297795904, 218960655, 318832403, 252906765, 3010658577,
- 319622419, 319622419, 388833459, 152241422, 118753037, 218564456, 253629968, 4261678862, 622137568, 319629326, 269487379, 219353869, 354749992, 1024, 3221340415, 604028929, 1509967104, 26112,
- 101986597, 909513991, 640037941, 101065251, 387322901, 656811573, 875898406, 842217014, 336926230, 909518598, 640037941, 101065251, 387322901, 926299958, 909391142, 353776179, 369559060, 824645143,
- 336922146, 370611734, 909259542, 889339447, 572991028, 370607623, 909586995, 1057039911, 1279001348, 1044276796, 1011629158, 620823299, 827338540, 741298225, 656152359, 1093150785, 35068967,
- 537790469, 942155832, 135139089, 655973125, 67373575, 437128729, 118096899, 270539047, 537923857, 286330912, 504187920, 1863975182, 1013333573, 1161717308, 234953327, 1293421854, 793784623,
- 791760943, 957615950, 658581537, 556286247, 118035513, 723257614, 674773032, 151856405, 302843662, 842272794, 151588367, 875695886, 2417040144, 471604252, 471604252, 512, 188671, 251699201, 7424,
- 372384019, 101978389, 639770915, 909381941, 352723479, 556996116, 875902514, 20980518, 640031360, 444661274, 221914662, 17634067, 320015680, 648020237, 448855578, 18490918, 1076238912, 319622419,
- 319622419, 256, 188671, 218112000, 557252608, 336926258, 572596998, 909391142, 230687008, 4262269715, 320015680, 218960672, 218960659, 196627, 46202624, 12583168, 2621464, 16777270, 336926002,
- 857023267, 892679730, 589506100, 353699362, 859059507, 370413831, 909254963, 640946485, 102900003, 859190295, 353776179, 589497876, 2952865314, 269488144, 556740385, 1076830688, 438751248,
- 639238145, 16718374, 322971162, 319668237, 230690067, 276824339, 792727776, 790749217, 269492527, 16744464, 438707738, 639238145, 319633958, 319622419, 131091, 31522560, 10486208, 3080207,
- 841028352, 336663830, 572596998, 873542950, 335943478, 101127959, 840308500, 370620215, 875968306, 909584167, 572925748, 640091911, 1073823778, 438707738, 639287550, 117926182, 117911343,
- 788993031, 118753071, 791611143, 336004871, 120532743, 648020244, 448855578, 18490918, 2401638976, 788993031, 118753071, 791611143, 336004871, 120532743, 117901076, 470831, 4278190083, 16777920,
- 7536832, 8847491, 857019136, 859190325, 353703474, 909391155, 353776179, 353776149, 353776179, 589497876, 372388629, 587600917, 842208547, 101979414, 101983011, 101979427, 891691555, 336929589,
- 639771398, 354628917, 572720660, 573912358, 572732710, 909391142, 590689075, 875898402, 892547894, 891691555, 858994228, 892548660, 842217012, 102893334, 370414869, 909259571, 640955701, 588584227,
- 238596149, 940444170, 235538958, 170403354, 671747598, 235801128, 170403850, 671747598, 168696358, 238554634, 940444170, 235538958, 170403354, 671747598, 235801128, 170403850, 671747598, 168696358,
- 219155978, 3222082323, 219353869, 682099136, 235801128, 170403850, 671747598, 168696358, 238554634, 940444170, 235538958, 170403354, 671747598, 235801128, 170403850, 671747598, 168696358,
- 238554634, 940444170, 235538958, 170403354, 326241806, 319668237, 230690067, 3233816595, 4278124800, 3254894847, 2617294849, 823328768, 353699362, 119678503, 387388422, 640100117, 101058342,
- 640096023, 369493766, 101127959, 370546438, 118961975, 117843495, 387388934, 386270727, 926357014, 387319303, 37697046, 335939349, 926029335, 370414903, 892744243, 840308533, 657733175, 387396903,
- 909579798, 388441910, 909587990, 925312806, 640103990, 654772006, 907417399, 656815671, 909522727, 119940647, 641087239, 252061223, 909587714, 572925748, 875890439, 319676454, 118753039,
- 1026623239, 152109842, 84085258, 119147288, 420218374, 34212373, 1141510403, 172178748, 167904017, 202970633, 436667910, 50665483, 302582282, 826085890, 336004871, 219352839, 118428429, 117901076,
- 51526961, 168429841, 186123523, 101058330, 169154828, 285344522, 1010582538, 51448388, 369691138, 101059609, 403380743, 168428293, 302190857, 117911869, 252122119, 331350291, 118431245, 118753031,
- 1126385201, 50465289, 236128785, 185272070, 101582618, 151654659, 605225482, 167907875, 51448329, 436669958, 101059595, 285872910, 151650819, 826680131, 117904391, 220073735, 504173331, 117901071,
- 1177618196, 168379171, 168887042, 101060115, 119147276, 285410830, 34212106, 321135378, 168364546, 235275025, 202054151, 319686150, 33755402, 608307466, 336015686, 252118791, 1248542, 4278190081,
- 16777920, 1441984, 101136128, 840308500, 857093943, 892745266, 572728884, 336922118, 151645686, 3960085002, 1227367194, 807942191, 3974314072, 151656970, 941026569, 942157912, 573065519, 768,
- 3221340415, 369148161, 1191199488, 838926336, 335748374, 639771398, 572732725, 875902246, 822411838, 842208277, 859191095, 370612018, 892678707, 389429044, 336926231, 336922374, 639771398,
- 640038197, 926364725, 387323702, 19993909, 320015776, 538119437, 807544346, 178716200, 17563913, 201395983, 235538689, 35521550, 219357742, 773985037, 235150850, 3221303310, 1892683027, 320015744,
- 438730765, 642070128, 176558095, 252676105, 2248804744, 218169870, 571083145, 232784691, 3758953235, 170013443, 17664265, 16885250, 268435712, 3875658239, 771794689, 825688064, 909586995,
- 909518631, 370546454, 101058310, 572925734, 387188231, 926291478, 656815670, 117843494, 101131815, 370414869, 276246835, 688588294, 525423135, 521475359, 525488671, 168368905, 1936927498,
- 488451115, 1936861996, 252389931, 3758755343, 688590607, 521475103, 525488671, 521475359, 453576969, 488451081, 1936927532, 471673899, 101394988, 176164870, 327694, 29425408, 12583360, 2031637,
- 3342377, 318767165, 102900487, 857084949, 892744225, 589506100, 589506087, 336660258, 841036566, 85013814, 336926002, 892674595, 355611444, 572724245, 859059509, 336926002, 892674595, 1611106100,
- 219353869, 319651841, 123735315, 343413769, 18490992, 4263909888, 269488352, 269488240, 269488240, 319729153, 320015629, 236129549, 3237904402, 438707738, 272646145, 3759149280, 283119632,
- 269541392, 3759149280, 131088, 31063824, 10945008, 4915237, 103879424, 654706183, 909583910, 372651575, 389429015, 336925974, 807609094, 572731696, 926361127, 117843494, 859190321, 842215731,
- 117904919, 926291478, 909522742, 118887959, 101058310, 101132070, 892675623, 203067185, 202184708, 605095180, 728986155, 252644138, 2013792782, 184944144, 1364336425, 134876830, 101060728,
- 1377773835, 203038545, 202184708, 621806860, 728986155, 252644138, 588853505, 67439628, 607063320, 740039980, 101059370, 235569168, 688590607, 3356824607, 252644874, 337586443, 588848917, 67439628,
- 607063320, 740039980, 101059370, 33585168, 3237941248, 3221336065, 956312320, 823328768, 372388659, 587600917, 387323171, 389166647, 117904406, 336926230, 572720646, 875898406, 892810806,
- 891691555, 873936436, 102900518, 370414869, 892744243, 221262000, 269292307, 169159736, 151587354, 940707608, 1597585759, 844115512, 320015632, 168431189, 168431118, 331350286, 571673869,
- 152445961, 169478665, 523900952, 943218489, 1479817567, 320997434, 3222473997, 168693258, 235801216, 131082, 48299776, 10486016, 3670042, 589693184, 353699362, 352723491, 857084949, 370414899,
- 926364211, 657732918, 892744229, 589506100, 286590498, 858986004, 875902514, 572728102, 873542950, 2046898998, 336465418, 320015744, 236224525, 192612878, 229375499, 1074598675, 674773032,
- 320015680, 319635469, 1442909459, 1041110026, 222301459, 336477715, 269187850, 327486224, 940772621, 671153960, 218960696, 17634067, 1248512, 4278190082, 16777952, 1704096, 318767160, 102900518,
- 572724501, 336925958, 355676950, 842208788, 892745527, 571942708, 370414854, 909259571, 640946485, 102900515, 857084949, 353776179, 587600913, 235801306, 319651860, 343936275, 2064256526,
- 218827531, 1074598675, 674773032, 320015680, 319635469, 1442909459, 1041110026, 222301459, 336477715, 269187850, 331025168, 940772621, 671088936, 218960696, 4279046931, 1248512, 4279828481,
- 32506329, 2949287, 572728576, 926361127, 117843494, 387319302, 926291478, 370618934, 101058324, 640034598, 909522742, 909580054, 353703447, 19072532, 101742800, 522783494, 522146130, 522130709,
- 153047634, 168429851, 728986411, 740105516, 728986155, 252644138, 266340878, 522783503, 522130708, 522146386, 153031957, 152766729, 740105516, 728986411, 740039980, 101059370, 235569168, 1024,
- 180479, 855687169, 1258307328, 23552, 370553089, 856101909, 336926258, 372388615, 369562645, 101979414, 639770915, 926299189, 909391142, 891695923, 858994228, 875902514, 909583911, 352723459,
- 842208788, 640955702, 857084951, 875902514, 102900518, 589509655, 387192098, 842203678, 909588022, 807603457, 639239429, 706612758, 706877980, 512818718, 471474730, 370023978, 554703398, 84083759,
- 319636486, 319622419, 219370259, 219353869, 205525773, 67243176, 454764312, 33822759, 906346241, 638586916, 705895706, 68559646, 706616104, 672865834, 505615876, 438113066, 220278566, 117901325,
- 219349247, 219353869, 220205837, 218960659, 209261331, 84083724, 370283030, 67109637, 3774808064, 2684436482, 637538048, 1224749568, 554893312, 353703474, 555943444, 892675618, 637875764,
- 117908003, 572728871, 386270983, 839072534, 623326775, 842208788, 640955702, 117842467, 857084949, 353776161, 555943444, 891692578, 859190325, 27268658, 640031328, 446758426, 100738598, 118295815,
- 201789752, 155191307, 1343162118, 118394928, 3573417991, 319622419, 319622419, 19149968, 235801152, 650182154, 168699197, 2684423690, 450894374, 3759810086, 191571482, 152458251, 218910729,
- 202116366, 320015771, 320015629, 874831877, 235538958, 3760602405, 921098, 4294835972, 33489342, 1245376, 3211296, 620757052, 101123889, 654706439, 909588262, 35586879, 572731653, 101135669,
- 909575943, 909185847, 370612018, 788729620, 121059074, 640103478, 386270983, 2583770902, 370198294, 168431224, 268903172, 571217607, 4210958910, 85397536, 122623746, 890491910, 303179794,
- 571217423, 369893950, 184878369, 202149899, 400100107, 604377287, 218761731, 3339720057, 1042418455, 537965346, 1309083146, 17105431, 655561619, 236139795, 1042418455, 2585201442, 184880389,
- 202084363, 33557259, 3187670527, 3204579073, 402655744, 822149120, 387396150, 117904406, 389089063, 117900807, 925247238, 20395575, 305468267, 823267880, 3934393986, 242750991, 587467274,
- 2902528007, 321393170, 2184254005, 283738646, 168043271, 376966666, 4278321168, 29294590, 12583423, 3211279, 640745728, 520554274, 823603458, 657733175, 118960391, 101123846, 926357015, 788676406,
- 119678468, 387188231, 926364182, 3305189942, 873608467, 17850385, 4229042740, 357210637, 151585285, 1248205069, 268505515, 353177952, 124130620, 118753031, 18089830, 873665453, 17850385, 305468212,
- 1251609912, 151853414, 352649737, 17935178, 219242512, 124130581, 117901076, 16779110, 3238001919, 3221308417, 6400, 859189559, 909381939, 372388659, 842207509, 117904919, 656548614, 100804135,
- 219367440, 1209208128, 184944144, 168429448, 1913358343, 220201230, 4262269715, 185536224, 2416445584, 65547, 35389440, 6553856, 922746904, 557135158, 892679730, 555951668, 640103477, 352716551,
- 370611988, 536940210, 219353869, 252633342, 134778891, 102894480, 219367440, 1209208128, 184944144, 168429448, 755719, 1, 16777756, 1572964, 891692288, 639770933, 909391157, 875897139, 387397175,
- 118756630, 1325467143, 232848911, 17634067, 202247968, 2416379792, 268837388, 1074598728, 273158925, 2282423814, 118098439, 16780168, 3238001919, 3221308417, 6144, 589497857, 587600913, 891691555,
- 656548625, 909588262, 387396147, 104726806, 219367440, 1209208128, 184944144, 168429448, 17532935, 3774746383, 219353869, 235872257, 117936140, 67112080, 3204382720, 3221307394, 385881088,
- 805315072, 286326784, 858986004, 909588262, 590690103, 892675618, 84288035, 822416679, 117908006, 875968279, 103876391, 386270983, 909588246, 640104247, 67486490, 1594622991, 2685603200,
- 2147558938, 203817344, 1193085985, 4228647965, 34538246, 1007224327, 1199638025, 2164162561, 235808282, 1577914684, 2148340620, 2155895334, 487328876, 554442055, 151430924, 117836092, 100798211,
- 16795521, 3774816256, 2684477441, 17152, 370618899, 924256007, 909583911, 372388659, 118756629, 120006406, 389429015, 336925974, 572728070, 926361127, 370607911, 589497863, 892675618, 389429044,
- 120010519, 891692806, 859190325, 101060808, 1330587659, 101059368, 235573264, 671813391, 187191119, 168693519, 101060752, 1330587659, 101059368, 235573264, 671813391, 187191119, 168693519,
- 252682241, 1330587659, 252644136, 277875214, 671811078, 187191119, 2416969222, 252644874, 1330587659, 252644136, 277875214, 671811078, 187191119, 2416969222, 50335242, 3237937152, 3221323777,
- 587208448, 11520, 372388115, 372388631, 101978389, 639770915, 909381941, 909521715, 352723479, 842208788, 640955702, 336929287, 892482355, 532685620, 438700338, 4279903782, 640031232, 839525658,
- 320015647, 320015629, 2685407325, 3221295120, 438705188, 639287550, 1073814054, 605824538, 218960704, 218960659, 269516819, 16781328, 1006632960, 1140916226, 8704, 101134629, 892675623, 118756643,
- 640100102, 926364725, 353769270, 875901717, 387397175, 18093334, 252408056, 252624910, 134770699, 235866992, 185536192, 1756235888, 268830218, 101726264, 141036038, 1745357322, 268830218,
- 101726264, 141036038, 16780042, 3238001919, 3221292033, 8448, 118888211, 354624262, 370618931, 587597575, 640100130, 858994231, 656548661, 909588262, 1754411571, 268830218, 101726264, 141036038,
- 1745292042, 268830218, 101726264, 141036038, 3087075850, 235866992, 185536192, 1879574640, 3222146827, 1879772942, 131080, 46202624, 12583168, 2883601, 372375808, 118756887, 572720646, 874915622,
- 322319927, 640955702, 875897635, 572728102, 588584198, 336922146, 857085719, 79666, 572749381, 1165370146, 572749381, 3195413282, 973671687, 220204307, 218708499, 134638343, 3221292552, 2319137605,
- 1162165051, 998914875, 3657319739, 218696199, 320015712, 151871501, 107153162, 131078, 46202624, 12583168, 2949137, 101983488, 656541191, 875898406, 842413878, 85333527, 842208817, 859125046,
- 892679730, 589506100, 589706293, 101123874, 35066901, 993740032, 1161509770, 2319137605, 4265950011, 151652313, 319643661, 224398611, 1661405705, 1170212358, 572662646, 1162180131, 572662646,
- 129922595, 322570509, 319627277, 118294842, 134743659, 131078, 46202624, 12583168, 2949137, 909391104, 389166647, 336926230, 570820358, 623257127, 572728881, 588584198, 353699362, 858986004,
- 857084949, 909588274, 1160197173, 998914875, 994395451, 993757755, 119996741, 1611467018, 219353869, 168365408, 84239367, 594953664, 1982013986, 594953541, 1982013986, 151848894, 537727802,
- 154800909, 107677453, 395272, 4278190082, 16777920, 1114304, 83886124, 640099874, 909522740, 387330611, 101127190, 352715526, 858986004, 857084949, 892744243, 909259573, 656880693, 119677734,
- 1984233473, 589439523, 1984251254, 589439523, 218611318, 219363849, 974327072, 1795624201, 101189638, 993740096, 1161509770, 2319137605, 21314363, 151652135, 319643661, 224398611, 1678182921,
- 33555717, 3237937152, 3221291010, 956306944, 855703552, 353703474, 654706452, 570820391, 926164519, 925247287, 842204982, 101979414, 354558755, 556995601, 875902258, 372388662, 101979413,
- 639770915, 909381941, 226516993, 269685779, 436906281, 2852718858, 151523114, 319647995, 275778835, 272630032, 319622419, 3237880111, 19869473, 2148340672, 252184853, 151628330, 2836011530,
- 336793641, 218960672, 3237875731, 225447952, 1879905043, 556740385, 790708225, 512, 3221348607, 251699201, 10752, 102899969, 370413845, 909254963, 640946485, 587600899, 120006434, 656548614,
- 875898407, 640104247, 859190325, 18166323, 448855680, 18490918, 640031296, 151653722, 104997127, 604375048, 557975046, 2299137287, 648020240, 448855578, 18490918, 4263909952, 118295271, 101073441,
- 134743588, 119620102, 269289993, 512, 178943, 385926657, 12288, 352723475, 556996116, 370611221, 892745527, 640100148, 353699335, 891367699, 119940916, 336922119, 924194583, 557135158, 875902514,
- 319627302, 1073810707, 1611600916, 274729225, 4269806611, 252974272, 1611204960, 18092816, 320015680, 219373569, 356520717, 1611663624, 168627465, 151523168, 16728085, 151524672, 218783759,
- 257952269, 1075120392, 319622419, 512, 178943, 503367169, 15360, 909390133, 892547894, 389429044, 118756887, 640091655, 572732725, 101979398, 86385187, 587597332, 118756643, 640100102, 909588276,
- 353703447, 892744243, 842217012, 742992662, 252974240, 1074334016, 2685670160, 219363368, 135949, 2687256875, 1074730004, 272632073, 681579539, 218960696, 1227677715, 152379435, 171970312,
- 255855130, 538249480, 319629368, 1227633427, 135602219, 171970313, 255855130, 538249480, 319629368, 131091, 35651584, 6291840, 2555915, 656549120, 859191078, 118888242, 842217222, 640955702,
- 640033571, 117842467, 352723491, 858986004, 842208790, 775946550, 387389207, 387395118, 2205095703, 219353869, 978848643, 2198558778, 219353869, 978848643, 678451258, 673720360, 807938088,
- 319622419, 927549751, 319622419, 4802871, 4278190084, 29360576, 721088, 4456504, 318767184, 336922146, 909259542, 388379701, 858986006, 842217014, 101979414, 656810531, 354886179, 336926230,
- 639771398, 926299189, 891692597, 842217012, 101979414, 352723459, 842208788, 640955702, 857084983, 875902514, 102900518, 235801168, 235801098, 624362518, 421988695, 556740385, 1460217625,
- 454372149, 790700335, 454366491, 790700335, 235549979, 235538958, 168754702, 168693258, 2281770506, 235538958, 235538958, 355607905, 555822875, 538254127, 421988695, 556740385, 3456706329,
- 555296521, 421605167, 251199015, 235801098, 2282621450, 168693258, 921098, 4278190082, 20972224, 2162880, 318767141, 353776161, 587600913, 842209059, 101979414, 639770915, 859190325, 572733235,
- 873542950, 354485558, 3221307425, 438707738, 222628784, 4279046931, 320015616, 2953528589, 19277338, 21036762, 650117568, 450952730, 219357222, 219353869, 639636237, 438305050, 14696486,
- 4294573826, 17236704, 1114280, 318767148, 386271025, 842208787, 657855287, 589506087, 389420834, 389429015, 386336534, 118756630, 590356999, 875898407, 640104247, 218919029, 185272296, 202237959,
- 4027320176, 84287244, 101014106, 2469987334, 29361927, 117948417, 17054356, 235968670, 134742271, 269352961, 87165592, 107045126, 1611006981, 117899532, 17829889, 201393927, 16778848, 3237937152,
- 3221316609, 8448, 589506085, 640037941, 102900515, 370414869, 372388659, 572724501, 387384839, 926036758, 1577137719, 592973830, 223355706, 1343034131, 274207501, 2282423814, 118098439, 242355080,
- 591012800, 220204307, 3222082323, 2416643854, 193988616, 256, 1677836543, 553697281, 100728832, 336929571, 589497862, 892675618, 858994228, 892679730, 640098851, 859191095, 370612018, 268852737,
- 591012696, 320015696, 319639565, 101060696, 168265739, 193464074, 3222212353, 321075747, 319627277, 264244499, 126880782, 823303, 4278190081, 20972224, 2621632, 857014528, 353703474, 555943444,
- 892675618, 858994228, 909521973, 370553395, 101979413, 891691555, 589706293, 1610679842, 640031264, 448855578, 3759810086, 673726759, 219359041, 556733197, 805383969, 3222939184, 438707738,
- 807803584, 656884008, 221259841, 806163219, 3092257, 4278190082, 25166273, 1376448, 385876001, 656541233, 875889454, 842217014, 336926230, 570622478, 370607623, 909586995, 181937703, 940771868,
- 1463035192, 878130485, 725104677, 320016933, 304424210, 856822547, 1276644364, 891376985, 1463039063, 1498751285, 542835020, 538976288, 2105376, 4279238658, 24117696, 2097344, 318767187, 842217012,
- 572724502, 858985493, 354558741, 355676948, 336929315, 101987123, 891691555, 909391159, 353776179, 101061653, 842208519, 101979414, 639762987, 859190325, 36582707, 909391157, 353776179, 370545685,
- 909521459, 674783285, 273692712, 273698832, 273698832, 674779152, 249575464, 672008714, 170928965, 1208618510, 235801160, 1160458250, 168431144, 591012622, 19085859, 943204448, 537923624,
- 270536720, 943204368, 169349160, 671747598, 87181869, 168431138, 168431118, 839197198, 170405194, 671747598, 589511203, 50340666, 3237941248, 3221319681, 452988672, 7936, 370413843, 909259571,
- 640946485, 102900515, 587600915, 875898402, 372388662, 287510803, 3759810064, 438707738, 3492158176, 319622419, 319622419, 2147606608, 639271166, 2147555878, 4263912986, 320015718, 320015629,
- 3237901057, 33570817, 3237941248, 3221319681, 419434240, 856883200, 286594610, 589497876, 288695842, 571684404, 858985493, 590624050, 639295568, 450894374, 275392038, 269500432, 438747137,
- 639271166, 2147555878, 1358833178, 269488144, 268436224, 1879163135, 251707393, 486545664, 286457856, 858986004, 288699954, 589506100, 873661986, 355611443, 572728084, 287510803, 3759810064,
- 438707738, 2149980896, 269500432, 3768586304, 2164162561, 438707738, 639270913, 275185190, 2415988752, 1073856766, 1792, 1073872896, 251691009, 419435520, 587210240, 1342190848, 554893312,
- 286594610, 555943444, 288695842, 873674292, 890577702, 590689842, 573911809, 590690054, 335877652, 840308502, 892745271, 640099892, 101058338, 859190327, 353776179, 372388629, 721818645, 891691522,
- 858994228, 20981301, 640031424, 440466970, 643442214, 1076238874, 440434689, 641744934, 438225662, 437926938, 437919262, 505027132, 268962892, 134482952, 403180556, 202115096, 17826824, 4279903872,
- 640031232, 436207898, 448855590, 650133542, 1073807130, 440444454, 874397734, 252645135, 874389044, 252645135, 201855540, 205785100, 202115080, 806094856, 4278321156, 46137343, 12779905, 3276832,
- 19988736, 909584166, 640100150, 101123878, 370414854, 101058327, 924194327, 657864193, 822158886, 842208790, 909588278, 640100134, 656803591, 2768132354, 187765275, 103286022, 240651803,
- 2620339728, 101057032, 1342310420, 101057032, 982122004, 353259405, 218306564, 320561166, 18159144, 569376443, 436742182, 235823116, 352589828, 982536462, 135530106, 17170952, 135530192,
- 1610482184, 235942701, 102436440, 823593768, 50335242, 3237937152, 3221323777, 452988672, 10752, 101978369, 639770915, 909381941, 372384051, 370611205, 875902519, 101131815, 370422023, 909259571,
- 589706293, 17179171, 4279903872, 640031232, 436207898, 536936230, 538976288, 807411744, 195693328, 1461463056, 2147559453, 639271166, 2147555878, 2586191386, 320016933, 304424210, 3390182163,
- 185602059, 2631709, 4278190081, 16777952, 2621606, 640750336, 352716551, 370611988, 892679735, 353776179, 101123604, 857084949, 54409010, 640037941, 875897635, 2685342669, 262146827, 677384979,
- 168234808, 67373068, 421797895, 1882279983, 235511041, 235801232, 151949322, 943723784, 119215912, 201853449, 706151426, 1328622143, 1392688, 4279238658, 32506300, 1573056, 16777248, 117908017,
- 336922118, 370606622, 889404983, 656877108, 389089062, 117575188, 101122049, 320213181, 440488751, 793985306, 3171948051, 296748806, 20202535, 122684352, 1663374366, 220159080, 1750867725,
- 504636771, 1124290567, 1448288842, 50338124, 3237937152, 3221340161, 452988672, 7936, 370413841, 909254963, 640946485, 102900003, 587600897, 875898402, 372388662, 287379731, 1073814054, 438707738,
- 639287550, 219348993, 219353869, 4269806349, 4269801920, 640031360, 444596506, 1727931942, 219353869, 18027277, 29425267, 131136, 29425408, 12583360, 1638415, 841028352, 336663830, 572596998,
- 873542950, 354554678, 842216212, 1076048949, 639254529, 3237878310, 2317755930, 274731024, 650117392, 444661274, 18490918, 4263910016, 269488208, 65552, 33554432, 8388928, 285212713, 387322901,
- 336926230, 101058310, 370414869, 909254963, 640955701, 891692583, 909588020, 875902262, 572597030, 235342086, 118362642, 18490889, 153492160, 303173127, 638125838, 440466970, 1077936422, 67307783,
- 420483097, 118031108, 640031296, 151470106, 270074883, 50600208, 440403721, 33564198, 3237937152, 3221291010, 553652480, 572850176, 874915622, 859190839, 370611762, 101058324, 372388615, 101979414,
- 639770915, 909521973, 1109852161, 336794388, 1109862210, 336794388, 750683714, 219294793, 302857982, 664815916, 558768417, 556214049, 555830817, 1227628583, 303172908, 742992909, 512, 188671,
- 251699201, 12032, 372384019, 101978389, 639770915, 909381941, 387188247, 335939351, 926029335, 840308535, 657733175, 875968295, 119678503, 572925703, 444596544, 4263126566, 640031360, 788989833,
- 117901103, 791611156, 117904391, 120532743, 118753031, 336015151, 438738945, 639287550, 1073814054, 126821914, 791611156, 117904391, 120532743, 118753031, 336015151, 788989703, 33556271,
- 3237937152, 3221291010, 805312256, 117506048, 101131815, 370414869, 926036787, 925312822, 656880694, 822157862, 386271010, 335939351, 840308503, 370620215, 892679735, 19080756, 187127735,
- 168693519, 101060752, 123152139, 336011271, 101747454, 1462176518, 119539463, 660014868, 235867915, 1471742218, 101059367, 235573264, 655036175, 118753111, 4043179808, 655036175, 118753111,
- 1460078368, 101059367, 235573264, 512, 180479, 385925121, 12288, 101130753, 101127959, 370611988, 389494578, 892745494, 589706293, 926036225, 925312822, 656880694, 117908006, 101131815, 370414869,
- 274202931, 655033862, 537331543, 1460081671, 252644135, 3237874190, 184944144, 117921575, 118753056, 252389207, 17436175, 185536448, 336025383, 117907463, 101394263, 177213446, 251723278,
- 1462176527, 537334791, 660014855, 268830219, 920208, 4278714371, 16777908, 1507520, 3276835, 389153024, 336926231, 117835527, 117900807, 926299943, 926365239, 118756150, 891692806, 389429044,
- 909182230, 370612018, 570820372, 874915623, 236169217, 2634944041, 292819728, 624109070, 206113551, 1796119824, 673720360, 673720360, 336007166, 117915655, 1074205703, 247464199, 320015913,
- 202415374, 621742921, 286139955, 2635076468, 777059854, 387389207, 387395118, 118298391, 336019463, 1074202375, 50336775, 3237937152, 3221291010, 1493191680, 26112, 389427511, 102958614, 338108963,
- 370545685, 858927667, 926168358, 118888246, 387192070, 641139262, 101130787, 859190311, 389165878, 640955700, 572662566, 336926243, 640091655, 875902519, 117575207, 926036758, 909588017, 101127703,
- 640091655, 118894853, 654706438, 926299942, 34553654, 134678785, 1159141641, 50415476, 16844290, 16846864, 1012676358, 119018760, 134352648, 403245063, 1198802200, 100795137, 269484289, 923140353,
- 369638492, 1010960151, 252577563, 256253959, 604046855, 456920582, 118427143, 3775874592, 168235009, 67241473, 390427719, 268962073, 135266561, 135665415, 104291388, 118489345, 33947914,
- 1165248260, 134813975, 268501264, 370607880, 928791560, 1008406534, 252118542, 252125254, 118375438, 101596187, 541462279, 524295, 46202624, 12583168, 1048583, 2687004, 4063285, 5505095, 926290688,
- 101979414, 389097223, 572720646, 842479143, 654776086, 875902518, 822556199, 389494322, 891692551, 85342004, 102900518, 372713223, 118756630, 654771761, 842217014, 102183175, 875898375, 103884598,
- 387192070, 639771398, 844576551, 286459457, 873747820, 236197405, 559362540, 404045225, 600115974, 2839353664, 385950238, 404219649, 1025064995, 102899369, 341126413, 2450922804, 104936021,
- 404030995, 822807302, 27861335, 336473216, 338959638, 319903038, 579420422, 423471390, 387457856, 353955841, 1461823805, 101387057, 353895974, 1461823805, 1093339953, 319903026, 237786427,
- 874321428, 591403307, 570496792, 67152158, 3237937152, 3221291010, 486543616, 889202944, 570753024, 874915622, 859190839, 370611762, 101058324, 352723459, 842208788, 640955702, 857084935,
- 875902514, 102900518, 352723495, 842208788, 640955702, 1984233473, 589439523, 1984251254, 589439523, 319640950, 319622419, 219360531, 219353869, 222302989, 218960659, 1161827091, 998914875,
- 994395451, 993757755, 330301765, 320015629, 2148732173, 219353869, 856888077, 319622419, 319622419, 1280, 180479, 889241601, 1358971648, 2013294848, 823328768, 355611413, 354624276, 353776179,
- 856098580, 336926258, 388178694, 572733219, 909391142, 640103219, 859190325, 572732723, 858993717, 842216501, 370619139, 587600917, 891691555, 858076980, 336926231, 572728070, 926168358, 858993683,
- 857019698, 858993717, 857019698, 858993717, 336926002, 588711687, 891692855, 892540183, 2418156340, 269488144, 17565748, 235536929, 268700174, 168038536, 34213390, 135004449, 269488180, 1611665424,
- 235219872, 235589642, 2152399109, 168690987, 84806320, 269488139, 269488152, 269488152, 2097355785, 1342708482, 17829920, 269488304, 67636256, 168711427, 2155875850, 235538958, 134480725,
- 269492236, 1627262992, 168298042, 134876686, 104479238, 235801096, 17172490, 269488138, 269488144, 856690704, 1209993485, 201924424, 270540844, 512, 1073856767, 620806145, 13056, 372388627,
- 117838869, 118953494, 924194566, 353769015, 352781844, 640038179, 909521973, 891692599, 855848500, 336926231, 572596998, 926168358, 319635584, 672140048, 202140178, 191105803, 3222480142,
- 908535059, 319818518, 120184899, 4009626125, 17239306, 202183616, 772801042, 185297437, 409144332, 673389620, 169548554, 1446061095, 302126404, 4262661388, 151464272, 168627466, 100665097,
- 3774808064, 2684469249, 855641856, 989869824, 1124089600, 554893312, 286594610, 555943444, 288695842, 588723764, 588591893, 588591893, 859124501, 859124501, 590689045, 590689077, 590689077,
- 590684949, 890708757, 587666739, 353841973, 892548387, 20976947, 640031296, 448855578, 1079649830, 1077952576, 1077952576, 1077952576, 1077952576, 1077952576, 1077952576, 2684436544, 3237878310,
- 438707738, 639254529, 1077952576, 1077952576, 1077952576, 1077952576, 1077952576, 1077952576, 1077952576, 512, 3221340415, 687915009, 14336, 102904083, 572724501, 370414854, 588591923, 336922146,
- 924915479, 640955702, 859120419, 875902514, 891495206, 822289972, 370414854, 909254963, 656880693, 319676449, 320015632, 295178253, 21824279, 386092320, 219191313, 269292307, 218613267, 173146378,
- 4264101645, 331350496, 219353101, 389026573, 3104245777, 285738937, 219361303, 219157261, 120061459, 218958345, 688326922, 268436224, 2952904959, 604028929, 1056976896, 655556608, 909391142,
- 372388659, 336925974, 874579719, 909522743, 117909031, 101123846, 891692839, 389493813, 842208788, 640955702, 50733603, 388052785, 101979414, 639770915, 358626357, 2349337611, 53761845, 448855581,
- 134285440, 53611275, 387515140, 622005771, 201852940, 201852940, 1073817953, 168625961, 218795774, 84643841, 873203724, 286209367, 304127761, 101910103, 52758536, 269287682, 2232486151, 137827098,
- 134745100, 2482899980, 151464233, 168627466, 131081, 29425424, 10486064, 2883613, 858863360, 336926258, 588711686, 891692599, 858994228, 875898406, 372388662, 50730005, 389232433, 101979414,
- 639771427, 148386869, 202380045, 202219532, 151851793, 725424918, 3592109355, 120176681, 183634445, 219406349, 1879183884, 202506864, 772674317, 1027418908, 4264434731, 120138233, 218958345,
- 67111178, 3238002687, 3221291266, 922749696, 1224751616, 570490880, 370607623, 909586995, 822552103, 572720646, 101131815, 991368966, 641087236, 101131815, 656810531, 572728870, 587597319,
- 640099874, 386277923, 822554929, 336922119, 841036566, 657732918, 536871207, 269553936, 286269472, 93982737, 235935267, 101321998, 672164614, 1796221104, 218760710, 370150926, 285345059, 151589643,
- 571807010, 185796873, 697333520, 17435911, 118295122, 482345257, 471604252, 2417761308, 134683413, 169215497, 369799344, 117967110, 235541787, 370544913, 1510871313, 151464400, 168627466, 2688777,
- 4279238659, 28312000, 2556064, 4325428, 387191552, 656475927, 892679735, 572728116, 588518677, 892674595, 572728116, 588518677, 892674595, 572728116, 891426581, 859190325, 353703474, 101131028,
- 857084949, 892744225, 556214068, 271781152, 856694785, 272633869, 268967944, 537399360, 272633864, 219353264, 3641709325, 17435911, 118295154, 29425193, 638193664, 170299536, 269520912, 671615016,
- 136843280, 269494280, 221253872, 806163219, 151501072, 168627466, 2688777, 4278190083, 25166560, 2228384, 4784197, 588583680, 353699362, 336922146, 336933654, 355676950, 858986004, 54343218,
- 589506100, 872744482, 572728102, 335748358, 842216214, 859125046, 892679730, 875902514, 875897638, 119743270, 1613960483, 219352352, 319623955, 219357197, 320015648, 319627277, 219398145,
- 320015648, 319627277, 219352352, 319623955, 3229622285, 1082130880, 322964755, 1074990349, 222302989, 2685211411, 319660096, 319622419, 1084230931, 320015776, 219365389, 218960704, 319635475,
- 100679776, 3405712384, 3053581313, 436212224, 771760896, 1107310592, 588447744, 117835287, 101123590, 909518599, 926299703, 908526902, 370611735, 103874838, 640099879, 104281894, 370611988,
- 656881207, 386271014, 909579799, 119940903, 370611974, 656881207, 3993106470, 386798342, 353514054, 236127981, 305284631, 1186794497, 117708373, 1188756998, 100996693, 99878150, 185286661,
- 188746764, 1074531387, 202115851, 205196096, 185286668, 188746764, 435070721, 1025906224, 3993306898, 638988313, 2936476221, 51250877, 4266729750, 51250867, 709959958, 68027534, 185338944,
- 1007435787, 205523723, 1074465548, 185285644, 185338944, 802827, 4278190085, 25166272, 983232, 3211296, 6160450, 875626752, 572728870, 336922118, 909317910, 875628342, 353769270, 572720660,
- 859186727, 824653362, 875902514, 353769270, 572720660, 926295591, 389428273, 101979414, 640098851, 909259574, 857084935, 353710643, 842208788, 875902262, 909259571, 723924021, 17179138, 894907520,
- 791959349, 791139367, 151127694, 168562196, 218367235, 319697940, 336069382, 34213133, 50754820, 202249224, 67371530, 332337934, 319819789, 269683981, 320015632, 222314509, 889192723, 1463039063,
- 441725493, 68113434, 201982468, 34149390, 322900998, 33817614, 336399626, 285606664, 167904260, 135531789, 3558016515, 269488909, 219353869, 219353104, 1250061, 2, 16777728, 983168, 620757029,
- 892745266, 589702708, 352716322, 85333524, 572720646, 640034598, 370414887, 909259542, 104150326, 1191182598, 1950696820, 1165248327, 117535813, 926376742, 538125923, 1198802189, 222655559,
- 739950624, 439032602, 437988122, 235018796, 118362128, 444730130, 739908140, 302744090, 768, 1073922303, 385925121, 1006645248, 822149120, 117908006, 572728871, 387257606, 892744243, 925312820,
- 822424630, 101123878, 924193813, 118896183, 336922119, 842216214, 925316663, 386271010, 926036758, 36054838, 169478711, 151462592, 493620490, 570887434, 2684225984, 587739204, 70452233, 125764357,
- 1018038541, 2064003115, 387389230, 388902423, 18290455, 3221817783, 168625954, 168651805, 3223455497, 114825738, 824379440, 419628549, 1896023810, 218696199, 21245995, 673720360, 673720360, 256,
- 180479, 50380801, 286326784, 135457, 16695297, 50331650, 3237953536, 3338749954, 822087168, 17152, 907489829, 640034598, 587663110, 624309783, 353699377, 370611988, 101123846, 387388437, 926036758,
- 389428791, 858986007, 891695922, 574043956, 335939334, 857085463, 909588018, 640034612, 573300737, 724768539, 1009480563, 1024518145, 638695422, 167840265, 537463619, 151916042, 169609530,
- 53814793, 34669828, 220994174, 739052813, 220994074, 739052813, 2285771424, 488451122, 552156204, 572426279, 153498883, 973675530, 168693257, 1124796704, 151650570, 203562534, 370821387, 370553878,
- 370547226, 437655092, 1536, 180479, 167821313, 553653248, 922758144, 17152, 875901989, 371664422, 389416726, 103228934, 924194311, 372582198, 656815639, 119677730, 824645142, 336922118, 926299671,
- 102962982, 387319558, 641152566, 909259027, 656803383, 370542342, 1395654658, 121189685, 2201822249, 1176844604, 3810085289, 1258832955, 755303236, 2218143273, 302468158, 655837279, 90066433,
- 1276126487, 873595450, 2538021722, 503911233, 67614022, 273114426, 21925683, 554438933, 171128868, 23537956, 2538996513, 1999376173, 1249452181, 2017992223, 608117538, 522932621, 1143237182,
- 556184574, 623712021, 1381161, 4278190087, 31457728, 3997888, 5046341, 6094933, 7143525, 355533056, 892482324, 859190325, 353703474, 892482324, 859190325, 353703474, 587597332, 656876067,
- 909587494, 873928498, 909381941, 353776179, 842208277, 909391157, 51786291, 892482324, 388113204, 856954146, 926168370, 892482324, 119677748, 856954146, 120862002, 892482324, 656548660, 856954146,
- 20198706, 319819808, 269683981, 218960656, 827273235, 1900240147, 571149068, 219364364, 269488909, 319622419, 269488176, 269504528, 269492240, 269488144, 276828176, 806359056, 17829904, 269537440,
- 320015792, 269529101, 320015728, 1345441805, 191578159, 185338914, 16974394, 320015632, 269529101, 320015824, 269534206, 269492240, 269488144, 274731024, 269488144, 537923600, 269488144, 1792,
- 2147622912, 151019521, 385879296, 788538112, 1191197440, 287637504, 353776179, 587600917, 287379715, 588329763, 892675618, 337065524, 909259542, 589706293, 574031394, 370414854, 892744243,
- 336012852, 909259542, 589706293, 574031394, 370414854, 892744243, 3758171700, 640031328, 16744474, 442523776, 248653350, 235801098, 2014185994, 168693258, 2181959178, 235538958, 235538958,
- 235801208, 235801098, 641728800, 639287322, 3237888001, 3237888001, 448797222, 235565094, 235538958, 168693262, 168693258, 175640074, 168431118, 235802126, 235801098, 920074, 4278190083, 29360608,
- 327840, 1376267, 859181824, 857937203, 389165877, 336925975, 572596998, 859125030, 3497139725, 220099312, 4263126579, 19274432, 2155879046, 3760219674, 438707738, 196832, 46202624, 12583232,
- 3080215, 318767177, 858985493, 859125042, 353703474, 589497876, 892675618, 53687860, 856954163, 892678707, 353776179, 587600917, 891691555, 20329525, 892741410, 908538933, 336933683, 892482355,
- 372388661, 101979413, 806418467, 471083024, 444602918, 2417237030, 271585320, 640031272, 639279130, 372900134, 302516242, 806365206, 639248400, 3221297702, 1343230032, 443552796, 1880761894,
- 16718868, 1343230032, 444602918, 2149197350, 16721434, 2685538318, 1343098898, 642781200, 639270938, 768, 188671, 117489665, 1023418624, 571670528, 892540181, 872882996, 842216246, 857019670,
- 286594610, 555943444, 288695842, 858994228, 572724503, 856954133, 856954163, 892678707, 892678707, 891495220, 572728116, 144705720, 2417435080, 440410391, 4263126566, 640031360, 811614234,
- 271585296, 271585312, 537931792, 143655184, 134752296, 388047127, 4279903784, 640031232, 436207898, 271609894, 271585312, 537931792, 1060880, 4278190082, 25166272, 1507520, 620757038, 101979414,
- 639771398, 926168358, 926365237, 389165878, 118953495, 656811825, 572728871, 117835527, 336922119, 909259542, 1963013173, 894907403, 204756789, 100888372, 50726920, 39466095, 84486680, 151390216,
- 100800553, 942155832, 874651840, 1462973271, 18883124, 84109455, 2405958405, 691405875, 151389705, 235157033, 960047119, 67112744, 3741253632, 2684436994, 788531200, 1040201728, 353566720,
- 640955699, 117842467, 909521969, 370553395, 909514005, 372651575, 370546455, 101058310, 640100134, 101979431, 639771398, 388314406, 640034615, 386270727, 120796721, 476069942, 1075581972,
- 522138398, 402791987, 909842965, 68321553, 991500824, 293605942, 523443715, 18756383, 1129333033, 286205708, 16895495, 805372164, 471101552, 857674780, 523443742, 254547992, 437781522, 926751164,
- 402919954, 504937498, 506666930, 2686399262, 274872415, 705432327, 16908761, 768, 2147598591, 385925121, 922755840, 823328768, 857151026, 286594610, 555943444, 288695842, 858994228, 571946550,
- 370414854, 892744243, 823600692, 640103478, 654772002, 101130790, 370611988, 532690738, 438700338, 4279903782, 640031232, 839525658, 320015647, 320015629, 117901156, 795805460, 117904391,
- 336019463, 616562951, 4263126556, 640031424, 440402202, 1076108326, 319622419, 319622419, 118753233, 795805447, 336004871, 117915655, 1536, 2147598591, 385925121, 788538112, 1157642496, 20224,
- 372388115, 372388631, 101978389, 639770915, 909381941, 909521715, 352723479, 842208788, 640955702, 857084935, 875902514, 102900518, 336929335, 892482355, 336012084, 909259542, 589706293, 337053218,
- 892482355, 572728116, 154279872, 640031270, 436272922, 622470694, 220148234, 218960659, 243602195, 235801098, 1745750538, 276828176, 168749072, 168693258, 274206218, 2148536448, 616562960,
- 4263126556, 640031424, 440402202, 1076108326, 319622419, 319622419, 235801296, 235801098, 269488134, 235565072, 235538958, 269486606, 4278648848, 46202878, 12583234, 3932171, 5636170, 6946914,
- 16777330, 925247266, 389165878, 84281110, 656803377, 909588006, 857093942, 875902514, 909521204, 387330611, 370414854, 372716083, 370546454, 654706183, 354887206, 101070115, 372384007, 587600917,
- 891691553, 339162676, 909259542, 589706293, 571934242, 370414854, 892744243, 338110004, 875897379, 570765875, 842216501, 536941589, 437918003, 422785817, 4263057946, 220664060, 101647373,
- 302844432, 1361189908, 490873645, 471079938, 152768782, 218956815, 856363047, 857989155, 168821314, 4245294606, 235801328, 168431314, 168431118, 235563022, 235538958, 269545998, 1879117840,
- 17829904, 741092368, 741092396, 68011308, 220663823, 184945413, 16847900, 151720205, 471074310, 118688024, 252716813, 487132420, 208497932, 168715293, 168693258, 179834378, 168431118, 239209998,
- 235801098, 1611532810, 537923600, 269488144, 1024, 3221340415, 1208008705, 1426083584, 23808, 102904065, 640950549, 352723491, 370611732, 101062422, 352716295, 842208788, 337720630, 909259542,
- 656815157, 103228966, 369233670, 908269334, 909522742, 37304119, 909588278, 909522742, 52835381, 555161137, 638662454, 117842215, 104018183, 640026374, 319660033, 219398398, 489165581, 437924629,
- 672994611, 319622419, 219365377, 489165581, 202580752, 117639959, 1980174088, 68165133, 318833929, 857342481, 321395989, 4262072154, 252644072, 169345290, 225881615, 487591966, 219398145,
- 219353869, 354306093, 638718502, 759701013, 219353869, 219353869, 253642797, 268963101, 84214279, 352978443, 50660107, 34278657, 504702482, 319630664, 269517054, 69648, 269488144, 169151024,
- 33559818, 3237937152, 3221308162, 872423424, 336658432, 322122518, 336922118, 909259542, 909522743, 119940647, 589702663, 589702659, 386277923, 924194327, 657864247, 119940647, 654776071,
- 319161863, 291260685, 656947220, 231342392, 402916620, 655215116, 554130454, 319637781, 402928117, 202151949, 402927876, 1024732684, 202124820, 319660033, 672001278, 926427159, 402932775, 84675852,
- 18092355, 320345108, 202152307, 402927876, 202151949, 339480324, 402919229, 512, 2147664127, 822132737, 19968, 372388627, 856953109, 353776161, 589497876, 101979414, 891691555, 371406644,
- 587600917, 875898402, 639771447, 590614837, 891691555, 873936436, 355676982, 924194580, 924194615, 859125046, 353703474, 555943444, 540354082, 271524112, 319672321, 54725907, 471077916, 470009347,
- 52171796, 271524115, 320015632, 1611930797, 654837769, 134809639, 471602272, 348192276, 801112348, 283180577, 319622419, 471074824, 134747164, 471074824, 118035484, 536944943, 218960656, 471093267,
- 84150928, 102373894, 2416575493, 348132380, 1317916, 4278190083, 25166272, 1114304, 3145748, 355668736, 858986004, 587600913, 891691553, 859190289, 352789271, 353706531, 355676948, 842216212,
- 842216757, 590624053, 590624035, 2688557603, 645926163, 436272922, 2161780262, 271605888, 537931792, 269496336, 270536752, 226541569, 450952723, 18490918, 2149980800, 537931888, 269496336,
- 270536752, 33558576, 3237945344, 3221331969, 788540416, 856883200, 857084949, 101978419, 639770915, 389231925, 926036758, 857085751, 875901491, 640099107, 117908003, 589506087, 859190325,
- 2690654999, 645926163, 436272922, 68970022, 839125514, 1342833682, 474353680, 67766788, 168038962, 2161780336, 2160066944, 3774747405, 438707738, 151598976, 269034339, 151598864, 3758695267,
- 8398362, 4278190084, 20972256, 589984, 1507341, 318767155, 572723507, 873542950, 287388470, 287514913, 353776179, 17175569, 354558741, 858985493, 858985493, 859125042, 875902258, 875897635,
- 1075979043, 639246368, 1073830438, 2147598590, 639246368, 820444710, 271585296, 271585312, 537931792, 4271898896, 18490944, 4263909952, 650117440, 448855578, 808452390, 806363152, 271585296,
- 271585312, 512, 180479, 285261825, 12800, 656810501, 909587494, 372388662, 118756887, 873661958, 102900518, 891491605, 572728884, 336925958, 909259542, 355677493, 842208788, 20264246, 594953472,
- 1982013986, 594953541, 1982013986, 168431147, 168722446, 168693258, 243273226, 1074661898, 2319137605, 1162165051, 998914875, 1744913723, 168693258, 235556944, 181406222, 1342836238, 235801168,
- 67135498, 3237937152, 3221307394, 687869696, 1090532608, 570490880, 336925958, 842216214, 875902262, 570762022, 336663814, 841036566, 873542966, 354624294, 589497876, 892675618, 859190275,
- 353776179, 572728084, 640098871, 842217015, 101127703, 319619073, 222301459, 4279046931, 640031232, 448790810, 2149197350, 341840924, 371134492, 186586742, 628100042, 303239954, 319956261,
- 3221295635, 222301459, 1074598675, 641733389, 448855578, 18490918, 807803456, 337386516, 378273328, 185999135, 538976352, 538976288, 196640, 29425408, 10486240, 2949137, 922746948, 858986004,
- 909588274, 640955701, 102900003, 842209045, 842208533, 588518677, 588518691, 892674595, 892674595, 892547892, 572724020, 875902246, 102900518, 370414869, 842216214, 640955702, 3323602528,
- 322573082, 16718374, 548415002, 269496336, 270536752, 806359088, 874815528, 235538958, 2686860581, 1611533834, 974333466, 449125139, 538584614, 537931792, 269496336, 270536752, 2969440304,
- 182461492, 3758755342, 237321510, 920074, 4278190083, 8389312, 2424960, 2949161, 54212352, 336926258, 354624262, 353776179, 69928468, 875898402, 892547894, 891691555, 353842740, 355677491,
- 1075852595, 222355680, 537727763, 320015648, 3772792845, 320015680, 220209165, 2691502867, 327196736, 1074990349, 319622419, 319622419, 218960704, 1077952531, 67125312, 3774808064, 2684436482,
- 452986880, 973089280, 840105984, 588584214, 120992821, 370414897, 909259542, 875902262, 572728870, 906036742, 640037941, 101130787, 370611974, 909182774, 640100150, 352716550, 857085460, 471101490,
- 509353056, 857677619, 523443742, 35533599, 1227560235, 170142508, 146475009, 17446677, 352893959, 1227560197, 1610689324, 1886393372, 3761249300, 505295647, 534781747, 857611827, 723837694,
- 355158316, 3137869061, 87163144, 129763349, 723782145, 2836780, 4278190082, 25166272, 983232, 285212718, 857084949, 892744225, 589706293, 386277921, 355611413, 354624276, 336933427, 857023267,
- 588518706, 370414883, 909259571, 219353397, 319635457, 3237874963, 1881150221, 1886392336, 1886392336, 644878352, 639287322, 220241921, 537727763, 1829966605, 1074794560, 272633872, 639246352,
- 1073814054, 768, 2147598591, 251707393, 889198848, 353435648, 556996116, 892679730, 555951668, 286721570, 858986004, 288699954, 858993671, 857019698, 336926002, 336929571, 891429667, 891429685,
- 858993717, 1073810707, 219353869, 319668478, 3222939168, 281028122, 271585312, 537931792, 269496336, 547356976, 219353869, 320015648, 448855661, 18490918, 269512768, 270536752, 806359088, 1056784,
- 4278190083, 25166528, 2162881, 5701707, 119931136, 654771974, 572728102, 370414854, 370619187, 926365239, 858986007, 875902514, 119743270, 353699362, 640946467, 352723491, 857084945, 892679730,
- 355676961, 842208788, 875902262, 119743270, 654706438, 119677735, 857085702, 657864498, 149094694, 772148749, 2282555160, 168693258, 235415931, 405734926, 174590983, 1544162830, 3759345100,
- 319622419, 319622419, 3760193537, 319622419, 189933624, 320872718, 388930836, 773265175, 387389230, 196477207, 1628176897, 168692516, 205327882, 1678573825, 168692256, 325062154, 106509, 219353869,
- 319652094, 538971411, 219353869, 406333664, 453116701, 673720351, 673720360, 262184, 46202624, 12583296, 5177418, 6750299, 841028352, 857019670, 370612018, 372376349, 587600917, 587600931,
- 590685730, 572720660, 859125030, 724841778, 875897346, 892469819, 570567476, 37434421, 724841778, 875897346, 875901747, 589759798, 570766101, 370607623, 909586995, 337061415, 909579799, 640103477,
- 24118791, 857478144, 323818266, 219353869, 673724448, 674791480, 277887016, 271618064, 279982096, 269529104, 282071056, 271634448, 18624528, 2150845892, 236749054, 470682893, 218959388, 404288526,
- 404232216, 3221297176, 321917980, 320475981, 219365408, 942150413, 942155832, 276834360, 269488144, 269488144, 806359056, 1307384852, 404254816, 404232216, 472913944, 235736334, 219028508,
- 100666893, 3237937152, 3221323778, 855644416, 1191199488, 1660966144, 872480768, 102900518, 387192085, 353703447, 842208788, 875902262, 891692839, 857084951, 892679730, 640100148, 640955701,
- 352723491, 387388437, 352654614, 556996116, 892679730, 555951668, 857146914, 572859157, 336925958, 909259542, 640955701, 352723507, 857084949, 892679730, 3221300788, 319622419, 319690045,
- 554896653, 327166485, 1024658701, 219352597, 354489101, 650181930, 224395546, 4262269715, 3760593568, 536977568, 219353869, 1393758989, 219353869, 18027277, 320015776, 1029049101, 185863701,
- 219353869, 354496011, 232078378, 185406227, 236272982, 319621908, 772476179, 1009390881, 639246507, 224398611, 538584595, 1611469664, 219353869, 320015712, 319643661, 224398611, 131091, 46202624,
- 12583168, 4784162, 640745728, 335939362, 654776087, 101130790, 369237780, 875968306, 389490471, 909586966, 86452020, 118888241, 120006406, 101127703, 101132071, 101127445, 840308500, 842217271,
- 824588087, 657457967, 336050433, 252118791, 336017190, 1208420103, 118753096, 641140487, 118753039, 4263511815, 202127865, 708381451, 185338937, 271333643, 117901113, 1496909588, 29298711,
- 272119824, 129564929, 118753031, 121054735, 118753031, 117917768, 923210759, 117903142, 537334791, 185284981, 708381708, 202050361, 271333644, 121198871, 117901076, 29298745, 272119824, 262145,
- 46202626, 12583296, 1966095, 3670059, 103884032, 640100102, 859191094, 353769010, 587597588, 891692578, 909522740, 102110999, 118895109, 572720646, 908470054, 572597555, 909522726, 387330611,
- 1711408662, 3355774468, 671482117, 726215727, 741288009, 68823881, 96994574, 133299713, 1460404489, 190265914, 17303810, 149290523, 1460339209, 207043130, 113838337, 96994561, 723125262,
- 1445997641, 742992666, 17180464, 235259909, 923142990, 104286280, 118169611, 910706742, 16780039, 3237937152, 3221291010, 11264, 101134647, 840308500, 842217271, 892745527, 572728884, 370607879,
- 656868871, 118888199, 120006406, 101127703, 101132071, 123297813, 118753031, 269965657, 725360352, 959323691, 185273356, 205072953, 957025036, 202127658, 473500427, 123290128, 117901076, 518000729,
- 507259691, 185284910, 708381708, 202050361, 959068428, 202115851, 386931769, 512, 180479, 469811201, 8192, 35598593, 101127190, 19343138, 572728070, 875902246, 640090423, 842413876, 657928963,
- 1612732161, 168364320, 4262005274, 103226601, 18626600, 151587351, 1719671306, 3070309216, 169893920, 151587354, 485096970, 654714936, 152502556, 151656970, 861929727, 1024, 188671, 369139713,
- 822090240, 13568, 857084945, 857084945, 288699954, 875902514, 570632998, 588584710, 370423605, 370413875, 892744243, 892744209, 53159476, 353830434, 219362595, 790700335, 219353869, 221786168,
- 3358623763, 556731667, 319631137, 808979731, 2282949944, 226492720, 567344659, 18951983, 218960688, 2687308563, 319627424, 790745342, 805380399, 319622419, 2694851859, 1024, 2147664127, 587251713,
- 822095104, 13568, 370422037, 909259571, 909381941, 372384051, 370413845, 909259571, 640946485, 119940391, 352716293, 892744193, 336929077, 556217110, 557130037, 168698165, 319687216, 226492685,
- 805965331, 303435274, 202175742, 370341118, 235595777, 168722686, 4269801752, 4269801856, 235546752, 134285838, 219353869, 235600126, 1023478286, 1795629331, 124454149, 2885554977, 943196686,
- 1081085450, 50352160, 3237937152, 3221291010, 671092992, 14592, 387322899, 909586966, 640955702, 119678503, 858064390, 286594610, 555943444, 288695842, 858994228, 842217014, 101975830, 891691555,
- 926103092, 118888246, 578819591, 507780638, 505553438, 505299998, 940048674, 438707738, 639271166, 406329894, 1193879879, 286332744, 554768151, 101649927, 268503842, 286342178, 574361873,
- 286342178, 1312559377, 3237878310, 438707738, 639254529, 3173196573, 286725905, 256775953, 1326319366, 262155, 48299776, 10486016, 5636123, 6684766, 370413824, 102895923, 857084949, 892744225,
- 287516212, 875902514, 572597030, 355599622, 355611413, 354624276, 336933427, 924132131, 842216246, 118756630, 589497863, 640100130, 859190325, 387396147, 891429685, 892547892, 875897379, 875901747,
- 336929283, 875901491, 842208279, 572732469, 319622419, 3221294355, 219353869, 219353869, 319635710, 1343225857, 1884295184, 862982160, 302123016, 269617433, 270104601, 303630610, 856164354,
- 1880100976, 1343230032, 269488160, 269488192, 226492688, 331415059, 320015629, 18025741, 218960704, 271389459, 806359072, 340201488, 252844291, 336860939, 302975767, 1192493849, 271585296,
- 4279246864, 269488128, 269488144, 131088, 48299787, 10486134, 2883605, 101126912, 370611990, 370620215, 909522743, 119940903, 86386439, 101058339, 336930599, 370611990, 909522743, 101135669,
- 708519718, 2735606790, 1397951768, 245569549, 86640397, 200668427, 922878209, 2148804875, 281808916, 336645391, 187241855, 240358913, 120456475, 361466645, 453324295, 17453838, 1610686239,
- 101716827, 437364517, 67384068, 270140467, 268838055, 4278452243, 48300029, 10486016, 3604523, 5177411, 573645056, 117835303, 572720646, 959915559, 842020099, 909588021, 909522742, 891692599,
- 859190836, 353769010, 654706196, 336922146, 909259542, 858141749, 336922146, 909259542, 388379701, 842208788, 640955702, 17179171, 154220288, 705827100, 67373846, 67174664, 134481923, 420938252,
- 1195865157, 1950696820, 320015815, 320015629, 320015731, 320015629, 218960723, 218960659, 268898835, 168495112, 16844554, 184747265, 304090375, 958545178, 1597519967, 945764665, 218960880,
- 218960659, 218960659, 218960659, 319627283, 319622419, 4278321171, 46137343, 12648833, 4063257, 389092096, 842217014, 336926230, 370607878, 101058326, 640024871, 20330039, 572720689, 117835303,
- 572720646, 959915559, 842020099, 909588021, 909522742, 891692599, 1780954932, 1194547746, 488785268, 100796534, 4245165062, 100796592, 2298549254, 825702193, 303111177, 67835434, 16844804,
- 67633924, 386010120, 3137409817, 941496915, 1176975711, 335961116, 100796424, 335990785, 4261545992, 118624849, 185075728, 17238538, 50659585, 537724683, 574429714, 33564201, 3774808064,
- 2684452866, 1006637824, 353566720, 353703446, 909391137, 640955703, 572597030, 822412806, 555947285, 875902243, 589702950, 353699362, 858986004, 557135410, 858986004, 892679730, 572728884,
- 1074136583, 2147558683, 975379237, 587267875, 3758170938, 545324576, 134745618, 219356180, 18025760, 537727936, 337384205, 302909193, 86122497, 808459564, 570764317, 589511203, 540054330,
- 403714080, 337380101, 320015792, 320015629, 471117837, 1574147, 4278190083, 16777920, 1835200, 9306227, 909190400, 926299703, 875902518, 572728870, 336922118, 387323670, 372315184, 822293043,
- 353703474, 370546454, 654706183, 119677734, 387192070, 387388950, 370611734, 101979414, 352781831, 572720660, 641021222, 825304870, 640034598, 389428791, 370546454, 909586967, 640103477, 640100134,
- 640034598, 926299189, 875902774, 102892342, 370414869, 909254963, 640955701, 117842723, 589501747, 656814901, 556484353, 453050625, 962541599, 523788089, 590225691, 136652068, 134941196, 235012616,
- 218895112, 84215305, 151062798, 252315668, 218761998, 201852940, 50728456, 50857987, 67636739, 152046339, 101058573, 34147845, 168301320, 168496911, 348654604, 18095132, 471602336, 723324948,
- 1220591688, 271326762, 16843041, 959072796, 1597519967, 474622521, 201396259, 135023617, 50528526, 134744078, 67437826, 50529285, 33620740, 335939079, 102174735, 135136006, 252185612, 16909569,
- 135201537, 16975879, 17040385, 67568645, 33882884, 84345345, 252711686, 50661142, 4262201358, 1075059956, 337386516, 656151616, 421535769, 4278386727, 46202878, 12583168, 4259857, 318767177,
- 926299669, 387323702, 353834518, 640099878, 909383462, 355611443, 352782100, 587597332, 587597603, 656811554, 926299942, 889335351, 909588020, 504836659, 825562883, 574042421, 842208277, 211891253,
- 218630682, 352387346, 338170385, 798300430, 34366497, 742992670, 100944970, 153829417, 134415109, 725095306, 235210770, 890045970, 1343701058, 17829904, 740295008, 67373324, 389488916, 202310687,
- 555947273, 50596911, 1227661357, 419707947, 134679585, 187040264, 809128755, 319492420, 304364330, 788602882, 269488144, 512, 1107476735, 654344704, 13056, 101134629, 639762987, 909391157,
- 909587251, 372376379, 721818645, 336929282, 909587251, 102110998, 807874565, 808650289, 875769877, 612315138, 228630828, 621613843, 1311580973, 319635472, 272633107, 2004422672, 168435726,
- 25558533, 939589889, 219355997, 605228352, 218960668, 1477447699, 235734282, 16843296, 50331905, 3237937152, 3103867394, 989860608, 16384, 857085715, 909588274, 572925748, 640091911, 335939362,
- 640037125, 572720903, 37434421, 875902514, 570632998, 572720903, 336925958, 839006998, 909522743, 825238021, 157721651, 1695157517, 1041634838, 370283030, 18224702, 236980906, 269515127, 319635472,
- 272633107, 757280078, 320015653, 765501453, 84770596, 16875774, 157759233, 1075209993, 303437334, 370546194, 84794688, 269506570, 319622419, 219358236, 454233408, 572525149, 768, 1107476735,
- 1593884673, 2348844800, 822149120, 572728884, 102044934, 352716295, 370611732, 370611990, 353769238, 101127217, 572720647, 640034598, 117843495, 840373766, 370546454, 370414871, 892744243,
- 909588021, 640955702, 656811559, 656811555, 808527398, 926168368, 859191094, 907417394, 656815671, 822159142, 117909030, 875897379, 909247035, 723924021, 117907971, 352723491, 991302677, 926364162,
- 570766902, 20132144, 168431160, 201853966, 151654416, 151128084, 17040398, 185074177, 34213896, 302580228, 151585539, 100729602, 168691469, 168496650, 185601804, 17306633, 33885450, 33620225,
- 319491080, 50467337, 134875658, 537526273, 276395790, 222302224, 1074598675, 590171664, 319628589, 2694843667, 226436141, 25230853, 178782465, 185208334, 403113219, 102109201, 16910085, 50529283,
- 16843522, 50660354, 50397441, 302647561, 33620227, 168493572, 185208334, 403179010, 118886417, 50464773, 16843525, 16908545, 50660354, 285870602, 4261544706, 168103378, 319819864, 471010573,
- 1074598692, 1562055437, 2236426, 4278190083, 21103296, 1114304, 4063289, 101122304, 370414869, 892744243, 656880693, 19014438, 119940657, 891429639, 839007028, 640955702, 119669547, 102900487,
- 370414869, 926024251, 87438903, 858861602, 289608705, 942155832, 134562321, 169869576, 2037845536, 1074794512, 219353869, 760090688, 220540195, 2685211411, 2133077408, 2164131085, 3103850753,
- 35527008, 674773032, 1612258818, 229703175, 274205189, 218960656, 321133587, 319635469, 537550107, 131106, 46202624, 8388992, 5832748, 489755392, 387388418, 909522710, 874906159, 523384375,
- 370618626, 101979413, 656548643, 54339111, 842217012, 875627798, 372388662, 118752029, 589497863, 892675618, 825702196, 842413879, 252974615, 387319298, 909588246, 324010557, 168889907, 537921538,
- 436865289, 420421642, 1125391393, 476320538, 386994455, 270065665, 1679562513, 339941907, 253305116, 169478688, 270534921, 285803272, 18035470, 676341848, 238293531, 135726859, 436871183,
- 537463050, 773921040, 320607311, 1697127524, 387004480, 386994455, 1077416215, 1679566949, 1326717971, 270082350, 168364320, 253757978, 185014024, 454177806, 33574952, 3405711872, 3087103490,
- 1442850304, 891617280, 589506100, 590426160, 808457507, 101979441, 891691555, 909521205, 858927923, 389166647, 118756887, 858859271, 842084400, 338760982, 353765126, 589497876, 101979414,
- 572662563, 570820387, 874915623, 909509183, 370414903, 892744243, 556736514, 386959368, 51843345, 74456105, 772876292, 269504017, 393793606, 219355681, 50533404, 27268124, 287637761, 273551662,
- 135285264, 506075945, 147335710, 1209020193, 286725905, 673520504, 290328592, 994382126, 504698657, 336793092, 336070684, 269493788, 288231758, 622541129, 706639621, 33562154, 4294901760,
- 2147581954, 1207967232, 906035200, 35598899, 372376123, 101979413, 925311779, 119940918, 656803335, 389494310, 370546481, 654706183, 101058310, 117843751, 656868870, 891691555, 859190325,
- 859191091, 101127986, 370546438, 457376055, 1209539617, 1275330820, 337386516, 219525418, 1661798922, 168370445, 2255948805, 202244623, 117640995, 286140429, 671942915, 342645774, 1343495196,
- 320673864, 118903826, 389812497, 253061889, 337380142, 2736526464, 202181136, 84561417, 153029901, 671972142, 168037902, 34539273, 151719694, 1393426959, 343938076, 118501404, 389550660, 1181720,
- 4278321153, 33423808, 4456640, 354615552, 924267059, 875901987, 35530534, 587601431, 353765155, 587600917, 891691555, 657929269, 925245987, 104268350, 387192070, 859182883, 639841587, 926299189,
- 389165878, 336926230, 544243713, 477628938, 1026365983, 151127844, 93062664, 341840924, 109839644, 117573896, 439172388, 2015166751, 1864370698, 638719489, 304493106, 2147483926, 118064132,
- 270291760, 119160118, 185309707, 471602272, 185294868, 436669338, 470824509, 151466067, 159384708, 406988295, 1108881456, 83887910, 3187670527, 3338765058, 1409288960, 1761631488, 29440, 370611219,
- 875902519, 101131815, 370618647, 387323671, 842216214, 926365239, 355940150, 117900807, 370611718, 906116918, 640955701, 34546211, 589706293, 352723491, 640100117, 352723491, 35591189, 909579798,
- 640100150, 101132071, 907417366, 19347255, 386271010, 926036758, 321267510, 370607921, 909522710, 404246567, 404232216, 322967576, 70978567, 2130969604, 50660355, 319228732, 251792179, 218959875,
- 1326318357, 639181331, 319434773, 319651853, 638988042, 1326653977, 219480846, 268570637, 2385709826, 202115845, 824509721, 236768769, 470682893, 218959388, 623981070, 202119429, 2415985931,
- 218959388, 236723214, 3725462797, 503647004, 16843010, 85852673, 859905035, 224071435, 268567317, 323966477, 572086298, 1275414304, 219353869, 541525324, 441981218, 223760147, 352518672, 185555725,
- 420258099, 202048773, 1560359262, 404232216, 404232216, 1580311550, 84216588, 50334745, 3237937152, 3221307394, 1493175552, 25856, 589706241, 336922146, 858994197, 822548274, 101130787, 572720902,
- 909391142, 909259571, 589706293, 352723491, 858986004, 353834518, 858986004, 892679730, 370414899, 909259571, 926299445, 892744243, 589706293, 925312547, 589506102, 637994530, 337060391, 639771398,
- 859190325, 2415990322, 942155832, 125835288, 360714249, 155200276, 202115103, 235537416, 470026766, 488384552, 320479747, 319627277, 537727872, 236065549, 320015648, 420285709, 118096398,
- 220599820, 990185222, 235538958, 235538958, 942170113, 67250232, 85917958, 204292620, 235669512, 672008714, 573053980, 222303290, 537727763, 320015648, 302923789, 224398611, 924261907, 269618184,
- 176685313, 168431118, 33558030, 3237941504, 3221335809, 872425984, 388300800, 117900822, 656877062, 657532721, 875902246, 859191095, 387396147, 336925974, 925304583, 572728870, 823592710,
- 120653591, 640100102, 20395814, 67786829, 386545166, 944987143, 405148184, 405490729, 471404584, 688273493, 103358239, 1283491381, 238491153, 2103380484, 136186975, 151258655, 457203817, 421467428,
- 1009000758, 622730520, 1029512476, 68358916, 1381536314, 136252691, 6753310, 4278190084, 16777920, 3211456, 5570633, 16777313, 572728884, 370414854, 102900503, 857084949, 353776179, 589497876,
- 101058310, 909254919, 589706293, 891691555, 858994228, 37631766, 909586689, 909522742, 589706293, 336922146, 370611734, 909586743, 587600951, 875898402, 372388662, 891691557, 842217012, 101979414,
- 674758658, 270022696, 943204392, 319643688, 165874963, 101713930, 942150657, 224405560, 1561137939, 671942152, 24509984, 285740807, 673724443, 220733496, 84019977, 218960656, 218960659, 220201235,
- 218960659, 1610683155, 674773032, 941110037, 322447400, 219352333, 118688526, 942155832, 319622419, 906954498, 26279485, 386601991, 942151221, 991504440, 134876467, 227476738, 218960659, 332600083,
- 320015629, 1248525, 4278190082, 16777920, 852160, 16777250, 589506100, 369559074, 37623574, 370545669, 370414899, 1026961971, 640037890, 102900515, 219348994, 493371168, 923148571, 16659288,
- 322856508, 1007881485, 220216934, 228589843, 473186067, 1057433671, 1715341151, 319660092, 547360019, 322725438, 512, 180479, 520142849, 12032, 352723475, 102900501, 857084949, 370413875,
- 892744243, 909254929, 589706293, 640955681, 352723479, 857084949, 892744225, 589706293, 538119520, 219353869, 218960672, 224395539, 4262269715, 223548320, 17634067, 320015616, 331350285, 219357197,
- 2701005581, 219353869, 219373569, 220205837, 219389971, 320015776, 319660045, 1024, 180479, 285261825, 822093056, 16384, 656810501, 909587494, 372388662, 118756887, 640091654, 370607623, 909259542,
- 640103991, 587597319, 338109986, 909259542, 589706293, 907478562, 924194610, 640034614, 386270982, 1157628182, 572662646, 1162180131, 572662646, 178353699, 285936908, 975776058, 218893073,
- 556600842, 321006881, 303173133, 2635271438, 168635405, 252251149, 151989806, 1161825548, 998914875, 994395451, 993757755, 185383749, 571739146, 168563746, 454036491, 319653147, 319622419,
- 303179539, 218761484, 336399636, 592397, 4278190083, 20972256, 1441952, 3407912, 842212608, 101979414, 639770915, 909391142, 372388662, 101979414, 117842471, 370611206, 909259542, 657733175,
- 337061414, 640091655, 909587509, 2097223191, 320015779, 1052835341, 1715223654, 1013333566, 739949604, 218959117, 739908140, 218959117, 538977836, 538976288, 320872480, 1007881485, 1715355238,
- 1046887484, 450974255, 372512278, 370809366, 370553878, 304439322, 621941523, 320016933, 196626, 46202630, 12583296, 2097172, 16777273, 352723491, 101057809, 924194327, 857085477, 892745266,
- 101127203, 875898407, 370619959, 370618661, 909588246, 640100150, 386336550, 101123862, 101132071, 3766485510, 3237881370, 67308813, 1879116823, 523124993, 406855219, 404232216, 4246214680,
- 386148823, 218995213, 386148611, 68496909, 68099856, 218967573, 438747137, 72867582, 218958871, 1076716547, 471806750, 235736334, 219028508, 2594442765, 704843021, 2584549123, 201526541, 151261006,
- 206376964, 83891972, 3774808064, 2684452866, 922759424, 1325417216, 23296, 372384019, 842208533, 487986967, 587600899, 336926243, 639771398, 590820405, 336926243, 639771398, 587597351, 54339106,
- 654652980, 354624294, 352723479, 842208788, 640955702, 857084933, 875902514, 102900518, 352723495, 842208788, 640955702, 442499392, 286929190, 219351355, 556728834, 570568481, 556728962, 185278740,
- 790696993, 841155110, 808518658, 219353869, 4262662925, 218960787, 218960659, 319643667, 319622419, 648020243, 1192570906, 269094667, 135466304, 791617800, 134744097, 288301320, 789647119,
- 3494907937, 1038099994, 326123523, 320015629, 538119437, 219353869, 320017165, 319622419, 319622419, 4294902272, 2164441087, 604029185, 12288, 857157907, 353703474, 922893591, 370619959, 118755605,
- 388441862, 101127702, 637609734, 909522726, 101069057, 639770915, 892604725, 451824423, 1611538470, 286331152, 1460539409, 101057032, 2969372692, 101057032, 142082324, 16716317, 3137414682,
- 2904172091, 293602841, 151666698, 16716553, 168364307, 335954954, 100796424, 335990785, 4261545992, 638651998, 50331930, 131076, 29425422, 12583218, 2424865, 120656640, 353834502, 352723491,
- 37426708, 875902514, 891495206, 656881206, 589506086, 924255778, 236984115, 808664836, 219353869, 319639632, 858787091, 17695807, 213912595, 2248488723, 2846032133, 1678464310, 319622419,
- 319622419, 911543140, 286330025, 4210799, 4294967042, 25232063, 1638593, 318767142, 909514545, 370553395, 117838869, 118887959, 19334662, 909583910, 590414134, 891691553, 859190836, 2351372083,
- 674516746, 607004481, 100796665, 4245165062, 100796592, 50467846, 222232065, 742992914, 3137467451, 658649454, 1177233473, 335987473, 100796424, 335990785, 4244768776, 739054335, 12594249,
- 4278190086, 29360576, 1638592, 4259881, 6684767, 16777326, 353703446, 101123604, 639771398, 891692583, 926299189, 842217014, 640943894, 102900515, 370414869, 909259571, 370607925, 34542613,
- 790766342, 875898370, 859177535, 822548274, 842208790, 370554678, 587600917, 640955683, 102900515, 572724501, 909391142, 353710615, 389297443, 859059490, 18093362, 286329971, 827265804, 202592049,
- 319557905, 1328623951, 2148801552, 674765844, 2469931040, 369427734, 101056774, 102041089, 17175814, 1174472198, 522139927, 1060247353, 325192977, 319651853, 1058082146, 1881149553, 17829904,
- 219283808, 17960256, 708195882, 1074598401, 704713229, 341456438, 269753372, 674773032, 100730371, 352715014, 102041094, 17171969, 84219398, 320016815, 945427473, 222302477, 1074598675, 1513622801,
- 808456304, 269492240, 50335760, 3237937152, 3221321730, 553652480, 13568, 387322899, 909586966, 640955702, 119678503, 335742470, 841036566, 640955702, 572728102, 822150662, 640103478, 654772002,
- 101130790, 370611988, 576730930, 507780638, 505553438, 505299998, 219242530, 286098433, 1546735920, 36720945, 117901169, 795805460, 117904391, 336019463, 574619911, 286331196, 572668945, 286331196,
- 2097036305, 219222285, 808472881, 117440849, 117901076, 117911407, 1074205703, 67110663, 3237937152, 3221323778, 553652480, 1090532096, 571670528, 335939334, 857085463, 909588018, 640034612,
- 101065219, 857084949, 891692577, 589707060, 387322903, 909586966, 640955702, 119678503, 842466822, 842208533, 589501461, 875902242, 289153760, 1007751441, 289153570, 1007751441, 810627408,
- 1828785425, 487139618, 556225054, 555830817, 555820839, 656482638, 270536848, 17838096, 505291456, 572399172, 1142824482, 4263648798, 827404496, 1259868429, 169483309, 339879744, 1108611859,
- 339879719, 1108611859, 271585321, 272633872, 1024, 1929560319, 285261825, 2164272128, 36096, 117842451, 370611206, 909259542, 657733175, 570631718, 336922118, 639709974, 637941045, 640099879,
- 926295591, 641148454, 355546915, 654706452, 101131815, 101123591, 353769239, 101123860, 370611735, 926357015, 353769270, 370611221, 909586995, 926168373, 370612022, 909588023, 656881207, 926168358,
- 640103991, 640099879, 654706439, 875902246, 572728871, 370607623, 640091655, 909583927, 585111063, 286331196, 572668945, 286331196, 827341841, 219230289, 218660353, 185469984, 218433034, 17566476,
- 212209937, 185404171, 134810376, 235602949, 185469450, 151520516, 218826763, 185338635, 269553936, 168496139, 185076494, 67438601, 168431115, 84151054, 134940936, 185208331, 286264076, 1544228881,
- 421074945, 402719000, 18356505, 505291456, 572399172, 1142824482, 4263648798, 827404496, 235671821, 218302209, 336728591, 117972240, 1443040792, 117837073, 134612998, 286134029, 101189131,
- 134614029, 235997958, 101190672, 117900808, 34410764, 218235908, 117902353, 134612998, 269422093, 84412171, 134614285, 252709638, 101256207, 117835272, 51122700, 2449670915, 252645148, 253565967,
- 986895, 4278190084, 25166526, 1114304, 3014691, 922746939, 640099874, 909522740, 387330611, 101127190, 842204934, 101127958, 386270983, 891691553, 624309812, 336992049, 925304583, 923218486,
- 117835543, 640091655, 3761649463, 286342178, 574361873, 286342178, 1346113809, 406791260, 251989032, 3690857731, 1362104589, 202302721, 491199756, 2179080460, 151421255, 117836092, 3221360387,
- 1142824482, 572661278, 507780638, 456139294, 286074903, 286133820, 810627341, 554438212, 491199756, 1199685900, 251790977, 151389955, 67111228, 3237937152, 3221323778, 553652480, 1124086272,
- 336789504, 840308502, 892745271, 640099892, 101058338, 857084931, 892744225, 589702708, 101065251, 892744197, 589702708, 371401251, 336925974, 909247239, 640955702, 119677734, 118756630, 576722454,
- 507780638, 505553438, 505299998, 219242530, 286098433, 1546735920, 36720945, 739380577, 37629001, 153493509, 506666791, 622801694, 253694493, 574619945, 286331196, 572668945, 286331196, 2097036305,
- 219222285, 808472881, 219303761, 472664364, 285748814, 503316751, 857677619, 673322526, 302983733, 4294902272, 3221340415, 620806145, 15360, 101134611, 353834005, 370607623, 926036787, 891758390,
- 370414871, 909259542, 926233910, 657732918, 822288935, 336922118, 841036566, 640955702, 117909031, 656876038, 331930406, 83955728, 136316932, 268502276, 591012656, 1294154275, 96998163, 306131312,
- 226623757, 271662866, 235226893, 17647365, 335816896, 1330054673, 101058055, 1095698182, 975386890, 591012643, 335745081, 4264035348, 911478712, 219288077, 101667894, 84233230, 67112524,
- 3237937152, 3221323778, 570429696, 1107307264, 574029824, 874915622, 859190839, 370611762, 101058324, 372388615, 353702935, 572593940, 909391142, 102901046, 892540181, 872883764, 372388662,
- 372380949, 101979413, 639771427, 909391157, 1008918579, 286331153, 1008869948, 286331153, 542920764, 4262008635, 806423957, 227475793, 1561542675, 790700335, 219353869, 320015776, 505593869,
- 505299998, 505291298, 572399172, 51648048, 252805123, 1362169105, 219365424, 319631408, 791617824, 219361313, 320015744, 319651853, 768, 2147664127, 285261825, 788537600, 336789504, 840308502,
- 892745271, 640099892, 101058338, 857084931, 892744225, 589702708, 101065251, 352723493, 858986004, 875902514, 576725798, 507780638, 505553438, 505299998, 219242530, 286098433, 1546735920, 19943729,
- 235801304, 235573258, 1073809934, 286342178, 574361873, 286342178, 4265349393, 286330236, 810627341, 250171696, 235801098, 920074, 4278190083, 29360576, 2621632, 4784191, 842086144, 875902518,
- 572728870, 656803590, 640099878, 370546438, 102176279, 117835271, 909317638, 926299958, 822547990, 556996116, 875902514, 119940902, 656541191, 101131815, 842208006, 589501461, 3761517858,
- 589511203, 1025844026, 185009424, 151391007, 201916673, 135007240, 16845068, 520816137, 201458187, 219264323, 286098433, 118045004, 84935998, 973670206, 276865099, 3222306832, 589511203, 522593082,
- 151783177, 101253377, 151723787, 201852165, 134613791, 17566209, 3794937602, 219222285, 51339070, 101077769, 251857235, 272892255, 1052688, 4278190084, 25166526, 1114304, 3473442, 922746939,
- 640099874, 909522740, 387330611, 101127190, 842204934, 386014743, 572596998, 909391142, 909190454, 353769239, 117835284, 36579078, 389493813, 37623079, 289153760, 1007751441, 289153570, 1007751441,
- 404380752, 657134594, 2097021699, 1362104589, 151610881, 974524280, 923339063, 3759085114, 321397343, 505291456, 572399172, 1142824482, 807542302, 1195908615, 219218203, 1311789361, 103810052,
- 1280516112, 386139159, 270553932, 3156616710, 3748625, 4294967042, 25232063, 1704129, 318767142, 37623601, 370553395, 117838869, 118887941, 19334662, 909583910, 87102262, 572596998, 909391142,
- 26814262, 589510947, 691413818, 34084353, 135529990, 34124029, 3910403590, 100992257, 286096638, 3137424429, 574104440, 740506147, 114887493, 34080788, 114295046, 34080788, 47108094, 1328483601,
- 262193, 46202624, 12583289, 2293777, 4259893, 639776512, 926164519, 842217014, 336992022, 117835271, 389165873, 387388437, 572596998, 909391142, 842217270, 336992023, 570820359, 891692839,
- 389428277, 842208788, 640955702, 3758498339, 286342178, 574361873, 286342178, 1346113809, 387455580, 4262463844, 806423932, 441712465, 235825939, 237506121, 622007147, 235538958, 235538958,
- 505291456, 572399172, 1142824482, 807542302, 388047111, 219221347, 1345343793, 672033555, 235817230, 1394217835, 173019917, 168431118, 33558030, 3237937152, 3221340161, 989860096, 873660416,
- 842413878, 353768983, 101123604, 640034594, 908472599, 372376123, 924256007, 370546486, 587600917, 825241635, 808452651, 639771441, 926299189, 924260150, 505291360, 572399172, 1142824482,
- 1596071454, 336136453, 67701012, 69476627, 306525454, 1879474957, 302875653, 68040005, 1073815844, 286342178, 574361873, 286342178, 2788954385, 135270408, 261323807, 945229060, 219288077, 67983160,
- 8164111, 4278190088, 25166528, 721088, 2686999, 6488122, 14680199, 318767340, 925247266, 389165878, 554043158, 925247266, 389165878, 84281110, 858994228, 352720690, 806819348, 572731696, 639763750,
- 859190325, 336926258, 101123591, 823592455, 823406615, 120656916, 370607622, 389100311, 387330353, 926357014, 336926486, 639770903, 909521973, 924201779, 387330609, 640034598, 656803591, 656815157,
- 119677734, 353699334, 640091910, 875902503, 389232167, 352716579, 370611988, 117900807, 654706438, 101131815, 118756629, 656548614, 875902246, 117909031, 656811782, 640099879, 892745527, 640100148,
- 926365239, 389429046, 909579799, 926168373, 389165878, 336925974, 926357015, 387323702, 370611735, 370611207, 875902519, 101131815, 387395216, 774772503, 387389207, 388907521, 773265175, 387389230,
- 1070791959, 353905196, 3591640834, 1073810696, 674773032, 84949032, 453182724, 201523997, 84149773, 117834241, 51126282, 4261609986, 605031380, 73934140, 37628836, 537527044, 33686284, 218829075,
- 319884300, 50529025, 352455172, 50431512, 201526541, 50594565, 201786884, 269487363, 168430092, 269487114, 134939406, 84018182, 51053571, 184749582, 33882884, 185074949, 269487619, 168430092,
- 269487114, 118227470, 67241222, 346293507, 336860180, 18093076, 673720352, 673720360, 673720360, 673720360, 1059883816, 487262986, 218960433, 942155832, 421341240, 100992259, 33700887, 117571841,
- 168431645, 218630660, 16910084, 134742786, 1009060624, 1018368804, 218301995, 16910084, 420348674, 50463235, 16977433, 16908802, 168565016, 134325258, 34083347, 151456774, 168232708, 151519495,
- 218304521, 33686018, 152044301, 117508105, 67569418, 101451784, 319948802, 185008392, 134481928, 33949959, 269027592, 33623300, 67961090, 134809872, 134809090, 134743047, 202842891, 386665227,
- 185273367, 327692, 46202625, 12779904, 2883625, 4325438, 16777301, 117835569, 372388625, 587600917, 891691555, 120006161, 640099846, 641152822, 859190325, 924259890, 370611766, 657655558,
- 656810517, 926365222, 389165878, 118887959, 824509958, 822555399, 926365222, 389165878, 118887959, 572720646, 2114585126, 228598027, 3222082323, 101192461, 68684936, 2064452613, 371273473,
- 208735012, 184812568, 793284703, 67242055, 268984069, 90114064, 1191707140, 2437436158, 67437255, 269486175, 67395592, 793184258, 2181121839, 4262339370, 218960857, 17634067, 755303239, 218958853,
- 86574103, 372187396, 201663761, 3860270349, 573430908, 2735149320, 128126478, 757205009, 135363676, 245565201, 285713166, 757932552, 1280, 2130886911, 687915521, 1056976128, 1426080256, 823328768,
- 286725655, 352723491, 858986004, 288699954, 370620214, 641087286, 892610343, 572728884, 640091910, 369493766, 925053207, 926298645, 656877110, 119677734, 386270727, 388306454, 909186851, 640100134,
- 117908003, 370607622, 909259542, 554401398, 320015776, 319668237, 210241032, 184812568, 556759565, 1896555542, 67377164, 1217421067, 34096943, 140444932, 1594363920, 134349829, 1219363143,
- 84068241, 268984068, 73402384, 1191707140, 21442351, 237185666, 219404798, 219353869, 84100865, 218891565, 688134156, 790692869, 69538070, 386731275, 769424614, 118556706, 2735607459, 570953991,
- 293362733, 2735149320, 128126478, 757205009, 262189, 29425408, 12583417, 2687013, 4522041, 336924928, 389231382, 572733217, 858993717, 891429687, 926102324, 875897379, 909587251, 589374246,
- 386277923, 322123043, 353699362, 556996116, 892679730, 119744052, 875898402, 372388662, 637932565, 17389338, 274862592, 2081581584, 310644752, 2668630166, 269681670, 1075890942, 1385309722,
- 471075398, 536941596, 337386516, 320015760, 320015629, 444628993, 272654374, 269500432, 403705920, 2586188047, 482410112, 471080980, 337646620, 219373596, 219353869, 33559309, 3875471360,
- 2684436482, 822089728, 823590912, 572728870, 637929222, 926159157, 842217014, 353769238, 923145233, 891684401, 909587473, 372388662, 286594583, 640091668, 102900518, 423433466, 135807773,
- 1125454352, 255863846, 138677765, 1074726158, 356722220, 403181586, 1025056067, 252708631, 151650824, 118845953, 202903560, 2281572355, 50530569, 2030110985, 403440647, 352782352, 168398590,
- 269420546, 1280, 1073922303, 335594241, 1023420672, 1694519552, 823328768, 640099894, 352716550, 370546452, 657864247, 624178470, 119940657, 370607622, 101127189, 907417366, 875902519, 589706247,
- 336922146, 336664342, 909259542, 909513013, 656815655, 101123622, 370611221, 909522710, 875898407, 119940645, 370607622, 101127189, 907417366, 875902519, 201983312, 352655373, 219677973, 268765708,
- 403041025, 84544525, 168103952, 85462284, 438755349, 236070426, 319622419, 95752718, 420219914, 84938757, 168561689, 805374725, 202119429, 185271562, 202115589, 17827097, 85527700, 873204485,
- 204748856, 419759371, 741091340, 84610112, 671881477, 203959340, 184878361, 943207436, 640031288, 136122906, 319674366, 687934739, 205856008, 168166681, 673719564, 101321765, 403446021, 204610331,
- 419759626, 454760460, 85527576, 621545990, 33564712, 3237937152, 3221307394, 805312256, 822149120, 353769223, 589497876, 909391143, 387396147, 389166647, 822285334, 587597590, 891691555, 909588276,
- 101123878, 926168358, 35075639, 119717943, 1813842445, 118032909, 436912162, 116066570, 2906467120, 2131168521, 855901443, 136513796, 2298561584, 151462592, 493620490, 570887434, 168364480,
- 1154285082, 151857968, 57739018, 51970567, 590415110, 405512, 4278190082, 20972256, 852128, 318767141, 353776161, 554771217, 873538321, 909382454, 372388659, 842208533, 101979414, 639770915,
- 859190325, 2147573811, 4265616922, 2586198144, 226495763, 319651859, 16649491, 219353869, 648020416, 31522330, 31522336, 4263909920, 320015776, 219357197, 219353869, 50336525, 3237937152,
- 3221323778, 805314048, 16640, 389158163, 588325173, 589706293, 352723491, 387326741, 892744243, 589706257, 352723489, 101123618, 370546452, 926298675, 640103478, 573638438, 336922118, 841036566,
- 640955702, 597697318, 1080033565, 222301459, 304309267, 640031471, 446758426, 220994086, 739052813, 220994074, 739052813, 607986741, 167840528, 1025773579, 545259812, 3774755089, 320015648,
- 655958029, 536943142, 1512449562, 873862682, 437917206, 372512278, 618666518, 269165884, 1009060624, 196644, 46202624, 12583296, 3407915, 16777277, 372388629, 587600917, 370611491, 891490581,
- 572728884, 588584198, 926364689, 639771445, 859190325, 909391155, 18231859, 572724535, 875902246, 389358341, 336925974, 542638342, 168693258, 1612149024, 639244838, 544282464, 168693258, 168431136,
- 1740766734, 35394640, 426201168, 413663516, 235538958, 453919790, 442563582, 1612326438, 236651777, 168701508, 169348618, 3304984078, 337440312, 4003994716, 1545342520, 100670484, 3237937152,
- 3221291010, 973083648, 1728071936, 2264953856, 872480768, 572728870, 336922118, 859182871, 387323698, 87439158, 101123633, 387192070, 370546454, 926298675, 825700400, 825241649, 909193264,
- 875902519, 589702695, 338761506, 909587989, 117847349, 370542342, 570572039, 117835526, 587597574, 656811810, 370611221, 909259542, 926299703, 353646390, 892745526, 101123637, 822547719, 656811810,
- 370545685, 909521459, 117847349, 872415750, 1463104855, 201467444, 87971340, 640633862, 269591038, 69617720, 760027650, 18567215, 654444316, 254758683, 739647215, 723589905, 18877962, 134807810,
- 1446906636, 303709782, 793778982, 35278125, 539361794, 286202168, 3760002843, 303709782, 892688180, 454112343, 376439102, 605427236, 18160406, 50469377, 907352581, 688390913, 34937626, 303041793,
- 319815950, 370869766, 38801678, 369821443, 185475869, 453641998, 50731632, 67567874, 437912838, 455282187, 269553429, 16843021, 50469653, 269424909, 168496675, 445651462, 371396107, 605427236,
- 185475862, 262170, 46202624, 12583168, 1900561, 4390959, 370423040, 926029335, 875902518, 572925734, 84280839, 875902514, 102900518, 655758357, 909588020, 370546482, 117838869, 640098822,
- 588523302, 909391138, 859190839, 588518706, 101123618, 993740038, 1161509770, 2319137605, 21314363, 320015616, 320015629, 370547283, 437655092, 873862682, 1075451414, 421400592, 270679832,
- 355736080, 1170216981, 572662646, 1162180131, 572662646, 325416483, 320015629, 538119437, 218967066, 439094541, 218967066, 707529997, 1059196944, 270407705, 353703952, 4278321204, 46071807,
- 12583296, 3932208, 842072320, 842209046, 118888214, 336925959, 370607878, 637929222, 572663591, 370615075, 637929222, 119744295, 640099846, 889272118, 571946548, 370414854, 892744243, 3355518516,
- 839656468, 67445526, 1028608016, 151520298, 788795913, 687931649, 151520295, 788795913, 436882309, 184748040, 607412993, 168693258, 17698314, 453972416, 335810581, 1715617800, 319383057, 151520259,
- 302604145, 151520260, 50870641, 135924235, 605884929, 168706100, 168693258, 16780810, 3774808064, 2684436482, 14592, 370618625, 641152790, 859190325, 336926258, 573580038, 101058353, 639770915,
- 573581095, 891691569, 842217012, 118756630, 926291479, 875898423, 372388662, 889263125, 203294521, 286722137, 286725905, 587541761, 401276439, 19727651, 286725905, 1493702417, 956767756, 286332691,
- 1935016215, 1191839501, 386993419, 386994455, 505288699, 286784279, 286725905, 172428045, 208866567, 387387670, 134223377, 3237940480, 3003219970, 452988672, 855648000, 1258307328, 1744854016,
- 385941504, 117904406, 656876038, 926364710, 336015926, 909259542, 589706293, 572982818, 370414854, 892744243, 840377908, 640955702, 352723491, 574035476, 370414854, 892744243, 841426484, 640955702,
- 352723491, 890443284, 657864247, 353776179, 587600917, 925245987, 336922146, 909259542, 19280949, 353733395, 356259211, 2333414795, 238435349, 235801098, 1745750538, 168693258, 1980632586,
- 168693258, 2316176906, 168693258, 2316176906, 168693258, 1779305994, 135009908, 640031346, 639287322, 235801248, 235801098, 361471489, 361436476, 1008044821, 3541404437, 168693258, 235802122,
- 235538958, 235538958, 168431280, 168431118, 168734734, 168693258, 240127498, 235801098, 4262332938, 359998136, 438704953, 640031424, 168431250, 168431118, 393230, 31522560, 10486208, 1769487,
- 3342375, 4915263, 841028352, 336663830, 572596998, 873542950, 102897462, 857084949, 875902514, 370411302, 892744243, 572728884, 102905606, 857084949, 875902514, 370423590, 892744243, 572728884,
- 102897414, 857084949, 875902514, 1073823782, 438707738, 639287550, 319642150, 319622419, 219360531, 219353869, 226497293, 218960659, 322114323, 320015629, 538119437, 219353869, 18027277,
- 4263126688, 640031424, 440402202, 219373606, 219353869, 232788749, 218960659, 326308627, 320015629, 1074990349, 219353869, 2903708429, 319622419, 319622419, 1280, 3221348607, 251699201, 654318336,
- 1056977664, 286326784, 556996116, 288699954, 555951668, 337053218, 639771398, 859190325, 570889778, 909391142, 353776179, 339150356, 639771398, 859190325, 570889778, 909391142, 353776179,
- 438699540, 639254529, 3237878310, 329262618, 320015629, 538119437, 219353869, 3541242637, 319622419, 319622419, 320015648, 320015629, 3237896193, 438707738, 639254529, 319642150, 319622419,
- 219409683, 219353869, 232788749, 218960659, 334304019, 320015629, 1248525, 4278190082, 29360608, 983200, 318767131, 353776161, 587600913, 891691553, 389428241, 336922146, 909259542, 1076245557,
- 639254529, 3237878310, 3123062298, 219353869, 18027277, 4263126688, 640031424, 440402202, 219398182, 219353869, 117445389, 3774808064, 2684469249, 452988672, 855648000, 1258307328, 22272,
- 370413841, 909254963, 640946485, 102900003, 587600919, 875898402, 372388662, 891691527, 842217012, 101979414, 587600919, 875898402, 372388662, 891691575, 842217012, 101979414, 587600919, 875898402,
- 372388662, 891691527, 842217012, 101979414, 1073814054, 438707738, 639287550, 218960800, 218960659, 319627283, 319622419, 219353875, 219353869, 228594445, 218960659, 320017171, 320015629,
- 538119437, 219353869, 18027277, 448855648, 18490918, 640031296, 320015706, 320015629, 218960781, 218960659, 319635475, 319622419, 219386643, 219353869, 222302989, 218960659, 328012563, 320015629,
- 1248525, 4278190084, 29360608, 983200, 2555931, 318767155, 353776161, 587600913, 891691553, 389428241, 336922146, 909259542, 388379701, 842208788, 640955702, 386277923, 336922146, 909259542,
- 1076245557, 639254529, 3237878310, 1512449562, 219353869, 856888077, 319622419, 319622419, 320015744, 320015629, 438738945, 639287550, 1073814054, 325068314, 320015629, 2148732173, 219353869,
- 1293095693, 319622419, 319622419, 768, 3221348607, 251699201, 654318336, 286326784, 556996116, 288699954, 555951668, 335611426, 639771398, 859190325, 572986930, 909391142, 353776179, 438699540,
- 639254529, 3237878310, 1610688026, 319622419, 319622419, 320015840, 320015629, 3237896193, 438707738, 639254529, 233242150, 218960659, 328405779, 320015629, 1248525, 4279238659, 28312041, 721047,
- 2424855, 118751488, 891692806, 389429044, 118755606, 891692806, 389429044, 572602134, 909391142, 372384051, 17175573, 404232208, 404232216, 404232216, 404232216, 2701033496, 219353869, 319643649,
- 476053779, 235736334, 219028508, 2768113165, 218959388, 236723214, 1678642445, 319622419, 319622419, 512, 1073922303, 419479553, 9472, 572723475, 370414854, 857813811, 875902514, 287515430,
- 555951668, 570754594, 909391142, 353776179, 1080034836, 219353869, 1881145712, 219353869, 4279903808, 19274240, 320015648, 320015629, 2164162561, 319622419, 319622419, 639270913, 219413030,
- 219353869, 50336525, 3237937152, 3271639042, 536876032, 13056, 722800897, 891691522, 858994228, 926299153, 370619959, 589706247, 336922146, 909259542, 842216759, 856757526, 336926258, 572728070,
- 17904934, 1086332992, 219353869, 3020952608, 1074531599, 235538958, 235538958, 639262816, 320015648, 319635469, 1090428929, 218960672, 274989331, 70059034, 233834762, 218960659, 1082987283,
- 3237878310, 319622419, 1610681619, 268435712, 180479, 855687169, 589627392, 119940918, 926168327, 842217015, 353769239, 117835540, 336922119, 372388659, 117835527, 336922119, 118895155, 119743238,
- 640098822, 385955636, 185140993, 1749794315, 759185453, 51391750, 151416839, 117967648, 1359217431, 101320966, 1145847560, 118753081, 199755527, 3171617545, 1749772855, 755379501, 85992768,
- 117580290, 386339849, 35127810, 101779719, 117913897, 463879, 4278190082, 20972256, 4260000, 16777293, 235341346, 370414851, 909254963, 589706293, 926299939, 640099894, 117835558, 101134641,
- 926361127, 370618934, 370607894, 909259571, 589706293, 909584163, 656815157, 119940647, 875898402, 372388662, 17175573, 86842736, 743401789, 536943142, 219353869, 67446106, 319948046, 84284723,
- 185273418, 1444825612, 151852319, 1074596462, 219353869, 529554483, 55907096, 235544366, 235538958, 648020238, 1446381083, 639254127, 319622419, 352716069, 85070643, 1191511054, 185338891,
- 354360902, 158276409, 319622419, 588337757, 453386260, 241707550, 235801098, 920074, 4278190082, 16777920, 4128960, 318767179, 352723473, 556996116, 875902514, 859120422, 353703474, 842208788,
- 872693046, 572925735, 387188231, 370414871, 101979415, 891691555, 589706293, 640955683, 102900515, 858993687, 336926002, 891429667, 320015648, 220201229, 135074579, 506074897, 1293101598,
- 117903879, 354099207, 235538958, 638067764, 639279130, 276828224, 17858576, 327220864, 320015629, 2417167629, 505418007, 2552113706, 453842976, 117918995, 537334279, 86185536, 235801242, 874782730,
- 640031424, 1611665450, 50335760, 3774808064, 2684436482, 2432728320, 42496, 389165331, 926291479, 656877110, 102900518, 117835527, 335748372, 858986006, 926365234, 370546483, 909259571, 872627510,
- 656877109, 572728870, 101058311, 924194327, 842217015, 640030487, 117842467, 101123590, 102893318, 54076209, 823596592, 587662887, 822552358, 70858294, 640102435, 640034598, 589702695, 923207202,
- 842073910, 859190839, 840373810, 101058327, 639771427, 338764085, 572728070, 908535590, 909522742, 387330611, 74913558, 319364869, 151520259, 437063199, 53216807, 523443713, 37825836, 33629697,
- 522988865, 50404915, 438765100, 153030157, 318964744, 67444489, 254149652, 722999081, 84740111, 16843778, 83951873, 671418630, 84281605, 16908545, 218432004, 405475080, 638527767, 100803332,
- 286400781, 84086049, 320602371, 18617388, 739515584, 50404371, 218235906, 554832161, 17105932, 67895920, 319359240, 537201923, 185318424, 688325379, 506666768, 370552125, 857619757, 120131615,
- 185271043, 85989564, 152240909, 201590793, 77665026, 50596104, 16843269, 167969025, 134743309, 50990341, 16843009, 67306754, 2701395977, 67302675, 33818375, 471470894, 438047764, 16854547,
- 101057537, 66052, 4278190082, 29360608, 1245347, 318767137, 101058327, 924194327, 875902501, 103163175, 18220551, 352723489, 556996116, 875902514, 4143330342, 84216588, 1073810457, 3237876756,
- 84220172, 4269277451, 320015744, 226492685, 1644237587, 419783266, 84610060, 370542720, 184909832, 4263054348, 218960825, 218960659, 196627, 46202627, 12583296, 3342380, 318767176, 858986004,
- 640099093, 102900515, 387323671, 387388951, 839006998, 875902262, 589506086, 909259573, 589706293, 17179169, 372388661, 823596309, 117908006, 572596998, 370414854, 926032179, 2150905399,
- 3500150035, 470813222, 386009607, 143200004, 538134533, 319660096, 539773227, 320015776, 226557453, 536871187, 175585320, 318966298, 233373211, 17634067, 69612824, 228589833, 221462547, 274466828,
- 117651206, 219355743, 726215744, 218960704, 3556643603, 539506816, 67701097, 218960659, 168043795, 196634, 35651584, 6291840, 2752541, 889192504, 370545685, 926364211, 842208791, 892679734,
- 589702708, 654772002, 102900518, 101123334, 891691555, 859190325, 823596850, 842217015, 336925974, 656548614, 1009271335, 726157355, 658647100, 1009271335, 726157355, 658647100, 407376641,
- 808460578, 2719490593, 555882568, 572600368, 673107736, 1210787650, 1109863240, 1109925416, 1229531687, 927082282, 556800072, 405807390, 806897736, 790765089, 131096, 48103168, 10486080, 4128819,
- 103884032, 101979399, 891691555, 572720693, 101979431, 891691555, 891692597, 859190836, 370546482, 372388659, 336925974, 656868871, 572728070, 102905606, 857084949, 875902514, 270729510, 168431123,
- 403244814, 168431128, 875899662, 758527319, 941306392, 186858019, 123012875, 840644615, 235801221, 235801098, 856099388, 168693258, 772145449, 168693258, 894966082, 473192245, 975377934, 51179555,
- 24775172, 168734230, 168693258, 33558026, 3774808064, 2734800897, 553652992, 117506048, 118887959, 623314438, 926168358, 387331621, 553715222, 336926258, 572596998, 909391142, 4143352833, 84216588,
- 3237874713, 1073812500, 84220172, 25755147, 320015744, 226557453, 1644237587, 419783266, 84610060, 370542720, 184909832, 4263054348, 218960825, 218960659, 327699, 33554432, 8388928, 4259867,
- 6094927, 318767211, 353776161, 101127189, 370611221, 891360533, 892745524, 891692852, 20329525, 587600917, 590624035, 588584226, 572732469, 891491605, 354558772, 875897621, 353706531, 891691555,
- 640956213, 352723491, 857084949, 926234162, 572728884, 336925958, 909259542, 640956213, 352723491, 857084949, 1077229106, 639287297, 169219594, 369803517, 36047382, 806163226, 274731024, 269508624,
- 806359136, 331354893, 320015629, 2148732173, 319622419, 319622419, 218960768, 218960659, 645923091, 118097690, 236591630, 1195837959, 437126922, 168234522, 4263909895, 319635680, 537923616,
- 537923616, 537923616, 537923616, 3225423123, 219353869, 320015680, 319635469, 222301459, 1074598675, 219353869, 320015680, 4278321165, 46137343, 12648833, 6094904, 389092096, 859190325, 588584498,
- 856954146, 572724531, 858985493, 119677717, 387265303, 872561974, 372388662, 118756629, 118887959, 19334662, 909583910, 389087542, 857016070, 336926258, 570567430, 909391142, 775238451, 875902210,
- 336926519, 842208790, 674806055, 273692712, 273698832, 122703888, 305734405, 168431118, 144644110, 335939074, 145816840, 335939074, 455821057, 235548702, 1212680718, 168693258, 675621680,
- 975384321, 3137410083, 942159505, 269494328, 537923616, 237837061, 403709724, 168693258, 2083074088, 134747142, 3489728002, 134747142, 579206658, 237110286, 235801098, 571345418, 759837189,
- 620954408, 591012617, 1536, 1073930495, 469803009, 754984960, 922759680, 15360, 909390097, 926291479, 389166646, 286594582, 640091668, 101058310, 640034594, 909255989, 589706293, 336922146,
- 857023254, 590816820, 87437845, 857015842, 857084931, 991043381, 1462516856, 235744087, 2017137183, 1465330492, 17698092, 791617824, 791617825, 640041151, 19274304, 1076238976, 18490944, 85266768,
- 185602832, 386207761, 315358734, 336659733, 269552400, 1175328517, 942155832, 942155832, 3492158016, 646325824, 437256474, 117456934, 3774808064, 2684436482, 553655296, 721430016, 1006645248,
- 22272, 909390097, 926291479, 389166646, 286594582, 640091668, 101058310, 640034594, 640956213, 842339619, 86193462, 102905139, 337851703, 640943894, 352723491, 842208788, 909387574, 372388659,
- 842208533, 101979414, 639762987, 859190325, 522597683, 1014512402, 727144236, 304025101, 725383227, 221009751, 438730766, 20981274, 639254656, 1713782848, 942155832, 942155832, 268962948,
- 134482952, 403180556, 202115096, 17826824, 85266768, 185602832, 386207761, 315358734, 336659733, 269552400, 101586693, 3225429530, 1086331430, 440444454, 1110335526, 1110322754, 201875010,
- 205785100, 202115080, 806094856, 262148, 33554432, 8388928, 1638415, 3342371, 841028352, 336663830, 572596998, 873542950, 354555702, 842216212, 119747637, 841036564, 555955253, 102901026,
- 370414869, 909259571, 640955701, 3221307427, 438707738, 639254782, 269503014, 2953842848, 274727184, 278986256, 235542529, 173017614, 17436174, 4279903872, 640031232, 436207898, 269525030,
- 275779600, 245370896, 235548682, 170920462, 262158, 33554432, 8388928, 1638415, 8126499, 841028352, 336663830, 572596998, 873542950, 354555702, 842216212, 119747637, 842216212, 589509685,
- 875636514, 102900518, 117839125, 336922118, 370546454, 370546455, 336926231, 572720647, 639772454, 117843495, 370611718, 372322583, 336926486, 909259542, 926299445, 875902518, 640034598, 640037159,
- 875898407, 842217015, 907417366, 656815671, 20981542, 640031424, 440466970, 283780646, 269541392, 283119856, 1544609808, 201852940, 252381453, 319293967, 235471368, 134612485, 168823053, 134349826,
- 134415118, 100795400, 135006222, 168627208, 168758795, 168367112, 100992270, 268897545, 34473992, 185075714, 645923082, 436272922, 18490918, 2149980672, 269488144, 269488240, 202115208, 100863496,
- 252712454, 117769492, 67305730, 117769219, 67437827, 134414593, 51316488, 84017409, 201854721, 34473996, 269944327, 101061647, 84083207, 84148995, 33752324, 134744066, 17039886, 268435712,
- 2952912639, 838902273, 822149120, 117900838, 352723491, 858986004, 102900487, 857084949, 369493811, 926291479, 909259575, 589706293, 842217251, 640955702, 909583139, 192020774, 3561031706,
- 219353869, 225001641, 1057821459, 184878890, 1091049995, 320015828, 1765845261, 219353869, 84355647, 84384513, 219374091, 325063437, 1041435917, 117971467, 325192453, 1611861261, 319622419,
- 1706814, 4278190085, 16777920, 2228416, 3801134, 5374022, 640951552, 102900518, 370414854, 858927894, 875902518, 640034598, 875898407, 842216246, 875836726, 587600901, 875898402, 372388662,
- 891691573, 842217012, 101979414, 587600951, 875898402, 372388662, 891691543, 842217012, 101979414, 1950679042, 1165248327, 71791685, 136189703, 33948420, 1645485057, 2164140827, 319622419,
- 319622419, 219353869, 2467500813, 319622419, 319622419, 320015712, 320015629, 1165248448, 1195865157, 620840308, 169151256, 84413960, 572265477, 520159515, 219353869, 1393758989, 319622419,
- 319622419, 320015712, 320015629, 218960749, 218960659, 196627, 31522560, 10486208, 1572879, 318767148, 353776161, 587600913, 891691553, 389428241, 372388661, 587600917, 892744213, 589506100,
- 35456546, 842208788, 1077228854, 639254529, 3237878310, 2586191386, 320015664, 943204365, 387008552, 319622419, 438738945, 639287550, 1073814054, 1088431642, 319622419, 673724480, 2014385976,
- 320015680, 16785421, 3774808064, 2684436482, 13056, 370414865, 337064755, 370414869, 909259571, 640955701, 874980131, 355677493, 858986004, 892679730, 589506100, 353699362, 640955683, 102900515,
- 1348473884, 341840924, 1611930652, 337428560, 471602272, 471097364, 1611930816, 1879120916, 1797002336, 341836546, 1611930652, 40573972, 336596995, 1611930652, 337386516, 471076880, 262172,
- 28901120, 13107584, 3145766, 4456506, 103879424, 387191061, 389494550, 389494550, 389494550, 892745494, 640103441, 640091911, 640091911, 640091911, 355611415, 572728084, 873804853, 355611443,
- 572728084, 355611447, 572728084, 235811893, 671878670, 672141352, 672141352, 235801640, 671878670, 672141352, 672141352, 3225685032, 281022480, 269533200, 3222278336, 281022480, 252165633,
- 118436094, 572656134, 572657166, 572657166, 252118538, 118476801, 572656134, 572657166, 572657166, 269521930, 282071056, 276828176, 1052688, 4278190088, 25166528, 1573056, 2883618, 4325430,
- 5767246, 16777314, 353699362, 352723491, 857084945, 892744225, 589706257, 640955683, 355611395, 572728084, 858993717, 588518706, 875897379, 355611443, 572728084, 338113589, 640091655, 909587509,
- 571938327, 909583911, 370618931, 572851719, 336925958, 892547862, 857023265, 892679730, 1073817140, 511185677, 18754090, 707403312, 2098427934, 537923616, 270561296, 1880104976, 537923616,
- 336885776, 336860180, 395842580, 202050316, 185341719, 2046692363, 337386516, 269484560, 471602192, 219398145, 4263389760, 707403504, 504365342, 319635498, 269517054, 269488144, 269488144,
- 394268688, 202050316, 185341719, 339676171, 336860180, 1209275412, 341840924, 482394140, 471097364, 67109120, 4227974399, 738245633, 18284544, 656880694, 117908006, 101127703, 386344743, 654706454,
- 370607911, 656868871, 118888199, 656876038, 387188231, 2989626903, 235813889, 237506140, 202125363, 707791627, 185338928, 808071179, 185273356, 187705904, 68027403, 235811632, 774377052, 672021505,
- 235822094, 185282611, 707791884, 202050352, 808071180, 202115851, 187705904, 805635339, 237506099, 16780892, 3237937152, 3221291010, 16384, 892679189, 859190289, 353776179, 354558741, 355676948,
- 336929315, 588591923, 856954146, 856954163, 859125042, 842208277, 355677493, 892482324, 372388661, 101979413, 572727587, 1611930662, 273685524, 273698832, 273698832, 269504528, 1074794560,
- 338694160, 4262730780, 454254784, 1610744597, 471089153, 271586332, 269500432, 1343230016, 1347424272, 1347424272, 475009040, 471097364, 65561, 37748736, 4194688, 889192498, 859190325, 856954163,
- 859125042, 842208277, 355677493, 892482324, 336933685, 892678707, 856954163, 859125042, 353703474, 555943444, 337389090, 1074794560, 272633872, 269500432, 1074794560, 337386516, 471130365,
- 471113840, 1343230032, 1343230032, 1343230032, 1343230032, 1343230032, 346035228, 16784412, 3237937152, 3221291009, 11008, 370413841, 909259571, 572732725, 858993717, 891429685, 892547892,
- 875897379, 590689075, 859059490, 640955699, 102900515, 346035228, 269504540, 269504592, 269504592, 269504592, 2685672528, 2415991828, 471097598, 271586332, 269500432, 1074794560, 338694160,
- 117447708, 3237937152, 3321987074, 687873280, 1090532608, 1493191936, 26368, 842209025, 336663830, 891495174, 572728884, 588584198, 288695842, 858994228, 570897975, 856954133, 892678707, 352658228,
- 842216212, 590624053, 570761763, 856954133, 892678707, 352658228, 842216212, 590624053, 337977891, 909579799, 640103477, 840369671, 842208533, 589501461, 875902242, 1988645377, 337386516,
- 437921488, 471126054, 2289439772, 269541394, 17829920, 270536816, 4262469648, 537923696, 1879117840, 269492240, 4177399840, 741092396, 741092396, 269488216, 17834000, 337402811, 471122174,
- 640031328, 337403930, 471089153, 281414491, 1074794560, 272633872, 2148548624, 269500432, 1074794560, 272633872, 437859216, 858986778, 421141017, 269488131, 270536720, 512, 134398207, 302041089,
- 8704, 118888193, 589497863, 640099847, 875902759, 20330295, 389166641, 117904406, 656876038, 20395046, 219097297, 906757968, 151586390, 1745442314, 397934097, 370546496, 169478768, 17369408,
- 286206137, 173345128, 1443236104, 1342639158, 383778317, 390076182, 1074334064, 662026, 4278190084, 25166528, 1376448, 3407902, 16777277, 352460338, 587337236, 640099874, 808788774, 872743486,
- 355676982, 321266211, 822226466, 926298677, 842217014, 336921118, 874840590, 355676982, 19276323, 1145971872, 993666602, 355410965, 522465045, 4177409842, 538974758, 413148698, 606024247,
- 789910831, 976950564, 1313090086, 438746366, 639246368, 571588609, 639508015, 202639380, 176165900, 442501644, 4263936038, 168561274, 202118272, 638846996, 573513246, 639262737, 50341504,
- 3237937152, 3221291010, 905980416, 16896, 823406629, 587600917, 590624035, 588584226, 572732469, 572724501, 808793382, 640037172, 909521973, 370553395, 621155349, 924194580, 657732918, 621152038,
- 386271010, 926036758, 19277622, 806624416, 272633872, 471085072, 1950692396, 1165248327, 546635316, 538976288, 18882592, 319956224, 623186451, 303239954, 339738929, 269496348, 269496368,
- 1075059760, 895164161, 1010591294, 1530216038, 319956336, 623186451, 303239954, 538976283, 538976288, 393248, 46202624, 12583168, 1114125, 3538980, 5374026, 103879424, 370414854, 909259542,
- 388441911, 388183347, 892745239, 589702708, 386336290, 353710643, 570893076, 874915622, 859190839, 370611762, 101058324, 336933379, 372388659, 572724245, 589509685, 875898402, 891429639, 858993717,
- 873664868, 958346583, 2590006295, 809521971, 1463030544, 389619509, 269517692, 594953616, 1982013986, 594953541, 1982013986, 537923637, 269491220, 471080976, 269514266, 388956438, 1463099193,
- 1544622900, 1075855456, 523835183, 322197301, 1074822416, 994426896, 993757755, 993740101, 1161509770, 269524993, 269489180, 269753360, 272634080, 234881536, 855818495, 620806145, 16896, 102117633,
- 587597574, 103228962, 639771398, 587597351, 103228962, 656548614, 926351918, 841036598, 909186839, 336926007, 572596998, 369245478, 857092375, 555038514, 842208821, 254018103, 119218694, 203559941,
- 320086284, 571214882, 186782739, 85205516, 86121223, 268974606, 135291905, 637994250, 448855578, 134677798, 17896200, 135401792, 391643401, 16984117, 269290768, 269290768, 269290768, 891749377,
- 218979095, 2197881330, 640031296, 25378842, 2231697665, 66949, 4278190083, 25166528, 1179840, 2818082, 573641472, 926168358, 557004343, 370612018, 587600917, 857027333, 353710901, 589497876,
- 892675618, 336671525, 639771398, 370091317, 437144582, 236620801, 253101644, 3225478653, 3759414336, 3221298196, 218960704, 369099027, 1913195279, 158471445, 538316555, 1352704160, 337386516,
- 16752720, 219353869, 768, 131072, 218136577, 687872768, 336658432, 841036566, 640955702, 102900003, 857084951, 892744225, 555951668, 872744482, 572597030, 370414854, 909254963, 2147552531,
- 219353869, 319652094, 17634112, 320015744, 226557453, 327155987, 226557453, 17634067, 18025856, 320015712, 320015629, 320015789, 320015629, 320015789, 320015629, 1536, 180479, 285261825,
- 1795188480, 1946185728, 30976, 387322933, 909586966, 640955702, 119678503, 824509958, 117904406, 389429015, 386336534, 370619959, 370607879, 656868871, 118888199, 120006406, 101127703, 101132071,
- 926361127, 570820391, 926361127, 654706471, 657930022, 842413862, 657921815, 842413862, 657921815, 909587494, 909580055, 657921799, 924266775, 924268327, 657532711, 994383623, 993757755, 993740101,
- 1161509770, 67385601, 188296482, 940247819, 185279021, 572656652, 185273356, 188230946, 957025035, 185279021, 572656396, 202115851, 87567649, 185271565, 186789433, 571214859, 67898402, 773981198,
- 84609849, 758646029, 184878369, 186786315, 757935518, 757935383, 757935383, 757935383, 594953664, 1982013986, 594953541, 1982013986, 68027515, 188230946, 957025035, 185279021, 572656396, 202115851,
- 205008161, 957025035, 185279022, 572656652, 185273356, 87633442, 940313349, 202121517, 572656395, 67374091, 188296482, 939853067, 235151917, 571214852, 768347170, 762391853, 756493613, 756493613,
- 50343213, 3774808064, 2684420098, 838862592, 19968, 858993683, 588584242, 572731683, 352716551, 875901717, 372388662, 892540181, 842217012, 857019670, 656880693, 891495206, 589506100, 51709474,
- 556996116, 892679730, 101979427, 891691555, 336929589, 639771398, 2955097397, 2684915720, 236198960, 327159348, 2148732173, 319622419, 238292608, 388045844, 2149652368, 2147555878, 327165466,
- 2148732173, 319622419, 141033856, 873342984, 273421326, 219353869, 319623184, 1276120339, 238292500, 555816744, 448331287, 1343890982, 320015632, 219156493, 269292307, 4294902016, 2164441343,
- 738246657, 588447744, 101123874, 387384839, 926357014, 857084949, 892744243, 907417397, 657864503, 640100134, 119677731, 572720646, 3559270182, 2115642125, 151060747, 169478456, 3222939187,
- 171189786, 154667034, 2131362049, 202187546, 540150276, 84488736, 1763098625, 168693001, 134351424, 639302187, 737810982, 1074397704, 151850506, 487396969, 220014118, 768, 1124187903, 184600321,
- 1308638720, 336789504, 909579799, 640103477, 587662855, 35587591, 909579798, 640100150, 389490471, 370611990, 641087286, 640025135, 117908003, 101123846, 907417366, 926299959, 120729655, 335939377,
- 926029335, 926365239, 2686920231, 404232216, 404232216, 152109345, 51791640, 218959127, 134420227, 118035506, 420223760, 201917958, 940379925, 136258337, 84021812, 403442956, 436798212, 1010369032,
- 436865289, 67583242, 33892366, 236752897, 470682893, 218959388, 574665486, 223890969, 386073357, 151804941, 269959478, 151391752, 102304780, 622798090, 907477774, 68684808, 135072516, 3322153755,
- 169478715, 121506057, 86844425, 131075, 48299776, 10486016, 2555931, 841028352, 101979414, 354558243, 841036564, 336925974, 572596998, 873542950, 102892854, 857084949, 875902514, 2147565606,
- 219353869, 269521150, 639266817, 2164136486, 19277338, 320015738, 320015629, 219389953, 269488909, 450894374, 18490918, 4029028928, 319622419, 319622419, 1024, 180479, 285261825, 989865216, 21248,
- 387322933, 909586966, 640955702, 119678503, 100992518, 589702695, 101123618, 909583911, 372388662, 824645143, 875898402, 925247287, 370612022, 656868871, 101979412, 101987127, 891691555, 101135668,
- 925247270, 387331639, 369559318, 2319137605, 1162165051, 998914875, 1392592187, 503909132, 152966421, 185338891, 505293324, 2936736810, 520753933, 251987215, 84217696, 2987526927, 235737857,
- 201722898, 1611597058, 84020230, 3221822991, 572749381, 1165370146, 572749381, 3514180386, 285871115, 185338385, 403508235, 1896615192, 168627475, 252642570, 251994117, 33752335, 538119426,
- 219353869, 33817091, 84870662, 101057056, 168428815, 512, 188671, 218144769, 10240, 372384019, 587600917, 891691553, 286471732, 372379937, 721818645, 640955650, 352723491, 572728085, 909391142,
- 230687008, 4262269715, 320015680, 230686989, 1074598675, 673724480, 222314552, 2684424979, 319622419, 319622419, 536969470, 219406590, 679482125, 2150119480, 319622419, 2304, 3221340415, 402702337,
- 788537600, 973091840, 1358973952, 1677743616, 286326784, 556996116, 892744243, 891495988, 288699954, 589506100, 319169057, 557004340, 639770901, 926298935, 371406646, 370611735, 909586995,
- 654713655, 857151025, 101979942, 656541191, 875898406, 842413878, 118887959, 656807702, 104281653, 102971143, 856098311, 656811814, 941761318, 538968360, 219353869, 219353869, 685833760, 219365432,
- 16711681, 28775181, 50988294, 84542015, 50529287, 520627503, 51055363, 573048607, 507780638, 505553438, 505299998, 638050082, 184746763, 22546469, 50923014, 84542015, 50529287, 3237896193,
- 219363368, 322966285, 222298381, 2566797331, 322966285, 386729617, 219685154, 386794502, 495461931, 574303013, 286331196, 572668945, 286331196, 724712465, 539303191, 722934822, 386729548,
- 219685154, 67109894, 3221223935, 3338766081, 1409304576, 2248174848, 823328768, 656606727, 101123878, 386270983, 117904407, 370611974, 386270997, 387388951, 842479382, 924194583, 389232183,
- 909588246, 657864503, 926364711, 640100150, 657864501, 656877095, 570885926, 388376359, 654706452, 926168358, 18224950, 370607665, 370620215, 926365239, 807872294, 637929265, 590620455, 387330327,
- 389494550, 657864470, 118825511, 656868870, 101134640, 152219143, 169219339, 336200714, 100794643, 202116108, 318833158, 168036884, 185931274, 303174153, 369821970, 84544021, 18092809, 202114562,
- 33950732, 169087745, 369756676, 302582549, 673730578, 673720360, 4059965480, 151389443, 151331128, 136643594, 320213512, 17369378, 151651533, 154673413, 721618182, 571017473, 135403027, 213582088,
- 318833158, 168102164, 185931274, 303174153, 353044754, 84544022, 18092809, 202114562, 33950732, 169022465, 369756421, 302582549, 152179218, 169154059, 336135434, 100794643, 784796684, 387389207,
- 387395118, 3640530711, 17237769, 17314313, 56166657, 16911365, 18026772, 16845219, 17379848, 1728579591, 336663297, 84673025, 131075, 33554432, 8388928, 3276818, 336658688, 572596998, 891692839,
- 909588276, 372384051, 387188229, 335939351, 926029335, 840308535, 657733175, 875968295, 119678503, 572925703, 438714370, 320523774, 2533951895, 855710227, 3489539610, 791611143, 336004871,
- 120532743, 117901076, 117911343, 788993031, 18089775, 436272960, 177607462, 2517241101, 122234387, 791611156, 117904391, 120532743, 118753031, 336015151, 788989703, 67110703, 3774808064,
- 2684452866, 1543504640, 1677746176, 855703552, 824648501, 353776179, 909521685, 353776179, 572720660, 371402534, 842209046, 336925974, 572728070, 875902246, 640889654, 587605798, 103227939,
- 842204934, 336925974, 572728070, 875902246, 909325110, 102971190, 639771398, 859190325, 857151026, 53883957, 87372565, 19084595, 137375784, 1981551680, 437460744, 320480806, 759367711, 335872824,
- 1075059740, 337386516, 742065155, 440408335, 70986766, 471602179, 471089172, 67376156, 138620216, 639243039, 521345574, 3021764104, 812646704, 808976688, 68426808, 438703120, 269755930, 473456158,
- 471089172, 339743772, 324022812, 1343427861, 1075059762, 337386516, 941364288, 336600670, 639244838, 335810580, 816381468, 3158064, 4278190082, 29360576, 852160, 922746953, 336933685, 387323670,
- 909588003, 842086198, 640955702, 102892331, 857084949, 101127189, 370414854, 857085463, 926298675, 875902518, 370620199, 875968306, 572916271, 387188231, 656803607, 1084241190, 270143509,
- 270143710, 319651861, 2685406483, 320015632, 807929869, 403115793, 403564557, 454102791, 336004907, 403113735, 118753048, 654771975, 4027060494, 605458576, 454758666, 2787379729, 319622419,
- 319622419, 436537744, 907948885, 185273110, 506861067, 120270389, 336004871, 119019527, 118753031, 185476871, 50333957, 3237937152, 3221323777, 922756096, 16128, 370618643, 909588274, 372388659,
- 555942685, 872561955, 842216246, 840308503, 859191095, 553857587, 587600917, 101979427, 891691555, 639771445, 354555701, 892482324, 34972212, 34931469, 471099910, 177536522, 118035484, 218240258,
- 117576963, 27264531, 1075455616, 639244838, 3223722560, 17829904, 101070010, 337380916, 168433328, 471117846, 101069830, 3774744116, 1076238880, 438707738, 1880761920, 269488144, 1024, 3221340415,
- 604028929, 1073755136, 19456, 101065235, 336663829, 336933654, 842216214, 859125046, 857084949, 892744243, 892744245, 640955665, 909379366, 372384051, 101979413, 639770915, 639768373, 859190325,
- 336926258, 639770886, 859190325, 336926258, 1715396614, 319623996, 319627277, 537727936, 319623949, 333342268, 218104077, 4279046931, 269683968, 219353869, 18027277, 320015635, 320015629,
- 622182401, 3237875734, 220205837, 537727763, 320015648, 219357197, 370163713, 226497829, 2148340499, 219353869, 218960784, 218960659, 218960659, 218960659, 65555, 29425423, 12583409, 16777307,
- 101130801, 101058310, 656811543, 640099878, 370607623, 387323670, 101123590, 370611221, 370546454, 386271031, 355940118, 842208788, 389362998, 657864470, 926291495, 909588022, 640103477, 926295846,
- 909588022, 101131815, 117835526, 640099894, 19277606, 201656320, 100993564, 152176897, 135609630, 67175942, 286200341, 134947605, 371461128, 135340303, 168298499, 168431162, 134887950, 285737736,
- 605425441, 185075724, 252777508, 17110034, 352847366, 269753917, 168101377, 17107996, 957482944, 355144738, 285608711, 100795413, 1008011271, 85268767, 151324174, 235340810, 33752069, 117836321,
- 172432645, 1191841294, 117835037, 50471178, 118424580, 84478468, 352652806, 356261657, 33949448, 202446084, 338302476, 118634786, 512, 3221348607, 318808065, 9984, 101134593, 640100130, 842413876,
- 909580055, 336992050, 100741399, 640100130, 842413876, 909580055, 336992050, 178280193, 156240410, 169478665, 436898105, 4283894026, 169478656, 168364416, 3915975194, 151656970, 161507585,
- 436883465, 973670666, 168364426, 16747034, 176163081, 151587354, 151644778, 33561098, 3238001919, 3221307394, 922753536, 824508416, 369567522, 909521459, 640037941, 117842467, 859190835, 336926258,
- 386278662, 572724503, 370414854, 909247035, 589706293, 909587747, 555951655, 363856162, 690103059, 656884008, 1244604481, 738997519, 943204379, 184953598, 235552945, 1482164750, 168693258,
- 101429568, 2432569350, 604622864, 675358485, 908542248, 941233706, 1631070248, 1991314191, 235538958, 235538958, 252424566, 131087, 33554432, 8388864, 2687003, 858854144, 353776179, 589497876,
- 352460309, 909521953, 572732727, 909391142, 372384003, 587600917, 891691553, 685258292, 235801128, 1530400778, 893451829, 168835163, 28708366, 235801296, 170982922, 2147552782, 235538958,
- 1631454753, 1046559290, 168698118, 2969439754, 235538958, 235538958, 201327616, 4093758719, 486585345, 889202944, 16640, 387323667, 387388951, 101123862, 654706439, 656877095, 640100134, 926299959,
- 570897975, 370414854, 892744243, 336012852, 909259542, 589706293, 574031394, 370414854, 892744243, 1408706100, 423368994, 252055046, 1243549476, 575873566, 102317081, 604964366, 508174095,
- 320015621, 320015629, 218960717, 218960659, 319676435, 319622419, 212795667, 406525701, 522342946, 672145228, 67896592, 572013336, 1277108563, 271061023, 218960772, 218960659, 319668243, 319622419,
- 219362067, 219353869, 67113741, 3439266816, 3020026881, 822093056, 1224752384, 587268096, 370611734, 387323415, 372315926, 117835527, 656868871, 640100134, 925247271, 926365239, 372315958,
- 352723463, 842208788, 640955702, 857084935, 875902514, 102900518, 352723511, 842208788, 640955702, 117506561, 51128635, 153565449, 604964353, 508174095, 421679906, 235280700, 254021382, 572410399,
- 319631369, 319622419, 219368723, 219353869, 232788749, 218960659, 2751533843, 33962793, 104146445, 522323970, 672145228, 67896592, 572013336, 1277108563, 271061023, 327024901, 320015629,
- 3222473997, 219353869, 856888077, 319622419, 319622419, 512, 180479, 369147905, 11520, 355668243, 891691555, 639771409, 859190325, 909391155, 18231859, 859120401, 286594610, 353776179, 589497876,
- 587600917, 3766494754, 539368160, 219353869, 218960672, 3758096659, 539368160, 219353869, 218960672, 4271898899, 438714528, 219348993, 220205837, 872289043, 641753089, 318832410, 538119437,
- 1250061, 9, 25166336, 983168, 2687007, 3866675, 4915267, 5963859, 841028352, 336663830, 572596998, 873542950, 102897462, 370414869, 909259571, 640955701, 856950051, 875901473, 86122787, 842216212,
- 589509685, 354559266, 892482324, 856954676, 590624050, 354562850, 892482324, 856954676, 590624050, 354562850, 892482324, 147508, 438707738, 639238398, 319633958, 232787219, 4279046931, 69632,
- 16715792, 272630032, 2685407392, 282131984, 270536720, 1343229968, 537923600, 269488144, 269488208, 438730753, 639238399, 72230, 322971162, 319635469, 222301459, 269545491, 269488144, 269500432,
- 269488144, 269488144, 269488144, 269488144, 67112976, 3237937152, 3221291010, 486543616, 1358968832, 570753024, 874915622, 859190839, 370611762, 101058324, 101130791, 842208791, 640103991,
- 386281767, 386270999, 926364182, 909579799, 909584167, 117909031, 388113959, 387384881, 370607623, 370620215, 656881207, 640103991, 640091911, 1984233473, 589439523, 1984251254, 589439523,
- 304432502, 621941523, 320016933, 202162194, 202122276, 621022724, 202050341, 203695116, 621480716, 3155035173, 606342156, 185273356, 185279781, 606342156, 185273356, 1074472229, 2319137605,
- 1162165051, 998914875, 551568699, 538976288, 2602573856, 623184651, 84216587, 202122276, 623184651, 202115851, 84223012, 623184651, 202115851, 202122276, 623184651, 202115851, 795684, 4278190083,
- 16777918, 3604672, 5308485, 640942336, 352723491, 637998868, 119940647, 370607622, 352716567, 370611221, 926299959, 842208823, 641087286, 117843495, 572720646, 825308967, 657929751, 370610998,
- 924194583, 875902262, 654714663, 875898402, 372388662, 17175573, 673724512, 155584824, 186255369, 268960522, 134691860, 204998663, 875640840, 136869188, 453642755, 895164168, 876880163, 154477875,
- 201861141, 134678584, 2770938886, 219353869, 18027277, 943204448, 2014516520, 50989578, 169543688, 208081172, 84489997, 119211012, 991060492, 135989809, 638190344, 1500842798, 324741134, 205974526,
- 67377927, 221710597, 4146219788, 319622419, 319622419, 512, 33743359, 889233665, 22016, 369570049, 336925974, 875890438, 102900518, 117839125, 589706293, 353699362, 875898662, 102900518, 640029973,
- 909391157, 389165878, 387331639, 822543894, 119677734, 336922118, 370546454, 926298675, 875902518, 656811814, 656803335, 20395558, 707085557, 168698151, 1026756106, 235538958, 168702781, 656477706,
- 1078424645, 336095538, 3406038533, 996744215, 537792285, 842093597, 236985683, 386997519, 85198959, 17368070, 722283892, 689414175, 235562767, 242682382, 235562754, 40307214, 235566862, 258411022,
- 681580329, 1141380913, 134743045, 386026260, 17307147, 252513813, 353242383, 185993217, 88671495, 336070660, 327685, 48299776, 10486080, 2228241, 3997740, 16777292, 352716322, 370545685, 909521459,
- 640955701, 338761510, 117835526, 875898407, 387331895, 101127702, 908534307, 372388662, 370618663, 117904405, 640034598, 926299189, 909195062, 370618931, 587600917, 875898402, 2186289153,
- 1350717006, 1313768016, 588554370, 302656800, 472259595, 498275363, 102702624, 555095585, 302718126, 589311242, 488838164, 538976093, 438698271, 2684429850, 3223861535, 522139944, 683681849,
- 125837113, 135073564, 354096139, 201796370, 55843855, 437916419, 353512319, 134943771, 119279373, 202316807, 100860687, 640031239, 16778778, 3237941248, 3238068482, 15616, 657859365, 101123878,
- 908470054, 54409014, 370619959, 117835271, 101123846, 858985493, 101127730, 117900807, 856954118, 118895155, 640091654, 570820391, 926164519, 117511937, 2768964361, 117574660, 589832193, 525819993,
- 17500944, 35001859, 151408904, 84478247, 84084486, 269026914, 856229643, 185409890, 118753099, 199755527, 2752187145, 453378821, 589845322, 51388207, 269159169, 121072421, 117577731, 168300297,
- 486671370, 319358722, 151462406, 122357508, 118753031, 1280, 2147598591, 285261825, 503321600, 1392519168, 856883200, 857084949, 101978419, 639770915, 909381941, 656611123, 856954146, 875901491,
- 354551587, 842216212, 119747637, 370620209, 926357015, 389165878, 858986007, 590624050, 589702947, 640091938, 117908003, 572728070, 858985493, 2688562738, 645926163, 436272922, 2161780262,
- 269529216, 1074794560, 272633872, 285870608, 84609795, 101057288, 168036611, 907022400, 253365252, 335940364, 68027924, 269486092, 18485256, 319652032, 639295742, 2147555878, 1082140186, 269488144,
- 269488192, 941751824, 167837962, 302318866, 152047625, 321325591, 269169171, 50336528, 3237937152, 3221323777, 335548672, 12288, 336933651, 288568086, 555943444, 288695842, 389232180, 875628323,
- 102900518, 640095509, 335939362, 840308503, 875968311, 119678503, 329269255, 438730765, 639238399, 2155928102, 168431144, 336011022, 1208420103, 1208423431, 336004871, 3221298951, 4262661504,
- 640031456, 444596506, 174620710, 1711934990, 117901087, 122160916, 336021511, 520554247, 768, 1073922303, 436256769, 872427776, 286326784, 556996116, 892679730, 891691555, 858994228, 639771445,
- 572732725, 858849542, 387188231, 926364182, 656880694, 101130790, 588715796, 638920501, 436207898, 235579430, 2158496270, 446698253, 1853882662, 117901095, 122685204, 336023559, 654771975,
- 2147582062, 639271166, 242227750, 2148403722, 645926163, 120051454, 117901076, 118753104, 117901136, 2686912276, 50364544, 3237937152, 3221291010, 805316352, 13056, 657659155, 909587494, 370612018,
- 101123860, 874915618, 354629431, 556996116, 288699954, 891691555, 102900533, 102900501, 857084949, 354886963, 120041088, 118753031, 1342637904, 117904391, 648947463, 436207898, 319651878,
- 1747327648, 168693258, 2155872616, 669024257, 117904391, 336023559, 117919751, 654775303, 640031344, 320864538, 4196827149, 235538958, 8421584, 4278190087, 25166272, 1114304, 1966100, 3670056,
- 4587580, 355668736, 858986004, 587600913, 891691553, 859190289, 572990231, 858985493, 590624050, 336929287, 892482355, 570893108, 336925958, 842216214, 875902262, 856105766, 571941653, 858985493,
- 590624050, 219390016, 4279903872, 640031232, 2961211610, 272633872, 269500432, 806359104, 219353869, 320015808, 3233857549, 1074794640, 3221295120, 4262661504, 640031456, 444596506, 272662566,
- 1074794512, 269488144, 1074598752, 219353869, 538119488, 269508672, 83890192, 3237937152, 3221323777, 335548672, 671096320, 32512, 336933651, 288568086, 555943444, 288695842, 389232180, 856958755,
- 875901491, 354558755, 842216212, 589509685, 573642530, 117839125, 336922118, 370546454, 370618647, 353769238, 587597588, 958866978, 640099842, 386270982, 825300758, 353834518, 892482324, 909588021,
- 640955702, 656811559, 640025145, 875898407, 842217015, 924194582, 656811830, 2688562229, 645926163, 436272922, 2161780262, 1074839680, 272633872, 269500432, 276828224, 235539213, 302516494,
- 235536649, 151521285, 168953871, 201720325, 34538754, 135268100, 168759312, 151915786, 168301576, 134677775, 268897802, 84152073, 17501456, 319652032, 639295742, 2147555878, 813704730, 1343229968,
- 1477447696, 100864272, 235803654, 117704210, 84082946, 151454979, 67437829, 100794625, 17108742, 17105665, 286265362, 352716291, 101846543, 50530053, 100926213, 50660616, 252642306, 285344517,
- 262160, 29425408, 12583296, 1310737, 5046340, 355668736, 858986004, 587600913, 891691553, 859190289, 570893079, 335682822, 909259542, 372454709, 101127959, 840308500, 370620215, 875968306,
- 909584167, 572925748, 908527367, 640955702, 891491619, 353776179, 2688550420, 645926163, 436272922, 2161780262, 201889920, 201852940, 1090584852, 100992545, 572655376, 84283654, 102768646,
- 101713413, 353446690, 875829539, 17566728, 319652032, 639295742, 2147555878, 1149249050, 1078986764, 135007240, 1006699052, 101778974, 538969350, 285607429, 102571270, 84280849, 503785503,
- 1344477459, 134745128, 262156, 46202624, 12583232, 4784198, 6291539, 858854144, 857084949, 101127475, 386270983, 589702947, 640091938, 117908003, 572728070, 858985493, 926365234, 370611735,
- 859191095, 370612018, 858927923, 909588274, 101979447, 639770915, 909381941, 86185779, 118756887, 909584135, 389482290, 117900807, 925247238, 2688562743, 1602227475, 51315980, 201591045, 185339674,
- 101979142, 135005198, 268963856, 285869082, 67832579, 101057289, 168036611, 67240256, 67386373, 16718374, 3659933210, 637632640, 487328782, 554442055, 2168947170, 154929414, 251856646, 2160066818,
- 1579946765, 238817549, 169281806, 840110887, 319819787, 171450639, 285868289, 152110598, 16846594, 640031251, 444596506, 235700262, 487334156, 3238796615, 109135745, 117640962, 154929414, 768,
- 2147598591, 285261825, 805311488, 856883200, 857084949, 101978419, 639770915, 909381941, 52631347, 370619697, 875968306, 572925735, 335939335, 926029335, 370414903, 1077293619, 2148340640,
- 16718374, 3659933210, 522748032, 117904391, 336021511, 117917703, 520557575, 235538958, 226541569, 450952723, 18490918, 2149980800, 526838014, 336004871, 117917703, 118753096, 1713309447, 921098,
- 4278321154, 32440770, 1573056, 318767148, 842413847, 336992023, 570820359, 874915623, 640104247, 842413876, 101134615, 909582599, 119940903, 336992007, 656541191, 355815767, 362222908, 1344060949,
- 488469788, 151605852, 1549474314, 1057030662, 2533754410, 842335750, 436865289, 1387725066, 2534741301, 3189062677, 477437213, 1364991056, 151656970, 134700213, 2533754410, 825558534, 151656970,
- 196617, 46202626, 12583232, 2883609, 318767165, 387188273, 335939351, 840308503, 875968311, 572925735, 640091911, 840308514, 657733175, 389429031, 117904919, 926365217, 892744193, 656811572,
- 235348518, 370414850, 1376323881, 1964842332, 3189526556, 362222869, 1362433340, 178657802, 151587354, 101070130, 705037975, 100844030, 441975132, 152572454, 151326725, 19272216, 169478839,
- 1344035921, 488469788, 356259262, 890574231, 166136146, 169478665, 101070129, 705037975, 4267443976, 219817653, 118434088, 673779463, 2497037, 4278190086, 16777926, 1769664, 4980782, 8650850,
- 922747032, 587600917, 892675618, 859190836, 370611762, 637929222, 589702695, 84280866, 353703473, 572720660, 875902246, 926295591, 824645174, 353769010, 101127189, 639771398, 892679735, 589702708,
- 654706466, 909588006, 117839367, 336925958, 572720647, 892745510, 926299189, 840373814, 336925974, 572720647, 892745510, 589706293, 353699362, 587597588, 909583906, 909391157, 118756631, 654706183,
- 926361126, 875902262, 372388662, 168431152, 1198802190, 119760186, 336070402, 793910534, 20471609, 168691147, 33820170, 269093386, 793784824, 151847173, 67243787, 287521315, 134943504, 1293552645,
- 386203910, 202507274, 319291918, 1880426002, 51132456, 34408978, 370548234, 268701726, 235081227, 103039032, 151654915, 537265160, 235538958, 235546816, 1193806350, 691029364, 117838856, 656476162,
- 436494136, 235546651, 354945550, 34605590, 795937539, 689516880, 286001194, 421864971, 69417507, 386469125, 121964803, 673253395, 288041753, 623053588, 389488153, 940769544, 977017128, 906629393,
- 504764726, 1025054238, 185732923, 672740916, 1662607416, 134811741, 168952580, 425415695, 921098, 16318210, 21234192, 2490480, 318767154, 117835285, 101131815, 101127959, 926357015, 370611734,
- 909259542, 926299703, 640034614, 589702695, 337053218, 639771398, 859190325, 229971506, 358222101, 772542993, 303107118, 352934421, 810425613, 488525360, 117902121, 505227531, 1311780942,
- 218960878, 218960659, 20119827, 889918986, 353505548, 303386704, 188025873, 622397974, 924326181, 336531220, 622336311, 319654693, 319622419, 393235, 46202624, 12583168, 1769489, 3342375, 4915263,
- 370423040, 926029335, 875902518, 572925734, 386270727, 842216244, 589501461, 656549666, 859191078, 118888242, 118765318, 891692806, 389429044, 370410774, 892744243, 572728884, 370415366, 892744243,
- 572728884, 993740038, 1161509770, 2319137605, 2957327163, 269516816, 705695872, 336925972, 353643050, 618533909, 606348324, 4263781412, 168431328, 168431118, 168738830, 168693258, 1170214410,
- 572662646, 1162180131, 572662646, 281376291, 610799632, 606348324, 1210328100, 353702954, 338307604, 705959189, 168693258, 168693258, 168693258, 921098, 4278190084, 16777920, 1114304, 2687005,
- 83886138, 640099874, 909522740, 387330611, 101127190, 102892294, 857084949, 875902514, 370415398, 892744243, 572728884, 909182726, 370618931, 640034614, 117842467, 71174, 572749381, 1165370146,
- 572749381, 2507547426, 219353869, 1913786894, 302910739, 319622674, 656876410, 68159779, 538981132, 268700723, 993740096, 1161509770, 2319137605, 21314363, 218960720, 218960659, 319627283,
- 319622419, 235846419, 453577476, 152773411, 4278321163, 46202874, 12583174, 2228253, 556864256, 118888242, 842208519, 101979414, 639762987, 859190325, 640103731, 823604791, 539047731, 152420353,
- 1087835912, 219353869, 319643744, 3611299091, 2718500879, 3674095782, 320126977, 330552848, 320015629, 3004370189, 336793814, 33570944, 3237937152, 3221291010, 1593855232, 907214848, 370553395,
- 119940887, 656868870, 386271014, 336926231, 352716551, 117904405, 639771398, 590624053, 891691555, 926364725, 389165878, 926357015, 657732918, 117909031, 656548614, 117909031, 640091654, 657732917,
- 387322887, 909586966, 640955702, 119678503, 632423942, 978464809, 101522188, 252252676, 117901580, 101976097, 169413894, 269683984, 270275616, 84609319, 185278469, 487395620, 117703942, 251987466,
- 68028428, 67372301, 993740220, 1161509770, 2319137605, 21314363, 1143476097, 201524524, 84084489, 117901572, 353044513, 117571845, 571544844, 806163213, 471079952, 102632468, 50596354, 236061705,
- 84086534, 117638916, 85002758, 100926721, 2936473642, 572749381, 1165370146, 572749381, 7742242, 4278190083, 16777920, 3866816, 5898312, 909195008, 858927926, 117904919, 387388422, 654706454,
- 117909031, 387323654, 858986007, 370612018, 118756629, 117900807, 637929222, 657732917, 875902246, 640100134, 338756903, 656811783, 926295591, 335877687, 840308502, 892745271, 640099892, 101058338,
- 1181488186, 184747269, 117968655, 134744334, 168498958, 33951750, 286204423, 68031531, 403183630, 436666887, 269488907, 423234832, 42795277, 268833053, 436996612, 1160838682, 998914875, 994395451,
- 993757755, 1379925829, 303109124, 269031433, 84675595, 50660359, 67571976, 68028436, 470291470, 437126158, 67574284, 304548878, 672270344, 285414925, 237967111, 285476621, 85396530, 1161179147,
- 572662646, 1162180131, 572662646, 100693539, 3237937152, 3221291010, 1140860672, 1627411968, 1996516608, 825688064, 909391142, 389165878, 117900807, 387384838, 101123862, 102900515, 102110999,
- 656876067, 117909030, 824518406, 654771718, 101123878, 640100134, 909588278, 859191095, 370612018, 624310071, 370611732, 909522738, 656815157, 101130790, 389420806, 118887959, 640100102, 909522743,
- 117904919, 640091654, 117904951, 925247238, 70530615, 590962488, 201658402, 134810641, 185141776, 201528588, 67502862, 135400206, 135792137, 17631504, 472319864, 51383809, 101063951, 604899590,
- 168165892, 34214162, 84872198, 994392574, 993757755, 993740101, 1161509770, 537920401, 67176198, 1611603984, 101449992, 34079503, 1846478348, 118491151, 268897806, 336828679, 188243769, 67308585,
- 353048579, 303042062, 185863187, 185733138, 152045572, 1025769731, 101318934, 235668737, 136121869, 167969300, 167972623, 721487107, 572749381, 1165370146, 572749381, 2708874018, 34079503,
- 68093452, 539230984, 67176198, 117841936, 132514562, 135208974, 236981767, 2816, 180479, 285261825, 486545152, 620765440, 754985216, 956314368, 1358972160, 570753024, 874915622, 859190839,
- 370611762, 101058324, 926298679, 641144099, 354624294, 354628899, 354628887, 857023271, 857023253, 572732711, 890701574, 857085475, 857084967, 875902514, 102900518, 352723511, 842208788, 640955702,
- 1984233473, 589439523, 1984251254, 589439523, 437394294, 53950211, 268964378, 272646208, 1077952576, 437389392, 53950211, 319820314, 303173133, 3222473998, 219353869, 1074926094, 2319137605,
- 1162165051, 998914875, 393233723, 288892945, 673720343, 1613244472, 942149672, 940644136, 3222737192, 219353869, 320017165, 319622419, 319622419, 1024, 180479, 285261825, 771760640, 14848,
- 656810501, 909587494, 372388662, 118756887, 825689606, 656548614, 370607654, 909259542, 656815671, 842208788, 640955702, 923148835, 336922146, 909259542, 19280949, 594953472, 1982013986, 594953541,
- 1982013986, 1179008575, 68028734, 859001107, 235147858, 235738109, 219025938, 319668243, 302910739, 994394130, 993757755, 993740101, 1161509770, 51581895, 942475277, 218639672, 320015718,
- 320015629, 218960659, 218960659, 262163, 46202624, 12583168, 2228241, 3801134, 639763712, 926164519, 842217014, 336992022, 923141639, 572720689, 386278951, 842208790, 641087286, 589706279,
- 336922146, 909259542, 892744215, 572728884, 370414854, 1984233473, 589439523, 1984251254, 589439523, 1178484598, 235486790, 860951300, 68309555, 219397390, 219353869, 226497293, 218960659,
- 1161827091, 998914875, 994395451, 993757755, 320063301, 755502339, 137181240, 639268365, 639244838, 438707750, 438707738, 67118618, 3237937152, 3221291010, 570429696, 2181059072, 570753024,
- 874915622, 859190839, 370611762, 101058324, 587608375, 103163682, 857085463, 909588018, 37300006, 892745494, 640034612, 117842467, 387192070, 37304086, 909455411, 926299703, 842217014, 370546454,
- 337057303, 858862385, 924189497, 657732918, 572728870, 352716550, 924194580, 808649273, 909588021, 909522742, 387330611, 370611734, 858854423, 1984233473, 589439523, 1984251254, 589439523,
- 1178484598, 235486790, 860951300, 68309555, 100905742, 336007429, 118754316, 50660881, 33685761, 235340549, 118359815, 33686787, 60817665, 118556165, 336333844, 100995335, 33620227, 117638402,
- 235341582, 33882887, 1073807618, 2319137605, 1162165051, 998914875, 331826491, 135070483, 758659117, 72420616, 453378561, 218958358, 102438410, 17039618, 84017921, 134743555, 33882886, 67174659,
- 453378561, 218958358, 102438410, 17039618, 84017921, 134743555, 33882886, 65795, 4278190085, 16777920, 1376448, 4194352, 10485872, 909508864, 640037941, 119678503, 805766662, 336922119, 657601302,
- 352716322, 857085460, 892745266, 587605812, 875898402, 926299958, 907224614, 101058326, 656810531, 370619942, 958870067, 892347138, 640034598, 589702695, 101123618, 117835526, 958607636, 640091650,
- 909587509, 372388662, 336926231, 824641031, 590426419, 656815408, 640099878, 102900518, 117835271, 823396102, 100808995, 875898407, 859190839, 370611762, 101127189, 20001063, 252973021, 134350612,
- 102107138, 337380609, 1950864902, 1198802245, 356873287, 790695437, 50397701, 157107742, 1376912398, 324088627, 1040780804, 23873094, 84017665, 118359811, 50793991, 16908805, 100991745, 202639121,
- 285676556, 2684552709, 33685761, 235340549, 118359815, 33686787, 84082945, 336007430, 118754316, 50726161, 419709441, 488507920, 167969545, 184684321, 2149323527, 1195865157, 1950696820, 87045447,
- 269033774, 319161094, 63438358, 942475277, 218639672, 23532291, 84017921, 134743555, 33882886, 67174659, 453378561, 218958358, 102438410, 17039618, 84017921, 134743555, 33882886, 67174659,
- 453378561, 218958358, 102438410, 262402, 4278190084, 16777920, 1114304, 3473442, 83886152, 640099874, 909522740, 387330611, 101127190, 103888646, 640098851, 370546438, 926298675, 824649270,
- 117900838, 117843495, 387388934, 909588246, 640751398, 101058342, 924194583, 657864247, 117909030, 1984233473, 589439523, 1984251254, 589439523, 1178484598, 235486790, 860951300, 68309555,
- 403555854, 219153412, 218301464, 84885774, 2366506001, 235739140, 85001230, 219037967, 219677699, 994394128, 993757755, 993740101, 1161509770, 51581895, 942475277, 218639672, 235799733, 235078928,
- 68685069, 1091503121, 236197901, 402916109, 68108557, 219677713, 84086285, 1024, 180479, 285261825, 855646720, 17408, 656810501, 909587494, 372388662, 118756887, 825689606, 656548614, 370607654,
- 909259542, 623261239, 336922150, 101127959, 924193813, 657733175, 119944247, 387188231, 892737047, 925312820, 1157628214, 572662646, 1162180131, 572662646, 1044346403, 155076166, 1360200718,
- 307376947, 4194176516, 604179462, 101450532, 2902984793, 140117260, 201677320, 52700163, 993740096, 1161509770, 2319137605, 3343203131, 218305299, 943205640, 2735540269, 84346371, 53160707,
- 50726661, 68289584, 67569446, 68289584, 101122864, 724239109, 4278583300, 45940732, 12845316, 4587547, 7209052, 9568384, 103874816, 101975814, 117835285, 842208774, 909521718, 926299703, 640103478,
- 640747298, 101123622, 907482630, 926299703, 101127734, 117835526, 926291478, 656815670, 101058310, 925238791, 909588022, 101069569, 387188231, 909586966, 909522742, 119944247, 824509958, 101123606,
- 908470022, 926299703, 909522742, 908472581, 372651831, 101058311, 657794599, 825696807, 370619958, 370611989, 117839383, 925238791, 151366401, 84082947, 84279553, 151060993, 353111065, 252644869,
- 1848720169, 623520362, 134618121, 336141071, 83952412, 822215171, 707422830, 102435365, 152768009, 33758484, 4261544964, 353108407, 252644869, 151326249, 17105923, 470353157, 303193857, 744563748,
- 470286601, 506534198, 3137213189, 1644561413, 503450888, 50662658, 2936289541, 50662658, 50608389, 1627784197, 16977161, 202638770, 218169857, 84215834, 50659585, 235211011, 554635049, 707070236,
- 829319722, 67371522, 337445634, 151919369, 621419270, 1852451370, 67240497, 486736388, 253430036, 59768326, 688784649, 84807439, 470617109, 17171721, 768345345, 304358497, 85132050, 823797774,
- 1543571769, 486673669, 1627983107, 50660358, 3288741892, 50660358, 17119236, 34407683, 151847709, 1024, 180479, 285261825, 1073750272, 24320, 387322933, 909586966, 640955702, 119678503, 100992518,
- 639771398, 389424679, 926036758, 824645174, 369237810, 117904919, 101127191, 101132071, 926361127, 909583911, 859177535, 35598897, 118888214, 118757127, 120006406, 891692806, 925247287, 906116918,
- 2319137605, 1162165051, 998914875, 2533442875, 859001362, 235148113, 1179008521, 4212001086, 638648837, 67174917, 67372827, 69345796, 117507076, 33621020, 34678277, 285345221, 16909606, 67574532,
- 572654596, 117703684, 33621019, 34678277, 594953664, 1982013986, 594953541, 1982013986, 943205776, 51185709, 218305299, 86181067, 67372289, 50669082, 320012803, 84083458, 84089637, 570753285,
- 86180869, 67372289, 50669082, 320012803, 84083458, 84089637, 570753285, 393221, 46202624, 12583296, 4390957, 7143517, 13369500, 640754944, 656811559, 640099878, 908470054, 773264919, 102900482,
- 926287622, 101127734, 117835526, 101123590, 857085447, 824522290, 101131830, 101058310, 387188231, 909579798, 84033079, 926291491, 640103478, 640034598, 639837735, 35526406, 370487319, 587597351,
- 640099874, 857085750, 372651826, 807612711, 640099893, 640034598, 117842467, 101123590, 590418951, 654705209, 926168358, 842217014, 353769238, 654706452, 959656241, 892347138, 640034598, 589702695,
- 101123618, 117835526, 958607636, 640091650, 909587509, 372388662, 336926231, 824641031, 101131522, 50464774, 67371269, 337445634, 1208552972, 1816150124, 202312008, 16981267, 67372037, 101058563,
- 1266294791, 1727953483, 100926977, 487524882, 235802118, 16911909, 17172999, 621674953, 101584398, 269029149, 67174918, 100794630, 1510082570, 859001362, 235148113, 1179008266, 3238922558,
- 33685761, 235340549, 118359815, 33686787, 84082945, 336007430, 118754316, 50726161, 33620384, 117638402, 235341582, 33882887, 50397442, 118556165, 336333844, 100995335, 100945155, 101060358,
- 437126926, 52237320, 1648231170, 1046624826, 469893635, 236587028, 252054288, 1057228294, 78925390, 50397446, 101319426, 219031566, 16911362, 1277304839, 235733516, 168234535, 16908803, 67502337,
- 119546379, 755630593, 137181240, 320013069, 22940931, 84017921, 134743555, 33882886, 67174659, 453378561, 218958358, 102438410, 17039618, 84017921, 134743555, 33882886, 67174659, 453378561,
- 218958358, 102438410, 262402, 4278190084, 16777920, 2293952, 3866671, 889192531, 859190836, 353769010, 117835284, 909456694, 119944759, 656548614, 370607654, 387192087, 574030382, 370414854,
- 892744243, 337061428, 909259542, 589706293, 823592482, 572720660, 875902246, 842216246, 926029335, 842216246, 1950684438, 1165248327, 255020845, 235147558, 1179008521, 68028989, 856630546,
- 229649743, 235737875, 326242834, 303173133, 269683982, 639244838, 318901008, 34865668, 184685316, 1950859280, 1198802245, 289956408, 456071960, 51185707, 218305299, 790309640, 1209079835,
- 219383906, 219353869, 220205837, 218960659, 452793107, 756688422, 152244235, 185602825, 1024, 180479, 587251713, 1157641216, 23808, 909521973, 370553395, 101061653, 892679687, 641087286, 572720647,
- 386278951, 336926486, 922889751, 118953748, 370414854, 875968311, 103163687, 335939365, 907417367, 656880693, 875902519, 338756390, 639771398, 909391157, 389165875, 909586966, 372388659,
- 1198802197, 759526471, 638530383, 151913489, 1028015678, 302255626, 1328746277, 604206125, 101450532, 1493698649, 117509126, 1510475866, 604179461, 1074529060, 639244838, 318901008, 34865668,
- 184685316, 1950859280, 1198802245, 289956408, 456071960, 51185707, 218305299, 790309640, 1209079835, 67414882, 84093739, 805504774, 788861444, 788727556, 805573125, 84281091, 69937923, 4261873412,
- 640031423, 269167898, 319359251, 83888912, 3237937152, 3221291010, 855647232, 1459633920, 25344, 891691799, 640099893, 857085750, 372651826, 352781831, 37619476, 640037941, 101065251, 370545685,
- 119678519, 925247238, 387331638, 386270998, 925247266, 389165878, 117835542, 589706289, 101130787, 589702946, 352723491, 857084949, 322254386, 336922146, 909259542, 2938516533, 304418305,
- 1040780804, 155076166, 621937678, 760165135, 1195865157, 1328366964, 220990791, 151784714, 254684687, 2198670345, 320016933, 304424210, 890376979, 318901008, 34865668, 184685316, 437921296,
- 235540518, 235538958, 454570766, 137042735, 320013069, 721947907, 404434715, 945965073, 1162179655, 1647855476, 303233096, 218761484, 336399636, 436800013, 538976288, 538976288, 319818627,
- 269682953, 639249675, 134289958, 235538958, 235538958, 1024, 180479, 285261825, 822092288, 15616, 656810501, 909587494, 372388662, 118756887, 825689606, 656548614, 370607654, 909259542, 656815671,
- 657864470, 117843494, 924194566, 572994102, 370414854, 892744243, 75316, 572749381, 1165370146, 572749381, 1064706850, 1044792894, 319032841, 1379087185, 437126162, 151784714, 254684687, 168627209,
- 230042637, 235737875, 1161826834, 998914875, 994395451, 993757755, 320063301, 755502339, 137181240, 151800845, 219417866, 168629261, 672271369, 319622419, 319622419, 1536, 3221299200, 251682817,
- 788537088, 1325416192, 24320, 101979411, 639771427, 909391157, 372388659, 101979413, 639771427, 909391157, 372388659, 859190327, 353776179, 587600917, 891691555, 101979415, 639771427, 909391157,
- 372388659, 859190327, 353776179, 587600917, 891691555, 101979415, 639771427, 909391157, 372388659, 806426496, 286725905, 387387696, 387002385, 288362775, 286728215, 387387696, 387002385, 806426496,
- 286725905, 538382640, 288362775, 806426391, 394270481, 387002385, 288362775, 808976663, 286725905, 387387696, 387002577, 288362775, 296687383, 806426391, 286725905, 387002512, 288362775, 296687383,
- 806426391, 286725905, 387002512, 288362775, 100669207, 3774808064, 2684436481, 520097536, 1056976640, 1593855744, 574029824, 336925958, 842216214, 875902262, 573776678, 336925958, 842216214,
- 875902262, 858202918, 892679730, 589506100, 353699362, 574035476, 336925958, 842216214, 875902262, 858202918, 892679730, 589506100, 353699362, 574035476, 336925958, 842216214, 875902262, 287843110,
- 806426391, 286725905, 387387792, 387002385, 821039383, 286725905, 387387696, 387387857, 387002385, 821039383, 286725905, 387387696, 387387857, 387002385, 392171799, 387002385, 288362775, 806426391,
- 286725905, 538382640, 288362775, 806426391, 394270481, 387002385, 288362775, 286728215, 387387696, 387002385, 806426496, 286725905, 1511728, 4278190083, 16777952, 2031776, 4128815, 372375808,
- 336925974, 909259542, 640955701, 102900518, 336925958, 909259542, 909391157, 336921398, 842216214, 875902262, 572728102, 572728582, 336925958, 842216214, 875902262, 956301606, 168704095,
- 1950682634, 1165248327, 235538958, 645357368, 319623194, 437259539, 270532902, 219353869, 640031248, 1597534209, 235563065, 1198000654, 1950696820, 235563079, 963119630, 4043192415, 321264192,
- 319651853, 219358758, 638782848, 639254554, 768, 180479, 755023873, 1291861248, 838926336, 353703446, 589497876, 572728102, 370414854, 926036787, 892744243, 640037941, 101065251, 370414869,
- 892744243, 909521973, 352723463, 857084949, 892744243, 589706293, 102900531, 370414869, 909259571, 640955701, 1597571073, 1846613816, 337648654, 538188828, 611192348, 1198802228, 239432775,
- 940444170, 639252319, 219159078, 3490517779, 320015632, 639242253, 948961574, 294664543, 337385495, 857218068, 1950847013, 1198802245, 235801128, 1597581322, 438739000, 321264176, 319647757,
- 225447187, 807020051, 50341402, 3237937152, 3221299202, 503317248, 11008, 389490469, 335939333, 840308503, 842217271, 892736311, 640100148, 84353571, 118822150, 353699377, 858986004, 657930034,
- 3612752641, 430439965, 171051530, 1209600538, 147459608, 302855948, 4026403598, 235370772, 118113546, 1451575071, 433855902, 839522826, 337185290, 235606273, 221646098, 403622408, 168268360,
- 118360581, 134235935, 3238000383, 3221291010, 805312768, 1140865536, 1476414976, 2113958400, 352387072, 370611988, 101979413, 891691555, 656880693, 875902246, 372388662, 909391105, 387396147,
- 842216214, 336925974, 572596998, 859125030, 354558772, 842208277, 354563893, 842208277, 389297461, 354558772, 842208277, 354563893, 842208277, 53753141, 353703474, 370611988, 101979413, 891691555,
- 656880693, 875902246, 656540982, 859191078, 118888242, 403702022, 168699920, 270011914, 168431144, 955317774, 1427775528, 447419665, 4263126566, 2149980800, 269488144, 269488208, 269488224,
- 269504528, 235550736, 237506584, 403573258, 4262340624, 319956450, 623186451, 303239954, 537241601, 908267286, 235801101, 371199242, 87433999, 4262333962, 942162126, 638402579, 639270938,
- 275782182, 269508624, 274731120, 269508624, 274731024, 1611690000, 274731024, 168706049, 253108229, 168637987, 218762766, 588191264, 235537718, 538976384, 538976288, 524320, 46202624, 12583168,
- 3145764, 4718652, 6291540, 7929964, 370413824, 102895923, 857084949, 909391155, 353776179, 909259541, 589706293, 892744209, 555951668, 873924130, 355611443, 589501461, 859256098, 336926002,
- 891429667, 873935925, 355611443, 589501461, 856110370, 336926002, 891429667, 873935925, 355611443, 589501461, 859256098, 336926002, 891429667, 587674677, 909583906, 372388662, 319165975, 320015629,
- 337424397, 229645332, 218960659, 4262269715, 1611861312, 269492240, 546312224, 270536720, 270536832, 4027588624, 537923616, 537952272, 270536720, 269492368, 2417496096, 134352138, 857874995,
- 17629704, 4262661536, 218960768, 471085075, 321917980, 18025741, 218960768, 274535187, 269492240, 270536752, 269492240, 270536720, 537931792, 270536720, 537923600, 271585296, 537923616, 168738832,
- 522791199, 83889674, 3237937152, 3221323778, 855644416, 1795184640, 30976, 387192065, 353703447, 572720660, 875902246, 891692839, 859190325, 890705458, 640100148, 909391157, 353776179, 387388437,
- 336925974, 639771398, 387330309, 587601431, 656810531, 640099878, 891430439, 875898403, 925905719, 909522742, 926299703, 656545590, 859186727, 37433904, 370612018, 656614150, 858994214, 353703474,
- 637994516, 717226279, 219357461, 353243917, 218960701, 355106835, 218960673, 1024790035, 319622419, 185575166, 50528871, 660679747, 202121748, 33751559, 84021264, 571214855, 490149652, 405200392,
- 50528870, 321913090, 40310566, 389219075, 2600665858, 269883153, 2684426020, 355089419, 218836513, 185406227, 1024790036, 319621974, 1007414547, 773920042, 320015627, 236194573, 190201109,
- 1527976717, 41618696, 84611590, 33817866, 285606145, 50464273, 84542468, 17042439, 41622939, 41622790, 100833286, 273682711, 469827863, 1024, 180479, 285261825, 2197845760, 36608, 656810501,
- 909587494, 372388662, 118756887, 891749894, 589702950, 386271010, 825426745, 370611734, 370611735, 101127189, 101123591, 588587782, 352716089, 54073108, 840249904, 387323670, 353769238, 117835540,
- 101058310, 958534691, 370607621, 909586995, 875902519, 640099879, 909588007, 875902519, 857084967, 875902514, 102900518, 352723511, 842208788, 640955702, 1984233473, 589439523, 1984251254,
- 589439523, 184947830, 33954326, 16844033, 67502338, 67371782, 100926979, 16843265, 16843780, 67502338, 67371782, 100926979, 16843265, 100794629, 118101530, 184944391, 67437828, 2819032842,
- 302910739, 319622674, 320015808, 303173133, 993740096, 1161509770, 2319137605, 3326425915, 201721601, 16975366, 50594049, 67437574, 100992004, 16843779, 84214273, 16843010, 67502852, 84149253,
- 67307012, 50397441, 101451270, 168364296, 33949704, 100794882, 168364296, 320015730, 320015629, 218960659, 218960659, 262163, 46202624, 12583168, 7798801, 14090407, 639763712, 926164519, 842217014,
- 336992022, 654706183, 640099893, 101130787, 855849239, 387323441, 387323670, 118756630, 117835526, 354616838, 101005603, 957813781, 355610627, 370611762, 370611735, 101127189, 101123591, 571745030,
- 386270521, 926036758, 892745526, 656811828, 926295846, 892745526, 37300020, 892745494, 640034612, 117842467, 387192070, 37304086, 909455411, 926299703, 842217014, 370546454, 337057303, 858862385,
- 924189497, 657732918, 572728870, 352716550, 924194580, 808649273, 909588021, 909522742, 387330611, 370611734, 858854423, 1984233473, 589439523, 1984251254, 589439523, 184947830, 33954326, 16844033,
- 67502338, 67371782, 100926979, 16843265, 16843780, 67502338, 67371782, 100926979, 16843265, 100794629, 118101530, 184944391, 67437828, 1577518858, 285541891, 202118151, 101779220, 16843525,
- 50659842, 117902855, 84084494, 16843266, 100991904, 202639121, 285676556, 16975365, 84017665, 118359811, 50793991, 16908805, 994394113, 993757755, 993740101, 1161509770, 101122502, 50726412,
- 67174657, 84149763, 84149252, 17040134, 84017409, 16843269, 100860929, 67372292, 50725893, 16843012, 201721347, 151586822, 101189642, 33686018, 151586822, 17063178, 370869762, 168627466, 33954582,
- 16843777, 50659843, 101189638, 50464003, 17039617, 370869762, 168627466, 33954582, 16843777, 50659843, 101189638, 50464003, 83886337, 3237937152, 3221291778, 2181044992, 2634059264, 45312,
- 119943461, 101131814, 370611974, 572720663, 875898406, 842217014, 336926230, 657731847, 589702950, 386271010, 842007353, 387323441, 387323670, 118756630, 117835526, 807601670, 101071110, 957813781,
- 840250115, 387323670, 353769238, 117835540, 101058310, 958534691, 370607621, 909586995, 875902519, 640099879, 909588007, 572995127, 370414854, 892744243, 370615860, 640103991, 101123622, 909579799,
- 389093170, 387331639, 117900822, 656877062, 909588006, 317849878, 472976146, 386342174, 875563011, 1162179655, 1950828404, 101177413, 102372875, 17105154, 100729345, 67307012, 67502852, 16908550,
- 17040385, 100729345, 67307012, 67502852, 16908550, 33621249, 169220614, 101123847, 84214795, 117901828, 320015736, 303173133, 202181301, 774770441, 218892559, 1277955338, 504435717, 286328068,
- 34342485, 286327831, 141303313, 135928323, 1495086856, 1158940939, 1950828404, 1198802245, 134881579, 101451272, 16843526, 100860929, 67372292, 50726148, 16843012, 33883394, 67174657, 84149763,
- 67437572, 17040134, 100860161, 134614022, 134875401, 33687048, 134611458, 219391241, 219353869, 205132557, 336398857, 219417869, 302778634, 84219272, 521277714, 100734981, 521296135, 1180677,
- 4278190084, 16777920, 1114304, 2818079, 83886135, 640099874, 909522740, 387330611, 101127190, 372320006, 909259542, 589706807, 923148833, 842208788, 640955702, 923148835, 336922146, 909259542,
- 19280949, 594953472, 1982013986, 594953541, 1982013986, 962072292, 51271737, 3976071694, 322047498, 303173133, 3222473998, 219353869, 1074926094, 2319137605, 1162165051, 998914875, 868631867,
- 171131715, 225447952, 218960659, 320017171, 320015629, 1248525, 4278190084, 16777920, 1114304, 5177375, 83886207, 640099874, 909522740, 387330611, 101127190, 372320006, 909259542, 589706807,
- 923148833, 924189241, 657732918, 572728870, 352716550, 924194580, 808649273, 909588021, 909522742, 387330611, 370611734, 858854423, 54080305, 892745494, 640034612, 117842467, 387192070, 37304086,
- 909455411, 926299703, 842217014, 370546454, 337057303, 78641, 572749381, 1165370146, 572749381, 3832947490, 960059406, 235081304, 183303690, 100891662, 336007429, 118754316, 50660881, 33685761,
- 235340549, 118359815, 33686787, 60817665, 118556165, 336333844, 100995335, 33620227, 117638402, 235341582, 33882887, 1073807618, 2319137605, 1162165051, 998914875, 868631867, 171131715, 73076752,
- 453378561, 218958358, 102438410, 17039618, 84017921, 134743555, 33882886, 67174659, 453378561, 218958358, 102438410, 17039618, 84017921, 134743555, 33882886, 65795, 4278190084, 16777920, 1114304,
- 3145759, 83886146, 640099874, 909522740, 387330611, 101127190, 372320006, 909259542, 589706807, 923148833, 336922150, 101127959, 924193813, 657733175, 640954679, 335939335, 907417367, 656880693,
- 79415, 572749381, 1165370146, 572749381, 3832947490, 960059406, 235081304, 183303690, 201730062, 52700163, 140051980, 84716808, 1510475866, 604179461, 1161823012, 998914875, 994395451, 993757755,
- 1127466565, 269103939, 100908304, 721618183, 117769003, 70255366, 119931922, 86967303, 53478418, 50660871, 273195, 4278190084, 16777920, 1114304, 2818079, 83886138, 640099874, 909522740, 387330611,
- 101127190, 372320006, 909259542, 589706807, 923148833, 842208788, 640955702, 386277923, 370618934, 640103991, 101123622, 71191, 572749381, 1165370146, 572749381, 3832947490, 960059406, 235081304,
- 183303690, 219361806, 236065294, 228397837, 218762540, 772737292, 201920302, 994394125, 993757755, 993740101, 1161509770, 1128477638, 269486643, 320015728, 320015629, 202510887, 336398857,
- 219417869, 83888394, 3237937152, 3221323778, 956313856, 1325417728, 22784, 857084945, 286601779, 858986004, 370414854, 892744243, 104015668, 857084949, 875902514, 909259559, 589706293, 288694817,
- 589506100, 587531810, 858993717, 352785714, 875902259, 572728102, 856888582, 892679730, 589506100, 352723489, 857084949, 219362611, 556732432, 337380115, 3322092564, 336862211, 222495516,
- 4262269715, 556732464, 18025744, 1342726320, 566267912, 555175959, 471077088, 4262466588, 471602416, 2684424212, 4262466317, 137306592, 471602184, 134678804, 471602184, 319293460, 269683981,
- 790700033, 136858899, 3772786696, 555816744, 486080023, 471105556, 343938076, 67166236, 3321823232, 3221307394, 603985152, 1056977664, 824508416, 774316550, 909391107, 372388662, 236197142,
- 288429826, 909391670, 372651829, 118755605, 372715777, 387323670, 637929237, 87298357, 372582165, 840308502, 20330039, 101844527, 388178700, 555824928, 588718135, 84239651, 353137665, 2078211343,
- 84150017, 353140485, 264273921, 806357535, 2283735568, 806291207, 554972727, 924852279, 926290977, 788647472, 33622538, 235220481, 284294669, 822214918, 168432907, 70515722, 234949902, 939081233,
- 220796866, 688722707, 1280, 1073923583, 335593473, 822092288, 1224752384, 872480768, 572728870, 336922118, 370606622, 54409010, 909578519, 640946485, 101975815, 824509973, 286590471, 926357012,
- 640099893, 570824486, 656811559, 104142613, 656549638, 859191078, 118888242, 546832646, 924918071, 589502240, 101844492, 388178700, 353341704, 83981324, 259778046, 92212245, 3171353605, 168833040,
- 264245023, 202846751, 386665227, 185273367, 558366988, 924852279, 926290977, 117903152, 909586447, 986840636, 251727878, 772083213, 167838209, 285618484, 235795198, 184300292, 3071609354,
- 688722707, 4181180951, 346499351, 336860180, 1315860, 4294901506, 33292734, 1704124, 16777255, 118756913, 657925895, 117908006, 640098822, 909588276, 924260146, 117649974, 101123846, 926361127,
- 20395830, 2770017249, 118322306, 123078420, 117901076, 356259158, 1276841741, 1716142240, 151588121, 1242891522, 463536448, 2191858508, 117902708, 117901142, 357959444, 453971221, 1245751550,
- 151127317, 1712917769, 67125322, 3237937152, 3221291010, 452988160, 1342188800, 823328768, 926299671, 589506087, 336922146, 892743941, 589506100, 369559330, 335877910, 840308502, 892745271,
- 640099892, 101058338, 387323703, 118887959, 387384839, 656868886, 101123878, 909588262, 908470055, 926299959, 70399543, 608180326, 1829898565, 4227927563, 1829441028, 608504082, 3137214528,
- 1579755823, 791619881, 694036777, 397946665, 103941378, 69469187, 167840001, 67382533, 17433901, 604242185, 839254788, 35062277, 2577006860, 1929650456, 118165007, 185009670, 74649358, 798038049,
- 404232018, 791630359, 404232018, 758141463, 17236229, 69403659, 117846277, 33691395, 101122839, 587466033, 117508868, 86836481, 768, 180479, 285261825, 687873280, 339017728, 840308502, 892745271,
- 640099892, 101058338, 587600919, 875898402, 372388662, 891691543, 842217012, 101979414, 2319137605, 1162165051, 998914875, 315639099, 320015630, 2148666893, 219353869, 3222409742, 572749381,
- 1165370146, 572749381, 360063778, 219353869, 756224781, 319622419, 319622419, 1024, 180479, 285261825, 822090496, 18176, 656810501, 909587494, 372388662, 118756887, 572982790, 858985493, 590624050,
- 656815143, 101979414, 891691555, 101070644, 857084949, 840382002, 640955702, 336926247, 639771398, 104281141, 370414854, 1984233473, 589439523, 1984251254, 589439523, 269518198, 1611665536,
- 319164693, 101911821, 438703377, 444605978, 101782822, 319622419, 638914822, 993740096, 1161509770, 2319137605, 2420456251, 269488144, 119477392, 319621640, 134876435, 437526279, 640034342,
- 119477274, 319621640, 134876435, 437526279, 196646, 29425408, 13042048, 1638411, 318767143, 117835569, 637739267, 52832039, 353776179, 589497876, 875898402, 102893366, 857084949, 892744225,
- 3038979636, 671155280, 19402753, 671830020, 235801168, 235556874, 319647246, 1073810707, 219353869, 72399617, 29294085, 1342440770, 250215948, 235801098, 2953710090, 319622419, 319622419, 512,
- 180479, 151044353, 10240, 102117633, 925042439, 822416950, 353776161, 337839636, 387319558, 589497878, 909583906, 891692599, 875898402, 150470966, 2439645185, 4263054033, 230687024, 1057821459,
- 50794813, 230690066, 285672210, 319635516, 179634451, 2590574873, 331219719, 1041435917, 437654877, 219353869, 1561663002, 218960702, 131091, 46202624, 12583168, 3342351, 336924928, 841036566,
- 875902262, 572597030, 336925446, 842216214, 875902262, 875897638, 909259571, 640955701, 336925991, 572728070, 571806982, 18490886, 640031264, 450952730, 219389990, 320015680, 680529933, 320611384,
- 790728717, 2147554061, 640031296, 639254554, 2160524838, 219353869, 269684096, 539506704, 1527394847, 789777696, 1249313, 4278190089, 29360576, 983232, 2490390, 3407917, 4915268, 6750301,
- 336662784, 841036566, 873542966, 572597030, 640030470, 370549543, 909521175, 926299703, 387323427, 823596566, 926299703, 923141667, 656811571, 824645142, 101123590, 640878342, 640034598, 101134631,
- 909313798, 101979958, 656541191, 875898406, 842413878, 118887959, 336933427, 891429667, 18490932, 640031296, 448855578, 134592294, 486811394, 33882686, 805439493, 33884162, 355009029, 36111389,
- 69667336, 134550813, 33882678, 788596741, 33884162, 355009029, 36111389, 505589256, 505299998, 505291298, 572399172, 269541616, 2147553504, 639271166, 2147555878, 4045809178, 404169485, 134419237,
- 371132934, 101326614, 168362760, 588716069, 170203226, 54076173, 520815880, 186586646, 151193605, 387458314, 1008880163, 286331153, 1008869948, 286331153, 269541948, 33558544, 3271492096,
- 3221291010, 637537024, 117506048, 909574687, 589706293, 120652578, 923207430, 909391142, 353776179, 572720660, 909575975, 656881463, 179664385, 466553664, 3810795822, 839326803, 219349343,
- 219353869, 2992636932, 169018908, 3483697472, 3020570635, 773923864, 118751230, 73445915, 320015620, 18025741, 470233695, 4197203, 4294901506, 33423805, 655550, 16777257, 389166641, 118756887,
- 822552327, 101123863, 654705927, 842208823, 640955702, 352723491, 637998868, 926290743, 292553015, 271454510, 427636752, 153879169, 318307872, 185243918, 337386516, 2584026132, 190318093,
- 2919338016, 288231440, 2100760878, 2416541973, 123210528, 470129166, 471602196, 2567572244, 134287886, 2885920, 4294835972, 33489341, 655551, 3145752, 16777287, 119678513, 909580039, 822159156,
- 101123846, 926357015, 657930038, 806627079, 654706467, 926364710, 657535540, 117908006, 387388422, 370607877, 909588274, 807872308, 101131028, 926361127, 20131892, 305468373, 305754681, 172031506,
- 168041988, 241700362, 863174410, 188743981, 1074070795, 672011265, 235818510, 2452750679, 237506135, 336465486, 185286657, 20974604, 303213825, 322531897, 3405648437, 241700362, 503581194,
- 1929316868, 1073818885, 235146252, 335626244, 239996430, 240586280, 235820946, 237506126, 205521172, 1074465548, 262145, 46202624, 12583296, 3014688, 4587578, 338759936, 387323671, 909579781,
- 640100150, 589693487, 386277923, 640100119, 103163687, 102896405, 857084949, 892744225, 623060532, 842208788, 640955702, 923148835, 336922146, 909259542, 170275893, 17894738, 356532522, 337842696,
- 158165784, 151529491, 310323458, 136515846, 319627276, 1073876243, 219353869, 219357438, 219353869, 226497293, 218960659, 419500819, 206833933, 403787013, 453979400, 3256878864, 2449935632,
- 68169766, 134807816, 219383038, 219353869, 223351565, 218960659, 318968595, 320015629, 1248525, 4278190082, 25428672, 2097312, 16777262, 859191089, 118895155, 100992774, 656548643, 926295591,
- 387397175, 908470071, 389429047, 859190275, 353776161, 555943444, 2097227298, 958339944, 470292500, 133168712, 168790280, 117638473, 973999648, 17338978, 437857800, 34411450, 320015680, 230751501,
- 894238995, 1276322062, 184781092, 51381590, 436602640, 302341938, 168564485, 319638270, 319622419, 131091, 29425408, 12583360, 3604526, 842208000, 336926230, 924256006, 370618934, 386336532,
- 101127190, 120006434, 640098822, 657930036, 101979427, 1025909283, 389428226, 875902514, 354624294, 857706528, 1445277982, 169478761, 1785334025, 436865289, 174680330, 151587354, 322142314,
- 320015629, 471602333, 3221319700, 673133342, 1784023356, 436865289, 174680330, 151587354, 151612010, 1762269706, 319635584, 2690649363, 480252685, 1612452884, 1024, 180479, 486588417, 989867008,
- 18688, 859059461, 907351346, 640955702, 102900518, 370414854, 859059479, 370480434, 637743667, 654706466, 909522726, 118888214, 654718726, 909522726, 118888214, 572925702, 859190279, 353703474,
- 572720660, 1610691878, 1194922000, 1195865157, 960972148, 841879568, 739077938, 202181133, 774770441, 218892559, 202181232, 774770441, 218892559, 2049707274, 471077916, 471077916, 269536557,
- 1198924222, 1162179655, 1984382836, 269532705, 369169357, 151786002, 219417866, 168629261, 151784457, 219417866, 168629261, 2014448649, 337386516, 471602208, 327700, 46202624, 12583168, 2031633,
- 3932208, 889192520, 909588020, 370546482, 117838869, 640098822, 338761510, 370618931, 640103991, 119677734, 875902514, 640099878, 34473762, 924193813, 572728884, 370414854, 657863219, 336922146,
- 909259542, 1160131637, 998914875, 994395451, 993757755, 890302533, 202115879, 574297867, 471093264, 34018319, 336003592, 333716495, 303173133, 3222473998, 236065294, 3222475533, 572749381,
- 1165370146, 572749381, 192291618, 185346832, 488115211, 169024608, 50928926, 505219331, 3491500810, 219353869, 756224781, 319622419, 319622419, 1536, 2147672319, 100704257, 234883584, 1006645248,
- 18432, 859058451, 555947315, 120796451, 20133155, 892679730, 640100148, 102892331, 370414869, 370422579, 892744243, 857084979, 590689842, 654706452, 926168358, 85333814, 925247266, 389165878,
- 1074136854, 23091208, 2438046434, 268525664, 1863261204, 2691767827, 472522360, 674762772, 947927080, 808986664, 404232216, 404232216, 236753150, 470682893, 218959388, 139985166, 1616928864,
- 337436926, 2199001196, 3894290967, 942152724, 942155832, 236726328, 470682893, 218959388, 404245518, 404232216, 67115032, 3774808064, 2684452866, 1174419968, 1526747392, 353566720, 572720660,
- 875902246, 372388662, 118756629, 370619959, 842204935, 101979414, 656548643, 121059110, 101123846, 891691555, 926299189, 892679735, 572728884, 103876358, 856954133, 909588274, 355665719, 572724500,
- 909391142, 926294277, 353776161, 331351572, 940772621, 70789160, 235737979, 223613447, 2148340499, 101321232, 689069580, 506074381, 1411327531, 218960647, 135727379, 437125893, 673763344, 34475530,
- 213188186, 171311370, 1073810958, 320015648, 942153741, 520628280, 235218207, 322310670, 219352333, 489033486, 622348111, 541531691, 689572147, 319621161, 403160595, 419694664, 659436334,
- 168690693, 422579722, 168431127, 262158, 46202624, 12583168, 2424849, 8716373, 639763712, 926164519, 842217014, 336992022, 654706183, 386271014, 842208790, 657864502, 101058342, 925245987,
- 924189241, 657732918, 572728870, 352716550, 924194580, 808649273, 909588021, 909522742, 387330611, 370611734, 858854423, 54080305, 892745494, 640034612, 117842467, 387192070, 37304086, 909455411,
- 926299703, 842217014, 370546454, 337057303, 78641, 572749381, 1165370146, 572749381, 2708874018, 185404426, 690567697, 202051898, 755894797, 674046241, 285541891, 202118151, 101779220, 16843525,
- 50659842, 117902855, 84084494, 16843266, 100991904, 202639121, 285676556, 16975365, 84017665, 118359811, 50793991, 16908805, 994394113, 993757755, 993740101, 1161509770, 168496315, 572658700,
- 185207828, 454758412, 33621104, 169220870, 369757453, 16909851, 50397444, 100861186, 50726920, 16974341, 33620993, 169220870, 369757453, 16909851, 50397444, 100861186, 50726920, 16974341, 458753,
- 46202626, 12583294, 2490402, 3014698, 3604531, 318767166, 372384049, 102109975, 857023267, 336926258, 572728070, 909391142, 590689075, 322381346, 118961718, 923215667, 855772963, 120664887,
- 389228339, 824649523, 587675431, 2348907031, 855974679, 3642631942, 320015680, 319668237, 3644853523, 872818462, 178397956, 196152203, 352916827, 187698036, 170986410, 352916852, 190521119,
- 371048449, 790495487, 218960704, 218960659, 506413075, 487981057, 1751672896, 1748002920, 1751672936, 107491432, 33581062, 3774808064, 2684436482, 788537600, 641138688, 572728102, 504632582,
- 839006978, 875889214, 572728102, 117835526, 656803590, 589707046, 101058338, 907482631, 3072730679, 170544673, 1227492360, 336869473, 709452088, 705300492, 590553422, 168364043, 134628387,
- 923534600, 673724946, 3577156154, 135010068, 709452088, 945899818, 337054728, 269431072, 3845197584, 1393296902, 892674373, 5457185, 4278190081, 16777920, 3276992, 102961920, 640100102, 387192070,
- 336926231, 352716551, 926357012, 387323702, 842208791, 640100150, 892745527, 656877108, 640100134, 119677734, 856687057, 639185691, 386934281, 438832395, 135797587, 387069703, 50538269, 373499653,
- 891818003, 587600400, 18030613, 85202562, 421594376, 406523152, 219882269, 572199952, 201658117, 237831428, 823532844, 454046238, 252058385, 339425044, 151001370, 3237937152, 3221291010, 419432704,
- 822093056, 1224752384, 1627411712, 27904, 352723475, 875901717, 352527142, 858986004, 892679730, 589506100, 337053218, 640091655, 909587509, 339154455, 909259542, 589706293, 574031394, 370414854,
- 892744243, 337061428, 909259542, 589706293, 571934242, 370414854, 892744243, 336012852, 909259542, 589706293, 572982818, 370414854, 892744243, 226502196, 219381779, 3759414464, 674765844,
- 4030212224, 673720360, 673720360, 218960656, 218960659, 319651859, 319622419, 219362067, 219353869, 220205837, 218960659, 321721107, 320015629, 1074990349, 219353869, 18027277, 1611469760,
- 4279438688, 471126016, 684725276, 779630648, 387389207, 387395118, 232920855, 218960659, 320017171, 320015629, 538119437, 219353869, 1293095693, 319622419, 319622419, 320015744, 320015629,
- 218960755, 218960659, 131091, 46202624, 12583168, 3342383, 338765056, 842216214, 336926230, 336922374, 572596998, 641021222, 909391142, 842216246, 640955702, 875898407, 372388662, 101127189,
- 354490118, 540541217, 857678358, 470684190, 346095124, 504499740, 371334963, 336071712, 942155832, 1745618964, 1073856766, 505419510, 403709747, 471085829, 87233564, 857673752, 219553822,
- 555354648, 674773032, 403315233, 33562851, 3137278720, 3221302530, 721423360, 287637504, 117645105, 655824647, 657528615, 640103991, 589693487, 100798242, 387384839, 370607623, 370620215,
- 536950327, 1612516651, 285545798, 430906197, 101060201, 155226132, 1074336788, 117838736, 51996687, 2148667408, 269488768, 1478558024, 1158546714, 778181653, 1737646862, 51581710, 303203349,
- 318969220, 2456227347, 168561683, 201999428, 262156, 29425408, 12583296, 3014663, 4325432, 857019136, 589509685, 842077986, 336925974, 101982982, 891691555, 587600931, 573908514, 875902246,
- 892547894, 858994228, 353703474, 336929287, 892482355, 570893108, 858985493, 590624050, 1342726288, 639283208, 219355686, 327160589, 437456141, 538584614, 391124769, 269529121, 2685407392,
- 278925328, 1216872720, 642779208, 639295514, 219353869, 219353869, 450894374, 555173926, 1615337249, 269488144, 269488256, 262160, 46202624, 12583168, 1900561, 3473449, 639763712, 926164519,
- 842217014, 336992022, 50726407, 336922146, 909259542, 388379701, 842208788, 640955702, 117842467, 386271010, 926036758, 19277622, 594953472, 1982013986, 594953541, 1982013986, 320015765, 303173133,
- 235737970, 219025938, 304427027, 621941523, 320016933, 994394130, 993757755, 993740101, 1161509770, 219369473, 219353869, 220205837, 218960659, 542970643, 538976288, 2105376, 4278190086, 16777920,
- 917696, 2424858, 2949161, 285212729, 857084945, 288699954, 589506100, 923993634, 656880694, 117908006, 822547473, 892744225, 589706293, 588579619, 355669301, 639768355, 859190325, 336926258,
- 673724422, 2148340536, 3554677517, 173672970, 692783642, 319629569, 4150856979, 541081664, 168693258, 17698314, 679542432, 19413048, 320015744, 164915710, 173672731, 4210969354, 219372038,
- 18025856, 2151694336, 168736832, 168693258, 50335242, 503381759, 1778467330, 687873280, 25856, 858994177, 875902514, 572728102, 369559046, 926298675, 370618934, 909586995, 874854198, 101131815,
- 370611221, 823604791, 101058342, 656810531, 101131825, 386270727, 909579798, 370554678, 926298675, 372717110, 857085463, 372717106, 907417366, 656815671, 119940902, 587597361, 906044962, 222308386,
- 1074598675, 37577789, 504368913, 287838477, 488513053, 4261479169, 538976480, 538976288, 303272736, 336930833, 320147497, 235740182, 219546371, 353049875, 706222384, 50857230, 705563142, 372250904,
- 219356681, 235078422, 320216077, 338235413, 234956821, 218960658, 1013136147, 201919238, 18093068, 629735681, 303239954, 319956261, 226562579, 252578829, 303042059, 219546375, 67309069, 235669262,
- 67241740, 117703682, 101453324, 235078671, 51776781, 252776967, 921355, 4294901506, 21103326, 3735712, 318767221, 387323185, 859124502, 926036245, 875902774, 372388662, 370546455, 657864247,
- 589702695, 353699362, 909391139, 387330611, 924194327, 656881206, 572728870, 640750342, 587597319, 824649250, 117835558, 370607622, 909522710, 857085495, 909588018, 387331894, 842208790, 370554678,
- 926291479, 640099894, 822552103, 572720646, 50495526, 515907101, 319029533, 17959949, 219480577, 16846861, 673461765, 219398200, 16847372, 218961154, 83951888, 942154806, 286397363, 689181992,
- 370349328, 51252508, 319624707, 806685469, 237639705, 100861957, 405409290, 152449049, 369955614, 219022083, 353572380, 353642768, 3913285928, 1611923969, 33625184, 269684201, 269289484, 219480577,
- 942679048, 224419880, 135008275, 33624077, 604507413, 3539875888, 235670797, 269355791, 369297170, 51252493, 201788932, 34016270, 67371524, 202247175, 50597638, 369954062, 286394115, 235866895,
- 4294902528, 2164441087, 167821569, 956312064, 570753024, 875898406, 101005110, 389101318, 101127702, 637609734, 909522726, 909514519, 858994231, 69080882, 874845205, 336929315, 842208790,
- 572732469, 893387046, 235942999, 1176119809, 34111121, 135529990, 34124029, 135529990, 221387431, 251793161, 791153417, 3774749482, 857608208, 554700831, 1463042095, 473109813, 2367560683,
- 135530082, 17170952, 135530192, 2198209032, 202392361, 1161104908, 437995083, 521146378, 269491763, 262191, 46202624, 12583168, 3080209, 5308480, 639763712, 926164519, 842217014, 336992022,
- 654706183, 101123633, 370611221, 859191095, 387396147, 892745494, 656811828, 572728870, 103163654, 387388437, 336922119, 909588246, 876029748, 101123878, 370611988, 657732918, 20330279, 594953472,
- 1982013986, 594953541, 1982013986, 168432032, 336070407, 721693481, 117969961, 285870599, 471609104, 201731887, 52700163, 140051980, 84716808, 1510475866, 604179461, 1161823012, 998914875,
- 994395451, 993757755, 319862597, 84414484, 252183301, 84084751, 336594949, 403771411, 100902168, 721618183, 117769003, 70255366, 119931922, 70255623, 53478418, 50660871, 273195, 4280287233,
- 27263455, 3145888, 389092096, 909579799, 909584167, 353776179, 117904405, 101123846, 656868871, 572728870, 101123846, 656877095, 640100134, 909391157, 632959539, 168430872, 469963533, 188361253,
- 604178199, 68424452, 219415325, 486741005, 68359172, 386335524, 539506699, 320703489, 168627466, 974652175, 353895209, 3457092911, 318832915, 269487226, 18053644, 265163521, 387329805, 3680007,
- 4278190084, 20972224, 1179835, 3276831, 620757056, 841025329, 101979414, 639770915, 859190325, 907491123, 657732903, 101127702, 822226694, 117904917, 926299943, 389428791, 370618928, 909182230,
- 117847862, 117900807, 19277351, 100745306, 219353869, 319619326, 1219890451, 50536117, 17115946, 38014233, 3523419139, 70654723, 35205905, 4263319553, 996877214, 973342987, 239534877, 330346506,
- 320015629, 3323137293, 106320406, 1848118540, 84807227, 1342617112, 156043596, 319109964, 151062797, 942811178, 67766274, 436818241, 100669957, 3774808064, 2684469249, 855638784, 1191199488,
- 1325419264, 352387072, 858207539, 353703474, 354616852, 353703474, 589497876, 590685730, 589497876, 892675618, 892548660, 892675618, 858994228, 857019954, 352794164, 857019954, 892548660,
- 590685730, 352781844, 855979315, 855712565, 1879122741, 222310432, 218960659, 1074598675, 331354893, 319635469, 319622419, 222301459, 4078157843, 331354893, 3222473997, 18890003, 4263518240,
- 18882752, 807411824, 222301459, 219398163, 320015680, 320015629, 319635469, 1074598848, 219353869, 3229618957, 319622419, 218960832, 539029523, 536944672, 4278321184, 46202876, 12583172, 2621451,
- 370414336, 892744243, 572728884, 842209030, 370349846, 555943431, 925247266, 859190803, 875898419, 372388662, 333452309, 320015629, 2064846093, 68817197, 252577096, 409009687, 1208290830,
- 772807428, 673724422, 224395576, 218960659, 338498323, 400621072, 319951634, 270532887, 672206612, 271071288, 234881536, 838975743, 553697281, 11008, 842215699, 370611990, 857016070, 336926258,
- 570567430, 909391142, 641020723, 909588262, 103880502, 909259542, 1076045607, 18025664, 859767822, 320015664, 223367181, 806163219, 235159347, 52302593, 790766127, 25561859, 2836140480, 1678464310,
- 319622419, 319622419, 911543140, 3406892201, 573780770, 458891, 46202624, 12583168, 1638409, 3997733, 7209045, 318767238, 858994228, 353703474, 842208547, 336925974, 572728070, 875902246,
- 119674678, 857085702, 657864498, 252983078, 572720642, 891683375, 906116916, 35598899, 656873238, 1060386086, 842216962, 353763871, 100798228, 823599651, 353769239, 100798228, 36643363, 1060386086,
- 842216962, 34542631, 790766342, 875898370, 859177535, 369237810, 1074598752, 2155877133, 337393704, 941364448, 387395176, 774772503, 387389207, 203293362, 33686273, 33693196, 33688606, 504103171,
- 504122370, 203293186, 16974338, 33693196, 50400286, 504104450, 203293186, 33686273, 33693196, 33688606, 503452162, 33751308, 35523586, 34348546, 201392898, 2684420638, 219353869, 674766944,
- 471602384, 942198804, 673720416, 673720360, 33738792, 33693196, 33688606, 504103171, 203293186, 203305217, 16974338, 33693196, 50400286, 504103426, 203317762, 33686273, 33693196, 33688606,
- 504103171, 33697794, 33693196, 33688606, 504103171, 203293186, 131073, 29425408, 12583360, 2949133, 842208000, 875902262, 102900515, 118756629, 857085460, 909588018, 857085463, 892745266,
- 589702708, 101123618, 589702695, 3758491170, 271524112, 3492749584, 203966767, 218892830, 671882506, 840445769, 304944166, 756161821, 405939732, 556748801, 556732432, 1085280272, 50871141,
- 134415621, 641754427, 101527626, 218500108, 151013936, 3237944064, 3221349633, 771754240, 1107310592, 1442860032, 1811963904, 30720, 102176293, 639771398, 825701927, 640103990, 640026406,
- 117842467, 101123622, 101062422, 924194327, 842208790, 907425590, 119944759, 102119222, 654706183, 372385590, 118887959, 656811814, 656803590, 842217014, 117835542, 909588006, 117839670, 387323670,
- 640099846, 118765350, 891692806, 389429044, 102893334, 857084949, 875902514, 285212966, 51580178, 269292291, 252582353, 271072272, 840966194, 272377872, 421072399, 1007685390, 540151848, 672150048,
- 235868220, 235539547, 268501249, 386139159, 16843024, 34343438, 286462039, 51580178, 210899715, 16846346, 68685570, 34343449, 34543621, 686817537, 673720360, 1344809000, 219353869, 823333645,
- 169477639, 2533693962, 454836770, 774309141, 352659246, 574757915, 454836770, 774309141, 352659246, 557980699, 387320073, 17498627, 34260500, 152442627, 88217353, 436602632, 158534154, 51844617,
- 335612674, 386468234, 34275603, 776410883, 387389207, 387395118, 319690519, 320015629, 1248525, 1, 20972064, 3735648, 640029440, 352723491, 370611732, 101127189, 370414854, 926298675, 858994230,
- 370611762, 909259542, 656815157, 926168358, 875902518, 102900518, 587597319, 2586190371, 555296777, 101914415, 790041350, 153622817, 3222082565, 151327757, 790698280, 101061399, 556734227,
- 84486169, 230690068, 372179220, 388050715, 100928037, 621413382, 456073495, 320015382, 790304268, 170202913, 67503620, 555164938, 202775343, 50336531, 3237937152, 3221291010, 536875264, 12032,
- 387322899, 909586966, 640955702, 119678503, 639043078, 102900515, 370414869, 387323671, 909587223, 909522743, 640955701, 119677731, 370547360, 437655092, 873862682, 1343886870, 220095056,
- 1611403539, 540024867, 1612914736, 219353356, 22045214, 220994144, 739052813, 220994074, 739052813, 219363506, 18025675, 403702793, 151261208, 3406566145, 3674893, 4278190082, 16777920, 2359488,
- 318767176, 117842481, 336922118, 352716311, 101062420, 387322901, 370414854, 372716083, 909259542, 640946485, 352723507, 857084945, 372717106, 892744243, 909518644, 656815157, 640955702, 875902503,
- 640034598, 52369080, 352459796, 420810269, 637802269, 50858010, 555161119, 555186465, 521541409, 436733955, 488047654, 487462169, 354091541, 3221298947, 587535645, 84412694, 303437603, 437790473,
- 185207080, 352462362, 18293021, 555816848, 393281047, 34938145, 168499750, 404367369, 370280743, 134554391, 86120201, 83893525, 3774808064, 2684420098, 838862848, 1275084288, 23040, 119681299,
- 640098567, 909517091, 372388659, 370546455, 101979413, 101979399, 639771427, 354497845, 589497876, 892675618, 892675622, 389494324, 336925986, 892482355, 86193205, 858986004, 875902514, 572728102,
- 102900998, 857084949, 892744243, 2770544180, 18483222, 369629734, 839577854, 840873502, 370287370, 219352594, 4279438624, 537727744, 302912269, 279450134, 269508624, 168689919, 235801120,
- 235544586, 235563009, 169871886, 17436174, 1263211872, 589503765, 537355549, 487739412, 319633672, 808455443, 219353869, 303892537, 119542864, 270536779, 135274512, 168693258, 235802122, 235538958,
- 235538958, 768, 131072, 520126465, 1090533120, 588447744, 353699362, 556996116, 892679730, 589506100, 589506100, 588580386, 589506100, 352650786, 336933427, 336929571, 892674595, 875897379,
- 875901747, 872755763, 355611443, 572728084, 639242320, 2147555878, 438707738, 1074598672, 325063437, 319635469, 270544897, 269492240, 537923616, 3506311184, 269508624, 1610682464, 450894374,
- 3759810086, 319628826, 319622419, 270560531, 269492240, 537923616, 269500432, 327696, 46530306, 12058978, 2949157, 6291540, 318767213, 387396145, 337065527, 117900823, 51316230, 925247238,
- 656811831, 657930022, 389429030, 389429015, 386336550, 656877095, 389428785, 387323415, 253105687, 654706179, 925247015, 101132087, 640100102, 906182438, 639055670, 369493766, 926291479, 823600694,
- 370611718, 657864502, 2953185062, 1276969995, 453052171, 521414929, 604572422, 17434888, 51007237, 658573570, 185009669, 3406044492, 3391096587, 3440050437, 2283286542, 117580056, 168102669,
- 386074641, 235671565, 150407172, 252516100, 151194893, 436472592, 285875984, 151650819, 33755402, 168022282, 51448074, 218761732, 179831054, 134420298, 403505409, 371197755, 119612199, 1342899205,
- 168493324, 155528455, 386074633, 43584074, 943074825, 339936011, 103024402, 173283879, 1042747424, 67964191, 219611908, 220152351, 50594829, 1042222359, 35000614, 151650877, 33755402, 285870601,
- 34736465, 235538947, 67373578, 1280, 2147672319, 83927041, 805309184, 1207974912, 571670528, 892536583, 640103191, 369435427, 336925974, 102966022, 639771398, 101065511, 656810531, 891691555,
- 926299189, 859190839, 320287283, 924194566, 657864502, 621152038, 386271010, 926036758, 2871404342, 1897859093, 155430192, 86288, 219365679, 607454753, 2181444900, 606352646, 220268085, 689051411,
- 3055366411, 168238382, 454824466, 303172105, 3841858332, 218959388, 236723214, 17698061, 1615598688, 1628197984, 808536070, 773985037, 773988910, 219357742, 119608432, 606149480, 370857214,
- 453313813, 85267994, 404227333, 404232216, 33560600, 3237937152, 3221307394, 1610631424, 856883200, 353703474, 353776179, 857084949, 892679730, 892675622, 892547892, 355611444, 875901717,
- 353710643, 353710643, 352781844, 572720660, 875902246, 354624294, 336926258, 572596998, 909391142, 909381939, 119943447, 370607623, 101135155, 926357015, 589702966, 1614165795, 270932640,
- 168703012, 538447370, 269488144, 269488160, 706224144, 388636190, 319623185, 3774745875, 219353869, 151687974, 67373424, 68762123, 1879640586, 184812553, 17045818, 3222939328, 169878580,
- 2081033742, 538651143, 269496336, 269496368, 455086128, 511444778, 538847786, 328210193, 320015629, 18025741, 1395006080, 123734023, 189467147, 1611138823, 1258949383, 131084, 46202624, 12583168,
- 3014672, 120656640, 387388422, 926364182, 656880694, 823599654, 117904919, 891692806, 354558773, 587600917, 892675618, 858994228, 909587509, 202168548, 186780632, 3624668376, 1347166731, 122686476,
- 272632330, 235538958, 171973158, 3635675402, 3624608267, 198708236, 215485218, 185290901, 67373136, 806369291, 168693258, 942021168, 263179, 4278190082, 29360608, 1769632, 318767180, 859256369,
- 822544177, 102900514, 857084949, 389100338, 825241623, 623322659, 892731951, 37693236, 875902514, 102900518, 640033543, 352723491, 353834516, 336922118, 909259542, 370553655, 892744243, 257959476,
- 537252360, 639238913, 16980518, 147981600, 69206287, 117900064, 453255171, 303703589, 147982365, 639242781, 302910994, 487725606, 487117320, 623254034, 252193025, 455424008, 137897498, 134809615,
- 252511288, 939789583, 437921288, 235803174, 303703570, 147982365, 639242781, 302910994, 639244838, 1024, 2147672319, 218144769, 805313536, 17408, 288559379, 288559393, 555951668, 822281762,
- 556996116, 875902514, 572597030, 909190406, 572925748, 335939335, 840308503, 657733175, 640759591, 335939362, 101127959, 840308500, 875968311, 20987943, 438714496, 639271166, 18885952, 187506918,
- 145161480, 119079179, 118753031, 805766960, 117904391, 126820103, 117901076, 117907231, 805770247, 1610680071, 65791, 65791, 4263912986, 757932211, 185272352, 118753210, 120588039, 120588052,
- 118753031, 117915935, 520557575, 118753055, 120588039, 50333460, 3137282048, 3321962498, 570429184, 13568, 352716545, 370611988, 892745527, 640100148, 101134615, 101132071, 387388437, 909588246,
- 120009781, 656868913, 336922119, 924194583, 875902519, 151070503, 3658354395, 249239320, 3172522510, 2552571288, 3658354229, 249239320, 623234318, 235812248, 3675723994, 20254222, 252143035,
- 191170319, 252142859, 191170319, 286344920, 252123206, 191170319, 252142859, 296617743, 119031313, 1694961423, 124062475, 403115791, 768, 180479, 721469441, 1224752384, 570490880, 102044934,
- 572720902, 370414854, 370553651, 370414871, 892744243, 926299701, 892744243, 589506100, 891758118, 872621620, 842413878, 353768983, 101123604, 640034594, 101130807, 842208791, 640103991, 319619073,
- 587880252, 219353869, 1012337187, 319622419, 587880252, 219353869, 1012337187, 505580819, 505299998, 505291298, 572399172, 387395200, 774772503, 387389207, 219398145, 1012337187, 319622419,
- 587880252, 219353869, 1012337187, 319622419, 587880252, 16716557, 286342178, 574361873, 286342178, 1916539153, 673720360, 673720360, 256, 2147664127, 1459666945, 822149120, 353699362, 889653012,
- 572728884, 117835271, 336004614, 370414869, 926364211, 892679734, 640091655, 825241655, 926286399, 823596822, 101127703, 336930599, 370611990, 892744243, 641020981, 640034598, 572728871, 655693062,
- 875902246, 222298406, 688526867, 202646556, 571741223, 186987526, 689981451, 151522907, 744426766, 168429835, 135097388, 693832969, 185288736, 570831909, 203887636, 689710100, 18028042, 2215449536,
- 772149018, 270346524, 1495672638, 117506859, 302199845, 1226912776, 235735098, 473696520, 118098439, 235423004, 1228539917, 302527521, 119878659, 1495990531, 272508710, 773597469, 2216300294,
- 50336525, 3237937152, 3221291010, 989862656, 17664, 352723475, 857084949, 858986004, 842348082, 875902262, 640951078, 102900515, 352723459, 556996116, 892744243, 589506100, 875902518, 354625062,
- 353769010, 587597332, 336929319, 892482355, 228598580, 319623955, 319627277, 219353869, 220204307, 319651859, 536939795, 320015776, 437719309, 590698292, 975381306, 269537315, 17830080, 3758953376,
- 319623949, 219352339, 219352544, 1409159955, 319622419, 319622419, 891633946, 591410263, 975381306, 269500451, 33558544, 536870912, 2147582722, 771762688, 587268096, 389165845, 372651799,
- 587597575, 891691553, 891692853, 993408053, 572732675, 909391142, 372388659, 117838869, 18289955, 256974912, 245838350, 330762510, 352189981, 471679772, 1345335316, 320015648, 319651853, 808512787,
- 119554049, 402859033, 471256587, 220075284, 471089439, 218960672, 218960659, 356601875, 256, 180479, 855687169, 890437632, 353769222, 589497876, 336922146, 102900503, 102175765, 370414854,
- 909254963, 656815157, 640955702, 892740387, 589506100, 640955702, 100541991, 556729347, 371595792, 472522254, 506077722, 706637825, 706484770, 638979614, 805635354, 3103852835, 201918209,
- 640622862, 705895706, 68559646, 706616104, 672865834, 505615876, 438113066, 605097766, 66870, 4278190083, 16777920, 917696, 3145758, 370606336, 589497863, 925247266, 842217015, 859190275,
- 353776179, 587600917, 891691555, 656810503, 909587494, 372388662, 118756887, 989922822, 151587424, 152289299, 157288969, 387060242, 387026961, 294654231, 1008902167, 286331153, 1008869948,
- 286331153, 2695954748, 269488400, 262148368, 387041534, 294654231, 940644119, 1142824482, 572661278, 507780638, 16785950, 3237942272, 3221351425, 13568, 640095507, 101123846, 118953750, 387384838,
- 926357014, 857084949, 892744243, 907417397, 641087287, 909584167, 640100150, 889653030, 589506100, 2060453410, 268900875, 2047543046, 101124986, 186255120, 537727866, 192549645, 101713690,
- 2054818567, 268830475, 2047547911, 220204307, 2376073491, 185009735, 119147292, 436684358, 118168587, 227362566, 2366444307, 185009735, 119147292, 436684358, 118168587, 227362566, 100668179,
- 3237937152, 3221291010, 620761344, 1023422720, 1426082048, 339017728, 840308502, 892745271, 640099892, 101058338, 587600901, 875898402, 875902774, 372388662, 370545941, 891691559, 842217012,
- 101979414, 587600903, 875898402, 372388662, 891691525, 842217012, 101979414, 587600935, 875898402, 372388662, 2319137605, 1162165051, 998914875, 1073825083, 639244838, 168694294, 370281994,
- 320015792, 320015629, 218960669, 218960659, 220201235, 218960659, 320672531, 320015629, 3222473997, 572749381, 1165370146, 572749381, 2775982882, 438707738, 3439796244, 168693258, 2619344845,
- 319622419, 319622419, 320015696, 320015629, 218960685, 218960659, 319655955, 319622419, 393235, 46202624, 12583168, 1900561, 4128819, 5701707, 370423040, 926029335, 875902518, 572925734, 621151751,
- 572720660, 909391142, 51786291, 875898402, 842019638, 909522739, 118887959, 336926215, 101974790, 891691555, 842217012, 639764246, 859190325, 336926258, 101983494, 891691555, 842217012, 993740054,
- 1161509770, 2319137605, 21314363, 218960672, 218960659, 639246355, 16849446, 152241216, 1074005769, 325723666, 320015629, 1343425805, 219353869, 18027277, 218960723, 218960659, 1984282643,
- 589439523, 1984251254, 589439523, 319642486, 319622419, 649330195, 2451970586, 67372809, 328272147, 19274266, 320015632, 320015629, 218960797, 218960659, 319627283, 319622419, 131091, 46202624,
- 12583168, 2424849, 370423040, 926029335, 875902518, 572925734, 84280839, 572720660, 909391142, 909391159, 353776179, 1159075349, 998914875, 994395451, 993757755, 641728837, 371595802, 168431122,
- 3222671886, 572749381, 1165370146, 572749381, 2775982882, 438707738, 3439796244, 168693258, 2099149, 4278190082, 16777920, 1114304, 889192486, 370611732, 909522738, 656815157, 101130790, 101975302,
- 891691555, 842217012, 909522739, 118887959, 994383367, 993757755, 993740101, 1161509770, 438714369, 438707738, 72155907, 101255443, 3222227973, 572749381, 1165370146, 572749381, 2775982882,
- 438707738, 160638490, 319030534, 1217289, 4278190089, 20972256, 983200, 2949150, 4915260, 6881370, 8847480, 336662784, 841036566, 873542966, 572597030, 909383430, 353776179, 587600917, 891691555,
- 353776183, 587600917, 891691555, 87438389, 842217012, 336925974, 572728070, 571946278, 875902246, 842216246, 336925974, 875902726, 842216246, 336925974, 639771398, 891691543, 859190325, 353776179,
- 923145237, 842217012, 336925974, 572728070, 571946278, 875902246, 842216246, 336925974, 19412998, 943204480, 679542312, 337424440, 168696852, 2953710128, 168696852, 470682160, 337437950, 168696852,
- 806226480, 168696852, 470682160, 805965372, 337382922, 347085844, 805965340, 1008471562, 471077916, 170920462, 471085070, 170920462, 1073814542, 942145791, 75832, 1480079400, 337386516, 235801144,
- 337405962, 235801144, 471087114, 471602256, 235542548, 479726094, 235542548, 337119758, 169357340, 403312142, 471604244, 169350172, 403312142, 347085844, 403971100, 168693258, 403971224, 168693258,
- 1840152, 4278190090, 20972256, 983200, 2949150, 4915260, 6946907, 8913017, 318767255, 353776161, 587600917, 891691553, 389428277, 353699362, 858986004, 892679730, 353838644, 858986004, 892679730,
- 572728884, 102893318, 370414869, 909259571, 640955701, 370414853, 909259571, 640955701, 17179171, 892675618, 557004340, 353703474, 623052308, 892679730, 589506100, 353699362, 339154452, 909259542,
- 640955701, 102900515, 909252373, 640955701, 102900515, 370414869, 857084983, 892679730, 589506100, 1611990562, 942178305, 1090394662, 2822252058, 168696852, 470682160, 805965372, 337382922,
- 349182996, 805965340, 18615818, 805965372, 337382922, 2969443348, 438712360, 639287297, 2164140088, 168696852, 470682160, 336862308, 805965340, 347082250, 805965340, 1679560202, 471077916,
- 170920462, 950010126, 639254568, 675289638, 337395768, 235801144, 471087114, 235550768, 339216910, 470031388, 235542548, 337119758, 169357340, 403312142, 4263255060, 539506876, 438707738,
- 1077422112, 169350172, 403312142, 338697236, 403971100, 168693258, 403971144, 168693258, 807146520, 337386516, 235801112, 393226, 46071552, 12779904, 4522030, 7995491, 10616977, 640759552,
- 640100134, 37631798, 370554423, 102176279, 101058310, 119670535, 101123590, 926299926, 370611718, 117839638, 925246982, 101123633, 352724519, 372315696, 909522710, 825503783, 823600678, 926361126,
- 37631798, 386014743, 117904918, 235341318, 36579074, 907424055, 892743733, 640099894, 338691846, 924190257, 387323702, 892351537, 640099894, 336856838, 924193841, 387323702, 822556182, 101131830,
- 640099879, 370546438, 1261835799, 402921494, 117768449, 943277349, 17443915, 238167809, 335612685, 622462211, 84607237, 201531160, 118228241, 1025312778, 252461880, 117706254, 270139905, 16978960,
- 152002567, 167974916, 944450570, 119883065, 402719236, 336992260, 488455480, 58796596, 318898440, 35262736, 235144961, 60100111, 437260308, 235079427, 51121935, 151128584, 825371910, 17564710,
- 639972101, 856836928, 235447324, 488508166, 302450952, 67174664, 436865557, 67208202, 84285733, 486937604, 302520891, 67175433, 149759510, 17105666, 285279236, 436404755, 33816849, 473438447,
- 134746532, 151521042, 101391901, 480577294, 638718515, 654640150, 33796661, 268501252, 318898970, 67371281, 50464001, 268501272, 335741467, 67174672, 33882372, 16910339, 34014815, 554108692,
- 621151236, 621151798, 1024, 1073856767, 285261825, 687873280, 13568, 842215699, 336663830, 572720646, 288695846, 840119860, 640103991, 101130787, 876025367, 101131815, 370611221, 841430583,
- 640103991, 101130787, 3225425431, 1227564570, 726215724, 236747302, 470682893, 218959388, 404245518, 404232216, 472913944, 235736334, 219028508, 3221294605, 3774749222, 724257068, 536947785,
- 1627268634, 404232216, 404232216, 219028656, 471600653, 235736334, 404232300, 404232216, 393240, 46202624, 12583296, 3014659, 7733354, 12320944, 389218560, 589707043, 352723491, 102900501,
- 102896917, 857084949, 842217014, 909317910, 372388662, 892744215, 891495988, 589506100, 119681285, 119932678, 386270727, 352716550, 370611221, 387384855, 387331862, 842216214, 372717111, 909522743,
- 909588007, 657732917, 657860390, 119940647, 589702950, 640098823, 842217015, 101127703, 117846309, 101123878, 101123607, 387192085, 386275094, 372708887, 858986007, 926299954, 909588246, 909588007,
- 657732917, 657860390, 119940647, 589702950, 337060387, 640091655, 909587509, 536942103, 2206216272, 341843987, 319660060, 219353869, 656884502, 373298755, 1126639427, 320015638, 1343034125,
- 51751166, 252709643, 100730635, 336921350, 252445956, 185601803, 269812491, 185271061, 118165264, 50726401, 100865301, 118165261, 185272081, 470291715, 235736334, 219028508, 67177997, 252709643,
- 101519115, 51713283, 185535750, 185209103, 353375491, 269159171, 219089679, 353698566, 252511747, 118621707, 352520971, 407704848, 404232216, 18356248, 442908800, 324015132, 219365389, 589107981,
- 589110563, 219356451, 222302989, 51740691, 185535750, 185012742, 269812491, 185271061, 252382992, 352519693, 218497813, 285674255, 51055112, 51712021, 252709643, 100730635, 2954167046, 404232216,
- 404232216, 218497947, 269421327, 352520971, 184751376, 185536523, 50728207, 100865301, 252382989, 51055121, 51712021, 252709643, 100730635, 2148860678, 218959388, 236723214, 920845, 4278190084,
- 25166560, 196768, 4784189, 16777301, 657659171, 859190321, 387396147, 353776179, 353776149, 589497876, 101979414, 639771398, 926168358, 336926243, 572720646, 875898406, 639771447, 859190325,
- 859190325, 657724723, 352716582, 924194580, 657728822, 352716582, 924194580, 1366360374, 337436061, 1813257825, 219352369, 554504979, 523443713, 18756383, 857604418, 506666783, 319627521,
- 219352339, 404232352, 404232216, 404750616, 404232216, 18356248, 342909024, 327686172, 219365389, 134746893, 505295647, 134750003, 857671688, 523443742, 219351048, 222302989, 236761107, 470682893,
- 218959388, 236723214, 470682893, 218959388, 327694, 48299776, 10486080, 2424847, 3407912, 318767180, 353776161, 587600913, 891691553, 389428241, 572728881, 369493767, 926291479, 370619191,
- 909522710, 588719911, 353776183, 572720660, 909391142, 572728887, 370414854, 372716083, 1026961971, 589706242, 1075119650, 639287297, 1090394662, 3223725594, 101650183, 151389512, 100930313,
- 319030874, 67504393, 3442087262, 168693258, 571346442, 706612491, 252714538, 235538951, 235538958, 438738945, 639287550, 1073814054, 227354138, 319393805, 151389444, 101255947, 152241157,
- 236464719, 235801098, 739117578, 505293316, 235341610, 174075914, 658958, 4278190082, 20971968, 983232, 318767157, 370611732, 909587991, 640955702, 923148835, 353769010, 856098324, 336926258,
- 354624262, 572720660, 590689574, 875898402, 640889654, 909391142, 337338422, 134809864, 438704916, 591406618, 320611130, 320015663, 219373581, 224400141, 789386003, 975379475, 874463233, 134744341,
- 523506953, 1713776154, 656620067, 219355201, 228594445, 2685211411, 319622419, 589775128, 50340666, 3237937152, 3221340161, 553654272, 15616, 842211603, 336663830, 840246022, 101979414, 572597027,
- 873542950, 102896438, 857084949, 352531745, 353706531, 355676948, 842216212, 842216757, 590624053, 590624035, 23077411, 319627296, 319622419, 4263513363, 943204576, 320015656, 2415919373,
- 806359088, 806363152, 271585296, 3221295136, 3237874963, 322966285, 940772621, 675283240, 327220792, 1074990349, 271593473, 275779616, 537948176, 1060880, 4278190085, 25166528, 458944, 3342370,
- 5439557, 354554624, 875901717, 909379363, 372388659, 842208533, 638915862, 117842467, 875889195, 322122550, 336922163, 572593942, 859125030, 857084949, 117838853, 640098822, 909391142, 389166647,
- 572986902, 856954133, 875901491, 875897635, 144705720, 2417435080, 440410391, 688457510, 2684885063, 1075455680, 352387520, 450428435, 219398182, 556244993, 555830817, 555820839, 656482638,
- 806359184, 18878480, 673712272, 555157512, 640161569, 587276570, 639262749, 151453951, 639056160, 220233754, 1109856275, 336794388, 1109862210, 336794388, 1074800962, 806359056, 786448, 46202624,
- 12583296, 3866671, 5439559, 7012447, 8585335, 10158223, 11731111, 857014528, 353703474, 53151252, 1025909281, 859190274, 909391155, 353776179, 875901717, 372388662, 892540181, 858994228, 873666098,
- 354558755, 858985493, 839202098, 590624053, 353706531, 891761428, 572728116, 856954133, 589640243, 336925986, 892482355, 874853429, 354558755, 858985493, 589772082, 336925986, 892482355, 890713141,
- 572728116, 856954133, 841167411, 590624053, 353706531, 874853140, 354558755, 858985493, 589772082, 336925986, 892482355, 873804853, 354558755, 858985493, 3758175538, 471602288, 543203348,
- 471073023, 235934748, 1074661898, 235538958, 1611930688, 274734100, 537923616, 280034832, 269492240, 270536784, 17834000, 269492400, 3237875744, 269492240, 546312224, 270536720, 270536832,
- 2416975888, 270536720, 273678608, 537923616, 270536720, 269492240, 537923616, 2425356560, 350229532, 3759414300, 1209799776, 168693258, 235554888, 810027534, 4263255060, 537923756, 269488144,
- 537923616, 270536720, 2685411344, 269492240, 273682464, 269492240, 270536752, 2416975888, 537923616, 270536720, 806363152, 270536720, 537980944, 270536720, 537923696, 33558544, 3774873087,
- 2684420098, 2214603520, 824246272, 101066530, 587597319, 925247266, 808780601, 926299442, 909588022, 640038710, 909521973, 370553395, 101061653, 640954627, 352723491, 101123605, 370414854,
- 387323415, 387323415, 118756630, 639771398, 656810535, 101123622, 387323670, 370553137, 370414871, 892744243, 909588021, 640955702, 656811559, 656811555, 926168358, 372388662, 926291479, 640099894,
- 922747175, 287050033, 186001938, 17302532, 134415361, 34342916, 1950685463, 1165248327, 204698693, 218892296, 252644105, 135464970, 84805890, 218629638, 34213897, 235405828, 134742787, 235274756,
- 134745096, 185208076, 134876942, 151062804, 100992270, 268897545, 34473992, 185075714, 268898826, 168495112, 16844554, 184747265, 304090375, 958545178, 1597519967, 945764665, 201865217, 51251212,
- 269878790, 84218895, 50397703, 84148996, 84214535, 50397444, 252119048, 33620227, 135201029, 235408396, 386270978, 101977872, 50464518, 67306245, 50660357, 134742530, 67243528, 4278386689,
- 46202877, 12583299, 5111846, 16777381, 640037937, 101065251, 387322901, 101058310, 101123591, 100809011, 842208791, 926299958, 909259542, 35522358, 372716083, 857085463, 657864498, 807612721,
- 640099879, 656811814, 875902518, 371664422, 101061653, 370487555, 118887959, 640091654, 101130787, 370611221, 370480918, 370546454, 117838869, 336922374, 639771398, 640038197, 640758055, 925247015,
- 370619958, 387323415, 892745522, 640034612, 640034599, 891692583, 909588020, 909391159, 18231859, 962541728, 356015929, 67699987, 33686279, 67764482, 537922563, 822873358, 945764664, 1379536056,
- 187775024, 270536206, 151257868, 50397441, 167970563, 857019141, 989935192, 185220707, 33687560, 202573838, 84281613, 151653893, 252315668, 218761998, 201852940, 50728456, 50857987, 67636739,
- 152046084, 101058573, 34147845, 168301320, 168496911, 134745100, 823132428, 1345269584, 355802417, 117771277, 16908802, 118164231, 403047686, 631132207, 102244922, 185009414, 16844555, 84345347,
- 890572044, 810429981, 940050436, 838940762, 50528526, 134744078, 67437826, 50529285, 33620740, 335939079, 102174735, 135136006, 252185612, 16909569, 135201537, 16975879, 17040385, 67568645,
- 33882884, 84345345, 252711686, 50661142, 202115086, 256, 2147598591, 587251713, 856883200, 353703474, 353776179, 587600917, 101979427, 639771427, 572732725, 875902246, 892547894, 548419124,
- 340794388, 1343495196, 337646620, 471093276, 475010076, 337428481, 538188880, 349182996, 3490978844, 337646620, 471093276, 2560, 180479, 83935233, 1560303104, 1795187712, 2013294848, 2231401984,
- 37120, 924259877, 823600934, 353777203, 589760020, 370607878, 637929238, 117842727, 587601429, 892806690, 102967078, 908470050, 656815927, 891684387, 857159220, 640104246, 372651828, 926291735,
- 859186741, 352785970, 909580054, 102111026, 622204167, 926291765, 822543911, 657929751, 925964038, 369567526, 656815895, 825693703, 386336295, 103233334, 657856263, 120006193, 570890006, 370414854,
- 892744243, 1375807028, 104923912, 218192918, 17634324, 167846664, 436865537, 976093449, 218960641, 775553299, 169478401, 17432842, 218171427, 17634324, 167846664, 152766729, 20590081, 319622419,
- 19806721, 168434185, 4263709441, 252521421, 1096754181, 372246531, 50868246, 92079681, 506137871, 252521372, 1096754181, 372246531, 86253115, 221383696, 218960659, 233968403, 505677071, 219349310,
- 973148941, 436797742, 184617482, 218171427, 17634324, 151724808, 17373961, 318847534, 18025741, 151072314, 17435162, 136511754, 336858369, 587727117, 151587329, 771819803, 137429289, 2097561604,
- 722210821, 220961822, 1596196111, 805831489, 137369110, 2097561859, 722210821, 102154526, 839385921, 319622419, 319622419, 1024, 180479, 654360577, 1107310592, 19456, 54210835, 641139485,
- 875898663, 656614182, 119677734, 102900487, 101127445, 54335239, 822293299, 556996116, 825570866, 587597621, 925312802, 856954146, 875901491, 354551587, 842216212, 3609408565, 203704146, 370606944,
- 827135004, 236130832, 471092530, 1610815254, 646980620, 444596506, 353491494, 2967081237, 278925328, 269525008, 17830048, 673646944, 287065945, 471084049, 621480741, 288101404, 1497832465,
- 4262012712, 640031392, 228707866, 273850637, 1074794512, 269488144, 512, 188671, 352362497, 8960, 892744197, 589706257, 656876067, 572728102, 336663814, 859255574, 336926258, 572728070, 909391142,
- 639287297, 278927910, 538120970, 640031360, 177240090, 2416578062, 537792010, 72230, 420292122, 4263126554, 3492158144, 235538958, 235538958, 512, 188671, 352362497, 13568, 640946469, 656548643,
- 589506087, 286590498, 556996116, 891631154, 891691555, 858994228, 859190325, 353703474, 353776179, 589497876, 587600917, 140834, 278927910, 538120970, 640031360, 444596506, 1089011238, 168693258,
- 168431168, 235552782, 239077902, 537790986, 639238145, 639244557, 448855578, 1078076966, 235538958, 235801152, 168706058, 171970058, 50335246, 3238001151, 3221307394, 671094272, 32000, 387384851,
- 387388437, 891688726, 926299700, 640103991, 19013923, 370611732, 909522738, 656815157, 101130790, 103880454, 387199253, 823596566, 370611734, 101979414, 352781831, 891429652, 656811573, 656552241,
- 389429030, 370546454, 909586995, 875902519, 656811559, 656811555, 640099878, 926299958, 842216501, 387323157, 654706454, 572728870, 184813063, 1074640656, 621937410, 275458111, 4263054091,
- 285284688, 1310794023, 656875809, 558768417, 24717089, 135005189, 117968903, 134810893, 101715978, 67175948, 251987215, 235406338, 50793224, 67436801, 100796427, 218629648, 151912705, 269486600,
- 51317256, 218566660, 50858758, 320317697, 168841184, 604045616, 826813224, 387154696, 663813655, 320017474, 656884244, 320017474, 33964564, 33751554, 84017668, 219088132, 84153101, 269486594,
- 33816843, 269419777, 50397445, 33620996, 50463490, 33751811, 251921157, 85069324, 269025797, 33687824, 68161284, 33817090, 768, 180479, 1711325185, 2013294336, 571670528, 570629382, 571806982,
- 571806982, 336925958, 892547862, 892548403, 354620723, 892540195, 842217012, 857019670, 590684981, 857027381, 857027349, 892679730, 891495988, 891495988, 1025713716, 589706242, 353699362,
- 640955683, 352723491, 875897621, 102900518, 891491605, 840115764, 588584214, 657863733, 842217012, 588584214, 219023992, 219352339, 1074598675, 538976288, 337399840, 542120980, 538976288,
- 320015680, 319623949, 168431117, 168699918, 238030346, 672008714, 319651342, 320017216, 1074990349, 168738817, 322969608, 219365389, 1611469664, 2157974285, 2692767840, 471602224, 2157981716,
- 2692767840, 224398611, 319643667, 1074990400, 235538464, 134744590, 168693258, 235538440, 134744590, 4043181578, 808455443, 223351565, 537727763, 768, 180479, 989904897, 1593856768, 825688064,
- 336922146, 370546455, 926364211, 640955702, 891429667, 589706293, 353699362, 572720660, 875902246, 102900518, 101979413, 891691555, 589706293, 353699362, 842212116, 370611734, 235344917, 639771394,
- 891692838, 37631796, 352723479, 842208788, 640955702, 152309539, 777264982, 156647776, 271388436, 386994455, 201852940, 386994455, 201852940, 386994455, 622047248, 84215580, 321199111, 119285011,
- 470222085, 319623973, 319622419, 253009939, 576653837, 174016293, 269750029, 387387848, 201884689, 295962636, 2752583447, 135007240, 387387780, 319866897, 134612760, 403113480, 119018259,
- 101189638, 538122247, 319622419, 319622419, 402653696, 671266815, 906018817, 27904, 119681281, 119940871, 118953734, 386270982, 386270999, 121059094, 924194566, 924194615, 388441910, 657864470,
- 657864487, 925312806, 119940918, 119940871, 387323697, 121059094, 387323654, 117835543, 655824646, 386271014, 589702935, 923207458, 119940918, 657864455, 925312806, 657864502, 924194599, 536950582,
- 1276642841, 185799444, 68770855, 1112806916, 386731025, 386009178, 892669463, 35067662, 219634184, 1413615884, 419693590, 319498076, 407639059, 84154630, 252579855, 151521032, 252777232, 218891011,
- 202182674, 168493569, 185143568, 202178818, 185471505, 286196482, 151523602, 235866119, 17043471, 895031488, 386863118, 402786388, 1093077784, 102044946, 135879704, 1280054537, 419957013,
- 352720988, 658575893, 35133451, 269898760, 1496649232, 269655064, 185206278, 235867921, 117965058, 218894353, 168494085, 235868689, 286396174, 84151050, 286264333, 33622023, 286199566, 101059083,
- 65552, 46202640, 12583216, 922747034, 117904945, 387192070, 117904919, 924194566, 353777207, 891692551, 909588020, 640034598, 909587509, 101058342, 387384839, 589497878, 353637666, 387192596,
- 587601431, 386277923, 842208790, 641087286, 639771427, 892745527, 892613942, 572728116, 909588262, 656811559, 370607654, 117838869, 370607622, 101979414, 909387527, 924194583, 640100150, 892745527,
- 640100148, 657864503, 101123878, 590611253, 335746338, 119940903, 66459398, 101066245, 352519462, 100926724, 33751578, 320224301, 436535557, 285476894, 188295176, 52167425, 119145475, 53346821,
- 68092931, 2183266563, 578965584, 251855873, 771949316, 436667650, 469959428, 957022467, 68225064, 85597704, 370345217, 50474300, 67508738, 51708933, 101066245, 352519462, 100926724, 134874397,
- 486869512, 67437574, 117507204, 17237506, 537133319, 67437574, 16908561, 793184318, 85078044, 991167503, 169285923, 1394345490, 469959474, 117835779, 35199491, 134426114, 1413677830, 100877140,
- 19858184, 51976706, 50857479, 839058204, 302390355, 588846858, 251925563, 472912389, 1040729903, 285278721, 100926724, 117507104, 17237506, 537133319, 67437574, 17105683, 4261939226, 319031014,
- 100926724, 768, 3221340415, 402702337, 2734694656, 286326784, 556996116, 892744243, 891495988, 288699954, 589506100, 319169057, 557004340, 639770901, 924201271, 908535606, 118896183, 118888198,
- 387323654, 587597623, 891692834, 657930036, 926168358, 925247287, 924260150, 355611444, 858928919, 370618929, 370607879, 117904405, 101127703, 656876067, 909587991, 909583911, 389424679, 101127958,
- 926357015, 806688278, 120664085, 387192070, 926036758, 587597367, 388441634, 926036758, 874981174, 875900977, 674772790, 220209153, 218960659, 537727763, 942203134, 17634112, 218169088, 101079571,
- 219874565, 17039895, 84286222, 537528336, 16845570, 16843265, 50532872, 33687570, 84673027, 235209732, 33685761, 302579969, 152175363, 33685761, 34406657, 268962336, 236652037, 386008065,
- 101063181, 34932229, 33760515, 33752066, 675023128, 403258408, 50660098, 52757505, 4267704578, 322447552, 1074990349, 1073810707, 4265087757, 1074990488, 84277011, 437978374, 33816849, 117840933,
- 119478807, 16844577, 16843010, 50398222, 235143427, 33686019, 67399432, 33688176, 17042946, 50397955, 33686031, 119736577, 118888992, 52763654, 437321987, 100992538, 268965126, 35717384, 50463492,
- 824579330, 34940465, 537134341, 268960001, 393224, 46137088, 12648768, 1310723, 3932209, 5701702, 389485312, 101000967, 369426973, 825566519, 623326261, 103879462, 387261735, 654706454, 387192103,
- 624367109, 120927542, 925247238, 822424887, 101127703, 925247271, 101123382, 926361127, 118888246, 924194609, 370619959, 654706439, 909583911, 3840205884, 385941257, 84220673, 4279638785,
- 235801088, 904855054, 251987215, 71211, 68106, 68168470, 4264890117, 84885557, 255856644, 1862337797, 84217664, 68173839, 86437637, 68167173, 237440773, 84879118, 1195901189, 1354647367, 353376263,
- 1493238105, 119017493, 4093510224, 777323781, 252642577, 411634949, 50548742, 2300053072, 252642573, 1395527941, 252707860, 251991045, 85205775, 335810575, 252645125, 201392396, 84872965,
- 201655564, 986885, 4278190083, 16843456, 14745797, 16122091, 120656640, 70850310, 387323670, 101062420, 387322901, 102041108, 117839110, 386270265, 656872727, 875898406, 657864503, 639043366,
- 587413798, 101134883, 117835271, 336922118, 370546454, 370611735, 857157910, 909115961, 924190519, 637998903, 352723491, 842208788, 102053687, 857084949, 875902514, 370619687, 909259542, 589706293,
- 925311778, 657921559, 54072854, 909391667, 909588023, 909522742, 656815157, 640099878, 639772454, 958604085, 117846018, 101131831, 353769239, 34539028, 657864501, 891683641, 657729318, 875902518,
- 909387558, 892745269, 87635766, 640100150, 353768967, 637994516, 823604277, 875898406, 353777462, 170980884, 16843014, 538509571, 16849184, 100729091, 690170378, 52044832, 185075719, 16909575,
- 67371265, 152241928, 304161044, 117903882, 16908548, 168296961, 541854216, 167969837, 336203278, 319825924, 269683981, 151912744, 168693258, 539820803, 168299084, 16843272, 84279554, 302649863,
- 152314145, 100927251, 16908546, 117833985, 117966859, 539236867, 170533929, 50462982, 538974465, 50397465, 168165633, 86247984, 470091527, 117900644, 3154189317, 17565736, 17105666, 540217090,
- 17773599, 84017409, 201392641, 403972872, 658839068, 168044592, 235276554, 50463499, 168690949, 673725459, 336337221, 16975879, 151191810, 721749772, 234954774, 336464394, 319364124, 219353869,
- 471664915, 168692745, 371133962, 201786667, 16843529, 100991233, 403510279, 1009264709, 68094483, 16909059, 235602689, 168429830, 657467396, 404493893, 201859860, 84083201, 873398785, 255008799,
- 33620225, 16908549, 153618444, 186388096, 319691787, 240591394, 470485788, 572658446, 4211016192, 100843775, 318817537, 13056, 117911827, 386270997, 841036566, 656881207, 640100149, 336933127,
- 101131042, 556996119, 657864498, 891757095, 891491619, 891491619, 891491619, 805612784, 419825173, 102350849, 70259974, 29364396, 118763521, 3221297159, 336004888, 1073807664, 1076903976,
- 1656488232, 219873538, 387454999, 33626893, 3303344482, 370024449, 236328727, 3234070816, 3233857728, 327872, 46202656, 12583264, 2097166, 3866668, 318767178, 353776161, 102900501, 891491605,
- 555169332, 353703474, 589497876, 589706293, 909391139, 353706519, 842216212, 590624053, 372384005, 101127445, 656876067, 87438389, 587600917, 891691553, 857085749, 25179954, 3759344960, 325068314,
- 222298509, 3222082323, 325065254, 537923837, 821956624, 319619073, 50528923, 18062082, 4279046957, 2282949888, 185404683, 219398145, 538584672, 2685603264, 230690067, 639270931, 1074990368,
- 269492240, 320868384, 24317197, 218985217, 227235091, 2332889875, 460645, 4278190092, 25166528, 1179840, 3670053, 6094922, 8519791, 13041852, 14483666, 318767336, 352716593, 857084949, 892679730,
- 640100148, 823599651, 353699335, 842208788, 875902262, 589702951, 103880482, 370414869, 892744243, 656880693, 119677734, 352716595, 857084949, 892679730, 640100148, 823599651, 336925958, 909259542,
- 657732917, 572728871, 101135111, 370414869, 892744243, 656880693, 388113190, 353699377, 842208788, 875902262, 589702951, 570754850, 336925958, 355676950, 352723491, 37426708, 875902514, 891495206,
- 892744243, 589706293, 353699362, 589497876, 589706293, 353699362, 891691555, 858141749, 35456546, 875902259, 102904614, 892535325, 858141749, 35456546, 875902259, 102904614, 892535325, 354825269,
- 219349778, 302191373, 1560807427, 219349778, 302191373, 1258817539, 218960643, 51512083, 1610811400, 219349778, 302191373, 1258817539, 218960643, 51512083, 1610811400, 219349778, 302191373,
- 1258817539, 218960643, 51512083, 4244834312, 940772811, 226541608, 2685211411, 320015776, 683704333, 218960696, 3222082323, 319622419, 320015808, 1074990419, 319640339, 229839680, 1393770515,
- 322966285, 103528705, 319619335, 117509395, 117910278, 17237547, 219353869, 721815297, 117846535, 320015617, 101122317, 721880875, 218171142, 17634067, 120260103, 17237554, 219353869, 721815297,
- 103483143, 319619335, 117509395, 839330566, 218171142, 17634067, 120260103, 219379975, 1077422208, 319622419, 319622419, 2150119488, 219353869, 2685603200, 219353869, 2148340640, 219353869,
- 1612718176, 219353869, 1612718176, 219353869, 1612718176, 219353869, 1612718176, 67113741, 3237937152, 3254878210, 1241521920, 1711297792, 822149120, 101058338, 103887111, 101058310, 555160597,
- 640955702, 656811559, 640037169, 855844391, 926364725, 353703447, 909391155, 353776179, 909259541, 640955701, 102900003, 370414869, 875901747, 372388662, 101122837, 892540181, 640100148, 286601479,
- 858986004, 891696946, 926299189, 143655221, 692197893, 369362948, 1677794840, 68556830, 1109984264, 1081607450, 387520791, 168431168, 319631374, 1627262227, 219353869, 168431152, 907074062,
- 168834720, 1075059792, 302385676, 113246478, 52179235, 772735493, 505358874, 254679595, 469894658, 4261815089, 320748032, 504567061, 235554874, 323488270, 319651853, 226495763, 235554835,
- 3003189774, 38021388, 204030978, 4262502919, 85726432, 310382093, 8980509, 4278190083, 16777920, 852167, 15532114, 370606336, 101123860, 874915623, 120993591, 842019121, 370618903, 370546454,
- 926298675, 825636662, 859190068, 336926258, 590426375, 587608369, 117835526, 572720646, 640034598, 640099879, 891695413, 875902000, 909588023, 842215475, 637939975, 926295591, 372388662, 118756630,
- 926364211, 842216246, 336925974, 656548614, 640099878, 926168358, 875902004, 859189553, 370618929, 857019927, 387330324, 370546454, 892744243, 589706293, 117908003, 371401478, 101061653, 656810531,
- 640099878, 875833126, 892417063, 808465716, 909456433, 909588023, 372453939, 370611735, 823537941, 370546454, 857085463, 875902514, 570567462, 891692839, 842216244, 640955702, 2063671843,
- 268764432, 84937483, 1460342789, 67174657, 201787908, 353177631, 50661128, 218958081, 16845075, 134415105, 388369676, 118303260, 33751818, 16974338, 33883393, 453681668, 184813576, 857679134,
- 221317918, 672930569, 943204357, 186197544, 33817358, 84804097, 16908805, 67174657, 320407303, 219353869, 453578245, 286730012, 891501091, 168300864, 16908547, 17039617, 33817346, 50463746,
- 33620226, 134873859, 438710798, 270149158, 134682377, 337776129, 269753372, 68205313, 202376206, 235147276, 1242304516, 100795137, 118031874, 33817605, 219351297, 50465293, 117901058, 101586701,
- 67372301, 67305730, 50659585, 1778647298, 168494088, 504760347, 387522355, 941366025, 942170152, 185927954, 101192459, 16843270, 33754625, 33686019, 134873859, 219353098, 152243552, 589110299,
- 757283363, 169413915, 16976132, 16843010, 16843009, 33620997, 33685762, 50397699, 252052996, 622530568, 371595803, 235012632, 471077916, 768, 2147664127, 117489665, 419500289, 336789504, 875897379,
- 823603763, 572728884, 370414854, 389231155, 101123590, 101123846, 101058310, 640098851, 640038183, 589702695, 336922146, 389165846, 370480918, 370546454, 926298675, 101062422, 117835271, 101123590,
- 572720647, 640034598, 352723491, 842208788, 387323670, 857085489, 909522738, 926299703, 102176278, 117835526, 102900486, 857084949, 909588018, 909522742, 842208823, 387323447, 370611734, 909259542,
- 589706293, 640034594, 656811559, 372717110, 370546454, 842208791, 842413878, 859190837, 875902514, 102900518, 587597319, 656811810, 640099878, 640034598, 372717095, 909259542, 926299703, 909588021,
- 892744243, 572728884, 101058310, 117839111, 639771398, 656811559, 656811559, 925312550, 909259570, 589706293, 336922146, 589694743, 908527394, 572724279, 842216501, 269488336, 438710288, 438707738,
- 269419266, 151390745, 134545924, 34146308, 151257860, 117901572, 235539732, 50596366, 151259396, 219416327, 101193230, 16908549, 33620225, 84279812, 235341829, 337578765, 168693258, 17568266,
- 270207490, 185078555, 33882883, 51453452, 218891527, 235539469, 504564238, 118557195, 134416646, 50857992, 285672969, 320735755, 168693258, 218631180, 50791685, 34348561, 184746757, 270209545,
- 33622555, 168432140, 336203278, 235735839, 84215815, 33817094, 16843009, 100991234, 219026952, 151455508, 50596100, 235801092, 118754570, 151259399, 33817348, 134481929, 151257605, 270076422,
- 436339471, 437921318, 487591974, 270344995, 269537296, 2147553296, 269488144, 438707738, 169747994, 201788440, 168165893, 50661381, 83955204, 168232462, 235538958, 17695747, 117837317, 134744842,
- 50791173, 134349826, 101516812, 101123588, 168431117, 17172238, 286000385, 118035208, 269092623, 168953862, 235802138, 286132746, 236718860, 17438733, 219679233, 202054670, 168431121, 352783886,
- 135399948, 118099974, 319358735, 84676872, 117833985, 235538958, 117835277, 101582084, 67241996, 50791170, 185075462, 235276042, 68026629, 168431107, 101124622, 234947854, 134546180, 33950213,
- 201788421, 639502872, 640031258, 521279514, 304023817, 269488152, 1280, 180479, 67158017, 285215744, 738204160, 825688064, 121055014, 909391142, 387266358, 889652785, 891760919, 336921118,
- 387322917, 909586966, 640955702, 119678503, 903874054, 428301865, 2653767978, 2273785129, 4264183854, 993740096, 1161509770, 2319137605, 54868795, 474882825, 1345336108, 2695759670, 477759779,
- 906473070, 858992720, 572749381, 1165370146, 572749381, 7742242, 4278190083, 25166528, 1835200, 3014693, 875631360, 389429047, 353703447, 353703447, 640955683, 352723491, 875897621, 923219767,
- 639771413, 87307573, 370619683, 101979413, 189532640, 688475147, 438722583, 392177178, 1348978473, 1342315540, 471426896, 151868161, 1275792204, 409799945, 1625627406, 438707738, 236709216,
- 3996676120, 475796508, 238612136, 471096348, 1024, 3221348607, 251699201, 721427712, 14592, 372384019, 101978389, 639770915, 909381941, 352723479, 857084949, 892679730, 355935796, 842208788,
- 875902262, 102900518, 352723479, 857084949, 892679730, 20981300, 640031296, 448855578, 224011814, 218960659, 322114323, 320015629, 2148732173, 219353869, 18027277, 4263126688, 640031424, 440402202,
- 219398182, 320015712, 319643661, 319668288, 230690067, 328012563, 319627277, 220204307, 262163, 31522560, 10486208, 1900559, 3735595, 336658688, 572596998, 873542950, 841036598, 640943894,
- 102900515, 857084949, 389427763, 352723491, 858986004, 875902514, 640943910, 102900515, 857084949, 20329011, 4263126720, 640031424, 440402202, 219398182, 320015712, 319643661, 319668288, 230690067,
- 328012563, 319627277, 220204307, 4267704595, 640031424, 440402202, 224011814, 218960659, 322114323, 320015629, 2148732173, 219353869, 1250061, 4280287234, 27328960, 721098, 16777266, 654706452,
- 926168358, 118888246, 370607921, 589497863, 875898402, 657666870, 926361126, 842217014, 909580055, 102110998, 654706439, 1610688294, 538976288, 538976288, 393489783, 3491563785, 286725905,
- 236598871, 671821839, 437856791, 186715192, 1477247754, 168890637, 304447489, 621941523, 320016933, 1448799506, 387717905, 655823121, 1562197780, 606214164, 218368813, 1208688908, 235078155, 512,
- 2147663359, 771801345, 23808, 117846273, 387323654, 353703447, 891429652, 589706293, 353699362, 387388948, 892745494, 656880693, 875902246, 656811815, 117835558, 640099889, 117900807, 336925958,
- 352716551, 370611221, 909522743, 640955701, 352723491, 572724245, 926168373, 909588023, 1593910823, 33686283, 89588225, 219353104, 708121357, 202182569, 218844950, 118294392, 88278279, 218564357,
- 185432071, 202184271, 891988239, 319622419, 1459949584, 33685762, 129696003, 84411917, 185177860, 1343230037, 219353869, 189082742, 151651373, 118972432, 1225523995, 179573785, 16908803, 33620739,
- 3020555010, 206182420, 386341635, 168366176, 1158360324, 319649324, 273681683, 151737616, 117769367, 67112199, 3237937152, 3221340161, 553654272, 1476409856, 553713664, 352723491, 857084945,
- 352723477, 858986004, 892744225, 52835345, 336926258, 891364102, 523384375, 118887938, 102110983, 101132071, 657930022, 926365222, 909521927, 370618931, 640091655, 352723491, 842208788, 370619959,
- 572720647, 1610688038, 220258558, 218960659, 537727763, 942153729, 319629368, 16715027, 34079410, 50599689, 17109507, 336855815, 83953411, 67306258, 975415575, 85992995, 168166146, 926361609,
- 101321000, 537199107, 591012646, 219398145, 319668478, 218960704, 19413011, 4265093184, 218960768, 82460691, 16848388, 370082568, 201524485, 84214540, 134418198, 588513537, 68428602, 33621510,
- 942090040, 101056770, 975377667, 512, 180479, 419479553, 28672, 640037925, 101065251, 370545685, 926298675, 926029335, 656880694, 824653366, 370611733, 101058326, 572728871, 336922119, 387323415,
- 387323415, 336926230, 117835526, 587600917, 892675618, 824649254, 640099889, 909522726, 370611735, 926029590, 657732918, 656877094, 640099878, 909391142, 892810807, 842217012, 950010134,
- 1597585759, 962541624, 2115649314, 151656970, 353599241, 134941372, 235012616, 218895112, 84215305, 151062798, 252315668, 218761998, 201852940, 50728456, 50857987, 67636739, 152046084, 101058573,
- 34147845, 168301320, 168496911, 134745100, 1597632524, 962541624, 356015929, 151617299, 2114591242, 243941146, 235078401, 34080776, 84149509, 67306244, 117571843, 252970502, 101062416, 201854467,
- 17762316, 16843269, 117968643, 16843528, 83952644, 67372804, 16909571, 100992770, 370085907, 235078919, 789512, 4278190083, 16777920, 1638592, 3604523, 640951552, 102900518, 370414854, 909259542,
- 840308535, 657733175, 657864231, 101061681, 656541191, 875889198, 372388662, 857084935, 875902514, 102900518, 1597546497, 945764665, 574185272, 176036415, 151587354, 2148864895, 67838233,
- 554370062, 555822873, 219377711, 219353869, 972034829, 1597519967, 945764665, 159322901, 169478665, 1111431806, 237975064, 789447941, 790698038, 319627567, 319622419, 262163, 46202624, 12583168,
- 2097173, 3801136, 120657664, 639771398, 926364725, 859125046, 117904405, 51647750, 859190325, 102183475, 857150741, 117904405, 639771398, 926364725, 590820662, 859190325, 353776179, 538580399,
- 1076246568, 1074634778, 337387571, 185405024, 1932771360, 942153754, 3222945830, 1611930816, 270343188, 807942163, 538128413, 168857744, 541074992, 336625665, 353568796, 1087381520, 940791590,
- 807219240, 279978003, 337386516, 512, 1073929983, 469803009, 15616, 640090881, 102900515, 857084949, 924194611, 856897334, 875902514, 572728102, 103880454, 118953748, 370611206, 389494578,
- 909586966, 925312820, 640103478, 654772002, 453059110, 605241685, 320015662, 191245837, 1762006293, 320015816, 571852813, 705235304, 168364330, 690555418, 151656970, 153758217, 169478665,
- 436873513, 3741217281, 219357296, 313529101, 18088706, 218960745, 179247635, 690555418, 151656970, 153758217, 169478665, 436873513, 705235210, 33556778, 3237937152, 3221356289, 1124081408,
- 339017728, 842208790, 640103991, 572720675, 875898406, 842217014, 909579827, 572728871, 824509958, 117900807, 387384838, 101127446, 909588246, 907417367, 925247271, 656815671, 656876071,
- 1950687782, 204288327, 135070467, 945764615, 121200440, 50531592, 1194405132, 1996572020, 1191510559, 855900934, 151063555, 67387142, 17368639, 855900428, 1191576324, 52363781, 1950859276,
- 218436165, 1597505805, 945764665, 84741634, 812926226, 167839040, 839125761, 105252099, 35717895, 117645570, 50677254, 17499186, 88081675, 268437504, 4026646783, 50380801, 838863104, 956315136,
- 1073757184, 17152, 588722469, 656607015, 823604023, 875902519, 656614182, 119677734, 102900487, 387388437, 336922119, 389231382, 926036758, 909259575, 656880693, 654783281, 117913379, 389093159,
- 120788771, 706057217, 913978892, 913865270, 1846482437, 404229432, 258881804, 909509910, 1846482437, 404229432, 258881549, 711656982, 456554773, 353703295, 915286549, 1478724379, 1482184792,
- 252381527, 336878614, 185538140, 156718857, 1528172299, 375067925, 2936605455, 1680628258, 596451874, 67120184, 3237937152, 3305209858, 620762880, 1375745024, 117506048, 855776518, 909391155,
- 353776179, 892547861, 656880693, 842208038, 875902262, 589702951, 554108706, 589702961, 101123874, 370414869, 387134259, 118895155, 102110983, 101131043, 589768482, 926361122, 859186727, 842413875,
- 494482945, 219377680, 275780365, 3221911837, 203823680, 117900608, 2164136965, 117900572, 638337029, 281493530, 50660640, 67244048, 34611205, 537920010, 268567557, 84148752, 167907360, 409254913,
- 1625846310, 219353869, 645064800, 4245251096, 2216306427, 88542738, 85925637, 302925573, 19274372, 67640452, 134487068, 470025244, 471598088, 68945924, 2816, 2147664127, 218152961, 520098048,
- 1258309376, 1426084352, 1526749184, 1627414016, 337051648, 639771398, 909381941, 353776179, 287379745, 353776165, 587600913, 288695842, 335623732, 389231382, 926036758, 909259575, 656880693,
- 875902519, 656614182, 119677734, 102900487, 387388437, 823592455, 589771559, 118960951, 588724003, 656869175, 856105751, 925046535, 336862304, 336862236, 4271898908, 349176192, 336862236,
- 2298354716, 523831051, 101452806, 185022751, 35462402, 523831051, 101452806, 185022751, 52174082, 1445598588, 507911937, 292701726, 269558049, 1261049151, 554700833, 319627281, 3221294355,
- 219353869, 3221307646, 4262269728, 320015680, 230686989, 130481683, 168441355, 84347702, 70332421, 906692357, 188090890, 822347015, 607847728, 875836492, 476584988, 405027868, 1854492, 4278190082,
- 16777920, 2359488, 285212740, 859059505, 370612018, 926032179, 842217015, 101979413, 588587811, 588587829, 588587829, 639771445, 639771415, 859190325, 353776161, 589497876, 587600917, 892675618,
- 101979425, 891691555, 822215437, 33627933, 36773151, 337382659, 1080049680, 336609376, 220217372, 17634067, 320015808, 219357197, 16716557, 319622419, 222523393, 185275393, 1124925716, 1077943316,
- 1077952576, 219397148, 219353869, 230691597, 3222082323, 320015808, 196621, 46202624, 12583296, 9109636, 16777366, 570885894, 101123591, 370611735, 858986007, 117904661, 101123846, 101123591,
- 370480135, 370611735, 858993175, 101123605, 857084949, 370414899, 892744243, 336933685, 909259542, 355677493, 842208788, 859125046, 875902514, 891758119, 909324851, 909588023, 874984503, 640099879,
- 791029543, 842216706, 909588023, 640103991, 656877095, 640100134, 572728871, 386336263, 889334549, 858982195, 355676977, 419496747, 51854643, 100861186, 50397441, 134743812, 639632647, 67240733,
- 16843524, 67371778, 654508550, 236137760, 219359242, 329257741, 2685603085, 319622419, 319687208, 52895789, 67437826, 16843267, 50594564, 522657026, 151455238, 33686535, 50725121, 386073093,
- 35205949, 84215042, 1845625349, 1615343688, 404261024, 404261000, 615121288, 33687312, 67766276, 84083972, 67438640, 17370394, 67371777, 67372038, 67306500, 203637249, 235541252, 320015648,
- 220209165, 537727763, 320015648, 168697869, 587990035, 50594114, 67372036, 67437828, 151060739, 84154893, 84084024, 134874371, 16843268, 287576071, 33685762, 1081803265, 4235328, 4278190082,
- 20972250, 1245350, 16777267, 587663142, 353699362, 858986004, 909579799, 389288245, 101130790, 118953748, 370611206, 389494578, 909586966, 925312820, 640103478, 17237794, 2265912109, 640031300,
- 260523034, 124326675, 117901076, 117913399, 923210759, 118753079, 926353159, 336004871, 2634102535, 645402121, 639254554, 134811256, 360710421, 117901180, 926353172, 117904391, 121059079,
- 118753031, 336017207, 923207431, 1024, 180479, 318816257, 822093056, 15616, 101065217, 370545685, 891691571, 842217012, 640955702, 656810499, 909587494, 372388662, 118756887, 335742470, 639771398,
- 859190325, 336008754, 909259542, 589706293, 67106, 875845429, 942159191, 942155832, 1984243768, 589439523, 1984251254, 589439523, 219358582, 219353869, 322966285, 320015629, 18025741, 894907520,
- 942954293, 943204392, 4265093160, 993740096, 1161509770, 2319137605, 21314363, 320015712, 320015629, 320015821, 320015629, 1024, 956481791, 503367425, 973090304, 22016, 590815543, 859059490,
- 572733235, 858993717, 891429687, 926102324, 555951670, 320276002, 353699362, 556996116, 892679730, 119744052, 875898402, 372388662, 50730005, 119940913, 370411014, 926357015, 656881206, 637994790,
- 924194615, 3760600631, 1645346817, 308940816, 2215645308, 269522450, 319030943, 383778320, 336265756, 18095132, 471602208, 319655956, 319622419, 288151827, 623191309, 739314981, 369362440,
- 371266055, 118628630, 1611006998, 1074794560, 272633872, 420419600, 3036550431, 337646620, 538188828, 325065748, 320015629, 18025741, 252320961, 1667916584, 470421288, 973673221, 1090716178,
- 302121793, 1247546, 4278190086, 29360576, 1573056, 3276833, 4325434, 285212762, 857084945, 909259553, 589706293, 892744245, 589706257, 102900003, 859190291, 572593441, 118751526, 589501461,
- 641021218, 859190325, 570889778, 842208277, 337065013, 875901491, 386343459, 370619959, 370607879, 656868871, 640091655, 640104247, 674772535, 220209153, 218960659, 537727763, 942203134, 17634112,
- 218169088, 536871187, 537935888, 790700335, 269488240, 269488160, 1785362960, 252053262, 101666125, 1785335303, 252053262, 101666125, 4267704583, 322447552, 1074990349, 1073810707, 4265087757,
- 1074990488, 540868883, 269487379, 438309645, 269100582, 269488144, 1896878096, 252063278, 555812622, 101649927, 252063278, 555812622, 986631, 4278190082, 20972224, 2031809, 16777251, 353768199,
- 721818645, 891691522, 322384949, 926295591, 387388982, 389428791, 855840278, 2030110503, 470608688, 351334420, 820710428, 168428296, 656869403, 168434440, 2021155075, 1015808375, 319871998,
- 471602200, 269686804, 171713793, 50858011, 170995978, 453511171, 2627496702, 520094720, 537051391, 771801089, 1610635264, 26624, 117842433, 656815157, 117843495, 387388934, 353703446, 858986004,
- 875902514, 925049638, 857084949, 54343218, 639771398, 909186855, 54343223, 573645620, 34550023, 822226723, 573645606, 338756381, 823596567, 842208790, 588523319, 859059490, 891426610, 355611444,
- 843055380, 607132244, 34934024, 135073793, 674762764, 320015760, 327694349, 269683981, 289022992, 219226767, 218301707, 88081691, 84086043, 84152075, 269821198, 269496336, 271585296, 69648,
- 609625903, 16844086, 353176848, 302055682, 942202892, 319622419, 319655277, 549457171, 488834052, 371133210, 18112538, 621872139, 287639046, 335612676, 119020384, 101781254, 269488218, 269488160,
- 4278321168, 29425659, 12583365, 3932187, 354620160, 101070115, 891491605, 859190836, 370553395, 891491605, 354887220, 556861219, 370612018, 354616839, 572720660, 557135142, 587600917, 892675618,
- 925247266, 821573175, 806752816, 1076050467, 807615011, 3358593558, 152330241, 151652368, 218960658, 318832403, 303238413, 268962313, 3499098377, 371526341, 975405184, 591012643, 622231680,
- 304137482, 252710688, 320015712, 224419853, 1611469587, 537923343, 131090, 46202624, 12583294, 4063266, 102891776, 387192070, 370611734, 842208791, 657864502, 587597606, 891692578, 909588020,
- 640099879, 640954627, 875902503, 119677734, 572728870, 102044934, 370414854, 909254963, 1463152641, 1059849012, 252781314, 423962381, 184943881, 1109921037, 170010920, 118227459, 35399225,
- 353968431, 672803852, 942547512, 554697000, 884998447, 269497687, 271334913, 421331236, 34212616, 692201474, 85148713, 16845580, 740184318, 554240005, 437521967, 100739128, 942154805, 4278386735,
- 46202878, 12714368, 4390967, 16777311, 117909041, 101131815, 117834255, 118953734, 521541382, 370611714, 909522743, 572720695, 909391142, 353776179, 842216981, 657864499, 637677350, 370611207,
- 875902519, 101131815, 640954625, 875902503, 119677734, 572728870, 102044934, 370414854, 909254963, 117974529, 134694727, 1426981384, 84083720, 50671921, 240453636, 117966850, 455476249, 942148619,
- 942155832, 84025886, 67306790, 34493704, 538976414, 538976288, 653263136, 556728860, 738989337, 574105626, 19413038, 19865872, 822412223, 67306801, 34493704, 1191643144, 134743879, 156503554,
- 285541379, 51261983, 942155832, 285288504, 134743863, 139791874, 319956427, 623186451, 303239954, 740228094, 554240005, 437521967, 100739128, 942154805, 196655, 33554432, 8388992, 6422618,
- 922746996, 926168369, 335748358, 891429638, 892810293, 993408564, 387330564, 909391127, 353776179, 118888213, 587597319, 640100130, 354891061, 589497876, 892675618, 336922374, 892674595, 656548614,
- 572724245, 656815413, 587600917, 891691555, 856950069, 590624050, 389096738, 926036758, 875902519, 572728102, 1611928838, 404889351, 924850190, 272642081, 339616646, 168431157, 67896334, 286917652,
- 136973849, 537727776, 286200589, 134746128, 269486088, 219352849, 18025760, 269488336, 393739792, 573583394, 168625943, 3758951090, 370217536, 102770725, 302916120, 557191967, 471867447, 235540042,
- 89262606, 291902481, 205460757, 2686464271, 219353869, 403049048, 17895440, 269488385, 1477051928, 219353869, 269504672, 571971856, 151459618, 168627466, 655369, 29425424, 12583408, 1769486,
- 3473449, 5439556, 7143520, 8978554, 640750336, 909588276, 118895155, 654706183, 909390087, 370546455, 637929223, 908460341, 387396147, 117904406, 388441606, 654709781, 926295591, 51787319,
- 353777201, 570885908, 892674595, 822556468, 640099106, 389428277, 353703447, 640755476, 909588262, 370612018, 824518406, 117900822, 926361122, 118960694, 656541233, 859186727, 118895155, 639775015,
- 859191095, 387396147, 824378902, 42862344, 33883139, 101516110, 755503190, 1006830342, 637602564, 50595074, 134712834, 51185205, 1006898028, 772080387, 120655880, 28117514, 890111745, 179110145,
- 245434122, 84412870, 68289871, 84345686, 117771265, 117877257, 302274051, 201493253, 151277314, 151622153, 151628036, 151343108, 1342507268, 17369348, 85001538, 67633506, 50529932, 84478478,
- 101516315, 100926812, 134486785, 285565441, 50536453, 108729350, 106693892, 85656589, 16842505, 67831561, 238356288, 71322369, 17368843, 873398547, 268534023, 134707208, 17434006, 17827885,
- 2500200724, 92473096, 268994821, 272107536, 134778888, 1050768, 4278190083, 29360573, 983234, 3145760, 101126912, 387388437, 909588246, 656880693, 640747302, 353699335, 370611988, 892679735,
- 121055028, 336925958, 926357015, 875902262, 2949195303, 146671881, 151633416, 147330991, 2669217800, 134744072, 134787296, 429852680, 3053520904, 151586144, 67397637, 151586152, 2886492165,
- 151323909, 1460542661, 151323909, 1610942936, 3624469856, 67372297, 3306950231, 263433, 4294901507, 20972224, 1441984, 4587582, 924254464, 909247035, 640955701, 640099107, 640099107, 386343459,
- 36382513, 640100130, 101058342, 370546455, 370414871, 909259571, 857093429, 336934706, 842216214, 336803126, 875897379, 906048051, 269813104, 237969696, 236075018, 118567956, 1392710668, 504406128,
- 50595353, 218959127, 520487939, 537727766, 723849997, 219358507, 806554912, 269488144, 507519489, 169353519, 386798094, 1089213449, 218959896, 219611907, 136517647, 320015846, 320041741, 320015731,
- 277872909, 67112976, 3238001919, 3221323778, 1140866304, 1610632192, 352387072, 387388437, 118756630, 101130757, 336922119, 370611735, 858988851, 875902514, 640100134, 389231925, 842216214,
- 657732918, 53159463, 386271010, 386270999, 825693974, 808529968, 587597616, 875898402, 120653109, 924194566, 386271031, 640889622, 640103733, 794820870, 4262397228, 235209836, 100794629, 17105935,
- 773996688, 1779964992, 319627298, 471078171, 807221514, 208674832, 738788355, 16845353, 100783115, 4262332945, 101285555, 1167657733, 184812553, 226695400, 960758049, 741294638, 17762053,
- 252052004, 84280581, 1073808654, 254942254, 354948674, 337384205, 642583824, 537332491, 185271573, 268969730, 33688078, 185102384, 1008206347, 722078471, 156703794, 65539, 29425408, 12583423,
- 922746936, 909391153, 372388662, 102110998, 572728871, 336922118, 117839383, 572728070, 101058311, 336926231, 639771398, 572732469, 909391142, 370618931, 909588278, 827338656, 120670763, 185143042,
- 506666764, 151389197, 223939080, 17373962, 421724675, 420225817, 119087907, 152833287, 1505167643, 640634929, 185084226, 857604610, 135863327, 151060753, 203163931, 588842760, 587995427, 35854617,
- 453574915, 786442, 46202624, 12583168, 2490386, 4849720, 7077980, 9175164, 10879132, 12189872, 638910720, 909522743, 370611735, 101123846, 640034598, 654706471, 119677734, 640100102, 859191094,
- 370546482, 926294789, 387388982, 119670550, 656868870, 822421030, 909588262, 387323670, 589497878, 640099874, 370618661, 101123591, 572728070, 926299942, 840382006, 336925974, 572728070, 875902246,
- 857813814, 353703474, 589497876, 892675618, 855979572, 353703474, 589497876, 892675618, 857814580, 353703474, 589497876, 892675618, 287782452, 891429652, 842216465, 588518663, 875902242, 353841715,
- 891429652, 842216501, 118575361, 152241183, 50731551, 319308808, 167903494, 102041630, 352781831, 151264776, 488446986, 4262005276, 521798134, 520360713, 50401287, 1124602631, 1073808137,
- 155520773, 68158484, 1342836225, 16911882, 272939518, 33620230, 173017614, 268697870, 171643908, 1342836238, 168693258, 173047809, 1342836238, 4262333962, 235557002, 173017614, 2315324942,
- 235801168, 235556874, 269516302, 272633872, 2148536336, 269488144, 234955777, 118115346, 136057606, 103613716, 33621507, 34753656, 302121217, 51513932, 302188038, 101915706, 306972936, 50725646,
- 335883526, 755700865, 621413638, 235801128, 777126922, 67507210, 168693258, 84550952, 805965460, 168693258, 235801136, 235548682, 170920462, 168722446, 235801136, 235548682, 170920462, 805965326,
- 4276096522, 17830128, 4029681680, 284168208, 269545488, 83890416, 3237937152, 3221291010, 369103616, 1560296448, 30464, 370413841, 875901747, 892547894, 891691555, 102900533, 118826757, 353699362,
- 858986004, 892679730, 354558772, 589501461, 875902242, 355611443, 842208277, 640955701, 573649699, 387192070, 336926231, 354558755, 842216212, 657732918, 875898407, 892482355, 573776692, 387192085,
- 842208791, 892745527, 572732469, 118756629, 875902246, 640686630, 226545690, 639279123, 947945473, 286725905, 269947152, 135268368, 268963848, 1964054288, 622533139, 271256840, 437463824,
- 218637595, 1074794531, 84221456, 84150536, 269488158, 4269801744, 2418416256, 328214042, 1512472589, 400588928, 387010577, 268964119, 134744080, 134744144, 285741072, 487791127, 151195916,
- 437260301, 286006547, 269289731, 891293712, 117901356, 540355592, 589303824, 539172639, 327696, 29425440, 12583328, 1114120, 2949151, 318767198, 353699362, 640955699, 892540167, 572728884,
- 336926470, 909259542, 640955701, 386277923, 857084949, 892679730, 572728884, 338757382, 572728070, 858993717, 875902514, 572728102, 336925958, 387323671, 857084949, 892744243, 892745269, 572720693,
- 587605798, 230696738, 2366849043, 218960704, 219398163, 219353869, 325063437, 320015629, 1611861261, 272113194, 387004432, 441979159, 336340262, 2685211419, 589107981, 555028751, 286462214,
- 331350287, 225472525, 1347436563, 219353869, 320015712, 319643661, 222317843, 1074598675, 1695748877, 269494814, 386994455, 890968614, 219417637, 320015694, 1125539853, 403245351, 592659,
- 4278190083, 25166272, 2752704, 4325430, 372643584, 857085719, 909588274, 370612018, 926364211, 387397174, 909259542, 640946485, 102900518, 336663814, 926036758, 587600915, 875898402, 372388662,
- 891691543, 842217012, 101979414, 135924264, 134743327, 503913221, 134552329, 136250632, 84609562, 873072646, 1463104855, 101190196, 219382533, 219353869, 224400141, 218960659, 135467795, 102959618,
- 168435462, 587597343, 151519754, 17304068, 878130446, 4264908596, 67766514, 319626241, 319622419, 219360531, 219353869, 33559309, 3237937152, 3221307394, 922757376, 824508416, 335939351, 840308503,
- 875968311, 572925735, 908527367, 640100134, 119677731, 336922119, 336926487, 370546455, 336922117, 926036758, 656877111, 2650875686, 117901329, 118753048, 403113816, 134681607, 302843152,
- 305736237, 170859550, 655839240, 2482907664, 606022939, 151700247, 3540322086, 336005138, 117905415, 118753112, 134678296, 288233232, 353117994, 84544004, 388042027, 2282557478, 757015575,
- 151448347, 460582, 4278190096, 25166528, 983232, 3211296, 5308481, 7405665, 9502849, 10682522, 11862188, 29819070, 16777217, 389165878, 336926230, 639771398, 87438389, 842217009, 353768983,
- 572720660, 909391142, 909390103, 842217015, 353768983, 572720660, 859191078, 370546482, 587600917, 875898402, 909383478, 842217015, 353768983, 572720660, 859191078, 370546482, 587600917, 875898402,
- 909383478, 842217015, 353768983, 572720660, 859191078, 370546482, 587600917, 875898402, 909383478, 842217015, 353768983, 572720660, 489817382, 892674818, 489829172, 892674818, 489829172, 892674818,
- 489829172, 892674818, 489829172, 892674818, 489829172, 892674818, 857024308, 892679730, 842217012, 336925974, 354624262, 353776179, 36374036, 875898402, 892547894, 891691555, 859190325, 353703474,
- 858986004, 859190325, 973149746, 33817602, 168693252, 4262333962, 67371748, 235799554, 235801098, 33820226, 67240964, 168431118, 67260942, 235143684, 235538958, 68039182, 33817602, 168693252,
- 45223434, 67240964, 168431118, 238161422, 67371524, 235799554, 1376651786, 33817602, 168693252, 1108217354, 67240974, 235143684, 235538958, 537929982, 1344278608, 279978000, 537940000, 2686455888,
- 320015808, 940772621, 226541608, 2685211411, 320015776, 683704333, 218960696, 3222082323, 319622419, 50576641, 168763143, 252317198, 50538783, 168763143, 252317198, 521088543, 117637895, 235540255,
- 50544398, 168763143, 252317198, 521088543, 117637895, 235540255, 50544398, 168763143, 252317198, 521088543, 117637895, 235540255, 50544398, 168763143, 252317198, 521088543, 117637895, 235540255,
- 1611673102, 274731024, 269508624, 1611665504, 274731024, 269508624, 1611665504, 274731024, 269508624, 2953842784, 224398611, 1611469587, 322975784, 320015629, 1074990349, 224405560, 1611469587,
- 229643021, 50336531, 3237937152, 3221291010, 1056974592, 19712, 656880439, 1060386086, 842216962, 353763871, 855772948, 875898407, 892745527, 589706293, 101123874, 387397383, 252974358, 572720642,
- 891683375, 906116916, 570634803, 370414854, 909254963, 589706293, 671911744, 237505291, 67832835, 185280526, 1573850152, 20710147, 67503883, 1863790995, 84219142, 100795925, 352715270, 102040837,
- 4127589890, 219353869, 319668225, 589303059, 202113806, 187174403, 51259403, 235145996, 134795299, 76875528, 185073924, 891248131, 33953064, 100795910, 335939092, 101057030, 85263874, 219400446,
- 219353869, 67113741, 3204383744, 3338764289, 1023412992, 1509968128, 336789504, 909579799, 640103477, 823592455, 858986007, 857084949, 892679730, 808529968, 875901232, 102900518, 656610581,
- 103163686, 386270983, 370414871, 892744243, 656880693, 369504519, 926291479, 656811831, 641085751, 102900515, 369493767, 907417367, 404275255, 404232216, 238229528, 237443598, 235801098, 521013770,
- 421400860, 135595565, 219367961, 839783181, 218956687, 436410125, 335873322, 67898882, 419900187, 805964803, 16912393, 219028624, 471600653, 235736334, 3625260243, 168693258, 235550968, 722995726,
- 470222617, 421745689, 319640394, 341380371, 228930062, 218301207, 103441421, 302829574, 190519841, 34078994, 83888650, 3774873343, 2550235138, 2030071040, 2365621504, 38144, 335950081, 117839639,
- 53159462, 352456241, 101123860, 907417366, 336934711, 842216214, 372585782, 355938867, 858986004, 892679730, 891691555, 891692597, 355611444, 387323668, 336926486, 892482355, 336933685, 892482355,
- 892745269, 640099892, 925316149, 640103478, 637994786, 589439779, 388113959, 572720660, 909391142, 387330611, 875898402, 372388662, 654709781, 891429652, 389165876, 859059490, 18093362, 50792343,
- 1025049346, 119087135, 137582390, 151454742, 302256905, 222301459, 555818771, 1074598687, 220205837, 270801939, 33692688, 537924110, 537935888, 437325584, 218894613, 336004871, 269487879,
- 285475360, 239211527, 235801098, 1477315082, 168693258, 1645088266, 269488144, 269488176, 336040193, 50529031, 906104842, 303314521, 68356401, 688457476, 320015735, 202132493, 320015692, 219365389,
- 573967627, 388304912, 51052803, 269488146, 537923600, 403972363, 252184872, 118297367, 117901076, 118556175, 235801280, 235801098, 168431138, 168431118, 269512718, 269492240, 33558544, 3237937152,
- 3221307394, 1493192960, 824508416, 101986581, 101979399, 639771427, 656815413, 336925735, 386270983, 587601431, 656876067, 909522726, 656811815, 336925958, 639771398, 909391157, 993408567,
- 909521923, 355598907, 371401492, 118756629, 656877062, 354563875, 892482324, 297795892, 537727759, 101061389, 135074900, 319099908, 118956560, 102371346, 186451458, 168694018, 539758090, 907486987,
- 975396885, 273686563, 571868688, 168372243, 269496336, 386060816, 228855590, 2232226579, 51905025, 202710276, 272566792, 825497114, 169216557, 219418922, 235550740, 557320718, 370345010, 270744099,
- 1260196624, 252120613, 274732050, 1052688, 4278190081, 21037760, 3473600, 909190400, 875898663, 572728102, 655693062, 102900518, 352716039, 858986004, 857084949, 925247283, 908470071, 370546455,
- 857147143, 657798706, 37106227, 889979200, 220204307, 218655507, 4278586117, 219351552, 1712989728, 1426786079, 185862204, 100730485, 444278353, 220201254, 185450771, 319650094, 1579486483,
- 3741647623, 319688202, 874912416, 1397164300, 1560810251, 1124404997, 2686068288, 65555, 31522560, 10486144, 318767192, 637929265, 926295591, 858994231, 353769010, 842204948, 101979414, 117842723,
- 372388615, 587600917, 336922147, 842216214, 372651831, 117839383, 589497863, 891692578, 572733236, 909391142, 926298931, 639771447, 859190325, 875902515, 572728102, 453641850, 167970824, 725035782,
- 69088287, 320015636, 50480141, 319650610, 199560467, 556471325, 453641753, 167970824, 725035782, 69153567, 320015636, 67191821, 319650867, 199560467, 556471325, 134564865, 453642755, 505545992,
- 252714804, 319622419, 320668161, 219352333, 337450002, 167970821, 84417290, 523444002, 219352848, 33624845, 218960669, 336727315, 196637, 33554432, 8388928, 2555931, 16777267, 353769010, 587597332,
- 656876067, 119677734, 589497863, 891692578, 120993332, 924194580, 657732918, 621152038, 386271010, 926036758, 19277622, 863858720, 137383984, 118952488, 386338832, 805840914, 2100506704, 538976336,
- 538976288, 624951584, 303239954, 319956261, 2147553811, 943218489, 790833487, 590286350, 943214377, 633354591, 303239954, 319956261, 538645011, 538976288, 2105376, 4278190082, 16777952, 1114272,
- 16777244, 50799153, 370414854, 909254963, 52900917, 590419750, 101123874, 925312802, 185860097, 388041176, 555192321, 755750921, 420089905, 302321669, 295698767, 269395966, 388047127, 1493241360,
- 571326481, 2115569158, 1024, 2147664127, 50380801, 1358974208, 21760, 892540161, 372388647, 101979413, 555033379, 336926258, 354624262, 353776179, 587600917, 891691555, 859190325, 354497843,
- 353776179, 587600917, 891691555, 859190325, 572732723, 909391142, 590684467, 892675618, 855848500, 354493237, 79155, 346067072, 806624284, 319619073, 811601171, 337386516, 471602336, 16723988,
- 471602224, 471113748, 1613763612, 219353869, 338690049, 2155617308, 2151678336, 1077968897, 1611930688, 320871444, 538119437, 341840924, 1611930652, 538975252, 341840924, 1611930652, 320871444,
- 538119437, 341840924, 1078001180, 67125312, 3774808064, 2684452866, 2650809856, 2919278080, 825688064, 892745511, 589706293, 352723491, 387388437, 587597575, 892675618, 858994228, 353703474,
- 572720660, 372311847, 372716083, 875770646, 875897655, 842216246, 640955702, 119677731, 906116404, 589706293, 589702691, 117842467, 352723491, 353703700, 353703700, 991303188, 909521411, 875901237,
- 656877094, 386271014, 353768983, 572724245, 590611261, 353699362, 101058338, 841155101, 640955702, 639771427, 857093429, 657930034, 856954146, 389297458, 892482324, 3055690548, 235342857,
- 235540490, 218631175, 420612617, 457185830, 185669925, 353572105, 822740745, 941105184, 218630670, 135074579, 235934230, 906822410, 908214306, 235537165, 1715212304, 27197757, 658269758, 252980549,
- 135136259, 269494819, 287052816, 2685537807, 219353869, 86383168, 219354374, 269488192, 269488224, 134544144, 168036357, 67767822, 67634440, 303629574, 640031253, 420615450, 17443589, 455419164,
- 319687176, 169020685, 18154242, 235540742, 472130588, 101779982, 387781889, 1715274023, 1046887484, 911158529, 251855881, 184747278, 274998331, 537931792, 269753360, 303892489, 219361296,
- 438702861, 101318913, 269488240, 269488144, 196624, 33554432, 8388864, 2359320, 922746942, 926299185, 842217014, 370546454, 117838869, 572728870, 640026374, 387330583, 572720646, 909518630,
- 370414887, 857085463, 909588018, 875902262, 640034598, 117842467, 339740166, 726342172, 471484972, 571017236, 1530016347, 3221752098, 421084963, 1059267391, 3711899929, 1495474482, 593047857,
- 556937761, 825317667, 841032537, 236718576, 219156493, 101260302, 336726032, 268964372, 151587618, 151587595, 627058699, 319885622, 907088147, 908419109, 320016657, 3543313, 4278190083, 27263422,
- 721095, 5177408, 118751488, 891692806, 389429044, 118818582, 640098822, 909588276, 387396147, 370611990, 372388659, 587600917, 656810531, 370607911, 101123862, 640034566, 640104247, 574043942,
- 923214371, 118953750, 572728070, 909391142, 406847795, 404232216, 3256358936, 169478679, 572000521, 806425136, 134616890, 319624470, 487918867, 520424241, 67898681, 219612189, 436407309, 118428247,
- 369296159, 453710642, 520948489, 320015686, 479199501, 235736334, 219028508, 26938893, 168364311, 571935258, 923930373, 219354127, 455086861, 136598028, 224726814, 386138892, 188111117, 3227391274,
- 101784617, 219356441, 50336525, 3774808064, 2684436482, 520096768, 12032, 859190289, 353703474, 639771427, 841037621, 588584214, 353699362, 572720660, 873542950, 841163521, 875902262, 842216246,
- 101061653, 471077916, 319623216, 672137584, 572106040, 639244838, 2959101953, 185612328, 857608437, 471101441, 324015132, 674783245, 85533376, 438707738, 4263194625, 86521941, 521146379, 67116595,
- 3187670527, 3221340929, 587208448, 1342189312, 822149120, 589702708, 352716322, 353834516, 858986004, 892679730, 570897974, 909391142, 353776179, 339150356, 639771398, 859190325, 822416946,
- 387388934, 386270727, 926357014, 926291479, 656877110, 657864247, 117909030, 17180199, 675358576, 589775144, 1611469597, 589107981, 320015816, 320015629, 218960771, 218960659, 114032147,
- 2256931849, 101058828, 2998012953, 101062924, 2256931849, 101058828, 2998012953, 1073813772, 589511203, 941695802, 319624721, 286657811, 219352888, 219353869, 220205837, 218960659, 210703123,
- 1128465945, 202119430, 1499006473, 202115334, 1128465945, 202119430, 1499006473, 16779526, 3221225471, 3238101250, 3584, 369504531, 907411735, 656815671, 84289025, 34079238, 101976144, 4245160454,
- 18090160, 101976247, 33960190, 101976072, 34000897, 4278124800, 33734399, 2315305473, 823328768, 387384839, 926299189, 353703478, 892482324, 389428277, 353703446, 656881207, 909588006, 370611990,
- 909575943, 909522743, 118887959, 117900807, 387388951, 101123606, 640100134, 370616103, 101058311, 925247015, 656881207, 572720646, 101132070, 102110999, 656803335, 926361127, 117900807, 640091654,
- 909588262, 640104247, 908470055, 387331639, 387388951, 926361127, 370619958, 35692054, 337195012, 269487111, 420808204, 537003056, 168364036, 220267282, 72366362, 302191361, 50924041, 1008404755,
- 319363900, 168364291, 18023186, 439963652, 302194957, 67635466, 537133600, 656881665, 69206328, 134488066, 51513865, 958008609, 318833744, 151654915, 152240905, 440220699, 151196425, 51513865,
- 1342439699, 554506809, 151654915, 1419706632, 238027781, 50931480, 269158153, 168233744, 405211396, 84160526, 51513940, 1426655236, 456727074, 154731521, 302187273, 152778762, 453579796, 51513912,
- 956893443, 958071044, 173285914, 302187528, 67458058, 926361376, 84156455, 51513940, 1426655236, 456727074, 154731521, 302187273, 152778762, 453579796, 51513912, 956893443, 958071044, 156574234,
- 302187528, 184551168, 1610793215, 402702337, 872425472, 1140866048, 1409305600, 553713664, 352716322, 101123604, 386270982, 842216214, 909522742, 322319413, 892745266, 589702708, 352716322,
- 924194324, 875898402, 372388662, 621155349, 891429652, 389165876, 891429652, 389165876, 859059490, 924063026, 891429652, 20067124, 451215036, 151919148, 168233220, 3994224905, 201793297, 459741471,
- 723130923, 439097883, 219819034, 218960659, 2214466323, 269488144, 269488192, 269496336, 269500432, 3221295120, 1278564148, 487530602, 269553422, 2300318226, 4268372343, 894907557, 875845429,
- 1463104855, 438730804, 438707738, 271590938, 269488144, 270536720, 269488144, 1052688, 4278190085, 25166528, 6357184, 7471206, 9306238, 489755392, 117908994, 387388422, 572720902, 336925958,
- 372454166, 335939351, 840308503, 387331895, 857084949, 892744243, 389494325, 926364182, 656880694, 842217270, 909325622, 389165878, 892679735, 589506100, 926364725, 640099894, 101123846, 656610581,
- 589506086, 387384866, 389358371, 118888242, 656548614, 87439142, 875898402, 372388662, 117838869, 875902514, 589440806, 101058338, 1612059669, 152505875, 33818121, 320015624, 50530317, 386468102,
- 101260041, 219350536, 135466272, 453576198, 151590665, 134349830, 273683213, 370679091, 286725931, 100862520, 420219913, 1779499526, 337643568, 2854623850, 270561575, 387389230, 388902423,
- 18290455, 235801230, 235801098, 775169034, 470025250, 873730327, 543195137, 386795265, 101260041, 219350536, 135466272, 453576198, 151590665, 134349830, 219353869, 100860680, 152504585, 134613275,
- 369955590, 236652826, 387001627, 85202722, 101062924, 570756105, 309862949, 1612326422, 673759328, 673720360, 247474216, 235801098, 1074661898, 841163828, 638324739, 3417110, 4278190087, 29360576,
- 196800, 1507338, 3211294, 4325434, 372708096, 587671319, 842217014, 640033283, 859255861, 101979414, 389089030, 909452055, 859189559, 370553395, 587600917, 875902499, 119743270, 926299185,
- 639771413, 117838885, 372388647, 202916848, 257055553, 471607360, 19085859, 975372798, 2487171463, 185217037, 810627420, 273812753, 3427017007, 220339491, 390070545, 338704656, 846201116,
- 1145314581, 16723235, 153303587, 587794183, 1614291770, 201833576, 827404289, 454365453, 694300449, 296163655, 52040223, 50338911, 0, 2147581954, 637540864, 12800, 353776129, 587600913, 656876067,
- 119677734, 589497863, 288695842, 389232180, 924194580, 657732918, 621152038, 386271010, 926036758, 36054838, 640031296, 304576794, 538971680, 672276494, 640031352, 538976282, 538976288, 2147557408,
- 320016933, 304424210, 17961747, 4279903872, 589699584, 1075649856, 18490915, 2955287040, 320016933, 304424210, 454169363, 538976288, 538976288, 1024, 180479, 604028929, 1409301504, 27904,
- 101003521, 354558755, 117904405, 387192070, 842208791, 859177271, 892678707, 909588276, 640100148, 253887266, 336922114, 857080351, 906116914, 36647989, 589702438, 100798242, 35591189, 1060254486,
- 875902466, 825698087, 100798242, 35591189, 1060254486, 875902466, 19268143, 82706128, 84943622, 705301360, 168758794, 117772033, 1443106832, 117966598, 33957651, 101069838, 100798004, 856621574,
- 255002118, 44236290, 235013638, 872810036, 101057038, 104009474, 107557638, 102434562, 34020102, 117573126, 453379611, 3120628231, 470811894, 174261511, 705302031, 805374730, 118820869, 319250436,
- 4261873671, 255002336, 33949186, 101069838, 100798004, 856621574, 101112326, 100798259, 873333254, 238290438, 33949186, 453409039, 101057031, 102434562, 34020102, 117573126, 50333211, 3237937152,
- 3221291010, 922753792, 21248, 859190273, 353776179, 555943444, 875898402, 841036598, 640955702, 639771427, 859190291, 892744243, 555951668, 875898402, 841036598, 101979414, 639771427, 891691527,
- 858994228, 875902514, 572728102, 909391142, 372388659, 587600917, 219357185, 943204384, 230751784, 17634067, 320015680, 319627277, 537727808, 219353869, 319652094, 2147552531, 674773032,
- 3759344928, 219353869, 320015648, 319651853, 679480595, 19413048, 940772768, 322447400, 320015629, 320015629, 319663614, 319622419, 319622419, 942155832, 219378451, 219353869, 219353869, 674763533,
- 33568808, 3237937152, 3221291010, 805315328, 100728832, 117905172, 103163654, 335939335, 840308503, 909522743, 37692967, 909587990, 640100148, 640745762, 389429047, 117904919, 2298554118,
- 822741001, 1059001869, 320053528, 305468248, 118560930, 154209541, 151591178, 436879369, 185323774, 1108020066, 190974731, 162988299, 822675993, 268830222, 890479128, 320034834, 524228769,
- 154209813, 168362248, 155191834, 185312766, 1108020066, 190974731, 4278452235, 46202873, 12583175, 8585263, 10158223, 875640064, 891696950, 859190836, 907482674, 353776179, 842139412, 353776177,
- 589497876, 572728870, 572728867, 572727815, 572720902, 353633574, 842412854, 118756887, 842139440, 353776179, 572720660, 370480675, 570820372, 338112551, 101979412, 891691555, 587609396, 640098822,
- 925906740, 572727842, 909391142, 640889395, 926164533, 840380982, 892613655, 842217012, 656541462, 859191078, 118888242, 656548102, 859191078, 118888242, 35464454, 538915614, 622333493, 16920353,
- 943204353, 537341224, 318964500, 51584799, 119542787, 20457517, 151060768, 168429851, 16843010, 219353869, 167903490, 152766730, 218960642, 151060755, 168429851, 16843010, 219353869, 167903490,
- 152766730, 219349249, 485495565, 235736334, 219028508, 2214661645, 218959388, 236723214, 3759017229, 185152032, 506666762, 790371105, 940050465, 305670184, 370677782, 37238802, 168428033, 34151177,
- 319622419, 453574913, 34212361, 218169601, 34411283, 168428033, 34151177, 319622419, 453574913, 34212361, 218169601, 411898643, 404232216, 404232216, 404232216, 1579032, 4278190086, 21234366,
- 2031808, 4849723, 6750296, 16777333, 372453937, 101127703, 370414854, 909586995, 101127703, 656548614, 640034598, 53884455, 639770929, 926299189, 859190325, 907482674, 353776179, 370542356,
- 84284437, 118887985, 654706183, 926361126, 370619958, 101123862, 640034566, 909522743, 370553111, 101058311, 925247015, 389428791, 117904918, 640091654, 909588262, 98631990, 50465798, 857216266,
- 201852709, 285804037, 101063215, 570565649, 1095239450, 942207230, 674767406, 353119258, 36643097, 4264502812, 100927940, 135529760, 537199369, 157815558, 85984772, 50923540, 319168517, 100927848,
- 135529760, 537199369, 157815558, 85984772, 50923540, 319168517, 201441281, 671876364, 20129048, 134941186, 587272977, 221388817, 2164145710, 891562040, 942145798, 789451802, 84477985, 790699564,
- 135464484, 100927792, 805835781, 100991753, 154142739, 335873540, 50933768, 135464453, 100927792, 805835781, 100991753, 154142739, 335873540, 50933768, 1024, 180479, 536920065, 1157640960, 22528,
- 841036087, 640955702, 589443107, 640955702, 638001699, 102900518, 387192070, 336922118, 120657686, 336925958, 909259542, 657732917, 572728871, 352716567, 857084949, 892679730, 640100148, 823599651,
- 336925958, 909259542, 657732917, 572728871, 1073831943, 674773032, 788660481, 236463393, 857677877, 622658078, 102965560, 471077916, 84026118, 102997509, 471077916, 84026118, 470186757, 102503444,
- 84214307, 674791426, 134756392, 454831905, 523443745, 839453450, 876095520, 51186497, 337386516, 1091243267, 188810244, 471073549, 218305564, 1157906699, 335744267, 51649564, 71371533, 4278517764,
- 46071806, 12583168, 3080224, 4980798, 922746970, 909254961, 589706293, 908272176, 589706293, 640026402, 101065251, 102175765, 370414854, 103162647, 369493767, 926291479, 925251127, 117843505,
- 387319303, 926365206, 907486774, 103163686, 369493767, 926291479, 117843495, 387319303, 926365206, 23078454, 943204416, 33620264, 405086511, 522204430, 486678067, 18495525, 805573129, 151652100,
- 70255634, 302673671, 117714948, 68290826, 3943105584, 168363780, 70255634, 302582279, 302666756, 117714948, 68290826, 2147943472, 942155832, 790693896, 505486108, 185212723, 673198601, 117711416,
- 302673929, 168231940, 68290928, 1879639812, 67375626, 158337543, 302586642, 151454724, 68291184, 2399799044, 1879639812, 67375626, 158337543, 4278648850, 46137342, 12714368, 3538986, 5374020,
- 7209056, 16777354, 117909041, 101131815, 117834255, 118953734, 521541382, 370611714, 656815927, 875898406, 389165878, 640104246, 352723463, 909514516, 641152567, 117843475, 387319303, 926365206,
- 641148470, 101123846, 907417366, 641087287, 117843511, 387319303, 926365206, 641148470, 101123846, 907417366, 641087287, 640954679, 875902503, 119677734, 572728870, 102044934, 370414854, 909254963,
- 117974529, 134694727, 1426981384, 84083720, 50671921, 240453636, 117966850, 369172536, 455620634, 170136599, 639262210, 472516628, 806355457, 537269000, 134743045, 102761748, 319313668, 67444742,
- 85198856, 1459881504, 537269000, 134743045, 102761748, 319313668, 67444742, 85198856, 1107559968, 788667430, 202709281, 942152236, 674770466, 790695937, 84131585, 50671921, 240453636, 117966850,
- 134694727, 1410204168, 84083721, 204481319, 942152492, 1058021902, 438733576, 773722908, 201721355, 50719998, 336080905, 151192837, 101910576, 805896965, 84218888, 137365763, 50660883, 336080905,
- 151192837, 101910576, 805896965, 84218888, 137365763, 740194835, 554240005, 437521967, 100739128, 942154805, 327727, 46202624, 12583298, 5177399, 9240686, 318767276, 387322929, 336922119,
- 842216214, 372651831, 891361047, 370611990, 909522710, 723920679, 656876034, 875902518, 589702950, 654772002, 119677734, 587269638, 336925987, 842216214, 859125046, 857084949, 1026961971,
- 389096706, 370618903, 337053447, 656868871, 640091655, 640104245, 926103095, 842217015, 523383091, 370618882, 337053447, 656868871, 640091655, 640104245, 926103095, 823604791, 389158679, 386336534,
- 654706452, 654706471, 657929510, 859191078, 859191095, 135282738, 371133516, 705564930, 671289094, 134963201, 169543699, 336069643, 3676323878, 88869133, 33686552, 771883781, 84083246, 17039874,
- 325099648, 319627277, 537727904, 3858633485, 16979978, 68223489, 352518914, 33751829, 16912644, 169345793, 1828913922, 403309059, 33620227, 50463761, 51713283, 285475331, 50397442, 2013399576,
- 16979978, 68223489, 352518914, 33751829, 16912644, 169345793, 16974594, 102043808, 370347870, 85723423, 1465779973, 186190598, 453511172, 154343946, 337052744, 84217607, 36449282, 4262397189,
- 222314681, 1074598675, 320015680, 2369798157, 50529300, 51843074, 167903746, 33686026, 34608899, 335807235, 68420355, 268567299, 33686295, 34212354, 386073090, 50528784, 50533380, 50529300,
- 51843074, 167903746, 33686026, 34608899, 335807235, 327683, 29425408, 12583360, 6226007, 7274599, 318767223, 152897058, 842208788, 926233910, 924194614, 892679735, 656868871, 889653030, 387397175,
- 892811030, 656868871, 889653030, 387397175, 892811030, 656868871, 372582182, 924194583, 640955703, 570820359, 117909031, 388379701, 891429652, 389165876, 859059490, 118756658, 891429652, 389165876,
- 859059490, 538187058, 219353869, 1077941005, 575227195, 1280254485, 1178088720, 272515903, 573391425, 890260559, 1128220216, 1111560254, 1280254509, 555423760, 1111560223, 152050989, 924995107,
- 1125336379, 269488144, 269488160, 269488176, 269492240, 331350288, 540614669, 541073472, 319635527, 273681683, 455286032, 571869197, 119675917, 554634263, 119279118, 1041242397, 119675917,
- 554634263, 119279118, 1041242397, 119676172, 52429579, 421332750, 303113232, 303170823, 269553435, 274731789, 269488144, 806359056, 269488144, 269488144, 768, 2147599103, 453033473, 956312832,
- 339017728, 370611734, 370414869, 889339447, 656811572, 875902246, 34473766, 117838853, 640098822, 909391142, 389166647, 572986902, 370414854, 892744243, 1345267252, 118099762, 791564082, 168768080,
- 776942087, 370810881, 370553878, 370547226, 437655092, 320015712, 320015629, 978859248, 1074659848, 134285575, 875845690, 34028120, 151469839, 1463420929, 220994148, 739052813, 220994074,
- 739052813, 218960646, 218960659, 4278321171, 46202874, 12583173, 4063262, 573641472, 102044934, 572720902, 370414854, 909254963, 589706293, 656811555, 589706293, 336933123, 101131042, 556996119,
- 657864498, 891757095, 891491619, 891491619, 891491619, 1007553272, 218303063, 17634067, 320015744, 1460273933, 3356102204, 338690305, 18351879, 101128384, 16855059, 809510976, 3221301312,
- 168495630, 219364439, 219353869, 1463554829, 235539210, 25485566, 387321376, 537794071, 2155906049, 2155905152, 1024, 180479, 453033985, 956312832, 16640, 842216961, 117904405, 118895159,
- 587597319, 891692578, 926365236, 118822454, 117842439, 370611206, 909259542, 657733175, 336012838, 639771398, 859190325, 571938354, 842216501, 3993048085, 17629954, 185146955, 1578919429,
- 928790582, 145829686, 577438480, 286331196, 572668945, 286331196, 321010705, 320015629, 269683981, 17829904, 51184063, 268681986, 909095176, 909663287, 90578014, 1948125451, 1142824482, 572661278,
- 507780638, 224403998, 218960659, 275583763, 1052688, 4278190086, 20972224, 524480, 2031638, 4784189, 16777330, 875897621, 372388662, 101978373, 891691555, 859190289, 570496562, 859125030,
- 319165461, 353776179, 587600913, 339027490, 639771398, 101058343, 925247015, 925247287, 118753078, 891692806, 389429044, 389091606, 336925974, 639771398, 354891061, 572720660, 872627494, 389165878,
- 372388631, 587600917, 656876067, 322961409, 18025741, 218960704, 218960659, 228654611, 1393770515, 320015744, 320015629, 17960205, 219546113, 520294157, 151650848, 404232385, 404232216, 319432216,
- 538119437, 319622419, 387914276, 319636265, 340331795, 2684421390, 319660192, 1090391315, 219353869, 319668225, 320077331, 228630541, 318767635, 226557453, 218960659, 51122451, 33754893,
- 3684371734, 1342901006, 218959388, 236723214, 4262333709, 269300703, 320015675, 1613444365, 219353869, 439812554, 321525284, 236129549, 131077, 29163264, 12648896, 5046327, 372314880, 118756630,
- 353776179, 370542356, 587600917, 640103971, 909583139, 572925734, 386270983, 875898406, 891696950, 858994228, 892745522, 925247284, 118888246, 389165831, 101123862, 926361127, 640098851,
- 3979753271, 16855075, 520693274, 186922026, 571147782, 134749458, 220335373, 487135648, 153037349, 605035046, 50599446, 171312645, 189150214, 2684945412, 101321226, 67847732, 178260228, 906346497,
- 638060836, 84873754, 874783025, 991957008, 185213199, 504725514, 555691783, 302974257, 286336283, 135073055, 149227271, 168519947, 134774791, 191433480, 125831178, 768, 2147672319, 553689089,
- 1593851648, 838926336, 353703446, 842208788, 875902262, 572719662, 353698318, 842208788, 875902262, 840382006, 336925974, 909259542, 640955701, 102900518, 336925958, 909259542, 909391157,
- 909521927, 370553395, 370414869, 892744243, 640037941, 101065251, 370414869, 892744243, 1950826497, 218960709, 1951937043, 1484014146, 218960690, 1198802195, 219358746, 975377165, 591012643,
- 319622419, 1227589158, 726215724, 319622419, 1044276796, 219364454, 1610683149, 1615295557, 219353869, 1484014176, 1951937074, 319643714, 1197477139, 650134900, 319643674, 593497363, 975381306,
- 319643683, 442502419, 1227636774, 742992683, 320015712, 1715363853, 1046887484, 320015712, 327693, 48299776, 10486144, 2818060, 6815817, 285212825, 891360561, 589702708, 101065251, 523383077,
- 370618882, 370607879, 656868871, 640091655, 640104245, 926103095, 386348599, 370618903, 370607879, 656868871, 640091655, 640104245, 926103095, 842217015, 523383075, 370618882, 370607879, 656868871,
- 640091655, 640104245, 926103095, 588723767, 370414869, 909259571, 355677493, 858986004, 37566002, 370414899, 892744243, 589706293, 353699362, 1025647380, 33762050, 742992672, 726215904, 33857537,
- 33823756, 85263105, 67306241, 50600217, 51643651, 486736385, 210108940, 16909340, 17110275, 419693315, 50529305, 16978949, 203227906, 2483291138, 470548996, 50397700, 50398485, 421069827, 84083460,
- 33620756, 34348291, 219381764, 3222474048, 222301459, 556736531, 219361057, 269488909, 1612726304, 1077936129, 724257068, 419632201, 33817604, 50535188, 218956290, 67240450, 67245083, 51971076,
- 67377411, 454296068, 33686275, 33688845, 337314818, 67372034, 419627801, 33817604, 50535188, 218956290, 67240450, 67245083, 51971076, 222322848, 1074598675, 320015680, 807419917, 556740385,
- 320015664, 269496333, 83894352, 3237937152, 3221323778, 788537600, 1258306816, 22784, 909521939, 387330611, 372388662, 842216983, 336926230, 589497862, 572720646, 572729126, 839198246, 101979414,
- 639770915, 859190325, 353776133, 589497876, 875898402, 841167670, 101979414, 639770915, 859190325, 587600951, 891691555, 858994228, 656414258, 773466177, 623977491, 269422652, 505295647, 286990131,
- 739776556, 1093171985, 172491303, 4262071822, 235801264, 168821002, 1879707150, 168693258, 235801168, 179371530, 3356102158, 174590478, 1745489422, 805375498, 287785256, 505815055, 523443716,
- 253637407, 655298833, 168736833, 168693258, 241176074, 235801098, 235801098, 235801098, 1208879626, 168693258, 921098, 4278190085, 16777920, 721088, 3538973, 6815829, 102891776, 857084949,
- 875902514, 639764262, 926164519, 842217014, 336992022, 621151751, 101979441, 336922119, 909259542, 640103477, 875902246, 102900518, 372388151, 336925974, 370611761, 101061653, 640033315, 909587509,
- 892417079, 322319924, 891691569, 892810804, 355611444, 353768981, 2684421652, 219353869, 219353869, 218967066, 439094541, 218967066, 4264299789, 285608358, 790700335, 470353425, 807146516,
- 18756383, 1093082625, 658581544, 503382302, 471080755, 269487634, 18616846, 218960768, 218960659, 370835475, 370553878, 370547226, 437655092, 369992784, 555423240, 455159599, 219547670, 471602340,
- 523443804, 33620388, 1093153063, 675358503, 16918321, 857711617, 476118558, 85463060, 3541045459, 336599045, 327708, 46202624, 12583168, 1900555, 5570614, 16777320, 572720660, 909391142, 118895155,
- 370611732, 909522738, 656815157, 101130790, 842082054, 336925974, 353769238, 572720660, 926168358, 892679734, 822556212, 103879701, 336922119, 842208790, 875902518, 874980903, 640955697, 102900518,
- 875631366, 875898662, 353706531, 336922118, 909259542, 219398145, 219353869, 444601101, 372512278, 370809366, 370553878, 471117850, 789644809, 288301345, 1545341190, 656277761, 1093150785,
- 16850471, 522138398, 312483379, 235933710, 336862226, 224395548, 218960659, 437064467, 218959148, 437922829, 218959148, 470166541, 353215764, 555423240, 455159599, 219547670, 807146660, 33620388,
- 1093153063, 675358503, 16918321, 857711617, 4264762910, 85463265, 856690739, 336599045, 33561628, 3170828288, 3221291010, 1090529792, 825556992, 641152564, 909521973, 387330611, 372388662,
- 839324693, 372388146, 721818645, 641087234, 119678503, 639771399, 118894885, 389165831, 101123862, 926361127, 640098851, 624310071, 857604637, 238362655, 790701336, 671154434, 1076377656,
- 134749458, 220335373, 942157715, 101337601, 67847732, 178260228, 872811018, 67373894, 3758792713, 185152032, 506666762, 790371105, 940050465, 993536040, 185213199, 607680010, 191433480, 142608138,
- 1762330632, 2148010507, 262151, 29425408, 12583360, 1507343, 3080226, 909381888, 372384051, 117904405, 639698694, 372311349, 639702807, 656807719, 336926241, 656810759, 104018199, 587597575,
- 926361122, 17634102, 118295145, 4261742630, 1610679711, 4264495874, 1880238252, 1124141064, 179569423, 194194700, 134630932, 100731913, 228589830, 151653651, 185083399, 307370265, 925449999,
- 520488074, 168759075, 320418055, 151914062, 50340900, 3237937152, 3221291010, 805313792, 17152, 389493267, 926036758, 842208823, 640955702, 638001699, 638001699, 352723491, 118953492, 858994231,
- 118953778, 656548614, 572728871, 120661767, 370414854, 909254963, 656880693, 572728102, 537990816, 152047625, 437653792, 387589670, 606343954, 437719571, 84551206, 706023228, 171642645, 168694282,
- 287249952, 227941648, 2550207775, 2517442070, 724183837, 806170625, 221252877, 639244838, 253697807, 639244838, 272827344, 252658192, 135667722, 336570696, 371072789, 547950356, 768, 1073930495,
- 151035905, 822091008, 286457856, 640946465, 102900003, 336998661, 570820359, 874915623, 389166647, 842413847, 370414853, 909254963, 640955701, 555033379, 102900533, 478151008, 350289428, 121176348,
- 336035847, 117915655, 788993031, 4262725487, 18095214, 471602400, 1090392084, 18617360, 30473840, 471602224, 118753091, 1074202496, 117904391, 124727047, 471097560, 341840924, 478183452,
- 4278125312, 1107492607, 973113601, 2986374656, 100728832, 639771398, 119943463, 101058310, 924194327, 372717110, 909259542, 926299703, 370546454, 926298675, 370611734, 641087286, 640099879,
- 101069063, 656810531, 640750374, 587597319, 824649250, 117835558, 370607622, 909522710, 857085495, 909588018, 387331894, 842208790, 370554678, 926291479, 640099894, 822552103, 572720646, 640755494,
- 587597319, 824649250, 117835558, 370607622, 909522710, 857085495, 909588018, 387331894, 842208790, 370554678, 926291479, 640099894, 822552103, 572720646, 286130470, 689181992, 370349328, 51252508,
- 319624707, 806685469, 237639705, 100861957, 405409290, 152449049, 369955614, 219022083, 353572380, 353642768, 320016424, 672207379, 271127573, 471208725, 50531853, 487787798, 422581515, 84814360,
- 168166152, 421014030, 503911984, 51776787, 470617603, 269816598, 672470057, 286397200, 689181992, 370349328, 51252508, 319624707, 806685469, 237639705, 100861957, 405409290, 152449049, 369955614,
- 219022083, 353572380, 353642768, 209322280, 235605774, 50795024, 235736342, 101647363, 118230540, 67240962, 235669252, 68093452, 218959363, 302449430, 252382993, 4262267918, 202182099, 235605774,
- 50795024, 235736342, 118359043, 118230540, 67240962, 235669252, 68093452, 218959363, 302449430, 252382993, 218995726, 185536012, 118624270, 218961411, 235143950, 202247175, 33817095, 201786372,
- 252054542, 219022084, 117642765, 185536786, 67112463, 3237944832, 3137446401, 654314240, 1157641728, 336789504, 909579799, 640103477, 822543879, 387388934, 857020182, 926365237, 640103990,
- 101123878, 656876067, 588711462, 387319303, 926029335, 656880694, 389100343, 387188231, 926364182, 656881206, 606348440, 606348324, 84570148, 387195918, 622073792, 151651597, 690228769, 606679859,
- 22094094, 184682546, 186715184, 437783564, 202906180, 186780428, 134351664, 711459122, 336925972, 353643050, 241308693, 253430049, 186917898, 554244878, 168103182, 438181402, 1220936970, 805969164,
- 571149324, 623188235, 186780441, 170920972, 4721693, 4278190084, 16777913, 524473, 3407912, 16777280, 640034609, 117835271, 588591397, 370611235, 370611735, 909586995, 909588023, 842216757,
- 640955702, 102900515, 101130753, 842208791, 640103991, 370611223, 875902519, 101131815, 125108225, 908790295, 2692743426, 537989600, 740960543, 522791468, 537989408, 219353869, 4263909920,
- 219028688, 471600653, 235736334, 404232404, 404232216, 2835349784, 486999562, 1075853405, 455353126, 252644891, 605756174, 322971171, 638782733, 404285182, 404232216, 472913944, 235736334,
- 219028508, 83889677, 3204448255, 3221307650, 1526746880, 2030070016, 34560, 118895123, 857085446, 657864242, 842216998, 353768983, 387319572, 370611734, 640091655, 101123622, 370611734, 101123591,
- 656811814, 101058310, 640099879, 654458423, 117843494, 925247238, 909588022, 875898423, 322320182, 924194580, 657732918, 117835558, 637994545, 389424934, 387323670, 389157654, 117835526, 119677734,
- 656811814, 909186870, 102184503, 656803590, 2906011430, 218170372, 825309200, 17633336, 33752068, 571546134, 170203678, 100925953, 407259419, 590679319, 50463752, 521746715, 438178836, 33758009,
- 891488260, 1175983885, 67509065, 621412610, 287514137, 1174541850, 404232216, 404232216, 554370618, 219022892, 504042006, 657088514, 319489539, 336991764, 50727699, 370324775, 738594317, 168233505,
- 3221298690, 1294140422, 592262710, 386008580, 589701948, 722342148, 117572377, 403839237, 877143848, 34013962, 235471873, 286989073, 17041678, 167970562, 656885812, 102240793, 419627527, 68161323,
- 1008936483, 4043178519, 218959388, 236723214, 2920156429, 1209600779, 16843563, 337389579, 219172353, 101323787, 185862662, 200675341, 721617153, 185276744, 1840403, 4278190083, 16777920, 1310912,
- 4718632, 909382400, 35533363, 587600917, 875898402, 572728870, 909382950, 370553395, 587600917, 875898402, 572728870, 336922406, 909259542, 589706293, 842216739, 336926230, 572720646, 892675622,
- 842217012, 219398166, 760178748, 319622419, 222193212, 890049299, 219362391, 975377165, 1611861283, 471077916, 269489180, 656884008, 1093150785, 336862247, 228589852, 1750019347, 320015676,
- 1013333517, 319640339, 221599540, 588059411, 51585850, 471602400, 1612452884, 673726759, 1093084993, 471130152, 196636, 29425408, 12583360, 2424859, 318767153, 353699362, 352723491, 875897109,
- 891495206, 572728884, 588584198, 119944245, 857084945, 892744225, 842204433, 588518677, 892674595, 319651892, 18617392, 806624448, 319622419, 479007616, 341836052, 1620114972, 274731024, 219398145,
- 806624288, 538711088, 219353869, 319627296, 351338176, 18095132, 1611677712, 274731024, 768, 3221340415, 453033985, 822093056, 571670528, 588584198, 353699362, 640955681, 875897635, 102900518,
- 891491605, 285681204, 556996116, 288699954, 355606789, 555947029, 875902242, 806555008, 3221298196, 321917980, 2148732173, 337415443, 471097345, 536973566, 3774746640, 331350288, 337387533,
- 471085104, 320015648, 220209165, 4043227155, 337386516, 272633857, 1074794560, 4278648848, 45940732, 12583168, 2687010, 3538991, 4128827, 16777283, 637929265, 926295591, 842217015, 353703446,
- 84346388, 640099846, 908408630, 640955701, 388440611, 657929783, 387323654, 120006199, 386336305, 822556470, 121050887, 121050887, 20387591, 857152349, 369888782, 707470619, 589769028, 857189630,
- 369888782, 218977537, 355993354, 336135949, 135219984, 286067246, 121506305, 1025479427, 1025419294, 1025418270, 289210654, 387320846, 386993715, 103433257, 3574941480, 387320846, 148180531,
- 218760720, 67649102, 1023687683, 221122312, 235956746, 1041239572, 487794195, 454239763, 1254675, 4294704898, 16777915, 2031808, 16777280, 389165878, 336926230, 909127942, 387330611, 118756630,
- 572720646, 640034598, 120992821, 370553393, 117838869, 572925703, 387384839, 640091655, 389092151, 875968278, 909518631, 134568705, 336004360, 454561800, 101058854, 504767496, 353571615,
- 1009016596, 1680025891, 68027453, 2268335116, 118230031, 185284476, 305923333, 112853302, 455477510, 336072728, 134743303, 353634053, 505352979, 595207190, 1076307004, 87830033, 873138949,
- 202114879, 923402511, 235146252, 437665028, 2560, 180479, 704692225, 1040200704, 1442859520, 1845518848, 2248178176, 37376, 842215699, 336925974, 354624262, 387330611, 353703447, 555943444,
- 892675618, 909588276, 892547894, 891691555, 389428277, 856954146, 875901491, 856949539, 875901473, 924983587, 875902514, 102900518, 924193813, 572728884, 370414854, 120992307, 875902514, 102900518,
- 924193813, 572728884, 370414854, 120992307, 875902514, 102900518, 924193813, 572728884, 370414854, 120992307, 875902514, 102900518, 1075188757, 320015840, 416894989, 18285348, 2164136486,
- 385951258, 957883395, 320015696, 2685407277, 281022480, 269508609, 806396158, 168693258, 2181959178, 235538958, 235538958, 235801160, 235801098, 168431282, 168431118, 235554830, 235538958,
- 168735246, 168693258, 172494346, 168431118, 3221294606, 222301459, 387915795, 1174800534, 438707738, 2517043014, 320872215, 319635469, 269488176, 276889104, 244846608, 235801098, 403573258,
- 168693258, 1577979402, 235538958, 235538958, 235801192, 235801098, 168431198, 168431118, 235563022, 235538958, 168713742, 168693258, 67112458, 3237937152, 3221291010, 855644416, 1761627648,
- 841285632, 656881207, 875902519, 589702951, 654772002, 352716582, 857084949, 102900503, 387192085, 389494550, 926036758, 875902519, 909584167, 824256039, 101130787, 101127959, 387388437, 926036758,
- 924194615, 875902262, 858859302, 892679730, 119940916, 589702919, 101123874, 387388437, 370607623, 101763073, 1227361030, 103024134, 1225132040, 252644136, 2425358862, 252644874, 105457675,
- 604375048, 675874310, 4261807627, 101748976, 1227361030, 103024134, 1225132040, 252644136, 177248782, 185536270, 134629672, 103024136, 187189510, 266339846, 1227361039, 101189638, 1225131556,
- 101059368, 235573264, 2416578112, 184944144, 84298024, 134743589, 187189510, 252645135, 105457675, 604375048, 675874310, 268830219, 1074662032, 277875214, 671811078, 604374601, 101189638,
- 252389449, 327695, 48299776, 10486080, 983051, 1966099, 318767168, 587674417, 875898402, 389429047, 389232419, 857158453, 389165863, 336926231, 553984774, 372388615, 587600917, 101975843,
- 891691555, 587600929, 657794594, 891691555, 858994228, 1578719794, 436276233, 444461061, 425926755, 307960353, 201398789, 49675529, 218366976, 202183443, 218960660, 331415059, 336792845, 320015628,
- 2684421133, 50924672, 2148619267, 2155905152, 55841152, 537659651, 218960672, 319660051, 319622419, 329256211, 1248525, 4278190087, 25166560, 721056, 1507343, 4456489, 7077980, 858854144,
- 639771399, 926364725, 925046582, 859117363, 101123607, 103888647, 656803590, 858203942, 370612018, 119678485, 352716337, 588715540, 572720660, 589772070, 875898402, 657666870, 571672097, 875898406,
- 909588022, 387396147, 389428791, 336926230, 876021254, 640099878, 352456199, 842208788, 425341494, 17566046, 2112881946, 1663066906, 453116686, 50436119, 185733121, 307957008, 234953221, 370133539,
- 332535834, 336792845, 320015628, 17040397, 747963953, 841165641, 218760982, 151727625, 506202393, 336873771, 151587098, 638851593, 19274266, 151814304, 290718467, 2155905152, 402719560, 33691676,
- 168825089, 1410416642, 1460338945, 622475289, 319625795, 329256211, 538119437, 736755209, 1160129609, 151327287, 17369902, 407579401, 1881884972, 119284498, 470222856, 622531107, 65573, 33554432,
- 8388864, 889192511, 858994228, 859190325, 909391155, 372388659, 842208533, 857019670, 353703474, 589497876, 572732469, 891491605, 354558772, 875897621, 353706531, 590624035, 588584226, 322250274,
- 219357197, 3222082336, 220205837, 319627283, 272633107, 269500432, 1074794560, 222302224, 319676435, 538119456, 219353869, 537727776, 230690067, 269512723, 269512816, 269512816, 269512816, 856944,
- 4278190086, 25166528, 3473602, 6225983, 7143526, 318767223, 909575985, 102110998, 842204935, 117835287, 353699334, 572725012, 873542950, 657666870, 909583910, 655824694, 909588006, 924260118,
- 370619958, 589698838, 336922146, 657666838, 859190321, 924260146, 372388662, 856101909, 353703474, 354628899, 909391139, 119943987, 588591925, 890709538, 101979443, 640942883, 117908003,
- 3375772211, 336075273, 134415877, 236590620, 352458001, 345573659, 370416668, 100861980, 453514245, 151585544, 167973386, 152175626, 127863049, 235801100, 712585482, 521479198, 505681438,
- 335807530, 3223371804, 67376156, 345030704, 482402332, 168701972, 823986188, 2684423690, 50729495, 85198856, 671946261, 371393815, 470749664, 339738900, 335877404, 100861960, 302651668, 151585539,
- 151592478, 2719089667, 168431113, 706615310, 472393756, 185409066, 1615860764, 471093344, 2152790795, 1350573084, 939596820, 654904842, 4278386702, 46006269, 12714371, 4128827, 318767171,
- 387319303, 103163655, 521537031, 926291458, 656877110, 926291511, 370546487, 101127991, 370546438, 909509183, 119940647, 909518599, 640034599, 640091911, 118953734, 118957351, 374316071, 689906712,
- 84219916, 1195838476, 84154381, 522784011, 252332845, 759892495, 185411871, 219677701, 202131271, 219677701, 405020457, 386223894, 192773387, 223029015, 453837146, 2936082009, 442051225, 184815446,
- 68685068, 201660954, 68685068, 906253839, 759250990, 257295414, 202184708, 437912844, 202184708, 1443824908, 2569689370, 755239178, 1091109933, 874592795, 3809588, 4294901506, 16909024, 1179808,
- 318767127, 389161265, 100861718, 572728070, 637740838, 823604791, 539047713, 152027137, 87163402, 503127597, 36832557, 21432586, 2331906896, 185311233, 514522639, 18753319, 185274198, 67141824,
- 3237937152, 3221291010, 2063620352, 2550172928, 503382016, 118756610, 656876067, 926168358, 875902519, 589702951, 875897379, 859191095, 875901491, 102900515, 117904405, 387384838, 572720662,
- 589702951, 101123874, 891691555, 926364725, 926168374, 926365239, 590624054, 117908003, 891429638, 322384949, 117835313, 640955686, 656548643, 892675623, 909588276, 389165875, 842208791, 857085719,
- 370418994, 926029335, 875902518, 572925734, 923141639, 117904406, 925247238, 167851575, 171268663, 303044359, 50791942, 151455235, 84085516, 269814536, 185081104, 84219149, 117637379, 285410822,
- 67700484, 202508292, 68291090, 151788042, 17498900, 53084932, 3439922180, 20338456, 320145934, 487788557, 353570843, 186323480, 218894607, 4261873927, 993740112, 1161509770, 2319137605, 3141876539,
- 186647813, 537660427, 59769099, 557341753, 101847071, 117835784, 50594819, 84608774, 268961027, 218630928, 184682244, 184877829, 134616325, 219222024, 302648836, 50988548, 336135177, 34276611,
- 151781916, 3875407371, 50608685, 219023876, 52106000, 185733922, 201987855, 1163921165, 572662646, 1162180131, 572662646, 72775203, 203424782, 537594636, 131084, 23068672, 2097600, 1769485,
- 841037568, 101979414, 639770915, 926299189, 353776161, 555943444, 875898402, 2147557430, 219353869, 319652094, 2147552531, 219353869, 319652094, 219389971, 219353869, 327160589, 320015629, 1248525,
- 4278190082, 29360352, 852128, 318767131, 587600913, 288695842, 842217012, 336664342, 639771398, 909381941, 1075196467, 319622419, 319622419, 218960768, 218960659, 4269801747, 320015744, 226492685,
- 4262269715, 320015744, 226492685, 33559315, 3187670527, 3221291010, 939535360, 385941504, 117904406, 369233670, 117835540, 101123590, 637928967, 908469799, 909588023, 926299958, 924267062,
- 926365239, 570634806, 370607623, 909586995, 3506513447, 805766952, 1294533892, 386930710, 33624589, 1128273435, 152509212, 220797463, 268829460, 1294092823, 805568784, 486151175, 235736334,
- 219028508, 3103854093, 118753064, 268502064, 390734413, 335742225, 387590413, 454825737, 454443075, 219283714, 370675735, 67381582, 16713520, 404232216, 404232216, 256, 188671, 637574145,
- 823328768, 353699334, 370611988, 926364211, 875902262, 119940902, 117904919, 101127703, 891692839, 657930036, 1144223526, 269268016, 817105936, 741618500, 1510211863, 84280380, 33779717, 19018316,
- 877660564, 2838249734, 749275915, 1345586753, 1058670601, 1649148678, 84214790, 50594408, 189680387, 117441792, 4177643519, 184598529, 1124079360, 2046848512, 570490880, 909583911, 370618931,
- 570885639, 909583911, 370618931, 907478535, 925247271, 841430583, 924194583, 353777207, 857084949, 117904946, 370611974, 640100102, 637929223, 640955701, 354886179, 926357015, 117904950, 370611974,
- 102900486, 101979413, 119940903, 925238791, 656881207, 842216998, 875902262, 118760758, 891692806, 389429044, 469762326, 235736334, 219028508, 476843533, 235736334, 219028508, 139005453, 33752324,
- 67502854, 471604740, 622070796, 68029466, 84412676, 319689732, 202120220, 18754068, 471600279, 68422932, 84477957, 436997635, 202118181, 236133404, 134546452, 235144201, 337975820, 404229121,
- 404232216, 1610684440, 404232216, 404232216, 404232288, 404232216, 319930392, 588057624, 134287377, 50661640, 438307854, 202118181, 236133404, 134546452, 235144201, 706615052, 151257494, 335807752,
- 454824973, 622070797, 235675674, 134808580, 236192773, 203168787, 438637580, 1460538400, 218959388, 236723214, 920845, 4282384386, 20316864, 3473590, 385876033, 857084977, 892744243, 640100148,
- 925247270, 387323702, 372446769, 842084659, 857085751, 909586995, 640100150, 909583142, 119944245, 352456199, 891691557, 842217012, 101979414, 3943963712, 805705231, 135413542, 386403854,
- 151323949, 554832650, 587475226, 151720473, 607849777, 270274337, 726414505, 235554817, 235538958, 471076878, 151719702, 522715463, 235407374, 33688616, 421537286, 2165846290, 169224482, 85135634,
- 1632113213, 168713526, 168693258, 16780810, 3237937152, 3221291010, 8960, 857092407, 389494578, 926036758, 857085751, 322385714, 926036758, 875901971, 572597030, 387192070, 269485132, 52239364,
- 486739984, 269485084, 54336771, 1292046352, 989728017, 2399211787, 2960134159, 1907363856, 4270854159, 17830064, 218235598, 67834129, 327684, 48299776, 10486080, 720902, 2949138, 16777266,
- 102900518, 858988807, 86451750, 352716337, 353842483, 370414883, 875901747, 372388662, 842208533, 590689590, 557134645, 875766037, 1073816359, 2118848528, 537854246, 928653232, 269401854,
- 482369632, 438743060, 347088410, 4265656348, 1616904640, 2650882590, 758793730, 496569663, 2155881280, 471093280, 640031360, 337412122, 2155880528, 33569860, 3237937152, 3221340161, 654317312,
- 824508416, 875902519, 572728102, 640091911, 572728102, 336922118, 352786199, 556996116, 892679730, 555951668, 1610679842, 438636879, 286531075, 827198496, 641738244, 320879365, 220201229,
- 4262269715, 1074990560, 437850710, 2115245861, 1076247856, 3440579622, 319627328, 220204307, 67113747, 3237937152, 3221291010, 805313024, 1392523520, 823328768, 336926258, 370611990, 101979414,
- 891691555, 656877108, 875898406, 857802550, 353769010, 587597332, 587600931, 891691555, 87438389, 909259541, 589706293, 387322919, 353768983, 572720660, 640955686, 640034599, 859190325, 173545010,
- 17566734, 168696588, 202116618, 236653569, 809500974, 505295647, 940580659, 942194728, 275579155, 337386516, 17566896, 168696588, 202116618, 236653569, 17697290, 201985728, 167840527, 235543842,
- 252447246, 571080971, 3222145565, 522138398, 942153267, 230697016, 476069907, 3894154260, 17501964, 169681418, 201985550, 167840527, 235543842, 262158, 46202624, 9699584, 1966094, 3735597,
- 657527552, 101131814, 369493766, 909390643, 120005143, 370611718, 909586995, 103229238, 909259063, 656811559, 117900838, 655693334, 386271010, 926036758, 3626379062, 186189640, 34026536, 378539283,
- 1209210170, 789382919, 221197364, 323487495, 34803147, 187184390, 306710297, 236736534, 470682893, 218959388, 2097479950, 520619787, 319632473, 193668374, 85527677, 419763220, 1342930188,
- 1496583443, 185010207, 371526269, 404232240, 404232216, 393240, 46202624, 12583168, 2293777, 4194352, 5832781, 102891776, 387188231, 842208790, 875968310, 52831783, 640099874, 909522740, 387330611,
- 101127190, 590414598, 909583906, 387331639, 370607639, 389493299, 101123606, 640098851, 825702182, 909584180, 387323702, 119735830, 875898402, 372388662, 17175573, 425341696, 1511594522, 425341747,
- 1511594522, 594953523, 1982013986, 594953541, 1982013986, 302860413, 170396418, 472123161, 252644636, 134685709, 437917964, 117967897, 119807096, 187173401, 2148340226, 219353869, 18027277,
- 757937024, 858598758, 1714236723, 4264766765, 993740096, 1161509770, 2319137605, 21314363, 873272064, 185010468, 139465022, 420167432, 84412421, 544148249, 118177297, 221520905, 219357203,
- 219353869, 83890957, 3238002431, 3338764802, 805309184, 1241529856, 30464, 370611219, 875902519, 101131815, 355676435, 842208788, 372585782, 657864247, 589702695, 117842467, 387319303, 336934678,
- 909259542, 102896437, 370413845, 892744243, 388379665, 924194580, 657732918, 50726694, 842208788, 859125046, 857084949, 892679730, 657863219, 909586983, 640100150, 102900518, 369493767, 120788503,
- 858985990, 404232272, 404232216, 319825944, 236129549, 51121172, 540150303, 171122440, 202114078, 219352596, 180884237, 168431118, 411438606, 404232216, 404232216, 319622419, 218960656, 168301075,
- 84216067, 503516172, 555824650, 69012022, 84151564, 134873865, 479199506, 235736334, 219028508, 3036548621, 320015744, 101751565, 1661802500, 505750814, 68685155, 228265990, 17634067, 4262072032,
- 235801136, 181403914, 236728334, 470682893, 218959388, 221576718, 1611469587, 320015712, 135094285, 402850331, 656432909, 224337959, 453116696, 50334984, 3237937152, 3221291010, 1090534400, 17920,
- 924266771, 387396150, 117904406, 118756887, 656541191, 353765159, 101058324, 369567527, 587600917, 875898402, 389165878, 908470071, 842217015, 640104215, 909588276, 925963058, 824641319,
- 3909560119, 436877145, 168439817, 117922359, 118753120, 353505369, 1812270852, 219349264, 219353869, 1813054468, 705102085, 271002158, 1611073370, 1051071495, 1046363720, 3103866440, 151598937,
- 169478704, 336025911, 117923847, 707202905, 17246511, 68250629, 320015620, 18025741, 252013584, 269620484, 118753113, 2600339296, 1581205822, 4081726, 4278190083, 16777920, 1310912, 4718644,
- 370414336, 370553395, 857084949, 875902514, 572719662, 640747270, 352716550, 857085460, 909522738, 372713255, 892744243, 572728884, 387192070, 102905607, 857084949, 353769010, 842208788, 640955702,
- 219398182, 322725438, 756223245, 222062671, 504070931, 1597509126, 237315897, 493357828, 319620100, 319622419, 221977601, 588059411, 219358010, 1463030541, 319660033, 222193212, 1007489811,
- 321736552, 235146186, 1597581348, 503713336, 18638859, 319622419, 67374355, 219407645, 975377165, 320015651, 878130445, 1024, 2147598591, 285261825, 754982656, 15104, 353776129, 587600913,
- 891691553, 926364689, 873935670, 102900518, 370414869, 892744243, 589706295, 353699362, 842208788, 876033334, 102900518, 370414869, 892744243, 639254529, 16718374, 1293100570, 236132883, 235801098,
- 1343097354, 235538958, 235538958, 168431184, 168431118, 650117390, 444661274, 18490918, 1293097523, 235558931, 170920462, 805965326, 168693258, 235801136, 235548682, 170920462, 658958, 4278190088,
- 25166272, 1114304, 2097176, 2818087, 3538994, 318767165, 286590498, 556996116, 288699954, 640100148, 355665699, 909391139, 37434631, 925049621, 859120405, 858199602, 588718869, 336933685,
- 355673862, 859121443, 639771413, 640031296, 436207898, 323818278, 1075876634, 1615860499, 2959102032, 319627328, 2151694496, 2366849056, 1080049728, 18025760, 4263126720, 640031360, 439550234,
- 3222490387, 319627328, 2151694496, 320028704, 541114432, 1077941005, 322969632, 4194239744, 3221340415, 184600321, 889202944, 1509967616, 335609856, 909579799, 640103477, 822543879, 858986004,
- 386270727, 370414871, 892744243, 656880693, 640038455, 102900515, 335950087, 926029335, 656811831, 119943447, 589497877, 856954146, 926298675, 822425143, 119940918, 656868871, 101130790, 370546455,
- 408944951, 404232216, 3759675416, 340462867, 1309934358, 319622419, 273300494, 2669025793, 154080013, 169478665, 118297938, 67375340, 269506835, 85857113, 3841852161, 235341582, 1007423494,
- 201592324, 604846860, 479199504, 235736334, 219028508, 225185293, 957485331, 222514707, 1225593619, 1161629204, 320677647, 152701678, 374475274, 62263308, 269615631, 34740240, 235346448, 134416142,
- 84228877, 222038795, 50333701, 3053453055, 3338732034, 704645888, 21504, 370611201, 875902519, 101131815, 387319301, 926356997, 640103990, 101123878, 909584167, 100806438, 654776087, 825689638,
- 386271014, 386270999, 389494550, 389494551, 370611990, 641087286, 640025135, 117835527, 657864487, 17237798, 404232317, 404232216, 92732952, 2130774278, 151989292, 319095814, 353767177, 50934401,
- 57485324, 3324922646, 259003145, 302909190, 235866121, 127470087, 101063431, 420231698, 201917958, 839455028, 16995353, 252184631, 17368846, 219028624, 471600653, 235736334, 68356601, 135665607,
- 151589636, 185074694, 256525067, 874974242, 1162548766, 3255174502, 101649927, 118362633, 1225920007, 302777091, 102565907, 420219912, 439556614, 18942744, 236001793, 286131975, 1024, 1073922303,
- 184598529, 1476403200, 26112, 640098817, 842217015, 101127703, 117907975, 855836422, 387388983, 657928967, 926361126, 640878370, 909588276, 387396147, 370611990, 372388659, 117904405, 892744243,
- 859190325, 353703474, 589497876, 589508642, 589508642, 875898402, 322122550, 590415142, 656877090, 370546439, 20121351, 219028560, 471600653, 235736334, 386864777, 540411654, 537659707, 1461213225,
- 520556306, 167865603, 807540490, 976228626, 369624599, 303238421, 235554075, 235538958, 28778026, 16883201, 235801223, 20458250, 486683393, 520424241, 84675897, 1610689557, 404232216, 404232216,
- 85462848, 2130640386, 1477707786, 705377874, 170352149, 571935258, 923930373, 219354127, 246614292, 235538442, 503843342, 168431146, 17301774, 203104345, 503850066, 33573903, 3774808064,
- 2684452866, 1157639936, 823328768, 389165875, 387388950, 842208790, 875902262, 839007030, 101979414, 101979427, 891491619, 891491619, 892675618, 875898402, 336920886, 572596998, 909391142,
- 909254963, 909391157, 538325555, 50596119, 85345832, 389571358, 537727776, 320015648, 1076377613, 942162112, 34804493, 4263785581, 320015640, 182976781, 218960654, 27263251, 119745283, 387987248,
- 320015657, 1611861261, 538982440, 674766880, 218960800, 144768531, 219362340, 168694541, 320015624, 4261348352, 188671, 721461249, 1811958784, 35072, 656552225, 101123590, 656548614, 54081318,
- 892481589, 909522742, 926299703, 875898406, 842217014, 336926230, 824641030, 370611988, 589501461, 856954146, 892744243, 640100148, 858993717, 590624050, 621158947, 336922146, 353769239, 572728084,
- 858985493, 875902514, 891692839, 842216244, 119747637, 101131825, 856954133, 389362994, 926036758, 856954167, 875902258, 117909031, 825688065, 303111177, 67835434, 16844804, 67633924, 386010120,
- 1198802201, 1162179655, 504424308, 270206210, 370088720, 84024848, 319819795, 352392719, 504370703, 270206210, 370088720, 84024848, 2869956627, 269159175, 134550288, 269681928, 118164240,
- 268898851, 168495112, 16844554, 184747265, 304090375, 958545178, 1597519967, 945764665, 336205035, 268763650, 336533008, 33690379, 370151429, 336533014, 33690634, 370151429, 319493135, 268763650,
- 67700240, 274729987, 102379536, 271587846, 51142672, 3082500, 4278190083, 16843456, 4391107, 5963855, 103879424, 370611974, 101127959, 101127445, 387192582, 656877095, 101130790, 370611988,
- 857081111, 892744243, 589506100, 908535586, 641087287, 389490471, 909587990, 640100134, 640025135, 909522691, 370619701, 386270983, 101130771, 842208791, 640103991, 101256402, 136252953, 222962478,
- 386008332, 118883848, 117901076, 17894934, 470814816, 168693258, 1460013084, 85066509, 1193349391, 135924552, 2114585352, 422190616, 1414732038, 137695759, 50467075, 219028614, 471600653,
- 235736334, 419872001, 102511116, 672273922, 402921781, 134349580, 118884099, 118753031, 2265320982, 168431110, 119603982, 722881294, 941628430, 185205512, 325191706, 204605446, 480247305,
- 303044869, 1258948140, 2600536329, 404232216, 404232216, 4278126336, 33734911, 1308672001, 1577080320, 1845519872, 2248177152, 906035200, 589706293, 336922146, 101127703, 875898631, 102900518,
- 640095509, 369493766, 387318303, 101058326, 387322901, 842216214, 892745271, 640099892, 37697079, 640103990, 889653030, 572728884, 118822150, 656811814, 859059490, 387192114, 891429652, 120730420,
- 859059490, 353637682, 891429652, 926036788, 859059490, 118756658, 355611444, 117904405, 656548614, 20260391, 674761557, 51066920, 822479620, 235538958, 68290839, 940181252, 33816905, 437982981,
- 2518093334, 437653015, 33888027, 944308484, 67372810, 236390674, 806226442, 1912867591, 537923600, 269488144, 269488144, 269488144, 269488144, 34607168, 50528777, 16910594, 672601651, 405289016,
- 201721365, 170398992, 336203278, 151454730, 402919946, 101518880, 574363141, 236337698, 574232078, 85343266, 537791750, 168952856, 168036105, 235801108, 253044746, 271779341, 2148536336,
- 1611665424, 269488144, 269488176, 269488368, 269490192, 285476099, 68223747, 458757, 46202624, 12583297, 4194308, 5898318, 7471206, 16777342, 857150755, 353775895, 857019670, 926364725, 370619958,
- 352782102, 336992021, 656541191, 892675623, 336926243, 555943430, 891692578, 892810804, 858994228, 859190325, 387330611, 102899987, 857084949, 892744225, 336012852, 639771398, 859190325, 571938354,
- 909391142, 353776179, 338101780, 639771398, 859190325, 570889778, 909391142, 353776179, 721487380, 1299202155, 239075586, 169543737, 956826378, 168364343, 322308634, 857606955, 520159007,
- 472129075, 471862547, 538147604, 16714248, 337386516, 471072769, 168752156, 168693258, 181931530, 168431118, 239209998, 235801098, 1745750538, 168693258, 17698314, 322986112, 50594819, 303445279,
- 134416967, 1191844616, 171332437, 151587354, 857346871, 857676055, 523443742, 1796027938, 342889229, 4262597916, 336862407, 336862236, 235548700, 235538958, 168698382, 168693258, 169348618,
- 168431118, 237112846, 235801098, 920074, 4278190082, 25166304, 852128, 285212709, 556996116, 875902514, 572597030, 370414854, 336933683, 909259542, 842216757, 640955702, 102892075, 1073810707,
- 219353869, 319668478, 327159059, 2148732173, 219353869, 319660192, 319651841, 319622419, 319655187, 320015840, 219406349, 1250061, 4278190084, 29360576, 3211456, 5832790, 318767203, 353776161,
- 589497876, 370611733, 101979414, 117835271, 101127703, 656548131, 641152806, 640034598, 926299189, 590690102, 875898402, 37290294, 640034612, 589702695, 101123618, 352716550, 387199281, 370611734,
- 909259542, 926299703, 825296694, 336929283, 892482355, 18359092, 235801232, 50530314, 286527243, 319625227, 269093382, 168820991, 236193290, 336661272, 50531087, 235801096, 50622977, 1092029199,
- 390145831, 67309323, 185533188, 656883991, 252385089, 3627549699, 270536720, 247464208, 2500725258, 470417922, 372777745, 1007097101, 218959375, 138153742, 940903956, 169611555, 244646402,
- 4279110154, 50529024, 101122823, 117638918, 50529027, 50791171, 117835271, 50530051, 272630141, 1052688, 4294508292, 16777920, 1966280, 4980779, 318767192, 353769265, 372643605, 336992023,
- 570820359, 640034599, 572729143, 925247271, 822294071, 386275127, 572720647, 20198694, 654771732, 654779942, 909521973, 370618931, 101123862, 856954133, 926364211, 370611766, 857084929, 875902514,
- 102900518, 1829333071, 1880305942, 171968777, 309332506, 913115911, 223348492, 705636367, 201866900, 471602294, 771752488, 940904485, 1093096731, 135204904, 88081924, 84359440, 34604608, 238616067,
- 235801098, 17697290, 201806011, 118189366, 436891666, 151601162, 372314992, 292030829, 4262406159, 557749612, 672429600, 268508188, 252790315, 1426525973, 658581505, 101712387, 956761408,
- 104858896, 4262397956, 235801296, 235801098, 4278126080, 33734911, 184598529, 973084416, 1375749632, 24064, 352723457, 842208788, 640955702, 857084935, 875902514, 102900518, 370414855, 909254963,
- 640955701, 926229283, 640103990, 100798246, 370546438, 588592951, 857146914, 336926002, 891429667, 873935925, 355611443, 589501461, 859256098, 336926002, 891429667, 536949813, 219353869,
- 2366837517, 319622419, 319622419, 18491008, 640031296, 181766170, 268567307, 183035914, 268567307, 445172490, 272646182, 2148548624, 269500432, 1083183168, 272633872, 219398145, 219353869,
- 221778701, 218960659, 2700415763, 438707738, 1294342816, 168821292, 805440266, 168821552, 704842506, 270149187, 1074794560, 269488144, 1343230016, 269500432, 16781376, 3237937152, 3221323777,
- 11520, 336922131, 353769239, 587600917, 892675618, 572728884, 352716551, 370545685, 909259571, 640955702, 891692839, 589706293, 446301986, 638854694, 220600858, 50792714, 894907446, 793718802,
- 257238056, 101386253, 723689985, 338109749, 639239196, 173611558, 906168077, 1463092300, 810495796, 1361272115, 135664910, 33556749, 3120561919, 3288417282, 1124081664, 822149120, 101123590,
- 235341574, 117835522, 924260102, 926351934, 909588022, 657930038, 389087526, 37631766, 909522743, 926299703, 657864502, 824379175, 101123590, 235341574, 3070297858, 404308525, 352522277, 255544114,
- 487260675, 860765475, 588251670, 742266904, 4262342426, 336669557, 372790595, 337580290, 287782163, 386729221, 942145835, 287315221, 1396053506, 230621505, 806753828, 1058997016, 268967231,
- 287050768, 524435487, 355342339, 135012885, 838733104, 571084844, 52512327, 286337304, 302320413, 219614482, 303177484, 537073707, 2114885, 4278190083, 29360576, 1573056, 3997729, 336662784,
- 857813782, 875902514, 842343206, 873542966, 555950886, 873661986, 354497334, 321266209, 842216244, 842208533, 588518677, 588518691, 892674595, 892674595, 942879540, 538968360, 219353869, 219353869,
- 685833760, 219365432, 16711681, 277877517, 271585312, 537931792, 269496336, 4267704624, 322447552, 1074990349, 1073810707, 4265087757, 1074990488, 272433427, 537931792, 269496336, 270536752, 256,
- 188671, 436248577, 838926336, 336921374, 336929542, 572596998, 573912358, 1043608870, 318767363, 675235647, 337386022, 471130366, 1059595802, 2684436295, 925177097, 2955287078, 337386516,
- 639248048, 152380727, 512, 188671, 167813121, 5120, 640037925, 117908003, 354489606, 370414881, 909254963, 939524661, 219167071, 138232, 438698238, 639270913, 945764816, 538092809, 639270944,
- 33561126, 3237937152, 3221307650, 1107305984, 824508416, 891758390, 589506100, 353699362, 572728871, 100992774, 857084949, 370414899, 909254963, 842213173, 842212662, 842208533, 588518677,
- 588518691, 892674595, 892674595, 892547892, 20972084, 219362572, 1796410656, 184880392, 167837446, 639634707, 440467738, 220201254, 550567443, 269496336, 270536752, 806359088, 772476353, 320015737,
- 123610381, 182387971, 2685603342, 438707483, 273486752, 270536752, 806359088, 806363152, 262160, 29425408, 12583296, 2293783, 3866671, 842076928, 842209046, 336663830, 572596998, 873542950,
- 909325110, 102897462, 857084949, 875902514, 387188518, 892745494, 119940916, 856950534, 875901491, 572728102, 840941574, 639247881, 16718374, 438707738, 523373093, 219353869, 1293095693, 538976288,
- 538976288, 281022512, 557850927, 616562991, 4263126556, 640031424, 440402202, 1076108326, 319622419, 319622419, 319956416, 623186451, 303239954, 554701013, 33566511, 3774873087, 2684420098,
- 1191193344, 824246272, 101066530, 587597319, 925247266, 808780601, 926299442, 909588022, 640038710, 909521973, 370553395, 101061653, 572724483, 856954133, 856954163, 892678707, 892678707,
- 891495220, 572728116, 825688065, 303111177, 67835434, 16844804, 67633924, 386010120, 1198802201, 1162179655, 271607668, 537931792, 269496336, 270536752, 135268114, 168430344, 16843015, 118162181,
- 437395469, 1597579837, 962541624, 20471609, 537931808, 269496336, 270536752, 50335792, 3237937152, 3221291010, 788532480, 14336, 389166593, 118756887, 656876038, 822555686, 386340663, 805771063,
- 808464688, 117835569, 117900807, 640098822, 909588276, 926299959, 117835543, 926299911, 170459447, 161483290, 169478665, 1263995296, 876819501, 337857069, 101280795, 169478755, 123930889,
- 335943682, 34016313, 118050065, 162988300, 436903945, 2684946698, 1250302474, 876819501, 321080109, 117577734, 168364387, 123865626, 337341449, 151456801, 117576013, 262156, 48299776, 10486016,
- 4325430, 5636170, 909185792, 387330611, 387323415, 353768983, 117900820, 353699334, 572720660, 589702951, 117908003, 875898374, 892745527, 640100148, 389428277, 926291479, 352723463, 842208788,
- 640955702, 842208279, 572732469, 352723477, 842208788, 640955702, 388175084, 101123365, 354163496, 621876251, 404954648, 555683861, 202115626, 288037694, 487657997, 1008413458, 1125135644,
- 219353869, 1930629901, 269488144, 219353869, 18027277, 371006851, 86448928, 354419717, 252059154, 437922569, 420291352, 101516058, 286792738, 404295949, 420617489, 168109084, 1964513028, 319622419,
- 319622419, 269488144, 218960736, 218960659, 131091, 30473984, 11534720, 2359313, 909252352, 775173430, 237118210, 370414850, 101061398, 352716295, 891429652, 909522740, 370619959, 878130624,
- 810037272, 405817392, 235951924, 134678550, 135335952, 185340442, 1597779979, 1415457333, 1582576692, 1012872490, 621636097, 304813589, 791547920, 168897560, 50334731, 3237937152, 3221307394,
- 671093248, 15872, 355669267, 355669283, 891691555, 909391121, 387330611, 859190325, 387396147, 842216214, 336925974, 572728070, 875893030, 842216246, 857085719, 353776179, 587600917, 1076240931,
- 3233857728, 219358746, 333452045, 151864077, 1661798670, 219353869, 320015840, 151864077, 1661798670, 219353869, 18025952, 3762307232, 18490944, 319643648, 228633875, 151914771, 226495763,
- 3992851219, 152243616, 219351310, 320015744, 268436992, 4026654975, 352362497, 620764416, 989867264, 18688, 841036087, 657732918, 572719918, 101122574, 924193813, 891429652, 389165876, 859059490,
- 655627570, 891429652, 87175988, 556996116, 875902514, 572597030, 336926470, 841036566, 875902262, 1025646883, 286033409, 806683137, 1447182934, 16913712, 269508369, 284168208, 276828176,
- 4279242768, 18095104, 471602304, 343997972, 438702108, 639254529, 274791952, 51122656, 976291843, 825895466, 201523976, 269508625, 269492240, 271585296, 350228496, 336862236, 276044828, 438707738,
- 16781328, 3237945344, 3221336065, 12544, 372388115, 859182357, 907482674, 487993907, 101061634, 656548643, 892675623, 909588276, 336934710, 37564979, 842217012, 909391127, 236392936, 35328786,
- 471077390, 1982020131, 772091194, 50467607, 470814721, 386798100, 286769153, 303697076, 538188812, 591012672, 1009124645, 269688358, 939590401, 122228752, 2752257044, 33560337, 3774808064,
- 2684436482, 788536576, 855703552, 35460658, 926036756, 387323447, 875897109, 370620214, 37564979, 822294068, 336933409, 587337223, 656811554, 20198694, 319635456, 805504522, 4261496119, 808928768,
- 319424003, 287179490, 1967262470, 1114986584, 2684421643, 1677856019, 458491146, 1078084202, 1411083330, 40110597, 2701005581, 134481681, 555424545, 285672456, 1024, 1073922303, 536920065,
- 1207974912, 22016, 372388627, 101057053, 588715029, 892675618, 875901491, 859120419, 590624050, 909391139, 353706519, 353706531, 355676948, 842216212, 842216757, 590624053, 590624035, 101127173,
- 875898407, 370619959, 859190279, 353776179, 589497876, 3761251874, 589110292, 471128586, 2416971920, 2416971920, 403733532, 270012432, 270012432, 17831952, 673720408, 673720360, 641196072,
- 339158630, 336583183, 337428481, 974151904, 470815523, 269504532, 3490713664, 272636948, 269488152, 403705880, 403705872, 388943888, 773265175, 387389230, 925301527, 336537143, 262164, 46202624,
- 12583168, 6291469, 7929965, 572915968, 335937799, 926029335, 120862209, 101127190, 102958854, 101058310, 101058311, 117835271, 117835271, 117900806, 101123590, 101123846, 570820358, 909583911,
- 825440054, 909588022, 909588278, 909522742, 909522743, 926299703, 909193527, 909522742, 909522743, 822294071, 842208791, 892745527, 86452020, 640090391, 117908003, 18093318, 390207721, 404267262,
- 18366999, 88414048, 203165189, 118426369, 16909831, 202180866, 184618011, 101124113, 151126274, 186190861, 168954370, 201592324, 203165196, 118426369, 16909831, 202180866, 184618011, 101124113,
- 151126274, 186190861, 168954370, 286322955, 3457226776, 4262465809, 536940594, 404230416, 17944081, 4262926249, 390207648, 1610684440, 70140439, 168756238, 117703170, 17502472, 218897164, 33620489,
- 285738758, 453771531, 34016524, 151388673, 185271557, 33688079, 285738756, 453771531, 34147596, 117834241, 17502472, 218897164, 33620487, 4262201606, 286330994, 404230606, 275910673, 286269441,
- 403820049, 131096, 29425440, 12583328, 2293788, 842203392, 101979414, 639763243, 859190325, 875898419, 842217014, 336926230, 101130501, 19341859, 471073135, 3040154652, 471602230, 654377236,
- 1093150785, 32570919, 268921088, 536938256, 471077916, 471077916, 1093142536, 675358503, 248678408, 196622, 48299776, 10486144, 1835021, 318767160, 554775313, 873542417, 572597030, 338756358,
- 841036566, 640955702, 102900003, 572724517, 856954133, 856954163, 892678707, 892678707, 891495220, 572728116, 2147565632, 4263126592, 1076238976, 3858833453, 134950176, 185116413, 271589377,
- 537931792, 269496336, 270536752, 16736257, 16711681, 639238145, 548666918, 136326445, 820710155, 806363152, 271585296, 271585312, 1024, 131072, 251691009, 754982656, 15104, 370413841, 909254963,
- 640946485, 102900003, 859190295, 353776161, 587600917, 891691553, 372388631, 587600917, 891691555, 858994228, 336926258, 572728070, 909391142, 2147555878, 438707738, 639271166, 17634112, 320015680,
- 230751757, 171446291, 940183054, 2450394634, 235801136, 235548682, 4282384654, 640031232, 436207898, 221914662, 1074598675, 219353869, 168431200, 168431118, 168431118, 168431118, 131086, 46202624,
- 12714240, 4063272, 103874816, 370611974, 572728839, 857081351, 353776179, 857084949, 387396147, 909579798, 656815157, 656877110, 822158886, 101123846, 370414854, 909259571, 572729143, 590689574,
- 101231617, 151979269, 539240996, 286263566, 168693258, 185012041, 151263751, 17568791, 319096078, 991688446, 437522226, 3077192466, 340531260, 3170969628, 134812421, 252976411, 168696327,
- 219023952, 218172440, 941628186, 440015381, 4261808137, 185415589, 303044612, 810639130, 5248028, 4294901509, 16777918, 1573056, 3407912, 4980800, 506532608, 102110979, 875824903, 36582449,
- 589443107, 322319927, 654705969, 840120102, 35533363, 572986389, 370414854, 892744243, 337061428, 909259542, 589706293, 336004642, 909259542, 589706293, 1151993378, 87579768, 739251201, 1114921010,
- 67895553, 2231301915, 34014729, 1006831462, 3761065832, 219353869, 856888077, 319622419, 319622419, 218960784, 218960659, 96403731, 1148738616, 201595665, 1950482689, 271331928, 1701248532,
- 151389955, 1328380929, 3271769192, 319622419, 319622419, 320015744, 320015629, 320015677, 320015629, 768, 180479, 151044097, 2046829056, 922812416, 589506102, 387384866, 117835285, 51261745,
- 857084949, 892744225, 654454324, 822552358, 370611733, 101058326, 572728871, 336922119, 387323415, 370553109, 353768983, 101123604, 101979399, 891691555, 656811573, 656814385, 909583910, 387323702,
- 840373782, 875902519, 656811559, 656811559, 875898406, 926299958, 859190325, 1073813042, 168363567, 101255876, 67502895, 658128149, 1073817656, 975648808, 117839165, 134941228, 235012616,
- 218895112, 84215305, 336136718, 235866632, 202181131, 135006216, 50529806, 50530312, 67373070, 218697738, 84280840, 134351118, 252315667, 201984783, 201852940, 138895361, 1191710993, 33817120,
- 1564617998, 943204414, 1113407016, 84086317, 50400856, 134745603, 84214280, 50595076, 16974851, 101058306, 386928404, 235079174, 135007240, 33882383, 251855105, 50857736, 67371265, 100926721,
- 84083717, 117571842, 269682181, 84350479, 201854467, 655372, 29425408, 12583360, 2162712, 4456485, 5177419, 5636178, 6160474, 589365504, 286590498, 355669524, 336922146, 557003542, 288699954,
- 839067188, 101979414, 926228771, 657655601, 908470065, 909587251, 857151282, 117904946, 587601431, 570820387, 572729127, 825702182, 657928983, 924255019, 823600947, 822556439, 822555399,
- 1610684195, 220258558, 218960659, 537727763, 942153729, 319629368, 16715027, 471600683, 151585820, 302324536, 154606597, 471598346, 940116228, 85067035, 168376092, 941307909, 456661787, 923671297,
- 238489116, 470683150, 17701957, 4262269888, 1074990528, 319622419, 1073817656, 2164144168, 319622419, 806924352, 806357040, 271583240, 137375752, 134754320, 805834800, 405811248, 405805104,
- 404244504, 262168, 33554432, 8388864, 1245187, 2555927, 590676224, 841032981, 336925974, 572596998, 875902246, 354484534, 841032993, 336925974, 572596998, 875902246, 2160066870, 2684481790,
- 337386516, 471097598, 4288938268, 4261413120, 346030448, 4262730780, 471602272, 538976257, 1075059808, 337386516, 4263253056, 476061920, 471089172, 339743772, 196636, 29425408, 12583360, 2031637,
- 318767164, 587663138, 336922146, 841036566, 640955702, 640099107, 370345763, 842216214, 118699830, 387396145, 101127190, 354887458, 572720660, 120927526, 640098822, 909588276, 118035620, 320015712,
- 226492685, 1611469587, 4229171463, 320602389, 18617334, 118145045, 117901136, 237438740, 655231498, 117904391, 17256455, 319689408, 320015629, 236129549, 2919137298, 320477715, 121656065,
- 118753104, 2250704647, 168693258, 117909382, 1342641159, 196615, 29425408, 12583360, 2031637, 318767164, 587663138, 336922146, 841036566, 640955702, 640099107, 336660259, 841036566, 118568246,
- 387396145, 101127190, 354887458, 572720660, 120927526, 640098822, 909588276, 118035620, 320015712, 226492685, 1611469587, 4229171463, 72230, 180364826, 117919751, 654775303, 235538958, 118753063,
- 122685191, 236109825, 319622419, 319622419, 4269806094, 640031424, 1077936410, 336023559, 654771975, 235801222, 120030730, 118753031, 67110736, 3237937152, 3221340161, 587209216, 1442855424,
- 823328768, 353702961, 857085460, 892745266, 825570357, 656880693, 101123878, 859117333, 587600917, 822552098, 336922118, 841036566, 640955702, 117909031, 656876038, 859050790, 353710643, 353710643,
- 354624276, 572728084, 572732725, 859059509, 975396915, 574300963, 185294869, 2687505760, 790700335, 306131232, 226623757, 271662866, 235226893, 1343047429, 268963848, 135268360, 135268368,
- 1073811464, 589825028, 975381306, 67381283, 604509754, 136578052, 269511190, 1999580961, 221664271, 906826258, 235278164, 1275397452, 135397646, 268963848, 134746120, 135268368, 256, 2147672319,
- 721461249, 353566720, 352723491, 858986004, 892679730, 370413875, 909259571, 842216757, 640955702, 102900515, 287511829, 589506100, 1619002914, 219353869, 1611861376, 228592915, 319643667,
- 226495763, 219373587, 18025888, 219390080, 219353869, 228654752, 2685211411, 319622419, 27266323, 320015712, 1536, 2147664127, 184598529, 922757888, 1426082048, 26368, 640098817, 842217015,
- 101127703, 372388615, 587600917, 656876067, 353769223, 587600917, 892675618, 925247015, 389166647, 370611201, 875902519, 101131815, 117838871, 640098822, 909391142, 389166647, 337057302, 909579799,
- 640103477, 337053191, 570820358, 891692583, 909588020, 370546482, 236752897, 470682893, 218959388, 221577486, 1074598675, 1009322251, 219352619, 423367437, 223549187, 3422424353, 606348324,
- 606348324, 505291464, 572399172, 1142824482, 3089243678, 606348324, 606348324, 505291464, 572399172, 1142824482, 19013150, 404232288, 404232216, 219365400, 554111757, 285875249, 320015744,
- 270954253, 171971130, 720371210, 336925972, 353643050, 573182997, 286331196, 572668945, 286331196, 706886673, 336925972, 353643050, 573182997, 286331196, 572668945, 286331196, 83901457, 3774808064,
- 2684469249, 117441280, 251661056, 7936, 857023233, 857023253, 488846631, 53818114, 353776161, 587600913, 891691553, 20329489, 2155905152, 2155921536, 440402304, 4263126566, 640031424, 1082155009,
- 2155921536, 25198656, 4263126528, 640031424, 440402202, 1376294, 31522560, 10486208, 1507339, 3080227, 4653115, 6226003, 7798891, 9371779, 10944667, 12517555, 14090443, 15663331, 385876219,
- 875902514, 102900518, 924193813, 336922146, 909259542, 52835381, 336922146, 909259542, 52835381, 875902514, 102900518, 387322901, 336922146, 909259542, 52835381, 875902514, 102900518, 387322901,
- 336922146, 909259542, 52835381, 875902514, 102900518, 320214037, 336922146, 909259542, 52835381, 875902514, 102900518, 387322901, 336922146, 909259542, 52835381, 336922146, 909259542, 86389813,
- 875902514, 102900518, 85333013, 336922146, 909259542, 86389813, 875902514, 102900518, 387322901, 336922146, 909259542, 388379701, 875902514, 102900518, 622203925, 336922146, 909259542, 623260725,
- 875902514, 102900518, 622203925, 336922146, 909259542, 388379701, 875902514, 102900518, 538317845, 219353869, 1829966605, 219353869, 219353869, 219353869, 219353869, 219353869, 3440579341,
- 219353869, 219353869, 219353869, 219353869, 219353869, 1829966605, 219353869, 219353869, 219353869, 219353869, 219353869, 3440579341, 219353869, 219353869, 219353869, 4262662925, 320015731,
- 320015629, 319655169, 319622419, 225705491, 218960659, 231543571, 218960659, 229839635, 218960659, 2382238483, 219353869, 18027277, 320015731, 320015629, 319655422, 319622419, 319664915, 319622419,
- 219357203, 219353869, 322966285, 320015629, 18025741, 218960768, 218960659, 318832403, 320015629, 2148732173, 319622419, 319622419, 219365377, 219353869, 327160589, 320015629, 4279438605,
- 218960640, 218960659, 331350291, 320015629, 4279438605, 218960640, 218960659, 219381779, 219353869, 2147554061, 319622419, 319622419, 218960704, 218960659, 219381779, 219353869, 322966285,
- 320015629, 538119437, 319622419, 319622419, 218960704, 218960659, 219365395, 219353869, 327160589, 320015629, 1074990349, 319622419, 319622419, 218960704, 218960659, 524307, 31522560, 10486208,
- 2097172, 3670060, 5242948, 6815836, 873541888, 841036598, 101979414, 354558243, 587600913, 339158562, 639771398, 859190325, 337057330, 639771398, 859190325, 336008754, 639771398, 859190325,
- 337057330, 639771398, 859190325, 572986930, 909391142, 353776179, 839321108, 101979414, 891691555, 574043700, 909391142, 353776179, 556729876, 319639553, 2969439507, 218960656, 219389971,
- 219353869, 331354893, 320015629, 1611861261, 319622419, 319622419, 218960832, 218960659, 319627283, 319622419, 319622419, 319622419, 319622419, 319622419, 558891283, 218960687, 2969440275,
- 219353869, 219353869, 219353869, 219353869, 219353869, 219353869, 219353869, 219353869, 2467500813, 319622419, 319622419, 218960672, 218960659, 219381779, 219353869, 50336525, 3187670527,
- 3070313730, 805309184, 18176, 370611219, 875902519, 101131815, 369504519, 587662615, 101123874, 556996119, 657864498, 640099879, 656869127, 572728870, 640091911, 657528582, 369493767, 926291479,
- 336926519, 909259542, 657732917, 404232400, 404232216, 134530584, 391119113, 269030432, 302582280, 152240129, 140511753, 571150609, 1040982863, 387592999, 1326582036, 87034656, 403442956,
- 322774276, 320015629, 236748801, 470682893, 218959388, 302625550, 303991812, 252710688, 2685407248, 234946831, 627515693, 136719405, 241502212, 403476513, 218891524, 223025775, 1611469587,
- 33556501, 3237937152, 3221291010, 1056977664, 838926336, 118822166, 372651830, 353638166, 589497876, 370611751, 101123590, 891691555, 117847861, 656811526, 909391142, 639054643, 909518375,
- 571814455, 370414854, 892744243, 50406964, 386732300, 961555225, 51122441, 117771122, 53099803, 219220995, 1345001751, 285280313, 192021260, 1025181700, 319619627, 319622419, 297795859, 192021260,
- 1025181445, 201524010, 420941073, 137973803, 51122433, 134482802, 36388123, 219220995, 1345001751, 333449529, 320015629, 1248525, 4294967045, 16974523, 2031810, 4456504, 7274587, 640745728,
- 101058311, 102896917, 857084949, 892679730, 102896951, 857084949, 892679730, 590414132, 353699362, 858986004, 892679730, 589506100, 589506087, 337053474, 640091655, 909587509, 824514071, 119940918,
- 370607623, 101135155, 926357015, 589702966, 925967651, 640099894, 654771974, 101131814, 370611974, 217317682, 252420110, 438707738, 442508826, 437921318, 457965094, 337386516, 471602368, 151788308,
- 152124945, 404232297, 404232216, 85917976, 2148141579, 184812552, 184887096, 142608906, 940246020, 358667518, 907351810, 302647827, 35132471, 235168021, 50968833, 185729568, 336862304, 1981029404,
- 337393939, 337386516, 3791523728, 342889500, 1880366108, 236067860, 236747278, 470682893, 218959388, 134964750, 124782856, 190450187, 1879640072, 2500463367, 356324964, 169018641, 285545226,
- 1679179029, 4278255621, 46202877, 12779776, 16777246, 386271025, 654771735, 117909030, 387384838, 842208790, 875889214, 640100134, 677052678, 875632395, 436742253, 235823116, 369367044, 2074238221,
- 1477251142, 2801867535, 672340832, 187774061, 103286022, 240651803, 2725987856, 68488797, 918552, 4278190082, 29360608, 983200, 16777256, 352723489, 857084945, 892744225, 119944209, 353769265,
- 587597332, 640100130, 389429047, 657929751, 909588262, 3237904385, 438707738, 639254529, 254571814, 255747644, 268766212, 336203312, 186194486, 17175558, 4263126688, 640031424, 440402202, 67920166,
- 1013333519, 118565903, 420152596, 152385050, 1060878, 4278190088, 25166528, 983232, 3342375, 5701707, 7274595, 16777339, 353699362, 556996116, 892679730, 119744052, 118888241, 570632966, 926361127,
- 389165878, 859191063, 101983026, 891691555, 842217012, 102892822, 370413845, 909254963, 354628917, 589497876, 892675618, 842204945, 588518677, 892674595, 842209076, 588518677, 892674595, 842209076,
- 588518677, 892674595, 859047220, 353710643, 572728084, 436207925, 18490918, 640031296, 140534810, 2416838407, 118444080, 121637126, 285739788, 218957624, 218960773, 218960659, 452001299, 18490918,
- 2686851712, 226495763, 269506579, 269488144, 269488144, 269488144, 17829904, 269488224, 17829904, 3759810240, 438707738, 1797659360, 218893456, 1342967054, 1410730249, 320015627, 320015629,
- 4279903789, 640031232, 220217370, 537727763, 272629761, 269488144, 269510672, 269488144, 269488232, 269488144, 269488144, 4278386704, 46137343, 12648833, 2818083, 318767166, 909580081, 825439030,
- 118895155, 654706183, 926361126, 369428259, 101058326, 640024871, 389428791, 590812977, 387198983, 842204977, 101979414, 639771427, 859190325, 1898395443, 270140422, 488149932, 386075398, 51186957,
- 19687174, 100796435, 4245165062, 100796592, 1588597766, 2013951265, 319629841, 228592915, 856494867, 1505427742, 622071834, 218967063, 219611907, 114859288, 34080788, 114295046, 34080788,
- 678644362, 322885889, 320015629, 1762856205, 654312448, 318955007, 469803009, 1308636672, 20736, 909586711, 103163686, 873531143, 102900518, 640094485, 101058342, 857085719, 370414386, 101135155,
- 858986007, 875902514, 925049638, 589702966, 386277923, 34546225, 370611718, 859256630, 924194327, 36648502, 389482278, 34166968, 152766985, 218960672, 453582867, 151128330, 235801176, 856494994,
- 151523146, 319651861, 1244859667, 352913423, 1611861376, 272632084, 202115334, 1476855321, 202966535, 268830988, 338168128, 174069268, 34146587, 771826697, 219353869, 153408254, 453576962,
- 17457162, 1225985440, 320082704, 1225985293, 320082704, 545264333, 101062924, 235801609, 101058828, 2149583897, 673746962, 654312448, 318955007, 469803009, 1291859456, 20480, 370618643, 637929222,
- 336668455, 639771398, 101126453, 640034566, 859191095, 909383474, 389165875, 856098582, 336926258, 572728070, 926361127, 388375075, 369237810, 637929222, 119744295, 640091654, 906116902,
- 3089576725, 151128408, 537467658, 319622419, 169543968, 1476985353, 2450394634, 360713491, 1242499081, 320015667, 152403981, 860491528, 341840653, 101728265, 420219913, 123209478, 202119430,
- 1074791945, 18098185, 453664918, 151128329, 231931428, 17634067, 34153518, 169543945, 220203616, 252974099, 218960713, 269685779, 313725769, 420225152, 201917958, 151784974, 202966534, 2417131552,
- 327720, 48299783, 10486080, 2752540, 4587576, 385876052, 641087281, 117843495, 640946439, 352723491, 640034577, 386270727, 842208791, 352723475, 858986004, 875902514, 570893094, 370414854,
- 909259571, 589706293, 352723463, 858986004, 875902514, 570893094, 370414854, 909259571, 589706293, 34166936, 152766985, 218960672, 453582867, 151128330, 235801176, 320015794, 319627277, 220204307,
- 1611469587, 219353869, 320015712, 319660045, 228592915, 3758953235, 219353869, 453664790, 151128329, 221118756, 4262269715, 34153682, 169543945, 3221293664, 319622419, 319622419, 218960768,
- 218960659, 219381779, 219353869, 327160589, 320015629, 1248525, 4278648837, 20972256, 1835168, 3670058, 5505094, 389092096, 101123606, 287778598, 572720660, 118568230, 640091654, 909588262,
- 858993203, 336926258, 572728070, 909391142, 372388631, 587600917, 891691555, 857159220, 336926258, 572728070, 909391142, 372388631, 587600917, 891691555, 1486370356, 168362505, 320866587,
- 538119437, 151657225, 173541634, 548539918, 219353869, 320015648, 319643661, 224398611, 2685211411, 219353869, 320015776, 319676429, 232787219, 2516652819, 152767072, 604570121, 319673086,
- 771820819, 151128356, 1611275017, 218960650, 218960659, 219381779, 219353869, 327160589, 320015629, 2148732173, 319622419, 319622419, 654312448, 134406399, 469803009, 1174419968, 23040, 656552215,
- 926295591, 387388982, 859190289, 286594610, 389428791, 117904918, 353772806, 372388629, 721818645, 891691522, 858994228, 637929269, 926295591, 103233079, 370546438, 657864247, 822552102, 875898406,
- 372388662, 117904405, 640091654, 245380902, 34166794, 152766985, 218960672, 453582867, 151128330, 352389720, 319623181, 808455443, 219353869, 403441168, 218825732, 202575664, 419825161, 101256204,
- 437852422, 623129635, 137434419, 67832602, 1611276296, 151591690, 19138818, 320015662, 617807373, 151585289, 174066203, 1611664058, 319622419, 319622419, 184812084, 68684813, 113313296, 151784473,
- 202966534, 158796044, 874781998, 488907828, 134482754, 727560, 4280745988, 17302240, 1835168, 4718651, 318767196, 117908017, 370611718, 288831286, 842208788, 387003702, 909579798, 640100150,
- 119943425, 386270727, 926357014, 102900501, 991302677, 892744194, 589506100, 824652853, 640099846, 372651830, 117839383, 369493809, 926291479, 875902519, 102900518, 2685801493, 156764686,
- 453642498, 219357193, 153096973, 34146843, 17455113, 806293013, 67439629, 268831768, 219353869, 319631408, 303041811, 101062924, 420219913, 889783814, 184813575, 805837323, 606352406, 2684428852,
- 453664778, 151128329, 231931428, 17634067, 34153518, 169543945, 4210952800, 68158986, 202181656, 322175493, 320015629, 1611861261, 151427856, 102304780, 202115334, 185154841, 67635226, 605897227,
- 607400996, 100675101, 3238002175, 3221307394, 436213504, 889204224, 1342192896, 823328768, 369237810, 637929222, 119744295, 640091654, 906116902, 923215639, 858994228, 336926258, 336926215,
- 572728070, 926233894, 590624050, 855776547, 590624050, 101127971, 640100130, 842413876, 909580055, 336992050, 1124603248, 218760717, 84285452, 402982490, 84544780, 671695374, 329454355, 790708237,
- 556734729, 1611861328, 807407632, 3608154128, 169478848, 168364384, 2840136218, 151656970, 2685714433, 85462048, 202181126, 101321996, 537663493, 765465760, 319651885, 303309103, 790700823,
- 543165715, 1075843088, 2534412320, 1611205056, 151656970, 162155017, 1706505, 3, 25166400, 720992, 3473449, 926037760, 589702966, 386271010, 640889622, 909521973, 370553395, 101061653, 639770915,
- 909391142, 372388662, 924062998, 386271010, 926036758, 2418419510, 387389230, 388902423, 2786531095, 1093081200, 658581544, 4264050983, 658581664, 673726759, 785393473, 387389207, 387395118,
- 679483159, 673720360, 606611496, 658581548, 673726759, 1093084993, 658581544, 740835623, 673720444, 673720360, 4278321192, 33554683, 10486149, 3932187, 639762688, 589702695, 117575202, 842208790,
- 53360438, 117842467, 822543878, 640099878, 370607623, 370546454, 926298675, 909588022, 101131815, 101058310, 19276323, 118295360, 303043079, 85072160, 892687648, 302325845, 269623321, 218564370,
- 254022620, 101715982, 605365003, 2069716347, 186848293, 235933702, 588456975, 1749370217, 84508673, 1211173639, 336468555, 1259998740, 118174024, 181340421, 168627736, 857477642, 1044260118,
- 473175333, 218761746, 302651151, 33562399, 0, 2684452866, 687872256, 907214848, 859191095, 387330611, 352525847, 654771732, 589506085, 822544162, 926364725, 858994230, 553981746, 127477282,
- 134791463, 69474051, 757927711, 605165598, 1009969918, 2383088139, 1293158157, 691210798, 553522945, 939599386, 36899624, 128128797, 472917018, 402923028, 3204522947, 219880962, 3273469992, 196646,
- 29425408, 12583296, 1441800, 285212702, 909391153, 355676982, 858992903, 101061653, 639771427, 589640998, 372388661, 1227560214, 3232763948, 742992832, 726215744, 280002561, 19613996, 1227628544,
- 2149629995, 724257068, 3231722569, 2902315, 4278190085, 16908992, 1769666, 3211303, 4522043, 87097600, 353776179, 587600913, 1025909281, 909587459, 372647223, 117839383, 386271010, 926036758,
- 86386486, 842216212, 589509685, 856950562, 875901491, 388113187, 842216212, 589509685, 4277076258, 639297004, 2164136486, 186328602, 179110158, 167969553, 387395208, 774772503, 387389207,
- 1611707134, 274731024, 276828176, 269516816, 269508624, 2432766048, 4279903825, 640031232, 74223642, 67703585, 151651198, 683938058, 673720360, 271067176, 1343229968, 1343229968, 1052688,
- 4278190084, 16777920, 1114304, 3473443, 889192513, 370611732, 909522738, 656815157, 101130790, 102900998, 387188231, 842208790, 875968310, 119940647, 640099874, 909522740, 387330611, 101127190,
- 639772422, 859190325, 336926258, 993740038, 1161509770, 2319137605, 21314363, 220994048, 739052813, 220994074, 739052813, 289153562, 1007751441, 289153570, 1007751441, 320015650, 320015629,
- 594953664, 1982013986, 594953541, 1982013986, 370547227, 437655092, 873862682, 3759805974, 1142824482, 572661278, 507780638, 325067294, 320015629, 1248525, 4278190084, 25166272, 3276992, 4587580,
- 318767184, 909390613, 353776179, 859190323, 857019954, 353703474, 101123860, 101979413, 639771427, 657732917, 892675623, 858994228, 859190325, 571807282, 858985493, 590624050, 336929287, 892482355,
- 570893108, 858985493, 590624050, 219361392, 320869133, 269683981, 68033556, 3759414286, 68033556, 269753358, 235538958, 278925328, 269525008, 2685407392, 278925328, 1218969872, 219353869,
- 219353869, 345773084, 336462862, 471602268, 236215316, 2618560004, 172497940, 278007310, 1074794512, 269488144, 269488192, 262160, 46202624, 10486144, 2949148, 4784189, 336924928, 338899734,
- 909259542, 842211637, 640955702, 875897635, 555951654, 889259554, 858994228, 353703474, 336929315, 622146355, 353776179, 587600917, 891691555, 322319413, 925247266, 389165878, 788924182, 674762785,
- 536950824, 320015648, 1227563021, 565247532, 322961711, 319635469, 537923616, 226533630, 2148340499, 1829966605, 218959388, 236723214, 17698061, 790749264, 674773032, 319622419, 726215840,
- 3236953647, 219353869, 1611665472, 1074598880, 219353869, 4262661440, 404232368, 404232216, 24, 369098752, 16780801, 0, 436207616, 16803328, 0, 419430656, 16785152, 0, 83886592, 16802048, 0,
- 520094464, 16777216, 0, 419431424, 16785152, 0, 838862080, 16809984, 0, 369100288, 16791552, 0, 738200064, 16822784, 0, 385878784, 16834048, 0, 318771200, 16797184, 0, 83890432, 50356480,
- 151257344, 872415232, 50381057, 151257344, 838861056, 50344705, 151257344, 167772672, 50378497, 151257344, 1040188160, 50394368, 151257344, 838861824, 50344705, 151257344, 1677722880, 50394369,
- 151257344, 738199040, 50357505, 151257344, 1476397568, 50354434, 151257344, 771754752, 50376962, 151257344, 637538304, 50368769, 151257344, 167776512, 1866905345, 1092645998, 1869833591, 908092781,
- 1701987872, 1867718757, 761555308, 775237174, 1852786225, 2000756852, 1836020581, 540418149, 1701147206, 1819235104, 1866884201, 2000778350, 1836020581, 1917204069, 1395484005, 1684630639,
- 1953394502, 1702314272, 1701670771, 1176516128, 1399154034, 1684630639, 2037411651, 1751607666, 1663574132, 1866866729, 1092645998, 1869833591, 1700160877, 1869181810, 926359662, 825241139,
- 942749489, 673199415, 1953394502, 1702314272, 1701670771, 1919252000, 1852795251, 775299130, 691088949, 543516756, 660759927, 1869422707, 1881175155, 1819635823, 1763734113, 544108387, 544499059,
- 543452769, 1819242356, 779381099, 1886680168, 791624307, 1953394534, 1936029537, 778399087, 7171939, 7274566, 7602286, 4259872, 6619255, 7274611, 6619245, 3538976, 4587552, 6619250, 2097253,
- 7274579, 6881388, 2949220, 3014710, 3014709, 4587569, 7209071, 2097268, 7798849, 7536741, 7143535, 2097253, 2097206, 7471174, 6619237, 5439520, 7077999, 6553705, 7274566, 7602286, 7798849, 7536741,
- 7143535, 3539045, 7471174, 6619237, 5439533, 7077999, 6553705, 7274566, 7602286, 4259872, 6619255, 7274611, 6619245, 3538976, 4587552, 6619250, 5439589, 7077999, 6553705, 7274563, 7929968, 6881394,
- 6815847, 2097268, 6488104, 2097193, 7274566, 7602286, 4259872, 6619255, 7274611, 6619245, 6619222, 7536754, 7274601, 2097262, 3604535, 3014707, 3211312, 3604529, 3670065, 3473463, 2621472, 7274566,
- 7602286, 4259872, 6619255, 7274611, 6619245, 7733280, 7471205, 6881395, 7209071, 2097210, 3014710, 3014709, 2687025, 6815828, 2097253, 6619255, 2556002, 2097267, 7274605, 7602291, 7340064, 7340143,
- 7078005, 7471201, 6881312, 7274595, 2097262, 6619251, 2097268, 7209057, 2097252, 7274612, 7077999, 6881387, 3014772, 7602280, 7340148, 3801203, 3080239, 7274598, 7602286, 7798881, 7536741, 7143535,
- 3014757, 7274595, 109, 512, 0, 0, 0, 0, 0, 0, 0, 29189, 33620736, 67175169, 218105856, 268439040, 100730113, 134285057, 167840001, 201394945, 234949889, 268504833, 570429697, 1140859648,
- 1174422784, 1207977728, 1241532672, 1275087616, 1308642560, 1342197504, 1375752448, 1409307392, 1442862336, 1476417280, 1509972224, 1543527168, 302079232, 335614721, 369169665, 402724609,
- 436279553, 469834497, 503389441, 536944385, 570499329, 604054273, 637609217, 671164161, 704719105, 738274049, 771828993, 805383937, 838938881, 872493825, 906048769, 939603713, 973158657,
- 1006713601, 1040268545, 1073823489, 1107378433, 1140933377, 1174488321, 1208043265, 1241598209, 1275153153, 1308708097, 1342263041, 1375817985, 1409372929, 1442927873, 1476482817, 1510037761,
- 1543592705, 1577147649, 1610702593, 1644257537, 1677812481, 1711367425, 1744922369, 1778477313, 1812032257, 1845587201, 1879142145, 1912697089, 1946252033, 1979806977, 2248177409, 2030139393,
- 2063694337, 2097249281, 2130804225, 2164359169, 2197914113, 2231469057, 2265024001, 2298578945, 2332133889, 2365688833, 2399243777, 2432798721, 2466353665, 2499908609, 2533463553, 2567018497,
- 2600573441, 2634128385, 2667683329, 2701238273, 2734793217, 2768348161, 2801903105, 2835458049, 2869012993, 2902567937, 2936122881, 2969677825, 3003232769, 3036787713, 3070342657, 3103897601,
- 3137452545, 3171007489, 3204562433, 3238117377, 3271672321, 3305227265, 3338782209, 3372337153, 3405892097, 3439447041, 3473001985, 3506556929, 3540111873, 3573666817, 3607221761, 3640776705,
- 3674331649, 3707886593, 3741441537, 3774996481, 3808551425, 3842106369, 3875661313, 3909216257, 3942771201, 3976326145, 4009881089, 4043436033, 4076990977, 4110545921, 4144100865, 4177655809,
- 4211210753, 4244765697, 4278320641, 16908290, 50463234, 84018178, 117573122, 151128066, 184683010, 218237954, 251792898, 285347842, 318902786, 352457730, 386012674, 419567618, 453122562, 486677506,
- 520232450, 553787394, 587342338, 620897282, 654452226, 688007170, 721562114, 755117058, 788672002, 822226946, 855781890, 889336834, 922891778, 956446722, 990001666, 1023556610, 1057111554,
- 1090666498, 1124221442, 1157776386, 1191331330, 1224886274, 1258441218, 1291996162, 1325551106, 1359106050, 1392660994, 1426215938, 1459770882, 1493325826, 1526880770, 1560435714, 1593990658,
- 1627545602, 1661100546, 1694655490, 1728210434, 1761765378, 1795320322, 1828875266, 1862430210, 1895985154, 1929540098, 1963095042, 1996649986, 2030204930, 2063759874, 2097314818, 2130869762,
- 2164424706, 2197979650, 2231534594, 2265089538, 2298644482, 2332199426, 2365754370, 2399309314, 2432864258, 2466419202, 2499974146, 2533529090, 2567084034, 2600638978, 2634193922, 2667748866,
- 2701303810, 2734858754, 2768413698, 2801968642, 2835523586, 2869078530, 2902633474, 2936188418, 2969743362, 3003298306, 3036853250, 3070408194, 3103963138, 3137518082, 4009802754, 3187850498,
- 3221405442, 3254960386, 3288515330, 3322070274, 3355625218, 3389180162, 3422735106, 3456290050, 3489844994, 3523399938, 3556954882, 3590509826, 3624064770, 3657619714, 3691174658, 3724729602,
- 3758284546, 3791839490, 3825394434, 3858949378, 3892504322, 3926059266, 3959614210, 3993169154, 4026724098, 4060279042, 4093833986, 4127388930, 4160943874, 4194498818, 4228053762, 4261608706,
- 261890, 33751299, 67306243, 100861187, 134416131, 167971075, 201526019, 235080963, 268635907, 302190851, 335745795, 369300739, 402855683, 436410627, 469965571, 503520515, 537075459, 570630403,
- 604185347, 637740291, 671295235, 704850179, 738405123, 771960067, 805515011, 839069955, 872624899, 906179843, 939734787, 973289731, 1006844675, 1040399619, 1073954563, 1107509507, 1141064451,
- 1174619395, 1208174339, 1241729283, 1275284227, 1308839171, 1342394115, 1375949059, 1392749312, 1426281475, 1459836419, 1493391363, 1526946307, 1560501251, 1594056195, 1627611139, 1661166083,
- 1694721027, 1728275971, 1761830915, 1795385859, 1828940803, 1862495747, 1896050691, 1929605635, 1963160579, 1996715523, 2030270467, 2063825411, 2097380355, 2130935299, 2164490243, 2198045187,
- 2231600131, 2265155075, 2298710019, 2332264963, 2365819907, 2399374851, 2432929795, 2466484739, 2500039683, 2533594627, 2567149571, 2600704515, 2634259459, 2651031552, 2684591875, 2718146819,
- 2751701763, 2785256707, 2818811651, 2852366595, 2869136128, 2902699011, 2936253955, 2969808899, 3003363843, 3036918787, 3070473731, 3104028675, 3137583619, 3171138563, 3204693507, 3238248451,
- 3271803395, 3305358339, 3338913283, 3372468227, 3406023171, 3439578115, 3473133059, 3506688003, 3540242947, 3573797891, 3607352835, 3640907779, 3674462723, 3708017667, 3741572611, 3775127555,
- 3808682499, 3842237443, 3875792387, 2348869635, 3909323264, 3942902275, 3976457219, 4010012163, 4043567107, 4077122051, 4110676995, 4144231939, 4177786883, 4211341827, 4244896771, 4278451715,
- 17039364, 50594308, 84149252, 117704196, 151259140, 184814084, 218369028, 251923972, 285478916, 319033860, 352588804, 386143748, 419698692, 453253636, 486808580, 520363524, 553918468, 587473412,
- 621028356, 654583300, 688138244, 721693188, 755248132, 788803076, 822358020, 855912964, 889467908, 923022852, 956577796, 990132740, 1023687684, 1057242628, 1090797572, 1124352516, 1157907460,
- 1191462404, 1225017348, 1258572292, 1292127236, 1325682180, 1359237124, 1392792068, 1426347012, 1459901956, 1493456900, 1527011844, 1560566788, 1594121732, 1627676676, 1661231620, 1694786564,
- 1728341508, 1761896452, 1795451396, 1829006340, 1862561284, 1896116228, 1929671172, 1963226116, 1996781060, 2030336004, 2063890948, 2097445892, 2131000836, 2164555780, 2198110724, 2231665668,
- 2265220612, 2298775556, 2332330500, 2365885444, 2399440388, 2432995332, 2466550276, 2500105220, 2533660164, 2567215108, 2600770052, 2634324996, 2667879940, 2701434884, 2734989828, 2768544772,
- 2802099716, 2835654660, 2869209604, 2902764548, 2936319492, 2969874436, 3003429380, 3036984324, 3070539268, 3104094212, 3137649156, 3171204100, 3204759044, 3238313988, 3255089152, 3288646404,
- 3322201348, 3355756292, 2449524996, 3406088708, 3439643652, 3473198596, 3506753540, 3540308484, 3573863428, 3607418372, 3640973316, 3674528260, 3708083204, 3741638148, 3775193092, 3808748036,
- 3842302980, 3875857924, 3909412868, 3942967812, 3976522756, 4010077700, 4043632644, 4077187588, 4110742532, 4144297476, 4177852420, 4211407364, 4244962308, 4278517252, 17104901, 50659845, 84214789,
- 117769733, 151324677, 184879621, 218434565, 251989509, 285544453, 319099397, 352654341, 386209285, 419764229, 453319173, 486874117, 520429061, 553984005, 587538949, 621093893, 654648837, 688203781,
- 721758725, 755313669, 788868613, 822423557, 855978501, 889533445, 923088389, 956643333, 990198277, 1023753221, 1057308165, 1090863109, 1124418053, 1157972997, 1191527941, 1225082885, 1258637829,
- 1292192773, 1325747717, 1359302661, 1392857605, 1426412549, 1459967493, 1493522437, 1527077381, 1560632325, 1594187269, 1627742213, 1661297157, 1694852101, 1728407045, 1761961989, 1795516933,
- 1829071877, 1862626821, 1896181765, 1929736709, 1963291653, 1996846597, 2030401541, 2063956485, 2097511429, 2131066373, 2164621317, 2198176261, 2231731205, 2265286149, 2298841093, 2332396037,
- 2365950981, 2399505925, 2433060869, 2466615813, 2500170757, 2533725701, 2567280645, 2600835589, 2634390533, 2667945477, 2701500421, 2735055365, 2768610309, 2802165253, 2835720197, 2869275141,
- 2902830085, 2936385029, 2969939973, 3003494917, 3037049861, 3070604805, 3104159749, 3137714693, 3171269637, 3204824581, 3707813893, 3255156997, 302039813, 3305489413, 3339044357, 3372599301,
- 3406154245, 3439709189, 3473264133, 3506819077, 3540374021, 3573928965, 3607483909, 3641038853, 3674593797, 3708148741, 3741703685, 3775258629, 3808813573, 3842368517, 3875923461, 3909478405,
- 3943033349, 3976588293, 4010143237, 4043698181, 4077253125, 4110808069, 4144363013, 4177917957, 4211472901, 4245027845, 4278582789, 17170438, 50725382, 84280326, 117835270, 151390214, 184945158,
- 218500102, 252055046, 285609990, 319164934, 352719878, 386274822, 419829766, 453384710, 486939654, 520494598, 554049542, 587604486, 621159430, 654714374, 688269318, 721824262, 755379206, 788934150,
- 822489094, 856044038, 889598982, 923153926, 956708870, 990263814, 1023818758, 1057373702, 1090928646, 1124483590, 1158038534, 1695237638, 1634493304, 1769234797, 1745317487, 1953002337, 1678468961,
- 1634495599, 1769155954, 805400167, 838938881, 872493825, 906048769, 939603713, 1812543745, 762540901, 1851877492, 1970365702, 208890977, 1634038375, 762471796, 1851877492, 1919253008, 1769418095,
- 761820260, 1667330163, 1634076261, 1952801653, 1969317387, 762602851, 1885958756, 1970235412, 1663919475, 1852664168, 1999468901, 1868852841, 1869089911, 761623413, 1852270963, 1947626593,
- 1701866853, 1970561394, 1630365042, 2003792498, 2003788845, 1702106222, 1919250541, 1920300129, 1918971237, 762802034, 1946644597, 1818845554, 1644720741, 1702126433, 157378930, 1952670050,
- 1969844837, 1868696173, 1769221496, 1702196083, 1851877396, 1869098340, 1852400748, 1701653863, 1633904996, 1634209132, 1932354670, 1802658160, 225666412, 1684955496, 1969368435, 1701601890,
- 1634211443, 1752392814, 761621345, 1886218611, 1932354924, 1752392044, 1851877391, 1634235236, 1932354923, 1752392044, 1634035727, 1769155940, 1663919460, 1751610735, 1634035733, 1769155940,
- 1663919460, 1751610735, 1634497325, 1745774707, 761553253, 1701079411, 1935764781, 1701318507, 1932354657, 761619561, 1970432374, 1869091443, 761623413, 1835624547, 762930542, 1919251317,
- 1970235404, 1814914419, 1869901921, 1970015088, 762537838, 1970432374, 1701842291, 1701605487, 1920098605, 192116591, 1851878512, 1819487589, 208171873, 1886221680, 1684368685, 1818321769,
- 1836412937, 1869819248, 1930195041, 1818585448, 1769352548, 74675570, 1802398067, 1634693892, 1953696880, 1635217519, 761815924, 1930047538, 762343272, 1935764595, 1953696616, 761623151,
- 1935764595, 1869877864, 1952803945, 1885433901, 1932358245, 1752392044, 1702065419, 1932358514, 1752392044, 1919514117, 1980461941, 1937076841, 1634497325, 1980196979, 1937076841, 1980003173,
- 208958309, 1953719670, 1952542765, 1936025699, 1920098576, 1949136751, 1684956530, 2003788845, 1918963310, 762802034, 1852142196, 1886727524, 1920098581, 1965913967, 1919298928, 1647144303,
- 1801675122, 1628206181, 1920234357, 1932356705, 158230377, 1952997730, 1734964013, 1768033390, 1768907636, 1769155950, 1645112935, 762604655, 1751607660, 1852403316, 1868696935, 1647143791,
- 1835757423, 225145441, 1701667171, 1915576690, 1952543855, 1700989285, 1932355940, 208562025, 1918986339, 1868770676, 1852667244, 1634231051, 1731032178, 1953787489, 1634493196, 1919250544,
- 1918988130, 1818429028, 1919252079, 1685021452, 1868770661, 1918988397, 1868761445, 1714251108, 292254319, 1701080931, 1819635757, 1701981548, 1936029041, 1868761716, 762212204, 1852270963,
- 1970430733, 1919509882, 1769155951, 1678208615, 1819308905, 1678342497, 761753199, 1852270963, 1701602568, 1869898102, 1768297330, 1919251564, 1919509293, 761621603, 1918987640, 1818626923,
- 1852404335, 1734964013, 1868959086, 1919247468, 1869374253, 174351731, 1851880038, 1769155939, 1728867943, 1634886005, 1932355950, 57567081, 242120039, 1684955496, 1818439027, 1768976481,
- 1745512302, 1702065519, 1702065453, 1852379506, 1851877732, 1886745133, 1932354917, 141453161, 762341739, 1852270963, 1918987273, 1769155945, 1812819559, 1667593321, 762210671, 1852270963,
- 1851878666, 1932358753, 158230377, 1802723693, 1667327533, 1768753509, 1932356716, 191784809, 1701736301, 1768041849, 175336556, 1919508846, 1769155937, 1845915239, 1701082223, 1634732134,
- 1634889582, 1879794029, 1952805733, 1769155937, 1879666279, 762278757, 1852270963, 1634496520, 1965909358, 1970408304, 1751214448, 1734964013, 1953695342, 1936877921, 1835627528, 1852402789,
- 1920207717, 762012533, 1852797542, 1970540916, 1936288626, 1768697192, 1932353906, 91121513, 1819631990, 1635193716, 1831691374, 1667852129, 1634759469, 1701604210, 1752631667, 762601829,
- 258897761, 1701144695, 1634231148, 1831694953, 358970991, 1735287138, 1701077356, 761882739, 1634427252, 1734964013, 1868695918, 1915579511, 258302825, 1936876912, 1882025583, 1852269938,
- 225734241, 1937076072, 1751330149, 1701735785, 1869089657, 761623413, 1667330659, 1869090155, 761623413, 1768187245, 158097763, 1953391971, 1734964013, 1819282030, 1831695221, 1937075817,
- 1767994120, 1634689644, 1752368756, 1886218610, 1634886163, 1768712570, 1915580001, 762077541, 1852270963, 1634231052, 1932358770, 1819307369, 1768164453, 1634887521, 1701719405, 1678996600,
- 1919377769, 1882025313, 1701078386, 1936942435, 1678865007, 1919377769, 1932356961, 1701012341, 1919906675, 1918985485, 1865246836, 1851876707, 1644781929, 1932355445, 1752392044, 1818846736,
- 1768107365, 1701602162, 1970040877, 1752369523, 1814917231, 191587183, 1970432374, 1868770675, 291793270, 1970432374, 1868770675, 761555318, 1935764595, 1851855720, 1919903843, 1919509293,
- 761621603, 1667590243, 1851857259, 1919903843, 1919509293, 761621603, 1818458213, 1952542049, 326004585, 1751346785, 1663922799, 1818456681, 1836592485, 191591009, 1751346785, 1814917743,
- 426468207, 1869771361, 1868836215, 1965911671, 1667313008, 1936945010, 1852402733, 1918964325, 762802034, 1853321060, 762344749, 1801678700, 1920098579, 1915582319, 1952999273, 762278957,
- 2037672291, 1920098586, 1965913967, 1919298928, 1731030383, 1853190002, 1635200356, 410150260, 1869771361, 1886727543, 1869768237, 1635200365, 762471796, 1886221680, 1920098579, 1965913967,
- 1769090416, 762603623, 1937010532, 1920098579, 762541935, 1853321060, 762278957, 1701734764, 1920098581, 762541935, 1853321060, 762278957, 1886348656, 1629054316, 2003792498, 1701588339,
- 1915581542, 1952999273, 762278957, 1701734764, 1920098571, 762541935, 1852403827, 1920098584, 762541935, 1768714355, 1886727540, 1684955437, 1717922861, 1918963828, 1937207154, 762278957,
- 1668442467, 1628267884, 2003792498, 1869884787, 1953457197, 1920098573, 762541935, 1697476468, 1628530041, 2003792498, 1970548083, 1915580018, 1952999273, 1920098579, 762541935, 1852994932,
- 762278957, 1937010532, 1920098577, 762541935, 1949134965, 1768697199, 1644782958, 761623151, 1701605224, 1953456654, 761621620, 1886351972, 208954732, 1953787746, 1999463788, 1919251553,
- 2003788297, 1868967276, 1645044847, 1936029807, 1667330093, 1735289195, 1769103878, 325412708, 1684632162, 1663919463, 1818456681, 1751330149, 426468197, 1684632162, 1663919463, 1818456681,
- 2019896677, 1835101283, 1869182049, 1919030126, 1701274729, 1919509293, 761621603, 1918987640, 1919028075, 1701274729, 1668246573, 1919028331, 1701274729, 1952544557, 1644589669, 1701536629,
- 1969357940, 1645966183, 1684826485, 761753193, 1668442467, 1630365036, 2003792498, 1734963757, 1645573224, 1684826485, 761753193, 1668442467, 1663919468, 1801676136, 1769300507, 1852400748,
- 1768107367, 1701602162, 1668834605, 1634558316, 1852795252, 1769300501, 1852400748, 1768107367, 1701602162, 1634564141, 1645046642, 1684826485, 761753193, 1734437990, 1769300493, 1852400748,
- 1869360487, 1644981091, 1684826485, 761753193, 258959214, 1818850658, 1735289188, 1768452909, 191130725, 1818850658, 1735289188, 225342765, 1818850658, 1735289188, 1702065453, 1969360498,
- 1768189033, 1999464302, 1952540008, 1920295429, 1661367411, 1865249377, 1633880686, 1970548082, 1818586734, 1768448783, 1663919212, 1633840495, 1953390964, 1768448776, 1701995628, 1768098926,
- 1701602162, 1685024301, 1662153573, 1651534188, 1685217647, 1702195501, 1869182067, 1818432366, 761558383, 2003789939, 762540645, 1702125943, 1868761202, 1953853549, 1661825637, 1936024181,
- 1635021613, 1684368227, 1986946325, 1886350437, 1768107365, 1701602162, 1701339949, 1695116131, 1869377656, 1852795251, 1919247877, 1712814450, 761621609, 1668442467, 1697473900, 1634493304,
- 1769234797, 1712418415, 761621609, 1668442467, 1831691628, 1937075817, 1818846740, 1768107365, 1701602162, 1702195501, 1869182067, 1768295278, 1932354924, 1818585448, 1768295268, 1647142258,
- 1701737077, 1768294770, 1714251891, 175337065, 1935764582, 1769352555, 1728801889, 1936941420, 1952544557, 1729327717, 1936941420, 1952544557, 1680700005, 1819307890, 1729328229, 1886744434,
- 1920098605, 762541935, 1635020658, 1745970548, 761556577, 1684828008, 761753193, 1684955496, 1851877385, 1718969188, 1745580902, 1935961697, 1970233901, 1746101358, 1935961697, 1819240493,
- 1735289188, 1768448813, 1746166892, 1935961697, 1819240493, 1735289188, 1919509293, 291859555, 1918985576, 1768107380, 1701602162, 1819238957, 1701319284, 762606177, 1668442467, 1663919468,
- 1801676136, 1634035736, 1663923314, 1818456681, 2019896677, 1835101283, 1869182049, 1701319278, 762606177, 1668442467, 1831691628, 1937075817, 1634035729, 1663923314, 1818456681, 1819290981,
- 1746039669, 1953653093, 1919509293, 761621603, 1918987640, 1701319019, 1868786028, 1919251568, 1836675885, 158101346, 1835820392, 1965913189, 1768427118, 1630366828, 1634492790, 1701340014,
- 1818847246, 1869753708, 1819503459, 308634729, 1937076072, 1768107365, 1701602162, 1701339949, 1746430819, 1702065519, 1919509293, 761621603, 1818458213, 1952542049, 309227369, 1937076072,
- 1768107365, 1701602162, 1634564141, 1745513330, 1702065519, 1919510061, 1869089381, 761623413, 1734437990, 1970235409, 1714251123, 1685024620, 1952544557, 1747219045, 1702065519, 1869375021,
- 1999463535, 1919251553, 1919509293, 761621603, 1869771361, 1769090423, 175401063, 1937076072, 1869360485, 1746561891, 1702065519, 1684368685, 1818321769, 1919509293, 761621603, 1667590243,
- 1869095019, 761623413, 1768187245, 762077539, 1668442467, 1697473900, 1634493304, 1769234797, 1746562671, 1702065519, 1684368685, 1818321769, 1919509293, 761621603, 1918987640, 1869091435,
- 761623413, 1768187245, 762077539, 1734437990, 1970235405, 1949132147, 1634628979, 1778608493, 1779004001, 1999467105, 1952540008, 1952803342, 1734960685, 1919251560, 225473837, 761754986,
- 1702126948, 1852139378, 1768622964, 1701340020, 1702047086, 1634471028, 1831691374, 761622121, 1812819567, 1835298401, 762016353, 1734437990, 1885432843, 762343284, 1701603686, 1852402701,
- 1814917989, 1768841573, 1813079918, 1952539503, 762212201, 762210672, 1801678700, 1668246534, 477393781, 1852268909, 1769563753, 1731028846, 1936941420, 1920098605, 1915582319, 1952999273,
- 1734438166, 2036754798, 761753193, 1935764583, 1751330163, 343175777, 1936875885, 1684955437, 1852143149, 1647145845, 1953722997, 1935764751, 1702243691, 1818850414, 1919906913, 1952541967,
- 1936028276, 1768959347, 2003790956, 1651469580, 761621609, 1920230770, 1869419375, 762930542, 1819044194, 1634890797, 1701213038, 1869419378, 762930542, 1819044194, 1701999661, 1965909102,
- 1869418608, 762930542, 1819044194, 1701345069, 1829270625, 1970369391, 208630889, 1903390573, 1869900149, 1952804397, 1970236677, 1829594222, 1953396079, 762210657, 2037672291, 1970236684,
- 1767994478, 1970482542, 1768884334, 1702309228, 1879862380, 1819307877, 1919364453, 191919471, 1886348656, 1814914412, 241528425, 1886348656, 1882023276, 1768713333, 1879992174, 1819307877,
- 1869753701, 1919246946, 1701841785, 1701605487, 1869574701, 1701845350, 1852797810, 1920098605, 1680701295, 762214255, 1814916980, 426077801, 1936876912, 1630367343, 2003792498, 762344749,
- 1836020326, 1852402733, 1701844069, 1852797810, 1701995053, 1718907745, 1768187237, 1879861102, 1869836901, 1969368430, 192181106, 1936876912, 1663921775, 291860065, 1936876912, 1663921775,
- 1802264936, 1918988130, 1701843812, 1852797810, 1919509293, 761621603, 1667590243, 1701845355, 1852797810, 1919509293, 761621603, 1818458213, 1952542049, 326004585, 1936876912, 1663921775,
- 1818456681, 1768762725, 309556590, 1936876912, 1663921775, 1818456681, 1819290981, 1880519541, 1869836901, 1768107374, 1701602162, 1702195501, 1869182067, 1701843822, 1852797810, 1919509293,
- 761621603, 1918987640, 1701843563, 1852797810, 1701995565, 1647145843, 1953722997, 1919250447, 762212211, 2003792484, 1735289198, 1919250446, 762212211, 1819042150, 342322793, 1936876912,
- 1714253423, 1768713313, 1647142766, 1953722997, 1919250449, 762212211, 1718378856, 1701995565, 1880126323, 1869836901, 1634217326, 1936941426, 409431657, 1936876912, 1831693935, 1953066089,
- 762933857, 1852403568, 1735289204, 1919250453, 762212211, 1768712557, 2037539188, 1718186541, 1880712556, 1869836901, 1768762734, 1635019116, 1949137266, 1701850479, 1852797810, 1919250443,
- 762212211, 1937334642, 1919250444, 762212211, 1818650994, 1701842533, 1852797810, 1701344045, 1919251564, 1919250462, 762212211, 1802264951, 761753193, 1869771361, 1869360503, 1814917231,
- 443836005, 1936876912, 1999466095, 1768647777, 1630365550, 2003792498, 1734963757, 1881568360, 1869836901, 1635200366, 1852402540, 1633955175, 1684367475, 1852402733, 1918971237, 762802034,
- 1751607666, 1701844596, 1852797810, 1818326829, 1735289195, 1735748653, 1701273959, 1634496530, 1663919470, 1818456681, 1751330149, 409690981, 1851878512, 1768107365, 1701602162, 1668834605,
- 1634558316, 1852795252, 1634496530, 1663919470, 1818456681, 1836592485, 174813793, 1851878512, 1869360485, 1879796579, 1702125932, 1701345069, 1880126561, 761754988, 1668442467, 1647142252,
- 292842607, 1735748720, 1919509293, 761621603, 1667590243, 1819285355, 1663919989, 1818456681, 2019896677, 1835101283, 1869182049, 1819283822, 1663919989, 1818456681, 1768762725, 276002158,
- 1735748720, 1919509293, 761621603, 1937075312, 1970040849, 1768107367, 1701602162, 1634564141, 1913416562, 1768648289, 1932355438, 208822644, 1684107122, 1918984749, 1919248754, 1634693643,
- 1919036772, 1701274729, 1634693649, 1768107364, 1701602162, 1701339949, 1914137443, 761553263, 1668442467, 1697473900, 1634493304, 1769234797, 1913745007, 761553263, 1668442467, 2016241004,
- 1802658157, 1634693641, 1869360484, 1913351011, 761553263, 1802072179, 1912828773, 1930061685, 762012513, 1918987640, 1668485995, 1819242344, 1919509293, 761621603, 1667590243, 1668487531,
- 1819242344, 1919509293, 761621603, 1818458213, 1952542049, 326004585, 1869112179, 1663921263, 1818456681, 1836592485, 191591009, 1869112179, 1714252911, 191324524, 1869112179, 1814916207,
- 225141615, 1701144691, 1819290996, 1769239393, 1752369763, 1684825449, 1952539437, 1768452874, 761556069, 208105316, 1701406835, 1747805292, 1953653093, 1970369290, 761623137, 376006254,
- 1635086707, 1882023282, 1869836901, 1868770670, 1852401262, 1930191973, 1918989681, 1769352549, 192116082, 1717662835, 1853042022, 241527649, 762213747, 1851878512, 1769418100, 1946449004,
- 208695905, 1886544244, 1869767725, 1952803952, 1852142596, 1702106996, 1630368878, 2003792498, 2003788845, 1869884782, 1852402733, 1702106469, 1630368878, 2003792498, 1717922861, 1769090420,
- 343173223, 1953391988, 1920098605, 1949136751, 762212981, 1952867692, 1852142608, 1918971252, 1937207154, 2003788845, 1702102382, 259224686, 1818849140, 1882027109, 1635021423, 275082338,
- 1818849140, 762541157, 1953656688, 1701601889, 2003792906, 1663922789, 292318309, 1702326132, 1651453298, 1987208563, 1869182049, 1920207214, 1663919461, 108622953, 2003792500, 1947036773,
- 1702326130, 1919036780, 1936417641, 1970435089, 1630366563, 2003792498, 1734963757, 1947038824, 1801680242, 1869767725, 1952803952, 1970435083, 1714252643, 1684825449, 1970435086, 1714252643,
- 1684825449, 191788333, 1668641396, 1819290987, 325414497, 1919251317, 1700932979, 1701148532, 1768697198, 175334766, 1919251317, 1768697203, 1963615598, 1936876915, 2036429357, 1937051507,
- 762540645, 1952671090, 1818717793, 1937051749, 762540645, 2003134838, 1684957542, 1980854885, 762077545, 1668442467, 1663919468, 1801676136, 1634301450, 1769352556, 477328754, 1634035831,
- 2002857332, 1768107374, 1701602162, 1668834605, 1634558316, 1852795252, 1919907588, 1836584045, 1936421473, 1852402733, 1661694821, 1684826472, 1701995565, 1661891443, 1684826472, 1634038317,
- 1852401763, 1768296807, 1663919468, 1818456681, 1751330149, 292250469, 1701603686, 1919509293, 761621603, 1918987640, 1701844331, 1852797810, 1919448109, 1751610735, 1852405549, 175599460,
- 1851878512, 1769418100, 1929868396, 1819304308, 1946841701, 1852399986, 1634890797, 1634538349, 1852404850, 1818701161, 762540897, 1953525093, 1970079097, 274950515, 1852268909, 1769563753,
- 1731028846, 1936941420, 1634035717, 1929671794, 74604916, 1919251317, 1818846724, 1634996589, 761621602, 1819043171, 1634479475, 191194994, 1818386804, 1700998501, 175336556, 1818386804,
- 1768697189, 1661301875, 1801676136, 1634564101, 1830120306, 1768843105, 1852406118, 1818701159, 762540897, 1937075312, 1734438166, 2036754798, 761753193, 1935764583, 1768762739, 158561646,
- 1702326128, 1718562162, 1769145958, 1818324583, 1634035460, 1869088114, 90534773, 1668246627, 1869743211, 1678271585, 1819178863, 90464623, 1868721769, 1918964344, 762802034, 1635020658,
- 1915577716, 1952999273, 1920098573, 762541935, 1635020658, 1913546100, 1635017573, 1701603182, 1936288813, 1869350004, 1711565667, 174547308, 1684104552, 1852794992, 1980396389, 1836412015,
- 1718562149, 1870006886, 1701672300, 2003790893, 1819244043, 761621877, 1751607656, 1668444422, 124085359, 1668440418, 56976495, 73884020, 1936154996, 1869570564, 1868695659, 1634560879, 1879403378,
- 1953393010, 1835098886, 73495141, 1953394534, 1819238916, 1953039972, 1667853409, 2019914763, 1701326196, 1952999273, 2019914762, 1769418100, 174617700, 1734962273, 1701588334, 1628206182,
- 1852270956, 1852138285, 192046452, 1734962273, 1769090414, 225732711, 1734962273, 1969892718, 1718187123, 1768686713, 1862759539, 1701082229, 1762030702, 1852138606, 1769342324, 91186532,
- 1734438249, 1869352037, 1769234787, 1882025583, 1662152297, 1818456681, 1634217317, 1932355180, 1802465908, 1919158117, 1701605487, 1701842292, 1869884782, 1970369325, 426078817, 1869771361,
- 1965912951, 1868836208, 1814916727, 762603109, 1751607666, 1633815924, 1635216227, 1932354674, 225469812, 1801675106, 1685217655, 1935762989, 1633814644, 1635216227, 1879336050, 91840876,
- 1937072496, 1953694821, 1711763567, 1635218031, 1712088178, 1635218031, 1714250866, 208958305, 2003988326, 761557601, 1885697139, 1701471493, 1661760611, 1920361832, 1814916719, 225732197,
- 1986357347, 762212210, 1751607666, 1768098676, 1701602162, 1970040877, 1768098931, 1701602162, 1852402989, 1661760373, 1818456681, 1836592485, 208368225, 1668442467, 1663919468, 1801676136,
- 1919509263, 761621603, 1936029041, 1852795252, 1919509259, 761621603, 1868983913, 1869767434, 1634235251, 57897577, 175006050, 1869771361, 1701588343, 1628140646, 2003792498, 1734963757,
- 1627944040, 2003792498, 175142189, 1869771361, 1868836215, 1929735799, 1701994856, 1886938374, 140799585, 1886220131, 1936942450, 1919509266, 761621603, 1818458213, 1952542049, 74346345,
- 1952868711, 1634036740, 1768293478, 1694721394, 1695114617, 1932354937, 1752392044, 1769108500, 1818717793, 2019896677, 1835101283, 1869182049, 1819280750, 224751201, 1701601635, 1918985326,
- 2036425773, 1752369011, 1818650229, 1868760933, 1852140909, 1634535028, 1952804455, 1701339914, 1852797558, 208696621, 1986357347, 762212210, 1853321060, 1952805383, 1952802167, 1918984973,
- 1752378740, 1768976495, 1711695726, 1701080175, 1868958578, 1919247468, 1701867309, 1918963310, 1937207154, 762344749, 1853321060, 1920098577, 762541935, 1952867692, 1734963757, 1661564008,
- 1953653096, 1918984749, 1835098892, 761360997, 1920230770, 1701512047, 1701250425, 141783649, 1835888483, 1937010277, 1635021577, 1634217330, 1628989036, 2003792498, 1734963757, 1714254952,
- 762146674, 1667330658, 158623083, 1836410996, 1667331170, 1918966379, 762802034, 1915580533, 1952999273, 1869768237, 1903373677, 1701994869, 1920098582, 1915582319, 1952999273, 762278957,
- 1667330658, 108291435, 1886351988, 1963358568, 1634692208, 1701578084, 91123565, 1852794992, 1903365221, 1701994869, 1869115437, 1963353454, 1668246638, 1919093611, 1953064037, 1918985005,
- 1936851812, 1634208371, 1680696434, 1702259058, 1819632136, 1919903852, 1700989806, 1718187122, 1952539497, 1634209893, 1882023022, 1953393007, 1734963757, 1745843304, 761556577, 1852403568,
- 1701588340, 1745712230, 761556577, 1852403568, 1886727540, 1851877391, 1869622628, 762605161, 1853321060, 1919509265, 761621603, 1869771361, 1701588343, 1662153830, 1818456681, 1918971237,
- 762802034, 1751607666, 1768099700, 1701602162, 1920098605, 1965913967, 1768100208, 1701602162, 1920098605, 1680701295, 91125615, 1651469415, 1920403045, 1751346789, 1936288778, 1751330164,
- 107701093, 1953261926, 1644786277, 1717922162, 1702060387, 762344722, 1853321060, 1717922861, 1769090420, 91514983, 1919251317, 1768686707, 1661299566, 1685417836, 1634493957, 1929931635,
- 1936943459, 74674799, 2037411683, 1885433865, 1818456677, 1712025705, 1886416748, 1768172921, 1929800563, 1918989681, 1633813605, 1812427634, 762606441, 1812425845, 762606441, 1930259567,
- 1802072692, 1919448165, 1751610735, 1684960521, 1768714853, 1946510702, 1701601889, 1851881226, 1634544996, 90401127, 1668641396, 1869417067, 762930542, 1819044194, 1918984970, 1680700517,
- 141457263, 1701994851, 1886727540, 1918984970, 1814918245, 192177765, 1701994851, 1769090420, 225732711, 1818386804, 1868770661, 1852667244, 1869808755, 1929999474, 762606191, 1853321060,
- 1919906567, 1886727540, 1986946312, 1886350437, 1918964069, 762802034, 1635020658, 1814914420, 91514469, 1702256999, 1868694636, 1929868396, 1835365481, 1963487329, 1701995117, 90270828,
- 1953718640, 1768687973, 1651796071, 375549045, 1869771361, 1769090423, 762603623, 1869771361, 1701588343, 1662022758, 1685417836, 1920098605, 1680701295, 242120559, 1970236515, 1918971236,
- 762802034, 1963683957, 762471795, 1952673636, 1930130031, 1752458612, 1868788591, 1929930096, 1668573557, 73757537, 1819043170, 1735748874, 1969320749, 141714787, 1886613352, 1818326121,
- 1970435085, 1831693155, 1667851365, 1930456161, 1668573557, 761623393, 1768187245, 191652195, 762602858, 1751607654, 242378100, 1919247714, 1735748909, 1886217517, 1929935220, 1918989681,
- 191376741, 1635086707, 1882023282, 192116076, 1818717793, 1814917989, 208954981, 1818717793, 1915581285, 1952999273, 1735287049, 762537324, 1628139637, 1701603182, 1868836211, 1628073591,
- 1701603182, 1717922861, 1851853684, 761621607, 1751607666, 1851852916, 761621607, 1628074101, 1701603182, 2003788845, 1634469486, 1886352496, 1650553869, 762602860, 1953789282, 1829596783,
- 1818845807, 1969368421, 1852798068, 1869967626, 1814914420, 192177765, 1953461617, 1769090405, 125069415, 1852403827, 108160366, 1668442467, 1711957356, 761619297, 1818848627, 1634077285,
- 1714251107, 1853321074, 1667327496, 1701653861, 1634142056, 1634755949, 1701513316, 1634689657, 1712219250, 761749868, 1667590243, 1701995883, 1702103140, 1852403058, 1661234273, 157639791,
- 1819305330, 1818307961, 1869352556, 1769234787, 1630367343, 2003792498, 1869767428, 1868761968, 1647142244, 1668178290, 1768688232, 1932356462, 1752392044, 1718511876, 1970473839, 1936876912,
- 1885958755, 1970473332, 1919120226, 108294249, 1935766117, 1879863909, 1819966069, 1768959333, 174416741, 1919117677, 1869115503, 1829791086, 1869767529, 1852794992, 1819487589, 107508577,
- 1701406835, 1661494380, 1852140641, 292708708, 1701996902, 1954047277, 1969712745, 1701344105, 1869743730, 1952803683, 1919509267, 761621603, 1986357347, 762212210, 1952867692, 1919509268,
- 761621603, 1986357347, 762212210, 1751607666, 1768100212, 1701602162, 1701339949, 1852797558, 326137133, 1668442467, 1663919468, 1920361832, 1680698991, 107902831, 1751346785, 1963881071,
- 1668246638, 1701522795, 1819240569, 1969358949, 1702063212, 1695638905, 1885957228, 762538355, 1953654134, 1818321769, 1970369290, 761623137, 192115570, 1668442467, 1882023276, 108618092,
- 1801677172, 1930196069, 1918989681, 1768762725, 225670510, 1869771361, 1970548087, 1965911666, 1918963568, 762802034, 1852994932, 2003788845, 1903365230, 1701994869, 1701339949, 1930062691,
- 1918989681, 1701850469, 1903367534, 1701994869, 1920098605, 1965913967, 1769090416, 292841575, 1918986355, 1919298917, 1932356975, 1918989681, 1868760933, 1935765613, 1903366515, 1701994869,
- 1918985005, 1680700517, 258897775, 1635086707, 1663919474, 1952805473, 309359917, 1635086707, 1663919474, 1952805473, 1734963757, 1695118440, 762278517, 1852270963, 1702130445, 1852402802,
- 1769155943, 1913286247, 1701146741, 1734964013, 1702430830, 1769155950, 1913286247, 1701601909, 1734964013, 1870071918, 1769155950, 1711566439, 174419049, 1701603686, 1852402733, 1628336997,
- 2003792498, 2003788845, 761343342, 1918962810, 762802034, 1630367861, 1628797485, 2003792498, 2003788845, 1769418094, 1932354916, 1953656680, 1920098579, 1965913967, 1769418096, 1932354916,
- 1953656680, 1920098574, 1680701295, 762214255, 205073713, 1869771361, 1886727543, 959263021, 1969779721, 762536557, 1946906741, 1651340648, 1868836211, 1628401271, 2003792498, 2003788845,
- 1869360494, 1628268398, 2003792498, 762344749, 1735290732, 1920098575, 1814919023, 762603109, 1735290732, 1920098576, 1915582319, 1952999273, 1852795949, 1701842023, 1852797810, 1701995565,
- 1879470963, 1869836901, 1970471790, 1869415534, 1644916335, 1630369903, 1768448882, 1644389750, 1930520437, 1918989681, 1633889637, 762602866, 1952867692, 1919509258, 761621603, 175402852,
- 1701144695, 1634231148, 1812558441, 761361001, 1852270963, 1969779469, 1701606516, 1634759469, 1930388835, 1918989681, 1852124517, 1869374838, 1645241712, 1684826485, 761753193, 1970040675,
- 242445933, 1684107879, 1769234805, 1663921775, 1812492385, 1969712737, 56977249, 142106982, 1818850658, 1735289188, 1768448773, 1879270508, 1661237089, 90530421, 1700951395, 1701971827, 1818458467,
- 1633878885, 1634993266, 1946446200, 140862834, 1635017060, 1702060386, 1818846728, 1685073253, 1768294758, 1999463788, 174355055, 1701603686, 1668834605, 1712286821, 761621609, 1702326128,
- 1768910962, 1711961198, 761621609, 1734438249, 1768295269, 2049795436, 1701867625, 1768295026, 1630365036, 1869177973, 1818846730, 1769352549, 158295396, 1701603686, 1685021485, 1768687973,
- 1915577702, 208105065, 1668442467, 1848468844, 1751348335, 1885433867, 1882026597, 1701732716, 1869374225, 1915579235, 1952543855, 1701588325, 1745319014, 1768186213, 1929865070, 1701079404,
- 1930130290, 1701994856, 1685024301, 1930589029, 1918989681, 1752378725, 761623137, 1701080942, 1868694643, 1711694445, 1868723317, 1953760108, 1768032889, 1969450862, 1936875884, 1970040836,
- 1701710183, 1634759543, 74605936, 1768319351, 1818321674, 1634497891, 175271796, 1819043170, 1634497325, 1946511475, 1752392050, 1702454539, 1869767725, 1919250544, 1767993354, 1919054958,
- 208171893, 1701536099, 1851876141, 1936026724, 1634231050, 1630368882, 157377906, 1918986339, 1768959348, 1751321189, 762606177, 1701734764, 1735357450, 761621607, 157705839, 1734831988,
- 1865246060, 1768032110, 1818458467, 1969357669, 1818431859, 1684370287, 1885430573, 1852795252, 191327849, 1801807987, 1932356709, 158230377, 1953653091, 1970040877, 1633881971, 1630368882,
- 2003792498, 2003788845, 1768163182, 1852796257, 1752368228, 1963683945, 762471795, 1919116659, 1829401701, 1919906927, 1818458467, 1953696613, 1952802162, 1701410349, 1701317495, 762606177,
- 1936487792, 1702233445, 74675566, 1936875885, 1919249671, 2037544291, 1918987534, 1851862387, 1702243684, 192116078, 1851880052, 1852139379, 208823652, 1970169206, 1868836211, 1701601909,
- 1918987531, 1868836211, 1701601909, 1852143114, 1831695221, 192115297, 1936875885, 1920234285, 241527663, 1936875885, 1920234285, 761621359, 1829859445, 762540641, 1869771891, 1915577707,
- 1952999273, 1969581574, 175269236, 1684956519, 1701605989, 1929802611, 1702261349, 1937049970, 1882026597, 175338860, 1919251317, 1634564141, 1644391282, 1946510437, 1852399986, 1634890764,
- 1932357225, 1635213941, 1633815673, 1919251572, 1969630585, 1645636716, 1702130785, 1949137266, 1701147240, 1635086637, 1919251570, 1633815667, 1919251572, 1634217337, 1645176428, 1702130785,
- 1898805618, 1953653109, 1645048421, 1702130785, 1697479026, 2037674093, 1920098573, 1882027887, 1953393007, 1762161253, 1920295725, 208826227, 1701470831, 1731032163, 1886744434, 1784835854,
- 762602341, 1919381109, 191919471, 1702129518, 1769239341, 91843427, 1852796003, 1668484709, 761621601, 1634492770, 1684366190, 1970235407, 1634494322, 1932358515, 1953653108, 1970235406,
- 1634494322, 1747809139, 224816225, 1920298856, 1935764583, 1852124531, 1869089124, 1818718837, 242447201, 1684955496, 1667326509, 1768303979, 1745122419, 224685665, 1684955496, 1768125229,
- 1919906675, 1634208627, 1814914158, 1918990953, 1634208356, 1932354670, 1801678704, 1851877388, 1869622628, 1702129257, 1634208370, 1882023022, 1701011813, 225866754, 1701601635, 1918985326,
- 1970040877, 1633881715, 1684956524, 1831694945, 1937075817, 1818321678, 1633971813, 1836592498, 241922657, 1701601635, 1918985326, 1701339949, 1762159459, 1937073262, 125399668, 762339693,
- 175008112, 1852270963, 1869622643, 1828942963, 1829204065, 1634956133, 1661756775, 1818456681, 1634741605, 191198069, 1668442467, 1932354924, 208695156, 761749858, 1886349427, 1735289200,
- 1935761935, 762602859, 1886349427, 1735289200, 1768846608, 1936876918, 1630366817, 1936024419, 1701845107, 1852797810, 1818326829, 1735289195, 1953068845, 1633889640, 1628530030, 1869177973,
- 1936024621, 1885958755, 1852795252, 1869115404, 1982686574, 1836412015, 1919027045, 1819044193, 1634011749, 1768697202, 1852142707, 1851877398, 1630368612, 1764584563, 1919251566, 1952805488,
- 140996201, 762470757, 1717658980, 1851877381, 1695445860, 1814914425, 1982691183, 1869181801, 1868958830, 1630368878, 1869833591, 1745446253, 1935961697, 1701536104, 1986946317, 1886350437,
- 1886334309, 1628204645, 1701995620, 1647145843, 208367471, 1919181921, 762540901, 1685217635, 1919509259, 761621603, 1919251317, 761555208, 1734631778, 1684604773, 1918985005, 1702105188,
- 1919250541, 1920300129, 1969630565, 1947888748, 1701866853, 1970561394, 1949132146, 1701147240, 1635086637, 1919251570, 1702105203, 1919250541, 1920300129, 1634217317, 1947428460, 1701866853,
- 1970561394, 1898800498, 1953653109, 1947300453, 1701866853, 1970561394, 1697473906, 2037674093, 1869116166, 74605943, 1752457570, 1685024775, 1953718627, 1852405519, 762802020, 1769496941,
- 1702521197, 1852405519, 762802020, 1768843629, 1702521197, 1852405518, 762802020, 1953719666, 207975023, 1635086707, 2016241010, 1802658157, 1667853577, 1751347058, 1929998441, 1719103342,
- 1701536108, 1869640453, 1963486831, 1936614772, 192113769, 1635020658, 1814914420, 158623333, 1935766132, 1633889640, 1869743726, 1702125940, 1869902601, 1952544624, 1913808995, 1952999273,
- 1869768237, 1919036781, 1701536609, 1769082996, 762603623, 1647144820, 1801675122, 1913418853, 1952543855, 1769090405, 57960551, 107966320, 1734438249, 1879470949, 1768124005, 1701839724,
- 1701841006, 1818439022, 1678340201, 762214255, 1735290732, 1717922825, 1869360500, 1913284462, 1952999273, 1852795949, 1886717799, 1852795949, 1768294503, 1882023276, 1829269093, 1835628641,
- 157645417, 1885957219, 1918988130, 1701579364, 1915581542, 1952999273, 762344711, 1853321060, 1919509259, 761621603, 1853321060, 1919509259, 761621603, 1952867692, 1919509260, 761621603,
- 1751607666, 1768098164, 1701602162, 342914349, 1915580533, 1952999273, 1869768237, 1903373677, 1701994869, 1970369295, 761623137, 1915580533, 1952999273, 1734963722, 1814918248, 108291685,
- 1701864818, 1661695073, 761619567, 1835888483, 1661629545, 761619567, 1735550317, 1701054309, 1869900659, 1701249904, 1970538861, 1680698994, 124680047, 1852994932, 158364973, 1801678700,
- 1701867309, 1869352046, 1769234787, 1680698991, 1829794927, 1869767529, 1852794992, 1768697189, 343106926, 1768058733, 1932354924, 1701147235, 1969368430, 1852798068, 1651469574, 224750697,
- 1768058733, 1932354924, 1701147235, 1869417582, 762930542, 1819044194, 1879781677, 1701736296, 1634497325, 1762551923, 1701273965, 1919905837, 1767993972, 1701971316, 226061424, 1701406835,
- 1747805292, 1702259809, 1634997348, 1952803938, 1919120173, 762209637, 1953789282, 1946578543, 1701601889, 1769213300, 1952803683, 1835627309, 174419056, 1919251317, 1918987309, 1913611623,
- 1635017573, 1701603182, 1634564141, 1679846258, 762214255, 1952867692, 1684955437, 762344749, 1751607666, 1869884788, 1852138285, 577922420, 1915580533, 1952999273, 1684955437, 2003788845,
- 1701588334, 1714254950, 762146674, 1953391971, 1645310565, 1650815841, 762080353, 762601826, 1819042146, 1935761928, 1818321509, 1633815148, 1952803699, 1819042146, 2003788300, 1735289196,
- 1818321453, 1751319916, 208892773, 1936025699, 1768041843, 1886349427, 1701339915, 1647145843, 1685217647, 1701339914, 1798140787, 208105065, 1936025699, 1852517747, 1952999273, 1701339914,
- 1882026867, 191788897, 1936025699, 1970351475, 175007077, 1936025699, 1869753715, 1678273391, 1650617717, 141323365, 1953460070, 1819042146, 1819240205, 1633824102, 1949133932, 1745577317,
- 1701536623, 1970285945, 1644850019, 1836019570, 1818321453, 1903364972, 1701994869, 1819633197, 1634998380, 761621602, 1852728692, 1882026857, 1818518625, 1633824101, 1980394604, 1701604463,
- 1818321529, 1634208108, 1680696430, 125006959, 1684955490, 56977249, 225996642, 1702391650, 1953705331, 1701536609, 1919029604, 1667655017, 761623393, 1768187245, 292315491, 1701996902, 1634493997,
- 1932354925, 1819307369, 1633880165, 1819636592, 1661956965, 1651534188, 1685217647, 1701339949, 1661889379, 1651534188, 1685217647, 1936288813, 1701844340, 1852797810, 1953457197, 1919298931,
- 1814916463, 56979049, 90271332, 1819045732, 1633881209, 1714254962, 1651794284, 1712088165, 761621609, 1768187245, 225206627, 1701603686, 1986098989, 1919903333, 1768622957, 1701653876, 1633904996,
- 1768097900, 1701602162, 1762420781, 1633889636, 1663919218, 225470828, 1702129518, 1701653875, 1633904996, 1634731628, 1952803948, 1818849285, 1880322924, 1668506994, 1953524082, 762212201,
- 1953787746, 1880843628, 1668506994, 1953524082, 762212201, 1953787746, 1831691628, 1667851365, 1644784737, 1882023013, 1702063221, 1970435082, 1714252643, 125072225, 1802464627, 124218985,
- 1769109875, 124086126, 1818386804, 192115813, 1919248500, 1701670765, 74605940, 1818323318, 1634301445, 1997108076, 1751478881, 1702065519, 1768257292, 762603623, 1818321779, 762840421, 142172530,
- 762867554, 1852141679, 1836016396, 1953391981, 1953457197, 1868762483, 1852140909, 1819487604, 90731361, 1668640611, 1768101224, 1701602162, 1819239469, 762470764, 1932357492, 74739564, 1702260580,
- 1851877388, 1869098340, 1852400748, 1634210407, 1747805294, 1768189039, 1747806062, 1953653093, 1851877395, 1869098340, 1852400748, 1868836199, 1918987372, 1851877396, 1869098340, 1852400748,
- 1919167847, 1701605487, 1634209140, 762537070, 1684828008, 258436713, 1684955496, 1801545843, 1851862373, 275082343, 1684955496, 1801545843, 1769155941, 1701605485, 1918988301, 1969775457,
- 1647142260, 1880127599, 1819307877, 1633889637, 762933874, 175664994, 1734830448, 1633824121, 1913023342, 1868718697, 1869743470, 140866677, 1684366707, 1735289196, 1734963980, 1634217326,
- 1852401518, 1634078567, 1932354915, 1701603693, 1852405549, 1634993259, 1947100528, 1801680242, 1835102765, 1868705136, 1920207992, 762012533, 1769369453, 1980458862, 1868915817, 1634497325,
- 1997170803, 761622121, 1935764583, 1937051763, 1814917733, 1701278305, 1634497325, 1963878515, 762471795, 1920234337, 1969319535, 1937050228, 1663922789, 1801676136, 1702065418, 1818439026,
- 158032751, 1919251317, 1634035501, 1937049714, 1882026597, 1963617893, 762471795, 1970238055, 1937050992, 1731031653, 1969512818, 157643873, 1919251317, 1668246573, 1937050219, 1831694949,
- 1937075817, 1702065418, 1768828274, 190933614, 1919251317, 1768452909, 174353509, 1919251317, 1634497325, 1963485299, 762471795, 140992884, 1919251317, 1701409837, 1702065418, 1731031922,
- 275931493, 1818321779, 1853173093, 1634492770, 1684366190, 1633907477, 1965909356, 1818321518, 1701015137, 1818635620, 1644654697, 1684956524, 1644786277, 762015599, 1852141679, 2003792911,
- 1647145573, 1684107122, 1953718627, 1869767173, 1661627759, 1802264936, 1918988130, 1751322468, 1651207265, 1685217647, 1702065453, 1751320178, 1751347829, 1768907525, 1661760366, 1634757999,
- 1680700515, 73626473, 2003792483, 1869767429, 1678012023, 157639529, 1701013860, 1986618925, 1768163685, 1714251107, 141718895, 1701013860, 1701736237, 1667851272, 1769155941, 1768163960,
- 1949132131, 1701147240, 1667851272, 2004102501, 1868827503, 1663922799, 1702063980, 1868826980, 1865249391, 124675440, 1952540006, 74605928, 1735357030, 1935763208, 1836412973, 1818691440,
- 1702064993, 1919357555, 1702125925, 1752444274, 1697476193, 1818326385, 1818585098, 1886348137, 158492020, 1769433451, 1919509037, 1701580644, 1949135731, 762208616, 1635086693, 1701643884,
- 2037542765, 1667853590, 1752199026, 761622127, 1701734764, 1819487603, 258503521, 1701736301, 1768041849, 1999465580, 291862113, 1701736301, 1768041849, 825060460, 1986098989, 1869417317,
- 762930542, 1667590243, 1869419115, 762930542, 1667590243, 1868836203, 1918987372, 1953459721, 1970365741, 1879534689, 1952803937, 1930323316, 1918989681, 1634741605, 1852402546, 1768165223,
- 1634887521, 1919954285, 1667590767, 1701971828, 1885955427, 1869743476, 91516770, 1701606770, 1970409074, 762471788, 1651339107, 1684369001, 1819636240, 1747808869, 2053730927, 1635020399,
- 1970409068, 762471788, 1953654134, 1818321769, 1751347974, 191655791, 1701995379, 1769104503, 192046454, 1701800051, 1769107501, 91452526, 1819634547, 1633815404, 1836264814, 1852402543,
- 1953695079, 73757295, 1886349427, 1918984718, 1953705331, 1701275489, 191128946, 1869771891, 1635217519, 124544358, 1819242356, 91778914, 1919510643, 1701842548, 1852797810, 1818326829, 1735289195,
- 1818326790, 175400300, 1701011814, 1735287085, 1627879794, 2003329906, 1644853601, 762015599, 1634497633, 2002847091, 191132257, 1701602660, 1814914420, 208954981, 1769629026, 1663922789,
- 1702261365, 1852793348, 1919026535, 174617461, 762541410, 1886218611, 1661494636, 1634627169, 208890210, 1667590243, 1868836203, 1701601909, 1918987540, 1768843636, 1634494253, 1663923059,
- 1970435177, 1700925043, 1663921260, 1768124015, 1701278309, 1869570822, 191195499, 1802465123, 1647142249, 191198313, 1886351971, 1835627309, 308636784, 1751343476, 1634887535, 1680697456,
- 1953064809, 1711959137, 761619297, 2054842724, 1868763257, 1935765613, 1919167859, 1769236065, 1678010222, 225277298, 1836413540, 1702130477, 1634757733, 1701187438, 1701344353, 1869622642,
- 1702129257, 1768295780, 1663919468, 1920233071, 259285857, 1701603686, 1920098605, 1680701295, 191788911, 1701603686, 1886938413, 192180847, 1701603686, 1886218541, 208958063, 1701603686,
- 1986947373, 1701013871, 1818846739, 1852386661, 1667854198, 1868836197, 1918987372, 1818846737, 1919954277, 1919120229, 1769238633, 1712221807, 761621609, 1852270963, 1920300129, 1768295781,
- 1630365036, 2003792498, 74478893, 1819044198, 1818846729, 1919167852, 1712025705, 1701277289, 1769107570, 1711567982, 208171881, 1701011814, 1970038317, 1684367475, 1667327503, 1919298917,
- 762214255, 1852141679, 1918987533, 1768843636, 1634494253, 1695314803, 1752461921, 1919312173, 241263465, 1953653093, 1835085160, 1667854949, 1695183713, 1752461921, 1769169197, 1634077793,
- 1731028323, 1634560370, 1711891811, 761619297, 1852404327, 1667327502, 1919364453, 1999466089, 241525865, 1701011814, 1769105197, 1700932974, 1712614753, 761619297, 1852404327, 1634034221,
- 2004036973, 276062565, 1701011814, 1769105197, 1701326190, 1937011297, 1667327504, 1919364453, 1932357225, 1852405105, 1634080372, 1731028323, 762210674, 1769304435, 1949135982, 1936875877,
- 1667327503, 1919364453, 1932357225, 1936875892, 1667327503, 1919364453, 1949134441, 1936875877, 1667327504, 1919364453, 1949134441, 1969712751, 1634080613, 1731028323, 762210674, 1735290740,
- 1932354933, 1852405105, 1634080116, 1731028323, 762210674, 1735290740, 1999463797, 241921641, 1701011814, 1769105197, 1769418094, 1728342894, 225470834, 1885958759, 1919252013, 1633905012,
- 1701319020, 1752196193, 1936027247, 1835627309, 124087408, 1684104552, 192177523, 1751607656, 1751607660, 242378100, 762605416, 761427316, 1936876912, 1745186415, 1818588271, 1768909317,
- 1711895662, 761619297, 1936943467, 1667327502, 1768631653, 1647145843, 342712677, 1701011814, 1936288557, 1769418099, 1747807086, 1953653093, 1667327498, 1634479461, 258500469, 1701011814,
- 1969318957, 1647143015, 292381029, 1701011814, 1969318957, 1932355687, 1852405105, 1634078580, 1814914403, 1751610721, 1852405549, 1633883499, 1714254962, 1651794284, 1932354661, 1668573557,
- 207975265, 762339693, 1633906540, 1852795252, 1885433104, 1668246573, 1869182049, 1868836206, 1634535028, 1919249266, 1684368645, 1712221281, 761619297, 761816429, 1851878498, 1634079083,
- 1915577699, 1768713327, 1697474414, 141780345, 1970171757, 1953391981, 1919905037, 762470772, 1953719664, 1879860588, 1953392993, 1819243053, 141714796, 1936941424, 1953656688, 1852141577,
- 1851876909, 1879538019, 1848471141, 1879663209, 1915580005, 1919249525, 1634496525, 1630365038, 1986622066, 1880058977, 1701732716, 1885692973, 1970565729, 1879860594, 1668506994, 1953524082,
- 208564073, 1701011814, 1684108077, 2037539629, 1667327501, 1634938213, 1702112612, 1980461665, 1932357217, 1953789288, 1929995628, 1634625385, 1701999988, 1667327503, 1836264805, 761621609,
- 1835099490, 1819243275, 1882026593, 1818586721, 1634759427, 1819308807, 1751348335, 1919972105, 1663924577, 1929735777, 1886216564, 1635021584, 1634217330, 1932355180, 1802465908, 1970475109,
- 1633907817, 1915577715, 1768713327, 1712154478, 761619297, 1886549363, 1702062450, 1635218186, 1651008372, 258699119, 1936876912, 1932357231, 1835886967, 208105065, 1702125943, 1634479474,
- 1919247460, 1869767693, 1952803952, 1634497325, 1711958131, 761619297, 1701996916, 1869874532, 241726575, 1919053173, 1634495589, 1634034221, 1980590179, 1869898597, 1903373682, 1701994869,
- 1768257294, 762603623, 1735287144, 275213929, 1701734775, 1634494253, 1697477491, 2037674093, 1919972114, 1663924577, 1932357217, 1802658160, 192111980, 1819308129, 1752640869, 73755759,
- 1836020833, 1852793348, 1868697701, 1865247599, 762209648, 1684104562, 1644524133, 1852399986, 1918984968, 1634038317, 1633880946, 1633824114, 1919251572, 1633880441, 1969368434, 141849458,
- 762470755, 1701079411, 1634231056, 1852401522, 1953705319, 1869182049, 1768165998, 1852796257, 1970548068, 1915580018, 1952999273, 1634886668, 1869622647, 1869052268, 1634470766, 1886352496,
- 1685021485, 1634470757, 762471801, 1970238055, 1869353840, 1769234787, 1663921775, 1936945010, 1919508840, 1970013555, 175335278, 1919117677, 1868788591, 1862755696, 1663921257, 1879338593,
- 108031855, 1885431923, 1930195813, 762470772, 1814914671, 90531433, 1735745895, 1634142821, 761620341, 1751607656, 1969317644, 1932354919, 1819307369, 1634144613, 761620341, 1886218611, 1747805548,
- 90728297, 1952802164, 1702103656, 761820261, 1852141679, 1935764749, 1949135723, 1952540008, 1947038309, 1717985650, 1814913897, 1952999273, 1970435085, 1831693155, 1953721967, 1946972773,
- 1801680242, 1667854381, 208696683, 1952671090, 1818717793, 1684090213, 1802395908, 1868696168, 1647143791, 1701601897, 1937072653, 1936027241, 1769221491, 1661232493, 242840681, 1835888483,
- 762605157, 1819045732, 1661956705, 1701670255, 762541166, 1819045732, 1661301345, 1936945010, 1634231308, 1667329394, 1919639912, 1852117601, 1869374838, 1865246064, 762209648, 1954047348,
- 1819239948, 762471780, 1970170221, 1868958579, 1919247468, 1970040877, 1768297587, 1919251564, 1919509293, 761621603, 1819045732, 1728541281, 1920299119, 1745186145, 1634954593, 1751212549,
- 1778674017, 325674085, 1802465122, 1970235949, 1818324594, 1768453933, 91450476, 1650549099, 1751844449, 1633971809, 1851878408, 1918987620, 1852116587, 1869374838, 762537328, 1802270050,
- 1852140807, 1751216751, 1936682246, 40203633, 1930980719, 1751605616, 1769239653, 1852796205, 1919251571, 2037147181, 90664553, 1667327344, 1819283557, 761619297, 1999464047, 1752396399,
- 1930719337, 1918989681, 1869622629, 1982688364, 1769239141, 376201571, 1635086707, 1882023282, 762080367, 1769107304, 1953394554, 1879993441, 1869836901, 1919954286, 1852406113, 1634209127,
- 762537070, 2036429424, 174550633, 1802465122, 1920299309, 1830252129, 1768843105, 1852406118, 1818701159, 762540897, 1819045732, 1830384225, 1768843105, 1852406118, 1818701159, 762540897,
- 1633906540, 1852795252, 1668248325, 1930720107, 1918989681, 1869753701, 1982690415, 1634300513, 291859554, 1918989427, 1684955437, 1701995309, 1852138355, 1953697140, 1865249377, 1633955174,
- 157575542, 1634630003, 1969712999, 1668484197, 1819045746, 1919906861, 1946839137, 1768518255, 1952540461, 1769342565, 1634885992, 1819244044, 761621877, 1918987640, 1769539691, 1635331438,
- 1645045614, 1684956524, 1882026597, 1701736296, 1869570570, 1802710379, 174877813, 1886216547, 1970238055, 1661166702, 1661301857, 1919508840, 1869374218, 1831691381, 158232431, 1970236515,
- 1970482532, 1868759918, 1768163447, 1680696675, 1678192690, 761619305, 1677932132, 1678141295, 1869046130, 1919159918, 1953721717, 762012521, 1702127970, 1853187079, 1852794215, 1818846728,
- 1935879525, 1634208118, 1714250862, 91517801, 1936681063, 1634207348, 1919249773, 1851877384, 1634298741, 1634208360, 1769418100, 1685217658, 1919250445, 762212211, 1768647016, 1745184622,
- 1869639785, 1919903749, 1746101619, 1702065519, 1768448813, 2036690541, 1634886445, 1745644387, 1853258098, 1932353897, 74344297, 1802723693, 1970236680, 1767994478, 1701711214, 1919907700,
- 1769418091, 90465650, 1702130799, 1701842546, 1852797810, 1853190701, 1735289198, 1919120134, 275541103, 1819634547, 1919102316, 1651733359, 1936027247, 1768977158, 208823652, 1818849140,
- 1882027109, 1919250529, 1634890759, 1919906915, 1702065420, 1852386674, 1701999978, 1920339044, 1918985005, 1634689636, 1997366386, 761556577, 1918988403, 1936026731, 1852405508, 1769409380,
- 1647142254, 1819571311, 1818431077, 761558383, 1952540013, 1819042146, 1869374223, 1831691381, 762212207, 1852399986, 1869374218, 1915577461, 326003041, 1970236515, 1752378724, 1919252335,
- 1701326195, 242841185, 1970236515, 1970482532, 1634872686, 1678274153, 1668246885, 141844850, 1734437990, 1634956589, 1920296969, 1633905010, 1812817262, 1835298401, 762016353, 1701670756,
- 1952804102, 208826213, 1936876912, 1647144559, 1752461167, 1869574153, 1869902637, 1913089394, 1651403105, 1913288559, 1651863653, 1633905004, 1836254318, 1947232111, 1701866853, 1970561394,
- 1747805554, 258500457, 1886217588, 1952543333, 761623157, 175599468, 1970236515, 1868705124, 1946645612, 1634628207, 1980198756, 1633905775, 1661824878, 1801676136, 762278957, 1953459315,
- 1952544517, 1644458597, 226058849, 2036490594, 1918985005, 1734437234, 1768032613, 2053204079, 73691745, 1735355490, 1818321676, 1633971813, 1633955186, 1633881465, 1684956524, 1999467105,
- 174810469, 1684955491, 1633889657, 1661363566, 1869771361, 1633881460, 1915578483, 1936287589, 141714804, 1768843629, 1702521197, 1836409864, 1702130544, 1969491314, 1953722477, 1714254437,
- 140866153, 1701344357, 1952804466, 1718183685, 1662088052, 1886216552, 1701734241, 1634494253, 1936028531, 1768453901, 2036689779, 1634494253, 1695314803, 1752461921, 1920296237, 174420079,
- 1885958759, 1852402733, 1729327973, 762341746, 1701734764, 1702243699, 1667855474, 1728474209, 1635019125, 1701317490, 762606177, 1667330659, 1869089643, 762932332, 1920099682, 1869089401,
- 761623410, 1684104552, 1768122631, 1936026723, 1818716421, 1829138287, 1702130793, 1970079598, 1869098343, 1634863476, 1952541028, 275672937, 1668442467, 1915577708, 1634296929, 1852795252,
- 1936028168, 1869574772, 1634929005, 1819043188, 241529961, 1702125939, 1953066092, 1768172901, 1929865331, 1633889636, 1929929842, 1663921513, 241463905, 1936876912, 1932357231, 1769234795,
- 1879926638, 1869836901, 1802710382, 1735289193, 1919250452, 762212211, 1768516467, 1848469358, 1768190575, 1819477603, 1751607653, 1836016395, 1953391981, 1936552749, 1919250451, 762212211,
- 2003791475, 1918988130, 1735289188, 1869509383, 1851878775, 1869509384, 1869377655, 1702103671, 761620334, 1852270963, 1768911878, 309618028, 1701995379, 1769104503, 762471798, 1852142199,
- 1661560931, 1701601889, 1918985005, 1919510033, 1818635621, 761621857, 1987212643, 1644520549, 1852793697, 1869570572, 1701653867, 1633904996, 1919028076, 761553253, 1667853427, 1751320165,
- 1702061413, 1970235413, 1663919475, 1852664168, 1831696741, 1667851365, 1661889633, 1651534188, 1685217647, 1702065453, 1868762994, 1852140909, 1701653876, 1633904996, 1919092332, 1751348341,
- 1936286727, 1702060389, 1734829315, 1819239947, 762471780, 1701147252, 1920295430, 309486951, 1684955496, 1684630829, 761621604, 1735289190, 1745711717, 1701669989, 1634938228, 2037671270,
- 1936680973, 1635019120, 1937059180, 1745252965, 1868854383, 1667828071, 1919102309, 242049381, 1953522028, 1831694447, 1667851365, 1879403617, 1919248225, 1885696010, 762471792, 192180072,
- 2054842736, 1819487585, 191193961, 1801675123, 1819239469, 192045420, 1802465122, 1851880493, 224947041, 1936875874, 1869770797, 1936028263, 1920208499, 761820001, 1869771361, 1886727543,
- 1634890770, 1663920243, 1630367329, 2003792498, 175142189, 1919251317, 1920298541, 1997235571, 761624161, 1635086707, 1879926130, 1869836901, 1768041838, 1735289195, 1919902218, 762471780,
- 191655009, 1685221218, 1848472165, 258305647, 1685221218, 1949135461, 1814917231, 242509413, 1936876912, 1680698991, 1768384361, 1711499118, 1761963617, 1936617315, 1869115402, 1714251118,
- 292579692, 1635086707, 1882023282, 1701736296, 1768711725, 1752173168, 762279023, 1835821414, 2019914762, 1819487604, 241726305, 1869771361, 1868836215, 2049797751, 1628201261, 2003792498,
- 762344749, 358690170, 1869771361, 1868836215, 1932357239, 1953656680, 1684633389, 1918964581, 762802034, 1932357749, 1953656680, 1684633389, 1918963301, 762802034, 1853321060, 825047341,
- 1920098572, 1965913967, 758721904, 1886587697, 762080357, 1667590243, 1870006635, 1835361129, 174877025, 762601832, 1651994467, 1745844591, 1663923297, 1868724079, 1769155961, 1661887844,
- 1970302319, 762471796, 1937076077, 1634862437, 208628068, 1868785010, 1982686322, 1819897449, 1818326797, 761620843, 1802264948, 1661429097, 1986097761, 28257, 256, 503319040, 16788480, 1853120876,
- 67110912, 0, 16842751, 16777216, 1634167148, 2048, 256, 67109120, 1792, 134217984, 67109120, 134217728, 1221132544, 1308632064, 1577080320, 1845519872, 2113959424, 2382398976, 2650838528,
- 2787007504, 2554000948, 1045334591, 1315306579, 3966185063, 2121258600, 712793211, 2123282044, 2358610575, 2025526955, 3938745025, 147429064, 16792777, 150995968, 16777472, 167773184, 16777472,
- 184550400, 16777472, 201327616, 16777472, 218104832, 16777472, 234882048, 16777472, 251659264, 16777472, 268436480, 16777472, 285213696, 16777472, 301990912, 2030043392, 1006760960, 2852221953,
- 335732737, 2080524290, 3791826946, 1174606851, 2718135299, 4228108291, 1409558532, 2885976068, 67491844, 1510289413, 2852487685, 4194685445, 1241915910, 2584113670, 3926311430, 906432519,
- 2181520391, 3423053831, 336130055, 1544042504, 2752020488, 3959998472, 873009161, 2013877769, 3154745865, 4228504585, 1007295498, 2047499274, 3054147594, 4060795914, 738922507, 1678460939,
- 2617999371, 3557537803, 168620043, 1040983052, 1913411596, 2785840140, 3658268684, 235795468, 1041049101, 1846367757, 2651686413, 3457005069, 4195214349, 638455822, 1376664590, 2114873358,
- 2785972750, 3457071630, 4061061134, 370082831, 940517391, 1443842063, 1913611279, 2316271119, 2685376015, 2987371023, 604223503, 603988736, 687873024, 436215808, 620763136, 704645120, 503324672,
- 134227200, 402662144, 503325952, 402664448, 469769728, 536872960, 721429760, 687873024, 687875840, 721427456, 620765184, 587406848, 704649984, 536881664, 721431040, 754982912, 134224896, 536879872,
- 721431040, 620764160, 620765184, 134225408, 805317120, 721431040, 603986944, 2885691904, 687872512, 637544704, 134229504, 654322688, 486541312, 637544704, 134226944, 687873536, 738207232,
- 452994304, 771753984, 721426432, 687873024, 436271873, 687876352, 771761664, 738199552, 134227712, 536881408, 520101376, 134228736, 687873280, 603989504, 704645120, 738207744, 687872000,
- 2835356672, 687872256, 637544704, 134229504, 637541120, 620768768, 738199552, 134227712, 436213760, 637544704, 704653824, 587204608, 620765184, 2969574400, 687872256, 637544704, 704654848,
- 587204608, 486546432, 134228736, 536881408, 520101376, 134228736, 637545216, 587204608, 620765184, 3254852608, 687872256, 637544704, 704654848, 738199552, 134227712, 637541120, 620768768,
- 587204608, 486546432, 134228736, 536881408, 520101376, 2785028864, 620763392, 520100352, 687875584, 436209664, 687874048, 587209216, 134224896, 788536320, 587209216, 603985920, 721426432,
- 637542400, 4177601792, 687872000, 637544704, 134229504, 536881408, 520101376, 134228736, 687873280, 603989504, 419432448, 402663680, 570432000, 721427456, 402697472, 687876352, 771761664,
- 738199552, 134227712, 687873280, 603989504, 771753984, 721426432, 687873024, 654313472, 603991040, 3003131648, 687872000, 637544704, 704654848, 704645120, 587212544, 721428480, 738199552,
- 134227712, 620763136, 134224640, 469771008, 721427712, 369163265, 687876352, 771761664, 687867904, 503324672, 721428224, 721422336, 134227456, 687872256, 436213760, 469770752, 939666176, 687871488,
- 637544704, 134229504, 536881408, 520101376, 134228736, 687872000, 637544704, 134229504, 469771008, 721427712, 369121027, 687876352, 771761664, 402655232, 721429248, 436209664, 687874048, 587209216,
- 134224896, 536881408, 520101376, 1426270976, 687871232, 637544704, 134229504, 587208704, 134228736, 536877568, 436218112, 469771008, 452986880, 771761664, 1443046656, 687871232, 637544704,
- 134229504, 587208704, 134228736, 536877568, 436218112, 469771008, 587204608, 486546432, 1543514880, 687871232, 637544704, 134229504, 654322688, 486541312, 637544704, 134226944, 687872256,
- 436213760, 469770752, 2399283968, 687871232, 637544704, 134229504, 637541120, 620768768, 771753984, 452993024, 134224896, 520104448, 687875584, 1694837504, 687871232, 637544704, 134229504,
- 637541120, 620768768, 704645120, 637542144, 721430784, 771753984, 452993024, 704912384, 687871232, 637544704, 134229504, 536881408, 520101376, 134228736, 687873280, 603989504, 486541312, 587210752,
- 822221824, 687871232, 637544704, 134229504, 637544704, 402664192, 469773056, 419432448, 436213760, 771760640, 687872000, 2952796928, 687871232, 637544704, 704654848, 452986880, 771761664,
- 134227200, 637545216, 654313472, 637541376, 587212544, 2667650048, 687870976, 637544704, 134229504, 637544704, 402664192, 469773056, 486541312, 687875584, 402664960, 452995328, 318809344,
- 436217088, 637542144, 134228224, 536877568, 436218112, 469771008, 436209664, 469769984, 570432000, 318778116, 687876352, 771761664, 687867904, 503324672, 721428224, 721422336, 134227456, 536878336,
- 469771008, 318803970, 687876352, 771761664, 738199552, 134227712, 536882688, 469768960, 704645120, 637542144, 721430784, 318810880, 687876352, 771761664, 687867904, 503324672, 721428224, 721422336,
- 134227456, 536877568, 805317376, 318793221, 687876352, 771761664, 738199552, 134227712, 520104448, 687875584, 134228736, 536882688, 469768960, 318811904, 687876352, 771761664, 134228480, 637541120,
- 620768768, 721422336, 134227456, 536879872, 469771520, 318789635, 687876352, 771761664, 402655232, 721429248, 436209664, 687874048, 587209216, 134224896, 654322688, 318809856, 436217088, 637542144,
- 134228224, 536877568, 436218112, 469771008, 788531200, 402662400, 570435840, 318814208, 687876352, 771761664, 134228480, 738208512, 620767488, 721422336, 134227456, 637541120, 704654080, 318811648,
- 687876352, 771761664, 738199552, 134227712, 536881408, 520101376, 134228736, 637541120, 704654080, 302033408, 687876352, 771761664, 452986880, 771761664, 134227200, 654322688, 587204608, 436217344,
- 2667651584, 687870464, 637544704, 134229504, 637544704, 402664192, 469773056, 687867904, 503324672, 721428224, 302030593, 687876352, 771761664, 687867904, 503324672, 721428224, 687867904,
- 721430016, 721426432, 1208097792, 620761600, 587210240, 134224896, 637541120, 419441664, 469771008, 687867904, 503324672, 721428224, 301993218, 687876352, 771761664, 436209664, 687874048,
- 587209216, 134224896, 536881408, 520101376, 3103795968, 687870208, 637544704, 704654848, 738199552, 134227712, 637545216, 587204608, 620765184, 1241652224, 620761344, 587210240, 134224896,
- 637541120, 419441664, 469771008, 452986880, 771761664, 1191322880, 620761344, 587210240, 134224896, 637541120, 419441664, 469771008, 587204608, 486546432, 4060162816, 687870208, 637544704,
- 704654848, 587204608, 486546432, 134228736, 536881408, 520101376, 3070241536, 687870208, 637544704, 704654848, 721422336, 687877120, 134227200, 536881408, 520101376, 201468672, 687870208,
- 637544704, 134229504, 536877568, 436218112, 469771008, 587204608, 486546432, 822225664, 687870208, 637544704, 134229504, 469771008, 721427712, 687867904, 721430016, 721426432, 822221824, 687870208,
- 637544704, 134229504, 637544704, 402664192, 469773056, 419432448, 436213760, 251798016, 687870208, 637544704, 134229504, 536877568, 436218112, 469771008, 452986880, 771761664, 822224128, 687870208,
- 637544704, 134229504, 637544704, 402664192, 469773056, 587204608, 486546432, 537078528, 738201856, 536877824, 134227456, 469768960, 436218368, 536881408, 721430272, 637542400, 604185856, 704647168,
- 134226688, 620765184, 469773056, 654321920, 469772544, 536881920, 503325952, 268474370, 687876352, 771761664, 687867904, 503324672, 721428224, 587204608, 620766720, 1509957120, 687869952,
- 637544704, 134229504, 687876864, 620764160, 134224640, 637541120, 620768768, 268481536, 687876352, 771761664, 134228480, 637545216, 436209664, 687874048, 587209216, 2533497856, 687869696,
- 637544704, 134229504, 469771008, 721427712, 587204608, 620766720, 2080513536, 687869696, 637544704, 134229504, 738208512, 620767488, 452986880, 771761664, 1224877312, 620760832, 587210240,
- 134224896, 637541120, 419441664, 469771008, 738199552, 235022080, 687869696, 637544704, 134229504, 536877568, 436218112, 469771008, 738199552, 2499946240, 687869696, 637544704, 134229504,
- 637541120, 620768768, 587204608, 620766720, 1526734336, 687869440, 637544704, 134229504, 687876864, 620764160, 134224640, 654322688, 234918146, 687876352, 771761664, 452986880, 771761664,
- 134227200, 134220288, 1728385536, 687869440, 637544704, 134229504, 637541120, 620768768, 301991936, 167774208, 234917122, 687876352, 771761664, 452986880, 771761664, 134227200, 134223872,
- 4043387136, 687869440, 637544704, 704654848, 738199552, 134227712, 637541120, 620768768, 234906373, 687876352, 771761664, 452986880, 771761664, 134227200, 134230272, 2684426240, 687869184,
- 637544704, 704654848, 687867904, 721430016, 721426432, 4227996672, 687869184, 637544704, 134229504, 637544192, 620765184, 469773056, 2516723968, 687869184, 637544704, 134229504, 654322688,
- 587204608, 620766720, 3053460992, 687869184, 637544704, 704654848, 721422336, 134227456, 805313536, 2147752960, 536874240, 134228224, 687873280, 704650240, 469769984, 469771520, 3087083776,
- 587205888, 503324672, 134227200, 738205952, 721431040, 486547456, 3036688384, 687869184, 637544704, 704654848, 721422336, 134227456, 637541120, 2063739648, 687869184, 637544704, 134229504,
- 738208512, 620767488, 738199552, 721626880, 452987904, 687872768, 704650240, 134228480, 637540608, 570435072, 201373185, 536879872, 620764672, 436209664, 620764160, 469773056, 1392716032,
- 687868928, 637544704, 704654848, 402655232, 721429248, 520095744, 201353221, 687876352, 771761664, 738199552, 134227712, 134222336, 1409485312, 687868928, 637544704, 704654848, 402655232,
- 721429248, 754976768, 201363970, 687876352, 771761664, 738199552, 134227712, 134220288, 1678053888, 687868928, 637544704, 134229504, 654322688, 822085632, 402655232, 201345026, 503325952,
- 469771008, 134228480, 536881408, 520101376, 2382506752, 687868928, 637544704, 134229504, 654322688, 402655232, 822085632, 201337859, 452991744, 469772544, 704653824, 436209664, 687872000,
- 1560288000, 738200576, 721431040, 402663680, 134226688, 536881664, 620764672, 184567554, 503325952, 469771008, 134228480, 469771008, 721427712, 184592384, 436217088, 637542144, 134228224,
- 637543168, 570432000, 184596225, 536879872, 620764672, 687867904, 503324672, 721428224, 184604673, 687876352, 771761664, 687867904, 503324672, 721428224, 184594944, 687876352, 771761664, 134228480,
- 654322176, 620765184, 184568322, 503325952, 469771008, 134228480, 637541120, 620768768, 184582404, 654321408, 469771008, 771753984, 637542144, 469771008, 184568834, 503325952, 469771008, 687867904,
- 503324672, 721428224, 167792130, 503325952, 469771008, 452986880, 771761664, 352462080, 687868416, 637544704, 704654848, 402655232, 721429248, 167791362, 503325952, 469771008, 587204608, 486546432,
- 3657509632, 687868416, 637544704, 134229504, 637541120, 620768768, 167826178, 469772544, 134223872, 520100352, 687872000, 3607177984, 687868416, 637544704, 134229504, 469771008, 721427712,
- 167818497, 536879872, 620764672, 587204608, 486546432, 2936154880, 738200064, 637545216, 637543424, 536877312, 469771008, 151013634, 503325952, 469771008, 134228480, 654322688, 151030019,
- 587211520, 687873024, 536878592, 704650240, 151027972, 654321408, 469771008, 402655232, 721429248, 151011586, 419439616, 587213824, 620763136, 469768704, 134279681, 687876352, 771761664, 134228480,
- 3640729344, 687867904, 637544704, 134229504, 654322688, 134219264, 721431040, 687873024, 704651264, 4043383296, 687867904, 637544704, 704654848, 754976768, 134237442, 503325952, 469771008,
- 738199552, 2634163968, 687867648, 520100352, 754982912, 319036416, 687867648, 520100352, 402664960, 3254857728, 687867392, 637544704, 704654848, 100712193, 553655040, 704654336, 1912744704,
- 620758528, 520100352, 687875584, 83890692, 503325952, 805316864, 83891204, 587213568, 704649216, 83891460, 402664960, 452995328, 67150084, 570434816, 2181308160, 721421312, 603989504, 50333440,
- 452991744, 33595396, 385882880, 721420800, 671191808, 2550226945, 4194421761, 1375872514, 2785181186, 4127378946, 1174609411, 2416143363, 3590566915, 402978819, 1476671492, 2550429700, 3624187908,
- 335934980, 1342517765, 2349166085, 3288705029, 4228243461, 872814598, 1812353030, 2751891462, 3691429894, 336066566, 1275539463, 2147968519, 3020397063, 3892825607, 470286856, 1342715400,
- 2181589512, 2986908168, 3792226824, 302643720, 1107896841, 1846106121, 2584314889, 3322523657, 4060732425, 503973898, 1242182666, 1913282058, 2584380938, 3255479818, 3926578698, 302775818,
- 973809163, 1644908043, 2316006923, 2987105803, 3624650251, 4228639243, 537660940, 1141649932, 1745638924, 2282518540, 2819397644, 3356276748, 3893155852, 68023820, 537727501, 940387341, 1343046669,
- 1745705997, 2148365325, 2517470221, 2853019661, 3188569101, 3524118541, 3859667981, 4195217421, 235799566, 571349006, 839789070, 1108228622, 453036288, 536882176, 452993792, 620765184, 134225408,
- 536877568, 436218112, 469771008, 469764096, 436219648, 402662144, 402662400, 536881920, 620766720, 453035776, 536882176, 452993792, 620765184, 134225408, 536877568, 436218112, 469771008, 402655232,
- 687876352, 771761664, 687867904, 503324672, 721428224, 419479808, 536881408, 503323392, 134224896, 536877568, 436218112, 469771008, 469764096, 436219648, 402662144, 402662400, 536881920, 620766720,
- 369162242, 721426432, 469773056, 805316864, 721422336, 687873792, 469769216, 671090688, 402664448, 721430784, 687873024, 2399152640, 402658560, 503325952, 402662144, 469768960, 520104448,
- 134225920, 402664192, 402661888, 704645120, 503324672, 3389007104, 738202880, 587210752, 536877824, 503325952, 436209664, 687874048, 587209216, 134224896, 603991808, 687872000, 3355451904,
- 738202880, 587210752, 536877824, 503325952, 436209664, 687874048, 587209216, 134224896, 520100352, 436214784, 3221234176, 687870720, 452993024, 469769728, 436209664, 687874048, 587209216,
- 134224896, 520100352, 436214784, 2969838080, 637539072, 570435072, 553650176, 738207232, 620767488, 587208704, 771753984, 536878848, 587211520, 3590531584, 402658048, 402662144, 436217088,
- 134224896, 436218368, 587208704, 134224896, 536881408, 520101376, 2583702272, 687870720, 822089728, 587210752, 402661376, 134227200, 469772544, 587208704, 704645120, 503324672, 3254789376,
- 687870720, 452993024, 469769728, 436209664, 687874048, 587209216, 134224896, 603991808, 687872000, 3573752320, 402657792, 402662144, 436217088, 134224896, 436218368, 587208704, 134224896,
- 469771008, 721427712, 285248771, 536881408, 486546432, 402659840, 469772800, 603981824, 452992000, 436215808, 587208704, 285242627, 704649216, 419437568, 587208704, 134226688, 402659584, 134228736,
- 402659584, 587211520, 268477698, 536882176, 452993792, 620765184, 134225408, 637540864, 738206464, 620766208, 2214865408, 637538304, 570435072, 637536256, 469772032, 134227200, 469772544,
- 452990976, 687873024, 251710976, 536882176, 452993792, 620765184, 134225408, 520104448, 469770240, 452993792, 251699972, 536881408, 486546432, 402659840, 469772800, 436209664, 637543168, 570432000,
- 251688707, 704649216, 469770752, 419441408, 587208704, 134226688, 402659584, 587211520, 251713795, 637544704, 452990976, 402659840, 721431040, 721422336, 771761664, 687873024, 251722242, 721426432,
- 469773056, 805316864, 671090688, 402664448, 721430784, 687873024, 251665667, 704649216, 469770752, 134228736, 520104448, 654321152, 536880896, 503325952, 251681541, 687875584, 469768960, 134228224,
- 637545216, 134227712, 469771008, 721427712, 234884100, 687872000, 134228480, 721431040, 503322624, 469769728, 469772544, 3506445056, 738201088, 587210752, 536877824, 503325952, 771753984,
- 469769984, 721426432, 234898434, 469769216, 134228224, 738206720, 134225408, 603986944, 721430272, 3137351680, 637537792, 721431296, 469771008, 452986880, 637544704, 587212544, 721427456,
- 234905600, 587212288, 134228736, 536879872, 520101376, 620768000, 620765184, 503586304, 469765632, 587211520, 436209664, 620766720, 536877568, 687873024, 469769728, 218157570, 687874048, 520104704,
- 402660096, 134230016, 402659840, 469770752, 218145540, 704654336, 620765184, 704650240, 134228480, 536881920, 469771264, 218153985, 436213760, 771760640, 687872000, 134224640, 402660608, 721431040,
- 218156292, 469771008, 452994304, 687873024, 654313472, 637542144, 469771520, 218157056, 536882176, 452993792, 620765184, 134225408, 704654336, 687873024, 218155776, 536882176, 452993792, 620765184,
- 134225408, 587209984, 503322624, 218128640, 637543936, 134226432, 637540608, 570435072, 402662400, 570435840, 218152448, 788538880, 704650240, 654313472, 436213760, 536879616, 503325952, 218153729,
- 436213760, 771760640, 687872000, 134224640, 721431040, 654318592, 218156032, 536882176, 452993792, 620765184, 134225408, 637543168, 570432000, 218139651, 788538880, 704650240, 704645120, 402664192,
- 570432000, 452992000, 218134019, 704649216, 419437568, 587208704, 134226688, 402659584, 587211520, 218107397, 419436544, 134230016, 402659840, 687876352, 402661376, 469769728, 218125061, 687872000,
- 134228480, 687875840, 503326208, 469772544, 704653824, 218104323, 587208704, 620763136, 469768704, 704645120, 402659840, 469771008, 218168066, 721426432, 469773056, 805316864, 469764096, 654320640,
- 805317376, 201389826, 721426432, 469773056, 805316864, 486541312, 587213824, 1023746816, 637537280, 570435072, 603981824, 452992000, 436215808, 587208704, 201357315, 771761664, 536879872,
- 503325952, 419432448, 587208704, 4177666816, 402656256, 721431296, 687873024, 134230016, 402661120, 486548224, 201333763, 503322624, 704645120, 637542144, 654321408, 620765184, 1527062016,
- 637537280, 452995328, 687873024, 704645120, 805317376, 469771008, 201379072, 536882176, 452993792, 620765184, 134225408, 503325952, 386147840, 469765120, 536883456, 687873024, 436209664, 687877120,
- 469773568, 201376768, 536881408, 503323392, 134224896, 402664960, 469773056, 1593846016, 536873984, 436218624, 536880640, 134227200, 536881664, 620764672, 201374720, 721430016, 587213568,
- 134224896, 402664960, 469773056, 3271567616, 687868672, 452993024, 469769728, 587204608, 436217344, 2265195008, 402656000, 721431296, 687873024, 134230016, 402659840, 1510287616, 637537024,
- 452995328, 687873024, 620759040, 620766720, 3472890880, 738200320, 587210752, 536877824, 503325952, 738199552, 2634163456, 637537024, 134229760, 687872000, 520100352, 754982912, 1376066560,
- 637537024, 570435072, 721422336, 620763136, 570431488, 151265024, 402656000, 134227200, 603990528, 570435072, 620765184, 2214862336, 637537024, 570435072, 687867904, 402660352, 469768960,
- 1040525568, 687868672, 402660352, 134224640, 587213312, 436215808, 2718178304, 637536768, 570435072, 419432448, 419438592, 469771008, 167802627, 704649216, 469770752, 419441408, 587208704,
- 335815424, 637536768, 570435072, 402655232, 587213568, 704649216, 167824900, 637543936, 134226432, 570436096, 587213824, 3439469312, 469764608, 587211520, 704645120, 402662144, 520104448,
- 167794949, 687875584, 469768960, 134228224, 587208704, 436478720, 738200064, 134228480, 536881664, 654320640, 469771008, 167823362, 620765184, 436217344, 587213824, 687872000, 3674417664,
- 587205120, 436213760, 419439104, 402662912, 452995328, 167787520, 788538880, 721422336, 704651264, 738208256, 3221494784, 637536768, 570435072, 671090688, 687877120, 620763136, 167806211,
- 637544704, 603989504, 419432448, 587208704, 2684363520, 738199808, 134225408, 587213312, 704649216, 4194443008, 402655488, 721431296, 687873024, 134230016, 4144106240, 402655488, 721431296,
- 687873024, 134230016, 989859328, 402655488, 721426944, 687873024, 738205696, 4177667072, 402655488, 721431296, 687873024, 134230016, 2415922176, 637536512, 587214336, 687867904, 436215808,
- 3170900992, 637536512, 587214336, 486541312, 637543936, 369367808, 402655488, 570432000, 654322176, 436213760, 335682560, 687868160, 469770240, 436215040, 704649216, 3456375808, 637536512,
- 570435072, 452986880, 402660352, 1577065216, 402655488, 721428224, 704645120, 503324672, 2349016320, 637536512, 469774080, 134228480, 587208704, 2684562176, 469764352, 134224640, 738207488,
- 704652032, 251993088, 536873216, 520103424, 822089728, 687872000, 4160887552, 402655488, 721431296, 687873024, 134230016, 3120565504, 637536512, 469772544, 520095744, 587212288, 3624082432,
- 637536512, 570435072, 637536256, 469772032, 4076938496, 402655488, 134228224, 520100352, 687872000, 4211223296, 402655488, 721431296, 687873024, 134230016, 100796672, 738199552, 587211520,
- 637542144, 620767488, 134232576, 436213760, 469773056, 536881408, 2315458560, 402655232, 452994304, 402655232, 452993024, 134247939, 704649216, 419437568, 587208704, 2869109504, 637536256,
- 134229760, 654321152, 620764160, 134268161, 436213760, 771760640, 687872000, 2835487488, 738199552, 587210752, 536877824, 503325952, 134247426, 587213824, 704652032, 805313536, 2902531072,
- 637536256, 570435072, 402662400, 570435840, 117475843, 620763136, 402660096, 469769728, 117447172, 704654336, 402655232, 721429248, 117483777, 687872000, 637540864, 469768960, 117454339, 721426432,
- 721428224, 419441664, 117503746, 721426432, 469773056, 805316864, 117449219, 402663680, 587210752, 469771008, 117495810, 436215808, 436219904, 469771008, 117495555, 469771008, 452994304, 687873024,
- 100681477, 687877120, 469769728, 1476733184, 536872448, 536879616, 503325952, 100713728, 436218880, 469770752, 3204459264, 687867392, 452993024, 469769728, 83901445, 436213760, 620766720, 83930884,
- 520099840, 536877056, 83921923, 788538880, 704650240, 83927556, 419438592, 469771008, 83939840, 687877120, 721431040, 83892484, 738208000, 520104448, 83941891, 637544704, 603989504, 83920132,
- 402663680, 620765184, 83894019, 536879872, 452994304, 67142404, 620766720, 402922496, 637535232, 503325952, 67122691, 721426432, 855777024, 637535232, 721429248, 67159298, 603989504, 1140988160,
- 469763072, 687873024, 67154177, 587212288, 2885753600, 637535232, 570435072, 67116802, 687872000, 1040329216, 469763072, 587211520, 67151106, 620763136, 2382569984, 738198528, 620767488, 67112197,
- 419436544, 268775424, 587203584, 503326208, 67159552, 503327744, 2650941952, 738198272, 4093779456, 469762816, 3590396672, 402653952, 3640796416, 738198272, 2332240384, 637534976, 3674222336,
- 3825317889, 973213698, 2348966914, 3691164674, 738395139, 2080592899, 3355681283, 335867395, 1610889732, 2852423172, 4060401156, 973411845, 2181389829, 3389367813, 268889605, 1409692166,
- 2550560262, 3624318982, 403175430, 1476868103, 2550626311, 3624384519, 369686535, 1376269320, 2382917640, 3389565960, 101312520, 1107895305, 2114543625, 3121191945, 4060730889, 705302026,
- 1644840458, 2584378890, 3523917322, 168553994, 1040917515, 1913346059, 2785774603, 3658203147, 235729931, 1108092940, 1980521484, 2852950028, 3725378572, 302905356, 1175268365, 2047696909,
- 2920125453, 3792553997, 370080781, 1175334414, 1980653070, 2785971726, 3591290382, 101707278, 906960399, 1712279055, 2517597711, 3322916367, 4128235023, 638586384, 1410350608, 2148559376,
- 2886768144, 3624976912, 68283920, 806427153, 1544635921, 2282844689, 3021053457, 3759262225, 202569233, 940712466, 1611811858, 2282910738, 2954009618, 3625108498, 1305618, 672338963, 1309883411,
- 1913872403, 2517861395, 3121850387, 3725839379, 34926611, 638850068, 1175729684, 1712608788, 2249487892, 2719257620, 3189026836, 3658796052, 4128565268, 303367189, 739581973, 1142241301,
- 1544900629, 1947559957, 2350219285, 2752878613, 3155537941, 3524642837, 3860192277, 4195741717, 236323862, 538318870, 806758422, 1075197974, 2936227862, 536876288, 436218112, 469771008, 452986880,
- 587212288, 402662144, 134228224, 637545216, 704645120, 637543168, 1476668160, 402658560, 721430784, 486541312, 402662144, 419441408, 452992000, 704645120, 536882176, 436218624, 704649216,
- 1862409216, 520098816, 754981888, 637544704, 134227200, 536877568, 436218112, 469771008, 687867904, 503324672, 721428224, 335572738, 687874048, 587209216, 134224896, 520100352, 754981888,
- 637544704, 134227200, 536881408, 520101376, 4194577152, 587207424, 738207232, 134224640, 520104448, 771761664, 687873024, 134228480, 469769984, 754980864, 3640668160, 587207424, 738207232,
- 134224640, 520104448, 771761664, 687873024, 134228480, 402664960, 469773056, 1895966976, 520098560, 754981888, 637544704, 134227200, 536877568, 436218112, 469771008, 452986880, 771761664,
- 1845634304, 520098560, 754981888, 637544704, 134227200, 536877568, 436218112, 469771008, 587204608, 486546432, 1895967488, 536875776, 436218112, 469771008, 436209664, 469769984, 687877376,
- 620766720, 452986880, 771761664, 369435904, 637539072, 654320640, 469772544, 704653824, 402655232, 687876352, 771761664, 134228480, 587208704, 1845635840, 536875776, 436218112, 469771008,
- 436209664, 469769984, 687877376, 620766720, 587204608, 486546432, 3691195136, 520098304, 587208704, 419439104, 402662912, 452995328, 721422336, 402660352, 520100352, 687873024, 302038785,
- 687874048, 587209216, 134224896, 402661120, 486548224, 704645120, 687876864, 570435072, 3741391872, 536875520, 436218112, 469771008, 469764096, 436219648, 402662144, 402662400, 536881920,
- 620766720, 302023682, 687872000, 721427456, 704645120, 738207744, 687872000, 134224896, 536881408, 520101376, 218245888, 536875520, 436218112, 469771008, 402655232, 687876352, 771761664, 687867904,
- 503324672, 721428224, 302045184, 536879872, 419440384, 402662912, 452995328, 671090688, 469773312, 721431040, 637542400, 956441856, 587207168, 738207232, 134224640, 637541120, 620768768, 637543168,
- 452990976, 402655232, 721429248, 285239808, 452994560, 134224896, 738207488, 587211520, 687867904, 671095808, 469773312, 721431040, 285268482, 637543168, 469772800, 134224640, 402659840, 721430272,
- 637542400, 536880384, 503325952, 285215746, 687874048, 587209216, 134224896, 687872000, 637544704, 134229504, 469771008, 721427712, 285219589, 402661120, 654320640, 503322624, 469771520, 503318528,
- 402662144, 704653824, 704650240, 285241346, 469769984, 687877376, 620766720, 436209664, 687874048, 587209216, 134224896, 654322688, 285216514, 687874048, 587209216, 134224896, 687872000, 637544704,
- 134229504, 637541120, 620768768, 285245954, 687872000, 721427456, 704645120, 738207744, 687872000, 134224896, 637541120, 620768768, 285253378, 687872000, 721427456, 704645120, 738207744, 687872000,
- 134224896, 469771008, 721427712, 285241346, 687874048, 587209216, 134224896, 520100352, 754981888, 637544704, 134227200, 654322688, 285261570, 637543168, 570432000, 687867904, 721430016, 721426432,
- 134224896, 469771008, 721427712, 268450306, 637543168, 452996096, 738199552, 587212544, 402662912, 134224640, 587208704, 688204544, 536875008, 436218112, 469771008, 687867904, 452990976, 402661376,
- 536881920, 620766720, 268444676, 603989504, 402663168, 704653824, 452986880, 402663680, 721427712, 620765184, 2315525632, 520097792, 687872000, 536878592, 503325952, 704645120, 402664192,
- 536881920, 620766720, 268450050, 637543168, 452996096, 402655232, 687876352, 771761664, 452986880, 771761664, 3540067584, 536874752, 436218112, 469771008, 671090688, 469773312, 721431040,
- 637542400, 3573556480, 520097536, 587210752, 134224640, 637540864, 419439616, 721426432, 620763136, 1107634944, 637538048, 603988992, 620764160, 134228736, 469771264, 536877824, 402659840,
- 235021056, 536874752, 436218112, 469771008, 402655232, 687876352, 771761664, 738199552, 2197956352, 402657024, 469772544, 134228736, 671099392, 402664448, 469772544, 738199552, 4161021696,
- 587206400, 738207232, 134224640, 637543424, 620766720, 687867904, 536877056, 3691193600, 520097536, 587208704, 419439104, 402662912, 452995328, 738199552, 469772800, 3707906304, 402657024,
- 721430784, 402655232, 687876352, 771761664, 452986880, 771761664, 50472192, 687869696, 452992000, 721428480, 436209664, 687872000, 134224640, 587208704, 2785291008, 637538048, 603988992, 620764160,
- 704654080, 452986880, 587212288, 402662144, 2416126208, 587206400, 654319616, 637540608, 687872000, 134224640, 520100352, 436214784, 973218304, 587206144, 738207232, 134224640, 687872000,
- 637544704, 134229504, 654322688, 234945284, 637543168, 452996096, 704645120, 620768256, 687867904, 536877056, 318973184, 402656768, 469771008, 452994304, 687872000, 788531200, 402662400, 570435840,
- 234885891, 587208704, 620764160, 402660096, 134228224, 536881920, 469771264, 2432903680, 587206144, 654319616, 637540608, 687872000, 134224640, 536879872, 721431040, 234886147, 587208704,
- 620764160, 402660096, 134228224, 520100352, 436214784, 2181112320, 520097280, 587210752, 134224640, 469772544, 436213760, 536878848, 503325952, 234944260, 637543168, 452996096, 603981824,
- 402660352, 419441408, 587208704, 1074078464, 587206144, 620765184, 436215808, 603981824, 452992000, 436215808, 587208704, 234888708, 620766720, 536877568, 687873024, 469769728, 419432448,
- 587209728, 302195456, 402656768, 469771008, 452994304, 687872000, 603981824, 620765184, 704654336, 234908933, 603989504, 738207488, 469773056, 134228224, 637543424, 704654336, 2768509952,
- 637537792, 603988992, 620764160, 134228736, 637541120, 587211520, 687872000, 234897669, 536879872, 419440384, 402662912, 452995328, 738199552, 469772800, 956442880, 587206144, 738207232, 134224640,
- 637541120, 620768768, 637543168, 452990976, 218108163, 587208704, 620764160, 402660096, 134228224, 587212544, 704654336, 218108421, 587208704, 620764160, 402660096, 134228224, 469773824, 570432512,
- 218131456, 738208000, 469774592, 687874048, 134227456, 536881664, 620764672, 218159872, 419441664, 704650240, 704645120, 402664192, 570432000, 452992000, 218106629, 469769984, 570432000, 721422336,
- 134227456, 587213312, 721430016, 218148099, 603989504, 469771264, 721429760, 704645120, 402662144, 520104448, 218109189, 704649216, 134225664, 469772544, 536878592, 721431040, 687873024, 218128896,
- 603985920, 687873024, 134223872, 637544704, 402664192, 469773056, 218162945, 587208704, 620764160, 402660096, 134228224, 402660096, 704655360, 218156545, 469769984, 687877376, 620766720, 687867904,
- 503324672, 721428224, 218107397, 687872000, 536881408, 503322624, 134224896, 402659584, 805312768, 218164737, 687872000, 134228736, 520104448, 654321152, 536880896, 503325952, 201341442, 637543168,
- 452996096, 738199552, 587212544, 402662912, 721623808, 637537280, 721429760, 436213760, 134228736, 637540608, 570435072, 201351682, 402661120, 620765184, 419432448, 637544704, 469770752,
- 3741525248, 637537280, 654320640, 436213760, 134228736, 536877824, 436218368, 201387009, 469769984, 687877376, 620766720, 452986880, 771761664, 470033664, 520096768, 436214784, 134226432,
- 637541120, 419441664, 469771008, 201380354, 570431488, 134224896, 402659840, 452994304, 469771008, 3875613184, 402656256, 469771008, 452994304, 687872000, 402655232, 721429248, 201389057,
- 603985920, 687873024, 134223872, 469772544, 687876864, 3523290624, 536873984, 436218112, 469771008, 436209664, 469769984, 570432000, 201380353, 469769984, 570432000, 436209664, 687874048,
- 587209216, 2097290240, 520096768, 436214784, 134226432, 671099392, 402664448, 469772544, 201352192, 402661120, 721430784, 436209664, 587212288, 603991040, 3171034368, 536873984, 436218112,
- 469771008, 620759040, 721430016, 520100352, 201364739, 687872000, 134228736, 587209984, 721426432, 469768448, 2600475392, 520096768, 687872000, 134228736, 536881664, 654320640, 469771008,
- 201381632, 687874048, 587209216, 134224896, 637543680, 469768960, 2047027712, 520096768, 704650240, 134228480, 536877312, 520104448, 654321152, 201379841, 687874048, 587209216, 134224896,
- 536880128, 738206976, 1744841216, 637537280, 469768960, 436209664, 603989504, 402663168, 469772544, 201330949, 587208704, 620764160, 402660096, 134228224, 402660096, 3439407104, 520096768,
- 754981888, 637544704, 134227200, 469771008, 721427712, 201358595, 469769984, 704653824, 570427392, 536880384, 520101376, 1711287040, 587205632, 654317568, 469772032, 419440896, 402662912,
- 452995328, 201356035, 603989504, 687875840, 704650240, 134228480, 587208704, 1459825408, 536873984, 436218112, 469771008, 687867904, 503324672, 721428224, 201370627, 603989504, 469771264,
- 721429760, 452986880, 721430016, 738404864, 637537280, 721429760, 436213760, 134228736, 402659840, 452995328, 201380097, 687874048, 587209216, 134224896, 603991808, 687872000, 436412928, 536873984,
- 436218112, 469771008, 654313472, 738203648, 469772800, 184562437, 603989504, 469771264, 721429760, 704645120, 704652288, 184574210, 452994560, 134224896, 687872256, 620763136, 520100352, 184571139,
- 687874048, 587209216, 134224896, 637541120, 620768768, 184603649, 687874048, 587209216, 134224896, 620765184, 637541632, 184574466, 402661120, 620765184, 704645120, 402662144, 520104448, 184575232,
- 402661120, 721430784, 503318528, 620763136, 721431296, 184571395, 687874048, 587209216, 134224896, 469771008, 721427712, 184573187, 452994560, 134224896, 637540864, 603988992, 721428480, 184555779,
- 603989504, 469771264, 721429760, 402655232, 721429248, 184556291, 687874048, 587209216, 134224896, 721431040, 654321152, 184557828, 637544704, 134227712, 536881664, 654320640, 469771008, 184580098,
- 687874048, 587209216, 134224896, 587212544, 805312512, 184580867, 469769984, 704653824, 419432448, 402662912, 452995328, 184602369, 687874048, 587209216, 134224896, 587212544, 704654336, 184603904,
- 536878848, 452993792, 687867904, 486547456, 469771008, 184560386, 687872000, 721427456, 687867904, 503324672, 721428224, 184581891, 469769984, 704653824, 671090688, 469773312, 620764160, 184550146,
- 469772544, 536877824, 134228736, 402659840, 452995328, 184583940, 687872000, 419432448, 721426432, 469773056, 805316864, 184551170, 687873024, 536881920, 536878336, 402659840, 469773056, 184557572,
- 637543936, 536879616, 134224896, 536877312, 469773056, 184582401, 536878848, 452993792, 452986880, 469772544, 704653824, 184560899, 687874048, 587209216, 134224896, 704654336, 687873024, 167826432,
- 687872000, 721422336, 620768256, 469771520, 3540132608, 520096256, 687872000, 134228736, 687872000, 402660352, 167799552, 587212288, 620766720, 704645120, 503324672, 1577264384, 637536768,
- 469768960, 603981824, 687873024, 469769728, 167804419, 469769984, 704653824, 654313472, 771758080, 3473155328, 402655744, 654320640, 687873536, 738207232, 452994304, 167774213, 637543168,
- 452996096, 419432448, 587212288, 2080582400, 520096256, 704650240, 134228480, 536879616, 503325952, 167813122, 687874048, 587209216, 134224896, 637541120, 704785152, 402655744, 469772544,
- 134228736, 469771008, 721427712, 167824386, 587208704, 738204160, 402662144, 637545216, 4177799424, 587205120, 738207232, 134224640, 402663680, 620765184, 167777029, 620763136, 805313280,
- 436209664, 620763136, 3942718464, 520096256, 754981888, 637544704, 134227200, 654322688, 167782402, 687872000, 721427456, 452986880, 771761664, 2600543488, 587205120, 436217344, 134226432,
- 637541632, 687877120, 167826689, 637544704, 704653824, 402661120, 687874048, 3573688832, 520096256, 687872000, 134228736, 536879872, 469771520, 167804931, 469769984, 704653824, 687867904,
- 637543936, 2885886464, 637536768, 603988992, 620764160, 536881920, 503325952, 167828227, 402661120, 570434304, 637540608, 687872000, 2936085248, 402655744, 469771264, 402663680, 402655232,
- 721429248, 167825924, 637543168, 452996096, 603981824, 637543936, 1476601088, 536873216, 436218112, 469771008, 738199552, 973416192, 402655488, 587208960, 134224896, 402659840, 1660954880,
- 469764352, 536877824, 704645120, 503324672, 3473024256, 637536512, 805316352, 536881408, 520101376, 1761618688, 637536512, 469768960, 486541312, 687875584, 3691127296, 402655488, 721430784,
- 654313472, 738206464, 2281974272, 402655488, 134228224, 738203904, 704653568, 2281974528, 402655488, 134228224, 687872512, 704649216, 1375936256, 587204864, 654319616, 637540608, 687872000,
- 3540261632, 587204864, 738207232, 134224640, 738208256, 2499814656, 469764352, 721429760, 704645120, 503324672, 4076938496, 520096000, 687872000, 134228736, 402659584, 3556911360, 520096000,
- 687872000, 134228736, 536880896, 1795300352, 402655232, 469771008, 452994304, 687872000, 134228226, 687872000, 721427456, 738199552, 3657443072, 637536256, 654320640, 721431552, 687873024,
- 134226180, 637544704, 134227712, 587208704, 2567121664, 536872960, 436218112, 469771008, 520095744, 134224644, 620763136, 402662656, 536877312, 2399349248, 402655232, 704653056, 587213824,
- 704650240, 134252036, 687872000, 687867904, 402660352, 2298751232, 402655232, 134228224, 536881664, 469768960, 134280961, 603989504, 469771264, 721429760, 3707841024, 637536256, 654320640,
- 469772544, 704653824, 134272512, 536878848, 452993792, 469772544, 486810880, 637536256, 570432000, 402664192, 587210752, 117473538, 603989504, 402663168, 704653824, 117474820, 687872000, 402655232,
- 721429248, 117469445, 687872000, 754980864, 620763136, 117456643, 721431552, 469771008, 805316864, 117500161, 603989504, 469771264, 721429760, 117451778, 587212288, 603991040, 704652544, 100679429,
- 469769984, 704650240, 1728060416, 587204096, 754984448, 687873024, 100718081, 620763136, 469768704, 1426203392, 536872448, 436218112, 469771008, 100717312, 687872000, 637536256, 1124410624,
- 687867392, 721431552, 520100352, 100668421, 687872000, 637544704, 3707972352, 520095232, 687877120, 520100352, 100671236, 637543936, 536879616, 1057102848, 637535744, 486546688, 469769216,
- 100708097, 603985920, 687873024, 2902595584, 738198784, 469768448, 2852268544, 520094976, 587210752, 3775077120, 687867136, 771761664, 402793728, 587203840, 738207232, 3724745472, 637535488,
- 620765184, 2030250496, 520094976, 704650240, 2919442944, 637535488, 436218880, 2802065152, 687867136, 704652800, 2483104256, 587203840, 704652800, 16980992, 587203840, 620766720, 2600541184,
- 587203840, 436217344, 386015744, 520094976, 536877056, 3506709760, 520094976, 536877056, 2466326784, 520094976, 436214784, 3523355136, 402654208, 469770752, 67171841, 503326208, 2751736320,
- 536871936, 805317376, 67166211, 637544704, 1560423936, 637535232, 469768960, 67133442, 637544704, 2885822208, 738198528, 469768448, 67115778, 654321152, 2281844736, 620757760, 3489935360,
- 402653952, 3557042944, 637534976, 2952932864, 402653952, 436345088, 738198272, 2566990592, 637534976, 2936151552, 402653952, 1040197888, 3221257728, 235005952, 1476473857, 2583788033, 3623991809,
- 268628993, 1208101890, 2080530946, 2919405058, 3724723714, 201586178, 939729411, 1610828803, 2281927683, 2953026563, 3624125443, 4228114947, 537136644, 1141125636, 1745114628, 2349103620,
- 2885983236, 3422862340, 3959741444, 201718788, 671422981, 1141192197, 1577406981, 1946511877, 2282061317, 2584056325, 536900355, 771761664, 134227200, 469771008, 721427712, 402655232, 452994304,
- 738199552, 134227712, 536881408, 520101376, 134228736, 637545216, 436209664, 620764160, 469773056, 2634033408, 536875776, 503322624, 402663680, 134226944, 687875840, 452992000, 436214784,
- 704650240, 637544960, 2332305664, 536875520, 603985920, 620766720, 134224640, 738208512, 620767488, 687867904, 503324672, 721428224, 301998596, 503324672, 721428480, 587208704, 721422336,
- 436213760, 637542144, 687873536, 654317568, 2650808064, 536875264, 503322624, 402663680, 134226944, 738208256, 436214272, 704650240, 637544960, 604252416, 687869952, 486545408, 536881920,
- 503325952, 436209664, 603989504, 402663168, 704653824, 251670275, 536881408, 469773568, 704653568, 587204608, 436215808, 620764160, 469772800, 251723267, 402661376, 687873536, 603985920, 654313472,
- 637544704, 469770496, 721426944, 234936580, 738208000, 704652288, 536881920, 570432000, 419432448, 721428480, 2030312448, 687869184, 654321152, 469771008, 134228736, 587213312, 704649216,
- 402988800, 738200832, 654320640, 721431040, 687873024, 486541312, 687874048, 2500008960, 637537536, 587211520, 134230016, 587209984, 721426432, 469768448, 637803264, 687869184, 603991040,
- 704645120, 469773056, 587209728, 402663168, 2617255168, 536873984, 503322624, 402663680, 134226944, 469771520, 721432320, 201369604, 402661120, 603990272, 436213760, 402661120, 687874560,
- 2349078528, 687868928, 771758080, 654313472, 587212288, 503328768, 620766720, 184609283, 637543936, 134228224, 587209216, 704652800, 452992000, 184555012, 587209728, 721427456, 134224896,
- 469771008, 721427712, 184550400, 587212288, 402662144, 134228224, 536881664, 620764672, 184573699, 704650240, 721428992, 654321152, 402655232, 721429248, 167813122, 721430016, 436209664, 687874048,
- 587209216, 3875740672, 536873472, 469768704, 721422336, 687873792, 469769216, 167807748, 687874048, 436214784, 536881920, 620766720, 3942853120, 637536512, 687875584, 637536256, 469772032,
- 3825411328, 536873216, 469768704, 486541312, 738207232, 1845504256, 637536512, 503325952, 704645120, 503324672, 2516854016, 402655488, 520104448, 637540608, 687872000, 1275271936, 637536512,
- 620768768, 587204608, 620766720, 2449677824, 536873216, 503322624, 637543680, 469772800, 3808635392, 536873216, 469768704, 486541312, 754982912, 2483231744, 637536512, 587211520, 134230016,
- 637540608, 4228132608, 469764096, 637543424, 687872512, 721426432, 134223621, 603991040, 704653056, 469773056, 3892521216, 536872960, 469768704, 721422336, 637545984, 134257921, 771761664,
- 587212032, 402662912, 2986482432, 402655232, 402664192, 402659584, 469772800, 134276355, 436215808, 134224896, 620766720, 3573816320, 536872960, 469768704, 452986880, 150997760, 134250755,
- 603991040, 419436800, 587209728, 620962560, 469764096, 486545408, 469771520, 704653824, 134276611, 436215808, 134224896, 536881664, 3221303040, 687867648, 654321152, 469771008, 3724684032,
- 536872704, 603985920, 620766720, 1828723456, 536872704, 654322176, 402662144, 3590598656, 536872704, 469768704, 452986880, 3657699072, 738199296, 503325952, 637541376, 1141187840, 536872704,
- 469772800, 704649216, 1543838720, 536872704, 503324160, 620765184, 1594039808, 469763840, 570436096, 637545216, 67118848, 637535744, 587211520, 687872000, 100710913, 452992000, 620764160,
- 2936220416, 637535744, 402662656, 469773056, 100718596, 402663680, 637541888, 3909297408, 536872448, 536882432, 469768960, 83895044, 822091776, 805318912, 83923971, 587212288, 805315328, 67118340,
- 738208000, 2952995840, 637535232, 469773568, 67166723, 436215808, 620960768, 469763072, 486545408, 50369283, 402662656, 50386692, 503326208, 1644179456, 3221263360, 335669760, 1610693121,
- 2818671617, 4026649601, 771887106, 1778535426, 2718074370, 3657612802, 235140098, 1073948675, 1845712899, 2583921667, 3322130435, 4026784771, 402916356, 1006905860, 1610894852, 2214883844,
- 2684654084, 3120868868, 3489973764, 3791968772, 1510205956, 788535296, 469773056, 620767488, 587208704, 587204608, 620765184, 134226432, 671099392, 402664448, 469772544, 402655232, 721429248,
- 352377856, 754984192, 587209728, 654321152, 134224896, 536877568, 436218112, 469771008, 436209664, 469769984, 570432000, 335576834, 721432320, 687873024, 402662656, 134226688, 536879872, 570434816,
- 704645120, 738207744, 687872000, 3842055168, 788534272, 587209216, 603985920, 721426432, 637542400, 134227200, 687876864, 402661376, 503325952, 469771008, 302033156, 754984192, 587209728,
- 654321152, 134224896, 654321152, 620764160, 721422336, 788536320, 3741395712, 788533760, 587209216, 603985920, 721426432, 637542400, 134227200, 536877568, 436218112, 469771008, 285233411,
- 654323456, 620763136, 134224640, 687872000, 637544704, 704654848, 402655232, 721429248, 285235459, 721432320, 687873024, 402662656, 134226688, 536879872, 570434816, 402655232, 721429248, 285242882,
- 587211520, 654319616, 536881664, 134228480, 469773568, 721430784, 436215808, 587208704, 285265922, 469774336, 452986880, 637544704, 654321408, 687873024, 469764096, 654320640, 805317376, 251700226,
- 754984192, 587209728, 654321152, 134224896, 671099392, 402664448, 469772544, 234927364, 754984192, 587209728, 654321152, 704650240, 419432448, 587213824, 956572160, 402656768, 721430784, 134225664,
- 603985920, 687873024, 436215808, 704649216, 234891011, 469774336, 587204608, 771761664, 754976768, 704651264, 637542400, 956572928, 402656512, 721430784, 134225664, 603985920, 687873024, 436215808,
- 704845824, 620760320, 469773568, 637543168, 469772032, 637536256, 469772032, 2667586816, 402656512, 721430784, 134225664, 436217344, 402660352, 536880384, 4211152896, 788532480, 469773056,
- 620767488, 587208704, 587204608, 620765184, 939794944, 402656256, 721430784, 134225664, 486545408, 536881408, 402659840, 201349891, 436219648, 402661120, 503325952, 134224896, 587208704, 486877952,
- 402656256, 721430784, 134225664, 738204672, 637544704, 469772032, 184549888, 436219648, 402662144, 402662400, 536881920, 620766720, 184602626, 469774336, 452986880, 637544704, 654321408, 687873024,
- 167787012, 687872000, 520104704, 402655232, 536881664, 587405312, 402655744, 134228224, 536879872, 721431040, 620764160, 167801859, 654323456, 620763136, 134224640, 587208704, 1963076352,
- 587205120, 536879872, 704653056, 704651264, 520095744, 167802370, 587211520, 654319616, 536881664, 134228480, 3489803520, 805308928, 452992000, 637544704, 654321408, 687873024, 151051520,
- 654323456, 637543168, 536881664, 620766720, 151053313, 469774336, 704645120, 402662144, 520104448, 151028994, 687877120, 134227456, 536881664, 620764672, 134224133, 520104704, 687873024, 469771520,
- 939666176, 788531200, 520100352, 620763136, 469769728, 134227203, 687872000, 452986880, 402660352, 1862278400, 587204608, 754981888, 721426432, 687875584, 134230018, 754984192, 587209728,
- 654321152, 1963072512, 587204608, 536879872, 704653056, 704651264, 100668416, 738207744, 587208704, 1711417856, 687867392, 704649216, 687873024, 100719617, 654323456, 620763136, 956570368,
- 402654464, 721430784, 3422625536, 553649408, 436214784, 3238079232, 452985856, 721428480, 67142914, 687877120, 2231510528, 738198272, 1157966080, 503317248, 3808501248, 805307136, 2298485760,
- 1140921345, 2718004225, 4227977217, 1342318082, 2751625730, 4093824002, 1006835715, 2214813699, 3422791683, 335867907, 1543780356, 2684648964, 3825517060, 637863429, 1711621637, 2785379845,
- 3859138053, 637928966, 1678132742, 2684781062, 3691429382, 403175942, 1376204295, 2315742727, 3255281159, 4194819591, 839390728, 1745374728, 2617803272, 3490231816, 67758600, 940121609, 1812550153,
- 2684978697, 3490297865, 714761, 805967882, 1611286538, 2416605194, 3221923850, 4027242506, 537593867, 1309358091, 2047566859, 2785775627, 3523984395, 4262193163, 705434636, 1443643404, 2148297740,
- 2819396620, 3490495500, 4161594380, 537725965, 1141715469, 1745704461, 2349693453, 2953682445, 3490562061, 3993886733, 168754189, 638457870, 1041117710, 1410222606, 1745772046, 2081321486,
- 2416870926, 2752420366, 3741363214, 536876800, 469771008, 436209664, 687874048, 587209216, 134224896, 788536320, 587209216, 603985920, 721426432, 637542400, 1174676736, 402659072, 469768704,
- 503318528, 536881408, 134227200, 637545216, 503325952, 469773312, 704645120, 738207744, 620765184, 671296256, 637539840, 721429760, 402655232, 469773824, 637544960, 469771264, 587204608, 503326208,
- 134227456, 738204928, 587211520, 369115652, 436213760, 134224896, 687873536, 620765184, 704645120, 738207744, 620765184, 134228736, 469773056, 687872000, 1191455232, 402658560, 469768704,
- 503318528, 536881408, 134227200, 637545216, 503325952, 469773312, 771753984, 620765184, 1392779776, 402658304, 469768704, 570427392, 704651264, 134228480, 536882688, 570434816, 520095744,
- 402660352, 721430784, 335560452, 436213760, 134224896, 687873536, 620765184, 419432448, 402660352, 134226944, 771762688, 402660352, 2885954304, 536876032, 721429248, 687873024, 436209664,
- 687874048, 587209216, 134224896, 637541120, 587211520, 687872000, 335601920, 587210752, 134224896, 536877568, 436218112, 469771008, 671090688, 469773312, 721431040, 637542400, 1879057664,
- 536875776, 721429248, 687873024, 436209664, 687874048, 587209216, 134224896, 603991808, 687872000, 755245568, 536875776, 469771008, 536872960, 754984192, 536880640, 469768704, 452986880, 587212288,
- 402662144, 772024576, 536875264, 469771008, 654313472, 469772544, 436218368, 536881408, 721430272, 637542400, 2214667520, 536875264, 469771008, 436209664, 687874048, 587209216, 134224896,
- 603991808, 687872000, 990192128, 536875264, 469772544, 486541312, 402662144, 469771264, 436209664, 687877120, 469773568, 2197887744, 536875264, 469771008, 436209664, 687874048, 587209216,
- 134224896, 520100352, 436214784, 671293952, 637538560, 721429760, 402655232, 469773824, 637544960, 469771264, 486541312, 402662144, 3758104064, 536875264, 469771008, 436209664, 687874048,
- 587209216, 134224896, 536880128, 738206976, 1577331200, 402657536, 469768704, 687867904, 587212288, 536879872, 503325952, 469764096, 469774336, 1812081152, 536875264, 469772544, 469764096,
- 721432320, 620765184, 738205184, 704651264, 469769984, 2382571776, 536875264, 469772544, 486541312, 402662144, 469771264, 704645120, 603987968, 587212544, 1443109888, 402657536, 469768704,
- 587204608, 738203648, 520101376, 704645120, 738207744, 620765184, 2533567232, 536875008, 469771008, 603981824, 452992000, 436215808, 587208704, 402655232, 721429248, 268452100, 436213760,
- 134224896, 687873536, 620765184, 704645120, 738207744, 620765184, 1157901056, 402657280, 469768704, 503318528, 536881408, 134227200, 637545216, 503325952, 469773312, 268451844, 436213760,
- 134224896, 687873536, 620765184, 520095744, 402660352, 721430784, 2701142528, 536875008, 469771008, 436209664, 687874048, 587209216, 134224896, 587212544, 704654336, 251672068, 436213760,
- 134224896, 687873280, 771761664, 134227200, 654321152, 620764160, 251668740, 587210752, 134224896, 687872000, 637544704, 134229504, 637541120, 620768768, 251686148, 436213760, 134224896, 603990528,
- 587210752, 134224896, 469768448, 603985920, 251668228, 402660352, 520104704, 687873024, 654313472, 536880640, 721429760, 452992000, 251680004, 436213760, 134224896, 402662144, 503327744, 134225664,
- 469768448, 603985920, 251675652, 436213760, 134224896, 687873536, 620765184, 721422336, 402660352, 704653568, 251675396, 436213760, 134224896, 687873536, 620765184, 704645120, 402664192, 704653568,
- 251680516, 436213760, 134224896, 402662144, 503327744, 134225664, 536882688, 570434816, 251707139, 436213760, 134224896, 603990528, 587210752, 134224896, 536882688, 570434816, 251704834, 587210752,
- 134224896, 637544192, 469773824, 654321920, 536880640, 721429760, 234904322, 402662144, 134225408, 520100352, 436214784, 469770752, 469772544, 1208228608, 402656768, 469768704, 503318528,
- 536881408, 134227200, 536882688, 570434816, 234893060, 587210752, 134224896, 536881664, 620764672, 721426432, 687877120, 906107904, 536874496, 469771008, 436209664, 536879872, 419440384, 402662912,
- 452995328, 234902020, 436213760, 134224896, 536879616, 704653824, 419432448, 402660352, 1023681536, 402656768, 469768704, 503318528, 536881408, 134227200, 536882688, 469768960, 234896900,
- 436213760, 134224896, 687873536, 620765184, 419432448, 402660352, 1560552448, 402656768, 469768704, 603981824, 520100864, 419432448, 402662144, 570434816, 218114308, 587210752, 134224896,
- 637541120, 620768768, 637543168, 452990976, 218137091, 637543936, 419441408, 587208704, 134226688, 402659584, 587211520, 218130948, 436213760, 134224896, 402663936, 134224640, 469773056, 687872000,
- 218153985, 704649216, 134228736, 402659584, 570432000, 402664960, 452995328, 218132992, 587212288, 469768960, 134228224, 587209216, 704652800, 452992000, 218147844, 620768256, 469771520, 134226688,
- 637541120, 587211520, 687872000, 218133764, 436213760, 134224896, 738208256, 654321920, 536881408, 469772800, 218116100, 587210752, 134224896, 687872000, 637544704, 134229504, 654322688, 218142467,
- 587210752, 134224896, 402664960, 469773568, 637541632, 603990272, 218114052, 587210752, 134224896, 637540864, 721429760, 402663680, 721426944, 201378561, 687875584, 402664960, 452995328, 704645120,
- 469773056, 3389073152, 637537280, 771762432, 687872000, 134224640, 402660608, 721431040, 201378305, 704649216, 134228736, 637541632, 771762432, 687872000, 990124800, 402656256, 469768704,
- 503318528, 536881408, 402662400, 469768704, 201336835, 620766720, 134228736, 771758080, 704650240, 603989504, 2852396032, 637537280, 452993792, 687873024, 603981824, 620765184, 704654336,
- 201364995, 587210752, 134224896, 469771264, 536877824, 402659840, 1761878784, 402656256, 469768704, 704645120, 452990976, 436209664, 805316864, 201373698, 587210752, 134224896, 687872000,
- 520100352, 754982912, 738466816, 536873984, 469771008, 536872960, 754984192, 536880640, 469768704, 201340164, 436213760, 134224896, 587209984, 704654336, 469769984, 4009827072, 637537280,
- 452993792, 687873024, 419432448, 402662144, 570434816, 201336835, 620766720, 16788224, 771758080, 704650240, 603989504, 3087145984, 536873728, 469771008, 822085632, 654319616, 469772032, 704915712,
- 536873728, 469771008, 469764096, 654323456, 687875584, 805579520, 536873728, 469771008, 738199552, 587212544, 402662912, 855907072, 536873728, 503325952, 687873024, 687875840, 620765184,
- 3691260672, 536873728, 721431040, 687867904, 536877056, 469772800, 1174739712, 637537024, 452993792, 687873024, 721422336, 469772544, 721689600, 536873728, 469771008, 536872960, 654320640,
- 687875584, 486681344, 587205376, 654321152, 805316352, 452986880, 704651264, 1124213248, 536873728, 520101376, 469773056, 134228224, 469770496, 4026608384, 637537024, 452993792, 687873024,
- 637536256, 469772032, 3808437504, 536873728, 469772544, 419432448, 687877120, 469771520, 3322030336, 738200320, 419441408, 587212288, 419432448, 587208704, 872424192, 402656000, 436218880,
- 721427456, 452986880, 536881408, 2869176064, 637537024, 452993792, 687873024, 654313472, 738206464, 3791661568, 536873728, 469771008, 704645120, 536878848, 587209728, 1895832320, 587205376,
- 687875584, 620765184, 704645120, 503324672, 654583040, 469764864, 721426432, 469769984, 134228224, 587208704, 906242816, 687868416, 771761664, 134227200, 654321152, 620764160, 167819522, 587210752,
- 134224896, 738203648, 536877824, 3841992192, 587205120, 704649216, 134226432, 536882432, 587208704, 167808002, 587210752, 134224896, 536879872, 469771520, 3120704000, 536873472, 469771008,
- 754976768, 452993024, 637541376, 167819010, 587210752, 134224896, 603987968, 503322624, 1442978816, 402655744, 469768704, 704645120, 536880128, 469771008, 167776772, 436213760, 134224896,
- 620763136, 687873536, 587476992, 402655744, 469768704, 452986880, 822091776, 805318912, 167794434, 436213760, 134224896, 687873280, 771761664, 1409557760, 402655744, 469768704, 587204608,
- 738203648, 520101376, 167803396, 436213760, 134224896, 536881920, 469772544, 3036814080, 536873472, 469771008, 469764096, 436219648, 587209728, 167801600, 402663680, 436217088, 704645120,
- 503324672, 1342383360, 536873216, 469771008, 469764096, 536877824, 2348952320, 536873216, 469771008, 721422336, 788536320, 3825216256, 536873216, 520104448, 486541312, 620765184, 3020040704,
- 536873216, 469771008, 771753984, 687875584, 1006902016, 402655488, 469768704, 503318528, 536881408, 3137479936, 536873216, 469771008, 436209664, 452994560, 839130112, 536873216, 587211520,
- 452986880, 536881408, 2550343424, 536873216, 704653568, 134228736, 536877056, 1359223552, 402655488, 469768704, 570427392, 704651264, 3003263488, 536872960, 469771008, 654313472, 486546176,
- 134238211, 587210752, 134224896, 469772032, 2348950784, 536872960, 469771008, 402655232, 721429248, 134282500, 402662144, 134225408, 704654336, 2181240832, 637536256, 721430016, 402659584,
- 587211520, 134273796, 587210752, 134224896, 704649728, 990194944, 536872960, 469772544, 402655232, 721429248, 134240258, 436213760, 134224896, 469771264, 3959627520, 469763840, 721426432,
- 469769984, 3372296448, 637536000, 771762432, 687872000, 889461504, 587204352, 704654336, 469769984, 3322026752, 738199040, 419441408, 587212288, 100702466, 603986944, 587208704, 855645184,
- 402654720, 436218880, 721427456, 100724481, 587212288, 469768960, 318908672, 536872448, 721429248, 687873024, 83908354, 637544704, 620768768, 83892482, 402662144, 570436096, 83942912, 687873024,
- 805316864, 67122180, 704651264, 822353664, 536871936, 587211520, 67166721, 687874048, 2952862720, 637535232, 721429760, 67144450, 587210752, 3976403968, 687866880, 503326208, 67109890, 469769216,
- 2734758656, 587203584, 503322624, 67145473, 587210752, 2818712576, 402653952, 1560620800, 402653952, 989865216, 2684385280, 4026583040, 1006704129, 2214682625, 3389106177, 201518081, 1241656322,
- 2214750210, 3154288642, 4093827074, 671288835, 1543717379, 2416145923, 3221465091, 4026783747, 470025732, 1208234500, 1946443268, 2617542660, 3288641540, 3892631044, 134608900, 671422469,
- 1107637765, 1510297093, 1912956421, 2282061317, 2617610757, 2919605765, 3892360709, 687870720, 738207232, 134227712, 687872000, 637544704, 704654848, 687867904, 721430016, 721426432, 3875544064,
- 587207424, 704649216, 134228480, 402664960, 469773056, 134228224, 687872768, 654321152, 469771008, 520432384, 687870720, 654319616, 587204608, 620765184, 704650240, 754976768, 687873024, 536881920,
- 402659840, 4026737408, 687870464, 402660352, 469773056, 134228224, 520104704, 620763136, 469764096, 738207744, 587208704, 302007812, 536881408, 134227200, 637545216, 503325952, 469773312,
- 704645120, 738207744, 620765184, 923020032, 587206912, 704649216, 134228480, 402662400, 721430784, 620765184, 134225920, 587208704, 2567187200, 402657536, 503327744, 134224896, 536881664,
- 654320640, 469771008, 520095744, 503324672, 1107566336, 687870208, 620765184, 704645120, 738207744, 620765184, 134228736, 469773056, 687872000, 2550409728, 402657280, 503327744, 134224896,
- 536881664, 654320640, 469771008, 603981824, 452992000, 268453636, 536881408, 134227200, 637545216, 503325952, 469773312, 771753984, 620765184, 1225007616, 687869696, 654319616, 520095744,
- 687875584, 822091776, 620766720, 402664192, 1057235712, 687869696, 620765184, 419432448, 402660352, 134226944, 771762688, 402660352, 956574464, 587206144, 419440128, 134224896, 603985920,
- 687873024, 436215808, 704649216, 234923522, 402663680, 738204416, 721426432, 637542400, 134227200, 402659840, 1241786112, 687869184, 654319616, 754976768, 687873024, 536881920, 402659840,
- 470098688, 587205888, 704649216, 134228480, 520105472, 704651264, 469770752, 2667589632, 587205888, 419440128, 134224896, 436217344, 402660352, 536880384, 2298550272, 587205888, 704649216,
- 134228480, 402662400, 721430784, 620765184, 2198020096, 637537536, 486548224, 419432448, 587208704, 134226688, 469773056, 2550406144, 402656256, 503327744, 134224896, 536881664, 654320640,
- 469771008, 201331968, 469772544, 721426432, 687873024, 721422336, 402661120, 939795712, 587205632, 419440128, 134224896, 486545408, 536881408, 402659840, 201333509, 402662144, 704653824, 436209664,
- 469769984, 687873024, 486877696, 587205632, 419440128, 134224896, 738204672, 637544704, 469772032, 201356288, 402664448, 402663680, 536880384, 704645120, 503324672, 1157899520, 687868672,
- 620765184, 721422336, 620766720, 738205184, 1074011136, 687868672, 620765184, 520095744, 402660352, 721430784, 1090791936, 687868672, 620765184, 704645120, 738207744, 620765184, 3858770688,
- 587205376, 704649216, 134228480, 402664960, 469773056, 1124346112, 687868416, 620765184, 704645120, 402664192, 704653568, 167779845, 536881408, 134227712, 536879872, 469771520, 2533632512,
- 402655744, 503327744, 134224896, 536878848, 520101376, 167789572, 536881408, 134227200, 469773056, 687872000, 4026673664, 469764608, 452994304, 687873024, 469771008, 704653824, 167787012,
- 637543168, 469768448, 402655232, 536881664, 1208227840, 687868160, 620765184, 771753984, 620765184, 2516853248, 402655488, 503327744, 134224896, 469771264, 2198018816, 637536512, 486548224,
- 419432448, 587208704, 1040458496, 687868160, 620765184, 419432448, 402660352, 3993183232, 402655232, 134228480, 738207488, 654320640, 134233348, 536881408, 134227200, 587208704, 4009962240,
- 587204352, 704649216, 469772800, 990128640, 687867648, 603987968, 436213760, 2902727680, 637536000, 738207488, 402663680, 1493312512, 402654976, 469771264, 402663168, 537205504, 738199040,
- 721428480, 687872000, 83892741, 486547456, 704654080, 83942660, 637542144, 721431040, 83890178, 637543168, 469768448, 83924484, 738203648, 469769728, 83949057, 402660352, 704653568, 83898882,
- 754980864, 587209728, 67166209, 486547456, 1006906112, 687866880, 620765184, 67127556, 536881408, 2566989568, 469763072, 687872000, 50361600, 620768256, 50356227, 603986944, 50365954, 654317824,
- 671191808, 3321986049, 1040320514, 2785178626, 134469634, 1677932035, 3154350083, 268756483, 1677998596, 3020196868, 67492868, 1342515717, 2617603589, 3892691461, 872812038, 2147899910, 3355878406,
- 268954630, 1476867079, 2617735687, 3725049351, 503905799, 1577598472, 2651356680, 3725114888, 503971336, 1510554633, 2517202953, 3523851273, 235597833, 1175071242, 2114609674, 3054148106,
- 3993686538, 638257675, 1577796107, 2517334539, 3423318539, 845323, 873208332, 1745636876, 2584510988, 3389829644, 4195148300, 705499661, 1510818317, 2316136973, 3087901197, 3826109965, 269416973,
- 1007560206, 1745768974, 2483977742, 3222186510, 3926840846, 303037966, 974071311, 1645170191, 2316269071, 2987367951, 3591357455, 4195346447, 504368144, 1041247760, 1578126864, 2115005968,
- 2618330640, 3088099856, 3557869072, 3994083856, 101841424, 504435217, 907094545, 1242644497, 687875075, 620763136, 704649984, 402655232, 469771264, 536881408, 402659840, 134227200, 536881664,
- 620764672, 587204608, 620763136, 738205184, 503322624, 134224896, 620765184, 469773056, 654321920, 469772544, 536881920, 503325952, 604044800, 738207232, 469772800, 486541312, 637543168, 452994560,
- 771753984, 721426432, 687873024, 436209664, 687874048, 587209216, 134224896, 687872000, 637544704, 134229504, 536881408, 520101376, 16853760, 637542400, 704654336, 134224896, 469771264, 536877824,
- 402659840, 134226688, 536877568, 436218112, 469771008, 469764096, 436219648, 402662144, 402662400, 536881920, 620766720, 436207617, 738207232, 469772800, 603981824, 452992000, 436215808, 587208704,
- 436209664, 687874048, 587209216, 134224896, 520100352, 436214784, 33628672, 637540864, 704654336, 134224896, 469771264, 536877824, 402659840, 134226688, 536877568, 436218112, 469771008, 788531200,
- 402662400, 570435840, 402716928, 738207232, 469772800, 436209664, 687874048, 587209216, 134224896, 788536320, 587209216, 603985920, 721426432, 637542400, 4026541312, 469768192, 687872000,
- 134228736, 536877568, 436218112, 469771008, 469764096, 436219648, 402662144, 402662400, 536881920, 620766720, 385900037, 402660352, 721430784, 603981824, 704654336, 436215808, 436209664, 603985920,
- 687873024, 134223872, 637540608, 721429248, 369107971, 620763136, 704649984, 402655232, 587213312, 536872960, 721429760, 687873024, 687875840, 721427456, 620765184, 1073749504, 402658816,
- 452994304, 520104448, 570431488, 134224896, 536881664, 654320640, 469771008, 704645120, 402662144, 520104448, 352337925, 738207232, 469772800, 436209664, 536878848, 620766208, 805313536, 603981824,
- 452992000, 436215808, 587208704, 352338688, 402660352, 134224640, 536881664, 469768960, 436209664, 738207232, 520101376, 704645120, 402662144, 520104448, 335604992, 620763136, 704649984, 520095744,
- 587212288, 536877824, 503325952, 436209664, 687874048, 587209216, 3020102656, 402658304, 452994304, 520095744, 587212288, 536877824, 503325952, 452986880, 637544704, 587212544, 721427456,
- 335557888, 738207232, 469772800, 436209664, 536878848, 620766208, 805313536, 771753984, 620765184, 637541120, 1023421952, 402658304, 452994304, 520095744, 587212288, 536877824, 503325952,
- 603981824, 452992000, 436215808, 587208704, 318783488, 620763136, 704649984, 402661120, 469770752, 402655232, 721429248, 704645120, 402662144, 520104448, 318827520, 620763136, 704649984, 520095744,
- 587212288, 536877824, 503325952, 436209664, 536878848, 452993792, 318825476, 738207232, 469772800, 436209664, 536878848, 620766208, 805313536, 436209664, 402663680, 570432000, 318812931, 620763136,
- 134224640, 637542144, 452993792, 620765184, 134225408, 637541120, 587211520, 687872000, 302051072, 402660352, 721430784, 436209664, 687874048, 587209216, 134224896, 520100352, 436214784,
- 3020104192, 402657792, 452994304, 520095744, 587212288, 536877824, 503325952, 771753984, 721426432, 687873024, 302035459, 620763136, 134224640, 637542144, 452993792, 620765184, 134225408,
- 469769984, 687872000, 4043320064, 469766656, 687872000, 134228736, 536877568, 436218112, 469771008, 603981824, 620765184, 704654336, 302052096, 402660352, 721430784, 436209664, 687874048,
- 587209216, 134224896, 603991808, 687872000, 4160758272, 637538816, 704654336, 134224896, 536877568, 436218112, 469771008, 436209664, 469769984, 570432000, 302007808, 738207232, 469772800,
- 436209664, 536878848, 620766208, 805313536, 738199552, 469772800, 1208297728, 402657792, 452994304, 603981824, 452993024, 587209472, 134224896, 536878336, 503325952, 687873024, 302053888,
- 738207232, 469772800, 436209664, 687874048, 587209216, 134224896, 603991808, 687872000, 50405888, 637538816, 704654336, 134224896, 469771264, 536877824, 402659840, 134226688, 587209984, 503322624,
- 285272320, 620763136, 134224640, 637542144, 452993792, 620765184, 134225408, 402661120, 452994304, 285231876, 402660352, 654318336, 637542144, 469771520, 134228480, 536881664, 654320640, 469771008,
- 285273600, 402660352, 721430784, 436209664, 687874048, 587209216, 134224896, 637540608, 721429248, 285277440, 738207232, 469772800, 486541312, 637543168, 452994560, 771753984, 721426432, 687873024,
- 285275136, 587209728, 436215808, 654321152, 469773056, 134228224, 805317120, 419439616, 587212288, 285274624, 402660352, 721430784, 436209664, 687874048, 587209216, 134224896, 587212544, 704654336,
- 268482307, 620763136, 704649984, 402661120, 469770752, 704645120, 603987968, 587212544, 3003325440, 402657280, 452994304, 520095744, 587212288, 536877824, 503325952, 738199552, 452995584,
- 268437506, 620763136, 134224640, 637544192, 620765184, 134228736, 536881408, 520101376, 2567121664, 637538048, 654322176, 721428480, 587208704, 704645120, 603992064, 637540608, 3053658880,
- 402657024, 452994304, 520104448, 570431488, 134224896, 620763136, 587210240, 100867072, 637538048, 687877120, 587210240, 704649216, 134228480, 603986944, 721430272, 151138304, 402657024, 452994304,
- 654313472, 536880640, 721429760, 587204608, 486546432, 1090530048, 402657024, 452994304, 520104448, 570431488, 134224896, 587213312, 704649216, 1157635840, 469765888, 452990976, 704645120,
- 452993024, 134224896, 536882432, 738208000, 620964352, 402657024, 452995328, 637536256, 134225152, 469769984, 687872000, 620765184, 184688128, 402657024, 452994304, 654313472, 536880640, 721429760,
- 452986880, 771761664, 1812276480, 402657024, 134228736, 637540864, 419442176, 805316096, 704645120, 452993024, 1107303424, 469765888, 452990976, 704645120, 452993024, 134224896, 637540864,
- 503327744, 50536192, 637538048, 687877120, 587210240, 704649216, 134228480, 721431040, 687872000, 4143983360, 536874496, 587211520, 687867904, 436217344, 704651776, 536879872, 469768960, 234882819,
- 620763136, 134224640, 402659584, 570432000, 486541312, 704651264, 4127206144, 536874496, 587211520, 402655232, 402664704, 402662144, 436217088, 469769984, 234898432, 402660352, 134224640,
- 536881664, 469768960, 603981824, 704649216, 1258562048, 469765632, 452990976, 520103680, 620766720, 704650240, 402655232, 721429248, 234900996, 721430016, 721422336, 419441664, 654313472,
- 687873024, 637544960, 67314944, 637537792, 687877120, 587210240, 704649216, 134228480, 402661120, 486548224, 234911232, 620763136, 704649984, 436209664, 402662144, 654321408, 620765184, 3036880384,
- 402656512, 452994304, 134228480, 637542144, 452993792, 620765184, 2449481216, 637537536, 704654336, 134224896, 520100352, 603987968, 469771520, 1056976896, 402656512, 452994304, 134228480,
- 738203904, 419436800, 469771008, 3070437888, 402656512, 452994304, 520104448, 570431488, 134224896, 587208704, 1040198400, 402656512, 452994304, 704645120, 402663168, 570435840, 469771008,
- 1073883648, 637537536, 654322176, 721428480, 587208704, 771753984, 452993024, 151198720, 402656512, 452994304, 704645120, 536877568, 704653824, 687875584, 84093440, 637537536, 687877120, 587210240,
- 704649216, 134228480, 620764160, 67181312, 637537536, 704654336, 134224896, 704654080, 620768256, 603985920, 3204718592, 402656512, 452994304, 134228480, 687875840, 805312512, 620765184,
- 1225072128, 469765376, 603988736, 721427456, 704645120, 486545408, 721427456, 3053662208, 402656512, 452994304, 134228480, 469769984, 654320384, 620765184, 2483035648, 637537536, 704654336,
- 134224896, 469771264, 536877824, 402659840, 167912192, 402656512, 452994304, 654313472, 536880640, 721429760, 738199552, 1241851648, 637537536, 654322176, 721428480, 587208704, 738199552,
- 469772800, 2969774336, 402656256, 452994304, 520095744, 587212288, 536877824, 503325952, 201329667, 620763136, 134224640, 637544192, 620765184, 469773056, 1073883392, 637537280, 654322176,
- 721428480, 587208704, 402655232, 721429248, 201340416, 738207232, 469772800, 704645120, 503324672, 402662656, 1191191296, 637537280, 704654336, 134224896, 402662144, 721430272, 654321152,
- 201385220, 805316864, 620768512, 402661376, 704645120, 503324672, 3825476864, 637537280, 704654336, 134224896, 402660096, 402662400, 469769728, 201335045, 402660352, 721430784, 419432448,
- 637544704, 469770752, 2214798592, 637537024, 570432000, 805313536, 654313472, 436218880, 3808567808, 469764864, 687872000, 134228736, 738207488, 704652032, 84089856, 637537024, 687877120,
- 587210240, 704649216, 134228480, 167971840, 402656000, 452994304, 587204608, 822091776, 687872000, 570759936, 637537024, 587211520, 134230016, 469768448, 687876352, 3942658048, 402656000,
- 452994304, 134228480, 637540608, 620768256, 1292114688, 536873728, 520101376, 536879872, 520101376, 469773056, 2583767296, 637537024, 469771264, 587204608, 134225408, 587208704, 553986816,
- 469764864, 687872000, 134228736, 687872512, 436213760, 67314176, 637537024, 687877120, 587210240, 704649216, 134228480, 2466253568, 637537024, 704654336, 134224896, 687872512, 436213760, 50536960,
- 637537024, 687877120, 587210240, 704649216, 134228480, 218302976, 402655744, 452994304, 654313472, 402660352, 469768704, 167774979, 620763136, 134224640, 654322176, 436217344, 2751537664,
- 469764608, 452990976, 520103680, 620766720, 704650240, 167788288, 620763136, 704649984, 771753984, 704649216, 4043513600, 469764608, 536879872, 637540864, 721430272, 687873024, 167836416,
- 738207232, 469772800, 486541312, 687874048, 134421504, 402655744, 452994304, 654313472, 654317568, 687873024, 167781125, 687875584, 469772800, 520095744, 402660352, 84024064, 402655744, 452995328,
- 452986880, 536881408, 469773568, 167836672, 738207232, 469772800, 486541312, 402662144, 1795497472, 402655744, 134228736, 637540864, 419442176, 805316096, 167802624, 738207232, 469772800,
- 738199552, 469772800, 3758369024, 402655744, 134228736, 536882688, 402665728, 452995328, 167837440, 738207232, 469772800, 587204608, 436217344, 3925877248, 402655488, 452994304, 738204160,
- 486546688, 1191520768, 402655488, 419439616, 687877120, 469769728, 3691260160, 402655488, 452994304, 486541312, 704651264, 4261686016, 738199808, 687876352, 436215808, 620763136, 3808566272,
- 469764352, 687872000, 419441408, 402660352, 4110428928, 469764352, 603988736, 721427456, 738199552, 117646592, 402655488, 452994304, 687867904, 436217344, 100868608, 637536512, 687877120,
- 587210240, 704649216, 2298685952, 402655488, 452994304, 452986880, 721430016, 1996499456, 637536512, 469771264, 738199552, 469772800, 688072960, 402655488, 452994304, 520104448, 570431488,
- 1157766144, 134219776, 671099392, 402664448, 469772544, 134274820, 620763136, 570436608, 402661376, 1073880832, 637536256, 654322176, 721428480, 587208704, 134236421, 687872000, 134224640,
- 402661120, 1225075456, 402655232, 134228736, 402661120, 452995328, 134257153, 603989504, 134224896, 587208704, 2449484544, 637536000, 469771264, 587204608, 3221364224, 469763840, 452990976,
- 620765184, 3842252288, 687867648, 754987008, 536880384, 3204585472, 536872704, 721431040, 687875584, 50343936, 402654976, 520104448, 402664192, 1275338240, 469763840, 452990976, 469772800,
- 1308896000, 637536000, 134228736, 738208512, 3221362944, 469763584, 452990976, 687873024, 100708100, 805312512, 402661888, 3724813056, 402654720, 603988992, 687873024, 100665344, 654323712,
- 469769984, 3775145216, 536872448, 536879616, 503325952, 100682501, 721430016, 637541120, 3791920640, 536872192, 654321408, 1325671936, 637535488, 469773056, 2919506688, 402654464, 704652288,
- 2348881920, 469763328, 687872000, 3808701184, 637535488, 704653568, 637737984, 402654464, 452994304, 2583767552, 637535488, 704654336, 134421504, 402654208, 452994304, 67148289, 603989504,
- 84024320, 452985600, 402660096, 1442853376, 2382394368, 3221268480, 4026587136, 369165313, 973154305, 1543588865, 2046913537, 2516682753, 2919342593, 3322001921, 3623997441, 285243392, 452994304,
- 402661376, 134227200, 738208000, 469772032, 134224896, 536881664, 620764672, 234908419, 402662400, 469769728, 654313472, 687875584, 687876864, 536877056, 2013276928, 620760064, 536877824,
- 620763136, 687867904, 654322688, 469769216, 201366019, 134224640, 402659840, 452995328, 436209664, 536879872, 2768381696, 620759808, 721431040, 721428480, 721431552, 637542400, 3556844800,
- 620759808, 637541632, 436209664, 687874048, 587209216, 2583895040, 452987648, 436209664, 687872000, 134224640, 587208704, 1275407104, 436209920, 134224896, 687872512, 402660352, 352527360,
- 620759040, 738204416, 721431040, 805316864, 134229507, 134224640, 402659584, 503323392, 4060290048, 620759040, 536878336, 536880384, 805317376, 134282498, 436209664, 687877120, 637544960,
- 788736256, 452986624, 436209664, 687872000, 604314368, 436209408, 436215808, 469771008, 1208166912, 603981312, 503322624, 704650240, 100711169, 452994304, 620764160, 2986420992, 721421824,
- 587208704, 436215808, 83895557, 587210240, 637543936, 83926529, 419439872, 788538880, 83910149, 637540864, 704652544, 83934465, 402662400, 469769728, 67134210, 486548736, 2013275648, 620757760,
- 3674351872, 587203328, 151005696, 838865920, 1811959808, 2550170624, 2919277568, 2969875968, 637537792, 687877120, 402662656, 134226688, 520105472, 587210752, 704652032, 234882817, 721427456,
- 486541312, 503324672, 721428224, 687873024, 738199552, 134293248, 738200832, 134225408, 469768960, 469773056, 503326976, 620764160, 1124215552, 469764864, 134228736, 536878336, 520101376,
- 469773056, 100739328, 402655488, 134228224, 520105472, 402660352, 1342450432, 637535488, 620765184, 2953063168, 469763072, 536877824, 50366466, 805316352, 50332929, 687872000, 436210688,
- 1375746560, 2113956352, 2751500800, 3288380928, 3657486336, 1392828928, 536874752, 704653824, 771753984, 620765184, 134226432, 469769984, 687872000, 151071488, 536873728, 436218624, 469769984,
- 134227200, 469772800, 2550344448, 536873728, 134228736, 469771264, 536877824, 402659840, 4077069056, 536873216, 536882688, 419432448, 687874048, 1376000768, 536873216, 704653824, 419432448,
- 402660352, 1510089728, 469764096, 419442688, 402662912, 452995328, 134248704, 654319616, 704645120, 503324672, 3003393280, 520095232, 620763136, 402660096, 83931652, 402659328, 402659584, 67129604,
- 704651264, 2315397632, 687866624, 4110495232, 469762816, 1124085760, 2986379264, 33675776, 1308699137, 2483122689, 3556881409, 302183425, 1308766210, 2248305154, 3187843586, 4093827586, 671288835,
- 1543717379, 2416145923, 3288574467, 4161003011, 671354884, 1476673540, 2214882820, 2953091588, 3691300356, 134607364, 805641221, 1476740101, 2147838981, 2818937861, 3422927365, 4026916357,
- 335938054, 872817670, 1342587398, 1745247238, 2147906566, 2483456518, 1308859910, 637539328, 503325952, 402655232, 687876352, 771761664, 402655232, 721429248, 687867904, 503324672, 721428224,
- 318786563, 620766720, 134225408, 687872000, 637544704, 134229504, 587208704, 134228736, 637541120, 620768768, 318803716, 436217344, 721426432, 637542400, 134227200, 687872512, 704652800, 520104448,
- 536877056, 704653568, 318786819, 620766720, 134225408, 687872000, 637544704, 134229504, 587208704, 134228736, 469771008, 721427712, 285232899, 620766720, 134225408, 687872000, 637544704, 134229504,
- 587208704, 134228736, 654322688, 285216257, 436217344, 721426432, 637542400, 134227200, 536880896, 134227200, 637543168, 570432000, 268474370, 620766720, 134225408, 687872000, 637544704, 134229504,
- 536881408, 520101376, 2533501696, 637538048, 503325952, 402655232, 687876352, 771761664, 587204608, 486546432, 2499947264, 637538048, 503325952, 402655232, 687876352, 771761664, 452986880,
- 771761664, 4093846784, 469765888, 704653824, 721422336, 402661120, 134227200, 671095808, 402664448, 1593975552, 637537792, 402659840, 536881920, 620766720, 402655232, 687876352, 771761664,
- 234900741, 654317568, 637545216, 134227712, 469771264, 536877824, 402659840, 1627595520, 469765632, 469773568, 134226688, 637541120, 620768768, 402655232, 721429248, 218142210, 620766720,
- 134225408, 687872000, 637544704, 134229504, 654322688, 218169092, 620763136, 603986688, 687872000, 134226432, 637541120, 469771264, 218107137, 620765184, 704650240, 587204608, 402660352, 536880384,
- 503325952, 218106625, 620763136, 603986688, 687872000, 134226432, 587209984, 503322624, 218135296, 721428480, 436214784, 536880640, 134227200, 536881664, 620764672, 201357316, 452990976, 469768960,
- 134228224, 402664960, 469773056, 167848192, 402656256, 452994304, 603981824, 620765184, 134224896, 620766720, 201344768, 654317568, 637545216, 134227712, 637542144, 704654336, 3187743744,
- 637537280, 402659840, 536881920, 620766720, 654313472, 620765184, 201373953, 704651264, 134228736, 671099392, 402664448, 469772544, 553789952, 536873984, 721431040, 620759040, 603991040, 687873024,
- 436215808, 201391876, 620763136, 603986688, 687872000, 134226432, 587208704, 1677929216, 637537280, 402659840, 536881920, 620766720, 452986880, 721430016, 201351683, 754981888, 587209728,
- 738199552, 134227712, 587208704, 1443113728, 402656256, 503327744, 134225664, 671099392, 536882176, 721429760, 201349124, 503327744, 402660864, 469769728, 436209664, 687872000, 2382637824,
- 402656000, 469774336, 134228224, 687873536, 738207232, 2365859584, 402656000, 721430272, 654321152, 436209664, 452994560, 201399296, 402656000, 721430272, 654321152, 486541312, 587210752,
- 1207966720, 738200320, 503325952, 134228480, 536882432, 738208000, 1392716288, 469764608, 721427712, 687867904, 503324672, 721428224, 167776770, 704651264, 134228736, 520100352, 436214784,
- 2080514560, 469764608, 469773568, 134226688, 637541120, 620768768, 167797250, 620765184, 134226432, 587213312, 704649216, 3573686016, 536873472, 469771520, 436209664, 402661120, 721430784,
- 167793924, 738203648, 520101376, 419432448, 402660352, 1459889152, 402655744, 503327744, 134225664, 536882688, 570434816, 167782147, 771761664, 754976768, 704651264, 637542400, 2718049536,
- 536873216, 402663680, 704645120, 503324672, 2046829824, 402655488, 536881408, 704645120, 503324672, 318776576, 469764352, 704653824, 721422336, 402661120, 1292051712, 469764352, 721427712,
- 587204608, 620766720, 3154255360, 536873216, 469769472, 687867904, 620765184, 537009664, 536873216, 721431040, 452986880, 721430016, 1661151744, 637536512, 570432000, 637536256, 469772032,
- 922887424, 536873216, 520101376, 419441408, 587213824, 2701203712, 536872960, 721431040, 402655232, 721429248, 134260482, 620763136, 738205184, 503322624, 3020168192, 402655232, 452994304,
- 402662400, 570435840, 134226178, 704651264, 134228736, 134220288, 2399406848, 637536256, 402659840, 536881920, 620766720, 134249218, 754981888, 587209728, 738199552, 537011968, 536872704,
- 721431040, 738199552, 553788160, 536872704, 721431040, 637536256, 251732736, 637535744, 738204160, 721431040, 100683522, 654317568, 637545216, 1409558272, 402654464, 503327744, 2416189184,
- 738198784, 503325952, 4278266368, 469763328, 637543424, 839001344, 469763328, 402660864, 2717983488, 637535232, 570432000, 67156225, 704651264, 3774950144, 469763072, 486545408, 67114754,
- 620765184, 1828725248, 369220608, 2046904833, 3590432769, 805438466, 2214746626, 3624054274, 671285251, 2013483011, 3322126339, 268758019, 1443116036, 2583984132, 3724852228, 537198597, 1610956805,
- 2651160581, 3657808901, 369555461, 1376138246, 2349232134, 3288770566, 4228308998, 872880135, 1812418567, 2684847623, 3557276167, 134802951, 1007165960, 1879594504, 2684913672, 3490232328,
- 4228441608, 671683081, 1409891849, 2148100617, 2886309385, 3557408777, 4228507657, 604639242, 1208628746, 1812617738, 2416606730, 2953486346, 3490365450, 3993690122, 168557578, 638261259,
- 1108030475, 1577799691, 1980459531, 2383118859, 2785778187, 3121328139, 3456877579, 268555787, 402660352, 620764672, 486547456, 536883200, 503325952, 503318528, 402662144, 704653824, 402655232,
- 687876352, 771761664, 687867904, 503324672, 721428224, 419480068, 503322624, 536880384, 805313792, 620765184, 134225408, 587210240, 704649216, 134228480, 637543168, 402659840, 536881920, 620766720,
- 385925380, 503322624, 536880384, 805313792, 620765184, 134225408, 587210240, 704649216, 134228480, 637541120, 587211520, 687872000, 369137153, 503322624, 536880384, 805313792, 620765184, 134225408,
- 587210240, 704649216, 134228480, 536880128, 738206976, 4127402496, 536876544, 687872512, 654321152, 637542144, 469771520, 587204608, 620765184, 704650240, 704645120, 402662144, 520104448,
- 369103105, 503322624, 536880384, 805313792, 620765184, 134225408, 587210240, 704649216, 134228480, 520100352, 687872000, 2499881728, 402658560, 620764672, 486547456, 536883200, 503325952,
- 503318528, 402662144, 704653824, 654313472, 738206464, 4127402496, 536876032, 687872512, 654321152, 637542144, 469771520, 402655232, 721429248, 704645120, 402662144, 520104448, 335548929,
- 687872000, 134228480, 620763136, 134224640, 469773568, 738206976, 134228480, 738203904, 704653568, 1711483648, 637539328, 536877312, 469771008, 704645120, 687872512, 469769216, 134227200,
- 738203904, 721431296, 620766720, 335551748, 687872000, 536881920, 536880384, 503318528, 402662144, 704653824, 436209664, 721428480, 738208000, 385952256, 637539072, 469771520, 134230016, 536877312,
- 587211520, 721422336, 469772544, 452994304, 738199552, 4160956160, 637539072, 469771520, 134230016, 536877312, 587211520, 771753984, 754980864, 134224896, 587208704, 2298555136, 402658048,
- 721430784, 620765184, 134225920, 587210240, 704649216, 134228480, 603986944, 721430272, 2348822528, 402658048, 536878592, 134224384, 402664960, 452994304, 704645120, 402663168, 570435840,
- 469771008, 369175040, 637539072, 469771520, 134230016, 536877312, 587211520, 721422336, 402663680, 704652544, 469769472, 1745037568, 637538816, 536877312, 469771008, 402655232, 452994304,
- 637544704, 452993024, 402655232, 721429248, 302053891, 620766720, 805313536, 436209664, 469769984, 570432000, 452986880, 587212288, 402662144, 4160956672, 637538560, 469771520, 134230016,
- 536877312, 587211520, 167774208, 771753984, 754980864, 3993115648, 402657536, 704653568, 704645120, 687876864, 570435072, 134224896, 536881408, 520101376, 1694706432, 536875008, 687872512,
- 654321152, 637542144, 469771520, 587204608, 620765184, 704650240, 268458500, 654317568, 587204608, 436217344, 721426432, 637542400, 134227200, 637541120, 1761749760, 536875008, 687872512,
- 654321152, 637542144, 469771520, 704645120, 402662144, 520104448, 268459524, 520100864, 687867904, 587212288, 536879872, 503325952, 469764096, 469774336, 2332109312, 402657280, 620764672,
- 486547456, 536883200, 503325952, 503318528, 402662144, 704653824, 268441601, 620766720, 805313536, 419432448, 587210752, 134226688, 520105472, 402660352, 4194511616, 637538048, 469771520,
- 134230016, 520100352, 436214784, 134226432, 587208704, 335620864, 402657024, 721431296, 469772544, 704653824, 654313472, 587210752, 637543168, 4144180736, 637538048, 469771520, 134230016,
- 536877312, 587211520, 771753984, 754980864, 318839808, 402657024, 570436096, 754976768, 620764160, 536881920, 402662144, 637545216, 1677928704, 402656768, 134227712, 402662400, 570435840,
- 687873024, 402655232, 721429248, 234906883, 436215808, 637544704, 520103680, 620766720, 134224896, 587208704, 3875678976, 402656768, 704653568, 402655232, 452994304, 754976768, 620764160,
- 704654336, 234904068, 654317568, 603981824, 687872000, 469770752, 134224640, 587208704, 1577200384, 402656768, 587210752, 687867904, 654318592, 805315328, 402655232, 587211520, 234907907,
- 620766720, 805313536, 419432448, 587210752, 134226688, 587208704, 1728260864, 637537792, 536877312, 469771008, 402655232, 452994304, 637544704, 452993024, 234941698, 687872000, 134228480,
- 721431040, 637544704, 469770752, 738199552, 4227999488, 637537536, 704654336, 134224896, 637544192, 620765184, 469773056, 2617518336, 402656512, 570436096, 134228480, 520104704, 402660352,
- 469773056, 923019520, 402656512, 721430784, 620765184, 134225920, 587210240, 704649216, 1745037824, 637537536, 536877312, 469771008, 704645120, 687872512, 469769216, 3976340736, 402656512,
- 704653568, 704645120, 687876864, 570435072, 134224896, 3993120000, 402656512, 704653568, 704645120, 687876864, 570435072, 134224896, 1610882816, 637537536, 721430784, 687872000, 654313472,
- 704650240, 587213568, 1359092736, 637537536, 536877312, 469771008, 419432448, 721431552, 637545216, 469837056, 637537536, 620768256, 402664192, 620765184, 436209664, 721428480, 2046963712,
- 536873984, 738206976, 134228480, 671099392, 402664448, 469772544, 201379841, 620765184, 704654336, 436209664, 687874048, 587209216, 436280320, 637537280, 671099392, 536882176, 637545216, 620759040,
- 721427456, 201382657, 536877056, 134226688, 637541632, 771762432, 687872000, 1493441280, 402656256, 134227712, 637543168, 402659840, 536881920, 620766720, 201353475, 620766720, 805313536,
- 419432448, 587210752, 134226688, 2785151488, 637537280, 721430784, 687872000, 419432448, 402662912, 452995328, 201352963, 419440128, 587210752, 134224896, 520103680, 620766720, 486611968,
- 637537280, 620768256, 402664192, 620765184, 704645120, 620768256, 201331969, 419440128, 587210752, 134224896, 469772544, 687876864, 4177733120, 637537024, 469771520, 134230016, 520100352,
- 436214784, 3959562752, 402656000, 704653568, 704645120, 687876864, 570435072, 3926006784, 402656000, 704653568, 452986880, 738207232, 587208960, 2130713600, 637537024, 469771520, 134230016,
- 536877312, 587211520, 1744972288, 536873472, 687872512, 654321152, 637542144, 469771520, 167820801, 654317568, 603981824, 687872000, 469770752, 3775015168, 637536768, 637545216, 436218112,
- 436219904, 469771008, 167799811, 536877056, 134226688, 469772544, 587212544, 2432970752, 536873472, 687872512, 704652800, 637540864, 469772032, 167798275, 419440128, 587210752, 134224896,
- 587208704, 1057106688, 738200064, 134225408, 402663936, 436218880, 687873024, 167794948, 654317568, 603981824, 687872000, 469770752, 2080381696, 402655744, 402662656, 134228736, 536881664,
- 620764672, 167782146, 620766720, 805313536, 419432448, 587210752, 1006838528, 536873216, 687872512, 436217344, 536878848, 386082560, 402655488, 134227712, 536881664, 620764672, 3036948992,
- 402655488, 587210752, 419432448, 587213824, 2113937920, 536873216, 587211520, 704645120, 503324672, 1560552704, 469764352, 134225664, 587208960, 620763136, 2097160704, 402655488, 570436096,
- 486541312, 436213760, 1594104832, 637536256, 738206976, 469771264, 721429760, 134276868, 738207232, 721429760, 536877056, 369435904, 536872960, 536880384, 536880128, 469774592, 134224129,
- 704652800, 738207744, 721428480, 1359160832, 402655232, 536882944, 536880128, 469774592, 134255617, 587213824, 536881920, 587212544, 419639296, 469763840, 704653824, 503322624, 654646272,
- 738199296, 134225408, 637542144, 3858901760, 469763840, 436218112, 687877120, 369307648, 402654976, 134227712, 536880896, 3053724928, 469763840, 637543680, 402663680, 1107435264, 469763584,
- 570432256, 721428480, 100710148, 704652800, 738207744, 334848, 469763584, 469773056, 687875584, 100686596, 687872000, 469770752, 637872384, 536872448, 721431296, 620764160, 100726019, 603986944,
- 687875584, 2768384000, 738199040, 469772800, 603991040, 100723201, 503322624, 469771520, 1728260864, 637535744, 536877312, 469771008, 83895554, 503322624, 436215808, 83892993, 738207232, 452994304,
- 83921409, 704654336, 436215808, 83909636, 452992000, 587208704, 83942913, 620765184, 704654336, 83913989, 738207232, 469772800, 67167490, 687872000, 2583833088, 402654208, 469771008, 67167748,
- 704649216, 2617385472, 637535232, 620766720, 50337795, 654317568, 50354178, 520100864, 335546624, 1275080704, 2046845952, 2717945344, 3221271040, 218163204, 721427456, 637545984, 570435840,
- 771753984, 687874048, 452992000, 218143491, 721430016, 704650240, 603981824, 452992000, 436215808, 587208704, 184549379, 721430016, 134224896, 721431040, 436215808, 805315072, 167804928, 536877056,
- 402663680, 704645120, 503324672, 4211287296, 637536512, 134228736, 671095808, 402664448, 3389137664, 469764352, 704654848, 402663168, 469772032, 520235264, 402654976, 536882432, 637540864,
- 4009895168, 469763584, 721431552, 687873024, 100696320, 721430016, 469768960, 117447936, 771756032, 1509967872, 2046847488, 4278355456, 419433984, 469770496, 721426944, 738199552, 503325952,
- 637544704, 654322688, 201391618, 553654528, 436214784, 134228736, 687873536, 738207232, 503392000, 536872960, 134226688, 469773824, 587211520, 117477892, 587210752, 436209664, 620763136, 117488129,
- 721431552, 469768960, 721429760, 83945732, 721431296, 687873024, 33601540, 2550146048, 2147561985, 4127309313, 1610755074, 3355612162, 772013058, 2449694723, 4093887491, 1376003076, 2885976068,
- 67491844, 1510289413, 2919597061, 4261795333, 1309025798, 2617669126, 3892756998, 839323143, 2047301127, 3255279111, 101245959, 1242048520, 2382916616, 3456675336, 235531784, 1275670025,
- 2282318345, 3288966665, 713225, 1007296010, 1980389898, 2919928330, 3859466762, 504037899, 1443576331, 2316005387, 3188433931, 4060862475, 638323724, 1510752268, 2383180812, 3255609356, 4060928524,
- 571279885, 1376598541, 2181917197, 2987235853, 3792554509, 302971405, 1074670094, 1812878862, 2551087630, 3289296398, 4027505166, 470746639, 1208955407, 1880054799, 2551153679, 3222252559,
- 3893351439, 269548559, 873472528, 1477461520, 2081450512, 2618330128, 3155209232, 3692088336, 4161858064, 336659985, 739319825, 1141979153, 1544638481, 1947297809, 2282847761, 2618397201,
- 2953946641, 3222386705, 637550081, 687873024, 637544960, 134227200, 402664960, 570434304, 620765184, 134225408, 402660096, 520104448, 452992000, 587204608, 620765184, 134224896, 687872000,
- 637544704, 134229504, 536881408, 520101376, 1006709504, 469769728, 704653568, 620766720, 771753984, 587208704, 536879616, 503325952, 402655232, 687876352, 771761664, 587204608, 637543936,
- 134227712, 469771008, 721427712, 453025539, 469772544, 436218368, 536881408, 721430272, 637542400, 134227200, 637540608, 721431296, 469771008, 603981824, 452992000, 436215808, 587208704, 436223233,
- 687873024, 637544960, 134227200, 402664960, 570434304, 620765184, 134225408, 687872000, 637544704, 134229504, 536881408, 520101376, 939600640, 469768448, 704653568, 620766720, 603981824, 587210752,
- 721428480, 687872000, 134230016, 637545216, 654313472, 687873024, 637544960, 604054784, 469768448, 704653568, 620766720, 402655232, 687876352, 771761664, 452986880, 771761664, 134227200, 637545216,
- 587204608, 620765184, 721492992, 469768448, 704653568, 620766720, 436209664, 687874048, 587209216, 134224896, 788536320, 587209216, 603985920, 721426432, 637542400, 620832000, 469768448, 704653568,
- 620766720, 402655232, 687876352, 771761664, 738199552, 134227712, 687873280, 603989504, 587204608, 620765184, 1090591744, 587208704, 620763136, 134224896, 536877568, 436218112, 469771008,
- 469764096, 436219648, 402662144, 402662400, 536881920, 620766720, 402671872, 637541376, 587212544, 134224896, 687872000, 637544704, 704654848, 587204608, 486546432, 134228736, 536881408, 520101376,
- 906046208, 469768192, 704653568, 620766720, 603981824, 587210752, 721428480, 687872000, 134230016, 637544192, 620765184, 536881920, 503325952, 402661123, 687873024, 637544960, 134227200, 402664960,
- 570434304, 620765184, 134225408, 536882688, 520104704, 436209664, 620763136, 1191255040, 587208448, 503327744, 436209664, 687874048, 587209216, 134224896, 788536320, 587209216, 603985920,
- 721426432, 637542400, 2667783424, 687871744, 704650240, 687872512, 654319616, 536881920, 620766720, 419432448, 721430016, 587213568, 134224896, 587208704, 1057041152, 469767680, 704653568,
- 620766720, 771753984, 587208704, 536879616, 503325952, 587204608, 503327744, 402660864, 469769728, 369110529, 687873024, 637544960, 134227200, 536877568, 436218112, 469771008, 671090688, 469773312,
- 721431040, 637542400, 2231444736, 469767424, 704653568, 620766720, 721422336, 687873792, 738207232, 520101376, 771753984, 620765184, 637541120, 2265132544, 536876288, 503325952, 654313472,
- 620766720, 134225408, 402663168, 452991744, 469771008, 419432448, 587208704, 2449679104, 469767424, 704653568, 620766720, 452986880, 721430016, 134228480, 687873280, 603989504, 587204608,
- 620765184, 922819584, 469767424, 704653568, 620766720, 603981824, 587210752, 721428480, 687872000, 134230016, 536881408, 587209984, 822418432, 469767168, 704653568, 620766720, 704645120, 536879616,
- 620765184, 134225408, 637543680, 452995328, 436215808, 335554049, 687873024, 637544960, 134227200, 687872256, 402660352, 721431040, 469769472, 452992000, 620765184, 855711232, 469767168, 704653568,
- 620766720, 486541312, 587208704, 536879872, 503325952, 419432448, 687877120, 721431040, 318777857, 687873024, 637544960, 134227200, 536877568, 436218112, 469771008, 436209664, 469769984, 570432000,
- 318778369, 687873024, 637544960, 134227200, 536877568, 436218112, 469771008, 603981824, 620765184, 704654336, 318807555, 469772544, 436218368, 536881408, 721430272, 637542400, 134227200, 637540608,
- 721431296, 469771008, 318780421, 687873024, 637544960, 134227200, 620767744, 771761664, 637540608, 687872000, 536877824, 503325952, 318779137, 687873024, 637544960, 134227200, 536877568, 436218112,
- 469771008, 788531200, 402662400, 570435840, 302002177, 687873024, 637544960, 134227200, 687872768, 704650240, 134228480, 738203904, 704653568, 1073818368, 587207168, 620763136, 134224896,
- 536877568, 436218112, 469771008, 436209664, 469769984, 570432000, 302001409, 687873024, 637544960, 134227200, 536877568, 436218112, 469771008, 654313472, 738206464, 1107372544, 587207168,
- 620763136, 134224896, 536877568, 436218112, 469771008, 788531200, 402662400, 570435840, 285225985, 687873024, 637544960, 134227200, 402661120, 486548224, 452986880, 469772544, 704653824, 285231617,
- 738206464, 134225408, 536877568, 436218112, 469771008, 788531200, 402662400, 570435840, 285230593, 738206464, 134225408, 536877568, 436218112, 469771008, 436209664, 469769984, 570432000, 285223169,
- 687873024, 637544960, 134227200, 520100352, 587208704, 419439104, 402662912, 452995328, 285231105, 738206464, 134225408, 536877568, 436218112, 469771008, 603981824, 620765184, 704654336, 268449025,
- 687873024, 637544960, 134227200, 402661120, 402663680, 704653824, 620765184, 1610948096, 520097792, 620766720, 134224896, 671099392, 402664448, 469772544, 402655232, 721429248, 268453121,
- 738206464, 134225408, 536877568, 436218112, 469771008, 419432448, 587212288, 3103992576, 469766144, 654321152, 469771008, 436209664, 687872000, 805316864, 419432448, 788538880, 268454145,
- 738206464, 134225408, 536877568, 436218112, 469771008, 654313472, 738206464, 3137612288, 587206656, 436213760, 134224896, 486548992, 771753984, 687875584, 520104448, 654319616, 251695360,
- 687873024, 637544960, 134227200, 687875840, 503323648, 402662656, 721429760, 251670785, 687873024, 637544960, 134227200, 687872768, 771761664, 536880384, 503325952, 251723267, 637544704, 469770496,
- 721426944, 452986880, 402661376, 687873536, 603985920, 251688708, 687873024, 637544960, 134227200, 771762688, 603987968, 536880128, 503325952, 251684612, 402662144, 469771520, 452986880, 654318592,
- 687872000, 738208512, 469772544, 234885124, 687873024, 637544960, 134227200, 402664960, 570434304, 620765184, 3187940864, 469765632, 704653568, 620766720, 654313472, 402663680, 536883200,
- 503325952, 234896129, 687873024, 637544960, 134227200, 520104448, 587209728, 469773056, 553724160, 469765632, 654321152, 469771008, 654313472, 587213824, 536879872, 503325952, 234928388, 704649216,
- 402664192, 402660608, 536881408, 620763136, 704651264, 3942917120, 469765632, 704653568, 620766720, 687867904, 620768256, 536880384, 503325952, 234893825, 687873024, 637544960, 134227200,
- 402660608, 587211520, 620765184, 788864512, 469765632, 704653568, 620766720, 704645120, 402661888, 536881920, 503325952, 234889729, 637541376, 587212544, 134224896, 637544704, 419436800, 687873024,
- 1543843840, 469765632, 704653568, 620766720, 452986880, 503324672, 536878592, 503325952, 218129924, 402662144, 469771520, 402655232, 687876352, 754982912, 587208704, 218161412, 687873024,
- 637544960, 134227200, 536878848, 536879616, 503325952, 218122496, 637541376, 587212544, 134224896, 687872000, 637544704, 704654848, 218126341, 687873024, 637544960, 134227200, 536877312, 536879616,
- 503325952, 218152708, 402663680, 536883200, 503325952, 520095744, 620763136, 704649984, 218116101, 687873024, 637544960, 134227200, 570436096, 536879104, 503325952, 218153217, 620764160, 721422336,
- 134227456, 671099392, 402664448, 469772544, 218136066, 620764160, 536877568, 134226688, 671099392, 402664448, 469772544, 218150915, 687872000, 436213760, 738205440, 469773056, 419432448, 788538880,
- 201365762, 687873024, 637544960, 134227200, 687872768, 704650240, 17115648, 469765120, 704653568, 620766720, 419432448, 637543936, 520104704, 201326850, 637542144, 469771520, 704645120, 738207744,
- 687872000, 553851904, 520096768, 620766720, 134224896, 637545728, 738206464, 469771264, 201352962, 822094848, 587215104, 134224896, 536880896, 436214784, 1694768128, 469765120, 436217088,
- 587210752, 687867904, 587213824, 687873024, 201341441, 687873024, 637544960, 134227200, 536881408, 587209984, 520166400, 469765120, 654321152, 469771008, 503318528, 637544704, 654322688, 201336577,
- 687873024, 637544960, 134227200, 738203904, 704653568, 3103992576, 469765120, 654321152, 469771008, 436209664, 687872000, 805316864, 201345792, 603991040, 134227712, 469771264, 536877824,
- 402659840, 1745101568, 687868928, 704650240, 687872512, 654319616, 536881920, 620766720, 201351428, 536877056, 721429760, 687867904, 587212288, 469771008, 436414720, 402656256, 704654336,
- 134224896, 536877568, 436218112, 469771008, 184558337, 637541376, 587212544, 134224896, 637544704, 486548992, 184598018, 654317568, 687873024, 654313472, 402662144, 469771520, 184563969, 687873024,
- 637544960, 134227200, 402663680, 704655360, 184602882, 536877056, 721429760, 419432448, 738208000, 520104448, 184602369, 738206464, 134228480, 536877568, 436218112, 469771008, 184569861, 822091776,
- 402665728, 704645120, 536879872, 469768704, 184567298, 738206464, 134228480, 671099392, 402664448, 469772544, 184576515, 637542144, 469771520, 704645120, 402662144, 520104448, 184557569, 637541376,
- 587212544, 134224896, 536879872, 469771520, 184568320, 402662144, 469771520, 704645120, 402662144, 520104448, 184559617, 687873024, 637544960, 134227200, 402659840, 469771520, 184580098, 402662144,
- 134230016, 536877568, 436218112, 469771008, 184566785, 402662144, 469773056, 771753984, 469769984, 721426432, 184574213, 637542144, 637545216, 754976768, 452993024, 637541376, 184582912, 704650240,
- 721427456, 134223872, 536881664, 620764672, 167819779, 503324672, 805314048, 419432448, 620763136, 2684559872, 687868416, 436217344, 452992000, 687877120, 704650240, 167796485, 637542144,
- 469771520, 486541312, 536879872, 1325737728, 469764608, 654321408, 687873024, 520095744, 721430016, 167825666, 536877056, 721429760, 687872256, 704654336, 83894016, 469764608, 436218112, 620764160,
- 402664192, 469769728, 167810560, 738206464, 134228480, 536880128, 738206976, 1224944128, 469764608, 436217088, 587210752, 402655232, 721429248, 167806465, 402662144, 721429760, 771753984,
- 587210752, 1124150016, 587205120, 620763136, 134224896, 637543168, 570432000, 167796997, 637542144, 637545216, 486541312, 587210752, 2114069504, 469764608, 134227200, 671099392, 402664448,
- 469772544, 167806466, 738207232, 452994304, 704645120, 503324672, 469902592, 402655488, 469772032, 436218112, 536879872, 1594173184, 520096000, 620766720, 134224896, 587208704, 3238144768,
- 402655488, 402663680, 687873536, 654317568, 2214600448, 469764352, 637544960, 704645120, 503324672, 1694770432, 469764352, 134227200, 738208000, 469771008, 33892608, 637536512, 134227456,
- 721431040, 687875584, 1275077632, 738199808, 654320640, 704645120, 402662912, 3556910848, 536873216, 134224896, 520100352, 687872000, 1661217536, 469764352, 134227200, 402660608, 436217088,
- 2533437440, 637536512, 469773824, 134228224, 486548992, 2231377152, 587204608, 620763136, 134224896, 654322688, 134242820, 704649216, 654322176, 687875584, 1795369728, 637536256, 721430784,
- 402663680, 721428480, 134218245, 637543936, 419432448, 587212288, 2181049088, 402655232, 637543680, 402663680, 402662400, 134236931, 620764160, 436209664, 536879872, 4244842240, 402654976,
- 570435840, 620765184, 83893760, 469763840, 436218112, 620764160, 1677994752, 469763840, 134227200, 536880384, 922949888, 637536000, 436214528, 704649216, 4228066048, 402654976, 469771008,
- 721431296, 1258494976, 469763840, 134227200, 587208704, 1224944384, 469763584, 436217088, 587210752, 100703235, 587208704, 469771008, 2583833344, 469763584, 704653568, 620766720, 100711684,
- 587212288, 134226688, 3338739456, 402654464, 704654336, 906107904, 402654464, 721431040, 3120831488, 469763328, 436213760, 2919308288, 687867136, 620765184, 1308961536, 402654464, 469769728,
- 2634230016, 536872192, 587211520, 3858835968, 587203840, 620763136, 138240, 520094976, 620766720, 3187940352, 687866880, 805312512, 67160322, 738206464, 2466520576, 637535232, 654321152, 67159553,
- 402662144, 3154391040, 637535232, 587211520, 67110656, 738206464, 1191389696, 637534976, 2869044736, 402653952, 1241722368, 469762816, 167781632, 1073747456, 2147508224, 3053493760, 3758148608,
- 127488, 335578371, 536882176, 452991744, 721428480, 520100352, 419432448, 637544704, 603989504, 419432448, 587208704, 3540067072, 738201344, 704650240, 536881920, 620766720, 436209664, 687874048,
- 587209216, 1392647168, 738201344, 721430016, 134224896, 536881408, 520101376, 134228736, 587208704, 1375873792, 738201088, 721430016, 134224896, 469771008, 721427712, 402655232, 721429248,
- 184570626, 637545472, 469773056, 687867904, 503324672, 721428224, 167793154, 637545472, 469773056, 587204608, 486546432, 2231577344, 738199808, 452993024, 536877824, 436218624, 369106688,
- 738199552, 704650240, 536881920, 620766720, 100706305, 436218112, 452994560, 3221494784, 738198784, 402663680, 1124082944, 3087042560, 33676800, 1208034817, 2315348481, 3389106689, 100853761,
- 1107436546, 2046975490, 2952959490, 3825388034, 402914818, 1208168451, 2013487107, 2785251331, 3523460099, 4261668867, 704910340, 1376009732, 2047108612, 2651098116, 3187977732, 3724856836,
- 4261735940, 470093317, 939862533, 1409631749, 1879400965, 2282060805, 2684720133, 3087379461, 3456484357, 3792033797, 4060473861, 1325529605, 637540096, 452990976, 436209664, 687874048, 587209216,
- 134224896, 788536320, 587209216, 603985920, 721426432, 637542400, 1141056768, 536875520, 520101376, 134228736, 687873280, 603989504, 419432448, 402663680, 570432000, 721427456, 285233153,
- 402662912, 134224640, 536877568, 436218112, 469771008, 788531200, 402662400, 570435840, 285232641, 402662912, 134224640, 536877568, 436218112, 469771008, 436209664, 469769984, 570432000, 268436228,
- 587213824, 687873024, 520095744, 687875584, 822091776, 620766720, 402664192, 1157833472, 536875008, 520101376, 134228736, 637545216, 419432448, 402663680, 570432000, 721427456, 251674627,
- 721430016, 721426432, 134224896, 402659584, 570432000, 402664960, 452995328, 251687427, 436214784, 402664192, 503325952, 469771008, 721422336, 603987968, 704650240, 251687427, 436214784, 402664192,
- 503325952, 469771008, 788531200, 402662400, 570435840, 234881540, 587213824, 687873024, 436209664, 603989504, 536877312, 469771520, 67377920, 738201088, 469771008, 134228224, 469773568, 721430784,
- 436215808, 587208704, 234898947, 721430016, 721426432, 134224896, 637541632, 771762432, 687872000, 2701204224, 469765632, 721426944, 620763136, 587210240, 134224896, 536879872, 721431040,
- 218128901, 603986944, 754984448, 134224896, 637541632, 603990272, 721426432, 218128641, 452994560, 402655232, 436218368, 469771008, 536880896, 704654336, 218114309, 452990976, 402661376, 536881920,
- 620766720, 402655232, 721429248, 201367556, 436214784, 402664192, 503325952, 469771008, 402655232, 1862605568, 469765120, 637540864, 452995328, 754976768, 620765184, 587214848, 201345793,
- 620763136, 536879616, 503325952, 704645120, 402664192, 1174612224, 637537280, 402664192, 469773056, 687867904, 503324672, 721428224, 201346049, 402662912, 134224640, 402659584, 687876352,
- 469770240, 1073948928, 637537024, 402664192, 469773056, 587204608, 486546432, 1073949440, 637537024, 402664192, 469773056, 419432448, 436213760, 2248155648, 738200320, 536880896, 520099840,
- 704645120, 503324672, 1375806720, 637537024, 452990976, 704645120, 536880896, 469770752, 1291921920, 637537024, 452990976, 419432448, 536881408, 503323392, 1526930432, 536873472, 520101376,
- 134228736, 469771008, 721427712, 167792131, 503324672, 721428224, 587204608, 620766720, 1996627456, 704645632, 134228480, 671099392, 402664448, 469772544, 167773189, 654318592, 419441664,
- 536879872, 402659840, 2298619136, 738200064, 587208960, 134224896, 536881664, 620764672, 167776003, 503323648, 704651264, 469773056, 469772544, 2265062144, 738200064, 469772032, 134224896,
- 536881664, 620764672, 151015681, 402662912, 134224640, 637543168, 570432000, 151005189, 452990976, 402661376, 536881920, 620766720, 151019777, 452994560, 704645120, 402662656, 469770752, 151019010,
- 654318592, 805315328, 402655232, 587211520, 134235651, 452992000, 134227456, 587208704, 704981760, 469764096, 721431040, 637544704, 603989504, 117481473, 486546432, 469772544, 520104448, 117501185,
- 721427456, 469773824, 721427456, 117505795, 436214784, 536878080, 721430272, 117443588, 637541376, 452995328, 687873024, 117500676, 620768256, 536880384, 503325952, 117485058, 436214784, 436219904,
- 469771008, 117441285, 536877056, 419439872, 771761664, 100711171, 419438592, 637540608, 1107502336, 637535744, 402664192, 469773056, 100722689, 620763136, 637541120, 1543709696, 469763584,
- 469772032, 721426432, 100691202, 436217344, 469770752, 2298620672, 637535744, 419441664, 469771008, 100701185, 603986944, 754984448, 2298616832, 738198784, 587208960, 1812143104, 469763328,
- 587212544, 1845833728, 402654464, 536877824, 17049088, 738198784, 469771008, 272640, 637535488, 637540608, 2265066240, 738198784, 469772032, 3154320384, 637535488, 721431552, 2667650048, 469763072,
- 637541120, 67168772, 620765184, 2617318912, 637535232, 452990976, 50332674, 704653824, 50366466, 419439616, 50366722, 419441664, 50352897, 503327744, 2885801216, 302178305, 1845641218, 3322059266,
- 470020610, 1879262723, 3221460995, 268756995, 1543779844, 2818867716, 4060401156, 973411845, 2181389829, 3389367813, 302444037, 1443247110, 2584115206, 3724983302, 570884103, 1678197767,
- 2751955975, 3825714183, 604505096, 1678263304, 2752021512, 3758670344, 470416904, 1476999689, 2450093577, 3389632009, 34268681, 973741578, 1913280010, 2852818442, 3792356874, 436993546, 1342912011,
- 2215340555, 3087769099, 3960197643, 537658892, 1410087436, 2282515980, 3154944524, 4027373068, 571279885, 1376598541, 2181917197, 2987235853, 3792554509, 302971405, 1108224526, 1913543182,
- 2718861838, 3524180494, 34597390, 839850511, 1645169167, 2383378447, 3121587215, 3859795983, 303102991, 1041246224, 1779454992, 2450554384, 3121653264, 3792752144, 168949264, 839982609, 1511081489,
- 2182180369, 2786169873, 3390158865, 3994147857, 303169554, 907158546, 1511147538, 2115136530, 2652016146, 3188895250, 3725774354, 4262653458, 504565267, 1041444371, 1578323475, 2115202579,
- 2618527251, 3088296467, 3558065683, 4027834899, 202702355, 672406036, 1142175252, 1611944468, 2081713684, 2551482900, 2954142740, 3356802068, 3759461396, 4162120724, 236258325, 571807765,
- 907357205, 1242906645, 1578456085, 1914005525, 2182445589, 419452417, 520100352, 637543936, 134226688, 536877568, 436218112, 469771008, 469764096, 436219648, 402662144, 402662400, 536881920,
- 620766720, 402700548, 402663168, 520101376, 721427456, 536881920, 603981824, 620766720, 721431040, 687873024, 486541312, 805315328, 620765184, 1593908736, 671094272, 402664448, 469772544,
- 654313472, 687873024, 637544960, 134227200, 637540864, 486548736, 620765184, 452992000, 369147140, 738207744, 687872000, 134224896, 637544192, 587211520, 520095744, 687875584, 822091776, 620766720,
- 402664192, 1728389888, 637539584, 721430784, 620759040, 603991040, 687873024, 436215808, 452986880, 771761664, 134227200, 587208704, 2130848512, 671094016, 402664448, 469772544, 402655232,
- 687876352, 771761664, 738199552, 134227712, 536881408, 520101376, 3590531840, 436212992, 587208704, 134224896, 620768256, 402659584, 402662144, 436217088, 452992000, 486541312, 536879872,
- 1694836480, 637539328, 721430784, 402655232, 637543424, 620768256, 134228736, 637541120, 620768768, 402655232, 721429248, 335594500, 738207744, 687872000, 134224896, 637544704, 721430016,
- 754976768, 687872000, 402661376, 587208960, 3154385920, 671093760, 402664448, 469772544, 654313472, 587212288, 134226688, 469773568, 721430784, 436215808, 587208704, 318788865, 520100352,
- 637543936, 134226688, 536877568, 436218112, 469771008, 436209664, 469769984, 570432000, 318792453, 687875584, 134228736, 587208704, 520103680, 134223872, 637541120, 620768768, 402655232, 721429248,
- 318793733, 687875584, 134228736, 738206976, 469771264, 536881408, 134224384, 654322688, 402655232, 721429248, 318789377, 520100352, 637543936, 134226688, 536877568, 436218112, 469771008, 788531200,
- 402662400, 570435840, 302040066, 738207744, 687872000, 134224896, 520104448, 687872000, 134224896, 637543680, 469768960, 2147756544, 654316032, 402663680, 134230016, 402659840, 134227200,
- 654322176, 687872000, 587211264, 704650240, 302004485, 687872512, 771759104, 687872768, 754982912, 687873024, 771753984, 469772544, 436217088, 1711611648, 637538816, 721430784, 402655232,
- 637543424, 620768256, 134228736, 654322688, 402655232, 721429248, 302023682, 738207744, 687872000, 134224896, 402659840, 469772544, 134228736, 536881408, 520101376, 1678060288, 637538560,
- 721430784, 402655232, 654320384, 402661120, 738199552, 134227712, 587208704, 2432838400, 637538560, 721430784, 620759040, 603991040, 687873024, 436215808, 452986880, 771761664, 1728390400,
- 637538560, 721430784, 620759040, 603991040, 687873024, 436215808, 452986880, 704650240, 2667715072, 671092992, 402664448, 469772544, 436209664, 687872000, 721427456, 587204608, 486546432,
- 2181180160, 671092992, 402664448, 469772544, 436209664, 687872000, 721427456, 452986880, 771761664, 1627464960, 721424640, 486545408, 134225152, 469768192, 436218368, 587213824, 654317568,
- 738205696, 3305384448, 721424640, 687872000, 402655232, 452994304, 436209664, 469772544, 436218368, 620764160, 2147625728, 520098048, 687872000, 134224896, 687873280, 603989504, 704645120,
- 738207744, 687872000, 1610947584, 671092992, 402664448, 469772544, 654313472, 637542144, 469771520, 486541312, 536879872, 1107437312, 738201600, 721428480, 402659840, 469772800, 603981824,
- 452992000, 436215808, 587208704, 268485634, 402661120, 469772544, 402655232, 721429248, 704645120, 738207744, 687872000, 1946426368, 738201600, 721428480, 402659840, 469772800, 687867904,
- 587212288, 536879872, 503325952, 268496132, 738206208, 587211520, 436209664, 637544704, 704653824, 637540608, 469771520, 2432838144, 637538304, 721430784, 620759040, 603991040, 687873024,
- 436215808, 402655232, 436218368, 268489987, 402659840, 469771008, 738199552, 419439872, 587208704, 620763136, 469768704, 2399279872, 637538304, 721430784, 402655232, 637543424, 620768256,
- 134228736, 637541120, 620768768, 268461317, 687875584, 134228736, 603985920, 738207232, 721429760, 452986880, 704650240, 1929648640, 721424384, 687872000, 520095744, 587208704, 134225152,
- 721431040, 637544704, 469770752, 251683589, 687875584, 134228736, 587208704, 520103680, 134223872, 469768960, 436218368, 251694338, 687875584, 134228736, 587208704, 520103680, 134223872, 637541120,
- 620768768, 251694850, 687875584, 134228736, 603985920, 738207232, 721429760, 402655232, 436218368, 251695618, 687875584, 134228736, 738206976, 469771264, 536881408, 134224384, 654322688, 251707908,
- 402660352, 436218112, 134225664, 637543168, 402659840, 536881920, 620766720, 251691778, 738207744, 687872000, 134224896, 402659840, 469772544, 134228736, 654322688, 251708420, 738207744, 687872000,
- 134224896, 637544704, 721430016, 402655232, 721429248, 251700226, 738207744, 687872000, 134224896, 620764160, 469773568, 637543168, 469772032, 251665667, 637542144, 654321408, 620765184, 134225408,
- 402659584, 570436096, 721427456, 251678976, 637545216, 469772544, 402655232, 721429248, 704645120, 402662144, 520104448, 251681283, 738207744, 687872000, 134224896, 654322688, 687867904, 503324672,
- 721428224, 234917890, 687875584, 134228736, 603985920, 738207232, 721429760, 738199552, 2550212352, 536874496, 620764672, 587208704, 654313472, 687873024, 469769472, 721426944, 234917122,
- 687875584, 134228736, 587208704, 520103680, 134223872, 704649216, 4244838912, 671092224, 402664448, 469772544, 654313472, 687872000, 536879616, 503325952, 234881539, 402659840, 469771008,
- 419432448, 587208704, 620763136, 469768704, 1644239616, 738201088, 134227200, 587212544, 620763136, 134228736, 536882688, 721429248, 234892293, 721426432, 587209728, 536879872, 469773056,
- 452986880, 704651264, 2013536000, 771755264, 603987968, 536880128, 503325952, 654313472, 637543936, 1510023936, 520097024, 469769216, 134228736, 587212544, 704649216, 536881920, 2734823936,
- 520097024, 721431552, 587213568, 134224896, 654322176, 436213760, 2734824448, 654314752, 436213760, 134224896, 520104448, 721431552, 587213568, 3238272000, 469765376, 687872000, 520100352,
- 452986880, 587212288, 402662144, 822421760, 570428672, 536879104, 503325952, 620759040, 687875584, 536877824, 2701335040, 520097024, 654319616, 536880896, 503325952, 486541312, 704649216,
- 3322161920, 721423616, 687872000, 637536256, 134225152, 402660096, 536882432, 1828920064, 520097024, 469770240, 452993792, 520095744, 587208704, 469773568, 2382502656, 637537536, 721430784,
- 402655232, 654320384, 402661120, 738199552, 637740800, 536874240, 620764672, 587204608, 620763136, 738205184, 503322624, 3271629824, 721423616, 654318592, 419432448, 436213760, 771760640,
- 687872000, 570563328, 721423616, 536881408, 469770752, 520104704, 637544704, 503327744, 1929649920, 721423616, 687872000, 520095744, 587208704, 134225152, 587208704, 3993053952, 520097024,
- 654321152, 536880896, 503325952, 436209664, 687872000, 2248289024, 721423616, 687873024, 536879872, 503325952, 704645120, 503324672, 1291855104, 520096768, 469770240, 452993792, 754976768,
- 687874048, 704654336, 201357826, 738207744, 687872000, 134224896, 536880128, 738206976, 16919040, 671091712, 402664448, 469772544, 654313472, 637542144, 469771520, 201378561, 469773056, 134227712,
- 637541632, 771762432, 687872000, 3355712256, 436210688, 637544704, 587211520, 721422336, 687875584, 520099840, 201333763, 637542144, 654321408, 620765184, 134225408, 402659584, 3187875328,
- 536873984, 620764672, 520095744, 620763136, 536878592, 503325952, 201350401, 536878848, 587209728, 134224640, 469769984, 687872000, 2516658944, 469765120, 687872000, 520100352, 603981824,
- 620765184, 704654336, 201351169, 738207744, 687872000, 134224896, 536882432, 738208000, 872753664, 620760064, 771761664, 637540608, 687872000, 536877824, 503325952, 201341699, 738207744, 687872000,
- 134224896, 603991808, 687872000, 2097291776, 671091712, 402664448, 469772544, 436209664, 469769984, 570432000, 201344003, 503324672, 134227200, 738207232, 134228736, 587208704, 2500078336,
- 721423360, 687872000, 637536256, 134225152, 536879872, 469769472, 201359362, 402661120, 469772544, 704645120, 738207744, 687872000, 1342184448, 721423360, 654321152, 402664960, 436218624,
- 134225664, 150997760, 201353730, 536878848, 587209728, 134224640, 587208960, 620763136, 2499879424, 469764864, 687872000, 520100352, 654313472, 738206464, 1174546944, 671091456, 402664448,
- 469772544, 654313472, 738206464, 1677863424, 738200320, 469772032, 704653568, 687872512, 654319616, 1359293184, 402656000, 570432000, 452986880, 587212288, 402662144, 3674351872, 520096512,
- 570432512, 587209728, 704645120, 503324672, 3674350848, 520096512, 671095808, 587209728, 704645120, 503324672, 2248353024, 671091456, 402664448, 469772544, 486541312, 587213824, 117711616,
- 520096512, 469771776, 654313472, 536881408, 721429760, 1493248512, 436210432, 637542144, 587212288, 587204608, 436217344, 1845764608, 637537024, 402662144, 134228224, 402663168, 469771520,
- 1476469504, 436210432, 637542144, 587212288, 486541312, 402662144, 100933120, 436210432, 469772544, 452996608, 536881408, 469773568, 1627465984, 721423104, 486545408, 134225152, 620767744,
- 570431488, 3271695360, 520096512, 687872000, 134224896, 637543680, 469768960, 453192192, 721423104, 654321152, 436209664, 687874048, 587209216, 3322027008, 637537024, 436214272, 687873024,
- 419432448, 587208704, 218374912, 721423104, 637544704, 654321152, 402664960, 469769472, 1006772992, 721423104, 721427456, 637542144, 436218368, 654321152, 203776, 721423104, 436215808, 805315072,
- 620759040, 721430016, 3791789056, 721423104, 469772544, 721427456, 754976768, 469770240, 1761947136, 654314240, 587209728, 134226688, 520100352, 436214784, 1375740416, 721423104, 687875584,
- 134224896, 587213312, 704649216, 151265024, 603982592, 570435072, 620765184, 134225408, 402659584, 1157833984, 536873728, 620764672, 536872960, 134227200, 587208704, 1795435264, 520096512,
- 721431552, 587213568, 134224896, 402664704, 1526801664, 520096256, 469770240, 452993792, 436209664, 721426432, 167793665, 436213760, 134226432, 603991808, 687872000, 1577132544, 671091200,
- 402664448, 469772544, 620759040, 536878336, 167800068, 536880128, 469771008, 419432448, 402660352, 386081792, 536873472, 620764672, 134228480, 637544192, 721431040, 167802372, 402664960, 436218624,
- 419438336, 637543936, 1828921856, 520096256, 469770240, 452993792, 402655232, 721429248, 167795713, 536878848, 587209728, 134224640, 637541120, 1996627456, 671091200, 402664448, 469772544,
- 687867904, 704653824, 167804418, 738207744, 687872000, 134224896, 469772032, 1358963968, 520096256, 654321152, 704645120, 402662144, 520104448, 167821059, 536880128, 469771008, 771753984,
- 620765184, 4160823808, 721422592, 687872000, 520095744, 587208704, 1023614208, 620759296, 771761664, 587209984, 570431488, 3254918144, 587204864, 452993024, 687873024, 134228480, 184819456,
- 721422592, 687875584, 134224896, 587208704, 721758976, 402655488, 469773056, 587211520, 721428480, 1896094720, 654313728, 402663680, 134230016, 402659840, 1694639360, 738199808, 704649472,
- 687872512, 654319616, 1124281088, 721422592, 654321152, 402664960, 436218624, 771890944, 637536512, 721430784, 452986880, 771761664, 771892480, 637536512, 721430784, 452986880, 704650240,
- 2717915648, 520096000, 654321152, 587204608, 436217344, 3271696896, 520096000, 687872000, 134224896, 587208704, 3338939136, 805308672, 402662656, 637541888, 738205184, 1812208640, 536873216,
- 620764672, 721426432, 687877120, 1157766144, 671090688, 402664448, 469772544, 520095744, 134234627, 620769280, 134224384, 587208704, 3171101440, 469764096, 452992000, 536879872, 503325952,
- 134244868, 452990976, 721422336, 402660352, 772090112, 536872960, 134226944, 402659840, 452995328, 134274561, 419441664, 687876864, 436213760, 2550213376, 536872960, 620764672, 587208704,
- 234883072, 134247684, 687877120, 687875840, 704651264, 1023548416, 738199552, 721428480, 402659840, 469772800, 134281473, 503324672, 134227200, 738207232, 436349696, 436209664, 704651264,
- 637544960, 704653568, 134229762, 687875584, 134228736, 704649216, 2533366272, 402655232, 587210752, 637540608, 721426432, 134231557, 637543680, 654323200, 637543168, 1879322112, 654313216,
- 637543168, 436218624, 3254918912, 587204352, 452993024, 687873024, 3892390400, 520095488, 486550528, 587209984, 872553472, 536872704, 469773056, 402662400, 2264999680, 721422080, 654317568,
- 469771008, 2718116096, 603981568, 570435072, 620765184, 755310080, 452986624, 436209664, 687872000, 1996757760, 771753728, 603987968, 469771264, 637741312, 536872704, 620764672, 620765184,
- 1761877504, 402654976, 134224640, 687872512, 4227936256, 536872704, 620764672, 536872960, 2734892288, 805308160, 536881408, 503325952, 788864000, 570427136, 721426432, 620765184, 788667904,
- 637536000, 721430784, 738199552, 2550146816, 469763840, 721426944, 637542400, 889529600, 620758784, 771761664, 402662400, 1409426688, 654313216, 620765184, 469771520, 4010027264, 654312960,
- 452993024, 687873024, 100726274, 419441664, 402664960, 2483302400, 520095232, 654317568, 704650240, 100719362, 469769984, 469770752, 3674350336, 520095232, 671095808, 587209728, 100711683,
- 687875840, 738207232, 3959696128, 436209152, 637544704, 587211520, 100724994, 687873024, 469773568, 2550212864, 536872448, 620764672, 587208704, 100666372, 687876864, 402660352, 839197696,
- 587204096, 536878080, 520101376, 100698881, 402660352, 436218112, 889396992, 520095232, 771761664, 687873024, 100697856, 402664192, 687874048, 2566924800, 520095232, 536881408, 654320640,
- 100670978, 738207744, 687872000, 805641216, 570426880, 536879104, 503325952, 100664580, 520100352, 637543936, 1778524928, 520095232, 469770240, 452993792, 83908098, 536880128, 469771008, 83888132,
- 738206208, 587211520, 83915268, 402664192, 654320640, 83936004, 436217344, 704651776, 83947012, 402662144, 520104448, 83942145, 402661120, 469772544, 83889924, 536878848, 721430784, 83901955,
- 637544192, 620766720, 83888644, 637545216, 469772544, 67116290, 754980864, 184818688, 520094720, 654321152, 67157507, 503324672, 1325409536, 637535232, 654317568, 67160065, 637545216, 1308632832,
- 536871936, 570434816, 67149825, 620769280, 84220416, 603980800, 503326208, 67120386, 687875584, 2365664000, 721421312, 687872000, 67165954, 536878848, 1862543104, 654312192, 855971840, 603980544,
- 2600610304, 738198272, 2617255168, 1879128577, 3623986689, 906102786, 2449630210, 3892493826, 1006834179, 2382587395, 3724785155, 704906244, 1979994116, 3187972612, 101048836, 1308961285,
- 2483384837, 3624252933, 470219269, 1611021830, 2718335494, 3792093702, 570884615, 1611088391, 2617736711, 3624385031, 302577159, 1242050056, 2181588488, 3121126920, 4060665352, 705236489,
- 1644774921, 2584313353, 3523851785, 168488457, 1107961354, 1980390410, 2852818954, 3725247498, 302774282, 1175137291, 1980456459, 2785775115, 3591093771, 101510667, 839654412, 1577863180,
- 2316071948, 3054280716, 3792489484, 235796492, 973939725, 1712148493, 2383247885, 3054346765, 3725445645, 101642765, 739121678, 1343110670, 1913545230, 2450424334, 2987303438, 3524182542,
- 4027507214, 202374670, 672078351, 1141847567, 1578062351, 1980721679, 2383381007, 2786040335, 3188699663, 3591358991, 3994018319, 34666511, 370150416, 705699856, 1041249296, 1309689360, 1544574480,
- 436220163, 469769984, 603990272, 603989504, 721427456, 687873024, 721422336, 687873792, 469769216, 671090688, 402664448, 721430784, 687873024, 822290944, 469768704, 654320640, 687873024, 721426432,
- 687877120, 134224896, 520104704, 469772544, 134224896, 738207744, 687872000, 469773056, 704653568, 402687747, 419436544, 469771008, 721422336, 620764160, 536880384, 134228480, 402663168, 452991744,
- 469771008, 419432448, 587208704, 1711350528, 469767936, 721429760, 402655232, 687876352, 771761664, 452986880, 771761664, 134227200, 637545216, 587204608, 620765184, 2483297280, 687871488,
- 402661376, 503325952, 469771008, 436209664, 687874048, 587209216, 134224896, 671099392, 402664448, 469772544, 369137156, 436213760, 637542144, 469771264, 469773056, 134228224, 587208704, 134228736,
- 754980864, 687873024, 503322624, 922754048, 469767680, 654320640, 687873024, 721426432, 687877120, 134224896, 687872000, 637544704, 134229504, 637541120, 620768768, 352347905, 620764160, 134228736,
- 687872000, 637544704, 134229504, 469771008, 721427712, 687867904, 503324672, 721428224, 335602945, 536881408, 620763136, 587210240, 134224896, 788536320, 587209216, 603985920, 721426432, 637542400,
- 1744905472, 469767168, 721429760, 402655232, 687876352, 771761664, 721422336, 687877120, 134227200, 469771008, 721427712, 335558656, 603986944, 469772032, 402663680, 738208512, 469772544,
- 402655232, 687876352, 771761664, 738199552, 1845700352, 402658304, 587208960, 721427456, 704645120, 687872512, 469769216, 134227200, 738203904, 721431296, 620766720, 318780163, 469769984,
- 603990272, 603989504, 721427456, 687873024, 671090688, 402664448, 721430784, 687873024, 318805764, 436213760, 637542144, 469771264, 469773056, 134228224, 587208704, 134228736, 402660608, 721431040,
- 318780163, 603986944, 469772032, 402663680, 738208512, 469772544, 671090688, 402664448, 721430784, 687873024, 302028804, 436213760, 637542144, 469771264, 469773056, 134228224, 754980864, 687873024,
- 503322624, 1426398208, 687870464, 704649216, 134225664, 402659840, 134227200, 687872000, 637544704, 134229504, 654322688, 301998596, 436213760, 637542144, 687873536, 654317568, 134225664,
- 536877824, 536878592, 402664192, 1392517888, 637538816, 587210752, 721427456, 654313472, 654317568, 687873024, 704645120, 402662144, 520104448, 285249537, 419436544, 469771008, 436209664,
- 587209728, 704652032, 587204608, 687872000, 469769728, 285225987, 603986944, 469772032, 402663680, 738208512, 469772544, 469764096, 654320640, 805317376, 285234437, 402663680, 520104448, 687867904,
- 704650240, 637545216, 469772544, 402655232, 721429248, 285241857, 738208000, 570432000, 402655232, 687876352, 771761664, 687867904, 503324672, 721428224, 285225987, 469769984, 603990272, 603989504,
- 721427456, 687873024, 469764096, 654320640, 805317376, 285240833, 771761664, 687873024, 637536256, 704649472, 687873024, 402664704, 536881920, 620766720, 285248000, 687877120, 536879616, 520104448,
- 587204608, 687874048, 134223872, 536881664, 620764672, 268447747, 469769984, 603990272, 603989504, 721427456, 687873024, 486541312, 587213824, 839066368, 520097792, 687873024, 637543424, 469771264,
- 469773056, 134228224, 402661120, 486548224, 268436997, 603986944, 469772032, 402663680, 738208512, 469772544, 520095744, 503324672, 1812012800, 637538304, 587210752, 721427456, 134228480,
- 637544192, 721430784, 419436544, 469771008, 268448259, 603986944, 469772032, 402663680, 738208512, 469772544, 520095744, 587208704, 1761680640, 469766144, 721429760, 402655232, 687876352,
- 771761664, 134228480, 637541120, 620768768, 268447747, 603986944, 469772032, 402663680, 738208512, 469772544, 486541312, 587213824, 922755840, 469766144, 654320640, 687873024, 721426432, 687877120,
- 134224896, 637541120, 620768768, 251685633, 536880640, 469771008, 134228736, 637544192, 721430784, 419436544, 469771008, 251713795, 771761664, 687873024, 419432448, 637544704, 452990976, 402659840,
- 721431040, 251717634, 402663680, 704652544, 469769728, 452994304, 687873024, 402655232, 721429248, 251697412, 436213760, 637542144, 469771264, 469773056, 134228224, 402660608, 721431040, 251687427,
- 603987968, 704650240, 687867904, 436214784, 402664192, 503325952, 469771008, 251660037, 603986944, 469772032, 402663680, 738208512, 469772544, 587204608, 771761664, 234910977, 738208000, 570432000,
- 486541312, 469770240, 452993792, 738199552, 2533631232, 402656768, 520100352, 603989504, 721427456, 687873024, 402655232, 721429248, 234895360, 603986944, 469772032, 402663680, 738208512,
- 469772544, 738199552, 1409623808, 687869440, 704649216, 134225664, 687872000, 637544704, 134229504, 654322688, 234909443, 419436544, 469771008, 134228736, 620763136, 687872768, 536880640,
- 3238206208, 687869440, 436218880, 134226432, 402663680, 654320640, 419432448, 788538880, 218117123, 469769984, 603990272, 603989504, 721427456, 687873024, 150996992, 218132483, 436215808,
- 469770752, 134228736, 536881664, 654320640, 469771008, 218144004, 402663680, 486546688, 436215808, 587204608, 503324672, 721428224, 218125317, 402663680, 520104448, 687867904, 704650240, 637545216,
- 469772544, 218143748, 469769984, 721426432, 687873024, 603981824, 704649216, 704651776, 218132737, 637544704, 469773824, 134226688, 687872256, 436215808, 704651776, 218116355, 469769984, 603990272,
- 603989504, 721427456, 687873024, 201328640, 218115074, 419436544, 469771008, 436209664, 587212288, 603991040, 704652544, 218116099, 603986944, 469772032, 402663680, 738208512, 469772544, 218105856,
- 218116099, 469769984, 603990272, 603989504, 721427456, 687873024, 218105856, 218116611, 603986944, 469772032, 402663680, 738208512, 469772544, 184551424, 218116611, 469769984, 603990272, 603989504,
- 721427456, 687873024, 184551424, 218124290, 419436544, 469771008, 134228736, 738203904, 721431296, 620766720, 218117123, 603986944, 469772032, 402663680, 738208512, 469772544, 150996992, 218133249,
- 738208000, 570432000, 452986880, 637544704, 587212544, 721427456, 218116867, 603986944, 469772032, 402663680, 738208512, 469772544, 167774208, 218116867, 469769984, 603990272, 603989504, 721427456,
- 687873024, 167774208, 218116355, 603986944, 469772032, 402663680, 738208512, 469772544, 201328640, 218120450, 738208000, 570432000, 603981824, 452992000, 436215808, 587208704, 218144260, 738208000,
- 570432000, 603981824, 620766720, 721431040, 687873024, 218153219, 738208000, 570432000, 587204608, 402662912, 536877824, 503325952, 201376259, 738208000, 570432000, 603981824, 754984448, 620765184,
- 990060032, 536873984, 469771264, 134228480, 671099392, 402664448, 469772544, 201361155, 419436544, 469771008, 721422336, 620764160, 536880384, 4127336960, 687868928, 536877056, 134227200,
- 738208256, 771758336, 805312512, 201352193, 687872000, 134227712, 687872768, 654321152, 469771008, 2667850496, 687868928, 436218880, 134226432, 536880896, 570432000, 654322688, 201328645,
- 738205440, 452994304, 687873024, 721431040, 687875584, 4026803200, 637537280, 587210752, 721427456, 654313472, 654317568, 687873024, 201361920, 687877120, 536879616, 520104448, 587204608,
- 687874048, 3506509824, 536873984, 469771264, 134228480, 536877568, 436218112, 469771008, 184608770, 402663680, 704652544, 469769728, 452994304, 687873024, 184591619, 469769984, 603990272,
- 603989504, 721427456, 687873024, 184595201, 788536320, 134228736, 469769984, 503324672, 721428224, 184579585, 738208000, 570432000, 654313472, 402662144, 469771520, 184579073, 738208000, 570432000,
- 486541312, 469770240, 452993792, 184586497, 419436544, 469771008, 436209664, 587209728, 704652032, 184587266, 738205440, 419439616, 134228480, 637541120, 620768768, 184584448, 738208000, 570432000,
- 486541312, 637544704, 721429760, 167826946, 503326208, 587210240, 134224896, 486548992, 3372489984, 637536768, 536881408, 134225920, 402660864, 469773056, 167811844, 469769216, 520104704,
- 637536256, 469772032, 2701337856, 687868416, 436218880, 134226432, 402660608, 721431040, 167809537, 419436544, 469771008, 587204608, 704651264, 3019975424, 469764608, 721432320, 771753984,
- 452993024, 520104704, 167786245, 620764160, 469769728, 704645120, 503324672, 1828791552, 637536768, 469773824, 134228224, 469768704, 587211520, 167806977, 402663680, 620765184, 721422336,
- 402663680, 2030314496, 536873472, 721429760, 704645120, 402662144, 520104448, 167800835, 436215808, 469770752, 134228736, 587208704, 4194380544, 520096256, 603991040, 134224128, 402664192,
- 570432000, 167797253, 788536320, 134228736, 587213312, 704649216, 2567184128, 402655744, 520100352, 603989504, 721427456, 687873024, 167776259, 587209728, 754981888, 704651264, 637542400,
- 1845699840, 402655744, 587208960, 721427456, 402655232, 721429248, 151023361, 469772544, 134224896, 536877568, 805317376, 151019779, 687877120, 134227200, 637541120, 620768768, 151032578,
- 738205440, 419439616, 134228480, 654322688, 151016197, 704649216, 704651776, 402655232, 721429248, 151058945, 738205440, 419439616, 402664192, 570432000, 150998531, 402663680, 469768960, 402662400,
- 570435840, 151011587, 402663680, 520104448, 436209664, 620763136, 151011587, 402663680, 520104448, 402655232, 721429248, 151049986, 503326208, 587210240, 134224896, 620766720, 134254593, 134225664,
- 402662144, 503326976, 1543642112, 469764096, 603990272, 620765184, 587208704, 134252544, 603987968, 587209728, 620765184, 3338804224, 469764096, 469771008, 805317376, 469772032, 117502212,
- 402663680, 721426944, 687875584, 117465603, 687877120, 134227200, 654322688, 117477889, 134225664, 536879872, 721431040, 117455104, 402663680, 587210752, 687873024, 117444100, 637543936, 419439360,
- 788538880, 117444356, 704645120, 536878848, 721430784, 117442821, 687875584, 402662656, 637541120, 117482499, 419436544, 469771008, 704654080, 100667395, 134229248, 587208704, 1376070400,
- 402654720, 402662656, 520102400, 100691969, 637544704, 469773824, 4244710144, 687867392, 654321152, 805314304, 100677637, 536880640, 469771008, 1862478592, 402654720, 587208960, 721427456,
- 100667140, 520104448, 687874048, 2030185216, 536872448, 570432000, 721427456, 83895298, 419436544, 469771008, 83937284, 687875584, 520099840, 83913217, 620764160, 704654080, 83890690, 704649216,
- 704651776, 83948802, 402663680, 620765184, 83917316, 687874048, 452992000, 83900165, 620764160, 469769728, 83900677, 637543936, 704652032, 83925508, 469769216, 520104704, 83938818, 402663680,
- 520104448, 83917572, 637543936, 520104704, 83895810, 738208000, 570432000, 83923969, 603987968, 704650240, 67158017, 620765184, 2952932096, 402654208, 536882944, 67134209, 687872000, 3221432064,
- 402654208, 469772032, 67154178, 469772544, 973413376, 687866880, 603985920, 67152641, 503322624, 1694575104, 469763072, 721429760, 50375169, 503322624, 50382594, 805317376, 50366976, 805316864,
- 33558531, 2432773376, 520094208, 2080390400, 3959472640, 973149185, 2114018305, 3221331969, 4227980801, 939661826, 1879200770, 2751629826, 3556948994, 67365890, 839064579, 1577273347, 2315482115,
- 3053690883, 3791899651, 235206659, 973349892, 1711558660, 2382658052, 3053756932, 3724855812, 33943556, 637867013, 1241856005, 1845844997, 2416279557, 2953158661, 3422928389, 3859143173,
- 4194693125, 570455043, 134227712, 536881408, 520101376, 134228736, 620763136, 134224640, 637541120, 620768768, 587204608, 486546432, 134228736, 687873280, 603989504, 436209664, 620764160,
- 469773056, 1493379328, 654316544, 687867904, 503324672, 721428224, 486541312, 637544704, 134226944, 671099392, 402664448, 469772544, 318797569, 469772800, 704653568, 419432448, 721427456,
- 469773824, 620764160, 587204608, 620765184, 704650240, 301995266, 134227712, 637541120, 620768768, 587204608, 486546432, 134228736, 536881408, 520101376, 3305319168, 704647168, 687873024,
- 587204608, 687872000, 469769728, 704645120, 402662144, 520104448, 268443139, 536880384, 469773568, 704653568, 587208704, 402655232, 436214272, 704650240, 2063673856, 704647168, 687873024,
- 134228480, 536882432, 771759104, 536878336, 452994304, 687873024, 251689473, 469772800, 704653568, 687867904, 436214784, 402664192, 503325952, 469771008, 234931715, 469772800, 134228224, 704649216,
- 687876864, 620766720, 738203648, 3305319168, 704646656, 687873024, 402655232, 721429248, 704645120, 402662144, 520104448, 234912772, 419439616, 469772544, 587211520, 134223872, 469768448,
- 436213760, 1929518848, 620760576, 637543168, 570432000, 570427392, 805313536, 637542144, 469771008, 218156035, 469772800, 134228224, 687873536, 452990976, 402664448, 469773056, 218119683,
- 469773056, 704652544, 587210752, 704645120, 637544192, 620766720, 201388548, 469772800, 134228224, 620765184, 738205952, 469772544, 3405978368, 704646144, 687873024, 486541312, 536881408,
- 620764160, 704649984, 184570880, 469772800, 704653568, 704645120, 402662144, 520104448, 184606722, 469772800, 134228224, 469772800, 687872512, 721427456, 184564482, 469772800, 134228224, 637541120,
- 721426944, 687875584, 184602627, 469772800, 134228224, 520104448, 469770240, 452993792, 184560899, 469772800, 134228224, 536877568, 436218112, 469771008, 167825155, 469772800, 134228224, 536880384,
- 553657600, 4077000704, 704645632, 687873024, 788531200, 402662400, 570435840, 167824131, 469772800, 134228224, 687873536, 738207232, 2768381696, 620759552, 754982912, 687873024, 536881664,
- 805317376, 167825667, 469772800, 134228224, 587213312, 704649216, 1896029952, 704645632, 687873024, 587204608, 687872000, 469769728, 167802881, 469772800, 704653568, 587204608, 620765184,
- 4077001728, 704645632, 687873024, 721422336, 603987968, 704650240, 167794181, 469772800, 134228224, 738206976, 704653568, 3355646976, 704645632, 687873024, 436209664, 637543168, 570432000,
- 167823107, 469772800, 134228224, 520100352, 436214784, 3556975104, 704645632, 687873024, 134228480, 469769728, 687872000, 167801602, 587212032, 436217344, 134226432, 587208704, 2030119680,
- 704645632, 687873024, 134228480, 402663680, 704655360, 167824899, 469772800, 134228224, 536880128, 738206976, 3389204992, 704645376, 687873024, 469764096, 536877824, 3439536896, 704645376,
- 687873024, 587204608, 436217344, 4060226048, 704645376, 687873024, 654313472, 738206464, 587344384, 620759296, 469768960, 587213056, 620765184, 3556973568, 704645376, 687873024, 134228480,
- 637540864, 3372424704, 704645376, 687873024, 503318528, 402660352, 889334016, 603981824, 687872256, 587209728, 402662144, 134233859, 469773056, 704652544, 587210752, 1896032768, 704645120,
- 687873024, 402655232, 721429248, 134271491, 469772800, 134228224, 402664192, 755113472, 620759040, 637544960, 721430784, 452992000, 134234115, 452994304, 134227456, 587208704, 3389205248,
- 704645120, 687873024, 654313472, 620764160, 134271747, 469772800, 134228224, 536881920, 3372424192, 704645120, 687873024, 436209664, 503326208, 117462019, 134227712, 637541120, 620768768,
- 117455618, 469772800, 134228224, 452994048, 117460739, 134227712, 637543168, 503325952, 100663810, 587212032, 436217344, 1644306944, 620758528, 536879872, 570434816, 100728321, 587212544,
- 402662912, 369236736, 704644352, 687873024, 2382440960, 704644096, 687873024, 67121410, 452994304, 67118592, 704643840, 620763904, 1979730944, 3187710464, 4194360832, 771822593, 1644251137,
- 2516679681, 3321998849, 4127317505, 637668866, 1409433090, 2147641858, 2885850626, 3556950018, 4127385090, 335742467, 738402307, 1141061635, 1543720963, 553870851, 637539328, 738206464, 469771264,
- 436209664, 620766720, 687876864, 587212288, 654313472, 637542144, 469771520, 285244417, 402661376, 134226688, 536877568, 436218112, 469771008, 436209664, 469769984, 570432000, 285254656, 687874048,
- 704654336, 436209664, 754984448, 452993024, 704645120, 402662144, 520104448, 251693059, 587212288, 469771008, 419442688, 587208704, 134226688, 402659584, 587211520, 218135812, 436214784, 637545216,
- 134228224, 671099392, 402664448, 469772544, 201374721, 452993024, 637541376, 436209664, 603985920, 687873024, 1493178368, 469765120, 721431040, 654313472, 721426432, 520100352, 704650240,
- 201386242, 620764160, 704654336, 452986880, 738207232, 587208960, 4077132800, 687868928, 436209664, 687872000, 419437312, 402662912, 452995328, 201378564, 587212288, 603991040, 134224896,
- 536881920, 469771264, 3406047744, 637537280, 738206464, 469771264, 788531200, 402662400, 570435840, 184599299, 452993024, 637541376, 704645120, 402662144, 520104448, 184571392, 687874048,
- 704654336, 704645120, 402662144, 520104448, 184592129, 587212288, 603991040, 134224896, 536878848, 520101376, 184591104, 687874048, 704654336, 436209664, 754984448, 452993024, 184576772, 620763136,
- 704645120, 738205440, 721431296, 469771008, 184601348, 587212288, 603991040, 134224896, 738206720, 469773056, 184591873, 587212288, 603991040, 134224896, 637541120, 620768768, 167806979, 587212288,
- 469771008, 419442688, 587208704, 2097226496, 536873472, 587208704, 754976768, 687874048, 704654336, 167814401, 587212288, 603991040, 134224896, 486548992, 3942784256, 469764608, 738206976,
- 134228480, 402662400, 704653568, 167814657, 587212288, 603991040, 134224896, 637543168, 2801872384, 637536512, 738206464, 469771264, 738199552, 1778722560, 637536512, 436215808, 603986944,
- 536877056, 184886016, 637536256, 469773056, 805308416, 402660352, 117462784, 687874048, 704654336, 704650240, 117443077, 587212288, 402659840, 637543680, 100715012, 520101888, 687872000,
- 3154188288, 536872192, 469768960, 2802001408, 536872192, 587208704, 738404864, 436208896, 687872000, 3825343232, 469763328, 738206976, 2332043776, 402654464, 587213824, 1426074368, 536872192,
- 738208000, 2785225216, 536871936, 587208704, 67131392, 704650240, 620768000, 2248166400, 3489705472, 268562432, 1308700673, 2315348993, 3288442881, 4227981313, 805443074, 1644317186, 2449635842,
- 3187845122, 3892499458, 268696578, 839066115, 1342390787, 1812160003, 2248374787, 2583924739, 2114036739, 520100864, 402660352, 134228736, 771758080, 134227200, 536877568, 436218112, 469771008,
- 469764096, 436219648, 402662144, 402662400, 536881920, 620766720, 318802944, 620763136, 134224640, 402662400, 536878592, 134224384, 654322176, 687872000, 587211264, 704650240, 268467972, 620765184,
- 134224896, 587210240, 704649216, 134228480, 603986944, 721430272, 2382376960, 520097536, 469769216, 436216576, 402661120, 687874048, 603981824, 754984448, 939727872, 536874752, 452994304,
- 771761664, 603981824, 788535296, 603987968, 822091776, 956505088, 536874752, 452994304, 771761664, 603981824, 620765184, 603987968, 822091776, 2382371840, 520097280, 469769216, 436216576,
- 402661120, 687874048, 402655232, 721429248, 234913284, 536878080, 520101376, 134228736, 402661120, 503325952, 620765184, 973282816, 536874496, 452994304, 771761664, 687867904, 704650240, 637545216,
- 469772544, 234913540, 620765184, 134224896, 587210240, 704649216, 134228480, 587208704, 470100736, 520097024, 704651264, 469770752, 134230016, 587210240, 704649216, 1879386624, 402656512,
- 570434304, 469770240, 721422336, 587208704, 536879616, 4093910016, 402656512, 452994304, 704645120, 402663168, 570435840, 469771008, 2013538816, 402656256, 469773056, 134228224, 402662144,
- 452991744, 687873024, 201355779, 620765184, 637541120, 134229504, 587209216, 704652800, 2835553280, 469765120, 503324672, 721428224, 704645120, 402659840, 469771008, 184571653, 754980864,
- 134224896, 671099392, 402664448, 469772544, 184612356, 620765184, 134224896, 637540608, 721431296, 469771008, 184601346, 486547456, 134225920, 721431040, 637544704, 503325952, 167822339, 620765184,
- 134224896, 587210240, 704649216, 620898816, 402655744, 452994304, 603981824, 503322624, 436215808, 167813378, 469769984, 587209728, 520100352, 536877056, 2365597952, 520096000, 402660352,
- 134228736, 771758080, 2365596928, 520096000, 402660352, 134228736, 587208704, 2818779904, 402655488, 469772544, 637542144, 704654336, 2315394048, 637536256, 134227200, 536881664, 620764672,
- 117499137, 687872000, 536880384, 503325952, 117444612, 587208704, 536879616, 503325952, 100715266, 486547456, 134225920, 285346816, 687867392, 620764160, 520100352, 100667652, 587208704, 469771008,
- 2835557120, 469763584, 503324672, 721428224, 83889157, 721426432, 687873024, 67160834, 486547456, 4110688256, 536871936, 452994304, 67141377, 687875584, 2315396096, 637534976, 83895552, 637537280,
- 1509965824, 990078464, 603982848, 687872000, 134226432, 671099392, 402664448, 469772544, 201359361, 402662400, 570435840, 134228480, 536879872, 469771520, 3506514432, 603982848, 687872000,
- 134226432, 536877568, 436218112, 469771008, 83929603, 687867904, 805312512, 83923969, 402662400, 570435840, 134218496, 738204160, 134252546, 620764160, 704645120, 503324672, 3422823680, 536872960,
- 134227200, 402665472, 503325952, 50366466, 620764160, 67109120, 50344706, 654317568, 603980032, 167774464, 201329408, 234884352, 268439296, 301994240, 419436544, 452991488, 486546432, 520101376,
- 553656320, 587211264, 620766208, 654321152, 687876096, 721431040, 754985984, 788540928, 822095872,
-};
-
-enum { SAW_TTF_ICONS_SIZE = 411192, };
-
-#endif
diff --git a/source/tests/_exe.c b/source/tests/_exe.c
deleted file mode 100644
index 39412dd..0000000
--- a/source/tests/_exe.c
+++ /dev/null
@@ -1,2 +0,0 @@
-#include "../saw/_lib.c"
-#include "main.test.c"
diff --git a/source/tests/main.test.c b/source/tests/main.test.c
deleted file mode 100644
index b0f0c03..0000000
--- a/source/tests/main.test.c
+++ /dev/null
@@ -1,8 +0,0 @@
-#define KIT_TEST_IMPLEMENTATION
-#include "../kit/test.h"
-
-int main(int argc, char **argv) {
- return run_tests(argc, argv);
-}
-
-#undef KIT_TEST_FILE
diff --git a/source/stb/LICENSE b/stb/LICENSE
index a77ae91..a77ae91 100644
--- a/source/stb/LICENSE
+++ b/stb/LICENSE
diff --git a/source/stb/stb_image.h b/stb/stb_image.h
index 5e807a0..5e807a0 100644
--- a/source/stb/stb_image.h
+++ b/stb/stb_image.h
diff --git a/source/stb/stb_truetype.h b/stb/stb_truetype.h
index bbf2284..bbf2284 100644
--- a/source/stb/stb_truetype.h
+++ b/stb/stb_truetype.h