summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/plugins/CATEGORIES1
-rw-r--r--apps/plugins/SOURCES1
-rw-r--r--apps/plugins/SUBDIRS2
-rw-r--r--apps/plugins/sdl/progs/wolf3d/Changes-dc.txt17
-rw-r--r--apps/plugins/sdl/progs/wolf3d/Changes.txt157
-rw-r--r--apps/plugins/sdl/progs/wolf3d/README-GP2X.txt70
-rw-r--r--apps/plugins/sdl/progs/wolf3d/README-dc.txt85
-rw-r--r--apps/plugins/sdl/progs/wolf3d/README-devcpp.txt43
-rw-r--r--apps/plugins/sdl/progs/wolf3d/README.txt224
-rw-r--r--apps/plugins/sdl/progs/wolf3d/audiosod.h142
-rw-r--r--apps/plugins/sdl/progs/wolf3d/audiowl6.h153
-rw-r--r--apps/plugins/sdl/progs/wolf3d/f_spear.h76
-rw-r--r--apps/plugins/sdl/progs/wolf3d/fmopl.h4
-rw-r--r--apps/plugins/sdl/progs/wolf3d/fmopl_gpl.c2565
-rw-r--r--apps/plugins/sdl/progs/wolf3d/fmopl_gpl.h117
-rw-r--r--apps/plugins/sdl/progs/wolf3d/foreign.h131
-rw-r--r--apps/plugins/sdl/progs/wolf3d/gfxv_apo.h244
-rw-r--r--apps/plugins/sdl/progs/wolf3d/gfxv_sod.h290
-rw-r--r--apps/plugins/sdl/progs/wolf3d/gfxv_wl6.h216
-rw-r--r--apps/plugins/sdl/progs/wolf3d/gp2x.h51
-rw-r--r--apps/plugins/sdl/progs/wolf3d/id_ca.c1113
-rw-r--r--apps/plugins/sdl/progs/wolf3d/id_ca.h60
-rw-r--r--apps/plugins/sdl/progs/wolf3d/id_in.c667
-rw-r--r--apps/plugins/sdl/progs/wolf3d/id_in.h183
-rw-r--r--apps/plugins/sdl/progs/wolf3d/id_pm.c125
-rw-r--r--apps/plugins/sdl/progs/wolf3d/id_pm.h58
-rw-r--r--apps/plugins/sdl/progs/wolf3d/id_sd.c1578
-rw-r--r--apps/plugins/sdl/progs/wolf3d/id_sd.h158
-rw-r--r--apps/plugins/sdl/progs/wolf3d/id_us.h101
-rw-r--r--apps/plugins/sdl/progs/wolf3d/id_us_1.c789
-rw-r--r--apps/plugins/sdl/progs/wolf3d/id_vh.c435
-rw-r--r--apps/plugins/sdl/progs/wolf3d/id_vh.h99
-rw-r--r--apps/plugins/sdl/progs/wolf3d/id_vl.c727
-rw-r--r--apps/plugins/sdl/progs/wolf3d/id_vl.h101
-rw-r--r--apps/plugins/sdl/progs/wolf3d/sdl_winmain.c378
-rw-r--r--apps/plugins/sdl/progs/wolf3d/signon.c8007
-rw-r--r--apps/plugins/sdl/progs/wolf3d/sodpal.inc52
-rw-r--r--apps/plugins/sdl/progs/wolf3d/version.h55
-rw-r--r--apps/plugins/sdl/progs/wolf3d/wl_act1.c859
-rw-r--r--apps/plugins/sdl/progs/wolf3d/wl_act2.c3899
-rw-r--r--apps/plugins/sdl/progs/wolf3d/wl_agent.c1499
-rw-r--r--apps/plugins/sdl/progs/wolf3d/wl_atmos.c229
-rw-r--r--apps/plugins/sdl/progs/wolf3d/wl_atmos.h20
-rw-r--r--apps/plugins/sdl/progs/wolf3d/wl_cloudsky.c259
-rw-r--r--apps/plugins/sdl/progs/wolf3d/wl_cloudsky.h46
-rw-r--r--apps/plugins/sdl/progs/wolf3d/wl_debug.c863
-rw-r--r--apps/plugins/sdl/progs/wolf3d/wl_def.h1479
-rw-r--r--apps/plugins/sdl/progs/wolf3d/wl_dir3dspr.c230
-rw-r--r--apps/plugins/sdl/progs/wolf3d/wl_draw.c1647
-rw-r--r--apps/plugins/sdl/progs/wolf3d/wl_floorceiling.c87
-rw-r--r--apps/plugins/sdl/progs/wolf3d/wl_game.c1601
-rw-r--r--apps/plugins/sdl/progs/wolf3d/wl_inter.c1723
-rw-r--r--apps/plugins/sdl/progs/wolf3d/wl_main.c1953
-rw-r--r--apps/plugins/sdl/progs/wolf3d/wl_menu.c4160
-rw-r--r--apps/plugins/sdl/progs/wolf3d/wl_menu.h237
-rw-r--r--apps/plugins/sdl/progs/wolf3d/wl_parallax.c64
-rw-r--r--apps/plugins/sdl/progs/wolf3d/wl_play.c1366
-rw-r--r--apps/plugins/sdl/progs/wolf3d/wl_shade.c143
-rw-r--r--apps/plugins/sdl/progs/wolf3d/wl_shade.h15
-rw-r--r--apps/plugins/sdl/progs/wolf3d/wl_state.c1530
-rw-r--r--apps/plugins/sdl/progs/wolf3d/wl_text.c859
-rw-r--r--apps/plugins/sdl/progs/wolf3d/wolfpal.inc52
-rw-r--r--apps/plugins/sdl/sdl.make29
-rw-r--r--apps/plugins/sdl/wrappers.c1
-rw-r--r--apps/plugins/wolf3d.c31
-rw-r--r--docs/CREDITS2
-rw-r--r--manual/plugins/main.tex2
-rw-r--r--manual/plugins/wolf3d.tex7
68 files changed, 44163 insertions, 4 deletions
diff --git a/apps/plugins/CATEGORIES b/apps/plugins/CATEGORIES
index 652a0b3a8e..a0527c87e2 100644
--- a/apps/plugins/CATEGORIES
+++ b/apps/plugins/CATEGORIES
@@ -180,6 +180,7 @@ wav2wv,viewers
wavplay,viewers
wavrecord,apps
wavview,viewers
+wolf3d,games
wormlet,games
xobox,games
xworld,games
diff --git a/apps/plugins/SOURCES b/apps/plugins/SOURCES
index 1ae0144866..0ff6eb9c76 100644
--- a/apps/plugins/SOURCES
+++ b/apps/plugins/SOURCES
@@ -78,6 +78,7 @@ iriverify.c
(!defined(LCD_STRIDEFORMAT) || (LCD_STRIDEFORMAT != VERTICAL_STRIDE))
#if (PLUGIN_BUFFER_SIZE > 0x14000) && defined(CPU_ARM)
duke3d.c
+wolf3d.c
#endif
#endif
diff --git a/apps/plugins/SUBDIRS b/apps/plugins/SUBDIRS
index 055db43b48..04c3d763b2 100644
--- a/apps/plugins/SUBDIRS
+++ b/apps/plugins/SUBDIRS
@@ -8,7 +8,6 @@ text_viewer
clock
#endif
-
/* For all targets with a bitmap display */
#ifdef HAVE_LCD_BITMAP
@@ -22,7 +21,6 @@ xworld
defined(CPU_ARM)
sdl
#endif
-
puzzles
#endif
diff --git a/apps/plugins/sdl/progs/wolf3d/Changes-dc.txt b/apps/plugins/sdl/progs/wolf3d/Changes-dc.txt
new file mode 100644
index 0000000000..e613b0ab41
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/Changes-dc.txt
@@ -0,0 +1,17 @@
+1.7 <February 01, 2009>
+- Saved game description saved to VMS header
+- Adjustments made to LCD
+- VMU loading code improved
+- Miscellaneous code clean ups
+- Work started on new disc check code
+
+1.6 <October 04, 2008>
+- Getting the DC port up-to-date
+
+1.5 <May 25, 2008>
+- Mouse support
+- Weapon switch support
+- Controllers with C & Z button support
+- Command line parameters via 'params.txt' support
+- SOD mission pack support via menu
+- Commercial CD-ROM swap support
diff --git a/apps/plugins/sdl/progs/wolf3d/Changes.txt b/apps/plugins/sdl/progs/wolf3d/Changes.txt
new file mode 100644
index 0000000000..0bf21703af
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/Changes.txt
@@ -0,0 +1,157 @@
+Wolf4SDL v1.7 (released 2011-05-15, revision 256)
+ - Added support for Mac OS X
+ (thanks to Chris Ballinger)
+ - Added support for .sd1 SOD game files as delivered by Steam
+ by changing --mission parameter slightly
+ (thanks to Pickle)
+ - Added --windowed-mouse parameter to start windowed mode with grabbed mouse
+ (thanks to Jared Breland)
+ - Rain and snow speed fix (thanks to Tricob)
+ - Floor/ceiling fix (thanks to Tricob / Adam Biser)
+ - Fixed moon out of screen bug (thanks to Tricob)
+ - Rain/snow leaking ceilings fix (thanks to Adam Biser / Tricob)
+ - Per-user configuration/savegame directories (~/.wolf4sdl) on
+ Linux like systems per default (thanks to Jared Breland)
+ - Added --configdir parameter
+ - Use SDL_DOUBLEBUF for vsync to avoid or at least reduce flickering
+ (thanks to Greg Ayrton for the hint, use --nodblbuf to disable it)
+ - Removed remainings of the frame rate counter on screen, when disabled
+ - Don't quit game when using TAB+E with --tedlevel
+ - Added --extravbls parameter
+ - Changed default for "extra VBLs" from 1 to 0
+ - Fixed missing umask parameter for open with O_CREAT
+ (bug reported by Daniel Fass)
+ - Fixed support for 1.0 shareware data files
+ (bug reported by Marcus Naylor)
+ - Fixed xtile and ytile not being valid in HitHorizWall and HitVertWall,
+ respectively. This caused problems with some tutorials.
+ - Removed unused HitHorizPWall and HitVertPWall.
+
+Wolf4SDL v1.6 (released 2008-09-01, revision 233)
+ - Fixed songs not really supporting more than 64kb
+ - Try to recognize whether data files don't fit to program version
+ instead of just using them and probably crash
+ (can be disabled with --ignorenumchunks)
+ - Fizzle fade now works for resolutions up to 8191x4095
+ (thanks to Xilinx, Inc. for the list of maximum-length LFSR counters)
+ - Fixed demos being dependent on actual duration of GETGATLINGSND
+ (fixes second demo, which even rarely worked in vanilla Wolf3D)
+ - Fixed demos by disabling some bugfixes during recording and playback
+ (see PLAYDEMOLIKEORIGINAL define in version.h)
+ - Removed system menu on Windows in windowed mode to avoid ALT to open it
+ - Fixed palette issues occurring on some Windows systems by using the
+ "best" color depth reported by libSDL per default (also see --bits option)
+ - Fixed directional 3d sprites on architectures only allowing aligned memory
+ access (bug reported by Pickle)
+ - Fixed remaining status bar after end of demo in 320x240s resolutions
+ (bug reported by Pickle)
+ - Removed last busy waiting (fixes very unstable framerates on machines with
+ stricter schedulers like FreeBSD; thanks to Tron for making me notice)
+ - Fixed compiling of SOD on case sensitive file systems
+ (thanks to Michael)
+
+Wolf4SDL v1.5 (released 2008-05-25, revision 215)
+ - Reduced minimum distance to back of moving pushwall to PLAYERSIZE
+ - Fixed pushwall rendering when player's eye is in the pushwall back tile
+ (bug reported by Pickle)
+ - Enable 'End game' menu item also when using --tedlevel
+ - Removed some unneccessary fade outs
+ (DrawPlayScreen does not call VW_FadeOut anymore!!)
+ - When using 'End game', 'View scores' does not directly show up anymore
+ - Fixed quickload/quicksave not working when started with --tedlevel (vanilla
+ bug). This now also only checks for save games once at startup (may speed
+ up entering the menu on Dreamcast)
+ - Fixed drawing moving pushwalls viewed at acute angles near the level border
+ - Fixed vanilla bug hiding bonus items on same tile as player, when he cannot
+ pick them up (e.g. medikit at 100% health) (thanks to Pickle for noticing)
+ - Added GP2X specific code by Pickle
+ - Reimplemented picture grabber to support all screen resolutions
+ (<TAB>+P in debug mode)
+ - Added --resf option to force to use unsupported resolutions >= 320x200
+ - Added support for resolutions being a multiple of 320x240
+ (thanks for your help, Pickle!)
+ - Fixed crash when cheat-hurting oneself to death (bug reported by Tricob)
+ - Cleaned up id_sd.cpp (kept PC speaker stuff for future reference)
+ - Added move buttons (invalidates config file, only hardcoded yet)
+ - Added joystick support to US_LineInput used for highscore names
+ and save games
+ - Added US_Printf and US_CPrintf (works just like printf)
+ - Fixed wrong surface locks/unlocks
+ - Added Visual C++ 6 support
+ - Removed some useless VW_WaitVBLs (Thanks to TexZK)
+ - Added some asserts in id_vl.cpp to check for screen access out of bounds
+ - Fixed BJ face popping up in fullsize mode sometimes
+ (Thanks to Andy_Nonymous)
+ - Rewrote page manager to support page >= 64kB
+ and to correctly handle sounds >= 4kB
+ - Improved SOD mission packs support (Thanks to fackue)
+ - Updated Code::Blocks search paths to ..\SDL-devel\
+ - Added version.h to Dev-C++ and Code::Blocks project file
+ - Fixed some files being read in text mode on MinGW
+
+Wolf4SDL v1.4 (released 2008-03-10, revision 164)
+ - Added MinGW/MSYS compatibility
+ - Updated Code::Blocks project
+ - Updated Dev-C++ project and added a README-devcpp.txt
+ - Fixed some busy waiting situations
+ - Added directional 3D sprites support (USE_DIR3DSPR)
+ - Added support for Spear mission packs (by fackue)
+ - Added support for Wolf3D full v1.1 and shareware v1.0, v1.1 and v1.2
+ - Added shading support (USE_SHADING)
+ - Added object flags (see objflag_t enum in wl_def.h)
+ - Reintroduced version.h
+ - Increased MAXVISABLE from 50 to 250
+ - Added outside atmosphere features (USE_STARSKY, USE_RAIN, USE_SNOW)
+ - Added cloud sky support (USE_CLOUDSKY)
+ - Added support for SoD demo
+ - Fixed SoD on systems with case sensitive filenames
+ - Added DarkOne's/Adam's multi-textured floors/ceiling (USE_FLOORCEILINGTEX)
+ - Added parallax sky support (USE_PARALLAX define)
+ - Introduced level feature flags (USE_FEATUREFLAGS define)
+ - Added high resolution support (USE_HIRES define)
+ - Added support for music > 64 kB as supported by WDC
+ - Added --samplerate and --audiobuffer parameters
+ - Added support for GP2X (ARM processor, thanks to Pickle)
+ - Added support for Dreamcast (SH-4 processor, thanks to fackue)
+ - Added joystick support (up to 32 buttons)
+
+Wolf4SDL v1.3 (released 2008-01-20, revision 113)
+ - Added parameter for SOD to disable copy protection quiz
+ - F12 now also grabs the mouse (for keyboards without scrolllock)
+ - Fixed out of bounds array access in key processing
+
+Wolf4SDL v1.2 (released 2008-01-09, revision 108)
+ - Fixed fading for 'End Game'
+ - Corrected fading speed
+ - Added Spear of Destiny compile support
+ - Reimplemented palette file (Sorry...)
+ - Fixed end game crash, when player did not die yet
+ (Thanks to Agent87 for noticing this bug!)
+ - Added full size screen feature
+ - Added project files for Code::Blocks and Dev-C++
+ (Thanks to Codetech84!)
+ - Made it MinGW compatible
+ - Fixed demo fading issues
+ - Reformatted many source code files
+ - Resolved all warnings reported by VC++ 8 and GCC
+ - Fixed crash when starting the game with no sound >effects<
+ (Thanks to Agent87 for noticing this bug!)
+ - Always grab mouse when started in fullscreen
+ - Map left and right alt, shift and ctrl keys to the same keys
+ - Fix numpad keys with numlock off
+ - Fixed a buffer overflow causing a crash
+
+Wolf4SDL v1.1 (released 2007-12-28, revision 70)
+ - Fixed Pause
+ - Fixed IN_Ack()
+ - Added command line parameters for windowed mode and screen resolution
+ - Reimplemented command line parameters (try --help)
+ - Improved scaled "Get Psyched" progress bar graphic
+ - Improved scaled screen borders
+ - Fixed "Fade in black screen" bug
+ - Avoid asserts when shutting down with an error
+ - Use software surfaces to reduce problems with palette on Windows
+ - Windows: Statically links to MSVCR80.DLL now to avoid missing files
+
+Wolf4SDL v1.0 (released 2007-12-26, revision 53)
+ - Initial release
diff --git a/apps/plugins/sdl/progs/wolf3d/README-GP2X.txt b/apps/plugins/sdl/progs/wolf3d/README-GP2X.txt
new file mode 100644
index 0000000000..41ca30ec36
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/README-GP2X.txt
@@ -0,0 +1,70 @@
+Wolf4SDL by Moritz "Ripper" Kroll (http://www.chaos-software.de.vu)
+Original Wolfenstein 3D by id Software (http://www.idsoftware.com)
+GP2X support by Pickle
+
+Source and Windows Binary: http://www.stud.uni-karlsruhe.de/~uvaue/chaos/downloads.html
+GP2X Binary: http://archive.gp2x.de/cgi-bin/cfiles.cgi?0,0,0,0,20,2479
+
+SUMMARY:
+See main README.txt
+
+
+GP2X CONTROLS:
+Directional: these are mapped to the arrow keys.
+A : mapped to space, which opens doors
+B : mapped to left shift, which enables running. Also mapped
+ to key n, for the NO response in the menu.
+X : mapped to left control, which enables shooting.
+Y : mapped to the number keys, to select weapons. It cycles
+ through each weapon in order. Also mapped to key y, for
+ the YES responses in the menu.
+** NOTE: In "enter text" mode each button sends its letter,
+ for example a=a, y=y
+
+Select: mapped to the escape key
+Start: mapped to the enter key
+Select+Start: mapped to pause
+
+Shoulder Left: this is mapped in a way to strafe left
+Shoulder Right: this is mapped in a way to strafe right
+** NOTE: If you press both the left and right shoulder buttons the statusbar
+ will be shown in the fullscreen mode described above.
+
+Volume Buttons: raise and lower the volume.
+
+Either Volume Button + Select: show fps
+Either Volume Button + Start: take a screenshot
+
+
+** NOTE: The directional stick is given precedence over the strafe keys.
+ For example if you hold the shoulder right to strafe right and you
+ then move the stick right you will stop strafing and turn. If you
+ then release the stick you will resume strafing the right.
+ (I've tested this and it seems to work fairly well)
+
+
+INSTALL:
+Pick your Wolf4SDL binary and copy the files at the root of the zip to any
+folder together with the data files of the according game (e.g. *.WL6 for
+Wolfenstein 3D or *.SOD for Spear of Destiny).
+The binaries do not restart the GP2X menu application.
+If you use GMenu2x, select the wrapper option for your icon.
+If you use the GPH menu, you will have to create your own script to restart it.
+
+
+Compiling from source code:
+I used the Code::Blocks dev kit. (http://archive.gp2x.de/cgi-bin/cfiles.cgi?0,0,0,0,14,2295)
+You can use the template example. Add all of the source files to the project.
+Under build options (pick your GP2X compilier) and under "Compilier Settings"
+-> "Defines" add GP2X. Just press the build button.
+The Makefile should also work for linux type environments, although I have
+not tried it this way. If you use it, the GP2X define should be added to the
+Makefile using CFLAGS += -DGP2X.
+
+I also added the compiler flags
+"-fmerge-all-constants -ffast-math -funswitch-loops"
+which give a good performance increase.
+For Code::Blocks put this line in "Compiler Settings" - "Other Options".
+
+PERFORMANCE:
+The game runs good at 200 Mhz.
diff --git a/apps/plugins/sdl/progs/wolf3d/README-dc.txt b/apps/plugins/sdl/progs/wolf3d/README-dc.txt
new file mode 100644
index 0000000000..ebdf44635d
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/README-dc.txt
@@ -0,0 +1,85 @@
+Wolf4SDL\DC 1.7
+ported to Dreamcast by dcbasic
+
+A port of Wolf4SDL by Moritz "Ripper" Kroll.
+
+What's new in 1.7:
+- See Changes-dc.txt
+
+Instructions:
+- Extract the Wolf4SDL\DC archive to it's own folder.
+- Put your *.wl6 files inside /cd/data/wolf3d (if you have a commercial CD-ROM
+ release of Wolfenstein you can skip this step).
+- If you want to use the command line, create a text file called 'args.txt'
+ (without quotes) in the /cd/data/wolf3d folder and add any valid
+ arguments. Please keep them on one line.
+- Download and install BootDreams (http://dchelp.dcemulation.org/?BootDreams).
+- Open the folder you extracted Wolf4SDL\DC to in BootDreams.
+- Select a task. If you'd like to burn Wolf4SDL\DC directly to a CD-R, select
+ the CDRecord task and set the disc format to either Audio\Data or Data\Data
+ (both do essentially the same thing).
+- Click Process.
+- If you created a CD image, burn it with the appropriate burning program
+ e.g. Alcohol 120%.
+- Pop the CD-R in your Dreamcast and play.
+- If you have a commercial CD-ROM, wait until you're asked to swap in your
+ copy of Wolfenstein 3D, swap your copy in, press start and play.
+
+Valid Arguments:
+--goobers (Wolfenstein 3D only)
+--debugkeys (Spear of Destiny only)
+--goodtimes (Spear of Destiny only)
+--nowait
+--baby
+--easy
+--normal
+--hard
+--tedlevel <level>
+--res <width> <height> (default 320x200)
+--resf <width> <height>
+--bits <screen_bits> (default 8)
+--dblbuf
+--extravbls <vbls>
+--samplerate <rate> (default 11025)
+--audiobuffer <size> (default 4096)
+
+Notes:
+- The --res argument will also except '640 400' but will slow rendering down
+ greatly. The width must be a multiple of 320 and the height must be a
+ multiple of 200 or 240.
+- The --resf argument will force the passed screen resolution but may result
+ in graphic corruption.
+- The default samplerate is 11025 to keep the extra SOD missions from running
+ out of memory. Wolfenstein 3D and the original SOD mission will happily run
+ with the samplerate set to 22050.
+- The --dblbuf argument works but slows speed down by about 10 frames.
+
+Compiling:
+This port was developed under Code::Blocks 8.02 with the DC Dev ISO R4
+integrated within it. I've also included a Makefile in case you don't use
+Code::Blocks. You will need SDL and SDL mixer to compile Wolf4SDL\DC.
+
+DC Dev ISO can be downloaded from here:
+http://dcemulation.org/?title=DC_Dev_ISO
+
+It contains everything you need to compile Wolf4SDL. It includes Code::Blocks
+8.02 and a tool to integrate Code::Blocks with DC Dev ISO. It uses Cygwin as
+the terminal environment and includes the DC compilers and all the SDL
+libraries that are needed to compile Wolf4SDL.
+
+To compile Wolf4SDL\DC under Code::Blocks, extract the source to it's own
+folder, open 'Wolf4SDL-DC.cbp' and goto 'Build' | 'Build'.
+
+To compile Wolf4SDL\DC using the supplied Makefile, extract the source to it's
+own directory in C:\cygwin\usr\local\dc and type 'make -f Makefile.dc' in your
+terminal while inside the folder Wolf4SDL\DC was extracted to. By default the
+Makefile will create a scrambled 1ST_READ.BIN, unscrambled Wolf4SDL.bin and of
+course, Wolf4SDL.elf.
+
+Credits & Thanks:
+- OneThiryt8 for which parts of this port was based on his port, sdlWolf
+- BlueCrab who wrote parts of the swap disc menu
+- BlackAura for which I stole parts of his menu code from nxDoom
+- Ripper for such a clean and friendly Wolfenstein 3D engine
+- Bero for the Dreamcast port of SDL, which this port uses
+- Dan Potter and team for KOS, which this port uses
diff --git a/apps/plugins/sdl/progs/wolf3d/README-devcpp.txt b/apps/plugins/sdl/progs/wolf3d/README-devcpp.txt
new file mode 100644
index 0000000000..e013c48c3e
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/README-devcpp.txt
@@ -0,0 +1,43 @@
+This file explains how you can compile Wolf4SDL using Bloodshed's Dev-C++.
+Keep in mind, that Dev-C++ is a dead project since 2005. The recommended way
+to compile Wolf4SDL on Windows is using Visual Studio 2005 C++ or the free
+Visual C++ 2005 Express. But for dial-up users Dev-C++ is probably still a
+good option.
+
+Needed files:
+ - "Dev-C++ 5.0 Beta 9.2 (4.9.9.2)" with Mingw/GCC 3.4.2 (about 9 MB)
+ http://www.bloodshed.net/dev/devcpp.html
+ - SDL-1.2.13-1chaos.DevPak (544 kB)
+ http://www.chaos-software.de.vu -> Downloads
+ - SDL_mixer-1.2.6-2mol.DevPak (347 kB)
+ http://sourceforge.net/project/showfiles.php?group_id=94270&package_id=151751
+
+Installation:
+ - Install Dev-C++ to C:\Dev-Cpp
+ - Open Wolf4SDL.dev
+ - Go to "Tools" -> "Package Manager"
+ - Click on the "Install" button in the toolbar
+ - Select "SDL-1.2.13-1chaos.DevPak" (where ever you saved it)
+ - Some "Next" buttons and a "Finish" button later...
+ - Click on the "Install" button in the toolbar
+ - Select "SDL_mixer-1.2.6-2mol.DevPak" (where ever you saved it)
+ - Some "Next" buttons and a "Finish" button later...
+ - Close the Package Manager
+
+Data file setup:
+ - Copy the data files (e.g. *.WL6) you want to use to the Wolf4SDL
+ source code folder
+ - If you want to use the data files of the full Activision version of
+ Wolfenstein 3D v1.4, you can just skip to the next section
+ - Otherwise open "version.h" and comment/uncomment the definitions
+ according to the description given in this file
+
+Compiling Wolf4SDL:
+ - Compile via "Execute" -> "Compile"
+ - No errors should be displayed
+ - Run Wolf4SDL via "Execute" -> "Run"
+
+Troubleshooting:
+ - If you get an error message "undefined reference to `__cpu_features_init'",
+ make sure, there is no c:\mingw folder. Otherwise Dev-C++ will mix different
+ versions of MinGW libraries...
diff --git a/apps/plugins/sdl/progs/wolf3d/README.txt b/apps/plugins/sdl/progs/wolf3d/README.txt
new file mode 100644
index 0000000000..c6683ec543
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/README.txt
@@ -0,0 +1,224 @@
+Wolf4SDL by Moritz "Ripper" Kroll (http://www.chaos-software.de.vu)
+Original Wolfenstein 3D by id Software (http://www.idsoftware.com)
+=============================================================================
+
+Wolf4SDL is an open-source port of id Software's classic first-person shooter
+Wolfenstein 3D to the cross-plattform multimedia library "Simple DirectMedia
+Layer (SDL)" (http://www.libsdl.org). It is meant to keep the original feel
+while taking advantage of some improvements mentioned in the list below.
+
+
+Main features:
+--------------
+
+ - Cross-plattform:
+ Supported operating systems are at least:
+ - Windows 98, Windows ME, Windows 2000, Windows XP, Windows Vista
+ (32 and 64 bit), Windows 7 (32 and 64 bit)
+ - Linux
+ - BSD variants
+ - Mac OS X (x86)
+ - KallistiOS (used for Dreamcast)
+ Only little endian platforms like x86, ARM and SH-4 are supported, yet.
+
+ - AdLib sounds and music:
+ This port includes the OPL2 emulator from MAME, so you can not only
+ hear the AdLib sounds but also music without any AdLib-compatible
+ soundcard in near to perfect quality!
+
+ - Multichannel digitized sounds:
+ Digitized sounds play on 8 channels! So in a fire fight you will
+ always hear, when a guard opens the door behind you ;)
+
+ - Higher screen resolutions:
+ Aside from the original 320x200 resolution, Wolf4SDL currently
+ supports any resolutions being multiples of 320x200 or 320x240,
+ the default being 640x400.
+ Unlike some other ports, Wolf4SDL does NOT apply any bilinear
+ or similar filtering, so the graphics are NOT blurred but
+ pixelated just as we love it.
+
+ - Fully playable with only a game controller:
+ Wolf4SDL can be played completely without a keyboard. At least two
+ buttons are required (shoot/YES and open door/NO), but five or more
+ are recommended (run, strafe, ESC).
+
+Additional features:
+--------------------
+
+ - Two additional view sizes:
+ Wolf4SDL supports one view size using the full width of the screen
+ and showing the status bar, like in Mac-enstein, and one view size
+ filling the whole screen (press TAB to see the status bar).
+
+ - (Nearly) unlimited sound and song lengths:
+ Mod developers are not restricted to 64kB for digitized sounds and
+ IMF songs anymore, so longer songs and digitized sounds with better
+ quality are possible.
+
+ - Resuming ingame music:
+ When you come back to the game from the menu or load a save game, the
+ music will be resumed where it was suspended rather than started from
+ the beginning.
+
+ - Freely movable pushwalls:
+ Moving pushwalls can be viewed from all sides, allowing mod developers
+ to place them with fewer restrictions. The player can also follow the
+ pushwall directly instead of having to wait until the pushwall has left
+ a whole tile.
+
+ - Optional integrated features for mod developers:
+ Wolf4SDL already contains the shading, directional 3D sprites,
+ floor and ceiling textures, high resolution textures/sprites,
+ parallax sky, cloud sky and outside atmosphere features, which
+ can be easily activated in version.h.
+
+
+The following versions of Wolfenstein 3D data files are currently supported
+by the source code (choose the version by commenting/uncommenting lines in
+version.h as described in that file):
+
+ - Wolfenstein 3D v1.1 full Apogee
+ - Wolfenstein 3D v1.4 full Apogee (not tested)
+ - Wolfenstein 3D v1.4 full GT/ID/Activision
+ - Wolfenstein 3D v1.0 shareware Apogee
+ - Wolfenstein 3D v1.1 shareware Apogee
+ - Wolfenstein 3D v1.2 shareware Apogee
+ - Wolfenstein 3D v1.4 shareware
+ - Spear of Destiny full
+ - Spear of Destiny demo
+ - Spear of Destiny - Mission 2: Return to Danger (not tested)
+ - Spear of Destiny - Mission 3: Ultimate Challenge (not tested)
+
+
+How to play:
+------------
+
+To play Wolfenstein 3D with Wolf4SDL, you just have to copy the original data
+files (e.g. *.WL6) into the same directory as the Wolf4SDL executable.
+Please make sure, that you use the correct version of the executable with the
+according data files version as the differences are hardcoded into the binary!
+
+On Windows SDL.dll and SDL_mixer.dll must also be copied into this directory.
+They are also available at http://www.chaos-software.de.vu
+
+If you play in windowed mode (--windowed parameter), press SCROLLLOCK or F12
+to grab the mouse. Press it again to release the mouse.
+
+
+Usage:
+------
+
+Wolf4SDL supports the following command line options:
+ --help This help page
+ --tedlevel <level> Starts the game in the given level
+ --baby Sets the difficulty to baby for tedlevel
+ --easy Sets the difficulty to easy for tedlevel
+ --normal Sets the difficulty to normal for tedlevel
+ --hard Sets the difficulty to hard for tedlevel
+ --nowait Skips intro screens
+ --windowed[-mouse] Starts the game in a window [and grabs mouse]
+ --res <width> <height> Sets the screen resolution
+ (must be multiple of 320x200 or 320x240)
+ --resf <w> <h> Sets any screen resolution >= 320x200
+ (which may result in graphic errors)
+ --bits <b> Sets the screen color depth
+ (Use this when you have palette/fading problem
+ or perhaps to optimize speed on old systems.
+ Allowed: 8, 16, 24, 32, default: "best" depth)
+ --nodblbuf Don't use SDL's double buffering
+ --extravbls <vbls> Sets a delay after each frame, which may help to
+ reduce flickering (SDL does not support vsync...)
+ (unit is currently 8 ms, default: 0)
+ --joystick <index> Use the index-th joystick if available
+ --joystickhat <index> Enables movement with the given coolie hat
+ --samplerate <rate> Sets the sound sample rate (given in Hz)
+ --audiobuffer <size> Sets the size of the audio buffer (-> sound latency)
+ (given in bytes)
+ --ignorenumchunks Ignores the number of chunks in VGAHEAD.*
+ (may be useful for some broken mods)
+ --configdir <dir> Directory where config file and save games are stored
+ (Windows default: current directory,
+ others: $HOME/.wolf4sdl)
+
+For Spear of Destiny the following additional options are available:
+ --mission <mission> Mission number to play (1-3)
+ --goodtimes Disable copy protection quiz
+
+
+Compiling from source code:
+---------------------------
+
+The current version of the source code is available in the svn repository at:
+ svn://tron.homeunix.org:3690/wolf3d/trunk
+
+The following ways of compiling the source code are supported:
+ - Makefile (for Linux, BSD variants and MinGW/MSYS)
+ - Visual C++ 2008 (Wolf4SDL.VC9.sln and Wolf4SDL.VC9.vcproj)
+ - Visual C++ 2005 (Wolf4SDL.sln and Wolf4SDL.vcproj)
+ - Visual C++ 6 (Wolf4SDL.dsw and Wolf4SDL.dsp)
+ - Code::Blocks 8.02 (Wolf4SDL.cbp)
+ - Dev-C++ 5.0 Beta 9.2 (4.9.9.2) (Wolf4SDL.dev) (see README-devcpp.txt)
+ - Xcode (for Mac OS X, macosx/Wolf4SDL.xcodeproj/project.pbxproj)
+ - Special compiling for Dreamcast (see README-dc.txt)
+ - Special compiling for GP2X (see README-GP2X.txt)
+
+To compile the source code you need the development libraries of
+ - SDL (http://www.libsdl.org/download-1.2.php) and
+ - SDL_mixer (http://www.libsdl.org/projects/SDL_mixer/)
+and have to adjust the include and library paths in the projects accordingly.
+
+Please note, that there is no official SDL_mixer development pack for MinGW,
+yet, but you can get the needed files from a Dev-C++ package here:
+http://sourceforge.net/project/showfiles.php?group_id=94270&package_id=151751
+Just rename the file extension from ".devpack" to ".tar.bz2" and unpack it
+with for example WinRAR. Then add the directories include/SDL and lib to the
+according search paths in your project.
+
+IMPORTANT: Do not forget to take care of version.h!
+ By default it compiles for "Wolfenstein 3D v1.4 full GT/ID/Activision"!
+
+
+TODOs:
+------
+
+ - Add PC speaker emulation
+ - Center non-ingame screens for resolutions being a multiple of 320x240
+ - Add support for any graphic resolution >= 320x200
+
+
+Known bugs:
+-----------
+
+ - None! ;D
+
+
+Troubleshooting:
+----------------
+
+ - If your frame rate is low, consider using the original screen resolution
+ (--res 320 200) or lowering the sound quality (--samplerate 22050)
+
+
+Credits:
+--------
+
+ - Special thanks to id Software! Without the source code we would still have
+ to pelt Wolfenstein 3D with hex editors and disassemblers ;D
+ - Special thanks to the MAME developer team for providing the source code
+ of the OPL2 emulator!
+ - Many thanks to "Der Tron" for hosting the svn repository, making Wolf4SDL
+ FreeBSD compatible, testing, bugfixing and cleaning up the code!
+ - Thanks to Chris for his improvements on Wolf4GW, on which Wolf4SDL bases.
+ - Thanks to Pickle for the GP2X support and help on 320x240 support
+ - Thanks to fackue for the Dreamcast support
+ - Thanks to Chris Ballinger for the Mac OS X support
+ - Thanks to Xilinx, Inc. for providing a list of maximum-length LFSR counters
+ used for higher resolutions of fizzle fade
+
+
+Licenses:
+---------
+
+ - The original source code of Wolfenstein 3D: license-id.txt
+ - The OPL2 emulator (fmopl.cpp): license-mame.txt
diff --git a/apps/plugins/sdl/progs/wolf3d/audiosod.h b/apps/plugins/sdl/progs/wolf3d/audiosod.h
new file mode 100644
index 0000000000..1798ed4061
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/audiosod.h
@@ -0,0 +1,142 @@
+/////////////////////////////////////////////////
+//
+// MUSE Header for .SOD
+// Created Thu Aug 13 09:25:58 1992
+//
+/////////////////////////////////////////////////
+
+#define NUMSOUNDS 81
+#define NUMSNDCHUNKS 267
+
+//
+// Sound names & indexes
+//
+typedef enum {
+ HITWALLSND, // 0
+ MISSILEHITSND, // 1
+ SELECTITEMSND, // 2
+ GHOSTSIGHTSND, // 3
+ MOVEGUN2SND, // 4
+ MOVEGUN1SND, // 5
+ NOWAYSND, // 6
+ NAZIHITPLAYERSND, // 7
+ MISSILEFIRESND, // 8
+ PLAYERDEATHSND, // 9
+ DOGDEATHSND, // 10
+ ATKGATLINGSND, // 11
+ GETKEYSND, // 12
+ NOITEMSND, // 13
+ WALK1SND, // 14
+ WALK2SND, // 15
+ TAKEDAMAGESND, // 16
+ GAMEOVERSND, // 17
+ OPENDOORSND, // 18
+ CLOSEDOORSND, // 19
+ DONOTHINGSND, // 20
+ HALTSND, // 21
+ DEATHSCREAM2SND, // 22
+ ATKKNIFESND, // 23
+ ATKPISTOLSND, // 24
+ DEATHSCREAM3SND, // 25
+ ATKMACHINEGUNSND, // 26
+ HITENEMYSND, // 27
+ SHOOTDOORSND, // 28
+ DEATHSCREAM1SND, // 29
+ GETMACHINESND, // 30
+ GETAMMOSND, // 31
+ SHOOTSND, // 32
+ HEALTH1SND, // 33
+ HEALTH2SND, // 34
+ BONUS1SND, // 35
+ BONUS2SND, // 36
+ BONUS3SND, // 37
+ GETGATLINGSND, // 38
+ ESCPRESSEDSND, // 39
+ LEVELDONESND, // 40
+ DOGBARKSND, // 41
+ ENDBONUS1SND, // 42
+ ENDBONUS2SND, // 43
+ BONUS1UPSND, // 44
+ BONUS4SND, // 45
+ PUSHWALLSND, // 46
+ NOBONUSSND, // 47
+ PERCENT100SND, // 48
+ BOSSACTIVESND, // 49
+ DEATHSCREAM4SND, // 50
+ SCHUTZADSND, // 51
+ AHHHGSND, // 52
+ DEATHSCREAM5SND, // 53
+ DEATHSCREAM7SND, // 54
+ DEATHSCREAM8SND, // 55
+ LEBENSND, // 56
+ DEATHSCREAM6SND, // 57
+ NAZIFIRESND, // 58
+ BOSSFIRESND, // 59
+ SSFIRESND, // 60
+ SLURPIESND, // 61
+ GHOSTFADESND, // 62
+ DEATHSCREAM9SND, // 63
+ GETAMMOBOXSND, // 64
+ ANGELSIGHTSND, // 65
+ SPIONSND, // 66
+ NEINSOVASSND, // 67
+ DOGATTACKSND, // 68
+ ANGELFIRESND, // 69
+ TRANSSIGHTSND, // 70
+ TRANSDEATHSND, // 71
+ WILHELMSIGHTSND, // 72
+ WILHELMDEATHSND, // 73
+ UBERDEATHSND, // 74
+ KNIGHTSIGHTSND, // 75
+ KNIGHTDEATHSND, // 76
+ ANGELDEATHSND, // 77
+ KNIGHTMISSILESND, // 78
+ GETSPEARSND, // 79
+ ANGELTIREDSND, // 80
+ LASTSOUND
+} soundnames;
+
+//
+// Base offsets
+//
+#define STARTPCSOUNDS 0
+#define STARTADLIBSOUNDS 81
+#define STARTDIGISOUNDS 162
+#define STARTMUSIC 243
+
+//
+// Music names & indexes
+//
+typedef enum {
+ XFUNKIE_MUS, // 0
+ DUNGEON_MUS, // 1
+ XDEATH_MUS, // 2
+ GETTHEM_MUS, // 3
+ XTIPTOE_MUS, // 4
+ GOINGAFT_MUS, // 5
+ URAHERO_MUS, // 6
+ XTHEEND_MUS, // 7
+ NAZI_OMI_MUS, // 8
+ POW_MUS, // 9
+ TWELFTH_MUS, // 10
+ SEARCHN_MUS, // 11
+ SUSPENSE_MUS, // 12
+ ZEROHOUR_MUS, // 13
+ WONDERIN_MUS, // 14
+ ULTIMATE_MUS, // 15
+ ENDLEVEL_MUS, // 16
+ XEVIL_MUS, // 17
+ XJAZNAZI_MUS, // 18
+ COPYPRO_MUS, // 19
+ XAWARD_MUS, // 20
+ XPUTIT_MUS, // 21
+ XGETYOU_MUS, // 22
+ XTOWER2_MUS, // 23
+ LASTMUSIC
+} musicnames;
+
+/////////////////////////////////////////////////
+//
+// Thanks for playing with MUSE!
+//
+/////////////////////////////////////////////////
diff --git a/apps/plugins/sdl/progs/wolf3d/audiowl6.h b/apps/plugins/sdl/progs/wolf3d/audiowl6.h
new file mode 100644
index 0000000000..a29248dac6
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/audiowl6.h
@@ -0,0 +1,153 @@
+/////////////////////////////////////////////////
+//
+// MUSE Header for .WL6
+// Created Tue Jul 14 15:04:53 1992
+//
+/////////////////////////////////////////////////
+
+//
+// Sound names & indexes
+//
+typedef enum {
+ HITWALLSND, // 0
+ SELECTWPNSND, // 1
+ SELECTITEMSND, // 2
+ HEARTBEATSND, // 3
+ MOVEGUN2SND, // 4
+ MOVEGUN1SND, // 5
+ NOWAYSND, // 6
+ NAZIHITPLAYERSND, // 7
+ SCHABBSTHROWSND, // 8
+ PLAYERDEATHSND, // 9
+ DOGDEATHSND, // 10
+ ATKGATLINGSND, // 11
+ GETKEYSND, // 12
+ NOITEMSND, // 13
+ WALK1SND, // 14
+ WALK2SND, // 15
+ TAKEDAMAGESND, // 16
+ GAMEOVERSND, // 17
+ OPENDOORSND, // 18
+ CLOSEDOORSND, // 19
+ DONOTHINGSND, // 20
+ HALTSND, // 21
+ DEATHSCREAM2SND, // 22
+ ATKKNIFESND, // 23
+ ATKPISTOLSND, // 24
+ DEATHSCREAM3SND, // 25
+ ATKMACHINEGUNSND, // 26
+ HITENEMYSND, // 27
+ SHOOTDOORSND, // 28
+ DEATHSCREAM1SND, // 29
+ GETMACHINESND, // 30
+ GETAMMOSND, // 31
+ SHOOTSND, // 32
+ HEALTH1SND, // 33
+ HEALTH2SND, // 34
+ BONUS1SND, // 35
+ BONUS2SND, // 36
+ BONUS3SND, // 37
+ GETGATLINGSND, // 38
+ ESCPRESSEDSND, // 39
+ LEVELDONESND, // 40
+ DOGBARKSND, // 41
+ ENDBONUS1SND, // 42
+ ENDBONUS2SND, // 43
+ BONUS1UPSND, // 44
+ BONUS4SND, // 45
+ PUSHWALLSND, // 46
+ NOBONUSSND, // 47
+ PERCENT100SND, // 48
+ BOSSACTIVESND, // 49
+ MUTTISND, // 50
+ SCHUTZADSND, // 51
+ AHHHGSND, // 52
+ DIESND, // 53
+ EVASND, // 54
+ GUTENTAGSND, // 55
+ LEBENSND, // 56
+ SCHEISTSND, // 57
+ NAZIFIRESND, // 58
+ BOSSFIRESND, // 59
+ SSFIRESND, // 60
+ SLURPIESND, // 61
+ TOT_HUNDSND, // 62
+ MEINGOTTSND, // 63
+ SCHABBSHASND, // 64
+ HITLERHASND, // 65
+ SPIONSND, // 66
+ NEINSOVASSND, // 67
+ DOGATTACKSND, // 68
+ FLAMETHROWERSND, // 69
+ MECHSTEPSND, // 70
+ GOOBSSND, // 71
+ YEAHSND, // 72
+#ifndef APOGEE_1_0
+ DEATHSCREAM4SND, // 73
+ DEATHSCREAM5SND, // 74
+ DEATHSCREAM6SND, // 75
+ DEATHSCREAM7SND, // 76
+ DEATHSCREAM8SND, // 77
+ DEATHSCREAM9SND, // 78
+ DONNERSND, // 79
+ EINESND, // 80
+ ERLAUBENSND, // 81
+ KEINSND, // 82
+ MEINSND, // 83
+ ROSESND, // 84
+ MISSILEFIRESND, // 85
+ MISSILEHITSND, // 86
+#endif
+ LASTSOUND
+} soundnames;
+
+//
+// Base offsets
+//
+#define STARTPCSOUNDS 0
+#define STARTADLIBSOUNDS LASTSOUND
+#define STARTDIGISOUNDS (2*LASTSOUND)
+#define STARTMUSIC (3*LASTSOUND)
+
+//
+// Music names & indexes
+//
+typedef enum {
+ CORNER_MUS, // 0
+ DUNGEON_MUS, // 1
+ WARMARCH_MUS, // 2
+ GETTHEM_MUS, // 3
+ HEADACHE_MUS, // 4
+ HITLWLTZ_MUS, // 5
+ INTROCW3_MUS, // 6
+ NAZI_NOR_MUS, // 7
+ NAZI_OMI_MUS, // 8
+ POW_MUS, // 9
+ SALUTE_MUS, // 10
+ SEARCHN_MUS, // 11
+ SUSPENSE_MUS, // 12
+ VICTORS_MUS, // 13
+ WONDERIN_MUS, // 14
+ FUNKYOU_MUS, // 15
+ ENDLEVEL_MUS, // 16
+ GOINGAFT_MUS, // 17
+ PREGNANT_MUS, // 18
+ ULTIMATE_MUS, // 19
+ NAZI_RAP_MUS, // 20
+ ZEROHOUR_MUS, // 21
+ TWELFTH_MUS, // 22
+ ROSTER_MUS, // 23
+ URAHERO_MUS, // 24
+ VICMARCH_MUS, // 25
+ PACMAN_MUS, // 26
+ LASTMUSIC
+} musicnames;
+
+#define NUMSOUNDS LASTSOUND
+#define NUMSNDCHUNKS (STARTMUSIC + LASTMUSIC)
+
+/////////////////////////////////////////////////
+//
+// Thanks for playing with MUSE!
+//
+/////////////////////////////////////////////////
diff --git a/apps/plugins/sdl/progs/wolf3d/f_spear.h b/apps/plugins/sdl/progs/wolf3d/f_spear.h
new file mode 100644
index 0000000000..8043d605fb
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/f_spear.h
@@ -0,0 +1,76 @@
+#define STR_ENDGAME1 "We owe you a great debt, Mr. Blazkowicz."
+#define STR_ENDGAME2 "You have served your country well."
+#define STR_ENDGAME3 "With the spear gone, the Allies will finally"
+#define STR_ENDGAME4 "by able to destroy Hitler..."
+
+#define STR_COPY1 "That's close, but not close enough to get"
+#define STR_COPY2 "you into the game."
+
+#define STR_COPY3 "Wow, you must have the early version of the"
+#define STR_COPY4 "manual with the totally false information in it."
+
+#define STR_COPY5 "I would let you into the game, but seeing"
+#define STR_COPY6 "as that was not at all the right answer..."
+
+#define STR_COPY7 "It's just too bad we can't get together on"
+#define STR_COPY8 "this one. Sorry."
+
+#define STR_COPY9 "Hey, you're just SO off base!"
+
+#define STR_COPY10 "You know, I once typed that myself when"
+#define STR_COPY11 "I was your age."
+
+#define STR_COPY12 "Nops. Zero points. Zugga."
+
+#define STR_COPY13 "Yeah...right."
+
+#define STR_COPY14 "You must like these quizzes."
+
+#define STR_COPY15 "Could be called \"PixelMeister\"?"
+
+#define STR_COPY16 "Might engineer some software?"
+
+#define STR_COPY17 "Would be found"
+#define STR_COPY18 "directing creatively?"
+
+#define STR_COPY19 "Might be found"
+#define STR_COPY20 "handling operations?"
+
+#define STR_COPY21 "Has a name familiar"
+#define STR_COPY22 "to your weatherman?"
+
+#define STR_NOPE1 "Welcome to the DOS prompt, pirate!"
+#define STR_NOPE2 "Eat hot DOS prompt, goober!"
+#define STR_NOPE3 "Ya know, this program doesn't cost that much."
+#define STR_NOPE4 "Hey...weren't you just AT this DOS prompt?"
+#define STR_NOPE5 "What's a nice user like you doin' at a DOS prompt like this?"
+#define STR_NOPE6 "Well, I'm sure you just \"misplaced\" the manual..."
+#define STR_NOPE7 "Run me again when you've boned up on your manual a bit."
+#define STR_NOPE8 "Nice try, but no Spear."
+#define STR_NOPE9 "That information is in the Spear of Destiny manual, by the way."
+
+#define STR_MISC1 "Under \"Killing the Enemy\", what"
+#define STR_MISC2 "type of enemy is pictured?"
+
+#define STR_MISC3 "How many eyelets are on B.J.'s"
+#define STR_MISC4 "boots? (see page 2)"
+
+#define STR_MISC5 "The word \"minister\" appears in"
+#define STR_MISC6 "what gray shape on page 2?"
+
+#define STR_MISC7 "How many bullets does B.J. have"
+#define STR_MISC8 "on the screen-shot in the middle"
+#define STR_MISC9 "of page 9?"
+
+#define STR_STAR "star"
+#define STR_DEBRIEF " DEBRIEFING\n SESSION\n"
+#define STR_ENEMY1 "Name the member of the"
+#define STR_ENEMY2 "enemy forces shown above"
+
+#define STR_CHECKMAN "CHECK YER MANUAL!"
+#define STR_MAN1 "Which manual page"
+#define STR_MAN2 "is the Options Menu"
+#define STR_MAN3 "function"
+#define STR_MAN4 "on?"
+
+#define STR_ID1 "Which member of Id Software:"
diff --git a/apps/plugins/sdl/progs/wolf3d/fmopl.h b/apps/plugins/sdl/progs/wolf3d/fmopl.h
new file mode 100644
index 0000000000..f6a9c13590
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/fmopl.h
@@ -0,0 +1,4 @@
+#define USE_GPL 1
+#if USE_GPL
+#include "fmopl_gpl.h"
+#endif
diff --git a/apps/plugins/sdl/progs/wolf3d/fmopl_gpl.c b/apps/plugins/sdl/progs/wolf3d/fmopl_gpl.c
new file mode 100644
index 0000000000..41178d6bd9
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/fmopl_gpl.c
@@ -0,0 +1,2565 @@
+/*
+ * Rockbox notes:
+ *
+ * This file is originally from the MAME project, from after their
+ * GPLv2 relicense. I (Franklin Wei) have made some modifications
+ * since then to make it work with the Wolf4SDL source. Notably, I
+ * corrected the behavior of YM3812Write() to write directly to the
+ * registers. Additionally, I fixed an unaligned write in OPL_CALC_CH
+ * which caused terrible output on ARM.
+ */
+
+// license:GPL-2.0+
+// copyright-holders:Jarek Burczynski,Tatsuyuki Satoh
+/*
+**
+** File: fmopl.c - software implementation of FM sound generator
+** types OPL and OPL2
+**
+** Copyright Jarek Burczynski (bujar at mame dot net)
+** Copyright Tatsuyuki Satoh , MultiArcadeMachineEmulator development
+**
+** Version 0.72
+**
+
+Revision History:
+
+04-08-2003 Jarek Burczynski:
+- removed BFRDY hack. BFRDY is busy flag, and it should be 0 only when the chip
+handles memory read/write or during the adpcm synthesis when the chip
+requests another byte of ADPCM data.
+
+24-07-2003 Jarek Burczynski:
+- added a small hack for Y8950 status BFRDY flag (bit 3 should be set after
+some (unknown) delay). Right now it's always set.
+
+14-06-2003 Jarek Burczynski:
+- implemented all of the status register flags in Y8950 emulation
+- renamed y8950_set_delta_t_memory() parameters from _rom_ to _mem_ since
+they can be either RAM or ROM
+
+08-10-2002 Jarek Burczynski (thanks to Dox for the YM3526 chip)
+- corrected ym3526_read() to always set bit 2 and bit 1
+to HIGH state - identical to ym3812_read (verified on real YM3526)
+
+04-28-2002 Jarek Burczynski:
+- binary exact Envelope Generator (verified on real YM3812);
+compared to YM2151: the EG clock is equal to internal_clock,
+rates are 2 times slower and volume resolution is one bit less
+- modified interface functions (they no longer return pointer -
+that's internal to the emulator now):
+- new wrapper functions for OPLCreate: ym3526_init(), ym3812_init() and y8950_init()
+- corrected 'off by one' error in feedback calculations (when feedback is off)
+- enabled waveform usage (credit goes to Vlad Romascanu and zazzal22)
+- speeded up noise generator calculations (Nicola Salmoria)
+
+03-24-2002 Jarek Burczynski (thanks to Dox for the YM3812 chip)
+Complete rewrite (all verified on real YM3812):
+- corrected sin_tab and tl_tab data
+- corrected operator output calculations
+- corrected waveform_select_enable register;
+simply: ignore all writes to waveform_select register when
+waveform_select_enable == 0 and do not change the waveform previously selected.
+- corrected KSR handling
+- corrected Envelope Generator: attack shape, Sustain mode and
+Percussive/Non-percussive modes handling
+- Envelope Generator rates are two times slower now
+- LFO amplitude (tremolo) and phase modulation (vibrato)
+- rhythm sounds phase generation
+- white noise generator (big thanks to Olivier Galibert for mentioning Berlekamp-Massey algorithm)
+- corrected key on/off handling (the 'key' signal is ORed from three sources: FM, rhythm and CSM)
+- funky details (like ignoring output of operator 1 in BD rhythm sound when connect == 1)
+
+12-28-2001 Acho A. Tang
+- reflected Delta-T EOS status on Y8950 status port.
+- fixed subscription range of attack/decay tables
+
+
+To do:
+add delay before key off in CSM mode (see CSMKeyControll)
+verify volume of the FM part on the Y8950
+*/
+
+#include "fmopl.h"
+
+
+
+/* output final shift */
+#if (OPL_SAMPLE_BITS==16)
+#define FINAL_SH (0)
+#define MAXOUT (+32767)
+#define MINOUT (-32768)
+#else
+#define FINAL_SH (8)
+#define MAXOUT (+127)
+#define MINOUT (-128)
+#endif
+
+
+#define FREQ_SH 16 /* 16.16 fixed point (frequency calculations) */
+#define EG_SH 16 /* 16.16 fixed point (EG timing) */
+#define LFO_SH 24 /* 8.24 fixed point (LFO calculations) */
+#define TIMER_SH 16 /* 16.16 fixed point (timers calculations) */
+
+#define FREQ_MASK ((1<<FREQ_SH)-1)
+
+/* envelope output entries */
+#define ENV_BITS 10
+#define ENV_LEN (1<<ENV_BITS)
+#define ENV_STEP (128.0/ENV_LEN)
+
+#define MAX_ATT_INDEX ((1<<(ENV_BITS-1))-1) /*511*/
+#define MIN_ATT_INDEX (0)
+
+/* sinwave entries */
+#define SIN_BITS 10
+#define SIN_LEN (1<<SIN_BITS)
+#define SIN_MASK (SIN_LEN-1)
+
+#define TL_RES_LEN (256) /* 8 bits addressing (real chip) */
+
+
+
+/* register number to channel number , slot offset */
+#define SLOT1 0
+#define SLOT2 1
+
+/* Envelope Generator phases */
+
+#define EG_ATT 4
+#define EG_DEC 3
+#define EG_SUS 2
+#define EG_REL 1
+#define EG_OFF 0
+
+
+/* save output as raw 16-bit sample */
+
+/*#define SAVE_SAMPLE*/
+
+#ifdef SAVE_SAMPLE
+static signed int acc_calc(signed int value)
+{
+ if (value>=0)
+ {
+ if (value < 0x0200)
+ return (value & ~0);
+ if (value < 0x0400)
+ return (value & ~1);
+ if (value < 0x0800)
+ return (value & ~3);
+ if (value < 0x1000)
+ return (value & ~7);
+ if (value < 0x2000)
+ return (value & ~15);
+ if (value < 0x4000)
+ return (value & ~31);
+ return (value & ~63);
+ }
+ /*else value < 0*/
+ if (value > -0x0200)
+ return (~abs(value) & ~0);
+ if (value > -0x0400)
+ return (~abs(value) & ~1);
+ if (value > -0x0800)
+ return (~abs(value) & ~3);
+ if (value > -0x1000)
+ return (~abs(value) & ~7);
+ if (value > -0x2000)
+ return (~abs(value) & ~15);
+ if (value > -0x4000)
+ return (~abs(value) & ~31);
+ return (~abs(value) & ~63);
+}
+
+
+static FILE *sample[1];
+#if 1 /*save to MONO file */
+#define SAVE_ALL_CHANNELS \
+ { signed int pom = acc_calc(lt); \
+ fputc((unsigned short)pom&0xff,sample[0]); \
+ fputc(((unsigned short)pom>>8)&0xff,sample[0]); \
+ }
+#else /*save to STEREO file */
+#define SAVE_ALL_CHANNELS \
+ { signed int pom = lt; \
+ fputc((unsigned short)pom&0xff,sample[0]); \
+ fputc(((unsigned short)pom>>8)&0xff,sample[0]); \
+ pom = rt; \
+ fputc((unsigned short)pom&0xff,sample[0]); \
+ fputc(((unsigned short)pom>>8)&0xff,sample[0]); \
+ }
+#endif
+#endif
+
+#define LOG_CYM_FILE 0
+static FILE * cymfile = NULL;
+
+
+
+#define OPL_TYPE_WAVESEL 0x01 /* waveform select */
+#define OPL_TYPE_ADPCM 0x02 /* DELTA-T ADPCM unit */
+#define OPL_TYPE_KEYBOARD 0x04 /* keyboard interface */
+#define OPL_TYPE_IO 0x08 /* I/O port */
+
+/* ---------- Generic interface section ---------- */
+#define OPL_TYPE_YM3526 (0)
+#define OPL_TYPE_YM3812 (OPL_TYPE_WAVESEL)
+#define OPL_TYPE_Y8950 (OPL_TYPE_ADPCM|OPL_TYPE_KEYBOARD|OPL_TYPE_IO)
+
+
+
+struct OPL_SLOT
+{
+ UINT32 ar; /* attack rate: AR<<2 */
+ UINT32 dr; /* decay rate: DR<<2 */
+ UINT32 rr; /* release rate:RR<<2 */
+ UINT8 KSR; /* key scale rate */
+ UINT8 ksl; /* keyscale level */
+ UINT8 ksr; /* key scale rate: kcode>>KSR */
+ UINT8 mul; /* multiple: mul_tab[ML] */
+
+ /* Phase Generator */
+ UINT32 Cnt; /* frequency counter */
+ UINT32 Incr; /* frequency counter step */
+ UINT8 FB; /* feedback shift value */
+ INT32 *connect1; /* slot1 output pointer */
+ INT32 op1_out[2]; /* slot1 output for feedback */
+ UINT8 CON; /* connection (algorithm) type */
+
+ /* Envelope Generator */
+ UINT8 eg_type; /* percussive/non-percussive mode */
+ UINT8 state; /* phase type */
+ UINT32 TL; /* total level: TL << 2 */
+ INT32 TLL; /* adjusted now TL */
+ INT32 volume; /* envelope counter */
+ UINT32 sl; /* sustain level: sl_tab[SL] */
+ UINT8 eg_sh_ar; /* (attack state) */
+ UINT8 eg_sel_ar; /* (attack state) */
+ UINT8 eg_sh_dr; /* (decay state) */
+ UINT8 eg_sel_dr; /* (decay state) */
+ UINT8 eg_sh_rr; /* (release state) */
+ UINT8 eg_sel_rr; /* (release state) */
+ UINT32 key; /* 0 = KEY OFF, >0 = KEY ON */
+
+ /* LFO */
+ UINT32 AMmask; /* LFO Amplitude Modulation enable mask */
+ UINT8 vib; /* LFO Phase Modulation enable flag (active high)*/
+
+ /* waveform select */
+ UINT16 wavetable;
+};
+
+typedef struct OPL_SLOT OPL_SLOT;
+
+struct OPL_CH
+{
+ OPL_SLOT SLOT[2];
+ /* phase generator state */
+ UINT32 block_fnum; /* block+fnum */
+ UINT32 fc; /* Freq. Increment base */
+ UINT32 ksl_base; /* KeyScaleLevel Base step */
+ UINT8 kcode; /* key code (for key scaling) */
+};
+
+typedef struct OPL_CH OPL_CH;
+
+/* OPL state */
+struct FM_OPL
+{
+ // moved to beginning to fix alignment
+ signed int phase_modulation __attribute__((aligned)); /* phase modulation input (SLOT 2) */
+ signed int output[1] __attribute__((aligned));
+
+ /* FM channel slots */
+ OPL_CH P_CH[9]; /* OPL/OPL2 chips have 9 channels*/
+
+ UINT32 eg_cnt; /* global envelope generator counter */
+ UINT32 eg_timer; /* global envelope generator counter works at frequency = chipclock/72 */
+ UINT32 eg_timer_add; /* step of eg_timer */
+ UINT32 eg_timer_overflow; /* envelope generator timer overlfows every 1 sample (on real chip) */
+
+ UINT8 rhythm; /* Rhythm mode */
+
+ UINT32 fn_tab[1024]; /* fnumber->increment counter */
+
+ /* LFO */
+ UINT32 LFO_AM;
+ INT32 LFO_PM;
+
+ UINT8 lfo_am_depth;
+ UINT8 lfo_pm_depth_range;
+ UINT32 lfo_am_cnt;
+ UINT32 lfo_am_inc;
+ UINT32 lfo_pm_cnt;
+ UINT32 lfo_pm_inc;
+
+ UINT32 noise_rng; /* 23 bit noise shift register */
+ UINT32 noise_p; /* current noise 'phase' */
+ UINT32 noise_f; /* current noise period */
+
+ UINT8 wavesel; /* waveform select enable flag */
+
+ UINT32 T[2]; /* timer counters */
+ UINT8 st[2]; /* timer enable */
+
+#if BUILD_Y8950
+ /* Delta-T ADPCM unit (Y8950) */
+
+ YM_DELTAT *deltat;
+
+ /* Keyboard and I/O ports interface */
+ UINT8 portDirection;
+ UINT8 portLatch;
+ OPL_PORTHANDLER_R porthandler_r;
+ OPL_PORTHANDLER_W porthandler_w;
+ void * port_param;
+ OPL_PORTHANDLER_R keyboardhandler_r;
+ OPL_PORTHANDLER_W keyboardhandler_w;
+ void * keyboard_param;
+#endif
+
+ /* external event callback handlers */
+ OPL_TIMERHANDLER timer_handler; /* TIMER handler */
+ void *TimerParam; /* TIMER parameter */
+ OPL_IRQHANDLER IRQHandler; /* IRQ handler */
+ void *IRQParam; /* IRQ parameter */
+ OPL_UPDATEHANDLER UpdateHandler;/* stream update handler */
+ void *UpdateParam; /* stream update parameter */
+
+ UINT8 type; /* chip type */
+ UINT8 address; /* address register */
+ UINT8 status; /* status flag */
+ UINT8 statusmask; /* status mask */
+ UINT8 mode; /* Reg.08 : CSM,notesel,etc. */
+
+ UINT32 clock; /* master clock (Hz) */
+ UINT32 rate; /* sampling rate (Hz) */
+ double freqbase; /* frequency base */
+ double TimerBase; /* Timer base time (==sampling time)*/
+ device_t *device;
+
+#if BUILD_Y8950
+ INT32 output_deltat[4]; /* for Y8950 DELTA-T, chip is mono, that 4 here is just for safety */
+#endif
+} __attribute__((aligned));
+
+typedef struct FM_OPL FM_OPL;
+
+/* mapping of register number (offset) to slot number used by the emulator */
+static const int slot_array[32]=
+{
+ 0, 2, 4, 1, 3, 5,-1,-1,
+ 6, 8,10, 7, 9,11,-1,-1,
+ 12,14,16,13,15,17,-1,-1,
+ -1,-1,-1,-1,-1,-1,-1,-1
+};
+
+/* key scale level */
+/* table is 3dB/octave , DV converts this into 6dB/octave */
+/* 0.1875 is bit 0 weight of the envelope counter (volume) expressed in the 'decibel' scale */
+#define DV (0.1875/2.0)
+static const UINT32 ksl_tab[8*16]=
+{
+ /* OCT 0 */
+ 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV,
+ 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV,
+ 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV,
+ 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV,
+ /* OCT 1 */
+ 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV,
+ 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV,
+ 0.000/DV, 0.750/DV, 1.125/DV, 1.500/DV,
+ 1.875/DV, 2.250/DV, 2.625/DV, 3.000/DV,
+ /* OCT 2 */
+ 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV,
+ 0.000/DV, 1.125/DV, 1.875/DV, 2.625/DV,
+ 3.000/DV, 3.750/DV, 4.125/DV, 4.500/DV,
+ 4.875/DV, 5.250/DV, 5.625/DV, 6.000/DV,
+ /* OCT 3 */
+ 0.000/DV, 0.000/DV, 0.000/DV, 1.875/DV,
+ 3.000/DV, 4.125/DV, 4.875/DV, 5.625/DV,
+ 6.000/DV, 6.750/DV, 7.125/DV, 7.500/DV,
+ 7.875/DV, 8.250/DV, 8.625/DV, 9.000/DV,
+ /* OCT 4 */
+ 0.000/DV, 0.000/DV, 3.000/DV, 4.875/DV,
+ 6.000/DV, 7.125/DV, 7.875/DV, 8.625/DV,
+ 9.000/DV, 9.750/DV,10.125/DV,10.500/DV,
+ 10.875/DV,11.250/DV,11.625/DV,12.000/DV,
+ /* OCT 5 */
+ 0.000/DV, 3.000/DV, 6.000/DV, 7.875/DV,
+ 9.000/DV,10.125/DV,10.875/DV,11.625/DV,
+ 12.000/DV,12.750/DV,13.125/DV,13.500/DV,
+ 13.875/DV,14.250/DV,14.625/DV,15.000/DV,
+ /* OCT 6 */
+ 0.000/DV, 6.000/DV, 9.000/DV,10.875/DV,
+ 12.000/DV,13.125/DV,13.875/DV,14.625/DV,
+ 15.000/DV,15.750/DV,16.125/DV,16.500/DV,
+ 16.875/DV,17.250/DV,17.625/DV,18.000/DV,
+ /* OCT 7 */
+ 0.000/DV, 9.000/DV,12.000/DV,13.875/DV,
+ 15.000/DV,16.125/DV,16.875/DV,17.625/DV,
+ 18.000/DV,18.750/DV,19.125/DV,19.500/DV,
+ 19.875/DV,20.250/DV,20.625/DV,21.000/DV
+};
+#undef DV
+
+/* 0 / 3.0 / 1.5 / 6.0 dB/OCT */
+static const UINT32 ksl_shift[4] = { 31, 1, 2, 0 };
+
+
+/* sustain level table (3dB per step) */
+/* 0 - 15: 0, 3, 6, 9,12,15,18,21,24,27,30,33,36,39,42,93 (dB)*/
+#define SC(db) (UINT32) ( db * (2.0/ENV_STEP) )
+static const UINT32 sl_tab[16]={
+ SC( 0),SC( 1),SC( 2),SC(3 ),SC(4 ),SC(5 ),SC(6 ),SC( 7),
+ SC( 8),SC( 9),SC(10),SC(11),SC(12),SC(13),SC(14),SC(31)
+};
+#undef SC
+
+
+#define RATE_STEPS (8)
+static const unsigned char eg_inc[15*RATE_STEPS]={
+/*cycle:0 1 2 3 4 5 6 7*/
+
+ /* 0 */ 0,1, 0,1, 0,1, 0,1, /* rates 00..12 0 (increment by 0 or 1) */
+ /* 1 */ 0,1, 0,1, 1,1, 0,1, /* rates 00..12 1 */
+ /* 2 */ 0,1, 1,1, 0,1, 1,1, /* rates 00..12 2 */
+ /* 3 */ 0,1, 1,1, 1,1, 1,1, /* rates 00..12 3 */
+
+ /* 4 */ 1,1, 1,1, 1,1, 1,1, /* rate 13 0 (increment by 1) */
+ /* 5 */ 1,1, 1,2, 1,1, 1,2, /* rate 13 1 */
+ /* 6 */ 1,2, 1,2, 1,2, 1,2, /* rate 13 2 */
+ /* 7 */ 1,2, 2,2, 1,2, 2,2, /* rate 13 3 */
+
+ /* 8 */ 2,2, 2,2, 2,2, 2,2, /* rate 14 0 (increment by 2) */
+ /* 9 */ 2,2, 2,4, 2,2, 2,4, /* rate 14 1 */
+ /*10 */ 2,4, 2,4, 2,4, 2,4, /* rate 14 2 */
+ /*11 */ 2,4, 4,4, 2,4, 4,4, /* rate 14 3 */
+
+ /*12 */ 4,4, 4,4, 4,4, 4,4, /* rates 15 0, 15 1, 15 2, 15 3 (increment by 4) */
+ /*13 */ 8,8, 8,8, 8,8, 8,8, /* rates 15 2, 15 3 for attack */
+ /*14 */ 0,0, 0,0, 0,0, 0,0, /* infinity rates for attack and decay(s) */
+};
+
+
+#define O(a) (a*RATE_STEPS)
+
+/*note that there is no O(13) in this table - it's directly in the code */
+static const unsigned char eg_rate_select[16+64+16]={ /* Envelope Generator rates (16 + 64 rates + 16 RKS) */
+/* 16 infinite time rates */
+ O(14),O(14),O(14),O(14),O(14),O(14),O(14),O(14),
+ O(14),O(14),O(14),O(14),O(14),O(14),O(14),O(14),
+
+/* rates 00-12 */
+ O( 0),O( 1),O( 2),O( 3),
+ O( 0),O( 1),O( 2),O( 3),
+ O( 0),O( 1),O( 2),O( 3),
+ O( 0),O( 1),O( 2),O( 3),
+ O( 0),O( 1),O( 2),O( 3),
+ O( 0),O( 1),O( 2),O( 3),
+ O( 0),O( 1),O( 2),O( 3),
+ O( 0),O( 1),O( 2),O( 3),
+ O( 0),O( 1),O( 2),O( 3),
+ O( 0),O( 1),O( 2),O( 3),
+ O( 0),O( 1),O( 2),O( 3),
+ O( 0),O( 1),O( 2),O( 3),
+ O( 0),O( 1),O( 2),O( 3),
+
+/* rate 13 */
+ O( 4),O( 5),O( 6),O( 7),
+
+/* rate 14 */
+ O( 8),O( 9),O(10),O(11),
+
+/* rate 15 */
+ O(12),O(12),O(12),O(12),
+
+/* 16 dummy rates (same as 15 3) */
+ O(12),O(12),O(12),O(12),O(12),O(12),O(12),O(12),
+ O(12),O(12),O(12),O(12),O(12),O(12),O(12),O(12),
+
+};
+#undef O
+
+/*rate 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 */
+/*shift 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, 0, 0 */
+/*mask 4095, 2047, 1023, 511, 255, 127, 63, 31, 15, 7, 3, 1, 0, 0, 0, 0 */
+
+#define O(a) (a*1)
+static const unsigned char eg_rate_shift[16+64+16]={ /* Envelope Generator counter shifts (16 + 64 rates + 16 RKS) */
+/* 16 infinite time rates */
+ O(0),O(0),O(0),O(0),O(0),O(0),O(0),O(0),
+ O(0),O(0),O(0),O(0),O(0),O(0),O(0),O(0),
+
+/* rates 00-12 */
+ O(12),O(12),O(12),O(12),
+ O(11),O(11),O(11),O(11),
+ O(10),O(10),O(10),O(10),
+ O( 9),O( 9),O( 9),O( 9),
+ O( 8),O( 8),O( 8),O( 8),
+ O( 7),O( 7),O( 7),O( 7),
+ O( 6),O( 6),O( 6),O( 6),
+ O( 5),O( 5),O( 5),O( 5),
+ O( 4),O( 4),O( 4),O( 4),
+ O( 3),O( 3),O( 3),O( 3),
+ O( 2),O( 2),O( 2),O( 2),
+ O( 1),O( 1),O( 1),O( 1),
+ O( 0),O( 0),O( 0),O( 0),
+
+/* rate 13 */
+ O( 0),O( 0),O( 0),O( 0),
+
+/* rate 14 */
+ O( 0),O( 0),O( 0),O( 0),
+
+/* rate 15 */
+ O( 0),O( 0),O( 0),O( 0),
+
+/* 16 dummy rates (same as 15 3) */
+ O( 0),O( 0),O( 0),O( 0),O( 0),O( 0),O( 0),O( 0),
+ O( 0),O( 0),O( 0),O( 0),O( 0),O( 0),O( 0),O( 0),
+
+};
+#undef O
+
+
+/* multiple table */
+#define ML 2
+static const UINT8 mul_tab[16]= {
+/* 1/2, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,10,12,12,15,15 */
+ ML/2, 1*ML, 2*ML, 3*ML, 4*ML, 5*ML, 6*ML, 7*ML,
+ 8*ML, 9*ML,10*ML,10*ML,12*ML,12*ML,15*ML,15*ML
+};
+#undef ML
+
+/* TL_TAB_LEN is calculated as:
+ * 12 - sinus amplitude bits (Y axis)
+ * 2 - sinus sign bit (Y axis)
+ * TL_RES_LEN - sinus resolution (X axis)
+ */
+#define TL_TAB_LEN (12*2*TL_RES_LEN)
+static signed int tl_tab[TL_TAB_LEN];
+
+#define ENV_QUIET (TL_TAB_LEN>>4)
+
+/* sin waveform table in 'decibel' scale */
+/* four waveforms on OPL2 type chips */
+static unsigned int sin_tab[SIN_LEN * 4];
+
+
+/* LFO Amplitude Modulation table (verified on real YM3812)
+ 27 output levels (triangle waveform); 1 level takes one of: 192, 256 or 448 samples
+
+ Length: 210 elements.
+
+ Each of the elements has to be repeated
+ exactly 64 times (on 64 consecutive samples).
+ The whole table takes: 64 * 210 = 13440 samples.
+
+ When AM = 1 data is used directly
+ When AM = 0 data is divided by 4 before being used (losing precision is important)
+*/
+
+#define LFO_AM_TAB_ELEMENTS 210
+
+static const UINT8 lfo_am_table[LFO_AM_TAB_ELEMENTS] = {
+ 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,
+ 6,6,6,6,
+ 7,7,7,7,
+ 8,8,8,8,
+ 9,9,9,9,
+ 10,10,10,10,
+ 11,11,11,11,
+ 12,12,12,12,
+ 13,13,13,13,
+ 14,14,14,14,
+ 15,15,15,15,
+ 16,16,16,16,
+ 17,17,17,17,
+ 18,18,18,18,
+ 19,19,19,19,
+ 20,20,20,20,
+ 21,21,21,21,
+ 22,22,22,22,
+ 23,23,23,23,
+ 24,24,24,24,
+ 25,25,25,25,
+ 26,26,26,
+ 25,25,25,25,
+ 24,24,24,24,
+ 23,23,23,23,
+ 22,22,22,22,
+ 21,21,21,21,
+ 20,20,20,20,
+ 19,19,19,19,
+ 18,18,18,18,
+ 17,17,17,17,
+ 16,16,16,16,
+ 15,15,15,15,
+ 14,14,14,14,
+ 13,13,13,13,
+ 12,12,12,12,
+ 11,11,11,11,
+ 10,10,10,10,
+ 9,9,9,9,
+ 8,8,8,8,
+ 7,7,7,7,
+ 6,6,6,6,
+ 5,5,5,5,
+ 4,4,4,4,
+ 3,3,3,3,
+ 2,2,2,2,
+ 1,1,1,1
+};
+
+/* LFO Phase Modulation table (verified on real YM3812) */
+static const INT8 lfo_pm_table[8*8*2] = {
+/* FNUM2/FNUM = 00 0xxxxxxx (0x0000) */
+ 0, 0, 0, 0, 0, 0, 0, 0, /*LFO PM depth = 0*/
+ 0, 0, 0, 0, 0, 0, 0, 0, /*LFO PM depth = 1*/
+
+/* FNUM2/FNUM = 00 1xxxxxxx (0x0080) */
+ 0, 0, 0, 0, 0, 0, 0, 0, /*LFO PM depth = 0*/
+ 1, 0, 0, 0,-1, 0, 0, 0, /*LFO PM depth = 1*/
+
+/* FNUM2/FNUM = 01 0xxxxxxx (0x0100) */
+ 1, 0, 0, 0,-1, 0, 0, 0, /*LFO PM depth = 0*/
+ 2, 1, 0,-1,-2,-1, 0, 1, /*LFO PM depth = 1*/
+
+/* FNUM2/FNUM = 01 1xxxxxxx (0x0180) */
+ 1, 0, 0, 0,-1, 0, 0, 0, /*LFO PM depth = 0*/
+ 3, 1, 0,-1,-3,-1, 0, 1, /*LFO PM depth = 1*/
+
+/* FNUM2/FNUM = 10 0xxxxxxx (0x0200) */
+ 2, 1, 0,-1,-2,-1, 0, 1, /*LFO PM depth = 0*/
+ 4, 2, 0,-2,-4,-2, 0, 2, /*LFO PM depth = 1*/
+
+/* FNUM2/FNUM = 10 1xxxxxxx (0x0280) */
+ 2, 1, 0,-1,-2,-1, 0, 1, /*LFO PM depth = 0*/
+ 5, 2, 0,-2,-5,-2, 0, 2, /*LFO PM depth = 1*/
+
+/* FNUM2/FNUM = 11 0xxxxxxx (0x0300) */
+ 3, 1, 0,-1,-3,-1, 0, 1, /*LFO PM depth = 0*/
+ 6, 3, 0,-3,-6,-3, 0, 3, /*LFO PM depth = 1*/
+
+/* FNUM2/FNUM = 11 1xxxxxxx (0x0380) */
+ 3, 1, 0,-1,-3,-1, 0, 1, /*LFO PM depth = 0*/
+ 7, 3, 0,-3,-7,-3, 0, 3 /*LFO PM depth = 1*/
+};
+
+
+/* lock level of common table */
+static int num_lock = 0;
+
+
+#define SLOT7_1 (&OPL->P_CH[7].SLOT[SLOT1])
+#define SLOT7_2 (&OPL->P_CH[7].SLOT[SLOT2])
+#define SLOT8_1 (&OPL->P_CH[8].SLOT[SLOT1])
+#define SLOT8_2 (&OPL->P_CH[8].SLOT[SLOT2])
+
+
+
+
+static int limit( int val, int max, int min ) {
+ if ( val > max )
+ val = max;
+ else if ( val < min )
+ val = min;
+
+ return val;
+}
+
+
+/* status set and IRQ handling */
+static void OPL_STATUS_SET(FM_OPL *OPL,int flag)
+{
+ /* set status flag */
+ OPL->status |= flag;
+ if(!(OPL->status & 0x80))
+ {
+ if(OPL->status & OPL->statusmask)
+ { /* IRQ on */
+ OPL->status |= 0x80;
+ /* callback user interrupt handler (IRQ is OFF to ON) */
+ if(OPL->IRQHandler) (OPL->IRQHandler)(OPL->IRQParam,1);
+ }
+ }
+}
+
+/* status reset and IRQ handling */
+static void OPL_STATUS_RESET(FM_OPL *OPL,int flag)
+{
+ /* reset status flag */
+ OPL->status &=~flag;
+ if((OPL->status & 0x80))
+ {
+ if (!(OPL->status & OPL->statusmask) )
+ {
+ OPL->status &= 0x7f;
+ /* callback user interrupt handler (IRQ is ON to OFF) */
+ if(OPL->IRQHandler) (OPL->IRQHandler)(OPL->IRQParam,0);
+ }
+ }
+}
+
+/* IRQ mask set */
+static void OPL_STATUSMASK_SET(FM_OPL *OPL,int flag)
+{
+ OPL->statusmask = flag;
+ /* IRQ handling check */
+ OPL_STATUS_SET(OPL,0);
+ OPL_STATUS_RESET(OPL,0);
+}
+
+
+/* advance LFO to next sample */
+static void advance_lfo(FM_OPL *OPL)
+{
+ UINT8 tmp;
+
+ /* LFO */
+ OPL->lfo_am_cnt += OPL->lfo_am_inc;
+// if (OPL->lfo_am_cnt >= ((UINT32)LFO_AM_TAB_ELEMENTS<<LFO_SH) ) /* lfo_am_table is 210 elements long */
+// OPL->lfo_am_cnt -= ((UINT32)LFO_AM_TAB_ELEMENTS<<LFO_SH);
+ if (OPL->lfo_am_cnt >= (LFO_AM_TAB_ELEMENTS<<LFO_SH) ) /* lfo_am_table is 210 elements long */
+ OPL->lfo_am_cnt -= (LFO_AM_TAB_ELEMENTS<<LFO_SH);
+
+ tmp = lfo_am_table[ OPL->lfo_am_cnt >> LFO_SH ];
+
+ if (OPL->lfo_am_depth)
+ OPL->LFO_AM = tmp;
+ else
+ OPL->LFO_AM = tmp>>2;
+
+ OPL->lfo_pm_cnt += OPL->lfo_pm_inc;
+ OPL->LFO_PM = ((OPL->lfo_pm_cnt>>LFO_SH) & 7) | OPL->lfo_pm_depth_range;
+}
+
+/* advance to next sample */
+static void advance(FM_OPL *OPL)
+{
+ OPL_CH *CH;
+ OPL_SLOT *op;
+ int i;
+
+ OPL->eg_timer += OPL->eg_timer_add;
+
+ while (OPL->eg_timer >= OPL->eg_timer_overflow)
+ {
+ OPL->eg_timer -= OPL->eg_timer_overflow;
+
+ OPL->eg_cnt++;
+
+ for (i=0; i<9*2; i++)
+ {
+ CH = &OPL->P_CH[i/2];
+ op = &CH->SLOT[i&1];
+
+ /* Envelope Generator */
+ switch(op->state)
+ {
+ case EG_ATT: /* attack phase */
+ if ( !(OPL->eg_cnt & ((1<<op->eg_sh_ar)-1) ) )
+ {
+ op->volume += (~op->volume *
+ (eg_inc[op->eg_sel_ar + ((OPL->eg_cnt>>op->eg_sh_ar)&7)])
+ ) >>3;
+
+ if (op->volume <= MIN_ATT_INDEX)
+ {
+ op->volume = MIN_ATT_INDEX;
+ op->state = EG_DEC;
+ }
+
+ }
+ break;
+
+ case EG_DEC: /* decay phase */
+ if ( !(OPL->eg_cnt & ((1<<op->eg_sh_dr)-1) ) )
+ {
+ op->volume += eg_inc[op->eg_sel_dr + ((OPL->eg_cnt>>op->eg_sh_dr)&7)];
+
+ if ( (UINT32) op->volume >= op->sl )
+ op->state = EG_SUS;
+
+ }
+ break;
+
+ case EG_SUS: /* sustain phase */
+
+ /* this is important behaviour:
+ one can change percusive/non-percussive modes on the fly and
+ the chip will remain in sustain phase - verified on real YM3812 */
+
+ if(op->eg_type) /* non-percussive mode */
+ {
+ /* do nothing */
+ }
+ else /* percussive mode */
+ {
+ /* during sustain phase chip adds Release Rate (in percussive mode) */
+ if ( !(OPL->eg_cnt & ((1<<op->eg_sh_rr)-1) ) )
+ {
+ op->volume += eg_inc[op->eg_sel_rr + ((OPL->eg_cnt>>op->eg_sh_rr)&7)];
+
+ if ( op->volume >= MAX_ATT_INDEX )
+ op->volume = MAX_ATT_INDEX;
+ }
+ /* else do nothing in sustain phase */
+ }
+ break;
+
+ case EG_REL: /* release phase */
+ if ( !(OPL->eg_cnt & ((1<<op->eg_sh_rr)-1) ) )
+ {
+ op->volume += eg_inc[op->eg_sel_rr + ((OPL->eg_cnt>>op->eg_sh_rr)&7)];
+
+ if ( op->volume >= MAX_ATT_INDEX )
+ {
+ op->volume = MAX_ATT_INDEX;
+ op->state = EG_OFF;
+ }
+
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+ }
+
+ for (i=0; i<9*2; i++)
+ {
+ CH = &OPL->P_CH[i/2];
+ op = &CH->SLOT[i&1];
+
+ /* Phase Generator */
+ if(op->vib)
+ {
+ UINT8 block;
+ unsigned int block_fnum = CH->block_fnum;
+
+ unsigned int fnum_lfo = (block_fnum&0x0380) >> 7;
+
+ signed int lfo_fn_table_index_offset = lfo_pm_table[OPL->LFO_PM + 16*fnum_lfo ];
+
+ if (lfo_fn_table_index_offset) /* LFO phase modulation active */
+ {
+ block_fnum += lfo_fn_table_index_offset;
+ block = (block_fnum&0x1c00) >> 10;
+ op->Cnt += (OPL->fn_tab[block_fnum&0x03ff] >> (7-block)) * op->mul;
+ }
+ else /* LFO phase modulation = zero */
+ {
+ op->Cnt += op->Incr;
+ }
+ }
+ else /* LFO phase modulation disabled for this operator */
+ {
+ op->Cnt += op->Incr;
+ }
+ }
+
+ /* The Noise Generator of the YM3812 is 23-bit shift register.
+ * Period is equal to 2^23-2 samples.
+ * Register works at sampling frequency of the chip, so output
+ * can change on every sample.
+ *
+ * Output of the register and input to the bit 22 is:
+ * bit0 XOR bit14 XOR bit15 XOR bit22
+ *
+ * Simply use bit 22 as the noise output.
+ */
+
+ OPL->noise_p += OPL->noise_f;
+ i = OPL->noise_p >> FREQ_SH; /* number of events (shifts of the shift register) */
+ OPL->noise_p &= FREQ_MASK;
+ while (i)
+ {
+ /*
+ UINT32 j;
+ j = ( (OPL->noise_rng) ^ (OPL->noise_rng>>14) ^ (OPL->noise_rng>>15) ^ (OPL->noise_rng>>22) ) & 1;
+ OPL->noise_rng = (j<<22) | (OPL->noise_rng>>1);
+ */
+
+ /*
+ Instead of doing all the logic operations above, we
+ use a trick here (and use bit 0 as the noise output).
+ The difference is only that the noise bit changes one
+ step ahead. This doesn't matter since we don't know
+ what is real state of the noise_rng after the reset.
+ */
+
+ if (OPL->noise_rng & 1) OPL->noise_rng ^= 0x800302;
+ OPL->noise_rng >>= 1;
+
+ i--;
+ }
+}
+
+
+static signed int op_calc(UINT32 phase, unsigned int env, signed int pm, unsigned int wave_tab)
+{
+ UINT32 p;
+
+ p = (env<<4) + sin_tab[wave_tab + ((((signed int)((phase & ~FREQ_MASK) + (pm<<16))) >> FREQ_SH ) & SIN_MASK) ];
+
+ if (p >= TL_TAB_LEN)
+ return 0;
+ return tl_tab[p];
+}
+
+static signed int op_calc1(UINT32 phase, unsigned int env, signed int pm, unsigned int wave_tab)
+{
+ UINT32 p;
+
+ p = (env<<4) + sin_tab[wave_tab + ((((signed int)((phase & ~FREQ_MASK) + pm )) >> FREQ_SH ) & SIN_MASK) ];
+
+ if (p >= TL_TAB_LEN)
+ return 0;
+ return tl_tab[p];
+}
+
+
+#define volume_calc(OP) ((OP)->TLL + ((UINT32)(OP)->volume) + (OPL->LFO_AM & (OP)->AMmask))
+
+/* calculate output */
+static void OPL_CALC_CH( FM_OPL *OPL, OPL_CH *CH )
+{
+ OPL_SLOT *SLOT;
+ unsigned int env;
+ signed int out;
+
+ OPL->phase_modulation = 0;
+
+ /* SLOT 1 */
+ SLOT = &CH->SLOT[SLOT1];
+ env = volume_calc(SLOT);
+ out = SLOT->op1_out[0] + SLOT->op1_out[1];
+ SLOT->op1_out[0] = SLOT->op1_out[1];
+
+ //INT32 a;
+ //memcpy(&a, SLOT->connect1, sizeof(a));
+ //a += SLOT->op1_out[0];
+ //memcpy(SLOT->connect1, &a, sizeof(a));
+
+ *SLOT->connect1 += SLOT->op1_out[0]; // alignment issue on arm
+ SLOT->op1_out[1] = 0;
+ if( env < ENV_QUIET )
+ {
+ if (!SLOT->FB)
+ out = 0;
+ SLOT->op1_out[1] = op_calc1(SLOT->Cnt, env, (out<<SLOT->FB), SLOT->wavetable );
+ }
+ /* SLOT 2 */
+ SLOT++;
+ env = volume_calc(SLOT);
+ if( env < ENV_QUIET )
+ {
+ OPL->output[0] += op_calc(SLOT->Cnt, env, OPL->phase_modulation, SLOT->wavetable);
+ }
+}
+
+/*
+ operators used in the rhythm sounds generation process:
+
+ Envelope Generator:
+
+ channel operator register number Bass High Snare Tom Top
+ / slot number TL ARDR SLRR Wave Drum Hat Drum Tom Cymbal
+ 6 / 0 12 50 70 90 f0 +
+ 6 / 1 15 53 73 93 f3 +
+ 7 / 0 13 51 71 91 f1 +
+ 7 / 1 16 54 74 94 f4 +
+ 8 / 0 14 52 72 92 f2 +
+ 8 / 1 17 55 75 95 f5 +
+
+ Phase Generator:
+
+ channel operator register number Bass High Snare Tom Top
+ / slot number MULTIPLE Drum Hat Drum Tom Cymbal
+ 6 / 0 12 30 +
+ 6 / 1 15 33 +
+ 7 / 0 13 31 + + +
+ 7 / 1 16 34 ----- n o t u s e d -----
+ 8 / 0 14 32 +
+ 8 / 1 17 35 + +
+
+ channel operator register number Bass High Snare Tom Top
+ number number BLK/FNUM2 FNUM Drum Hat Drum Tom Cymbal
+ 6 12,15 B6 A6 +
+
+ 7 13,16 B7 A7 + + +
+
+ 8 14,17 B8 A8 + + +
+
+*/
+
+/* calculate rhythm */
+
+static void OPL_CALC_RH( FM_OPL *OPL, OPL_CH *CH, unsigned int noise )
+{
+ OPL_SLOT *SLOT;
+ signed int out;
+ unsigned int env;
+
+
+ /* Bass Drum (verified on real YM3812):
+ - depends on the channel 6 'connect' register:
+ when connect = 0 it works the same as in normal (non-rhythm) mode (op1->op2->out)
+ when connect = 1 _only_ operator 2 is present on output (op2->out), operator 1 is ignored
+ - output sample always is multiplied by 2
+ */
+
+ OPL->phase_modulation = 0;
+ /* SLOT 1 */
+ SLOT = &CH[6].SLOT[SLOT1];
+ env = volume_calc(SLOT);
+
+ out = SLOT->op1_out[0] + SLOT->op1_out[1];
+ SLOT->op1_out[0] = SLOT->op1_out[1];
+
+ if (!SLOT->CON)
+ OPL->phase_modulation = SLOT->op1_out[0];
+ /* else ignore output of operator 1 */
+
+ SLOT->op1_out[1] = 0;
+ if( env < ENV_QUIET )
+ {
+ if (!SLOT->FB)
+ out = 0;
+ SLOT->op1_out[1] = op_calc1(SLOT->Cnt, env, (out<<SLOT->FB), SLOT->wavetable );
+ }
+
+ /* SLOT 2 */
+ SLOT++;
+ env = volume_calc(SLOT);
+ if( env < ENV_QUIET )
+ OPL->output[0] += op_calc(SLOT->Cnt, env, OPL->phase_modulation, SLOT->wavetable) * 2;
+
+
+ /* Phase generation is based on: */
+ /* HH (13) channel 7->slot 1 combined with channel 8->slot 2 (same combination as TOP CYMBAL but different output phases) */
+ /* SD (16) channel 7->slot 1 */
+ /* TOM (14) channel 8->slot 1 */
+ /* TOP (17) channel 7->slot 1 combined with channel 8->slot 2 (same combination as HIGH HAT but different output phases) */
+
+ /* Envelope generation based on: */
+ /* HH channel 7->slot1 */
+ /* SD channel 7->slot2 */
+ /* TOM channel 8->slot1 */
+ /* TOP channel 8->slot2 */
+
+
+ /* The following formulas can be well optimized.
+ I leave them in direct form for now (in case I've missed something).
+ */
+
+ /* High Hat (verified on real YM3812) */
+ env = volume_calc(SLOT7_1);
+ if( env < ENV_QUIET )
+ {
+ /* high hat phase generation:
+ phase = d0 or 234 (based on frequency only)
+ phase = 34 or 2d0 (based on noise)
+ */
+
+ /* base frequency derived from operator 1 in channel 7 */
+ unsigned char bit7 = ((SLOT7_1->Cnt>>FREQ_SH)>>7)&1;
+ unsigned char bit3 = ((SLOT7_1->Cnt>>FREQ_SH)>>3)&1;
+ unsigned char bit2 = ((SLOT7_1->Cnt>>FREQ_SH)>>2)&1;
+
+ unsigned char res1 = (bit2 ^ bit7) | bit3;
+
+ /* when res1 = 0 phase = 0x000 | 0xd0; */
+ /* when res1 = 1 phase = 0x200 | (0xd0>>2); */
+ UINT32 phase = res1 ? (0x200|(0xd0>>2)) : 0xd0;
+
+ /* enable gate based on frequency of operator 2 in channel 8 */
+ unsigned char bit5e= ((SLOT8_2->Cnt>>FREQ_SH)>>5)&1;
+ unsigned char bit3e= ((SLOT8_2->Cnt>>FREQ_SH)>>3)&1;
+
+ unsigned char res2 = (bit3e ^ bit5e);
+
+ /* when res2 = 0 pass the phase from calculation above (res1); */
+ /* when res2 = 1 phase = 0x200 | (0xd0>>2); */
+ if (res2)
+ phase = (0x200|(0xd0>>2));
+
+
+ /* when phase & 0x200 is set and noise=1 then phase = 0x200|0xd0 */
+ /* when phase & 0x200 is set and noise=0 then phase = 0x200|(0xd0>>2), ie no change */
+ if (phase&0x200)
+ {
+ if (noise)
+ phase = 0x200|0xd0;
+ }
+ else
+ /* when phase & 0x200 is clear and noise=1 then phase = 0xd0>>2 */
+ /* when phase & 0x200 is clear and noise=0 then phase = 0xd0, ie no change */
+ {
+ if (noise)
+ phase = 0xd0>>2;
+ }
+
+ OPL->output[0] += op_calc(phase<<FREQ_SH, env, 0, SLOT7_1->wavetable) * 2;
+ }
+
+ /* Snare Drum (verified on real YM3812) */
+ env = volume_calc(SLOT7_2);
+ if( env < ENV_QUIET )
+ {
+ /* base frequency derived from operator 1 in channel 7 */
+ unsigned char bit8 = ((SLOT7_1->Cnt>>FREQ_SH)>>8)&1;
+
+ /* when bit8 = 0 phase = 0x100; */
+ /* when bit8 = 1 phase = 0x200; */
+ UINT32 phase = bit8 ? 0x200 : 0x100;
+
+ /* Noise bit XOR'es phase by 0x100 */
+ /* when noisebit = 0 pass the phase from calculation above */
+ /* when noisebit = 1 phase ^= 0x100; */
+ /* in other words: phase ^= (noisebit<<8); */
+ if (noise)
+ phase ^= 0x100;
+
+ OPL->output[0] += op_calc(phase<<FREQ_SH, env, 0, SLOT7_2->wavetable) * 2;
+ }
+
+ /* Tom Tom (verified on real YM3812) */
+ env = volume_calc(SLOT8_1);
+ if( env < ENV_QUIET )
+ OPL->output[0] += op_calc(SLOT8_1->Cnt, env, 0, SLOT8_1->wavetable) * 2;
+
+ /* Top Cymbal (verified on real YM3812) */
+ env = volume_calc(SLOT8_2);
+ if( env < ENV_QUIET )
+ {
+ /* base frequency derived from operator 1 in channel 7 */
+ unsigned char bit7 = ((SLOT7_1->Cnt>>FREQ_SH)>>7)&1;
+ unsigned char bit3 = ((SLOT7_1->Cnt>>FREQ_SH)>>3)&1;
+ unsigned char bit2 = ((SLOT7_1->Cnt>>FREQ_SH)>>2)&1;
+
+ unsigned char res1 = (bit2 ^ bit7) | bit3;
+
+ /* when res1 = 0 phase = 0x000 | 0x100; */
+ /* when res1 = 1 phase = 0x200 | 0x100; */
+ UINT32 phase = res1 ? 0x300 : 0x100;
+
+ /* enable gate based on frequency of operator 2 in channel 8 */
+ unsigned char bit5e= ((SLOT8_2->Cnt>>FREQ_SH)>>5)&1;
+ unsigned char bit3e= ((SLOT8_2->Cnt>>FREQ_SH)>>3)&1;
+
+ unsigned char res2 = (bit3e ^ bit5e);
+ /* when res2 = 0 pass the phase from calculation above (res1); */
+ /* when res2 = 1 phase = 0x200 | 0x100; */
+ if (res2)
+ phase = 0x300;
+
+ OPL->output[0] += op_calc(phase<<FREQ_SH, env, 0, SLOT8_2->wavetable) * 2;
+ }
+}
+
+
+/* generic table initialize */
+static int init_tables(void)
+{
+ signed int i,x;
+ signed int n;
+ double o,m;
+
+
+ for (x=0; x<TL_RES_LEN; x++)
+ {
+ m = (1<<16) / pow(2, (x+1) * (ENV_STEP/4.0) / 8.0);
+ m = floor(m);
+
+ /* we never reach (1<<16) here due to the (x+1) */
+ /* result fits within 16 bits at maximum */
+
+ n = (int)m; /* 16 bits here */
+ n >>= 4; /* 12 bits here */
+ if (n&1) /* round to nearest */
+ n = (n>>1)+1;
+ else
+ n = n>>1;
+ /* 11 bits here (rounded) */
+ n <<= 1; /* 12 bits here (as in real chip) */
+ tl_tab[ x*2 + 0 ] = n;
+ tl_tab[ x*2 + 1 ] = -tl_tab[ x*2 + 0 ];
+
+ for (i=1; i<12; i++)
+ {
+ tl_tab[ x*2+0 + i*2*TL_RES_LEN ] = tl_tab[ x*2+0 ]>>i;
+ tl_tab[ x*2+1 + i*2*TL_RES_LEN ] = -tl_tab[ x*2+0 + i*2*TL_RES_LEN ];
+ }
+#if 0
+ logerror("tl %04i", x*2);
+ for (i=0; i<12; i++)
+ logerror(", [%02i] %5i", i*2, tl_tab[ x*2 /*+1*/ + i*2*TL_RES_LEN ] );
+ logerror("\n");
+#endif
+ }
+ /*logerror("FMOPL.C: TL_TAB_LEN = %i elements (%i bytes)\n",TL_TAB_LEN, (int)sizeof(tl_tab));*/
+
+
+ for (i=0; i<SIN_LEN; i++)
+ {
+ /* non-standard sinus */
+ m = sin( ((i*2)+1) * M_PI / SIN_LEN ); /* checked against the real chip */
+
+ /* we never reach zero here due to ((i*2)+1) */
+
+ if (m>0.0)
+ o = 8*log(1.0/m)/log(2.0); /* convert to 'decibels' */
+ else
+ o = 8*log(-1.0/m)/log(2.0); /* convert to 'decibels' */
+
+ o = o / (ENV_STEP/4);
+
+ n = (int)(2.0*o);
+ if (n&1) /* round to nearest */
+ n = (n>>1)+1;
+ else
+ n = n>>1;
+
+ sin_tab[ i ] = n*2 + (m>=0.0? 0: 1 );
+
+ /*logerror("FMOPL.C: sin [%4i (hex=%03x)]= %4i (tl_tab value=%5i)\n", i, i, sin_tab[i], tl_tab[sin_tab[i]] );*/
+ }
+
+ for (i=0; i<SIN_LEN; i++)
+ {
+ /* waveform 1: __ __ */
+ /* / \____/ \____*/
+ /* output only first half of the sinus waveform (positive one) */
+
+ if (i & (1<<(SIN_BITS-1)) )
+ sin_tab[1*SIN_LEN+i] = TL_TAB_LEN;
+ else
+ sin_tab[1*SIN_LEN+i] = sin_tab[i];
+
+ /* waveform 2: __ __ __ __ */
+ /* / \/ \/ \/ \*/
+ /* abs(sin) */
+
+ sin_tab[2*SIN_LEN+i] = sin_tab[i & (SIN_MASK>>1) ];
+
+ /* waveform 3: _ _ _ _ */
+ /* / |_/ |_/ |_/ |_*/
+ /* abs(output only first quarter of the sinus waveform) */
+
+ if (i & (1<<(SIN_BITS-2)) )
+ sin_tab[3*SIN_LEN+i] = TL_TAB_LEN;
+ else
+ sin_tab[3*SIN_LEN+i] = sin_tab[i & (SIN_MASK>>2)];
+
+ /*logerror("FMOPL.C: sin1[%4i]= %4i (tl_tab value=%5i)\n", i, sin_tab[1*SIN_LEN+i], tl_tab[sin_tab[1*SIN_LEN+i]] );
+ logerror("FMOPL.C: sin2[%4i]= %4i (tl_tab value=%5i)\n", i, sin_tab[2*SIN_LEN+i], tl_tab[sin_tab[2*SIN_LEN+i]] );
+ logerror("FMOPL.C: sin3[%4i]= %4i (tl_tab value=%5i)\n", i, sin_tab[3*SIN_LEN+i], tl_tab[sin_tab[3*SIN_LEN+i]] );*/
+ }
+ /*logerror("FMOPL.C: ENV_QUIET= %08x (dec*8=%i)\n", ENV_QUIET, ENV_QUIET*8 );*/
+
+
+#ifdef SAVE_SAMPLE
+ sample[0]=fopen("sampsum.pcm","wb");
+#endif
+
+ return 1;
+}
+
+static void OPLCloseTable( void )
+{
+#ifdef SAVE_SAMPLE
+ fclose(sample[0]);
+#endif
+}
+
+
+
+static void OPL_initalize(FM_OPL *OPL)
+{
+ int i;
+
+ /* frequency base */
+ OPL->freqbase = (OPL->rate) ? ((double)OPL->clock / 72.0) / OPL->rate : 0;
+#if 0
+ OPL->rate = (double)OPL->clock / 72.0;
+ OPL->freqbase = 1.0;
+#endif
+
+ /*logerror("freqbase=%f\n", OPL->freqbase);*/
+
+ /* Timer base time */
+ OPL->TimerBase = 1.0 / ((double)OPL->clock / 72.0 );
+
+ /* make fnumber -> increment counter table */
+ for( i=0 ; i < 1024 ; i++ )
+ {
+ /* opn phase increment counter = 20bit */
+ OPL->fn_tab[i] = (UINT32)( (double)i * 64 * OPL->freqbase * (1<<(FREQ_SH-10)) ); /* -10 because chip works with 10.10 fixed point, while we use 16.16 */
+#if 0
+ logerror("FMOPL.C: fn_tab[%4i] = %08x (dec=%8i)\n",
+ i, OPL->fn_tab[i]>>6, OPL->fn_tab[i]>>6 );
+#endif
+ }
+
+#if 0
+ for( i=0 ; i < 16 ; i++ )
+ {
+ logerror("FMOPL.C: sl_tab[%i] = %08x\n",
+ i, sl_tab[i] );
+ }
+ for( i=0 ; i < 8 ; i++ )
+ {
+ int j;
+ logerror("FMOPL.C: ksl_tab[oct=%2i] =",i);
+ for (j=0; j<16; j++)
+ {
+ logerror("%08x ", (UINT32)(ksl_tab[i*16+j]) );
+ }
+ logerror("\n");
+ }
+#endif
+
+
+ /* Amplitude modulation: 27 output levels (triangle waveform); 1 level takes one of: 192, 256 or 448 samples */
+ /* One entry from LFO_AM_TABLE lasts for 64 samples */
+ OPL->lfo_am_inc = (UINT32) ((1.0 / 64.0 ) * (1<<LFO_SH) * OPL->freqbase);
+
+ /* Vibrato: 8 output levels (triangle waveform); 1 level takes 1024 samples */
+ OPL->lfo_pm_inc = (UINT32) ((1.0 / 1024.0) * (1<<LFO_SH) * OPL->freqbase);
+
+ /*logerror ("OPL->lfo_am_inc = %8x ; OPL->lfo_pm_inc = %8x\n", OPL->lfo_am_inc, OPL->lfo_pm_inc);*/
+
+ /* Noise generator: a step takes 1 sample */
+ OPL->noise_f = (UINT32) ((1.0 / 1.0) * (1<<FREQ_SH) * OPL->freqbase);
+
+ OPL->eg_timer_add = (UINT32) ((1<<EG_SH) * OPL->freqbase);
+ OPL->eg_timer_overflow = ( 1 ) * (1<<EG_SH);
+ /*logerror("OPLinit eg_timer_add=%8x eg_timer_overflow=%8x\n", OPL->eg_timer_add, OPL->eg_timer_overflow);*/
+
+}
+
+static void FM_KEYON(OPL_SLOT *SLOT, UINT32 key_set)
+{
+ if( !SLOT->key )
+ {
+ /* restart Phase Generator */
+ SLOT->Cnt = 0;
+ /* phase -> Attack */
+ SLOT->state = EG_ATT;
+ }
+ SLOT->key |= key_set;
+}
+
+static void FM_KEYOFF(OPL_SLOT *SLOT, UINT32 key_clr)
+{
+ if( SLOT->key )
+ {
+ SLOT->key &= key_clr;
+
+ if( !SLOT->key )
+ {
+ /* phase -> Release */
+ if (SLOT->state>EG_REL)
+ SLOT->state = EG_REL;
+ }
+ }
+}
+
+/* update phase increment counter of operator (also update the EG rates if necessary) */
+static void CALC_FCSLOT(OPL_CH *CH,OPL_SLOT *SLOT)
+{
+ int ksr;
+
+ /* (frequency) phase increment counter */
+ SLOT->Incr = CH->fc * SLOT->mul;
+ ksr = CH->kcode >> SLOT->KSR;
+
+ if( SLOT->ksr != ksr )
+ {
+ SLOT->ksr = ksr;
+
+ /* calculate envelope generator rates */
+ if ((SLOT->ar + SLOT->ksr) < 16+62)
+ {
+ SLOT->eg_sh_ar = eg_rate_shift [SLOT->ar + SLOT->ksr ];
+ SLOT->eg_sel_ar = eg_rate_select[SLOT->ar + SLOT->ksr ];
+ }
+ else
+ {
+ SLOT->eg_sh_ar = 0;
+ SLOT->eg_sel_ar = 13*RATE_STEPS;
+ }
+ SLOT->eg_sh_dr = eg_rate_shift [SLOT->dr + SLOT->ksr ];
+ SLOT->eg_sel_dr = eg_rate_select[SLOT->dr + SLOT->ksr ];
+ SLOT->eg_sh_rr = eg_rate_shift [SLOT->rr + SLOT->ksr ];
+ SLOT->eg_sel_rr = eg_rate_select[SLOT->rr + SLOT->ksr ];
+ }
+}
+
+/* set multi,am,vib,EG-TYP,KSR,mul */
+static void set_mul(FM_OPL *OPL,int slot,int v)
+{
+ OPL_CH *CH = &OPL->P_CH[slot/2];
+ OPL_SLOT *SLOT = &CH->SLOT[slot&1];
+
+ SLOT->mul = mul_tab[v&0x0f];
+ SLOT->KSR = (v&0x10) ? 0 : 2;
+ SLOT->eg_type = (v&0x20);
+ SLOT->vib = (v&0x40);
+ SLOT->AMmask = (v&0x80) ? ~0 : 0;
+ CALC_FCSLOT(CH,SLOT);
+}
+
+/* set ksl & tl */
+static void set_ksl_tl(FM_OPL *OPL,int slot,int v)
+{
+#if 0
+ OPL_CH *CH = &OPL->P_CH[slot/2];
+ OPL_SLOT *SLOT = &CH->SLOT[slot&1];
+
+ SLOT->ksl = ksl_shift[v >> 6];
+ SLOT->TL = (v&0x3f)<<(ENV_BITS-1-7); /* 7 bits TL (bit 6 = always 0) */
+
+ SLOT->TLL = SLOT->TL + (CH->ksl_base>>SLOT->ksl);
+#else
+ OPL_CH *CH = &OPL->P_CH[slot/2];
+ OPL_SLOT *SLOT = &CH->SLOT[slot&1];
+ int ksl = v>>6; /* 0 / 1.5 / 3.0 / 6.0 dB/OCT */
+
+ SLOT->ksl = ksl ? 3-ksl : 31;
+ SLOT->TL = (v&0x3f)<<(ENV_BITS-1-7); /* 7 bits TL (bit 6 = always 0) */
+
+ SLOT->TLL = SLOT->TL + (CH->ksl_base>>SLOT->ksl);
+#endif
+}
+
+/* set attack rate & decay rate */
+static void set_ar_dr(FM_OPL *OPL,int slot,int v)
+{
+ OPL_CH *CH = &OPL->P_CH[slot/2];
+ OPL_SLOT *SLOT = &CH->SLOT[slot&1];
+
+ SLOT->ar = (v>>4) ? 16 + ((v>>4) <<2) : 0;
+
+ if ((SLOT->ar + SLOT->ksr) < 16+62)
+ {
+ SLOT->eg_sh_ar = eg_rate_shift [SLOT->ar + SLOT->ksr ];
+ SLOT->eg_sel_ar = eg_rate_select[SLOT->ar + SLOT->ksr ];
+ }
+ else
+ {
+ SLOT->eg_sh_ar = 0;
+ SLOT->eg_sel_ar = 13*RATE_STEPS;
+ }
+
+ SLOT->dr = (v&0x0f)? 16 + ((v&0x0f)<<2) : 0;
+ SLOT->eg_sh_dr = eg_rate_shift [SLOT->dr + SLOT->ksr ];
+ SLOT->eg_sel_dr = eg_rate_select[SLOT->dr + SLOT->ksr ];
+}
+
+/* set sustain level & release rate */
+static void set_sl_rr(FM_OPL *OPL,int slot,int v)
+{
+ OPL_CH *CH = &OPL->P_CH[slot/2];
+ OPL_SLOT *SLOT = &CH->SLOT[slot&1];
+
+ SLOT->sl = sl_tab[ v>>4 ];
+
+ SLOT->rr = (v&0x0f)? 16 + ((v&0x0f)<<2) : 0;
+ SLOT->eg_sh_rr = eg_rate_shift [SLOT->rr + SLOT->ksr ];
+ SLOT->eg_sel_rr = eg_rate_select[SLOT->rr + SLOT->ksr ];
+}
+
+
+/* write a value v to register r on OPL chip */
+static void OPLWriteReg(FM_OPL *OPL, int r, int v)
+{
+ OPL_CH *CH;
+ int slot;
+ int block_fnum;
+
+
+ /* adjust bus to 8 bits */
+ r &= 0xff;
+ v &= 0xff;
+
+ if (LOG_CYM_FILE && (cymfile) && (r!=0) )
+ {
+ fprintf(cymfile, "%02x = %02x\n", r, v);
+ }
+
+
+ switch(r&0xe0)
+ {
+ case 0x00: /* 00-1f:control */
+ switch(r&0x1f)
+ {
+ case 0x01: /* waveform select enable */
+ if(OPL->type&OPL_TYPE_WAVESEL)
+ {
+ OPL->wavesel = v&0x20;
+ /* do not change the waveform previously selected */
+ }
+ break;
+ case 0x02: /* Timer 1 */
+ OPL->T[0] = (256-v)*4;
+ break;
+ case 0x03: /* Timer 2 */
+ OPL->T[1] = (256-v)*16;
+ break;
+ case 0x04: /* IRQ clear / mask and Timer enable */
+ if(v&0x80)
+ { /* IRQ flag clear */
+ OPL_STATUS_RESET(OPL,0x7f-0x08); /* don't reset BFRDY flag or we will have to call deltat module to set the flag */
+ }
+ else
+ { /* set IRQ mask ,timer enable*/
+ UINT8 st1 = v&1;
+ UINT8 st2 = (v>>1)&1;
+
+ /* IRQRST,T1MSK,t2MSK,EOSMSK,BRMSK,x,ST2,ST1 */
+ OPL_STATUS_RESET(OPL, v & (0x78-0x08) );
+ OPL_STATUSMASK_SET(OPL, (~v) & 0x78 );
+
+ /* timer 2 */
+ if(OPL->st[1] != st2)
+ {
+ double period = st2 ? (double)OPL->T[1]*OPL->TimerBase : 0.0;
+ //double period = st2 ? (OPL->TimerBase * OPL->T[1]) : 0;
+ OPL->st[1] = st2;
+ if (OPL->timer_handler) (OPL->timer_handler)(1,period);
+ }
+ /* timer 1 */
+ if(OPL->st[0] != st1)
+ {
+ double period = st1 ? (double)OPL->T[0]*OPL->TimerBase : 0.0;
+ //double period = st1 ? (OPL->TimerBase * OPL->T[0]) : 0;
+ OPL->st[0] = st1;
+ if (OPL->timer_handler) (OPL->timer_handler)(0,period);
+ }
+ }
+ break;
+#if BUILD_Y8950
+ case 0x06: /* Key Board OUT */
+ if(OPL->type&OPL_TYPE_KEYBOARD)
+ {
+ if(OPL->keyboardhandler_w)
+ OPL->keyboardhandler_w(OPL->keyboard_param,v);
+ else
+ {
+ //OPL->device->logerror("Y8950: write unmapped KEYBOARD port\n");
+ }
+ }
+ break;
+ case 0x07: /* DELTA-T control 1 : START,REC,MEMDATA,REPT,SPOFF,x,x,RST */
+ if(OPL->type&OPL_TYPE_ADPCM)
+ YM_DELTAT_ADPCM_Write(OPL->deltat,r-0x07,v);
+ break;
+#endif
+ case 0x08: /* MODE,DELTA-T control 2 : CSM,NOTESEL,x,x,smpl,da/ad,64k,rom */
+ OPL->mode = v;
+#if BUILD_Y8950
+ if(OPL->type&OPL_TYPE_ADPCM)
+ YM_DELTAT_ADPCM_Write(OPL->deltat,r-0x07,v&0x0f); /* mask 4 LSBs in register 08 for DELTA-T unit */
+#endif
+ break;
+
+#if BUILD_Y8950
+ case 0x09: /* START ADD */
+ case 0x0a:
+ case 0x0b: /* STOP ADD */
+ case 0x0c:
+ case 0x0d: /* PRESCALE */
+ case 0x0e:
+ case 0x0f: /* ADPCM data write */
+ case 0x10: /* DELTA-N */
+ case 0x11: /* DELTA-N */
+ case 0x12: /* ADPCM volume */
+ if(OPL->type&OPL_TYPE_ADPCM)
+ YM_DELTAT_ADPCM_Write(OPL->deltat,r-0x07,v);
+ break;
+
+ case 0x15: /* DAC data high 8 bits (F7,F6...F2) */
+ case 0x16: /* DAC data low 2 bits (F1, F0 in bits 7,6) */
+ case 0x17: /* DAC data shift (S2,S1,S0 in bits 2,1,0) */
+ //OPL->device->logerror("FMOPL.C: DAC data register written, but not implemented reg=%02x val=%02x\n",r,v);
+ break;
+
+ case 0x18: /* I/O CTRL (Direction) */
+ if(OPL->type&OPL_TYPE_IO)
+ OPL->portDirection = v&0x0f;
+ break;
+ case 0x19: /* I/O DATA */
+ if(OPL->type&OPL_TYPE_IO)
+ {
+ OPL->portLatch = v;
+ if(OPL->porthandler_w)
+ OPL->porthandler_w(OPL->port_param,v&OPL->portDirection);
+ }
+ break;
+#endif
+ default:
+ //OPL->device->logerror("FMOPL.C: write to unknown register: %02x\n",r);
+ break;
+ }
+ break;
+ case 0x20: /* am ON, vib ON, ksr, eg_type, mul */
+ slot = slot_array[r&0x1f];
+ if(slot < 0) return;
+ set_mul(OPL,slot,v);
+ break;
+ case 0x40:
+ slot = slot_array[r&0x1f];
+ if(slot < 0) return;
+ set_ksl_tl(OPL,slot,v);
+ break;
+ case 0x60:
+ slot = slot_array[r&0x1f];
+ if(slot < 0) return;
+ set_ar_dr(OPL,slot,v);
+ break;
+ case 0x80:
+ slot = slot_array[r&0x1f];
+ if(slot < 0) return;
+ set_sl_rr(OPL,slot,v);
+ break;
+ case 0xa0:
+ if (r == 0xbd) /* am depth, vibrato depth, r,bd,sd,tom,tc,hh */
+ {
+ OPL->lfo_am_depth = v & 0x80;
+ OPL->lfo_pm_depth_range = (v&0x40) ? 8 : 0;
+
+ OPL->rhythm = v&0x3f;
+
+ if(OPL->rhythm&0x20)
+ {
+ /* BD key on/off */
+ if(v&0x10)
+ {
+ FM_KEYON (&OPL->P_CH[6].SLOT[SLOT1], 2);
+ FM_KEYON (&OPL->P_CH[6].SLOT[SLOT2], 2);
+ }
+ else
+ {
+ FM_KEYOFF(&OPL->P_CH[6].SLOT[SLOT1],~2);
+ FM_KEYOFF(&OPL->P_CH[6].SLOT[SLOT2],~2);
+ }
+ /* HH key on/off */
+ if(v&0x01) FM_KEYON (&OPL->P_CH[7].SLOT[SLOT1], 2);
+ else FM_KEYOFF(&OPL->P_CH[7].SLOT[SLOT1],~2);
+ /* SD key on/off */
+ if(v&0x08) FM_KEYON (&OPL->P_CH[7].SLOT[SLOT2], 2);
+ else FM_KEYOFF(&OPL->P_CH[7].SLOT[SLOT2],~2);
+ /* TOM key on/off */
+ if(v&0x04) FM_KEYON (&OPL->P_CH[8].SLOT[SLOT1], 2);
+ else FM_KEYOFF(&OPL->P_CH[8].SLOT[SLOT1],~2);
+ /* TOP-CY key on/off */
+ if(v&0x02) FM_KEYON (&OPL->P_CH[8].SLOT[SLOT2], 2);
+ else FM_KEYOFF(&OPL->P_CH[8].SLOT[SLOT2],~2);
+ }
+ else
+ {
+ /* BD key off */
+ FM_KEYOFF(&OPL->P_CH[6].SLOT[SLOT1],~2);
+ FM_KEYOFF(&OPL->P_CH[6].SLOT[SLOT2],~2);
+ /* HH key off */
+ FM_KEYOFF(&OPL->P_CH[7].SLOT[SLOT1],~2);
+ /* SD key off */
+ FM_KEYOFF(&OPL->P_CH[7].SLOT[SLOT2],~2);
+ /* TOM key off */
+ FM_KEYOFF(&OPL->P_CH[8].SLOT[SLOT1],~2);
+ /* TOP-CY off */
+ FM_KEYOFF(&OPL->P_CH[8].SLOT[SLOT2],~2);
+ }
+ return;
+ }
+ /* keyon,block,fnum */
+ if( (r&0x0f) > 8) return;
+ CH = &OPL->P_CH[r&0x0f];
+ if(!(r&0x10))
+ { /* a0-a8 */
+ block_fnum = (CH->block_fnum&0x1f00) | v;
+ }
+ else
+ { /* b0-b8 */
+ block_fnum = ((v&0x1f)<<8) | (CH->block_fnum&0xff);
+
+ if(v&0x20)
+ {
+ FM_KEYON (&CH->SLOT[SLOT1], 1);
+ FM_KEYON (&CH->SLOT[SLOT2], 1);
+ }
+ else
+ {
+ FM_KEYOFF(&CH->SLOT[SLOT1],~1);
+ FM_KEYOFF(&CH->SLOT[SLOT2],~1);
+ }
+ }
+ /* update */
+ if(CH->block_fnum != (UINT32) block_fnum)
+ {
+ UINT8 block = block_fnum >> 10;
+
+ CH->block_fnum = block_fnum;
+
+ CH->ksl_base = (UINT32)(ksl_tab[block_fnum>>6]);
+ CH->fc = OPL->fn_tab[block_fnum&0x03ff] >> (7-block);
+
+ /* BLK 2,1,0 bits -> bits 3,2,1 of kcode */
+ CH->kcode = (CH->block_fnum&0x1c00)>>9;
+
+ /* the info below is actually opposite to what is stated in the Manuals (verifed on real YM3812) */
+ /* if notesel == 0 -> lsb of kcode is bit 10 (MSB) of fnum */
+ /* if notesel == 1 -> lsb of kcode is bit 9 (MSB-1) of fnum */
+ if (OPL->mode&0x40)
+ CH->kcode |= (CH->block_fnum&0x100)>>8; /* notesel == 1 */
+ else
+ CH->kcode |= (CH->block_fnum&0x200)>>9; /* notesel == 0 */
+
+ /* refresh Total Level in both SLOTs of this channel */
+ CH->SLOT[SLOT1].TLL = CH->SLOT[SLOT1].TL + (CH->ksl_base>>CH->SLOT[SLOT1].ksl);
+ CH->SLOT[SLOT2].TLL = CH->SLOT[SLOT2].TL + (CH->ksl_base>>CH->SLOT[SLOT2].ksl);
+
+ /* refresh frequency counter in both SLOTs of this channel */
+ CALC_FCSLOT(CH,&CH->SLOT[SLOT1]);
+ CALC_FCSLOT(CH,&CH->SLOT[SLOT2]);
+ }
+ break;
+ case 0xc0:
+ /* FB,C */
+ if( (r&0x0f) > 8) return;
+ CH = &OPL->P_CH[r&0x0f];
+ CH->SLOT[SLOT1].FB = (v>>1)&7 ? ((v>>1)&7) + 7 : 0;
+ CH->SLOT[SLOT1].CON = v&1;
+ CH->SLOT[SLOT1].connect1 = CH->SLOT[SLOT1].CON ? &OPL->output[0] : &OPL->phase_modulation;
+ break;
+ case 0xe0: /* waveform select */
+ /* simply ignore write to the waveform select register if selecting not enabled in test register */
+ if(OPL->wavesel)
+ {
+ slot = slot_array[r&0x1f];
+ if(slot < 0) return;
+ CH = &OPL->P_CH[slot/2];
+
+ CH->SLOT[slot&1].wavetable = (v&0x03)*SIN_LEN;
+ }
+ break;
+ }
+}
+
+static TIMER_CALLBACK( cymfile_callback )
+{
+ if (cymfile)
+ {
+ //fputc( (unsigned char)0, cymfile );
+ }
+}
+
+/* lock/unlock for common table */
+static int OPL_LockTable(device_t *device)
+{
+ num_lock++;
+ if(num_lock>1) return 0;
+
+ /* first time */
+
+ /* allocate total level table (128kb space) */
+ if( !init_tables() )
+ {
+ num_lock--;
+ return -1;
+ }
+
+ if (LOG_CYM_FILE)
+ {
+ cymfile = fopen("/3812_.cym","w");
+ if (cymfile)
+ {
+ //device->machine().scheduler().timer_pulse ( double::from_hz(110), FUNC(cymfile_callback)); /*110 Hz pulse timer*/
+ }
+ else
+ {
+ //device->logerror("Could not create file 3812_.cym\n");
+ }
+ }
+
+ return 0;
+}
+
+static void OPL_UnLockTable(void)
+{
+ if(num_lock) num_lock--;
+ if(num_lock) return;
+
+ /* last time */
+
+ OPLCloseTable();
+
+ if (cymfile)
+ fclose (cymfile);
+ cymfile = NULL;
+}
+
+static void OPLResetChip(FM_OPL *OPL)
+{
+ int c,s;
+ int i;
+
+ OPL->eg_timer = 0;
+ OPL->eg_cnt = 0;
+
+ OPL->noise_rng = 1; /* noise shift register */
+ OPL->mode = 0; /* normal mode */
+ OPL_STATUS_RESET(OPL,0x7f);
+
+ /* reset with register write */
+ OPLWriteReg(OPL,0x01,0); /* wavesel disable */
+ OPLWriteReg(OPL,0x02,0); /* Timer1 */
+ OPLWriteReg(OPL,0x03,0); /* Timer2 */
+ OPLWriteReg(OPL,0x04,0); /* IRQ mask clear */
+ for(i = 0xff ; i >= 0x20 ; i-- ) OPLWriteReg(OPL,i,0);
+
+ /* reset operator parameters */
+ for( c = 0 ; c < 9 ; c++ )
+ {
+ OPL_CH *CH = &OPL->P_CH[c];
+ for(s = 0 ; s < 2 ; s++ )
+ {
+ /* wave table */
+ CH->SLOT[s].wavetable = 0;
+ CH->SLOT[s].state = EG_OFF;
+ CH->SLOT[s].volume = MAX_ATT_INDEX;
+ }
+ }
+#if BUILD_Y8950
+ if(OPL->type&OPL_TYPE_ADPCM)
+ {
+ YM_DELTAT *DELTAT = OPL->deltat;
+
+ DELTAT->freqbase = OPL->freqbase;
+ DELTAT->output_pointer = &OPL->output_deltat[0];
+ DELTAT->portshift = 5;
+ DELTAT->output_range = 1<<23;
+ YM_DELTAT_ADPCM_Reset(DELTAT,0,YM_DELTAT_EMULATION_MODE_NORMAL,OPL->device);
+ }
+#endif
+}
+
+
+static void OPL_postload(FM_OPL *OPL)
+{
+ int slot, ch;
+
+ for( ch=0 ; ch < 9 ; ch++ )
+ {
+ OPL_CH *CH = &OPL->P_CH[ch];
+
+ /* Look up key scale level */
+ UINT32 block_fnum = CH->block_fnum;
+ CH->ksl_base = (UINT32)(ksl_tab[block_fnum >> 6]);
+ CH->fc = OPL->fn_tab[block_fnum & 0x03ff] >> (7 - (block_fnum >> 10));
+
+ for( slot=0 ; slot < 2 ; slot++ )
+ {
+ OPL_SLOT *SLOT = &CH->SLOT[slot];
+
+ /* Calculate key scale rate */
+ SLOT->ksr = CH->kcode >> SLOT->KSR;
+
+ /* Calculate attack, decay and release rates */
+ if ((SLOT->ar + SLOT->ksr) < 16+62)
+ {
+ SLOT->eg_sh_ar = eg_rate_shift [SLOT->ar + SLOT->ksr ];
+ SLOT->eg_sel_ar = eg_rate_select[SLOT->ar + SLOT->ksr ];
+ }
+ else
+ {
+ SLOT->eg_sh_ar = 0;
+ SLOT->eg_sel_ar = 13*RATE_STEPS;
+ }
+ SLOT->eg_sh_dr = eg_rate_shift [SLOT->dr + SLOT->ksr ];
+ SLOT->eg_sel_dr = eg_rate_select[SLOT->dr + SLOT->ksr ];
+ SLOT->eg_sh_rr = eg_rate_shift [SLOT->rr + SLOT->ksr ];
+ SLOT->eg_sel_rr = eg_rate_select[SLOT->rr + SLOT->ksr ];
+
+ /* Calculate phase increment */
+ SLOT->Incr = CH->fc * SLOT->mul;
+
+ /* Total level */
+ SLOT->TLL = SLOT->TL + (CH->ksl_base >> SLOT->ksl);
+
+ /* Connect output */
+ SLOT->connect1 = SLOT->CON ? &OPL->output[0] : &OPL->phase_modulation;
+ }
+ }
+#if BUILD_Y8950
+ if ( (OPL->type & OPL_TYPE_ADPCM) && (OPL->deltat) )
+ {
+ // We really should call the postlod function for the YM_DELTAT, but it's hard without registers
+ // (see the way the YM2610 does it)
+ //YM_DELTAT_postload(OPL->deltat, REGS);
+ }
+#endif
+}
+
+
+static void OPLsave_state_channel(device_t *device, OPL_CH *CH)
+{
+}
+
+
+/* Register savestate for a virtual YM3812/YM3526Y8950 */
+
+static void OPL_save_state(FM_OPL *OPL, device_t *device)
+{
+}
+
+
+/* Create one of virtual YM3812/YM3526/Y8950 */
+/* 'clock' is chip clock in Hz */
+/* 'rate' is sampling rate */
+static FM_OPL *OPLCreate(device_t *device, UINT32 clock, UINT32 rate, int type)
+{
+ char *ptr;
+ FM_OPL *OPL;
+ int state_size;
+
+ if (OPL_LockTable(device) == -1) return NULL;
+
+ /* calculate OPL state size */
+ state_size = sizeof(FM_OPL);
+
+#if BUILD_Y8950
+ if (type&OPL_TYPE_ADPCM) state_size+= sizeof(YM_DELTAT);
+#endif
+
+ /* allocate memory block */
+ ptr = malloc(state_size);
+
+ if(!ptr)
+ return NULL;
+
+ memset(ptr, 0, state_size);
+
+ OPL = (FM_OPL *)ptr;
+
+ /* GCC behaves weirdly... check that it's not acting up */
+
+ if((UINT32)OPL & 3 == 0)
+ printf("OPL is word-aligned");
+ if((UINT32)(OPL->output) & 3 == 0)
+ printf("output is word-aligned");
+
+ ptr += sizeof(FM_OPL);
+
+#if BUILD_Y8950
+ if (type&OPL_TYPE_ADPCM)
+ {
+ OPL->deltat = (YM_DELTAT *)ptr;
+ }
+ ptr += sizeof(YM_DELTAT);
+#endif
+
+ OPL->device = device;
+ OPL->type = type;
+ OPL->clock = clock;
+ OPL->rate = rate;
+
+ /* init global tables */
+ OPL_initalize(OPL);
+
+ return OPL;
+}
+
+/* Destroy one of virtual YM3812 */
+static void OPLDestroy(FM_OPL *OPL)
+{
+ OPL_UnLockTable();
+ free(OPL);
+}
+
+/* Optional handlers */
+
+static void OPLSetTimerHandler(FM_OPL *OPL,OPL_TIMERHANDLER timer_handler,void *param)
+{
+ OPL->timer_handler = timer_handler;
+ OPL->TimerParam = param;
+}
+static void OPLSetIRQHandler(FM_OPL *OPL,OPL_IRQHANDLER IRQHandler,void *param)
+{
+ OPL->IRQHandler = IRQHandler;
+ OPL->IRQParam = param;
+}
+static void OPLSetUpdateHandler(FM_OPL *OPL,OPL_UPDATEHANDLER UpdateHandler,void *param)
+{
+ OPL->UpdateHandler = UpdateHandler;
+ OPL->UpdateParam = param;
+}
+
+static int OPLWrite(FM_OPL *OPL,int a,int v)
+{
+ if( !(a&1) )
+ { /* address port */
+ OPL->address = v & 0xff;
+ }
+ else
+ { /* data port */
+ if(OPL->UpdateHandler) OPL->UpdateHandler(OPL->UpdateParam,0);
+ OPLWriteReg(OPL,OPL->address,v);
+ }
+ return OPL->status>>7;
+}
+
+static unsigned char OPLRead(FM_OPL *OPL,int a)
+{
+ if( !(a&1) )
+ {
+ /* status port */
+
+#if BUILD_Y8950
+
+ if(OPL->type&OPL_TYPE_ADPCM) /* Y8950 */
+ {
+ return (OPL->status & (OPL->statusmask|0x80)) | (OPL->deltat->PCM_BSY&1);
+ }
+
+#endif
+
+ /* OPL and OPL2 */
+ return OPL->status & (OPL->statusmask|0x80);
+ }
+
+#if BUILD_Y8950
+ /* data port */
+ switch(OPL->address)
+ {
+ case 0x05: /* KeyBoard IN */
+ if(OPL->type&OPL_TYPE_KEYBOARD)
+ {
+ if(OPL->keyboardhandler_r)
+ return OPL->keyboardhandler_r(OPL->keyboard_param);
+ else
+ OPL->device->logerror("Y8950: read unmapped KEYBOARD port\n");
+ }
+ return 0;
+
+ case 0x0f: /* ADPCM-DATA */
+ if(OPL->type&OPL_TYPE_ADPCM)
+ {
+ UINT8 val;
+
+ val = YM_DELTAT_ADPCM_Read(OPL->deltat);
+ /*logerror("Y8950: read ADPCM value read=%02x\n",val);*/
+ return val;
+ }
+ return 0;
+
+ case 0x19: /* I/O DATA */
+ if(OPL->type&OPL_TYPE_IO)
+ {
+ if(OPL->porthandler_r)
+ return OPL->porthandler_r(OPL->port_param);
+ else
+ OPL->device->logerror("Y8950:read unmapped I/O port\n");
+ }
+ return 0;
+ case 0x1a: /* PCM-DATA */
+ if(OPL->type&OPL_TYPE_ADPCM)
+ {
+ OPL->device->logerror("Y8950 A/D convertion is accessed but not implemented !\n");
+ return 0x80; /* 2's complement PCM data - result from A/D convertion */
+ }
+ return 0;
+ }
+#endif
+
+ return 0xff;
+}
+
+/* CSM Key Controll */
+static void CSMKeyControll(OPL_CH *CH)
+{
+ FM_KEYON (&CH->SLOT[SLOT1], 4);
+ FM_KEYON (&CH->SLOT[SLOT2], 4);
+
+ /* The key off should happen exactly one sample later - not implemented correctly yet */
+
+ FM_KEYOFF(&CH->SLOT[SLOT1], ~4);
+ FM_KEYOFF(&CH->SLOT[SLOT2], ~4);
+}
+
+
+static int OPLTimerOver(FM_OPL *OPL,int c)
+{
+ if( c )
+ { /* Timer B */
+ OPL_STATUS_SET(OPL,0x20);
+ }
+ else
+ { /* Timer A */
+ OPL_STATUS_SET(OPL,0x40);
+ /* CSM mode key,TL controll */
+ if( OPL->mode & 0x80 )
+ { /* CSM mode total level latch and auto key on */
+ int ch;
+ if(OPL->UpdateHandler) OPL->UpdateHandler(OPL->UpdateParam,0);
+ for(ch=0; ch<9; ch++)
+ CSMKeyControll( &OPL->P_CH[ch] );
+ }
+ }
+ /* reload timer */
+ if (OPL->timer_handler) (OPL->timer_handler)(c,OPL->TimerBase * OPL->T[c]);
+ return OPL->status>>7;
+}
+
+
+#define MAX_OPL_CHIPS 2
+
+
+#if (BUILD_YM3812)
+
+void * YM3812Init(device_t *device, UINT32 clock, UINT32 rate)
+{
+ /* emulator create */
+ FM_OPL *YM3812 = OPLCreate(device,clock,rate,OPL_TYPE_YM3812);
+ if (YM3812)
+ {
+ OPL_save_state(YM3812, device);
+ YM3812ResetChip(YM3812);
+ }
+ return YM3812;
+}
+
+void YM3812Shutdown(void *chip)
+{
+ FM_OPL *YM3812 = (FM_OPL *)chip;
+
+ /* emulator shutdown */
+ OPLDestroy(YM3812);
+}
+void YM3812ResetChip(void *chip)
+{
+ FM_OPL *YM3812 = (FM_OPL *)chip;
+ OPLResetChip(YM3812);
+}
+
+int YM3812Write(void *chip, int a, int v)
+{
+ FM_OPL *YM3812 = (FM_OPL *)chip;
+
+ OPLWriteReg(YM3812, a, v);
+ return (YM3812->status>>7);
+
+ // technically correct, but breaks Wolf4SDL - FW19
+ //return OPLWrite(YM3812, a, v);
+}
+
+unsigned char YM3812Read(void *chip, int a)
+{
+ FM_OPL *YM3812 = (FM_OPL *)chip;
+ /* YM3812 always returns bit2 and bit1 in HIGH state */
+ return OPLRead(YM3812, a) | 0x06 ;
+}
+int YM3812TimerOver(void *chip, int c)
+{
+ FM_OPL *YM3812 = (FM_OPL *)chip;
+ return OPLTimerOver(YM3812, c);
+}
+
+void YM3812SetTimerHandler(void *chip, OPL_TIMERHANDLER timer_handler, void *param)
+{
+ FM_OPL *YM3812 = (FM_OPL *)chip;
+ OPLSetTimerHandler(YM3812, timer_handler, param);
+}
+void YM3812SetIRQHandler(void *chip,OPL_IRQHANDLER IRQHandler,void *param)
+{
+ FM_OPL *YM3812 = (FM_OPL *)chip;
+ OPLSetIRQHandler(YM3812, IRQHandler, param);
+}
+void YM3812SetUpdateHandler(void *chip,OPL_UPDATEHANDLER UpdateHandler,void *param)
+{
+ FM_OPL *YM3812 = (FM_OPL *)chip;
+ OPLSetUpdateHandler(YM3812, UpdateHandler, param);
+}
+
+
+/*
+** Generate samples for one of the YM3812's
+**
+** 'which' is the virtual YM3812 number
+** '*buffer' is the output buffer pointer
+** 'length' is the number of samples that should be generated
+*/
+void YM3812UpdateOne(void *chip, OPLSAMPLE *buffer, int length)
+{
+ FM_OPL *OPL = (FM_OPL *)chip;
+ UINT8 rhythm = OPL->rhythm&0x20;
+ OPLSAMPLE *buf = buffer;
+ int i;
+
+ for( i=0; i < length ; i++ )
+ {
+ int lt;
+
+ OPL->output[0] = 0;
+
+ advance_lfo(OPL);
+
+ /* FM part */
+ OPL_CALC_CH(OPL, &OPL->P_CH[0]);
+ OPL_CALC_CH(OPL, &OPL->P_CH[1]);
+ OPL_CALC_CH(OPL, &OPL->P_CH[2]);
+ OPL_CALC_CH(OPL, &OPL->P_CH[3]);
+ OPL_CALC_CH(OPL, &OPL->P_CH[4]);
+ OPL_CALC_CH(OPL, &OPL->P_CH[5]);
+
+ if(!rhythm)
+ {
+ OPL_CALC_CH(OPL, &OPL->P_CH[6]);
+ OPL_CALC_CH(OPL, &OPL->P_CH[7]);
+ OPL_CALC_CH(OPL, &OPL->P_CH[8]);
+ }
+ else /* Rhythm part */
+ {
+ OPL_CALC_RH(OPL, &OPL->P_CH[0], (OPL->noise_rng>>0)&1 );
+ }
+
+ lt = OPL->output[0];
+
+ //lt >>= FINAL_SH;
+ lt <<= 2;
+
+ /* limit check */
+ lt = limit( lt , MAXOUT, MINOUT );
+
+#ifdef SAVE_SAMPLE
+ if (which==0)
+ {
+ SAVE_ALL_CHANNELS
+ }
+#endif
+
+ /* store to sound buffer */
+ //buf[i] = lt;
+
+ buf[i*2] = lt; // stereo version
+ buf[i*2+1] = lt;
+
+ advance(OPL);
+ }
+}
+#endif /* BUILD_YM3812 */
+
+// Rockbox: we don't care about the rest.
+
+#if (BUILD_YM3526)
+
+void *ym3526_init(device_t *device, UINT32 clock, UINT32 rate)
+{
+ /* emulator create */
+ FM_OPL *YM3526 = OPLCreate(device,clock,rate,OPL_TYPE_YM3526);
+ if (YM3526)
+ {
+ OPL_save_state(YM3526, device);
+ ym3526_reset_chip(YM3526);
+ }
+ return YM3526;
+}
+
+void ym3526_shutdown(void *chip)
+{
+ FM_OPL *YM3526 = (FM_OPL *)chip;
+ /* emulator shutdown */
+ OPLDestroy(YM3526);
+}
+void ym3526_reset_chip(void *chip)
+{
+ FM_OPL *YM3526 = (FM_OPL *)chip;
+ OPLResetChip(YM3526);
+}
+
+int ym3526_write(void *chip, int a, int v)
+{
+ FM_OPL *YM3526 = (FM_OPL *)chip;
+ return OPLWrite(YM3526, a, v);
+}
+
+unsigned char ym3526_read(void *chip, int a)
+{
+ FM_OPL *YM3526 = (FM_OPL *)chip;
+ /* YM3526 always returns bit2 and bit1 in HIGH state */
+ return OPLRead(YM3526, a) | 0x06 ;
+}
+int ym3526_timer_over(void *chip, int c)
+{
+ FM_OPL *YM3526 = (FM_OPL *)chip;
+ return OPLTimerOver(YM3526, c);
+}
+
+void ym3526_set_timer_handler(void *chip, OPL_TIMERHANDLER timer_handler, void *param)
+{
+ FM_OPL *YM3526 = (FM_OPL *)chip;
+ OPLSetTimerHandler(YM3526, timer_handler, param);
+}
+void ym3526_set_irq_handler(void *chip,OPL_IRQHANDLER IRQHandler,void *param)
+{
+ FM_OPL *YM3526 = (FM_OPL *)chip;
+ OPLSetIRQHandler(YM3526, IRQHandler, param);
+}
+void ym3526_set_update_handler(void *chip,OPL_UPDATEHANDLER UpdateHandler,void *param)
+{
+ FM_OPL *YM3526 = (FM_OPL *)chip;
+ OPLSetUpdateHandler(YM3526, UpdateHandler, param);
+}
+
+
+/*
+** Generate samples for one of the YM3526's
+**
+** 'which' is the virtual YM3526 number
+** '*buffer' is the output buffer pointer
+** 'length' is the number of samples that should be generated
+*/
+void ym3526_update_one(void *chip, OPLSAMPLE *buffer, int length)
+{
+ FM_OPL *OPL = (FM_OPL *)chip;
+ UINT8 rhythm = OPL->rhythm&0x20;
+ OPLSAMPLE *buf = buffer;
+ int i;
+
+ for( i=0; i < length ; i++ )
+ {
+ int lt;
+
+ OPL->output[0] = 0;
+
+ advance_lfo(OPL);
+
+ /* FM part */
+ OPL_CALC_CH(OPL, &OPL->P_CH[0]);
+ OPL_CALC_CH(OPL, &OPL->P_CH[1]);
+ OPL_CALC_CH(OPL, &OPL->P_CH[2]);
+ OPL_CALC_CH(OPL, &OPL->P_CH[3]);
+ OPL_CALC_CH(OPL, &OPL->P_CH[4]);
+ OPL_CALC_CH(OPL, &OPL->P_CH[5]);
+
+ if(!rhythm)
+ {
+ OPL_CALC_CH(OPL, &OPL->P_CH[6]);
+ OPL_CALC_CH(OPL, &OPL->P_CH[7]);
+ OPL_CALC_CH(OPL, &OPL->P_CH[8]);
+ }
+ else /* Rhythm part */
+ {
+ OPL_CALC_RH(OPL, &OPL->P_CH[0], (OPL->noise_rng>>0)&1 );
+ }
+
+ lt = OPL->output[0];
+
+ lt >>= FINAL_SH;
+
+ /* limit check */
+ lt = limit( lt , MAXOUT, MINOUT );
+
+#ifdef SAVE_SAMPLE
+ if (which==0)
+ {
+ SAVE_ALL_CHANNELS
+ }
+#endif
+
+ /* store to sound buffer */
+ buf[i] = lt;
+
+ advance(OPL);
+ }
+
+}
+#endif /* BUILD_YM3526 */
+
+
+
+
+#if BUILD_Y8950
+
+static void Y8950_deltat_status_set(void *chip, UINT8 changebits)
+{
+ FM_OPL *Y8950 = (FM_OPL *)chip;
+ OPL_STATUS_SET(Y8950, changebits);
+}
+static void Y8950_deltat_status_reset(void *chip, UINT8 changebits)
+{
+ FM_OPL *Y8950 = (FM_OPL *)chip;
+ OPL_STATUS_RESET(Y8950, changebits);
+}
+
+void *y8950_init(device_t *device, UINT32 clock, UINT32 rate)
+{
+ /* emulator create */
+ FM_OPL *Y8950 = OPLCreate(device,clock,rate,OPL_TYPE_Y8950);
+ if (Y8950)
+ {
+ Y8950->deltat->status_set_handler = Y8950_deltat_status_set;
+ Y8950->deltat->status_reset_handler = Y8950_deltat_status_reset;
+ Y8950->deltat->status_change_which_chip = Y8950;
+ Y8950->deltat->status_change_EOS_bit = 0x10; /* status flag: set bit4 on End Of Sample */
+ Y8950->deltat->status_change_BRDY_bit = 0x08; /* status flag: set bit3 on BRDY (End Of: ADPCM analysis/synthesis, memory reading/writing) */
+
+ /*Y8950->deltat->write_time = 10.0 / clock;*/ /* a single byte write takes 10 cycles of main clock */
+ /*Y8950->deltat->read_time = 8.0 / clock;*/ /* a single byte read takes 8 cycles of main clock */
+ /* reset */
+ OPL_save_state(Y8950, device);
+ y8950_reset_chip(Y8950);
+ }
+
+ return Y8950;
+}
+
+void y8950_shutdown(void *chip)
+{
+ FM_OPL *Y8950 = (FM_OPL *)chip;
+ /* emulator shutdown */
+ OPLDestroy(Y8950);
+}
+void y8950_reset_chip(void *chip)
+{
+ FM_OPL *Y8950 = (FM_OPL *)chip;
+ OPLResetChip(Y8950);
+}
+
+int y8950_write(void *chip, int a, int v)
+{
+ FM_OPL *Y8950 = (FM_OPL *)chip;
+ return OPLWrite(Y8950, a, v);
+}
+
+unsigned char y8950_read(void *chip, int a)
+{
+ FM_OPL *Y8950 = (FM_OPL *)chip;
+ return OPLRead(Y8950, a);
+}
+int y8950_timer_over(void *chip, int c)
+{
+ FM_OPL *Y8950 = (FM_OPL *)chip;
+ return OPLTimerOver(Y8950, c);
+}
+
+void y8950_set_timer_handler(void *chip, OPL_TIMERHANDLER timer_handler, void *param)
+{
+ FM_OPL *Y8950 = (FM_OPL *)chip;
+ OPLSetTimerHandler(Y8950, timer_handler, param);
+}
+void y8950_set_irq_handler(void *chip,OPL_IRQHANDLER IRQHandler,void *param)
+{
+ FM_OPL *Y8950 = (FM_OPL *)chip;
+ OPLSetIRQHandler(Y8950, IRQHandler, param);
+}
+void y8950_set_update_handler(void *chip,OPL_UPDATEHANDLER UpdateHandler,void *param)
+{
+ FM_OPL *Y8950 = (FM_OPL *)chip;
+ OPLSetUpdateHandler(Y8950, UpdateHandler, param);
+}
+
+void y8950_set_delta_t_memory(void *chip, void * deltat_mem_ptr, int deltat_mem_size )
+{
+ FM_OPL *OPL = (FM_OPL *)chip;
+ OPL->deltat->memory = (UINT8 *)(deltat_mem_ptr);
+ OPL->deltat->memory_size = deltat_mem_size;
+}
+
+/*
+** Generate samples for one of the Y8950's
+**
+** 'which' is the virtual Y8950 number
+** '*buffer' is the output buffer pointer
+** 'length' is the number of samples that should be generated
+*/
+void y8950_update_one(void *chip, OPLSAMPLE *buffer, int length)
+{
+ int i;
+ FM_OPL *OPL = (FM_OPL *)chip;
+ UINT8 rhythm = OPL->rhythm&0x20;
+ YM_DELTAT *DELTAT = OPL->deltat;
+ OPLSAMPLE *buf = buffer;
+
+ for( i=0; i < length ; i++ )
+ {
+ int lt;
+
+ OPL->output[0] = 0;
+ OPL->output_deltat[0] = 0;
+
+ advance_lfo(OPL);
+
+ /* deltaT ADPCM */
+ if( DELTAT->portstate&0x80 )
+ YM_DELTAT_ADPCM_CALC(DELTAT);
+
+ /* FM part */
+ OPL_CALC_CH(OPL, &OPL->P_CH[0]);
+ OPL_CALC_CH(OPL, &OPL->P_CH[1]);
+ OPL_CALC_CH(OPL, &OPL->P_CH[2]);
+ OPL_CALC_CH(OPL, &OPL->P_CH[3]);
+ OPL_CALC_CH(OPL, &OPL->P_CH[4]);
+ OPL_CALC_CH(OPL, &OPL->P_CH[5]);
+
+ if(!rhythm)
+ {
+ OPL_CALC_CH(OPL, &OPL->P_CH[6]);
+ OPL_CALC_CH(OPL, &OPL->P_CH[7]);
+ OPL_CALC_CH(OPL, &OPL->P_CH[8]);
+ }
+ else /* Rhythm part */
+ {
+ OPL_CALC_RH(OPL, &OPL->P_CH[0], (OPL->noise_rng>>0)&1 );
+ }
+
+ lt = OPL->output[0] + (OPL->output_deltat[0]>>11);
+
+ lt >>= FINAL_SH;
+
+ /* limit check */
+ lt = limit( lt , MAXOUT, MINOUT );
+
+#ifdef SAVE_SAMPLE
+ if (which==0)
+ {
+ SAVE_ALL_CHANNELS
+ }
+#endif
+
+ /* store to sound buffer */
+ buf[i] = lt;
+
+ advance(OPL);
+ }
+
+}
+
+void y8950_set_port_handler(void *chip,OPL_PORTHANDLER_W PortHandler_w,OPL_PORTHANDLER_R PortHandler_r,void * param)
+{
+ FM_OPL *OPL = (FM_OPL *)chip;
+ OPL->porthandler_w = PortHandler_w;
+ OPL->porthandler_r = PortHandler_r;
+ OPL->port_param = param;
+}
+
+void y8950_set_keyboard_handler(void *chip,OPL_PORTHANDLER_W KeyboardHandler_w,OPL_PORTHANDLER_R KeyboardHandler_r,void * param)
+{
+ FM_OPL *OPL = (FM_OPL *)chip;
+ OPL->keyboardhandler_w = KeyboardHandler_w;
+ OPL->keyboardhandler_r = KeyboardHandler_r;
+ OPL->keyboard_param = param;
+}
+
+#endif
diff --git a/apps/plugins/sdl/progs/wolf3d/fmopl_gpl.h b/apps/plugins/sdl/progs/wolf3d/fmopl_gpl.h
new file mode 100644
index 0000000000..c340a17a7d
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/fmopl_gpl.h
@@ -0,0 +1,117 @@
+#ifndef __FMOPL_H_
+#define __FMOPL_H_
+
+#include "wl_def.h"
+
+#define HAS_YM3812 1
+
+/* --- select emulation chips --- */
+#define BUILD_YM3812 (HAS_YM3812)
+#define BUILD_YM3526 (HAS_YM3526)
+#define BUILD_Y8950 (HAS_Y8950)
+
+/* select output bits size of output : 8 or 16 */
+#define OPL_SAMPLE_BITS 16
+
+/* compiler dependence */
+#ifndef OSD_CPU_H
+#define OSD_CPU_H
+typedef unsigned char UINT8; /* unsigned 8bit */
+typedef unsigned short UINT16; /* unsigned 16bit */
+typedef unsigned int UINT32; /* unsigned 32bit */
+typedef signed char INT8; /* signed 8bit */
+typedef signed short INT16; /* signed 16bit */
+typedef signed int INT32; /* signed 32bit */
+#endif
+
+#if (OPL_SAMPLE_BITS==16)
+typedef INT16 OPLSAMPLE;
+#endif
+#if (OPL_SAMPLE_BITS==8)
+typedef INT8 OPLSAMPLE;
+#endif
+
+
+typedef void (*OPL_TIMERHANDLER)(int channel,double interval_Sec);
+typedef void (*OPL_IRQHANDLER)(int param,int irq);
+typedef void (*OPL_UPDATEHANDLER)(int param,int min_interval_us);
+typedef void (*OPL_PORTHANDLER_W)(int param,unsigned char data);
+typedef unsigned char (*OPL_PORTHANDLER_R)(int param);
+
+
+#if BUILD_YM3812
+
+
+typedef void device_t;
+void *YM3812Init(device_t *junk, UINT32 clock, UINT32 rate);
+void YM3812Shutdown(void *chip);
+void YM3812ResetChip(void *chip);
+int YM3812Write(void *chip, int a, int v);
+unsigned char YM3812Read(void *chip, int a);
+void YM3812Mute(void *chip,int channel,bool mute);
+int YM3812TimerOver(void *chip, int c);
+void YM3812UpdateOne(void *chip, INT16 *buffer, int length);
+
+// not used
+//void YM3812SetTimerHandler(void *chip, OPL_TIMERHANDLER TimerHandler, int channelOffset);
+//void YM3812SetIRQHandler(void *chip, OPL_IRQHANDLER IRQHandler, int param);
+//void YM3812SetUpdateHandler(void *chip, OPL_UPDATEHANDLER UpdateHandler, int param);
+
+#endif
+
+
+#if BUILD_YM3526
+
+/*
+** Initialize YM3526 emulator(s).
+**
+** 'num' is the number of virtual YM3526's to allocate
+** 'clock' is the chip clock in Hz
+** 'rate' is sampling rate
+*/
+int YM3526Init(int num, int clock, int rate);
+/* shutdown the YM3526 emulators*/
+void YM3526Shutdown(void);
+void YM3526ResetChip(int which);
+int YM3526Write(int which, int a, int v);
+unsigned char YM3526Read(int which, int a);
+int YM3526TimerOver(int which, int c);
+/*
+** Generate samples for one of the YM3526's
+**
+** 'which' is the virtual YM3526 number
+** '*buffer' is the output buffer pointer
+** 'length' is the number of samples that should be generated
+*/
+void YM3526UpdateOne(int which, INT16 *buffer, int length);
+
+void YM3526SetTimerHandler(int which, OPL_TIMERHANDLER TimerHandler, int channelOffset);
+void YM3526SetIRQHandler(int which, OPL_IRQHANDLER IRQHandler, int param);
+void YM3526SetUpdateHandler(int which, OPL_UPDATEHANDLER UpdateHandler, int param);
+
+#endif
+
+
+#if BUILD_Y8950
+
+/* Y8950 port handlers */
+void Y8950SetPortHandler(int which, OPL_PORTHANDLER_W PortHandler_w, OPL_PORTHANDLER_R PortHandler_r, int param);
+void Y8950SetKeyboardHandler(int which, OPL_PORTHANDLER_W KeyboardHandler_w, OPL_PORTHANDLER_R KeyboardHandler_r, int param);
+void Y8950SetDeltaTMemory(int which, void * deltat_mem_ptr, int deltat_mem_size );
+
+int Y8950Init (int num, int clock, int rate);
+void Y8950Shutdown (void);
+void Y8950ResetChip (int which);
+int Y8950Write (int which, int a, int v);
+unsigned char Y8950Read (int which, int a);
+int Y8950TimerOver (int which, int c);
+void Y8950UpdateOne (int which, INT16 *buffer, int length);
+
+void Y8950SetTimerHandler (int which, OPL_TIMERHANDLER TimerHandler, int channelOffset);
+void Y8950SetIRQHandler (int which, OPL_IRQHANDLER IRQHandler, int param);
+void Y8950SetUpdateHandler (int which, OPL_UPDATEHANDLER UpdateHandler, int param);
+
+#endif
+
+
+#endif /* __FMOPL_H_ */
diff --git a/apps/plugins/sdl/progs/wolf3d/foreign.h b/apps/plugins/sdl/progs/wolf3d/foreign.h
new file mode 100644
index 0000000000..b0f2f2197f
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/foreign.h
@@ -0,0 +1,131 @@
+#define QUITSUR "Are you sure you want\n"\
+ "to quit this great game?"
+
+#define CURGAME "You are currently in\n"\
+ "a game. Continuing will\n"\
+ "erase old game. Ok?"
+
+#define GAMESVD "There's already a game\n"\
+ "saved at this position.\n"\
+ " Overwrite?"
+
+#define ENDGAMESTR "Are you sure you want\n"\
+ "to end the game you\n"\
+ "are playing? (Y or N):"
+
+#define STR_NG "New Game"
+#define STR_SD "Sound"
+#define STR_CL "Control"
+#define STR_LG "Load Game"
+#define STR_SG "Save Game"
+#define STR_CV "Change View"
+#define STR_VS "View Scores"
+#define STR_EG "End Game"
+#define STR_BD "Back to Demo"
+#define STR_QT "Quit"
+
+#define STR_LOADING "Loading"
+#define STR_SAVING "Saving"
+
+#define STR_GAME "Game"
+#define STR_DEMO "Demo"
+#define STR_LGC "Load Game called\n\""
+#define STR_EMPTY "empty"
+#define STR_CALIB "Calibrate"
+#define STR_JOYST "Joystick"
+#define STR_MOVEJOY "Move joystick to\nupper left and\npress button 0\n"
+#define STR_MOVEJOY2 "Move joystick to\nlower right and\npress button 1\n"
+#define STR_ESCEXIT "ESC to exit"
+
+#define STR_NONE "None"
+#define STR_PC "PC Speaker"
+#define STR_ALSB "AdLib/Sound Blaster"
+#define STR_DISNEY "Disney Sound Source"
+#define STR_SB "Sound Blaster"
+
+#define STR_MOUSEEN "Mouse Enabled"
+#define STR_JOYEN "Joystick Enabled"
+#define STR_PORT2 "Use joystick port 2"
+#define STR_GAMEPAD "Gravis GamePad Enabled"
+#define STR_SENS "Mouse Sensitivity"
+#define STR_CUSTOM "Customize controls"
+
+#define STR_DADDY "Can I play, Daddy?"
+#define STR_HURTME "Don't hurt me."
+#define STR_BRINGEM "Bring 'em on!"
+#define STR_DEATH "I am Death incarnate!"
+
+#define STR_MOUSEADJ "Adjust Mouse Sensitivity"
+#define STR_SLOW "Slow"
+#define STR_FAST "Fast"
+
+#define STR_CRUN "Run"
+#define STR_COPEN "Open"
+#define STR_CFIRE "Fire"
+#define STR_CSTRAFE "Strafe"
+
+#define STR_LEFT "Left"
+#define STR_RIGHT "Right"
+#define STR_FRWD "Frwd"
+#define STR_BKWD "Bkwrd"
+#define STR_THINK "Thinking"
+
+#define STR_SIZE1 "Use arrows to size"
+#define STR_SIZE2 "ENTER to accept"
+#define STR_SIZE3 "ESC to cancel"
+
+#define STR_YOUWIN "you win!"
+
+#define STR_TOTALTIME "total time"
+
+#define STR_RATKILL "kill %"
+#define STR_RATSECRET "secret %"
+#define STR_RATTREASURE "treasure %"
+
+#define STR_BONUS "bonus"
+#define STR_TIME "time"
+#define STR_PAR " par"
+
+#define STR_RAT2KILL "kill ratio %"
+#define STR_RAT2SECRET "secret ratio %"
+#define STR_RAT2TREASURE "treasure ratio %"
+
+#define STR_DEFEATED "defeated!"
+
+#define STR_CHEATER1 "You now have 100% Health,"
+#define STR_CHEATER2 "99 Ammo and both Keys!"
+#define STR_CHEATER3 "Note that you have basically"
+#define STR_CHEATER4 "eliminated your chances of"
+#define STR_CHEATER5 "getting a high score!"
+
+#define STR_NOSPACE1 "There is not enough space"
+#define STR_NOSPACE2 "on your disk to Save Game!"
+
+#define STR_SAVECHT1 "Your Save Game file is,"
+#define STR_SAVECHT2 "shall we say, \"corrupted\"."
+#define STR_SAVECHT3 "But I'll let you go on and"
+#define STR_SAVECHT4 "play anyway...."
+
+#define STR_SEEAGAIN "Let's see that again!"
+
+#ifdef SPEAR
+#define ENDSTR1 "Heroes don't quit, but\ngo ahead and press " YESBUTTONNAME "\nif you aren't one."
+#define ENDSTR2 "Press " YESBUTTONNAME " to quit,\nor press " NOBUTTONNAME " to enjoy\nmore violent diversion."
+#define ENDSTR3 "Depressing the " YESBUTTONNAME " key means\nyou must return to the\nhumdrum workday world."
+#define ENDSTR4 "Hey, quit or play,\n" YESBUTTONNAME " or " NOBUTTONNAME ":\nit's your choice."
+#define ENDSTR5 "Sure you don't want to\nwaste a few more\nproductive hours?"
+#define ENDSTR6 "I think you had better\nplay some more. Please\npress " NOBUTTONNAME "...please?"
+#define ENDSTR7 "If you are tough, press " NOBUTTONNAME ".\nIf not, press " YESBUTTONNAME " daintily."
+#define ENDSTR8 "I'm thinkin' that\nyou might wanna press " NOBUTTONNAME "\nto play more. You do it."
+#define ENDSTR9 "Sure. Fine. Quit.\nSee if we care.\nGet it over with.\nPress " YESBUTTONNAME "."
+#else
+#define ENDSTR1 "Dost thou wish to\nleave with such hasty\nabandon?"
+#define ENDSTR2 "Chickening out...\nalready?"
+#define ENDSTR3 "Press " NOBUTTONNAME " for more carnage.\nPress " YESBUTTONNAME " to be a weenie."
+#define ENDSTR4 "So, you think you can\nquit this easily, huh?"
+#define ENDSTR5 "Press " NOBUTTONNAME " to save the world.\nPress " YESBUTTONNAME " to abandon it in\nits hour of need."
+#define ENDSTR6 "Press " NOBUTTONNAME " if you are brave.\nPress " YESBUTTONNAME " to cower in shame."
+#define ENDSTR7 "Heroes, press " NOBUTTONNAME ".\nWimps, press " YESBUTTONNAME "."
+#define ENDSTR8 "You are at an intersection.\nA sign says, 'Press " YESBUTTONNAME " to quit.'\n>"
+#define ENDSTR9 "For guns and glory, press " NOBUTTONNAME ".\nFor work and worry, press " YESBUTTONNAME "."
+#endif
diff --git a/apps/plugins/sdl/progs/wolf3d/gfxv_apo.h b/apps/plugins/sdl/progs/wolf3d/gfxv_apo.h
new file mode 100644
index 0000000000..7352f88e6e
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/gfxv_apo.h
@@ -0,0 +1,244 @@
+//////////////////////////////////////
+//
+// Graphics .H file for Apogee v1.4
+// IGRAB-ed on Sun May 03 01:19:32 1992
+//
+//////////////////////////////////////
+
+typedef enum {
+ // Lump Start
+ H_BJPIC=3,
+ H_CASTLEPIC, // 4
+ H_KEYBOARDPIC, // 5
+ H_JOYPIC, // 6
+ H_HEALPIC, // 7
+ H_TREASUREPIC, // 8
+ H_GUNPIC, // 9
+ H_KEYPIC, // 10
+ H_BLAZEPIC, // 11
+ H_WEAPON1234PIC, // 12
+ H_WOLFLOGOPIC, // 13
+ H_VISAPIC, // 14
+ H_MCPIC, // 15
+ H_IDLOGOPIC, // 16
+ H_TOPWINDOWPIC, // 17
+ H_LEFTWINDOWPIC, // 18
+ H_RIGHTWINDOWPIC, // 19
+ H_BOTTOMINFOPIC, // 20
+#if !defined(APOGEE_1_0) && !defined(APOGEE_1_1) && !defined(APOGEE_1_2)
+ H_SPEARADPIC, // 21
+#endif
+ // Lump Start
+ C_OPTIONSPIC, // 22
+ C_CURSOR1PIC, // 23
+ C_CURSOR2PIC, // 24
+ C_NOTSELECTEDPIC, // 25
+ C_SELECTEDPIC, // 26
+ C_FXTITLEPIC, // 27
+ C_DIGITITLEPIC, // 28
+ C_MUSICTITLEPIC, // 29
+ C_MOUSELBACKPIC, // 30
+ C_BABYMODEPIC, // 31
+ C_EASYPIC, // 32
+ C_NORMALPIC, // 33
+ C_HARDPIC, // 34
+ C_LOADSAVEDISKPIC, // 35
+ C_DISKLOADING1PIC, // 36
+ C_DISKLOADING2PIC, // 37
+ C_CONTROLPIC, // 38
+ C_CUSTOMIZEPIC, // 39
+ C_LOADGAMEPIC, // 40
+ C_SAVEGAMEPIC, // 41
+ C_EPISODE1PIC, // 42
+ C_EPISODE2PIC, // 43
+ C_EPISODE3PIC, // 44
+ C_EPISODE4PIC, // 45
+ C_EPISODE5PIC, // 46
+ C_EPISODE6PIC, // 47
+ C_CODEPIC, // 48
+#ifndef APOGEE_1_0
+ C_TIMECODEPIC, // 49
+ C_LEVELPIC, // 50
+ C_NAMEPIC, // 51
+ C_SCOREPIC, // 52
+#if !defined(APOGEE_1_1) && !defined(APOGEE_1_2)
+ C_JOY1PIC, // 53
+ C_JOY2PIC, // 54
+#endif
+#else
+ C_TIMECODEPIC=C_CODEPIC, // 47
+#endif
+ // Lump Start
+ L_GUYPIC, // 55
+ L_COLONPIC, // 56
+ L_NUM0PIC, // 57
+ L_NUM1PIC, // 58
+ L_NUM2PIC, // 59
+ L_NUM3PIC, // 60
+ L_NUM4PIC, // 61
+ L_NUM5PIC, // 62
+ L_NUM6PIC, // 63
+ L_NUM7PIC, // 64
+ L_NUM8PIC, // 65
+ L_NUM9PIC, // 66
+ L_PERCENTPIC, // 67
+ L_APIC, // 68
+ L_BPIC, // 69
+ L_CPIC, // 70
+ L_DPIC, // 71
+ L_EPIC, // 72
+ L_FPIC, // 73
+ L_GPIC, // 74
+ L_HPIC, // 75
+ L_IPIC, // 76
+ L_JPIC, // 77
+ L_KPIC, // 78
+ L_LPIC, // 79
+ L_MPIC, // 80
+ L_NPIC, // 81
+ L_OPIC, // 82
+ L_PPIC, // 83
+ L_QPIC, // 84
+ L_RPIC, // 85
+ L_SPIC, // 86
+ L_TPIC, // 87
+ L_UPIC, // 88
+ L_VPIC, // 89
+ L_WPIC, // 90
+ L_XPIC, // 91
+ L_YPIC, // 92
+ L_ZPIC, // 93
+ L_EXPOINTPIC, // 94
+#ifndef APOGEE_1_0
+ L_APOSTROPHEPIC, // 95
+#endif
+ L_GUY2PIC, // 96
+ L_BJWINSPIC, // 97
+ STATUSBARPIC, // 98
+ TITLEPIC, // 99
+ PG13PIC, // 100
+ CREDITSPIC, // 101
+ HIGHSCORESPIC, // 102
+ // Lump Start
+ KNIFEPIC, // 103
+ GUNPIC, // 104
+ MACHINEGUNPIC, // 105
+ GATLINGGUNPIC, // 106
+ NOKEYPIC, // 107
+ GOLDKEYPIC, // 108
+ SILVERKEYPIC, // 109
+ N_BLANKPIC, // 110
+ N_0PIC, // 111
+ N_1PIC, // 112
+ N_2PIC, // 113
+ N_3PIC, // 114
+ N_4PIC, // 115
+ N_5PIC, // 116
+ N_6PIC, // 117
+ N_7PIC, // 118
+ N_8PIC, // 119
+ N_9PIC, // 120
+ FACE1APIC, // 121
+ FACE1BPIC, // 122
+ FACE1CPIC, // 123
+ FACE2APIC, // 124
+ FACE2BPIC, // 125
+ FACE2CPIC, // 126
+ FACE3APIC, // 127
+ FACE3BPIC, // 128
+ FACE3CPIC, // 129
+ FACE4APIC, // 130
+ FACE4BPIC, // 131
+ FACE4CPIC, // 132
+ FACE5APIC, // 133
+ FACE5BPIC, // 134
+ FACE5CPIC, // 135
+ FACE6APIC, // 136
+ FACE6BPIC, // 137
+ FACE6CPIC, // 138
+ FACE7APIC, // 139
+ FACE7BPIC, // 140
+ FACE7CPIC, // 141
+ FACE8APIC, // 142
+ GOTGATLINGPIC, // 143
+ MUTANTBJPIC, // 144
+ PAUSEDPIC, // 145
+ GETPSYCHEDPIC, // 146
+
+ TILE8, // 147
+
+ ORDERSCREEN, // 148
+ ERRORSCREEN, // 149
+ T_HELPART, // 150
+#ifdef APOGEE_1_0
+ T_ENDART1, // 143
+#endif
+ T_DEMO0, // 151
+ T_DEMO1, // 152
+ T_DEMO2, // 153
+ T_DEMO3, // 154
+#ifndef APOGEE_1_0
+ T_ENDART1, // 155
+ T_ENDART2, // 156
+ T_ENDART3, // 157
+ T_ENDART4, // 158
+ T_ENDART5, // 159
+ T_ENDART6, // 160
+#endif
+
+ ENUMEND
+} graphicnums;
+
+//
+// Data LUMPs
+//
+#define README_LUMP_START H_BJPIC
+#define README_LUMP_END H_BOTTOMINFOPIC
+
+#define CONTROLS_LUMP_START C_OPTIONSPIC
+#define CONTROLS_LUMP_END (L_GUYPIC - 1)
+
+#define LEVELEND_LUMP_START L_GUYPIC
+#define LEVELEND_LUMP_END L_BJWINSPIC
+
+#define LATCHPICS_LUMP_START KNIFEPIC
+#define LATCHPICS_LUMP_END GETPSYCHEDPIC
+
+
+//
+// Amount of each data item
+//
+#define NUMCHUNKS ENUMEND
+#define NUMFONT 2
+#define NUMFONTM 0
+#define NUMPICS (GETPSYCHEDPIC - NUMFONT)
+#define NUMPICM 0
+#define NUMSPRITES 0
+#define NUMTILE8 72
+#define NUMTILE8M 0
+#define NUMTILE16 0
+#define NUMTILE16M 0
+#define NUMTILE32 0
+#define NUMTILE32M 0
+#define NUMEXTERNS 13
+//
+// File offsets for data items
+//
+#define STRUCTPIC 0
+
+#define STARTFONT 1
+#define STARTFONTM 3
+#define STARTPICS 3
+#define STARTPICM TILE8
+#define STARTSPRITES TILE8
+#define STARTTILE8 TILE8
+#define STARTTILE8M ORDERSCREEN
+#define STARTTILE16 ORDERSCREEN
+#define STARTTILE16M ORDERSCREEN
+#define STARTTILE32 ORDERSCREEN
+#define STARTTILE32M ORDERSCREEN
+#define STARTEXTERNS ORDERSCREEN
+
+//
+// Thank you for using IGRAB!
+//
diff --git a/apps/plugins/sdl/progs/wolf3d/gfxv_sod.h b/apps/plugins/sdl/progs/wolf3d/gfxv_sod.h
new file mode 100644
index 0000000000..8c82a89696
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/gfxv_sod.h
@@ -0,0 +1,290 @@
+//////////////////////////////////////
+//
+// Graphics .H file for .SOD
+// IGRAB-ed on Thu Oct 08 20:38:29 1992
+//
+//////////////////////////////////////
+
+typedef enum {
+ // Lump Start
+ C_BACKDROPPIC=3,
+ C_MOUSELBACKPIC, // 4
+ C_CURSOR1PIC, // 5
+ C_CURSOR2PIC, // 6
+ C_NOTSELECTEDPIC, // 7
+ C_SELECTEDPIC, // 8
+ // Lump Start
+ C_CUSTOMIZEPIC, // 9
+ C_JOY1PIC, // 10
+ C_JOY2PIC, // 11
+ C_MOUSEPIC, // 12
+ C_JOYSTICKPIC, // 13
+ C_KEYBOARDPIC, // 14
+ C_CONTROLPIC, // 15
+ // Lump Start
+ C_OPTIONSPIC, // 16
+ // Lump Start
+ C_FXTITLEPIC, // 17
+ C_DIGITITLEPIC, // 18
+ C_MUSICTITLEPIC, // 19
+ // Lump Start
+ C_HOWTOUGHPIC, // 20
+ C_BABYMODEPIC, // 21
+ C_EASYPIC, // 22
+ C_NORMALPIC, // 23
+ C_HARDPIC, // 24
+ // Lump Start
+ C_DISKLOADING1PIC, // 25
+ C_DISKLOADING2PIC, // 26
+ C_LOADGAMEPIC, // 27
+ C_SAVEGAMEPIC, // 28
+ // Lump Start
+ HIGHSCORESPIC, // 29
+ C_WONSPEARPIC, // 30
+#ifndef SPEARDEMO
+ // Lump Start
+ BJCOLLAPSE1PIC, // 31
+ BJCOLLAPSE2PIC, // 32
+ BJCOLLAPSE3PIC, // 33
+ BJCOLLAPSE4PIC, // 34
+ ENDPICPIC, // 35
+#endif
+ // Lump Start
+ L_GUYPIC, // 36
+ L_COLONPIC, // 37
+ L_NUM0PIC, // 38
+ L_NUM1PIC, // 39
+ L_NUM2PIC, // 40
+ L_NUM3PIC, // 41
+ L_NUM4PIC, // 42
+ L_NUM5PIC, // 43
+ L_NUM6PIC, // 44
+ L_NUM7PIC, // 45
+ L_NUM8PIC, // 46
+ L_NUM9PIC, // 47
+ L_PERCENTPIC, // 48
+ L_APIC, // 49
+ L_BPIC, // 50
+ L_CPIC, // 51
+ L_DPIC, // 52
+ L_EPIC, // 53
+ L_FPIC, // 54
+ L_GPIC, // 55
+ L_HPIC, // 56
+ L_IPIC, // 57
+ L_JPIC, // 58
+ L_KPIC, // 59
+ L_LPIC, // 60
+ L_MPIC, // 61
+ L_NPIC, // 62
+ L_OPIC, // 63
+ L_PPIC, // 64
+ L_QPIC, // 65
+ L_RPIC, // 66
+ L_SPIC, // 67
+ L_TPIC, // 68
+ L_UPIC, // 69
+ L_VPIC, // 70
+ L_WPIC, // 71
+ L_XPIC, // 72
+ L_YPIC, // 73
+ L_ZPIC, // 74
+ L_EXPOINTPIC, // 75
+ L_APOSTROPHEPIC, // 76
+ L_GUY2PIC, // 77
+ L_BJWINSPIC, // 78
+ // Lump Start
+ TITLE1PIC, // 79
+ TITLE2PIC, // 80
+#ifndef SPEARDEMO
+ // Lump Start
+ ENDSCREEN11PIC, // 81
+ // Lump Start
+ ENDSCREEN12PIC, // 82
+ ENDSCREEN3PIC, // 83
+ ENDSCREEN4PIC, // 84
+ ENDSCREEN5PIC, // 85
+ ENDSCREEN6PIC, // 86
+ ENDSCREEN7PIC, // 87
+ ENDSCREEN8PIC, // 88
+ ENDSCREEN9PIC, // 89
+#endif
+ STATUSBARPIC, // 90
+ PG13PIC, // 91
+ CREDITSPIC, // 92
+#ifndef SPEARDEMO
+ // Lump Start
+ IDGUYS1PIC, // 93
+ IDGUYS2PIC, // 94
+ // Lump Start
+ COPYPROTTOPPIC, // 95
+ COPYPROTBOXPIC, // 96
+ BOSSPIC1PIC, // 97
+ BOSSPIC2PIC, // 98
+ BOSSPIC3PIC, // 99
+ BOSSPIC4PIC, // 100
+#endif
+ // Lump Start
+ KNIFEPIC, // 101
+ GUNPIC, // 102
+ MACHINEGUNPIC, // 103
+ GATLINGGUNPIC, // 104
+ NOKEYPIC, // 105
+ GOLDKEYPIC, // 106
+ SILVERKEYPIC, // 107
+ N_BLANKPIC, // 108
+ N_0PIC, // 109
+ N_1PIC, // 110
+ N_2PIC, // 111
+ N_3PIC, // 112
+ N_4PIC, // 113
+ N_5PIC, // 114
+ N_6PIC, // 115
+ N_7PIC, // 116
+ N_8PIC, // 117
+ N_9PIC, // 118
+ FACE1APIC, // 119
+ FACE1BPIC, // 120
+ FACE1CPIC, // 121
+ FACE2APIC, // 122
+ FACE2BPIC, // 123
+ FACE2CPIC, // 124
+ FACE3APIC, // 125
+ FACE3BPIC, // 126
+ FACE3CPIC, // 127
+ FACE4APIC, // 128
+ FACE4BPIC, // 129
+ FACE4CPIC, // 130
+ FACE5APIC, // 131
+ FACE5BPIC, // 132
+ FACE5CPIC, // 133
+ FACE6APIC, // 134
+ FACE6BPIC, // 135
+ FACE6CPIC, // 136
+ FACE7APIC, // 137
+ FACE7BPIC, // 138
+ FACE7CPIC, // 139
+ FACE8APIC, // 140
+ GOTGATLINGPIC, // 141
+ GODMODEFACE1PIC, // 142
+ GODMODEFACE2PIC, // 143
+ GODMODEFACE3PIC, // 144
+ BJWAITING1PIC, // 145
+ BJWAITING2PIC, // 146
+ BJOUCHPIC, // 147
+ PAUSEDPIC, // 148
+ GETPSYCHEDPIC, // 149
+
+ TILE8, // 150
+
+ ORDERSCREEN, // 151
+ ERRORSCREEN, // 152
+ TITLEPALETTE, // 153
+#ifndef SPEARDEMO
+ END1PALETTE, // 154
+ END2PALETTE, // 155
+ END3PALETTE, // 156
+ END4PALETTE, // 157
+ END5PALETTE, // 158
+ END6PALETTE, // 159
+ END7PALETTE, // 160
+ END8PALETTE, // 161
+ END9PALETTE, // 162
+ IDGUYSPALETTE, // 163
+#endif
+ T_DEMO0, // 164
+#ifndef SPEARDEMO
+ T_DEMO1, // 165
+ T_DEMO2, // 166
+ T_DEMO3, // 167
+ T_ENDART1, // 168
+#endif
+ ENUMEND
+} graphicnums;
+
+//
+// Data LUMPs
+//
+#define BACKDROP_LUMP_START 3
+#define BACKDROP_LUMP_END 8
+
+#define CONTROL_LUMP_START 9
+#define CONTROL_LUMP_END 15
+
+#define OPTIONS_LUMP_START 16
+#define OPTIONS_LUMP_END 16
+
+#define SOUND_LUMP_START 17
+#define SOUND_LUMP_END 19
+
+#define NEWGAME_LUMP_START 20
+#define NEWGAME_LUMP_END 24
+
+#define LOADSAVE_LUMP_START 25
+#define LOADSAVE_LUMP_END 28
+
+#define HIGHSCORES_LUMP_START 29
+#define HIGHSCORES_LUMP_END 30
+
+#define ENDGAME_LUMP_START 31
+#define ENDGAME_LUMP_END 35
+
+#define LEVELEND_LUMP_START L_GUYPIC
+#define LEVELEND_LUMP_END L_BJWINSPIC
+
+#define TITLESCREEN_LUMP_START TITLE1PIC
+#define TITLESCREEN_LUMP_END TITLE2PIC
+
+#define ENDGAME1_LUMP_START ENDSCREEN11PIC
+#define ENDGAME1_LUMP_END ENDSCREEN11PIC
+
+#define ENDGAME2_LUMP_START ENDSCREEN12PIC
+#define ENDGAME2_LUMP_END ENDSCREEN12PIC
+
+#define EASTEREGG_LUMP_START IDGUYS1PIC
+#define EASTEREGG_LUMP_END IDGUYS2PIC
+
+#define COPYPROT_LUMP_START COPYPROTTOPPIC
+#define COPYPROT_LUMP_END BOSSPIC4PIC
+
+#define LATCHPICS_LUMP_START KNIFEPIC
+#define LATCHPICS_LUMP_END GETPSYCHEDPIC
+
+
+//
+// Amount of each data item
+//
+#define NUMCHUNKS ENUMEND
+#define NUMFONT 2
+#define NUMFONTM 0
+#define NUMPICS (GETPSYCHEDPIC - NUMFONT)
+#define NUMPICM 0
+#define NUMSPRITES 0
+#define NUMTILE8 72
+#define NUMTILE8M 0
+#define NUMTILE16 0
+#define NUMTILE16M 0
+#define NUMTILE32 0
+#define NUMTILE32M 0
+#define NUMEXTERNS 18
+//
+// File offsets for data items
+//
+#define STRUCTPIC 0
+
+#define STARTFONT 1
+#define STARTFONTM 3
+#define STARTPICS 3
+#define STARTPICM TILE8
+#define STARTSPRITES TILE8
+#define STARTTILE8 TILE8
+#define STARTTILE8M ORDERSCREEN
+#define STARTTILE16 ORDERSCREEN
+#define STARTTILE16M ORDERSCREEN
+#define STARTTILE32 ORDERSCREEN
+#define STARTTILE32M ORDERSCREEN
+#define STARTEXTERNS ORDERSCREEN
+
+//
+// Thank you for using IGRAB!
+//
diff --git a/apps/plugins/sdl/progs/wolf3d/gfxv_wl6.h b/apps/plugins/sdl/progs/wolf3d/gfxv_wl6.h
new file mode 100644
index 0000000000..f1403ba265
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/gfxv_wl6.h
@@ -0,0 +1,216 @@
+//////////////////////////////////////
+//
+// Graphics .H file for .WL6
+// IGRAB-ed on Wed Apr 13 06:58:44 1994
+//
+//////////////////////////////////////
+
+typedef enum {
+ // Lump Start
+ H_BJPIC=3,
+ H_CASTLEPIC, // 4
+ H_BLAZEPIC, // 5
+ H_TOPWINDOWPIC, // 6
+ H_LEFTWINDOWPIC, // 7
+ H_RIGHTWINDOWPIC, // 8
+ H_BOTTOMINFOPIC, // 9
+ // Lump Start
+ C_OPTIONSPIC, // 10
+ C_CURSOR1PIC, // 11
+ C_CURSOR2PIC, // 12
+ C_NOTSELECTEDPIC, // 13
+ C_SELECTEDPIC, // 14
+ C_FXTITLEPIC, // 15
+ C_DIGITITLEPIC, // 16
+ C_MUSICTITLEPIC, // 17
+ C_MOUSELBACKPIC, // 18
+ C_BABYMODEPIC, // 19
+ C_EASYPIC, // 20
+ C_NORMALPIC, // 21
+ C_HARDPIC, // 22
+ C_LOADSAVEDISKPIC, // 23
+ C_DISKLOADING1PIC, // 24
+ C_DISKLOADING2PIC, // 25
+ C_CONTROLPIC, // 26
+ C_CUSTOMIZEPIC, // 27
+ C_LOADGAMEPIC, // 28
+ C_SAVEGAMEPIC, // 29
+ C_EPISODE1PIC, // 30
+ C_EPISODE2PIC, // 31
+ C_EPISODE3PIC, // 32
+ C_EPISODE4PIC, // 33
+ C_EPISODE5PIC, // 34
+ C_EPISODE6PIC, // 35
+ C_CODEPIC, // 36
+ C_TIMECODEPIC, // 37
+ C_LEVELPIC, // 38
+ C_NAMEPIC, // 39
+ C_SCOREPIC, // 40
+ C_JOY1PIC, // 41
+ C_JOY2PIC, // 42
+ // Lump Start
+ L_GUYPIC, // 43
+ L_COLONPIC, // 44
+ L_NUM0PIC, // 45
+ L_NUM1PIC, // 46
+ L_NUM2PIC, // 47
+ L_NUM3PIC, // 48
+ L_NUM4PIC, // 49
+ L_NUM5PIC, // 50
+ L_NUM6PIC, // 51
+ L_NUM7PIC, // 52
+ L_NUM8PIC, // 53
+ L_NUM9PIC, // 54
+ L_PERCENTPIC, // 55
+ L_APIC, // 56
+ L_BPIC, // 57
+ L_CPIC, // 58
+ L_DPIC, // 59
+ L_EPIC, // 60
+ L_FPIC, // 61
+ L_GPIC, // 62
+ L_HPIC, // 63
+ L_IPIC, // 64
+ L_JPIC, // 65
+ L_KPIC, // 66
+ L_LPIC, // 67
+ L_MPIC, // 68
+ L_NPIC, // 69
+ L_OPIC, // 70
+ L_PPIC, // 71
+ L_QPIC, // 72
+ L_RPIC, // 73
+ L_SPIC, // 74
+ L_TPIC, // 75
+ L_UPIC, // 76
+ L_VPIC, // 77
+ L_WPIC, // 78
+ L_XPIC, // 79
+ L_YPIC, // 80
+ L_ZPIC, // 81
+ L_EXPOINTPIC, // 82
+ L_APOSTROPHEPIC, // 83
+ L_GUY2PIC, // 84
+ L_BJWINSPIC, // 85
+ STATUSBARPIC, // 86
+ TITLEPIC, // 87
+ PG13PIC, // 88
+ CREDITSPIC, // 89
+ HIGHSCORESPIC, // 90
+ // Lump Start
+ KNIFEPIC, // 91
+ GUNPIC, // 92
+ MACHINEGUNPIC, // 93
+ GATLINGGUNPIC, // 94
+ NOKEYPIC, // 95
+ GOLDKEYPIC, // 96
+ SILVERKEYPIC, // 97
+ N_BLANKPIC, // 98
+ N_0PIC, // 99
+ N_1PIC, // 100
+ N_2PIC, // 101
+ N_3PIC, // 102
+ N_4PIC, // 103
+ N_5PIC, // 104
+ N_6PIC, // 105
+ N_7PIC, // 106
+ N_8PIC, // 107
+ N_9PIC, // 108
+ FACE1APIC, // 109
+ FACE1BPIC, // 110
+ FACE1CPIC, // 111
+ FACE2APIC, // 112
+ FACE2BPIC, // 113
+ FACE2CPIC, // 114
+ FACE3APIC, // 115
+ FACE3BPIC, // 116
+ FACE3CPIC, // 117
+ FACE4APIC, // 118
+ FACE4BPIC, // 119
+ FACE4CPIC, // 120
+ FACE5APIC, // 121
+ FACE5BPIC, // 122
+ FACE5CPIC, // 123
+ FACE6APIC, // 124
+ FACE6BPIC, // 125
+ FACE6CPIC, // 126
+ FACE7APIC, // 127
+ FACE7BPIC, // 128
+ FACE7CPIC, // 129
+ FACE8APIC, // 130
+ GOTGATLINGPIC, // 131
+ MUTANTBJPIC, // 132
+ PAUSEDPIC, // 133
+ GETPSYCHEDPIC, // 134
+
+
+
+ ORDERSCREEN=136,
+ ERRORSCREEN, // 137
+ T_HELPART, // 138
+ T_DEMO0, // 139
+ T_DEMO1, // 140
+ T_DEMO2, // 141
+ T_DEMO3, // 142
+ T_ENDART1, // 143
+ T_ENDART2, // 144
+ T_ENDART3, // 145
+ T_ENDART4, // 146
+ T_ENDART5, // 147
+ T_ENDART6, // 148
+ ENUMEND
+} graphicnums;
+
+//
+// Data LUMPs
+//
+#define README_LUMP_START 3
+#define README_LUMP_END 9
+
+#define CONTROLS_LUMP_START 10
+#define CONTROLS_LUMP_END 42
+
+#define LEVELEND_LUMP_START 43
+#define LEVELEND_LUMP_END 85
+
+#define LATCHPICS_LUMP_START 91
+#define LATCHPICS_LUMP_END 134
+
+
+//
+// Amount of each data item
+//
+#define NUMCHUNKS 149
+#define NUMFONT 2
+#define NUMFONTM 0
+#define NUMPICS 132
+#define NUMPICM 0
+#define NUMSPRITES 0
+#define NUMTILE8 72
+#define NUMTILE8M 0
+#define NUMTILE16 0
+#define NUMTILE16M 0
+#define NUMTILE32 0
+#define NUMTILE32M 0
+#define NUMEXTERNS 13
+//
+// File offsets for data items
+//
+#define STRUCTPIC 0
+
+#define STARTFONT 1
+#define STARTFONTM 3
+#define STARTPICS 3
+#define STARTPICM 135
+#define STARTSPRITES 135
+#define STARTTILE8 135
+#define STARTTILE8M 136
+#define STARTTILE16 136
+#define STARTTILE16M 136
+#define STARTTILE32 136
+#define STARTTILE32M 136
+#define STARTEXTERNS 136
+
+//
+// Thank you for using IGRAB!
+//
diff --git a/apps/plugins/sdl/progs/wolf3d/gp2x.h b/apps/plugins/sdl/progs/wolf3d/gp2x.h
new file mode 100644
index 0000000000..f8b3557a41
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/gp2x.h
@@ -0,0 +1,51 @@
+#ifndef GP2X_H
+#define GP2X_H
+
+#include <SDL/SDL.h>
+#include <sys/ioctl.h>
+#include <sys/soundcard.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#include "wl_def.h"
+
+#define GP2X_BUTTON_UP (0)
+#define GP2X_BUTTON_DOWN (4)
+#define GP2X_BUTTON_LEFT (2)
+#define GP2X_BUTTON_RIGHT (6)
+#define GP2X_BUTTON_UPLEFT (1)
+#define GP2X_BUTTON_UPRIGHT (7)
+#define GP2X_BUTTON_DOWNLEFT (3)
+#define GP2X_BUTTON_DOWNRIGHT (5)
+#define GP2X_BUTTON_CLICK (18)
+#define GP2X_BUTTON_A (12)
+#define GP2X_BUTTON_B (13)
+#define GP2X_BUTTON_X (15)
+#define GP2X_BUTTON_Y (14)
+#define GP2X_BUTTON_L (11)
+#define GP2X_BUTTON_R (10)
+#define GP2X_BUTTON_START (8)
+#define GP2X_BUTTON_SELECT (9)
+#define GP2X_BUTTON_VOLUP (16)
+#define GP2X_BUTTON_VOLDOWN (17)
+
+#define VOLUME_MIN 0
+#define VOLUME_MAX 100
+#define VOLUME_CHANGE_RATE 2
+#define VOLUME_NOCHG 0
+#define VOLUME_DOWN 1
+#define VOLUME_UP 2
+#define KEY_DOWN 1
+#define KEY_UP 0
+
+void GP2X_Init();
+void GP2X_Shutdown();
+void GP2X_StartMMUHack();
+
+void GP2X_AdjustVolume( int direction );
+void GP2X_ButtonDown( int button );
+void GP2X_ButtonUp( int button );
+void Screenshot( void );
+void SetKeyboard( unsigned int key, int press );
+
+#endif // GP2X_H
diff --git a/apps/plugins/sdl/progs/wolf3d/id_ca.c b/apps/plugins/sdl/progs/wolf3d/id_ca.c
new file mode 100644
index 0000000000..c6131a9882
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/id_ca.c
@@ -0,0 +1,1113 @@
+// ID_CA.C
+
+// this has been customized for WOLF
+
+/*
+=============================================================================
+
+Id Software Caching Manager
+---------------------------
+
+Must be started BEFORE the memory manager, because it needs to get the headers
+loaded into the data segment
+
+=============================================================================
+*/
+
+#include <SDL.h>
+
+
+#include "wl_def.h"
+#pragma hdrstop
+
+#define THREEBYTEGRSTARTS
+
+/*
+=============================================================================
+
+ LOCAL CONSTANTS
+
+=============================================================================
+*/
+
+typedef struct
+{
+ word bit0,bit1; // 0-255 is a character, > is a pointer to a node
+} huffnode;
+
+
+typedef struct
+{
+ word RLEWtag;
+ int32_t headeroffsets[100];
+} mapfiletype;
+
+
+/*
+=============================================================================
+
+ GLOBAL VARIABLES
+
+=============================================================================
+*/
+
+#define BUFFERSIZE 0x1000
+static int32_t bufferseg[BUFFERSIZE/4];
+
+int mapon;
+
+word *mapsegs[MAPPLANES];
+static maptype* mapheaderseg[NUMMAPS];
+byte *audiosegs[NUMSNDCHUNKS];
+byte *grsegs[NUMCHUNKS];
+
+word RLEWtag;
+
+int numEpisodesMissing = 0;
+
+/*
+=============================================================================
+
+ LOCAL VARIABLES
+
+=============================================================================
+*/
+
+char extension[5]; // Need a string, not constant to change cache files
+char graphext[5];
+char audioext[5];
+static const char gheadname[] = DATADIR "vgahead.";
+static const char gfilename[] = DATADIR "vgagraph.";
+static const char gdictname[] = DATADIR "vgadict.";
+static const char mheadname[] = DATADIR "maphead.";
+static const char mfilename[] = DATADIR "maptemp.";
+static const char mfilecama[] = DATADIR "gamemaps.";
+static const char aheadname[] = DATADIR "audiohed.";
+static const char afilename[] = DATADIR "audiot.";
+
+void CA_CannotOpen(const char *string);
+
+static int32_t grstarts[NUMCHUNKS + 1];
+static int32_t* audiostarts; // array of offsets in audio / audiot
+
+#ifdef GRHEADERLINKED
+huffnode *grhuffman;
+#else
+huffnode grhuffman[255];
+#endif
+
+int grhandle = -1; // handle to EGAGRAPH
+int maphandle = -1; // handle to MAPTEMP / GAMEMAPS
+int audiohandle = -1; // handle to AUDIOT / AUDIO
+
+int32_t chunkcomplen,chunkexplen;
+
+SDMode oldsoundmode;
+
+
+static int32_t GRFILEPOS(const size_t idx)
+{
+ assert(idx < lengthof(grstarts));
+ return grstarts[idx];
+}
+
+/*
+=============================================================================
+
+ LOW LEVEL ROUTINES
+
+=============================================================================
+*/
+
+/*
+============================
+=
+= CAL_GetGrChunkLength
+=
+= Gets the length of an explicit length chunk (not tiles)
+= The file pointer is positioned so the compressed data can be read in next.
+=
+============================
+*/
+
+void CAL_GetGrChunkLength (int chunk)
+{
+ lseek(grhandle,GRFILEPOS(chunk),SEEK_SET);
+ read(grhandle,&chunkexplen,sizeof(chunkexplen));
+ chunkcomplen = GRFILEPOS(chunk+1)-GRFILEPOS(chunk)-4;
+}
+
+
+/*
+==========================
+=
+= CA_WriteFile
+=
+= Writes a file from a memory buffer
+=
+==========================
+*/
+
+boolean CA_WriteFile (const char *filename, void *ptr, int32_t length)
+{
+ const int handle = open(filename, O_CREAT | O_WRONLY | O_BINARY, 0644);
+ if (handle == -1)
+ return false;
+
+ if (!write (handle,ptr,length))
+ {
+ close (handle);
+ return false;
+ }
+ close (handle);
+ return true;
+}
+
+
+
+/*
+==========================
+=
+= CA_LoadFile
+=
+= Allocate space for and load a file
+=
+==========================
+*/
+
+boolean CA_LoadFile (const char *filename, memptr *ptr)
+{
+ int32_t size;
+
+ const int handle = open(filename, O_RDONLY | O_BINARY);
+ if (handle == -1)
+ return false;
+
+ size = lseek(handle, 0, SEEK_END);
+ lseek(handle, 0, SEEK_SET);
+ *ptr=malloc(size);
+ CHECKMALLOCRESULT(*ptr);
+ if (!read (handle,*ptr,size))
+ {
+ close (handle);
+ return false;
+ }
+ close (handle);
+ return true;
+}
+
+/*
+============================================================================
+
+ COMPRESSION routines, see JHUFF.C for more
+
+============================================================================
+*/
+
+static void CAL_HuffExpand(byte *source, byte *dest, int32_t length, huffnode *hufftable)
+{
+ byte *end;
+ huffnode *headptr, *huffptr;
+
+ if(!length || !dest)
+ {
+ Quit("length or dest is null!");
+ return;
+ }
+
+ headptr = hufftable+254; // head node is always node 254
+
+ int written = 0;
+
+ end=dest+length;
+
+ byte val = *source++;
+ byte mask = 1;
+ word nodeval;
+ huffptr = headptr;
+ while(1)
+ {
+ if(!(val & mask))
+ nodeval = huffptr->bit0;
+ else
+ nodeval = huffptr->bit1;
+ if(mask==0x80)
+ {
+ val = *source++;
+ mask = 1;
+ }
+ else mask <<= 1;
+
+ if(nodeval<256)
+ {
+ *dest++ = (byte) nodeval;
+ written++;
+ huffptr = headptr;
+ if(dest>=end) break;
+ }
+ else
+ {
+ huffptr = hufftable + (nodeval - 256);
+ }
+ }
+}
+
+/*
+======================
+=
+= CAL_CarmackExpand
+=
+= Length is the length of the EXPANDED data
+=
+======================
+*/
+
+#define NEARTAG 0xa7
+#define FARTAG 0xa8
+
+void CAL_CarmackExpand (byte *source, word *dest, int length)
+{
+ word ch,chhigh,count,offset;
+ byte *inptr;
+ word *copyptr, *outptr;
+
+ length/=2;
+
+ inptr = (byte *) source;
+ outptr = dest;
+
+ while (length>0)
+ {
+ ch = READWORD(&inptr);
+ chhigh = ch>>8;
+ if (chhigh == NEARTAG)
+ {
+ count = ch&0xff;
+ if (!count)
+ { // have to insert a word containing the tag byte
+ ch |= *inptr++;
+ *outptr++ = ch;
+ length--;
+ }
+ else
+ {
+ offset = *inptr++;
+ copyptr = outptr - offset;
+ length -= count;
+ if(length<0) return;
+ while (count--)
+ *outptr++ = *copyptr++;
+ }
+ }
+ else if (chhigh == FARTAG)
+ {
+ count = ch&0xff;
+ if (!count)
+ { // have to insert a word containing the tag byte
+ ch |= *inptr++;
+ *outptr++ = ch;
+ length --;
+ }
+ else
+ {
+ offset = READWORD(&inptr);
+ copyptr = dest + offset;
+ length -= count;
+ if(length<0) return;
+ while (count--)
+ *outptr++ = *copyptr++;
+ }
+ }
+ else
+ {
+ *outptr++ = ch;
+ length --;
+ }
+ }
+}
+
+/*
+======================
+=
+= CA_RLEWcompress
+=
+======================
+*/
+
+int32_t CA_RLEWCompress (word *source, int32_t length, word *dest, word rlewtag)
+{
+ word value,count;
+ unsigned i;
+ word *start,*end;
+
+ start = dest;
+
+ end = source + (length+1)/2;
+
+ //
+ // compress it
+ //
+ do
+ {
+ count = 1;
+ value = *source++;
+ while (*source == value && source<end)
+ {
+ count++;
+ source++;
+ }
+ if (count>3 || value == rlewtag)
+ {
+ //
+ // send a tag / count / value string
+ //
+ *dest++ = rlewtag;
+ *dest++ = count;
+ *dest++ = value;
+ }
+ else
+ {
+ //
+ // send word without compressing
+ //
+ for (i=1;i<=count;i++)
+ *dest++ = value;
+ }
+
+ } while (source<end);
+
+ return (int32_t)(2*(dest-start));
+}
+
+
+/*
+======================
+=
+= CA_RLEWexpand
+= length is EXPANDED length
+=
+======================
+*/
+
+void CA_RLEWexpand (word *source, word *dest, int32_t length, word rlewtag)
+{
+ word value,count,i;
+ word *end=dest+length/2;
+
+//
+// expand it
+//
+ do
+ {
+ value = *source++;
+ if (value != rlewtag)
+ //
+ // uncompressed
+ //
+ *dest++=value;
+ else
+ {
+ //
+ // compressed string
+ //
+ count = *source++;
+ value = *source++;
+ for (i=1;i<=count;i++)
+ *dest++ = value;
+ }
+ } while (dest<end);
+}
+
+
+
+/*
+=============================================================================
+
+ CACHE MANAGER ROUTINES
+
+=============================================================================
+*/
+
+
+/*
+======================
+=
+= CAL_SetupGrFile
+=
+======================
+*/
+
+void CAL_SetupGrFile (void)
+{
+ char fname[13 + sizeof(DATADIR)];
+ int handle;
+ byte *compseg;
+
+#ifdef GRHEADERLINKED
+
+ grhuffman = (huffnode *)&EGAdict;
+ grstarts = (int32_t _seg *)FP_SEG(&EGAhead);
+
+#else
+
+//
+// load ???dict.ext (huffman dictionary for graphics files)
+//
+
+ strcpy(fname,gdictname);
+ strcat(fname,graphext);
+
+ handle = open(fname, O_RDONLY | O_BINARY);
+ if (handle == -1)
+ CA_CannotOpen(fname);
+
+ read(handle, grhuffman, sizeof(grhuffman));
+ close(handle);
+
+ // load the data offsets from ???head.ext
+ strcpy(fname,gheadname);
+ strcat(fname,graphext);
+
+ handle = open(fname, O_RDONLY | O_BINARY);
+ if (handle == -1)
+ CA_CannotOpen(fname);
+
+ long headersize = lseek(handle, 0, SEEK_END);
+ lseek(handle, 0, SEEK_SET);
+
+#ifndef APOGEE_1_0
+ int expectedsize = lengthof(grstarts) - numEpisodesMissing;
+#else
+ int expectedsize = lengthof(grstarts);
+#endif
+
+ if(!param_ignorenumchunks && headersize / 3 != (long) expectedsize)
+ Quit("Wolf4SDL was not compiled for these data files:\n"
+ "%s contains a wrong number of offsets (%i instead of %i)!\n\n"
+ "Please check whether you are using the right executable!\n"
+ "(For mod developers: perhaps you forgot to update NUMCHUNKS?)",
+ fname, headersize / 3, expectedsize);
+
+ byte data[lengthof(grstarts) * 3];
+ read(handle, data, sizeof(data));
+ close(handle);
+
+ const byte* d = data;
+ for (int32_t* i = grstarts; i != endof(grstarts); ++i)
+ {
+ const int32_t val = d[0] | d[1] << 8 | d[2] << 16;
+ *i = (val == 0x00FFFFFF ? -1 : val);
+ d += 3;
+ }
+#endif
+
+//
+// Open the graphics file, leaving it open until the game is finished
+//
+ strcpy(fname,gfilename);
+ strcat(fname,graphext);
+
+ grhandle = open(fname, O_RDONLY | O_BINARY);
+ if (grhandle == -1)
+ CA_CannotOpen(fname);
+
+
+//
+// load the pic and sprite headers into the arrays in the data segment
+//
+ pictable=(pictabletype *) malloc(NUMPICS*sizeof(pictabletype));
+ CHECKMALLOCRESULT(pictable);
+ CAL_GetGrChunkLength(STRUCTPIC); // position file pointer
+ compseg=(byte *) malloc(chunkcomplen);
+ CHECKMALLOCRESULT(compseg);
+ read (grhandle,compseg,chunkcomplen);
+ CAL_HuffExpand(compseg, (byte*)pictable, NUMPICS * sizeof(pictabletype), grhuffman);
+ free(compseg);
+}
+
+//==========================================================================
+
+
+/*
+======================
+=
+= CAL_SetupMapFile
+=
+======================
+*/
+
+void CAL_SetupMapFile (void)
+{
+ int i;
+ int handle;
+ int32_t length,pos;
+ char fname[13 + sizeof(DATADIR)];
+
+//
+// load maphead.ext (offsets and tileinfo for map file)
+//
+ strcpy(fname,mheadname);
+ strcat(fname,extension);
+
+ handle = open(fname, O_RDONLY | O_BINARY);
+ if (handle == -1)
+ CA_CannotOpen(fname);
+
+ length = NUMMAPS*4+2; // used to be "filelength(handle);"
+ mapfiletype *tinf=(mapfiletype *) malloc(sizeof(mapfiletype));
+ CHECKMALLOCRESULT(tinf);
+ read(handle, tinf, length);
+ close(handle);
+
+ RLEWtag=tinf->RLEWtag;
+
+//
+// open the data file
+//
+#ifdef CARMACIZED
+ strcpy(fname, mfilecama);
+ strcat(fname, extension);
+
+ maphandle = open(fname, O_RDONLY | O_BINARY);
+ if (maphandle == -1)
+ CA_CannotOpen(fname);
+#else
+ strcpy(fname,mfilename);
+ strcat(fname,extension);
+
+ maphandle = open(fname, O_RDONLY | O_BINARY);
+ if (maphandle == -1)
+ CA_CannotOpen(fname);
+#endif
+
+//
+// load all map header
+//
+ for (i=0;i<NUMMAPS;i++)
+ {
+ pos = tinf->headeroffsets[i];
+ if (pos<0) // $FFFFFFFF start is a sparse map
+ continue;
+
+ mapheaderseg[i]=(maptype *) malloc(sizeof(maptype));
+ CHECKMALLOCRESULT(mapheaderseg[i]);
+ lseek(maphandle,pos,SEEK_SET);
+ read (maphandle,(memptr)mapheaderseg[i],sizeof(maptype));
+ }
+
+ free(tinf);
+
+//
+// allocate space for 3 64*64 planes
+//
+ for (i=0;i<MAPPLANES;i++)
+ {
+ mapsegs[i]=(word *) malloc(maparea*2);
+ CHECKMALLOCRESULT(mapsegs[i]);
+ }
+}
+
+
+//==========================================================================
+
+
+/*
+======================
+=
+= CAL_SetupAudioFile
+=
+======================
+*/
+
+void CAL_SetupAudioFile (void)
+{
+ char fname[13 + sizeof(DATADIR)];
+
+//
+// load audiohed.ext (offsets for audio file)
+//
+ strcpy(fname,aheadname);
+ strcat(fname,audioext);
+
+ void* ptr;
+ if (!CA_LoadFile(fname, &ptr))
+ CA_CannotOpen(fname);
+ audiostarts = (int32_t*)ptr;
+
+//
+// open the data file
+//
+ strcpy(fname,afilename);
+ strcat(fname,audioext);
+
+ audiohandle = open(fname, O_RDONLY | O_BINARY);
+ if (audiohandle == -1)
+ CA_CannotOpen(fname);
+}
+
+//==========================================================================
+
+
+/*
+======================
+=
+= CA_Startup
+=
+= Open all files and load in headers
+=
+======================
+*/
+
+void CA_Startup (void)
+{
+#ifdef PROFILE
+ unlink ("PROFILE.TXT");
+ profilehandle = open("PROFILE.TXT", O_CREAT | O_WRONLY | O_TEXT);
+#endif
+
+ CAL_SetupMapFile ();
+ CAL_SetupGrFile ();
+ CAL_SetupAudioFile ();
+
+ mapon = -1;
+}
+
+//==========================================================================
+
+
+/*
+======================
+=
+= CA_Shutdown
+=
+= Closes all files
+=
+======================
+*/
+
+void CA_Shutdown (void)
+{
+ int i,start;
+
+ if(maphandle != -1)
+ close(maphandle);
+ if(grhandle != -1)
+ close(grhandle);
+ if(audiohandle != -1)
+ close(audiohandle);
+
+ for(i=0; i<NUMCHUNKS; i++)
+ UNCACHEGRCHUNK(i);
+ free(pictable);
+
+ switch(oldsoundmode)
+ {
+ case sdm_Off:
+ return;
+ case sdm_PC:
+ start = STARTPCSOUNDS;
+ break;
+ case sdm_AdLib:
+ start = STARTADLIBSOUNDS;
+ break;
+ }
+
+ for(i=0; i<NUMSOUNDS; i++,start++)
+ UNCACHEAUDIOCHUNK(start);
+}
+
+//===========================================================================
+
+/*
+======================
+=
+= CA_CacheAudioChunk
+=
+======================
+*/
+
+int32_t CA_CacheAudioChunk (int chunk)
+{
+#ifdef SOUND_ENABLE
+ int32_t pos = audiostarts[chunk];
+ int32_t size = audiostarts[chunk+1]-pos;
+
+ if (audiosegs[chunk])
+ return size; // already in memory
+
+ audiosegs[chunk]=(byte *) malloc(size);
+ CHECKMALLOCRESULT(audiosegs[chunk]);
+
+ lseek(audiohandle,pos,SEEK_SET);
+ read(audiohandle,audiosegs[chunk],size);
+
+ return size;
+#endif
+ return 0;
+}
+
+void CA_CacheAdlibSoundChunk (int chunk)
+{
+#ifdef SOUND_ENABLE
+ int32_t pos = audiostarts[chunk];
+ int32_t size = audiostarts[chunk+1]-pos;
+
+ if (audiosegs[chunk])
+ return; // already in memory
+
+ lseek(audiohandle, pos, SEEK_SET);
+ read(audiohandle, bufferseg, ORIG_ADLIBSOUND_SIZE - 1); // without data[1]
+
+ AdLibSound *sound = (AdLibSound *) malloc(size + sizeof(AdLibSound) - ORIG_ADLIBSOUND_SIZE);
+ CHECKMALLOCRESULT(sound);
+
+ byte *ptr = (byte *) bufferseg;
+ sound->common.length = READLONGWORD(&ptr);
+ sound->common.priority = READWORD(&ptr);
+ sound->inst.mChar = *ptr++;
+ sound->inst.cChar = *ptr++;
+ sound->inst.mScale = *ptr++;
+ sound->inst.cScale = *ptr++;
+ sound->inst.mAttack = *ptr++;
+ sound->inst.cAttack = *ptr++;
+ sound->inst.mSus = *ptr++;
+ sound->inst.cSus = *ptr++;
+ sound->inst.mWave = *ptr++;
+ sound->inst.cWave = *ptr++;
+ sound->inst.nConn = *ptr++;
+ sound->inst.voice = *ptr++;
+ sound->inst.mode = *ptr++;
+ sound->inst.unused[0] = *ptr++;
+ sound->inst.unused[1] = *ptr++;
+ sound->inst.unused[2] = *ptr++;
+ sound->block = *ptr++;
+
+ read(audiohandle, sound->data, size - ORIG_ADLIBSOUND_SIZE + 1); // + 1 because of byte data[1]
+
+ audiosegs[chunk]=(byte *) sound;
+#endif
+}
+
+//===========================================================================
+
+/*
+======================
+=
+= CA_LoadAllSounds
+=
+= Purges all sounds, then loads all new ones (mode switch)
+=
+======================
+*/
+
+void CA_LoadAllSounds (void)
+{
+#ifdef SOUND_ENABLE
+ unsigned start,i;
+
+ switch (oldsoundmode)
+ {
+ case sdm_Off:
+ goto cachein;
+ case sdm_PC:
+ start = STARTPCSOUNDS;
+ break;
+ case sdm_AdLib:
+ start = STARTADLIBSOUNDS;
+ break;
+ }
+
+ for (i=0;i<NUMSOUNDS;i++,start++)
+ UNCACHEAUDIOCHUNK(start);
+
+cachein:
+
+ oldsoundmode = SoundMode;
+
+ switch (SoundMode)
+ {
+ case sdm_Off:
+ start = STARTADLIBSOUNDS; // needed for priorities...
+ break;
+ case sdm_PC:
+ start = STARTPCSOUNDS;
+ break;
+ case sdm_AdLib:
+ start = STARTADLIBSOUNDS;
+ break;
+ }
+
+ if(start == STARTADLIBSOUNDS)
+ {
+ for (i=0;i<NUMSOUNDS;i++,start++)
+ CA_CacheAdlibSoundChunk(start);
+ }
+ else
+ {
+ for (i=0;i<NUMSOUNDS;i++,start++)
+ CA_CacheAudioChunk(start);
+ }
+#endif
+}
+
+//===========================================================================
+
+
+/*
+======================
+=
+= CAL_ExpandGrChunk
+=
+= Does whatever is needed with a pointer to a compressed chunk
+=
+======================
+*/
+
+void CAL_ExpandGrChunk (int chunk, int32_t *source)
+{
+ int32_t expanded;
+
+ if (chunk >= STARTTILE8 && chunk < STARTEXTERNS)
+ {
+ //
+ // expanded sizes of tile8/16/32 are implicit
+ //
+
+#define BLOCK 64
+#define MASKBLOCK 128
+
+ if (chunk<STARTTILE8M) // tile 8s are all in one chunk!
+ expanded = BLOCK*NUMTILE8;
+ else if (chunk<STARTTILE16)
+ expanded = MASKBLOCK*NUMTILE8M;
+ else if (chunk<STARTTILE16M) // all other tiles are one/chunk
+ expanded = BLOCK*4;
+ else if (chunk<STARTTILE32)
+ expanded = MASKBLOCK*4;
+ else if (chunk<STARTTILE32M)
+ expanded = BLOCK*16;
+ else
+ expanded = MASKBLOCK*16;
+ }
+ else
+ {
+ //
+ // everything else has an explicit size longword
+ //
+ expanded = *source++;
+ }
+
+ //
+ // allocate final space, decompress it, and free bigbuffer
+ // Sprites need to have shifts made and various other junk
+ //
+ grsegs[chunk]=(byte *) malloc(expanded);
+ CHECKMALLOCRESULT(grsegs[chunk]);
+ CAL_HuffExpand((byte *) source, grsegs[chunk], expanded, grhuffman);
+}
+
+
+/*
+======================
+=
+= CA_CacheGrChunk
+=
+= Makes sure a given chunk is in memory, loadiing it if needed
+=
+======================
+*/
+
+void CA_CacheGrChunk (int chunk)
+{
+ int32_t pos,compressed;
+ int32_t *source;
+ int next;
+
+ if (grsegs[chunk])
+ return; // already in memory
+
+//
+// load the chunk into a buffer, either the miscbuffer if it fits, or allocate
+// a larger buffer
+//
+ pos = GRFILEPOS(chunk);
+ if (pos<0) // $FFFFFFFF start is a sparse tile
+ return;
+
+ next = chunk +1;
+ while (GRFILEPOS(next) == -1) // skip past any sparse tiles
+ next++;
+
+ compressed = GRFILEPOS(next)-pos;
+
+ lseek(grhandle,pos,SEEK_SET);
+
+ if (compressed<=BUFFERSIZE)
+ {
+ read(grhandle,bufferseg,compressed);
+ source = bufferseg;
+ }
+ else
+ {
+ source = (int32_t *) malloc(compressed);
+ CHECKMALLOCRESULT(source);
+ read(grhandle,source,compressed);
+ }
+
+ CAL_ExpandGrChunk (chunk,source);
+
+ if (compressed>BUFFERSIZE)
+ free(source);
+}
+
+
+
+//==========================================================================
+
+/*
+======================
+=
+= CA_CacheScreen
+=
+= Decompresses a chunk from disk straight onto the screen
+=
+======================
+*/
+
+void CA_CacheScreen (int chunk)
+{
+ int32_t pos,compressed,expanded;
+ memptr bigbufferseg;
+ int32_t *source;
+ int next;
+
+//
+// load the chunk into a buffer
+//
+ pos = GRFILEPOS(chunk);
+ next = chunk +1;
+ while (GRFILEPOS(next) == -1) // skip past any sparse tiles
+ next++;
+ compressed = GRFILEPOS(next)-pos;
+
+ lseek(grhandle,pos,SEEK_SET);
+
+ bigbufferseg=malloc(compressed);
+ CHECKMALLOCRESULT(bigbufferseg);
+ read(grhandle,bigbufferseg,compressed);
+ source = (int32_t *) bigbufferseg;
+
+ expanded = *source++;
+
+//
+// allocate final space, decompress it, and free bigbuffer
+// Sprites need to have shifts made and various other junk
+//
+ byte *pic = (byte *) malloc(64000);
+ CHECKMALLOCRESULT(pic);
+ CAL_HuffExpand((byte *) source, pic, expanded, grhuffman);
+
+ byte *vbuf = LOCK();
+ for(int y = 0, scy = 0; y < 200; y++, scy += scaleFactor)
+ {
+ for(int x = 0, scx = 0; x < 320; x++, scx += scaleFactor)
+ {
+ byte col = pic[(y * 80 + (x >> 2)) + (x & 3) * 80 * 200];
+ for(unsigned i = 0; i < scaleFactor; i++)
+ for(unsigned j = 0; j < scaleFactor; j++)
+ vbuf[(scy + i) * curPitch + scx + j] = col;
+ }
+ }
+ UNLOCK();
+ free(pic);
+ free(bigbufferseg);
+}
+
+//==========================================================================
+
+/*
+======================
+=
+= CA_CacheMap
+=
+= WOLF: This is specialized for a 64*64 map size
+=
+======================
+*/
+
+void CA_CacheMap (int mapnum)
+{
+ int32_t pos,compressed;
+ int plane;
+ word *dest;
+ memptr bigbufferseg;
+ unsigned size;
+ word *source;
+#ifdef CARMACIZED
+ word *buffer2seg;
+ int32_t expanded;
+#endif
+
+ mapon = mapnum;
+
+//
+// load the planes into the allready allocated buffers
+//
+ size = maparea*2;
+
+ for (plane = 0; plane<MAPPLANES; plane++)
+ {
+ pos = mapheaderseg[mapnum]->planestart[plane];
+ compressed = mapheaderseg[mapnum]->planelength[plane];
+
+ dest = mapsegs[plane];
+
+ lseek(maphandle,pos,SEEK_SET);
+ if (compressed<=BUFFERSIZE)
+ source = (word *) bufferseg;
+ else
+ {
+ bigbufferseg=malloc(compressed);
+ CHECKMALLOCRESULT(bigbufferseg);
+ source = (word *) bigbufferseg;
+ }
+
+ read(maphandle,source,compressed);
+#ifdef CARMACIZED
+ //
+ // unhuffman, then unRLEW
+ // The huffman'd chunk has a two byte expanded length first
+ // The resulting RLEW chunk also does, even though it's not really
+ // needed
+ //
+ expanded = *source;
+ source++;
+ buffer2seg = (word *) malloc(expanded);
+ CHECKMALLOCRESULT(buffer2seg);
+ CAL_CarmackExpand((byte *) source, buffer2seg,expanded);
+ CA_RLEWexpand(buffer2seg+1,dest,size,RLEWtag);
+ free(buffer2seg);
+
+#else
+ //
+ // unRLEW, skipping expanded length
+ //
+ CA_RLEWexpand (source+1,dest,size,RLEWtag);
+#endif
+
+ if (compressed>BUFFERSIZE)
+ free(bigbufferseg);
+ }
+}
+
+//===========================================================================
+
+void CA_CannotOpen(const char *string)
+{
+ char str[30];
+
+ strcpy(str,"Can't open ");
+ strcat(str,string);
+ strcat(str,"!\n");
+ Quit (str);
+}
diff --git a/apps/plugins/sdl/progs/wolf3d/id_ca.h b/apps/plugins/sdl/progs/wolf3d/id_ca.h
new file mode 100644
index 0000000000..87a8886417
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/id_ca.h
@@ -0,0 +1,60 @@
+#ifndef __ID_CA__
+#define __ID_CA__
+
+//===========================================================================
+
+#define NUMMAPS 60
+#ifdef USE_FLOORCEILINGTEX
+ #define MAPPLANES 3
+#else
+ #define MAPPLANES 2
+#endif
+
+#define UNCACHEGRCHUNK(chunk) {if(grsegs[chunk]) {free(grsegs[chunk]); grsegs[chunk]=NULL;}}
+#define UNCACHEAUDIOCHUNK(chunk) {if(audiosegs[chunk]) {free(audiosegs[chunk]); audiosegs[chunk]=NULL;}}
+
+//===========================================================================
+
+typedef struct
+{
+ int32_t planestart[3];
+ word planelength[3];
+ word width,height;
+ char name[16];
+} maptype;
+
+//===========================================================================
+
+extern int mapon;
+
+extern word *mapsegs[MAPPLANES];
+extern byte *audiosegs[NUMSNDCHUNKS];
+extern byte *grsegs[NUMCHUNKS];
+
+extern char extension[5];
+extern char graphext[5];
+extern char audioext[5];
+
+//===========================================================================
+
+boolean CA_LoadFile (const char *filename, memptr *ptr);
+boolean CA_WriteFile (const char *filename, void *ptr, int32_t length);
+
+int32_t CA_RLEWCompress (word *source, int32_t length, word *dest, word rlewtag);
+
+void CA_RLEWexpand (word *source, word *dest, int32_t length, word rlewtag);
+
+void CA_Startup (void);
+void CA_Shutdown (void);
+
+int32_t CA_CacheAudioChunk (int chunk);
+void CA_LoadAllSounds (void);
+
+void CA_CacheGrChunk (int chunk);
+void CA_CacheMap (int mapnum);
+
+void CA_CacheScreen (int chunk);
+
+void CA_CannotOpen(const char *name);
+
+#endif
diff --git a/apps/plugins/sdl/progs/wolf3d/id_in.c b/apps/plugins/sdl/progs/wolf3d/id_in.c
new file mode 100644
index 0000000000..62eec2f24d
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/id_in.c
@@ -0,0 +1,667 @@
+//
+// ID Engine
+// ID_IN.c - Input Manager
+// v1.0d1
+// By Jason Blochowiak
+//
+
+//
+// This module handles dealing with the various input devices
+//
+// Depends on: Memory Mgr (for demo recording), Sound Mgr (for timing stuff),
+// User Mgr (for command line parms)
+//
+// Globals:
+// LastScan - The keyboard scan code of the last key pressed
+// LastASCII - The ASCII value of the last key pressed
+// DEBUG - there are more globals
+//
+
+#include "wl_def.h"
+
+
+/*
+=============================================================================
+
+ GLOBAL VARIABLES
+
+=============================================================================
+*/
+
+
+//
+// configuration variables
+//
+boolean MousePresent;
+boolean forcegrabmouse;
+
+
+// Global variables
+volatile boolean Keyboard[SDLK_LAST];
+volatile boolean Paused;
+volatile char LastASCII;
+volatile ScanCode LastScan;
+
+//KeyboardDef KbdDefs = {0x1d,0x38,0x47,0x48,0x49,0x4b,0x4d,0x4f,0x50,0x51};
+static KeyboardDef KbdDefs = {
+ sc_Return, // button0
+ sc_Alt, // button1
+ sc_Home, // upleft
+ sc_UpArrow, // up
+ sc_PgUp, // upright
+ sc_LeftArrow, // left
+ sc_RightArrow, // right
+ sc_End, // downleft
+ sc_DownArrow, // down
+ sc_PgDn // downright
+};
+
+static SDL_Joystick *Joystick;
+int JoyNumButtons;
+static int JoyNumHats;
+
+static bool GrabInput = false;
+
+/*
+=============================================================================
+
+ LOCAL VARIABLES
+
+=============================================================================
+*/
+byte ASCIINames[] = // Unshifted ASCII for scan codes // TODO: keypad
+{
+// 0 1 2 3 4 5 6 7 8 9 A B C D E F
+ 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,8 ,9 ,0 ,0 ,0 ,13 ,0 ,0 , // 0
+ 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,27 ,0 ,0 ,0 , // 1
+ ' ',0 ,0 ,0 ,0 ,0 ,0 ,39 ,0 ,0 ,'*','+',',','-','.','/', // 2
+ '0','1','2','3','4','5','6','7','8','9',0 ,';',0 ,'=',0 ,0 , // 3
+ '`','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o', // 4
+ 'p','q','r','s','t','u','v','w','x','y','z','[',92 ,']',0 ,0 , // 5
+ 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 6
+ 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 // 7
+};
+byte ShiftNames[] = // Shifted ASCII for scan codes
+{
+// 0 1 2 3 4 5 6 7 8 9 A B C D E F
+ 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,8 ,9 ,0 ,0 ,0 ,13 ,0 ,0 , // 0
+ 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,27 ,0 ,0 ,0 , // 1
+ ' ',0 ,0 ,0 ,0 ,0 ,0 ,34 ,0 ,0 ,'*','+','<','_','>','?', // 2
+ ')','!','@','#','$','%','^','&','*','(',0 ,':',0 ,'+',0 ,0 , // 3
+ '~','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O', // 4
+ 'P','Q','R','S','T','U','V','W','X','Y','Z','{','|','}',0 ,0 , // 5
+ 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 6
+ 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 // 7
+};
+byte SpecialNames[] = // ASCII for 0xe0 prefixed codes
+{
+// 0 1 2 3 4 5 6 7 8 9 A B C D E F
+ 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 0
+ 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,13 ,0 ,0 ,0 , // 1
+ 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 2
+ 0 ,0 ,0 ,0 ,0 ,'/',0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 3
+ 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 4
+ 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 5
+ 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 6
+ 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 // 7
+};
+
+
+static boolean IN_Started;
+
+static Direction DirTable[] = // Quick lookup for total direction
+{
+ dir_NorthWest, dir_North, dir_NorthEast,
+ dir_West, dir_None, dir_East,
+ dir_SouthWest, dir_South, dir_SouthEast
+};
+
+
+///////////////////////////////////////////////////////////////////////////
+//
+// INL_GetMouseButtons() - Gets the status of the mouse buttons from the
+// mouse driver
+//
+///////////////////////////////////////////////////////////////////////////
+static int
+INL_GetMouseButtons(void)
+{
+ int buttons = SDL_GetMouseState(NULL, NULL);
+ int middlePressed = buttons & SDL_BUTTON(SDL_BUTTON_MIDDLE);
+ int rightPressed = buttons & SDL_BUTTON(SDL_BUTTON_RIGHT);
+ buttons &= ~(SDL_BUTTON(SDL_BUTTON_MIDDLE) | SDL_BUTTON(SDL_BUTTON_RIGHT));
+ if(middlePressed) buttons |= 1 << 2;
+ if(rightPressed) buttons |= 1 << 1;
+
+ return buttons;
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// IN_GetJoyDelta() - Returns the relative movement of the specified
+// joystick (from +/-127)
+//
+///////////////////////////////////////////////////////////////////////////
+void IN_GetJoyDelta(int *dx,int *dy)
+{
+ if(!Joystick)
+ {
+ *dx = *dy = 0;
+ return;
+ }
+
+ SDL_JoystickUpdate();
+#ifdef _arch_dreamcast
+ int x = 0;
+ int y = 0;
+#else
+ int x = SDL_JoystickGetAxis(Joystick, 0) >> 8;
+ int y = SDL_JoystickGetAxis(Joystick, 1) >> 8;
+#endif
+
+ if(param_joystickhat != -1)
+ {
+ uint8_t hatState = SDL_JoystickGetHat(Joystick, param_joystickhat);
+ if(hatState & SDL_HAT_RIGHT)
+ x += 127;
+ else if(hatState & SDL_HAT_LEFT)
+ x -= 127;
+ if(hatState & SDL_HAT_DOWN)
+ y += 127;
+ else if(hatState & SDL_HAT_UP)
+ y -= 127;
+
+ if(x < -128) x = -128;
+ else if(x > 127) x = 127;
+
+ if(y < -128) y = -128;
+ else if(y > 127) y = 127;
+ }
+
+ *dx = x;
+ *dy = y;
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// IN_GetJoyFineDelta() - Returns the relative movement of the specified
+// joystick without dividing the results by 256 (from +/-127)
+//
+///////////////////////////////////////////////////////////////////////////
+void IN_GetJoyFineDelta(int *dx, int *dy)
+{
+ if(!Joystick)
+ {
+ *dx = 0;
+ *dy = 0;
+ return;
+ }
+
+ SDL_JoystickUpdate();
+ int x = SDL_JoystickGetAxis(Joystick, 0);
+ int y = SDL_JoystickGetAxis(Joystick, 1);
+
+ if(x < -128) x = -128;
+ else if(x > 127) x = 127;
+
+ if(y < -128) y = -128;
+ else if(y > 127) y = 127;
+
+ *dx = x;
+ *dy = y;
+}
+
+/*
+===================
+=
+= IN_JoyButtons
+=
+===================
+*/
+
+int IN_JoyButtons()
+{
+ if(!Joystick) return 0;
+
+ SDL_JoystickUpdate();
+
+ int res = 0;
+ for(int i = 0; i < JoyNumButtons && i < 32; i++)
+ res |= SDL_JoystickGetButton(Joystick, i) << i;
+ return res;
+}
+
+boolean IN_JoyPresent()
+{
+ return Joystick != NULL;
+}
+
+static void processEvent(SDL_Event *event)
+{
+ switch (event->type)
+ {
+ // exit if the window is closed
+ case SDL_QUIT:
+ Quit(NULL);
+
+ // check for keypresses
+ case SDL_KEYDOWN:
+ {
+ if(event->key.keysym.sym==SDLK_SCROLLOCK || event->key.keysym.sym==SDLK_F12)
+ {
+ GrabInput = !GrabInput;
+ SDL_WM_GrabInput(GrabInput ? SDL_GRAB_ON : SDL_GRAB_OFF);
+ return;
+ }
+
+ LastScan = event->key.keysym.sym;
+ SDLMod mod = SDL_GetModState();
+ if(Keyboard[sc_Alt])
+ {
+ if(LastScan==SDLK_F4)
+ Quit(NULL);
+ }
+
+ if(LastScan == SDLK_KP_ENTER) LastScan = SDLK_RETURN;
+ else if(LastScan == SDLK_RSHIFT) LastScan = SDLK_LSHIFT;
+ else if(LastScan == SDLK_RALT) LastScan = SDLK_LALT;
+ else if(LastScan == SDLK_RCTRL) LastScan = SDLK_LCTRL;
+ else
+ {
+ if((mod & KMOD_NUM) == 0)
+ {
+ switch(LastScan)
+ {
+ case SDLK_KP2: LastScan = SDLK_DOWN; break;
+ case SDLK_KP4: LastScan = SDLK_LEFT; break;
+ case SDLK_KP6: LastScan = SDLK_RIGHT; break;
+ case SDLK_KP8: LastScan = SDLK_UP; break;
+ }
+ }
+ }
+
+ int sym = LastScan;
+ if(sym >= 'a' && sym <= 'z')
+ sym -= 32; // convert to uppercase
+
+ if(mod & (KMOD_SHIFT | KMOD_CAPS))
+ {
+ if(sym < lengthof(ShiftNames) && ShiftNames[sym])
+ LastASCII = ShiftNames[sym];
+ }
+ else
+ {
+ if(sym < lengthof(ASCIINames) && ASCIINames[sym])
+ LastASCII = ASCIINames[sym];
+ }
+ if(LastScan<SDLK_LAST)
+ {
+ LOGF("setting key %d", LastScan);
+ Keyboard[LastScan] = 1;
+ }
+ if(LastScan == SDLK_PAUSE)
+ Paused = true;
+ break;
+ }
+
+ case SDL_KEYUP:
+ {
+ int key = event->key.keysym.sym;
+ if(key == SDLK_KP_ENTER) key = SDLK_RETURN;
+ else if(key == SDLK_RSHIFT) key = SDLK_LSHIFT;
+ else if(key == SDLK_RALT) key = SDLK_LALT;
+ else if(key == SDLK_RCTRL) key = SDLK_LCTRL;
+ else
+ {
+ if((SDL_GetModState() & KMOD_NUM) == 0)
+ {
+ switch(key)
+ {
+ case SDLK_KP2: key = SDLK_DOWN; break;
+ case SDLK_KP4: key = SDLK_LEFT; break;
+ case SDLK_KP6: key = SDLK_RIGHT; break;
+ case SDLK_KP8: key = SDLK_UP; break;
+ }
+ }
+ }
+
+ if(key<SDLK_LAST)
+ Keyboard[key] = 0;
+ break;
+ }
+
+#if defined(GP2X)
+ case SDL_JOYBUTTONDOWN:
+ GP2X_ButtonDown(event->jbutton.button);
+ break;
+
+ case SDL_JOYBUTTONUP:
+ GP2X_ButtonUp(event->jbutton.button);
+ break;
+#endif
+ }
+}
+
+void IN_WaitAndProcessEvents()
+{
+ SDL_Event event;
+ if(!SDL_WaitEvent(&event)) return;
+ do
+ {
+ processEvent(&event);
+ }
+ while(SDL_PollEvent(&event));
+}
+
+void IN_ProcessEvents()
+{
+ SDL_Event event;
+
+ while (SDL_PollEvent(&event))
+ {
+ processEvent(&event);
+ }
+}
+
+
+///////////////////////////////////////////////////////////////////////////
+//
+// IN_Startup() - Starts up the Input Mgr
+//
+///////////////////////////////////////////////////////////////////////////
+void
+IN_Startup(void)
+{
+ if (IN_Started)
+ return;
+
+ IN_ClearKeysDown();
+
+ if(param_joystickindex >= 0 && param_joystickindex < SDL_NumJoysticks())
+ {
+ Joystick = SDL_JoystickOpen(param_joystickindex);
+ if(Joystick)
+ {
+ JoyNumButtons = SDL_JoystickNumButtons(Joystick);
+ if(JoyNumButtons > 32) JoyNumButtons = 32; // only up to 32 buttons are supported
+ JoyNumHats = SDL_JoystickNumHats(Joystick);
+ if(param_joystickhat < -1 || param_joystickhat >= JoyNumHats)
+ Quit("The joystickhat param must be between 0 and %i!", JoyNumHats - 1);
+ }
+ }
+
+ SDL_EventState(SDL_MOUSEMOTION, SDL_IGNORE);
+
+ if(fullscreen || forcegrabmouse)
+ {
+ GrabInput = true;
+ SDL_WM_GrabInput(SDL_GRAB_ON);
+ }
+
+ // I didn't find a way to ask libSDL whether a mouse is present, yet...
+#if defined(GP2X)
+ MousePresent = false;
+#elif defined(_arch_dreamcast)
+ MousePresent = DC_MousePresent();
+#else
+ MousePresent = true;
+#endif
+
+ IN_Started = true;
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// IN_Shutdown() - Shuts down the Input Mgr
+//
+///////////////////////////////////////////////////////////////////////////
+void
+IN_Shutdown(void)
+{
+ if (!IN_Started)
+ return;
+
+ if(Joystick)
+ SDL_JoystickClose(Joystick);
+
+ IN_Started = false;
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// IN_ClearKeysDown() - Clears the keyboard array
+//
+///////////////////////////////////////////////////////////////////////////
+void
+IN_ClearKeysDown(void)
+{
+ LastScan = sc_None;
+ LastASCII = key_None;
+ memset ((void *) Keyboard,0,sizeof(Keyboard));
+}
+
+
+///////////////////////////////////////////////////////////////////////////
+//
+// IN_ReadControl() - Reads the device associated with the specified
+// player and fills in the control info struct
+//
+///////////////////////////////////////////////////////////////////////////
+void
+IN_ReadControl(int player,ControlInfo *info)
+{
+ word buttons;
+ int dx,dy;
+ Motion mx,my;
+
+ dx = dy = 0;
+ mx = my = motion_None;
+ buttons = 0;
+
+ IN_ProcessEvents();
+
+ if (Keyboard[KbdDefs.upleft])
+ mx = motion_Left,my = motion_Up;
+ else if (Keyboard[KbdDefs.upright])
+ mx = motion_Right,my = motion_Up;
+ else if (Keyboard[KbdDefs.downleft])
+ mx = motion_Left,my = motion_Down;
+ else if (Keyboard[KbdDefs.downright])
+ mx = motion_Right,my = motion_Down;
+
+ if (Keyboard[KbdDefs.up])
+ my = motion_Up;
+ else if (Keyboard[KbdDefs.down])
+ my = motion_Down;
+
+ if (Keyboard[KbdDefs.left])
+ mx = motion_Left;
+ else if (Keyboard[KbdDefs.right])
+ mx = motion_Right;
+
+ if (Keyboard[KbdDefs.button0])
+ buttons += 1 << 0;
+ if (Keyboard[KbdDefs.button1])
+ buttons += 1 << 1;
+
+ dx = mx * 127;
+ dy = my * 127;
+
+ info->x = dx;
+ info->xaxis = mx;
+ info->y = dy;
+ info->yaxis = my;
+ info->button0 = (buttons & (1 << 0)) != 0;
+ info->button1 = (buttons & (1 << 1)) != 0;
+ info->button2 = (buttons & (1 << 2)) != 0;
+ info->button3 = (buttons & (1 << 3)) != 0;
+ info->dir = DirTable[((my + 1) * 3) + (mx + 1)];
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// IN_WaitForKey() - Waits for a scan code, then clears LastScan and
+// returns the scan code
+//
+///////////////////////////////////////////////////////////////////////////
+ScanCode
+IN_WaitForKey(void)
+{
+ ScanCode result;
+
+ while ((result = LastScan)==0)
+ IN_WaitAndProcessEvents();
+ LastScan = 0;
+ return(result);
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// IN_WaitForASCII() - Waits for an ASCII char, then clears LastASCII and
+// returns the ASCII value
+//
+///////////////////////////////////////////////////////////////////////////
+char
+IN_WaitForASCII(void)
+{
+ char result;
+
+ while ((result = LastASCII)==0)
+ IN_WaitAndProcessEvents();
+ LastASCII = '\0';
+ return(result);
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// IN_Ack() - waits for a button or key press. If a button is down, upon
+// calling, it must be released for it to be recognized
+//
+///////////////////////////////////////////////////////////////////////////
+
+boolean btnstate[NUMBUTTONS];
+
+void IN_StartAck(void)
+{
+ IN_ProcessEvents();
+//
+// get initial state of everything
+//
+ IN_ClearKeysDown();
+ memset(btnstate, 0, sizeof(btnstate));
+
+ int buttons = IN_JoyButtons() << 4;
+
+ if(MousePresent)
+ buttons |= IN_MouseButtons();
+
+ for(int i = 0; i < NUMBUTTONS; i++, buttons >>= 1)
+ if(buttons & 1)
+ btnstate[i] = true;
+}
+
+
+boolean IN_CheckAck (void)
+{
+ IN_ProcessEvents();
+//
+// see if something has been pressed
+//
+ if(LastScan)
+ return true;
+
+ int buttons = IN_JoyButtons() << 4;
+
+ if(MousePresent)
+ buttons |= IN_MouseButtons();
+
+ for(int i = 0; i < NUMBUTTONS; i++, buttons >>= 1)
+ {
+ if(buttons & 1)
+ {
+ if(!btnstate[i])
+ {
+ // Wait until button has been released
+ do
+ {
+ IN_WaitAndProcessEvents();
+ buttons = IN_JoyButtons() << 4;
+
+ if(MousePresent)
+ buttons |= IN_MouseButtons();
+ }
+ while(buttons & (1 << i));
+
+ return true;
+ }
+ }
+ else
+ btnstate[i] = false;
+ }
+
+ return false;
+}
+
+
+void IN_Ack (void)
+{
+ IN_StartAck ();
+
+ do
+ {
+ IN_WaitAndProcessEvents();
+ }
+ while(!IN_CheckAck ());
+}
+
+
+///////////////////////////////////////////////////////////////////////////
+//
+// IN_UserInput() - Waits for the specified delay time (in ticks) or the
+// user pressing a key or a mouse button. If the clear flag is set, it
+// then either clears the key or waits for the user to let the mouse
+// button up.
+//
+///////////////////////////////////////////////////////////////////////////
+boolean IN_UserInput(longword delay)
+{
+ longword lasttime;
+
+ lasttime = GetTimeCount();
+ IN_StartAck ();
+ do
+ {
+ IN_ProcessEvents();
+ if (IN_CheckAck())
+ return true;
+ SDL_Delay(5);
+ } while (GetTimeCount() - lasttime < delay);
+ return(false);
+}
+
+//===========================================================================
+
+/*
+===================
+=
+= IN_MouseButtons
+=
+===================
+*/
+int IN_MouseButtons (void)
+{
+ if (MousePresent)
+ return INL_GetMouseButtons();
+ else
+ return 0;
+}
+
+bool IN_IsInputGrabbed()
+{
+ return GrabInput;
+}
+
+void IN_CenterMouse()
+{
+ SDL_WarpMouse(screenWidth / 2, screenHeight / 2);
+}
diff --git a/apps/plugins/sdl/progs/wolf3d/id_in.h b/apps/plugins/sdl/progs/wolf3d/id_in.h
new file mode 100644
index 0000000000..90e0c05109
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/id_in.h
@@ -0,0 +1,183 @@
+//
+// ID Engine
+// ID_IN.h - Header file for Input Manager
+// v1.0d1
+// By Jason Blochowiak
+//
+
+#ifndef __ID_IN__
+#define __ID_IN__
+
+#ifdef __DEBUG__
+#define __DEBUG_InputMgr__
+#endif
+
+typedef int ScanCode;
+#define sc_None 0
+#define sc_Bad 0xff
+#define sc_Return SDLK_RETURN
+#define sc_Enter sc_Return
+#define sc_Escape SDLK_ESCAPE
+#define sc_Space SDLK_SPACE
+#define sc_BackSpace SDLK_BACKSPACE
+#define sc_Tab SDLK_TAB
+#define sc_Alt SDLK_LALT
+#define sc_Control SDLK_LCTRL
+#define sc_CapsLock SDLK_CAPSLOCK
+#define sc_LShift SDLK_LSHIFT
+#define sc_RShift SDLK_RSHIFT
+#define sc_UpArrow SDLK_UP
+#define sc_DownArrow SDLK_DOWN
+#define sc_LeftArrow SDLK_LEFT
+#define sc_RightArrow SDLK_RIGHT
+#define sc_Insert SDLK_INSERT
+#define sc_Delete SDLK_DELETE
+#define sc_Home SDLK_HOME
+#define sc_End SDLK_END
+#define sc_PgUp SDLK_PAGEUP
+#define sc_PgDn SDLK_PAGEDOWN
+#define sc_F1 SDLK_F1
+#define sc_F2 SDLK_F2
+#define sc_F3 SDLK_F3
+#define sc_F4 SDLK_F4
+#define sc_F5 SDLK_F5
+#define sc_F6 SDLK_F6
+#define sc_F7 SDLK_F7
+#define sc_F8 SDLK_F8
+#define sc_F9 SDLK_F9
+#define sc_F10 SDLK_F10
+#define sc_F11 SDLK_F11
+#define sc_F12 SDLK_F12
+
+#define sc_ScrollLock SDLK_SCROLLOCK
+#define sc_PrintScreen SDLK_PRINT
+
+#define sc_1 SDLK_1
+#define sc_2 SDLK_2
+#define sc_3 SDLK_3
+#define sc_4 SDLK_4
+#define sc_5 SDLK_5
+#define sc_6 SDLK_6
+#define sc_7 SDLK_7
+#define sc_8 SDLK_8
+#define sc_9 SDLK_9
+#define sc_0 SDLK_0
+
+#define sc_A SDLK_a
+#define sc_B SDLK_b
+#define sc_C SDLK_c
+#define sc_D SDLK_d
+#define sc_E SDLK_e
+#define sc_F SDLK_f
+#define sc_G SDLK_g
+#define sc_H SDLK_h
+#define sc_I SDLK_i
+#define sc_J SDLK_j
+#define sc_K SDLK_k
+#define sc_L SDLK_l
+#define sc_M SDLK_m
+#define sc_N SDLK_n
+#define sc_O SDLK_o
+#define sc_P SDLK_p
+#define sc_Q SDLK_q
+#define sc_R SDLK_r
+#define sc_S SDLK_s
+#define sc_T SDLK_t
+#define sc_U SDLK_u
+#define sc_V SDLK_v
+#define sc_W SDLK_w
+#define sc_X SDLK_x
+#define sc_Y SDLK_y
+#define sc_Z SDLK_z
+
+#define key_None 0
+
+typedef enum {
+ demo_Off,demo_Record,demo_Playback,demo_PlayDone
+ } Demo;
+typedef enum {
+ ctrl_Keyboard,
+ ctrl_Keyboard1 = ctrl_Keyboard,ctrl_Keyboard2,
+ ctrl_Joystick,
+ ctrl_Joystick1 = ctrl_Joystick,ctrl_Joystick2,
+ ctrl_Mouse
+ } ControlType;
+typedef enum {
+ motion_Left = -1,motion_Up = -1,
+ motion_None = 0,
+ motion_Right = 1,motion_Down = 1
+ } Motion;
+typedef enum {
+ dir_North,dir_NorthEast,
+ dir_East,dir_SouthEast,
+ dir_South,dir_SouthWest,
+ dir_West,dir_NorthWest,
+ dir_None
+ } Direction;
+typedef struct {
+ boolean button0,button1,button2,button3;
+ short x,y;
+ Motion xaxis,yaxis;
+ Direction dir;
+ } CursorInfo;
+typedef CursorInfo ControlInfo;
+typedef struct {
+ ScanCode button0,button1,
+ upleft, up, upright,
+ left, right,
+ downleft, down, downright;
+ } KeyboardDef;
+typedef struct {
+ word joyMinX,joyMinY,
+ threshMinX,threshMinY,
+ threshMaxX,threshMaxY,
+ joyMaxX,joyMaxY,
+ joyMultXL,joyMultYL,
+ joyMultXH,joyMultYH;
+ } JoystickDef;
+// Global variables
+extern volatile boolean Keyboard[];
+extern boolean MousePresent;
+extern volatile boolean Paused;
+extern volatile char LastASCII;
+extern volatile ScanCode LastScan;
+extern int JoyNumButtons;
+extern boolean forcegrabmouse;
+
+
+// Function prototypes
+#define IN_KeyDown(code) (Keyboard[(code)])
+#define IN_ClearKey(code) {Keyboard[code] = false;\
+ if (code == LastScan) LastScan = sc_None;}
+
+// DEBUG - put names in prototypes
+extern void IN_Startup(void),IN_Shutdown(void);
+extern void IN_ClearKeysDown(void);
+extern void IN_ReadControl(int,ControlInfo *);
+extern void IN_GetJoyAbs(word joy,word *xp,word *yp);
+extern void IN_SetupJoy(word joy,word minx,word maxx,
+ word miny,word maxy);
+extern void IN_StopDemo(void),IN_FreeDemoBuffer(void),
+ IN_Ack(void);
+extern boolean IN_UserInput(longword delay);
+extern char IN_WaitForASCII(void);
+extern ScanCode IN_WaitForKey(void);
+extern word IN_GetJoyButtonsDB(word joy);
+extern const char *IN_GetScanName(ScanCode);
+
+void IN_WaitAndProcessEvents();
+void IN_ProcessEvents();
+
+int IN_MouseButtons (void);
+
+boolean IN_JoyPresent();
+void IN_SetJoyCurrent(int joyIndex);
+int IN_JoyButtons (void);
+void IN_GetJoyDelta(int *dx,int *dy);
+void IN_GetJoyFineDelta(int *dx, int *dy);
+
+void IN_StartAck(void);
+boolean IN_CheckAck (void);
+bool IN_IsInputGrabbed();
+void IN_CenterMouse();
+#endif
diff --git a/apps/plugins/sdl/progs/wolf3d/id_pm.c b/apps/plugins/sdl/progs/wolf3d/id_pm.c
new file mode 100644
index 0000000000..4b8d580b14
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/id_pm.c
@@ -0,0 +1,125 @@
+#include "wl_def.h"
+
+int ChunksInFile;
+int PMSpriteStart;
+int PMSoundStart;
+
+bool PMSoundInfoPagePadded = false;
+
+// holds the whole VSWAP
+uint32_t *PMPageData;
+size_t PMPageDataSize;
+
+// ChunksInFile+1 pointers to page starts.
+// The last pointer points one byte after the last page.
+uint8_t **PMPages;
+
+void PM_Startup()
+{
+ char fname[13 + sizeof(DATADIR)] = DATADIR "vswap.";
+ strcat(fname,extension);
+
+ FILE *file = fopen(fname,"rb");
+ if(!file)
+ CA_CannotOpen(fname);
+
+ ChunksInFile = 0;
+ fread(&ChunksInFile, sizeof(word), 1, file);
+ PMSpriteStart = 0;
+ fread(&PMSpriteStart, sizeof(word), 1, file);
+ PMSoundStart = 0;
+ fread(&PMSoundStart, sizeof(word), 1, file);
+
+ uint32_t* pageOffsets = (uint32_t *) malloc((ChunksInFile + 1) * sizeof(int32_t));
+ CHECKMALLOCRESULT(pageOffsets);
+ fread(pageOffsets, sizeof(uint32_t), ChunksInFile, file);
+
+ word *pageLengths = (word *) malloc(ChunksInFile * sizeof(word));
+ CHECKMALLOCRESULT(pageLengths);
+ fread(pageLengths, sizeof(word), ChunksInFile, file);
+
+ fseek(file, 0, SEEK_END);
+ long fileSize = ftell(file);
+ long pageDataSize = fileSize - pageOffsets[0];
+ if(pageDataSize > (size_t) -1)
+ Quit("The page file \"%s\" is too large!", fname);
+
+ pageOffsets[ChunksInFile] = fileSize;
+
+ uint32_t dataStart = pageOffsets[0];
+ int i;
+
+ // Check that all pageOffsets are valid
+ for(i = 0; i < ChunksInFile; i++)
+ {
+ if(!pageOffsets[i]) continue; // sparse page
+ if(pageOffsets[i] < dataStart || pageOffsets[i] >= (size_t) fileSize)
+ Quit("Illegal page offset for page %i: %u (filesize: %u)",
+ i, pageOffsets[i], fileSize);
+ }
+
+ // Calculate total amount of padding needed for sprites and sound info page
+ int alignPadding = 0;
+ for(i = PMSpriteStart; i < PMSoundStart; i++)
+ {
+ if(!pageOffsets[i]) continue; // sparse page
+ uint32_t offs = pageOffsets[i] - dataStart + alignPadding;
+ if(offs & 1)
+ alignPadding++;
+ }
+
+ if((pageOffsets[ChunksInFile - 1] - dataStart + alignPadding) & 1)
+ alignPadding++;
+
+ PMPageDataSize = (size_t) pageDataSize + alignPadding;
+ PMPageData = (uint32_t *) malloc(PMPageDataSize);
+ CHECKMALLOCRESULT(PMPageData);
+
+ PMPages = (uint8_t **) malloc((ChunksInFile + 1) * sizeof(uint8_t *));
+ CHECKMALLOCRESULT(PMPages);
+
+ // Load pages and initialize PMPages pointers
+ uint8_t *ptr = (uint8_t *) PMPageData;
+ for(i = 0; i < ChunksInFile; i++)
+ {
+ if(i >= PMSpriteStart && i < PMSoundStart || i == ChunksInFile - 1)
+ {
+ size_t offs = ptr - (uint8_t *) PMPageData;
+
+ // pad with zeros to make it 2-byte aligned
+ if(offs & 1)
+ {
+ *ptr++ = 0;
+ if(i == ChunksInFile - 1) PMSoundInfoPagePadded = true;
+ }
+ }
+
+ PMPages[i] = ptr;
+
+ if(!pageOffsets[i])
+ continue; // sparse page
+
+ // Use specified page length, when next page is sparse page.
+ // Otherwise, calculate size from the offset difference between this and the next page.
+ uint32_t size;
+ if(!pageOffsets[i + 1]) size = pageLengths[i];
+ else size = pageOffsets[i + 1] - pageOffsets[i];
+
+ fseek(file, pageOffsets[i], SEEK_SET);
+ fread(ptr, 1, size, file);
+ ptr += size;
+ }
+
+ // last page points after page buffer
+ PMPages[ChunksInFile] = ptr;
+
+ free(pageLengths);
+ free(pageOffsets);
+ fclose(file);
+}
+
+void PM_Shutdown()
+{
+ free(PMPages);
+ free(PMPageData);
+}
diff --git a/apps/plugins/sdl/progs/wolf3d/id_pm.h b/apps/plugins/sdl/progs/wolf3d/id_pm.h
new file mode 100644
index 0000000000..bbedb78c78
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/id_pm.h
@@ -0,0 +1,58 @@
+#ifndef __ID_PM__
+#define __ID_PM__
+
+#ifdef USE_HIRES
+#define PMPageSize 16384
+#else
+#define PMPageSize 4096
+#endif
+
+extern int ChunksInFile;
+extern int PMSpriteStart;
+extern int PMSoundStart;
+
+extern bool PMSoundInfoPagePadded;
+
+// ChunksInFile+1 pointers to page starts.
+// The last pointer points one byte after the last page.
+extern uint8_t **PMPages;
+
+void PM_Startup();
+void PM_Shutdown();
+
+static uint32_t PM_GetPageSize(int page)
+{
+ if(page < 0 || page >= ChunksInFile)
+ Quit("PM_GetPageSize: Tried to access illegal page: %i", page);
+ return (uint32_t) (PMPages[page + 1] - PMPages[page]);
+}
+
+static uint8_t *PM_GetPage(int page)
+{
+ if(page < 0 || page >= ChunksInFile)
+ Quit("PM_GetPage: Tried to access illegal page: %i", page);
+ return PMPages[page];
+}
+
+static uint8_t *PM_GetEnd()
+{
+ return PMPages[ChunksInFile];
+}
+
+static byte *PM_GetTexture(int wallpic)
+{
+ return PM_GetPage(wallpic);
+}
+
+static uint16_t *PM_GetSprite(int shapenum)
+{
+ // correct alignment is enforced by PM_Startup()
+ return (uint16_t *) (void *) PM_GetPage(PMSpriteStart + shapenum);
+}
+
+static byte *PM_GetSound(int soundpagenum)
+{
+ return PM_GetPage(PMSoundStart + soundpagenum);
+}
+
+#endif
diff --git a/apps/plugins/sdl/progs/wolf3d/id_sd.c b/apps/plugins/sdl/progs/wolf3d/id_sd.c
new file mode 100644
index 0000000000..a528caa606
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/id_sd.c
@@ -0,0 +1,1578 @@
+//
+// ID Engine
+// ID_SD.c - Sound Manager for Wolfenstein 3D
+// v1.2
+// By Jason Blochowiak
+//
+
+//
+// This module handles dealing with generating sound on the appropriate
+// hardware
+//
+// Depends on: User Mgr (for parm checking)
+//
+// Globals:
+// For User Mgr:
+// SoundBlasterPresent - SoundBlaster card present?
+// AdLibPresent - AdLib card present?
+// SoundMode - What device is used for sound effects
+// (Use SM_SetSoundMode() to set)
+// MusicMode - What device is used for music
+// (Use SM_SetMusicMode() to set)
+// DigiMode - What device is used for digitized sound effects
+// (Use SM_SetDigiDevice() to set)
+//
+// For Cache Mgr:
+// NeedsDigitized - load digitized sounds?
+// NeedsMusic - load music?
+//
+
+#include "wl_def.h"
+#include "fmopl.h"
+
+#include "fixedpoint.h"
+
+#pragma hdrstop
+
+#define ORIGSAMPLERATE 7042
+
+typedef struct
+{
+ char RIFF[4];
+ longword filelenminus8;
+ char WAVE[4];
+ char fmt_[4];
+ longword formatlen;
+ word val0x0001;
+ word channels;
+ longword samplerate;
+ longword bytespersec;
+ word bytespersample;
+ word bitspersample;
+} headchunk;
+
+typedef struct
+{
+ char chunkid[4];
+ longword chunklength;
+} wavechunk;
+
+typedef struct
+{
+ uint32_t startpage;
+ uint32_t length;
+} digiinfo;
+
+static Mix_Chunk *SoundChunks[ STARTMUSIC - STARTDIGISOUNDS];
+static byte *SoundBuffers[STARTMUSIC - STARTDIGISOUNDS];
+
+globalsoundpos channelSoundPos[MIX_CHANNELS];
+
+// Global variables
+ boolean AdLibPresent,
+ SoundBlasterPresent,SBProPresent,
+ SoundPositioned;
+ SDMode SoundMode;
+ SMMode MusicMode;
+ SDSMode DigiMode;
+static byte **SoundTable;
+ int DigiMap[LASTSOUND];
+ int DigiChannel[STARTMUSIC - STARTDIGISOUNDS];
+
+// Internal variables
+static boolean SD_Started;
+static boolean nextsoundpos;
+static soundnames SoundNumber;
+static soundnames DigiNumber;
+static word SoundPriority;
+static word DigiPriority;
+static int LeftPosition;
+static int RightPosition;
+
+ word NumDigi;
+static digiinfo *DigiList;
+static boolean DigiPlaying;
+
+// PC Sound variables
+static volatile byte pcLastSample;
+static byte * volatile pcSound;
+static longword pcLengthLeft;
+
+// AdLib variables
+static byte * volatile alSound;
+static byte alBlock;
+static longword alLengthLeft;
+static longword alTimeCount;
+static Instrument alZeroInst;
+
+// Sequencer variables
+static volatile boolean sqActive;
+static word *sqHack;
+static word *sqHackPtr;
+static int sqHackLen;
+static int sqHackSeqLen;
+static longword sqHackTime;
+
+
+static void SDL_SoundFinished(void)
+{
+#ifdef SOUND_ENABLE
+ SoundNumber = (soundnames)0;
+ SoundPriority = 0;
+#endif
+}
+
+
+#ifdef NOTYET
+
+void SDL_turnOnPCSpeaker(word timerval);
+#pragma aux SDL_turnOnPCSpeaker = \
+ "mov al,0b6h" \
+ "out 43h,al" \
+ "mov al,bl" \
+ "out 42h,al" \
+ "mov al,bh" \
+ "out 42h,al" \
+ "in al,61h" \
+ "or al,3" \
+ "out 61h,al" \
+ parm [bx] \
+ modify exact [al]
+
+void SDL_turnOffPCSpeaker();
+#pragma aux SDL_turnOffPCSpeaker = \
+ "in al,61h" \
+ "and al,0fch" \
+ "out 61h,al" \
+ modify exact [al]
+
+void SDL_setPCSpeaker(byte val);
+#pragma aux SDL_setPCSpeaker = \
+ "in al,61h" \
+ "and al,0fch" \
+ "or al,ah" \
+ "out 61h,al" \
+ parm [ah] \
+ modify exact [al]
+
+void SDL_DoFX()
+{
+ if(pcSound)
+ {
+ if(*pcSound!=pcLastSample)
+ {
+ pcLastSample=*pcSound;
+
+ if(pcLastSample)
+ SDL_turnOnPCSpeaker(pcLastSample*60);
+ else
+ SDL_turnOffPCSpeaker();
+ }
+ pcSound++;
+ pcLengthLeft--;
+ if(!pcLengthLeft)
+ {
+ pcSound=0;
+ SoundNumber=(soundnames)0;
+ SoundPriority=0;
+ SDL_turnOffPCSpeaker();
+ }
+ }
+
+ // [adlib sound stuff removed...]
+}
+
+static void SDL_DigitizedDoneInIRQ(void);
+
+void SDL_DoFast()
+{
+ count_fx++;
+ if(count_fx>=5)
+ {
+ count_fx=0;
+
+ SDL_DoFX();
+
+ count_time++;
+ if(count_time>=2)
+ {
+ TimeCount++;
+ count_time=0;
+ }
+ }
+
+ // [adlib music and soundsource stuff removed...]
+
+ TimerCount+=TimerDivisor;
+ if(*((word *)&TimerCount+1))
+ {
+ *((word *)&TimerCount+1)=0;
+ t0OldService();
+ }
+ else
+ {
+ outp(0x20,0x20);
+ }
+}
+
+// Timer 0 ISR for 7000Hz interrupts
+void __interrupt SDL_t0ExtremeAsmService(void)
+{
+ if(pcindicate)
+ {
+ if(pcSound)
+ {
+ SDL_setPCSpeaker(((*pcSound++)&0x80)>>6);
+ pcLengthLeft--;
+ if(!pcLengthLeft)
+ {
+ pcSound=0;
+ SDL_turnOffPCSpeaker();
+ SDL_DigitizedDoneInIRQ();
+ }
+ }
+ }
+ extreme++;
+ if(extreme>=10)
+ {
+ extreme=0;
+ SDL_DoFast();
+ }
+ else
+ outp(0x20,0x20);
+}
+
+// Timer 0 ISR for 700Hz interrupts
+void __interrupt SDL_t0FastAsmService(void)
+{
+ SDL_DoFast();
+}
+
+// Timer 0 ISR for 140Hz interrupts
+void __interrupt SDL_t0SlowAsmService(void)
+{
+ count_time++;
+ if(count_time>=2)
+ {
+ TimeCount++;
+ count_time=0;
+ }
+
+ SDL_DoFX();
+
+ TimerCount+=TimerDivisor;
+ if(*((word *)&TimerCount+1))
+ {
+ *((word *)&TimerCount+1)=0;
+ t0OldService();
+ }
+ else
+ outp(0x20,0x20);
+}
+
+void SDL_IndicatePC(boolean ind)
+{
+ pcindicate=ind;
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// SDL_SetTimer0() - Sets system timer 0 to the specified speed
+//
+///////////////////////////////////////////////////////////////////////////
+static void
+SDL_SetTimer0(word speed)
+{
+#ifndef TPROF // If using Borland's profiling, don't screw with the timer
+// _asm pushfd
+ _asm cli
+
+ outp(0x43,0x36); // Change timer 0
+ outp(0x40,(byte)speed);
+ outp(0x40,speed >> 8);
+ // Kludge to handle special case for digitized PC sounds
+ if (TimerDivisor == (1192030 / (TickBase * 100)))
+ TimerDivisor = (1192030 / (TickBase * 10));
+ else
+ TimerDivisor = speed;
+
+// _asm popfd
+ _asm sti
+#else
+ TimerDivisor = 0x10000;
+#endif
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// SDL_SetIntsPerSec() - Uses SDL_SetTimer0() to set the number of
+// interrupts generated by system timer 0 per second
+//
+///////////////////////////////////////////////////////////////////////////
+static void
+SDL_SetIntsPerSec(word ints)
+{
+ TimerRate = ints;
+ SDL_SetTimer0(1192030 / ints);
+}
+
+static void
+SDL_SetTimerSpeed(void)
+{
+ word rate;
+ void (_interrupt *isr)(void);
+
+ if ((DigiMode == sds_PC) && DigiPlaying)
+ {
+ rate = TickBase * 100;
+ isr = SDL_t0ExtremeAsmService;
+ }
+ else if ((MusicMode == smm_AdLib) || ((DigiMode == sds_SoundSource) && DigiPlaying) )
+ {
+ rate = TickBase * 10;
+ isr = SDL_t0FastAsmService;
+ }
+ else
+ {
+ rate = TickBase * 2;
+ isr = SDL_t0SlowAsmService;
+ }
+
+ if (rate != TimerRate)
+ {
+ _dos_setvect(8,isr);
+ SDL_SetIntsPerSec(rate);
+ TimerRate = rate;
+ }
+}
+
+//
+// PC Sound code
+//
+
+///////////////////////////////////////////////////////////////////////////
+//
+// SDL_PCPlaySample() - Plays the specified sample on the PC speaker
+//
+///////////////////////////////////////////////////////////////////////////
+#ifdef _MUSE_
+void
+#else
+static void
+#endif
+SDL_PCPlaySample(byte *data,longword len,boolean inIRQ)
+{
+ if(!inIRQ)
+ {
+// _asm pushfd
+ _asm cli
+ }
+
+ SDL_IndicatePC(true);
+
+ pcLengthLeft = len;
+ pcSound = (volatile byte *)data;
+
+ if(!inIRQ)
+ {
+// _asm popfd
+ _asm sti
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// SDL_PCStopSample() - Stops a sample playing on the PC speaker
+//
+///////////////////////////////////////////////////////////////////////////
+#ifdef _MUSE_
+void
+#else
+static void
+#endif
+SDL_PCStopSampleInIRQ(void)
+{
+ pcSound = 0;
+
+ SDL_IndicatePC(false);
+
+ _asm in al,0x61 // Turn the speaker off
+ _asm and al,0xfd // ~2
+ _asm out 0x61,al
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// SDL_PCPlaySound() - Plays the specified sound on the PC speaker
+//
+///////////////////////////////////////////////////////////////////////////
+#ifdef _MUSE_
+void
+#else
+static void
+#endif
+SDL_PCPlaySound(PCSound *sound)
+{
+// _asm pushfd
+ _asm cli
+
+ pcLastSample = -1;
+ pcLengthLeft = sound->common.length;
+ pcSound = sound->data;
+
+// _asm popfd
+ _asm sti
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// SDL_PCStopSound() - Stops the current sound playing on the PC Speaker
+//
+///////////////////////////////////////////////////////////////////////////
+#ifdef _MUSE_
+void
+#else
+static void
+#endif
+SDL_PCStopSound(void)
+{
+// _asm pushfd
+ _asm cli
+
+ pcSound = 0;
+
+ _asm in al,0x61 // Turn the speaker off
+ _asm and al,0xfd // ~2
+ _asm out 0x61,al
+
+// _asm popfd
+ _asm sti
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// SDL_ShutPC() - Turns off the pc speaker
+//
+///////////////////////////////////////////////////////////////////////////
+static void
+SDL_ShutPC(void)
+{
+// _asm pushfd
+ _asm cli
+
+ pcSound = 0;
+
+ _asm in al,0x61 // Turn the speaker & gate off
+ _asm and al,0xfc // ~3
+ _asm out 0x61,al
+
+// _asm popfd
+ _asm sti
+}
+
+#endif
+
+void
+SD_StopDigitized(void)
+{
+#ifdef SOUND_ENABLE
+ DigiPlaying = false;
+ DigiNumber = (soundnames) 0;
+ DigiPriority = 0;
+ SoundPositioned = false;
+ if ((DigiMode == sds_PC) && (SoundMode == sdm_PC))
+ SDL_SoundFinished();
+
+ switch (DigiMode)
+ {
+ case sds_PC:
+// SDL_PCStopSampleInIRQ();
+ break;
+ case sds_SoundBlaster:
+// SDL_SBStopSampleInIRQ();
+ Mix_HaltChannel(-1);
+ break;
+ }
+#endif
+}
+
+int SD_GetChannelForDigi(int which)
+{
+#ifdef SOUND_ENABLE
+ if(DigiChannel[which] != -1) return DigiChannel[which];
+
+ int channel = Mix_GroupAvailable(1);
+ if(channel == -1) channel = Mix_GroupOldest(1);
+ if(channel == -1) // All sounds stopped in the meantime?
+ return Mix_GroupAvailable(1);
+ return channel;
+#endif
+ return 0;
+}
+
+void SD_SetPosition(int channel, int leftpos, int rightpos)
+{
+#ifdef SOUND_ENABLE
+ if((leftpos < 0) || (leftpos > 15) || (rightpos < 0) || (rightpos > 15)
+ || ((leftpos == 15) && (rightpos == 15)))
+ Quit("SD_SetPosition: Illegal position");
+
+ switch (DigiMode)
+ {
+ case sds_SoundBlaster:
+// SDL_PositionSBP(leftpos,rightpos);
+ Mix_SetPanning(channel, ((15 - leftpos) << 4) + 15,
+ ((15 - rightpos) << 4) + 15);
+ break;
+ }
+#endif
+}
+
+#define FP_FLOOR(x, fracbits) (x & (~((1<<(fracbits))-1)))
+
+/* more precise than original samples */
+#define FRACBITS 10
+#define FP_MATH
+
+#ifdef FP_MATH
+/* Looks to be some sort of interpolation - FW19 */
+Sint16 GetSample(long csample_fp, byte *samples, int size)
+{
+ //float s0=0, s1=0, s2=0;
+ long s0_fp = 0, s1_fp = 0, s2_fp = 0;
+ long cursample_fp = FP_FLOOR(csample_fp, FRACBITS);
+ long sf_fp = csample_fp - cursample_fp;
+ const long one = 1 << FRACBITS;
+
+ int cursample = cursample_fp >> FRACBITS;
+
+ if(cursample-1 >= 0) s0_fp = (samples[cursample-1] - 128) << FRACBITS;
+ s1_fp = (samples[cursample] - 128) << FRACBITS;
+ if(cursample+1 < size) s2_fp = (samples[cursample+1] - 128) << FRACBITS;
+
+ //float val = s0*sf*(sf-1)/2 - s1*(sf*sf-1) + s2*(sf+1)*sf/2;
+
+ long val_fp = fp_mul(s0_fp, fp_mul(sf_fp, sf_fp - one, FRACBITS), FRACBITS) / 2 -
+ fp_mul(s1_fp, fp_mul(sf_fp, sf_fp, FRACBITS) - one, FRACBITS) +
+ fp_mul(s2_fp, fp_mul(sf_fp + one, sf_fp, FRACBITS), FRACBITS) / 2;
+
+ int32_t intval = (int32_t) (val_fp * 256) >> FRACBITS;
+ if(intval < -32768) intval = -32768;
+ else if(intval > 32767) intval = 32767;
+ return (Sint16) intval;
+}
+#else
+Sint16 GetSample(float csample, byte *samples, int size)
+{
+ float s0=0, s1=0, s2=0;
+ int cursample = (int) csample;
+ float sf = csample - (float) cursample;
+
+ if(cursample-1 >= 0) s0 = (float) (samples[cursample-1] - 128);
+ s1 = (float) (samples[cursample] - 128);
+ if(cursample+1 < size) s2 = (float) (samples[cursample+1] - 128);
+
+ float val = s0*sf*(sf-1)/2 - s1*(sf*sf-1) + s2*(sf+1)*sf/2;
+ int32_t intval = (int32_t) (val * 256);
+ if(intval < -32768) intval = -32768;
+ else if(intval > 32767) intval = 32767;
+ return (Sint16) intval;
+}
+#endif
+
+void SD_PrepareSound(int which)
+{
+#ifdef SOUND_ENABLE
+#ifdef FP_MATH
+ if(DigiList == NULL)
+ Quit("SD_PrepareSound(%i): DigiList not initialized!\n", which);
+
+ int page = DigiList[which].startpage;
+ int size = DigiList[which].length;
+
+ byte *origsamples = PM_GetSound(page);
+ if(origsamples + size >= PM_GetEnd())
+ Quit("SD_PrepareSound(%i): Sound reaches out of page file!\n", which);
+
+ /* this is fine to keep as floating-point */
+ int destsamples = (int) ((float) size * (float) param_samplerate
+ / (float) ORIGSAMPLERATE);
+
+ byte *wavebuffer = (byte *) malloc(sizeof(headchunk) + sizeof(wavechunk)
+ + destsamples * 2); // dest are 16-bit samples
+ if(wavebuffer == NULL)
+ Quit("Unable to allocate wave buffer for sound %i size %d %d %d %d!\n", which, destsamples, size, param_samplerate, ORIGSAMPLERATE);
+
+ headchunk head = {{'R','I','F','F'}, 0, {'W','A','V','E'},
+ {'f','m','t',' '}, 0x10, 0x0001, 1, param_samplerate, param_samplerate*2, 2, 16};
+ wavechunk dhead = {{'d', 'a', 't', 'a'}, destsamples*2};
+ head.filelenminus8 = sizeof(head) + destsamples*2; // (sizeof(dhead)-8 = 0)
+ memcpy(wavebuffer, &head, sizeof(head));
+ memcpy(wavebuffer+sizeof(head), &dhead, sizeof(dhead));
+
+ // alignment is correct, as wavebuffer comes from malloc
+ // and sizeof(headchunk) % 4 == 0 and sizeof(wavechunk) % 4 == 0
+ Sint16 *newsamples = (Sint16 *)(void *) (wavebuffer + sizeof(headchunk)
+ + sizeof(wavechunk));
+
+ long scale_fac_fp = fp_div(size << FRACBITS, destsamples << FRACBITS, FRACBITS);
+
+ for(int i=0; i<destsamples; i++)
+ {
+ newsamples[i] = GetSample(fp_mul(i << FRACBITS, scale_fac_fp, FRACBITS),
+ origsamples, size);
+ }
+ SoundBuffers[which] = wavebuffer;
+
+ SoundChunks[which] = Mix_LoadWAV_RW(SDL_RWFromMem(wavebuffer,
+ sizeof(headchunk) + sizeof(wavechunk) + destsamples * 2), 1);
+#else
+ if(DigiList == NULL)
+ Quit("SD_PrepareSound(%i): DigiList not initialized!\n", which);
+
+ int page = DigiList[which].startpage;
+ int size = DigiList[which].length;
+
+ byte *origsamples = PM_GetSound(page);
+ if(origsamples + size >= PM_GetEnd())
+ Quit("SD_PrepareSound(%i): Sound reaches out of page file!\n", which);
+
+ int destsamples = (int) ((float) size * (float) param_samplerate
+ / (float) ORIGSAMPLERATE);
+
+ byte *wavebuffer = (byte *) malloc(sizeof(headchunk) + sizeof(wavechunk)
+ + destsamples * 2); // dest are 16-bit samples
+ if(wavebuffer == NULL)
+ Quit("Unable to allocate wave buffer for sound %i!\n", which);
+
+ headchunk head = {{'R','I','F','F'}, 0, {'W','A','V','E'},
+ {'f','m','t',' '}, 0x10, 0x0001, 1, param_samplerate, param_samplerate*2, 2, 16};
+ wavechunk dhead = {{'d', 'a', 't', 'a'}, destsamples*2};
+ head.filelenminus8 = sizeof(head) + destsamples*2; // (sizeof(dhead)-8 = 0)
+ memcpy(wavebuffer, &head, sizeof(head));
+ memcpy(wavebuffer+sizeof(head), &dhead, sizeof(dhead));
+
+ // alignment is correct, as wavebuffer comes from malloc
+ // and sizeof(headchunk) % 4 == 0 and sizeof(wavechunk) % 4 == 0
+ Sint16 *newsamples = (Sint16 *)(void *) (wavebuffer + sizeof(headchunk)
+ + sizeof(wavechunk));
+ float cursample = 0.F;
+ float samplestep = (float) ORIGSAMPLERATE / (float) param_samplerate;
+ for(int i=0; i<destsamples; i++, cursample+=samplestep)
+ {
+ newsamples[i] = GetSample((float)size * (float)i / (float)destsamples,
+ origsamples, size);
+ }
+ SoundBuffers[which] = wavebuffer;
+
+ SoundChunks[which] = Mix_LoadWAV_RW(SDL_RWFromMem(wavebuffer,
+ sizeof(headchunk) + sizeof(wavechunk) + destsamples * 2), 1);
+#endif
+#endif
+}
+
+int SD_PlayDigitized(word which,int leftpos,int rightpos)
+{
+#ifdef SOUND_ENABLE
+ if (!DigiMode)
+ return 0;
+
+ if (which >= NumDigi)
+ Quit("SD_PlayDigitized: bad sound number %i", which);
+
+ int channel = SD_GetChannelForDigi(which);
+ SD_SetPosition(channel, leftpos,rightpos);
+
+ DigiPlaying = true;
+
+ Mix_Chunk *sample = SoundChunks[which];
+ if(sample == NULL)
+ {
+ printf("SoundChunks[%i] is NULL!\n", which);
+ return 0;
+ }
+
+ if(Mix_PlayChannel(channel, sample, 0) == -1)
+ {
+ printf("Unable to play sound: %s\n", Mix_GetError());
+ return 0;
+ }
+
+ return channel;
+#endif
+ return 0;
+}
+
+void SD_ChannelFinished(int channel)
+{
+#ifdef SOUND_ENABLE
+ channelSoundPos[channel].valid = 0;
+#endif
+}
+
+void
+SD_SetDigiDevice(SDSMode mode)
+{
+#ifdef SOUND_ENABLE
+ boolean devicenotpresent;
+
+ if (mode == DigiMode)
+ return;
+
+ SD_StopDigitized();
+
+ devicenotpresent = false;
+ switch (mode)
+ {
+ case sds_SoundBlaster:
+ if (!SoundBlasterPresent)
+ devicenotpresent = true;
+ break;
+ }
+
+ if (!devicenotpresent)
+ {
+ DigiMode = mode;
+
+#ifdef NOTYET
+ SDL_SetTimerSpeed();
+#endif
+ }
+#endif
+}
+
+void
+SDL_SetupDigi(void)
+{
+#ifdef SOUND_ENABLE
+ // Correct padding enforced by PM_Startup()
+ word *soundInfoPage = (word *) (void *) PM_GetPage(ChunksInFile-1);
+ NumDigi = (word) PM_GetPageSize(ChunksInFile - 1) / 4;
+
+ DigiList = (digiinfo *) malloc(NumDigi * sizeof(digiinfo));
+ int i;
+ for(i = 0; i < NumDigi; i++)
+ {
+ // Calculate the size of the digi from the sizes of the pages between
+ // the start page and the start page of the next sound
+
+ DigiList[i].startpage = soundInfoPage[i * 2];
+ if((int) DigiList[i].startpage >= ChunksInFile - 1)
+ {
+ NumDigi = i;
+ break;
+ }
+
+ int lastPage;
+ if(i < NumDigi - 1)
+ {
+ lastPage = soundInfoPage[i * 2 + 2];
+ if(lastPage == 0 || lastPage + PMSoundStart > ChunksInFile - 1) lastPage = ChunksInFile - 1;
+ else lastPage += PMSoundStart;
+ }
+ else lastPage = ChunksInFile - 1;
+
+ int size = 0;
+ for(int page = PMSoundStart + DigiList[i].startpage; page < lastPage; page++)
+ size += PM_GetPageSize(page);
+
+ // Don't include padding of sound info page, if padding was added
+ if(lastPage == ChunksInFile - 1 && PMSoundInfoPagePadded) size--;
+
+ // Patch lower 16-bit of size with size from sound info page.
+ // The original VSWAP contains padding which is included in the page size,
+ // but not included in the 16-bit size. So we use the more precise value.
+ if((size & 0xffff0000) != 0 && (size & 0xffff) < soundInfoPage[i * 2 + 1])
+ size -= 0x10000;
+ size = (size & 0xffff0000) | soundInfoPage[i * 2 + 1];
+
+ DigiList[i].length = size;
+ }
+
+ for(i = 0; i < LASTSOUND; i++)
+ {
+ DigiMap[i] = -1;
+ DigiChannel[i] = -1;
+ }
+#endif
+}
+
+// AdLib Code
+
+///////////////////////////////////////////////////////////////////////////
+//
+// SDL_ALStopSound() - Turns off any sound effects playing through the
+// AdLib card
+//
+///////////////////////////////////////////////////////////////////////////
+static void
+SDL_ALStopSound(void)
+{
+#ifdef SOUND_ENABLE
+ alSound = 0;
+ alOut(alFreqH + 0, 0);
+#endif
+}
+
+static void
+SDL_AlSetFXInst(Instrument *inst)
+{
+#ifdef SOUND_ENABLE
+ byte c,m;
+
+ m = 0; // modulator cell for channel 0
+ c = 3; // carrier cell for channel 0
+ alOut(m + alChar,inst->mChar);
+ alOut(m + alScale,inst->mScale);
+ alOut(m + alAttack,inst->mAttack);
+ alOut(m + alSus,inst->mSus);
+ alOut(m + alWave,inst->mWave);
+ alOut(c + alChar,inst->cChar);
+ alOut(c + alScale,inst->cScale);
+ alOut(c + alAttack,inst->cAttack);
+ alOut(c + alSus,inst->cSus);
+ alOut(c + alWave,inst->cWave);
+
+ // Note: Switch commenting on these lines for old MUSE compatibility
+// alOutInIRQ(alFeedCon,inst->nConn);
+ alOut(alFeedCon,0);
+#endif
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// SDL_ALPlaySound() - Plays the specified sound on the AdLib card
+//
+///////////////////////////////////////////////////////////////////////////
+static void
+SDL_ALPlaySound(AdLibSound *sound)
+{
+#ifdef SOUND_ENABLE
+ Instrument *inst;
+ byte *data;
+
+ SDL_ALStopSound();
+
+ alLengthLeft = sound->common.length;
+ data = sound->data;
+ alBlock = ((sound->block & 7) << 2) | 0x20;
+ inst = &sound->inst;
+
+ if (!(inst->mSus | inst->cSus))
+ {
+ Quit("SDL_ALPlaySound() - Bad instrument");
+ }
+
+ SDL_AlSetFXInst(inst);
+ alSound = (byte *)data;
+#endif
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// SDL_ShutAL() - Shuts down the AdLib card for sound effects
+//
+///////////////////////////////////////////////////////////////////////////
+static void
+SDL_ShutAL(void)
+{
+#ifdef SOUND_ENABLE
+ alSound = 0;
+ alOut(alEffects,0);
+ alOut(alFreqH + 0,0);
+ SDL_AlSetFXInst(&alZeroInst);
+#endif
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// SDL_CleanAL() - Totally shuts down the AdLib card
+//
+///////////////////////////////////////////////////////////////////////////
+static void
+SDL_CleanAL(void)
+{
+#ifdef SOUND_ENABLE
+ int i;
+
+ alOut(alEffects,0);
+ for (i = 1; i < 0xf5; i++)
+ alOut(i, 0);
+#endif
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// SDL_StartAL() - Starts up the AdLib card for sound effects
+//
+///////////////////////////////////////////////////////////////////////////
+static void
+SDL_StartAL(void)
+{
+#ifdef SOUND_ENABLE
+ alOut(alEffects, 0);
+ SDL_AlSetFXInst(&alZeroInst);
+#endif
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// SDL_DetectAdLib() - Determines if there's an AdLib (or SoundBlaster
+// emulating an AdLib) present
+//
+///////////////////////////////////////////////////////////////////////////
+static boolean
+SDL_DetectAdLib(void)
+{
+#ifdef SOUND_ENABLE
+ for (int i = 1; i <= 0xf5; i++) // Zero all the registers
+ alOut(i, 0);
+
+ alOut(1, 0x20); // Set WSE=1
+// alOut(8, 0); // Set CSM=0 & SEL=0
+
+ return true;
+#endif
+}
+
+////////////////////////////////////////////////////////////////////////////
+//
+// SDL_ShutDevice() - turns off whatever device was being used for sound fx
+//
+////////////////////////////////////////////////////////////////////////////
+static void
+SDL_ShutDevice(void)
+{
+#ifdef SOUND_ENABLE
+ switch (SoundMode)
+ {
+ case sdm_PC:
+// SDL_ShutPC();
+ break;
+ case sdm_AdLib:
+ SDL_ShutAL();
+ break;
+ }
+ SoundMode = sdm_Off;
+#endif
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// SDL_CleanDevice() - totally shuts down all sound devices
+//
+///////////////////////////////////////////////////////////////////////////
+static void
+SDL_CleanDevice(void)
+{
+#ifdef SOUND_ENABLE
+ if ((SoundMode == sdm_AdLib) || (MusicMode == smm_AdLib))
+ SDL_CleanAL();
+#endif
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// SDL_StartDevice() - turns on whatever device is to be used for sound fx
+//
+///////////////////////////////////////////////////////////////////////////
+static void
+SDL_StartDevice(void)
+{
+#ifdef SOUND_ENABLE
+ switch (SoundMode)
+ {
+ case sdm_AdLib:
+ SDL_StartAL();
+ break;
+ }
+ SoundNumber = (soundnames) 0;
+ SoundPriority = 0;
+#endif
+}
+
+// Public routines
+
+///////////////////////////////////////////////////////////////////////////
+//
+// SD_SetSoundMode() - Sets which sound hardware to use for sound effects
+//
+///////////////////////////////////////////////////////////////////////////
+boolean
+SD_SetSoundMode(SDMode mode)
+{
+#ifdef SOUND_ENABLE
+ boolean result = false;
+ word tableoffset;
+
+ SD_StopSound();
+
+ if ((mode == sdm_AdLib) && !AdLibPresent)
+ mode = sdm_PC;
+
+ switch (mode)
+ {
+ case sdm_Off:
+ tableoffset = STARTADLIBSOUNDS;
+ result = true;
+ break;
+ case sdm_PC:
+ tableoffset = STARTPCSOUNDS;
+ result = true;
+ break;
+ case sdm_AdLib:
+ tableoffset = STARTADLIBSOUNDS;
+ if (AdLibPresent)
+ result = true;
+ break;
+ default:
+ Quit("SD_SetSoundMode: Invalid sound mode %i", mode);
+ return false;
+ }
+ SoundTable = &audiosegs[tableoffset];
+
+ if (result && (mode != SoundMode))
+ {
+ SDL_ShutDevice();
+ SoundMode = mode;
+ SDL_StartDevice();
+ }
+
+ return(result);
+#endif
+ return true;
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// SD_SetMusicMode() - sets the device to use for background music
+//
+///////////////////////////////////////////////////////////////////////////
+boolean
+SD_SetMusicMode(SMMode mode)
+{
+#ifdef SOUND_ENABLE
+ boolean result = false;
+
+ SD_FadeOutMusic();
+ while (SD_MusicPlaying())
+ SDL_Delay(5);
+
+ switch (mode)
+ {
+ case smm_Off:
+ result = true;
+ break;
+ case smm_AdLib:
+ if (AdLibPresent)
+ result = true;
+ break;
+ }
+
+ if (result)
+ MusicMode = mode;
+
+// SDL_SetTimerSpeed();
+
+ return(result);
+#endif
+}
+
+int numreadysamples = 0;
+byte *curAlSound = 0;
+byte *curAlSoundPtr = 0;
+longword curAlLengthLeft = 0;
+int soundTimeCounter = 5;
+int samplesPerMusicTick;
+
+void *OPL_ptr = NULL;
+
+void SDL_IMFMusicPlayer(void *udata, Uint8 *stream, int len)
+{
+#ifdef SOUND_ENABLE
+ int stereolen = len>>1;
+ int sampleslen = stereolen>>1;
+ INT16 *stream16 = (INT16 *) (void *) stream; // expect correct alignment
+
+ while(1)
+ {
+ if(numreadysamples)
+ {
+ if(numreadysamples<sampleslen)
+ {
+ YM3812UpdateOne(OPL_ptr, stream16, numreadysamples);
+ stream16 += numreadysamples*2;
+ sampleslen -= numreadysamples;
+ }
+ else
+ {
+ YM3812UpdateOne(OPL_ptr, stream16, sampleslen);
+ numreadysamples -= sampleslen;
+ return;
+ }
+ }
+ soundTimeCounter--;
+ if(!soundTimeCounter)
+ {
+ soundTimeCounter = 5;
+ if(curAlSound != alSound)
+ {
+ curAlSound = curAlSoundPtr = alSound;
+ curAlLengthLeft = alLengthLeft;
+ }
+ if(curAlSound)
+ {
+ if(*curAlSoundPtr)
+ {
+ alOut(alFreqL, *curAlSoundPtr);
+ alOut(alFreqH, alBlock);
+ }
+ else alOut(alFreqH, 0);
+ curAlSoundPtr++;
+ curAlLengthLeft--;
+ if(!curAlLengthLeft)
+ {
+ curAlSound = alSound = 0;
+ SoundNumber = (soundnames) 0;
+ SoundPriority = 0;
+ alOut(alFreqH, 0);
+ }
+ }
+ }
+ if(sqActive)
+ {
+ do
+ {
+ if(sqHackTime > alTimeCount) break;
+ sqHackTime = alTimeCount + *(sqHackPtr+1);
+ alOut(*(byte *) sqHackPtr, *(((byte *) sqHackPtr)+1));
+ sqHackPtr += 2;
+ sqHackLen -= 4;
+ }
+ while(sqHackLen>0);
+ alTimeCount++;
+ if(!sqHackLen)
+ {
+ sqHackPtr = sqHack;
+ sqHackLen = sqHackSeqLen;
+ sqHackTime = 0;
+ alTimeCount = 0;
+ }
+ }
+ numreadysamples = samplesPerMusicTick;
+ }
+#endif
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// SD_Startup() - starts up the Sound Mgr
+// Detects all additional sound hardware and installs my ISR
+//
+///////////////////////////////////////////////////////////////////////////
+void
+SD_Startup(void)
+{
+#ifdef SOUND_ENABLE
+ int i;
+
+ if (SD_Started)
+ return;
+
+ if(Mix_OpenAudio(param_samplerate, AUDIO_S16, 2, param_audiobuffer))
+ {
+ printf("Unable to open audio: %s\n", Mix_GetError());
+ return;
+ }
+
+ Mix_ReserveChannels(2); // reserve player and boss weapon channels
+ Mix_GroupChannels(2, MIX_CHANNELS-1, 1); // group remaining channels
+
+ // Init music
+
+ samplesPerMusicTick = param_samplerate / 700; // SDL_t0FastAsmService played at 700Hz
+
+ if(!(OPL_ptr = YM3812Init((void*)1,3579545,param_samplerate)))
+ {
+ //printf("Unable to create virtual OPL!!\n");
+ }
+
+ for(i=1;i<0xf6;i++)
+ YM3812Write(OPL_ptr,i,0);
+
+ YM3812Write(OPL_ptr,1,0x20); // Set WSE=1
+// YM3812Write(0,8,0); // Set CSM=0 & SEL=0 // already set in for statement
+
+ Mix_HookMusic(SDL_IMFMusicPlayer, 0);
+ Mix_ChannelFinished(SD_ChannelFinished);
+ AdLibPresent = true;
+ SoundBlasterPresent = true;
+
+ alTimeCount = 0;
+
+ SD_SetSoundMode(sdm_Off);
+ SD_SetMusicMode(smm_Off);
+
+ SDL_SetupDigi();
+
+ SD_Started = true;
+#endif
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// SD_Shutdown() - shuts down the Sound Mgr
+// Removes sound ISR and turns off whatever sound hardware was active
+//
+///////////////////////////////////////////////////////////////////////////
+void
+SD_Shutdown(void)
+{
+#ifdef SOUND_ENABLE
+ if (!SD_Started)
+ return;
+
+ SD_MusicOff();
+ SD_StopSound();
+
+ for(int i = 0; i < STARTMUSIC - STARTDIGISOUNDS; i++)
+ {
+ if(SoundChunks[i]) Mix_FreeChunk(SoundChunks[i]);
+ if(SoundBuffers[i]) free(SoundBuffers[i]);
+ }
+
+ free(DigiList);
+
+ SD_Started = false;
+#endif
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// SD_PositionSound() - Sets up a stereo imaging location for the next
+// sound to be played. Each channel ranges from 0 to 15.
+//
+///////////////////////////////////////////////////////////////////////////
+void
+SD_PositionSound(int leftvol,int rightvol)
+{
+#ifdef SOUND_ENABLE
+ LeftPosition = leftvol;
+ RightPosition = rightvol;
+ nextsoundpos = true;
+#endif
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// SD_PlaySound() - plays the specified sound on the appropriate hardware
+//
+///////////////////////////////////////////////////////////////////////////
+boolean
+SD_PlaySound(soundnames sound)
+{
+#ifdef SOUND_ENABLE
+ boolean ispos;
+ SoundCommon *s;
+ int lp,rp;
+
+ lp = LeftPosition;
+ rp = RightPosition;
+ LeftPosition = 0;
+ RightPosition = 0;
+
+ ispos = nextsoundpos;
+ nextsoundpos = false;
+
+ if (sound == -1 || (DigiMode == sds_Off && SoundMode == sdm_Off))
+ return 0;
+
+ s = (SoundCommon *) SoundTable[sound];
+
+ if ((SoundMode != sdm_Off) && !s)
+ Quit("SD_PlaySound() - Uncached sound");
+
+ if ((DigiMode != sds_Off) && (DigiMap[sound] != -1))
+ {
+ if ((DigiMode == sds_PC) && (SoundMode == sdm_PC))
+ {
+#ifdef NOTYET
+ if (s->priority < SoundPriority)
+ return 0;
+
+ SDL_PCStopSound();
+
+ SD_PlayDigitized(DigiMap[sound],lp,rp);
+ SoundPositioned = ispos;
+ SoundNumber = sound;
+ SoundPriority = s->priority;
+#else
+ return 0;
+#endif
+ }
+ else
+ {
+#ifdef NOTYET
+ if (s->priority < DigiPriority)
+ return(false);
+#endif
+
+ int channel = SD_PlayDigitized(DigiMap[sound], lp, rp);
+ SoundPositioned = ispos;
+ DigiNumber = sound;
+ DigiPriority = s->priority;
+ return channel + 1;
+ }
+
+ return(true);
+ }
+
+ if (SoundMode == sdm_Off)
+ return 0;
+
+ if (!s->length)
+ Quit("SD_PlaySound() - Zero length sound");
+ if (s->priority < SoundPriority)
+ return 0;
+
+ switch (SoundMode)
+ {
+ case sdm_PC:
+// SDL_PCPlaySound((PCSound *)s);
+ break;
+ case sdm_AdLib:
+ SDL_ALPlaySound((AdLibSound *)s);
+ break;
+ }
+
+ SoundNumber = sound;
+ SoundPriority = s->priority;
+
+ return 0;
+#endif
+ return 0;
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// SD_SoundPlaying() - returns the sound number that's playing, or 0 if
+// no sound is playing
+//
+///////////////////////////////////////////////////////////////////////////
+word
+SD_SoundPlaying(void)
+{
+#ifdef SOUND_ENABLE
+ boolean result = false;
+
+ switch (SoundMode)
+ {
+ case sdm_PC:
+ result = pcSound? true : false;
+ break;
+ case sdm_AdLib:
+ result = alSound? true : false;
+ break;
+ }
+
+ if (result)
+ return(SoundNumber);
+ else
+ return(false);
+#endif
+ return false;
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// SD_StopSound() - if a sound is playing, stops it
+//
+///////////////////////////////////////////////////////////////////////////
+void
+SD_StopSound(void)
+{
+#ifdef SOUND_ENABLE
+ if (DigiPlaying)
+ SD_StopDigitized();
+
+ switch (SoundMode)
+ {
+ case sdm_PC:
+// SDL_PCStopSound();
+ break;
+ case sdm_AdLib:
+ SDL_ALStopSound();
+ break;
+ }
+
+ SoundPositioned = false;
+
+ SDL_SoundFinished();
+#endif
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// SD_WaitSoundDone() - waits until the current sound is done playing
+//
+///////////////////////////////////////////////////////////////////////////
+void
+SD_WaitSoundDone(void)
+{
+#ifdef SOUND_ENABLE
+ while (SD_SoundPlaying())
+ SDL_Delay(5);
+#endif
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// SD_MusicOn() - turns on the sequencer
+//
+///////////////////////////////////////////////////////////////////////////
+void
+SD_MusicOn(void)
+{
+#ifdef SOUND_ENABLE
+ sqActive = true;
+#endif
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// SD_MusicOff() - turns off the sequencer and any playing notes
+// returns the last music offset for music continue
+//
+///////////////////////////////////////////////////////////////////////////
+int
+SD_MusicOff(void)
+{
+#ifdef SOUND_ENABLE
+ word i;
+
+ sqActive = false;
+ switch (MusicMode)
+ {
+ case smm_AdLib:
+ alOut(alEffects, 0);
+ for (i = 0;i < sqMaxTracks;i++)
+ alOut(alFreqH + i + 1, 0);
+ break;
+ }
+
+ return (int) (sqHackPtr-sqHack);
+#endif
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// SD_StartMusic() - starts playing the music pointed to
+//
+///////////////////////////////////////////////////////////////////////////
+void
+SD_StartMusic(int chunk)
+{
+#ifdef SOUND_ENABLE
+ SD_MusicOff();
+
+ if (MusicMode == smm_AdLib)
+ {
+ int32_t chunkLen = CA_CacheAudioChunk(chunk);
+ sqHack = (word *)(void *) audiosegs[chunk]; // alignment is correct
+ if(*sqHack == 0) sqHackLen = sqHackSeqLen = chunkLen;
+ else sqHackLen = sqHackSeqLen = *sqHack++;
+ sqHackPtr = sqHack;
+ sqHackTime = 0;
+ alTimeCount = 0;
+ SD_MusicOn();
+ }
+#endif
+}
+
+void
+SD_ContinueMusic(int chunk, int startoffs)
+{
+#ifdef SOUND_ENABLE
+ SD_MusicOff();
+
+ if (MusicMode == smm_AdLib)
+ {
+ int32_t chunkLen = CA_CacheAudioChunk(chunk);
+ sqHack = (word *)(void *) audiosegs[chunk]; // alignment is correct
+ if(*sqHack == 0) sqHackLen = sqHackSeqLen = chunkLen;
+ else sqHackLen = sqHackSeqLen = *sqHack++;
+ sqHackPtr = sqHack;
+
+ if(startoffs >= sqHackLen)
+ {
+ Quit("SD_StartMusic: Illegal startoffs provided!");
+ }
+
+ // fast forward to correct position
+ // (needed to reconstruct the instruments)
+
+ for(int i = 0; i < startoffs; i += 2)
+ {
+ byte reg = *(byte *)sqHackPtr;
+ byte val = *(((byte *)sqHackPtr) + 1);
+ if(reg >= 0xb1 && reg <= 0xb8) val &= 0xdf; // disable play note flag
+ else if(reg == 0xbd) val &= 0xe0; // disable drum flags
+
+ alOut(reg,val);
+ sqHackPtr += 2;
+ sqHackLen -= 4;
+ }
+ sqHackTime = 0;
+ alTimeCount = 0;
+
+ SD_MusicOn();
+ }
+#endif
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// SD_FadeOutMusic() - starts fading out the music. Call SD_MusicPlaying()
+// to see if the fadeout is complete
+//
+///////////////////////////////////////////////////////////////////////////
+void
+SD_FadeOutMusic(void)
+{
+#ifdef SOUND_ENABLE
+ switch (MusicMode)
+ {
+ case smm_AdLib:
+ // DEBUG - quick hack to turn the music off
+ SD_MusicOff();
+ break;
+ }
+#endif
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// SD_MusicPlaying() - returns true if music is currently playing, false if
+// not
+//
+///////////////////////////////////////////////////////////////////////////
+boolean
+SD_MusicPlaying(void)
+{
+#ifdef SOUND_ENABLE
+ boolean result;
+
+ switch (MusicMode)
+ {
+ case smm_AdLib:
+ result = sqActive;
+ break;
+ default:
+ result = false;
+ break;
+ }
+
+ return(result);
+#endif
+ return false;
+}
diff --git a/apps/plugins/sdl/progs/wolf3d/id_sd.h b/apps/plugins/sdl/progs/wolf3d/id_sd.h
new file mode 100644
index 0000000000..2d91e730d5
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/id_sd.h
@@ -0,0 +1,158 @@
+//
+// ID Engine
+// ID_SD.h - Sound Manager Header
+// Version for Wolfenstein
+// By Jason Blochowiak
+//
+
+#ifndef __ID_SD__
+#define __ID_SD__
+
+extern void *OPL_ptr;
+
+#define alOut(n,b) YM3812Write(OPL_ptr, n, b)
+
+#define TickBase 70 // 70Hz per tick - used as a base for timer 0
+
+typedef enum
+{
+ sdm_Off,
+ sdm_PC,sdm_AdLib,
+} SDMode;
+
+typedef enum
+{
+ smm_Off,smm_AdLib
+} SMMode;
+
+typedef enum
+{
+ sds_Off,sds_PC,sds_SoundBlaster
+} SDSMode;
+
+typedef struct
+{
+ longword length;
+ word priority;
+} SoundCommon;
+
+#define ORIG_SOUNDCOMMON_SIZE 6
+
+// PC Sound stuff
+#define pcTimer 0x42
+#define pcTAccess 0x43
+#define pcSpeaker 0x61
+
+#define pcSpkBits 3
+
+typedef struct
+{
+ SoundCommon common;
+ byte data[1];
+} PCSound;
+
+// Register addresses
+// Operator stuff
+#define alChar 0x20
+#define alScale 0x40
+#define alAttack 0x60
+#define alSus 0x80
+#define alWave 0xe0
+// Channel stuff
+#define alFreqL 0xa0
+#define alFreqH 0xb0
+#define alFeedCon 0xc0
+// Global stuff
+#define alEffects 0xbd
+
+typedef struct
+{
+ byte mChar,cChar,
+ mScale,cScale,
+ mAttack,cAttack,
+ mSus,cSus,
+ mWave,cWave,
+ nConn,
+
+ // These are only for Muse - these bytes are really unused
+ voice,
+ mode;
+ byte unused[3];
+} Instrument;
+
+#define ORIG_INSTRUMENT_SIZE 16
+
+typedef struct
+{
+ SoundCommon common;
+ Instrument inst;
+ byte block;
+ byte data[1];
+} AdLibSound;
+
+#define ORIG_ADLIBSOUND_SIZE (ORIG_SOUNDCOMMON_SIZE + ORIG_INSTRUMENT_SIZE + 2)
+
+//
+// Sequencing stuff
+//
+#define sqMaxTracks 10
+
+typedef struct
+{
+ word length;
+ word values[1];
+} MusicGroup;
+
+typedef struct
+{
+ int valid;
+ fixed globalsoundx, globalsoundy;
+} globalsoundpos;
+
+extern globalsoundpos channelSoundPos[];
+
+// Global variables
+extern boolean AdLibPresent,
+ SoundBlasterPresent,
+ SoundPositioned;
+extern SDMode SoundMode;
+extern SDSMode DigiMode;
+extern SMMode MusicMode;
+extern int DigiMap[];
+extern int DigiChannel[];
+
+#define GetTimeCount() ((SDL_GetTicks()*7)/100)
+
+inline void Delay(int wolfticks)
+{
+ if(wolfticks>0) SDL_Delay(wolfticks * 100 / 7);
+}
+
+// Function prototypes
+extern void SD_Startup(void),
+ SD_Shutdown(void);
+
+extern int SD_GetChannelForDigi(int which);
+extern void SD_PositionSound(int leftvol,int rightvol);
+extern boolean SD_PlaySound(soundnames sound);
+extern void SD_SetPosition(int channel, int leftvol,int rightvol);
+extern void SD_StopSound(void),
+ SD_WaitSoundDone(void);
+
+extern void SD_StartMusic(int chunk);
+extern void SD_ContinueMusic(int chunk, int startoffs);
+extern void SD_MusicOn(void),
+ SD_FadeOutMusic(void);
+extern int SD_MusicOff(void);
+
+extern boolean SD_MusicPlaying(void);
+extern boolean SD_SetSoundMode(SDMode mode);
+extern boolean SD_SetMusicMode(SMMode mode);
+extern word SD_SoundPlaying(void);
+
+extern void SD_SetDigiDevice(SDSMode);
+extern void SD_PreparSound(int which);
+extern int SD_PlayDigitized(word which,int leftpos,int rightpos);
+extern void SD_StopDigitized(void);
+
+#endif
diff --git a/apps/plugins/sdl/progs/wolf3d/id_us.h b/apps/plugins/sdl/progs/wolf3d/id_us.h
new file mode 100644
index 0000000000..84958631f7
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/id_us.h
@@ -0,0 +1,101 @@
+//
+// ID Engine
+// ID_US.h - Header file for the User Manager
+// v1.0d1
+// By Jason Blochowiak
+//
+
+#ifndef __ID_US__
+#define __ID_US__
+
+#ifdef __DEBUG__
+#define __DEBUG_UserMgr__
+#endif
+
+//#define HELPTEXTLINKED
+
+#define MaxX 320
+#define MaxY 200
+
+#define MaxHelpLines 500
+
+#define MaxHighName 57
+#define MaxScores 7
+typedef struct
+{
+ char name[MaxHighName + 1];
+ int32_t score;
+ word completed,episode;
+} HighScore;
+
+#define MaxGameName 32
+#define MaxSaveGames 6
+typedef struct
+{
+ char signature[4];
+ word *oldtest;
+ boolean present;
+ char name[MaxGameName + 1];
+} SaveGame;
+
+#define MaxString 128 // Maximum input string size
+
+typedef struct
+{
+ int x,y,
+ w,h,
+ px,py;
+} WindowRec; // Record used to save & restore screen windows
+
+extern boolean ingame, // Set by game code if a game is in progress
+ loadedgame; // Set if the current game was loaded
+extern word PrintX,PrintY; // Current printing location in the window
+extern word WindowX,WindowY,// Current location of window
+ WindowW,WindowH;// Current size of window
+
+extern void (*USL_MeasureString)(const char *,word *,word *);
+extern void (*USL_DrawString)(const char *);
+
+extern boolean (*USL_SaveGame)(int),(*USL_LoadGame)(int);
+extern void (*USL_ResetGame)(void);
+extern SaveGame Games[MaxSaveGames];
+extern HighScore Scores[];
+
+#define US_HomeWindow() {PrintX = WindowX; PrintY = WindowY;}
+
+void US_Startup(void);
+void US_Shutdown(void);
+void US_TextScreen(void),
+ US_UpdateTextScreen(void),
+ US_FinishTextScreen(void);
+void US_DrawWindow(word x,word y,word w,word h);
+void US_CenterWindow(word,word);
+void US_SaveWindow(WindowRec *win),
+ US_RestoreWindow(WindowRec *win);
+void US_ClearWindow(void);
+void US_SetPrintRoutines(void (*measure)(const char *,word *,word *),
+ void (*print)(const char *));
+void US_PrintCentered(const char *s),
+ US_CPrint(const char *s),
+ US_CPrintLine(const char *s),
+ US_Print(const char *s);
+void US_Printf(const char *formatStr, ...);
+void US_CPrintf(const char *formatStr, ...);
+
+void US_PrintUnsigned(longword n);
+void US_PrintSigned(int32_t n);
+void US_StartCursor(void),
+ US_ShutCursor(void);
+void US_CheckHighScore(int32_t score,word other);
+void US_DisplayHighScores(int which);
+extern boolean US_UpdateCursor(void);
+boolean US_LineInput(int x,int y,char *buf,const char *def,boolean escok,
+ int maxchars,int maxwidth);
+
+void USL_PrintInCenter(const char *s,Rect r);
+char *USL_GiveSaveName(word game);
+
+void US_InitRndT(int randomize);
+int US_RndT();
+
+#endif
diff --git a/apps/plugins/sdl/progs/wolf3d/id_us_1.c b/apps/plugins/sdl/progs/wolf3d/id_us_1.c
new file mode 100644
index 0000000000..76b53f30f0
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/id_us_1.c
@@ -0,0 +1,789 @@
+//
+// ID Engine
+// ID_US_1.c - User Manager - General routines
+// v1.1d1
+// By Jason Blochowiak
+// Hacked up for Catacomb 3D
+//
+
+//
+// This module handles dealing with user input & feedback
+//
+// Depends on: Input Mgr, View Mgr, some variables from the Sound, Caching,
+// and Refresh Mgrs, Memory Mgr for background save/restore
+//
+// Globals:
+// ingame - Flag set by game indicating if a game is in progress
+// loadedgame - Flag set if a game was loaded
+// PrintX, PrintY - Where the User Mgr will print (global coords)
+// WindowX,WindowY,WindowW,WindowH - The dimensions of the current
+// window
+//
+
+#include "wl_def.h"
+
+#pragma hdrstop
+
+#if _MSC_VER == 1200 // Visual C++ 6
+ #define vsnprintf _vsnprintf
+#endif
+
+// Global variables
+ word PrintX,PrintY;
+ word WindowX,WindowY,WindowW,WindowH;
+
+// Internal variables
+#define ConfigVersion 1
+
+static boolean US_Started;
+
+ void (*USL_MeasureString)(const char *,word *,word *) = VW_MeasurePropString;
+ void (*USL_DrawString)(const char *) = VWB_DrawPropString;
+
+ SaveGame Games[MaxSaveGames];
+ HighScore Scores[MaxScores] =
+ {
+ {"id software-'92",10000,1},
+ {"Adrian Carmack",10000,1},
+ {"John Carmack",10000,1},
+ {"Kevin Cloud",10000,1},
+ {"Tom Hall",10000,1},
+ {"John Romero",10000,1},
+ {"Jay Wilbur",10000,1},
+ };
+
+int rndindex = 0;
+
+static byte rndtable[] = {
+ 0, 8, 109, 220, 222, 241, 149, 107, 75, 248, 254, 140, 16, 66,
+ 74, 21, 211, 47, 80, 242, 154, 27, 205, 128, 161, 89, 77, 36,
+ 95, 110, 85, 48, 212, 140, 211, 249, 22, 79, 200, 50, 28, 188,
+ 52, 140, 202, 120, 68, 145, 62, 70, 184, 190, 91, 197, 152, 224,
+ 149, 104, 25, 178, 252, 182, 202, 182, 141, 197, 4, 81, 181, 242,
+ 145, 42, 39, 227, 156, 198, 225, 193, 219, 93, 122, 175, 249, 0,
+ 175, 143, 70, 239, 46, 246, 163, 53, 163, 109, 168, 135, 2, 235,
+ 25, 92, 20, 145, 138, 77, 69, 166, 78, 176, 173, 212, 166, 113,
+ 94, 161, 41, 50, 239, 49, 111, 164, 70, 60, 2, 37, 171, 75,
+ 136, 156, 11, 56, 42, 146, 138, 229, 73, 146, 77, 61, 98, 196,
+ 135, 106, 63, 197, 195, 86, 96, 203, 113, 101, 170, 247, 181, 113,
+ 80, 250, 108, 7, 255, 237, 129, 226, 79, 107, 112, 166, 103, 241,
+ 24, 223, 239, 120, 198, 58, 60, 82, 128, 3, 184, 66, 143, 224,
+ 145, 224, 81, 206, 163, 45, 63, 90, 168, 114, 59, 33, 159, 95,
+ 28, 139, 123, 98, 125, 196, 15, 70, 194, 253, 54, 14, 109, 226,
+ 71, 17, 161, 93, 186, 87, 244, 138, 20, 52, 123, 251, 26, 36,
+ 17, 46, 52, 231, 232, 76, 31, 221, 84, 37, 216, 165, 212, 106,
+ 197, 242, 98, 43, 39, 175, 254, 145, 190, 84, 118, 222, 187, 136,
+ 120, 163, 236, 249 };
+
+// Internal routines
+
+// Public routines
+
+///////////////////////////////////////////////////////////////////////////
+//
+// US_Startup() - Starts the User Mgr
+//
+///////////////////////////////////////////////////////////////////////////
+void US_Startup()
+{
+ if (US_Started)
+ return;
+
+ US_InitRndT(true); // Initialize the random number generator
+
+ US_Started = true;
+}
+
+
+///////////////////////////////////////////////////////////////////////////
+//
+// US_Shutdown() - Shuts down the User Mgr
+//
+///////////////////////////////////////////////////////////////////////////
+void
+US_Shutdown(void)
+{
+ if (!US_Started)
+ return;
+
+ US_Started = false;
+}
+
+// Window/Printing routines
+
+///////////////////////////////////////////////////////////////////////////
+//
+// US_SetPrintRoutines() - Sets the routines used to measure and print
+// from within the User Mgr. Primarily provided to allow switching
+// between masked and non-masked fonts
+//
+///////////////////////////////////////////////////////////////////////////
+void
+US_SetPrintRoutines(void (*measure)(const char *,word *,word *),
+ void (*print)(const char *))
+{
+ USL_MeasureString = measure;
+ USL_DrawString = print;
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// US_Print() - Prints a string in the current window. Newlines are
+// supported.
+//
+///////////////////////////////////////////////////////////////////////////
+void
+US_Print(const char *sorg)
+{
+ char c;
+ char *sstart = strdup(sorg);
+ char *s = sstart;
+ char *se;
+ word w,h;
+
+ while (*s)
+ {
+ se = s;
+ while ((c = *se)!=0 && (c != '\n'))
+ se++;
+ *se = '\0';
+
+ USL_MeasureString(s,&w,&h);
+ px = PrintX;
+ py = PrintY;
+ USL_DrawString(s);
+
+ s = se;
+ if (c)
+ {
+ *se = c;
+ s++;
+
+ PrintX = WindowX;
+ PrintY += h;
+ }
+ else
+ PrintX += w;
+ }
+ free(sstart);
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// US_PrintUnsigned() - Prints an unsigned long
+//
+///////////////////////////////////////////////////////////////////////////
+void
+US_PrintUnsigned(longword n)
+{
+ char buffer[32];
+ sprintf(buffer, "%lu", n);
+
+ US_Print(buffer);
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// US_PrintSigned() - Prints a signed long
+//
+///////////////////////////////////////////////////////////////////////////
+void
+US_PrintSigned(int32_t n)
+{
+ char buffer[32];
+
+ US_Print(ltoa(n,buffer,10));
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// USL_PrintInCenter() - Prints a string in the center of the given rect
+//
+///////////////////////////////////////////////////////////////////////////
+void
+USL_PrintInCenter(const char *s,Rect r)
+{
+ word w,h,
+ rw,rh;
+
+ USL_MeasureString(s,&w,&h);
+ rw = r.lr.x - r.ul.x;
+ rh = r.lr.y - r.ul.y;
+
+ px = r.ul.x + ((rw - w) / 2);
+ py = r.ul.y + ((rh - h) / 2);
+ USL_DrawString(s);
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// US_PrintCentered() - Prints a string centered in the current window.
+//
+///////////////////////////////////////////////////////////////////////////
+void
+US_PrintCentered(const char *s)
+{
+ Rect r;
+
+ r.ul.x = WindowX;
+ r.ul.y = WindowY;
+ r.lr.x = r.ul.x + WindowW;
+ r.lr.y = r.ul.y + WindowH;
+
+ USL_PrintInCenter(s,r);
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// US_CPrintLine() - Prints a string centered on the current line and
+// advances to the next line. Newlines are not supported.
+//
+///////////////////////////////////////////////////////////////////////////
+void
+US_CPrintLine(const char *s)
+{
+ word w,h;
+
+ USL_MeasureString(s,&w,&h);
+
+ if (w > WindowW)
+ Quit("US_CPrintLine() - String exceeds width");
+ px = WindowX + ((WindowW - w) / 2);
+ py = PrintY;
+ USL_DrawString(s);
+ PrintY += h;
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// US_CPrint() - Prints a string centered in the current window.
+// Newlines are supported.
+//
+///////////////////////////////////////////////////////////////////////////
+void
+US_CPrint(const char *sorg)
+{
+ char c;
+ char *sstart = strdup(sorg);
+ char *s = sstart;
+ char *se;
+
+ while (*s)
+ {
+ se = s;
+ while ((c = *se)!=0 && (c != '\n'))
+ se++;
+ *se = '\0';
+
+ US_CPrintLine(s);
+
+ s = se;
+ if (c)
+ {
+ *se = c;
+ s++;
+ }
+ }
+ free(sstart);
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// US_Printf() - Prints a formatted string in the current window.
+// Newlines are supported.
+//
+///////////////////////////////////////////////////////////////////////////
+
+void US_Printf(const char *formatStr, ...)
+{
+ char strbuf[256];
+ va_list vlist;
+ va_start(vlist, formatStr);
+ int len = vsnprintf(strbuf, sizeof(strbuf), formatStr, vlist);
+ va_end(vlist);
+ if(len <= -1 || len >= sizeof(strbuf))
+ strbuf[sizeof(strbuf) - 1] = 0;
+ US_Print(strbuf);
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// US_CPrintf() - Prints a formatted string centered in the current window.
+// Newlines are supported.
+//
+///////////////////////////////////////////////////////////////////////////
+
+void US_CPrintf(const char *formatStr, ...)
+{
+ char strbuf[256];
+ va_list vlist;
+ va_start(vlist, formatStr);
+ int len = vsnprintf(strbuf, sizeof(strbuf), formatStr, vlist);
+ va_end(vlist);
+ if(len <= -1 || len >= sizeof(strbuf))
+ strbuf[sizeof(strbuf) - 1] = 0;
+ US_CPrint(strbuf);
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// US_ClearWindow() - Clears the current window to white and homes the
+// cursor
+//
+///////////////////////////////////////////////////////////////////////////
+void
+US_ClearWindow(void)
+{
+ VWB_Bar(WindowX,WindowY,WindowW,WindowH,WHITE);
+ PrintX = WindowX;
+ PrintY = WindowY;
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// US_DrawWindow() - Draws a frame and sets the current window parms
+//
+///////////////////////////////////////////////////////////////////////////
+void
+US_DrawWindow(word x,word y,word w,word h)
+{
+ word i,
+ sx,sy,sw,sh;
+
+ WindowX = x * 8;
+ WindowY = y * 8;
+ WindowW = w * 8;
+ WindowH = h * 8;
+
+ PrintX = WindowX;
+ PrintY = WindowY;
+
+ sx = (x - 1) * 8;
+ sy = (y - 1) * 8;
+ sw = (w + 1) * 8;
+ sh = (h + 1) * 8;
+
+ US_ClearWindow();
+
+ VWB_DrawTile8(sx,sy,0),VWB_DrawTile8(sx,sy + sh,5);
+ for (i = sx + 8;i <= sx + sw - 8;i += 8)
+ VWB_DrawTile8(i,sy,1),VWB_DrawTile8(i,sy + sh,6);
+ VWB_DrawTile8(i,sy,2),VWB_DrawTile8(i,sy + sh,7);
+
+ for (i = sy + 8;i <= sy + sh - 8;i += 8)
+ VWB_DrawTile8(sx,i,3),VWB_DrawTile8(sx + sw,i,4);
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// US_CenterWindow() - Generates a window of a given width & height in the
+// middle of the screen
+//
+///////////////////////////////////////////////////////////////////////////
+void
+US_CenterWindow(word w,word h)
+{
+ US_DrawWindow(((MaxX / 8) - w) / 2,((MaxY / 8) - h) / 2,w,h);
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// US_SaveWindow() - Saves the current window parms into a record for
+// later restoration
+//
+///////////////////////////////////////////////////////////////////////////
+void
+US_SaveWindow(WindowRec *win)
+{
+ win->x = WindowX;
+ win->y = WindowY;
+ win->w = WindowW;
+ win->h = WindowH;
+
+ win->px = PrintX;
+ win->py = PrintY;
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// US_RestoreWindow() - Sets the current window parms to those held in the
+// record
+//
+///////////////////////////////////////////////////////////////////////////
+void
+US_RestoreWindow(WindowRec *win)
+{
+ WindowX = win->x;
+ WindowY = win->y;
+ WindowW = win->w;
+ WindowH = win->h;
+
+ PrintX = win->px;
+ PrintY = win->py;
+}
+
+// Input routines
+
+///////////////////////////////////////////////////////////////////////////
+//
+// USL_XORICursor() - XORs the I-bar text cursor. Used by US_LineInput()
+//
+///////////////////////////////////////////////////////////////////////////
+static void
+USL_XORICursor(int x,int y,const char *s,word cursor)
+{
+ static boolean status; // VGA doesn't XOR...
+ char buf[MaxString];
+ int temp;
+ word w,h;
+
+ strcpy(buf,s);
+ buf[cursor] = '\0';
+ USL_MeasureString(buf,&w,&h);
+
+ px = x + w - 1;
+ py = y;
+ if (status^=1)
+ USL_DrawString("\x80");
+ else
+ {
+ temp = fontcolor;
+ fontcolor = backcolor;
+ USL_DrawString("\x80");
+ fontcolor = temp;
+ }
+}
+
+char USL_RotateChar(char ch, int dir)
+{
+ static const char charSet[] = " ABCDEFGHIJKLMNOPQRSTUVWXYZ.,-!?0123456789";
+ const int numChars = sizeof(charSet) / sizeof(char) - 1;
+ int i;
+ for(i = 0; i < numChars; i++)
+ {
+ if(ch == charSet[i]) break;
+ }
+
+ if(i == numChars) i = 0;
+
+ i += dir;
+ if(i < 0) i = numChars - 1;
+ else if(i >= numChars) i = 0;
+ return charSet[i];
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// US_LineInput() - Gets a line of user input at (x,y), the string defaults
+// to whatever is pointed at by def. Input is restricted to maxchars
+// chars or maxwidth pixels wide. If the user hits escape (and escok is
+// true), nothing is copied into buf, and false is returned. If the
+// user hits return, the current string is copied into buf, and true is
+// returned
+//
+///////////////////////////////////////////////////////////////////////////
+boolean
+US_LineInput(int x,int y,char *buf,const char *def,boolean escok,
+ int maxchars,int maxwidth)
+{
+ boolean redraw,
+ cursorvis,cursormoved,
+ done,result, checkkey;
+ ScanCode sc;
+ char c;
+ char s[MaxString],olds[MaxString];
+ int cursor,len;
+ word i,
+ w,h,
+ temp;
+ longword curtime, lasttime, lastdirtime, lastbuttontime, lastdirmovetime;
+ ControlInfo ci;
+ Direction lastdir = dir_None;
+
+ if (def)
+ strcpy(s,def);
+ else
+ *s = '\0';
+ *olds = '\0';
+ cursor = (int) strlen(s);
+ cursormoved = redraw = true;
+
+ cursorvis = done = false;
+ lasttime = lastdirtime = lastdirmovetime = GetTimeCount();
+ lastbuttontime = lasttime + TickBase / 4; // 250 ms => first button press accepted after 500 ms
+ LastASCII = key_None;
+ LastScan = sc_None;
+
+ while (!done)
+ {
+ ReadAnyControl(&ci);
+
+ if (cursorvis)
+ USL_XORICursor(x,y,s,cursor);
+
+ sc = LastScan;
+ LastScan = sc_None;
+ c = LastASCII;
+ LastASCII = key_None;
+
+ checkkey = true;
+ curtime = GetTimeCount();
+
+ // After each direction change accept the next change after 250 ms and then everz 125 ms
+ if(ci.dir != lastdir || curtime - lastdirtime > TickBase / 4 && curtime - lastdirmovetime > TickBase / 8)
+ {
+ if(ci.dir != lastdir)
+ {
+ lastdir = ci.dir;
+ lastdirtime = curtime;
+ }
+ lastdirmovetime = curtime;
+
+ switch(ci.dir)
+ {
+ case dir_West:
+ if(cursor)
+ {
+ // Remove trailing whitespace if cursor is at end of string
+ if(s[cursor] == ' ' && s[cursor + 1] == 0)
+ s[cursor] = 0;
+ cursor--;
+ }
+ cursormoved = true;
+ checkkey = false;
+ break;
+ case dir_East:
+ if(cursor >= MaxString - 1) break;
+
+ if(!s[cursor])
+ {
+ USL_MeasureString(s,&w,&h);
+ if(len >= maxchars || maxwidth && w >= maxwidth) break;
+
+ s[cursor] = ' ';
+ s[cursor + 1] = 0;
+ }
+ cursor++;
+ cursormoved = true;
+ checkkey = false;
+ break;
+
+ case dir_North:
+ if(!s[cursor])
+ {
+ USL_MeasureString(s,&w,&h);
+ if(len >= maxchars || maxwidth && w >= maxwidth) break;
+ s[cursor + 1] = 0;
+ }
+ s[cursor] = USL_RotateChar(s[cursor], 1);
+ redraw = true;
+ checkkey = false;
+ break;
+
+ case dir_South:
+ if(!s[cursor])
+ {
+ USL_MeasureString(s,&w,&h);
+ if(len >= maxchars || maxwidth && w >= maxwidth) break;
+ s[cursor + 1] = 0;
+ }
+ s[cursor] = USL_RotateChar(s[cursor], -1);
+ redraw = true;
+ checkkey = false;
+ break;
+ }
+ }
+
+ if((int)(curtime - lastbuttontime) > TickBase / 4) // 250 ms
+ {
+ if(ci.button0) // acts as return
+ {
+ strcpy(buf,s);
+ done = true;
+ result = true;
+ checkkey = false;
+ }
+ if(ci.button1 && escok) // acts as escape
+ {
+ done = true;
+ result = false;
+ checkkey = false;
+ }
+ if(ci.button2) // acts as backspace
+ {
+ lastbuttontime = curtime;
+ if(cursor)
+ {
+ strcpy(s + cursor - 1,s + cursor);
+ cursor--;
+ redraw = true;
+ }
+ cursormoved = true;
+ checkkey = false;
+ }
+ }
+
+ if(checkkey)
+ {
+ switch (sc)
+ {
+ case sc_LeftArrow:
+ if (cursor)
+ cursor--;
+ c = key_None;
+ cursormoved = true;
+ break;
+ case sc_RightArrow:
+ if (s[cursor])
+ cursor++;
+ c = key_None;
+ cursormoved = true;
+ break;
+ case sc_Home:
+ cursor = 0;
+ c = key_None;
+ cursormoved = true;
+ break;
+ case sc_End:
+ cursor = (int) strlen(s);
+ c = key_None;
+ cursormoved = true;
+ break;
+
+ case sc_Return:
+ strcpy(buf,s);
+ done = true;
+ result = true;
+ c = key_None;
+ break;
+ case sc_Escape:
+ if (escok)
+ {
+ done = true;
+ result = false;
+ }
+ c = key_None;
+ break;
+
+ case sc_BackSpace:
+ if (cursor)
+ {
+ strcpy(s + cursor - 1,s + cursor);
+ cursor--;
+ redraw = true;
+ }
+ c = key_None;
+ cursormoved = true;
+ break;
+ case sc_Delete:
+ if (s[cursor])
+ {
+ strcpy(s + cursor,s + cursor + 1);
+ redraw = true;
+ }
+ c = key_None;
+ cursormoved = true;
+ break;
+
+ case SDLK_KP5: //0x4c: // Keypad 5 // TODO: hmmm...
+ case sc_UpArrow:
+ case sc_DownArrow:
+ case sc_PgUp:
+ case sc_PgDn:
+ case sc_Insert:
+ c = key_None;
+ break;
+ }
+
+ if (c)
+ {
+ len = (int) strlen(s);
+ USL_MeasureString(s,&w,&h);
+
+ if(isprint(c) && (len < MaxString - 1) && ((!maxchars) || (len < maxchars))
+ && ((!maxwidth) || (w < maxwidth)))
+ {
+ for (i = len + 1;i > cursor;i--)
+ s[i] = s[i - 1];
+ s[cursor++] = c;
+ redraw = true;
+ }
+ }
+ }
+
+ if (redraw)
+ {
+ px = x;
+ py = y;
+ temp = fontcolor;
+ fontcolor = backcolor;
+ USL_DrawString(olds);
+ fontcolor = (byte) temp;
+ strcpy(olds,s);
+
+ px = x;
+ py = y;
+ USL_DrawString(s);
+
+ redraw = false;
+ }
+
+ if (cursormoved)
+ {
+ cursorvis = false;
+ lasttime = curtime - TickBase;
+
+ cursormoved = false;
+ }
+ if (curtime - lasttime > TickBase / 2) // 500 ms
+ {
+ lasttime = curtime;
+
+ cursorvis ^= true;
+ }
+ else SDL_Delay(5);
+ if (cursorvis)
+ USL_XORICursor(x,y,s,cursor);
+
+ VW_UpdateScreen();
+ }
+
+ if (cursorvis)
+ USL_XORICursor(x,y,s,cursor);
+ if (!result)
+ {
+ px = x;
+ py = y;
+ USL_DrawString(olds);
+ }
+ VW_UpdateScreen();
+
+ IN_ClearKeysDown();
+ return(result);
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// US_InitRndT - Initializes the pseudo random number generator.
+// If randomize is true, the seed will be initialized depending on the
+// current time
+//
+///////////////////////////////////////////////////////////////////////////
+void US_InitRndT(int randomize)
+{
+ if(randomize)
+ rndindex = (SDL_GetTicks() >> 4) & 0xff;
+ else
+ rndindex = 0;
+}
+
+///////////////////////////////////////////////////////////////////////////
+//
+// US_RndT - Returns the next 8-bit pseudo random number
+//
+///////////////////////////////////////////////////////////////////////////
+int US_RndT()
+{
+ rndindex = (rndindex+1)&0xff;
+ return rndtable[rndindex];
+}
diff --git a/apps/plugins/sdl/progs/wolf3d/id_vh.c b/apps/plugins/sdl/progs/wolf3d/id_vh.c
new file mode 100644
index 0000000000..a63dd065a7
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/id_vh.c
@@ -0,0 +1,435 @@
+#include "wl_def.h"
+
+
+pictabletype *pictable;
+SDL_Surface *latchpics[NUMLATCHPICS];
+
+int px,py;
+byte fontcolor,backcolor;
+int fontnumber;
+
+//==========================================================================
+
+void VWB_DrawPropString(const char* string)
+{
+ fontstruct *font;
+ int width, step, height;
+ byte *source, *dest;
+ byte ch;
+
+ byte *vbuf = LOCK();
+
+ font = (fontstruct *) grsegs[STARTFONT+fontnumber];
+ height = font->height;
+ dest = vbuf + scaleFactor * (py * curPitch + px);
+
+ while ((ch = (byte)*string++)!=0)
+ {
+ width = step = font->width[ch];
+ source = ((byte *)font)+font->location[ch];
+ while (width--)
+ {
+ for(int i=0;i<height;i++)
+ {
+ if(source[i*step])
+ {
+ for(unsigned sy=0; sy<scaleFactor; sy++)
+ for(unsigned sx=0; sx<scaleFactor; sx++)
+ dest[(scaleFactor*i+sy)*curPitch+sx]=fontcolor;
+ }
+ }
+
+ source++;
+ px++;
+ dest+=scaleFactor;
+ }
+ }
+
+ UNLOCK();
+}
+
+/*
+=================
+=
+= VL_MungePic
+=
+=================
+*/
+
+void VL_MungePic (byte *source, unsigned width, unsigned height)
+{
+ unsigned x,y,plane,size,pwidth;
+ byte *temp, *dest, *srcline;
+
+ size = width*height;
+
+ if (width&3)
+ Quit ("VL_MungePic: Not divisable by 4!");
+
+//
+// copy the pic to a temp buffer
+//
+ temp=(byte *) malloc(size);
+ CHECKMALLOCRESULT(temp);
+ memcpy (temp,source,size);
+
+//
+// munge it back into the original buffer
+//
+ dest = source;
+ pwidth = width/4;
+
+ for (plane=0;plane<4;plane++)
+ {
+ srcline = temp;
+ for (y=0;y<height;y++)
+ {
+ for (x=0;x<pwidth;x++)
+ *dest++ = *(srcline+x*4+plane);
+ srcline+=width;
+ }
+ }
+
+ free(temp);
+}
+
+void VWL_MeasureString (const char *string, word *width, word *height, fontstruct *font)
+{
+ *height = font->height;
+ for (*width = 0;*string;string++)
+ *width += font->width[*((byte *)string)]; // proportional width
+}
+
+void VW_MeasurePropString (const char *string, word *width, word *height)
+{
+ VWL_MeasureString(string,width,height,(fontstruct *)grsegs[STARTFONT+fontnumber]);
+}
+
+/*
+=============================================================================
+
+ Double buffer management routines
+
+=============================================================================
+*/
+
+void VH_UpdateScreen()
+{
+ SDL_BlitSurface(screenBuffer, NULL, screen, NULL);
+ SDL_Flip(screen);
+}
+
+
+void VWB_DrawTile8 (int x, int y, int tile)
+{
+ LatchDrawChar(x,y,tile);
+}
+
+void VWB_DrawTile8M (int x, int y, int tile)
+{
+ VL_MemToScreen (((byte *)grsegs[STARTTILE8M])+tile*64,8,8,x,y);
+}
+
+void VWB_DrawPic (int x, int y, int chunknum)
+{
+ int picnum = chunknum - STARTPICS;
+ unsigned width,height;
+
+ x &= ~7;
+
+ width = pictable[picnum].width;
+ height = pictable[picnum].height;
+
+ VL_MemToScreen (grsegs[chunknum],width,height,x,y);
+}
+
+void VWB_DrawPicScaledCoord (int scx, int scy, int chunknum)
+{
+ int picnum = chunknum - STARTPICS;
+ unsigned width,height;
+
+ width = pictable[picnum].width;
+ height = pictable[picnum].height;
+
+ VL_MemToScreenScaledCoord (grsegs[chunknum],width,height,scx,scy);
+}
+
+
+void VWB_Bar (int x, int y, int width, int height, int color)
+{
+ VW_Bar (x,y,width,height,color);
+}
+
+void VWB_Plot (int x, int y, int color)
+{
+ if(scaleFactor == 1)
+ VW_Plot(x,y,color);
+ else
+ VW_Bar(x, y, 1, 1, color);
+}
+
+void VWB_Hlin (int x1, int x2, int y, int color)
+{
+ if(scaleFactor == 1)
+ VW_Hlin(x1,x2,y,color);
+ else
+ VW_Bar(x1, y, x2-x1+1, 1, color);
+}
+
+void VWB_Vlin (int y1, int y2, int x, int color)
+{
+ if(scaleFactor == 1)
+ VW_Vlin(y1,y2,x,color);
+ else
+ VW_Bar(x, y1, 1, y2-y1+1, color);
+}
+
+
+/*
+=============================================================================
+
+ WOLFENSTEIN STUFF
+
+=============================================================================
+*/
+
+/*
+=====================
+=
+= LatchDrawPic
+=
+=====================
+*/
+
+void LatchDrawPic (unsigned x, unsigned y, unsigned picnum)
+{
+ VL_LatchToScreen_ez (latchpics[2+picnum-LATCHPICS_LUMP_START], x*8, y);
+}
+
+void LatchDrawPicScaledCoord (unsigned scx, unsigned scy, unsigned picnum)
+{
+ VL_LatchToScreenScaledCoord_ez (latchpics[2+picnum-LATCHPICS_LUMP_START], scx*8, scy);
+}
+
+
+//==========================================================================
+
+/*
+===================
+=
+= LoadLatchMem
+=
+===================
+*/
+
+void LoadLatchMem (void)
+{
+ int i,width,height,start,end;
+ byte *src;
+ SDL_Surface *surf;
+
+//
+// tile 8s
+//
+ surf = SDL_CreateRGBSurface(SDL_HWSURFACE, 8*8,
+ ((NUMTILE8 + 7) / 8) * 8, 8, 0, 0, 0, 0);
+ if(surf == NULL)
+ {
+ Quit("Unable to create surface for tiles!");
+ }
+ SDL_SetColors(surf, gamepal, 0, 256);
+
+ latchpics[0] = surf;
+ CA_CacheGrChunk (STARTTILE8);
+ src = grsegs[STARTTILE8];
+
+ for (i=0;i<NUMTILE8;i++)
+ {
+ VL_MemToLatch (src, 8, 8, surf, (i & 7) * 8, (i >> 3) * 8);
+ src += 64;
+ }
+ UNCACHEGRCHUNK (STARTTILE8);
+
+//
+// pics
+//
+ start = LATCHPICS_LUMP_START;
+ end = LATCHPICS_LUMP_END;
+
+ for (i=start;i<=end;i++)
+ {
+ width = pictable[i-STARTPICS].width;
+ height = pictable[i-STARTPICS].height;
+ surf = SDL_CreateRGBSurface(SDL_HWSURFACE, width, height, 8, 0, 0, 0, 0);
+ if(surf == NULL)
+ {
+ Quit("Unable to create surface for picture!");
+ }
+ SDL_SetColors(surf, gamepal, 0, 256);
+
+ latchpics[2+i-start] = surf;
+ CA_CacheGrChunk (i);
+ VL_MemToLatch (grsegs[i], width, height, surf, 0, 0);
+ UNCACHEGRCHUNK(i);
+ }
+}
+
+//==========================================================================
+
+/*
+===================
+=
+= FizzleFade
+=
+= returns true if aborted
+=
+= It uses maximum-length Linear Feedback Shift Registers (LFSR) counters.
+= You can find a list of them with lengths from 3 to 168 at:
+= http://www.xilinx.com/support/documentation/application_notes/xapp052.pdf
+= Many thanks to Xilinx for this list!!!
+=
+===================
+*/
+
+// XOR masks for the pseudo-random number sequence starting with n=17 bits
+static const uint32_t rndmasks[] = {
+ // n XNOR from (starting at 1, not 0 as usual)
+ 0x00012000, // 17 17,14
+ 0x00020400, // 18 18,11
+ 0x00040023, // 19 19,6,2,1
+ 0x00090000, // 20 20,17
+ 0x00140000, // 21 21,19
+ 0x00300000, // 22 22,21
+ 0x00420000, // 23 23,18
+ 0x00e10000, // 24 24,23,22,17
+ 0x01200000, // 25 25,22 (this is enough for 8191x4095)
+};
+
+static unsigned int rndbits_y;
+static unsigned int rndmask;
+
+extern SDL_Color curpal[256];
+
+// Returns the number of bits needed to represent the given value
+static int log2_ceil(uint32_t x)
+{
+ int n = 0;
+ uint32_t v = 1;
+ while(v < x)
+ {
+ n++;
+ v <<= 1;
+ }
+ return n;
+}
+
+void VH_Startup()
+{
+ int rndbits_x = log2_ceil(screenWidth);
+ rndbits_y = log2_ceil(screenHeight);
+
+ int rndbits = rndbits_x + rndbits_y;
+ if(rndbits < 17)
+ rndbits = 17; // no problem, just a bit slower
+ else if(rndbits > 25)
+ rndbits = 25; // fizzle fade will not fill whole screen
+
+ rndmask = rndmasks[rndbits - 17];
+}
+
+boolean FizzleFade (SDL_Surface *source, int x1, int y1,
+ unsigned width, unsigned height, unsigned frames, boolean abortable)
+{
+ unsigned x, y, frame, pixperframe;
+ int32_t rndval, lastrndval;
+ int first = 1;
+
+ lastrndval = 0;
+ pixperframe = width * height / frames;
+
+ IN_StartAck ();
+
+ frame = GetTimeCount();
+ byte *srcptr = VL_LockSurface(source);
+ do
+ {
+ if(abortable && IN_CheckAck ())
+ {
+ VL_UnlockSurface(source);
+ SDL_BlitSurface(source, NULL, screen, NULL);
+ SDL_Flip(screen);
+ return true;
+ }
+
+ byte *destptr = VL_LockSurface(screen);
+
+ rndval = lastrndval;
+
+ // When using double buffering, we have to copy the pixels of the last AND the current frame.
+ // Only for the first frame, there is no "last frame"
+ for(int i = first; i < 2; i++)
+ {
+ for(unsigned p = 0; p < pixperframe; p++)
+ {
+ //
+ // seperate random value into x/y pair
+ //
+
+ x = rndval >> rndbits_y;
+ y = rndval & ((1 << rndbits_y) - 1);
+
+ //
+ // advance to next random element
+ //
+
+ rndval = (rndval >> 1) ^ (rndval & 1 ? 0 : rndmask);
+
+ if(x >= width || y >= height)
+ {
+ if(rndval == 0) // entire sequence has been completed
+ goto finished;
+ p--;
+ continue;
+ }
+
+ //
+ // copy one pixel
+ //
+
+ if(screenBits == 8)
+ {
+ *(destptr + (y1 + y) * screen->pitch + x1 + x)
+ = *(srcptr + (y1 + y) * source->pitch + x1 + x);
+ }
+ else
+ {
+ byte col = *(srcptr + (y1 + y) * source->pitch + x1 + x);
+ uint32_t fullcol = SDL_MapRGB(screen->format, curpal[col].r, curpal[col].g, curpal[col].b);
+ memcpy(destptr + (y1 + y) * screen->pitch + (x1 + x) * screen->format->BytesPerPixel,
+ &fullcol, screen->format->BytesPerPixel);
+ }
+
+ if(rndval == 0) // entire sequence has been completed
+ goto finished;
+ }
+
+ if(!i || first) lastrndval = rndval;
+ }
+
+ // If there is no double buffering, we always use the "first frame" case
+ if(usedoublebuffering) first = 0;
+
+ VL_UnlockSurface(screen);
+ SDL_Flip(screen);
+
+ frame++;
+ Delay(frame - GetTimeCount()); // don't go too fast
+ } while (1);
+
+finished:
+ VL_UnlockSurface(source);
+ VL_UnlockSurface(screen);
+ SDL_BlitSurface(source, NULL, screen, NULL);
+ SDL_Flip(screen);
+ return false;
+}
diff --git a/apps/plugins/sdl/progs/wolf3d/id_vh.h b/apps/plugins/sdl/progs/wolf3d/id_vh.h
new file mode 100644
index 0000000000..814e28d49c
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/id_vh.h
@@ -0,0 +1,99 @@
+// ID_VH.H
+
+
+#define WHITE 15 // graphics mode independant colors
+#define BLACK 0
+#define FIRSTCOLOR 1
+#define SECONDCOLOR 12
+#define F_WHITE 15
+#define F_BLACK 0
+#define F_FIRSTCOLOR 1
+#define F_SECONDCOLOR 12
+
+//===========================================================================
+
+#define MAXSHIFTS 1
+
+typedef struct
+{
+ int16_t width,height;
+} pictabletype;
+
+
+typedef struct
+{
+ int16_t height;
+ int16_t location[256];
+ int8_t width[256];
+} fontstruct;
+
+
+//===========================================================================
+
+
+extern pictabletype *pictable;
+extern pictabletype *picmtable;
+
+extern byte fontcolor,backcolor;
+extern int fontnumber;
+extern int px,py;
+
+#define SETFONTCOLOR(f,b) fontcolor=f;backcolor=b;
+
+//
+// mode independant routines
+// coordinates in pixels, rounded to best screen res
+// regions marked in double buffer
+//
+
+void VWB_DrawPropString (const char *string);
+
+void VWB_DrawTile8 (int x, int y, int tile);
+void VWB_DrawTile8M (int x, int y, int tile);
+void VWB_DrawTile16 (int x, int y, int tile);
+void VWB_DrawTile16M (int x, int y, int tile);
+void VWB_DrawPic (int x, int y, int chunknum);
+void VWB_DrawPicScaledCoord (int x, int y, int chunknum);
+void VWB_DrawMPic(int x, int y, int chunknum);
+void VWB_Bar (int x, int y, int width, int height, int color);
+#define VWB_BarScaledCoord VL_BarScaledCoord
+void VWB_Plot (int x, int y, int color);
+#define VWB_PlotScaledCoord VW_Plot
+void VWB_Hlin (int x1, int x2, int y, int color);
+void VWB_Vlin (int y1, int y2, int x, int color);
+#define VWB_HlinScaledCoord VW_Hlin
+#define VWB_VlinScaledCoord VW_Vlin
+
+void VH_UpdateScreen();
+#define VW_UpdateScreen VH_UpdateScreen
+
+//
+// wolfenstein EGA compatability stuff
+//
+
+
+#define VW_Shutdown VL_Shutdown
+#define VW_Bar VL_Bar
+#define VW_Plot VL_Plot
+#define VW_Hlin(x,z,y,c) VL_Hlin(x,y,(z)-(x)+1,c)
+#define VW_Vlin(y,z,x,c) VL_Vlin(x,y,(z)-(y)+1,c)
+#define VW_DrawPic VH_DrawPic
+#define VW_WaitVBL VL_WaitVBL
+#define VW_FadeIn() VL_FadeIn(0,255,gamepal,30);
+#define VW_FadeOut() VL_FadeOut(0,255,0,0,0,30);
+#define VW_ScreenToScreen VL_ScreenToScreen
+void VW_MeasurePropString (const char *string, word *width, word *height);
+
+#define LatchDrawChar(x,y,p) VL_LatchToScreen(latchpics[0],((p)&7)*8,((p)>>3)*8*64,8,8,x,y)
+#define LatchDrawTile(x,y,p) VL_LatchToScreen(latchpics[1],(p)*64,0,16,16,x,y)
+
+void LatchDrawPic (unsigned x, unsigned y, unsigned picnum);
+void LatchDrawPicScaledCoord (unsigned scx, unsigned scy, unsigned picnum);
+void LoadLatchMem (void);
+
+void VH_Startup();
+boolean FizzleFade (SDL_Surface *source, int x1, int y1,
+ unsigned width, unsigned height, unsigned frames, boolean abortable);
+
+#define NUMLATCHPICS 100
+extern SDL_Surface *latchpics[NUMLATCHPICS];
diff --git a/apps/plugins/sdl/progs/wolf3d/id_vl.c b/apps/plugins/sdl/progs/wolf3d/id_vl.c
new file mode 100644
index 0000000000..0152e17218
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/id_vl.c
@@ -0,0 +1,727 @@
+// ID_VL.C
+
+#include <string.h>
+#include "wl_def.h"
+#pragma hdrstop
+
+// Uncomment the following line, if you get destination out of bounds
+// assertion errors and want to ignore them during debugging
+//#define IGNORE_BAD_DEST
+
+#ifdef IGNORE_BAD_DEST
+#undef assert
+#define assert(x) if(!(x)) return
+#define assert_ret(x) if(!(x)) return 0
+#else
+#define assert_ret(x) assert(x)
+#endif
+
+boolean fullscreen = true;
+boolean usedoublebuffering = true;
+unsigned screenWidth = 320; // SDL will scale for us
+unsigned screenHeight = 200;
+unsigned screenBits = LCD_DEPTH; // use "best" color depth according to libSDL
+
+SDL_Surface *screen = NULL;
+unsigned screenPitch;
+
+SDL_Surface *screenBuffer = NULL;
+unsigned bufferPitch;
+
+SDL_Surface *curSurface = NULL;
+unsigned curPitch;
+
+unsigned scaleFactor;
+
+boolean screenfaded;
+unsigned bordercolor;
+
+SDL_Color palette1[256], palette2[256];
+SDL_Color curpal[256];
+
+
+#define CASSERT(x) extern int ASSERT_COMPILE[((x) != 0) * 2 - 1];
+#define RGB(r, g, b) {(r)*255/63, (g)*255/63, (b)*255/63, 0}
+
+SDL_Color gamepal[]={
+#ifdef SPEAR
+ #include "sodpal.inc"
+#else
+ #include "wolfpal.inc"
+#endif
+};
+
+CASSERT(lengthof(gamepal) == 256)
+
+//===========================================================================
+
+
+/*
+=======================
+=
+= VL_Shutdown
+=
+=======================
+*/
+
+void VL_Shutdown (void)
+{
+ //VL_SetTextMode ();
+}
+
+
+/*
+=======================
+=
+= VL_SetVGAPlaneMode
+=
+=======================
+*/
+
+void VL_SetVGAPlaneMode (void)
+{
+#ifdef SPEAR
+ SDL_WM_SetCaption("Spear of Destiny", NULL);
+#else
+ SDL_WM_SetCaption("Wolfenstein 3D", NULL);
+#endif
+
+ if(screenBits == -1)
+ {
+ const SDL_VideoInfo *vidInfo = SDL_GetVideoInfo();
+ screenBits = vidInfo->vfmt->BitsPerPixel;
+ }
+
+ screen = SDL_SetVideoMode(screenWidth, screenHeight, screenBits,
+ (usedoublebuffering ? SDL_HWSURFACE | SDL_DOUBLEBUF : 0)
+ | (screenBits == 8 ? SDL_HWPALETTE : 0)
+ | (fullscreen ? SDL_FULLSCREEN : 0));
+ if(!screen)
+ {
+ printf("Unable to set %ix%ix%i video mode: %s\n", screenWidth,
+ screenHeight, screenBits, SDL_GetError());
+ exit(1);
+ }
+ if((screen->flags & SDL_DOUBLEBUF) != SDL_DOUBLEBUF)
+ usedoublebuffering = false;
+ SDL_ShowCursor(SDL_DISABLE);
+
+ SDL_SetColors(screen, gamepal, 0, 256);
+ memcpy(curpal, gamepal, sizeof(SDL_Color) * 256);
+
+ screenBuffer = SDL_CreateRGBSurface(SDL_SWSURFACE, screenWidth,
+ screenHeight, 8, 0, 0, 0, 0);
+ if(!screenBuffer)
+ {
+ printf("Unable to create screen buffer surface: %s\n", SDL_GetError());
+ exit(1);
+ }
+ SDL_SetColors(screenBuffer, gamepal, 0, 256);
+
+ screenPitch = screen->pitch;
+ bufferPitch = screenBuffer->pitch;
+
+ curSurface = screenBuffer;
+ curPitch = bufferPitch;
+
+ scaleFactor = screenWidth/320;
+ if(screenHeight/200 < scaleFactor) scaleFactor = screenHeight/200;
+
+ pixelangle = (short *) malloc(screenWidth * sizeof(short));
+ CHECKMALLOCRESULT(pixelangle);
+ wallheight = (int *) malloc(screenWidth * sizeof(int));
+ CHECKMALLOCRESULT(wallheight);
+}
+
+/*
+=============================================================================
+
+ PALETTE OPS
+
+ To avoid snow, do a WaitVBL BEFORE calling these
+
+=============================================================================
+*/
+
+/*
+=================
+=
+= VL_ConvertPalette
+=
+=================
+*/
+
+void VL_ConvertPalette(byte *srcpal, SDL_Color *destpal, int numColors)
+{
+ for(int i=0; i<numColors; i++)
+ {
+ destpal[i].r = *srcpal++ * 255 / 63;
+ destpal[i].g = *srcpal++ * 255 / 63;
+ destpal[i].b = *srcpal++ * 255 / 63;
+ }
+}
+
+/*
+=================
+=
+= VL_FillPalette
+=
+=================
+*/
+
+void VL_FillPalette (int red, int green, int blue)
+{
+ int i;
+ SDL_Color pal[256];
+
+ for(i=0; i<256; i++)
+ {
+ pal[i].r = red;
+ pal[i].g = green;
+ pal[i].b = blue;
+ }
+
+ VL_SetPalette(pal, true);
+}
+
+//===========================================================================
+
+/*
+=================
+=
+= VL_SetColor
+=
+=================
+*/
+
+void VL_SetColor (int color, int red, int green, int blue)
+{
+ SDL_Color col = { red, green, blue };
+ curpal[color] = col;
+
+ if(screenBits == 8)
+ SDL_SetPalette(screen, SDL_PHYSPAL, &col, color, 1);
+ else
+ {
+ SDL_SetPalette(curSurface, SDL_LOGPAL, &col, color, 1);
+ SDL_BlitSurface(curSurface, NULL, screen, NULL);
+ SDL_Flip(screen);
+ }
+}
+
+//===========================================================================
+
+/*
+=================
+=
+= VL_GetColor
+=
+=================
+*/
+
+void VL_GetColor (int color, int *red, int *green, int *blue)
+{
+ SDL_Color *col = &curpal[color];
+ *red = col->r;
+ *green = col->g;
+ *blue = col->b;
+}
+
+//===========================================================================
+
+/*
+=================
+=
+= VL_SetPalette
+=
+=================
+*/
+
+void VL_SetPalette (SDL_Color *palette, bool forceupdate)
+{
+ memcpy(curpal, palette, sizeof(SDL_Color) * 256);
+
+ if(screenBits == 8)
+ SDL_SetPalette(screen, SDL_PHYSPAL, palette, 0, 256);
+ else
+ {
+ SDL_SetPalette(curSurface, SDL_LOGPAL, palette, 0, 256);
+ if(forceupdate)
+ {
+ SDL_BlitSurface(curSurface, NULL, screen, NULL);
+ SDL_Flip(screen);
+ }
+ }
+}
+
+
+//===========================================================================
+
+/*
+=================
+=
+= VL_GetPalette
+=
+=================
+*/
+
+void VL_GetPalette (SDL_Color *palette)
+{
+ memcpy(palette, curpal, sizeof(SDL_Color) * 256);
+}
+
+
+//===========================================================================
+
+/*
+=================
+=
+= VL_FadeOut
+=
+= Fades the current palette to the given color in the given number of steps
+=
+=================
+*/
+
+void VL_FadeOut (int start, int end, int red, int green, int blue, int steps)
+{
+ int i,j,orig,delta;
+ SDL_Color *origptr, *newptr;
+
+ red = red * 255 / 63;
+ green = green * 255 / 63;
+ blue = blue * 255 / 63;
+
+ // rockbox
+ steps = steps / 2;
+
+ VL_WaitVBL(1);
+ VL_GetPalette(palette1);
+ memcpy(palette2, palette1, sizeof(SDL_Color) * 256);
+
+//
+// fade through intermediate frames
+//
+ for (i=0;i<steps;i++)
+ {
+ origptr = &palette1[start];
+ newptr = &palette2[start];
+ for (j=start;j<=end;j++)
+ {
+ orig = origptr->r;
+ delta = red-orig;
+ newptr->r = orig + delta * i / steps;
+ orig = origptr->g;
+ delta = green-orig;
+ newptr->g = orig + delta * i / steps;
+ orig = origptr->b;
+ delta = blue-orig;
+ newptr->b = orig + delta * i / steps;
+ origptr++;
+ newptr++;
+ }
+
+ if(!usedoublebuffering || screenBits == 8) VL_WaitVBL(1);
+ VL_SetPalette (palette2, true);
+ rb->yield();
+ }
+
+//
+// final color
+//
+ VL_FillPalette (red,green,blue);
+
+ screenfaded = true;
+}
+
+
+/*
+=================
+=
+= VL_FadeIn
+=
+=================
+*/
+
+void VL_FadeIn (int start, int end, SDL_Color *palette, int steps)
+{
+ int i,j,delta;
+
+ VL_WaitVBL(1);
+ VL_GetPalette(palette1);
+ memcpy(palette2, palette1, sizeof(SDL_Color) * 256);
+
+ steps = steps / 2;
+
+//
+// fade through intermediate frames
+//
+ for (i=0;i<steps;i++)
+ {
+ for (j=start;j<=end;j++)
+ {
+ delta = palette[j].r-palette1[j].r;
+ palette2[j].r = palette1[j].r + delta * i / steps;
+ delta = palette[j].g-palette1[j].g;
+ palette2[j].g = palette1[j].g + delta * i / steps;
+ delta = palette[j].b-palette1[j].b;
+ palette2[j].b = palette1[j].b + delta * i / steps;
+ }
+
+ if(!usedoublebuffering || screenBits == 8) VL_WaitVBL(1);
+ VL_SetPalette(palette2, true);
+ }
+
+//
+// final color
+//
+ VL_SetPalette (palette, true);
+ screenfaded = false;
+}
+
+/*
+=============================================================================
+
+ PIXEL OPS
+
+=============================================================================
+*/
+
+byte *VL_LockSurface(SDL_Surface *surface)
+{
+ if(SDL_MUSTLOCK(surface))
+ {
+ if(SDL_LockSurface(surface) < 0)
+ return NULL;
+ }
+ return (byte *) surface->pixels;
+}
+
+void VL_UnlockSurface(SDL_Surface *surface)
+{
+ if(SDL_MUSTLOCK(surface))
+ {
+ SDL_UnlockSurface(surface);
+ }
+}
+
+/*
+=================
+=
+= VL_Plot
+=
+=================
+*/
+
+void VL_Plot (int x, int y, int color)
+{
+ assert(x >= 0 && (unsigned) x < screenWidth
+ && y >= 0 && (unsigned) y < screenHeight
+ && "VL_Plot: Pixel out of bounds!");
+
+ VL_LockSurface(curSurface);
+ ((byte *) curSurface->pixels)[y * curPitch + x] = color;
+ VL_UnlockSurface(curSurface);
+}
+
+/*
+=================
+=
+= VL_GetPixel
+=
+=================
+*/
+
+byte VL_GetPixel (int x, int y)
+{
+ assert_ret(x >= 0 && (unsigned) x < screenWidth
+ && y >= 0 && (unsigned) y < screenHeight
+ && "VL_GetPixel: Pixel out of bounds!");
+
+ VL_LockSurface(curSurface);
+ byte col = ((byte *) curSurface->pixels)[y * curPitch + x];
+ VL_UnlockSurface(curSurface);
+ return col;
+}
+
+
+/*
+=================
+=
+= VL_Hlin
+=
+=================
+*/
+
+void VL_Hlin (unsigned x, unsigned y, unsigned width, int color)
+{
+ assert(x >= 0 && x + width <= screenWidth
+ && y >= 0 && y < screenHeight
+ && "VL_Hlin: Destination rectangle out of bounds!");
+
+ VL_LockSurface(curSurface);
+ Uint8 *dest = ((byte *) curSurface->pixels) + y * curPitch + x;
+ memset(dest, color, width);
+ VL_UnlockSurface(curSurface);
+}
+
+
+/*
+=================
+=
+= VL_Vlin
+=
+=================
+*/
+
+void VL_Vlin (int x, int y, int height, int color)
+{
+ assert(x >= 0 && (unsigned) x < screenWidth
+ && y >= 0 && (unsigned) y + height <= screenHeight
+ && "VL_Vlin: Destination rectangle out of bounds!");
+
+ VL_LockSurface(curSurface);
+ Uint8 *dest = ((byte *) curSurface->pixels) + y * curPitch + x;
+
+ while (height--)
+ {
+ *dest = color;
+ dest += curPitch;
+ }
+ VL_UnlockSurface(curSurface);
+}
+
+
+/*
+=================
+=
+= VL_Bar
+=
+=================
+*/
+
+void VL_BarScaledCoord (int scx, int scy, int scwidth, int scheight, int color)
+{
+ assert(scx >= 0 && (unsigned) scx + scwidth <= screenWidth
+ && scy >= 0 && (unsigned) scy + scheight <= screenHeight
+ && "VL_BarScaledCoord: Destination rectangle out of bounds!");
+
+ VL_LockSurface(curSurface);
+ Uint8 *dest = ((byte *) curSurface->pixels) + scy * curPitch + scx;
+
+ while (scheight--)
+ {
+ memset(dest, color, scwidth);
+ dest += curPitch;
+ }
+ VL_UnlockSurface(curSurface);
+}
+
+/*
+============================================================================
+
+ MEMORY OPS
+
+============================================================================
+*/
+
+/*
+=================
+=
+= VL_MemToLatch
+=
+=================
+*/
+
+void VL_MemToLatch(byte *source, int width, int height,
+ SDL_Surface *destSurface, int x, int y)
+{
+ assert(x >= 0 && (unsigned) x + width <= screenWidth
+ && y >= 0 && (unsigned) y + height <= screenHeight
+ && "VL_MemToLatch: Destination rectangle out of bounds!");
+
+ VL_LockSurface(destSurface);
+ int pitch = destSurface->pitch;
+ byte *dest = (byte *) destSurface->pixels + y * pitch + x;
+ for(int ysrc = 0; ysrc < height; ysrc++)
+ {
+ for(int xsrc = 0; xsrc < width; xsrc++)
+ {
+ dest[ysrc * pitch + xsrc] = source[(ysrc * (width >> 2) + (xsrc >> 2))
+ + (xsrc & 3) * (width >> 2) * height];
+ }
+ }
+ VL_UnlockSurface(destSurface);
+}
+
+//===========================================================================
+
+
+/*
+=================
+=
+= VL_MemToScreenScaledCoord
+=
+= Draws a block of data to the screen with scaling according to scaleFactor.
+=
+=================
+*/
+
+void VL_MemToScreenScaledCoord (byte *source, int width, int height, int destx, int desty)
+{
+ assert(destx >= 0 && destx + width * scaleFactor <= screenWidth
+ && desty >= 0 && desty + height * scaleFactor <= screenHeight
+ && "VL_MemToScreenScaledCoord: Destination rectangle out of bounds!");
+
+ VL_LockSurface(curSurface);
+ byte *vbuf = (byte *) curSurface->pixels;
+ for(int j=0,scj=0; j<height; j++, scj+=scaleFactor)
+ {
+ for(int i=0,sci=0; i<width; i++, sci+=scaleFactor)
+ {
+ byte col = source[(j*(width>>2)+(i>>2))+(i&3)*(width>>2)*height];
+ for(unsigned m=0; m<scaleFactor; m++)
+ {
+ for(unsigned n=0; n<scaleFactor; n++)
+ {
+ vbuf[(scj+m+desty)*curPitch+sci+n+destx] = col;
+ }
+ }
+ }
+ }
+ VL_UnlockSurface(curSurface);
+}
+
+/*
+=================
+=
+= VL_MemToScreenScaledCoord
+=
+= Draws a part of a block of data to the screen.
+= The block has the size origwidth*origheight.
+= The part at (srcx, srcy) has the size width*height
+= and will be painted to (destx, desty) with scaling according to scaleFactor.
+=
+=================
+*/
+
+void VL_MemToScreenScaledCoord_ex (byte *source, int origwidth, int origheight, int srcx, int srcy,
+ int destx, int desty, int width, int height)
+{
+ assert(destx >= 0 && destx + width * scaleFactor <= screenWidth
+ && desty >= 0 && desty + height * scaleFactor <= screenHeight
+ && "VL_MemToScreenScaledCoord: Destination rectangle out of bounds!");
+
+ VL_LockSurface(curSurface);
+ byte *vbuf = (byte *) curSurface->pixels;
+ for(int j=0,scj=0; j<height; j++, scj+=scaleFactor)
+ {
+ for(int i=0,sci=0; i<width; i++, sci+=scaleFactor)
+ {
+ byte col = source[((j+srcy)*(origwidth>>2)+((i+srcx)>>2))+((i+srcx)&3)*(origwidth>>2)*origheight];
+ for(unsigned m=0; m<scaleFactor; m++)
+ {
+ for(unsigned n=0; n<scaleFactor; n++)
+ {
+ vbuf[(scj+m+desty)*curPitch+sci+n+destx] = col;
+ }
+ }
+ }
+ }
+ VL_UnlockSurface(curSurface);
+}
+
+//==========================================================================
+
+/*
+=================
+=
+= VL_LatchToScreen
+=
+=================
+*/
+
+void VL_LatchToScreenScaledCoord(SDL_Surface *source, int xsrc, int ysrc,
+ int width, int height, int scxdest, int scydest)
+{
+ assert(scxdest >= 0 && scxdest + width * scaleFactor <= screenWidth
+ && scydest >= 0 && scydest + height * scaleFactor <= screenHeight
+ && "VL_LatchToScreenScaledCoord: Destination rectangle out of bounds!");
+
+ if(scaleFactor == 1)
+ {
+ // HACK: If screenBits is not 8 and the screen is faded out, the
+ // result will be black when using SDL_BlitSurface. The reason
+ // is that the logical palette needed for the transformation
+ // to the screen color depth is not equal to the logical
+ // palette of the latch (the latch is not faded). Therefore,
+ // SDL tries to map the colors...
+ // The result: All colors are mapped to black.
+ // So, we do the blit on our own...
+ if(screenBits != 8)
+ {
+ VL_LockSurface(source);
+ byte *src = (byte *) source->pixels;
+ unsigned srcPitch = source->pitch;
+
+ VL_LockSurface(curSurface);
+ byte *vbuf = (byte *) curSurface->pixels;
+ for(int j=0,scj=0; j<height; j++, scj++)
+ {
+ for(int i=0,sci=0; i<width; i++, sci++)
+ {
+ byte col = src[(ysrc + j)*srcPitch + xsrc + i];
+ vbuf[(scydest+scj)*curPitch+scxdest+sci] = col;
+ }
+ }
+ VL_UnlockSurface(curSurface);
+ VL_UnlockSurface(source);
+ }
+ else
+ {
+ SDL_Rect srcrect = { xsrc, ysrc, width, height };
+ SDL_Rect destrect = { scxdest, scydest, 0, 0 }; // width and height are ignored
+ SDL_BlitSurface(source, &srcrect, curSurface, &destrect);
+ }
+ }
+ else
+ {
+ VL_LockSurface(source);
+ byte *src = (byte *) source->pixels;
+ unsigned srcPitch = source->pitch;
+
+ VL_LockSurface(curSurface);
+ byte *vbuf = (byte *) curSurface->pixels;
+ for(int j=0,scj=0; j<height; j++, scj+=scaleFactor)
+ {
+ for(int i=0,sci=0; i<width; i++, sci+=scaleFactor)
+ {
+ byte col = src[(ysrc + j)*srcPitch + xsrc + i];
+ for(unsigned m=0; m<scaleFactor; m++)
+ {
+ for(unsigned n=0; n<scaleFactor; n++)
+ {
+ vbuf[(scydest+scj+m)*curPitch+scxdest+sci+n] = col;
+ }
+ }
+ }
+ }
+ VL_UnlockSurface(curSurface);
+ VL_UnlockSurface(source);
+ }
+}
+
+//===========================================================================
+
+/*
+=================
+=
+= VL_ScreenToScreen
+=
+=================
+*/
+
+void VL_ScreenToScreen (SDL_Surface *source, SDL_Surface *dest)
+{
+ SDL_BlitSurface(source, NULL, dest, NULL);
+}
diff --git a/apps/plugins/sdl/progs/wolf3d/id_vl.h b/apps/plugins/sdl/progs/wolf3d/id_vl.h
new file mode 100644
index 0000000000..d4a15f4d46
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/id_vl.h
@@ -0,0 +1,101 @@
+// ID_VL.H
+
+// wolf compatability
+
+void Quit (const char *error,...);
+
+//===========================================================================
+
+#define CHARWIDTH 2
+#define TILEWIDTH 4
+
+//===========================================================================
+
+extern SDL_Surface *screen, *screenBuffer, *curSurface;
+
+extern boolean fullscreen, usedoublebuffering;
+extern unsigned screenWidth, screenHeight, screenBits, screenPitch, bufferPitch, curPitch;
+extern unsigned scaleFactor;
+
+extern boolean screenfaded;
+extern unsigned bordercolor;
+
+extern SDL_Color gamepal[256];
+
+//===========================================================================
+
+//
+// VGA hardware routines
+//
+
+#define VL_WaitVBL(a) SDL_Delay((a)*8)
+
+void VL_SetVGAPlaneMode (void);
+void VL_SetTextMode (void);
+void VL_Shutdown (void);
+
+void VL_ConvertPalette(byte *srcpal, SDL_Color *destpal, int numColors);
+void VL_FillPalette (int red, int green, int blue);
+void VL_SetColor (int color, int red, int green, int blue);
+void VL_GetColor (int color, int *red, int *green, int *blue);
+void VL_SetPalette (SDL_Color *palette, bool forceupdate);
+void VL_GetPalette (SDL_Color *palette);
+void VL_FadeOut (int start, int end, int red, int green, int blue, int steps);
+void VL_FadeIn (int start, int end, SDL_Color *palette, int steps);
+
+byte *VL_LockSurface(SDL_Surface *surface);
+void VL_UnlockSurface(SDL_Surface *surface);
+
+#define LOCK() VL_LockSurface(curSurface)
+#define UNLOCK() VL_UnlockSurface(curSurface)
+
+byte VL_GetPixel (int x, int y);
+void VL_Plot (int x, int y, int color);
+void VL_Hlin (unsigned x, unsigned y, unsigned width, int color);
+void VL_Vlin (int x, int y, int height, int color);
+void VL_BarScaledCoord (int scx, int scy, int scwidth, int scheight, int color);
+inline void VL_Bar (int x, int y, int width, int height, int color)
+{
+ VL_BarScaledCoord(scaleFactor*x, scaleFactor*y,
+ scaleFactor*width, scaleFactor*height, color);
+}
+inline void VL_ClearScreen(int color)
+{
+ SDL_FillRect(curSurface, NULL, color);
+}
+
+void VL_MungePic (byte *source, unsigned width, unsigned height);
+void VL_DrawPicBare (int x, int y, byte *pic, int width, int height);
+void VL_MemToLatch (byte *source, int width, int height,
+ SDL_Surface *destSurface, int x, int y);
+void VL_ScreenToScreen (SDL_Surface *source, SDL_Surface *dest);
+void VL_MemToScreenScaledCoord (byte *source, int width, int height, int scx, int scy);
+void VL_MemToScreenScaledCoord_ex (byte *source, int origwidth, int origheight, int srcx, int srcy,
+ int destx, int desty, int width, int height);
+
+inline void VL_MemToScreen (byte *source, int width, int height, int x, int y)
+{
+ VL_MemToScreenScaledCoord(source, width, height,
+ scaleFactor*x, scaleFactor*y);
+}
+
+void VL_MaskedToScreen (byte *source, int width, int height, int x, int y);
+
+void VL_LatchToScreenScaledCoord (SDL_Surface *source, int xsrc, int ysrc,
+ int width, int height, int scxdest, int scydest);
+
+inline void VL_LatchToScreen (SDL_Surface *source, int xsrc, int ysrc,
+ int width, int height, int xdest, int ydest)
+{
+ VL_LatchToScreenScaledCoord(source,xsrc,ysrc,width,height,
+ scaleFactor*xdest,scaleFactor*ydest);
+}
+inline void VL_LatchToScreenScaledCoord_ez (SDL_Surface *source, int scx, int scy)
+{
+ VL_LatchToScreenScaledCoord(source,0,0,source->w,source->h,scx,scy);
+}
+inline void VL_LatchToScreen_ez (SDL_Surface *source, int x, int y)
+{
+ VL_LatchToScreenScaledCoord(source,0,0,source->w,source->h,
+ scaleFactor*x,scaleFactor*y);
+}
diff --git a/apps/plugins/sdl/progs/wolf3d/sdl_winmain.c b/apps/plugins/sdl/progs/wolf3d/sdl_winmain.c
new file mode 100644
index 0000000000..366616d5ff
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/sdl_winmain.c
@@ -0,0 +1,378 @@
+#ifdef _WIN32
+
+/*
+ SDL_main.c, placed in the public domain by Sam Lantinga 4/13/98
+
+ Modified to write stdout/stderr to a message box at shutdown by Ripper 2007-12-27
+
+ The WinMain function -- calls your program's main() function
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+
+#ifdef _WIN32_WCE
+# define DIR_SEPERATOR TEXT("\\")
+# undef _getcwd
+# define _getcwd(str,len) wcscpy(str,TEXT(""))
+# define setbuf(f,b)
+# define setvbuf(w,x,y,z)
+# define fopen _wfopen
+# define freopen _wfreopen
+# define remove(x) DeleteFile(x)
+#else
+# define DIR_SEPERATOR TEXT("/")
+# include <direct.h>
+#endif
+
+/* Include the SDL main definition header */
+#include "SDL.h"
+#include "SDL_main.h"
+
+#ifdef main
+# ifndef _WIN32_WCE_EMULATION
+# undef main
+# endif /* _WIN32_WCE_EMULATION */
+#endif /* main */
+
+/* The standard output files */
+#define STDOUT_FILE TEXT("stdout.txt")
+#define STDERR_FILE TEXT("stderr.txt")
+
+#ifndef NO_STDIO_REDIRECT
+# ifdef _WIN32_WCE
+ static wchar_t stdoutPath[MAX_PATH];
+ static wchar_t stderrPath[MAX_PATH];
+# else
+ static char stdoutPath[MAX_PATH];
+ static char stderrPath[MAX_PATH];
+# endif
+#endif
+
+#if defined(_WIN32_WCE) && _WIN32_WCE < 300
+/* seems to be undefined in Win CE although in online help */
+#define isspace(a) (((CHAR)a == ' ') || ((CHAR)a == '\t'))
+#endif /* _WIN32_WCE < 300 */
+
+/* Parse a command line buffer into arguments */
+static int ParseCommandLine(char *cmdline, char **argv)
+{
+ char *bufp;
+ int argc;
+
+ argc = 0;
+ for ( bufp = cmdline; *bufp; ) {
+ /* Skip leading whitespace */
+ while ( isspace(*bufp) ) {
+ ++bufp;
+ }
+ /* Skip over argument */
+ if ( *bufp == '"' ) {
+ ++bufp;
+ if ( *bufp ) {
+ if ( argv ) {
+ argv[argc] = bufp;
+ }
+ ++argc;
+ }
+ /* Skip over word */
+ while ( *bufp && (*bufp != '"') ) {
+ ++bufp;
+ }
+ } else {
+ if ( *bufp ) {
+ if ( argv ) {
+ argv[argc] = bufp;
+ }
+ ++argc;
+ }
+ /* Skip over word */
+ while ( *bufp && ! isspace(*bufp) ) {
+ ++bufp;
+ }
+ }
+ if ( *bufp ) {
+ if ( argv ) {
+ *bufp = '\0';
+ }
+ ++bufp;
+ }
+ }
+ if ( argv ) {
+ argv[argc] = NULL;
+ }
+ return(argc);
+}
+
+/* Show an error message */
+static void ShowError(const char *title, const char *message)
+{
+/* If USE_MESSAGEBOX is defined, you need to link with user32.lib */
+#ifdef USE_MESSAGEBOX
+ MessageBox(NULL, message, title, MB_ICONEXCLAMATION|MB_OK);
+#else
+ fprintf(stderr, "%s: %s\n", title, message);
+#endif
+}
+
+/* Pop up an out of memory message, returns to Windows */
+static bool OutOfMemory(void)
+{
+ ShowError("Fatal Error", "Out of memory - aborting");
+ return FALSE;
+}
+
+/* SDL_Quit() shouldn't be used with atexit() directly because
+ calling conventions may differ... */
+static void cleanup(void)
+{
+ SDL_Quit();
+}
+
+/* Remove the output files if there was no output written */
+static void cleanup_output(void)
+{
+#if 1
+#ifndef NO_STDIO_REDIRECT
+ FILE *file;
+#endif
+#endif
+
+ /* Flush the output in case anything is queued */
+ fclose(stdout);
+ fclose(stderr);
+
+#if 1
+#ifndef NO_STDIO_REDIRECT
+ /* See if the files have any output in them */
+ if ( stdoutPath[0] ) {
+ file = fopen(stdoutPath, TEXT("r"));
+ if ( file ) {
+ char buf[16384];
+ size_t readbytes = fread(buf, 1, 16383, file);
+ fclose(file);
+
+ if(readbytes != 0)
+ {
+ buf[readbytes] = 0; // cut after last byte (<=16383)
+ MessageBox(NULL, buf, "Wolf4SDL", MB_OK);
+ }
+ else
+ remove(stdoutPath); // remove empty file
+ }
+ }
+ if ( stderrPath[0] ) {
+ file = fopen(stderrPath, TEXT("rb"));
+ if ( file ) {
+ char buf[16384];
+ size_t readbytes = fread(buf, 1, 16383, file);
+ fclose(file);
+
+ if(readbytes != 0)
+ {
+ buf[readbytes] = 0; // cut after last byte (<=16383)
+ MessageBox(NULL, buf, "Wolf4SDL", MB_OK);
+ }
+ else
+ remove(stderrPath); // remove empty file
+ }
+ }
+#endif
+#endif
+}
+
+//#if defined(_MSC_VER) && !defined(_WIN32_WCE)
+///* The VC++ compiler needs main defined */
+//#define console_main main
+//#endif
+
+/* This is where execution begins [console apps] */
+int console_main(int argc, char *argv[])
+{
+ size_t n;
+ char *bufp, *appname;
+ int status;
+
+ /* Get the class name from argv[0] */
+ appname = argv[0];
+ if ( (bufp=SDL_strrchr(argv[0], '\\')) != NULL ) {
+ appname = bufp+1;
+ } else
+ if ( (bufp=SDL_strrchr(argv[0], '/')) != NULL ) {
+ appname = bufp+1;
+ }
+
+ if ( (bufp=SDL_strrchr(appname, '.')) == NULL )
+ n = SDL_strlen(appname);
+ else
+ n = (bufp-appname);
+
+ bufp = SDL_stack_alloc(char, n+1);
+ if ( bufp == NULL ) {
+ return OutOfMemory();
+ }
+ SDL_strlcpy(bufp, appname, n+1);
+ appname = bufp;
+
+ /* Load SDL dynamic link library */
+ if ( SDL_Init(SDL_INIT_NOPARACHUTE) < 0 ) {
+ ShowError("WinMain() error", SDL_GetError());
+ return(FALSE);
+ }
+ atexit(cleanup_output);
+ atexit(cleanup);
+
+ /* Sam:
+ We still need to pass in the application handle so that
+ DirectInput will initialize properly when SDL_RegisterApp()
+ is called later in the video initialization.
+ */
+ SDL_SetModuleHandle(GetModuleHandle(NULL));
+
+ /* Run the application main() code */
+ status = SDL_main(argc, argv);
+
+ /* Exit cleanly, calling atexit() functions */
+ exit(status);
+
+ /* Hush little compiler, don't you cry... */
+ return 0;
+}
+
+/* This is where execution begins [windowed apps] */
+#ifdef _WIN32_WCE
+int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPWSTR szCmdLine, int sw)
+#else
+int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int sw)
+#endif
+{
+ HINSTANCE handle;
+ char **argv;
+ int argc;
+ char *cmdline;
+#ifdef _WIN32_WCE
+ wchar_t *bufp;
+ int nLen;
+#else
+ char *bufp;
+ size_t nLen;
+#endif
+#ifndef NO_STDIO_REDIRECT
+ DWORD pathlen;
+#ifdef _WIN32_WCE
+ wchar_t path[MAX_PATH];
+#else
+ char path[MAX_PATH];
+#endif
+ FILE *newfp;
+#endif
+
+ /* Start up DDHELP.EXE before opening any files, so DDHELP doesn't
+ keep them open. This is a hack.. hopefully it will be fixed
+ someday. DDHELP.EXE starts up the first time DDRAW.DLL is loaded.
+ */
+ handle = LoadLibrary(TEXT("DDRAW.DLL"));
+ if ( handle != NULL ) {
+ FreeLibrary(handle);
+ }
+
+#ifndef NO_STDIO_REDIRECT
+ pathlen = GetModuleFileName(NULL, path, SDL_arraysize(path));
+ while ( pathlen > 0 && path[pathlen] != '\\' ) {
+ --pathlen;
+ }
+ path[pathlen] = '\0';
+
+#ifdef _WIN32_WCE
+ wcsncpy( stdoutPath, path, SDL_arraysize(stdoutPath) );
+ wcsncat( stdoutPath, DIR_SEPERATOR STDOUT_FILE, SDL_arraysize(stdoutPath) );
+#else
+ SDL_strlcpy( stdoutPath, path, SDL_arraysize(stdoutPath) );
+ SDL_strlcat( stdoutPath, DIR_SEPERATOR STDOUT_FILE, SDL_arraysize(stdoutPath) );
+#endif
+
+ /* Redirect standard input and standard output */
+ newfp = freopen(stdoutPath, TEXT("w"), stdout);
+
+#ifndef _WIN32_WCE
+ if ( newfp == NULL ) { /* This happens on NT */
+#if !defined(stdout)
+ stdout = fopen(stdoutPath, TEXT("w"));
+#else
+ newfp = fopen(stdoutPath, TEXT("w"));
+ if ( newfp ) {
+ *stdout = *newfp;
+ }
+#endif
+ }
+#endif /* _WIN32_WCE */
+
+#ifdef _WIN32_WCE
+ wcsncpy( stderrPath, path, SDL_arraysize(stdoutPath) );
+ wcsncat( stderrPath, DIR_SEPERATOR STDOUT_FILE, SDL_arraysize(stdoutPath) );
+#else
+ SDL_strlcpy( stderrPath, path, SDL_arraysize(stderrPath) );
+ SDL_strlcat( stderrPath, DIR_SEPERATOR STDERR_FILE, SDL_arraysize(stderrPath) );
+#endif
+
+ newfp = freopen(stderrPath, TEXT("w"), stderr);
+#ifndef _WIN32_WCE
+ if ( newfp == NULL ) { /* This happens on NT */
+#if !defined(stderr)
+ stderr = fopen(stderrPath, TEXT("w"));
+#else
+ newfp = fopen(stderrPath, TEXT("w"));
+ if ( newfp ) {
+ *stderr = *newfp;
+ }
+#endif
+ }
+#endif /* _WIN32_WCE */
+
+ setvbuf(stdout, NULL, _IOLBF, BUFSIZ); /* Line buffered */
+ setbuf(stderr, NULL); /* No buffering */
+#endif /* !NO_STDIO_REDIRECT */
+
+#ifdef _WIN32_WCE
+ nLen = wcslen(szCmdLine)+128+1;
+ bufp = SDL_stack_alloc(wchar_t, nLen*2);
+ wcscpy (bufp, TEXT("\""));
+ GetModuleFileName(NULL, bufp+1, 128-3);
+ wcscpy (bufp+wcslen(bufp), TEXT("\" "));
+ wcsncpy(bufp+wcslen(bufp), szCmdLine,nLen-wcslen(bufp));
+ nLen = wcslen(bufp)+1;
+ cmdline = SDL_stack_alloc(char, nLen);
+ if ( cmdline == NULL ) {
+ return OutOfMemory();
+ }
+ WideCharToMultiByte(CP_ACP, 0, bufp, -1, cmdline, nLen, NULL, NULL);
+#else
+ /* Grab the command line */
+ bufp = GetCommandLine();
+ nLen = SDL_strlen(bufp)+1;
+ cmdline = SDL_stack_alloc(char, nLen);
+ if ( cmdline == NULL ) {
+ return OutOfMemory();
+ }
+ SDL_strlcpy(cmdline, bufp, nLen);
+#endif
+
+ /* Parse it into argv and argc */
+ argc = ParseCommandLine(cmdline, NULL);
+ argv = SDL_stack_alloc(char*, argc+1);
+ if ( argv == NULL ) {
+ return OutOfMemory();
+ }
+ ParseCommandLine(cmdline, argv);
+
+ /* Run the main program (after a little SDL initialization) */
+ console_main(argc, argv);
+
+ /* Hush little compiler, don't you cry... */
+ return 0;
+}
+
+#endif // _WIN32
diff --git a/apps/plugins/sdl/progs/wolf3d/signon.c b/apps/plugins/sdl/progs/wolf3d/signon.c
new file mode 100644
index 0000000000..160173594e
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/signon.c
@@ -0,0 +1,8007 @@
+#include "wl_def.h"
+
+#ifndef SPEAR
+byte signon[] = {
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x04,0x22,0x24,0x21,0x22,0x23,0x21,0x22,0x04,0x25,0x25,0x22,0x22,0x24,0x22,0x22,
+ 0x26,0x22,0x25,0x22,0x21,0x25,0x23,0x21,0x22,0x22,0x22,0x21,0x25,0x22,0x25,0x24,
+ 0x25,0x22,0x21,0x22,0x22,0x21,0x24,0x23,0x04,0x28,0x29,0x28,0x29,0x23,0x26,0x25,
+ 0x26,0x22,0x04,0x23,0x23,0x26,0x24,0x23,0x25,0x25,0x23,0x23,0x04,0x23,0x25,0x04,
+ 0x28,0x25,0x23,0x24,0x22,0x25,0x28,0x28,0x28,0x23,0x23,0x04,0x23,0x22,0x23,0x25,
+ 0x23,0x25,0x25,0x04,0x22,0x22,0x21,0x23,0x23,0x25,0x25,0x22,0x23,0x25,0x26,0x23,
+ 0x29,0x29,0x22,0x24,0x23,0x22,0x04,0x25,0x22,0x04,0x23,0x23,0x22,0x23,0x25,0x24,
+ 0x23,0x23,0x23,0x25,0x24,0x28,0x23,0x22,0x23,0x23,0x22,0x24,0x25,0x22,0x04,0x22,
+ 0x22,0x24,0x04,0x24,0x24,0x24,0x24,0x25,0x24,0x28,0x2A,0x23,0x22,0x26,0x22,0x26,
+ 0x25,0x22,0x22,0x26,0x28,0x26,0x28,0x28,0x24,0x24,0x25,0x22,0x24,0x25,0x22,0x25,
+ 0x25,0x25,0x26,0x22,0x25,0x24,0x24,0x24,0x25,0x24,0x25,0x22,0x04,0x24,0x25,0x25,
+ 0x26,0x24,0x22,0x26,0x26,0x24,0x24,0x23,0x04,0x22,0x25,0x28,0x24,0x26,0x22,0x26,
+ 0x25,0x26,0x2A,0x28,0x23,0x25,0x25,0x25,0x23,0x28,0x25,0x25,0x04,0x25,0x24,0x23,
+ 0x25,0x23,0x28,0x26,0x25,0x20,0x20,0x25,0x20,0x22,0x22,0x25,0x22,0x28,0x25,0x25,
+ 0x28,0x04,0x28,0x25,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x28,0x28,0x25,0x25,0x26,
+ 0x23,0x04,0x25,0x04,0x24,0x25,0x28,0x28,0x23,0x26,0x25,0x26,0x25,0x26,0x25,0x28,
+ 0x28,0x24,0x26,0x28,0x20,0x20,0x26,0x20,0x23,0x04,0x26,0x25,0x24,0x26,0x28,0x28,
+ 0x28,0x24,0x28,0x28,0x25,0x25,0x26,0x26,0x04,0x25,0x26,0x26,0x04,0x26,0x22,0x25,
+ 0x25,0x22,0x28,0x24,0x28,0x25,0x26,0x26,0x26,0x25,0x25,0x28,0x28,0x26,0x28,0x28,
+ 0x28,0x26,0x28,0x24,0x28,0x04,0x28,0x26,0x25,0x26,0x26,0x26,0x25,0x28,0x26,0x29,
+ 0x25,0x22,0x25,0x23,0x25,0x25,0x22,0x22,0x04,0x22,0x23,0x25,0x25,0x23,0x22,0x22,
+ 0x22,0x22,0x21,0x04,0x24,0x04,0x24,0x23,0x25,0x22,0x22,0x21,0x23,0x23,0x04,0x23,
+ 0x24,0x23,0x25,0x25,0x25,0x22,0x04,0x25,0x23,0x25,0x25,0x25,0x25,0x25,0x24,0x25,
+ 0x24,0x23,0x25,0x24,0x22,0x25,0x25,0x24,0x22,0x23,0x23,0x23,0x25,0x26,0x25,0x25,
+ 0x24,0x24,0x25,0x24,0x24,0x21,0x25,0x26,0x04,0x22,0x25,0x25,0x23,0x22,0x25,0x26,
+ 0x04,0x23,0x23,0x23,0x26,0x22,0x25,0x25,0x26,0x24,0x25,0x26,0x24,0x04,0x04,0x22,
+ 0x25,0x24,0x04,0x25,0x28,0x25,0x26,0x26,0x04,0x28,0x23,0x25,0x22,0x22,0x26,0x23,
+ 0x25,0x04,0x04,0x22,0x25,0x22,0x25,0x23,0x22,0x23,0x24,0x22,0x24,0x23,0x04,0x04,
+ 0x28,0x28,0x21,0x24,0x25,0x24,0x28,0x23,0x28,0x28,0x25,0x25,0x23,0x23,0x24,0x25,
+ 0x24,0x22,0x25,0x04,0x28,0x04,0x04,0x26,0x26,0x26,0x26,0x26,0x25,0x28,0x24,0x25,
+ 0x28,0x24,0x25,0x04,0x24,0x25,0x24,0x24,0x24,0x24,0x24,0x04,0x24,0x22,0x24,0x23,
+ 0x25,0x25,0x25,0x04,0x26,0x25,0x25,0x26,0x26,0x25,0x26,0x25,0x25,0x26,0x26,0x26,
+ 0x04,0x28,0x28,0x26,0x25,0x28,0x28,0x28,0x28,0x28,0x24,0x25,0x23,0x26,0x25,0x25,
+ 0x26,0x23,0x20,0x20,0x20,0x22,0x20,0x20,0x20,0x26,0x23,0x28,0x26,0x25,0x28,0x28,
+ 0x26,0x26,0x28,0x04,0x28,0x28,0x26,0x26,0x24,0x26,0x25,0x28,0x27,0x04,0x24,0x26,
+ 0x28,0x04,0x26,0x26,0x22,0x28,0x25,0x28,0x25,0x25,0x26,0x04,0x24,0x26,0x26,0x23,
+ 0x26,0x23,0x26,0x25,0x24,0x25,0x22,0x25,0x26,0x25,0x24,0x25,0x22,0x25,0x26,0x25,
+ 0x04,0x26,0x26,0x04,0x25,0x28,0x24,0x28,0x25,0x26,0x24,0x25,0x04,0x24,0x26,0x26,
+ 0x28,0x25,0x23,0x26,0x28,0x28,0x25,0x04,0x28,0x23,0x26,0x28,0x04,0x24,0x25,0x26,
+ 0x26,0x25,0x28,0x28,0x28,0x25,0x24,0x25,0x28,0x26,0x26,0x04,0x24,0x26,0x25,0x29,
+ 0x22,0x22,0x25,0x26,0x25,0x22,0x26,0x21,0x25,0x25,0x22,0x22,0x23,0x25,0x24,0x24,
+ 0x21,0x23,0x22,0x24,0x21,0x22,0x26,0x22,0x22,0x22,0x24,0x24,0x22,0x04,0x28,0x25,
+ 0x25,0x23,0x28,0x04,0x23,0x25,0x25,0x25,0x25,0x23,0x23,0x22,0x22,0x04,0x25,0x25,
+ 0x25,0x22,0x22,0x23,0x23,0x23,0x22,0x24,0x24,0x25,0x25,0x25,0x23,0x24,0x25,0x23,
+ 0x22,0x23,0x24,0x24,0x23,0x22,0x25,0x24,0x26,0x25,0x25,0x28,0x26,0x25,0x25,0x22,
+ 0x26,0x25,0x25,0x26,0x25,0x25,0x04,0x25,0x04,0x26,0x29,0x29,0x29,0x28,0x04,0x28,
+ 0x25,0x26,0x26,0x28,0x25,0x23,0x26,0x04,0x28,0x28,0x28,0x28,0x25,0x25,0x23,0x23,
+ 0x25,0x25,0x26,0x25,0x23,0x24,0x25,0x04,0x25,0x26,0x26,0x04,0x04,0x25,0x25,0x25,
+ 0x27,0x28,0x22,0x24,0x04,0x28,0x04,0x26,0x26,0x28,0x23,0x22,0x23,0x24,0x28,0x25,
+ 0x24,0x24,0x25,0x28,0x24,0x28,0x24,0x22,0x26,0x28,0x28,0x04,0x26,0x22,0x24,0x25,
+ 0x25,0x25,0x28,0x25,0x26,0x25,0x26,0x26,0x25,0x24,0x26,0x22,0x25,0x26,0x26,0x26,
+ 0x25,0x04,0x25,0x25,0x22,0x24,0x25,0x04,0x26,0x24,0x28,0x26,0x25,0x25,0x28,0x04,
+ 0x28,0x26,0x29,0x28,0x29,0x28,0x27,0x25,0x26,0x25,0x22,0x22,0x04,0x24,0x26,0x23,
+ 0x20,0x20,0x20,0x22,0x20,0x20,0x22,0x25,0x25,0x26,0x28,0x25,0x25,0x28,0x24,0x25,
+ 0x04,0x28,0x28,0x04,0x26,0x04,0x28,0x25,0x04,0x04,0x04,0x25,0x28,0x25,0x24,0x04,
+ 0x26,0x26,0x26,0x26,0x28,0x28,0x28,0x25,0x28,0x25,0x25,0x26,0x26,0x04,0x26,0x25,
+ 0x23,0x25,0x04,0x22,0x22,0x22,0x24,0x26,0x24,0x26,0x26,0x25,0x25,0x04,0x28,0x24,
+ 0x24,0x28,0x26,0x28,0x25,0x22,0x26,0x24,0x22,0x28,0x24,0x04,0x22,0x24,0x26,0x24,
+ 0x26,0x24,0x26,0x26,0x26,0x25,0x25,0x26,0x04,0x28,0x26,0x28,0x26,0x26,0x28,0x28,
+ 0x26,0x26,0x24,0x25,0x28,0x28,0x26,0x28,0x28,0x26,0x25,0x24,0x26,0x24,0x25,0x29,
+ 0x21,0x25,0x22,0x24,0x22,0x22,0x21,0x25,0x24,0x23,0x22,0x25,0x25,0x21,0x24,0x23,
+ 0x21,0x28,0x24,0x24,0x22,0x23,0x23,0x04,0x24,0x25,0x25,0x26,0x24,0x28,0x26,0x25,
+ 0x28,0x28,0x04,0x26,0x25,0x22,0x23,0x24,0x24,0x23,0x25,0x23,0x25,0x25,0x26,0x25,
+ 0x22,0x22,0x28,0x23,0x23,0x26,0x22,0x25,0x25,0x23,0x22,0x23,0x23,0x25,0x24,0x04,
+ 0x23,0x22,0x26,0x23,0x22,0x23,0x23,0x25,0x22,0x24,0x22,0x21,0x04,0x28,0x25,0x26,
+ 0x28,0x25,0x28,0x26,0x04,0x29,0x04,0x26,0x04,0x24,0x27,0x28,0x04,0x23,0x04,0x26,
+ 0x04,0x23,0x26,0x24,0x28,0x24,0x24,0x26,0x26,0x28,0x28,0x26,0x28,0x04,0x04,0x25,
+ 0x26,0x04,0x26,0x25,0x28,0x24,0x28,0x25,0x26,0x29,0x29,0x29,0x29,0x24,0x29,0x29,
+ 0x26,0x25,0x23,0x29,0x28,0x25,0x27,0x26,0x04,0x22,0x25,0x26,0x28,0x24,0x24,0x26,
+ 0x26,0x04,0x26,0x24,0x26,0x24,0x28,0x26,0x23,0x26,0x23,0x28,0x28,0x26,0x28,0x26,
+ 0x26,0x25,0x28,0x25,0x28,0x25,0x28,0x25,0x25,0x28,0x28,0x28,0x26,0x26,0x26,0x28,
+ 0x28,0x04,0x25,0x27,0x26,0x26,0x25,0x28,0x28,0x24,0x28,0x28,0x28,0x29,0x2A,0x2A,
+ 0x26,0x28,0x28,0x27,0x04,0x04,0x25,0x24,0x22,0x23,0x23,0x20,0x22,0x24,0x22,0x24,
+ 0x21,0x22,0x22,0x23,0x26,0x24,0x25,0x25,0x26,0x24,0x26,0x25,0x24,0x26,0x04,0x28,
+ 0x24,0x28,0x26,0x26,0x24,0x28,0x26,0x26,0x04,0x04,0x24,0x24,0x24,0x25,0x26,0x24,
+ 0x26,0x25,0x28,0x24,0x25,0x24,0x26,0x28,0x26,0x25,0x26,0x04,0x25,0x25,0x23,0x25,
+ 0x25,0x23,0x23,0x26,0x04,0x25,0x26,0x28,0x28,0x23,0x28,0x26,0x25,0x26,0x26,0x28,
+ 0x28,0x25,0x25,0x26,0x28,0x25,0x28,0x24,0x26,0x24,0x28,0x24,0x28,0x04,0x28,0x04,
+ 0x04,0x28,0x26,0x26,0x04,0x04,0x25,0x28,0x04,0x04,0x28,0x28,0x25,0x28,0x26,0x04,
+ 0x24,0x04,0x04,0x26,0x04,0x24,0x28,0x28,0x04,0x04,0x26,0x25,0x28,0x28,0x04,0x29,
+ 0x22,0x22,0x22,0x22,0x23,0x22,0x22,0x28,0x25,0x21,0x25,0x23,0x22,0x22,0x04,0x25,
+ 0x23,0x22,0x24,0x24,0x26,0x26,0x26,0x04,0x24,0x26,0x26,0x26,0x26,0x25,0x25,0x24,
+ 0x04,0x25,0x24,0x28,0x26,0x25,0x26,0x23,0x22,0x04,0x23,0x22,0x25,0x04,0x04,0x23,
+ 0x22,0x23,0x23,0x23,0x26,0x04,0x24,0x25,0x23,0x23,0x23,0x25,0x23,0x25,0x23,0x23,
+ 0x23,0x22,0x25,0x22,0x23,0x22,0x21,0x23,0x23,0x22,0x25,0x23,0x25,0x25,0x26,0x27,
+ 0x26,0x29,0x28,0x28,0x24,0x23,0x26,0x26,0x23,0x23,0x25,0x25,0x24,0x24,0x25,0x23,
+ 0x22,0x25,0x23,0x23,0x23,0x22,0x28,0x23,0x26,0x24,0x24,0x26,0x29,0x28,0x28,0x28,
+ 0x25,0x24,0x28,0x04,0x28,0x28,0x29,0x04,0x25,0x26,0x04,0x27,0x27,0x25,0x27,0x24,
+ 0x24,0x28,0x27,0x25,0x28,0x29,0x25,0x29,0x26,0x25,0x28,0x28,0x28,0x28,0x28,0x28,
+ 0x25,0x26,0x28,0x25,0x28,0x26,0x22,0x28,0x28,0x26,0x25,0x26,0x28,0x26,0x24,0x24,
+ 0x04,0x25,0x26,0x26,0x25,0x26,0x28,0x04,0x04,0x25,0x22,0x28,0x25,0x28,0x25,0x24,
+ 0x26,0x27,0x28,0x25,0x04,0x04,0x2A,0x26,0x28,0x26,0x2A,0x28,0x28,0x28,0x25,0x26,
+ 0x28,0x24,0x28,0x25,0x23,0x24,0x24,0x22,0x25,0x24,0x22,0x20,0x20,0x24,0x23,0x21,
+ 0x25,0x25,0x24,0x04,0x25,0x28,0x25,0x04,0x28,0x26,0x04,0x26,0x23,0x28,0x28,0x24,
+ 0x24,0x26,0x25,0x26,0x26,0x25,0x25,0x25,0x25,0x26,0x24,0x24,0x25,0x24,0x28,0x25,
+ 0x25,0x26,0x28,0x23,0x26,0x28,0x22,0x04,0x26,0x23,0x25,0x24,0x28,0x25,0x21,0x24,
+ 0x22,0x25,0x26,0x28,0x25,0x24,0x28,0x26,0x28,0x24,0x26,0x25,0x23,0x25,0x04,0x25,
+ 0x04,0x26,0x04,0x28,0x26,0x28,0x28,0x25,0x28,0x24,0x26,0x28,0x27,0x27,0x25,0x28,
+ 0x26,0x28,0x25,0x24,0x25,0x28,0x25,0x28,0x28,0x28,0x04,0x25,0x28,0x28,0x29,0x28,
+ 0x04,0x29,0x28,0x29,0x28,0x28,0x04,0x28,0x26,0x29,0x29,0x28,0x29,0x29,0x28,0x29,
+ 0x25,0x25,0x24,0x25,0x04,0x28,0x24,0x24,0x24,0x26,0x21,0x21,0x25,0x21,0x24,0x22,
+ 0x24,0x25,0x25,0x28,0x26,0x04,0x23,0x28,0x28,0x26,0x25,0x28,0x24,0x24,0x04,0x28,
+ 0x04,0x04,0x26,0x28,0x29,0x28,0x24,0x23,0x28,0x04,0x28,0x25,0x26,0x26,0x26,0x24,
+ 0x28,0x26,0x23,0x25,0x26,0x04,0x04,0x24,0x22,0x25,0x25,0x22,0x24,0x23,0x04,0x22,
+ 0x25,0x24,0x26,0x26,0x22,0x23,0x23,0x21,0x04,0x25,0x23,0x24,0x23,0x26,0x25,0x28,
+ 0x24,0x22,0x25,0x28,0x22,0x24,0x23,0x25,0x23,0x25,0x26,0x25,0x23,0x04,0x22,0x28,
+ 0x23,0x25,0x23,0x25,0x25,0x25,0x25,0x23,0x24,0x25,0x24,0x28,0x23,0x28,0x04,0x28,
+ 0x28,0x28,0x04,0x26,0x25,0x24,0x26,0x26,0x25,0x28,0x28,0x25,0x24,0x24,0x04,0x24,
+ 0x25,0x23,0x24,0x21,0x24,0x25,0x26,0x04,0x26,0x26,0x25,0x04,0x24,0x28,0x04,0x25,
+ 0x25,0x23,0x28,0x26,0x26,0x04,0x26,0x04,0x26,0x28,0x26,0x24,0x04,0x28,0x25,0x24,
+ 0x22,0x26,0x04,0x26,0x24,0x26,0x04,0x26,0x28,0x24,0x04,0x24,0x04,0x25,0x28,0x28,
+ 0x29,0x24,0x29,0x28,0x25,0x29,0x28,0x28,0x28,0x28,0x25,0x28,0x28,0x28,0x27,0x26,
+ 0x26,0x24,0x25,0x23,0x26,0x22,0x20,0x22,0x22,0x26,0x24,0x22,0x25,0x23,0x22,0x28,
+ 0x23,0x28,0x25,0x25,0x26,0x28,0x26,0x25,0x26,0x25,0x04,0x26,0x25,0x28,0x25,0x25,
+ 0x04,0x04,0x26,0x26,0x04,0x25,0x28,0x25,0x25,0x04,0x04,0x25,0x26,0x25,0x04,0x26,
+ 0x25,0x25,0x26,0x26,0x26,0x04,0x26,0x26,0x26,0x25,0x26,0x25,0x26,0x20,0x22,0x24,
+ 0x04,0x26,0x26,0x28,0x28,0x28,0x26,0x04,0x26,0x28,0x26,0x26,0x24,0x04,0x28,0x24,
+ 0x25,0x26,0x26,0x24,0x25,0x26,0x24,0x25,0x26,0x26,0x04,0x04,0x28,0x28,0x28,0x28,
+ 0x25,0x26,0x28,0x26,0x25,0x25,0x28,0x04,0x26,0x28,0x28,0x24,0x25,0x28,0x04,0x25,
+ 0x2A,0x28,0x2A,0x28,0x2A,0x29,0x2A,0x28,0x29,0x04,0x29,0x28,0x28,0x28,0x25,0x29,
+ 0x22,0x21,0x21,0x24,0x24,0x21,0x21,0x24,0x23,0x20,0x24,0x20,0x20,0x22,0x22,0x24,
+ 0x24,0x24,0x25,0x25,0x04,0x25,0x26,0x28,0x26,0x26,0x25,0x26,0x28,0x28,0x22,0x04,
+ 0x28,0x27,0x04,0x28,0x24,0x28,0x25,0x29,0x28,0x26,0x28,0x22,0x25,0x23,0x25,0x22,
+ 0x23,0x25,0x25,0x26,0x26,0x24,0x26,0x25,0x28,0x28,0x25,0x26,0x28,0x25,0x24,0x04,
+ 0x24,0x25,0x26,0x26,0x25,0x28,0x25,0x25,0x23,0x26,0x26,0x25,0x24,0x28,0x28,0x26,
+ 0x26,0x25,0x22,0x23,0x22,0x23,0x23,0x24,0x23,0x22,0x24,0x26,0x04,0x26,0x24,0x21,
+ 0x25,0x26,0x24,0x23,0x24,0x23,0x23,0x22,0x22,0x04,0x26,0x25,0x24,0x26,0x26,0x28,
+ 0x24,0x26,0x25,0x28,0x24,0x26,0x28,0x28,0x25,0x25,0x25,0x28,0x24,0x23,0x04,0x04,
+ 0x22,0x25,0x04,0x24,0x25,0x25,0x25,0x23,0x25,0x24,0x25,0x23,0x24,0x25,0x25,0x22,
+ 0x04,0x04,0x24,0x04,0x24,0x25,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x28,0x28,0x25,
+ 0x24,0x26,0x28,0x24,0x25,0x23,0x04,0x22,0x24,0x29,0x26,0x26,0x26,0x04,0x28,0x28,
+ 0x26,0x29,0x28,0x24,0x25,0x25,0x25,0x28,0x28,0x04,0x28,0x04,0x28,0x25,0x25,0x25,
+ 0x24,0x22,0x24,0x25,0x23,0x20,0x23,0x25,0x04,0x25,0x24,0x25,0x23,0x23,0x04,0x25,
+ 0x24,0x23,0x24,0x26,0x26,0x26,0x23,0x25,0x24,0x28,0x25,0x04,0x04,0x26,0x04,0x25,
+ 0x26,0x26,0x04,0x28,0x26,0x26,0x25,0x25,0x26,0x25,0x25,0x26,0x04,0x24,0x26,0x25,
+ 0x26,0x28,0x23,0x28,0x28,0x26,0x26,0x04,0x04,0x25,0x25,0x22,0x20,0x22,0x25,0x24,
+ 0x26,0x26,0x04,0x26,0x28,0x25,0x04,0x28,0x28,0x04,0x26,0x25,0x26,0x28,0x04,0x26,
+ 0x28,0x25,0x26,0x24,0x26,0x24,0x25,0x25,0x28,0x25,0x26,0x25,0x24,0x24,0x04,0x28,
+ 0x28,0x25,0x28,0x28,0x28,0x04,0x28,0x28,0x25,0x28,0x04,0x26,0x24,0x29,0x29,0x28,
+ 0x29,0x28,0x28,0x26,0x29,0x28,0x29,0x28,0x28,0x25,0x23,0x25,0x27,0x24,0x26,0x29,
+ 0x20,0x26,0x22,0x20,0x20,0x20,0x20,0x20,0x22,0x23,0x25,0x24,0x22,0x22,0x26,0x04,
+ 0x26,0x20,0x04,0x26,0x25,0x24,0x22,0x04,0x28,0x26,0x26,0x28,0x26,0x28,0x28,0x25,
+ 0x24,0x28,0x26,0x26,0x25,0x25,0x26,0x28,0x23,0x27,0x26,0x28,0x28,0x04,0x04,0x25,
+ 0x22,0x23,0x25,0x24,0x25,0x25,0x25,0x25,0x26,0x25,0x24,0x27,0x25,0x28,0x25,0x24,
+ 0x04,0x26,0x25,0x23,0x28,0x28,0x28,0x28,0x26,0x29,0x26,0x28,0x27,0x24,0x26,0x25,
+ 0x28,0x04,0x26,0x25,0x22,0x26,0x25,0x22,0x23,0x24,0x23,0x23,0x22,0x22,0x23,0x23,
+ 0x25,0x24,0x25,0x22,0x23,0x26,0x04,0x24,0x26,0x24,0x25,0x26,0x28,0x23,0x24,0x26,
+ 0x24,0x25,0x28,0x26,0x23,0x28,0x24,0x24,0x22,0x23,0x22,0x25,0x25,0x25,0x26,0x25,
+ 0x25,0x24,0x25,0x23,0x22,0x24,0x24,0x28,0x24,0x25,0x23,0x24,0x25,0x25,0x24,0x26,
+ 0x25,0x25,0x28,0x25,0x04,0x24,0x25,0x25,0x24,0x26,0x24,0x24,0x28,0x28,0x29,0x28,
+ 0x28,0x28,0x29,0x26,0x29,0x28,0x29,0x29,0x29,0x26,0x25,0x27,0x25,0x28,0x04,0x28,
+ 0x27,0x28,0x26,0x28,0x26,0x26,0x29,0x28,0x26,0x28,0x25,0x25,0x28,0x24,0x20,0x23,
+ 0x20,0x22,0x22,0x23,0x25,0x22,0x23,0x24,0x22,0x24,0x23,0x23,0x26,0x24,0x28,0x23,
+ 0x28,0x04,0x24,0x26,0x28,0x26,0x24,0x26,0x26,0x04,0x04,0x04,0x25,0x25,0x24,0x26,
+ 0x25,0x26,0x26,0x25,0x28,0x25,0x25,0x26,0x25,0x24,0x28,0x23,0x28,0x28,0x04,0x26,
+ 0x04,0x24,0x25,0x26,0x04,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x26,0x28,0x25,0x23,
+ 0x26,0x25,0x25,0x28,0x22,0x25,0x28,0x24,0x24,0x25,0x28,0x25,0x27,0x28,0x26,0x26,
+ 0x27,0x28,0x28,0x04,0x27,0x25,0x25,0x28,0x28,0x28,0x28,0x26,0x29,0x26,0x25,0x28,
+ 0x24,0x25,0x24,0x28,0x25,0x24,0x25,0x24,0x27,0x24,0x28,0x26,0x26,0x28,0x28,0x26,
+ 0x28,0x24,0x28,0x04,0x25,0x28,0x23,0x28,0x24,0x04,0x28,0x28,0x04,0x26,0x26,0x29,
+ 0x21,0x22,0x25,0x24,0x23,0x22,0x25,0x25,0x21,0x25,0x26,0x26,0x04,0x28,0x28,0x25,
+ 0x04,0x21,0x20,0x20,0x25,0x22,0x25,0x25,0x24,0x28,0x25,0x25,0x24,0x04,0x04,0x24,
+ 0x23,0x28,0x25,0x04,0x25,0x25,0x23,0x23,0x04,0x25,0x23,0x23,0x25,0x29,0x28,0x26,
+ 0x24,0x28,0x25,0x25,0x28,0x04,0x25,0x26,0x28,0x27,0x25,0x28,0x24,0x28,0x28,0x04,
+ 0x04,0x28,0x28,0x04,0x26,0x28,0x28,0x27,0x24,0x28,0x27,0x28,0x26,0x26,0x28,0x28,
+ 0x28,0x25,0x28,0x25,0x25,0x25,0x25,0x26,0x24,0x25,0x22,0x23,0x22,0x25,0x23,0x23,
+ 0x25,0x24,0x23,0x25,0x26,0x26,0x26,0x26,0x24,0x24,0x28,0x26,0x26,0x28,0x24,0x26,
+ 0x28,0x28,0x25,0x23,0x24,0x26,0x24,0x22,0x23,0x24,0x04,0x23,0x22,0x23,0x23,0x25,
+ 0x24,0x23,0x22,0x22,0x23,0x25,0x28,0x25,0x23,0x04,0x26,0x23,0x25,0x26,0x28,0x23,
+ 0x25,0x22,0x25,0x22,0x24,0x24,0x22,0x25,0x24,0x22,0x22,0x24,0x23,0x28,0x04,0x24,
+ 0x26,0x24,0x24,0x23,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x25,0x25,0x04,0x28,0x27,
+ 0x28,0x28,0x04,0x28,0x28,0x26,0x28,0x26,0x28,0x04,0x26,0x24,0x20,0x22,0x22,0x22,
+ 0x22,0x25,0x23,0x25,0x23,0x04,0x24,0x25,0x24,0x25,0x25,0x04,0x25,0x22,0x26,0x28,
+ 0x26,0x26,0x04,0x24,0x26,0x24,0x25,0x26,0x22,0x25,0x26,0x26,0x04,0x28,0x23,0x28,
+ 0x26,0x25,0x28,0x23,0x26,0x25,0x28,0x04,0x28,0x24,0x28,0x24,0x26,0x28,0x25,0x25,
+ 0x25,0x25,0x23,0x26,0x25,0x23,0x20,0x24,0x24,0x23,0x24,0x25,0x26,0x25,0x28,0x26,
+ 0x24,0x26,0x26,0x26,0x26,0x26,0x26,0x28,0x26,0x28,0x26,0x04,0x04,0x29,0x25,0x29,
+ 0x26,0x28,0x28,0x28,0x28,0x29,0x04,0x29,0x28,0x26,0x26,0x28,0x04,0x29,0x28,0x28,
+ 0x24,0x04,0x25,0x28,0x28,0x25,0x04,0x04,0x28,0x04,0x28,0x28,0x26,0x04,0x25,0x28,
+ 0x24,0x04,0x04,0x26,0x26,0x23,0x24,0x04,0x26,0x28,0x28,0x25,0x26,0x04,0x25,0x29,
+ 0x26,0x28,0x28,0x26,0x25,0x26,0x26,0x04,0x26,0x26,0x26,0x26,0x26,0x24,0x24,0x25,
+ 0x22,0x25,0x22,0x26,0x04,0x24,0x28,0x04,0x28,0x28,0x04,0x04,0x26,0x23,0x24,0x28,
+ 0x25,0x25,0x23,0x04,0x26,0x28,0x25,0x25,0x26,0x25,0x22,0x25,0x04,0x26,0x26,0x27,
+ 0x28,0x25,0x28,0x25,0x25,0x25,0x28,0x26,0x24,0x25,0x04,0x28,0x28,0x23,0x24,0x22,
+ 0x26,0x26,0x04,0x25,0x22,0x28,0x28,0x23,0x26,0x26,0x25,0x04,0x28,0x27,0x04,0x25,
+ 0x26,0x24,0x26,0x29,0x28,0x28,0x26,0x26,0x27,0x24,0x26,0x04,0x24,0x22,0x26,0x25,
+ 0x22,0x25,0x24,0x04,0x24,0x28,0x25,0x26,0x26,0x26,0x24,0x23,0x25,0x04,0x25,0x24,
+ 0x25,0x25,0x22,0x22,0x28,0x25,0x25,0x22,0x25,0x24,0x24,0x26,0x25,0x25,0x23,0x23,
+ 0x25,0x04,0x25,0x26,0x22,0x24,0x24,0x25,0x25,0x24,0x23,0x04,0x25,0x24,0x25,0x04,
+ 0x26,0x04,0x26,0x28,0x28,0x24,0x26,0x26,0x25,0x28,0x24,0x25,0x26,0x26,0x22,0x24,
+ 0x25,0x28,0x26,0x28,0x28,0x28,0x28,0x04,0x28,0x24,0x04,0x04,0x28,0x29,0x28,0x04,
+ 0x28,0x28,0x25,0x25,0x26,0x26,0x23,0x25,0x21,0x24,0x22,0x20,0x25,0x24,0x28,0x23,
+ 0x25,0x24,0x23,0x24,0x22,0x25,0x25,0x28,0x26,0x23,0x25,0x22,0x26,0x25,0x25,0x04,
+ 0x26,0x26,0x24,0x25,0x25,0x26,0x24,0x28,0x28,0x04,0x25,0x26,0x25,0x24,0x26,0x25,
+ 0x26,0x26,0x26,0x24,0x28,0x26,0x24,0x04,0x28,0x04,0x28,0x28,0x28,0x25,0x25,0x04,
+ 0x25,0x24,0x23,0x22,0x20,0x24,0x21,0x28,0x25,0x28,0x25,0x28,0x25,0x26,0x28,0x26,
+ 0x28,0x04,0x26,0x25,0x04,0x28,0x25,0x24,0x25,0x28,0x28,0x29,0x28,0x28,0x26,0x28,
+ 0x25,0x28,0x25,0x26,0x26,0x29,0x29,0x25,0x28,0x25,0x04,0x24,0x26,0x28,0x29,0x28,
+ 0x26,0x25,0x27,0x24,0x23,0x25,0x28,0x25,0x26,0x28,0x24,0x25,0x25,0x04,0x28,0x04,
+ 0x25,0x24,0x26,0x04,0x26,0x26,0x26,0x26,0x22,0x25,0x28,0x04,0x23,0x28,0x28,0x29,
+ 0x24,0x28,0x24,0x28,0x25,0x04,0x24,0x26,0x24,0x23,0x04,0x26,0x22,0x28,0x24,0x28,
+ 0x04,0x25,0x26,0x25,0x28,0x28,0x28,0x24,0x20,0x22,0x28,0x25,0x23,0x23,0x28,0x24,
+ 0x22,0x25,0x22,0x04,0x22,0x21,0x26,0x25,0x23,0x21,0x22,0x22,0x25,0x04,0x28,0x25,
+ 0x28,0x22,0x28,0x28,0x04,0x04,0x24,0x22,0x25,0x25,0x22,0x23,0x25,0x22,0x21,0x23,
+ 0x22,0x22,0x28,0x23,0x23,0x24,0x04,0x28,0x28,0x22,0x04,0x28,0x25,0x28,0x28,0x04,
+ 0x26,0x26,0x28,0x28,0x24,0x04,0x22,0x25,0x28,0x28,0x28,0x26,0x25,0x28,0x28,0x26,
+ 0x25,0x04,0x28,0x26,0x25,0x26,0x28,0x25,0x22,0x26,0x23,0x23,0x23,0x21,0x25,0x26,
+ 0x25,0x26,0x25,0x28,0x25,0x04,0x26,0x25,0x26,0x22,0x25,0x24,0x24,0x25,0x25,0x28,
+ 0x24,0x22,0x26,0x24,0x04,0x26,0x24,0x25,0x26,0x26,0x25,0x25,0x04,0x04,0x28,0x28,
+ 0x24,0x24,0x28,0x25,0x23,0x04,0x24,0x22,0x04,0x26,0x26,0x28,0x28,0x26,0x26,0x27,
+ 0x24,0x28,0x25,0x26,0x25,0x29,0x28,0x25,0x28,0x04,0x28,0x28,0x25,0x25,0x27,0x28,
+ 0x26,0x28,0x24,0x23,0x24,0x23,0x25,0x24,0x20,0x22,0x23,0x25,0x23,0x28,0x26,0x04,
+ 0x23,0x24,0x25,0x25,0x23,0x26,0x26,0x25,0x25,0x04,0x24,0x28,0x04,0x25,0x28,0x04,
+ 0x24,0x24,0x25,0x28,0x26,0x28,0x04,0x25,0x25,0x28,0x04,0x26,0x28,0x28,0x28,0x28,
+ 0x04,0x25,0x04,0x26,0x04,0x26,0x24,0x04,0x28,0x22,0x26,0x25,0x25,0x26,0x25,0x26,
+ 0x25,0x25,0x22,0x25,0x23,0x23,0x28,0x25,0x25,0x24,0x22,0x28,0x24,0x26,0x25,0x24,
+ 0x25,0x04,0x25,0x04,0x26,0x25,0x28,0x28,0x04,0x28,0x29,0x04,0x28,0x28,0x27,0x24,
+ 0x28,0x27,0x25,0x27,0x25,0x28,0x28,0x28,0x26,0x28,0x04,0x28,0x04,0x22,0x26,0x26,
+ 0x04,0x28,0x28,0x26,0x04,0x28,0x28,0x25,0x28,0x24,0x22,0x25,0x28,0x28,0x23,0x28,
+ 0x04,0x26,0x28,0x28,0x26,0x04,0x26,0x24,0x24,0x26,0x25,0x28,0x24,0x23,0x24,0x29,
+ 0x28,0x28,0x28,0x28,0x28,0x26,0x27,0x28,0x26,0x24,0x26,0x25,0x23,0x28,0x04,0x28,
+ 0x28,0x27,0x24,0x25,0x24,0x26,0x25,0x24,0x23,0x25,0x20,0x20,0x20,0x25,0x20,0x04,
+ 0x04,0x28,0x28,0x04,0x23,0x26,0x26,0x25,0x25,0x23,0x22,0x20,0x20,0x20,0x20,0x20,
+ 0x22,0x23,0x26,0x28,0x23,0x24,0x04,0x25,0x23,0x28,0x23,0x26,0x25,0x25,0x25,0x28,
+ 0x28,0x28,0x24,0x25,0x28,0x04,0x04,0x26,0x25,0x26,0x23,0x24,0x28,0x25,0x26,0x24,
+ 0x26,0x25,0x25,0x24,0x25,0x22,0x28,0x26,0x25,0x22,0x26,0x28,0x25,0x25,0x28,0x25,
+ 0x28,0x24,0x26,0x25,0x26,0x26,0x28,0x25,0x24,0x04,0x26,0x26,0x04,0x26,0x04,0x28,
+ 0x28,0x04,0x04,0x24,0x24,0x25,0x04,0x04,0x24,0x28,0x26,0x26,0x28,0x27,0x28,0x25,
+ 0x25,0x24,0x04,0x04,0x27,0x26,0x24,0x27,0x28,0x24,0x25,0x26,0x28,0x26,0x25,0x25,
+ 0x25,0x28,0x04,0x28,0x25,0x28,0x25,0x25,0x28,0x28,0x25,0x28,0x28,0x25,0x23,0x29,
+ 0x04,0x28,0x28,0x28,0x28,0x25,0x26,0x24,0x25,0x25,0x28,0x25,0x26,0x26,0x25,0x21,
+ 0x25,0x23,0x22,0x21,0x25,0x24,0x20,0x25,0x28,0x23,0x23,0x25,0x22,0x25,0x23,0x22,
+ 0x26,0x28,0x24,0x26,0x04,0x26,0x25,0x28,0x28,0x23,0x26,0x25,0x28,0x25,0x25,0x04,
+ 0x28,0x04,0x25,0x28,0x26,0x28,0x28,0x22,0x25,0x28,0x26,0x04,0x28,0x25,0x25,0x04,
+ 0x26,0x25,0x28,0x28,0x26,0x25,0x04,0x04,0x26,0x28,0x26,0x26,0x26,0x26,0x24,0x25,
+ 0x25,0x23,0x25,0x25,0x25,0x23,0x28,0x24,0x22,0x25,0x28,0x27,0x24,0x28,0x26,0x28,
+ 0x25,0x26,0x28,0x25,0x28,0x28,0x28,0x28,0x28,0x29,0x25,0x25,0x28,0x25,0x27,0x04,
+ 0x28,0x28,0x28,0x25,0x26,0x25,0x25,0x24,0x24,0x24,0x25,0x24,0x26,0x26,0x24,0x26,
+ 0x24,0x28,0x25,0x28,0x04,0x28,0x24,0x04,0x26,0x26,0x28,0x26,0x28,0x25,0x22,0x26,
+ 0x26,0x04,0x25,0x28,0x28,0x26,0x04,0x04,0x24,0x24,0x23,0x23,0x26,0x25,0x20,0x29,
+ 0x29,0x28,0x28,0x25,0x26,0x24,0x29,0x26,0x25,0x25,0x27,0x26,0x28,0x04,0x24,0x24,
+ 0x25,0x26,0x04,0x26,0x23,0x25,0x22,0x04,0x23,0x24,0x26,0x24,0x22,0x25,0x24,0x25,
+ 0x24,0x25,0x25,0x04,0x23,0x04,0x25,0x25,0x04,0x28,0x28,0x22,0x28,0x23,0x23,0x25,
+ 0x23,0x25,0x23,0x23,0x20,0x23,0x04,0x26,0x04,0x27,0x04,0x28,0x26,0x26,0x24,0x04,
+ 0x04,0x25,0x26,0x25,0x28,0x25,0x28,0x25,0x25,0x28,0x28,0x04,0x25,0x22,0x28,0x23,
+ 0x25,0x28,0x24,0x22,0x25,0x22,0x04,0x26,0x23,0x26,0x28,0x28,0x25,0x25,0x24,0x23,
+ 0x26,0x25,0x26,0x28,0x25,0x23,0x28,0x04,0x04,0x24,0x26,0x26,0x04,0x25,0x28,0x26,
+ 0x26,0x25,0x28,0x29,0x29,0x24,0x28,0x04,0x04,0x23,0x25,0x29,0x29,0x04,0x04,0x29,
+ 0x25,0x29,0x26,0x29,0x25,0x28,0x25,0x28,0x04,0x22,0x26,0x29,0x29,0x28,0x29,0x04,
+ 0x04,0x25,0x29,0x28,0x29,0x28,0x25,0x28,0x28,0x28,0x29,0x28,0x28,0x04,0x28,0x28,
+ 0x26,0x28,0x28,0x04,0x25,0x25,0x22,0x25,0x25,0x22,0x24,0x24,0x22,0x26,0x25,0x23,
+ 0x21,0x22,0x24,0x21,0x20,0x20,0x24,0x22,0x24,0x28,0x25,0x24,0x24,0x22,0x23,0x28,
+ 0x22,0x28,0x28,0x25,0x04,0x26,0x26,0x25,0x04,0x26,0x28,0x24,0x28,0x28,0x28,0x28,
+ 0x26,0x04,0x04,0x25,0x25,0x26,0x24,0x28,0x26,0x26,0x28,0x24,0x28,0x26,0x24,0x24,
+ 0x28,0x04,0x28,0x22,0x26,0x04,0x26,0x24,0x26,0x24,0x26,0x26,0x21,0x25,0x04,0x26,
+ 0x23,0x28,0x28,0x28,0x28,0x24,0x28,0x28,0x29,0x25,0x25,0x29,0x28,0x29,0x28,0x28,
+ 0x28,0x29,0x24,0x29,0x23,0x28,0x25,0x26,0x28,0x28,0x28,0x04,0x26,0x26,0x26,0x24,
+ 0x04,0x25,0x27,0x25,0x25,0x25,0x28,0x25,0x25,0x24,0x04,0x26,0x25,0x26,0x26,0x28,
+ 0x28,0x28,0x22,0x28,0x28,0x28,0x26,0x24,0x26,0x28,0x04,0x26,0x26,0x04,0x26,0x28,
+ 0x24,0x26,0x25,0x28,0x26,0x25,0x26,0x26,0x26,0x28,0x24,0x04,0x23,0x20,0x23,0x29,
+ 0x28,0x25,0x28,0x04,0x27,0x25,0x26,0x28,0x28,0x25,0x28,0x24,0x26,0x25,0x23,0x25,
+ 0x25,0x96,0x96,0x96,0x96,0x4A,0x4A,0x4A,0x4A,0x4A,0x96,0x96,0x98,0x98,0x98,0x98,
+ 0x98,0x98,0x98,0x98,0x99,0x99,0x99,0x99,0x99,0x99,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,
+ 0x9A,0x9A,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9C,0x9C,0x9C,0x9C,0x9C,0x9C,0x26,0x25,
+ 0x24,0x25,0x25,0x28,0x25,0x04,0x26,0x22,0x22,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,
+ 0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,
+ 0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,
+ 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,
+ 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,
+ 0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,
+ 0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,
+ 0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,
+ 0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1E,0x1E,
+ 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,
+ 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,
+ 0x1E,0x1E,0x1E,0x1E,0x24,0x28,0x28,0x28,0x25,0x98,0x98,0x98,0x98,0x98,0x98,0x98,
+ 0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,
+ 0x98,0x98,0x98,0x98,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,
+ 0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,0x22,0x20,0x28,0x29,
+ 0x26,0x28,0x26,0x28,0x28,0x23,0x28,0x04,0x25,0x26,0x28,0x23,0x24,0x24,0x25,0x28,
+ 0x25,0x96,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2A,0x22,
+ 0x22,0x25,0x25,0x23,0x22,0x23,0x23,0x22,0x23,0x1A,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x2C,0x04,0x28,0x04,0x28,0x98,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2A,0x24,0x25,0x29,
+ 0x28,0x04,0x28,0x26,0x28,0x26,0x26,0x26,0x24,0x26,0x28,0x25,0x22,0x25,0x25,0x28,
+ 0x28,0x96,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x47,0x9F,0x9F,0x9F,0x9F,0x2A,0x26,
+ 0x22,0x23,0x25,0x22,0x22,0x20,0x24,0x22,0x24,0x1A,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x2B,0x26,0x04,0x28,0x28,0x98,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2E,0x28,0x24,0x29,
+ 0x26,0x28,0x24,0x26,0x25,0x25,0x24,0x25,0x26,0x28,0x04,0x28,0x25,0x28,0x04,0x04,
+ 0x28,0x96,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2B,0x2C,
+ 0x28,0x23,0x25,0x24,0x04,0x23,0x25,0x25,0x23,0x1A,0x00,0x00,0x18,0x08,0x1D,0x00,
+ 0x00,0x00,0x1C,0x07,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,
+ 0x08,0x1D,0x00,0x00,0x2B,0x2C,0x24,0x26,0x24,0x98,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2A,0x29,0x28,0x29,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x96,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x47,0x9F,0x9F,0x9F,0x9F,0x47,0x9F,0x9F,0x9F,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1A,0x00,0x00,0x08,0x1D,0x1F,0x00,
+ 0x00,0x1E,0x08,0x08,0x14,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x1C,0x00,0x1E,0x00,0x00,0x00,0x00,0x07,0x12,
+ 0x07,0x00,0x07,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,
+ 0x1D,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x3C,0x38,0x45,0x45,
+ 0x38,0xD5,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x96,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x4C,0x47,0x47,0x47,0x47,0x4C,0x9F,0x9F,0x9F,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1A,0x00,0x00,0x1D,0x1F,0x1F,0x00,
+ 0x00,0x08,0x08,0x08,0x08,0x14,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2A,0x20,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x16,0x0F,0x1A,0x18,0x07,0x18,0x17,0x00,0x08,0x07,0x17,0x1A,0x1A,
+ 0x16,0x12,0x1A,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,
+ 0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x28,0x34,0x33,0x33,0x33,0x33,0x33,
+ 0x33,0x34,0x3F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x96,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1A,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x08,0x1A,0x1A,0x1A,0x1A,0x1A,0x07,0x0F,0x07,0x00,0x00,0x00,0x00,0x28,0x08,0x1A,
+ 0x31,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x13,0x1A,0x1A,0x1A,0x1A,0x1A,0x18,0x28,0x16,0x1A,0x1A,0x1A,0x1A,0x1A,
+ 0x1A,0x1A,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x12,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2D,
+ 0x17,0x07,0x00,0x00,0x00,0x26,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x28,0x21,0x36,0x36,0x36,0x36,0x36,0x36,0x36,
+ 0x36,0x36,0xD9,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x96,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1A,0x00,0x00,0x00,0x00,0x00,0x32,
+ 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x07,0x0F,0x00,0x00,0x24,0x19,0x19,0x19,
+ 0x19,0x31,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x11,0x19,0x19,0x19,0x19,0x19,0x07,0x35,0x00,0x18,0x19,0x19,0x19,0x07,0x19,
+ 0x19,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x12,0x07,0x19,0x18,
+ 0x12,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x1A,
+ 0x1A,0x1A,0x11,0x26,0x26,0x1A,0x17,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x29,0x23,0x23,0x23,0x23,0x2A,0xAD,0xAD,0x2A,0x23,
+ 0x23,0x27,0xAD,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x98,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
+ 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x4A,0x4C,0x4E,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1A,0x00,0x00,0x00,0x00,0x22,0x19,
+ 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x32,0x00,0x00,0x35,0x19,0x19,0x19,
+ 0x19,0x19,0x18,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x17,0x18,0x18,0x18,0x0F,0x28,0x2A,0x00,0x00,0x19,0x18,0x18,0x18,0x07,0x04,
+ 0x2A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x24,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x04,0x13,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x19,0x19,0x19,
+ 0x19,0x07,0x12,0x11,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x19,0x19,
+ 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x08,0x00,0x1D,0x13,0x07,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x29,0x25,0x25,0x25,0x28,0x9F,0x9F,0x9F,0xAE,0x27,0x25,
+ 0x27,0xAD,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x98,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
+ 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x49,0x4C,0x4E,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1A,0x00,0x00,0x00,0x00,0x32,0x17,
+ 0x17,0x17,0x17,0x00,0x0F,0x17,0x17,0x17,0x17,0x0C,0x00,0x1A,0x17,0x17,0x17,0x17,
+ 0x17,0x17,0x17,0x17,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x18,0x18,0x17,0x17,0x0F,0x00,0x00,0x00,0x00,0x08,0x17,0x17,0x17,0x18,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x22,0x17,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x18,0x08,0x18,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x18,0x18,0x18,
+ 0x18,0x18,0x18,0x18,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x18,0x18,0x18,
+ 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x12,0x07,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x29,0x26,0x26,0x28,0x2C,0x9F,0x9F,0x9F,0xAF,0x27,0x26,0x27,
+ 0xAD,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x98,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
+ 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x49,0x4D,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1A,0x00,0x00,0x00,0x00,0x07,0x14,
+ 0x17,0x17,0x2B,0x00,0x0F,0x17,0x17,0x17,0x17,0x36,0x00,0x17,0x17,0x17,0x08,0x17,
+ 0x17,0x17,0x17,0x17,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x1A,0x17,0x16,0x16,0x11,0x00,0x00,0x00,0x00,0x04,0x16,0x16,0x16,0x1A,0x00,
+ 0x00,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x35,0x16,0x16,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x07,0x08,0x1D,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x26,0x26,0x00,
+ 0x17,0x17,0x17,0x17,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x17,0x17,0x17,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x07,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x29,0x28,0x28,0x2A,0xE6,0x9F,0x9F,0x9F,0x9F,0x29,0x28,0x28,0xAD,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x98,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
+ 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x49,
+ 0x4D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x18,0x11,
+ 0x16,0x2B,0x00,0x00,0x11,0x16,0x16,0x16,0x16,0x22,0x00,0x07,0x16,0x08,0x00,0x1A,
+ 0x16,0x16,0x16,0x16,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x1C,0x16,0x16,0x16,0x13,0x00,0x00,0x00,0x00,0x04,0x16,0x16,0x16,0x08,0x0C,
+ 0x0C,0x08,0x00,0x00,0x00,0x1A,0x17,0x0F,0x00,0x00,0x00,0x00,0x0C,0x07,0x00,0x00,
+ 0x00,0x1C,0x07,0x12,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x08,0x0F,0x00,0x00,
+ 0x18,0x00,0x04,0x16,0x16,0x16,0x0F,0x11,0x13,0x00,0x00,0x00,0x00,0x18,0x13,0x08,
+ 0x00,0x00,0x00,0x00,0x2D,0x2D,0x00,0x00,0x00,0x00,0x00,0x07,0x08,0x00,0x00,0x00,
+ 0x18,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,
+ 0x16,0x16,0x16,0x16,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x16,0x16,0x16,0x16,
+ 0x00,0x12,0x16,0x16,0x16,0x16,0x00,0x00,0x1E,0x16,0x16,0x16,0x16,0x16,0x17,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0xBE,0xBD,0xBD,0xBD,0xE6,0x9F,0x9F,0x9F,0x9F,0xAD,0xBD,0xBD,0xAD,0x9F,
+ 0x9F,0xAE,0xAE,0xAE,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x98,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
+ 0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x4D,0x49,0x47,0x47,0x47,0x47,0x47,0x47,
+ 0x49,0x4E,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x0F,
+ 0x07,0x04,0x00,0x00,0x12,0x16,0x16,0x16,0x16,0x04,0x00,0x19,0x07,0x08,0x00,0x11,
+ 0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x1A,0x11,0x0F,0x07,0x08,0x00,
+ 0x00,0x1E,0x16,0x07,0x07,0x07,0x00,0x00,0x08,0x07,0x07,0x07,0x07,0x07,0x07,0x07,
+ 0x07,0x08,0x00,0x08,0x08,0x16,0x07,0x07,0x0F,0x00,0x00,0x0C,0x07,0x07,0x0F,0x0F,
+ 0x00,0x08,0x07,0x07,0x12,0x0F,0x12,0x00,0x00,0x0C,0x24,0x18,0x07,0x12,0x0F,0x07,
+ 0x07,0x08,0x07,0x07,0x07,0x07,0x07,0x07,0x08,0x00,0x00,0x1A,0x19,0x07,0x07,0x0F,
+ 0x08,0x00,0x00,0x21,0x19,0x07,0x0F,0x11,0x08,0x00,0x04,0x07,0x12,0x0F,0x00,0x00,
+ 0x18,0x07,0x12,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,
+ 0x07,0x07,0x07,0x07,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x07,0x07,0x07,0x00,
+ 0x00,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x1E,0x08,0x07,0x07,0x07,0x07,0x18,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0xBE,0xBD,0xBD,0xBD,0xAE,0x9F,0x9F,0x9F,0x9F,0xAD,0xBD,0xBD,0xAD,0x9F,0x9F,
+ 0xAE,0xBE,0xBE,0xAE,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x98,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
+ 0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x49,0x47,0x47,0x47,0x47,0x47,
+ 0x47,0x4C,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x18,
+ 0x14,0x36,0x00,0x00,0x13,0x07,0x07,0x07,0x07,0x04,0x00,0x00,0x07,0x08,0x00,0x12,
+ 0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x19,0x07,0x07,0x07,0x07,0x07,0x07,0x0F,0x31,
+ 0x00,0x1F,0x07,0x14,0x14,0x16,0x00,0x19,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,
+ 0x18,0x04,0x0C,0x16,0x14,0x14,0x14,0x14,0x07,0x0F,0x0C,0x14,0x14,0x14,0x14,0x14,
+ 0x1C,0x18,0x14,0x14,0x14,0x14,0x14,0x21,0x17,0x14,0x14,0x14,0x14,0x14,0x14,0x14,
+ 0x08,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x08,0x0C,0x19,0x14,0x14,0x14,0x14,0x14,
+ 0x0F,0x08,0x0C,0x16,0x14,0x14,0x14,0x14,0x12,0x04,0x14,0x14,0x14,0x14,0x17,0x08,
+ 0x14,0x14,0x14,0x14,0x14,0x1A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,
+ 0x14,0x14,0x14,0x14,0x1A,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x16,0x14,0x1A,0x00,
+ 0x00,0x0C,0x14,0x14,0x14,0x14,0x00,0x00,0x00,0x19,0x14,0x14,0x14,0x14,0x1A,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0xBE,0xBD,0xBD,0xBD,0xAE,0x9F,0x9F,0xAE,0xAD,0xAD,0xBD,0xBD,0xAD,0x9F,0x9F,0xAE,
+ 0xBE,0xBE,0xAE,0x9F,0x9F,0xAE,0xBE,0xBE,0xBE,0xBE,0xBE,0xBE,0xAE,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x98,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
+ 0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x49,0x47,0x47,0x47,0x47,
+ 0x47,0x49,0x4E,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x9F,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x18,0x18,0x00,0x00,0x14,0x14,0x14,0x14,0x14,0x00,0x00,0x00,0x00,0x07,0x07,0x14,
+ 0x14,0x14,0x14,0x14,0x04,0x24,0x17,0x14,0x14,0x14,0x04,0x14,0x14,0x14,0x14,0x14,
+ 0x19,0x00,0x14,0x13,0x13,0x18,0x00,0x19,0x13,0x08,0x08,0x13,0x13,0x13,0x08,0x00,
+ 0x00,0x0C,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x07,0x08,0x13,0x13,0x13,0x13,
+ 0x18,0x13,0x13,0x13,0x13,0x13,0x07,0x35,0x13,0x13,0x13,0x13,0x08,0x13,0x13,0x0C,
+ 0x08,0x18,0x1C,0x13,0x13,0x13,0x1C,0x08,0x04,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
+ 0x13,0x0F,0x08,0x08,0x13,0x13,0x13,0x13,0x04,0x04,0x13,0x13,0x13,0x13,0x13,0x13,
+ 0x13,0x13,0x13,0x13,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,
+ 0x13,0x13,0x13,0x1A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x1A,0x13,0x1A,0x00,
+ 0x00,0x0C,0x13,0x13,0x13,0x13,0x00,0x00,0x00,0x08,0x13,0x13,0x13,0x13,0x08,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0xBE,
+ 0xBC,0xBC,0xBC,0xBE,0xAE,0x9F,0xAE,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,
+ 0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xBE,0xAE,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x99,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
+ 0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x4D,0x47,0x47,0x47,0x47,
+ 0x47,0x47,0x4E,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x07,0x13,0x13,0x13,0x13,0x2C,0x00,0x00,0x00,0x00,0x00,0x16,
+ 0x13,0x13,0x13,0x13,0x04,0x21,0x13,0x13,0x13,0x13,0x04,0x0C,0x13,0x13,0x13,0x13,
+ 0x19,0x00,0x13,0x12,0x12,0x1A,0x00,0x08,0x08,0x00,0x1D,0x12,0x12,0x12,0x1C,0x00,
+ 0x00,0x08,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x04,0x12,0x12,0x12,0x12,
+ 0x12,0x12,0x12,0x12,0x12,0x12,0x07,0x21,0x12,0x12,0x12,0x12,0x04,0x25,0x20,0x00,
+ 0x00,0x00,0x1E,0x12,0x12,0x12,0x00,0x00,0x08,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
+ 0x12,0x12,0x08,0x04,0x12,0x12,0x12,0x12,0x04,0x00,0x08,0x12,0x12,0x12,0x12,0x12,
+ 0x12,0x12,0x12,0x12,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x08,
+ 0x11,0x18,0x08,0x00,0x16,0x28,0x28,0x32,0x07,0x07,0x07,0x0F,0x08,0x0F,0x1A,0x00,
+ 0x00,0x35,0x11,0x11,0x11,0x11,0x00,0x00,0x00,0x1D,0x11,0x11,0x11,0x11,0x1D,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0xBE,0xBB,
+ 0xBB,0xBB,0xBD,0xAE,0x9F,0xAE,0xBD,0xBC,0xBC,0xBC,0xBC,0xBC,0xBC,0xBC,0xBC,0xBC,
+ 0xBC,0xBC,0xBC,0xBC,0xBC,0xBC,0xBC,0xBE,0xAE,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x99,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
+ 0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x4F,0x47,0x47,0x47,0x47,
+ 0x47,0x47,0x4D,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x9F,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x16,0x13,0x12,0x12,0x12,0x2F,0x00,0x07,0x17,0x18,0x00,0x17,
+ 0x12,0x12,0x12,0x12,0x27,0x35,0x12,0x12,0x12,0x12,0x04,0x0C,0x12,0x12,0x12,0x12,
+ 0x33,0x00,0x12,0x11,0x11,0x18,0x00,0x00,0x00,0x00,0x00,0x10,0x11,0x11,0x1E,0x00,
+ 0x00,0x1D,0x10,0x11,0x11,0x11,0x00,0x11,0x11,0x11,0x11,0x0C,0x13,0x11,0x11,0x11,
+ 0x11,0x08,0x13,0x11,0x11,0x11,0x07,0x08,0x07,0x11,0x11,0x11,0x00,0x08,0x00,0x00,
+ 0x00,0x00,0x08,0x11,0x11,0x11,0x1D,0x00,0x18,0x13,0x11,0x11,0x11,0x00,0x13,0x11,
+ 0x11,0x11,0x08,0x04,0x11,0x11,0x11,0x11,0x04,0x00,0x08,0x10,0x11,0x11,0x11,0x16,
+ 0x1C,0x10,0x11,0x11,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x0F,
+ 0x0F,0x0F,0x0F,0x07,0x19,0x04,0x13,0x11,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x1A,0x00,
+ 0x00,0x20,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x1F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0xAD,0xBA,0xBA,
+ 0xBA,0xBC,0xAE,0x9F,0xAE,0xBD,0xFF,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBC,
+ 0xAB,0xAC,0xAD,0xAE,0xAE,0xAE,0xAE,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x99,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
+ 0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,
+ 0x47,0x47,0x4D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x16,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x0F,0x0F,0x0F,0x00,0x19,
+ 0x0F,0x0F,0x0F,0x11,0x23,0x23,0x0F,0x0F,0x0F,0x0F,0x1A,0x04,0x16,0x0F,0x0F,0x0F,
+ 0x32,0x00,0x0F,0x0F,0x0F,0x16,0x00,0x00,0x00,0x00,0x1F,0x0F,0x0F,0x0F,0x00,0x00,
+ 0x00,0x18,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x18,0x0F,0x07,0x07,0x0F,0x0F,0x0F,0x0F,
+ 0x18,0x08,0x00,0x07,0x07,0x0F,0x07,0x00,0x00,0x17,0x07,0x07,0x07,0x07,0x07,0x08,
+ 0x00,0x00,0x19,0x1A,0x07,0x13,0x19,0x00,0x07,0x00,0x07,0x07,0x07,0x00,0x08,0x08,
+ 0x07,0x08,0x00,0x08,0x08,0x07,0x07,0x0F,0x08,0x00,0x08,0x18,0x07,0x07,0x0F,0x08,
+ 0x00,0x18,0x07,0x07,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x1E,0x07,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0xBC,0xBA,0xB9,
+ 0xBB,0xBE,0xAF,0x9F,0xAE,0xAE,0xAE,0xAE,0xAE,0xAE,0xAD,0xBC,0xBA,0xBA,0xBC,0xAB,
+ 0xAD,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x99,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
+ 0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,
+ 0x47,0x47,0x4D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x07,
+ 0x00,0x00,0x00,0x17,0x21,0x33,0x00,0x00,0x00,0x00,0x16,0x1F,0x00,0x00,0x00,0x00,
+ 0x07,0x00,0x00,0x00,0x1D,0x14,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x07,0x00,0x00,0x00,0x08,0x00,0x00,0x2A,0x11,0x00,0x0F,0x1F,0x00,0x00,0x00,
+ 0x08,0x00,0x00,0x00,0x00,0x08,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x13,
+ 0x00,0x00,0x17,0x00,0x00,0x00,0x14,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x19,0x00,0x00,0x17,0x00,0x00,0x00,0x1D,0x07,0x00,0x1D,0x00,0x00,0x00,0x08,0x1C,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x07,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x1E,0x1A,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0xAC,0xBC,0xBB,0xAA,
+ 0xAB,0xAE,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0xAB,0xBC,0xAA,0xBC,0xAC,0xAE,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x99,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
+ 0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,
+ 0x47,0x47,0x4D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x19,0x2D,0x2D,0x2D,0x2F,0x00,0x2D,0x2D,0x2D,0x2D,0x00,0x2D,
+ 0x2D,0x2D,0x2F,0x00,0x26,0x32,0x2D,0x2D,0x2D,0x00,0x12,0x1E,0x2D,0x2D,0x2D,0x00,
+ 0x13,0x00,0x2D,0x2B,0x00,0x12,0x00,0x00,0x00,0x00,0x19,0x2B,0x2B,0x2B,0x00,0x00,
+ 0x00,0x18,0x2B,0x2B,0x2B,0x00,0x00,0x2A,0x0F,0x00,0x00,0x12,0x2B,0x2B,0x2B,0x00,
+ 0x08,0x00,0x2B,0x2B,0x2B,0x00,0x07,0x00,0x00,0x00,0x2B,0x2B,0x2B,0x2B,0x2B,0x1A,
+ 0x17,0x00,0x18,0x2B,0x2B,0x2B,0x07,0x00,0x13,0x2B,0x2B,0x2B,0x2B,0x00,0x2A,0x07,
+ 0x00,0x00,0x00,0x12,0x2B,0x2B,0x2B,0x00,0x0F,0x00,0x1C,0x2B,0x2B,0x2B,0x08,0x00,
+ 0x00,0x2B,0x2B,0x2B,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x19,0x07,0x08,0x1D,0x12,
+ 0x2A,0x2A,0x2A,0x2A,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x2C,0x2A,0x2A,0x2A,0x2A,0x00,0x00,0x00,0x1C,0x2A,0x2A,0x2A,0x2A,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0xAA,0xAA,0xAA,0xAA,
+ 0xAC,0xAF,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0xAB,0xAA,0xAA,0xAA,0xAA,0xAE,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x99,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
+ 0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x4F,0x47,0x47,0x47,0x47,
+ 0x47,0x47,0x4D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x1A,0x28,0x27,0x27,0x27,0x2E,0x25,0x27,0x27,0x25,0x2E,0x27,
+ 0x27,0x27,0x27,0x0F,0x00,0x07,0x25,0x23,0x24,0x23,0x0F,0x08,0x04,0x25,0x28,0x26,
+ 0x11,0x00,0x24,0x28,0x28,0x10,0x00,0x00,0x00,0x00,0x17,0x28,0x28,0x28,0x1E,0x00,
+ 0x00,0x1C,0x28,0x28,0x28,0x28,0x28,0x0F,0x00,0x00,0x00,0x17,0x28,0x28,0x28,0x28,
+ 0x08,0x00,0x28,0x28,0x28,0x28,0x17,0x00,0x00,0x00,0x00,0x19,0x28,0x28,0x28,0x28,
+ 0x07,0x00,0x1A,0x28,0x28,0x28,0x1A,0x00,0x16,0x28,0x28,0x28,0x28,0x28,0x19,0x00,
+ 0x00,0x00,0x00,0x11,0x28,0x28,0x28,0x28,0x07,0x00,0x19,0x28,0x28,0x28,0x1C,0x00,
+ 0x00,0x28,0x28,0x28,0x08,0x00,0x00,0x00,0x00,0x00,0x07,0x26,0x17,0x00,0x00,0x0F,
+ 0x26,0x26,0x26,0x26,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x2A,0x26,0x26,0x26,0x26,0x00,0x00,0x07,0x26,0x26,0x26,0x26,0x26,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0xAC,0xA9,0xA9,0xA9,0xAA,
+ 0xAE,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0xAB,0xA9,0xA9,0xA9,0xA9,0xAC,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x9A,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
+ 0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x4D,0x47,0x47,0x47,0x47,
+ 0x47,0x47,0x4E,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x08,0x27,0x27,0x27,0x27,0x27,0x27,0x2B,0x27,0x27,0x27,0x27,
+ 0x27,0x27,0x18,0x08,0x00,0x16,0x27,0x27,0x27,0x27,0x0F,0x18,0x04,0x27,0x04,0x04,
+ 0x0F,0x00,0x04,0x25,0x25,0x07,0x0F,0x07,0x1E,0x00,0x07,0x25,0x25,0x25,0x1C,0x00,
+ 0x00,0x1E,0x25,0x25,0x25,0x25,0x0F,0x00,0x00,0x00,0x1E,0x1A,0x25,0x25,0x25,0x25,
+ 0x08,0x00,0x25,0x25,0x25,0x25,0x1A,0x00,0x00,0x07,0x0F,0x17,0x25,0x25,0x25,0x25,
+ 0x07,0x00,0x1C,0x25,0x25,0x25,0x17,0x00,0x18,0x25,0x25,0x25,0x25,0x25,0x18,0x00,
+ 0x00,0x00,0x00,0x07,0x25,0x25,0x25,0x25,0x07,0x00,0x07,0x25,0x25,0x25,0x17,0x00,
+ 0x00,0x25,0x25,0x25,0x18,0x00,0x00,0x00,0x00,0x00,0x07,0x22,0x22,0x17,0x00,0x11,
+ 0x22,0x22,0x22,0x22,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x08,0x07,0x22,0x22,0x22,0x22,0x00,0x12,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x87,0xA8,0xA8,0xA8,0xAB,
+ 0xAE,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0xAB,0xA8,0xA8,0xA8,0xA8,0xA8,0xAE,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x9A,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
+ 0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x49,0x47,0x47,0x47,0x47,
+ 0x47,0x49,0x4E,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x08,0x24,0x24,0x24,0x24,0x24,0x24,0x00,0x24,0x24,0x24,0x24,
+ 0x24,0x24,0x17,0x00,0x00,0x18,0x24,0x24,0x24,0x24,0x12,0x36,0x24,0x24,0x24,0x24,
+ 0x07,0x1E,0x24,0x22,0x22,0x22,0x22,0x22,0x33,0x00,0x0F,0x22,0x22,0x22,0x1A,0x00,
+ 0x00,0x00,0x22,0x22,0x22,0x22,0x07,0x0F,0x18,0x00,0x1E,0x08,0x23,0x23,0x23,0x23,
+ 0x07,0x08,0x23,0x23,0x23,0x23,0x08,0x00,0x07,0x23,0x23,0x08,0x23,0x23,0x23,0x23,
+ 0x13,0x00,0x1C,0x23,0x23,0x23,0x12,0x08,0x1A,0x22,0x22,0x22,0x22,0x23,0x0F,0x13,
+ 0x18,0x22,0x08,0x18,0x23,0x23,0x23,0x23,0x07,0x00,0x19,0x23,0x23,0x23,0x11,0x00,
+ 0x00,0x23,0x23,0x23,0x12,0x07,0x00,0x00,0x00,0x00,0x17,0x35,0x35,0x35,0x08,0x13,
+ 0x35,0x35,0x35,0x35,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x35,0x35,0x35,0x35,0x35,0x35,0x19,0x35,0x35,0x35,0x35,0x35,0x35,0x1C,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x86,0x8C,0x8C,0x8C,0xAC,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0xAB,0x8C,0x8C,0x8C,0x8C,0x8C,0xAB,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x9A,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
+ 0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x49,0x47,0x47,0x47,0x47,0x47,
+ 0x47,0x4C,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x08,0x36,0x36,0x36,0x36,0x36,0x26,0x00,0x36,0x36,0x36,0x36,
+ 0x36,0x16,0x00,0x00,0x00,0x1A,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x18,
+ 0x00,0x1D,0x36,0x35,0x35,0x35,0x35,0x35,0x33,0x00,0x16,0x35,0x35,0x35,0x18,0x00,
+ 0x00,0x1D,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x1E,0x08,0x35,0x35,0x35,0x35,
+ 0x35,0x08,0x35,0x35,0x35,0x35,0x35,0x00,0x25,0x35,0x35,0x35,0x35,0x35,0x35,0x1A,
+ 0x07,0x1D,0x1C,0x35,0x35,0x35,0x35,0x1A,0x08,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
+ 0x35,0x08,0x1E,0x08,0x35,0x35,0x35,0x35,0x35,0x08,0x00,0x35,0x35,0x35,0x35,0x08,
+ 0x00,0x35,0x35,0x35,0x35,0x08,0x00,0x00,0x00,0x00,0x18,0x34,0x34,0x34,0x0C,0x34,
+ 0x34,0x34,0x34,0x34,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x0C,0x1C,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9A,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x85,0x8B,0x8B,0x8B,0xAC,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0xAA,0x85,0x8B,0x8B,0x8B,0x8B,0x85,0xAE,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x9A,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
+ 0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x4D,0x49,0x47,0x47,0x47,0x47,0x47,0x47,
+ 0x49,0x4E,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x1C,0x34,0x34,0x34,0x34,0x34,0x34,0x1D,0x00,0x00,0x34,0x34,0x34,
+ 0x18,0x00,0x00,0x00,0x00,0x1D,0x1D,0x34,0x34,0x34,0x34,0x34,0x34,0x0C,0x07,0x00,
+ 0x00,0x1C,0x0C,0x33,0x33,0x33,0x33,0x33,0x07,0x00,0x18,0x33,0x33,0x33,0x16,0x00,
+ 0x00,0x08,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x08,0x1E,0x00,0x08,0x33,0x33,0x33,
+ 0x19,0x00,0x19,0x33,0x33,0x33,0x18,0x00,0x08,0x1E,0x33,0x33,0x07,0x08,0x1E,0x00,
+ 0x00,0x1D,0x1A,0x33,0x33,0x33,0x07,0x00,0x1C,0x1C,0x33,0x33,0x33,0x33,0x33,0x33,
+ 0x33,0x07,0x00,0x00,0x20,0x33,0x33,0x33,0x18,0x08,0x00,0x33,0x33,0x33,0x08,0x08,
+ 0x00,0x33,0x33,0x33,0x08,0x00,0x00,0x00,0x00,0x00,0x16,0x32,0x32,0x32,0x32,0x32,
+ 0x32,0x32,0x32,0x32,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,
+ 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x1C,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9A,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x84,0x83,0x83,0x83,0xAB,
+ 0xAE,0xAF,0xAF,0xAE,0xAA,0x85,0x82,0x83,0x82,0x83,0x83,0x87,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x9A,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
+ 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x49,
+ 0x4E,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x19,0x08,0x1C,0x1D,0x1E,0x1F,0x1C,0x00,0x00,0x1F,0x1D,0x1C,0x08,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x08,0x1D,0x1E,0x1F,0x00,0x1E,0x07,0x00,0x00,
+ 0x00,0x1D,0x18,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x1A,0x32,0x32,0x32,0x18,0x00,
+ 0x00,0x00,0x1C,0x18,0x07,0x08,0x1C,0x1E,0x1E,0x1E,0x00,0x00,0x1D,0x1E,0x17,0x07,
+ 0x00,0x00,0x1D,0x1E,0x17,0x07,0x00,0x00,0x00,0x00,0x1F,0x18,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x1D,0x18,0x18,0x00,0x00,0x00,0x1C,0x08,0x18,0x18,0x18,0x18,0x18,
+ 0x18,0x08,0x00,0x00,0x1D,0x18,0x18,0x18,0x00,0x00,0x00,0x1D,0x18,0x08,0x00,0x00,
+ 0x00,0x19,0x18,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x30,0x30,0x30,0x30,
+ 0x07,0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,
+ 0x07,0x18,0x1C,0x1E,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9A,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x83,0x83,0x83,0x83,0x86,
+ 0xAA,0xAC,0xAB,0x87,0x85,0x83,0x82,0x83,0x83,0x83,0x84,0xAE,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
+ 0x2B,0x2A,0x2C,0x2C,0x2B,0x2A,0x2A,0x2C,0x2B,0x2C,0x2A,0x2C,0x2B,0x2B,0x2B,0x2B,
+ 0x2B,0x9A,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
+ 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x49,0x4D,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x9F,0x2F,0x2D,
+ 0x2C,0x2B,0x2B,0x2C,0x2C,0x2C,0x2D,0x2D,0x2C,0x1D,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x19,0x08,0x19,0x31,0x31,0x31,0x1A,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x10,0x10,0x12,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,
+ 0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x2D,0x2B,0x29,0x29,0x28,0x9A,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x85,0x82,0x82,0x82,0x84,
+ 0x85,0x85,0x84,0x84,0x82,0x82,0x84,0x86,0x83,0x83,0x87,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2B,0x2C,0x2B,0x28,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x9A,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
+ 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x49,0x4D,0x4E,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x08,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x12,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x1D,0x1D,0x00,0x1D,0x1D,
+ 0x00,0x1D,0x1D,0x00,0x00,0x00,0x00,0x00,0x00,0x9A,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0xAC,0xF6,0x83,0xF6,0x83,
+ 0xF6,0x83,0xF6,0xF6,0x84,0x86,0xAC,0x85,0xF6,0x84,0xAD,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
+ 0x24,0x24,0x25,0x22,0x24,0x25,0x21,0x24,0x21,0x23,0x28,0x24,0x21,0x25,0x25,0x22,
+ 0x26,0x9A,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
+ 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x49,0x4A,0x4D,0x4E,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2B,0x29,
+ 0x28,0x26,0x04,0x04,0x25,0x25,0x23,0x28,0x23,0x1D,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x08,0x30,0x30,0x30,0x30,0x30,0x30,0x14,0x22,0x28,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x00,0x1D,0x00,
+ 0x1D,0x00,0x1D,0x00,0x2B,0x29,0x28,0x28,0x25,0x9A,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x86,0xF7,0xF7,0xF7,
+ 0xF7,0xF7,0xF7,0xF7,0x87,0x9F,0xAC,0xF7,0xF7,0x86,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2A,0x28,0x20,0x29,
+ 0x21,0x24,0x26,0x21,0x28,0x04,0x26,0x24,0x22,0x04,0x22,0x25,0x24,0x23,0x24,0x24,
+ 0x24,0x9B,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2B,0x29,
+ 0x25,0x23,0x24,0x24,0x25,0x25,0x23,0x28,0x25,0x1D,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x1C,0x25,0x25,0x25,0x25,0x32,0x30,0x33,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x00,0x1D,0x00,
+ 0x00,0x00,0x1D,0x00,0x2A,0x2A,0x25,0x28,0x26,0x9A,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x87,0x7C,0x7C,
+ 0x7C,0x7C,0x7C,0x87,0x9F,0x9F,0x87,0x7C,0x7C,0xAC,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2A,0x29,0x24,0x29,
+ 0x28,0x23,0x24,0x22,0x23,0x26,0x21,0x24,0x22,0x22,0x25,0x24,0x23,0x22,0x25,0x25,
+ 0x24,0x9B,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2A,0x28,
+ 0x24,0x28,0x25,0x22,0x21,0x25,0x21,0x22,0x26,0x1D,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x1E,0x1E,0x00,0x00,0x00,0x2A,0x1A,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x2C,0x29,0x28,0x26,0x25,0x9A,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0xAC,0x87,
+ 0x87,0x87,0xAC,0x9F,0x9F,0xAC,0xFC,0xFC,0x87,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2B,0x27,0x04,0x29,
+ 0x24,0x23,0x24,0x23,0x22,0x25,0x23,0x04,0x24,0x25,0x24,0x25,0x23,0x04,0x25,0x04,
+ 0x24,0x9B,0x9F,0x9F,0x4C,0x47,0x47,0x9F,0x9F,0x4C,0x47,0x4C,0x9F,0x9F,0x47,0x47,
+ 0x9F,0x9F,0x47,0x47,0x47,0x9F,0x9F,0x47,0x9F,0x47,0x9F,0x9F,0x9F,0x47,0x47,0x47,
+ 0x9F,0x9F,0x9F,0x47,0x47,0x4C,0x9F,0x9F,0x9F,0x47,0x47,0x9F,0x9F,0x9F,0x2B,0x2A,
+ 0x04,0x22,0x23,0x22,0x26,0x22,0x26,0x25,0x28,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x2B,0x29,0x04,0x24,0x04,0x9A,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x87,0x7D,0x7D,0xAC,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2A,0x2A,0x24,0x29,
+ 0x28,0x24,0x23,0x25,0x22,0x22,0x21,0x22,0x24,0x22,0x23,0x23,0x23,0x24,0x22,0x25,
+ 0x28,0x9B,0x9F,0x9F,0x47,0x4B,0x9F,0x9F,0x9F,0x47,0x9F,0x47,0x9F,0x9F,0x47,0x9F,
+ 0x9F,0x9F,0x9F,0x47,0x9F,0x9F,0x9F,0x47,0x9F,0x47,0x9F,0x9F,0x9F,0x47,0x9F,0x47,
+ 0x9F,0x9F,0x9F,0x47,0x9F,0x47,0x9F,0x9F,0x9F,0x47,0x9F,0x9F,0x9F,0x9F,0x2C,0x2A,
+ 0x23,0x24,0x25,0x24,0x25,0x23,0x26,0x25,0x04,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,
+ 0x1D,0x1D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x1D,0x1D,0x1D,0x00,
+ 0x1D,0x1D,0x1D,0x00,0x1D,0x1D,0x1D,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x1D,0x1D,0x1D,0x00,0x1D,0x1D,0x1D,0x00,0x1D,0x1D,0x1D,0x1D,0x1D,
+ 0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x1D,0x1D,0x00,0x1D,0x1D,0x1D,0x00,0x1D,0x1D,
+ 0x1D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x2A,0x28,0x26,0x04,0x26,0x9A,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0xAC,0x6B,0x6B,0x87,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2B,0x2A,0x29,0x29,
+ 0x26,0x22,0x22,0x04,0x24,0x25,0x21,0x23,0x22,0x24,0x24,0x04,0x26,0x25,0x25,0x23,
+ 0x26,0x9B,0x9F,0x9F,0x9F,0x47,0x9F,0x9F,0x9F,0x47,0x9F,0x47,0x9F,0x9F,0x47,0x47,
+ 0x9F,0x9F,0x9F,0x47,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x9F,0x9F,0x9F,0x47,0x47,0x47,
+ 0x9F,0x9F,0x9F,0x47,0x47,0x9F,0x9F,0x9F,0x9F,0x47,0x47,0x9F,0x9F,0x9F,0x2A,0x2A,
+ 0x22,0x22,0x24,0x25,0x22,0x20,0x22,0x22,0x25,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,
+ 0x00,0x00,0x1D,0x00,0x00,0x00,0x1D,0x1D,0x00,0x00,0x1D,0x1D,0x00,0x00,0x1D,0x1D,
+ 0x00,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x1D,0x00,0x00,0x1D,0x00,0x00,0x1D,0x1D,0x00,
+ 0x1D,0x00,0x1D,0x00,0x1D,0x1D,0x1D,0x00,0x00,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,
+ 0x1D,0x00,0x1D,0x00,0x00,0x1F,0x1D,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x1D,0x1D,
+ 0x00,0x00,0x00,0x1D,0x00,0x00,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x00,0x00,0x1D,
+ 0x00,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x2A,0x28,0x26,0x25,0x25,0x9A,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x6B,0x6B,0x6B,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2C,0x2A,0x04,0x29,
+ 0x24,0x23,0x23,0x25,0x26,0x24,0x23,0x24,0x23,0x24,0x04,0x25,0x25,0x24,0x23,0x04,
+ 0x24,0x9B,0x9F,0x9F,0x9F,0x4D,0x47,0x9F,0x9F,0x47,0x9F,0x47,0x9F,0x9F,0x47,0x9F,
+ 0x9F,0x9F,0x9F,0x47,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x9F,0x9F,0x9F,0x47,0x9F,0x47,
+ 0x9F,0x9F,0x9F,0x47,0x9F,0x47,0x9F,0x9F,0x9F,0x47,0x9F,0x9F,0x9F,0x9F,0x2A,0x2A,
+ 0x22,0x20,0x25,0x22,0x26,0x23,0x04,0x23,0x28,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x1F,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,
+ 0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1F,0x1D,0x00,0x00,
+ 0x1D,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x00,0x00,0x1D,0x00,0x00,0x1D,0x00,0x1D,0x00,
+ 0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x00,0x00,
+ 0x1D,0x00,0x1D,0x00,0x00,0x1D,0x00,0x00,0x00,0x00,0x1D,0x00,0x1D,0x1D,0x1D,0x00,
+ 0x1D,0x1D,0x1D,0x00,0x1F,0x1D,0x1F,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x1D,0x00,
+ 0x1D,0x00,0x00,0x1D,0x1D,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x1D,0x1D,0x00,0x1D,
+ 0x00,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x1D,
+ 0x00,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,
+ 0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1F,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x2A,0x27,0x04,0x23,0x24,0x9A,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x7F,0x6B,0x6B,0x7E,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2C,0x2A,0x26,0x29,
+ 0x28,0x23,0x24,0x24,0x23,0x22,0x22,0x22,0x23,0x22,0x04,0x28,0x24,0x26,0x28,0x26,
+ 0x23,0x9C,0x9F,0x9F,0x9F,0x4B,0x47,0x9F,0x9F,0x47,0x9F,0x47,0x9F,0x9F,0x47,0x9F,
+ 0x9F,0x9F,0x9F,0x47,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x9F,0x9F,0x9F,0x47,0x9F,0x47,
+ 0x9F,0x9F,0x9F,0x47,0x9F,0x47,0x9F,0x9F,0x9F,0x47,0x9F,0x9F,0x9F,0x9F,0x2C,0x28,
+ 0x22,0x22,0x25,0x23,0x23,0x22,0x23,0x25,0x22,0x1E,0x00,0x00,0x18,0x08,0x1D,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x1D,
+ 0x1F,0x00,0x00,0x1D,0x00,0x1D,0x00,0x00,0x00,0x1D,0x00,0x00,0x1D,0x00,0x1D,0x1D,
+ 0x00,0x00,0x00,0x1D,0x00,0x00,0x1D,0x1D,0x00,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,
+ 0x1D,0x1D,0x1D,0x00,0x00,0x1D,0x00,0x00,0x00,0x00,0x1D,0x00,0x00,0x00,0x1D,0x00,
+ 0x00,0x00,0x1D,0x00,0x1D,0x1D,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x1D,0x00,
+ 0x1D,0x00,0x00,0x00,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x00,0x00,0x1D,
+ 0x00,0x00,0x1D,0x1D,0x1D,0x00,0x1D,0x1D,0x1D,0x00,0x1D,0x1D,0x00,0x00,0x1D,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,
+ 0x08,0x1D,0x00,0x00,0x2C,0x29,0x20,0x24,0x24,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x6C,0x6C,0x6C,0x7F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2C,0x2A,0x28,0x29,
+ 0x22,0x28,0x26,0x28,0x26,0x28,0x28,0x25,0x22,0x25,0x04,0x28,0x26,0x25,0x28,0x24,
+ 0x26,0x9C,0x9F,0x9F,0x47,0x47,0x4C,0x9F,0x9F,0x4C,0x47,0x4C,0x9F,0x9F,0x47,0x9F,
+ 0x9F,0x9F,0x9F,0x47,0x9F,0x9F,0x9F,0x47,0x9F,0x47,0x9F,0x9F,0x9F,0x47,0x9F,0x47,
+ 0x9F,0x9F,0x9F,0x47,0x9F,0x47,0x9F,0x9F,0x9F,0x47,0x47,0x9F,0x9F,0x9F,0x2B,0x2A,
+ 0x20,0x22,0x22,0x22,0x26,0x22,0x24,0x26,0x24,0x1E,0x00,0x00,0x08,0x1D,0x1F,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x00,
+ 0x1D,0x1D,0x00,0x1D,0x00,0x00,0x1D,0x1D,0x00,0x00,0x1D,0x1D,0x00,0x00,0x1D,0x00,
+ 0x00,0x00,0x00,0x1D,0x00,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x00,0x1D,0x1D,0x00,
+ 0x1D,0x00,0x1D,0x00,0x00,0x1D,0x00,0x00,0x00,0x00,0x1D,0x00,0x00,0x00,0x1D,0x00,
+ 0x00,0x00,0x1D,0x00,0x1D,0x1D,0x1D,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x1D,0x1D,
+ 0x00,0x00,0x00,0x1D,0x1D,0x1D,0x00,0x1D,0x1D,0x1D,0x00,0x1D,0x00,0x00,0x00,0x1D,
+ 0x00,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x1D,
+ 0x1D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,
+ 0x1D,0x1F,0x00,0x00,0x2C,0x2A,0x26,0x25,0x22,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x6D,0x6D,0x6D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2B,0x28,0x28,0x29,
+ 0x28,0x24,0x25,0x28,0x28,0x24,0x28,0x28,0x28,0x26,0x23,0x04,0x25,0x26,0x25,0x04,
+ 0x28,0x9C,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2B,0x27,
+ 0x22,0x24,0x20,0x20,0x26,0x20,0x24,0x22,0x20,0x1E,0x00,0x00,0x1D,0x1F,0x1F,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,
+ 0x00,0x00,0x1D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,
+ 0x1F,0x1F,0x00,0x00,0x2B,0x2A,0x04,0x04,0x25,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2C,0x2B,0x24,0x29,
+ 0x28,0x25,0x26,0x25,0x25,0x24,0x25,0x24,0x25,0x25,0x23,0x26,0x04,0x25,0x25,0x24,
+ 0x25,0x9C,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2B,0x2A,
+ 0x25,0x28,0x22,0x25,0x24,0x22,0x20,0x24,0x22,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,
+ 0x1D,0x1D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x2C,0x2A,0x26,0x28,0x28,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2C,0x2A,0x25,0x29,
+ 0x22,0x25,0x25,0x25,0x23,0x22,0x25,0x25,0x22,0x28,0x25,0x25,0x28,0x25,0x23,0x28,
+ 0x28,0x9C,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2B,0x29,
+ 0x26,0x28,0x25,0x24,0x23,0x26,0x22,0x25,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x2A,0x2B,0x23,0x24,0x26,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2B,0x29,0x28,0x29,
+ 0x23,0x22,0x22,0x25,0x25,0x25,0x22,0x25,0x23,0x26,0x28,0x22,0x25,0x23,0x28,0x28,
+ 0x26,0x22,0x2D,0x2A,0x2A,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2A,0x2B,0x2C,0x2A,0x2A,
+ 0x2C,0x2B,0x2A,0x2C,0x2B,0x2A,0x2A,0x2C,0x2A,0x2B,0x2B,0x2A,0x2A,0x2A,0x2B,0x2B,
+ 0x2A,0x2A,0x2B,0x2A,0x2B,0x2B,0x2A,0x2B,0x2C,0x2B,0x2A,0x2A,0x2C,0x2A,0x2C,0x29,
+ 0x26,0x23,0x25,0x25,0x23,0x25,0x22,0x25,0x23,0x25,0x2B,0x2A,0x2B,0x2B,0x2A,0x2A,
+ 0x2A,0x2A,0x2A,0x2C,0x2A,0x2A,0x2A,0x2A,0x2B,0x2A,0x29,0x29,0x2A,0x2A,0x2A,0x2A,
+ 0x2C,0x2A,0x2B,0x2A,0x2B,0x2A,0x2A,0x2B,0x2C,0x2C,0x2A,0x2B,0x2C,0x2B,0x2B,0x2B,
+ 0x2C,0x2C,0x2C,0x2D,0x2D,0x2D,0x2C,0x2D,0x2C,0x2C,0x2B,0x2B,0x2B,0x2C,0x2B,0x2C,
+ 0x2A,0x2B,0x2A,0x2B,0x2C,0x2A,0x2C,0x2B,0x2C,0x2B,0x2C,0x2C,0x2C,0x2B,0x2C,0x2B,
+ 0x2B,0x2C,0x2B,0x2B,0x29,0x2A,0x2B,0x2C,0x2C,0x2C,0x2C,0x2C,0x2B,0x2A,0x2B,0x2C,
+ 0x2C,0x2D,0x2C,0x2C,0x2C,0x2C,0x2C,0x2D,0x2C,0x2C,0x2C,0x2D,0x2C,0x2C,0x2C,0x2C,
+ 0x2C,0x2D,0x2C,0x2C,0x2D,0x2C,0x2C,0x2B,0x2C,0x2C,0x2C,0x2B,0x2B,0x2B,0x2B,0x2C,
+ 0x2C,0x2A,0x2C,0x2C,0x2D,0x2C,0x2B,0x2C,0x2B,0x2C,0x2C,0x2B,0x2B,0x2B,0x2C,0x2B,
+ 0x2B,0x2C,0x29,0x2C,0x2B,0x2C,0x2B,0x2C,0x2C,0x2C,0x2B,0x2B,0x2C,0x2A,0x2C,0x2B,
+ 0x2B,0x2C,0x2B,0x2A,0x2A,0x2A,0x2B,0x29,0x2A,0x2A,0x2B,0x2A,0x2A,0x2A,0x2B,0x2C,
+ 0x2B,0x2C,0x2C,0x2B,0x2C,0x2A,0x22,0x22,0x04,0x26,0x29,0x2D,0x2C,0x2A,0x2C,0x2B,
+ 0x2B,0x2C,0x2C,0x2C,0x2C,0x2B,0x2C,0x2B,0x2C,0x2B,0x2C,0x2B,0x2B,0x2C,0x2B,0x2A,
+ 0x2B,0x2C,0x2B,0x2B,0x2B,0x2A,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2B,0x2B,0x2C,0x2B,
+ 0x2B,0x2B,0x2C,0x2B,0x2C,0x2A,0x2B,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2B,0x2B,0x2B,
+ 0x2B,0x2C,0x2B,0x2C,0x2C,0x2B,0x2C,0x2C,0x2C,0x2C,0x2B,0x2C,0x2E,0x2A,0x28,0x29,
+ 0x22,0x04,0x28,0x21,0x25,0x23,0x25,0x25,0x25,0x22,0x20,0x25,0x23,0x22,0x22,0x23,
+ 0x24,0x26,0x23,0x28,0x2D,0x28,0x29,0x2A,0x2A,0x29,0x29,0x2A,0x2A,0x2A,0x28,0x2A,
+ 0x29,0x29,0x29,0x29,0x28,0x28,0x29,0x2A,0x29,0x29,0x2A,0x29,0x2A,0x2A,0x2A,0x2A,
+ 0x28,0x29,0x2A,0x28,0x27,0x28,0x28,0x29,0x28,0x29,0x29,0x29,0x29,0x29,0x28,0x2A,
+ 0x25,0x25,0x25,0x22,0x26,0x22,0x22,0x23,0x22,0x25,0x24,0x29,0x2B,0x28,0x27,0x28,
+ 0x29,0x28,0x28,0x29,0x29,0x27,0x2A,0x27,0x26,0x27,0x28,0x27,0x27,0x27,0x04,0x28,
+ 0x2A,0x2A,0x28,0x2A,0x29,0x29,0x29,0x28,0x28,0x28,0x29,0x29,0x27,0x28,0x2A,0x2A,
+ 0x29,0x2A,0x28,0x2A,0x2A,0x2A,0x2A,0x2A,0x28,0x28,0x29,0x2A,0x2A,0x2A,0x2C,0x29,
+ 0x28,0x29,0x28,0x28,0x2A,0x2A,0x2A,0x2A,0x27,0x28,0x29,0x2A,0x2A,0x29,0x2A,0x29,
+ 0x29,0x2A,0x29,0x27,0x26,0x2A,0x29,0x2A,0x29,0x29,0x2A,0x29,0x28,0x2A,0x28,0x27,
+ 0x2A,0x2A,0x2A,0x29,0x2A,0x28,0x2A,0x2A,0x2A,0x2A,0x28,0x29,0x2A,0x29,0x29,0x2A,
+ 0x29,0x29,0x29,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x29,0x29,0x29,0x2A,0x2A,0x29,0x29,
+ 0x29,0x2A,0x29,0x29,0x2C,0x28,0x2A,0x29,0x2A,0x29,0x28,0x29,0x28,0x28,0x2A,0x29,
+ 0x29,0x28,0x27,0x29,0x2A,0x2A,0x29,0x2A,0x29,0x29,0x29,0x28,0x2A,0x29,0x29,0x2A,
+ 0x29,0x29,0x27,0x27,0x26,0x29,0x29,0x28,0x29,0x2A,0x29,0x29,0x29,0x29,0x2A,0x2A,
+ 0x29,0x2A,0x29,0x2A,0x28,0x2B,0x28,0x24,0x25,0x24,0x04,0x28,0x28,0x2D,0x2A,0x29,
+ 0x2A,0x2A,0x29,0x2A,0x2A,0x2A,0x29,0x2A,0x2A,0x2A,0x2A,0x29,0x2A,0x29,0x29,0x29,
+ 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x29,0x29,0x29,0x2A,0x29,0x2A,0x29,0x2A,0x29,0x29,
+ 0x28,0x2A,0x2A,0x29,0x29,0x2A,0x2A,0x2A,0x2A,0x28,0x29,0x2A,0x28,0x2A,0x2A,0x2A,
+ 0x2B,0x2A,0x2A,0x2A,0x2A,0x2B,0x2A,0x2A,0x2A,0x29,0x2A,0x29,0x2A,0x2A,0x28,0x29,
+ 0x24,0x20,0x25,0x25,0x24,0x24,0x20,0x22,0x23,0x25,0x23,0x26,0x25,0x25,0x23,0x20,
+ 0x24,0x21,0x22,0x25,0x24,0x23,0x23,0x25,0x04,0x22,0x28,0x26,0x26,0x26,0x04,0x25,
+ 0x26,0x26,0x28,0x25,0x28,0x28,0x22,0x04,0x22,0x26,0x24,0x25,0x26,0x25,0x26,0x25,
+ 0x04,0x22,0x25,0x22,0x23,0x23,0x04,0x23,0x25,0x22,0x23,0x23,0x28,0x22,0x23,0x24,
+ 0x24,0x24,0x04,0x22,0x25,0x23,0x25,0x22,0x24,0x25,0x25,0x24,0x24,0x22,0x21,0x25,
+ 0x23,0x25,0x23,0x04,0x24,0x28,0x04,0x25,0x22,0x22,0x26,0x24,0x24,0x23,0x25,0x25,
+ 0x24,0x04,0x23,0x25,0x23,0x20,0x23,0x22,0x20,0x24,0x22,0x25,0x25,0x24,0x25,0x26,
+ 0x25,0x26,0x04,0x25,0x25,0x25,0x25,0x28,0x24,0x25,0x26,0x24,0x28,0x28,0x25,0x25,
+ 0x25,0x04,0x25,0x28,0x24,0x04,0x23,0x28,0x24,0x23,0x25,0x25,0x26,0x28,0x28,0x04,
+ 0x26,0x24,0x24,0x23,0x25,0x28,0x25,0x26,0x04,0x28,0x28,0x28,0x04,0x25,0x23,0x26,
+ 0x25,0x25,0x04,0x26,0x26,0x25,0x23,0x28,0x25,0x25,0x23,0x24,0x23,0x26,0x26,0x28,
+ 0x26,0x28,0x28,0x28,0x25,0x04,0x04,0x28,0x28,0x25,0x28,0x04,0x26,0x28,0x28,0x04,
+ 0x28,0x28,0x28,0x04,0x28,0x28,0x04,0x28,0x04,0x26,0x25,0x23,0x24,0x26,0x24,0x26,
+ 0x24,0x22,0x04,0x26,0x04,0x28,0x04,0x04,0x25,0x26,0x24,0x26,0x22,0x24,0x26,0x26,
+ 0x28,0x25,0x24,0x24,0x28,0x04,0x26,0x25,0x25,0x26,0x04,0x28,0x04,0x04,0x28,0x26,
+ 0x28,0x04,0x25,0x26,0x04,0x22,0x24,0x24,0x26,0x28,0x26,0x24,0x24,0x24,0x04,0x04,
+ 0x04,0x26,0x25,0x23,0x25,0x26,0x28,0x04,0x04,0x28,0x26,0x28,0x28,0x28,0x28,0x27,
+ 0x28,0x25,0x29,0x25,0x28,0x28,0x26,0x25,0x26,0x26,0x28,0x24,0x26,0x28,0x04,0x28,
+ 0x04,0x04,0x04,0x04,0x28,0x28,0x28,0x26,0x04,0x25,0x28,0x28,0x25,0x24,0x28,0x29,
+ 0x28,0x25,0x28,0x25,0x28,0x26,0x04,0x27,0x27,0x28,0x27,0x27,0x27,0x28,0x04,0x29,
+ 0x23,0x26,0x26,0x04,0x25,0x04,0x26,0x25,0x25,0x23,0x25,0x26,0x25,0x28,0x23,0x22,
+ 0x20,0x24,0x25,0x25,0x21,0x26,0x23,0x28,0x24,0x28,0x25,0x28,0x28,0x25,0x04,0x04,
+ 0x04,0x24,0x25,0x25,0x24,0x26,0x24,0x28,0x04,0x26,0x25,0x04,0x26,0x25,0x25,0x25,
+ 0x21,0x28,0x24,0x23,0x26,0x24,0x24,0x25,0x25,0x23,0x23,0x26,0x23,0x22,0x25,0x28,
+ 0x25,0x23,0x24,0x25,0x22,0x04,0x23,0x04,0x22,0x23,0x24,0x24,0x23,0x04,0x24,0x26,
+ 0x25,0x23,0x25,0x04,0x22,0x26,0x28,0x23,0x23,0x23,0x25,0x04,0x23,0x22,0x20,0x22,
+ 0x20,0x22,0x22,0x04,0x22,0x24,0x24,0x24,0x23,0x23,0x04,0x24,0x22,0x23,0x20,0x20,
+ 0x22,0x20,0x23,0x23,0x22,0x21,0x28,0x25,0x24,0x25,0x25,0x25,0x22,0x28,0x28,0x25,
+ 0x28,0x28,0x24,0x24,0x25,0x04,0x25,0x25,0x23,0x21,0x22,0x25,0x24,0x25,0x23,0x25,
+ 0x25,0x24,0x22,0x22,0x25,0x04,0x25,0x04,0x04,0x28,0x23,0x25,0x04,0x25,0x28,0x24,
+ 0x25,0x24,0x04,0x22,0x26,0x25,0x25,0x26,0x25,0x24,0x26,0x26,0x26,0x28,0x28,0x24,
+ 0x04,0x27,0x25,0x25,0x29,0x28,0x04,0x29,0x28,0x04,0x28,0x28,0x24,0x28,0x28,0x28,
+ 0x28,0x04,0x28,0x28,0x04,0x28,0x25,0x24,0x24,0x25,0x25,0x25,0x04,0x25,0x22,0x22,
+ 0x23,0x24,0x28,0x24,0x26,0x25,0x28,0x25,0x26,0x24,0x28,0x04,0x24,0x26,0x22,0x25,
+ 0x22,0x22,0x25,0x24,0x25,0x26,0x25,0x28,0x25,0x04,0x25,0x24,0x26,0x26,0x28,0x28,
+ 0x25,0x26,0x25,0x25,0x25,0x26,0x04,0x25,0x25,0x04,0x28,0x28,0x28,0x26,0x26,0x26,
+ 0x28,0x24,0x25,0x25,0x25,0x25,0x26,0x28,0x26,0x26,0x04,0x25,0x04,0x25,0x25,0x28,
+ 0x28,0x2A,0x28,0x28,0x28,0x28,0x28,0x25,0x04,0x26,0x28,0x24,0x26,0x27,0x28,0x28,
+ 0x28,0x28,0x04,0x28,0x28,0x24,0x28,0x26,0x04,0x28,0x25,0x29,0x04,0x26,0x04,0x25,
+ 0x28,0x28,0x28,0x04,0x26,0x24,0x26,0x28,0x04,0x28,0x04,0x28,0x04,0x04,0x25,0x29,
+ 0x24,0x28,0x26,0x28,0x26,0x26,0x25,0x26,0x22,0x28,0x23,0x25,0x25,0x22,0x22,0x20,
+ 0x24,0x04,0x25,0x23,0x25,0x04,0x25,0x24,0x22,0x26,0x23,0x04,0x26,0x25,0x24,0x23,
+ 0x25,0x04,0x26,0x21,0x28,0x24,0x28,0x25,0x25,0x25,0x25,0x25,0x25,0x24,0x25,0x28,
+ 0x24,0x28,0x26,0x25,0x23,0x25,0x22,0x25,0x24,0x22,0x22,0x25,0x28,0x23,0x25,0x24,
+ 0x04,0x25,0x24,0x24,0x28,0x25,0x23,0x22,0x25,0x26,0x22,0x25,0x23,0x22,0x25,0x24,
+ 0x26,0x26,0x24,0x25,0x23,0x23,0x24,0x26,0x25,0x24,0x22,0x24,0x22,0x25,0x21,0x22,
+ 0x20,0x25,0x04,0x22,0x25,0x22,0x25,0x22,0x24,0x04,0x28,0x22,0x22,0x26,0x26,0x24,
+ 0x28,0x24,0x23,0x26,0x24,0x23,0x23,0x25,0x24,0x25,0x04,0x04,0x23,0x22,0x23,0x25,
+ 0x23,0x23,0x28,0x24,0x21,0x22,0x25,0x24,0x24,0x22,0x22,0x23,0x26,0x24,0x20,0x04,
+ 0x24,0x20,0x28,0x25,0x25,0x26,0x26,0x28,0x28,0x26,0x22,0x26,0x04,0x28,0x25,0x26,
+ 0x28,0x04,0x25,0x28,0x25,0x23,0x26,0x26,0x24,0x26,0x04,0x04,0x04,0x28,0x28,0x29,
+ 0x29,0x04,0x25,0x22,0x28,0x26,0x26,0x28,0x24,0x04,0x28,0x25,0x28,0x04,0x25,0x24,
+ 0x25,0x28,0x28,0x29,0x24,0x25,0x24,0x28,0x04,0x26,0x26,0x26,0x22,0x24,0x22,0x24,
+ 0x28,0x25,0x04,0x23,0x25,0x04,0x25,0x04,0x28,0x26,0x26,0x25,0x24,0x25,0x04,0x26,
+ 0x28,0x04,0x24,0x26,0x28,0x04,0x25,0x28,0x28,0x26,0x27,0x22,0x04,0x24,0x28,0x28,
+ 0x26,0x26,0x25,0x28,0x28,0x26,0x26,0x26,0x26,0x24,0x25,0x04,0x28,0x04,0x04,0x26,
+ 0x28,0x27,0x23,0x24,0x26,0x24,0x28,0x26,0x28,0x28,0x28,0x29,0x29,0x26,0x29,0x29,
+ 0x28,0x28,0x26,0x28,0x24,0x28,0x28,0x28,0x26,0x28,0x28,0x28,0x04,0x25,0x25,0x25,
+ 0x28,0x29,0x28,0x28,0x28,0x04,0x29,0x28,0x28,0x28,0x28,0x26,0x28,0x28,0x28,0x27,
+ 0x26,0x04,0x24,0x25,0x04,0x25,0x26,0x28,0x28,0x28,0x28,0x25,0x26,0x28,0x26,0x29,
+ 0x28,0x04,0x25,0x26,0x23,0x22,0x24,0x23,0x04,0x25,0x28,0x28,0x28,0x23,0x21,0x24,
+ 0x25,0x25,0x22,0x24,0x22,0x25,0x22,0x26,0x21,0x26,0x24,0x25,0x25,0x24,0x23,0x23,
+ 0x26,0x24,0x25,0x25,0x25,0x28,0x26,0x25,0x22,0x26,0x22,0x22,0x26,0x25,0x26,0x26,
+ 0x28,0x26,0x24,0x21,0x25,0x26,0x22,0x26,0x23,0x24,0x25,0x23,0x24,0x23,0x21,0x22,
+ 0x23,0x25,0x26,0x25,0x25,0x22,0x26,0x22,0x23,0x23,0x24,0x04,0x28,0x25,0x25,0x28,
+ 0x22,0x23,0x23,0x24,0x26,0x22,0x25,0x22,0x22,0x23,0x24,0x24,0x25,0x25,0x25,0x24,
+ 0x22,0x24,0x25,0x23,0x20,0x25,0x21,0x21,0x23,0x26,0x04,0x25,0x23,0x28,0x22,0x04,
+ 0x25,0x28,0x23,0x04,0x20,0x25,0x22,0x20,0x23,0x26,0x04,0x22,0x25,0x23,0x25,0x24,
+ 0x24,0x24,0x23,0x25,0x22,0x22,0x22,0x25,0x25,0x22,0x22,0x20,0x22,0x20,0x22,0x26,
+ 0x23,0x26,0x22,0x24,0x25,0x25,0x26,0x25,0x28,0x26,0x23,0x23,0x25,0x24,0x04,0x25,
+ 0x23,0x28,0x22,0x26,0x24,0x04,0x28,0x04,0x26,0x24,0x28,0x28,0x25,0x04,0x25,0x28,
+ 0x25,0x04,0x25,0x25,0x28,0x26,0x04,0x28,0x25,0x25,0x28,0x28,0x04,0x28,0x23,0x28,
+ 0x22,0x28,0x28,0x25,0x24,0x28,0x26,0x24,0x26,0x04,0x28,0x23,0x24,0x25,0x25,0x25,
+ 0x24,0x25,0x22,0x25,0x26,0x28,0x25,0x24,0x26,0x25,0x28,0x28,0x04,0x28,0x24,0x25,
+ 0x22,0x22,0x24,0x24,0x24,0x26,0x26,0x28,0x28,0x28,0x28,0x24,0x28,0x28,0x28,0x26,
+ 0x26,0x26,0x24,0x22,0x28,0x26,0x27,0x26,0x28,0x28,0x28,0x28,0x27,0x25,0x26,0x26,
+ 0x28,0x28,0x26,0x28,0x25,0x28,0x04,0x28,0x04,0x28,0x28,0x28,0x28,0x26,0x28,0x25,
+ 0x25,0x28,0x25,0x28,0x25,0x28,0x28,0x29,0x29,0x26,0x28,0x28,0x24,0x26,0x29,0x28,
+ 0x28,0x04,0x28,0x24,0x04,0x26,0x28,0x28,0x28,0x26,0x25,0x27,0x26,0x26,0x26,0x25,
+ 0x26,0x04,0x04,0x28,0x28,0x04,0x24,0x04,0x04,0x23,0x25,0x22,0x24,0x28,0x26,0x29,
+ 0x28,0x28,0x23,0x28,0x24,0x28,0x25,0x28,0x26,0x22,0x22,0x24,0x24,0x25,0x25,0x24,
+ 0x22,0x26,0x25,0x26,0x24,0x24,0x25,0x04,0x26,0x23,0x23,0x21,0x04,0x26,0x23,0x26,
+ 0x25,0x28,0x21,0x04,0x24,0x25,0x26,0x04,0x26,0x23,0x24,0x25,0x25,0x24,0x25,0x25,
+ 0x26,0x25,0x28,0x26,0x28,0x28,0x25,0x25,0x04,0x25,0x24,0x25,0x28,0x25,0x25,0x04,
+ 0x22,0x25,0x22,0x21,0x22,0x22,0x24,0x23,0x22,0x24,0x22,0x21,0x25,0x21,0x22,0x23,
+ 0x23,0x23,0x24,0x22,0x23,0x23,0x28,0x22,0x23,0x25,0x23,0x25,0x24,0x25,0x04,0x25,
+ 0x25,0x22,0x22,0x24,0x21,0x24,0x25,0x24,0x24,0x22,0x28,0x25,0x24,0x25,0x23,0x23,
+ 0x22,0x24,0x24,0x04,0x24,0x22,0x24,0x24,0x24,0x28,0x25,0x22,0x26,0x21,0x26,0x23,
+ 0x24,0x23,0x24,0x22,0x26,0x22,0x25,0x20,0x23,0x25,0x23,0x24,0x26,0x25,0x28,0x25,
+ 0x25,0x25,0x28,0x28,0x26,0x25,0x28,0x25,0x25,0x28,0x04,0x28,0x29,0x28,0x28,0x26,
+ 0x25,0x26,0x26,0x28,0x28,0x25,0x24,0x25,0x28,0x04,0x28,0x04,0x22,0x25,0x26,0x26,
+ 0x28,0x28,0x24,0x26,0x28,0x26,0x28,0x26,0x28,0x28,0x28,0x28,0x25,0x28,0x28,0x28,
+ 0x28,0x25,0x04,0x28,0x25,0x26,0x26,0x26,0x04,0x26,0x25,0x25,0x24,0x24,0x04,0x04,
+ 0x27,0x25,0x28,0x28,0x26,0x28,0x24,0x24,0x25,0x27,0x25,0x04,0x28,0x28,0x26,0x23,
+ 0x24,0x28,0x28,0x28,0x28,0x04,0x04,0x26,0x23,0x28,0x22,0x26,0x28,0x24,0x25,0x25,
+ 0x23,0x25,0x28,0x28,0x25,0x28,0x28,0x26,0x28,0x28,0x27,0x26,0x28,0x26,0x24,0x26,
+ 0x28,0x28,0x28,0x28,0x2A,0x28,0x29,0x29,0x28,0x28,0x28,0x28,0x26,0x28,0x28,0x29,
+ 0x23,0x28,0x26,0x28,0x28,0x04,0x28,0x04,0x28,0x28,0x28,0x28,0x04,0x26,0x04,0x28,
+ 0x28,0x28,0x28,0x28,0x27,0x25,0x26,0x24,0x25,0x28,0x28,0x28,0x26,0x25,0x26,0x24,
+ 0x04,0x26,0x27,0x28,0x28,0x28,0x04,0x28,0x28,0x27,0x27,0x25,0x25,0x27,0x04,0x29,
+ 0x23,0x23,0x23,0x21,0x23,0x24,0x25,0x24,0x23,0x25,0x20,0x20,0x24,0x21,0x25,0x22,
+ 0x25,0x25,0x22,0x24,0x23,0x24,0x26,0x22,0x24,0x23,0x26,0x25,0x24,0x25,0x22,0x23,
+ 0x25,0x04,0x28,0x26,0x25,0x25,0x24,0x25,0x26,0x24,0x25,0x26,0x25,0x22,0x25,0x26,
+ 0x22,0x23,0x24,0x26,0x04,0x25,0x25,0x28,0x23,0x25,0x25,0x25,0x04,0x23,0x22,0x04,
+ 0x24,0x25,0x20,0x24,0x20,0x20,0x20,0x25,0x20,0x20,0x24,0x20,0x22,0x20,0x24,0x20,
+ 0x25,0x20,0x25,0x20,0x24,0x20,0x23,0x25,0x24,0x23,0x24,0x28,0x24,0x25,0x25,0x23,
+ 0x25,0x04,0x26,0x25,0x26,0x22,0x23,0x25,0x24,0x21,0x24,0x25,0x22,0x22,0x04,0x22,
+ 0x25,0x24,0x22,0x22,0x04,0x25,0x26,0x23,0x21,0x22,0x21,0x23,0x21,0x25,0x20,0x25,
+ 0x24,0x26,0x22,0x26,0x26,0x23,0x26,0x24,0x23,0x24,0x23,0x28,0x28,0x23,0x22,0x22,
+ 0x26,0x04,0x28,0x04,0x26,0x04,0x24,0x28,0x28,0x26,0x25,0x28,0x27,0x04,0x28,0x29,
+ 0x04,0x28,0x04,0x28,0x26,0x26,0x25,0x26,0x28,0x28,0x26,0x25,0x28,0x26,0x25,0x28,
+ 0x26,0x04,0x23,0x25,0x28,0x25,0x26,0x28,0x24,0x28,0x26,0x28,0x28,0x28,0x28,0x04,
+ 0x26,0x28,0x24,0x28,0x04,0x26,0x28,0x28,0x04,0x26,0x28,0x25,0x25,0x25,0x26,0x04,
+ 0x24,0x04,0x28,0x28,0x25,0x28,0x04,0x28,0x28,0x28,0x28,0x28,0x26,0x25,0x28,0x22,
+ 0x24,0x24,0x26,0x28,0x28,0x25,0x28,0x25,0x25,0x23,0x24,0x28,0x26,0x26,0x24,0x28,
+ 0x24,0x28,0x25,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x04,0x28,0x23,0x28,0x27,0x28,
+ 0x25,0x28,0x28,0x28,0x28,0x28,0x26,0x28,0x24,0x25,0x04,0x28,0x28,0x28,0x29,0x28,
+ 0x25,0x29,0x25,0x26,0x25,0x28,0x25,0x28,0x29,0x29,0x29,0x28,0x28,0x04,0x28,0x28,
+ 0x28,0x26,0x25,0x23,0x28,0x25,0x28,0x26,0x26,0x26,0x26,0x04,0x29,0x28,0x26,0x28,
+ 0x26,0x29,0x28,0x28,0x04,0x28,0x26,0x28,0x28,0x28,0x04,0x04,0x28,0x28,0x24,0x29,
+ 0x26,0x23,0x22,0x22,0x24,0x25,0x20,0x24,0x22,0x25,0x24,0x04,0x22,0x22,0x20,0x23,
+ 0x24,0x24,0x24,0x04,0x23,0x04,0x25,0x22,0x25,0x23,0x25,0x26,0x24,0x24,0x23,0x24,
+ 0x28,0x26,0x25,0x25,0x26,0x26,0x25,0x23,0x24,0x25,0x28,0x22,0x24,0x25,0x25,0x24,
+ 0x28,0x24,0x28,0x26,0x28,0x26,0x25,0x26,0x25,0x25,0x23,0x24,0x23,0x22,0x24,0x26,
+ 0x25,0x25,0x25,0x25,0x24,0x23,0x25,0x22,0x23,0x23,0x26,0x28,0x22,0x23,0x22,0x24,
+ 0x25,0x23,0x25,0x25,0x22,0x20,0x20,0x04,0x22,0x22,0x25,0x22,0x24,0x23,0x26,0x23,
+ 0x04,0x22,0x25,0x23,0x24,0x28,0x24,0x25,0x25,0x21,0x23,0x25,0x22,0x22,0x22,0x04,
+ 0x23,0x25,0x22,0x25,0x21,0x22,0x04,0x22,0x22,0x22,0x22,0x23,0x24,0x25,0x24,0x04,
+ 0x25,0x04,0x24,0x25,0x24,0x25,0x23,0x22,0x04,0x04,0x24,0x28,0x28,0x23,0x28,0x25,
+ 0x25,0x28,0x25,0x26,0x24,0x26,0x28,0x26,0x25,0x24,0x25,0x26,0x25,0x25,0x04,0x26,
+ 0x04,0x28,0x25,0x04,0x26,0x28,0x26,0x26,0x28,0x04,0x25,0x26,0x26,0x25,0x25,0x24,
+ 0x24,0x24,0x04,0x28,0x25,0x28,0x26,0x04,0x24,0x28,0x28,0x28,0x23,0x29,0x26,0x28,
+ 0x28,0x28,0x25,0x28,0x28,0x25,0x25,0x25,0x22,0x22,0x28,0x04,0x28,0x24,0x04,0x25,
+ 0x04,0x28,0x04,0x04,0x28,0x25,0x04,0x28,0x28,0x28,0x26,0x28,0x04,0x26,0x25,0x26,
+ 0x25,0x25,0x25,0x28,0x25,0x25,0x28,0x04,0x28,0x26,0x28,0x25,0x25,0x28,0x04,0x25,
+ 0x28,0x29,0x28,0x29,0x28,0x25,0x28,0x26,0x26,0x28,0x04,0x26,0x04,0x04,0x25,0x28,
+ 0x25,0x28,0x28,0x26,0x26,0x04,0x28,0x25,0x25,0x26,0x25,0x24,0x28,0x25,0x04,0x29,
+ 0x28,0x28,0x28,0x04,0x28,0x04,0x24,0x24,0x28,0x28,0x27,0x25,0x28,0x04,0x28,0x28,
+ 0x29,0x25,0x28,0x29,0x29,0x25,0x28,0x28,0x28,0x28,0x29,0x28,0x29,0x28,0x29,0x28,
+ 0x28,0x29,0x28,0x25,0x25,0x29,0x26,0x2A,0x29,0x2A,0x29,0x28,0x26,0x04,0x28,0x29,
+ 0x23,0x25,0x23,0x21,0x04,0x28,0x25,0x24,0x22,0x25,0x22,0x28,0x26,0x25,0x28,0x25,
+ 0x26,0x22,0x25,0x25,0x25,0x25,0x23,0x25,0x25,0x22,0x22,0x25,0x22,0x22,0x04,0x22,
+ 0x25,0x25,0x23,0x26,0x23,0x25,0x22,0x25,0x25,0x25,0x22,0x22,0x04,0x21,0x23,0x24,
+ 0x25,0x23,0x25,0x24,0x22,0x22,0x04,0x04,0x04,0x25,0x20,0x22,0x28,0x25,0x25,0x28,
+ 0x25,0x26,0x25,0x26,0x24,0x24,0x23,0x24,0x21,0x24,0x24,0x23,0x23,0x22,0x25,0x23,
+ 0x24,0x04,0x04,0x26,0x22,0x28,0x22,0x20,0x25,0x20,0x20,0x20,0x24,0x23,0x22,0x23,
+ 0x28,0x22,0x24,0x23,0x22,0x25,0x23,0x25,0x21,0x25,0x22,0x24,0x28,0x26,0x04,0x04,
+ 0x22,0x24,0x23,0x24,0x22,0x24,0x23,0x04,0x25,0x22,0x22,0x26,0x23,0x25,0x23,0x04,
+ 0x23,0x25,0x23,0x26,0x24,0x24,0x04,0x26,0x04,0x22,0x28,0x25,0x04,0x26,0x24,0x04,
+ 0x28,0x28,0x04,0x25,0x25,0x26,0x25,0x26,0x24,0x23,0x24,0x25,0x04,0x28,0x28,0x26,
+ 0x25,0x25,0x26,0x25,0x26,0x28,0x04,0x25,0x28,0x26,0x26,0x24,0x26,0x24,0x26,0x25,
+ 0x04,0x25,0x24,0x24,0x23,0x26,0x26,0x26,0x28,0x28,0x28,0x26,0x26,0x28,0x29,0x28,
+ 0x28,0x29,0x29,0x28,0x28,0x26,0x26,0x22,0x24,0x04,0x28,0x24,0x25,0x26,0x28,0x25,
+ 0x25,0x23,0x24,0x04,0x28,0x04,0x28,0x28,0x28,0x25,0x04,0x25,0x25,0x26,0x25,0x26,
+ 0x24,0x25,0x25,0x04,0x25,0x23,0x26,0x28,0x24,0x04,0x2A,0x04,0x28,0x24,0x2A,0x28,
+ 0x28,0x28,0x29,0x28,0x29,0x28,0x24,0x25,0x25,0x25,0x28,0x04,0x28,0x28,0x25,0x25,
+ 0x29,0x28,0x29,0x25,0x28,0x28,0x25,0x28,0x04,0x24,0x28,0x28,0x28,0x04,0x26,0x25,
+ 0x26,0x04,0x27,0x26,0x25,0x04,0x28,0x25,0x25,0x25,0x28,0x04,0x04,0x23,0x25,0x26,
+ 0x28,0x25,0x28,0x28,0x28,0x28,0x04,0x28,0x25,0x28,0x28,0x28,0x28,0x29,0x28,0x26,
+ 0x28,0x2A,0x04,0x29,0x29,0x29,0x28,0x28,0x29,0x28,0x29,0x04,0x28,0x29,0x28,0x29,
+ 0x28,0x25,0x28,0x22,0x28,0x24,0x25,0x28,0x04,0x22,0x26,0x22,0x22,0x24,0x26,0x28,
+ 0x28,0x23,0x22,0x23,0x20,0x26,0x25,0x26,0x04,0x22,0x25,0x23,0x04,0x24,0x23,0x04,
+ 0x23,0x24,0x24,0x24,0x22,0x25,0x25,0x22,0x23,0x22,0x21,0x24,0x24,0x20,0x22,0x20,
+ 0x04,0x20,0x20,0x22,0x24,0x22,0x25,0x22,0x25,0x25,0x25,0x24,0x25,0x24,0x24,0x24,
+ 0x04,0x04,0x28,0x25,0x25,0x25,0x24,0x22,0x25,0x25,0x24,0x22,0x22,0x25,0x24,0x28,
+ 0x25,0x25,0x23,0x22,0x25,0x22,0x04,0x26,0x22,0x25,0x04,0x25,0x22,0x24,0x25,0x24,
+ 0x20,0x20,0x25,0x26,0x24,0x22,0x20,0x22,0x22,0x25,0x22,0x25,0x28,0x25,0x22,0x25,
+ 0x23,0x28,0x22,0x25,0x22,0x24,0x24,0x25,0x25,0x23,0x25,0x23,0x24,0x28,0x04,0x24,
+ 0x28,0x04,0x24,0x25,0x04,0x25,0x25,0x28,0x28,0x25,0x26,0x23,0x28,0x26,0x28,0x25,
+ 0x23,0x26,0x04,0x26,0x04,0x28,0x26,0x28,0x25,0x25,0x24,0x28,0x04,0x26,0x28,0x28,
+ 0x26,0x25,0x25,0x28,0x04,0x28,0x28,0x28,0x28,0x24,0x04,0x24,0x04,0x04,0x23,0x28,
+ 0x04,0x28,0x04,0x26,0x28,0x28,0x26,0x28,0x04,0x2A,0x28,0x28,0x25,0x28,0x28,0x28,
+ 0x25,0x29,0x2A,0x26,0x04,0x28,0x28,0x25,0x25,0x28,0x26,0x04,0x28,0x28,0x04,0x25,
+ 0x28,0x26,0x28,0x28,0x25,0x29,0x28,0x04,0x25,0x28,0x25,0x28,0x22,0x25,0x26,0x24,
+ 0x28,0x26,0x27,0x04,0x26,0x28,0x28,0x29,0x28,0x28,0x26,0x25,0x25,0x28,0x28,0x28,
+ 0x28,0x28,0x04,0x28,0x26,0x26,0x26,0x24,0x28,0x28,0x24,0x25,0x28,0x26,0x28,0x2A,
+ 0x28,0x24,0x26,0x29,0x25,0x29,0x28,0x23,0x28,0x25,0x28,0x25,0x25,0x28,0x28,0x28,
+ 0x23,0x28,0x28,0x26,0x25,0x26,0x04,0x26,0x28,0x25,0x25,0x24,0x04,0x28,0x28,0x26,
+ 0x25,0x04,0x28,0x28,0x28,0x04,0x28,0x28,0x26,0x29,0x28,0x28,0x29,0x29,0x28,0x29,
+ 0x04,0x28,0x04,0x28,0x28,0x28,0x26,0x28,0x24,0x28,0x24,0x28,0x28,0x29,0x25,0x29,
+ 0x26,0x25,0x23,0x22,0x22,0x22,0x23,0x22,0x23,0x25,0x04,0x04,0x04,0x25,0x26,0x04,
+ 0x22,0x25,0x26,0x04,0x23,0x22,0x22,0x24,0x20,0x22,0x04,0x22,0x04,0x21,0x22,0x23,
+ 0x25,0x24,0x26,0x28,0x21,0x21,0x20,0x25,0x24,0x22,0x20,0x25,0x04,0x26,0x23,0x24,
+ 0x26,0x24,0x26,0x20,0x22,0x20,0x24,0x20,0x22,0x04,0x26,0x22,0x22,0x24,0x23,0x22,
+ 0x28,0x28,0x25,0x04,0x26,0x25,0x04,0x28,0x28,0x26,0x04,0x28,0x23,0x28,0x04,0x25,
+ 0x21,0x25,0x23,0x23,0x24,0x21,0x24,0x26,0x25,0x23,0x23,0x26,0x25,0x24,0x25,0x24,
+ 0x22,0x25,0x26,0x23,0x28,0x26,0x25,0x23,0x26,0x23,0x23,0x28,0x22,0x25,0x23,0x25,
+ 0x24,0x23,0x23,0x23,0x25,0x25,0x26,0x26,0x22,0x24,0x26,0x25,0x26,0x25,0x24,0x23,
+ 0x23,0x26,0x28,0x04,0x28,0x28,0x27,0x25,0x28,0x26,0x28,0x04,0x26,0x04,0x28,0x25,
+ 0x28,0x26,0x26,0x04,0x26,0x04,0x04,0x04,0x25,0x26,0x26,0x26,0x04,0x04,0x28,0x25,
+ 0x25,0x28,0x26,0x04,0x04,0x24,0x04,0x04,0x04,0x26,0x28,0x26,0x28,0x28,0x22,0x04,
+ 0x04,0x26,0x25,0x28,0x29,0x26,0x29,0x25,0x04,0x04,0x28,0x28,0x29,0x2A,0x28,0x2A,
+ 0x25,0x2A,0x28,0x28,0x2A,0x29,0x28,0x25,0x25,0x2A,0x28,0x04,0x25,0x25,0x28,0x04,
+ 0x28,0x28,0x28,0x28,0x28,0x29,0x26,0x28,0x26,0x28,0x25,0x22,0x04,0x28,0x29,0x28,
+ 0x28,0x28,0x04,0x28,0x28,0x28,0x25,0x24,0x28,0x27,0x28,0x04,0x28,0x28,0x26,0x25,
+ 0x23,0x25,0x28,0x26,0x28,0x28,0x28,0x25,0x04,0x26,0x28,0x28,0x29,0x25,0x04,0x28,
+ 0x28,0x2A,0x28,0x28,0x04,0x04,0x28,0x28,0x28,0x26,0x26,0x28,0x04,0x24,0x24,0x25,
+ 0x26,0x04,0x26,0x28,0x28,0x28,0x25,0x25,0x28,0x25,0x25,0x26,0x26,0x25,0x25,0x24,
+ 0x28,0x28,0x04,0x25,0x28,0x28,0x25,0x25,0x28,0x28,0x28,0x29,0x28,0x04,0x25,0x29,
+ 0x26,0x25,0x25,0x28,0x28,0x25,0x04,0x28,0x25,0x04,0x26,0x26,0x24,0x25,0x28,0x29,
+ 0x04,0x28,0x23,0x25,0x25,0x26,0x23,0x28,0x25,0x28,0x25,0x23,0x04,0x23,0x26,0x23,
+ 0x26,0x28,0x22,0x04,0x23,0x23,0x24,0x24,0x22,0x22,0x22,0x20,0x24,0x23,0x20,0x22,
+ 0x04,0x25,0x25,0x23,0x23,0x22,0x20,0x20,0x21,0x24,0x23,0x04,0x24,0x28,0x22,0x25,
+ 0x24,0x26,0x22,0x20,0x20,0x20,0x23,0x24,0x25,0x22,0x20,0x20,0x25,0x24,0x25,0x24,
+ 0x23,0x26,0x23,0x25,0x28,0x25,0x26,0x25,0x23,0x26,0x24,0x28,0x04,0x26,0x24,0x26,
+ 0x24,0x24,0x25,0x24,0x25,0x04,0x22,0x24,0x22,0x24,0x25,0x22,0x24,0x23,0x24,0x23,
+ 0x26,0x23,0x24,0x22,0x23,0x28,0x04,0x28,0x24,0x25,0x25,0x25,0x23,0x23,0x24,0x25,
+ 0x04,0x25,0x28,0x26,0x23,0x24,0x04,0x24,0x25,0x28,0x26,0x23,0x25,0x22,0x23,0x26,
+ 0x26,0x28,0x23,0x28,0x24,0x24,0x04,0x22,0x04,0x23,0x24,0x24,0x26,0x04,0x28,0x04,
+ 0x04,0x28,0x26,0x04,0x22,0x24,0x28,0x24,0x25,0x26,0x04,0x27,0x25,0x25,0x28,0x28,
+ 0x28,0x04,0x28,0x26,0x04,0x25,0x28,0x23,0x28,0x26,0x04,0x04,0x24,0x25,0x28,0x26,
+ 0x25,0x28,0x25,0x28,0x26,0x26,0x29,0x28,0x28,0x29,0x26,0x04,0x26,0x28,0x28,0x29,
+ 0x26,0x2A,0x04,0x28,0x04,0x28,0x28,0x27,0x28,0x28,0x28,0x29,0x25,0x22,0x22,0x26,
+ 0x29,0x28,0x26,0x28,0x28,0x28,0x04,0x25,0x28,0x26,0x29,0x04,0x2A,0x28,0x28,0x28,
+ 0x28,0x28,0x26,0x26,0x28,0x25,0x28,0x28,0x23,0x28,0x28,0x28,0x26,0x25,0x27,0x28,
+ 0x27,0x27,0x28,0x25,0x04,0x28,0x28,0x04,0x28,0x04,0x25,0x28,0x29,0x28,0x2A,0x28,
+ 0x28,0x2A,0x28,0x28,0x2A,0x24,0x04,0x28,0x25,0x04,0x28,0x25,0x26,0x25,0x24,0x25,
+ 0x26,0x25,0x25,0x23,0x28,0x26,0x25,0x25,0x04,0x28,0x26,0x26,0x04,0x04,0x26,0x04,
+ 0x26,0x22,0x04,0x04,0x28,0x28,0x28,0x28,0x28,0x28,0x04,0x28,0x25,0x27,0x25,0x28,
+ 0x24,0x22,0x26,0x28,0x26,0x04,0x28,0x04,0x28,0x25,0x28,0x28,0x04,0x25,0x24,0x29,
+ 0x28,0x25,0x23,0x25,0x22,0x25,0x28,0x26,0x23,0x24,0x04,0x23,0x28,0x22,0x25,0x22,
+ 0x28,0x22,0x24,0x25,0x26,0x25,0x25,0x22,0x22,0x22,0x23,0x26,0x23,0x26,0x22,0x24,
+ 0x04,0x25,0x22,0x25,0x23,0x22,0x25,0x28,0x22,0x24,0x25,0x23,0x24,0x23,0x25,0x25,
+ 0x25,0x21,0x23,0x20,0x20,0x22,0x22,0x23,0x28,0x22,0x23,0x25,0x22,0x28,0x24,0x26,
+ 0x23,0x25,0x28,0x26,0x26,0x26,0x28,0x28,0x25,0x25,0x25,0x28,0x28,0x25,0x26,0x28,
+ 0x24,0x28,0x24,0x23,0x28,0x28,0x26,0x04,0x26,0x28,0x04,0x26,0x24,0x24,0x04,0x25,
+ 0x25,0x25,0x04,0x26,0x04,0x26,0x24,0x28,0x25,0x25,0x23,0x25,0x24,0x25,0x25,0x25,
+ 0x24,0x25,0x25,0x23,0x22,0x25,0x25,0x25,0x04,0x23,0x04,0x28,0x26,0x26,0x28,0x04,
+ 0x28,0x28,0x28,0x28,0x24,0x28,0x24,0x04,0x04,0x04,0x28,0x28,0x24,0x25,0x04,0x26,
+ 0x24,0x25,0x26,0x04,0x26,0x28,0x28,0x28,0x28,0x25,0x26,0x29,0x04,0x28,0x26,0x28,
+ 0x28,0x26,0x25,0x28,0x04,0x25,0x24,0x28,0x28,0x26,0x28,0x25,0x25,0x24,0x26,0x25,
+ 0x24,0x28,0x27,0x28,0x26,0x04,0x25,0x29,0x28,0x28,0x28,0x04,0x04,0x28,0x26,0x29,
+ 0x29,0x29,0x04,0x26,0x25,0x28,0x24,0x24,0x24,0x04,0x28,0x04,0x28,0x24,0x28,0x28,
+ 0x27,0x29,0x04,0x26,0x26,0x25,0x28,0x25,0x29,0x04,0x29,0x28,0x28,0x28,0x28,0x28,
+ 0x2B,0x29,0x2B,0x2C,0x29,0x28,0x26,0x04,0x28,0x25,0x28,0x26,0x27,0x28,0x28,0x28,
+ 0x04,0x25,0x24,0x28,0x28,0x04,0x28,0x25,0x25,0x25,0x26,0x28,0x28,0x28,0x29,0x29,
+ 0x28,0x28,0x22,0x28,0x28,0x28,0x28,0x28,0x24,0x24,0x26,0x26,0x25,0x25,0x04,0x28,
+ 0x04,0x25,0x28,0x24,0x28,0x25,0x04,0x28,0x26,0x24,0x26,0x04,0x28,0x26,0x26,0x25,
+ 0x28,0x28,0x28,0x29,0x25,0x28,0x25,0x28,0x28,0x26,0x04,0x25,0x04,0x28,0x28,0x28,
+ 0x04,0x25,0x25,0x28,0x28,0x24,0x28,0x28,0x26,0x24,0x28,0x24,0x26,0x25,0x28,0x29,
+ 0x04,0x23,0x22,0x24,0x25,0x25,0x23,0x25,0x23,0x23,0x22,0x04,0x04,0x24,0x26,0x24,
+ 0x23,0x24,0x04,0x04,0x04,0x25,0x22,0x28,0x25,0x25,0x22,0x25,0x26,0x25,0x22,0x23,
+ 0x22,0x25,0x23,0x25,0x04,0x24,0x23,0x25,0x22,0x28,0x22,0x25,0x22,0x25,0x28,0x22,
+ 0x25,0x26,0x25,0x20,0x26,0x04,0x20,0x23,0x23,0x25,0x25,0x25,0x24,0x22,0x25,0x24,
+ 0x25,0x24,0x25,0x28,0x04,0x25,0x25,0x24,0x28,0x25,0x28,0x28,0x26,0x25,0x24,0x23,
+ 0x26,0x24,0x28,0x25,0x28,0x27,0x28,0x25,0x27,0x26,0x26,0x26,0x26,0x25,0x04,0x26,
+ 0x28,0x25,0x25,0x28,0x28,0x26,0x04,0x04,0x26,0x24,0x24,0x24,0x04,0x24,0x28,0x25,
+ 0x24,0x24,0x04,0x26,0x26,0x25,0x26,0x25,0x23,0x28,0x25,0x25,0x25,0x29,0x04,0x24,
+ 0x28,0x28,0x24,0x25,0x04,0x22,0x26,0x28,0x26,0x04,0x28,0x25,0x25,0x28,0x28,0x24,
+ 0x04,0x26,0x04,0x04,0x04,0x26,0x04,0x27,0x25,0x28,0x28,0x28,0x28,0x26,0x26,0x29,
+ 0x26,0x28,0x28,0x28,0x28,0x25,0x24,0x28,0x28,0x28,0x26,0x25,0x28,0x25,0x28,0x28,
+ 0x28,0x26,0x26,0x28,0x28,0x25,0x2A,0x28,0x28,0x26,0x25,0x25,0x24,0x25,0x24,0x25,
+ 0x23,0x26,0x28,0x25,0x24,0x22,0x25,0x25,0x25,0x25,0x28,0x04,0x25,0x04,0x26,0x28,
+ 0x04,0x26,0x28,0x29,0x28,0x29,0x28,0x25,0x25,0x28,0x04,0x28,0x28,0x26,0x28,0x28,
+ 0x28,0x25,0x2B,0x29,0x29,0x04,0x04,0x28,0x24,0x25,0x29,0x28,0x25,0x28,0x28,0x28,
+ 0x28,0x22,0x26,0x25,0x26,0x28,0x28,0x28,0x24,0x28,0x25,0x24,0x24,0x28,0x04,0x26,
+ 0x28,0x23,0x28,0x29,0x28,0x04,0x26,0x26,0x04,0x24,0x24,0x25,0x25,0x26,0x24,0x25,
+ 0x22,0x04,0x25,0x26,0x26,0x22,0x28,0x24,0x24,0x26,0x28,0x28,0x28,0x26,0x28,0x26,
+ 0x26,0x28,0x28,0x04,0x04,0x24,0x04,0x25,0x25,0x04,0x25,0x28,0x26,0x25,0x25,0x25,
+ 0x04,0x04,0x25,0x25,0x26,0x24,0x24,0x25,0x28,0x26,0x25,0x25,0x26,0x28,0x25,0x29,
+ 0x23,0x04,0x25,0x24,0x25,0x26,0x25,0x26,0x25,0x25,0x28,0x25,0x28,0x28,0x24,0x25,
+ 0x26,0x25,0x04,0x25,0x25,0x22,0x22,0x25,0x25,0x24,0x26,0x04,0x22,0x24,0x24,0x24,
+ 0x23,0x23,0x26,0x22,0x25,0x24,0x25,0x28,0x25,0x22,0x26,0x26,0x25,0x24,0x28,0x04,
+ 0x25,0x22,0x26,0x23,0x26,0x25,0x04,0x28,0x04,0x26,0x04,0x28,0x25,0x22,0x22,0x24,
+ 0x20,0x22,0x24,0x25,0x24,0x23,0x25,0x04,0x25,0x28,0x28,0x28,0x28,0x04,0x25,0x28,
+ 0x27,0x25,0x25,0x26,0x25,0x24,0x27,0x25,0x26,0x28,0x25,0x25,0x04,0x28,0x27,0x28,
+ 0x24,0x25,0x25,0x28,0x25,0x24,0x04,0x28,0x25,0x26,0x26,0x04,0x26,0x26,0x25,0x24,
+ 0x25,0x28,0x04,0x28,0x26,0x25,0x28,0x26,0x28,0x22,0x04,0x25,0x28,0x25,0x25,0x28,
+ 0x25,0x25,0x28,0x25,0x28,0x24,0x28,0x24,0x26,0x28,0x28,0x04,0x28,0x25,0x24,0x25,
+ 0x28,0x27,0x25,0x04,0x04,0x26,0x28,0x24,0x26,0x04,0x28,0x24,0x28,0x04,0x28,0x27,
+ 0x24,0x26,0x26,0x28,0x25,0x24,0x28,0x04,0x26,0x23,0x04,0x28,0x04,0x26,0x29,0x28,
+ 0x26,0x28,0x26,0x28,0x26,0x28,0x25,0x28,0x29,0x25,0x28,0x27,0x28,0x25,0x28,0x24,
+ 0x22,0x22,0x20,0x20,0x25,0x23,0x04,0x26,0x24,0x28,0x28,0x25,0x24,0x24,0x25,0x25,
+ 0x28,0x28,0x04,0x28,0x26,0x28,0x28,0x04,0x28,0x28,0x29,0x28,0x26,0x28,0x26,0x25,
+ 0x28,0x28,0x28,0x2A,0x24,0x29,0x28,0x28,0x28,0x28,0x28,0x04,0x2A,0x28,0x25,0x04,
+ 0x28,0x28,0x26,0x2A,0x2A,0x04,0x24,0x26,0x28,0x26,0x26,0x04,0x28,0x04,0x28,0x28,
+ 0x28,0x29,0x29,0x28,0x28,0x28,0x28,0x28,0x24,0x28,0x28,0x28,0x24,0x26,0x25,0x25,
+ 0x25,0x28,0x23,0x24,0x28,0x24,0x26,0x28,0x26,0x25,0x28,0x29,0x28,0x04,0x26,0x28,
+ 0x28,0x28,0x2A,0x04,0x04,0x04,0x24,0x25,0x04,0x26,0x28,0x25,0x25,0x26,0x26,0x24,
+ 0x04,0x04,0x04,0x28,0x04,0x26,0x26,0x04,0x28,0x26,0x24,0x28,0x28,0x26,0x04,0x29,
+ 0x24,0x28,0x28,0x23,0x23,0x22,0x25,0x04,0x23,0x24,0x22,0x26,0x25,0x22,0x26,0x23,
+ 0x25,0x24,0x23,0x25,0x23,0x04,0x04,0x24,0x25,0x25,0x25,0x22,0x22,0x26,0x22,0x04,
+ 0x04,0x25,0x26,0x04,0x04,0x25,0x25,0x23,0x25,0x24,0x28,0x04,0x25,0x04,0x24,0x04,
+ 0x24,0x25,0x20,0x22,0x04,0x25,0x28,0x25,0x26,0x23,0x26,0x26,0x28,0x04,0x04,0x26,
+ 0x25,0x25,0x25,0x26,0x23,0x24,0x23,0x25,0x04,0x28,0x25,0x28,0x28,0x28,0x04,0x28,
+ 0x28,0x04,0x22,0x28,0x25,0x28,0x25,0x26,0x25,0x28,0x27,0x28,0x28,0x25,0x28,0x28,
+ 0x28,0x24,0x24,0x22,0x04,0x04,0x25,0x26,0x25,0x28,0x25,0x28,0x04,0x28,0x28,0x26,
+ 0x26,0x25,0x04,0x25,0x28,0x26,0x26,0x28,0x25,0x04,0x04,0x26,0x28,0x24,0x28,0x25,
+ 0x04,0x28,0x04,0x25,0x21,0x28,0x26,0x24,0x04,0x25,0x28,0x04,0x28,0x28,0x25,0x28,
+ 0x28,0x26,0x28,0x04,0x04,0x26,0x26,0x28,0x26,0x24,0x24,0x24,0x28,0x04,0x25,0x26,
+ 0x28,0x28,0x24,0x28,0x25,0x25,0x25,0x25,0x28,0x26,0x04,0x28,0x24,0x28,0x26,0x28,
+ 0x26,0x29,0x26,0x28,0x26,0x25,0x26,0x25,0x24,0x28,0x25,0x26,0x22,0x26,0x28,0x28,
+ 0x04,0x22,0x20,0x24,0x21,0x23,0x25,0x24,0x26,0x25,0x26,0x24,0x25,0x25,0x26,0x28,
+ 0x26,0x25,0x24,0x26,0x28,0x04,0x26,0x28,0x28,0x28,0x28,0x28,0x27,0x28,0x28,0x04,
+ 0x27,0x24,0x25,0x04,0x29,0x26,0x28,0x28,0x28,0x28,0x28,0x28,0x04,0x26,0x2A,0x28,
+ 0x2A,0x28,0x25,0x25,0x26,0x04,0x28,0x28,0x28,0x28,0x28,0x28,0x24,0x26,0x25,0x28,
+ 0x28,0x28,0x24,0x28,0x25,0x25,0x28,0x28,0x28,0x28,0x28,0x25,0x22,0x28,0x26,0x26,
+ 0x25,0x25,0x04,0x28,0x25,0x28,0x28,0x28,0x23,0x25,0x26,0x29,0x25,0x28,0x29,0x25,
+ 0x29,0x29,0x25,0x24,0x25,0x25,0x26,0x28,0x28,0x25,0x28,0x28,0x24,0x24,0x25,0x26,
+ 0x28,0x25,0x04,0x28,0x28,0x24,0x26,0x28,0x28,0x26,0x28,0x23,0x28,0x04,0x04,0x29,
+ 0x22,0x26,0x23,0x26,0x25,0x21,0x04,0x22,0x25,0x04,0x04,0x23,0x25,0x04,0x28,0x24,
+ 0x25,0x25,0x24,0x24,0x24,0x25,0x04,0x22,0x24,0x23,0x23,0x04,0x26,0x24,0x24,0x25,
+ 0x28,0x28,0x04,0x28,0x25,0x28,0x23,0x25,0x04,0x25,0x24,0x26,0x25,0x28,0x25,0x24,
+ 0x23,0x28,0x04,0x25,0x24,0x28,0x25,0x04,0x25,0x25,0x28,0x04,0x28,0x04,0x28,0x25,
+ 0x28,0x25,0x20,0x22,0x22,0x21,0x21,0x23,0x25,0x26,0x26,0x22,0x22,0x24,0x25,0x25,
+ 0x28,0x26,0x25,0x26,0x23,0x25,0x04,0x28,0x28,0x28,0x04,0x25,0x26,0x22,0x24,0x28,
+ 0x26,0x28,0x25,0x28,0x25,0x26,0x23,0x26,0x04,0x28,0x04,0x25,0x04,0x28,0x2A,0x29,
+ 0x25,0x25,0x26,0x24,0x25,0x04,0x28,0x25,0x25,0x25,0x28,0x04,0x25,0x23,0x28,0x28,
+ 0x04,0x28,0x24,0x25,0x26,0x28,0x04,0x25,0x25,0x28,0x27,0x26,0x28,0x28,0x26,0x26,
+ 0x25,0x26,0x26,0x24,0x26,0x04,0x26,0x26,0x04,0x04,0x28,0x28,0x24,0x24,0x26,0x25,
+ 0x28,0x29,0x28,0x28,0x26,0x28,0x04,0x28,0x24,0x26,0x28,0x04,0x28,0x04,0x28,0x04,
+ 0x29,0x24,0x29,0x29,0x24,0x28,0x28,0x25,0x25,0x28,0x28,0x28,0x04,0x22,0x24,0x20,
+ 0x20,0x26,0x23,0x25,0x26,0x28,0x24,0x25,0x04,0x22,0x04,0x26,0x25,0x28,0x28,0x28,
+ 0x28,0x24,0x28,0x28,0x04,0x28,0x25,0x04,0x26,0x24,0x04,0x26,0x26,0x28,0x28,0x25,
+ 0x04,0x25,0x26,0x04,0x27,0x28,0x23,0x27,0x28,0x28,0x28,0x28,0x28,0x26,0x26,0x28,
+ 0x28,0x28,0x04,0x28,0x28,0x25,0x28,0x28,0x29,0x28,0x28,0x28,0x25,0x26,0x24,0x26,
+ 0x28,0x26,0x25,0x04,0x25,0x22,0x28,0x28,0x26,0x04,0x29,0x29,0x28,0x25,0x25,0x25,
+ 0x04,0x26,0x28,0x28,0x28,0x26,0x28,0x28,0x28,0x29,0x28,0x28,0x04,0x28,0x28,0x28,
+ 0x04,0x04,0x26,0x28,0x25,0x23,0x23,0x26,0x25,0x23,0x26,0x04,0x28,0x24,0x26,0x28,
+ 0x26,0x04,0x22,0x22,0x22,0x26,0x26,0x04,0x28,0x25,0x25,0x28,0x25,0x26,0x28,0x29,
+ 0x24,0x22,0x23,0x22,0x25,0x04,0x25,0x26,0x25,0x28,0x04,0x22,0x23,0x24,0x24,0x25,
+ 0x26,0x28,0x04,0x22,0x25,0x26,0x24,0x28,0x04,0x04,0x28,0x26,0x26,0x25,0x28,0x25,
+ 0x26,0x26,0x22,0x26,0x26,0x23,0x28,0x22,0x22,0x04,0x26,0x25,0x25,0x26,0x20,0x22,
+ 0x24,0x04,0x25,0x26,0x28,0x24,0x04,0x26,0x25,0x24,0x24,0x26,0x28,0x28,0x26,0x28,
+ 0x26,0x26,0x24,0x04,0x23,0x22,0x23,0x26,0x04,0x28,0x26,0x04,0x23,0x22,0x22,0x22,
+ 0x23,0x22,0x23,0x25,0x20,0x20,0x25,0x25,0x28,0x28,0x25,0x25,0x24,0x23,0x22,0x24,
+ 0x25,0x26,0x28,0x04,0x28,0x26,0x29,0x25,0x28,0x28,0x28,0x24,0x28,0x25,0x28,0x29,
+ 0x28,0x28,0x28,0x28,0x04,0x28,0x04,0x28,0x25,0x04,0x28,0x28,0x25,0x28,0x28,0x28,
+ 0x28,0x27,0x25,0x28,0x28,0x04,0x28,0x25,0x28,0x24,0x28,0x23,0x25,0x28,0x25,0x25,
+ 0x28,0x26,0x26,0x28,0x28,0x25,0x28,0x25,0x23,0x04,0x24,0x25,0x28,0x26,0x28,0x26,
+ 0x28,0x28,0x29,0x26,0x28,0x28,0x28,0x04,0x28,0x26,0x28,0x25,0x28,0x2A,0x28,0x28,
+ 0x26,0x28,0x28,0x28,0x28,0x25,0x26,0x25,0x25,0x26,0x25,0x25,0x25,0x24,0x20,0x20,
+ 0x22,0x22,0x04,0x25,0x28,0x25,0x04,0x25,0x24,0x26,0x26,0x04,0x25,0x28,0x26,0x28,
+ 0x04,0x28,0x26,0x04,0x24,0x25,0x26,0x28,0x04,0x25,0x25,0x04,0x04,0x28,0x25,0x28,
+ 0x24,0x28,0x28,0x26,0x24,0x25,0x23,0x04,0x28,0x28,0x25,0x24,0x28,0x26,0x28,0x28,
+ 0x28,0x28,0x04,0x26,0x28,0x25,0x04,0x25,0x22,0x26,0x26,0x04,0x24,0x26,0x04,0x28,
+ 0x25,0x28,0x26,0x26,0x04,0x28,0x23,0x26,0x24,0x25,0x28,0x26,0x04,0x28,0x26,0x29,
+ 0x28,0x28,0x28,0x29,0x28,0x24,0x29,0x28,0x28,0x28,0x28,0x04,0x04,0x25,0x25,0x24,
+ 0x24,0x26,0x25,0x25,0x22,0x20,0x20,0x22,0x24,0x22,0x23,0x20,0x20,0x22,0x20,0x22,
+ 0x20,0x22,0x20,0x24,0x23,0x22,0x25,0x23,0x23,0x28,0x26,0x20,0x20,0x20,0x20,0x29,
+ 0x28,0x28,0x25,0x28,0x04,0x26,0x25,0x26,0x25,0x26,0x25,0x26,0x28,0x28,0x04,0x04,
+ 0x28,0x26,0x24,0x28,0x28,0x28,0x28,0x28,0x26,0x23,0x26,0x28,0x04,0x25,0x25,0x26,
+ 0x28,0x28,0x26,0x26,0x26,0x28,0x04,0x22,0x04,0x25,0x25,0x28,0x04,0x26,0x04,0x28,
+ 0x28,0x04,0x28,0x04,0x24,0x28,0x28,0x28,0x28,0x28,0x24,0x26,0x24,0x28,0x25,0x04,
+ 0x28,0x28,0x23,0x28,0x24,0x24,0x28,0x26,0x25,0x28,0x25,0x25,0x25,0x24,0x22,0x04,
+ 0x23,0x25,0x23,0x24,0x24,0x24,0x26,0x26,0x26,0x24,0x28,0x28,0x24,0x22,0x25,0x04,
+ 0x25,0x28,0x26,0x29,0x24,0x28,0x25,0x28,0x24,0x28,0x25,0x28,0x24,0x28,0x28,0x26,
+ 0x26,0x28,0x25,0x28,0x25,0x28,0x28,0x26,0x28,0x29,0x28,0x28,0x24,0x24,0x24,0x26,
+ 0x23,0x26,0x04,0x25,0x04,0x26,0x04,0x25,0x23,0x25,0x04,0x24,0x25,0x24,0x23,0x24,
+ 0x26,0x25,0x24,0x24,0x25,0x04,0x25,0x25,0x28,0x28,0x24,0x28,0x25,0x04,0x29,0x25,
+ 0x04,0x04,0x28,0x28,0x04,0x28,0x04,0x29,0x04,0x26,0x28,0x28,0x28,0x28,0x28,0x28,
+ 0x28,0x24,0x28,0x25,0x04,0x24,0x23,0x22,0x25,0x23,0x20,0x25,0x23,0x25,0x25,0x25,
+ 0x23,0x24,0x26,0x28,0x28,0x25,0x04,0x26,0x04,0x28,0x25,0x26,0x28,0x26,0x25,0x28,
+ 0x04,0x25,0x04,0x26,0x28,0x26,0x25,0x28,0x28,0x28,0x28,0x23,0x25,0x25,0x28,0x25,
+ 0x28,0x25,0x28,0x25,0x26,0x25,0x25,0x26,0x04,0x26,0x25,0x28,0x28,0x26,0x25,0x26,
+ 0x28,0x04,0x28,0x25,0x26,0x25,0x28,0x04,0x04,0x28,0x29,0x04,0x26,0x28,0x26,0x28,
+ 0x28,0x29,0x28,0x28,0x29,0x25,0x29,0x25,0x29,0x28,0x29,0x28,0x29,0x28,0x28,0x28,
+ 0x28,0x29,0x24,0x04,0x24,0x04,0x25,0x27,0x28,0x24,0x24,0x28,0x04,0x23,0x24,0x23,
+ 0x26,0x22,0x24,0x22,0x20,0x26,0x25,0x28,0x23,0x24,0x04,0x22,0x22,0x23,0x20,0x24,
+ 0x26,0x26,0x20,0x22,0x20,0x24,0x22,0x24,0x20,0x24,0x22,0x24,0x25,0x24,0x28,0x29,
+ 0x04,0x24,0x28,0x26,0x28,0x23,0x28,0x28,0x28,0x24,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x25,0x25,0x28,0x26,
+ 0x25,0x25,0x25,0x25,0x25,0x26,0x28,0x04,0x24,0x26,0x28,0x2A,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,
+ 0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,
+ 0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2C,
+ 0x2C,0x2C,0x2C,0x2C,0x2C,0x26,0x22,0x22,0x28,0x25,0x24,0x24,0x26,0x28,0x25,0x29,
+ 0x04,0x28,0x28,0x28,0x24,0x25,0x25,0x04,0x25,0x24,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x25,0x25,0x26,0x25,
+ 0x24,0x04,0x04,0x23,0x23,0x26,0x26,0x23,0x2A,0x28,0x25,0x2A,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x23,0x25,0x26,0x25,0x28,0x26,0x24,0x24,0x04,0x24,0x29,
+ 0x25,0x28,0x26,0x25,0x28,0x26,0x22,0x25,0x25,0x24,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x22,0x25,0x28,0x26,
+ 0x22,0x24,0x24,0x24,0x28,0x28,0x04,0x29,0x25,0x28,0x28,0x26,0x2F,0x2F,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x20,0x28,0x28,0x04,0x04,0x04,0x28,0x24,0x24,0x28,0x29,
+ 0x26,0x25,0x26,0x25,0x28,0x22,0x25,0x25,0x24,0x23,0x2F,0x2F,0x2D,0x2D,0x7A,0x7A,
+ 0x7A,0x7A,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x7A,0x7A,
+ 0x7A,0x7A,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,
+ 0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,
+ 0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x7A,0x7A,0x2D,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,
+ 0x7A,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x22,0x25,0x28,0x04,
+ 0x28,0x28,0x26,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x27,0x28,0x2F,0x2F,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x36,0x04,0x04,0x28,0x24,0x26,0x24,0x28,0x04,0x25,0x29,
+ 0x04,0x25,0x22,0x23,0x24,0x25,0x22,0x22,0x23,0x24,0x2F,0x2F,0x2D,0x7A,0x7A,0x7A,
+ 0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,
+ 0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,
+ 0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x7A,0x2D,0x2D,0x2D,0x7A,0x7A,0x7A,0x2D,
+ 0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,0x2D,0x2D,0x2D,0x7A,
+ 0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,
+ 0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x22,0x28,0x28,0x26,
+ 0x29,0x28,0x28,0x04,0x26,0x29,0x28,0x24,0x26,0x28,0x26,0x25,0x2F,0x2F,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,
+ 0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x36,0x28,0x04,0x22,0x25,0x23,0x25,0x28,0x26,0x23,0x29,
+ 0x25,0x26,0x28,0x26,0x26,0x28,0x04,0x22,0x22,0x25,0x2F,0x2F,0x2D,0x7A,0x7A,0x2D,
+ 0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,
+ 0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,
+ 0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x2D,0x7A,0x7A,0x7A,0x7A,0x2D,
+ 0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x2D,0x7A,0x7A,
+ 0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,
+ 0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x22,0x28,0x28,0x28,
+ 0x04,0x04,0x28,0x28,0x28,0x24,0x28,0x26,0x26,0x28,0x25,0x26,0x2F,0x2F,0x2D,0x2D,
+ 0x32,0x33,0x33,0x34,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x35,0x35,0x35,0x35,0x36,0x36,
+ 0x36,0x36,0x20,0x23,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,
+ 0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,
+ 0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x28,0x24,0x23,0x28,0x28,0x28,0x25,0x25,0x20,0x29,
+ 0x23,0x04,0x28,0x23,0x24,0x24,0x24,0x25,0x20,0x25,0x2F,0x2F,0x2D,0x7A,0x7A,0x7A,
+ 0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,
+ 0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,
+ 0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,
+ 0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,
+ 0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,
+ 0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x22,0x28,0x04,0x04,
+ 0x04,0x04,0x26,0x28,0x26,0x25,0x04,0x26,0x26,0x23,0x22,0x22,0x2E,0x2F,0x2D,0x2D,
+ 0x33,0x36,0x22,0x25,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,
+ 0x28,0x28,0x28,0x2C,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,
+ 0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,
+ 0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x24,0x25,0x24,0x28,0x23,0x22,0x25,0x25,0x04,0x29,
+ 0x22,0x24,0x20,0x22,0x22,0x23,0x23,0x23,0x21,0x23,0x2F,0x2F,0x2D,0x7A,0x7A,0x7A,
+ 0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,
+ 0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,
+ 0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,0x7A,0x7A,0x7A,0x2D,0x7A,0x7A,0x2D,
+ 0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,0x7A,0x7A,0x7A,0x2D,
+ 0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,
+ 0x7A,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x2D,0x22,0x26,0x26,0x25,
+ 0x28,0x26,0x26,0x25,0x28,0x28,0x25,0x04,0x24,0x25,0x25,0x25,0x2E,0x2F,0x2D,0x2D,
+ 0x34,0x22,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x28,0x28,0x2C,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,
+ 0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x24,0x28,0x23,0x22,0x24,0x04,0x20,0x20,0x23,0x29,
+ 0x22,0x20,0x20,0x24,0x22,0x23,0x24,0x22,0x24,0x24,0x2F,0x2F,0x2D,0x7A,0x7A,0x2D,
+ 0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,
+ 0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,
+ 0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,
+ 0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x2D,0x2D,
+ 0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,
+ 0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x22,0x23,0x24,0x25,
+ 0x04,0x28,0x26,0x25,0x23,0x04,0x26,0x24,0x22,0x20,0x25,0x23,0x2E,0x2F,0x2D,0x2D,
+ 0x34,0x25,0x27,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x28,0x28,0x2D,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
+ 0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,
+ 0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x23,0x22,0x04,0x25,0x25,0x04,0x22,0x22,0x23,0x29,
+ 0x20,0x26,0x21,0x24,0x23,0x28,0x23,0x23,0x22,0x26,0x2F,0x2F,0x2D,0x7A,0x7A,0x2D,
+ 0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,
+ 0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,
+ 0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,
+ 0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,
+ 0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,
+ 0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x22,0x25,0x23,0x22,
+ 0x22,0x22,0x20,0x26,0x20,0x24,0x20,0x23,0x26,0x28,0x22,0x25,0x2E,0x2F,0x2D,0x2D,
+ 0x35,0x27,0x27,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x28,0x28,0x2D,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x17,0x2D,0x2D,
+ 0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,
+ 0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x28,0x23,0x24,0x04,0x22,0x20,0x22,0x22,0x26,0x29,
+ 0x25,0x21,0x25,0x22,0x24,0x23,0x24,0x24,0x04,0x04,0x2F,0x2F,0x2D,0x7A,0x7A,0x2D,
+ 0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,
+ 0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,
+ 0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,
+ 0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,
+ 0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x7A,0x7A,0x2D,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,
+ 0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x22,0x26,0x28,0x28,
+ 0x04,0x25,0x20,0x24,0x22,0x24,0x20,0x23,0x25,0x28,0x25,0x24,0x2E,0x2F,0x2D,0x2D,
+ 0x36,0x27,0x28,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x28,0x28,0x2E,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,
+ 0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x04,0x25,0x04,0x20,0x26,0x24,0x23,0x04,0x04,0x29,
+ 0x23,0x22,0x25,0x22,0x25,0x23,0x25,0x25,0x28,0x25,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x22,0x25,0x24,0x26,
+ 0x04,0x24,0x21,0x24,0x25,0x22,0x22,0x25,0x26,0x23,0x23,0x25,0x2D,0x2F,0x2D,0x2D,
+ 0x20,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,
+ 0x28,0x28,0x28,0x2E,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,
+ 0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x20,0x23,0x25,0x23,0x26,0x24,0x28,0x28,0x04,0x29,
+ 0x25,0x24,0x26,0x26,0x28,0x04,0x28,0x04,0x28,0x25,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x22,0x24,0x26,0x23,
+ 0x25,0x22,0x25,0x23,0x22,0x26,0x28,0x23,0x20,0x25,0x22,0x24,0x2D,0x2F,0x2D,0x2D,
+ 0x23,0x2A,0x2C,0x2C,0x2D,0x2D,0x2D,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x20,0x28,0x26,0x26,0x25,0x28,0x28,0x04,0x24,0x29,
+ 0x26,0x26,0x25,0x04,0x04,0x04,0x25,0x25,0x26,0x22,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x22,0x25,0x23,0x26,
+ 0x25,0x28,0x25,0x28,0x26,0x28,0x28,0x24,0x25,0x25,0x22,0x04,0x2C,0x2F,0x2D,0x2D,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x24,0x28,0x27,0x25,0x28,0x04,0x28,0x24,0x26,0x29,
+ 0x28,0x26,0x25,0x25,0x28,0x26,0x25,0x25,0x25,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x22,0x22,0x22,0x23,
+ 0x25,0x26,0x25,0x04,0x25,0x28,0x24,0x22,0x26,0x23,0x23,0x26,0x2C,0x2F,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x04,0x29,0x28,0x29,0x28,0x28,0x25,0x25,0x26,0x29,
+ 0x28,0x04,0x25,0x28,0x04,0x28,0x24,0x26,0x25,0x24,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x22,0x26,0x24,0x26,
+ 0x28,0x04,0x22,0x26,0x25,0x25,0x22,0x24,0x25,0x23,0x22,0x25,0x2C,0x2F,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x33,0x28,0x28,0x28,0x25,0x28,0x29,0x29,0x28,0x25,0x29,
+ 0x25,0x26,0x25,0x25,0x26,0x26,0x26,0x28,0x28,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
+ 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x22,0x24,0x25,0x04,
+ 0x24,0x26,0x25,0x04,0x21,0x24,0x20,0x24,0x22,0x25,0x25,0x24,0x2C,0x2F,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x33,0x25,0x28,0x25,0x25,0x26,0x25,0x28,0x29,0x25,0x29,
+ 0x04,0x04,0x25,0x25,0x24,0x23,0x26,0x04,0x24,0x26,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x22,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x24,
+ 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x23,0x2D,0x2D,0x2D,0x2D,0x22,0x24,0x25,0x25,
+ 0x22,0x20,0x20,0x20,0x22,0x22,0x26,0x26,0x24,0x23,0x23,0x22,0x28,0x24,0x24,0x24,
+ 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,
+ 0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,
+ 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x21,
+ 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
+ 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
+ 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x36,0x36,0x36,
+ 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
+ 0x35,0x35,0x35,0x35,0x35,0x0C,0x0C,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,
+ 0x34,0x34,0x34,0x33,0x33,0x32,0x04,0x25,0x28,0x24,0x25,0x04,0x28,0x24,0x2B,0x29,
+ 0x27,0x24,0x25,0x04,0x25,0x25,0x04,0x25,0x22,0x04,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x20,0x22,0x23,0x22,
+ 0x22,0x04,0x24,0x25,0x26,0x25,0x24,0x04,0x25,0x25,0x24,0x24,0x22,0x26,0x25,0x25,
+ 0x24,0x24,0x24,0x26,0x25,0x28,0x25,0x28,0x28,0x28,0x25,0x24,0x26,0x24,0x25,0x28,
+ 0x22,0x22,0x25,0x26,0x24,0x24,0x26,0x04,0x26,0x25,0x22,0x04,0x25,0x25,0x28,0x28,
+ 0x26,0x26,0x29,0x28,0x28,0x29,0x25,0x29,0x29,0x25,0x29,0x28,0x04,0x29,0x28,0x25,
+ 0x04,0x28,0x04,0x26,0x26,0x23,0x26,0x25,0x26,0x28,0x25,0x23,0x25,0x25,0x28,0x26,
+ 0x25,0x28,0x26,0x28,0x28,0x25,0x29,0x28,0x28,0x04,0x24,0x28,0x28,0x25,0x28,0x28,
+ 0x28,0x28,0x04,0x26,0x26,0x26,0x28,0x26,0x26,0x25,0x26,0x26,0x28,0x28,0x28,0x28,
+ 0x28,0x2A,0x29,0x28,0x28,0x29,0x28,0x2A,0x28,0x2A,0x28,0x26,0x28,0x28,0x28,0x28,
+ 0x04,0x04,0x28,0x24,0x25,0x25,0x24,0x20,0x20,0x04,0x25,0x25,0x25,0x26,0x24,0x25,
+ 0x24,0x23,0x28,0x26,0x24,0x28,0x04,0x26,0x26,0x04,0x04,0x04,0x23,0x26,0x25,0x22,
+ 0x28,0x25,0x24,0x04,0x24,0x25,0x25,0x27,0x04,0x28,0x28,0x28,0x28,0x04,0x28,0x29,
+ 0x04,0x04,0x25,0x25,0x23,0x26,0x23,0x04,0x24,0x23,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x20,0x24,0x25,0x25,
+ 0x28,0x24,0x24,0x24,0x25,0x22,0x26,0x25,0x24,0x26,0x23,0x22,0x25,0x04,0x24,0x24,
+ 0x28,0x23,0x28,0x23,0x23,0x04,0x26,0x25,0x25,0x25,0x28,0x24,0x26,0x21,0x25,0x24,
+ 0x22,0x26,0x24,0x24,0x25,0x04,0x04,0x26,0x25,0x28,0x04,0x25,0x28,0x04,0x26,0x28,
+ 0x29,0x29,0x26,0x29,0x04,0x28,0x25,0x04,0x04,0x28,0x25,0x28,0x28,0x28,0x25,0x28,
+ 0x28,0x24,0x28,0x04,0x04,0x26,0x24,0x25,0x25,0x26,0x26,0x28,0x28,0x28,0x25,0x26,
+ 0x28,0x26,0x25,0x26,0x25,0x28,0x26,0x28,0x29,0x26,0x25,0x28,0x28,0x28,0x26,0x25,
+ 0x29,0x04,0x26,0x04,0x24,0x04,0x25,0x25,0x28,0x04,0x25,0x04,0x26,0x28,0x28,0x25,
+ 0x28,0x26,0x04,0x29,0x28,0x26,0x25,0x28,0x28,0x25,0x28,0x2A,0x25,0x28,0x28,0x26,
+ 0x04,0x23,0x20,0x24,0x22,0x24,0x22,0x25,0x22,0x25,0x25,0x23,0x22,0x22,0x22,0x26,
+ 0x25,0x28,0x26,0x28,0x04,0x04,0x28,0x29,0x28,0x25,0x25,0x28,0x28,0x28,0x28,0x26,
+ 0x29,0x23,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,
+ 0x28,0x28,0x25,0x23,0x25,0x23,0x23,0x23,0x25,0x24,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x20,0x25,0x28,0x23,
+ 0x26,0x24,0x26,0x25,0x28,0x25,0x25,0x26,0x22,0x23,0x26,0x25,0x23,0x25,0x25,0x24,
+ 0x25,0x23,0x25,0x26,0x24,0x26,0x24,0x28,0x25,0x24,0x04,0x22,0x28,0x23,0x28,0x04,
+ 0x24,0x04,0x28,0x28,0x28,0x26,0x28,0x26,0x28,0x24,0x28,0x28,0x29,0x28,0x28,0x28,
+ 0x28,0x28,0x28,0x28,0x28,0x04,0x25,0x26,0x28,0x04,0x28,0x26,0x28,0x28,0x04,0x25,
+ 0x26,0x25,0x26,0x25,0x26,0x24,0x28,0x28,0x26,0x04,0x28,0x24,0x25,0x25,0x28,0x04,
+ 0x28,0x28,0x04,0x28,0x26,0x28,0x25,0x26,0x28,0x28,0x28,0x28,0x04,0x28,0x28,0x25,
+ 0x26,0x04,0x24,0x25,0x04,0x22,0x22,0x20,0x28,0x26,0x26,0x28,0x25,0x25,0x04,0x25,
+ 0x04,0x23,0x28,0x22,0x22,0x27,0x28,0x25,0x25,0x28,0x04,0x04,0x26,0x28,0x28,0x28,
+ 0x25,0x25,0x25,0x24,0x24,0x25,0x23,0x24,0x23,0x25,0x25,0x23,0x24,0x21,0x04,0x26,
+ 0x25,0x28,0x25,0x26,0x28,0x04,0x04,0x26,0x29,0x04,0x28,0x29,0x26,0x29,0x28,0x25,
+ 0x29,0x28,0x28,0x28,0x26,0x2A,0x2A,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x2D,0x29,
+ 0x25,0x22,0x22,0x25,0x26,0x25,0x04,0x25,0x25,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,
+ 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x20,0x24,0x25,0x24,
+ 0x23,0x26,0x24,0x24,0x25,0x26,0x22,0x04,0x22,0x26,0x24,0x28,0x24,0x04,0x24,0x25,
+ 0x28,0x25,0x26,0x26,0x25,0x28,0x04,0x25,0x24,0x04,0x25,0x25,0x23,0x25,0x28,0x04,
+ 0x24,0x04,0x28,0x24,0x28,0x29,0x26,0x28,0x04,0x29,0x25,0x2A,0x26,0x28,0x28,0x28,
+ 0x04,0x24,0x28,0x28,0x28,0x23,0x25,0x28,0x24,0x26,0x26,0x25,0x28,0x22,0x26,0x25,
+ 0x28,0x04,0x25,0x04,0x28,0x28,0x28,0x26,0x28,0x26,0x28,0x22,0x24,0x26,0x28,0x26,
+ 0x26,0x28,0x26,0x28,0x26,0x26,0x25,0x04,0x25,0x24,0x26,0x28,0x26,0x25,0x28,0x24,
+ 0x23,0x20,0x24,0x20,0x20,0x23,0x23,0x22,0x28,0x25,0x28,0x04,0x04,0x25,0x28,0x26,
+ 0x28,0x24,0x26,0x25,0x28,0x04,0x28,0x28,0x04,0x27,0x28,0x28,0x25,0x28,0x28,0x04,
+ 0x25,0x25,0x25,0x04,0x25,0x24,0x20,0x22,0x23,0x22,0x25,0x23,0x25,0x28,0x28,0x28,
+ 0x25,0x28,0x25,0x28,0x28,0x04,0x28,0x28,0x28,0x25,0x28,0x28,0x26,0x28,0x26,0x28,
+ 0x25,0x25,0x28,0x28,0x28,0x24,0x25,0x04,0x28,0x28,0x2A,0x28,0x28,0x28,0x28,0x29,
+ 0x23,0x23,0x23,0x25,0x04,0x24,0x23,0x24,0x21,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2B,0x04,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2B,0x23,0x27,0x27,0x27,0x27,0x25,0x22,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2B,0x25,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x20,0x22,0x23,0x04,
+ 0x25,0x26,0x28,0x24,0x25,0x23,0x26,0x28,0x28,0x04,0x25,0x28,0x28,0x25,0x25,0x28,
+ 0x25,0x24,0x23,0x28,0x04,0x23,0x23,0x26,0x22,0x25,0x25,0x26,0x25,0x26,0x28,0x28,
+ 0x25,0x26,0x28,0x28,0x28,0x28,0x28,0x26,0x04,0x28,0x28,0x28,0x25,0x25,0x24,0x26,
+ 0x28,0x04,0x25,0x28,0x04,0x26,0x28,0x04,0x26,0x28,0x24,0x28,0x28,0x26,0x25,0x04,
+ 0x28,0x25,0x04,0x28,0x04,0x28,0x28,0x28,0x04,0x28,0x28,0x24,0x26,0x26,0x24,0x28,
+ 0x04,0x26,0x25,0x26,0x25,0x28,0x25,0x26,0x24,0x25,0x26,0x04,0x26,0x25,0x26,0x28,
+ 0x20,0x20,0x22,0x25,0x23,0x24,0x28,0x23,0x25,0x04,0x25,0x28,0x26,0x25,0x25,0x04,
+ 0x24,0x26,0x24,0x26,0x28,0x25,0x25,0x26,0x04,0x26,0x28,0x26,0x25,0x24,0x25,0x25,
+ 0x22,0x20,0x20,0x22,0x24,0x28,0x28,0x26,0x26,0x04,0x25,0x24,0x28,0x29,0x28,0x28,
+ 0x28,0x26,0x28,0x04,0x29,0x28,0x28,0x28,0x28,0x28,0x04,0x28,0x2A,0x2A,0x28,0x26,
+ 0x25,0x24,0x28,0x2A,0x26,0x28,0x25,0x2A,0x2A,0x28,0x28,0x28,0x28,0x24,0x22,0x29,
+ 0x24,0x22,0x23,0x25,0x23,0x22,0x25,0x23,0x22,0x22,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x20,0x26,0x24,0x25,
+ 0x25,0x25,0x28,0x23,0x28,0x26,0x26,0x23,0x23,0x25,0x28,0x26,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,
+ 0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,
+ 0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2C,
+ 0x2C,0x2C,0x2C,0x2C,0x2C,0x26,0x26,0x28,0x28,0x29,0x26,0x26,0x28,0x04,0x25,0x29,
+ 0x23,0x20,0x20,0x24,0x22,0x22,0x26,0x24,0x22,0x22,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
+ 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x20,0x25,0x04,0x04,
+ 0x25,0x28,0x25,0x25,0x04,0x25,0x26,0x04,0x21,0x23,0x28,0x23,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x23,0x28,0x04,0x28,0x26,0x25,0x23,0x28,0x26,0x24,0x29,
+ 0x20,0x20,0x23,0x23,0x22,0x20,0x24,0x22,0x20,0x24,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x26,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x22,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x23,0x2D,0x2D,0x2D,0x2D,0x20,0x25,0x26,0x23,
+ 0x22,0x28,0x25,0x28,0x25,0x25,0x25,0x24,0x22,0x25,0x26,0x24,0x2F,0x2F,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x20,0x04,0x25,0x25,0x25,0x26,0x26,0x26,0x28,0x28,0x29,
+ 0x20,0x26,0x20,0x25,0x22,0x20,0x24,0x20,0x25,0x20,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x20,0x21,0x25,0x25,
+ 0x23,0x22,0x24,0x22,0x22,0x28,0x04,0x23,0x25,0x28,0x24,0x23,0x2F,0x2F,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x36,0x26,0x28,0x28,0x04,0x04,0x04,0x28,0x04,0x23,0x29,
+ 0x22,0x22,0x23,0x26,0x23,0x20,0x22,0x25,0x22,0x20,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x20,0x24,0x04,0x23,
+ 0x24,0x24,0x28,0x22,0x25,0x23,0x25,0x25,0x04,0x28,0x25,0x26,0x2F,0x2F,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x36,0x26,0x24,0x22,0x24,0x24,0x28,0x04,0x25,0x25,0x29,
+ 0x20,0x23,0x24,0x20,0x25,0x24,0x28,0x24,0x23,0x24,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x20,0x25,0x24,0x28,
+ 0x24,0x23,0x23,0x25,0x24,0x26,0x24,0x25,0x24,0x25,0x25,0x04,0x2F,0x2F,0x2D,0x2D,
+ 0x32,0x33,0x33,0x34,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x35,0x35,0x35,0x35,0x36,0x36,
+ 0x36,0x36,0x20,0x23,0x2F,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,
+ 0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x28,0x28,0x22,0x04,0x28,0x25,0x04,0x04,0x24,0x29,
+ 0x24,0x22,0x25,0x21,0x22,0x23,0x22,0x26,0x26,0x23,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x20,0x23,0x23,0x25,
+ 0x25,0x25,0x25,0x25,0x23,0x26,0x28,0x25,0x26,0x25,0x26,0x25,0x2E,0x2F,0x2D,0x2D,
+ 0x33,0x36,0x22,0x25,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,
+ 0x28,0x28,0x28,0x2C,0x2F,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,
+ 0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x26,0x24,0x24,0x04,0x28,0x04,0x26,0x25,0x28,0x29,
+ 0x25,0x26,0x25,0x23,0x26,0x25,0x24,0x25,0x04,0x24,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2B,0x24,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2B,0x28,0x27,0x27,0x27,0x27,0x25,0x22,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2B,0x04,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x20,0x22,0x23,0x23,
+ 0x26,0x23,0x28,0x24,0x04,0x28,0x28,0x28,0x23,0x28,0x27,0x27,0x2E,0x2F,0x2D,0x2D,
+ 0x34,0x22,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x28,0x28,0x2C,0x2F,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,
+ 0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x28,0x28,0x25,0x26,0x26,0x26,0x04,0x24,0x20,0x29,
+ 0x25,0x26,0x22,0x25,0x24,0x25,0x24,0x04,0x26,0x25,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x20,0x25,0x24,0x26,
+ 0x04,0x25,0x26,0x26,0x04,0x28,0x23,0x04,0x04,0x29,0x28,0x28,0x2E,0x2F,0x2D,0x2D,
+ 0x34,0x25,0x27,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x28,0x28,0x2D,0x2F,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,
+ 0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,
+ 0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x26,0x28,0x25,0x25,0x28,0x28,0x28,0x24,0x04,0x29,
+ 0x26,0x23,0x23,0x25,0x25,0x04,0x25,0x25,0x26,0x24,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
+ 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x20,0x28,0x25,0x26,
+ 0x25,0x25,0x26,0x26,0x25,0x04,0x26,0x28,0x28,0x28,0x26,0x26,0x2E,0x2F,0x2D,0x2D,
+ 0x35,0x27,0x27,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x28,0x28,0x2D,0x2F,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,
+ 0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x24,0x25,0x24,0x28,0x23,0x25,0x22,0x04,0x25,0x29,
+ 0x25,0x25,0x25,0x28,0x25,0x24,0x23,0x25,0x23,0x23,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x24,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x28,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x20,0x25,0x23,0x28,
+ 0x23,0x26,0x29,0x04,0x28,0x29,0x28,0x28,0x26,0x28,0x28,0x04,0x2E,0x2F,0x2D,0x2D,
+ 0x36,0x27,0x28,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x28,0x28,0x2E,0x2F,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,
+ 0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,
+ 0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x04,0x04,0x25,0x26,0x26,0x26,0x28,0x25,0x28,0x29,
+ 0x04,0x24,0x23,0x24,0x23,0x24,0x22,0x25,0x24,0x23,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x20,0x28,0x25,0x28,
+ 0x28,0x25,0x04,0x25,0x29,0x26,0x28,0x28,0x28,0x25,0x23,0x04,0x2D,0x2F,0x2D,0x2D,
+ 0x20,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,
+ 0x28,0x28,0x28,0x2E,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,
+ 0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,
+ 0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x25,0x28,0x26,0x28,0x28,0x25,0x28,0x28,0x28,0x29,
+ 0x23,0x25,0x26,0x28,0x22,0x25,0x04,0x28,0x28,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x20,0x29,0x29,0x25,
+ 0x28,0x04,0x04,0x28,0x28,0x28,0x28,0x28,0x25,0x28,0x25,0x28,0x2D,0x2F,0x2D,0x2D,
+ 0x23,0x2A,0x2C,0x2C,0x2D,0x2D,0x2D,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,
+ 0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,
+ 0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x28,0x26,0x04,0x2A,0x04,0x24,0x28,0x29,0x04,0x29,
+ 0x25,0x25,0x25,0x04,0x04,0x24,0x28,0x28,0x28,0x25,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x20,0x28,0x28,0x25,
+ 0x28,0x28,0x28,0x29,0x28,0x28,0x27,0x25,0x04,0x28,0x26,0x24,0x2C,0x2F,0x2D,0x2D,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,
+ 0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x04,0x28,0x29,0x28,0x04,0x2A,0x2A,0x2A,0x28,0x29,
+ 0x28,0x25,0x25,0x04,0x24,0x28,0x04,0x26,0x28,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,
+ 0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x36,0x28,0x29,0x28,
+ 0x25,0x29,0x28,0x2A,0x25,0x24,0x28,0x25,0x24,0x26,0x04,0x22,0x2C,0x2F,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x28,0x28,0x2A,0x25,0x28,0x04,0x25,0x26,0x28,0x29,
+ 0x25,0x25,0x25,0x26,0x25,0x24,0x25,0x28,0x28,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2B,0x04,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2B,0x26,0x27,0x27,0x27,0x27,0x25,0x22,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2B,0x28,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x36,0x28,0x26,0x04,
+ 0x28,0x26,0x24,0x22,0x25,0x25,0x25,0x28,0x22,0x20,0x26,0x22,0x2C,0x2F,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x33,0x25,0x25,0x25,0x28,0x28,0x2A,0x04,0x29,0x28,0x29,
+ 0x04,0x23,0x26,0x28,0x25,0x28,0x04,0x28,0x24,0x04,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x36,0x28,0x28,0x28,
+ 0x28,0x25,0x25,0x28,0x22,0x24,0x25,0x25,0x25,0x26,0x04,0x28,0x2C,0x2F,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x33,0x25,0x04,0x28,0x25,0x04,0x2A,0x28,0x2A,0x2B,0x29,
+ 0x24,0x28,0x22,0x23,0x24,0x26,0x04,0x25,0x24,0x25,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x36,0x28,0x26,0x28,
+ 0x25,0x22,0x26,0x23,0x23,0x25,0x22,0x20,0x26,0x20,0x23,0x04,0x28,0x24,0x24,0x24,
+ 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,
+ 0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,
+ 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x21,
+ 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
+ 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
+ 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x36,0x36,0x36,
+ 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
+ 0x35,0x35,0x35,0x35,0x35,0x0C,0x0C,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,
+ 0x34,0x34,0x34,0x33,0x33,0x32,0x29,0x25,0x28,0x28,0x2A,0x28,0x29,0x28,0x25,0x29,
+ 0x04,0x23,0x23,0x24,0x24,0x04,0x28,0x24,0x26,0x25,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x28,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x24,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x22,0x2D,0x2D,0x2D,0x2D,0x36,0x25,0x25,0x20,
+ 0x24,0x23,0x24,0x20,0x22,0x24,0x25,0x24,0x24,0x25,0x25,0x24,0x28,0x28,0x28,0x04,
+ 0x28,0x25,0x28,0x28,0x25,0x04,0x28,0x28,0x04,0x25,0x25,0x28,0x04,0x28,0x28,0x26,
+ 0x28,0x24,0x24,0x20,0x22,0x04,0x25,0x23,0x21,0x21,0x26,0x25,0x21,0x25,0x28,0x23,
+ 0x25,0x25,0x22,0x23,0x25,0x22,0x22,0x22,0x20,0x23,0x25,0x23,0x28,0x04,0x04,0x28,
+ 0x24,0x25,0x25,0x25,0x20,0x22,0x23,0x24,0x26,0x25,0x24,0x26,0x26,0x28,0x22,0x24,
+ 0x26,0x26,0x25,0x24,0x23,0x23,0x24,0x25,0x26,0x24,0x25,0x25,0x24,0x20,0x20,0x22,
+ 0x28,0x25,0x25,0x24,0x23,0x25,0x24,0x25,0x24,0x25,0x22,0x23,0x04,0x04,0x25,0x23,
+ 0x25,0x28,0x28,0x25,0x22,0x24,0x25,0x25,0x25,0x04,0x28,0x25,0x28,0x26,0x24,0x26,
+ 0x25,0x23,0x04,0x25,0x26,0x25,0x25,0x24,0x04,0x25,0x24,0x26,0x04,0x28,0x29,0x28,
+ 0x28,0x28,0x2A,0x28,0x28,0x28,0x29,0x28,0x26,0x26,0x04,0x24,0x22,0x04,0x25,0x28,
+ 0x25,0x26,0x29,0x25,0x28,0x24,0x28,0x26,0x29,0x28,0x25,0x28,0x04,0x26,0x04,0x29,
+ 0x04,0x04,0x23,0x28,0x28,0x25,0x25,0x23,0x04,0x26,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x36,0x20,0x22,0x23,
+ 0x20,0x24,0x22,0x24,0x22,0x20,0x24,0x25,0x26,0x24,0x25,0x28,0x22,0x04,0x28,0x2A,
+ 0x28,0x28,0x26,0x29,0x28,0x29,0x28,0x26,0x25,0x25,0x26,0x24,0x28,0x26,0x28,0x23,
+ 0x22,0x20,0x04,0x26,0x24,0x22,0x28,0x28,0x25,0x23,0x04,0x24,0x22,0x04,0x24,0x04,
+ 0x25,0x28,0x25,0x28,0x25,0x24,0x26,0x28,0x04,0x24,0x22,0x04,0x23,0x04,0x04,0x24,
+ 0x26,0x26,0x26,0x25,0x25,0x28,0x22,0x23,0x28,0x25,0x28,0x25,0x22,0x25,0x23,0x28,
+ 0x04,0x26,0x28,0x25,0x28,0x28,0x24,0x25,0x26,0x25,0x28,0x22,0x22,0x25,0x25,0x28,
+ 0x25,0x22,0x25,0x20,0x25,0x20,0x25,0x24,0x22,0x24,0x26,0x26,0x04,0x26,0x24,0x26,
+ 0x25,0x26,0x24,0x04,0x25,0x26,0x25,0x24,0x26,0x24,0x26,0x26,0x04,0x28,0x26,0x24,
+ 0x28,0x25,0x04,0x25,0x28,0x04,0x22,0x24,0x04,0x27,0x26,0x28,0x04,0x25,0x25,0x28,
+ 0x28,0x04,0x28,0x29,0x23,0x25,0x28,0x26,0x25,0x22,0x25,0x24,0x22,0x22,0x28,0x29,
+ 0x28,0x28,0x28,0x28,0x25,0x04,0x04,0x26,0x29,0x25,0x24,0x04,0x26,0x22,0x24,0x29,
+ 0x25,0x28,0x28,0x26,0x04,0x25,0x23,0x04,0x25,0x26,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x36,0x20,0x25,0x22,
+ 0x24,0x23,0x22,0x25,0x25,0x28,0x26,0x25,0x04,0x24,0x28,0x28,0x29,0x28,0x25,0x2A,
+ 0x28,0x28,0x04,0x28,0x25,0x25,0x22,0x22,0x26,0x20,0x20,0x26,0x24,0x24,0x28,0x26,
+ 0x28,0x25,0x28,0x28,0x25,0x25,0x26,0x28,0x28,0x04,0x28,0x25,0x24,0x25,0x04,0x28,
+ 0x26,0x26,0x28,0x04,0x26,0x25,0x26,0x24,0x28,0x28,0x25,0x24,0x28,0x04,0x25,0x25,
+ 0x25,0x25,0x25,0x04,0x24,0x04,0x24,0x25,0x04,0x26,0x28,0x25,0x28,0x24,0x25,0x26,
+ 0x25,0x26,0x26,0x04,0x28,0x26,0x25,0x26,0x25,0x25,0x25,0x22,0x20,0x22,0x25,0x23,
+ 0x20,0x20,0x22,0x28,0x28,0x22,0x24,0x23,0x26,0x25,0x28,0x25,0x28,0x28,0x28,0x23,
+ 0x25,0x25,0x24,0x28,0x28,0x26,0x26,0x25,0x25,0x28,0x24,0x25,0x24,0x28,0x25,0x28,
+ 0x28,0x28,0x04,0x25,0x28,0x28,0x25,0x28,0x28,0x28,0x29,0x28,0x28,0x28,0x28,0x28,
+ 0x29,0x28,0x27,0x27,0x25,0x24,0x24,0x25,0x04,0x26,0x25,0x25,0x28,0x29,0x24,0x26,
+ 0x25,0x26,0x25,0x24,0x27,0x25,0x25,0x25,0x04,0x28,0x04,0x04,0x28,0x28,0x28,0x29,
+ 0x28,0x26,0x04,0x04,0x22,0x25,0x22,0x24,0x25,0x24,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x36,0x25,0x25,0x24,
+ 0x24,0x26,0x26,0x04,0x25,0x25,0x28,0x28,0x04,0x2A,0x04,0x28,0x28,0x28,0x26,0x28,
+ 0x28,0x28,0x26,0x28,0x22,0x23,0x25,0x22,0x26,0x28,0x24,0x25,0x28,0x26,0x28,0x28,
+ 0x04,0x26,0x24,0x28,0x25,0x25,0x28,0x25,0x04,0x25,0x22,0x26,0x26,0x24,0x26,0x04,
+ 0x28,0x04,0x28,0x25,0x25,0x04,0x28,0x25,0x24,0x26,0x24,0x04,0x04,0x24,0x28,0x25,
+ 0x04,0x26,0x26,0x28,0x25,0x25,0x23,0x26,0x04,0x28,0x26,0x25,0x28,0x25,0x24,0x04,
+ 0x24,0x22,0x26,0x24,0x28,0x28,0x28,0x26,0x28,0x26,0x24,0x24,0x20,0x24,0x23,0x20,
+ 0x24,0x28,0x24,0x26,0x25,0x28,0x26,0x04,0x26,0x28,0x25,0x26,0x24,0x23,0x26,0x26,
+ 0x28,0x26,0x28,0x22,0x25,0x26,0x25,0x25,0x26,0x04,0x24,0x28,0x04,0x25,0x28,0x26,
+ 0x28,0x28,0x29,0x26,0x04,0x04,0x28,0x28,0x25,0x28,0x25,0x28,0x26,0x28,0x26,0x28,
+ 0x04,0x28,0x25,0x22,0x28,0x26,0x26,0x28,0x04,0x26,0x29,0x25,0x28,0x24,0x26,0x26,
+ 0x26,0x25,0x25,0x25,0x28,0x28,0x26,0x26,0x04,0x24,0x23,0x24,0x25,0x28,0x04,0x29,
+ 0x22,0x22,0x21,0x24,0x25,0x25,0x26,0x23,0x26,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x36,0x25,0x04,0x25,
+ 0x04,0x25,0x28,0x04,0x26,0x28,0x28,0x28,0x24,0x25,0x28,0x28,0x26,0x04,0x28,0x25,
+ 0x26,0x26,0x24,0x23,0x04,0x28,0x24,0x28,0x24,0x26,0x28,0x04,0x26,0x26,0x24,0x25,
+ 0x24,0x2A,0x26,0x29,0x28,0x28,0x04,0x26,0x28,0x25,0x26,0x26,0x26,0x28,0x26,0x25,
+ 0x26,0x26,0x25,0x25,0x25,0x26,0x04,0x04,0x25,0x26,0x25,0x24,0x26,0x26,0x24,0x25,
+ 0x26,0x28,0x25,0x28,0x26,0x28,0x26,0x28,0x28,0x26,0x25,0x25,0x25,0x25,0x28,0x23,
+ 0x28,0x28,0x22,0x25,0x04,0x28,0x04,0x24,0x24,0x23,0x25,0x04,0x25,0x22,0x20,0x04,
+ 0x26,0x25,0x24,0x26,0x26,0x28,0x26,0x26,0x04,0x26,0x25,0x24,0x25,0x24,0x24,0x28,
+ 0x24,0x25,0x04,0x24,0x25,0x26,0x23,0x24,0x27,0x28,0x28,0x28,0x29,0x28,0x25,0x28,
+ 0x2A,0x2A,0x2A,0x29,0x2A,0x28,0x26,0x28,0x28,0x26,0x28,0x26,0x24,0x25,0x28,0x26,
+ 0x25,0x26,0x04,0x28,0x04,0x28,0x04,0x24,0x28,0x04,0x28,0x28,0x29,0x04,0x28,0x23,
+ 0x04,0x28,0x24,0x28,0x26,0x28,0x28,0x28,0x28,0x27,0x25,0x04,0x04,0x28,0x26,0x29,
+ 0x22,0x25,0x26,0x04,0x25,0x23,0x26,0x23,0x23,0x25,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2B,0x25,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2B,0x20,0x27,0x27,0x27,0x27,0x25,0x22,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2B,0x23,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x36,0x25,0x24,0x26,
+ 0x29,0x28,0x29,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x26,0x25,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,
+ 0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,
+ 0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2C,
+ 0x2C,0x2C,0x2C,0x2C,0x2C,0x26,0x28,0x26,0x28,0x28,0x25,0x26,0x28,0x29,0x25,0x29,
+ 0x24,0x23,0x21,0x22,0x28,0x25,0x23,0x21,0x28,0x24,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x36,0x25,0x28,0x04,
+ 0x04,0x28,0x28,0x28,0x29,0x28,0x26,0x28,0x26,0x24,0x28,0x28,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x23,0x28,0x26,0x04,0x28,0x28,0x04,0x29,0x28,0x04,0x29,
+ 0x22,0x26,0x22,0x22,0x23,0x04,0x24,0x25,0x24,0x24,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
+ 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x36,0x28,0x25,0x29,
+ 0x26,0x26,0x28,0x28,0x26,0x28,0x28,0x26,0x04,0x25,0x04,0x22,0x2F,0x2F,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x20,0x25,0x28,0x28,0x28,0x28,0x25,0x25,0x25,0x27,0x29,
+ 0x23,0x24,0x23,0x26,0x04,0x28,0x25,0x26,0x23,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x24,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x24,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x24,0x2D,0x2D,0x2D,0x2D,0x36,0x25,0x28,0x28,
+ 0x28,0x28,0x25,0x28,0x24,0x04,0x26,0x04,0x28,0x28,0x26,0x20,0x2F,0x2F,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x36,0x28,0x28,0x04,0x04,0x2A,0x04,0x28,0x24,0x28,0x29,
+ 0x24,0x24,0x25,0x23,0x28,0x04,0x26,0x26,0x25,0x04,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x36,0x25,0x26,0x28,
+ 0x26,0x04,0x28,0x04,0x28,0x25,0x24,0x26,0x25,0x22,0x25,0x28,0x2F,0x2F,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x36,0x28,0x04,0x28,0x28,0x2A,0x29,0x28,0x28,0x2A,0x29,
+ 0x28,0x23,0x04,0x25,0x28,0x22,0x26,0x28,0x23,0x04,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x36,0x25,0x26,0x24,
+ 0x26,0x28,0x24,0x04,0x25,0x24,0x22,0x20,0x20,0x23,0x24,0x25,0x2F,0x2F,0x2D,0x2D,
+ 0x32,0x33,0x33,0x34,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x35,0x35,0x35,0x35,0x36,0x36,
+ 0x36,0x36,0x20,0x23,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x28,0x28,0x28,0x28,0x28,0x26,0x04,0x04,0x28,0x29,
+ 0x23,0x25,0x04,0x28,0x25,0x25,0x22,0x24,0x25,0x04,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x36,0x28,0x25,0x26,
+ 0x24,0x20,0x22,0x20,0x22,0x26,0x22,0x23,0x25,0x04,0x25,0x04,0x2E,0x2F,0x2D,0x2D,
+ 0x33,0x36,0x22,0x25,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,
+ 0x28,0x28,0x28,0x2C,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x04,0x29,0x29,0x04,0x28,0x04,0x22,0x22,0x20,0x29,
+ 0x04,0x25,0x25,0x23,0x23,0x25,0x22,0x25,0x23,0x26,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x36,0x20,0x25,0x25,
+ 0x25,0x22,0x04,0x23,0x04,0x24,0x04,0x04,0x24,0x04,0x04,0x28,0x2E,0x2F,0x2D,0x2D,
+ 0x34,0x22,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x28,0x28,0x2C,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x29,0x28,0x27,0x25,0x26,0x22,0x24,0x24,0x20,0x29,
+ 0x28,0x24,0x25,0x24,0x26,0x22,0x28,0x24,0x22,0x22,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2B,0x25,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2B,0x28,0x27,0x27,0x27,0x27,0x25,0x22,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2B,0x28,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x36,0x25,0x25,0x25,
+ 0x25,0x25,0x04,0x23,0x04,0x25,0x26,0x25,0x25,0x22,0x26,0x28,0x2E,0x2F,0x2D,0x2D,
+ 0x34,0x25,0x27,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x28,0x28,0x2D,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x04,0x04,0x23,0x25,0x24,0x25,0x23,0x23,0x04,0x29,
+ 0x23,0x26,0x23,0x25,0x25,0x25,0x04,0x22,0x24,0x25,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x04,0x24,0x28,
+ 0x25,0x25,0x24,0x23,0x24,0x25,0x28,0x23,0x23,0x04,0x04,0x22,0x2E,0x2F,0x2D,0x2D,
+ 0x35,0x27,0x27,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x28,0x28,0x2D,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x25,0x23,0x22,0x04,0x23,0x22,0x28,0x28,0x25,0x29,
+ 0x25,0x22,0x23,0x24,0x24,0x20,0x23,0x26,0x23,0x22,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
+ 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x35,0x22,0x24,0x25,
+ 0x25,0x24,0x25,0x22,0x25,0x25,0x26,0x25,0x26,0x22,0x28,0x28,0x2E,0x2F,0x2D,0x2D,
+ 0x36,0x27,0x28,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x28,0x28,0x2E,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x25,0x20,0x25,0x24,0x25,0x26,0x04,0x24,0x28,0x29,
+ 0x23,0x23,0x25,0x24,0x24,0x04,0x04,0x22,0x25,0x22,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x22,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x28,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x35,0x24,0x28,0x26,
+ 0x25,0x04,0x25,0x28,0x24,0x22,0x25,0x26,0x23,0x25,0x25,0x28,0x2D,0x2F,0x2D,0x2D,
+ 0x20,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,
+ 0x28,0x28,0x28,0x2E,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x22,0x24,0x04,0x25,0x25,0x04,0x04,0x28,0x04,0x29,
+ 0x25,0x23,0x25,0x23,0x25,0x21,0x22,0x25,0x22,0x23,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x35,0x25,0x25,0x23,
+ 0x24,0x24,0x24,0x25,0x21,0x24,0x25,0x25,0x22,0x28,0x04,0x22,0x2D,0x2F,0x2D,0x2D,
+ 0x23,0x2A,0x2C,0x2C,0x2D,0x2D,0x2D,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x23,0x28,0x04,0x23,0x04,0x28,0x26,0x26,0x27,0x29,
+ 0x26,0x26,0x25,0x22,0x22,0x20,0x25,0x20,0x25,0x04,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x35,0x24,0x04,0x28,
+ 0x22,0x26,0x24,0x24,0x25,0x24,0x25,0x28,0x25,0x24,0x24,0x25,0x2C,0x2F,0x2D,0x2D,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x26,0x04,0x28,0x26,0x26,0x04,0x04,0x25,0x25,0x29,
+ 0x25,0x22,0x24,0x22,0x20,0x23,0x20,0x25,0x24,0x25,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x35,0x04,0x04,0x25,
+ 0x23,0x22,0x25,0x04,0x25,0x26,0x28,0x25,0x24,0x04,0x28,0x25,0x2C,0x2F,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x25,0x25,0x28,0x04,0x26,0x25,0x26,0x28,0x26,0x29,
+ 0x20,0x04,0x22,0x04,0x24,0x24,0x26,0x23,0x25,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x35,0x25,0x28,0x24,
+ 0x22,0x24,0x22,0x04,0x25,0x23,0x22,0x25,0x23,0x24,0x04,0x25,0x2C,0x2F,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x33,0x04,0x28,0x04,0x28,0x04,0x26,0x28,0x25,0x28,0x29,
+ 0x24,0x20,0x26,0x21,0x25,0x22,0x25,0x28,0x04,0x23,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2B,0x28,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2B,0x28,0x27,0x27,0x27,0x27,0x25,0x22,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2B,0x25,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x35,0x22,0x04,0x28,
+ 0x25,0x23,0x23,0x28,0x25,0x25,0x24,0x24,0x23,0x28,0x24,0x26,0x2C,0x2F,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x33,0x25,0x26,0x28,0x04,0x04,0x24,0x28,0x25,0x28,0x29,
+ 0x20,0x25,0x04,0x23,0x25,0x22,0x22,0x25,0x25,0x25,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x25,0x28,0x24,
+ 0x04,0x25,0x24,0x24,0x26,0x25,0x22,0x28,0x23,0x26,0x28,0x24,0x28,0x24,0x24,0x24,
+ 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,
+ 0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,
+ 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x21,
+ 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
+ 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
+ 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x36,0x36,0x36,
+ 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
+ 0x35,0x35,0x35,0x35,0x35,0x0C,0x0C,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,
+ 0x34,0x34,0x34,0x33,0x33,0x32,0x28,0x04,0x25,0x04,0x26,0x04,0x04,0x28,0x04,0x29,
+ 0x22,0x26,0x04,0x24,0x22,0x25,0x26,0x23,0x22,0x22,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
+ 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,
+ 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x35,0x26,0x21,0x24,
+ 0x26,0x25,0x23,0x25,0x23,0x25,0x25,0x25,0x24,0x23,0x25,0x26,0x26,0x23,0x25,0x25,
+ 0x04,0x26,0x24,0x24,0x21,0x25,0x25,0x25,0x25,0x26,0x04,0x26,0x25,0x04,0x26,0x26,
+ 0x04,0x28,0x28,0x28,0x28,0x25,0x26,0x04,0x23,0x25,0x25,0x25,0x26,0x26,0x24,0x26,
+ 0x28,0x26,0x25,0x04,0x25,0x26,0x04,0x23,0x23,0x20,0x25,0x22,0x20,0x04,0x22,0x23,
+ 0x24,0x04,0x22,0x24,0x26,0x24,0x28,0x28,0x04,0x27,0x04,0x28,0x04,0x25,0x26,0x28,
+ 0x28,0x29,0x28,0x26,0x28,0x25,0x28,0x28,0x28,0x28,0x28,0x2A,0x28,0x29,0x28,0x29,
+ 0x2A,0x28,0x28,0x25,0x28,0x28,0x28,0x04,0x26,0x28,0x28,0x2B,0x29,0x29,0x28,0x24,
+ 0x28,0x25,0x29,0x04,0x28,0x25,0x2A,0x2A,0x28,0x28,0x28,0x29,0x2B,0x28,0x2A,0x2A,
+ 0x04,0x28,0x28,0x28,0x04,0x28,0x22,0x22,0x20,0x20,0x22,0x20,0x20,0x22,0x23,0x04,
+ 0x04,0x26,0x22,0x24,0x24,0x04,0x24,0x25,0x23,0x25,0x25,0x28,0x25,0x25,0x26,0x28,
+ 0x25,0x26,0x04,0x26,0x04,0x24,0x28,0x28,0x28,0x28,0x28,0x26,0x04,0x04,0x26,0x29,
+ 0x22,0x22,0x21,0x20,0x20,0x24,0x25,0x20,0x23,0x24,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x28,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x35,0x24,0x23,0x26,
+ 0x22,0x24,0x04,0x04,0x26,0x24,0x26,0x23,0x25,0x28,0x04,0x25,0x26,0x22,0x23,0x23,
+ 0x23,0x28,0x23,0x25,0x04,0x23,0x23,0x23,0x25,0x25,0x25,0x04,0x28,0x28,0x04,0x04,
+ 0x25,0x26,0x26,0x26,0x26,0x28,0x28,0x28,0x28,0x24,0x25,0x26,0x24,0x28,0x28,0x04,
+ 0x24,0x25,0x04,0x23,0x26,0x26,0x25,0x25,0x26,0x20,0x25,0x23,0x26,0x04,0x25,0x25,
+ 0x22,0x20,0x26,0x26,0x28,0x26,0x28,0x04,0x26,0x24,0x28,0x26,0x04,0x28,0x28,0x28,
+ 0x28,0x28,0x25,0x28,0x25,0x26,0x28,0x29,0x28,0x28,0x28,0x2A,0x28,0x28,0x25,0x2A,
+ 0x26,0x2B,0x29,0x28,0x2B,0x2B,0x2B,0x28,0x28,0x28,0x28,0x28,0x04,0x29,0x26,0x28,
+ 0x29,0x28,0x28,0x2B,0x04,0x29,0x25,0x04,0x28,0x24,0x25,0x2A,0x28,0x04,0x28,0x28,
+ 0x28,0x28,0x28,0x04,0x21,0x23,0x25,0x23,0x24,0x26,0x24,0x25,0x25,0x24,0x28,0x26,
+ 0x24,0x28,0x26,0x24,0x25,0x04,0x24,0x23,0x04,0x28,0x25,0x22,0x28,0x24,0x28,0x28,
+ 0x28,0x28,0x28,0x28,0x28,0x04,0x28,0x23,0x23,0x04,0x04,0x26,0x28,0x24,0x25,0x29,
+ 0x20,0x20,0x20,0x26,0x25,0x22,0x28,0x25,0x04,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x35,0x04,0x24,0x23,
+ 0x28,0x04,0x04,0x25,0x25,0x24,0x22,0x24,0x24,0x26,0x25,0x25,0x25,0x28,0x28,0x26,
+ 0x24,0x24,0x04,0x23,0x04,0x25,0x04,0x26,0x26,0x26,0x25,0x04,0x26,0x24,0x25,0x28,
+ 0x26,0x04,0x26,0x28,0x23,0x28,0x28,0x23,0x25,0x04,0x25,0x25,0x26,0x28,0x28,0x25,
+ 0x26,0x28,0x26,0x22,0x26,0x23,0x23,0x22,0x22,0x20,0x26,0x04,0x25,0x28,0x25,0x23,
+ 0x23,0x24,0x24,0x28,0x25,0x28,0x28,0x26,0x26,0x23,0x26,0x04,0x28,0x26,0x25,0x24,
+ 0x04,0x28,0x26,0x28,0x28,0x28,0x28,0x28,0x22,0x25,0x28,0x26,0x28,0x23,0x24,0x26,
+ 0x28,0x26,0x29,0x28,0x29,0x28,0x25,0x28,0x25,0x04,0x28,0x28,0x28,0x2A,0x25,0x2A,
+ 0x2B,0x28,0x29,0x04,0x28,0x28,0x04,0x28,0x28,0x28,0x25,0x28,0x04,0x28,0x26,0x28,
+ 0x26,0x24,0x23,0x25,0x23,0x25,0x04,0x24,0x24,0x28,0x28,0x25,0x04,0x26,0x28,0x04,
+ 0x04,0x25,0x28,0x26,0x04,0x04,0x28,0x24,0x28,0x28,0x26,0x28,0x04,0x28,0x25,0x24,
+ 0x25,0x28,0x28,0x26,0x24,0x28,0x28,0x26,0x26,0x04,0x28,0x28,0x25,0x25,0x27,0x29,
+ 0x24,0x26,0x23,0x26,0x25,0x25,0x25,0x25,0x28,0x25,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x35,0x28,0x25,0x26,
+ 0x25,0x26,0x28,0x04,0x04,0x28,0x04,0x28,0x04,0x26,0x24,0x04,0x04,0x04,0x04,0x04,
+ 0x26,0x28,0x26,0x25,0x28,0x28,0x28,0x26,0x28,0x28,0x24,0x04,0x04,0x25,0x25,0x24,
+ 0x25,0x23,0x24,0x28,0x04,0x25,0x04,0x04,0x25,0x28,0x28,0x24,0x28,0x25,0x26,0x26,
+ 0x26,0x26,0x22,0x21,0x25,0x22,0x20,0x25,0x23,0x26,0x25,0x25,0x25,0x25,0x24,0x22,
+ 0x25,0x25,0x28,0x26,0x28,0x26,0x04,0x24,0x25,0x04,0x25,0x25,0x28,0x22,0x28,0x04,
+ 0x28,0x22,0x04,0x25,0x28,0x28,0x28,0x25,0x22,0x04,0x26,0x28,0x22,0x28,0x25,0x23,
+ 0x28,0x28,0x04,0x04,0x04,0x28,0x28,0x25,0x27,0x28,0x04,0x28,0x25,0x28,0x2A,0x26,
+ 0x28,0x25,0x29,0x28,0x28,0x29,0x28,0x28,0x04,0x28,0x28,0x26,0x04,0x28,0x23,0x25,
+ 0x28,0x23,0x22,0x20,0x20,0x28,0x28,0x25,0x28,0x24,0x22,0x24,0x28,0x25,0x26,0x26,
+ 0x04,0x26,0x04,0x24,0x28,0x24,0x28,0x24,0x28,0x24,0x28,0x23,0x04,0x26,0x26,0x04,
+ 0x28,0x28,0x04,0x28,0x28,0x28,0x28,0x25,0x28,0x25,0x25,0x24,0x28,0x28,0x28,0x29,
+ 0x26,0x22,0x22,0x28,0x23,0x25,0x22,0x22,0x28,0x23,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x35,0x26,0x26,0x28,
+ 0x28,0x28,0x25,0x25,0x25,0x24,0x24,0x25,0x28,0x25,0x28,0x28,0x24,0x26,0x28,0x04,
+ 0x26,0x28,0x28,0x26,0x28,0x28,0x28,0x26,0x28,0x24,0x26,0x25,0x26,0x25,0x25,0x04,
+ 0x25,0x04,0x26,0x26,0x28,0x26,0x26,0x28,0x22,0x25,0x28,0x25,0x28,0x24,0x25,0x26,
+ 0x25,0x20,0x22,0x23,0x25,0x23,0x28,0x25,0x25,0x26,0x25,0x25,0x25,0x24,0x24,0x25,
+ 0x22,0x04,0x25,0x26,0x26,0x26,0x26,0x28,0x24,0x04,0x04,0x25,0x25,0x26,0x26,0x25,
+ 0x25,0x25,0x28,0x24,0x26,0x26,0x26,0x24,0x28,0x23,0x28,0x04,0x25,0x25,0x28,0x04,
+ 0x28,0x04,0x26,0x04,0x25,0x04,0x25,0x28,0x26,0x28,0x28,0x04,0x28,0x28,0x28,0x28,
+ 0x28,0x28,0x26,0x04,0x25,0x04,0x28,0x28,0x25,0x25,0x24,0x25,0x22,0x26,0x26,0x20,
+ 0x22,0x22,0x25,0x22,0x20,0x23,0x04,0x22,0x24,0x28,0x04,0x28,0x28,0x25,0x25,0x28,
+ 0x28,0x25,0x28,0x04,0x28,0x25,0x26,0x26,0x28,0x25,0x25,0x25,0x26,0x28,0x26,0x28,
+ 0x26,0x26,0x28,0x28,0x28,0x04,0x23,0x24,0x25,0x25,0x04,0x28,0x04,0x04,0x28,0x29,
+ 0x25,0x04,0x26,0x26,0x24,0x25,0x28,0x26,0x28,0x24,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x35,0x28,0x28,0x22,
+ 0x25,0x28,0x25,0x25,0x26,0x22,0x23,0x26,0x28,0x25,0x26,0x26,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,
+ 0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,
+ 0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2C,
+ 0x2C,0x2C,0x2C,0x2C,0x2C,0x26,0x28,0x04,0x24,0x28,0x04,0x26,0x28,0x28,0x28,0x29,
+ 0x28,0x28,0x25,0x28,0x24,0x25,0x22,0x22,0x28,0x04,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2B,0x26,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2B,0x25,0x27,0x27,0x27,0x27,0x25,0x22,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2B,0x26,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x35,0x28,0x04,0x26,
+ 0x28,0x28,0x04,0x04,0x04,0x27,0x28,0x24,0x24,0x28,0x26,0x28,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x23,0x28,0x04,0x28,0x22,0x04,0x04,0x25,0x25,0x27,0x29,
+ 0x24,0x25,0x25,0x04,0x26,0x28,0x23,0x04,0x28,0x04,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x29,0x28,0x26,
+ 0x26,0x28,0x28,0x04,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x25,0x2F,0x2F,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x20,0x26,0x04,0x24,0x28,0x28,0x28,0x26,0x28,0x04,0x29,
+ 0x25,0x26,0x04,0x24,0x26,0x28,0x25,0x25,0x26,0x25,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
+ 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x35,0x04,0x04,0x28,
+ 0x25,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x28,0x28,0x2F,0x2F,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x36,0x28,0x04,0x28,0x25,0x04,0x28,0x29,0x28,0x2B,0x29,
+ 0x28,0x26,0x24,0x25,0x23,0x23,0x25,0x23,0x26,0x04,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x28,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x26,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x35,0x26,0x24,0x25,
+ 0x28,0x26,0x25,0x26,0x28,0x26,0x04,0x28,0x28,0x24,0x24,0x28,0x2F,0x2F,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x17,0x17,0x2D,0x2D,0x2D,0x36,0x04,0x29,0x28,0x25,0x28,0x04,0x25,0x25,0x04,0x29,
+ 0x25,0x23,0x26,0x23,0x04,0x22,0x23,0x24,0x25,0x22,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x35,0x25,0x04,0x25,
+ 0x28,0x04,0x24,0x26,0x26,0x25,0x22,0x28,0x26,0x04,0x26,0x24,0x2F,0x2F,0x2D,0x2D,
+ 0x32,0x33,0x33,0x34,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x35,0x35,0x35,0x35,0x36,0x36,
+ 0x36,0x36,0x20,0x23,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x2D,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x17,0x17,0x17,0x2D,0x2D,0x35,0x28,0x28,0x28,0x26,0x28,0x04,0x25,0x26,0x26,0x29,
+ 0x24,0x26,0x04,0x25,0x22,0x22,0x28,0x28,0x04,0x04,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x35,0x24,0x25,0x24,
+ 0x23,0x04,0x28,0x25,0x26,0x26,0x28,0x26,0x24,0x04,0x26,0x28,0x2E,0x2F,0x2D,0x2D,
+ 0x33,0x36,0x22,0x25,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,
+ 0x28,0x28,0x28,0x2C,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
+ 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,
+ 0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x17,0x17,0x17,0x2D,0x2D,0x35,0x23,0x04,0x26,0x25,0x04,0x28,0x28,0x04,0x24,0x29,
+ 0x28,0x23,0x22,0x23,0x23,0x28,0x23,0x25,0x25,0x04,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x35,0x25,0x04,0x24,
+ 0x23,0x25,0x22,0x23,0x25,0x04,0x28,0x25,0x22,0x23,0x21,0x22,0x2E,0x2F,0x2D,0x2D,
+ 0x34,0x22,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x28,0x28,0x2C,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,
+ 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,
+ 0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x17,0x17,0x17,0x2D,0x2D,0x35,0x22,0x04,0x04,0x25,0x28,0x28,0x04,0x23,0x22,0x29,
+ 0x28,0x25,0x25,0x25,0x23,0x25,0x04,0x28,0x24,0x25,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x35,0x23,0x22,0x25,
+ 0x24,0x22,0x20,0x24,0x20,0x24,0x22,0x23,0x20,0x20,0x22,0x22,0x2E,0x2F,0x2D,0x2D,
+ 0x34,0x25,0x27,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x28,0x28,0x2D,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,
+ 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x17,0x17,0x17,0x2D,0x2D,0x35,0x04,0x25,0x26,0x26,0x25,0x26,0x24,0x22,0x27,0x29,
+ 0x28,0x28,0x26,0x24,0x26,0x25,0x04,0x25,0x23,0x04,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2B,0x25,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2B,0x28,0x27,0x27,0x27,0x27,0x25,0x22,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2B,0x26,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x35,0x22,0x25,0x25,
+ 0x04,0x22,0x24,0x22,0x26,0x23,0x25,0x26,0x25,0x26,0x22,0x20,0x2E,0x2F,0x2D,0x2D,
+ 0x35,0x27,0x27,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x28,0x28,0x2D,0x2F,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,
+ 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x17,0x17,0x2D,0x2D,0x2D,0x0C,0x26,0x25,0x26,0x24,0x23,0x25,0x25,0x25,0x22,0x29,
+ 0x25,0x04,0x23,0x25,0x28,0x28,0x27,0x29,0x25,0x26,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x28,0x25,0x23,
+ 0x04,0x25,0x26,0x04,0x23,0x04,0x26,0x23,0x23,0x25,0x21,0x22,0x2E,0x2F,0x2D,0x2D,
+ 0x36,0x27,0x28,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x28,0x28,0x2E,0x2F,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,
+ 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,
+ 0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x22,0x04,0x25,0x04,0x25,0x24,0x28,0x25,0x04,0x29,
+ 0x28,0x22,0x26,0x04,0x28,0x25,0x28,0x28,0x28,0x26,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x35,0x26,0x25,0x23,
+ 0x25,0x28,0x23,0x25,0x22,0x28,0x25,0x26,0x28,0x24,0x24,0x04,0x2D,0x2F,0x2D,0x2D,
+ 0x20,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,
+ 0x28,0x28,0x28,0x2E,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,
+ 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,
+ 0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x17,0x2D,0x2D,0x2D,0x2D,0x0C,0x28,0x25,0x28,0x04,0x28,0x23,0x25,0x22,0x27,0x29,
+ 0x25,0x24,0x26,0x24,0x28,0x26,0x25,0x26,0x28,0x26,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x24,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x35,0x26,0x25,0x26,
+ 0x26,0x21,0x28,0x23,0x20,0x20,0x04,0x26,0x26,0x28,0x24,0x25,0x2D,0x2F,0x2D,0x2D,
+ 0x23,0x2A,0x2C,0x2C,0x2D,0x2D,0x2D,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,
+ 0x17,0x17,0x2D,0x2D,0x2D,0x34,0x04,0x26,0x28,0x22,0x28,0x04,0x28,0x25,0x24,0x29,
+ 0x04,0x04,0x22,0x26,0x29,0x28,0x04,0x21,0x25,0x26,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x35,0x26,0x20,0x20,
+ 0x26,0x25,0x24,0x22,0x20,0x24,0x20,0x28,0x04,0x04,0x28,0x28,0x2C,0x2F,0x2D,0x2D,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,
+ 0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x17,
+ 0x17,0x17,0x17,0x2D,0x2D,0x34,0x25,0x24,0x04,0x28,0x24,0x25,0x22,0x27,0x26,0x29,
+ 0x04,0x26,0x28,0x26,0x26,0x04,0x25,0x26,0x23,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x35,0x25,0x22,0x26,
+ 0x25,0x25,0x28,0x28,0x04,0x28,0x26,0x28,0x04,0x24,0x26,0x25,0x2C,0x2F,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x25,0x25,0x25,0x04,0x28,0x24,0x28,0x04,0x28,0x29,
+ 0x28,0x28,0x04,0x04,0x28,0x28,0x25,0x28,0x26,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x35,0x04,0x28,0x25,
+ 0x24,0x28,0x25,0x04,0x28,0x04,0x25,0x25,0x28,0x28,0x25,0x26,0x2C,0x2F,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x33,0x04,0x25,0x28,0x26,0x04,0x28,0x28,0x28,0x26,0x29,
+ 0x28,0x28,0x25,0x25,0x28,0x25,0x28,0x23,0x25,0x26,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x35,0x04,0x28,0x23,
+ 0x20,0x24,0x25,0x28,0x28,0x25,0x28,0x28,0x27,0x28,0x26,0x25,0x2C,0x2F,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x33,0x24,0x28,0x28,0x04,0x26,0x28,0x24,0x28,0x25,0x29,
+ 0x29,0x26,0x28,0x25,0x28,0x25,0x24,0x22,0x22,0x24,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2B,0x23,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2B,0x24,0x27,0x27,0x27,0x27,0x25,0x22,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2B,0x26,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x35,0x25,0x26,0x25,
+ 0x04,0x28,0x28,0x25,0x04,0x24,0x26,0x26,0x24,0x23,0x26,0x26,0x28,0x24,0x23,0x24,
+ 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,
+ 0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,
+ 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x21,
+ 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
+ 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
+ 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x36,0x36,0x36,
+ 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
+ 0x35,0x35,0x35,0x35,0x35,0x0C,0x0C,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,
+ 0x34,0x34,0x34,0x33,0x33,0x32,0x29,0x28,0x28,0x28,0x28,0x28,0x04,0x28,0x26,0x29,
+ 0x28,0x26,0x28,0x28,0x28,0x25,0x25,0x04,0x22,0x25,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x04,0x26,0x25,
+ 0x25,0x26,0x28,0x04,0x23,0x26,0x25,0x26,0x26,0x28,0x26,0x24,0x28,0x25,0x28,0x28,
+ 0x04,0x28,0x26,0x24,0x04,0x04,0x25,0x25,0x26,0x28,0x25,0x28,0x04,0x28,0x25,0x25,
+ 0x28,0x25,0x28,0x28,0x25,0x28,0x24,0x28,0x28,0x27,0x28,0x25,0x26,0x28,0x28,0x04,
+ 0x28,0x23,0x28,0x04,0x24,0x26,0x24,0x28,0x25,0x28,0x28,0x29,0x28,0x2A,0x28,0x28,
+ 0x28,0x28,0x2A,0x25,0x29,0x28,0x26,0x28,0x2A,0x29,0x04,0x29,0x28,0x26,0x29,0x28,
+ 0x28,0x28,0x28,0x28,0x25,0x28,0x25,0x25,0x25,0x25,0x23,0x04,0x20,0x24,0x24,0x25,
+ 0x04,0x23,0x22,0x22,0x20,0x25,0x24,0x24,0x25,0x25,0x25,0x04,0x04,0x28,0x28,0x26,
+ 0x28,0x28,0x22,0x23,0x28,0x25,0x24,0x25,0x28,0x28,0x29,0x23,0x25,0x26,0x28,0x26,
+ 0x26,0x22,0x04,0x24,0x25,0x24,0x25,0x25,0x26,0x25,0x28,0x23,0x24,0x28,0x25,0x28,
+ 0x28,0x28,0x04,0x25,0x26,0x23,0x22,0x24,0x24,0x25,0x28,0x29,0x28,0x28,0x04,0x2A,
+ 0x26,0x04,0x26,0x28,0x04,0x04,0x25,0x28,0x04,0x28,0x04,0x04,0x29,0x2A,0x26,0x29,
+ 0x04,0x26,0x24,0x25,0x22,0x22,0x25,0x24,0x25,0x24,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
+ 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x0C,0x26,0x27,0x24,
+ 0x25,0x25,0x28,0x28,0x28,0x25,0x26,0x28,0x28,0x24,0x04,0x24,0x04,0x04,0x23,0x25,
+ 0x27,0x25,0x27,0x26,0x24,0x28,0x27,0x04,0x27,0x25,0x28,0x26,0x26,0x25,0x27,0x28,
+ 0x28,0x25,0x25,0x28,0x04,0x28,0x04,0x04,0x28,0x04,0x28,0x28,0x28,0x28,0x28,0x28,
+ 0x26,0x28,0x29,0x26,0x25,0x28,0x28,0x24,0x28,0x28,0x04,0x24,0x28,0x26,0x28,0x29,
+ 0x25,0x25,0x29,0x27,0x24,0x28,0x26,0x25,0x25,0x24,0x26,0x04,0x28,0x28,0x26,0x26,
+ 0x25,0x26,0x26,0x28,0x25,0x24,0x28,0x22,0x25,0x22,0x20,0x20,0x22,0x26,0x25,0x25,
+ 0x22,0x20,0x22,0x25,0x04,0x25,0x25,0x26,0x28,0x26,0x25,0x25,0x26,0x25,0x28,0x28,
+ 0x28,0x28,0x29,0x28,0x29,0x29,0x28,0x28,0x26,0x28,0x26,0x24,0x24,0x24,0x24,0x28,
+ 0x23,0x24,0x25,0x04,0x24,0x25,0x24,0x26,0x26,0x23,0x26,0x25,0x26,0x25,0x26,0x28,
+ 0x28,0x04,0x24,0x28,0x28,0x24,0x22,0x25,0x28,0x28,0x28,0x28,0x25,0x29,0x28,0x23,
+ 0x28,0x28,0x28,0x04,0x28,0x28,0x28,0x2A,0x04,0x28,0x28,0x2A,0x04,0x28,0x2B,0x29,
+ 0x25,0x26,0x26,0x04,0x24,0x25,0x28,0x26,0x25,0x23,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x24,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x28,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x28,0x2D,0x2D,0x2D,0x2D,0x0C,0x27,0x25,0x24,
+ 0x24,0x04,0x22,0x28,0x28,0x27,0x04,0x04,0x27,0x28,0x25,0x25,0x25,0x04,0x28,0x26,
+ 0x04,0x04,0x04,0x28,0x04,0x23,0x26,0x04,0x04,0x25,0x04,0x28,0x04,0x28,0x04,0x28,
+ 0x26,0x04,0x28,0x28,0x28,0x24,0x27,0x28,0x28,0x28,0x04,0x28,0x26,0x28,0x26,0x28,
+ 0x28,0x28,0x28,0x28,0x04,0x2A,0x2A,0x29,0x29,0x25,0x28,0x29,0x29,0x28,0x26,0x29,
+ 0x28,0x04,0x04,0x26,0x04,0x25,0x20,0x23,0x25,0x04,0x20,0x26,0x20,0x24,0x20,0x20,
+ 0x25,0x20,0x22,0x20,0x22,0x22,0x23,0x20,0x22,0x20,0x22,0x26,0x24,0x23,0x20,0x20,
+ 0x04,0x20,0x24,0x22,0x26,0x25,0x04,0x04,0x25,0x28,0x25,0x24,0x28,0x28,0x28,0x28,
+ 0x26,0x29,0x28,0x28,0x28,0x24,0x04,0x29,0x28,0x28,0x25,0x26,0x23,0x25,0x23,0x25,
+ 0x28,0x28,0x26,0x25,0x26,0x26,0x28,0x24,0x23,0x26,0x28,0x28,0x25,0x28,0x28,0x28,
+ 0x24,0x28,0x25,0x25,0x22,0x04,0x24,0x25,0x28,0x2A,0x04,0x28,0x29,0x04,0x28,0x25,
+ 0x28,0x28,0x28,0x28,0x04,0x28,0x04,0x28,0x29,0x28,0x25,0x24,0x29,0x04,0x28,0x29,
+ 0x22,0x24,0x23,0x25,0x28,0x23,0x20,0x25,0x26,0x26,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x0C,0x28,0x26,0x25,
+ 0x28,0x24,0x26,0x26,0x28,0x04,0x04,0x28,0x25,0x28,0x24,0x04,0x24,0x25,0x04,0x04,
+ 0x04,0x24,0x26,0x26,0x26,0x22,0x26,0x28,0x26,0x25,0x28,0x26,0x25,0x26,0x26,0x28,
+ 0x24,0x26,0x24,0x25,0x25,0x28,0x28,0x28,0x28,0x28,0x29,0x04,0x24,0x28,0x28,0x28,
+ 0x04,0x26,0x28,0x28,0x28,0x04,0x2A,0x28,0x28,0x28,0x25,0x26,0x29,0x26,0x04,0x25,
+ 0x26,0x21,0x23,0x24,0x24,0x25,0x24,0x26,0x22,0x24,0x26,0x28,0x24,0x24,0x22,0x04,
+ 0x28,0x24,0x24,0x04,0x24,0x24,0x23,0x20,0x22,0x25,0x22,0x23,0x24,0x20,0x04,0x25,
+ 0x25,0x24,0x24,0x24,0x04,0x24,0x04,0x28,0x23,0x26,0x26,0x23,0x28,0x26,0x25,0x28,
+ 0x28,0x28,0x29,0x2A,0x28,0x26,0x25,0x28,0x25,0x25,0x25,0x26,0x24,0x24,0x25,0x26,
+ 0x25,0x28,0x28,0x25,0x25,0x29,0x25,0x2A,0x28,0x29,0x28,0x28,0x26,0x25,0x28,0x04,
+ 0x25,0x26,0x04,0x04,0x28,0x28,0x2A,0x24,0x25,0x28,0x29,0x29,0x28,0x26,0x26,0x28,
+ 0x28,0x26,0x24,0x25,0x22,0x27,0x26,0x28,0x28,0x04,0x28,0x27,0x04,0x28,0x28,0x29,
+ 0x26,0x04,0x25,0x28,0x24,0x20,0x25,0x28,0x24,0x04,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x0C,0x26,0x04,0x23,
+ 0x25,0x26,0x28,0x26,0x04,0x25,0x04,0x26,0x26,0x26,0x26,0x25,0x28,0x26,0x26,0x25,
+ 0x24,0x26,0x25,0x26,0x04,0x28,0x26,0x24,0x26,0x26,0x26,0x26,0x22,0x04,0x04,0x26,
+ 0x28,0x28,0x28,0x04,0x28,0x28,0x28,0x29,0x26,0x04,0x24,0x28,0x04,0x25,0x28,0x28,
+ 0x28,0x28,0x04,0x28,0x29,0x25,0x2A,0x29,0x04,0x28,0x26,0x26,0x26,0x25,0x23,0x04,
+ 0x24,0x24,0x22,0x28,0x22,0x28,0x26,0x26,0x26,0x26,0x24,0x28,0x25,0x04,0x28,0x28,
+ 0x25,0x26,0x23,0x22,0x26,0x20,0x20,0x22,0x23,0x23,0x23,0x20,0x20,0x22,0x25,0x28,
+ 0x04,0x04,0x28,0x24,0x25,0x28,0x28,0x28,0x28,0x28,0x04,0x29,0x04,0x28,0x27,0x26,
+ 0x26,0x28,0x28,0x28,0x28,0x27,0x28,0x24,0x26,0x28,0x24,0x28,0x26,0x26,0x29,0x28,
+ 0x04,0x04,0x25,0x28,0x25,0x26,0x24,0x29,0x04,0x2A,0x28,0x04,0x24,0x28,0x28,0x25,
+ 0x24,0x28,0x28,0x29,0x28,0x29,0x28,0x25,0x23,0x25,0x04,0x26,0x24,0x28,0x28,0x28,
+ 0x27,0x24,0x25,0x26,0x04,0x26,0x23,0x25,0x24,0x04,0x27,0x28,0x04,0x28,0x04,0x29,
+ 0x24,0x28,0x04,0x22,0x22,0x04,0x23,0x24,0x28,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,
+ 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x0C,0x25,0x25,0x24,
+ 0x26,0x25,0x25,0x26,0x28,0x26,0x26,0x28,0x26,0x04,0x26,0x24,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,
+ 0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,
+ 0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2C,
+ 0x2C,0x2C,0x2C,0x2C,0x2C,0x26,0x25,0x25,0x28,0x22,0x04,0x04,0x25,0x23,0x28,0x29,
+ 0x25,0x28,0x04,0x20,0x25,0x24,0x24,0x25,0x25,0x26,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,
+ 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
+ 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x0C,0x26,0x28,0x26,
+ 0x28,0x28,0x26,0x28,0x26,0x25,0x24,0x25,0x28,0x28,0x28,0x28,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x23,0x26,0x28,0x26,0x25,0x24,0x25,0x22,0x25,0x20,0x29,
+ 0x24,0x24,0x23,0x23,0x22,0x22,0x23,0x04,0x23,0x25,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2B,0x24,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2B,0x26,0x27,0x27,0x27,0x27,0x25,0x22,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2B,0x26,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x0C,0x25,0x25,0x28,
+ 0x24,0x25,0x28,0x04,0x28,0x26,0x28,0x24,0x25,0x25,0x25,0x25,0x2F,0x2F,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x20,0x28,0x23,0x23,0x24,0x25,0x28,0x28,0x24,0x28,0x29,
+ 0x25,0x23,0x22,0x24,0x23,0x28,0x26,0x22,0x22,0x22,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x24,0x26,0x26,
+ 0x25,0x04,0x26,0x24,0x26,0x26,0x04,0x25,0x25,0x22,0x04,0x28,0x2F,0x2F,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x36,0x28,0x28,0x25,0x28,0x28,0x23,0x25,0x28,0x28,0x29,
+ 0x20,0x20,0x22,0x24,0x24,0x23,0x20,0x22,0x22,0x22,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x26,0x25,0x04,
+ 0x25,0x28,0x26,0x24,0x04,0x26,0x22,0x26,0x25,0x25,0x26,0x23,0x2F,0x2F,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x17,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x36,0x22,0x22,0x25,0x27,0x28,0x28,0x26,0x28,0x28,0x29,
+ 0x20,0x22,0x25,0x04,0x04,0x20,0x20,0x26,0x20,0x24,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x14,0x2D,0x2D,0x2D,0x2D,0x14,0x2D,0x2D,
+ 0x14,0x14,0x14,0x14,0x2D,0x2D,0x14,0x14,0x2D,0x14,0x14,0x2D,0x2D,0x14,0x14,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x14,0x14,0x14,0x14,0x14,0x14,0x2D,0x14,0x2D,0x2D,0x2D,0x2D,0x14,0x2D,0x2D,
+ 0x14,0x14,0x14,0x14,0x14,0x14,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x14,0x14,0x2D,0x2D,0x14,0x14,0x2D,
+ 0x14,0x2D,0x2D,0x2D,0x2D,0x14,0x2D,0x2D,0x14,0x14,0x14,0x14,0x14,0x14,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x25,0x22,0x22,
+ 0x26,0x26,0x25,0x25,0x26,0x24,0x25,0x26,0x26,0x25,0x26,0x22,0x2F,0x2F,0x2D,0x2D,
+ 0x32,0x33,0x33,0x34,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x35,0x35,0x35,0x35,0x36,0x36,
+ 0x36,0x36,0x20,0x23,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x2D,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x27,0x29,0x26,0x28,0x24,0x27,0x24,0x26,0x26,0x29,
+ 0x20,0x24,0x22,0x22,0x22,0x20,0x26,0x22,0x25,0x24,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x14,0x14,0x2D,0x2D,0x14,0x14,0x2D,0x14,
+ 0x14,0x2D,0x2D,0x14,0x14,0x2D,0x14,0x14,0x2D,0x14,0x14,0x14,0x2D,0x14,0x14,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x14,0x14,0x2D,0x2D,0x2D,0x2D,0x2D,0x14,0x14,0x2D,0x2D,0x14,0x14,0x2D,0x14,
+ 0x14,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x14,0x14,0x14,0x14,0x2D,0x2D,
+ 0x14,0x14,0x2D,0x2D,0x14,0x14,0x2D,0x14,0x14,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x04,0x25,0x04,
+ 0x28,0x04,0x26,0x25,0x26,0x26,0x26,0x25,0x28,0x04,0x04,0x26,0x2E,0x2F,0x2D,0x2D,
+ 0x33,0x36,0x22,0x25,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,
+ 0x28,0x28,0x28,0x2C,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
+ 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,
+ 0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,
+ 0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,
+ 0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x28,0x28,0x27,0x28,0x27,0x23,0x27,0x26,0x28,0x29,
+ 0x22,0x25,0x25,0x25,0x25,0x24,0x28,0x25,0x28,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x14,0x14,0x14,0x14,0x14,0x14,0x2D,0x14,
+ 0x14,0x14,0x14,0x14,0x14,0x2D,0x14,0x14,0x2D,0x14,0x14,0x14,0x14,0x14,0x14,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x14,0x14,0x14,0x14,0x14,0x2D,0x2D,0x14,0x14,0x14,0x14,0x14,0x14,0x2D,0x2D,
+ 0x14,0x14,0x14,0x14,0x14,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x14,0x14,0x2D,0x2D,0x2D,
+ 0x14,0x14,0x14,0x14,0x14,0x14,0x2D,0x2D,0x14,0x14,0x14,0x14,0x14,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x24,0x26,0x25,
+ 0x25,0x23,0x26,0x25,0x25,0x28,0x26,0x28,0x28,0x24,0x28,0x04,0x2E,0x2F,0x2D,0x2D,
+ 0x34,0x22,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x28,0x28,0x2C,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,
+ 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,
+ 0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,
+ 0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x28,0x04,0x24,0x28,0x27,0x24,0x28,0x25,0x25,0x29,
+ 0x25,0x24,0x25,0x25,0x26,0x25,0x25,0x04,0x25,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x14,0x14,0x14,0x14,0x14,0x14,0x2D,0x14,
+ 0x14,0x2D,0x2D,0x14,0x14,0x2D,0x14,0x14,0x2D,0x14,0x14,0x2D,0x14,0x14,0x14,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x14,0x14,0x2D,0x2D,0x2D,0x2D,0x2D,0x14,0x14,0x14,0x14,0x14,0x14,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x14,0x14,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x14,0x14,0x14,0x14,0x2D,0x2D,
+ 0x14,0x14,0x14,0x14,0x14,0x14,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x14,0x14,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x24,0x26,0x25,
+ 0x28,0x26,0x24,0x26,0x25,0x24,0x26,0x24,0x26,0x28,0x28,0x28,0x2E,0x2F,0x2D,0x2D,
+ 0x34,0x25,0x27,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x28,0x28,0x2D,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,
+ 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,
+ 0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x25,0x22,0x26,0x27,0x28,0x28,0x28,0x28,0x25,0x29,
+ 0x26,0x26,0x25,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x14,0x14,0x2D,0x2D,0x14,0x14,0x2D,0x14,
+ 0x14,0x2D,0x2D,0x14,0x14,0x2D,0x14,0x14,0x2D,0x14,0x14,0x2D,0x2D,0x14,0x14,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x14,0x14,0x14,0x14,0x14,0x14,0x2D,0x14,0x14,0x2D,0x2D,0x14,0x14,0x2D,0x14,
+ 0x14,0x14,0x14,0x14,0x14,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x14,0x14,0x2D,0x2D,0x14,0x14,0x2D,
+ 0x14,0x14,0x2D,0x2D,0x14,0x14,0x2D,0x14,0x14,0x14,0x14,0x14,0x14,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x04,0x28,0x04,
+ 0x26,0x28,0x26,0x23,0x25,0x04,0x26,0x26,0x24,0x04,0x28,0x04,0x2E,0x2F,0x2D,0x2D,
+ 0x35,0x27,0x27,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x28,0x28,0x2D,0x2F,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,
+ 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,
+ 0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x24,0x28,0x27,0x24,0x22,0x25,0x24,0x24,0x25,0x29,
+ 0x26,0x25,0x23,0x28,0x04,0x04,0x28,0x24,0x04,0x04,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x24,0x26,0x26,
+ 0x28,0x04,0x04,0x04,0x25,0x28,0x25,0x28,0x04,0x28,0x28,0x27,0x2E,0x2F,0x2D,0x2D,
+ 0x36,0x27,0x28,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x28,0x28,0x2E,0x2F,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,
+ 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,
+ 0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,
+ 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x23,0x26,0x28,0x27,0x28,0x26,0x28,0x25,0x04,0x29,
+ 0x28,0x28,0x04,0x26,0x22,0x04,0x21,0x25,0x22,0x26,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x28,0x25,0x28,
+ 0x26,0x28,0x25,0x26,0x29,0x28,0x04,0x26,0x26,0x28,0x04,0x23,0x2D,0x2F,0x2D,0x2D,
+ 0x20,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,
+ 0x28,0x28,0x28,0x2E,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,
+ 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
+ 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,
+ 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,
+ 0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,
+ 0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,
+ 0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,
+ 0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x28,0x28,0x28,0x04,0x27,0x26,0x25,0x04,0x25,0x29,
+ 0x26,0x28,0x26,0x25,0x22,0x26,0x25,0x22,0x04,0x26,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x24,0x26,0x28,
+ 0x25,0x25,0x28,0x29,0x24,0x28,0x28,0x28,0x04,0x28,0x26,0x26,0x2D,0x2F,0x2D,0x2D,
+ 0x23,0x2A,0x2C,0x2C,0x2D,0x2D,0x2D,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,
+ 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x25,0x26,0x25,0x24,0x28,0x25,0x25,0x24,0x24,0x29,
+ 0x25,0x24,0x23,0x23,0x23,0x25,0x24,0x21,0x24,0x23,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x27,0x25,0x04,
+ 0x28,0x28,0x26,0x28,0x25,0x04,0x28,0x25,0x25,0x26,0x26,0x24,0x2C,0x2F,0x2D,0x2D,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,
+ 0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,
+ 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,
+ 0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x26,0x25,0x28,0x23,0x25,0x25,0x23,0x23,0x25,0x29,
+ 0x25,0x22,0x23,0x24,0x25,0x22,0x04,0x23,0x28,0x26,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x24,0x29,0x04,
+ 0x29,0x26,0x27,0x25,0x04,0x24,0x28,0x24,0x04,0x22,0x25,0x25,0x2C,0x2F,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x28,0x25,0x25,0x22,0x04,0x23,0x25,0x28,0x25,0x29,
+ 0x23,0x25,0x23,0x24,0x26,0x24,0x26,0x28,0x26,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x33,0x28,0x25,0x28,
+ 0x28,0x28,0x28,0x28,0x24,0x04,0x25,0x25,0x26,0x24,0x26,0x04,0x2C,0x2F,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x33,0x22,0x28,0x24,0x25,0x25,0x22,0x28,0x27,0x24,0x29,
+ 0x23,0x23,0x23,0x23,0x28,0x24,0x28,0x28,0x28,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x33,0x04,0x28,0x25,
+ 0x25,0x23,0x28,0x04,0x04,0x04,0x04,0x27,0x28,0x28,0x25,0x26,0x2C,0x2F,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x33,0x23,0x25,0x25,0x27,0x26,0x23,0x28,0x26,0x04,0x29,
+ 0x22,0x22,0x22,0x04,0x28,0x24,0x27,0x26,0x27,0x26,0x25,0x25,0x25,0x24,0x24,0x24,
+ 0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,
+ 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,
+ 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x20,0x20,0x20,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,
+ 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,
+ 0x36,0x36,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
+ 0x35,0x35,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x33,0x33,0x32,0x25,0x04,0x04,
+ 0x04,0x25,0x24,0x25,0x24,0x28,0x28,0x26,0x25,0x04,0x25,0x27,0x28,0x24,0x23,0x24,
+ 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,
+ 0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,
+ 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x21,
+ 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
+ 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
+ 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x36,0x36,0x36,
+ 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
+ 0x35,0x35,0x35,0x35,0x35,0x0C,0x0C,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,
+ 0x34,0x34,0x34,0x33,0x33,0x32,0x24,0x25,0x22,0x04,0x27,0x04,0x22,0x28,0x25,0x29,
+ 0x25,0x25,0x28,0x25,0x28,0x28,0x28,0x28,0x22,0x25,0x28,0x26,0x04,0x22,0x26,0x23,
+ 0x22,0x25,0x23,0x25,0x24,0x24,0x24,0x25,0x22,0x28,0x21,0x26,0x25,0x22,0x24,0x25,
+ 0x24,0x23,0x25,0x22,0x20,0x20,0x22,0x20,0x22,0x20,0x23,0x24,0x22,0x25,0x22,0x21,
+ 0x22,0x22,0x04,0x20,0x24,0x21,0x24,0x22,0x21,0x22,0x23,0x25,0x22,0x21,0x25,0x22,
+ 0x24,0x25,0x25,0x22,0x22,0x24,0x26,0x26,0x23,0x04,0x26,0x24,0x28,0x04,0x25,0x28,
+ 0x25,0x25,0x23,0x24,0x23,0x26,0x25,0x24,0x28,0x26,0x26,0x26,0x28,0x26,0x22,0x25,
+ 0x04,0x24,0x04,0x04,0x26,0x25,0x04,0x26,0x26,0x25,0x28,0x04,0x29,0x26,0x04,0x28,
+ 0x29,0x26,0x28,0x28,0x28,0x28,0x28,0x29,0x28,0x28,0x26,0x29,0x29,0x26,0x28,0x28,
+ 0x26,0x29,0x25,0x29,0x28,0x28,0x28,0x28,0x25,0x25,0x26,0x26,0x28,0x25,0x24,0x25,
+ 0x28,0x28,0x26,0x26,0x28,0x28,0x04,0x04,0x25,0x26,0x04,0x25,0x26,0x25,0x26,0x04,
+ 0x24,0x24,0x22,0x20,0x25,0x23,0x22,0x25,0x20,0x22,0x20,0x24,0x22,0x24,0x25,0x28,
+ 0x23,0x26,0x25,0x26,0x26,0x04,0x04,0x28,0x04,0x25,0x28,0x26,0x25,0x26,0x22,0x26,
+ 0x26,0x26,0x26,0x26,0x26,0x28,0x04,0x24,0x26,0x28,0x24,0x25,0x29,0x04,0x26,0x28,
+ 0x24,0x28,0x25,0x25,0x04,0x22,0x26,0x26,0x24,0x23,0x22,0x25,0x26,0x26,0x25,0x28,
+ 0x26,0x26,0x25,0x22,0x24,0x26,0x24,0x04,0x24,0x26,0x26,0x25,0x26,0x28,0x26,0x26,
+ 0x23,0x23,0x28,0x25,0x22,0x25,0x04,0x28,0x28,0x25,0x24,0x26,0x27,0x28,0x04,0x28,
+ 0x26,0x28,0x28,0x28,0x26,0x04,0x29,0x28,0x28,0x28,0x29,0x28,0x24,0x28,0x28,0x28,
+ 0x25,0x28,0x04,0x28,0x04,0x04,0x26,0x28,0x24,0x25,0x04,0x25,0x28,0x26,0x28,0x28,
+ 0x28,0x28,0x26,0x28,0x28,0x04,0x25,0x26,0x25,0x26,0x25,0x26,0x25,0x22,0x23,0x22,
+ 0x25,0x24,0x24,0x23,0x27,0x28,0x24,0x28,0x26,0x26,0x27,0x22,0x28,0x28,0x28,0x29,
+ 0x23,0x28,0x25,0x04,0x25,0x28,0x04,0x22,0x26,0x24,0x22,0x22,0x23,0x04,0x25,0x22,
+ 0x26,0x25,0x23,0x22,0x24,0x24,0x26,0x22,0x23,0x28,0x26,0x25,0x28,0x28,0x23,0x22,
+ 0x25,0x20,0x22,0x20,0x24,0x22,0x23,0x20,0x20,0x22,0x20,0x22,0x25,0x20,0x25,0x20,
+ 0x20,0x25,0x22,0x24,0x22,0x22,0x20,0x20,0x20,0x20,0x20,0x22,0x21,0x20,0x20,0x20,
+ 0x21,0x23,0x23,0x22,0x25,0x24,0x25,0x28,0x04,0x28,0x25,0x25,0x29,0x28,0x26,0x24,
+ 0x28,0x25,0x28,0x28,0x28,0x24,0x26,0x26,0x24,0x25,0x28,0x26,0x24,0x25,0x24,0x27,
+ 0x27,0x25,0x27,0x25,0x04,0x28,0x26,0x04,0x26,0x04,0x28,0x28,0x28,0x23,0x29,0x04,
+ 0x04,0x28,0x28,0x26,0x29,0x28,0x28,0x26,0x28,0x25,0x26,0x28,0x28,0x29,0x28,0x25,
+ 0x28,0x25,0x04,0x28,0x29,0x29,0x25,0x28,0x26,0x26,0x04,0x2A,0x04,0x28,0x26,0x2A,
+ 0x28,0x28,0x26,0x28,0x25,0x25,0x28,0x28,0x25,0x25,0x26,0x04,0x23,0x24,0x25,0x23,
+ 0x24,0x22,0x20,0x20,0x04,0x25,0x20,0x22,0x20,0x20,0x26,0x20,0x20,0x26,0x25,0x28,
+ 0x23,0x25,0x24,0x23,0x26,0x26,0x28,0x04,0x26,0x24,0x24,0x26,0x25,0x26,0x25,0x28,
+ 0x28,0x04,0x26,0x23,0x26,0x04,0x26,0x26,0x25,0x28,0x29,0x04,0x28,0x27,0x26,0x25,
+ 0x28,0x23,0x23,0x23,0x24,0x22,0x22,0x25,0x21,0x22,0x25,0x26,0x25,0x24,0x28,0x24,
+ 0x25,0x25,0x25,0x28,0x25,0x25,0x25,0x24,0x28,0x28,0x27,0x23,0x26,0x04,0x24,0x24,
+ 0x24,0x25,0x24,0x25,0x25,0x24,0x22,0x28,0x24,0x24,0x26,0x26,0x25,0x28,0x25,0x26,
+ 0x29,0x28,0x04,0x28,0x04,0x26,0x28,0x28,0x04,0x2A,0x28,0x28,0x24,0x28,0x26,0x26,
+ 0x04,0x25,0x26,0x28,0x27,0x25,0x29,0x28,0x28,0x24,0x28,0x26,0x28,0x04,0x28,0x04,
+ 0x04,0x24,0x25,0x23,0x23,0x04,0x24,0x28,0x24,0x04,0x22,0x26,0x26,0x25,0x25,0x28,
+ 0x25,0x28,0x28,0x04,0x27,0x25,0x25,0x24,0x25,0x27,0x27,0x25,0x23,0x24,0x27,0x29,
+ 0x04,0x26,0x25,0x26,0x26,0x26,0x22,0x04,0x25,0x04,0x25,0x28,0x28,0x25,0x25,0x04,
+ 0x25,0x24,0x25,0x25,0x28,0x28,0x28,0x24,0x04,0x28,0x28,0x25,0x25,0x24,0x24,0x24,
+ 0x25,0x20,0x23,0x22,0x23,0x22,0x25,0x25,0x24,0x25,0x25,0x28,0x25,0x28,0x22,0x24,
+ 0x24,0x24,0x23,0x25,0x26,0x04,0x25,0x22,0x25,0x20,0x24,0x20,0x20,0x24,0x23,0x24,
+ 0x22,0x22,0x24,0x25,0x24,0x24,0x28,0x25,0x22,0x23,0x28,0x28,0x25,0x28,0x26,0x26,
+ 0x23,0x28,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x25,0x26,0x26,0x28,0x28,0x28,0x29,
+ 0x28,0x28,0x04,0x29,0x28,0x26,0x29,0x04,0x25,0x28,0x04,0x29,0x29,0x29,0x28,0x28,
+ 0x24,0x04,0x28,0x28,0x28,0x26,0x26,0x04,0x28,0x29,0x04,0x29,0x04,0x29,0x26,0x28,
+ 0x29,0x25,0x28,0x29,0x24,0x04,0x29,0x2A,0x2A,0x28,0x04,0x04,0x29,0x28,0x04,0x29,
+ 0x2A,0x28,0x28,0x28,0x26,0x25,0x29,0x26,0x25,0x28,0x24,0x24,0x26,0x23,0x20,0x22,
+ 0x20,0x04,0x20,0x25,0x25,0x20,0x20,0x25,0x22,0x22,0x20,0x22,0x28,0x25,0x25,0x25,
+ 0x25,0x25,0x26,0x28,0x26,0x28,0x28,0x25,0x25,0x28,0x28,0x04,0x28,0x28,0x25,0x25,
+ 0x28,0x28,0x26,0x04,0x26,0x28,0x26,0x28,0x28,0x28,0x28,0x28,0x04,0x25,0x24,0x25,
+ 0x25,0x24,0x21,0x23,0x24,0x04,0x24,0x22,0x24,0x25,0x25,0x25,0x24,0x22,0x25,0x28,
+ 0x04,0x04,0x26,0x26,0x25,0x04,0x28,0x28,0x28,0x26,0x26,0x26,0x23,0x28,0x25,0x25,
+ 0x23,0x27,0x28,0x24,0x28,0x27,0x28,0x23,0x04,0x26,0x28,0x28,0x29,0x04,0x28,0x28,
+ 0x28,0x29,0x2A,0x25,0x25,0x2A,0x28,0x26,0x29,0x29,0x28,0x25,0x28,0x23,0x25,0x25,
+ 0x27,0x25,0x26,0x26,0x28,0x29,0x28,0x04,0x04,0x28,0x28,0x04,0x04,0x04,0x04,0x25,
+ 0x25,0x25,0x25,0x26,0x22,0x24,0x25,0x28,0x28,0x24,0x24,0x22,0x26,0x24,0x28,0x25,
+ 0x24,0x24,0x24,0x04,0x27,0x24,0x23,0x28,0x24,0x27,0x26,0x28,0x24,0x25,0x04,0x29,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
+ 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
+ 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
+ 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
+ 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
+ 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
+ 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
+ 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
+ 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
+ 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
+ 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
+ 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
+ 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
+ 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
+ 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
+ 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
+ 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
+ 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
+ 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
+ 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
+ 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x00,0x00,0x00,0x00,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x00,0x00,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x2A,0x2C,0x29,0x29,0x29,0x29,0x29,0x29,0x2A,0x2C,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x00,0x00,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x2C,0x2C,0x29,0x29,0x29,0x29,0x29,0x2A,0x2C,0x2C,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x00,
+ 0x00,0x00,0x00,0x00,0x29,0x29,0x29,0x29,0x00,0x00,0x00,0x00,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x29,0x29,
+ 0x29,0x29,0x00,0x00,0x00,0x00,0x29,0x29,0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x29,0x29,0x29,0x29,0x00,0x00,0x00,0x00,0x29,0x29,0x29,0x00,0x00,0x00,0x00,0x00,
+ 0x29,0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x2C,0x29,0x29,
+ 0x29,0x2C,0x29,0x29,0x2C,0x29,0x29,0x29,0x29,0x2A,0x2C,0x2A,0x2C,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x00,
+ 0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x00,0x00,0x29,0x00,0x00,0x29,0x00,0x00,0x29,
+ 0x29,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x00,0x00,0x29,0x00,
+ 0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x00,
+ 0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x2C,0x29,0x29,
+ 0x29,0x2C,0x29,0x29,0x2C,0x29,0x29,0x29,0x2A,0x2C,0x2A,0x29,0x2C,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x00,
+ 0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x00,0x00,0x29,0x00,0x00,0x29,0x00,0x00,0x29,
+ 0x29,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x00,0x00,0x29,0x00,
+ 0x00,0x29,0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x00,
+ 0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x2C,0x2A,0x29,
+ 0x2A,0x2C,0x29,0x29,0x2C,0x29,0x29,0x29,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x00,
+ 0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x00,0x00,0x29,0x00,0x00,0x29,0x00,0x00,0x29,
+ 0x29,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x00,0x00,0x29,0x00,
+ 0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x29,0x29,0x29,0x29,0x00,0x00,0x29,0x29,0x00,
+ 0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x29,0x29,0x29,0x00,0x00,0x29,0x29,0x00,0x00,
+ 0x29,0x29,0x00,0x00,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x2A,0x2C,0x2A,
+ 0x2C,0x2A,0x29,0x29,0x2C,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x2C,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x00,0x00,0x00,0x00,0x29,0x29,0x29,0x00,
+ 0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x29,0x00,0x00,0x00,0x00,0x00,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x00,0x00,0x29,0x00,0x00,0x29,0x00,0x00,0x29,
+ 0x29,0x29,0x00,0x00,0x00,0x00,0x29,0x29,0x29,0x00,0x00,0x29,0x00,0x00,0x29,0x00,
+ 0x00,0x29,0x29,0x29,0x00,0x00,0x00,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x00,
+ 0x00,0x29,0x29,0x29,0x00,0x00,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x00,0x00,
+ 0x29,0x29,0x00,0x00,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x2A,0x2C,
+ 0x2A,0x29,0x29,0x2C,0x2C,0x2C,0x29,0x2C,0x29,0x29,0x29,0x29,0x2C,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29};
+#else
+byte signon[] = {
+ 0x92,0x01,0x92,0x94,0x91,0x92,0x93,0x91,0x92,0x01,0x95,0x95,0x92,0x92,0x94,0x92,
+ 0x92,0x96,0x92,0x95,0x92,0x91,0x95,0x93,0x91,0x92,0x92,0x92,0x91,0x95,0x92,0x95,
+ 0x94,0x95,0x92,0x91,0x92,0x92,0x91,0x94,0x93,0x01,0x98,0x99,0x98,0x99,0x93,0x96,
+ 0x95,0x96,0x92,0x01,0x93,0x93,0x96,0x94,0x93,0x95,0x95,0x93,0x93,0x01,0x93,0x95,
+ 0x01,0x98,0x95,0x93,0x94,0x92,0x95,0x98,0x98,0x98,0x93,0x93,0x01,0x93,0x92,0x93,
+ 0x95,0x93,0x95,0x95,0x01,0x92,0x92,0x91,0x93,0x93,0x95,0x95,0x92,0x93,0x95,0x96,
+ 0x93,0x99,0x99,0x92,0x94,0x93,0x92,0x01,0x95,0x92,0x01,0x93,0x93,0x92,0x93,0x95,
+ 0x94,0x93,0x93,0x93,0x95,0x94,0x98,0x93,0x92,0x93,0x93,0x92,0x94,0x95,0x92,0x01,
+ 0x92,0x92,0x94,0x01,0x94,0x94,0x94,0x94,0x95,0x94,0x98,0x9A,0x93,0x92,0x96,0x92,
+ 0x96,0x95,0x92,0x92,0x96,0x98,0x96,0x98,0x98,0x94,0x94,0x95,0x92,0x94,0x95,0x92,
+ 0x95,0x95,0x95,0x96,0x92,0x95,0x94,0x94,0x94,0x95,0x94,0x95,0x92,0x01,0x94,0x95,
+ 0x95,0x96,0x94,0x92,0x96,0x96,0x94,0x94,0x93,0x01,0x92,0x95,0x98,0x94,0x96,0x92,
+ 0x96,0x95,0x96,0x9A,0x98,0x93,0x95,0x95,0x95,0x93,0x98,0x95,0x95,0x01,0x95,0x94,
+ 0x93,0x95,0x93,0x98,0x96,0x95,0x8E,0x8E,0x95,0x8D,0x92,0x92,0x95,0x92,0x98,0x95,
+ 0x95,0x98,0x01,0x98,0x95,0x94,0x94,0x94,0x94,0x94,0x95,0x95,0x98,0x98,0x95,0x95,
+ 0x96,0x93,0x01,0x95,0x01,0x94,0x95,0x98,0x98,0x93,0x96,0x95,0x96,0x95,0x96,0x95,
+ 0x98,0x98,0x94,0x96,0x98,0x8D,0x8E,0x96,0x8E,0x93,0x01,0x96,0x95,0x94,0x96,0x98,
+ 0x98,0x98,0x94,0x98,0x98,0x95,0x95,0x96,0x96,0x01,0x95,0x96,0x96,0x01,0x96,0x92,
+ 0x95,0x95,0x92,0x98,0x94,0x98,0x95,0x96,0x96,0x96,0x95,0x95,0x98,0x98,0x96,0x98,
+ 0x98,0x98,0x96,0x98,0x94,0x98,0x01,0x98,0x96,0x95,0x96,0x96,0x96,0x95,0x98,0x96,
+ 0x92,0x95,0x92,0x95,0x93,0x95,0x95,0x92,0x92,0x01,0x92,0x93,0x95,0x95,0x93,0x92,
+ 0x92,0x92,0x92,0x91,0x01,0x94,0x01,0x94,0x93,0x95,0x92,0x92,0x91,0x93,0x93,0x01,
+ 0x93,0x94,0x93,0x95,0x95,0x95,0x92,0x01,0x95,0x93,0x95,0x95,0x95,0x95,0x95,0x94,
+ 0x95,0x94,0x93,0x95,0x94,0x92,0x95,0x95,0x94,0x92,0x93,0x93,0x93,0x95,0x96,0x95,
+ 0x95,0x94,0x94,0x95,0x94,0x94,0x91,0x95,0x96,0x01,0x92,0x95,0x95,0x93,0x92,0x95,
+ 0x96,0x01,0x93,0x93,0x93,0x96,0x92,0x95,0x95,0x96,0x94,0x95,0x96,0x94,0x01,0x01,
+ 0x92,0x95,0x94,0x01,0x95,0x98,0x95,0x96,0x96,0x01,0x98,0x93,0x95,0x92,0x92,0x96,
+ 0x93,0x95,0x01,0x01,0x92,0x95,0x92,0x95,0x93,0x92,0x93,0x94,0x92,0x94,0x93,0x01,
+ 0x01,0x98,0x98,0x91,0x94,0x95,0x94,0x98,0x93,0x98,0x98,0x95,0x95,0x93,0x93,0x94,
+ 0x95,0x94,0x92,0x95,0x01,0x98,0x01,0x01,0x96,0x96,0x96,0x96,0x96,0x95,0x98,0x94,
+ 0x95,0x98,0x94,0x95,0x01,0x94,0x95,0x94,0x94,0x94,0x94,0x94,0x01,0x94,0x92,0x94,
+ 0x93,0x95,0x95,0x95,0x01,0x96,0x95,0x95,0x96,0x96,0x95,0x96,0x95,0x95,0x96,0x96,
+ 0x96,0x01,0x98,0x98,0x96,0x95,0x98,0x98,0x98,0x98,0x98,0x94,0x95,0x93,0x96,0x95,
+ 0x95,0x96,0x93,0x8E,0x8E,0x8E,0x92,0x8E,0x8E,0x8E,0x96,0x93,0x98,0x96,0x95,0x98,
+ 0x98,0x96,0x96,0x98,0x01,0x98,0x98,0x96,0x96,0x94,0x96,0x95,0x98,0x97,0x01,0x94,
+ 0x96,0x98,0x01,0x96,0x96,0x92,0x98,0x95,0x98,0x95,0x95,0x96,0x01,0x94,0x96,0x96,
+ 0x93,0x96,0x93,0x96,0x95,0x94,0x95,0x92,0x95,0x96,0x95,0x94,0x95,0x92,0x95,0x96,
+ 0x95,0x01,0x96,0x96,0x01,0x95,0x98,0x94,0x98,0x95,0x96,0x94,0x95,0x01,0x94,0x96,
+ 0x96,0x98,0x95,0x93,0x96,0x98,0x98,0x95,0x01,0x98,0x93,0x96,0x98,0x01,0x94,0x95,
+ 0x96,0x96,0x95,0x98,0x98,0x98,0x95,0x94,0x95,0x98,0x96,0x96,0x01,0x94,0x96,0x95,
+ 0x91,0x92,0x92,0x95,0x96,0x95,0x92,0x96,0x91,0x95,0x95,0x92,0x92,0x93,0x95,0x94,
+ 0x94,0x91,0x93,0x92,0x94,0x91,0x92,0x96,0x92,0x92,0x92,0x94,0x94,0x92,0x01,0x98,
+ 0x95,0x95,0x93,0x98,0x01,0x93,0x95,0x95,0x95,0x95,0x93,0x93,0x92,0x92,0x01,0x95,
+ 0x95,0x95,0x92,0x92,0x93,0x93,0x93,0x92,0x94,0x94,0x95,0x95,0x95,0x93,0x94,0x95,
+ 0x93,0x92,0x93,0x94,0x94,0x93,0x92,0x95,0x94,0x96,0x95,0x95,0x98,0x96,0x95,0x95,
+ 0x92,0x96,0x95,0x95,0x96,0x95,0x95,0x01,0x95,0x01,0x96,0x99,0x99,0x99,0x98,0x01,
+ 0x98,0x95,0x96,0x96,0x98,0x95,0x93,0x96,0x01,0x98,0x98,0x98,0x98,0x95,0x95,0x93,
+ 0x93,0x95,0x95,0x96,0x95,0x93,0x94,0x95,0x01,0x95,0x96,0x96,0x01,0x01,0x95,0x95,
+ 0x95,0x97,0x98,0x92,0x94,0x01,0x98,0x01,0x96,0x96,0x98,0x93,0x92,0x93,0x94,0x98,
+ 0x95,0x94,0x94,0x95,0x98,0x94,0x98,0x94,0x92,0x96,0x98,0x98,0x01,0x96,0x92,0x94,
+ 0x95,0x95,0x95,0x98,0x95,0x96,0x95,0x96,0x96,0x95,0x94,0x96,0x92,0x95,0x96,0x96,
+ 0x96,0x95,0x01,0x95,0x95,0x92,0x94,0x95,0x01,0x96,0x94,0x98,0x96,0x95,0x95,0x98,
+ 0x01,0x98,0x96,0x99,0x98,0x99,0x98,0x97,0x95,0x96,0x95,0x92,0x92,0x01,0x94,0x96,
+ 0x93,0x8E,0x8E,0x8E,0x92,0x8E,0x8E,0x92,0x95,0x95,0x96,0x98,0x95,0x95,0x98,0x94,
+ 0x95,0x01,0x98,0x98,0x01,0x96,0x01,0x98,0x95,0x01,0x01,0x01,0x95,0x98,0x95,0x94,
+ 0x01,0x96,0x96,0x96,0x96,0x98,0x98,0x98,0x95,0x98,0x95,0x95,0x96,0x96,0x01,0x96,
+ 0x95,0x93,0x95,0x01,0x92,0x92,0x92,0x94,0x96,0x94,0x96,0x96,0x95,0x95,0x01,0x98,
+ 0x94,0x94,0x98,0x96,0x98,0x95,0x92,0x96,0x94,0x92,0x98,0x94,0x01,0x92,0x94,0x96,
+ 0x94,0x96,0x94,0x96,0x96,0x96,0x95,0x95,0x96,0x01,0x98,0x96,0x98,0x96,0x96,0x98,
+ 0x98,0x96,0x96,0x94,0x95,0x98,0x98,0x96,0x98,0x98,0x96,0x95,0x94,0x96,0x94,0x95,
+ 0x92,0x91,0x95,0x92,0x94,0x92,0x92,0x91,0x95,0x94,0x93,0x92,0x95,0x95,0x91,0x94,
+ 0x93,0x91,0x98,0x94,0x94,0x92,0x93,0x93,0x01,0x94,0x95,0x95,0x96,0x94,0x98,0x96,
+ 0x95,0x98,0x98,0x01,0x96,0x95,0x92,0x93,0x94,0x94,0x93,0x95,0x93,0x95,0x95,0x96,
+ 0x95,0x92,0x92,0x98,0x93,0x93,0x96,0x92,0x95,0x95,0x93,0x92,0x93,0x93,0x95,0x94,
+ 0x01,0x93,0x92,0x96,0x93,0x92,0x93,0x93,0x95,0x92,0x94,0x92,0x91,0x01,0x98,0x95,
+ 0x96,0x98,0x95,0x98,0x96,0x01,0x99,0x01,0x96,0x01,0x94,0x97,0x98,0x01,0x93,0x01,
+ 0x96,0x01,0x93,0x96,0x94,0x98,0x94,0x94,0x96,0x96,0x98,0x98,0x96,0x98,0x01,0x01,
+ 0x95,0x96,0x01,0x96,0x95,0x98,0x94,0x98,0x95,0x96,0x99,0x99,0x99,0x99,0x94,0x99,
+ 0x99,0x96,0x95,0x93,0x99,0x98,0x95,0x97,0x96,0x01,0x92,0x95,0x96,0x98,0x94,0x94,
+ 0x96,0x96,0x01,0x96,0x94,0x96,0x94,0x98,0x96,0x93,0x96,0x93,0x98,0x98,0x96,0x98,
+ 0x96,0x96,0x95,0x98,0x95,0x98,0x95,0x98,0x95,0x95,0x98,0x98,0x98,0x96,0x96,0x96,
+ 0x98,0x98,0x01,0x95,0x97,0x96,0x96,0x95,0x98,0x98,0x94,0x98,0x98,0x98,0x99,0x9A,
+ 0x9A,0x96,0x98,0x98,0x97,0x01,0x01,0x95,0x94,0x92,0x93,0x93,0x8E,0x92,0x94,0x92,
+ 0x94,0x91,0x92,0x92,0x93,0x96,0x94,0x95,0x95,0x96,0x94,0x96,0x95,0x94,0x96,0x01,
+ 0x98,0x94,0x98,0x96,0x96,0x94,0x98,0x96,0x96,0x01,0x01,0x94,0x94,0x94,0x95,0x96,
+ 0x94,0x96,0x95,0x98,0x94,0x95,0x94,0x96,0x98,0x96,0x95,0x96,0x01,0x95,0x95,0x93,
+ 0x95,0x95,0x93,0x93,0x96,0x01,0x95,0x96,0x98,0x98,0x93,0x98,0x96,0x95,0x96,0x96,
+ 0x98,0x98,0x95,0x95,0x96,0x98,0x95,0x98,0x94,0x96,0x94,0x98,0x94,0x98,0x01,0x98,
+ 0x01,0x01,0x98,0x96,0x96,0x01,0x01,0x95,0x98,0x01,0x01,0x98,0x98,0x95,0x98,0x96,
+ 0x01,0x94,0x01,0x01,0x96,0x01,0x94,0x98,0x98,0x01,0x01,0x96,0x95,0x98,0x98,0x01,
+ 0x92,0x92,0x92,0x92,0x92,0x93,0x92,0x92,0x98,0x95,0x91,0x95,0x93,0x92,0x92,0x01,
+ 0x95,0x93,0x92,0x94,0x94,0x96,0x96,0x96,0x01,0x94,0x96,0x96,0x96,0x96,0x95,0x95,
+ 0x94,0x01,0x95,0x94,0x98,0x96,0x95,0x96,0x93,0x92,0x01,0x93,0x92,0x95,0x01,0x01,
+ 0x93,0x92,0x93,0x93,0x93,0x96,0x01,0x94,0x95,0x93,0x93,0x93,0x95,0x93,0x95,0x93,
+ 0x93,0x93,0x92,0x95,0x92,0x93,0x92,0x91,0x93,0x93,0x92,0x95,0x93,0x95,0x95,0x96,
+ 0x97,0x96,0x99,0x98,0x98,0x94,0x93,0x96,0x96,0x93,0x93,0x95,0x95,0x94,0x94,0x95,
+ 0x93,0x92,0x95,0x93,0x93,0x93,0x92,0x98,0x93,0x96,0x94,0x94,0x96,0x99,0x98,0x98,
+ 0x98,0x95,0x94,0x98,0x01,0x98,0x98,0x99,0x01,0x95,0x96,0x01,0x97,0x97,0x95,0x97,
+ 0x94,0x94,0x98,0x97,0x95,0x98,0x99,0x95,0x99,0x96,0x95,0x98,0x98,0x98,0x98,0x98,
+ 0x98,0x95,0x96,0x98,0x95,0x98,0x96,0x92,0x98,0x98,0x96,0x95,0x96,0x98,0x96,0x94,
+ 0x94,0x01,0x95,0x96,0x96,0x95,0x96,0x98,0x01,0x01,0x95,0x92,0x98,0x95,0x98,0x95,
+ 0x94,0x96,0x97,0x98,0x95,0x01,0x01,0x9A,0x96,0x98,0x96,0x9A,0x98,0x98,0x98,0x95,
+ 0x96,0x98,0x94,0x98,0x95,0x93,0x94,0x94,0x92,0x95,0x94,0x92,0x8E,0x8E,0x94,0x93,
+ 0x91,0x95,0x95,0x94,0x01,0x95,0x98,0x95,0x01,0x98,0x96,0x01,0x96,0x93,0x98,0x98,
+ 0x94,0x94,0x96,0x95,0x96,0x96,0x95,0x95,0x95,0x95,0x96,0x94,0x94,0x95,0x94,0x98,
+ 0x95,0x95,0x96,0x98,0x93,0x96,0x98,0x92,0x01,0x96,0x93,0x95,0x94,0x98,0x95,0x91,
+ 0x94,0x92,0x95,0x96,0x98,0x95,0x94,0x98,0x96,0x98,0x94,0x96,0x95,0x93,0x95,0x01,
+ 0x95,0x01,0x96,0x01,0x98,0x96,0x98,0x98,0x95,0x98,0x94,0x96,0x98,0x97,0x97,0x95,
+ 0x98,0x96,0x98,0x95,0x94,0x95,0x98,0x95,0x98,0x98,0x98,0x01,0x95,0x98,0x98,0x99,
+ 0x98,0x01,0x99,0x98,0x99,0x98,0x98,0x01,0x98,0x96,0x99,0x99,0x98,0x99,0x99,0x98,
+ 0x01,0x95,0x95,0x94,0x95,0x01,0x98,0x94,0x94,0x94,0x96,0x91,0x91,0x95,0x91,0x94,
+ 0x92,0x94,0x95,0x95,0x98,0x96,0x01,0x93,0x98,0x98,0x96,0x95,0x98,0x94,0x94,0x01,
+ 0x98,0x01,0x01,0x96,0x98,0x99,0x98,0x94,0x93,0x98,0x01,0x98,0x95,0x96,0x96,0x96,
+ 0x94,0x98,0x96,0x93,0x95,0x96,0x01,0x01,0x94,0x92,0x95,0x95,0x92,0x94,0x93,0x01,
+ 0x92,0x95,0x94,0x96,0x96,0x92,0x93,0x93,0x91,0x01,0x95,0x93,0x94,0x93,0x96,0x95,
+ 0x98,0x94,0x92,0x95,0x98,0x92,0x94,0x93,0x95,0x93,0x95,0x96,0x95,0x93,0x01,0x92,
+ 0x98,0x93,0x95,0x93,0x95,0x95,0x95,0x95,0x93,0x94,0x95,0x94,0x98,0x93,0x98,0x01,
+ 0x98,0x98,0x98,0x01,0x96,0x95,0x94,0x96,0x96,0x95,0x98,0x98,0x95,0x94,0x94,0x01,
+ 0x94,0x95,0x93,0x94,0x91,0x94,0x95,0x96,0x01,0x96,0x96,0x95,0x01,0x94,0x98,0x01,
+ 0x95,0x95,0x93,0x98,0x96,0x96,0x01,0x96,0x01,0x96,0x98,0x96,0x94,0x01,0x98,0x95,
+ 0x94,0x92,0x96,0x01,0x96,0x94,0x96,0x01,0x96,0x98,0x94,0x01,0x94,0x01,0x95,0x98,
+ 0x98,0x99,0x94,0x99,0x98,0x95,0x99,0x98,0x98,0x98,0x98,0x95,0x98,0x98,0x98,0x97,
+ 0x96,0x96,0x94,0x95,0x93,0x96,0x92,0x8E,0x92,0x92,0x96,0x94,0x92,0x95,0x93,0x92,
+ 0x98,0x93,0x98,0x95,0x95,0x96,0x98,0x96,0x95,0x96,0x95,0x01,0x96,0x95,0x98,0x95,
+ 0x95,0x01,0x01,0x96,0x96,0x01,0x95,0x98,0x95,0x95,0x01,0x01,0x95,0x96,0x95,0x01,
+ 0x96,0x95,0x95,0x96,0x96,0x96,0x01,0x96,0x96,0x96,0x95,0x96,0x95,0x96,0x8E,0x92,
+ 0x94,0x01,0x96,0x96,0x98,0x98,0x98,0x96,0x01,0x96,0x98,0x96,0x96,0x94,0x01,0x98,
+ 0x94,0x95,0x96,0x96,0x94,0x95,0x96,0x94,0x95,0x96,0x96,0x01,0x01,0x98,0x98,0x98,
+ 0x98,0x95,0x96,0x98,0x96,0x95,0x95,0x98,0x01,0x96,0x98,0x98,0x94,0x95,0x98,0x01,
+ 0x95,0x9A,0x98,0x9A,0x98,0x9A,0x99,0x9A,0x98,0x99,0x01,0x99,0x98,0x98,0x98,0x95,
+ 0x95,0x92,0x91,0x91,0x94,0x94,0x91,0x91,0x94,0x93,0x8E,0x94,0x8E,0x8E,0x92,0x92,
+ 0x94,0x94,0x94,0x95,0x95,0x01,0x95,0x96,0x98,0x96,0x96,0x95,0x96,0x98,0x98,0x92,
+ 0x01,0x98,0x97,0x01,0x98,0x94,0x98,0x95,0x99,0x98,0x96,0x98,0x92,0x95,0x93,0x95,
+ 0x92,0x93,0x95,0x95,0x96,0x96,0x94,0x96,0x95,0x98,0x98,0x95,0x96,0x98,0x95,0x94,
+ 0x01,0x94,0x95,0x96,0x96,0x95,0x98,0x95,0x95,0x93,0x96,0x96,0x95,0x94,0x98,0x98,
+ 0x96,0x96,0x95,0x92,0x93,0x92,0x93,0x93,0x94,0x93,0x92,0x94,0x96,0x01,0x96,0x94,
+ 0x91,0x95,0x96,0x94,0x93,0x94,0x93,0x93,0x92,0x92,0x01,0x96,0x95,0x94,0x96,0x96,
+ 0x98,0x94,0x96,0x95,0x98,0x94,0x96,0x98,0x98,0x95,0x95,0x95,0x98,0x94,0x93,0x01,
+ 0x01,0x92,0x95,0x01,0x94,0x95,0x95,0x95,0x93,0x95,0x94,0x95,0x93,0x94,0x95,0x95,
+ 0x92,0x01,0x01,0x94,0x01,0x94,0x95,0x94,0x94,0x94,0x94,0x94,0x95,0x95,0x98,0x98,
+ 0x95,0x94,0x96,0x98,0x94,0x95,0x93,0x01,0x92,0x94,0x99,0x96,0x96,0x96,0x01,0x98,
+ 0x98,0x96,0x99,0x98,0x94,0x95,0x95,0x95,0x98,0x98,0x01,0x98,0x01,0x98,0x95,0x95,
+ 0x95,0x94,0x92,0x94,0x95,0x93,0x8E,0x93,0x95,0x01,0x95,0x94,0x95,0x93,0x93,0x01,
+ 0x95,0x94,0x93,0x94,0x96,0x96,0x96,0x93,0x95,0x94,0x98,0x95,0x01,0x01,0x96,0x01,
+ 0x95,0x96,0x96,0x01,0x98,0x96,0x96,0x95,0x95,0x96,0x95,0x95,0x96,0x01,0x94,0x96,
+ 0x95,0x96,0x98,0x93,0x98,0x98,0x96,0x96,0x01,0x01,0x95,0x95,0x92,0x8E,0x92,0x95,
+ 0x94,0x96,0x96,0x01,0x96,0x98,0x95,0x01,0x98,0x98,0x01,0x96,0x95,0x96,0x98,0x01,
+ 0x96,0x98,0x95,0x96,0x94,0x96,0x94,0x95,0x95,0x98,0x95,0x96,0x95,0x94,0x94,0x01,
+ 0x98,0x98,0x95,0x98,0x98,0x98,0x01,0x98,0x98,0x95,0x98,0x01,0x96,0x94,0x99,0x99,
+ 0x98,0x99,0x98,0x98,0x96,0x99,0x98,0x99,0x98,0x98,0x95,0x93,0x95,0x97,0x94,0x96,
+ 0x01,0x8E,0x96,0x92,0x8E,0x8E,0x8E,0x8E,0x8E,0x92,0x93,0x95,0x94,0x92,0x92,0x96,
+ 0x01,0x96,0x8E,0x01,0x96,0x95,0x94,0x92,0x01,0x98,0x96,0x96,0x98,0x96,0x98,0x98,
+ 0x95,0x94,0x98,0x96,0x96,0x95,0x95,0x96,0x98,0x93,0x97,0x96,0x98,0x98,0x01,0x01,
+ 0x95,0x92,0x93,0x95,0x94,0x95,0x95,0x95,0x95,0x96,0x95,0x94,0x97,0x95,0x98,0x95,
+ 0x94,0x01,0x96,0x95,0x93,0x98,0x98,0x98,0x98,0x96,0x99,0x96,0x98,0x97,0x94,0x96,
+ 0x95,0x98,0x01,0x96,0x95,0x92,0x96,0x95,0x92,0x93,0x94,0x93,0x93,0x92,0x92,0x93,
+ 0x93,0x95,0x94,0x95,0x92,0x93,0x96,0x01,0x94,0x96,0x94,0x95,0x96,0x98,0x93,0x94,
+ 0x96,0x94,0x95,0x98,0x96,0x93,0x98,0x94,0x94,0x92,0x93,0x92,0x95,0x95,0x95,0x96,
+ 0x95,0x95,0x94,0x95,0x93,0x92,0x94,0x94,0x98,0x94,0x95,0x93,0x94,0x95,0x95,0x94,
+ 0x96,0x95,0x95,0x98,0x95,0x01,0x94,0x95,0x95,0x94,0x96,0x94,0x94,0x98,0x98,0x99,
+ 0x98,0x98,0x98,0x99,0x96,0x99,0x98,0x99,0x99,0x99,0x96,0x95,0x97,0x95,0x98,0x01,
+ 0x98,0x97,0x98,0x96,0x98,0x96,0x96,0x99,0x98,0x96,0x98,0x95,0x95,0x98,0x94,0x8E,
+ 0x93,0x8E,0x92,0x92,0x93,0x95,0x92,0x93,0x94,0x92,0x94,0x93,0x93,0x96,0x94,0x98,
+ 0x93,0x98,0x01,0x94,0x96,0x98,0x96,0x94,0x96,0x96,0x01,0x01,0x01,0x95,0x95,0x94,
+ 0x96,0x95,0x96,0x96,0x95,0x98,0x95,0x95,0x96,0x95,0x94,0x98,0x93,0x98,0x98,0x01,
+ 0x96,0x01,0x94,0x95,0x96,0x01,0x95,0x94,0x94,0x94,0x94,0x94,0x94,0x96,0x98,0x95,
+ 0x93,0x96,0x95,0x95,0x98,0x92,0x95,0x98,0x94,0x94,0x95,0x98,0x95,0x97,0x98,0x96,
+ 0x96,0x97,0x98,0x98,0x01,0x97,0x95,0x95,0x98,0x98,0x98,0x98,0x96,0x99,0x96,0x95,
+ 0x98,0x94,0x95,0x94,0x98,0x95,0x94,0x95,0x94,0x97,0x94,0x98,0x96,0x96,0x98,0x98,
+ 0x96,0x98,0x94,0x98,0x01,0x95,0x98,0x93,0x98,0x94,0x01,0x98,0x98,0x01,0x96,0x96,
+ 0x8D,0x91,0x92,0x95,0x94,0x93,0x92,0x95,0x95,0x91,0x95,0x96,0x96,0x01,0x98,0x98,
+ 0x95,0x01,0x91,0x8E,0x8E,0x95,0x92,0x95,0x95,0x94,0x98,0x95,0x95,0x94,0x01,0x01,
+ 0x94,0x93,0x98,0x95,0x01,0x95,0x95,0x93,0x93,0x01,0x95,0x93,0x93,0x95,0x99,0x98,
+ 0x96,0x94,0x98,0x95,0x95,0x98,0x01,0x95,0x96,0x98,0x97,0x95,0x98,0x94,0x98,0x98,
+ 0x01,0x01,0x98,0x98,0x01,0x96,0x98,0x98,0x97,0x94,0x98,0x97,0x98,0x96,0x96,0x98,
+ 0x98,0x98,0x95,0x98,0x95,0x95,0x95,0x95,0x96,0x94,0x95,0x92,0x93,0x92,0x95,0x93,
+ 0x93,0x95,0x94,0x93,0x95,0x96,0x96,0x96,0x96,0x94,0x94,0x98,0x96,0x96,0x98,0x94,
+ 0x96,0x98,0x98,0x95,0x93,0x94,0x96,0x94,0x92,0x93,0x94,0x01,0x93,0x92,0x93,0x93,
+ 0x95,0x94,0x93,0x92,0x92,0x93,0x95,0x98,0x95,0x93,0x01,0x96,0x93,0x95,0x96,0x98,
+ 0x93,0x95,0x92,0x95,0x92,0x94,0x94,0x92,0x95,0x94,0x92,0x92,0x94,0x93,0x98,0x01,
+ 0x94,0x96,0x94,0x94,0x93,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x95,0x95,0x01,0x98,
+ 0x97,0x98,0x98,0x01,0x98,0x98,0x96,0x98,0x96,0x98,0x01,0x96,0x94,0x8E,0x92,0x92,
+ 0x92,0x92,0x95,0x93,0x95,0x93,0x01,0x94,0x95,0x94,0x95,0x95,0x01,0x95,0x92,0x96,
+ 0x98,0x96,0x96,0x01,0x94,0x96,0x94,0x95,0x96,0x92,0x95,0x96,0x96,0x01,0x98,0x93,
+ 0x98,0x96,0x95,0x98,0x93,0x96,0x95,0x98,0x01,0x98,0x94,0x98,0x94,0x96,0x98,0x95,
+ 0x95,0x95,0x95,0x93,0x96,0x95,0x93,0x8E,0x94,0x94,0x93,0x94,0x95,0x96,0x95,0x98,
+ 0x96,0x94,0x96,0x96,0x96,0x96,0x96,0x96,0x98,0x96,0x98,0x96,0x01,0x01,0x99,0x95,
+ 0x99,0x96,0x98,0x98,0x98,0x98,0x99,0x01,0x99,0x98,0x96,0x96,0x98,0x01,0x99,0x98,
+ 0x98,0x94,0x01,0x95,0x98,0x98,0x95,0x01,0x01,0x98,0x01,0x98,0x98,0x96,0x01,0x95,
+ 0x98,0x94,0x01,0x01,0x96,0x96,0x93,0x94,0x01,0x96,0x98,0x98,0x95,0x96,0x01,0x95,
+ 0x97,0x96,0x98,0x98,0x96,0x95,0x96,0x96,0x01,0x96,0x96,0x96,0x96,0x96,0x94,0x94,
+ 0x95,0x92,0x95,0x92,0x96,0x01,0x94,0x98,0x01,0x98,0x98,0x01,0x01,0x96,0x93,0x94,
+ 0x98,0x95,0x95,0x93,0x01,0x96,0x98,0x95,0x95,0x96,0x95,0x92,0x95,0x01,0x96,0x96,
+ 0x97,0x98,0x95,0x98,0x95,0x95,0x95,0x98,0x96,0x94,0x95,0x01,0x98,0x98,0x93,0x94,
+ 0x92,0x96,0x96,0x01,0x95,0x92,0x98,0x98,0x93,0x96,0x96,0x95,0x01,0x98,0x97,0x01,
+ 0x95,0x96,0x94,0x96,0x99,0x98,0x98,0x96,0x96,0x97,0x94,0x96,0x01,0x94,0x92,0x96,
+ 0x95,0x92,0x95,0x94,0x01,0x94,0x98,0x95,0x96,0x96,0x96,0x94,0x93,0x95,0x01,0x95,
+ 0x94,0x95,0x95,0x92,0x92,0x98,0x95,0x95,0x92,0x95,0x94,0x94,0x96,0x95,0x95,0x93,
+ 0x93,0x95,0x01,0x95,0x96,0x92,0x94,0x94,0x95,0x95,0x94,0x93,0x01,0x95,0x94,0x95,
+ 0x01,0x96,0x01,0x96,0x98,0x98,0x94,0x96,0x96,0x95,0x98,0x94,0x95,0x96,0x96,0x92,
+ 0x94,0x95,0x98,0x96,0x98,0x98,0x98,0x98,0x01,0x98,0x94,0x01,0x01,0x98,0x99,0x98,
+ 0x01,0x98,0x98,0x95,0x95,0x96,0x96,0x93,0x95,0x91,0x94,0x92,0x8E,0x95,0x94,0x98,
+ 0x93,0x95,0x94,0x93,0x94,0x92,0x95,0x95,0x98,0x96,0x93,0x95,0x92,0x96,0x95,0x95,
+ 0x01,0x96,0x96,0x94,0x95,0x95,0x96,0x94,0x98,0x98,0x01,0x95,0x96,0x95,0x94,0x96,
+ 0x95,0x96,0x96,0x96,0x94,0x98,0x96,0x94,0x01,0x98,0x01,0x98,0x98,0x98,0x95,0x95,
+ 0x01,0x95,0x94,0x93,0x92,0x8E,0x94,0x91,0x98,0x95,0x98,0x95,0x98,0x95,0x96,0x98,
+ 0x96,0x98,0x01,0x96,0x95,0x01,0x98,0x95,0x94,0x95,0x98,0x98,0x99,0x98,0x98,0x96,
+ 0x98,0x95,0x98,0x95,0x96,0x96,0x99,0x99,0x95,0x98,0x95,0x01,0x94,0x96,0x98,0x99,
+ 0x98,0x96,0x95,0x97,0x94,0x93,0x95,0x98,0x95,0x96,0x98,0x94,0x95,0x95,0x01,0x98,
+ 0x01,0x95,0x94,0x96,0x01,0x96,0x96,0x96,0x96,0x92,0x95,0x98,0x01,0x93,0x98,0x98,
+ 0x9B,0x94,0x98,0x94,0x98,0x95,0x01,0x94,0x96,0x94,0x93,0x01,0x96,0x92,0x98,0x94,
+ 0x98,0x01,0x95,0x96,0x95,0x98,0x98,0x98,0x94,0x8E,0x92,0x98,0x95,0x93,0x93,0x98,
+ 0x94,0x92,0x95,0x92,0x01,0x92,0x91,0x96,0x95,0x93,0x91,0x92,0x92,0x95,0x01,0x98,
+ 0x95,0x98,0x92,0x98,0x98,0x01,0x01,0x94,0x92,0x95,0x95,0x92,0x93,0x95,0x92,0x91,
+ 0x93,0x92,0x92,0x98,0x93,0x93,0x94,0x01,0x98,0x98,0x92,0x01,0x98,0x95,0x98,0x98,
+ 0x01,0x96,0x96,0x98,0x98,0x94,0x01,0x92,0x95,0x98,0x98,0x98,0x96,0x95,0x98,0x98,
+ 0x96,0x95,0x01,0x98,0x96,0x95,0x96,0x98,0x95,0x92,0x96,0x93,0x93,0x93,0x91,0x95,
+ 0x96,0x95,0x96,0x95,0x98,0x95,0x01,0x96,0x95,0x96,0x92,0x95,0x94,0x94,0x95,0x95,
+ 0x98,0x94,0x92,0x96,0x94,0x01,0x96,0x94,0x95,0x96,0x96,0x95,0x95,0x01,0x01,0x98,
+ 0x98,0x94,0x94,0x98,0x95,0x93,0x01,0x94,0x92,0x01,0x96,0x96,0x98,0x98,0x96,0x96,
+ 0x97,0x94,0x98,0x95,0x96,0x95,0x99,0x98,0x95,0x98,0x01,0x98,0x98,0x95,0x95,0x97,
+ 0x98,0x96,0x98,0x94,0x93,0x94,0x93,0x95,0x94,0x8E,0x92,0x93,0x95,0x93,0x98,0x96,
+ 0x01,0x93,0x94,0x95,0x95,0x93,0x96,0x96,0x95,0x95,0x01,0x94,0x98,0x01,0x95,0x98,
+ 0x01,0x94,0x94,0x95,0x98,0x96,0x98,0x01,0x95,0x95,0x98,0x01,0x96,0x98,0x98,0x98,
+ 0x98,0x01,0x95,0x01,0x96,0x01,0x96,0x94,0x01,0x98,0x92,0x96,0x95,0x95,0x96,0x95,
+ 0x96,0x95,0x95,0x92,0x95,0x93,0x93,0x98,0x95,0x95,0x94,0x92,0x98,0x94,0x96,0x95,
+ 0x94,0x95,0x01,0x95,0x01,0x96,0x95,0x98,0x98,0x01,0x98,0x99,0x01,0x98,0x98,0x97,
+ 0x94,0x98,0x97,0x95,0x97,0x95,0x98,0x98,0x98,0x96,0x98,0x01,0x98,0x01,0x92,0x96,
+ 0x96,0x01,0x98,0x98,0x96,0x01,0x98,0x98,0x95,0x98,0x94,0x92,0x95,0x98,0x98,0x93,
+ 0x98,0x01,0x96,0x98,0x98,0x96,0x01,0x96,0x94,0x94,0x96,0x95,0x98,0x94,0x93,0x94,
+ 0x9B,0x98,0x98,0x98,0x98,0x98,0x96,0x97,0x98,0x96,0x94,0x96,0x95,0x93,0x98,0x01,
+ 0x98,0x98,0x97,0x94,0x95,0x94,0x96,0x95,0x94,0x93,0x95,0x8E,0x8E,0x8E,0x95,0x8E,
+ 0x01,0x01,0x98,0x98,0x01,0x93,0x96,0x96,0x95,0x95,0x93,0x92,0x8E,0x8E,0x8E,0x8E,
+ 0x8E,0x92,0x93,0x96,0x98,0x93,0x94,0x01,0x95,0x93,0x98,0x93,0x96,0x95,0x95,0x95,
+ 0x98,0x98,0x98,0x94,0x95,0x98,0x01,0x01,0x96,0x95,0x96,0x93,0x94,0x98,0x95,0x96,
+ 0x94,0x96,0x95,0x95,0x94,0x95,0x92,0x98,0x96,0x95,0x92,0x96,0x98,0x95,0x95,0x98,
+ 0x95,0x98,0x94,0x96,0x95,0x96,0x96,0x98,0x95,0x94,0x01,0x96,0x96,0x01,0x96,0x01,
+ 0x98,0x98,0x01,0x01,0x94,0x94,0x95,0x01,0x01,0x94,0x98,0x96,0x96,0x98,0x97,0x98,
+ 0x95,0x95,0x94,0x01,0x01,0x97,0x96,0x94,0x97,0x98,0x94,0x95,0x96,0x98,0x96,0x95,
+ 0x95,0x95,0x98,0x01,0x98,0x95,0x98,0x95,0x95,0x98,0x98,0x95,0x98,0x98,0x95,0x93,
+ 0x99,0x01,0x98,0x98,0x98,0x98,0x95,0x96,0x94,0x95,0x95,0x98,0x95,0x96,0x96,0x95,
+ 0x91,0x95,0x93,0x92,0x91,0x95,0x94,0x8E,0x95,0x98,0x93,0x93,0x95,0x92,0x95,0x93,
+ 0x92,0x96,0x98,0x94,0x96,0x01,0x96,0x95,0x98,0x98,0x93,0x96,0x95,0x98,0x95,0x95,
+ 0x01,0x98,0x01,0x95,0x98,0x96,0x98,0x98,0x92,0x95,0x98,0x96,0x01,0x98,0x95,0x95,
+ 0x01,0x96,0x95,0x98,0x98,0x96,0x95,0x01,0x01,0x96,0x98,0x96,0x96,0x96,0x96,0x94,
+ 0x95,0x95,0x93,0x95,0x95,0x95,0x93,0x98,0x94,0x92,0x95,0x98,0x97,0x94,0x98,0x96,
+ 0x98,0x95,0x96,0x98,0x95,0x98,0x98,0x98,0x98,0x98,0x99,0x95,0x95,0x98,0x95,0x97,
+ 0x01,0x98,0x98,0x98,0x95,0x96,0x95,0x95,0x94,0x94,0x94,0x95,0x94,0x96,0x96,0x94,
+ 0x96,0x94,0x98,0x95,0x98,0x01,0x98,0x94,0x01,0x96,0x96,0x98,0x96,0x98,0x95,0x92,
+ 0x96,0x96,0x01,0x95,0x98,0x98,0x96,0x01,0x01,0x94,0x94,0x93,0x93,0x96,0x95,0x8D,
+ 0x9B,0x99,0x98,0x98,0x95,0x96,0x94,0x99,0x96,0x95,0x95,0x97,0x96,0x98,0x01,0x94,
+ 0x94,0x95,0x96,0x01,0x96,0x93,0x95,0x92,0x01,0x93,0x94,0x96,0x94,0x92,0x95,0x94,
+ 0x95,0x94,0x95,0x95,0x01,0x93,0x01,0x95,0x95,0x01,0x98,0x98,0x92,0x98,0x93,0x93,
+ 0x95,0x93,0x95,0x93,0x93,0x8E,0x93,0x01,0x96,0x01,0x97,0x01,0x98,0x96,0x96,0x94,
+ 0x01,0x01,0x95,0x96,0x95,0x98,0x95,0x98,0x95,0x95,0x98,0x98,0x01,0x95,0x92,0x98,
+ 0x93,0x95,0x98,0x94,0x92,0x95,0x92,0x01,0x96,0x93,0x96,0x98,0x98,0x95,0x95,0x94,
+ 0x93,0x96,0x95,0x96,0x98,0x95,0x93,0x98,0x01,0x01,0x94,0x96,0x96,0x01,0x95,0x98,
+ 0x96,0x96,0x95,0x98,0x99,0x99,0x94,0x98,0x01,0x01,0x93,0x95,0x99,0x99,0x01,0x01,
+ 0x99,0x95,0x99,0x96,0x99,0x95,0x98,0x95,0x98,0x01,0x92,0x96,0x99,0x99,0x98,0x99,
+ 0x01,0x01,0x95,0x99,0x98,0x99,0x98,0x95,0x98,0x98,0x98,0x99,0x98,0x98,0x01,0x98,
+ 0x98,0x96,0x98,0x98,0x01,0x95,0x95,0x92,0x95,0x95,0x92,0x94,0x94,0x92,0x96,0x95,
+ 0x93,0x91,0x92,0x94,0x91,0x8E,0x8E,0x94,0x92,0x94,0x98,0x95,0x94,0x94,0x92,0x93,
+ 0x98,0x92,0x98,0x98,0x95,0x01,0x96,0x96,0x95,0x01,0x96,0x98,0x94,0x98,0x98,0x98,
+ 0x98,0x96,0x01,0x01,0x95,0x95,0x96,0x94,0x98,0x96,0x96,0x98,0x94,0x98,0x96,0x94,
+ 0x94,0x98,0x01,0x98,0x92,0x96,0x01,0x96,0x94,0x96,0x94,0x96,0x96,0x91,0x95,0x01,
+ 0x96,0x93,0x98,0x98,0x98,0x98,0x94,0x98,0x98,0x99,0x95,0x95,0x99,0x98,0x99,0x98,
+ 0x98,0x98,0x99,0x94,0x99,0x93,0x98,0x95,0x96,0x98,0x98,0x98,0x01,0x96,0x96,0x96,
+ 0x94,0x01,0x95,0x97,0x95,0x95,0x95,0x98,0x95,0x95,0x94,0x01,0x96,0x95,0x96,0x96,
+ 0x98,0x98,0x98,0x92,0x98,0x98,0x98,0x96,0x94,0x96,0x98,0x01,0x96,0x96,0x01,0x96,
+ 0x98,0x94,0x96,0x95,0x98,0x96,0x95,0x96,0x96,0x96,0x98,0x94,0x01,0x93,0x8E,0x93,
+ 0x98,0x98,0x95,0x98,0x01,0x97,0x95,0x96,0x98,0x98,0x95,0x98,0x94,0x96,0x95,0x93,
+ 0x95,0x95,0x96,0x94,0x94,0x96,0x96,0x98,0x95,0x01,0x94,0x01,0x97,0x94,0x97,0x01,
+ 0x96,0x98,0x98,0x93,0x95,0x8E,0x96,0x96,0x01,0x95,0x94,0x94,0x95,0x01,0x96,0x96,
+ 0x98,0x92,0x96,0x92,0x94,0x93,0x94,0x95,0x96,0x94,0x1C,0x1D,0x1D,0x1D,0x1D,0x1E,
+ 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,
+ 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,
+ 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,
+ 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,
+ 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x1F,0x1F,0x1F,0x1F,0x95,0x01,0x01,0x98,0x01,0x95,0x98,0x96,0x96,0x94,0x96,
+ 0x01,0x01,0x95,0x98,0x94,0x98,0x01,0x98,0x98,0x01,0x96,0x96,0x96,0x98,0x92,0x01,
+ 0x95,0x94,0x95,0x98,0x93,0x95,0x94,0x95,0x98,0x95,0x93,0x92,0x95,0x95,0x01,0x96,
+ 0x96,0x94,0x94,0x95,0x96,0x94,0x94,0x98,0x95,0x95,0x8E,0x8E,0x95,0x92,0x8E,0x98,
+ 0x98,0x96,0x98,0x96,0x98,0x98,0x93,0x98,0x01,0x95,0x96,0x98,0x93,0x94,0x94,0x95,
+ 0x98,0x95,0x96,0x96,0x95,0x96,0x98,0x94,0x95,0x95,0x95,0x95,0x95,0x93,0x93,0x94,
+ 0x93,0x94,0x92,0x98,0x98,0x96,0x96,0x98,0x95,0x94,0x96,0x94,0x98,0x95,0x94,0x95,
+ 0x99,0x98,0x99,0x96,0x99,0x98,0x01,0x98,0x95,0x95,0x1D,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xAF,0x9D,0x9A,0x96,0x98,0x01,0x96,0x95,0x96,0x96,0x91,0x96,
+ 0x98,0x98,0x98,0x95,0x95,0x95,0x91,0x01,0x96,0x01,0x92,0x92,0x95,0x93,0x95,0x8E,
+ 0x8E,0x8E,0x93,0x95,0x93,0x94,0x96,0x94,0x95,0x92,0x8E,0x94,0x96,0x98,0x93,0x95,
+ 0x95,0x95,0x8E,0x8E,0x8E,0x95,0x92,0x93,0x8E,0x92,0x93,0x95,0x92,0x96,0x94,0x95,
+ 0x94,0x98,0x01,0x98,0x96,0x98,0x96,0x96,0x96,0x94,0x96,0x98,0x95,0x92,0x95,0x95,
+ 0x98,0x98,0x94,0x98,0x98,0x94,0x93,0x95,0x01,0x92,0x92,0x95,0x94,0x96,0x96,0x94,
+ 0x95,0x92,0x98,0x98,0x01,0x95,0x95,0x98,0x92,0x95,0x96,0x95,0x01,0x96,0x96,0x96,
+ 0x94,0x96,0x98,0x98,0x96,0x95,0x98,0x98,0x95,0x98,0x1D,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xAF,0x9D,0x9B,0x96,0x98,0x94,0x93,0x93,0x95,0x01,0x96,0x95,
+ 0x96,0x96,0x8E,0x95,0x92,0x8E,0x95,0x92,0x92,0x92,0x8E,0x92,0x8E,0x95,0x93,0x92,
+ 0x95,0x8E,0x8E,0x95,0x94,0x94,0x92,0x92,0x94,0x95,0x8E,0x96,0x8E,0x92,0x92,0x01,
+ 0x93,0x96,0x95,0x95,0x8E,0x8E,0x92,0x96,0x94,0x91,0x92,0x95,0x98,0x92,0x98,0x94,
+ 0x98,0x96,0x98,0x94,0x96,0x95,0x95,0x94,0x95,0x96,0x98,0x01,0x98,0x95,0x98,0x01,
+ 0x01,0x98,0x95,0x96,0x01,0x96,0x01,0x92,0x98,0x92,0x95,0x95,0x92,0x95,0x96,0x95,
+ 0x95,0x98,0x98,0x96,0x92,0x95,0x95,0x95,0x98,0x95,0x01,0x98,0x96,0x98,0x94,0x01,
+ 0x96,0x96,0x01,0x93,0x96,0x94,0x98,0x96,0x96,0x93,0x1D,0x00,0x00,0xA7,0x08,0x1F,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA7,
+ 0x08,0x1F,0x00,0x00,0xAF,0x9D,0x01,0x93,0x93,0x98,0x96,0x94,0x01,0x96,0x95,0x95,
+ 0x8E,0x93,0x94,0x8E,0x93,0x95,0x92,0x92,0x96,0x93,0x95,0x98,0x96,0x98,0x94,0x95,
+ 0x94,0x93,0x94,0x01,0x95,0x94,0x98,0x98,0x91,0x94,0x98,0x96,0x98,0x01,0x98,0x01,
+ 0x98,0x95,0x95,0x96,0x01,0x98,0x94,0x95,0x94,0x95,0x96,0x98,0x01,0x9A,0x9A,0x98,
+ 0x98,0x98,0x95,0x95,0x92,0x94,0x93,0x93,0x93,0x93,0x01,0x95,0x95,0x97,0x96,0x01,
+ 0x98,0x96,0x95,0x93,0x92,0x01,0x95,0x96,0x96,0x95,0x94,0x98,0x94,0x98,0x98,0x95,
+ 0x96,0x01,0x95,0x95,0x95,0x96,0x98,0x98,0x98,0x96,0x99,0x95,0x98,0x94,0x96,0x95,
+ 0x95,0x92,0x98,0x95,0x96,0x93,0x95,0x96,0x98,0x94,0x1D,0x00,0x00,0x08,0x1D,0x1E,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x10,0x10,0x19,0x1F,0x00,0x00,0x08,0x19,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x07,0x08,0x00,0x00,0x00,
+ 0x00,0x12,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,
+ 0x1D,0x1E,0x00,0x00,0xAF,0x9B,0x9A,0x94,0x96,0x91,0x93,0x93,0x95,0x98,0x93,0x8E,
+ 0x92,0x95,0x92,0x98,0x93,0x95,0x94,0x92,0x95,0x01,0x94,0x98,0x01,0x01,0x96,0x01,
+ 0x95,0x94,0x96,0x01,0x94,0x92,0x01,0x95,0x94,0x95,0x95,0x99,0x99,0x98,0x98,0x98,
+ 0x99,0x96,0x98,0x95,0x96,0x95,0x96,0x95,0x01,0x98,0x98,0x9A,0x01,0x9A,0x98,0x98,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x00,0x1F,0x1E,0xE9,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x07,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x1E,0x11,0x19,0x19,0x1A,0x1A,0x1A,0x19,0x19,0x1A,0x13,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x18,0x17,0x11,0x08,0x00,0x00,
+ 0x12,0x1A,0xEB,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,
+ 0x1E,0xE9,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x1D,0x14,0x18,0x1C,0x1C,0x1C,0x00,0x00,0x14,0x1E,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x11,0x18,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x13,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x19,0x1C,0x08,0x17,0x11,0x12,0x12,
+ 0xEB,0x08,0x1C,0x1C,0x1D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x1D,0x14,0x15,0x1B,0x1C,0x1C,0x1B,0x1B,0x1C,0x1C,0x1C,0x1E,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x10,0x19,0x19,0x19,0x19,0x1D,0x1D,0x1A,0x17,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x18,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,
+ 0x1C,0x1C,0x1C,0x1C,0x1C,0x08,0x1A,0x17,0x07,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x00,0x00,0x00,0x00,
+ 0x1D,0x13,0x15,0x1A,0x1A,0x1A,0x1A,0x19,0x1A,0x1A,0x1A,0x1A,0x1B,0x1E,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x10,0x18,0x18,0x18,0x18,0x1F,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x18,0x1A,0x1A,0x1A,0x1B,0x1B,0x1B,0x1B,0x1B,
+ 0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1A,0x19,0x13,0x13,0x1E,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x1E,0x1D,0xEC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x12,
+ 0x15,0x1A,0x19,0x19,0x19,0x19,0x1A,0x1B,0x16,0x18,0x19,0x19,0x18,0x1E,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x10,0x17,0x17,0x17,0x17,0x1F,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x12,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x1A,0x1A,0x1A,
+ 0x1A,0x1A,0x19,0x19,0x1A,0x1A,0x1A,0x1A,0x19,0x18,0x16,0x13,0x1E,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEC,0x1D,0x1E,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,
+ 0x1D,0xEC,0x1D,0x1E,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x12,
+ 0x19,0x18,0x18,0x18,0x18,0x18,0x1C,0x1E,0x1C,0x16,0x19,0x18,0x1E,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x10,0x16,0x16,0x16,0x16,0x1F,0x00,0x1F,0x1F,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x12,0x16,0x17,0x17,0x17,0x17,0x08,0x13,0x17,0x17,0x18,
+ 0x18,0x18,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x17,0x17,0x17,0x14,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x0F,0x10,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1E,0x1D,0xEC,0x1D,0x1E,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x1D,0xEC,0x1D,
+ 0x1E,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0xEE,0xEC,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x12,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x1F,0x1F,0x1F,0x15,0x18,0x1E,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x10,0x16,0x16,0x16,0x16,0x1F,0x1F,0x07,0x13,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x12,0x07,0x16,0x16,0x16,0x16,0x08,0x1F,0x16,0x16,0x16,0x16,
+ 0x16,0x16,0x1E,0x08,0x18,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x07,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x19,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x12,
+ 0x12,0x12,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0xEC,0xEE,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x1F,0x1F,0x1E,0x1D,
+ 0xEC,0x1D,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x1D,0xEC,0x1D,0x1E,0x1F,0x1F,
+ 0x1F,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0xEE,0xEC,0x1E,0x1F,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x12,
+ 0x16,0x16,0x16,0x16,0x16,0x16,0x1C,0x00,0x00,0x1E,0x1E,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x10,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x13,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x12,0x14,0x07,0x07,0x07,0x08,0x1F,0x00,0x16,0x07,0x07,0x07,
+ 0x07,0x07,0x1E,0x00,0x08,0x18,0x07,0x07,0x07,0x07,0x07,0x07,0x18,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x10,0x17,0x17,0x1F,0x00,0x00,0x00,0x00,0x00,0x07,0x16,
+ 0x16,0x19,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x1F,0x1E,0xEC,0xEE,0x00,0x00,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x1E,0x1D,0xEC,0x1D,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x1D,0xEC,0x1D,0x1E,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x1F,0x1F,0x1F,0x1F,0x00,0xEE,0xEC,0x1E,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x13,
+ 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x0F,0x0F,0x0F,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x0F,
+ 0x0F,0x0F,0x00,0x00,0x00,0x00,0x0F,0x12,0x12,0x12,0x12,0x11,0x0F,0x17,0x08,0x00,
+ 0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x0F,0x1B,0x1F,0x00,0x1F,0x10,0x0F,0x0F,0x0F,
+ 0xEB,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x11,0x0F,0x07,
+ 0x1F,0x00,0x10,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x1E,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x12,0x14,0x14,0x14,0x1A,0x1F,0x00,0x00,0x16,0x14,0x14,0x14,
+ 0x14,0x14,0x1E,0x00,0x00,0x08,0x18,0x14,0x14,0x14,0x14,0x14,0x1A,0x00,0x00,0x00,
+ 0x00,0x10,0x10,0x17,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x0F,0x11,0x1E,0x1F,
+ 0x00,0x0F,0x0F,0x00,0x10,0x14,0x14,0x14,0x0F,0x0F,0x11,0x13,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x0F,0x18,0x1D,0x00,0x00,0x00,0x19,0x07,0x08,0x00,0x00,
+ 0x00,0x00,0x0F,0x11,0x13,0x1A,0x00,0x00,0x1F,0x0F,0x0F,0x11,0x1F,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x1F,0x1F,0x1F,0x1E,0xEC,0xEE,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x1F,0x1F,0x1F,0x1E,0x1D,0xEC,0x1D,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x1E,0x1D,0xEC,0x1D,0x1E,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0xED,0xED,0xED,0xED,
+ 0x1E,0xE9,0x1D,0xED,0xED,0xED,0xED,0xED,0xED,0xED,0x1E,0x00,0x00,0x00,0x00,0x14,
+ 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x0F,0x16,0x16,0x16,0x10,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x15,0x16,
+ 0x16,0x15,0x0F,0x00,0x00,0x00,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x10,
+ 0x1E,0x00,0x00,0x10,0x18,0x18,0x18,0x18,0x17,0x1F,0x1F,0x11,0x18,0x18,0x18,0x18,
+ 0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x13,0x19,0x19,0x19,0x19,0x19,0x17,
+ 0x0F,0x1F,0x08,0x08,0x08,0x10,0x13,0x13,0x13,0x13,0x17,0x17,0x1E,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x12,0x13,0x13,0x08,0x00,0x00,0x00,0x16,0x13,0x13,0x13,
+ 0x13,0x13,0x1E,0x00,0x00,0x00,0x08,0x13,0x13,0x13,0x13,0x13,0x08,0x00,0x00,0x00,
+ 0x10,0x18,0x18,0x18,0x18,0x1E,0x00,0x00,0x00,0x1F,0x0F,0x11,0x07,0x07,0x07,0x12,
+ 0x0F,0x07,0x07,0x10,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x0F,0x11,0x11,
+ 0x11,0x11,0x08,0x00,0x0F,0x14,0x14,0x19,0x1D,0x00,0x18,0x07,0x12,0x0F,0x07,0x00,
+ 0x00,0x0F,0x07,0x07,0x07,0x07,0x19,0x1F,0x07,0x07,0x07,0x07,0x07,0x1F,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xAF,0xED,0xED,0xED,0xED,0xED,0xED,0xED,0x1D,0xE9,0x1E,0xED,
+ 0xED,0xED,0xED,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1E,0x1D,0xEC,0x1D,0x1E,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x1E,0x1D,0xEC,0x1D,0x1E,0x1F,0x1F,0x1F,0x1F,0x1E,0x1E,0x1E,0x1E,0xED,0xED,0xEE,
+ 0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,
+ 0xED,0xE9,0x1C,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1E,0x00,0x00,0x00,0x00,0xEA,
+ 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x1B,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x0F,0x15,0x15,0x14,0x15,0x13,0x10,0x1C,0x00,0x00,0x00,0x00,0x10,0x14,0x14,0x13,
+ 0x13,0x14,0x14,0x0F,0x00,0x00,0x1C,0x18,0x19,0x19,0x19,0x17,0x17,0x17,0x17,0x18,
+ 0x19,0x00,0x10,0x10,0x0F,0x16,0x16,0x16,0x16,0x11,0x11,0x17,0x16,0x16,0x16,0x16,
+ 0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x13,0x18,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x17,0x14,0x1F,0x00,0x00,0x10,0x12,0x12,0x12,0x12,0x1E,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x07,0x19,0x00,0x00,0x00,0x16,0x12,0x12,0x12,
+ 0x12,0x12,0x1E,0x00,0x00,0x00,0x1C,0x12,0x12,0x12,0x12,0x12,0x1C,0x00,0x00,0x10,
+ 0x17,0x16,0x15,0x15,0x16,0x17,0x1E,0x00,0x00,0x0F,0x07,0x14,0x14,0x14,0x14,0x14,
+ 0x14,0x14,0x10,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x1F,0x13,0x13,0x14,0x14,
+ 0x14,0x14,0x12,0x0F,0x14,0x14,0x14,0x14,0x08,0x18,0x14,0x14,0x14,0x14,0x14,0x1A,
+ 0x0F,0x14,0x14,0x14,0x14,0x14,0x0F,0x0F,0x07,0x14,0x14,0x14,0x30,0x0F,0x1F,0x00,
+ 0x00,0x00,0x00,0x00,0xAF,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1C,0xE9,0xED,0x1D,
+ 0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0xEE,
+ 0xED,0xED,0x1E,0x1E,0x1E,0x1E,0x1F,0x1F,0x1F,0x1F,0x1E,0x1D,0xEC,0x1D,0x1E,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1E,0x1D,
+ 0xEC,0x1E,0x1F,0x1F,0x1F,0x1F,0x1F,0x1E,0x1E,0x1E,0xED,0xED,0xEE,0xEE,0xEE,0xEE,
+ 0xEE,0xEE,0xEE,0xEE,0xED,0xED,0xED,0xED,0xED,0xED,0xED,0xED,0xED,0xED,0xED,0xED,
+ 0x1E,0xE9,0x1D,0xED,0xED,0xED,0xED,0xED,0xED,0xED,0x1E,0x00,0x00,0x00,0x00,0x00,
+ 0x1A,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x1A,0x00,0x00,0x00,0x00,0x0F,
+ 0x12,0x12,0x12,0x13,0x13,0x12,0x13,0x13,0x1C,0x00,0x00,0x31,0x30,0x12,0x13,0x1D,
+ 0x13,0x13,0x12,0x12,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x16,0x14,0x14,0x14,
+ 0xEB,0x00,0x00,0x00,0x0F,0x13,0x13,0x13,0x13,0x14,0x14,0x15,0x14,0x14,0x15,0x13,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x13,0x14,0x14,0x13,0x1F,0x0F,0x14,0x14,
+ 0x14,0x13,0x1F,0x00,0x00,0x10,0x10,0x11,0x11,0x11,0x1E,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x19,0x00,0x00,0x00,0x16,0x11,0x10,0x10,
+ 0x10,0x10,0x1E,0x00,0x00,0x00,0x1E,0x11,0x10,0x10,0x10,0x10,0x1E,0x00,0x10,0x16,
+ 0x15,0x13,0x13,0x13,0x13,0x15,0x16,0x1E,0x00,0x0F,0x13,0x13,0x13,0x13,0x14,0x13,
+ 0x13,0x1E,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x1F,0x1F,0x1F,0x00,0x0F,0x13,0x13,
+ 0x13,0x13,0x1E,0x0F,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x1A,0x00,
+ 0x00,0x0F,0x13,0x13,0x30,0x30,0x1F,0x00,0x0F,0x30,0x30,0x30,0x30,0x1F,0x1F,0x00,
+ 0x00,0x00,0x00,0x00,0xAF,0xED,0xED,0xED,0xED,0xED,0xED,0xED,0x1D,0xE9,0x1E,0xED,
+ 0xED,0xED,0xED,0xED,0xED,0xED,0xED,0xED,0xED,0xED,0xED,0xEE,0xEE,0xEE,0xEE,0xEE,
+ 0xEE,0xEE,0xEE,0xED,0xED,0x1E,0x1E,0x1E,0x1F,0x1F,0x1F,0x1F,0x1F,0x1E,0xEC,0x1D,
+ 0x1E,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,
+ 0x1D,0x1C,0x1C,0xEC,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xED,0x1E,0x1E,0x1E,
+ 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,
+ 0x1E,0xE9,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x1A,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x1A,0x00,0x00,0x00,0x0F,
+ 0x32,0x32,0x32,0x18,0x1C,0x12,0x32,0x32,0x32,0x1C,0x00,0x31,0x31,0x31,0x31,0x1D,
+ 0x1C,0x12,0x31,0x31,0x12,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x13,0x13,0x13,0x13,
+ 0x08,0x00,0x00,0x00,0x0F,0x11,0x11,0x11,0x11,0x14,0x00,0x00,0xEB,0x17,0x15,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x12,0x10,0x10,0x12,0x1F,0x0F,0x12,0x10,
+ 0x10,0x12,0x1F,0x00,0x00,0x10,0x11,0x11,0x11,0x11,0x1E,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x16,0x10,0x10,0x10,
+ 0x10,0x10,0x1E,0x00,0x00,0x00,0x1E,0x10,0x10,0x10,0x10,0x10,0x1E,0x00,0x10,0x12,
+ 0x12,0x12,0x1E,0x18,0x12,0x12,0x12,0x12,0x00,0x0F,0x12,0x12,0x12,0x12,0x1E,0x1E,
+ 0x1E,0x2F,0x2F,0x2F,0x10,0x30,0x30,0x30,0x30,0x1F,0x00,0x00,0x00,0x0F,0x30,0x30,
+ 0x30,0x30,0x1E,0x00,0x0F,0x12,0x31,0x31,0x31,0x12,0x31,0x31,0x31,0x12,0x1F,0x00,
+ 0x00,0x0F,0x31,0x31,0x31,0x31,0x1F,0x00,0x0F,0x31,0x31,0x31,0x31,0x1F,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xAF,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0xE9,0x1E,0x1E,
+ 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,
+ 0x1E,0x1E,0xED,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEC,0x1C,0x1C,0x1D,0x1F,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x1F,0x1D,0x1C,0x1C,0xEC,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,
+ 0x1D,0x1D,0x1D,0x1D,0x1D,0xED,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0xE9,0xE9,0xE9,0xE9,
+ 0xE9,0xE9,0xE9,0xE9,0xE9,0xE9,0xE9,0xE9,0xE9,0xE9,0x1E,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x1A,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x32,0x32,0x1A,0x00,0x00,0x0F,
+ 0x33,0x33,0x33,0x18,0x00,0x1C,0x33,0x33,0x33,0x18,0x00,0x31,0x32,0x32,0x32,0x1D,
+ 0x00,0x1C,0x32,0x32,0x32,0x00,0x00,0x0F,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,
+ 0x08,0x00,0x00,0x00,0x0F,0x31,0x31,0x31,0x31,0x16,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x11,0x0F,0x0F,0x11,0x1F,0x0F,0x0F,0x0F,
+ 0x0F,0x11,0x1F,0x00,0x00,0x10,0x31,0x30,0x30,0x31,0x1E,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x30,0x30,0x30,
+ 0x30,0x30,0x1E,0x00,0x00,0x00,0x1F,0x30,0x30,0x30,0x30,0x30,0x1E,0x00,0x10,0x31,
+ 0x31,0x31,0x1E,0x00,0x0F,0x31,0x31,0x31,0x00,0x0F,0x31,0x31,0x31,0x31,0x1E,0x00,
+ 0x00,0x00,0x00,0x2F,0x10,0x31,0x31,0x31,0x31,0x1F,0x00,0x00,0x00,0x0F,0x31,0x31,
+ 0x31,0x31,0x1E,0x00,0x0F,0x32,0x32,0x32,0x08,0x08,0x32,0x32,0x32,0x32,0x1F,0x00,
+ 0x00,0x0F,0x32,0x32,0x32,0x32,0x1F,0x00,0x0F,0x32,0x32,0x32,0x32,0x1F,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xAF,0xE9,0xE9,0xE9,0xE9,0xE9,0xE9,0xE9,0xE9,0xE9,0xE9,0xE9,
+ 0xE9,0xE9,0xE9,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0xED,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,
+ 0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0xEC,0x1C,0x1C,0x1D,0x1F,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x1F,0x1D,0x1C,0x1C,0xEC,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,
+ 0x1D,0x1D,0x1D,0x1D,0x1D,0x00,0xEE,0x1C,0xEC,0x1D,0x1D,0x1D,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x1A,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x11,0x00,0x00,0x0F,
+ 0x34,0x34,0x34,0x18,0x00,0x00,0x32,0x34,0x34,0x18,0x00,0x31,0x33,0x33,0x33,0x1D,
+ 0x00,0x00,0x17,0x33,0x1A,0x00,0x0F,0x33,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,
+ 0xEC,0x00,0x00,0x00,0x0F,0x32,0x32,0x32,0x32,0x19,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x32,0x31,0x31,0x32,0x1F,0x0F,0x31,0x31,
+ 0x31,0x31,0x1F,0x00,0x00,0x10,0x31,0x31,0x31,0x31,0x1E,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x31,0x31,0x31,
+ 0x31,0x31,0x1E,0x00,0x00,0x00,0x1E,0x31,0x31,0x31,0x31,0x31,0x1E,0x00,0x10,0x32,
+ 0x32,0x32,0x1E,0x00,0x0F,0x32,0x32,0x1E,0x00,0x0F,0x32,0x32,0x32,0x32,0x32,0x32,
+ 0x32,0x1E,0x00,0x2F,0x10,0x32,0x32,0x32,0x32,0x1F,0x00,0x00,0x00,0x0F,0x33,0x33,
+ 0x33,0x33,0x1E,0x00,0x0F,0x33,0x33,0x33,0x08,0x00,0x32,0x33,0x33,0x33,0x1F,0x00,
+ 0x00,0x0F,0x33,0x33,0x33,0x33,0x1F,0x00,0x0F,0x33,0x33,0x33,0x33,0x1F,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x1D,0x1D,0x1D,0xEC,0x1C,0xEE,0x00,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,
+ 0x1D,0x1D,0x1D,0x1D,0x1D,0xEC,0x1C,0x1C,0x1D,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1D,0x1C,0x1C,0xEC,0x1D,0x1D,0x1D,
+ 0x1D,0x1D,0x1D,0x1D,0x1D,0x00,0x00,0x00,0xEE,0x1C,0xEC,0x1D,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x1D,0x2D,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x00,0x00,0x35,
+ 0x00,0x00,0x2F,0x04,0x00,0x00,0x34,0x00,0x2F,0x2A,0x00,0x25,0x2E,0x2F,0x2E,0x1D,
+ 0x00,0x17,0x2E,0x2E,0x00,0x00,0x34,0x00,0x00,0x00,0x2F,0x2F,0x2F,0x00,0x00,0x2F,
+ 0x2E,0x00,0x00,0x00,0x33,0x2F,0x00,0x00,0x2F,0x2E,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x2B,0x2B,0x2B,0x2B,0x2E,0x33,0x2B,0x2B,
+ 0x2B,0x2B,0x2E,0x00,0x00,0x33,0x2B,0x2B,0x2B,0x2B,0x2F,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x29,0x29,0x29,
+ 0x29,0x29,0x1E,0x00,0x00,0x00,0x1C,0x2B,0x2C,0x2D,0x2E,0x2E,0x2F,0x00,0x33,0x2F,
+ 0x2F,0x2F,0x1E,0x00,0x0F,0x2F,0x2F,0x00,0x00,0x33,0x27,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x35,0x2F,0x2F,0x2F,0x2F,0x2F,0x00,0x00,0x00,0x32,0x2F,0x2F,
+ 0x00,0x00,0x2F,0x00,0x32,0x00,0x00,0x00,0x2F,0x00,0x32,0x00,0x00,0x00,0x2F,0x00,
+ 0x00,0x32,0x00,0x00,0x00,0x00,0xED,0x00,0x32,0x00,0x00,0x00,0x00,0x2F,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x1D,0xEC,0x1C,0xEE,0x00,0x00,0x00,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,
+ 0x1D,0x1D,0xEC,0x1C,0x1C,0x1D,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1D,0x1C,0x1C,0xEC,
+ 0x1D,0x1D,0x1D,0x1D,0x1D,0x00,0x00,0x00,0x00,0x00,0xEE,0x1C,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x1D,0x2A,0x2F,0x2D,0x2D,0x2D,0x2F,0x34,0x00,0x00,0x34,
+ 0x2B,0x2B,0x2B,0x04,0x00,0x00,0x34,0x2B,0x2B,0x2A,0x00,0x25,0x2B,0x2B,0x2B,0x2F,
+ 0x17,0x2A,0x2E,0x00,0x00,0x00,0x34,0x2B,0x2B,0x2B,0x2F,0x00,0x23,0x2B,0x2B,0x2B,
+ 0x2E,0x00,0x00,0x00,0x33,0x27,0x27,0x27,0x27,0x2E,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x29,0x29,0x29,0x29,0x2E,0x33,0x29,0x29,
+ 0x29,0x29,0x2E,0x00,0x00,0x33,0x28,0x28,0x28,0x28,0x2F,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x08,0x1E,0x33,0x27,0x28,0x28,
+ 0x28,0x27,0x1E,0x00,0x00,0x1C,0x2B,0x2B,0x2C,0x2C,0x2C,0x2B,0x2F,0x00,0x33,0x2B,
+ 0x2E,0x2E,0x2B,0x0F,0x2A,0x2F,0x00,0x00,0x00,0x00,0x21,0x27,0x2D,0x2D,0x2D,0x2D,
+ 0x2D,0x2C,0x2F,0x2F,0x35,0x2D,0x2F,0x2F,0x2D,0x2F,0x00,0x00,0x00,0x32,0x2D,0x2C,
+ 0x2C,0x2D,0x2F,0x00,0x32,0x2D,0x2D,0x2D,0x2F,0x00,0x32,0x2D,0x2D,0x2F,0x2F,0x00,
+ 0x00,0x32,0x2E,0x2E,0x2E,0x2E,0x1E,0x1E,0x34,0x2E,0x2E,0x2E,0x2E,0x2F,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x1C,0xEE,0x00,0x00,0x00,0x00,0x00,0x1D,0x1D,0x1D,0x1D,0x1D,0xEC,
+ 0x1C,0x1C,0x1D,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1D,
+ 0x1C,0x1C,0xEC,0x1D,0x1D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x1D,0x33,0x31,0x32,0x34,0x28,0x2A,0x2A,0x2A,0x2A,0x34,0x00,0x00,0x34,
+ 0x04,0x04,0x04,0x04,0x2F,0x34,0x22,0x26,0x27,0x27,0x00,0x34,0x25,0x25,0x25,0x25,
+ 0x28,0x2E,0x00,0x00,0x00,0x00,0x34,0x29,0x29,0x29,0x2F,0x00,0x34,0x29,0x29,0x29,
+ 0x2E,0x00,0x00,0x00,0x33,0x22,0x22,0x22,0x22,0x2E,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x2E,0x33,0x24,0x24,
+ 0x24,0x24,0x2E,0x00,0x00,0x33,0x25,0x25,0x25,0x25,0x2F,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x22,0x08,0x33,0x24,0x26,0x26,
+ 0x26,0x24,0x1E,0x00,0x1C,0x27,0x27,0x29,0x29,0x29,0x29,0x27,0x2F,0x00,0x33,0x28,
+ 0x28,0x28,0x28,0x28,0x2F,0x00,0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x35,0x28,0x28,
+ 0x28,0x28,0x2F,0x2F,0x35,0x28,0x28,0x28,0x28,0x2F,0x00,0x00,0x00,0x32,0x28,0x28,
+ 0x28,0x28,0x2F,0x00,0x32,0x28,0x28,0x28,0x2F,0x00,0x32,0x28,0x28,0x28,0x2F,0x00,
+ 0x00,0x32,0x2A,0x2B,0x2B,0x2A,0x23,0x34,0x36,0x2A,0x2B,0x2B,0x2A,0x2F,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x1D,0xEC,0x1C,0x1C,0x1D,
+ 0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x1F,0x1D,0x1C,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x31,0x33,0x36,0x37,0x37,0x25,0x25,0x27,0x27,0x27,0x27,0x35,0x00,0x00,0x34,
+ 0x24,0x24,0x24,0x36,0x34,0x36,0x24,0x24,0x24,0x04,0x00,0x34,0x25,0x23,0x21,0x37,
+ 0x2E,0x00,0x00,0x00,0x00,0x00,0x34,0x25,0x25,0x25,0x2F,0x00,0x32,0x25,0x25,0x25,
+ 0x2E,0x00,0x00,0x00,0x32,0x36,0x36,0x36,0x36,0x2E,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x37,0x37,0x37,0x37,0x2E,0x33,0x37,0x37,
+ 0x37,0x37,0x2E,0x00,0x00,0x33,0x22,0x22,0x22,0x22,0x2F,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x36,0x08,0x33,0x37,0x23,0x23,
+ 0x21,0x36,0x1E,0x1C,0x36,0x21,0x23,0x23,0x23,0x23,0x21,0x36,0x2F,0x00,0x33,0x25,
+ 0x25,0x25,0x25,0x2F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x33,0x35,0x25,0x25,
+ 0x25,0x25,0x2F,0x2F,0x35,0x25,0x25,0x25,0x25,0x2F,0x00,0x00,0x00,0x32,0x25,0x25,
+ 0x25,0x25,0x2F,0x00,0x32,0x25,0x25,0x25,0x2F,0x00,0x32,0x25,0x25,0x25,0x2F,0x00,
+ 0x00,0x32,0x25,0x25,0x27,0x27,0x25,0x36,0x23,0x25,0x27,0x27,0x25,0x2F,0x2F,0x00,
+ 0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1D,0x1F,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,
+ 0x33,0x34,0x35,0x36,0x36,0x21,0x21,0x21,0x23,0x23,0x23,0x21,0x37,0x00,0x00,0x34,
+ 0x21,0x21,0x21,0x36,0x36,0x22,0x22,0x22,0x24,0x2E,0x00,0x34,0x23,0x21,0x21,0x21,
+ 0x2E,0x2E,0x2E,0x2E,0x2E,0x00,0x34,0x23,0x23,0x23,0x2F,0x1F,0x32,0x23,0x23,0x23,
+ 0x2E,0x00,0x00,0x2E,0x34,0x35,0x35,0x35,0x35,0x37,0x2C,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x36,0x36,0x36,0x36,0x2E,0x24,0x36,0x36,
+ 0x36,0x36,0x2E,0x00,0x00,0x33,0x35,0x36,0x36,0x35,0x2F,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x35,0x35,0x35,0x37,0x21,0x21,
+ 0x36,0x35,0x1C,0x35,0x35,0x21,0x21,0x21,0x37,0x37,0x34,0x2F,0x00,0x00,0x33,0x22,
+ 0x22,0x22,0x22,0x2F,0x2F,0x2F,0x2F,0x2F,0x00,0x00,0x33,0x36,0x23,0x23,0x23,0x23,
+ 0x23,0x23,0x2F,0x2F,0x35,0x23,0x23,0x23,0x23,0x2F,0x2F,0x00,0x00,0x32,0x23,0x23,
+ 0x23,0x23,0x2F,0x00,0x32,0x23,0x23,0x23,0x2F,0x00,0x32,0x23,0x23,0x23,0x2F,0x00,
+ 0x00,0x32,0x24,0x24,0x24,0x25,0x25,0x24,0x24,0x24,0x25,0x24,0x24,0x28,0x2F,0x00,
+ 0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,
+ 0x31,0x34,0x35,0x35,0x35,0x35,0x36,0x36,0x21,0x21,0x24,0x28,0x2D,0x00,0x00,0x33,
+ 0x37,0x37,0x36,0x36,0x36,0x36,0x36,0x28,0x2D,0x00,0x00,0x34,0x35,0x36,0x36,0x36,
+ 0x35,0x35,0x34,0x34,0x2E,0x00,0x34,0x36,0x36,0x36,0x33,0x32,0x33,0x36,0x36,0x36,
+ 0x2E,0x2E,0x2E,0x2E,0x33,0x35,0x35,0x35,0x35,0x34,0x2E,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
+ 0x35,0x2E,0x00,0x00,0x00,0x33,0x34,0x35,0x35,0x34,0x2F,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x34,0x34,0x35,0x35,0x37,0x37,
+ 0x36,0x34,0x34,0x35,0x37,0x37,0x37,0x37,0x35,0x34,0x2F,0x00,0x00,0x00,0x33,0x34,
+ 0x35,0x35,0x35,0x35,0x35,0x35,0x34,0x2F,0x00,0x33,0x35,0x35,0x35,0x35,0x35,0x35,
+ 0x35,0x28,0x2F,0x2F,0x35,0x35,0x35,0x35,0x35,0x35,0x2F,0x00,0x32,0x35,0x35,0x35,
+ 0x35,0x35,0x35,0x2F,0x32,0x35,0x35,0x35,0x2F,0x00,0x32,0x35,0x35,0x35,0x2F,0x2F,
+ 0x00,0x2A,0x36,0x36,0x36,0x36,0x36,0x35,0x2F,0x35,0x36,0x36,0x36,0x35,0x2F,0x00,
+ 0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,
+ 0x31,0x34,0x34,0x34,0x34,0x34,0x34,0x0C,0x36,0x27,0x2B,0x2F,0x00,0x00,0x00,0x33,
+ 0x35,0x35,0x35,0x34,0x2E,0x2E,0x2E,0x2E,0x00,0x00,0x00,0x2B,0x22,0x34,0x33,0x33,
+ 0x33,0x33,0x33,0x34,0x2E,0x00,0x21,0x35,0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x35,
+ 0x35,0x35,0x2E,0x00,0x2E,0x33,0x34,0x34,0x34,0x28,0x2E,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x0C,
+ 0x2E,0x00,0x33,0x33,0x33,0x33,0x34,0x35,0x35,0x34,0x2F,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x34,0x33,0x34,0x34,0x34,0x35,
+ 0x35,0x35,0x35,0x35,0x35,0x34,0x33,0x33,0x34,0x2F,0x00,0x00,0x00,0x00,0x2F,0x33,
+ 0x32,0x31,0x31,0x31,0x32,0x33,0x34,0x2F,0x00,0x2F,0x28,0x34,0x33,0x33,0x33,0x34,
+ 0x28,0x2F,0x00,0x2F,0x28,0x33,0x33,0x33,0x33,0x28,0x2F,0x00,0x28,0x33,0x33,0x33,
+ 0x33,0x33,0x28,0x00,0x32,0x33,0x33,0x33,0x2F,0x2F,0x32,0x33,0x33,0x33,0x2F,0x00,
+ 0x00,0x00,0x2A,0x34,0x34,0x34,0x34,0x2F,0x00,0x31,0x34,0x34,0x34,0x33,0x2F,0x00,
+ 0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x01,0x99,0x99,0x9A,0x98,0x9B,0x9A,0x99,0x99,0x98,0x98,0x9B,0x97,0x98,0x9B,0x98,
+ 0x9A,0x9B,0x9A,0x99,0x98,0x98,0x98,0x9A,0x97,0x99,0x98,0x9B,0x98,0x9A,0x9B,0x9B,
+ 0x9A,0x9B,0x99,0x9A,0x9B,0x9B,0x9B,0x98,0x9B,0x99,0x98,0x9A,0x9A,0x9B,0x99,0x98,
+ 0x9A,0x99,0x99,0x99,0x9A,0x9A,0x9A,0x9B,0x9B,0x9A,0x1F,0x00,0x00,0x00,0x00,0x00,
+ 0x31,0x2F,0x2F,0x2F,0x28,0x33,0x34,0x04,0x2A,0x2E,0x00,0x00,0x00,0x00,0x2F,0x33,
+ 0x34,0x34,0x34,0x33,0x2D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2B,0x2B,0x2B,0x2B,
+ 0x2B,0x2B,0x2B,0x2B,0x2E,0x00,0x00,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,
+ 0x2E,0x2E,0x00,0x00,0x00,0x2E,0x2E,0x2E,0x2E,0x2E,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x27,0x29,0x2E,0x2E,0x2E,0x2E,0x2E,
+ 0x00,0x31,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x2F,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2F,0x24,0x34,0x32,0x32,0x32,0x32,
+ 0x32,0x32,0x32,0x32,0x32,0x33,0x34,0x28,0x2F,0x00,0x00,0x00,0x00,0x00,0x00,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2F,0x2F,0x2F,0x00,0x00,0x00,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x00,0x00,0x00,0x2F,0x2F,0x2F,0x2F,0x00,0x00,0x2F,0x2F,0x2F,0x2F,0x00,
+ 0x00,0x00,0x00,0x2F,0x2F,0x2F,0x2F,0x00,0x00,0x31,0x33,0x33,0x33,0x32,0x2F,0x00,
+ 0x00,0x00,0x00,0x00,0xAF,0x9B,0x9A,0x9B,0x98,0x9A,0x9A,0x9B,0x9B,0x9A,0x9B,0x9A,
+ 0x98,0x9A,0x9B,0x9B,0x9A,0x9B,0x9B,0x9A,0x9B,0x9B,0x98,0x9A,0x9B,0x99,0x98,0x98,
+ 0x99,0x9A,0x9B,0x99,0x9A,0x01,0x01,0x01,0x9A,0x01,0x9A,0x98,0x99,0x98,0x98,0x98,
+ 0x9B,0x9B,0x9A,0x9B,0x9A,0x9B,0x9A,0x9A,0x9A,0x9B,0x9B,0x9B,0x9B,0x99,0x9A,0x9A,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,
+ 0x2E,0x2F,0x2F,0x2F,0x2C,0x27,0x2D,0x2F,0x00,0x00,0x00,0x00,0x00,0x00,0x35,0x32,
+ 0x33,0x33,0x33,0x32,0x35,0x2F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x31,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x2F,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x33,0x33,0x32,0x32,0x2F,0x00,
+ 0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x98,0x97,0x99,0x9A,0x97,0x9B,0x9B,0x9A,0x99,0x98,0x9B,0x98,0x9A,0x99,0x98,0x99,
+ 0x99,0x99,0x9B,0x9A,0x98,0x9B,0x9A,0x9B,0x98,0x98,0x9A,0x9B,0x9A,0x9B,0x9B,0x98,
+ 0x98,0x9B,0x9A,0x98,0x9A,0x9A,0x9A,0x98,0x98,0x9B,0x98,0x9A,0x9A,0x98,0x98,0x99,
+ 0x9A,0x9A,0x98,0x98,0x98,0x9A,0x98,0x9B,0x99,0x9B,0x1F,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x2E,0x2F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x35,0x31,
+ 0x32,0x32,0x32,0x32,0x35,0x2F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x31,
+ 0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x2F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x30,0x32,0x33,0x33,0x32,0x34,0x2F,0x00,
+ 0x00,0x00,0x00,0x00,0xAF,0x9F,0x9B,0x9B,0x9A,0x9B,0x9B,0x9A,0x9B,0x9A,0x9A,0x9A,
+ 0x01,0x98,0x9A,0x01,0x01,0x98,0x01,0x9A,0x98,0x99,0x99,0x98,0x9B,0x9A,0x9A,0x9B,
+ 0x9A,0x9A,0x98,0x9A,0x98,0x9A,0x9A,0x9B,0x9B,0x9B,0x9A,0x9B,0x9A,0x9A,0x9A,0x98,
+ 0x9A,0x9A,0x9B,0x9B,0x9A,0x9B,0x9A,0x9B,0x9B,0x9A,0x9A,0x9B,0x9B,0x99,0x9A,0x99,
+ 0x93,0x98,0x93,0x94,0x92,0x93,0x96,0x91,0x94,0x92,0x92,0x95,0x94,0x93,0x92,0x95,
+ 0x95,0x94,0x96,0x92,0x01,0x94,0x95,0x98,0x95,0x95,0x98,0x98,0x98,0x94,0x01,0x92,
+ 0x96,0x94,0x94,0x98,0x96,0x95,0x96,0x96,0x98,0x98,0x98,0x94,0x98,0x95,0x95,0x98,
+ 0x95,0x94,0x96,0x94,0x92,0x94,0x95,0x93,0x95,0x93,0x1F,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2F,0x35,
+ 0x31,0x31,0x31,0x35,0x2F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2F,
+ 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x30,0x31,0x32,0x32,0x32,0x32,0x32,0x31,0x34,0x28,0x2F,0x00,
+ 0x00,0x00,0x00,0x00,0xAF,0x9D,0x9A,0x96,0x98,0x98,0x94,0x95,0x98,0x94,0x93,0x94,
+ 0x01,0x98,0x95,0x95,0x95,0x94,0x95,0x92,0x95,0x8E,0x8E,0x92,0x01,0x98,0x98,0x95,
+ 0x96,0x98,0x93,0x95,0x96,0x95,0x94,0x93,0x01,0x01,0x98,0x98,0x98,0x94,0x95,0x01,
+ 0x93,0x01,0x98,0x96,0x94,0x98,0x96,0x98,0x95,0x95,0x96,0x94,0x94,0x95,0x95,0x01,
+ 0x93,0x94,0x93,0x94,0x93,0x92,0x95,0x93,0x01,0x94,0x95,0x94,0x95,0x93,0x01,0x95,
+ 0x01,0x94,0x93,0x92,0x95,0x01,0x96,0x96,0x98,0x98,0x96,0x94,0x94,0x01,0x92,0x95,
+ 0x94,0x95,0x01,0x95,0x95,0x95,0x92,0x94,0x96,0x93,0x92,0x01,0x95,0x96,0x95,0x94,
+ 0x94,0x96,0x95,0x95,0x96,0x98,0x01,0x95,0x96,0x95,0x1F,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2F,
+ 0x2F,0x2F,0x2E,0x2F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x30,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x34,0x26,0x2F,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xAF,0x9D,0x9B,0x96,0x92,0x98,0x95,0x92,0x92,0x95,0x95,0x95,
+ 0x98,0x95,0x98,0x94,0x96,0x98,0x94,0x01,0x95,0x95,0x96,0x96,0x01,0x93,0x98,0x96,
+ 0x01,0x92,0x01,0x96,0x94,0x98,0x96,0x93,0x95,0x95,0x98,0x96,0x01,0x96,0x96,0x01,
+ 0x96,0x93,0x96,0x98,0x98,0x96,0x96,0x95,0x96,0x97,0x92,0x98,0x94,0x98,0x98,0x94,
+ 0x96,0x98,0x94,0x93,0x95,0x92,0x92,0x91,0x92,0x94,0x92,0x93,0x93,0x93,0x94,0x92,
+ 0x95,0x98,0x96,0x96,0x98,0x96,0x96,0x96,0x96,0x98,0x98,0x95,0x95,0x93,0x98,0x96,
+ 0x95,0x95,0x95,0x01,0x95,0x92,0x95,0x01,0x96,0x92,0x95,0x92,0x92,0x95,0x93,0x93,
+ 0x01,0x93,0x96,0x95,0x94,0x95,0x95,0x95,0x92,0x95,0x1F,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x30,0x34,0x2F,0x2F,0x34,0x31,0x30,0x34,0x26,0x2F,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xAF,0x9D,0x01,0x93,0x95,0x92,0x92,0x95,0x8E,0x92,0x01,0x95,
+ 0x96,0x94,0x95,0x98,0x98,0x95,0x95,0x95,0x95,0x98,0x95,0x98,0x94,0x96,0x98,0x95,
+ 0x95,0x96,0x95,0x98,0x95,0x98,0x96,0x95,0x98,0x95,0x95,0x94,0x01,0x96,0x01,0x94,
+ 0x96,0x98,0x93,0x01,0x96,0x98,0x01,0x98,0x96,0x99,0x98,0x98,0x98,0x99,0x96,0x99,
+ 0x92,0x96,0x92,0x92,0x01,0x94,0x95,0x91,0x93,0x92,0x94,0x94,0x01,0x96,0x95,0x95,
+ 0x93,0x96,0x96,0x98,0x98,0x95,0x95,0x01,0x95,0x98,0x01,0x95,0x95,0x96,0x95,0x01,
+ 0x94,0x94,0x93,0x95,0x95,0x8E,0x8E,0x96,0x93,0x01,0x94,0x92,0x93,0x95,0x8E,0x94,
+ 0x92,0x92,0x92,0x91,0x93,0x93,0x01,0x93,0x98,0x95,0x1F,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x2F,0x2F,0x00,0x00,0x2F,0x2F,0x2F,0x2F,0x2F,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xAF,0x9B,0x9A,0x94,0x95,0x92,0x01,0x96,0x95,0x01,0x95,0x01,
+ 0x96,0x96,0x94,0x01,0x94,0x96,0x94,0x96,0x94,0x95,0x95,0x95,0x96,0x96,0x98,0x98,
+ 0x96,0x01,0x96,0x96,0x98,0x96,0x95,0x96,0x93,0x95,0x95,0x98,0x96,0x95,0x95,0x98,
+ 0x98,0x01,0x97,0x01,0x95,0x96,0x98,0x99,0x95,0x9A,0x98,0x9A,0x98,0x98,0x9A,0x01,
+ 0x98,0x94,0x93,0x93,0x95,0x96,0x94,0x93,0x94,0x93,0x94,0x01,0x95,0x95,0x94,0x93,
+ 0x01,0x94,0x98,0x01,0x01,0x96,0x96,0x98,0x92,0x98,0x98,0x95,0x92,0x93,0x8E,0x95,
+ 0x92,0x94,0x92,0x92,0x92,0x8E,0x94,0x01,0x93,0x96,0x94,0x95,0x94,0x8E,0x8E,0x92,
+ 0x92,0x93,0x8E,0x94,0x92,0x92,0x92,0x8E,0x92,0x8E,0x1F,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1D,
+ 0x1D,0x1D,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x1D,0x1D,0x1D,0x00,
+ 0x1D,0x1D,0x1D,0x00,0x1D,0x1D,0x1D,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x1D,0x1D,
+ 0x1F,0x00,0x00,0x1F,0x1D,0x1D,0x00,0x1F,0x1D,0x1F,0x00,0x1D,0x1D,0x1D,0x1D,0x1D,
+ 0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1F,0x1D,0x1F,0x00,0x1D,0x1D,0x1F,0x00,0x1D,0x1D,
+ 0x1D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xAF,0x9D,0x98,0x96,0x96,0x96,0x94,0x95,0x95,0x96,0x98,0x94,
+ 0x01,0x94,0x95,0x95,0x95,0x98,0x01,0x95,0x96,0x98,0x95,0x94,0x92,0x01,0x01,0x98,
+ 0x01,0x95,0x94,0x98,0x97,0x98,0x95,0x98,0x01,0x98,0x95,0x94,0x98,0x01,0x98,0x98,
+ 0x95,0x93,0x98,0x95,0x98,0x96,0x98,0x9A,0x9A,0x98,0x98,0x99,0x99,0x96,0x96,0x96,
+ 0x95,0x98,0x93,0x94,0x94,0x93,0x92,0x92,0x92,0x93,0x92,0x01,0x98,0x94,0x96,0x98,
+ 0x96,0x93,0x96,0x94,0x95,0x95,0x95,0x96,0x98,0x96,0x92,0x8E,0x94,0x92,0x92,0x8E,
+ 0x92,0x92,0x92,0x94,0x98,0x92,0x8E,0x92,0x94,0x92,0x95,0x93,0x01,0x94,0x92,0x8E,
+ 0x92,0x92,0x8E,0x92,0x95,0x95,0x92,0x8E,0x94,0x92,0x1F,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1D,0x00,
+ 0x00,0x00,0x1D,0x1F,0x00,0x1F,0x1D,0x1D,0x00,0x1F,0x1D,0x1D,0x1F,0x00,0x1D,0x1D,
+ 0x1F,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x1D,0x1F,0x00,0x1D,0x00,0x1F,0x1D,0x1D,0x00,
+ 0x1D,0x00,0x1D,0x00,0x1D,0x1D,0x1D,0x00,0x00,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,
+ 0x1D,0x00,0x1D,0x00,0x00,0x1F,0x1D,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x1D,0x00,
+ 0x1D,0x00,0x00,0x1D,0x00,0x00,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x00,0x00,0x1D,
+ 0x00,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xAF,0x9D,0x9A,0x95,0x93,0x01,0x95,0x96,0x95,0x96,0x98,0x98,
+ 0x98,0x95,0x95,0x01,0x95,0x95,0x98,0x96,0x95,0x96,0x96,0x96,0x96,0x01,0x96,0x01,
+ 0x95,0x95,0x98,0x01,0x98,0x96,0x99,0x95,0x96,0x96,0x95,0x98,0x98,0x01,0x99,0x96,
+ 0x98,0x01,0x9A,0x98,0x99,0x98,0x99,0x99,0x01,0x98,0x98,0x01,0x95,0x92,0x96,0x98,
+ 0x95,0x92,0x98,0x96,0x98,0x96,0x98,0x98,0x95,0x92,0x95,0x01,0x98,0x96,0x95,0x98,
+ 0x94,0x96,0x01,0x96,0x95,0x01,0x98,0x98,0x96,0x92,0x95,0x95,0x94,0x92,0x92,0x95,
+ 0x92,0x91,0x01,0x92,0x92,0x93,0x95,0x01,0x8E,0x96,0x92,0x8E,0x8E,0x93,0x92,0x8E,
+ 0x95,0x8E,0x93,0x01,0x95,0x92,0x98,0x8E,0x98,0x8E,0x1F,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,
+ 0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,
+ 0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1F,0x1D,0x00,0x00,
+ 0x1D,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x00,0x00,0x1D,0x00,0x00,0x1D,0x00,0x1D,0x00,
+ 0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x00,0x00,
+ 0x1D,0x00,0x1D,0x00,0x00,0x1D,0x00,0x00,0x00,0x00,0x1D,0x00,0x1D,0x1D,0x1D,0x00,
+ 0x1D,0x1D,0x1D,0x00,0x1F,0x1D,0x1F,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x1D,0x00,
+ 0x1D,0x00,0x00,0x1F,0x1D,0x1F,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x1D,0x1D,0x00,0x1D,
+ 0x00,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x1D,
+ 0x00,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,
+ 0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,
+ 0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xAF,0x9C,0x98,0x93,0x98,0x96,0x96,0x98,0x96,0x96,0x92,0x94,
+ 0x98,0x98,0x98,0x96,0x96,0x95,0x98,0x95,0x94,0x01,0x01,0x96,0x98,0x98,0x95,0x96,
+ 0x98,0x95,0x98,0x01,0x98,0x98,0x98,0x95,0x92,0x01,0x94,0x98,0x98,0x98,0x98,0x96,
+ 0x01,0x98,0x9A,0x98,0x95,0x99,0x95,0x98,0x95,0x95,0x01,0x98,0x01,0x98,0x95,0x98,
+ 0x93,0x98,0x94,0x95,0x98,0x98,0x94,0x98,0x98,0x98,0x96,0x93,0x01,0x95,0x96,0x95,
+ 0x01,0x98,0x96,0x96,0x93,0x94,0x98,0x93,0x96,0x92,0x92,0x92,0x95,0x94,0x95,0x91,
+ 0x94,0x92,0x92,0x93,0x93,0x95,0x01,0x95,0x94,0x93,0x01,0x96,0x92,0x92,0x92,0x93,
+ 0x93,0x96,0x93,0x92,0x01,0x01,0x94,0x92,0x92,0x91,0x1F,0x00,0x00,0xA7,0x08,0x1F,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x1D,
+ 0x1F,0x00,0x00,0x1D,0x00,0x1D,0x00,0x00,0x00,0x1D,0x00,0x00,0x1D,0x00,0x1D,0x1D,
+ 0x1F,0x00,0x1F,0x1D,0x1F,0x00,0x1D,0x1D,0x00,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,
+ 0x1D,0x1D,0x1D,0x00,0x00,0x1D,0x00,0x00,0x00,0x00,0x1D,0x00,0x00,0x00,0x1D,0x00,
+ 0x00,0x00,0x1D,0x00,0x1D,0x1D,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x1D,0x00,
+ 0x1D,0x00,0x00,0x00,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x00,0x00,0x1D,
+ 0x00,0x00,0x1D,0x1D,0x1D,0x00,0x1D,0x1D,0x1D,0x00,0x1D,0x1D,0x1F,0x00,0x1D,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA7,
+ 0x08,0x1F,0x00,0x00,0xAF,0x9D,0x9B,0x96,0x98,0x96,0x98,0x92,0x94,0x01,0x94,0x94,
+ 0x01,0x01,0x98,0x95,0x95,0x98,0x01,0x98,0x98,0x98,0x97,0x01,0x01,0x93,0x95,0x95,
+ 0x98,0x98,0x01,0x01,0x98,0x01,0x98,0x96,0x98,0x97,0x96,0x96,0x01,0x98,0x98,0x98,
+ 0x98,0x98,0x98,0x94,0x94,0x98,0x95,0x96,0x01,0x96,0x01,0x95,0x01,0x98,0x98,0x94,
+ 0x93,0x98,0x95,0x96,0x95,0x95,0x94,0x95,0x94,0x95,0x95,0x93,0x96,0x01,0x95,0x95,
+ 0x94,0x95,0x01,0x94,0x01,0x8E,0x95,0x93,0x95,0x94,0x93,0x93,0x93,0x95,0x91,0x93,
+ 0x93,0x96,0x92,0x95,0x96,0x95,0x95,0x93,0x95,0x95,0x96,0x96,0x96,0x93,0x92,0x01,
+ 0x96,0x92,0x01,0x92,0x92,0x94,0x95,0x95,0x01,0x95,0x1F,0x00,0x00,0x08,0x1D,0x1E,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x00,
+ 0x1D,0x1D,0x00,0x1D,0x00,0x1F,0x1D,0x1D,0x00,0x1F,0x1D,0x1D,0x1F,0x00,0x1D,0x00,
+ 0x00,0x00,0x00,0x1D,0x00,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1F,0x1D,0x1D,0x00,
+ 0x1D,0x00,0x1D,0x00,0x00,0x1D,0x00,0x00,0x00,0x00,0x1D,0x00,0x00,0x00,0x1D,0x00,
+ 0x00,0x00,0x1D,0x00,0x1D,0x1D,0x1D,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x1D,0x1D,
+ 0x1F,0x00,0x00,0x1D,0x1D,0x1F,0x00,0x1F,0x1D,0x1F,0x00,0x1D,0x00,0x00,0x00,0x1D,
+ 0x00,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x1D,
+ 0x1D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,
+ 0x1D,0x1E,0x00,0x00,0xAF,0x9D,0x9B,0x95,0x01,0x95,0x96,0x01,0x98,0x96,0x95,0x01,
+ 0x96,0x94,0x96,0x95,0x98,0x01,0x01,0x95,0x01,0x98,0x01,0x01,0x98,0x98,0x98,0x99,
+ 0x99,0x98,0x98,0x95,0x95,0x95,0x96,0x98,0x99,0x98,0x95,0x98,0x99,0x98,0x98,0x95,
+ 0x97,0x95,0x95,0x01,0x96,0x95,0x01,0x01,0x01,0x95,0x94,0x96,0x97,0x97,0x98,0x95,
+ 0x98,0x92,0x95,0x95,0x95,0x93,0x92,0x95,0x95,0x92,0x98,0x95,0x95,0x98,0x95,0x93,
+ 0x98,0x98,0x95,0x95,0x92,0x01,0x01,0x94,0x95,0x93,0x92,0x01,0x95,0x95,0x93,0x94,
+ 0x95,0x98,0x93,0x95,0x96,0x93,0x92,0x91,0x94,0x95,0x94,0x94,0x95,0x96,0x95,0x95,
+ 0x92,0x94,0x95,0x01,0x92,0x92,0x94,0x94,0x96,0x93,0x1F,0x00,0x00,0x1F,0x1E,0xE9,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1D,0x00,
+ 0x00,0x00,0x1D,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,
+ 0x1E,0xE9,0x00,0x00,0xAF,0x9D,0x9B,0x98,0x94,0x98,0x98,0x95,0x96,0x01,0x96,0x01,
+ 0x98,0x98,0x97,0x01,0x98,0x96,0x95,0x92,0x98,0x01,0x98,0x98,0x98,0x01,0x98,0x98,
+ 0x95,0x01,0x94,0x01,0x98,0x92,0x01,0x01,0x95,0x95,0x94,0x98,0x99,0x96,0x92,0x96,
+ 0x95,0x95,0x94,0x98,0x95,0x01,0x95,0x95,0x95,0x99,0x99,0x99,0x01,0x98,0x99,0x98,
+ 0x98,0x93,0x92,0x92,0x95,0x95,0x95,0x92,0x95,0x93,0x96,0x98,0x92,0x95,0x93,0x98,
+ 0x98,0x96,0x92,0x93,0x94,0x91,0x95,0x95,0x95,0x95,0x96,0x95,0x93,0x95,0x98,0x93,
+ 0x93,0x98,0x95,0x94,0x98,0x95,0x94,0x92,0x01,0x94,0x96,0x96,0x92,0x93,0x93,0x96,
+ 0x95,0x91,0x93,0x95,0x92,0x95,0x96,0x93,0x95,0x98,0x1F,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1D,
+ 0x1D,0x1D,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xAF,0x9D,0x9A,0x98,0x96,0x98,0x95,0x98,0x95,0x95,0x01,0x95,
+ 0x94,0x95,0x98,0x96,0x95,0x96,0x94,0x98,0x99,0x98,0x98,0x98,0x01,0x95,0x95,0x01,
+ 0x95,0x96,0x96,0x01,0x96,0x01,0x94,0x95,0x98,0x98,0x98,0x98,0x97,0x01,0x95,0x96,
+ 0x95,0x95,0x98,0x96,0x98,0x98,0x96,0x98,0x99,0x01,0x98,0x95,0x99,0x99,0x98,0x98,
+ 0x95,0x92,0x01,0x98,0x91,0x95,0x93,0x95,0x95,0x95,0x92,0x8E,0x95,0x93,0x92,0x92,
+ 0x93,0x94,0x96,0x93,0x93,0x92,0x94,0x95,0x98,0x01,0x95,0x95,0x98,0x98,0x01,0x93,
+ 0x98,0x95,0x95,0x95,0x95,0x94,0x93,0x95,0x98,0x95,0x95,0x98,0x95,0x01,0x98,0x98,
+ 0x98,0x93,0x95,0x01,0x93,0x92,0x93,0x94,0x95,0x93,0x1F,0xAF,0xAF,0xAF,0xAF,0xAF,
+ 0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,
+ 0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,
+ 0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,
+ 0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,
+ 0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,
+ 0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,
+ 0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,
+ 0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,
+ 0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,
+ 0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,
+ 0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,
+ 0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,
+ 0xAF,0xAF,0xAF,0xAF,0xAF,0x9D,0x9B,0x95,0x98,0x98,0x98,0x01,0x95,0x01,0x95,0x96,
+ 0x95,0x01,0x97,0x98,0x98,0x01,0x01,0x96,0x95,0x95,0x01,0x95,0x01,0x96,0x98,0x96,
+ 0x95,0x94,0x98,0x98,0x95,0x95,0x98,0x98,0x98,0x98,0x94,0x95,0x98,0x94,0x98,0x98,
+ 0x01,0x99,0x01,0x98,0x98,0x98,0x99,0x98,0x98,0x01,0x95,0x98,0x96,0x95,0x01,0x98,
+ 0x8E,0x94,0x8E,0x95,0x95,0x94,0x94,0x8E,0x92,0x93,0x95,0x93,0x96,0x95,0x95,0x93,
+ 0x8E,0x94,0x91,0x92,0x95,0x94,0x93,0x93,0x95,0x01,0x92,0x98,0x96,0x96,0x96,0x01,
+ 0x95,0x96,0x96,0x98,0x95,0x98,0x98,0x92,0x01,0x92,0x96,0x94,0x95,0x96,0x95,0x96,
+ 0x95,0x01,0x92,0x95,0x92,0x93,0x93,0x01,0x93,0x95,0x92,0x93,0x98,0x9D,0x9B,0x9B,
+ 0x9C,0x9C,0x9C,0x9D,0x9B,0x9D,0x9B,0x9D,0x9B,0x9C,0x9D,0x9D,0x9C,0x9C,0x9B,0x9B,
+ 0x9D,0x9B,0x9D,0x9B,0x9D,0x9C,0x9D,0x9D,0x9D,0x9B,0x9B,0x9D,0x9C,0x9C,0x9B,0x9D,
+ 0x9D,0x9C,0x9D,0x9B,0x9D,0x9B,0x9B,0x9B,0x9B,0x9B,0x9C,0x9B,0x9D,0x9D,0x9C,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9C,0x9D,0x9D,0x9C,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9C,0x9D,0x9B,0x9D,0x9C,0x9B,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9C,0x9C,0x9B,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9B,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9B,0x9D,0x9D,0x9D,0x9B,0x9C,0x9B,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9B,0x9C,0x9D,0x9C,
+ 0x9D,0x9C,0x9B,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9C,0x9D,0x9B,0x9C,0x9D,
+ 0x9D,0x9D,0x9D,0x9C,0x9C,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9B,0x9C,0x9C,0x9D,0x9D,0x9D,0x9C,0x9C,0x9C,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9B,0x9D,0x9A,0x98,0x01,0x01,0x98,0x96,0x98,0x98,0x98,0x98,
+ 0x97,0x98,0x95,0x99,0x95,0x98,0x98,0x96,0x95,0x96,0x96,0x98,0x94,0x96,0x98,0x01,
+ 0x98,0x01,0x01,0x01,0x01,0x98,0x98,0x98,0x96,0x01,0x95,0x98,0x98,0x95,0x94,0x98,
+ 0x99,0x98,0x95,0x98,0x95,0x98,0x96,0x01,0x97,0x97,0x98,0x97,0x97,0x97,0x98,0x01,
+ 0x93,0x93,0x96,0x96,0x01,0x95,0x01,0x96,0x95,0x95,0x93,0x95,0x96,0x95,0x98,0x93,
+ 0x92,0x8E,0x94,0x95,0x95,0x91,0x96,0x93,0x98,0x94,0x98,0x95,0x98,0x98,0x95,0x01,
+ 0x01,0x01,0x94,0x95,0x95,0x94,0x96,0x94,0x98,0x01,0x96,0x95,0x01,0x96,0x95,0x95,
+ 0x95,0x91,0x98,0x94,0x93,0x96,0x94,0x94,0x95,0x95,0x93,0x93,0x9A,0x98,0x98,0x9A,
+ 0x9B,0x9A,0x98,0x99,0x9A,0x98,0x9B,0x98,0x9B,0x98,0x98,0x99,0x99,0x98,0x9B,0x99,
+ 0x9A,0x9A,0x98,0x9A,0x9B,0x98,0x9A,0x9B,0x98,0x98,0x98,0x9A,0x9B,0x98,0x98,0x01,
+ 0x98,0x01,0x98,0x98,0x9B,0x98,0x99,0x99,0x99,0x98,0x98,0x9B,0x99,0x98,0x98,0x01,
+ 0x01,0x98,0x01,0x98,0x98,0x98,0x97,0x9B,0x9A,0x99,0x9A,0x9A,0x9A,0x98,0x9B,0x9B,
+ 0x9A,0x9B,0x9B,0x99,0x99,0x9A,0x9B,0x9A,0x9A,0x98,0x97,0x98,0x9A,0x99,0x9A,0x98,
+ 0x9A,0x9A,0x99,0x98,0x98,0x9A,0x9B,0x9A,0x9B,0x9B,0x9B,0x98,0x9A,0x9B,0x9A,0x9B,
+ 0x99,0x9A,0x99,0x9B,0x98,0x9A,0x9A,0x9A,0x9A,0x9A,0x99,0x9A,0x9A,0x9A,0x9B,0x9B,
+ 0x99,0x9B,0x9B,0x9A,0x9A,0x9C,0x9B,0x9B,0x9C,0x9B,0x9B,0x9B,0x9B,0x99,0x9B,0x9B,
+ 0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9A,0x99,0x99,0x9A,0x9A,0x9A,0x9B,0x9A,0x98,
+ 0x98,0x98,0x99,0x9B,0x99,0x9A,0x9A,0x9B,0x9A,0x9A,0x99,0x9B,0x9B,0x99,0x9A,0x98,
+ 0x9A,0x98,0x98,0x9A,0x99,0x9A,0x9A,0x9A,0x9B,0x9A,0x9B,0x9A,0x99,0x9A,0x9A,0x9B,
+ 0x9B,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,0x9B,0x9A,0x9A,0x9B,0x9B,0x9B,0x9B,0x9A,0x9A,
+ 0x9A,0x9B,0x99,0x9A,0x9A,0x9A,0x9A,0x96,0x98,0x96,0x96,0x01,0x95,0x01,0x95,0x95,
+ 0x98,0x98,0x9A,0x98,0x98,0x98,0x98,0x98,0x95,0x01,0x96,0x98,0x94,0x96,0x97,0x98,
+ 0x98,0x98,0x98,0x01,0x98,0x98,0x94,0x98,0x96,0x01,0x98,0x95,0x99,0x01,0x96,0x01,
+ 0x95,0x98,0x98,0x98,0x01,0x96,0x94,0x96,0x98,0x01,0x98,0x01,0x98,0x01,0x01,0x95,
+ 0x01,0x94,0x98,0x96,0x98,0x96,0x96,0x95,0x96,0x92,0x98,0x93,0x95,0x95,0x92,0x92,
+ 0x8E,0x94,0x01,0x95,0x93,0x95,0x01,0x95,0x94,0x92,0x96,0x93,0x01,0x96,0x95,0x94,
+ 0x93,0x95,0x01,0x96,0x91,0x98,0x94,0x98,0x95,0x95,0x95,0x95,0x95,0x95,0x94,0x95,
+ 0x98,0x94,0x98,0x96,0x95,0x93,0x95,0x92,0x95,0x94,0x92,0x92,0x95,0x98,0x93,0x95,
+ 0x94,0x01,0x95,0x94,0x94,0x98,0x95,0x93,0x92,0x95,0x96,0x92,0x95,0x93,0x92,0x95,
+ 0x94,0x96,0x96,0x94,0x95,0x93,0x93,0x94,0x96,0x95,0x94,0x92,0x94,0x92,0x95,0x91,
+ 0x92,0x8E,0x95,0x01,0x92,0x95,0x92,0x95,0x92,0x94,0x01,0x98,0x92,0x92,0x96,0x96,
+ 0x94,0x98,0x94,0x93,0x96,0x94,0x93,0x93,0x95,0x94,0x95,0x01,0x01,0x93,0x92,0x93,
+ 0x95,0x93,0x93,0x98,0x94,0x91,0x92,0x95,0x94,0x94,0x92,0x92,0x93,0x96,0x94,0x8E,
+ 0x01,0x94,0x8E,0x98,0x95,0x95,0x96,0x96,0x98,0x98,0x96,0x92,0x96,0x01,0x98,0x95,
+ 0x96,0x98,0x01,0x95,0x98,0x95,0x93,0x96,0x96,0x94,0x96,0x01,0x01,0x01,0x98,0x98,
+ 0x99,0x99,0x01,0x95,0x92,0x98,0x96,0x96,0x98,0x94,0x01,0x98,0x95,0x98,0x01,0x95,
+ 0x94,0x95,0x98,0x98,0x99,0x94,0x95,0x94,0x98,0x01,0x96,0x96,0x96,0x92,0x94,0x92,
+ 0x94,0x98,0x95,0x01,0x93,0x95,0x01,0x95,0x01,0x98,0x96,0x96,0x95,0x94,0x95,0x01,
+ 0x96,0x98,0x01,0x94,0x96,0x98,0x01,0x95,0x98,0x98,0x96,0x97,0x92,0x01,0x94,0x98,
+ 0x98,0x96,0x96,0x95,0x98,0x98,0x96,0x96,0x96,0x96,0x94,0x95,0x01,0x98,0x01,0x01,
+ 0x96,0x98,0x97,0x93,0x94,0x96,0x94,0x98,0x96,0x98,0x98,0x98,0x99,0x99,0x96,0x99,
+ 0x99,0x98,0x98,0x96,0x98,0x94,0x98,0x98,0x98,0x96,0x98,0x98,0x98,0x01,0x95,0x95,
+ 0x95,0x98,0x99,0x98,0x98,0x98,0x01,0x99,0x98,0x98,0x98,0x98,0x96,0x98,0x98,0x98,
+ 0x97,0x96,0x01,0x94,0x95,0x01,0x95,0x96,0x98,0x98,0x98,0x98,0x95,0x96,0x98,0x96,
+ 0x8E,0x98,0x01,0x95,0x96,0x93,0x92,0x94,0x93,0x01,0x95,0x98,0x98,0x98,0x93,0x91,
+ 0x94,0x95,0x95,0x92,0x94,0x92,0x95,0x92,0x96,0x91,0x96,0x94,0x95,0x95,0x94,0x93,
+ 0x93,0x96,0x94,0x95,0x95,0x95,0x98,0x96,0x95,0x92,0x96,0x92,0x92,0x96,0x95,0x96,
+ 0x96,0x98,0x96,0x94,0x91,0x95,0x96,0x92,0x96,0x93,0x94,0x95,0x93,0x94,0x93,0x91,
+ 0x92,0x93,0x95,0x96,0x95,0x95,0x92,0x96,0x92,0x93,0x93,0x94,0x01,0x98,0x95,0x95,
+ 0x98,0x92,0x93,0x93,0x94,0x96,0x92,0x95,0x92,0x92,0x93,0x94,0x94,0x95,0x95,0x95,
+ 0x94,0x92,0x94,0x95,0x93,0x8F,0x95,0x91,0x91,0x93,0x96,0x01,0x95,0x93,0x98,0x92,
+ 0x01,0x95,0x98,0x93,0x01,0x8E,0x95,0x92,0x8E,0x93,0x96,0x01,0x92,0x95,0x93,0x95,
+ 0x94,0x94,0x94,0x93,0x95,0x92,0x92,0x92,0x95,0x95,0x92,0x92,0x8E,0x92,0x8E,0x92,
+ 0x96,0x93,0x96,0x92,0x94,0x95,0x95,0x96,0x95,0x98,0x96,0x93,0x93,0x95,0x94,0x01,
+ 0x95,0x93,0x98,0x92,0x96,0x94,0x01,0x98,0x01,0x96,0x94,0x98,0x98,0x95,0x01,0x95,
+ 0x98,0x95,0x01,0x95,0x95,0x98,0x96,0x01,0x98,0x95,0x95,0x98,0x98,0x01,0x98,0x93,
+ 0x98,0x92,0x98,0x98,0x95,0x94,0x98,0x96,0x94,0x96,0x01,0x98,0x93,0x94,0x95,0x95,
+ 0x95,0x94,0x95,0x92,0x95,0x96,0x98,0x95,0x94,0x96,0x95,0x98,0x98,0x01,0x98,0x94,
+ 0x95,0x92,0x92,0x94,0x94,0x94,0x96,0x96,0x98,0x98,0x98,0x98,0x94,0x98,0x98,0x98,
+ 0x96,0x96,0x96,0x94,0x92,0x98,0x96,0x97,0x96,0x98,0x98,0x98,0x98,0x97,0x95,0x96,
+ 0x96,0x98,0x98,0x96,0x98,0x95,0x98,0x01,0x98,0x01,0x98,0x98,0x98,0x98,0x96,0x98,
+ 0x95,0x95,0x98,0x95,0x98,0x95,0x98,0x98,0x99,0x99,0x96,0x98,0x98,0x94,0x96,0x99,
+ 0x98,0x98,0x01,0x98,0x94,0x01,0x96,0x98,0x98,0x98,0x96,0x95,0x97,0x96,0x96,0x96,
+ 0x95,0x96,0x01,0x01,0x98,0x98,0x01,0x94,0x01,0x01,0x93,0x95,0x92,0x94,0x98,0x96,
+ 0x95,0x98,0x98,0x93,0x98,0x94,0x98,0x95,0x98,0x96,0x92,0x92,0x94,0x94,0x95,0x95,
+ 0x94,0x92,0x96,0x95,0x96,0x94,0x94,0x95,0x01,0x96,0x93,0x93,0x91,0x01,0x96,0x93,
+ 0x96,0x95,0x98,0x91,0x01,0x94,0x95,0x96,0x01,0x96,0x93,0x94,0x95,0x95,0x94,0x95,
+ 0x95,0x96,0x95,0x98,0x96,0x98,0x98,0x95,0x95,0x01,0x95,0x94,0x95,0x98,0x95,0x95,
+ 0x01,0x92,0x95,0x92,0x91,0x92,0x92,0x94,0x93,0x92,0x94,0x92,0x91,0x95,0x91,0x92,
+ 0x93,0x93,0x93,0x94,0x92,0x93,0x93,0x98,0x92,0x93,0x95,0x93,0x95,0x94,0x95,0x01,
+ 0x95,0x95,0x92,0x92,0x94,0x91,0x94,0x95,0x94,0x94,0x92,0x98,0x95,0x94,0x95,0x93,
+ 0x93,0x92,0x94,0x94,0x01,0x94,0x92,0x94,0x94,0x94,0x98,0x95,0x92,0x96,0x91,0x96,
+ 0x93,0x94,0x93,0x94,0x92,0x96,0x92,0x95,0x8E,0x93,0x95,0x93,0x94,0x96,0x95,0x98,
+ 0x95,0x95,0x95,0x98,0x98,0x96,0x95,0x98,0x95,0x95,0x98,0x01,0x98,0x99,0x98,0x98,
+ 0x96,0x95,0x96,0x96,0x98,0x98,0x95,0x94,0x95,0x98,0x01,0x98,0x01,0x92,0x95,0x96,
+ 0x96,0x98,0x98,0x94,0x96,0x98,0x96,0x98,0x96,0x98,0x98,0x98,0x98,0x95,0x98,0x98,
+ 0x98,0x98,0x95,0x01,0x98,0x95,0x96,0x96,0x96,0x01,0x96,0x95,0x95,0x94,0x94,0x01,
+ 0x01,0x97,0x95,0x98,0x98,0x96,0x98,0x94,0x94,0x95,0x97,0x95,0x01,0x98,0x98,0x96,
+ 0x93,0x94,0x98,0x98,0x98,0x98,0x01,0x01,0x96,0x93,0x98,0x92,0x96,0x98,0x94,0x95,
+ 0x95,0x93,0x95,0x98,0x98,0x95,0x98,0x98,0x96,0x98,0x98,0x97,0x96,0x98,0x96,0x94,
+ 0x96,0x98,0x98,0x98,0x98,0x9A,0x98,0x99,0x99,0x98,0x98,0x98,0x98,0x96,0x98,0x98,
+ 0x99,0x93,0x98,0x96,0x98,0x98,0x01,0x98,0x01,0x98,0x98,0x98,0x98,0x01,0x96,0x01,
+ 0x98,0x98,0x98,0x98,0x98,0x97,0x95,0x96,0x94,0x95,0x98,0x98,0x98,0x96,0x95,0x96,
+ 0x94,0x01,0x96,0x97,0x98,0x98,0x98,0x01,0x98,0x98,0x97,0x97,0x95,0x95,0x97,0x01,
+ 0x96,0x93,0x93,0x93,0x91,0x93,0x94,0x95,0x94,0x93,0x95,0x8E,0x8E,0x94,0x91,0x95,
+ 0x92,0x95,0x95,0x92,0x94,0x93,0x94,0x96,0x92,0x94,0x93,0x96,0x95,0x94,0x95,0x92,
+ 0x93,0x95,0x01,0x98,0x96,0x95,0x95,0x94,0x95,0x96,0x94,0x95,0x96,0x95,0x92,0x95,
+ 0x96,0x92,0x93,0x94,0x96,0x01,0x95,0x95,0x98,0x93,0x95,0x95,0x95,0x01,0x93,0x92,
+ 0x01,0x94,0x95,0x8E,0x94,0x8E,0x8E,0x8E,0x95,0x8E,0x8E,0x94,0x8E,0x92,0x8E,0x94,
+ 0x8E,0x95,0x8E,0x95,0x8E,0x94,0x8E,0x93,0x95,0x94,0x93,0x94,0x98,0x94,0x95,0x95,
+ 0x93,0x95,0x01,0x96,0x95,0x96,0x92,0x93,0x95,0x94,0x91,0x94,0x95,0x92,0x92,0x01,
+ 0x92,0x95,0x94,0x92,0x92,0x01,0x95,0x96,0x93,0x91,0x92,0x91,0x93,0x91,0x95,0x8E,
+ 0x95,0x94,0x96,0x92,0x96,0x96,0x93,0x96,0x94,0x93,0x94,0x93,0x98,0x98,0x93,0x92,
+ 0x92,0x96,0x01,0x98,0x01,0x96,0x01,0x94,0x98,0x98,0x96,0x95,0x98,0x97,0x01,0x98,
+ 0x99,0x01,0x98,0x01,0x98,0x96,0x96,0x95,0x96,0x98,0x98,0x96,0x95,0x98,0x96,0x95,
+ 0x98,0x96,0x01,0x93,0x95,0x98,0x95,0x96,0x98,0x94,0x98,0x96,0x98,0x98,0x98,0x98,
+ 0x01,0x96,0x98,0x94,0x98,0x01,0x96,0x98,0x98,0x01,0x96,0x98,0x95,0x95,0x95,0x96,
+ 0x01,0x94,0x01,0x98,0x98,0x95,0x98,0x01,0x98,0x98,0x98,0x98,0x98,0x96,0x95,0x98,
+ 0x92,0x94,0x94,0x96,0x98,0x98,0x95,0x98,0x95,0x95,0x93,0x94,0x98,0x96,0x96,0x94,
+ 0x98,0x94,0x98,0x95,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x01,0x98,0x93,0x98,0x97,
+ 0x98,0x95,0x98,0x98,0x98,0x98,0x98,0x96,0x98,0x94,0x95,0x01,0x98,0x98,0x98,0x99,
+ 0x98,0x95,0x99,0x95,0x96,0x95,0x98,0x95,0x98,0x99,0x99,0x99,0x98,0x98,0x01,0x98,
+ 0x98,0x98,0x96,0x95,0x93,0x98,0x95,0x98,0x96,0x96,0x96,0x96,0x01,0x99,0x98,0x96,
+ 0x98,0x96,0x99,0x98,0x98,0x01,0x98,0x96,0x98,0x98,0x98,0x01,0x01,0x98,0x98,0x94,
+ 0x92,0x96,0x93,0x92,0x92,0x94,0x95,0x8E,0x94,0x92,0x95,0x94,0x01,0x92,0x92,0x8E,
+ 0x93,0x94,0x94,0x94,0x01,0x93,0x01,0x95,0x92,0x95,0x93,0x95,0x96,0x94,0x94,0x93,
+ 0x94,0x98,0x96,0x95,0x95,0x96,0x96,0x95,0x93,0x94,0x95,0x98,0x92,0x94,0x95,0x95,
+ 0x94,0x98,0x94,0x98,0x96,0x98,0x96,0x95,0x96,0x95,0x95,0x93,0x94,0x93,0x92,0x94,
+ 0x96,0x95,0x95,0x95,0x95,0x94,0x93,0x95,0x92,0x93,0x93,0x96,0x98,0x92,0x93,0x92,
+ 0x94,0x95,0x93,0x95,0x95,0x92,0x8E,0x8E,0x01,0x92,0x92,0x95,0x92,0x94,0x93,0x96,
+ 0x93,0x01,0x92,0x95,0x93,0x94,0x98,0x94,0x95,0x95,0x91,0x93,0x95,0x92,0x92,0x92,
+ 0x01,0x93,0x95,0x92,0x95,0x91,0x92,0x01,0x92,0x92,0x92,0x92,0x93,0x94,0x95,0x94,
+ 0x01,0x95,0x01,0x94,0x95,0x94,0x95,0x93,0x92,0x01,0x01,0x94,0x98,0x98,0x93,0x98,
+ 0x95,0x95,0x98,0x95,0x96,0x94,0x96,0x98,0x96,0x95,0x94,0x95,0x96,0x95,0x95,0x01,
+ 0x96,0x01,0x98,0x95,0x01,0x96,0x98,0x96,0x96,0x98,0x01,0x95,0x96,0x96,0x95,0x95,
+ 0x94,0x94,0x94,0x01,0x98,0x95,0x98,0x96,0x01,0x94,0x98,0x98,0x98,0x93,0x99,0x96,
+ 0x98,0x98,0x98,0x95,0x98,0x98,0x95,0x95,0x95,0x92,0x92,0x98,0x01,0x98,0x94,0x01,
+ 0x95,0x01,0x98,0x01,0x01,0x98,0x95,0x01,0x98,0x98,0x98,0x96,0x98,0x01,0x96,0x95,
+ 0x96,0x95,0x95,0x95,0x98,0x95,0x95,0x98,0x01,0x98,0x96,0x98,0x95,0x95,0x98,0x01,
+ 0x95,0x98,0x99,0x98,0x99,0x98,0x95,0x98,0x96,0x96,0x98,0x01,0x96,0x01,0x01,0x95,
+ 0x98,0x95,0x98,0x98,0x96,0x96,0x01,0x98,0x95,0x95,0x96,0x95,0x94,0x98,0x95,0x01,
+ 0x99,0x98,0x98,0x98,0x01,0x98,0x01,0x94,0x94,0x98,0x98,0x97,0x95,0x98,0x01,0x98,
+ 0x98,0x99,0x95,0x98,0x99,0x99,0x95,0x98,0x98,0x98,0x98,0x99,0x98,0x99,0x98,0x99,
+ 0x98,0x98,0x99,0x98,0x95,0x95,0x99,0x96,0x9A,0x99,0x9A,0x99,0x98,0x96,0x01,0x98,
+ 0x01,0x93,0x95,0x93,0x91,0x01,0x98,0x95,0x94,0x92,0x95,0x92,0x98,0x96,0x95,0x98,
+ 0x95,0x96,0x92,0x95,0x95,0x95,0x95,0x93,0x95,0x95,0x92,0x92,0x95,0x92,0x92,0x01,
+ 0x92,0x95,0x95,0x93,0x96,0x93,0x95,0x92,0x95,0x95,0x95,0x92,0x92,0x01,0x91,0x93,
+ 0x94,0x95,0x93,0x95,0x94,0x92,0x92,0x01,0x01,0x01,0x95,0x8E,0x92,0x98,0x95,0x95,
+ 0x98,0x95,0x96,0x95,0x96,0x94,0x94,0x93,0x94,0x91,0x94,0x94,0x93,0x93,0x92,0x95,
+ 0x93,0x94,0x01,0x01,0x96,0x92,0x98,0x92,0x8E,0x95,0x8E,0x8E,0x8E,0x94,0x93,0x92,
+ 0x93,0x98,0x92,0x94,0x93,0x92,0x95,0x93,0x95,0x91,0x95,0x92,0x94,0x98,0x96,0x01,
+ 0x01,0x92,0x94,0x93,0x94,0x92,0x94,0x93,0x01,0x95,0x92,0x92,0x96,0x93,0x95,0x93,
+ 0x01,0x93,0x95,0x93,0x96,0x94,0x94,0x01,0x96,0x01,0x92,0x98,0x95,0x01,0x96,0x94,
+ 0x01,0x98,0x98,0x01,0x95,0x95,0x96,0x95,0x96,0x94,0x93,0x94,0x95,0x01,0x98,0x98,
+ 0x96,0x95,0x95,0x96,0x95,0x96,0x98,0x01,0x95,0x98,0x96,0x96,0x94,0x96,0x94,0x96,
+ 0x95,0x01,0x95,0x94,0x94,0x93,0x96,0x96,0x96,0x98,0x98,0x98,0x96,0x96,0x98,0x99,
+ 0x98,0x98,0x99,0x99,0x98,0x98,0x96,0x96,0x92,0x94,0x01,0x98,0x94,0x95,0x96,0x98,
+ 0x95,0x95,0x93,0x94,0x01,0x98,0x01,0x98,0x98,0x98,0x95,0x01,0x95,0x95,0x96,0x95,
+ 0x96,0x94,0x95,0x95,0x01,0x95,0x93,0x96,0x98,0x94,0x01,0x9A,0x01,0x98,0x94,0x9A,
+ 0x98,0x98,0x98,0x99,0x98,0x99,0x98,0x94,0x95,0x95,0x95,0x98,0x01,0x98,0x98,0x95,
+ 0x95,0x99,0x98,0x99,0x95,0x98,0x98,0x95,0x98,0x01,0x94,0x98,0x98,0x98,0x01,0x96,
+ 0x95,0x96,0x01,0x97,0x96,0x95,0x01,0x98,0x95,0x95,0x95,0x98,0x01,0x01,0x93,0x95,
+ 0x96,0x98,0x95,0x98,0x98,0x98,0x98,0x01,0x98,0x95,0x98,0x98,0x98,0x98,0x99,0x98,
+ 0x96,0x98,0x9A,0x01,0x99,0x99,0x99,0x98,0x98,0x99,0x98,0x99,0x01,0x98,0x99,0x98,
+ 0x98,0x98,0x95,0x98,0x92,0x98,0x94,0x95,0x98,0x01,0x92,0x96,0x92,0x92,0x94,0x96,
+ 0x98,0x98,0x93,0x92,0x93,0x8E,0x96,0x95,0x96,0x01,0x92,0x95,0x93,0x01,0x94,0x93,
+ 0x01,0x93,0x94,0x94,0x94,0x92,0x95,0x95,0x92,0x93,0x92,0x91,0x94,0x94,0x8E,0x92,
+ 0x8E,0x01,0x8E,0x8E,0x92,0x94,0x92,0x95,0x92,0x95,0x95,0x95,0x94,0x95,0x94,0x94,
+ 0x94,0x01,0x01,0x98,0x95,0x95,0x95,0x94,0x92,0x95,0x95,0x94,0x92,0x92,0x95,0x94,
+ 0x98,0x95,0x95,0x93,0x92,0x95,0x92,0x01,0x96,0x92,0x95,0x01,0x95,0x92,0x94,0x95,
+ 0x94,0x8E,0x8E,0x95,0x96,0x94,0x92,0x8E,0x92,0x92,0x95,0x92,0x95,0x98,0x95,0x92,
+ 0x95,0x93,0x98,0x92,0x95,0x92,0x94,0x94,0x95,0x95,0x93,0x95,0x93,0x94,0x98,0x01,
+ 0x94,0x98,0x01,0x94,0x95,0x01,0x95,0x95,0x98,0x98,0x95,0x96,0x93,0x98,0x96,0x98,
+ 0x95,0x93,0x96,0x01,0x96,0x01,0x98,0x96,0x98,0x95,0x95,0x94,0x98,0x01,0x96,0x98,
+ 0x98,0x96,0x95,0x95,0x98,0x01,0x98,0x98,0x98,0x98,0x94,0x01,0x94,0x01,0x01,0x93,
+ 0x98,0x01,0x98,0x01,0x96,0x98,0x98,0x96,0x98,0x01,0x9A,0x98,0x98,0x95,0x98,0x98,
+ 0x98,0x95,0x99,0x9A,0x96,0x01,0x98,0x98,0x95,0x95,0x98,0x96,0x01,0x98,0x98,0x01,
+ 0x95,0x98,0x96,0x98,0x98,0x95,0x99,0x98,0x01,0x95,0x98,0x95,0x98,0x92,0x95,0x96,
+ 0x94,0x98,0x96,0x97,0x01,0x96,0x98,0x98,0x99,0x98,0x98,0x96,0x95,0x95,0x98,0x98,
+ 0x98,0x98,0x98,0x01,0x98,0x96,0x96,0x96,0x94,0x98,0x98,0x94,0x95,0x98,0x96,0x98,
+ 0x9A,0x98,0x94,0x96,0x99,0x95,0x99,0x98,0x93,0x98,0x95,0x98,0x95,0x95,0x98,0x98,
+ 0x98,0x93,0x98,0x98,0x96,0x95,0x96,0x01,0x96,0x98,0x95,0x95,0x94,0x01,0x98,0x98,
+ 0x96,0x95,0x01,0x98,0x98,0x98,0x01,0x98,0x98,0x96,0x99,0x98,0x98,0x99,0x99,0x98,
+ 0x99,0x01,0x98,0x01,0x98,0x98,0x98,0x96,0x98,0x94,0x98,0x94,0x98,0x98,0x99,0x95,
+ 0x98,0x96,0x95,0x93,0x92,0x92,0x92,0x93,0x92,0x93,0x95,0x01,0x01,0x01,0x95,0x96,
+ 0x01,0x92,0x95,0x96,0x01,0x93,0x92,0x92,0x94,0x8E,0x92,0x01,0x92,0x01,0x91,0x92,
+ 0x93,0x95,0x94,0x96,0x98,0x91,0x91,0x8E,0x95,0x94,0x92,0x8F,0x95,0x01,0x96,0x93,
+ 0x94,0x96,0x94,0x96,0x8E,0x92,0x8E,0x94,0x8E,0x92,0x01,0x96,0x92,0x92,0x94,0x93,
+ 0x92,0x98,0x98,0x95,0x01,0x96,0x95,0x01,0x98,0x98,0x96,0x01,0x98,0x93,0x98,0x01,
+ 0x95,0x91,0x95,0x93,0x93,0x94,0x91,0x94,0x96,0x95,0x93,0x93,0x96,0x95,0x94,0x95,
+ 0x94,0x92,0x95,0x96,0x93,0x98,0x96,0x95,0x93,0x96,0x93,0x93,0x98,0x92,0x95,0x93,
+ 0x95,0x94,0x93,0x93,0x93,0x95,0x95,0x96,0x96,0x92,0x94,0x96,0x95,0x96,0x95,0x94,
+ 0x93,0x93,0x96,0x98,0x01,0x98,0x98,0x97,0x95,0x98,0x96,0x98,0x01,0x96,0x01,0x98,
+ 0x95,0x98,0x96,0x96,0x01,0x96,0x01,0x01,0x01,0x95,0x96,0x96,0x96,0x01,0x01,0x98,
+ 0x95,0x95,0x98,0x96,0x01,0x01,0x94,0x01,0x01,0x01,0x96,0x98,0x96,0x98,0x98,0x92,
+ 0x01,0x01,0x96,0x95,0x98,0x99,0x96,0x99,0x95,0x01,0x01,0x98,0x98,0x99,0x9A,0x98,
+ 0x9A,0x95,0x9A,0x98,0x98,0x9A,0x99,0x98,0x95,0x95,0x9A,0x98,0x01,0x95,0x95,0x98,
+ 0x01,0x98,0x98,0x98,0x98,0x98,0x99,0x96,0x98,0x96,0x98,0x95,0x92,0x01,0x98,0x99,
+ 0x98,0x98,0x98,0x01,0x98,0x98,0x98,0x95,0x94,0x98,0x97,0x98,0x01,0x98,0x98,0x96,
+ 0x95,0x93,0x95,0x98,0x96,0x98,0x98,0x98,0x95,0x01,0x96,0x98,0x98,0x99,0x95,0x01,
+ 0x98,0x98,0x9A,0x98,0x98,0x01,0x01,0x98,0x98,0x98,0x96,0x96,0x98,0x01,0x94,0x94,
+ 0x95,0x96,0x01,0x96,0x98,0x98,0x98,0x95,0x95,0x98,0x95,0x95,0x96,0x96,0x95,0x95,
+ 0x94,0x98,0x98,0x01,0x95,0x98,0x98,0x95,0x95,0x98,0x98,0x98,0x99,0x98,0x01,0x95,
+ 0x99,0x96,0x95,0x95,0x98,0x98,0x95,0x01,0x98,0x95,0x01,0x96,0x96,0x94,0x95,0x98,
+ 0x98,0x01,0x98,0x93,0x95,0x95,0x96,0x93,0x98,0x95,0x98,0x95,0x93,0x01,0x93,0x96,
+ 0x93,0x96,0x98,0x92,0x01,0x93,0x93,0x94,0x94,0x92,0x92,0x92,0x8E,0x94,0x93,0x8E,
+ 0x92,0x01,0x95,0x95,0x93,0x93,0x92,0x8E,0x8E,0x91,0x94,0x93,0x01,0x94,0x98,0x92,
+ 0x95,0x94,0x96,0x92,0x8E,0x8E,0x8E,0x93,0x94,0x95,0x92,0x8E,0x8E,0x95,0x94,0x95,
+ 0x94,0x93,0x96,0x93,0x95,0x98,0x95,0x96,0x95,0x93,0x96,0x94,0x98,0x01,0x96,0x94,
+ 0x96,0x94,0x94,0x95,0x94,0x95,0x01,0x92,0x94,0x92,0x94,0x95,0x92,0x94,0x93,0x94,
+ 0x93,0x96,0x93,0x94,0x92,0x93,0x98,0x01,0x98,0x94,0x95,0x95,0x95,0x93,0x93,0x94,
+ 0x95,0x01,0x95,0x98,0x96,0x93,0x94,0x01,0x94,0x95,0x98,0x96,0x93,0x95,0x92,0x93,
+ 0x96,0x96,0x98,0x93,0x98,0x94,0x94,0x01,0x92,0x01,0x93,0x94,0x94,0x96,0x01,0x98,
+ 0x01,0x01,0x98,0x96,0x01,0x92,0x94,0x98,0x94,0x95,0x96,0x01,0x97,0x95,0x95,0x98,
+ 0x98,0x98,0x01,0x98,0x96,0x01,0x95,0x98,0x93,0x98,0x96,0x01,0x01,0x94,0x95,0x98,
+ 0x96,0x95,0x98,0x95,0x98,0x96,0x96,0x99,0x98,0x98,0x99,0x96,0x01,0x96,0x98,0x98,
+ 0x99,0x96,0x9A,0x01,0x98,0x01,0x98,0x98,0x97,0x98,0x98,0x98,0x99,0x95,0x92,0x92,
+ 0x96,0x99,0x98,0x96,0x98,0x98,0x98,0x01,0x95,0x98,0x96,0x99,0x01,0x9A,0x98,0x98,
+ 0x98,0x98,0x98,0x96,0x96,0x98,0x95,0x98,0x98,0x93,0x98,0x98,0x98,0x96,0x95,0x97,
+ 0x98,0x97,0x97,0x98,0x95,0x01,0x98,0x98,0x01,0x98,0x01,0x95,0x98,0x99,0x98,0x9A,
+ 0x98,0x98,0x9A,0x98,0x98,0x9A,0x94,0x01,0x98,0x95,0x01,0x98,0x95,0x96,0x95,0x94,
+ 0x95,0x96,0x95,0x95,0x93,0x98,0x96,0x95,0x95,0x01,0x98,0x96,0x96,0x01,0x01,0x96,
+ 0x01,0x96,0x92,0x01,0x01,0x98,0x98,0x98,0x98,0x98,0x98,0x01,0x98,0x95,0x97,0x95,
+ 0x98,0x94,0x92,0x96,0x98,0x96,0x01,0x98,0x01,0x98,0x95,0x98,0x98,0x01,0x95,0x94,
+ 0x98,0x98,0x95,0x93,0x95,0x92,0x95,0x98,0x96,0x93,0x94,0x01,0x93,0x98,0x92,0x95,
+ 0x92,0x98,0x92,0x94,0x95,0x96,0x95,0x95,0x92,0x92,0x92,0x93,0x96,0x93,0x96,0x92,
+ 0x94,0x01,0x95,0x92,0x95,0x93,0x92,0x95,0x98,0x92,0x94,0x95,0x93,0x94,0x93,0x95,
+ 0x95,0x95,0x91,0x93,0x8E,0x8E,0x92,0x92,0x93,0x98,0x92,0x93,0x95,0x92,0x98,0x94,
+ 0x96,0x93,0x95,0x98,0x96,0x96,0x96,0x98,0x98,0x95,0x95,0x95,0x98,0x98,0x95,0x96,
+ 0x98,0x94,0x98,0x94,0x93,0x98,0x98,0x96,0x01,0x96,0x98,0x01,0x96,0x94,0x94,0x01,
+ 0x95,0x95,0x95,0x01,0x96,0x01,0x96,0x94,0x98,0x95,0x95,0x93,0x95,0x94,0x95,0x95,
+ 0x95,0x94,0x95,0x95,0x93,0x92,0x95,0x95,0x95,0x01,0x93,0x01,0x98,0x96,0x96,0x98,
+ 0x01,0x98,0x98,0x98,0x98,0x94,0x98,0x94,0x01,0x01,0x01,0x98,0x98,0x94,0x95,0x01,
+ 0x96,0x94,0x95,0x96,0x01,0x96,0x98,0x98,0x98,0x98,0x95,0x96,0x99,0x01,0x98,0x96,
+ 0x98,0x98,0x96,0x95,0x98,0x01,0x95,0x94,0x98,0x98,0x96,0x98,0x95,0x95,0x94,0x96,
+ 0x95,0x94,0x98,0x97,0x98,0x96,0x01,0x95,0x99,0x98,0x98,0x98,0x01,0x01,0x98,0x96,
+ 0x99,0x99,0x99,0x01,0x96,0x95,0x98,0x94,0x94,0x94,0x01,0x98,0x01,0x98,0x94,0x98,
+ 0x98,0x97,0x99,0x01,0x96,0x96,0x95,0x98,0x95,0x99,0x01,0x99,0x98,0x98,0x98,0x98,
+ 0x98,0x9B,0x99,0x9B,0x9C,0x99,0x98,0x96,0x01,0x98,0x95,0x98,0x96,0x97,0x98,0x98,
+ 0x98,0x01,0x95,0x94,0x98,0x98,0x01,0x98,0x95,0x95,0x95,0x96,0x98,0x98,0x98,0x99,
+ 0x99,0x98,0x98,0x92,0x98,0x98,0x98,0x98,0x98,0x94,0x94,0x96,0x96,0x95,0x95,0x01,
+ 0x98,0x01,0x95,0x98,0x94,0x98,0x95,0x01,0x98,0x96,0x94,0x96,0x01,0x98,0x96,0x96,
+ 0x95,0x98,0x98,0x98,0x99,0x95,0x98,0x95,0x98,0x98,0x96,0x01,0x95,0x01,0x98,0x98,
+ 0x98,0x01,0x95,0x95,0x98,0x98,0x94,0x98,0x98,0x96,0x94,0x98,0x94,0x96,0x95,0x98,
+ 0x98,0x01,0x93,0x92,0x94,0x95,0x95,0x93,0x95,0x93,0x93,0x92,0x01,0x01,0x94,0x96,
+ 0x94,0x93,0x94,0x01,0x01,0x01,0x95,0x92,0x98,0x95,0x95,0x92,0x95,0x96,0x95,0x92,
+ 0x93,0x92,0x95,0x93,0x95,0x01,0x94,0x93,0x95,0x92,0x98,0x92,0x95,0x92,0x95,0x98,
+ 0x92,0x95,0x96,0x95,0x8E,0x96,0x01,0x8E,0x93,0x93,0x95,0x95,0x95,0x94,0x92,0x95,
+ 0x94,0x95,0x94,0x95,0x98,0x01,0x95,0x95,0x94,0x98,0x95,0x98,0x98,0x96,0x95,0x94,
+ 0x93,0x96,0x94,0x98,0x95,0x98,0x97,0x98,0x95,0x97,0x96,0x96,0x96,0x96,0x95,0x01,
+ 0x96,0x98,0x95,0x95,0x98,0x98,0x96,0x01,0x01,0x96,0x94,0x94,0x94,0x01,0x94,0x98,
+ 0x95,0x94,0x94,0x01,0x96,0x96,0x95,0x96,0x95,0x93,0x98,0x95,0x95,0x95,0x99,0x01,
+ 0x94,0x98,0x98,0x94,0x95,0x01,0x92,0x96,0x98,0x96,0x01,0x98,0x95,0x95,0x98,0x98,
+ 0x94,0x01,0x96,0x01,0x01,0x01,0x96,0x01,0x97,0x95,0x98,0x98,0x98,0x98,0x96,0x96,
+ 0x99,0x96,0x98,0x98,0x98,0x98,0x95,0x94,0x98,0x98,0x98,0x96,0x95,0x98,0x95,0x98,
+ 0x98,0x98,0x96,0x96,0x98,0x98,0x95,0x9A,0x98,0x98,0x96,0x95,0x95,0x94,0x95,0x94,
+ 0x95,0x93,0x96,0x98,0x95,0x94,0x92,0x95,0x95,0x95,0x95,0x98,0x01,0x95,0x01,0x96,
+ 0x98,0x01,0x96,0x98,0x99,0x98,0x99,0x98,0x95,0x95,0x98,0x01,0x98,0x98,0x96,0x98,
+ 0x98,0x98,0x95,0x9B,0x99,0x99,0x01,0x01,0x98,0x94,0x95,0x99,0x98,0x95,0x98,0x98,
+ 0x98,0x98,0x92,0x96,0x95,0x96,0x98,0x98,0x98,0x94,0x98,0x95,0x94,0x94,0x98,0x01,
+ 0x96,0x98,0x93,0x98,0x99,0x98,0x01,0x96,0x96,0x01,0x94,0x94,0x95,0x95,0x96,0x94,
+ 0x95,0x92,0x01,0x95,0x96,0x96,0x92,0x98,0x94,0x94,0x96,0x98,0x98,0x98,0x96,0x98,
+ 0x96,0x96,0x98,0x98,0x01,0x01,0x94,0x01,0x95,0x95,0x01,0x95,0x98,0x96,0x95,0x95,
+ 0x95,0x01,0x01,0x95,0x95,0x96,0x94,0x94,0x95,0x98,0x96,0x95,0x95,0x96,0x98,0x95,
+ 0x94,0x93,0x01,0x95,0x94,0x95,0x96,0x95,0x96,0x95,0x95,0x98,0x95,0x98,0x98,0x94,
+ 0x95,0x96,0x95,0x01,0x95,0x95,0x92,0x92,0x95,0x95,0x94,0x96,0x01,0x92,0x94,0x94,
+ 0x94,0x93,0x93,0x96,0x92,0x95,0x94,0x95,0x98,0x95,0x92,0x96,0x96,0x95,0x94,0x98,
+ 0x01,0x95,0x92,0x96,0x93,0x96,0x95,0x01,0x98,0x01,0x96,0x01,0x98,0x95,0x92,0x92,
+ 0x94,0x8E,0x92,0x94,0x95,0x94,0x93,0x95,0x01,0x95,0x98,0x98,0x98,0x98,0x01,0x95,
+ 0x98,0x97,0x95,0x95,0x96,0x95,0x94,0x97,0x95,0x96,0x98,0x95,0x95,0x01,0x98,0x97,
+ 0x98,0x94,0x95,0x95,0x98,0x95,0x94,0x01,0x98,0x95,0x96,0x96,0x01,0x96,0x96,0x95,
+ 0x94,0x95,0x98,0x01,0x98,0x96,0x95,0x98,0x96,0x98,0x92,0x01,0x95,0x98,0x95,0x95,
+ 0x98,0x95,0x95,0x98,0x95,0x98,0x94,0x98,0x94,0x96,0x98,0x98,0x01,0x98,0x95,0x94,
+ 0x95,0x98,0x97,0x95,0x01,0x01,0x96,0x98,0x94,0x96,0x01,0x98,0x94,0x98,0x01,0x98,
+ 0x97,0x94,0x96,0x96,0x98,0x95,0x94,0x98,0x01,0x96,0x93,0x01,0x98,0x01,0x96,0x99,
+ 0x98,0x96,0x98,0x96,0x98,0x96,0x98,0x95,0x98,0x99,0x95,0x98,0x97,0x98,0x95,0x98,
+ 0x94,0x92,0x92,0x8E,0x8E,0x95,0x93,0x01,0x96,0x94,0x98,0x98,0x95,0x94,0x94,0x95,
+ 0x95,0x98,0x98,0x01,0x98,0x96,0x98,0x98,0x01,0x98,0x98,0x99,0x98,0x96,0x98,0x96,
+ 0x95,0x98,0x98,0x98,0x9A,0x94,0x99,0x98,0x98,0x98,0x98,0x98,0x01,0x9A,0x98,0x95,
+ 0x01,0x98,0x98,0x96,0x9A,0x9A,0x01,0x94,0x96,0x98,0x96,0x96,0x01,0x98,0x01,0x98,
+ 0x98,0x98,0x99,0x99,0x98,0x98,0x98,0x98,0x98,0x94,0x98,0x98,0x98,0x94,0x96,0x95,
+ 0x95,0x95,0x98,0x93,0x94,0x98,0x94,0x96,0x98,0x96,0x95,0x98,0x99,0x98,0x01,0x96,
+ 0x98,0x98,0x98,0x9A,0x01,0x01,0x01,0x94,0x95,0x01,0x96,0x98,0x95,0x95,0x96,0x96,
+ 0x94,0x01,0x01,0x01,0x98,0x01,0x96,0x96,0x01,0x98,0x96,0x94,0x98,0x98,0x96,0x01,
+ 0x01,0x94,0x98,0x98,0x93,0x93,0x92,0x95,0x01,0x93,0x94,0x92,0x96,0x95,0x92,0x96,
+ 0x93,0x95,0x94,0x93,0x95,0x93,0x01,0x01,0x94,0x95,0x95,0x95,0x92,0x92,0x96,0x92,
+ 0x01,0x01,0x95,0x96,0x01,0x01,0x95,0x95,0x93,0x95,0x94,0x98,0x01,0x95,0x01,0x94,
+ 0x01,0x94,0x95,0x8E,0x92,0x01,0x95,0x98,0x95,0x96,0x93,0x96,0x96,0x98,0x01,0x01,
+ 0x96,0x95,0x95,0x95,0x96,0x93,0x94,0x93,0x95,0x01,0x98,0x95,0x98,0x98,0x98,0x01,
+ 0x98,0x98,0x01,0x92,0x98,0x95,0x98,0x95,0x96,0x95,0x98,0x97,0x98,0x98,0x95,0x98,
+ 0x98,0x98,0x94,0x94,0x92,0x01,0x01,0x95,0x96,0x95,0x98,0x95,0x98,0x01,0x98,0x98,
+ 0x96,0x96,0x95,0x01,0x95,0x98,0x96,0x96,0x98,0x95,0x01,0x01,0x96,0x98,0x94,0x98,
+ 0x95,0x01,0x98,0x01,0x95,0x91,0x98,0x96,0x94,0x01,0x95,0x98,0x01,0x98,0x98,0x95,
+ 0x98,0x98,0x96,0x98,0x01,0x01,0x96,0x96,0x98,0x96,0x94,0x94,0x94,0x98,0x01,0x95,
+ 0x96,0x98,0x98,0x94,0x98,0x95,0x95,0x95,0x95,0x98,0x96,0x01,0x98,0x94,0x98,0x96,
+ 0x98,0x96,0x99,0x96,0x98,0x96,0x95,0x96,0x95,0x94,0x98,0x95,0x96,0x92,0x96,0x98,
+ 0x98,0x01,0x92,0x8E,0x94,0x91,0x93,0x95,0x94,0x96,0x95,0x96,0x94,0x95,0x95,0x96,
+ 0x98,0x96,0x95,0x94,0x96,0x98,0x01,0x96,0x98,0x98,0x98,0x98,0x98,0x97,0x98,0x98,
+ 0x01,0x97,0x94,0x95,0x01,0x99,0x96,0x98,0x98,0x98,0x98,0x98,0x98,0x01,0x96,0x9A,
+ 0x98,0x9A,0x98,0x95,0x95,0x96,0x01,0x98,0x98,0x98,0x98,0x98,0x98,0x94,0x96,0x95,
+ 0x98,0x98,0x98,0x94,0x98,0x95,0x95,0x98,0x98,0x98,0x98,0x98,0x95,0x92,0x98,0x96,
+ 0x96,0x95,0x95,0x01,0x98,0x95,0x98,0x98,0x98,0x93,0x95,0x96,0x99,0x95,0x98,0x99,
+ 0x95,0x99,0x99,0x95,0x94,0x95,0x95,0x96,0x98,0x98,0x95,0x98,0x98,0x94,0x94,0x95,
+ 0x96,0x98,0x95,0x01,0x98,0x98,0x94,0x96,0x98,0x98,0x96,0x98,0x93,0x98,0x01,0x01,
+ 0x92,0x92,0x96,0x93,0x96,0x95,0x91,0x01,0x92,0x95,0x01,0x01,0x93,0x95,0x01,0x98,
+ 0x94,0x95,0x95,0x94,0x94,0x94,0x95,0x01,0x92,0x94,0x93,0x93,0x01,0x96,0x94,0x94,
+ 0x95,0x98,0x98,0x01,0x98,0x95,0x98,0x93,0x95,0x01,0x95,0x94,0x96,0x95,0x98,0x95,
+ 0x94,0x93,0x98,0x01,0x95,0x94,0x98,0x95,0x01,0x95,0x95,0x98,0x01,0x98,0x01,0x98,
+ 0x95,0x98,0x95,0x8E,0x92,0x92,0x91,0x91,0x93,0x95,0x96,0x96,0x92,0x92,0x94,0x95,
+ 0x95,0x98,0x96,0x95,0x96,0x93,0x95,0x01,0x98,0x98,0x98,0x01,0x95,0x96,0x92,0x94,
+ 0x98,0x96,0x98,0x95,0x98,0x95,0x96,0x93,0x96,0x01,0x98,0x01,0x95,0x01,0x98,0x9A,
+ 0x99,0x95,0x95,0x96,0x94,0x95,0x01,0x98,0x95,0x95,0x95,0x98,0x01,0x95,0x93,0x98,
+ 0x98,0x01,0x98,0x94,0x95,0x96,0x98,0x01,0x95,0x95,0x98,0x97,0x96,0x98,0x98,0x96,
+ 0x96,0x95,0x96,0x96,0x94,0x96,0x01,0x96,0x96,0x01,0x01,0x98,0x98,0x94,0x94,0x96,
+ 0x95,0x98,0x99,0x98,0x98,0x96,0x98,0x01,0x98,0x94,0x96,0x98,0x01,0x98,0x01,0x98,
+ 0x01,0x99,0x94,0x99,0x99,0x94,0x98,0x98,0x95,0x95,0x98,0x98,0x98,0x01,0x92,0x94,
+ 0x8E,0x8E,0x96,0x93,0x95,0x96,0x98,0x94,0x95,0x01,0x92,0x01,0x96,0x95,0x98,0x98,
+ 0x98,0x98,0x94,0x98,0x98,0x01,0x98,0x95,0x01,0x96,0x94,0x01,0x96,0x96,0x98,0x98,
+ 0x95,0x01,0x95,0x96,0x01,0x97,0x98,0x93,0x97,0x98,0x98,0x98,0x98,0x98,0x96,0x96,
+ 0x98,0x98,0x98,0x01,0x98,0x98,0x95,0x98,0x98,0x99,0x98,0x98,0x98,0x95,0x96,0x94,
+ 0x96,0x98,0x96,0x95,0x01,0x95,0x92,0x98,0x98,0x96,0x01,0x99,0x99,0x98,0x95,0x95,
+ 0x95,0x01,0x96,0x98,0x98,0x98,0x96,0x98,0x98,0x98,0x99,0x98,0x98,0x01,0x98,0x98,
+ 0x98,0x01,0x01,0x96,0x98,0x95,0x93,0x93,0x96,0x95,0x93,0x96,0x01,0x98,0x94,0x96,
+ 0x98,0x96,0x01,0x92,0x92,0x92,0x96,0x96,0x01,0x98,0x95,0x95,0x98,0x95,0x96,0x98,
+ 0x92,0x94,0x92,0x93,0x92,0x95,0x01,0x95,0x96,0x95,0x98,0x01,0x92,0x93,0x94,0x94,
+ 0x95,0x96,0x98,0x01,0x92,0x95,0x96,0x94,0x98,0x01,0x01,0x98,0x96,0x96,0x95,0x98,
+ 0x95,0x96,0x96,0x92,0x96,0x96,0x93,0x98,0x92,0x92,0x01,0x96,0x95,0x95,0x96,0x8E,
+ 0x92,0x94,0x01,0x95,0x96,0x98,0x94,0x01,0x96,0x95,0x94,0x94,0x96,0x98,0x98,0x96,
+ 0x98,0x96,0x96,0x94,0x01,0x93,0x92,0x93,0x96,0x01,0x98,0x96,0x01,0x93,0x92,0x92,
+ 0x92,0x93,0x92,0x93,0x95,0x8E,0x8E,0x95,0x95,0x98,0x98,0x95,0x95,0x94,0x93,0x92,
+ 0x94,0x95,0x96,0x98,0x01,0x98,0x96,0x99,0x95,0x98,0x98,0x98,0x94,0x98,0x95,0x98,
+ 0x99,0x98,0x98,0x98,0x98,0x01,0x98,0x01,0x98,0x95,0x01,0x98,0x98,0x95,0x98,0x98,
+ 0x98,0x98,0x97,0x95,0x98,0x98,0x01,0x98,0x95,0x98,0x94,0x98,0x93,0x95,0x98,0x95,
+ 0x95,0x98,0x96,0x96,0x98,0x98,0x95,0x98,0x95,0x93,0x01,0x94,0x95,0x98,0x96,0x98,
+ 0x96,0x98,0x98,0x99,0x96,0x98,0x98,0x98,0x01,0x98,0x96,0x98,0x95,0x98,0x9A,0x98,
+ 0x98,0x96,0x98,0x98,0x98,0x98,0x95,0x96,0x95,0x95,0x96,0x95,0x95,0x95,0x94,0x8E,
+ 0x8E,0x92,0x92,0x01,0x95,0x98,0x95,0x01,0x95,0x94,0x96,0x96,0x01,0x95,0x98,0x96,
+ 0x98,0x01,0x98,0x96,0x01,0x94,0x95,0x96,0x98,0x01,0x95,0x95,0x01,0x01,0x98,0x95,
+ 0x98,0x94,0x98,0x98,0x96,0x94,0x95,0x93,0x01,0x98,0x98,0x95,0x94,0x98,0x96,0x98,
+ 0x98,0x98,0x98,0x01,0x96,0x98,0x95,0x01,0x95,0x92,0x96,0x96,0x01,0x94,0x96,0x01,
+ 0x98,0x95,0x98,0x96,0x96,0x01,0x98,0x93,0x96,0x94,0x95,0x98,0x96,0x01,0x98,0x96,
+ 0x99,0x98,0x98,0x98,0x99,0x98,0x94,0x99,0x98,0x98,0x98,0x98,0x01,0x01,0x95,0x95,
+ 0x94,0x94,0x96,0x95,0x95,0x92,0x8E,0x8E,0x92,0x94,0x92,0x93,0x8E,0x8E,0x92,0x8E,
+ 0x92,0x8E,0x92,0x8E,0x94,0x93,0x92,0x95,0x93,0x93,0x98,0x96,0x8E,0x8E,0x8E,0x8D,
+ 0x95,0x98,0x98,0x95,0x98,0x01,0x96,0x95,0x96,0x95,0x96,0x95,0x96,0x98,0x98,0x01,
+ 0x01,0x98,0x96,0x94,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x96,0x98,0x01,0x95,0x95,
+ 0x96,0x98,0x98,0x96,0x96,0x96,0x98,0x01,0x92,0x01,0x95,0x95,0x98,0x01,0x96,0x01,
+ 0x98,0x98,0x01,0x98,0x01,0x94,0x98,0x98,0x98,0x98,0x98,0x94,0x96,0x94,0x98,0x95,
+ 0x01,0x98,0x98,0x93,0x98,0x94,0x94,0x98,0x96,0x95,0x98,0x95,0x95,0x95,0x94,0x92,
+ 0x01,0x93,0x95,0x93,0x94,0x94,0x94,0x96,0x96,0x96,0x94,0x98,0x98,0x94,0x92,0x95,
+ 0x01,0x95,0x98,0x96,0x99,0x94,0x98,0x95,0x98,0x94,0x98,0x95,0x98,0x94,0x98,0x98,
+ 0x96,0x96,0x98,0x95,0x98,0x95,0x98,0x98,0x96,0x98,0x99,0x98,0x98,0x94,0x94,0x94,
+ 0x96,0x93,0x96,0x01,0x95,0x01,0x96,0x01,0x95,0x93,0x95,0x01,0x94,0x95,0x94,0x93,
+ 0x94,0x96,0x95,0x94,0x94,0x95,0x01,0x95,0x95,0x98,0x98,0x94,0x98,0x95,0x01,0x99,
+ 0x95,0x01,0x01,0x98,0x98,0x01,0x98,0x01,0x99,0x01,0x96,0x98,0x98,0x98,0x98,0x98,
+ 0x98,0x98,0x94,0x98,0x95,0x01,0x94,0x93,0x92,0x95,0x93,0x8E,0x95,0x93,0x95,0x95,
+ 0x95,0x93,0x94,0x96,0x98,0x98,0x95,0x01,0x96,0x01,0x98,0x95,0x96,0x98,0x96,0x95,
+ 0x98,0x01,0x95,0x01,0x96,0x98,0x96,0x95,0x98,0x98,0x98,0x98,0x93,0x95,0x95,0x98,
+ 0x95,0x98,0x95,0x98,0x95,0x96,0x95,0x95,0x96,0x01,0x96,0x95,0x98,0x98,0x96,0x95,
+ 0x96,0x98,0x01,0x98,0x95,0x96,0x95,0x98,0x01,0x01,0x98,0x99,0x01,0x96,0x98,0x96,
+ 0x98,0x98,0x99,0x98,0x98,0x99,0x95,0x99,0x95,0x99,0x98,0x99,0x98,0x99,0x98,0x98,
+ 0x98,0x98,0x99,0x94,0x01,0x94,0x01,0x95,0x97,0x98,0x94,0x94,0x98,0x01,0x93,0x94,
+ 0x93,0x96,0x92,0x94,0x92,0x8E,0x96,0x95,0x98,0x93,0x94,0x01,0x92,0x92,0x93,0x8D,
+ 0x94,0x96,0x96,0x8E,0x92,0x8E,0x94,0x92,0x94,0x8E,0x94,0x92,0x94,0x95,0x94,0x98,
+ 0x92,0x01,0x94,0x98,0x96,0x98,0x93,0x98,0x98,0x98,0x94,0x96,0x95,0x98,0x98,0x96,
+ 0x96,0x98,0x98,0x01,0x96,0x95,0x94,0x96,0x98,0x98,0x01,0x01,0x96,0x93,0x96,0x95,
+ 0x95,0x95,0x98,0x98,0x98,0x98,0x01,0x96,0x95,0x96,0x01,0x98,0x98,0x96,0x98,0x98,
+ 0x96,0x98,0x96,0x01,0x98,0x98,0x01,0x98,0x98,0x96,0x95,0x98,0x95,0x98,0x01,0x98,
+ 0x92,0x96,0x96,0x98,0x96,0x96,0x95,0x97,0x98,0x96,0x95,0x01,0x01,0x98,0x95,0x96,
+ 0x01,0x01,0x96,0x95,0x95,0x94,0x01,0x01,0x98,0x95,0x01,0x96,0x98,0x98,0x93,0x01,
+ 0x01,0x95,0x96,0x98,0x96,0x01,0x98,0x96,0x96,0x94,0x98,0x95,0x01,0x94,0x94,0x98,
+ 0x93,0x95,0x98,0x01,0x98,0x98,0x98,0x98,0x96,0x01,0x01,0x95,0x98,0x96,0x95,0x95,
+ 0x01,0x98,0x92,0x01,0x95,0x96,0x98,0x94,0x98,0x98,0x94,0x01,0x95,0x94,0x95,0x98,
+ 0x96,0x95,0x95,0x95,0x95,0x95,0x96,0x98,0x01,0x94,0x96,0x98,0x9A,0x01,0x99,0x98,
+ 0x98,0x01,0x99,0x98,0x01,0x98,0x01,0x01,0x98,0x98,0x98,0x98,0x98,0x95,0x98,0x95,
+ 0x96,0x95,0x95,0x95,0x98,0x94,0x93,0x93,0x01,0x92,0x92,0x98,0x95,0x93,0x94,0x92,
+ 0x94,0x98,0x95,0x98,0x95,0x95,0x96,0x94,0x96,0x96,0x91,0x98,0x96,0x95,0x98,0x98,
+ 0x94,0x95,0x94,0x96,0x98,0x95,0x95,0x01,0x95,0x94,0x01,0x98,0x96,0x98,0x98,0x96,
+ 0x94,0x95,0x98,0x98,0x96,0x92,0x98,0x96,0x95,0x95,0x98,0x95,0x98,0x94,0x95,0x98,
+ 0x98,0x98,0x95,0x95,0x98,0x01,0x96,0x98,0x98,0x93,0x98,0x98,0x96,0x98,0x98,0x96,
+ 0x98,0x98,0x01,0x01,0x98,0x98,0x98,0x95,0x95,0x01,0x98,0x01,0x98,0x01,0x98,0x98,
+ 0x98,0x98,0x01,0x01,0x95,0x96,0x96,0x98,0x98,0x98,0x93,0x98,0x93,0x96,0x95,0x95,
+ 0x94,0x8E,0x8E,0x94,0x92,0x94,0x95,0x95,0x96,0x93,0x01,0x8E,0x95,0x94,0x8E,0x95,
+ 0x95,0x92,0x8E,0x95,0x96,0x94,0x92,0x92,0x92,0x98,0x95,0x94,0x94,0x96,0x98,0x95,
+ 0x92,0x01,0x98,0x98,0x98,0x94,0x95,0x95,0x01,0x95,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x96,0x98,0x95,0x96,
+ 0x95,0x94,0x01,0x01,0x93,0x93,0x96,0x96,0x93,0x9A,0x98,0x95,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x97,0x96,0x95,0x96,0x95,0x98,0x96,0x94,0x94,0x01,0x94,
+ 0x96,0x95,0x98,0x96,0x95,0x98,0x96,0x92,0x95,0x95,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x96,0x92,0x95,0x98,
+ 0x96,0x92,0x94,0x94,0x94,0x98,0x98,0x01,0x99,0x95,0x98,0x98,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x94,0x98,0x98,0x98,0x01,0x01,0x01,0x98,0x94,0x94,0x98,
+ 0x98,0x96,0x95,0x96,0x95,0x98,0x92,0x95,0x95,0x94,0x9F,0x9F,0x9D,0x9D,0x95,0x95,
+ 0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x9D,0x9D,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,
+ 0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x9D,0x9D,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,
+ 0x9D,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x9D,
+ 0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,
+ 0x95,0x9D,0x9D,0x9D,0x95,0x95,0x9D,0x9D,0x95,0x95,0x9D,0x9D,0x93,0x94,0x95,0x98,
+ 0x01,0x98,0x98,0x96,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x97,0x9F,0x9F,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x91,0x98,0x01,0x01,0x98,0x94,0x96,0x94,0x98,0x01,0x95,
+ 0x91,0x01,0x95,0x92,0x93,0x94,0x95,0x92,0x92,0x93,0x9F,0x9F,0x9D,0x95,0x10,0x10,
+ 0x10,0x10,0x95,0x9D,0x95,0x10,0x10,0x95,0x95,0x10,0x10,0x95,0x9D,0x95,0x10,0x10,
+ 0x10,0x10,0x95,0x9D,0x95,0x10,0x10,0x95,0x95,0x10,0x10,0x95,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x95,0x10,0x10,0x10,0x10,0x95,0x9D,0x95,0x10,0x10,0x10,0x10,0x10,0x95,0x9D,
+ 0x95,0x10,0x10,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x95,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x10,0x10,0x95,0x9D,0x9D,0x9D,0x95,0x10,0x10,0x95,
+ 0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x95,0x95,0x10,0x10,0x95,0x9D,0x9D,0x9D,0x95,
+ 0x10,0x10,0x95,0x9D,0x95,0x10,0x10,0x10,0x10,0x95,0x9D,0x95,0x10,0x10,0x10,0x10,
+ 0x10,0x95,0x9D,0x95,0x10,0x10,0x95,0x95,0x10,0x10,0x95,0x9D,0x93,0x95,0x98,0x98,
+ 0x96,0x99,0x98,0x98,0x01,0x96,0x99,0x98,0x94,0x96,0x98,0x96,0x9F,0x9F,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,
+ 0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,
+ 0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x01,0x98,0x01,0x92,0x95,0x93,0x95,0x98,0x96,0x93,
+ 0x99,0x95,0x96,0x98,0x96,0x96,0x98,0x01,0x92,0x92,0x9F,0x9F,0x95,0x10,0x11,0x10,
+ 0x11,0x10,0x11,0x95,0x95,0x10,0x11,0x95,0x95,0x10,0x11,0x95,0x95,0x10,0x11,0x10,
+ 0x11,0x10,0x11,0x95,0x95,0x10,0x11,0x95,0x95,0x10,0x11,0x95,0x9D,0x9D,0x9D,0x9D,
+ 0x95,0x10,0x11,0x10,0x11,0x10,0x11,0x95,0x95,0x10,0x11,0x10,0x11,0x10,0x11,0x95,
+ 0x95,0x10,0x11,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x10,0x11,0x10,0x11,0x10,0x11,0x95,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x11,0x10,0x11,0x95,0x9D,0x95,0x11,0x10,0x11,0x95,
+ 0x95,0x10,0x11,0x10,0x11,0x10,0x11,0x95,0x95,0x10,0x11,0x10,0x95,0x9D,0x95,0x10,
+ 0x11,0x10,0x95,0x95,0x11,0x10,0x11,0x10,0x11,0x10,0x95,0x95,0x11,0x10,0x11,0x10,
+ 0x11,0x10,0x95,0x95,0x11,0x10,0x95,0x95,0x11,0x10,0x95,0x9D,0x93,0x98,0x98,0x98,
+ 0x98,0x01,0x01,0x98,0x98,0x98,0x94,0x98,0x96,0x96,0x98,0x95,0x9F,0x9F,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x10,0x10,0x10,0x95,0x9D,0x9D,0x9D,0x95,
+ 0x10,0x10,0x10,0x95,0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x95,0x95,0x10,0x10,
+ 0x10,0x95,0x9D,0x95,0x10,0x10,0x10,0x95,0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
+ 0x95,0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x96,0x98,0x94,0x93,0x98,0x98,0x98,0x95,0x95,0x8E,
+ 0x01,0x93,0x01,0x98,0x93,0x94,0x94,0x94,0x95,0x8E,0x9F,0x9F,0x95,0x12,0x12,0x95,
+ 0x95,0x12,0x12,0x95,0x95,0x12,0x12,0x95,0x95,0x12,0x12,0x95,0x95,0x12,0x12,0x95,
+ 0x95,0x12,0x12,0x95,0x95,0x12,0x12,0x95,0x95,0x12,0x12,0x95,0x9D,0x9D,0x9D,0x9D,
+ 0x95,0x12,0x12,0x95,0x95,0x12,0x12,0x95,0x95,0x12,0x12,0x95,0x95,0x12,0x12,0x95,
+ 0x95,0x12,0x12,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x12,0x12,0x95,0x95,0x95,0x95,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x12,0x12,0x11,0x12,0x95,0x12,0x11,0x12,0x12,0x95,
+ 0x95,0x12,0x12,0x95,0x95,0x95,0x95,0x9D,0x95,0x12,0x12,0x12,0x11,0x95,0x12,0x12,
+ 0x11,0x12,0x95,0x95,0x11,0x12,0x95,0x95,0x11,0x12,0x95,0x95,0x11,0x12,0x95,0x95,
+ 0x11,0x12,0x95,0x95,0x11,0x12,0x95,0x95,0x11,0x12,0x95,0x9D,0x93,0x95,0x98,0x01,
+ 0x01,0x01,0x01,0x96,0x98,0x96,0x95,0x01,0x96,0x96,0x93,0x92,0x9F,0x9F,0x9D,0x9D,
+ 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
+ 0x90,0x90,0x91,0x94,0x9F,0x9D,0x9D,0x95,0x10,0x11,0x10,0x11,0x95,0x9D,0x95,0x11,
+ 0x10,0x11,0x10,0x95,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x95,0x10,0x11,
+ 0x10,0x95,0x9D,0x95,0x10,0x11,0x10,0x95,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,
+ 0x10,0x95,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x94,0x95,0x94,0x98,0x93,0x92,0x95,0x95,0x01,
+ 0x98,0x92,0x94,0x8E,0x92,0x92,0x93,0x93,0x93,0x91,0x9F,0x9F,0x95,0x12,0x13,0x12,
+ 0x13,0x12,0x13,0x95,0x95,0x12,0x13,0x95,0x95,0x12,0x13,0x95,0x95,0x12,0x13,0x12,
+ 0x13,0x12,0x13,0x95,0x95,0x12,0x13,0x95,0x95,0x12,0x13,0x95,0x9D,0x9D,0x9D,0x9D,
+ 0x95,0x12,0x13,0x12,0x13,0x12,0x13,0x95,0x95,0x12,0x13,0x12,0x13,0x12,0x95,0x9D,
+ 0x95,0x12,0x13,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x12,0x13,0x12,0x13,0x12,0x95,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x13,0x12,0x13,0x12,0x13,0x12,0x13,0x12,0x13,0x95,
+ 0x95,0x12,0x13,0x12,0x13,0x12,0x95,0x9D,0x95,0x12,0x13,0x12,0x13,0x12,0x13,0x12,
+ 0x13,0x12,0x95,0x95,0x13,0x12,0x95,0x95,0x13,0x12,0x95,0x95,0x13,0x12,0x13,0x12,
+ 0x13,0x12,0x95,0x95,0x13,0x12,0x13,0x12,0x13,0x12,0x95,0x9D,0x93,0x96,0x96,0x96,
+ 0x95,0x98,0x96,0x96,0x95,0x98,0x98,0x95,0x01,0x94,0x95,0x95,0x9F,0x9F,0x9D,0x9D,
+ 0x90,0x90,0x93,0x96,0x98,0x98,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x9D,0x9F,0x9D,0x9D,0x95,0x12,0x12,0x12,0x11,0x12,0x95,0x12,0x11,
+ 0x12,0x12,0x12,0x95,0x12,0x12,0x12,0x95,0x95,0x95,0x12,0x11,0x12,0x95,0x12,0x11,
+ 0x12,0x95,0x9D,0x95,0x12,0x12,0x12,0x95,0x12,0x12,0x12,0x95,0x95,0x95,0x12,0x11,
+ 0x12,0x95,0x12,0x11,0x12,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x94,0x98,0x93,0x92,0x94,0x01,0x8E,0x8E,0x93,
+ 0x8D,0x92,0x8E,0x8E,0x94,0x92,0x93,0x94,0x92,0x94,0x9F,0x9F,0x95,0x13,0x13,0x13,
+ 0x13,0x13,0x13,0x95,0x95,0x13,0x13,0x95,0x95,0x13,0x13,0x95,0x95,0x13,0x13,0x13,
+ 0x13,0x13,0x13,0x95,0x95,0x13,0x13,0x95,0x95,0x13,0x13,0x95,0x9D,0x9D,0x9D,0x9D,
+ 0x95,0x13,0x13,0x14,0x13,0x13,0x13,0x95,0x95,0x13,0x13,0x14,0x13,0x13,0x13,0x95,
+ 0x95,0x13,0x13,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x13,0x13,0x14,0x13,0x13,0x95,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x13,0x13,0x95,0x13,0x13,0x14,0x95,0x13,0x13,0x95,
+ 0x95,0x13,0x13,0x14,0x13,0x13,0x95,0x9D,0x95,0x13,0x13,0x95,0x13,0x13,0x13,0x95,
+ 0x13,0x13,0x95,0x95,0x13,0x13,0x95,0x95,0x13,0x13,0x95,0x95,0x13,0x13,0x13,0x13,
+ 0x13,0x95,0x9D,0x9D,0x95,0x13,0x13,0x13,0x13,0x95,0x9D,0x9D,0x93,0x92,0x93,0x94,
+ 0x95,0x01,0x98,0x96,0x95,0x93,0x01,0x96,0x94,0x92,0x8E,0x95,0x9F,0x9F,0x9D,0x9D,
+ 0x90,0x93,0x96,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x99,0x99,0x9D,0x9F,0x9D,0x9D,0x95,0x12,0x13,0x12,0x13,0x12,0x13,0x12,0x13,
+ 0x12,0x13,0x12,0x95,0x12,0x13,0x12,0x95,0x9D,0x95,0x12,0x13,0x12,0x95,0x12,0x13,
+ 0x12,0x95,0x9D,0x95,0x12,0x13,0x12,0x95,0x12,0x13,0x12,0x95,0x95,0x95,0x95,0x95,
+ 0x95,0x95,0x12,0x13,0x12,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x01,0x93,0x92,0x01,0x95,0x95,0x01,0x92,0x92,0x93,
+ 0x92,0x8E,0x96,0x91,0x94,0x93,0x98,0x93,0x93,0x92,0x9F,0x9F,0x95,0x14,0x14,0x95,
+ 0x95,0x14,0x15,0x95,0x95,0x14,0x14,0x14,0x15,0x14,0x15,0x95,0x95,0x14,0x14,0x95,
+ 0x95,0x14,0x15,0x95,0x95,0x14,0x14,0x95,0x95,0x14,0x15,0x95,0x95,0x95,0x95,0x9D,
+ 0x95,0x14,0x15,0x95,0x95,0x14,0x14,0x95,0x95,0x14,0x15,0x95,0x95,0x14,0x14,0x95,
+ 0x95,0x14,0x15,0x95,0x95,0x95,0x95,0x9D,0x95,0x14,0x15,0x95,0x95,0x95,0x95,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x14,0x14,0x95,0x95,0x15,0x95,0x95,0x14,0x14,0x95,
+ 0x95,0x14,0x15,0x95,0x95,0x95,0x95,0x9D,0x95,0x14,0x15,0x95,0x95,0x14,0x95,0x95,
+ 0x15,0x14,0x95,0x95,0x15,0x14,0x95,0x95,0x15,0x14,0x95,0x95,0x15,0x14,0x95,0x95,
+ 0x15,0x14,0x95,0x9D,0x9D,0x95,0x14,0x14,0x95,0x9D,0x9D,0x9D,0x93,0x92,0x95,0x93,
+ 0x92,0x92,0x92,0x8E,0x96,0x8E,0x94,0x8E,0x93,0x96,0x98,0x92,0x9F,0x9F,0x9D,0x9D,
+ 0x90,0x96,0x98,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x95,0x13,0x13,0x13,0x95,0x13,0x13,0x14,0x95,
+ 0x13,0x13,0x13,0x95,0x13,0x13,0x14,0x95,0x9D,0x95,0x13,0x13,0x13,0x95,0x14,0x13,
+ 0x13,0x95,0x9D,0x95,0x13,0x13,0x14,0x95,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x13,
+ 0x95,0x95,0x13,0x13,0x13,0x13,0x14,0x13,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x94,0x98,0x93,0x94,0x01,0x92,0x8E,0x92,0x92,0x96,
+ 0x92,0x95,0x91,0x95,0x92,0x94,0x93,0x94,0x94,0x01,0x9F,0x9F,0x95,0x15,0x15,0x95,
+ 0x95,0x15,0x15,0x95,0x9D,0x95,0x15,0x15,0x15,0x15,0x95,0x9D,0x95,0x15,0x15,0x95,
+ 0x95,0x15,0x15,0x95,0x95,0x15,0x15,0x95,0x95,0x15,0x15,0x15,0x15,0x15,0x15,0x95,
+ 0x95,0x15,0x15,0x95,0x95,0x15,0x15,0x95,0x95,0x15,0x15,0x15,0x15,0x15,0x15,0x95,
+ 0x95,0x15,0x15,0x15,0x15,0x15,0x15,0x95,0x95,0x15,0x15,0x15,0x15,0x15,0x15,0x95,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x15,0x15,0x95,0x9D,0x95,0x9D,0x95,0x15,0x15,0x95,
+ 0x95,0x15,0x15,0x15,0x15,0x15,0x15,0x95,0x95,0x15,0x15,0x95,0x9D,0x95,0x9D,0x95,
+ 0x15,0x15,0x95,0x95,0x15,0x15,0x15,0x15,0x15,0x15,0x95,0x95,0x15,0x15,0x95,0x95,
+ 0x15,0x15,0x95,0x9D,0x9D,0x95,0x15,0x15,0x95,0x9D,0x9D,0x9D,0x93,0x94,0x96,0x98,
+ 0x98,0x01,0x95,0x8E,0x94,0x92,0x94,0x8E,0x93,0x95,0x98,0x95,0x9F,0x9F,0x9D,0x9D,
+ 0x90,0x98,0x98,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x95,0x14,0x14,0x14,0x95,0x95,0x15,0x95,0x95,
+ 0x14,0x14,0x14,0x95,0x14,0x15,0x14,0x95,0x9D,0x95,0x14,0x15,0x14,0x95,0x14,0x15,
+ 0x14,0x95,0x9D,0x95,0x14,0x15,0x14,0x95,0x95,0x14,0x14,0x15,0x14,0x15,0x14,0x15,
+ 0x14,0x95,0x14,0x15,0x14,0x15,0x14,0x15,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x93,0x01,0x95,0x01,0x8E,0x96,0x94,0x93,0x01,0x01,
+ 0x95,0x93,0x92,0x95,0x92,0x95,0x93,0x95,0x95,0x98,0x9F,0x9F,0x95,0x16,0x16,0x95,
+ 0x95,0x16,0x16,0x95,0x9D,0x9D,0x95,0x15,0x16,0x95,0x9D,0x9D,0x95,0x16,0x16,0x95,
+ 0x95,0x16,0x16,0x95,0x95,0x16,0x16,0x95,0x95,0x16,0x16,0x15,0x16,0x16,0x16,0x95,
+ 0x95,0x16,0x16,0x95,0x95,0x16,0x16,0x95,0x95,0x16,0x16,0x15,0x16,0x16,0x95,0x9D,
+ 0x95,0x16,0x16,0x15,0x16,0x16,0x16,0x95,0x95,0x16,0x16,0x15,0x16,0x16,0x16,0x95,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x16,0x15,0x95,0x9D,0x9D,0x9D,0x95,0x16,0x16,0x95,
+ 0x95,0x16,0x16,0x15,0x16,0x16,0x16,0x95,0x95,0x16,0x16,0x95,0x9D,0x9D,0x9D,0x95,
+ 0x16,0x16,0x95,0x9D,0x95,0x16,0x16,0x15,0x16,0x95,0x9D,0x95,0x16,0x16,0x95,0x95,
+ 0x16,0x16,0x95,0x9D,0x9D,0x95,0x16,0x15,0x95,0x9D,0x9D,0x9D,0x93,0x92,0x95,0x94,
+ 0x96,0x01,0x94,0x91,0x94,0x95,0x92,0x92,0x95,0x96,0x93,0x93,0x9F,0x9F,0x9D,0x9D,
+ 0x90,0x98,0x99,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x95,0x15,0x15,0x15,0x95,0x9D,0x95,0x9D,0x95,
+ 0x15,0x15,0x15,0x95,0x15,0x15,0x15,0x95,0x9D,0x95,0x15,0x15,0x15,0x95,0x15,0x15,
+ 0x15,0x95,0x9D,0x95,0x15,0x15,0x15,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x15,0x15,
+ 0x15,0x95,0x15,0x15,0x15,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x94,0x8E,0x93,0x95,0x93,0x96,0x94,0x98,0x98,0x01,
+ 0x92,0x95,0x94,0x96,0x96,0x98,0x01,0x98,0x01,0x98,0x9F,0x9F,0x9D,0x95,0x95,0x9D,
+ 0x9D,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x9D,
+ 0x9D,0x95,0x95,0x9D,0x9D,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,
+ 0x9D,0x95,0x95,0x9D,0x9D,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,
+ 0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x9D,
+ 0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x9D,0x9D,
+ 0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x93,0x95,0x94,0x96,
+ 0x93,0x95,0x92,0x95,0x93,0x92,0x96,0x98,0x93,0x8E,0x95,0x92,0x9F,0x9F,0x9D,0x9D,
+ 0x91,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x95,0x16,0x16,0x15,0x95,0x9D,0x9D,0x9D,0x95,
+ 0x16,0x16,0x15,0x95,0x16,0x16,0x15,0x95,0x95,0x95,0x15,0x16,0x16,0x95,0x15,0x16,
+ 0x16,0x95,0x95,0x95,0x16,0x16,0x15,0x95,0x16,0x16,0x15,0x95,0x95,0x95,0x15,0x16,
+ 0x16,0x95,0x15,0x16,0x16,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x8E,0x8E,0x98,0x96,0x96,0x95,0x98,0x98,0x01,0x94,
+ 0x95,0x96,0x96,0x95,0x01,0x01,0x01,0x95,0x95,0x96,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x93,0x92,0x95,0x93,
+ 0x96,0x95,0x98,0x95,0x98,0x96,0x98,0x98,0x94,0x95,0x95,0x92,0x9F,0x9F,0x9D,0x9D,
+ 0x94,0x9B,0x9D,0x9D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9D,0x95,0x17,0x17,0x17,0x95,0x9D,0x9D,0x9D,0x95,
+ 0x17,0x17,0x17,0x95,0x17,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x95,0x17,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x16,0x17,0x95,0x17,0x17,0x17,0x17,0x17,0x16,0x17,0x17,
+ 0x17,0x95,0x17,0x17,0x17,0x16,0x17,0x17,0x17,0x17,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x94,0x94,0x98,0x97,0x95,0x98,0x01,0x98,0x94,0x96,
+ 0x98,0x98,0x96,0x95,0x95,0x98,0x96,0x95,0x95,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x93,0x96,0x92,0x92,
+ 0x93,0x95,0x96,0x95,0x01,0x95,0x98,0x94,0x92,0x96,0x93,0x93,0x9F,0x9F,0x9D,0x9D,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9D,0x95,0x17,0x18,0x17,0x95,0x9D,0x9D,0x9D,0x95,
+ 0x17,0x18,0x17,0x95,0x95,0x18,0x17,0x18,0x17,0x18,0x17,0x18,0x95,0x9D,0x95,0x18,
+ 0x17,0x18,0x17,0x18,0x17,0x18,0x95,0x9D,0x95,0x18,0x17,0x18,0x17,0x18,0x17,0x18,
+ 0x95,0x95,0x17,0x18,0x17,0x18,0x17,0x18,0x17,0x18,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x01,0x99,0x98,0x99,0x98,0x98,0x95,0x95,0x96,
+ 0x98,0x98,0x01,0x95,0x98,0x01,0x98,0x94,0x96,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x93,0x94,0x96,0x94,
+ 0x96,0x98,0x01,0x92,0x96,0x95,0x95,0x92,0x94,0x95,0x93,0x92,0x9F,0x9F,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,
+ 0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,
+ 0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x98,0x98,0x98,0x95,0x98,0x99,0x99,0x98,0x95,
+ 0x98,0x95,0x96,0x95,0x95,0x96,0x96,0x96,0x98,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x9D,0x9D,
+ 0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
+ 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,
+ 0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x93,0x91,0x94,0x95,
+ 0x01,0x94,0x96,0x95,0x01,0x91,0x94,0x8E,0x94,0x92,0x95,0x95,0x9F,0x9F,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x95,0x98,0x95,0x95,0x96,0x95,0x98,0x99,0x95,
+ 0x9B,0x01,0x01,0x95,0x95,0x94,0x93,0x96,0x01,0x94,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,
+ 0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
+ 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,
+ 0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x93,0x94,0x94,0x95,
+ 0x95,0x92,0x8E,0x8E,0x8E,0x92,0x92,0x96,0x96,0x94,0x93,0x93,0x9F,0x9F,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x96,0x01,0x95,0x98,0x94,0x95,0x01,0x98,0x94,0x9B,
+ 0x98,0x97,0x94,0x95,0x01,0x95,0x95,0x01,0x95,0x92,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x98,0x17,0x17,0x17,0x98,0x9D,
+ 0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x98,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x93,0x94,0x92,0x93,
+ 0x92,0x92,0x01,0x94,0x95,0x96,0x95,0x94,0x01,0x95,0x95,0x94,0x99,0x95,0x95,0x95,
+ 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x94,0x94,0x94,0x94,0x94,
+ 0x94,0x94,0x94,0x94,0x94,0x94,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,
+ 0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x92,0x92,0x92,0x92,
+ 0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,
+ 0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,
+ 0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,
+ 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
+ 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
+ 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
+ 0x90,0x90,0x90,0x90,0x90,0x90,0x95,0x95,0x97,0x01,0x98,0x98,0x98,0x98,0x01,0x98,
+ 0x95,0x01,0x01,0x95,0x95,0x93,0x96,0x93,0x01,0x94,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x98,0x9D,
+ 0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,
+ 0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x91,0x98,0x94,0x95,
+ 0x95,0x98,0x94,0x94,0x94,0x95,0x92,0x96,0x95,0x94,0x96,0x93,0x92,0x95,0x01,0x94,
+ 0x94,0x98,0x93,0x98,0x93,0x93,0x01,0x96,0x95,0x95,0x95,0x98,0x94,0x96,0x91,0x95,
+ 0x94,0x92,0x96,0x94,0x94,0x95,0x01,0x01,0x96,0x95,0x98,0x01,0x95,0x98,0x01,0x96,
+ 0x98,0x99,0x99,0x96,0x99,0x01,0x98,0x95,0x01,0x01,0x98,0x95,0x98,0x98,0x98,0x95,
+ 0x98,0x98,0x94,0x98,0x01,0x01,0x96,0x94,0x95,0x95,0x96,0x96,0x98,0x98,0x98,0x95,
+ 0x96,0x98,0x96,0x95,0x96,0x95,0x98,0x96,0x98,0x99,0x96,0x95,0x98,0x98,0x98,0x96,
+ 0x95,0x99,0x01,0x96,0x01,0x94,0x01,0x95,0x95,0x98,0x01,0x95,0x01,0x96,0x98,0x98,
+ 0x95,0x98,0x96,0x01,0x99,0x98,0x96,0x95,0x98,0x98,0x95,0x98,0x9A,0x95,0x98,0x98,
+ 0x96,0x01,0x93,0x8E,0x94,0x92,0x94,0x92,0x95,0x92,0x95,0x95,0x93,0x92,0x92,0x92,
+ 0x96,0x95,0x98,0x96,0x98,0x01,0x01,0x98,0x99,0x98,0x95,0x95,0x98,0x98,0x98,0x98,
+ 0x96,0x99,0x93,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,
+ 0x93,0x98,0x98,0x95,0x93,0x95,0x93,0x93,0x93,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x17,0x17,0x98,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,
+ 0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x91,0x93,0x95,0x98,
+ 0x93,0x96,0x94,0x96,0x95,0x98,0x95,0x95,0x96,0x92,0x93,0x96,0x95,0x93,0x95,0x95,
+ 0x94,0x95,0x93,0x95,0x96,0x94,0x96,0x94,0x98,0x95,0x94,0x01,0x92,0x98,0x93,0x98,
+ 0x01,0x94,0x01,0x98,0x98,0x98,0x96,0x98,0x96,0x98,0x94,0x98,0x98,0x99,0x98,0x98,
+ 0x98,0x98,0x98,0x98,0x98,0x98,0x01,0x95,0x96,0x98,0x01,0x98,0x96,0x98,0x98,0x01,
+ 0x95,0x96,0x95,0x96,0x95,0x96,0x94,0x98,0x98,0x96,0x01,0x98,0x94,0x95,0x95,0x98,
+ 0x01,0x98,0x98,0x01,0x98,0x96,0x98,0x95,0x96,0x98,0x98,0x98,0x98,0x01,0x98,0x98,
+ 0x95,0x96,0x01,0x94,0x95,0x01,0x92,0x92,0x8E,0x98,0x96,0x96,0x98,0x95,0x95,0x01,
+ 0x95,0x01,0x93,0x98,0x92,0x92,0x97,0x98,0x95,0x95,0x98,0x01,0x01,0x96,0x98,0x98,
+ 0x98,0x95,0x95,0x95,0x94,0x94,0x95,0x93,0x94,0x93,0x95,0x95,0x93,0x94,0x91,0x01,
+ 0x96,0x95,0x98,0x95,0x96,0x98,0x01,0x01,0x96,0x99,0x01,0x98,0x99,0x96,0x99,0x98,
+ 0x95,0x99,0x98,0x98,0x98,0x96,0x9A,0x9A,0x98,0x98,0x98,0x98,0x98,0x98,0x99,0x9D,
+ 0x92,0x95,0x92,0x92,0x95,0x96,0x95,0x01,0x95,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,
+ 0x17,0x17,0x98,0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,
+ 0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x91,0x96,0x94,0x95,
+ 0x94,0x93,0x96,0x94,0x94,0x95,0x96,0x92,0x01,0x92,0x96,0x94,0x98,0x94,0x01,0x94,
+ 0x95,0x98,0x95,0x96,0x96,0x95,0x98,0x01,0x95,0x94,0x01,0x95,0x95,0x93,0x95,0x98,
+ 0x01,0x94,0x01,0x98,0x94,0x98,0x99,0x96,0x98,0x01,0x99,0x95,0x9A,0x96,0x98,0x98,
+ 0x98,0x01,0x94,0x98,0x98,0x98,0x93,0x95,0x98,0x94,0x96,0x96,0x95,0x98,0x92,0x96,
+ 0x95,0x98,0x01,0x95,0x01,0x98,0x98,0x98,0x96,0x98,0x96,0x98,0x92,0x94,0x96,0x98,
+ 0x96,0x96,0x98,0x96,0x98,0x96,0x96,0x95,0x01,0x95,0x94,0x96,0x98,0x96,0x95,0x98,
+ 0x94,0x93,0x8E,0x94,0x8E,0x8E,0x93,0x93,0x92,0x98,0x95,0x98,0x01,0x01,0x95,0x98,
+ 0x96,0x98,0x94,0x96,0x95,0x98,0x01,0x98,0x98,0x01,0x97,0x98,0x98,0x95,0x98,0x98,
+ 0x01,0x95,0x95,0x95,0x01,0x95,0x94,0x8E,0x92,0x93,0x92,0x95,0x93,0x95,0x98,0x98,
+ 0x98,0x95,0x98,0x95,0x98,0x98,0x01,0x98,0x98,0x98,0x95,0x98,0x98,0x96,0x98,0x96,
+ 0x98,0x95,0x95,0x98,0x98,0x98,0x94,0x95,0x01,0x98,0x98,0x9A,0x98,0x98,0x98,0x98,
+ 0x01,0x93,0x93,0x93,0x95,0x01,0x94,0x93,0x94,0x91,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x98,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,
+ 0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
+ 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,
+ 0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x91,0x93,0x92,0x93,
+ 0x01,0x95,0x96,0x98,0x94,0x95,0x93,0x96,0x98,0x98,0x01,0x95,0x98,0x98,0x95,0x95,
+ 0x98,0x95,0x94,0x93,0x98,0x01,0x93,0x93,0x96,0x92,0x95,0x95,0x96,0x95,0x96,0x98,
+ 0x98,0x95,0x96,0x98,0x98,0x98,0x98,0x98,0x96,0x01,0x98,0x98,0x98,0x95,0x95,0x94,
+ 0x96,0x98,0x01,0x95,0x98,0x01,0x96,0x98,0x01,0x96,0x98,0x94,0x98,0x98,0x96,0x95,
+ 0x01,0x98,0x95,0x01,0x98,0x01,0x98,0x98,0x98,0x01,0x98,0x98,0x94,0x96,0x96,0x94,
+ 0x98,0x01,0x96,0x95,0x96,0x95,0x98,0x95,0x96,0x94,0x95,0x96,0x01,0x96,0x95,0x96,
+ 0x98,0x8E,0x8E,0x92,0x95,0x93,0x94,0x98,0x93,0x95,0x01,0x95,0x98,0x96,0x95,0x95,
+ 0x01,0x94,0x96,0x94,0x96,0x98,0x95,0x95,0x96,0x01,0x96,0x98,0x96,0x95,0x94,0x95,
+ 0x95,0x92,0x8E,0x8E,0x92,0x94,0x98,0x98,0x96,0x96,0x01,0x95,0x94,0x98,0x99,0x98,
+ 0x98,0x98,0x96,0x98,0x01,0x99,0x98,0x98,0x98,0x98,0x98,0x01,0x98,0x9A,0x9A,0x98,
+ 0x96,0x95,0x94,0x98,0x9A,0x96,0x98,0x95,0x9A,0x9A,0x98,0x98,0x98,0x98,0x94,0x92,
+ 0x91,0x94,0x92,0x93,0x95,0x93,0x92,0x95,0x93,0x92,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,
+ 0x98,0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,
+ 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,
+ 0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
+ 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,
+ 0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,
+ 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x91,0x94,0x96,0x94,
+ 0x95,0x95,0x95,0x98,0x93,0x98,0x96,0x96,0x93,0x93,0x95,0x98,0x96,0x94,0x96,0x96,
+ 0x93,0x96,0x93,0x95,0x94,0x91,0x92,0x92,0x93,0x98,0x92,0x96,0x01,0x98,0x94,0x98,
+ 0x01,0x95,0x01,0x95,0x95,0x01,0x96,0x01,0x98,0x01,0x98,0x96,0x97,0x98,0x95,0x94,
+ 0x95,0x96,0x95,0x96,0x98,0x95,0x92,0x95,0x98,0x95,0x96,0x95,0x94,0x93,0x95,0x95,
+ 0x95,0x95,0x96,0x96,0x98,0x95,0x96,0x01,0x96,0x93,0x98,0x95,0x98,0x01,0x95,0x96,
+ 0x96,0x96,0x94,0x96,0x96,0x96,0x96,0x95,0x98,0x92,0x96,0x96,0x01,0x98,0x01,0x96,
+ 0x94,0x95,0x8E,0x98,0x95,0x95,0x95,0x94,0x95,0x98,0x98,0x95,0x95,0x01,0x98,0x94,
+ 0x96,0x96,0x98,0x96,0x95,0x98,0x01,0x95,0x94,0x95,0x96,0x94,0x98,0x94,0x95,0x8E,
+ 0x8E,0x8E,0x94,0x95,0x01,0x95,0x96,0x95,0x95,0x94,0x98,0x01,0x99,0x98,0x98,0x98,
+ 0x9A,0x99,0x9A,0x9A,0x98,0x98,0x94,0x98,0x98,0x01,0x95,0x9A,0x95,0x98,0x9A,0x01,
+ 0x95,0x96,0x01,0x9A,0x98,0x98,0x9A,0x96,0x98,0x98,0x99,0x96,0x96,0x98,0x01,0x95,
+ 0x94,0x93,0x8E,0x8E,0x94,0x92,0x92,0x96,0x94,0x92,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
+ 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x91,0x94,0x95,0x01,
+ 0x01,0x95,0x98,0x95,0x95,0x01,0x95,0x96,0x01,0x91,0x93,0x98,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x97,0x94,0x98,0x01,0x98,0x96,0x95,0x93,0x98,0x96,0x94,
+ 0x94,0x8E,0x8E,0x93,0x93,0x92,0x8E,0x94,0x92,0x8E,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
+ 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x91,0x92,0x95,0x96,
+ 0x93,0x92,0x98,0x95,0x98,0x95,0x95,0x95,0x94,0x92,0x95,0x96,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x94,0x95,0x01,0x95,0x95,0x95,0x96,0x96,0x96,0x98,0x98,
+ 0x96,0x8E,0x96,0x8E,0x95,0x92,0x8E,0x94,0x8E,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x91,0x98,0x91,0x95,
+ 0x95,0x93,0x92,0x94,0x92,0x92,0x98,0x01,0x93,0x95,0x98,0x94,0x9F,0x9F,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x91,0x94,0x96,0x98,0x98,0x01,0x01,0x01,0x98,0x01,0x93,
+ 0x8D,0x92,0x92,0x93,0x96,0x93,0x8E,0x92,0x95,0x92,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x91,0x94,0x94,0x01,
+ 0x93,0x94,0x94,0x98,0x92,0x95,0x93,0x95,0x95,0x01,0x98,0x95,0x9F,0x9F,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,
+ 0x95,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x9D,
+ 0x9D,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,
+ 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x95,
+ 0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,
+ 0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x96,0x94,0x92,0x94,0x94,0x98,0x01,0x95,0x95,
+ 0x95,0x8E,0x93,0x94,0x8E,0x95,0x94,0x98,0x94,0x93,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x17,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x91,0x93,0x95,0x94,
+ 0x98,0x94,0x93,0x93,0x95,0x94,0x96,0x94,0x95,0x94,0x95,0x95,0x9F,0x9F,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x10,0x10,
+ 0x10,0x95,0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x95,0x95,0x10,0x10,0x10,0x95,
+ 0x9D,0x95,0x10,0x10,0x10,0x95,0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x95,0x95,
+ 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x95,0x10,0x10,0x10,0x95,0x95,0x10,
+ 0x10,0x10,0x10,0x10,0x10,0x10,0x95,0x95,0x10,0x10,0x10,0x95,0x9D,0x95,0x10,0x10,
+ 0x10,0x10,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x01,0x98,0x98,0x92,0x01,0x98,0x95,0x01,0x01,0x94,
+ 0x01,0x94,0x92,0x95,0x91,0x92,0x93,0x92,0x96,0x96,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x98,0x98,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x17,0x17,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x91,0x95,0x93,0x93,
+ 0x95,0x95,0x95,0x95,0x95,0x93,0x96,0x98,0x95,0x96,0x95,0x96,0x9F,0x9F,0x9D,0x9D,
+ 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
+ 0x90,0x90,0x91,0x94,0x9F,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x10,0x11,
+ 0x10,0x95,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x95,0x10,0x11,0x10,0x95,
+ 0x9D,0x95,0x10,0x11,0x10,0x95,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x95,
+ 0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x95,0x10,0x11,0x10,0x95,0x10,0x11,
+ 0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x95,0x10,0x11,0x10,0x95,0x95,0x11,0x10,0x11,
+ 0x10,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x96,0x96,0x94,0x94,0x01,0x98,0x01,0x96,0x95,0x98,
+ 0x98,0x95,0x96,0x95,0x93,0x96,0x95,0x94,0x95,0x01,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x17,0x17,0x98,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
+ 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x91,0x91,0x92,0x93,
+ 0x93,0x96,0x93,0x98,0x94,0x01,0x98,0x98,0x98,0x93,0x98,0x97,0x9F,0x9F,0x9D,0x9D,
+ 0x90,0x90,0x93,0x96,0x98,0x98,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x9D,0x9F,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x12,0x11,
+ 0x12,0x95,0x12,0x11,0x12,0x95,0x95,0x95,0x12,0x12,0x12,0x95,0x12,0x12,0x12,0x95,
+ 0x9D,0x95,0x12,0x11,0x12,0x95,0x12,0x11,0x12,0x95,0x95,0x95,0x12,0x12,0x12,0x95,
+ 0x95,0x95,0x95,0x11,0x12,0x12,0x95,0x95,0x95,0x95,0x12,0x11,0x12,0x95,0x12,0x11,
+ 0x12,0x95,0x95,0x95,0x12,0x12,0x12,0x95,0x12,0x12,0x12,0x95,0x12,0x12,0x12,0x11,
+ 0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x93,0x98,0x98,0x95,0x96,0x96,0x96,0x01,0x94,0x8E,
+ 0x93,0x95,0x96,0x92,0x95,0x94,0x95,0x94,0x01,0x96,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x98,0x98,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,
+ 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
+ 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,
+ 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x91,0x94,0x95,0x94,
+ 0x96,0x01,0x95,0x96,0x96,0x01,0x98,0x93,0x01,0x01,0x99,0x98,0x9F,0x9F,0x9D,0x9D,
+ 0x90,0x93,0x96,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x99,0x99,0x9D,0x9F,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x12,0x13,
+ 0x12,0x95,0x12,0x13,0x12,0x95,0x9D,0x95,0x12,0x13,0x12,0x95,0x12,0x13,0x12,0x95,
+ 0x95,0x95,0x12,0x13,0x12,0x95,0x12,0x13,0x12,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,
+ 0x9D,0x9D,0x95,0x13,0x12,0x13,0x95,0x9D,0x9D,0x95,0x12,0x13,0x12,0x95,0x12,0x13,
+ 0x12,0x95,0x9D,0x9D,0x95,0x95,0x95,0x95,0x12,0x13,0x12,0x13,0x12,0x13,0x12,0x95,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x96,0x96,0x98,0x95,0x95,0x98,0x98,0x98,0x94,0x01,
+ 0x93,0x96,0x93,0x93,0x95,0x95,0x01,0x95,0x95,0x96,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,
+ 0x98,0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
+ 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x91,0x98,0x98,0x95,
+ 0x96,0x95,0x95,0x96,0x96,0x95,0x01,0x96,0x98,0x98,0x98,0x96,0x9F,0x9F,0x9D,0x9D,
+ 0x90,0x96,0x98,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x14,0x13,
+ 0x13,0x95,0x13,0x13,0x13,0x95,0x9D,0x95,0x13,0x13,0x13,0x95,0x95,0x13,0x14,0x13,
+ 0x13,0x13,0x13,0x13,0x95,0x95,0x14,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x95,0x9D,
+ 0x9D,0x9D,0x95,0x13,0x13,0x13,0x95,0x9D,0x9D,0x95,0x13,0x13,0x13,0x95,0x14,0x13,
+ 0x13,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x13,0x13,0x13,0x13,0x13,0x13,0x95,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x94,0x94,0x95,0x94,0x98,0x93,0x95,0x92,0x01,0x95,
+ 0x96,0x95,0x95,0x95,0x98,0x95,0x94,0x93,0x95,0x93,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x98,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
+ 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x91,0x96,0x95,0x93,
+ 0x98,0x93,0x96,0x99,0x01,0x98,0x99,0x98,0x98,0x96,0x98,0x98,0x9F,0x9F,0x9D,0x9D,
+ 0x90,0x98,0x98,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x14,0x15,
+ 0x14,0x95,0x14,0x15,0x14,0x95,0x9D,0x95,0x14,0x14,0x14,0x95,0x9D,0x95,0x14,0x15,
+ 0x14,0x14,0x14,0x95,0x9D,0x9D,0x95,0x15,0x14,0x14,0x14,0x15,0x14,0x15,0x14,0x95,
+ 0x9D,0x9D,0x95,0x15,0x14,0x15,0x95,0x9D,0x9D,0x95,0x14,0x15,0x14,0x95,0x14,0x15,
+ 0x14,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x14,0x14,0x14,0x15,0x14,0x15,0x95,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x01,0x01,0x95,0x96,0x96,0x96,0x98,0x95,0x98,
+ 0x95,0x01,0x94,0x93,0x94,0x93,0x94,0x92,0x95,0x94,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,
+ 0x17,0x17,0x98,0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x91,0x96,0x98,0x95,
+ 0x98,0x98,0x95,0x01,0x95,0x99,0x96,0x98,0x98,0x98,0x95,0x93,0x9F,0x9F,0x9D,0x9D,
+ 0x90,0x98,0x99,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x95,0x15,0x15,
+ 0x15,0x95,0x15,0x15,0x15,0x95,0x9D,0x95,0x15,0x15,0x15,0x95,0x9D,0x9D,0x95,0x15,
+ 0x15,0x15,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x15,0x15,0x15,0x95,
+ 0x9D,0x9D,0x95,0x15,0x15,0x15,0x95,0x9D,0x9D,0x95,0x15,0x15,0x15,0x95,0x15,0x15,
+ 0x15,0x95,0x9D,0x9D,0x95,0x95,0x95,0x95,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x95,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x96,0x95,0x98,0x96,0x98,0x98,0x95,0x98,0x98,0x98,
+ 0x93,0x93,0x95,0x96,0x98,0x92,0x95,0x01,0x98,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,
+ 0x17,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x91,0x98,0x99,0x99,
+ 0x95,0x98,0x01,0x01,0x98,0x98,0x98,0x98,0x98,0x95,0x98,0x95,0x9F,0x9F,0x9D,0x9D,
+ 0x91,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x95,0x16,0x16,0x15,0x95,0x95,0x95,0x15,0x16,
+ 0x16,0x95,0x15,0x16,0x16,0x95,0x95,0x95,0x16,0x16,0x15,0x95,0x9D,0x9D,0x95,0x16,
+ 0x16,0x16,0x95,0x9D,0x9D,0x95,0x15,0x16,0x16,0x95,0x95,0x95,0x16,0x16,0x15,0x95,
+ 0x9D,0x9D,0x95,0x16,0x16,0x16,0x95,0x9D,0x9D,0x95,0x15,0x16,0x16,0x95,0x15,0x16,
+ 0x16,0x95,0x95,0x95,0x16,0x16,0x15,0x95,0x16,0x16,0x15,0x95,0x16,0x16,0x15,0x16,
+ 0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x98,0x96,0x01,0x9A,0x01,0x94,0x98,0x99,0x01,
+ 0x95,0x95,0x95,0x95,0x01,0x01,0x94,0x98,0x98,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,
+ 0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x91,0x99,0x98,0x98,
+ 0x95,0x98,0x98,0x98,0x99,0x98,0x98,0x97,0x95,0x01,0x98,0x96,0x9F,0x9F,0x9D,0x9D,
+ 0x94,0x9B,0x9D,0x9D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9D,0x95,0x17,0x17,0x17,0x17,0x17,0x16,0x17,0x17,
+ 0x17,0x95,0x17,0x17,0x17,0x16,0x17,0x17,0x17,0x17,0x17,0x95,0x9D,0x9D,0x95,0x17,
+ 0x17,0x17,0x95,0x9D,0x9D,0x95,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x17,0x95,
+ 0x9D,0x9D,0x95,0x17,0x17,0x16,0x95,0x9D,0x9D,0x95,0x17,0x17,0x17,0x95,0x17,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x16,0x17,0x95,0x17,0x17,0x17,0x95,0x95,0x16,0x17,0x17,
+ 0x17,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x99,0x01,0x98,0x99,0x98,0x01,0x9A,0x9A,0x9A,0x98,
+ 0x96,0x98,0x95,0x95,0x01,0x94,0x98,0x01,0x96,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x98,0x98,0x9D,
+ 0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x91,0x98,0x98,0x99,
+ 0x98,0x95,0x99,0x98,0x9A,0x95,0x94,0x98,0x95,0x94,0x96,0x01,0x9F,0x9F,0x9D,0x9D,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9D,0x9D,0x95,0x18,0x17,0x18,0x17,0x18,0x17,0x18,
+ 0x95,0x9D,0x95,0x18,0x17,0x18,0x17,0x18,0x17,0x18,0x95,0x9D,0x9D,0x9D,0x95,0x18,
+ 0x17,0x18,0x95,0x9D,0x9D,0x9D,0x95,0x18,0x17,0x18,0x17,0x18,0x17,0x18,0x95,0x9D,
+ 0x9D,0x9D,0x95,0x18,0x17,0x18,0x95,0x9D,0x9D,0x95,0x17,0x18,0x17,0x95,0x95,0x18,
+ 0x17,0x18,0x17,0x18,0x17,0x18,0x95,0x95,0x17,0x18,0x17,0x95,0x9D,0x95,0x17,0x18,
+ 0x17,0x18,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x98,0x98,0x9A,0x95,0x98,0x01,0x95,0x96,0x98,
+ 0x98,0x95,0x95,0x95,0x96,0x95,0x94,0x95,0x98,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x17,0x17,0x98,
+ 0x17,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
+ 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x98,0x96,
+ 0x01,0x98,0x96,0x94,0x92,0x95,0x95,0x95,0x98,0x92,0x8E,0x96,0x9F,0x9F,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,
+ 0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,
+ 0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x95,
+ 0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,
+ 0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x95,0x95,0x95,0x98,0x98,0x9A,0x01,0x99,0x98,
+ 0x98,0x01,0x93,0x96,0x98,0x95,0x98,0x01,0x98,0x94,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x98,0x98,0x9D,
+ 0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,
+ 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
+ 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,
+ 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x98,0x98,
+ 0x98,0x98,0x95,0x95,0x98,0x92,0x94,0x95,0x95,0x95,0x96,0x01,0x9F,0x9F,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x95,0x01,0x98,0x95,0x01,0x9A,0x98,0x9A,0x9B,
+ 0x99,0x94,0x98,0x92,0x93,0x94,0x96,0x01,0x95,0x94,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x98,0x98,0x9D,0x9D,0x98,0x98,0x9D,0x9D,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
+ 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x98,0x98,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x98,0x96,
+ 0x98,0x95,0x92,0x96,0x93,0x93,0x95,0x92,0x8E,0x96,0x8E,0x93,0x9F,0x9F,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x99,0x95,0x98,0x98,0x9A,0x98,0x99,0x98,0x95,
+ 0x98,0x01,0x93,0x93,0x94,0x94,0x01,0x98,0x94,0x96,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
+ 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x17,0x17,0x98,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x90,0x93,0x95,0x95,
+ 0x8E,0x94,0x93,0x94,0x8E,0x92,0x94,0x95,0x94,0x94,0x95,0x95,0x99,0x95,0x95,0x95,
+ 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x94,0x94,0x94,0x94,0x94,
+ 0x94,0x94,0x94,0x94,0x94,0x94,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,
+ 0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x92,0x92,0x92,0x92,
+ 0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,
+ 0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,
+ 0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,
+ 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
+ 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
+ 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
+ 0x90,0x90,0x90,0x90,0x90,0x90,0x94,0x98,0x96,0x99,0x98,0x95,0x98,0x01,0x96,0x01,
+ 0x98,0x01,0x01,0x93,0x98,0x98,0x95,0x95,0x93,0x01,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x94,0x8E,0x92,
+ 0x93,0x8E,0x94,0x92,0x94,0x92,0x8E,0x94,0x95,0x96,0x94,0x95,0x98,0x92,0x01,0x98,
+ 0x9A,0x98,0x98,0x96,0x99,0x98,0x99,0x98,0x96,0x95,0x95,0x96,0x94,0x98,0x96,0x98,
+ 0x93,0x92,0x8E,0x01,0x96,0x94,0x92,0x98,0x98,0x95,0x93,0x01,0x94,0x92,0x01,0x94,
+ 0x01,0x95,0x98,0x95,0x98,0x95,0x94,0x96,0x98,0x01,0x94,0x92,0x01,0x93,0x01,0x01,
+ 0x94,0x96,0x96,0x96,0x95,0x95,0x98,0x92,0x93,0x98,0x95,0x98,0x95,0x92,0x95,0x93,
+ 0x98,0x01,0x96,0x98,0x95,0x98,0x98,0x94,0x95,0x96,0x95,0x98,0x92,0x92,0x95,0x95,
+ 0x98,0x95,0x92,0x95,0x8E,0x95,0x8E,0x95,0x94,0x92,0x94,0x96,0x96,0x01,0x96,0x94,
+ 0x96,0x95,0x96,0x94,0x01,0x95,0x96,0x95,0x94,0x96,0x94,0x96,0x96,0x01,0x98,0x96,
+ 0x94,0x98,0x95,0x01,0x95,0x98,0x01,0x92,0x94,0x01,0x97,0x96,0x98,0x01,0x95,0x95,
+ 0x98,0x98,0x01,0x98,0x99,0x93,0x95,0x98,0x96,0x95,0x92,0x95,0x94,0x92,0x92,0x98,
+ 0x99,0x98,0x98,0x98,0x98,0x95,0x01,0x01,0x96,0x99,0x95,0x94,0x01,0x96,0x92,0x94,
+ 0x95,0x95,0x98,0x98,0x96,0x01,0x95,0x93,0x01,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,
+ 0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x17,0x17,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x8E,0x95,
+ 0x92,0x94,0x93,0x92,0x95,0x95,0x98,0x96,0x95,0x01,0x94,0x98,0x98,0x99,0x98,0x95,
+ 0x9A,0x98,0x98,0x01,0x98,0x95,0x95,0x92,0x92,0x96,0x8E,0x8E,0x96,0x94,0x94,0x98,
+ 0x96,0x98,0x95,0x98,0x98,0x95,0x95,0x96,0x98,0x98,0x01,0x98,0x95,0x94,0x95,0x01,
+ 0x98,0x96,0x96,0x98,0x01,0x96,0x95,0x96,0x94,0x98,0x98,0x95,0x94,0x98,0x01,0x95,
+ 0x95,0x95,0x95,0x95,0x01,0x94,0x01,0x94,0x95,0x01,0x96,0x98,0x95,0x98,0x94,0x95,
+ 0x96,0x95,0x96,0x96,0x01,0x98,0x96,0x95,0x96,0x95,0x95,0x95,0x92,0x8E,0x92,0x95,
+ 0x93,0x8E,0x8E,0x92,0x98,0x98,0x92,0x94,0x93,0x96,0x95,0x98,0x95,0x98,0x98,0x98,
+ 0x93,0x95,0x95,0x94,0x98,0x98,0x96,0x96,0x95,0x95,0x98,0x94,0x95,0x94,0x98,0x95,
+ 0x98,0x98,0x98,0x01,0x95,0x98,0x98,0x95,0x98,0x98,0x98,0x99,0x98,0x98,0x98,0x98,
+ 0x98,0x99,0x98,0x97,0x97,0x95,0x94,0x94,0x95,0x01,0x96,0x95,0x95,0x98,0x99,0x94,
+ 0x96,0x95,0x96,0x95,0x94,0x97,0x95,0x95,0x95,0x01,0x98,0x01,0x01,0x98,0x98,0x98,
+ 0x94,0x98,0x96,0x01,0x01,0x92,0x95,0x92,0x94,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x8E,0x95,0x95,
+ 0x94,0x94,0x96,0x96,0x01,0x95,0x95,0x98,0x98,0x01,0x9A,0x01,0x98,0x98,0x98,0x96,
+ 0x98,0x98,0x98,0x96,0x98,0x92,0x93,0x95,0x92,0x96,0x98,0x94,0x95,0x98,0x96,0x98,
+ 0x98,0x01,0x96,0x94,0x98,0x95,0x95,0x98,0x95,0x01,0x95,0x92,0x96,0x96,0x94,0x96,
+ 0x01,0x98,0x01,0x98,0x95,0x95,0x01,0x98,0x95,0x94,0x96,0x94,0x01,0x01,0x94,0x98,
+ 0x95,0x01,0x96,0x96,0x98,0x95,0x95,0x93,0x96,0x01,0x98,0x96,0x95,0x98,0x95,0x94,
+ 0x01,0x94,0x92,0x96,0x94,0x98,0x98,0x98,0x96,0x98,0x96,0x94,0x94,0x8E,0x94,0x93,
+ 0x8E,0x94,0x98,0x94,0x96,0x95,0x98,0x96,0x01,0x96,0x98,0x95,0x96,0x94,0x93,0x96,
+ 0x96,0x98,0x96,0x98,0x92,0x95,0x96,0x95,0x95,0x96,0x01,0x94,0x98,0x01,0x95,0x98,
+ 0x96,0x98,0x98,0x99,0x96,0x01,0x01,0x98,0x98,0x95,0x98,0x95,0x98,0x96,0x98,0x96,
+ 0x98,0x01,0x98,0x95,0x92,0x98,0x96,0x96,0x98,0x01,0x96,0x99,0x95,0x98,0x94,0x96,
+ 0x96,0x96,0x95,0x95,0x95,0x98,0x98,0x96,0x96,0x01,0x94,0x93,0x94,0x95,0x98,0x01,
+ 0x95,0x92,0x92,0x91,0x94,0x95,0x95,0x96,0x93,0x96,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x98,0x98,0x98,
+ 0x17,0x17,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x95,0x01,
+ 0x95,0x01,0x95,0x98,0x01,0x96,0x98,0x98,0x98,0x94,0x95,0x98,0x98,0x96,0x01,0x98,
+ 0x95,0x96,0x96,0x94,0x93,0x01,0x98,0x94,0x98,0x94,0x96,0x98,0x01,0x96,0x96,0x94,
+ 0x95,0x94,0x9A,0x96,0x99,0x98,0x98,0x01,0x96,0x98,0x95,0x96,0x96,0x96,0x98,0x96,
+ 0x95,0x96,0x96,0x95,0x95,0x95,0x96,0x01,0x01,0x95,0x96,0x95,0x94,0x96,0x96,0x94,
+ 0x95,0x96,0x98,0x95,0x98,0x96,0x98,0x96,0x98,0x98,0x96,0x95,0x95,0x95,0x95,0x98,
+ 0x93,0x98,0x98,0x92,0x95,0x01,0x98,0x01,0x94,0x94,0x93,0x95,0x01,0x95,0x92,0x8E,
+ 0x01,0x96,0x95,0x94,0x96,0x96,0x98,0x96,0x96,0x01,0x96,0x95,0x94,0x95,0x94,0x94,
+ 0x98,0x94,0x95,0x01,0x94,0x95,0x96,0x93,0x94,0x97,0x98,0x98,0x98,0x99,0x98,0x95,
+ 0x98,0x9A,0x9A,0x9A,0x99,0x9A,0x98,0x96,0x98,0x98,0x96,0x98,0x96,0x94,0x95,0x98,
+ 0x96,0x95,0x96,0x01,0x98,0x01,0x98,0x01,0x94,0x98,0x01,0x98,0x98,0x99,0x01,0x98,
+ 0x93,0x01,0x98,0x94,0x98,0x96,0x98,0x98,0x98,0x98,0x97,0x95,0x01,0x01,0x98,0x96,
+ 0x92,0x92,0x95,0x96,0x01,0x95,0x93,0x96,0x93,0x93,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x17,0x17,0x98,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x9D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
+ 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x90,0x01,0x95,0x94,
+ 0x96,0x99,0x98,0x99,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x95,0x94,0x01,0x94,
+ 0x96,0x93,0x95,0x93,0x01,0x94,0x95,0x95,0x94,0x96,0x93,0x98,0x98,0x94,0x95,0x98,
+ 0x95,0x95,0x98,0x98,0x95,0x98,0x98,0x98,0x9A,0x94,0x98,0x98,0x98,0x98,0x01,0x98,
+ 0x01,0x98,0x98,0x96,0x96,0x94,0x96,0x01,0x98,0x01,0x98,0x96,0x01,0x96,0x96,0x93,
+ 0x98,0x94,0x95,0x98,0x98,0x96,0x98,0x96,0x94,0x95,0x94,0x95,0x96,0x96,0x92,0x96,
+ 0x96,0x94,0x95,0x95,0x94,0x95,0x94,0x98,0x98,0x96,0x94,0x8E,0x94,0x95,0x01,0x93,
+ 0x92,0x96,0x94,0x98,0x95,0x98,0x98,0x01,0x94,0x96,0x94,0x98,0x95,0x98,0x96,0x98,
+ 0x95,0x98,0x96,0x95,0x98,0x98,0x98,0x93,0x94,0x98,0x96,0x98,0x96,0x95,0x95,0x98,
+ 0x01,0x01,0x98,0x98,0x98,0x98,0x01,0x01,0x96,0x99,0x99,0x98,0x96,0x98,0x99,0x96,
+ 0x01,0x01,0x96,0x98,0x95,0x98,0x95,0x98,0x98,0x01,0x95,0x9A,0x98,0x98,0x96,0x95,
+ 0x01,0x98,0x98,0x95,0x96,0x98,0x94,0x98,0x96,0x98,0x98,0x95,0x96,0x98,0x99,0x95,
+ 0x98,0x94,0x93,0x91,0x92,0x98,0x95,0x93,0x91,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x98,0x98,0x9D,
+ 0x98,0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x9D,0x9D,0x9A,
+ 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x98,0x98,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
+ 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x9D,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,
+ 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x90,0x94,0x95,0x98,
+ 0x01,0x01,0x98,0x98,0x98,0x99,0x98,0x96,0x98,0x96,0x94,0x98,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x97,0x98,0x98,0x96,0x01,0x98,0x98,0x01,0x99,0x98,0x01,
+ 0x98,0x92,0x96,0x92,0x92,0x93,0x01,0x94,0x95,0x94,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x9D,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
+ 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x98,0x95,
+ 0x99,0x96,0x96,0x98,0x98,0x96,0x98,0x98,0x96,0x01,0x95,0x01,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x94,0x9A,0x95,0x98,0x98,0x98,0x98,0x95,0x95,0x95,0x97,
+ 0x95,0x93,0x94,0x93,0x96,0x01,0x98,0x95,0x96,0x93,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
+ 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x95,0x98,
+ 0x98,0x98,0x98,0x95,0x98,0x94,0x01,0x96,0x01,0x98,0x98,0x96,0x9F,0x9F,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x91,0x99,0x98,0x98,0x01,0x01,0x9A,0x01,0x98,0x94,0x98,
+ 0x93,0x94,0x94,0x95,0x93,0x98,0x01,0x96,0x96,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x98,0x9D,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x98,0x17,0x17,0x98,0x98,0x98,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x98,0x9D,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x95,0x96,
+ 0x98,0x96,0x01,0x98,0x01,0x98,0x95,0x94,0x96,0x95,0x92,0x95,0x9F,0x9F,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,
+ 0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,
+ 0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x99,0x98,0x01,0x98,0x98,0x9A,0x99,0x98,0x98,0x9A,
+ 0x94,0x98,0x93,0x01,0x95,0x98,0x92,0x96,0x98,0x93,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x01,0x95,0x96,
+ 0x94,0x96,0x98,0x94,0x01,0x95,0x94,0x92,0x8E,0x8E,0x93,0x94,0x9F,0x9F,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
+ 0x95,0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x95,0x95,0x10,0x10,0x10,0x95,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x10,0x10,0x10,0x95,0x10,0x10,0x10,0x10,0x10,0x10,
+ 0x10,0x10,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x99,0x98,0x98,0x98,0x98,0x98,0x96,0x01,0x01,0x98,
+ 0x96,0x93,0x95,0x01,0x98,0x95,0x95,0x92,0x94,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x96,0x98,0x95,
+ 0x96,0x94,0x8E,0x92,0x8E,0x92,0x96,0x92,0x93,0x95,0x01,0x95,0x9F,0x9F,0x9D,0x9D,
+ 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
+ 0x90,0x90,0x91,0x94,0x9F,0x9D,0x9D,0x95,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,
+ 0x10,0x95,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x95,0x10,0x11,0x10,0x95,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x10,0x11,0x10,0x95,0x10,0x11,0x10,0x11,0x10,0x11,
+ 0x10,0x11,0x10,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x01,0x99,0x99,0x01,0x98,0x01,0x92,0x92,0x8D,
+ 0x94,0x01,0x95,0x95,0x93,0x93,0x95,0x92,0x95,0x93,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x93,0x8E,0x95,
+ 0x95,0x95,0x92,0x01,0x93,0x01,0x94,0x01,0x01,0x94,0x01,0x01,0x9F,0x9F,0x9D,0x9D,
+ 0x90,0x90,0x93,0x96,0x98,0x98,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x9D,0x9F,0x9D,0x9D,0x95,0x12,0x12,0x12,0x95,0x95,0x95,0x12,0x11,
+ 0x12,0x95,0x12,0x11,0x12,0x95,0x95,0x95,0x12,0x12,0x12,0x95,0x12,0x12,0x12,0x95,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x12,0x11,0x12,0x95,0x12,0x11,0x12,0x95,0x95,0x95,
+ 0x12,0x12,0x12,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x99,0x98,0x97,0x95,0x96,0x92,0x94,0x94,0x8D,
+ 0x92,0x98,0x94,0x95,0x94,0x96,0x92,0x98,0x94,0x92,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
+ 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x95,0x95,
+ 0x95,0x95,0x95,0x01,0x93,0x01,0x95,0x96,0x95,0x95,0x92,0x96,0x9F,0x9F,0x9D,0x9D,
+ 0x90,0x93,0x96,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x99,0x99,0x9D,0x9F,0x9D,0x9D,0x95,0x12,0x13,0x12,0x95,0x95,0x95,0x12,0x13,
+ 0x12,0x95,0x12,0x13,0x12,0x95,0x9D,0x95,0x12,0x13,0x12,0x95,0x12,0x13,0x12,0x95,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x12,0x13,0x12,0x95,0x12,0x13,0x12,0x95,0x95,0x95,
+ 0x12,0x13,0x12,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x01,0x01,0x93,0x95,0x94,0x95,0x93,0x93,0x01,
+ 0x94,0x93,0x96,0x93,0x95,0x95,0x95,0x01,0x92,0x94,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x98,0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9A,
+ 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
+ 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,
+ 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x90,0x94,0x01,0x94,
+ 0x98,0x95,0x95,0x94,0x93,0x94,0x95,0x98,0x93,0x93,0x01,0x01,0x9F,0x9F,0x9D,0x9D,
+ 0x90,0x96,0x98,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x95,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x13,
+ 0x13,0x95,0x13,0x13,0x13,0x95,0x9D,0x95,0x13,0x13,0x13,0x95,0x13,0x13,0x14,0x95,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x14,0x13,0x13,0x95,0x13,0x13,0x13,0x13,0x14,0x13,
+ 0x13,0x13,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x93,0x95,0x93,0x92,0x01,0x93,0x92,0x98,0x98,0x95,
+ 0x92,0x95,0x92,0x93,0x94,0x94,0x8E,0x93,0x96,0x93,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x9D,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
+ 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x98,0x98,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x90,0x94,0x92,0x94,
+ 0x95,0x95,0x94,0x95,0x92,0x95,0x95,0x96,0x95,0x96,0x92,0x98,0x9F,0x9F,0x9D,0x9D,
+ 0x90,0x98,0x98,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x95,0x14,0x14,0x14,0x15,0x14,0x15,0x14,0x15,
+ 0x14,0x95,0x14,0x15,0x14,0x95,0x9D,0x95,0x14,0x14,0x14,0x95,0x14,0x15,0x14,0x95,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x14,0x15,0x14,0x95,0x14,0x15,0x14,0x15,0x14,0x15,
+ 0x14,0x14,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x92,0x95,0x8E,0x95,0x94,0x95,0x96,0x01,0x94,0x98,
+ 0x95,0x93,0x93,0x95,0x94,0x94,0x01,0x01,0x92,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
+ 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x17,0x17,0x98,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x94,0x98,
+ 0x96,0x95,0x01,0x95,0x98,0x94,0x92,0x95,0x96,0x93,0x95,0x95,0x9F,0x9F,0x9D,0x9D,
+ 0x90,0x98,0x99,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x95,0x15,0x15,0x15,0x95,0x95,0x95,0x15,0x15,
+ 0x15,0x95,0x15,0x15,0x15,0x95,0x9D,0x95,0x15,0x15,0x15,0x95,0x15,0x15,0x15,0x95,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x15,0x15,0x15,0x95,0x15,0x15,0x15,0x95,0x95,0x95,
+ 0x15,0x15,0x15,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x8E,0x92,0x94,0x01,0x95,0x95,0x01,0x01,0x98,0x01,
+ 0x92,0x95,0x93,0x95,0x93,0x95,0x91,0x92,0x95,0x92,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x98,0x9D,0x98,
+ 0x17,0x17,0x98,0x98,0x98,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x98,0x17,0x17,0x98,0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x98,0x98,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x92,0x95,0x95,
+ 0x93,0x94,0x94,0x94,0x95,0x91,0x94,0x95,0x95,0x92,0x98,0x01,0x9F,0x9F,0x9D,0x9D,
+ 0x91,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x95,0x16,0x16,0x15,0x95,0x9D,0x95,0x15,0x16,
+ 0x16,0x95,0x15,0x16,0x16,0x95,0x95,0x95,0x16,0x16,0x15,0x95,0x16,0x16,0x15,0x95,
+ 0x95,0x95,0x95,0x95,0x95,0x95,0x15,0x16,0x16,0x95,0x15,0x16,0x16,0x95,0x95,0x95,
+ 0x16,0x16,0x15,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x01,0x93,0x98,0x01,0x93,0x01,0x98,0x96,0x96,0x97,
+ 0x92,0x96,0x96,0x95,0x92,0x92,0x8E,0x95,0x8E,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x98,
+ 0x17,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x01,0x94,0x01,
+ 0x98,0x92,0x96,0x94,0x94,0x95,0x94,0x95,0x98,0x95,0x94,0x94,0x9F,0x9F,0x9D,0x9D,
+ 0x94,0x9B,0x9D,0x9D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9D,0x95,0x17,0x17,0x17,0x95,0x9D,0x95,0x17,0x17,
+ 0x17,0x95,0x17,0x17,0x17,0x16,0x17,0x17,0x17,0x17,0x17,0x95,0x17,0x16,0x17,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x95,0x17,0x17,0x17,0x95,0x17,0x17,0x17,0x16,0x17,0x17,
+ 0x17,0x17,0x17,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x96,0x01,0x98,0x96,0x96,0x01,0x01,0x95,0x95,
+ 0x92,0x95,0x92,0x94,0x92,0x8E,0x93,0x8E,0x95,0x94,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x01,0x01,
+ 0x95,0x93,0x92,0x95,0x01,0x95,0x96,0x98,0x95,0x94,0x01,0x98,0x9F,0x9F,0x9D,0x9D,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9D,0x95,0x17,0x18,0x17,0x95,0x9D,0x95,0x17,0x18,
+ 0x17,0x95,0x17,0x18,0x17,0x18,0x17,0x18,0x17,0x18,0x95,0x95,0x17,0x18,0x17,0x18,
+ 0x17,0x18,0x17,0x18,0x17,0x95,0x17,0x18,0x17,0x95,0x17,0x18,0x17,0x18,0x17,0x18,
+ 0x17,0x18,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x96,0x95,0x95,0x98,0x01,0x96,0x95,0x96,0x98,0x96,
+ 0x99,0x8E,0x01,0x92,0x01,0x94,0x94,0x96,0x93,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x92,0x95,0x98,
+ 0x94,0x92,0x94,0x92,0x01,0x95,0x93,0x92,0x95,0x93,0x94,0x01,0x9F,0x9F,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,
+ 0x95,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x95,
+ 0x95,0x95,0x95,0x95,0x95,0x9D,0x95,0x95,0x95,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,
+ 0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x01,0x98,0x01,0x98,0x01,0x96,0x98,0x95,0x98,
+ 0x92,0x94,0x8E,0x96,0x91,0x95,0x92,0x95,0x98,0x01,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
+ 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x92,0x01,
+ 0x98,0x95,0x93,0x93,0x98,0x95,0x95,0x94,0x94,0x93,0x98,0x94,0x9F,0x9F,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x96,0x95,0x96,0x98,0x01,0x01,0x94,0x98,0x95,0x98,
+ 0x8E,0x8E,0x95,0x01,0x93,0x95,0x92,0x92,0x95,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,
+ 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
+ 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,
+ 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x90,0x94,0x95,0x98,
+ 0x94,0x01,0x95,0x94,0x94,0x96,0x95,0x92,0x98,0x93,0x96,0x98,0x9F,0x9F,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x98,0x01,0x95,0x01,0x96,0x01,0x01,0x98,0x01,
+ 0x8E,0x92,0x96,0x01,0x94,0x92,0x95,0x96,0x93,0x92,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x9D,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x9D,0x9D,0x98,0x98,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
+ 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x9D,0x9D,0x98,0x98,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x90,0x94,0x96,0x91,
+ 0x94,0x96,0x95,0x93,0x95,0x93,0x95,0x95,0x95,0x94,0x93,0x95,0x99,0x95,0x95,0x95,
+ 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x94,0x94,0x94,0x94,0x94,
+ 0x94,0x94,0x94,0x94,0x94,0x94,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,
+ 0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x92,0x92,0x92,0x92,
+ 0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,
+ 0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,
+ 0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,
+ 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
+ 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
+ 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
+ 0x90,0x90,0x90,0x90,0x90,0x90,0x94,0x98,0x98,0x98,0x98,0x98,0x96,0x01,0x01,0x96,
+ 0x94,0x92,0x92,0x91,0x8E,0x8E,0x94,0x95,0x8E,0x93,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
+ 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x90,0x94,0x94,0x93,
+ 0x96,0x92,0x94,0x01,0x01,0x96,0x94,0x96,0x93,0x95,0x98,0x01,0x95,0x96,0x92,0x93,
+ 0x93,0x93,0x98,0x93,0x95,0x01,0x93,0x93,0x93,0x95,0x95,0x95,0x01,0x98,0x98,0x01,
+ 0x01,0x95,0x96,0x96,0x96,0x96,0x98,0x98,0x98,0x98,0x94,0x95,0x96,0x94,0x98,0x98,
+ 0x01,0x94,0x95,0x01,0x93,0x96,0x96,0x95,0x95,0x96,0x8E,0x95,0x93,0x96,0x01,0x95,
+ 0x95,0x92,0x8E,0x96,0x96,0x98,0x96,0x98,0x01,0x96,0x94,0x98,0x96,0x01,0x98,0x98,
+ 0x98,0x98,0x98,0x95,0x98,0x95,0x96,0x98,0x99,0x98,0x98,0x98,0x9A,0x98,0x98,0x95,
+ 0x9A,0x96,0x9B,0x99,0x98,0x9B,0x9B,0x9B,0x98,0x98,0x98,0x98,0x98,0x01,0x99,0x96,
+ 0x98,0x99,0x98,0x98,0x9B,0x01,0x99,0x95,0x01,0x98,0x94,0x95,0x9A,0x98,0x01,0x98,
+ 0x98,0x98,0x98,0x98,0x01,0x91,0x93,0x95,0x93,0x94,0x96,0x94,0x95,0x95,0x94,0x98,
+ 0x96,0x94,0x98,0x96,0x94,0x95,0x01,0x94,0x93,0x01,0x98,0x95,0x92,0x98,0x94,0x98,
+ 0x98,0x98,0x98,0x98,0x98,0x98,0x01,0x98,0x93,0x93,0x01,0x01,0x96,0x98,0x94,0x95,
+ 0x93,0x8E,0x8E,0x8E,0x96,0x95,0x92,0x98,0x95,0x01,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x98,0x9D,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x01,0x94,
+ 0x93,0x98,0x01,0x01,0x95,0x95,0x94,0x92,0x94,0x94,0x96,0x95,0x95,0x95,0x98,0x98,
+ 0x96,0x94,0x94,0x01,0x93,0x01,0x95,0x01,0x96,0x96,0x96,0x95,0x01,0x96,0x94,0x95,
+ 0x98,0x96,0x01,0x96,0x98,0x93,0x98,0x98,0x93,0x95,0x01,0x95,0x95,0x96,0x98,0x98,
+ 0x95,0x96,0x98,0x96,0x92,0x96,0x93,0x93,0x92,0x92,0x8E,0x96,0x01,0x95,0x98,0x95,
+ 0x93,0x93,0x94,0x94,0x98,0x95,0x98,0x98,0x96,0x96,0x93,0x96,0x01,0x98,0x96,0x95,
+ 0x94,0x01,0x98,0x96,0x98,0x98,0x98,0x98,0x98,0x92,0x95,0x98,0x96,0x98,0x93,0x94,
+ 0x96,0x98,0x96,0x99,0x98,0x99,0x98,0x95,0x98,0x95,0x01,0x98,0x98,0x98,0x9A,0x95,
+ 0x9A,0x9B,0x98,0x99,0x01,0x98,0x98,0x01,0x98,0x98,0x98,0x95,0x98,0x01,0x98,0x96,
+ 0x98,0x96,0x94,0x93,0x95,0x93,0x95,0x01,0x94,0x94,0x98,0x98,0x95,0x01,0x96,0x98,
+ 0x01,0x01,0x95,0x98,0x96,0x01,0x01,0x98,0x94,0x98,0x98,0x96,0x98,0x01,0x98,0x95,
+ 0x94,0x95,0x98,0x98,0x96,0x94,0x98,0x98,0x96,0x96,0x01,0x98,0x98,0x95,0x95,0x97,
+ 0x8E,0x94,0x96,0x93,0x96,0x95,0x95,0x95,0x95,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x9D,
+ 0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x17,0x17,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x98,0x95,
+ 0x96,0x95,0x96,0x98,0x01,0x01,0x98,0x01,0x98,0x01,0x96,0x94,0x01,0x01,0x01,0x01,
+ 0x01,0x96,0x98,0x96,0x95,0x98,0x98,0x98,0x96,0x98,0x98,0x94,0x01,0x01,0x95,0x95,
+ 0x94,0x95,0x93,0x94,0x98,0x01,0x95,0x01,0x01,0x95,0x98,0x98,0x94,0x98,0x95,0x96,
+ 0x96,0x96,0x96,0x92,0x91,0x95,0x92,0x8E,0x95,0x93,0x96,0x95,0x95,0x95,0x95,0x94,
+ 0x92,0x95,0x95,0x98,0x96,0x98,0x96,0x01,0x94,0x95,0x01,0x95,0x95,0x98,0x92,0x98,
+ 0x01,0x98,0x92,0x01,0x95,0x98,0x98,0x98,0x95,0x92,0x01,0x96,0x98,0x92,0x98,0x95,
+ 0x93,0x98,0x98,0x01,0x01,0x01,0x98,0x98,0x95,0x97,0x98,0x01,0x98,0x95,0x98,0x9A,
+ 0x96,0x98,0x95,0x99,0x98,0x98,0x99,0x98,0x98,0x01,0x98,0x98,0x96,0x01,0x98,0x93,
+ 0x95,0x98,0x93,0x92,0x8E,0x8E,0x98,0x98,0x95,0x98,0x94,0x92,0x94,0x98,0x95,0x96,
+ 0x96,0x01,0x96,0x01,0x94,0x98,0x94,0x98,0x94,0x98,0x94,0x98,0x93,0x01,0x96,0x96,
+ 0x01,0x98,0x98,0x01,0x98,0x98,0x98,0x98,0x95,0x98,0x95,0x95,0x94,0x98,0x98,0x98,
+ 0x92,0x96,0x92,0x92,0x98,0x93,0x95,0x92,0x92,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x96,0x96,0x96,
+ 0x98,0x98,0x98,0x95,0x95,0x95,0x94,0x94,0x95,0x98,0x95,0x98,0x98,0x94,0x96,0x98,
+ 0x01,0x96,0x98,0x98,0x96,0x98,0x98,0x98,0x96,0x98,0x94,0x96,0x95,0x96,0x95,0x95,
+ 0x01,0x95,0x01,0x96,0x96,0x98,0x96,0x96,0x98,0x92,0x95,0x98,0x95,0x98,0x94,0x95,
+ 0x96,0x95,0x8E,0x92,0x93,0x95,0x93,0x98,0x95,0x95,0x96,0x95,0x95,0x95,0x94,0x94,
+ 0x95,0x92,0x01,0x95,0x96,0x96,0x96,0x96,0x98,0x94,0x01,0x01,0x95,0x95,0x96,0x96,
+ 0x95,0x95,0x95,0x98,0x94,0x96,0x96,0x96,0x94,0x98,0x93,0x98,0x01,0x95,0x95,0x98,
+ 0x01,0x98,0x01,0x96,0x01,0x95,0x01,0x95,0x98,0x96,0x98,0x98,0x01,0x98,0x98,0x98,
+ 0x98,0x98,0x98,0x96,0x01,0x95,0x01,0x98,0x98,0x95,0x95,0x94,0x95,0x92,0x96,0x96,
+ 0x8E,0x92,0x92,0x95,0x92,0x8E,0x93,0x01,0x92,0x94,0x98,0x01,0x98,0x98,0x95,0x95,
+ 0x98,0x98,0x95,0x98,0x01,0x98,0x95,0x96,0x96,0x98,0x95,0x95,0x95,0x96,0x98,0x96,
+ 0x98,0x96,0x96,0x98,0x98,0x98,0x01,0x93,0x94,0x95,0x95,0x01,0x98,0x01,0x01,0x98,
+ 0x92,0x95,0x01,0x96,0x96,0x94,0x95,0x98,0x96,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x98,
+ 0x17,0x17,0x98,0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x92,0x98,0x98,
+ 0x92,0x95,0x98,0x95,0x95,0x96,0x92,0x93,0x96,0x98,0x95,0x96,0x96,0x98,0x98,0x95,
+ 0x98,0x95,0x99,0x01,0x96,0x01,0x96,0x01,0x98,0x96,0x95,0x01,0x95,0x98,0x01,0x93,
+ 0x98,0x96,0x96,0x94,0x96,0x96,0x95,0x96,0x92,0x94,0x95,0x98,0x92,0x92,0x98,0x94,
+ 0x93,0x8E,0x8E,0x92,0x93,0x95,0x01,0x94,0x95,0x95,0x95,0x94,0x92,0x95,0x93,0x93,
+ 0x94,0x95,0x98,0x95,0x98,0x95,0x95,0x95,0x01,0x96,0x96,0x93,0x96,0x95,0x98,0x94,
+ 0x95,0x01,0x98,0x96,0x95,0x98,0x98,0x96,0x95,0x92,0x96,0x01,0x96,0x93,0x95,0x98,
+ 0x98,0x98,0x9A,0x98,0x96,0x95,0x96,0x01,0x98,0x98,0x94,0x98,0x01,0x98,0x9A,0x99,
+ 0x99,0x98,0x98,0x96,0x95,0x98,0x01,0x01,0x01,0x96,0x01,0x92,0x92,0x8E,0x93,0x94,
+ 0x95,0x93,0x8E,0x8E,0x92,0x94,0x94,0x95,0x01,0x94,0x95,0x96,0x98,0x96,0x95,0x93,
+ 0x93,0x95,0x92,0x95,0x96,0x98,0x95,0x95,0x95,0x96,0x94,0x98,0x94,0x01,0x01,0x94,
+ 0x96,0x98,0x98,0x98,0x01,0x96,0x01,0x98,0x01,0x94,0x98,0x01,0x96,0x98,0x98,0x98,
+ 0x99,0x98,0x98,0x95,0x98,0x94,0x95,0x92,0x92,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x98,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
+ 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x98,0x01,
+ 0x96,0x98,0x98,0x01,0x01,0x01,0x97,0x98,0x94,0x94,0x98,0x96,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x97,0x98,0x98,0x01,0x98,0x92,0x01,0x01,0x95,0x95,0x97,
+ 0x98,0x94,0x95,0x95,0x01,0x96,0x98,0x93,0x01,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,
+ 0x98,0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,
+ 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
+ 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,
+ 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x90,0x01,0x99,0x98,
+ 0x96,0x96,0x98,0x98,0x01,0x98,0x98,0x98,0x98,0x98,0x98,0x99,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x94,0x95,0x96,0x01,0x94,0x98,0x98,0x98,0x96,0x98,0x01,
+ 0x95,0x95,0x96,0x01,0x94,0x96,0x98,0x95,0x95,0x96,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
+ 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x01,0x01,
+ 0x98,0x95,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x99,0x98,0x9F,0x9F,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x91,0x98,0x98,0x01,0x98,0x95,0x01,0x98,0x99,0x98,0x9B,
+ 0x96,0x98,0x96,0x94,0x95,0x93,0x93,0x95,0x93,0x96,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
+ 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x90,0x94,0x96,0x94,
+ 0x95,0x98,0x96,0x95,0x96,0x98,0x96,0x01,0x98,0x98,0x94,0x94,0x9F,0x9F,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,
+ 0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x9D,
+ 0x9D,0x9D,0x95,0x95,0x95,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x9D,
+ 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,
+ 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,
+ 0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,
+ 0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,
+ 0x95,0x95,0x9D,0x9D,0x9D,0x90,0x98,0x01,0x99,0x98,0x95,0x98,0x01,0x95,0x95,0x01,
+ 0x96,0x95,0x93,0x96,0x93,0x01,0x92,0x93,0x94,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x95,0x01,
+ 0x95,0x98,0x01,0x94,0x96,0x96,0x95,0x92,0x98,0x96,0x01,0x96,0x9F,0x9F,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
+ 0x95,0x9D,0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x95,0x95,0x10,0x10,0x10,0x95,
+ 0x9D,0x95,0x10,0x10,0x10,0x95,0x10,0x10,0x10,0x95,0x9D,0x95,0x10,0x10,0x10,0x95,
+ 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x10,
+ 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x95,0x95,0x10,0x10,0x10,0x95,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x95,0x9D,0x95,0x10,0x10,
+ 0x10,0x10,0x10,0x10,0x10,0x95,0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
+ 0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x95,0x10,0x10,0x10,0x10,0x10,0x10,
+ 0x10,0x10,0x95,0x9D,0x9D,0x90,0x98,0x98,0x98,0x98,0x96,0x98,0x01,0x95,0x96,0x96,
+ 0x99,0x94,0x96,0x01,0x95,0x92,0x92,0x98,0x98,0x01,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x98,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x98,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x94,0x95,
+ 0x94,0x93,0x01,0x98,0x95,0x96,0x96,0x98,0x96,0x94,0x01,0x96,0x9F,0x9F,0x9D,0x9D,
+ 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
+ 0x90,0x90,0x91,0x94,0x9F,0x9D,0x9D,0x95,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,
+ 0x11,0x95,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x95,0x11,0x10,0x11,0x95,
+ 0x9D,0x95,0x11,0x10,0x11,0x95,0x11,0x10,0x11,0x10,0x95,0x95,0x11,0x10,0x11,0x95,
+ 0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x10,
+ 0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x95,0x10,0x11,0x10,0x95,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x95,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x95,0x10,0x11,0x10,
+ 0x11,0x10,0x11,0x10,0x11,0x10,0x95,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,
+ 0x95,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x95,0x11,0x10,0x11,0x10,0x11,0x10,
+ 0x11,0x10,0x11,0x95,0x9D,0x90,0x98,0x93,0x01,0x96,0x95,0x01,0x98,0x98,0x01,0x94,
+ 0x95,0x98,0x93,0x92,0x93,0x93,0x98,0x93,0x95,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x17,0x17,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x01,0x95,0x01,
+ 0x94,0x93,0x95,0x92,0x93,0x95,0x01,0x98,0x95,0x92,0x93,0x91,0x9F,0x9F,0x9D,0x9D,
+ 0x90,0x90,0x93,0x96,0x98,0x98,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x9D,0x9F,0x9D,0x9D,0x95,0x11,0x12,0x12,0x95,0x95,0x95,0x12,0x12,
+ 0x11,0x95,0x12,0x12,0x11,0x95,0x95,0x95,0x11,0x12,0x12,0x95,0x11,0x12,0x12,0x95,
+ 0x9D,0x95,0x12,0x12,0x11,0x95,0x12,0x12,0x11,0x12,0x12,0x95,0x11,0x12,0x12,0x95,
+ 0x11,0x12,0x12,0x95,0x95,0x95,0x12,0x12,0x11,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x12,
+ 0x11,0x12,0x95,0x95,0x95,0x12,0x12,0x12,0x95,0x12,0x12,0x12,0x95,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x95,0x12,0x11,0x12,0x95,0x95,0x95,0x12,0x12,0x12,0x95,0x12,0x12,0x12,
+ 0x95,0x95,0x95,0x12,0x11,0x12,0x95,0x95,0x95,0x95,0x12,0x12,0x11,0x95,0x95,0x95,
+ 0x95,0x12,0x12,0x12,0x95,0x95,0x95,0x95,0x95,0x95,0x12,0x12,0x11,0x95,0x95,0x95,
+ 0x11,0x12,0x12,0x95,0x9D,0x90,0x01,0x92,0x01,0x01,0x95,0x98,0x98,0x01,0x93,0x92,
+ 0x95,0x98,0x95,0x95,0x95,0x93,0x95,0x01,0x98,0x94,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x93,0x92,
+ 0x95,0x94,0x92,0x8E,0x94,0x8E,0x94,0x92,0x93,0x8E,0x8E,0x92,0x9F,0x9F,0x9D,0x9D,
+ 0x90,0x93,0x96,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x99,0x99,0x9D,0x9F,0x9D,0x9D,0x95,0x13,0x12,0x13,0x95,0x95,0x95,0x95,0x95,
+ 0x95,0x95,0x13,0x12,0x13,0x95,0x9D,0x95,0x13,0x12,0x13,0x95,0x13,0x12,0x13,0x95,
+ 0x9D,0x95,0x13,0x12,0x13,0x95,0x13,0x12,0x13,0x12,0x13,0x12,0x13,0x12,0x13,0x95,
+ 0x13,0x12,0x13,0x95,0x9D,0x95,0x13,0x12,0x13,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x12,
+ 0x13,0x12,0x95,0x95,0x95,0x12,0x13,0x12,0x95,0x12,0x13,0x12,0x95,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x95,0x12,0x13,0x12,0x95,0x95,0x95,0x12,0x13,0x12,0x95,0x12,0x13,0x12,
+ 0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x13,0x12,0x13,0x95,0x9D,0x9D,
+ 0x95,0x12,0x13,0x12,0x95,0x95,0x95,0x9D,0x9D,0x95,0x13,0x12,0x13,0x95,0x95,0x95,
+ 0x13,0x12,0x13,0x95,0x9D,0x90,0x93,0x01,0x95,0x96,0x96,0x95,0x96,0x94,0x92,0x97,
+ 0x96,0x98,0x98,0x96,0x94,0x96,0x95,0x01,0x95,0x93,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
+ 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x90,0x93,0x92,0x95,
+ 0x95,0x01,0x92,0x94,0x92,0x96,0x93,0x95,0x96,0x95,0x96,0x92,0x9F,0x9F,0x9D,0x9D,
+ 0x90,0x96,0x98,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x95,0x13,0x13,0x13,0x14,0x13,0x13,0x13,0x13,
+ 0x95,0x95,0x13,0x14,0x13,0x95,0x9D,0x95,0x13,0x13,0x13,0x95,0x13,0x13,0x13,0x95,
+ 0x9D,0x95,0x13,0x14,0x13,0x95,0x13,0x13,0x13,0x95,0x13,0x14,0x13,0x13,0x13,0x95,
+ 0x13,0x13,0x13,0x95,0x9D,0x95,0x13,0x13,0x13,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x13,
+ 0x13,0x13,0x13,0x14,0x13,0x13,0x13,0x95,0x95,0x13,0x13,0x14,0x95,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x95,0x14,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x95,0x13,0x13,0x13,
+ 0x13,0x13,0x13,0x14,0x13,0x95,0x9D,0x9D,0x9D,0x95,0x13,0x14,0x13,0x95,0x9D,0x9D,
+ 0x95,0x13,0x13,0x14,0x13,0x13,0x13,0x95,0x9D,0x95,0x13,0x14,0x13,0x13,0x13,0x13,
+ 0x13,0x13,0x13,0x95,0x9D,0x90,0x95,0x96,0x95,0x96,0x94,0x93,0x95,0x95,0x95,0x92,
+ 0x98,0x95,0x01,0x93,0x95,0x98,0x98,0x97,0x99,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,
+ 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
+ 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,
+ 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x90,0x96,0x98,0x95,
+ 0x93,0x01,0x95,0x96,0x01,0x93,0x01,0x96,0x93,0x93,0x95,0x91,0x9F,0x9F,0x9D,0x9D,
+ 0x90,0x98,0x98,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x9D,0x95,0x14,0x15,0x14,0x15,0x14,0x14,0x14,
+ 0x15,0x95,0x15,0x14,0x15,0x95,0x9D,0x95,0x15,0x14,0x15,0x95,0x15,0x14,0x14,0x95,
+ 0x9D,0x95,0x15,0x14,0x15,0x95,0x14,0x14,0x15,0x95,0x95,0x14,0x15,0x14,0x14,0x95,
+ 0x15,0x14,0x15,0x95,0x9D,0x95,0x14,0x14,0x15,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x14,
+ 0x15,0x14,0x15,0x14,0x15,0x14,0x14,0x95,0x95,0x14,0x15,0x14,0x95,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x95,0x14,0x15,0x14,0x14,0x14,0x15,0x14,0x15,0x14,0x95,0x95,0x14,0x14,
+ 0x15,0x14,0x15,0x14,0x15,0x14,0x95,0x9D,0x9D,0x95,0x15,0x14,0x15,0x95,0x9D,0x9D,
+ 0x95,0x14,0x15,0x14,0x15,0x14,0x14,0x95,0x9D,0x95,0x15,0x14,0x15,0x14,0x14,0x14,
+ 0x15,0x14,0x95,0x9D,0x9D,0x90,0x98,0x92,0x01,0x95,0x01,0x95,0x94,0x98,0x95,0x01,
+ 0x98,0x98,0x92,0x96,0x01,0x98,0x95,0x98,0x98,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x98,0x98,0x9D,0x9D,0x98,0x98,0x9D,0x9D,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
+ 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x96,0x95,
+ 0x93,0x95,0x98,0x93,0x95,0x92,0x98,0x95,0x96,0x98,0x94,0x94,0x9F,0x9F,0x9D,0x9D,
+ 0x90,0x98,0x99,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x15,0x15,
+ 0x15,0x95,0x15,0x15,0x15,0x95,0x9D,0x95,0x15,0x15,0x15,0x95,0x15,0x15,0x15,0x95,
+ 0x9D,0x95,0x15,0x15,0x15,0x95,0x15,0x15,0x15,0x95,0x9D,0x95,0x15,0x15,0x15,0x95,
+ 0x15,0x15,0x15,0x95,0x9D,0x95,0x15,0x15,0x15,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x15,
+ 0x15,0x15,0x95,0x95,0x95,0x15,0x15,0x15,0x95,0x15,0x15,0x15,0x95,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x95,0x15,0x15,0x15,0x95,0x95,0x95,0x15,0x15,0x15,0x95,0x95,0x95,0x95,
+ 0x95,0x95,0x95,0x15,0x15,0x15,0x95,0x9D,0x9D,0x95,0x15,0x15,0x15,0x95,0x9D,0x9D,
+ 0x95,0x15,0x15,0x15,0x95,0x95,0x95,0x9D,0x9D,0x95,0x15,0x15,0x15,0x15,0x15,0x15,
+ 0x95,0x95,0x9D,0x9D,0x9D,0x90,0x98,0x98,0x95,0x98,0x01,0x98,0x93,0x95,0x92,0x97,
+ 0x94,0x95,0x94,0x96,0x94,0x98,0x96,0x95,0x96,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
+ 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x90,0x94,0x96,0x95,
+ 0x96,0x96,0x91,0x98,0x93,0x8E,0x8E,0x01,0x96,0x96,0x98,0x94,0x9F,0x9F,0x9D,0x9D,
+ 0x91,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x95,0x16,0x16,0x16,0x95,0x95,0x95,0x16,0x15,
+ 0x16,0x95,0x16,0x15,0x16,0x95,0x95,0x95,0x16,0x16,0x16,0x95,0x16,0x16,0x16,0x95,
+ 0x95,0x95,0x16,0x15,0x16,0x95,0x16,0x15,0x16,0x95,0x9D,0x95,0x16,0x16,0x16,0x95,
+ 0x16,0x16,0x16,0x95,0x95,0x95,0x16,0x15,0x16,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x15,
+ 0x16,0x16,0x95,0x95,0x95,0x16,0x16,0x15,0x95,0x16,0x16,0x15,0x95,0x95,0x95,0x95,
+ 0x95,0x95,0x95,0x15,0x16,0x16,0x95,0x9D,0x95,0x16,0x16,0x15,0x95,0x16,0x16,0x15,
+ 0x95,0x95,0x95,0x15,0x16,0x16,0x95,0x9D,0x9D,0x95,0x16,0x15,0x16,0x95,0x9D,0x9D,
+ 0x95,0x16,0x16,0x15,0x95,0x95,0x95,0x95,0x95,0x95,0x16,0x15,0x16,0x16,0x16,0x15,
+ 0x16,0x95,0x9D,0x9D,0x9D,0x90,0x93,0x01,0x96,0x98,0x92,0x98,0x01,0x98,0x95,0x94,
+ 0x98,0x01,0x01,0x92,0x96,0x99,0x98,0x01,0x91,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,
+ 0x17,0x17,0x98,0x98,0x98,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x96,0x8E,
+ 0x8E,0x96,0x95,0x94,0x92,0x8E,0x94,0x8E,0x98,0x01,0x01,0x98,0x9F,0x9F,0x9D,0x9D,
+ 0x94,0x9B,0x9D,0x9D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9D,0x95,0x17,0x17,0x16,0x17,0x17,0x17,0x17,0x17,
+ 0x17,0x95,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x95,0x17,0x17,0x17,0x17,
+ 0x17,0x17,0x16,0x17,0x17,0x95,0x17,0x17,0x17,0x95,0x9D,0x95,0x17,0x17,0x17,0x95,
+ 0x17,0x17,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x17,
+ 0x17,0x17,0x16,0x17,0x17,0x17,0x17,0x17,0x95,0x17,0x16,0x17,0x17,0x17,0x17,0x17,
+ 0x17,0x17,0x95,0x17,0x17,0x17,0x95,0x9D,0x95,0x17,0x16,0x17,0x95,0x17,0x17,0x17,
+ 0x17,0x17,0x16,0x17,0x17,0x17,0x95,0x9D,0x9D,0x95,0x16,0x17,0x17,0x95,0x9D,0x9D,
+ 0x95,0x17,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x95,0x16,0x17,0x17,0x95,0x17,0x17,
+ 0x17,0x17,0x95,0x9D,0x9D,0x90,0x96,0x95,0x94,0x01,0x98,0x94,0x95,0x92,0x97,0x96,
+ 0x95,0x01,0x96,0x98,0x96,0x96,0x01,0x95,0x96,0x93,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,
+ 0x17,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x93,0x95,0x92,
+ 0x96,0x95,0x95,0x98,0x98,0x01,0x98,0x96,0x98,0x01,0x94,0x96,0x9F,0x9F,0x9D,0x9D,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9D,0x9D,0x95,0x17,0x18,0x17,0x18,0x17,0x18,0x17,
+ 0x95,0x9D,0x95,0x17,0x18,0x17,0x18,0x17,0x18,0x17,0x95,0x9D,0x95,0x17,0x18,0x17,
+ 0x18,0x17,0x18,0x17,0x95,0x95,0x18,0x17,0x18,0x95,0x9D,0x95,0x18,0x17,0x18,0x95,
+ 0x18,0x17,0x18,0x17,0x18,0x17,0x18,0x17,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x17,
+ 0x18,0x17,0x18,0x17,0x18,0x17,0x18,0x95,0x95,0x17,0x18,0x17,0x18,0x17,0x18,0x17,
+ 0x18,0x17,0x95,0x17,0x18,0x17,0x95,0x9D,0x95,0x17,0x18,0x17,0x95,0x95,0x18,0x17,
+ 0x18,0x17,0x18,0x17,0x18,0x95,0x9D,0x9D,0x9D,0x95,0x18,0x17,0x18,0x95,0x9D,0x9D,
+ 0x95,0x17,0x18,0x17,0x18,0x17,0x18,0x17,0x18,0x95,0x18,0x17,0x18,0x95,0x95,0x17,
+ 0x18,0x17,0x18,0x95,0x9D,0x90,0x95,0x95,0x95,0x95,0x01,0x98,0x94,0x98,0x01,0x98,
+ 0x98,0x98,0x98,0x01,0x01,0x98,0x98,0x95,0x98,0x96,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x93,0x01,0x98,
+ 0x95,0x94,0x98,0x95,0x01,0x98,0x01,0x95,0x95,0x98,0x98,0x95,0x9F,0x9F,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,
+ 0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,
+ 0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x9D,
+ 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,
+ 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,
+ 0x95,0x95,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,
+ 0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x9D,
+ 0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x95,
+ 0x95,0x95,0x95,0x9D,0x9D,0x90,0x95,0x01,0x95,0x98,0x96,0x01,0x98,0x98,0x98,0x96,
+ 0x95,0x98,0x98,0x95,0x95,0x98,0x95,0x98,0x93,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x98,0x17,0x17,0x98,0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x98,0x98,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x01,0x98,
+ 0x93,0x8E,0x94,0x95,0x98,0x98,0x95,0x98,0x98,0x97,0x98,0x96,0x9F,0x9F,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x01,0x94,0x98,0x98,0x01,0x96,0x98,0x94,0x98,0x95,
+ 0x96,0x99,0x96,0x98,0x95,0x98,0x95,0x94,0x92,0x92,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x9D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
+ 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x17,0x17,0x98,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x95,0x96,
+ 0x95,0x01,0x98,0x98,0x95,0x01,0x94,0x96,0x96,0x94,0x93,0x96,0x9F,0x9F,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x99,0x98,0x98,0x98,0x98,0x98,0x01,0x98,0x96,
+ 0x98,0x98,0x96,0x98,0x98,0x98,0x95,0x95,0x01,0x92,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x9D,0x9D,0x9A,
+ 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
+ 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x98,0x98,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,
+ 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x90,0x96,0x01,0x96,
+ 0x95,0x95,0x96,0x98,0x01,0x93,0x96,0x95,0x96,0x96,0x98,0x96,0x99,0x95,0x94,0x95,
+ 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x94,0x94,0x94,0x94,0x94,
+ 0x94,0x94,0x94,0x94,0x94,0x94,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,
+ 0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x92,0x92,0x92,0x92,
+ 0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,
+ 0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,
+ 0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,
+ 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
+ 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
+ 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
+ 0x90,0x90,0x90,0x90,0x90,0x90,0x01,0x95,0x98,0x01,0x98,0x01,0x01,0x99,0x9A,0x96,
+ 0x98,0x01,0x96,0x94,0x95,0x92,0x92,0x95,0x94,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
+ 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x9D,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x90,0x01,0x96,0x97,
+ 0x94,0x95,0x95,0x98,0x98,0x98,0x95,0x96,0x98,0x98,0x94,0x01,0x94,0x01,0x01,0x93,
+ 0x95,0x97,0x95,0x97,0x96,0x94,0x98,0x97,0x01,0x97,0x95,0x98,0x96,0x96,0x95,0x97,
+ 0x98,0x98,0x95,0x95,0x98,0x01,0x98,0x01,0x01,0x98,0x01,0x98,0x98,0x98,0x98,0x98,
+ 0x98,0x96,0x98,0x99,0x96,0x95,0x98,0x98,0x94,0x98,0x98,0x01,0x94,0x98,0x96,0x98,
+ 0x99,0x95,0x95,0x99,0x97,0x94,0x98,0x96,0x95,0x95,0x94,0x96,0x01,0x98,0x98,0x96,
+ 0x96,0x95,0x96,0x96,0x98,0x95,0x94,0x98,0x92,0x95,0x92,0x8E,0x8E,0x92,0x96,0x95,
+ 0x95,0x92,0x8E,0x92,0x95,0x01,0x95,0x95,0x96,0x98,0x96,0x95,0x95,0x96,0x95,0x98,
+ 0x98,0x98,0x98,0x99,0x98,0x99,0x99,0x98,0x98,0x96,0x98,0x96,0x94,0x94,0x94,0x94,
+ 0x98,0x93,0x94,0x95,0x01,0x94,0x95,0x94,0x96,0x96,0x93,0x96,0x95,0x96,0x95,0x96,
+ 0x98,0x98,0x01,0x94,0x98,0x98,0x94,0x92,0x95,0x98,0x98,0x98,0x98,0x95,0x99,0x98,
+ 0x93,0x98,0x98,0x98,0x01,0x98,0x98,0x98,0x9A,0x01,0x98,0x98,0x9A,0x01,0x98,0x9B,
+ 0x01,0x95,0x96,0x96,0x01,0x94,0x95,0x98,0x96,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,
+ 0x17,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
+ 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x97,0x95,
+ 0x94,0x94,0x01,0x92,0x98,0x98,0x97,0x01,0x01,0x97,0x98,0x95,0x95,0x95,0x01,0x98,
+ 0x96,0x01,0x01,0x01,0x98,0x01,0x93,0x96,0x01,0x01,0x95,0x01,0x98,0x01,0x98,0x01,
+ 0x98,0x96,0x01,0x98,0x98,0x98,0x94,0x97,0x98,0x98,0x98,0x01,0x98,0x96,0x98,0x96,
+ 0x98,0x98,0x98,0x98,0x98,0x01,0x9A,0x9A,0x99,0x99,0x95,0x98,0x99,0x99,0x98,0x96,
+ 0x99,0x98,0x01,0x01,0x96,0x01,0x95,0x8E,0x93,0x95,0x01,0x8E,0x96,0x8E,0x94,0x8E,
+ 0x8E,0x95,0x8E,0x92,0x8E,0x92,0x92,0x93,0x8E,0x92,0x8E,0x92,0x96,0x94,0x93,0x8E,
+ 0x8E,0x01,0x8E,0x94,0x92,0x96,0x95,0x01,0x01,0x95,0x98,0x95,0x94,0x98,0x98,0x98,
+ 0x98,0x96,0x99,0x98,0x98,0x98,0x94,0x01,0x99,0x98,0x98,0x95,0x96,0x93,0x95,0x93,
+ 0x95,0x98,0x98,0x96,0x95,0x96,0x96,0x98,0x94,0x93,0x96,0x98,0x98,0x95,0x98,0x98,
+ 0x98,0x94,0x98,0x95,0x95,0x92,0x01,0x94,0x95,0x98,0x9A,0x01,0x98,0x99,0x01,0x98,
+ 0x95,0x98,0x98,0x98,0x98,0x01,0x98,0x01,0x98,0x99,0x98,0x95,0x94,0x99,0x01,0x98,
+ 0x01,0x92,0x94,0x93,0x95,0x98,0x93,0x8E,0x95,0x96,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x98,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x98,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x96,0x98,0x96,
+ 0x95,0x98,0x94,0x96,0x96,0x98,0x01,0x01,0x98,0x95,0x98,0x94,0x01,0x94,0x95,0x01,
+ 0x01,0x01,0x94,0x96,0x96,0x96,0x92,0x96,0x98,0x96,0x95,0x98,0x96,0x95,0x96,0x96,
+ 0x98,0x94,0x96,0x94,0x95,0x95,0x98,0x98,0x98,0x98,0x98,0x99,0x01,0x94,0x98,0x98,
+ 0x98,0x01,0x96,0x98,0x98,0x98,0x01,0x9A,0x98,0x98,0x98,0x95,0x96,0x99,0x96,0x01,
+ 0x95,0x96,0x91,0x93,0x94,0x94,0x95,0x94,0x96,0x92,0x94,0x96,0x98,0x94,0x94,0x92,
+ 0x01,0x98,0x94,0x94,0x01,0x94,0x94,0x93,0x8E,0x92,0x95,0x92,0x93,0x94,0x8E,0x01,
+ 0x95,0x95,0x94,0x94,0x94,0x01,0x94,0x01,0x98,0x93,0x96,0x96,0x93,0x98,0x96,0x95,
+ 0x98,0x98,0x98,0x99,0x9A,0x98,0x96,0x95,0x98,0x95,0x95,0x95,0x96,0x94,0x94,0x95,
+ 0x96,0x95,0x98,0x98,0x95,0x95,0x99,0x95,0x9A,0x98,0x99,0x98,0x98,0x96,0x95,0x98,
+ 0x01,0x95,0x96,0x01,0x01,0x98,0x98,0x9A,0x94,0x95,0x98,0x99,0x99,0x98,0x96,0x96,
+ 0x98,0x98,0x96,0x94,0x95,0x92,0x97,0x96,0x98,0x98,0x01,0x98,0x97,0x01,0x98,0x98,
+ 0x98,0x96,0x01,0x95,0x98,0x94,0x8E,0x95,0x98,0x94,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x98,0x17,0x17,0x17,0x98,0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x01,0x96,0x01,
+ 0x93,0x95,0x96,0x98,0x96,0x01,0x95,0x01,0x96,0x96,0x96,0x96,0x95,0x98,0x96,0x96,
+ 0x95,0x94,0x96,0x95,0x96,0x01,0x98,0x96,0x94,0x96,0x96,0x96,0x96,0x92,0x01,0x01,
+ 0x96,0x98,0x98,0x98,0x01,0x98,0x98,0x98,0x99,0x96,0x01,0x94,0x98,0x01,0x95,0x98,
+ 0x98,0x98,0x98,0x01,0x98,0x99,0x95,0x9A,0x99,0x01,0x98,0x96,0x96,0x96,0x95,0x93,
+ 0x01,0x94,0x94,0x92,0x98,0x92,0x98,0x96,0x96,0x96,0x96,0x94,0x98,0x95,0x01,0x98,
+ 0x98,0x95,0x96,0x93,0x92,0x96,0x8E,0x8E,0x92,0x93,0x93,0x93,0x8E,0x8E,0x92,0x95,
+ 0x98,0x01,0x01,0x98,0x94,0x95,0x98,0x98,0x98,0x98,0x98,0x01,0x99,0x01,0x98,0x97,
+ 0x96,0x96,0x98,0x98,0x98,0x98,0x97,0x98,0x94,0x96,0x98,0x94,0x98,0x96,0x96,0x99,
+ 0x98,0x01,0x01,0x95,0x98,0x95,0x96,0x94,0x99,0x01,0x9A,0x98,0x01,0x94,0x98,0x98,
+ 0x95,0x94,0x98,0x98,0x99,0x98,0x99,0x98,0x95,0x93,0x95,0x01,0x96,0x94,0x98,0x98,
+ 0x98,0x97,0x94,0x95,0x96,0x01,0x96,0x93,0x95,0x94,0x01,0x97,0x98,0x01,0x98,0x01,
+ 0x99,0x94,0x98,0x01,0x92,0x92,0x01,0x93,0x94,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x94,0x95,0x95,
+ 0x94,0x96,0x95,0x95,0x96,0x98,0x96,0x96,0x98,0x96,0x01,0x96,0x94,0x98,0x95,0x96,
+ 0x01,0x96,0x96,0x96,0x95,0x96,0x94,0x01,0x96,0x94,0x96,0x95,0x98,0x98,0x98,0x98,
+ 0x98,0x95,0x95,0x98,0x98,0x95,0x95,0x99,0x98,0x98,0x98,0x98,0x98,0x01,0x95,0x98,
+ 0x98,0x98,0x99,0x95,0x99,0x98,0x9A,0x99,0x98,0x01,0x94,0x93,0x95,0x94,0x95,0x96,
+ 0x96,0x94,0x96,0x94,0x96,0x98,0x94,0x98,0x96,0x95,0x98,0x98,0x95,0x92,0x95,0x96,
+ 0x92,0x8E,0x8E,0x8E,0x96,0x95,0x8E,0x8E,0x8E,0x92,0x92,0x91,0x8E,0x95,0x95,0x94,
+ 0x98,0x01,0x95,0x95,0x98,0x99,0x01,0x98,0x98,0x96,0x98,0x98,0x98,0x96,0x95,0x95,
+ 0x98,0x9A,0x98,0x98,0x01,0x94,0x01,0x94,0x01,0x97,0x96,0x95,0x95,0x99,0x95,0x98,
+ 0x96,0x98,0x98,0x95,0x98,0x93,0x98,0x98,0x95,0x98,0x98,0x95,0x01,0x96,0x98,0x95,
+ 0x96,0x95,0x01,0x95,0x96,0x95,0x97,0x95,0x96,0x01,0x98,0x96,0x94,0x98,0x98,0x98,
+ 0x94,0x95,0x95,0x01,0x96,0x98,0x95,0x95,0x95,0x98,0x92,0x01,0x01,0x95,0x93,0x98,
+ 0x92,0x95,0x98,0x01,0x8E,0x95,0x94,0x94,0x95,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,
+ 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x96,0x96,0x98,
+ 0x96,0x98,0x98,0x96,0x98,0x96,0x95,0x94,0x95,0x98,0x98,0x98,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x97,0x95,0x96,0x98,0x96,0x95,0x94,0x95,0x92,0x95,0x8E,
+ 0x95,0x94,0x94,0x93,0x93,0x92,0x92,0x93,0x01,0x93,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,
+ 0x17,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
+ 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,
+ 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,
+ 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x95,0x95,
+ 0x98,0x94,0x95,0x98,0x01,0x98,0x96,0x98,0x94,0x95,0x95,0x95,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x94,0x95,0x98,0x93,0x93,0x94,0x95,0x98,0x98,0x94,0x98,
+ 0x96,0x95,0x93,0x92,0x94,0x93,0x98,0x96,0x92,0x92,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,0x98,0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9A,
+ 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
+ 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,
+ 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,
+ 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x90,0x96,0x94,0x96,
+ 0x96,0x95,0x01,0x96,0x94,0x96,0x96,0x01,0x95,0x95,0x92,0x01,0x9F,0x9F,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x91,0x94,0x98,0x98,0x95,0x98,0x98,0x93,0x95,0x98,0x98,
+ 0x01,0x8E,0x8E,0x92,0x94,0x94,0x93,0x8E,0x92,0x92,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x96,0x95,
+ 0x01,0x95,0x98,0x96,0x94,0x01,0x96,0x92,0x96,0x95,0x95,0x96,0x9F,0x9F,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,
+ 0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x9D,
+ 0x9D,0x9D,0x95,0x95,0x95,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x9D,
+ 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,
+ 0x95,0x9D,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x9D,0x95,0x95,0x95,
+ 0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,
+ 0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x92,0x92,0x95,0x97,0x98,0x98,0x96,0x98,0x98,
+ 0x95,0x8E,0x92,0x95,0x01,0x01,0x8E,0x8E,0x96,0x8E,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x9D,0x9D,
+ 0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x9D,0x95,0x95,0x9D,0x9D,0x95,0x95,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x9D,0x9D,
+ 0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x9D,0x9D,0x95,0x95,0x9D,
+ 0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x01,0x95,0x92,
+ 0x92,0x96,0x96,0x95,0x95,0x96,0x94,0x95,0x96,0x96,0x95,0x96,0x9F,0x9F,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
+ 0x95,0x9D,0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x95,0x95,0x10,0x10,0x10,0x95,
+ 0x9D,0x95,0x10,0x10,0x10,0x95,0x10,0x10,0x10,0x95,0x9D,0x95,0x10,0x10,0x10,0x95,
+ 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,
+ 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x95,0x9D,0x95,0x10,0x10,0x10,0x10,0x10,0x10,
+ 0x10,0x95,0x95,0x10,0x10,0x10,0x95,0x9D,0x95,0x10,0x10,0x10,0x95,0x10,0x10,0x10,
+ 0x10,0x10,0x10,0x10,0x10,0x95,0x9D,0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x95,
+ 0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x01,0x97,0x99,0x96,0x98,0x94,0x97,0x94,0x96,0x96,
+ 0x8E,0x8E,0x94,0x92,0x92,0x92,0x8E,0x96,0x92,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x14,0x95,0x9D,0x9D,0x95,0x14,0x95,0x95,
+ 0x14,0x14,0x14,0x14,0x95,0x95,0x14,0x14,0x95,0x14,0x14,0x95,0x95,0x14,0x14,0x95,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x95,0x14,0x14,0x14,0x14,0x14,0x14,0x95,0x14,0x95,0x9D,0x9D,0x95,0x14,0x95,0x95,
+ 0x14,0x14,0x14,0x14,0x14,0x14,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x14,0x14,0x95,0x95,0x14,0x14,0x95,
+ 0x14,0x95,0x9D,0x9D,0x95,0x14,0x95,0x95,0x14,0x14,0x14,0x14,0x14,0x14,0x95,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x01,0x95,
+ 0x01,0x98,0x01,0x96,0x95,0x96,0x96,0x96,0x95,0x98,0x01,0x01,0x9F,0x9F,0x9D,0x9D,
+ 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
+ 0x90,0x90,0x91,0x94,0x9F,0x9D,0x9D,0x95,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,
+ 0x10,0x95,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x95,0x10,0x11,0x10,0x95,
+ 0x9D,0x95,0x10,0x11,0x10,0x95,0x10,0x11,0x10,0x11,0x95,0x95,0x10,0x11,0x10,0x95,
+ 0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x11,
+ 0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x95,0x11,0x10,0x11,0x10,0x11,0x10,0x11,
+ 0x10,0x11,0x95,0x11,0x10,0x11,0x95,0x9D,0x95,0x11,0x10,0x11,0x95,0x11,0x10,0x11,
+ 0x10,0x11,0x10,0x11,0x10,0x11,0x95,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,
+ 0x95,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x98,0x98,0x97,0x98,0x97,0x93,0x97,0x96,0x98,
+ 0x92,0x92,0x95,0x95,0x95,0x95,0x94,0x98,0x95,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x14,0x14,0x95,0x95,0x14,0x14,0x95,0x14,
+ 0x14,0x95,0x95,0x14,0x14,0x95,0x14,0x14,0x95,0x14,0x14,0x14,0x95,0x14,0x14,0x95,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x95,0x14,0x14,0x95,0x95,0x95,0x95,0x95,0x14,0x14,0x95,0x95,0x14,0x14,0x95,0x14,
+ 0x14,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x14,0x14,0x14,0x14,0x95,0x95,
+ 0x14,0x14,0x95,0x95,0x14,0x14,0x95,0x14,0x14,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x96,0x94,0x96,
+ 0x95,0x95,0x93,0x96,0x95,0x95,0x98,0x96,0x98,0x98,0x94,0x98,0x9F,0x9F,0x9D,0x9D,
+ 0x90,0x90,0x93,0x96,0x98,0x98,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x9D,0x9F,0x9D,0x9D,0x95,0x12,0x12,0x12,0x95,0x95,0x95,0x12,0x11,
+ 0x12,0x95,0x12,0x11,0x12,0x95,0x95,0x95,0x12,0x12,0x12,0x95,0x12,0x12,0x12,0x95,
+ 0x9D,0x95,0x12,0x11,0x12,0x95,0x12,0x11,0x12,0x12,0x12,0x95,0x12,0x12,0x12,0x95,
+ 0x12,0x12,0x12,0x95,0x95,0x95,0x12,0x11,0x12,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x11,
+ 0x12,0x12,0x95,0x95,0x95,0x12,0x12,0x11,0x95,0x12,0x12,0x11,0x95,0x95,0x95,0x11,
+ 0x12,0x12,0x95,0x11,0x12,0x12,0x95,0x9D,0x95,0x12,0x12,0x11,0x95,0x12,0x12,0x11,
+ 0x95,0x95,0x95,0x11,0x12,0x12,0x95,0x11,0x12,0x12,0x95,0x95,0x95,0x12,0x12,0x11,
+ 0x95,0x12,0x12,0x11,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x96,0x98,0x01,0x94,0x98,0x97,0x94,0x98,0x95,0x95,
+ 0x94,0x95,0x94,0x95,0x95,0x96,0x95,0x95,0x01,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x14,0x14,0x14,0x14,0x14,0x14,0x95,0x14,
+ 0x14,0x14,0x14,0x14,0x14,0x95,0x14,0x14,0x95,0x14,0x14,0x14,0x14,0x14,0x14,0x95,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x95,0x14,0x14,0x14,0x14,0x14,0x95,0x95,0x14,0x14,0x14,0x14,0x14,0x14,0x95,0x95,
+ 0x14,0x14,0x14,0x14,0x14,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x14,0x14,0x95,0x9D,0x95,
+ 0x14,0x14,0x14,0x14,0x14,0x14,0x95,0x95,0x14,0x14,0x14,0x14,0x14,0x95,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x94,0x96,
+ 0x95,0x98,0x96,0x94,0x96,0x95,0x94,0x96,0x94,0x96,0x98,0x98,0x9F,0x9F,0x9D,0x9D,
+ 0x90,0x93,0x96,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x99,0x99,0x9D,0x9F,0x9D,0x9D,0x95,0x12,0x13,0x12,0x95,0x95,0x95,0x95,0x95,
+ 0x95,0x95,0x12,0x13,0x12,0x95,0x9D,0x95,0x12,0x13,0x12,0x95,0x12,0x13,0x12,0x95,
+ 0x9D,0x95,0x12,0x13,0x12,0x95,0x12,0x13,0x12,0x13,0x12,0x13,0x12,0x13,0x12,0x95,
+ 0x12,0x13,0x12,0x95,0x9D,0x95,0x12,0x13,0x12,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x13,
+ 0x12,0x13,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x13,0x12,0x13,0x95,0x9D,0x95,0x13,
+ 0x12,0x13,0x95,0x13,0x12,0x13,0x95,0x9D,0x95,0x13,0x12,0x13,0x95,0x13,0x12,0x13,
+ 0x95,0x95,0x95,0x13,0x12,0x13,0x95,0x13,0x12,0x13,0x95,0x9D,0x9D,0x95,0x95,0x95,
+ 0x95,0x13,0x12,0x13,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x97,0x95,0x92,0x96,0x97,0x98,0x98,0x98,0x98,0x95,
+ 0x93,0x96,0x96,0x95,0x98,0x98,0x98,0x98,0x98,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x14,0x14,0x14,0x14,0x14,0x14,0x95,0x14,
+ 0x14,0x95,0x95,0x14,0x14,0x95,0x14,0x14,0x95,0x14,0x14,0x95,0x14,0x14,0x14,0x95,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x95,0x14,0x14,0x95,0x95,0x95,0x95,0x95,0x14,0x14,0x14,0x14,0x14,0x14,0x95,0x95,
+ 0x95,0x95,0x95,0x95,0x14,0x14,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x14,0x14,0x14,0x14,0x95,0x95,
+ 0x14,0x14,0x14,0x14,0x14,0x14,0x95,0x95,0x95,0x95,0x95,0x95,0x14,0x14,0x95,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x94,0x01,0x98,
+ 0x01,0x96,0x98,0x96,0x93,0x95,0x01,0x96,0x96,0x94,0x01,0x98,0x9F,0x9F,0x9D,0x9D,
+ 0x90,0x96,0x98,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x95,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x13,
+ 0x95,0x95,0x13,0x13,0x13,0x95,0x9D,0x95,0x13,0x13,0x13,0x95,0x13,0x13,0x14,0x95,
+ 0x9D,0x95,0x13,0x13,0x13,0x95,0x14,0x13,0x13,0x95,0x13,0x13,0x13,0x13,0x14,0x95,
+ 0x13,0x13,0x13,0x95,0x9D,0x95,0x14,0x13,0x13,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x13,
+ 0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x95,0x95,0x13,0x13,0x13,0x95,0x9D,0x95,0x13,
+ 0x13,0x13,0x95,0x13,0x13,0x13,0x95,0x9D,0x95,0x13,0x13,0x13,0x95,0x13,0x14,0x13,
+ 0x13,0x13,0x13,0x13,0x13,0x13,0x95,0x13,0x13,0x13,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x95,0x13,0x13,0x13,0x13,0x13,0x14,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x97,0x94,0x98,0x97,0x94,0x92,0x95,0x94,0x94,0x95,
+ 0x98,0x96,0x95,0x93,0x98,0x01,0x01,0x98,0x94,0x01,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x14,0x14,0x95,0x95,0x14,0x14,0x95,0x14,
+ 0x14,0x95,0x95,0x14,0x14,0x95,0x14,0x14,0x95,0x14,0x14,0x95,0x95,0x14,0x14,0x95,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x95,0x14,0x14,0x14,0x14,0x14,0x14,0x95,0x14,0x14,0x95,0x95,0x14,0x14,0x95,0x14,
+ 0x14,0x14,0x14,0x14,0x14,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x14,0x14,0x95,0x95,0x14,0x14,0x95,
+ 0x14,0x14,0x95,0x95,0x14,0x14,0x95,0x14,0x14,0x14,0x14,0x14,0x14,0x95,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x94,0x96,
+ 0x96,0x98,0x01,0x01,0x01,0x95,0x98,0x95,0x98,0x01,0x98,0x98,0x9F,0x9F,0x9D,0x9D,
+ 0x90,0x98,0x98,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x9D,0x95,0x14,0x14,0x15,0x14,0x15,0x14,0x15,
+ 0x14,0x95,0x14,0x15,0x14,0x95,0x9D,0x95,0x14,0x14,0x14,0x95,0x14,0x15,0x14,0x95,
+ 0x9D,0x95,0x14,0x15,0x14,0x95,0x14,0x15,0x14,0x95,0x95,0x15,0x14,0x15,0x14,0x95,
+ 0x14,0x14,0x14,0x95,0x9D,0x95,0x14,0x15,0x14,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,
+ 0x14,0x14,0x14,0x15,0x14,0x15,0x14,0x15,0x95,0x14,0x14,0x15,0x95,0x9D,0x95,0x15,
+ 0x14,0x14,0x95,0x15,0x14,0x15,0x95,0x9D,0x95,0x14,0x14,0x15,0x95,0x15,0x14,0x15,
+ 0x14,0x14,0x14,0x15,0x14,0x95,0x95,0x15,0x14,0x14,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x95,0x14,0x14,0x15,0x14,0x15,0x14,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x93,0x96,0x98,0x97,0x98,0x96,0x98,0x95,0x01,
+ 0x96,0x98,0x98,0x01,0x96,0x92,0x01,0x91,0x95,0x92,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x9D,0x9D,0x95,0x95,0x9D,0x95,
+ 0x95,0x9D,0x9D,0x95,0x95,0x9D,0x95,0x95,0x9D,0x95,0x95,0x9D,0x9D,0x95,0x95,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x95,0x95,0x9D,0x9D,0x95,0x95,0x9D,0x95,
+ 0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x9D,0x9D,0x95,0x95,0x9D,
+ 0x95,0x95,0x9D,0x9D,0x95,0x95,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x98,0x95,
+ 0x98,0x96,0x98,0x95,0x96,0x99,0x98,0x01,0x96,0x96,0x98,0x01,0x9F,0x9F,0x9D,0x9D,
+ 0x90,0x98,0x99,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
+ 0x1F,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x15,0x15,
+ 0x15,0x95,0x15,0x15,0x15,0x95,0x9D,0x95,0x15,0x15,0x15,0x95,0x15,0x15,0x15,0x95,
+ 0x9D,0x95,0x15,0x15,0x15,0x95,0x15,0x15,0x15,0x95,0x9D,0x95,0x15,0x15,0x15,0x95,
+ 0x15,0x15,0x15,0x95,0x9D,0x95,0x15,0x15,0x15,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,
+ 0x95,0x95,0x95,0x95,0x95,0x15,0x15,0x15,0x95,0x15,0x15,0x15,0x95,0x9D,0x95,0x15,
+ 0x15,0x15,0x95,0x15,0x15,0x15,0x95,0x9D,0x95,0x15,0x15,0x15,0x95,0x15,0x15,0x15,
+ 0x15,0x15,0x15,0x95,0x95,0x9D,0x95,0x15,0x15,0x15,0x95,0x9D,0x9D,0x95,0x95,0x95,
+ 0x95,0x15,0x15,0x15,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x94,0x98,0x98,0x98,0x01,0x97,0x96,0x95,0x01,0x95,
+ 0x8E,0x96,0x98,0x96,0x95,0x92,0x96,0x95,0x92,0x01,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x94,0x96,
+ 0x98,0x95,0x95,0x98,0x99,0x94,0x98,0x98,0x98,0x01,0x98,0x96,0x9F,0x9F,0x9D,0x9D,
+ 0x91,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x95,0x16,0x16,0x15,0x95,0x95,0x95,0x15,0x16,
+ 0x16,0x95,0x15,0x16,0x16,0x95,0x95,0x95,0x16,0x16,0x15,0x95,0x16,0x16,0x15,0x95,
+ 0x95,0x95,0x15,0x16,0x16,0x95,0x15,0x16,0x16,0x95,0x9D,0x95,0x16,0x16,0x15,0x95,
+ 0x16,0x16,0x15,0x95,0x95,0x95,0x15,0x16,0x16,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x16,
+ 0x16,0x16,0x95,0x95,0x95,0x16,0x15,0x16,0x95,0x16,0x15,0x16,0x95,0x95,0x95,0x16,
+ 0x16,0x16,0x95,0x16,0x16,0x16,0x95,0x95,0x95,0x16,0x15,0x16,0x95,0x16,0x15,0x16,
+ 0x16,0x16,0x15,0x16,0x95,0x9D,0x95,0x16,0x16,0x16,0x95,0x95,0x95,0x16,0x15,0x16,
+ 0x95,0x16,0x15,0x16,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x95,0x96,0x95,0x94,0x98,0x95,0x95,0x94,0x94,
+ 0x8E,0x95,0x94,0x93,0x93,0x93,0x95,0x94,0x91,0x94,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x97,0x95,
+ 0x01,0x98,0x98,0x96,0x98,0x95,0x01,0x98,0x95,0x95,0x96,0x96,0x9F,0x9F,0x9D,0x9D,
+ 0x94,0x9B,0x9D,0x9D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9D,0x95,0x17,0x17,0x17,0x17,0x17,0x16,0x17,0x17,
+ 0x17,0x95,0x17,0x17,0x17,0x16,0x17,0x17,0x17,0x17,0x17,0x95,0x17,0x16,0x17,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x95,0x17,0x17,0x17,0x95,0x9D,0x95,0x17,0x16,0x17,0x95,
+ 0x17,0x17,0x17,0x17,0x17,0x16,0x17,0x17,0x17,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x16,0x17,0x17,0x95,0x17,0x17,0x17,0x17,0x16,0x17,0x17,
+ 0x17,0x17,0x95,0x17,0x17,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x95,0x16,0x17,0x17,
+ 0x95,0x17,0x17,0x17,0x17,0x95,0x95,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x17,0x17,
+ 0x95,0x17,0x17,0x17,0x17,0x16,0x17,0x17,0x17,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x96,0x96,0x95,0x98,0x93,0x95,0x95,0x93,0x93,0x95,
+ 0x8E,0x95,0x92,0x93,0x94,0x95,0x92,0x01,0x93,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x94,0x99,
+ 0x01,0x99,0x96,0x97,0x95,0x01,0x94,0x98,0x94,0x01,0x92,0x95,0x9F,0x9F,0x9D,0x9D,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
+ 0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9D,0x9D,0x95,0x18,0x17,0x18,0x17,0x18,0x17,0x18,
+ 0x95,0x9D,0x95,0x18,0x17,0x18,0x17,0x18,0x17,0x18,0x95,0x9D,0x95,0x18,0x17,0x18,
+ 0x17,0x18,0x17,0x18,0x95,0x95,0x17,0x18,0x17,0x95,0x9D,0x95,0x17,0x18,0x17,0x95,
+ 0x17,0x18,0x17,0x18,0x17,0x18,0x17,0x18,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,
+ 0x17,0x18,0x17,0x18,0x17,0x18,0x17,0x95,0x9D,0x95,0x17,0x18,0x17,0x18,0x17,0x18,
+ 0x17,0x95,0x9D,0x95,0x17,0x18,0x17,0x18,0x17,0x18,0x17,0x95,0x95,0x18,0x17,0x18,
+ 0x95,0x95,0x17,0x18,0x17,0x18,0x95,0x95,0x17,0x18,0x17,0x18,0x17,0x18,0x17,0x95,
+ 0x95,0x18,0x17,0x18,0x17,0x18,0x17,0x18,0x17,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x94,0x98,0x95,0x95,0x92,0x01,0x93,0x95,0x98,0x95,
+ 0x94,0x93,0x95,0x93,0x94,0x96,0x94,0x96,0x98,0x96,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x98,0x95,
+ 0x98,0x98,0x98,0x98,0x98,0x94,0x01,0x95,0x95,0x96,0x94,0x96,0x9F,0x9F,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,
+ 0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,
+ 0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x9D,
+ 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,
+ 0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,
+ 0x9D,0x9D,0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,
+ 0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x93,0x92,0x98,0x94,0x95,0x95,0x92,0x98,0x97,0x94,
+ 0x93,0x93,0x93,0x93,0x93,0x98,0x94,0x98,0x98,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x01,0x01,0x98,
+ 0x95,0x95,0x93,0x98,0x01,0x01,0x01,0x01,0x97,0x98,0x98,0x95,0x9F,0x9F,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x92,0x93,0x95,0x95,0x97,0x96,0x93,0x98,0x96,0x01,
+ 0x94,0x92,0x92,0x92,0x01,0x98,0x94,0x97,0x96,0x97,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x95,0x01,
+ 0x01,0x01,0x95,0x94,0x95,0x94,0x98,0x98,0x96,0x95,0x01,0x95,0x9F,0x9F,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
+ 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x94,0x95,0x92,0x01,0x97,0x01,0x92,0x98,0x95,
+ 0x95,0x95,0x95,0x98,0x95,0x98,0x98,0x98,0x98,0x92,0x96,0x96,0x96,0x95,0x95,0x95,
+ 0x95,0x95,0x95,0x95,0x94,0x94,0x94,0x94,0x94,0x94,0x94,0x94,0x94,0x93,0x93,0x93,
+ 0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,
+ 0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x91,0x91,0x91,0x91,
+ 0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,
+ 0x91,0x91,0x91,0x91,0x91,0x91,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
+ 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
+ 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
+ 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x98,0x95,0x94,
+ 0x95,0x98,0x98,0x96,0x96,0x98,0x98,0x01,0x01,0x95,0x96,0x01,0x99,0x95,0x94,0x95,
+ 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x94,0x94,0x94,0x94,0x94,
+ 0x94,0x94,0x94,0x94,0x94,0x94,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,
+ 0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x92,0x92,0x92,0x92,
+ 0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,
+ 0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,
+ 0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,
+ 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
+ 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
+ 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
+ 0x90,0x90,0x90,0x90,0x90,0x90,0x98,0x94,0x98,0x96,0x96,0x97,0x92,0x98,0x98,0x98,
+ 0x98,0x93,0x98,0x95,0x01,0x95,0x98,0x01,0x92,0x96,0x94,0x92,0x92,0x93,0x01,0x95,
+ 0x92,0x96,0x95,0x93,0x92,0x94,0x94,0x96,0x92,0x93,0x98,0x96,0x95,0x98,0x98,0x93,
+ 0x92,0x95,0x8E,0x92,0x8E,0x94,0x92,0x93,0x8E,0x8E,0x92,0x8E,0x92,0x95,0x8E,0x95,
+ 0x8E,0x8E,0x95,0x92,0x94,0x92,0x92,0x8E,0x8E,0x8E,0x8E,0x8E,0x92,0x91,0x8E,0x8E,
+ 0x8E,0x91,0x93,0x93,0x92,0x95,0x94,0x95,0x98,0x01,0x98,0x95,0x95,0x99,0x98,0x96,
+ 0x94,0x98,0x95,0x98,0x98,0x98,0x94,0x96,0x96,0x94,0x95,0x98,0x96,0x94,0x95,0x94,
+ 0x97,0x97,0x95,0x97,0x95,0x01,0x98,0x96,0x01,0x96,0x01,0x98,0x98,0x98,0x93,0x99,
+ 0x01,0x01,0x98,0x98,0x96,0x99,0x98,0x98,0x96,0x98,0x95,0x96,0x98,0x98,0x99,0x98,
+ 0x95,0x98,0x95,0x01,0x98,0x99,0x99,0x95,0x98,0x96,0x96,0x01,0x9A,0x01,0x98,0x96,
+ 0x9A,0x98,0x98,0x96,0x98,0x95,0x95,0x98,0x98,0x95,0x95,0x96,0x01,0x93,0x94,0x95,
+ 0x93,0x94,0x92,0x8E,0x8E,0x01,0x95,0x8E,0x92,0x8E,0x8E,0x96,0x8E,0x8E,0x96,0x95,
+ 0x98,0x93,0x95,0x94,0x93,0x96,0x96,0x98,0x01,0x96,0x94,0x94,0x96,0x95,0x96,0x95,
+ 0x98,0x98,0x01,0x96,0x93,0x96,0x01,0x96,0x96,0x95,0x98,0x99,0x01,0x98,0x97,0x96,
+ 0x95,0x98,0x93,0x93,0x93,0x94,0x92,0x92,0x95,0x91,0x92,0x95,0x96,0x95,0x94,0x98,
+ 0x94,0x95,0x95,0x95,0x98,0x95,0x95,0x95,0x94,0x98,0x98,0x97,0x93,0x96,0x01,0x94,
+ 0x94,0x94,0x95,0x94,0x95,0x95,0x94,0x92,0x98,0x94,0x94,0x96,0x96,0x95,0x98,0x95,
+ 0x96,0x99,0x98,0x01,0x98,0x01,0x96,0x98,0x98,0x01,0x9A,0x98,0x98,0x94,0x98,0x96,
+ 0x96,0x01,0x95,0x96,0x98,0x97,0x95,0x99,0x98,0x98,0x94,0x98,0x96,0x98,0x01,0x98,
+ 0x01,0x01,0x94,0x95,0x93,0x93,0x01,0x94,0x98,0x94,0x01,0x92,0x96,0x96,0x95,0x95,
+ 0x98,0x95,0x98,0x98,0x01,0x97,0x95,0x95,0x94,0x95,0x97,0x97,0x95,0x93,0x94,0x97,
+ 0x93,0x01,0x96,0x95,0x96,0x96,0x96,0x92,0x01,0x95,0x01,0x95,0x98,0x98,0x95,0x95,
+ 0x01,0x95,0x94,0x95,0x95,0x98,0x98,0x98,0x94,0x01,0x98,0x98,0x95,0x95,0x94,0x94,
+ 0x94,0x95,0x8E,0x93,0x92,0x93,0x92,0x95,0x95,0x94,0x95,0x95,0x98,0x95,0x98,0x92,
+ 0x94,0x94,0x94,0x93,0x95,0x96,0x01,0x95,0x92,0x95,0x8E,0x94,0x8E,0x8E,0x94,0x93,
+ 0x94,0x92,0x92,0x94,0x95,0x94,0x94,0x98,0x95,0x92,0x93,0x98,0x98,0x95,0x98,0x96,
+ 0x96,0x93,0x98,0x95,0x95,0x95,0x95,0x95,0x95,0x96,0x95,0x96,0x96,0x98,0x98,0x98,
+ 0x99,0x98,0x98,0x01,0x99,0x98,0x96,0x99,0x01,0x95,0x98,0x01,0x99,0x99,0x99,0x98,
+ 0x98,0x94,0x01,0x98,0x98,0x98,0x96,0x96,0x01,0x98,0x99,0x01,0x99,0x01,0x99,0x96,
+ 0x98,0x99,0x95,0x98,0x99,0x94,0x01,0x99,0x9A,0x9A,0x98,0x01,0x01,0x99,0x98,0x01,
+ 0x99,0x9A,0x98,0x98,0x98,0x96,0x95,0x99,0x96,0x95,0x98,0x94,0x94,0x96,0x93,0x8E,
+ 0x92,0x8E,0x01,0x8E,0x95,0x95,0x8E,0x8E,0x95,0x92,0x92,0x8E,0x92,0x98,0x95,0x95,
+ 0x95,0x95,0x95,0x96,0x98,0x96,0x98,0x98,0x95,0x95,0x98,0x98,0x01,0x98,0x98,0x95,
+ 0x95,0x98,0x98,0x96,0x01,0x96,0x98,0x96,0x98,0x98,0x98,0x98,0x98,0x01,0x95,0x94,
+ 0x95,0x95,0x94,0x91,0x93,0x94,0x01,0x94,0x92,0x94,0x95,0x95,0x95,0x94,0x92,0x95,
+ 0x98,0x01,0x01,0x96,0x96,0x95,0x01,0x98,0x98,0x98,0x96,0x96,0x96,0x93,0x98,0x95,
+ 0x95,0x93,0x97,0x98,0x94,0x98,0x97,0x98,0x93,0x01,0x96,0x98,0x98,0x99,0x01,0x98,
+ 0x98,0x98,0x99,0x9A,0x95,0x95,0x9A,0x98,0x96,0x99,0x99,0x98,0x95,0x98,0x93,0x95,
+ 0x95,0x97,0x95,0x96,0x96,0x98,0x99,0x98,0x01,0x01,0x98,0x98,0x01,0x01,0x01,0x01,
+ 0x95,0x95,0x95,0x95,0x96,0x92,0x94,0x95,0x98,0x98,0x94,0x94,0x92,0x96,0x94,0x98,
+ 0x95,0x94,0x94,0x94,0x01,0x97,0x94,0x93,0x98,0x94,0x97,0x96,0x98,0x94,0x95,0x01,
+ 0x01,0x98,0x95,0x94,0x92,0x93,0x98,0x95,0x95,0x01,0x95,0x92,0x95,0x94,0x96,0x94,
+ 0x96,0x96,0x94,0x95,0x96,0x96,0x95,0x01,0x95,0x93,0x96,0x95,0x95,0x92,0x94,0x92,
+ 0x8E,0x8E,0x8E,0x98,0x92,0x98,0x96,0x94,0x96,0x96,0x96,0x96,0x01,0x96,0x98,0x01,
+ 0x94,0x98,0x95,0x01,0x98,0x01,0x95,0x95,0x95,0x95,0x01,0x94,0x92,0x94,0x93,0x94,
+ 0x96,0x96,0x01,0x95,0x94,0x96,0x94,0x96,0x98,0x95,0x98,0x94,0x97,0x98,0x92,0x96,
+ 0x96,0x94,0x94,0x95,0x95,0x94,0x93,0x95,0x01,0x95,0x01,0x95,0x96,0x98,0x98,0x98,
+ 0x99,0x98,0x98,0x99,0x95,0x9A,0x99,0x99,0x9A,0x98,0x99,0x98,0x9A,0x98,0x01,0x98,
+ 0x96,0x98,0x94,0x94,0x98,0x95,0x98,0x96,0x99,0x98,0x9A,0x98,0x9A,0x9A,0x01,0x99,
+ 0x99,0x98,0x95,0x99,0x98,0x96,0x99,0x98,0x96,0x94,0x96,0x95,0x94,0x98,0x01,0x95,
+ 0x01,0x01,0x01,0x96,0x98,0x95,0x95,0x96,0x94,0x94,0x95,0x95,0x92,0x94,0x93,0x8E,
+ 0x93,0x94,0x95,0x92,0x98,0x96,0x93,0x8E,0x93,0x95,0x93,0x95,0x95,0x96,0x98,0x96,
+ 0x96,0x98,0x98,0x94,0x94,0x94,0x96,0x01,0x98,0x95,0x97,0x98,0x01,0x01,0x98,0x98,
+ 0x98,0x98,0x96,0x98,0x98,0x01,0x99,0x98,0x99,0x95,0x95,0x96,0x95,0x96,0x93,0x92,
+ 0x94,0x96,0x93,0x93,0x91,0x01,0x92,0x94,0x98,0x94,0x96,0x94,0x95,0x95,0x94,0x95,
+ 0x96,0x95,0x95,0x93,0x96,0x01,0x98,0x01,0x96,0x95,0x94,0x94,0x93,0x95,0x96,0x98,
+ 0x96,0x95,0x98,0x96,0x98,0x96,0x9A,0x9A,0x9A,0x9A,0x9A,0x98,0x96,0x9A,0x9A,0x98,
+ 0x98,0x98,0x96,0x98,0x9A,0x98,0x98,0x98,0x95,0x99,0x99,0x98,0x96,0x95,0x98,0x98,
+ 0x98,0x98,0x99,0x97,0x01,0x98,0x01,0x94,0x01,0x98,0x96,0x94,0x94,0x96,0x94,0x95,
+ 0x98,0x98,0x95,0x94,0x98,0x95,0x94,0x96,0x92,0x95,0x95,0x98,0x01,0x95,0x94,0x92,
+ 0x93,0x98,0x96,0x01,0x95,0x97,0x95,0x98,0x94,0x94,0x95,0x97,0x98,0x98,0x94,0x01,
+ 0x98,0x98,0x95,0x92,0x94,0x96,0x92,0x95,0x93,0x94,0x95,0x95,0x98,0x96,0x98,0x96,
+ 0x96,0x98,0x95,0x01,0x95,0x98,0x01,0x98,0x98,0x94,0x95,0x01,0x95,0x95,0x8E,0x8E,
+ 0x8E,0x95,0x95,0x95,0x98,0x98,0x01,0x96,0x96,0x95,0x93,0x94,0x95,0x98,0x93,0x93,
+ 0x93,0x98,0x95,0x96,0x98,0x95,0x94,0x95,0x95,0x95,0x98,0x95,0x96,0x92,0x96,0x01,
+ 0x94,0x92,0x95,0x98,0x98,0x95,0x98,0x01,0x01,0x91,0x95,0x01,0x95,0x95,0x01,0x96,
+ 0x98,0x95,0x94,0x01,0x92,0x94,0x98,0x98,0x94,0x96,0x94,0x94,0x01,0x01,0x98,0x98,
+ 0x98,0x98,0x95,0x95,0x94,0x98,0x98,0x98,0x01,0x95,0x98,0x98,0x01,0x96,0x93,0x97,
+ 0x95,0x95,0x94,0x97,0x94,0x98,0x01,0x95,0x98,0x95,0x92,0x94,0x98,0x98,0x94,0x95,
+ 0x96,0x96,0x92,0x95,0x95,0x01,0x96,0x96,0x96,0x96,0x96,0x01,0x94,0x01,0x93,0x95,
+ 0x95,0x96,0x98,0x94,0x95,0x94,0x95,0x93,0x95,0x96,0x96,0x01,0x98,0x98,0x96,0x01,
+ 0x95,0x98,0x99,0x99,0x98,0x98,0x01,0x98,0x01,0x99,0x99,0x98,0x98,0x96,0x98,0x95,
+ 0x98,0x01,0x95,0x98,0x98,0x96,0x98,0x01,0x96,0x98,0x96,0x98,0x96,0x98,0x98,0x98,
+ 0x98,0x99,0x99,0x98,0x98,0x98,0x98,0x98,0x97,0x95,0x95,0x93,0x92,0x96,0x95,0x96,
+ 0x94,0x98,0x98,0x93,0x95,0x93,0x96,0x92,0x92,0x95,0x95,0x95,0x94,0x93,0x92,0x93,
+ 0x93,0x95,0x95,0x95,0x96,0x93,0x93,0x95,0x94,0x98,0x93,0x01,0x94,0x01,0x96,0x95,
+ 0x99,0x96,0x98,0x99,0x01,0x99,0x96,0x98,0x01,0x01,0x98,0x98,0x96,0x95,0x98,0x99,
+ 0x9A,0x9A,0x98,0x9A,0x98,0x98,0x99,0x98,0x96,0x95,0x99,0x96,0x98,0x9A,0x98,0x9A,
+ 0x9A,0x9A,0x99,0x95,0x93,0x96,0x93,0x98,0x94,0x92,0x98,0x01,0x95,0x92,0x96,0x95,
+ 0x92,0x96,0x95,0x95,0x94,0x01,0x98,0x95,0x95,0x95,0x95,0x94,0x97,0x98,0x96,0x96,
+ 0x95,0x92,0x01,0x95,0x97,0x95,0x98,0x94,0x01,0x93,0x95,0x95,0x98,0x01,0x96,0x8E,
+ 0x95,0x95,0x95,0x93,0x01,0x95,0x98,0x98,0x95,0x01,0x96,0x93,0x95,0x94,0x98,0x98,
+ 0x01,0x01,0x98,0x98,0x95,0x95,0x98,0x98,0x98,0x95,0x96,0x95,0x8E,0x93,0x8E,0x93,
+ 0x98,0x01,0x98,0x94,0x01,0x98,0x96,0x95,0x95,0x92,0x94,0x94,0x93,0x93,0x01,0x93,
+ 0x93,0x93,0x95,0x95,0x93,0x95,0x94,0x96,0x94,0x95,0x93,0x95,0x94,0x96,0x95,0x94,
+ 0x95,0x95,0x92,0x98,0x97,0x96,0x96,0x96,0x95,0x98,0x96,0x98,0x95,0x98,0x98,0x94,
+ 0x96,0x01,0x94,0x92,0x01,0x01,0x98,0x99,0x96,0x96,0x98,0x94,0x95,0x93,0x95,0x98,
+ 0x95,0x98,0x98,0x93,0x96,0x97,0x97,0x95,0x96,0x98,0x94,0x94,0x98,0x01,0x98,0x01,
+ 0x98,0x98,0x98,0x98,0x95,0x95,0x95,0x98,0x94,0x96,0x96,0x95,0x96,0x98,0x96,0x95,
+ 0x95,0x95,0x94,0x94,0x94,0x95,0x93,0x01,0x95,0x95,0x92,0x93,0x94,0x95,0x95,0x93,
+ 0x8E,0x93,0x92,0x94,0x8E,0x8E,0x92,0x8E,0x8E,0x94,0x96,0x98,0x01,0x98,0x98,0x98,
+ 0x95,0x95,0x96,0x01,0x98,0x95,0x95,0x99,0x98,0x99,0x99,0x99,0x95,0x98,0x98,0x98,
+ 0x95,0x01,0x95,0x98,0x95,0x01,0x95,0x98,0x98,0x01,0x98,0x96,0x01,0x96,0x98,0x95,
+ 0x98,0x98,0x98,0x98,0x98,0x96,0x96,0x98,0x96,0x95,0x95,0x95,0x95,0x96,0x97,0x95,
+ 0x96,0x98,0x96,0x95,0x96,0x97,0x94,0x95,0x98,0x93,0x95,0x94,0x95,0x01,0x92,0x96,
+ 0x95,0x95,0x96,0x95,0x95,0x96,0x01,0x96,0x96,0x95,0x95,0x96,0x98,0x97,0x96,0x95,
+ 0x95,0x92,0x97,0x98,0x97,0x94,0x97,0x93,0x94,0x96,0x96,0x01,0x95,0x94,0x98,0x98,
+ 0x94,0x97,0x96,0x98,0x92,0x97,0x98,0x98,0x96,0x98,0x94,0x98,0x98,0x94,0x01,0x98,
+ 0x99,0x98,0x96,0x98,0x94,0x98,0x01,0x96,0x98,0x01,0x94,0x96,0x94,0x98,0x96,0x95,
+ 0x01,0x94,0x95,0x96,0x97,0x96,0x95,0x96,0x01,0x95,0x97,0x98,0x95,0x95,0x96,0x96,
+ 0x94,0x98,0x95,0x98,0x95,0x98,0x96,0x96,0x98,0x01,0x01,0x98,0x92,0x95,0x01,0x98,
+ 0x95,0x94,0x96,0x93,0x98,0x98,0x96,0x95,0x98,0x98,0x95,0x98,0x95,0x95,0x95,0x01,
+ 0x95,0x95,0x93,0x93,0x96,0x95,0x95,0x93,0x95,0x94,0x95,0x92,0x8E,0x94,0x98,0x95,
+ 0x96,0x94,0x98,0x96,0x95,0x95,0x95,0x94,0x92,0x95,0x01,0x92,0x98,0x93,0x92,0x95,
+ 0x01,0x93,0x92,0x94,0x92,0x93,0x94,0x92,0x95,0x92,0x94,0x94,0x95,0x93,0x95,0x96,
+ 0x95,0x94,0x95,0x92,0x97,0x94,0x95,0x01,0x01,0x94,0x98,0x01,0x01,0x98,0x95,0x98,
+ 0x01,0x98,0x95,0x95,0x01,0x98,0x01,0x96,0x98,0x94,0x97,0x01,0x01,0x95,0x96,0x98,
+ 0x98,0x95,0x96,0x96,0x96,0x94,0x01,0x96,0x94,0x95,0x98,0x92,0x94,0x96,0x96,0x98,
+ 0x17,0x17,0x17,0x17,0x98,0x95,0x96,0x96,0x93,0x01,0x93,0x93,0x01,0x96,0x95,0x94,
+ 0x95,0x93,0x95,0x95,0x96,0x96,0x95,0x91,0x96,0x93,0x92,0x92,0x94,0x95,0x91,0x94,
+ 0x92,0x93,0x8E,0x8E,0x8E,0x95,0x92,0x91,0x95,0x93,0x92,0x94,0x96,0x95,0x95,0x01,
+ 0x98,0x98,0x93,0x98,0x01,0x98,0x95,0x01,0x92,0x93,0x94,0x96,0x95,0x98,0x96,0x97,
+ 0x95,0x98,0x98,0x98,0x98,0x01,0x98,0x17,0x17,0x98,0x01,0x98,0x98,0x96,0x94,0x95,
+ 0x94,0x95,0x96,0x98,0x96,0x94,0x95,0x01,0x98,0x01,0x94,0x95,0x98,0x92,0x01,0x98,
+ 0x98,0x98,0x98,0x01,0x98,0x98,0x96,0x98,0x9A,0x95,0x99,0x98,0x95,0x97,0x97,0x95,
+ 0x98,0x95,0x98,0x98,0x95,0x95,0x98,0x92,0x98,0x94,0x95,0x95,0x96,0x96,0x94,0x96,
+ 0x98,0x92,0x96,0x95,0x01,0x98,0x01,0x98,0x92,0x92,0x98,0x01,0x98,0x98,0x01,0x96,
+ 0x92,0x94,0x95,0x95,0x95,0x98,0x95,0x96,0x96,0x95,0x93,0x01,0x01,0x94,0x98,0x96,
+ 0x01,0x98,0x99,0x98,0x98,0x98,0x01,0x98,0x01,0x96,0x9A,0x9A,0x96,0x96,0x98,0x9A,
+ 0x95,0x98,0x96,0x01,0x98,0x94,0x97,0x93,0x96,0x98,0x01,0x95,0x95,0x97,0x96,0x01,
+ 0x98,0x96,0x96,0x01,0x95,0x96,0x01,0x98,0x94,0x01,0x01,0x94,0x95,0x96,0x97,0x98,
+ 0x93,0x95,0x01,0x98,0x94,0x94,0x95,0x94,0x96,0x95,0x95,0x95,0x94,0x96,0x95,0x95,
+ 0x93,0x92,0x94,0x95,0x98,0x93,0x92,0x92,0x96,0x94,0x96,0x95,0x93,0x92,0x94,0x95,
+ 0x96,0x95,0x95,0x95,0x01,0x95,0x98,0x93,0x93,0x93,0x95,0x93,0x94,0x95,0x92,0x95,
+ 0x01,0x92,0x95,0x94,0x92,0x95,0x92,0x95,0x95,0x95,0x94,0x92,0x93,0x95,0x01,0x95,
+ 0x95,0x98,0x94,0x96,0x95,0x98,0x94,0x01,0x98,0x01,0x94,0x98,0x96,0x01,0x01,0x93,
+ 0x94,0x92,0x97,0x01,0x98,0x96,0x01,0x01,0x98,0x94,0x94,0x95,0x01,0x94,0x96,0x01,
+ 0x01,0x98,0x96,0x96,0x92,0x96,0x01,0x95,0x96,0x96,0x94,0x96,0x01,0x96,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x94,0x98,0x98,0x98,0x98,0x98,0x01,0x93,0x94,0x93,
+ 0x98,0x98,0x98,0x98,0x95,0x94,0x01,0x95,0x94,0x92,0x93,0x95,0x95,0x93,0x93,0x98,
+ 0x98,0x8E,0x93,0x94,0x98,0x98,0x94,0x95,0x98,0x98,0x98,0x98,0x98,0x01,0x94,0x98,
+ 0x98,0x93,0x01,0x01,0x98,0x98,0x94,0x94,0x98,0x98,0x98,0x98,0x95,0x96,0x01,0x98,
+ 0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x98,0x98,0x96,0x98,0x95,0x94,
+ 0x92,0x96,0x96,0x96,0x95,0x96,0x96,0x98,0x98,0x01,0x96,0x98,0x97,0x98,0x98,0x95,
+ 0x98,0x01,0x98,0x98,0x96,0x98,0x98,0x98,0x96,0x95,0x98,0x97,0x94,0x94,0x93,0x01,
+ 0x95,0x94,0x96,0x98,0x01,0x95,0x96,0x98,0x01,0x98,0x95,0x01,0x01,0x94,0x01,0x95,
+ 0x01,0x96,0x95,0x01,0x98,0x92,0x95,0x01,0x96,0x94,0x01,0x01,0x95,0x98,0x93,0x96,
+ 0x95,0x94,0x96,0x96,0x01,0x94,0x95,0x96,0x01,0x94,0x95,0x96,0x91,0x95,0x01,0x97,
+ 0x95,0x98,0x96,0x96,0x98,0x98,0x01,0x98,0x98,0x96,0x95,0x01,0x98,0x01,0x01,0x98,
+ 0x99,0x01,0x9A,0x99,0x98,0x96,0x94,0x98,0x96,0x96,0x95,0x95,0x98,0x94,0x95,0x96,
+ 0x94,0x98,0x94,0x98,0x01,0x96,0x98,0x94,0x95,0x01,0x94,0x98,0x98,0x98,0x98,0x95,
+ 0x95,0x92,0x98,0x92,0x93,0x94,0x93,0x96,0x01,0x92,0x92,0x96,0x98,0x92,0x01,0x93,
+ 0x94,0x93,0x95,0x92,0x93,0x93,0x01,0x93,0x8E,0x92,0x92,0x96,0x96,0x93,0x95,0x94,
+ 0x95,0x94,0x92,0x93,0x01,0x96,0x93,0x92,0x95,0x93,0x92,0x92,0x94,0x91,0x95,0x95,
+ 0x01,0x95,0x94,0x94,0x93,0x95,0x95,0x01,0x95,0x93,0x96,0x01,0x94,0x95,0x92,0x96,
+ 0x95,0x01,0x94,0x01,0x01,0x01,0x95,0x98,0x95,0x95,0x98,0x98,0x94,0x95,0x98,0x98,
+ 0x96,0x99,0x01,0x96,0x98,0x99,0x98,0x98,0x98,0x01,0x94,0x94,0x98,0x98,0x96,0x95,
+ 0x95,0x94,0x01,0x98,0x94,0x95,0x96,0x95,0x96,0x95,0x94,0x96,0x96,0x96,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x92,0x92,0x98,
+ 0x17,0x17,0x17,0x17,0x98,0x95,0x93,0x92,0x96,0x95,0x94,0x98,0x96,0x96,0x98,0x17,
+ 0x17,0x98,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x98,0x98,0x98,0x17,
+ 0x17,0x98,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x98,0x96,0x98,0x17,
+ 0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x17,0x17,0x98,0x95,0x95,0x01,
+ 0x01,0x94,0x95,0x96,0x96,0x95,0x98,0x98,0x97,0x98,0x96,0x95,0x95,0x98,0x95,0x95,
+ 0x96,0x98,0x92,0x98,0x96,0x01,0x94,0x94,0x92,0x96,0x94,0x98,0x94,0x98,0x95,0x01,
+ 0x01,0x95,0x01,0x98,0x01,0x98,0x01,0x98,0x94,0x94,0x98,0x95,0x96,0x01,0x96,0x01,
+ 0x95,0x94,0x01,0x94,0x95,0x95,0x95,0x98,0x96,0x01,0x94,0x98,0x92,0x01,0x95,0x01,
+ 0x92,0x96,0x98,0x95,0x01,0x98,0x01,0x95,0x98,0x96,0x96,0x96,0x01,0x98,0x01,0x98,
+ 0x01,0x97,0x94,0x98,0x01,0x96,0x01,0x95,0x99,0x01,0x98,0x9A,0x9A,0x95,0x98,0x9B,
+ 0x98,0x98,0x9A,0x98,0x9A,0x01,0x99,0x95,0x96,0x9D,0x98,0x9D,0x98,0x96,0x9B,0x98,
+ 0x01,0x95,0x9B,0x9D,0x9B,0x94,0x01,0x95,0x97,0x01,0x94,0x98,0x98,0x98,0x98,0x98,
+ 0x93,0x98,0x96,0x95,0x95,0x92,0x93,0x93,0x95,0x93,0x96,0x94,0x93,0x95,0x95,0x94,
+ 0x93,0x98,0x92,0x94,0x95,0x95,0x94,0x92,0x92,0x92,0x98,0x93,0x96,0x92,0x95,0x95,
+ 0x92,0x91,0x94,0x96,0x94,0x95,0x93,0x98,0x95,0x94,0x01,0x98,0x96,0x98,0x93,0x94,
+ 0x93,0x92,0x93,0x94,0x96,0x01,0x98,0x93,0x93,0x96,0x96,0x96,0x96,0x01,0x95,0x96,
+ 0x95,0x94,0x95,0x94,0x98,0x01,0x94,0x95,0x96,0x98,0x99,0x99,0x98,0x96,0x01,0x95,
+ 0x98,0x98,0x98,0x98,0x01,0x01,0x98,0x98,0x01,0x95,0x95,0x94,0x98,0x94,0x96,0x96,
+ 0x01,0x94,0x95,0x94,0x95,0x93,0x96,0x94,0x96,0x95,0x94,0x01,0x96,0x95,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x01,0x93,0x94,0x92,0x96,0x8E,0x93,0x8E,0x98,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x98,0x01,0x96,0x98,0x96,
+ 0x96,0x01,0x95,0x92,0x01,0x98,0x95,0x98,0x95,0x98,0x98,0x95,0x98,0x96,0x01,0x95,
+ 0x98,0x01,0x95,0x98,0x96,0x94,0x96,0x96,0x01,0x95,0x96,0x98,0x94,0x96,0x96,0x96,
+ 0x98,0x01,0x96,0x01,0x01,0x98,0x01,0x01,0x96,0x96,0x95,0x01,0x92,0x95,0x01,0x96,
+ 0x96,0x94,0x96,0x01,0x92,0x93,0x01,0x95,0x98,0x94,0x96,0x01,0x01,0x95,0x01,0x92,
+ 0x98,0x01,0x98,0x01,0x98,0x95,0x01,0x01,0x01,0x93,0x98,0x96,0x95,0x98,0x01,0x98,
+ 0x95,0x94,0x95,0x96,0x98,0x98,0x96,0x97,0x95,0x01,0x96,0x99,0x99,0x98,0x95,0x98,
+ 0x99,0x98,0x01,0x98,0x98,0x01,0x96,0x98,0x98,0x9D,0x99,0x9D,0x98,0x9B,0x9D,0x01,
+ 0x96,0x98,0x9C,0x98,0x9C,0x97,0x95,0x01,0x94,0x98,0x98,0x98,0x98,0x98,0x01,0x98,
+ 0x96,0x98,0x96,0x92,0x93,0x94,0x95,0x95,0x92,0x93,0x93,0x91,0x96,0x94,0x95,0x95,
+ 0x98,0x96,0x93,0x95,0x92,0x92,0x95,0x92,0x8E,0x92,0x93,0x94,0x98,0x95,0x95,0x93,
+ 0x93,0x92,0x96,0x93,0x96,0x95,0x92,0x92,0x94,0x92,0x95,0x96,0x95,0x94,0x92,0x94,
+ 0x96,0x01,0x01,0x95,0x95,0x94,0x96,0x94,0x93,0x95,0x98,0x94,0x98,0x01,0x01,0x95,
+ 0x95,0x95,0x96,0x96,0x01,0x99,0x96,0x99,0x96,0x95,0x96,0x99,0x99,0x95,0x94,0x94,
+ 0x01,0x98,0x96,0x96,0x98,0x96,0x01,0x95,0x98,0x96,0x96,0x98,0x93,0x98,0x01,0x96,
+ 0x96,0x95,0x96,0x91,0x01,0x96,0x01,0x96,0x96,0x95,0x96,0x95,0x01,0x94,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,
+ 0x17,0x17,0x17,0x17,0x17,0x98,0x94,0x95,0x98,0x8E,0x92,0x91,0x92,0x93,0x98,0x17,
+ 0x17,0x98,0x17,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,
+ 0x17,0x98,0x17,0x98,0x17,0x17,0x98,0x17,0x17,0x17,0x17,0x17,0x17,0x98,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x01,0x93,0x94,0x98,0x96,0x95,
+ 0x98,0x98,0x01,0x95,0x96,0x98,0x98,0x97,0x98,0x98,0x98,0x98,0x93,0x96,0x96,0x95,
+ 0x98,0x98,0x94,0x98,0x96,0x98,0x92,0x96,0x96,0x96,0x98,0x96,0x96,0x95,0x01,0x98,
+ 0x93,0x96,0x01,0x95,0x98,0x95,0x01,0x95,0x96,0x96,0x98,0x01,0x01,0x94,0x98,0x98,
+ 0x94,0x96,0x95,0x95,0x95,0x92,0x98,0x95,0x01,0x01,0x95,0x98,0x95,0x98,0x01,0x96,
+ 0x96,0x98,0x01,0x98,0x98,0x93,0x93,0x95,0x98,0x01,0x01,0x96,0x95,0x95,0x96,0x95,
+ 0x98,0x94,0x98,0x94,0x98,0x94,0x96,0x98,0x95,0x95,0x97,0x95,0x98,0x98,0x01,0x98,
+ 0x98,0x96,0x98,0x98,0x01,0x98,0x96,0x98,0x98,0x9D,0x98,0x9D,0x9A,0x98,0x9D,0x99,
+ 0x96,0x96,0x9D,0x96,0x9D,0x01,0x98,0x97,0x94,0x98,0x98,0x98,0x98,0x98,0x98,0x98,
+ 0x93,0x95,0x96,0x93,0x93,0x95,0x93,0x94,0x91,0x94,0x92,0x94,0x96,0x93,0x93,0x95,
+ 0x93,0x96,0x8E,0x8E,0x95,0x8F,0x93,0x94,0x91,0x92,0x94,0x95,0x92,0x93,0x93,0x93,
+ 0x92,0x95,0x94,0x92,0x96,0x94,0x96,0x95,0x95,0x94,0x93,0x01,0x95,0x92,0x95,0x93,
+ 0x92,0x95,0x94,0x95,0x94,0x95,0x93,0x95,0x98,0x98,0x01,0x98,0x97,0x98,0x98,0x93,
+ 0x98,0x95,0x98,0x96,0x95,0x99,0x99,0x01,0x95,0x98,0x98,0x98,0x96,0x96,0x94,0x95,
+ 0x96,0x98,0x95,0x94,0x98,0x98,0x94,0x98,0x95,0x96,0x98,0x98,0x95,0x94,0x01,0x95,
+ 0x96,0x01,0x01,0x96,0x96,0x94,0x96,0x96,0x95,0x98,0x93,0x95,0x94,0x92,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,
+ 0x17,0x98,0x98,0x98,0x98,0x01,0x95,0x92,0x8E,0x01,0x92,0x95,0x96,0x95,0x98,0x17,
+ 0x17,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,
+ 0x17,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x98,0x98,0x01,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x98,0x96,0x96,0x96,0x98,
+ 0x17,0x17,0x98,0x94,0x95,0x98,0x98,0x98,0x17,0x17,0x98,0x01,0x96,0x95,0x01,0x98,
+ 0x17,0x17,0x98,0x95,0x96,0x98,0x96,0x96,0x95,0x96,0x98,0x01,0x98,0x01,0x95,0x96,
+ 0x95,0x98,0x98,0x01,0x01,0x98,0x95,0x98,0x01,0x98,0x98,0x01,0x94,0x98,0x98,0x01,
+ 0x96,0x95,0x96,0x93,0x93,0x98,0x93,0x96,0x98,0x98,0x98,0x96,0x95,0x98,0x96,0x96,
+ 0x95,0x96,0x95,0x94,0x95,0x96,0x01,0x01,0x96,0x01,0x93,0x93,0x01,0x98,0x96,0x93,
+ 0x93,0x01,0x95,0x01,0x01,0x96,0x01,0x94,0x98,0x95,0x01,0x95,0x95,0x96,0x01,0x97,
+ 0x97,0x96,0x98,0x98,0x96,0x96,0x94,0x96,0x95,0x9C,0x98,0x9C,0x96,0x98,0x9D,0x01,
+ 0x01,0x98,0x9D,0x95,0x9D,0x01,0x01,0x96,0x95,0x95,0x95,0x95,0x01,0x95,0x98,0x98,
+ 0x95,0x92,0x93,0x95,0x95,0x92,0x93,0x93,0x92,0x95,0x96,0x93,0x95,0x92,0x95,0x95,
+ 0x96,0x92,0x92,0x91,0x94,0x01,0x94,0x96,0x95,0x93,0x93,0x93,0x92,0x95,0x93,0x92,
+ 0x91,0x95,0x96,0x94,0x91,0x98,0x95,0x96,0x92,0x93,0x93,0x95,0x94,0x95,0x96,0x94,
+ 0x94,0x92,0x95,0x01,0x96,0x98,0x98,0x94,0x95,0x95,0x01,0x97,0x94,0x97,0x98,0x95,
+ 0x98,0x01,0x98,0x93,0x99,0x96,0x95,0x95,0x98,0x01,0x01,0x96,0x92,0x96,0x96,0x96,
+ 0x95,0x92,0x96,0x95,0x93,0x93,0x96,0x96,0x96,0x95,0x95,0x93,0x96,0x96,0x98,0x96,
+ 0x01,0x94,0x96,0x95,0x96,0x96,0x96,0x95,0x92,0x96,0x92,0x95,0x95,0x95,0x94,0x98,
+ 0x17,0x17,0x17,0x17,0x98,0x95,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x95,0x98,
+ 0x17,0x17,0x17,0x17,0x17,0x98,0x8E,0x8E,0x92,0x95,0x95,0x92,0x93,0x92,0x98,0x17,
+ 0x17,0x98,0x96,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x98,0x98,0x98,0x17,
+ 0x17,0x98,0x96,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x98,0x17,
+ 0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x98,0x17,0x17,0x17,0x17,0x98,0x96,0x01,0x98,
+ 0x17,0x17,0x98,0x97,0x95,0x96,0x95,0x98,0x17,0x17,0x98,0x98,0x96,0x96,0x95,0x98,
+ 0x17,0x17,0x98,0x95,0x95,0x96,0x96,0x95,0x01,0x95,0x92,0x95,0x95,0x01,0x98,0x96,
+ 0x01,0x98,0x98,0x98,0x01,0x95,0x94,0x94,0x01,0x98,0x98,0x98,0x95,0x98,0x92,0x01,
+ 0x01,0x98,0x96,0x95,0x98,0x95,0x94,0x01,0x01,0x01,0x96,0x01,0x95,0x95,0x01,0x01,
+ 0x01,0x93,0x94,0x98,0x01,0x01,0x01,0x94,0x95,0x95,0x01,0x95,0x92,0x01,0x94,0x92,
+ 0x96,0x94,0x95,0x95,0x93,0x95,0x01,0x01,0x94,0x93,0x95,0x01,0x98,0x95,0x95,0x94,
+ 0x93,0x98,0x96,0x95,0x94,0x93,0x97,0x01,0x95,0x9B,0x9D,0x9B,0x96,0x94,0x9D,0x98,
+ 0x98,0x98,0x9C,0x99,0x9C,0x98,0x99,0x9A,0x99,0x96,0x98,0x98,0x95,0x98,0x95,0x01,
+ 0x93,0x92,0x93,0x92,0x94,0x93,0x95,0x92,0x92,0x94,0x93,0x93,0x93,0x98,0x01,0x94,
+ 0x8E,0x94,0x01,0x93,0x01,0x94,0x95,0x98,0x93,0x95,0x01,0x93,0x94,0x93,0x94,0x93,
+ 0x92,0x92,0x95,0x96,0x95,0x92,0x96,0x95,0x95,0x94,0x92,0x94,0x95,0x01,0x94,0x92,
+ 0x95,0x95,0x95,0x95,0x01,0x95,0x95,0x95,0x98,0x01,0x92,0x98,0x93,0x97,0x92,0x93,
+ 0x98,0x99,0x01,0x99,0x94,0x97,0x98,0x98,0x95,0x96,0x94,0x95,0x98,0x94,0x95,0x96,
+ 0x98,0x94,0x95,0x96,0x93,0x95,0x94,0x95,0x96,0x95,0x96,0x98,0x96,0x96,0x95,0x95,
+ 0x95,0x93,0x93,0x95,0x95,0x95,0x93,0x93,0x95,0x95,0x92,0x93,0x92,0x95,0x92,0x95,
+ 0x98,0x98,0x98,0x98,0x94,0x94,0x94,0x98,0x98,0x98,0x96,0x98,0x98,0x93,0x92,0x95,
+ 0x98,0x98,0x98,0x98,0x98,0x94,0x92,0x92,0x92,0x01,0x92,0x94,0x92,0x95,0x94,0x98,
+ 0x98,0x96,0x98,0x96,0x98,0x98,0x95,0x95,0x98,0x98,0x98,0x98,0x98,0x96,0x94,0x98,
+ 0x98,0x95,0x95,0x93,0x98,0x98,0x96,0x96,0x98,0x98,0x98,0x98,0x98,0x98,0x94,0x98,
+ 0x98,0x01,0x94,0x98,0x98,0x98,0x98,0x94,0x98,0x98,0x98,0x98,0x98,0x01,0x01,0x95,
+ 0x98,0x98,0x98,0x01,0x96,0x92,0x98,0x95,0x98,0x98,0x94,0x98,0x01,0x98,0x95,0x96,
+ 0x98,0x98,0x01,0x96,0x96,0x96,0x96,0x96,0x01,0x93,0x01,0x95,0x98,0x98,0x95,0x95,
+ 0x94,0x94,0x95,0x01,0x01,0x01,0x01,0x01,0x98,0x94,0x92,0x96,0x01,0x01,0x01,0x94,
+ 0x98,0x94,0x93,0x95,0x94,0x95,0x96,0x94,0x95,0x01,0x95,0x94,0x94,0x01,0x01,0x01,
+ 0x95,0x94,0x98,0x01,0x01,0x98,0x96,0x95,0x96,0x96,0x98,0x96,0x96,0x94,0x98,0x96,
+ 0x01,0x95,0x96,0x96,0x01,0x96,0x01,0x96,0x98,0x96,0x95,0x95,0x96,0x98,0x01,0x92,
+ 0x95,0x01,0x95,0x01,0x94,0x98,0x01,0x97,0x95,0x98,0x9D,0x01,0x01,0x01,0x9D,0x98,
+ 0x9C,0x01,0x9B,0x9D,0x9B,0x96,0x9A,0x98,0x9A,0x01,0x95,0x01,0x99,0x98,0x95,0x95,
+ 0x92,0x96,0x92,0x95,0x94,0x94,0x93,0x93,0x93,0x96,0x93,0x92,0x93,0x92,0x8E,0x92,
+ 0x92,0x92,0x92,0x95,0x92,0x91,0x92,0x93,0x92,0x92,0x01,0x92,0x96,0x92,0x98,0x01,
+ 0x95,0x95,0x95,0x94,0x95,0x95,0x93,0x95,0x95,0x95,0x93,0x01,0x94,0x95,0x01,0x01,
+ 0x96,0x95,0x98,0x95,0x95,0x98,0x95,0x98,0x98,0x98,0x01,0x98,0x97,0x97,0x01,0x98,
+ 0x94,0x95,0x98,0x93,0x97,0x98,0x94,0x96,0x95,0x94,0x95,0x92,0x98,0x93,0x95,0x95,
+ 0x96,0x01,0x93,0x01,0x94,0x96,0x93,0x95,0x93,0x01,0x96,0x96,0x95,0x95,0x96,0x95,
+ 0x98,0x95,0x93,0x96,0x94,0x95,0x92,0x95,0x96,0x92,0x92,0x91,0x92,0x96,0x95,0x93,
+ 0x93,0x95,0x95,0x95,0x93,0x92,0x94,0x93,0x95,0x92,0x94,0x95,0x92,0x92,0x92,0x91,
+ 0x8E,0x92,0x92,0x8E,0x93,0x94,0x94,0x91,0x94,0x96,0x94,0x94,0x96,0x96,0x95,0x01,
+ 0x95,0x01,0x95,0x98,0x93,0x01,0x95,0x98,0x96,0x96,0x96,0x98,0x93,0x96,0x94,0x98,
+ 0x95,0x95,0x95,0x95,0x95,0x95,0x01,0x01,0x01,0x98,0x98,0x01,0x95,0x95,0x98,0x94,
+ 0x01,0x98,0x94,0x01,0x01,0x01,0x01,0x95,0x01,0x95,0x94,0x01,0x01,0x97,0x96,0x98,
+ 0x96,0x94,0x95,0x95,0x95,0x95,0x98,0x95,0x98,0x95,0x96,0x95,0x98,0x93,0x94,0x94,
+ 0x95,0x96,0x98,0x96,0x98,0x96,0x98,0x95,0x98,0x94,0x96,0x94,0x98,0x01,0x98,0x96,
+ 0x01,0x94,0x01,0x01,0x94,0x96,0x96,0x01,0x95,0x01,0x98,0x98,0x95,0x98,0x96,0x98,
+ 0x93,0x01,0x01,0x01,0x93,0x01,0x01,0x95,0x01,0x92,0x98,0x94,0x96,0x94,0x95,0x95,
+ 0x94,0x01,0x96,0x01,0x98,0x96,0x01,0x01,0x01,0x95,0x95,0x01,0x01,0x01,0x95,0x98,
+ 0x95,0x95,0x94,0x96,0x95,0x01,0x98,0x01,0x01,0x98,0x96,0x01,0x96,0x98,0x96,0x96,
+ 0x96,0x96,0x96,0x98,0x93,0x96,0x95,0x01,0x96,0x94,0x94,0x95,0x98,0x95,0x98,0x96,
+ 0x98,0x98,0x99,0x9A,0x95,0x94,0x01,0x98,0x98,0x9A,0x9A,0x98,0x98,0x01,0x96,0x96,
+ 0x95,0x95,0x93,0x96,0x92,0x92,0x96,0x8E,0x94,0x8E,0x8E,0x8E,0x94,0x8E,0x8E,0x8E,
+ 0x92,0x98,0x01,0x94,0x93,0x96,0x98,0x98,0x01,0x95,0x94,0x98,0x95,0x98,0x98,0x98,
+ 0x98,0x01,0x98,0x95,0x01,0x95,0x98,0x01,0x01,0x98,0x94,0x93,0x98,0x96,0x01,0x01,
+ 0x95,0x95,0x98,0x95,0x98,0x01,0x98,0x96,0x98,0x95,0x98,0x99,0x98,0x94,0x94,0x95,
+ 0x94,0x98,0x01,0x96,0x94,0x95,0x98,0x95,0x93,0x94,0x95,0x93,0x92,0x94,0x95,0x95,
+ 0x94,0x95,0x94,0x95,0x92,0x96,0x01,0x96,0x92,0x95,0x94,0x01,0x92,0x95,0x95,0x92,
+ 0x96,0x94,0x92,0x94,0x95,0x96,0x94,0x92,0x96,0x95,0x8E,0x8E,0x8E,0x92,0x92,0x93,
+ 0x93,0x92,0x95,0x93,0x95,0x92,0x94,0x92,0x94,0x92,0x93,0x93,0x8E,0x96,0x8E,0x92,
+ 0x8E,0x93,0x95,0x92,0x01,0x94,0x95,0x96,0x95,0x93,0x01,0x95,0x99,0x96,0x98,0x96,
+ 0x01,0x98,0x94,0x99,0x99,0x98,0x98,0x98,0x94,0x99,0x98,0x99,0x98,0x98,0x99,0x96,
+ 0x01,0x96,0x01,0x96,0x96,0x95,0x98,0x96,0x98,0x94,0x98,0x98,0x99,0x99,0x98,0x98,
+ 0x96,0x96,0x99,0x98,0x99,0x96,0x98,0x01,0x96,0x98,0x95,0x95,0x94,0x95,0x93,0x94,
+ 0x92,0x95,0x96,0x96,0x94,0x96,0x94,0x96,0x94,0x96,0x98,0x01,0x95,0x96,0x96,0x96,
+ 0x95,0x95,0x01,0x94,0x96,0x95,0x94,0x01,0x01,0x95,0x95,0x96,0x98,0x98,0x98,0x01,
+ 0x01,0x01,0x01,0x01,0x96,0x95,0x95,0x94,0x01,0x94,0x95,0x96,0x01,0x01,0x94,0x98,
+ 0x01,0x98,0x94,0x01,0x98,0x96,0x98,0x95,0x98,0x98,0x01,0x94,0x01,0x95,0x95,0x98,
+ 0x95,0x95,0x94,0x01,0x95,0x96,0x95,0x94,0x01,0x94,0x96,0x95,0x94,0x96,0x95,0x95,
+ 0x96,0x98,0x95,0x98,0x95,0x94,0x95,0x01,0x98,0x01,0x98,0x01,0x01,0x96,0x01,0x98,
+ 0x94,0x96,0x98,0x97,0x97,0x95,0x95,0x95,0x98,0x96,0x98,0x98,0x94,0x98,0x01,0x98,
+ 0x98,0x96,0x98,0x99,0x99,0x98,0x98,0x9A,0x98,0x01,0x98,0x98,0x9A,0x95,0x9A,0x95,
+ 0x8D,0x8E,0x94,0x93,0x8E,0x8E,0x94,0x8E,0x8E,0x94,0x8E,0x92,0x8D,0x8D,0x92,0x8E,
+ 0x94,0x99,0x96,0x96,0x01,0x98,0x01,0x9A,0x01,0x9A,0x01,0x98,0x98,0x01,0x99,0x9A,
+ 0x01,0x98,0x98,0x99,0x98,0x9A,0x01,0x01,0x98,0x98,0x99,0x98,0x9A,0x98,0x01,0x99,
+ 0x92,0x9A,0x9A,0x98,0x94,0x9A,0x9A,0x01,0x98,0x9A,0x01,0x9B,0x01,0x9A,0x98,0x98,
+ 0x95,0x95,0x96,0x95,0x94,0x95,0x94,0x93,0x93,0x92,0x98,0x96,0x94,0x95,0x94,0x95,
+ 0x93,0x95,0x95,0x96,0x93,0x98,0x94,0x92,0x8E,0x8E,0x8E,0x94,0x8D,0x92,0x94,0x8E,
+ 0x8D,0x8D,0x8E,0x8E,0x8E,0x8E,0x92,0x8E,0x8E,0x8D,0x8E,0x92,0x8D,0x8E,0x8E,0x8E,
+ 0x8D,0x92,0x8E,0x8E,0x92,0x92,0x8D,0x8E,0x95,0x94,0x8E,0x95,0x8D,0x01,0x8E,0x8E,
+ 0x93,0x94,0x94,0x96,0x94,0x96,0x99,0x01,0x9B,0x99,0x9A,0x9C,0x98,0x99,0x98,0x98,
+ 0x98,0x01,0x01,0x9C,0x98,0x9A,0x98,0x9C,0x98,0x01,0x98,0x99,0x9C,0x9C,0x96,0x9A,
+ 0x98,0x9C,0x98,0x9C,0x98,0x98,0x9C,0x98,0x99,0x98,0x01,0x99,0x01,0x9C,0x98,0x9C,
+ 0x98,0x9C,0x9C,0x9C,0x9C,0x98,0x98,0x98,0x98,0x99,0x8E,0x95,0x95,0x92,0x8E,0x95,
+ 0x95,0x8E,0x8E,0x94,0x96,0x01,0x94,0x01,0x95,0x94,0x96,0x96,0x96,0x98,0x94,0x01,
+ 0x98,0x95,0x01,0x96,0x98,0x94,0x95,0x98,0x95,0x95,0x96,0x94,0x96,0x96,0x93,0x01,
+ 0x96,0x96,0x8E,0x8E,0x8E,0x92,0x92,0x92,0x92,0x8E,0x8E,0x93,0x96,0x98,0x01,0x95,
+ 0x95,0x98,0x98,0x93,0x92,0x95,0x95,0x94,0x94,0x95,0x96,0x01,0x98,0x94,0x01,0x01,
+ 0x01,0x98,0x96,0x8E,0x8E,0x92,0x94,0x8E,0x8E,0x01,0x94,0x95,0x94,0x98,0x96,0x94,
+ 0x01,0x01,0x01,0x97,0x92,0x94,0x01,0x95,0x01,0x96,0x01,0x94,0x01,0x95,0x98,0x97,
+ 0x96,0x97,0x94,0x96,0x95,0x96,0x96,0x98,0x93,0x96,0x94,0x95,0x98,0x95,0x97,0x01,
+ 0x97,0x98,0x94,0x93,0x97,0x98,0x97,0x01,0x98,0x98,0x98,0x99,0x98,0x9B,0x9A,0x98};
+#endif
diff --git a/apps/plugins/sdl/progs/wolf3d/sodpal.inc b/apps/plugins/sdl/progs/wolf3d/sodpal.inc
new file mode 100644
index 0000000000..b2ea06fcd1
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/sodpal.inc
@@ -0,0 +1,52 @@
+RGB( 0, 0, 0),RGB( 0, 0, 42),RGB( 0, 42, 0),RGB( 0, 42, 42),RGB( 42, 0, 0),
+RGB( 42, 0, 42),RGB( 42, 21, 0),RGB( 42, 42, 42),RGB( 21, 21, 21),RGB( 21, 21, 63),
+RGB( 21, 63, 21),RGB( 21, 63, 63),RGB( 63, 21, 21),RGB( 63, 21, 63),RGB( 63, 63, 21),
+RGB( 63, 63, 63),RGB( 59, 59, 59),RGB( 55, 55, 55),RGB( 52, 52, 52),RGB( 48, 48, 48),
+RGB( 45, 45, 45),RGB( 42, 42, 42),RGB( 38, 38, 38),RGB( 35, 35, 35),RGB( 31, 31, 31),
+RGB( 28, 28, 28),RGB( 25, 25, 25),RGB( 21, 21, 21),RGB( 18, 18, 18),RGB( 14, 14, 14),
+RGB( 11, 11, 11),RGB( 8, 8, 8),RGB( 63, 0, 0),RGB( 59, 0, 0),RGB( 56, 0, 0),
+RGB( 53, 0, 0),RGB( 50, 0, 0),RGB( 47, 0, 0),RGB( 44, 0, 0),RGB( 41, 0, 0),
+RGB( 38, 0, 0),RGB( 34, 0, 0),RGB( 31, 0, 0),RGB( 28, 0, 0),RGB( 25, 0, 0),
+RGB( 22, 0, 0),RGB( 19, 0, 0),RGB( 16, 0, 0),RGB( 63, 54, 54),RGB( 63, 46, 46),
+RGB( 63, 39, 39),RGB( 63, 31, 31),RGB( 63, 23, 23),RGB( 63, 16, 16),RGB( 63, 8, 8),
+RGB( 63, 0, 0),RGB( 63, 42, 23),RGB( 63, 38, 16),RGB( 63, 34, 8),RGB( 63, 30, 0),
+RGB( 57, 27, 0),RGB( 51, 24, 0),RGB( 45, 21, 0),RGB( 39, 19, 0),RGB( 63, 63, 54),
+RGB( 63, 63, 46),RGB( 63, 63, 39),RGB( 63, 63, 31),RGB( 63, 62, 23),RGB( 63, 61, 16),
+RGB( 63, 61, 8),RGB( 63, 61, 0),RGB( 57, 54, 0),RGB( 51, 49, 0),RGB( 45, 43, 0),
+RGB( 39, 39, 0),RGB( 33, 33, 0),RGB( 28, 27, 0),RGB( 22, 21, 0),RGB( 16, 16, 0),
+RGB( 52, 63, 23),RGB( 49, 63, 16),RGB( 45, 63, 8),RGB( 40, 63, 0),RGB( 36, 57, 0),
+RGB( 32, 51, 0),RGB( 29, 45, 0),RGB( 24, 39, 0),RGB( 54, 63, 54),RGB( 47, 63, 46),
+RGB( 39, 63, 39),RGB( 32, 63, 31),RGB( 24, 63, 23),RGB( 16, 63, 16),RGB( 8, 63, 8),
+RGB( 0, 63, 0),RGB( 0, 63, 0),RGB( 0, 59, 0),RGB( 0, 56, 0),RGB( 0, 53, 0),
+RGB( 1, 50, 0),RGB( 1, 47, 0),RGB( 1, 44, 0),RGB( 1, 41, 0),RGB( 1, 38, 0),
+RGB( 1, 34, 0),RGB( 1, 31, 0),RGB( 1, 28, 0),RGB( 1, 25, 0),RGB( 1, 22, 0),
+RGB( 1, 19, 0),RGB( 1, 16, 0),RGB( 54, 63, 63),RGB( 46, 63, 63),RGB( 39, 63, 63),
+RGB( 31, 63, 62),RGB( 23, 63, 63),RGB( 16, 63, 63),RGB( 8, 63, 63),RGB( 0, 63, 63),
+RGB( 0, 57, 57),RGB( 0, 51, 51),RGB( 0, 45, 45),RGB( 0, 39, 39),RGB( 0, 33, 33),
+RGB( 0, 28, 28),RGB( 0, 22, 22),RGB( 0, 16, 16),RGB( 23, 47, 63),RGB( 16, 44, 63),
+RGB( 8, 42, 63),RGB( 0, 39, 63),RGB( 0, 35, 57),RGB( 0, 31, 51),RGB( 0, 27, 45),
+RGB( 0, 23, 39),RGB( 54, 54, 63),RGB( 46, 47, 63),RGB( 39, 39, 63),RGB( 31, 32, 63),
+RGB( 23, 24, 63),RGB( 16, 16, 63),RGB( 8, 9, 63),RGB( 0, 1, 63),RGB( 0, 0, 63),
+RGB( 0, 0, 59),RGB( 0, 0, 56),RGB( 0, 0, 53),RGB( 0, 0, 50),RGB( 0, 0, 47),
+RGB( 0, 0, 44),RGB( 0, 0, 41),RGB( 0, 0, 38),RGB( 0, 0, 34),RGB( 0, 0, 31),
+RGB( 0, 0, 28),RGB( 0, 0, 25),RGB( 0, 0, 22),RGB( 0, 0, 19),RGB( 0, 0, 16),
+RGB( 10, 10, 10),RGB( 63, 56, 13),RGB( 63, 53, 9),RGB( 63, 51, 6),RGB( 63, 48, 2),
+RGB( 63, 45, 0),RGB( 0, 14, 0),RGB( 0, 10, 0),RGB( 38, 0, 57),RGB( 32, 0, 51),
+RGB( 29, 0, 45),RGB( 24, 0, 39),RGB( 20, 0, 33),RGB( 17, 0, 28),RGB( 13, 0, 22),
+RGB( 10, 0, 16),RGB( 63, 54, 63),RGB( 63, 46, 63),RGB( 63, 39, 63),RGB( 63, 31, 63),
+RGB( 63, 23, 63),RGB( 63, 16, 63),RGB( 63, 8, 63),RGB( 63, 0, 63),RGB( 56, 0, 57),
+RGB( 50, 0, 51),RGB( 45, 0, 45),RGB( 39, 0, 39),RGB( 33, 0, 33),RGB( 27, 0, 28),
+RGB( 22, 0, 22),RGB( 16, 0, 16),RGB( 63, 58, 55),RGB( 63, 56, 52),RGB( 63, 54, 49),
+RGB( 63, 53, 47),RGB( 63, 51, 44),RGB( 63, 49, 41),RGB( 63, 47, 39),RGB( 63, 46, 36),
+RGB( 63, 44, 32),RGB( 63, 41, 28),RGB( 63, 39, 24),RGB( 60, 37, 23),RGB( 58, 35, 22),
+RGB( 55, 34, 21),RGB( 52, 32, 20),RGB( 50, 31, 19),RGB( 47, 30, 18),RGB( 45, 28, 17),
+RGB( 42, 26, 16),RGB( 40, 25, 15),RGB( 39, 24, 14),RGB( 36, 23, 13),RGB( 34, 22, 12),
+RGB( 32, 20, 11),RGB( 29, 19, 10),RGB( 27, 18, 9),RGB( 23, 16, 8),RGB( 21, 15, 7),
+RGB( 18, 14, 6),RGB( 16, 12, 6),RGB( 14, 11, 5),RGB( 10, 8, 3),RGB( 24, 0, 25),
+RGB( 0, 25, 25),RGB( 0, 24, 24),RGB( 0, 0, 7),RGB( 0, 0, 11),RGB( 12, 9, 4),
+RGB( 18, 0, 18),RGB( 20, 0, 20),RGB( 0, 0, 13),RGB( 7, 7, 7),RGB( 19, 19, 19),
+RGB( 23, 23, 23),RGB( 16, 16, 16),RGB( 12, 12, 12),RGB( 13, 13, 13),RGB( 54, 61, 61),
+RGB( 46, 58, 58),RGB( 39, 55, 55),RGB( 29, 50, 50),RGB( 18, 48, 48),RGB( 8, 45, 45),
+RGB( 8, 44, 44),RGB( 0, 41, 41),RGB( 0, 38, 38),RGB( 0, 35, 35),RGB( 0, 33, 33),
+RGB( 0, 31, 31),RGB( 0, 30, 30),RGB( 0, 29, 29),RGB( 0, 28, 28),RGB( 0, 27, 27),
+RGB( 38, 0, 34)
diff --git a/apps/plugins/sdl/progs/wolf3d/version.h b/apps/plugins/sdl/progs/wolf3d/version.h
new file mode 100644
index 0000000000..48b2177674
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/version.h
@@ -0,0 +1,55 @@
+#ifndef _VERSION_H_
+#define _VERSION_H_
+
+#ifndef VERSIONALREADYCHOSEN // used for batch compiling
+
+#ifndef DATADIR
+#define DATADIR "/.rockbox/wolf3d/"
+#endif
+
+/* Defines used for different versions */
+
+//#define SPEAR
+//#define SPEARDEMO
+//#define UPLOAD
+#define GOODTIMES
+#define CARMACIZED
+//#define APOGEE_1_0
+//#define APOGEE_1_1
+//#define APOGEE_1_2
+
+/*
+ Wolf3d Full v1.1 Apogee (with ReadThis) - define CARMACIZED and APOGEE_1_1
+ Wolf3d Full v1.4 Apogee (with ReadThis) - define CARMACIZED
+ Wolf3d Full v1.4 GT/ID/Activision - define CARMACIZED and GOODTIMES
+ Wolf3d Shareware v1.0 - define UPLOAD and APOGEE_1_0
+ Wolf3d Shareware v1.1 - define CARMACIZED and UPLOAD and APOGEE_1_1
+ Wolf3d Shareware v1.2 - define CARMACIZED and UPLOAD and APOGEE_1_2
+ Wolf3d Shareware v1.4 - define CARMACIZED and UPLOAD
+ Spear of Destiny Full and Mission Disks - define CARMACIZED and SPEAR
+ (and GOODTIMES for no FormGen quiz)
+ Spear of Destiny Demo - define CARMACIZED and SPEAR and SPEARDEMO
+*/
+
+#endif
+
+//#define USE_FEATUREFLAGS // Enables the level feature flags (see bottom of wl_def.h)
+//#define USE_SHADING // Enables shading support (see wl_shade.cpp)
+//#define USE_DIR3DSPR // Enables directional 3d sprites (see wl_dir3dspr.cpp)
+//#define USE_FLOORCEILINGTEX // Enables floor and ceiling textures stored in the third mapplane (see wl_floorceiling.cpp)
+//#define USE_HIRES // Enables high resolution textures/sprites (128x128)
+//#define USE_PARALLAX 16 // Enables parallax sky with 16 textures per sky (see wl_parallax.cpp)
+//#define USE_CLOUDSKY // Enables cloud sky support (see wl_cloudsky.cpp)
+//#define USE_STARSKY // Enables star sky support (see wl_atmos.cpp)
+//#define USE_RAIN // Enables rain support (see wl_atmos.cpp)
+//#define USE_SNOW // Enables snow support (see wl_atmos.cpp)
+//#define FIXRAINSNOWLEAKS // Enables leaking ceilings fix (by Adam Biser, only needed if maps with rain/snow and ceilings exist)
+
+#define DEBUGKEYS // Comment this out to compile without the Tab debug keys
+#define ARTSEXTERN
+#define DEMOSEXTERN
+#define PLAYDEMOLIKEORIGINAL // When playing or recording demos, several bug fixes do not take
+ // effect to let the original demos work as in the original Wolf3D v1.4
+ // (actually better, as the second demo rarely worked)
+
+#endif
diff --git a/apps/plugins/sdl/progs/wolf3d/wl_act1.c b/apps/plugins/sdl/progs/wolf3d/wl_act1.c
new file mode 100644
index 0000000000..e9553c97c5
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/wl_act1.c
@@ -0,0 +1,859 @@
+// WL_ACT1.C
+
+#include "wl_def.h"
+#pragma hdrstop
+
+/*
+=============================================================================
+
+ STATICS
+
+=============================================================================
+*/
+
+
+statobj_t statobjlist[MAXSTATS];
+statobj_t *laststatobj;
+
+
+struct
+{
+ short picnum;
+ wl_stat_t type;
+ uint32_t specialFlags; // they are ORed to the statobj_t flags
+} statinfo[] =
+{
+ {SPR_STAT_0}, // puddle spr1v
+ {SPR_STAT_1,block}, // Green Barrel "
+ {SPR_STAT_2,block}, // Table/chairs "
+ {SPR_STAT_3,block,FL_FULLBRIGHT}, // Floor lamp "
+ {SPR_STAT_4,none,FL_FULLBRIGHT}, // Chandelier "
+ {SPR_STAT_5,block}, // Hanged man "
+ {SPR_STAT_6,bo_alpo}, // Bad food "
+ {SPR_STAT_7,block}, // Red pillar "
+ //
+ // NEW PAGE
+ //
+ {SPR_STAT_8,block}, // Tree spr2v
+ {SPR_STAT_9}, // Skeleton flat "
+ {SPR_STAT_10,block}, // Sink " (SOD:gibs)
+ {SPR_STAT_11,block}, // Potted plant "
+ {SPR_STAT_12,block}, // Urn "
+ {SPR_STAT_13,block}, // Bare table "
+ {SPR_STAT_14,none,FL_FULLBRIGHT}, // Ceiling light "
+ #ifndef SPEAR
+ {SPR_STAT_15}, // Kitchen stuff "
+ #else
+ {SPR_STAT_15,block}, // Gibs!
+ #endif
+ //
+ // NEW PAGE
+ //
+ {SPR_STAT_16,block}, // suit of armor spr3v
+ {SPR_STAT_17,block}, // Hanging cage "
+ {SPR_STAT_18,block}, // SkeletoninCage "
+ {SPR_STAT_19}, // Skeleton relax "
+ {SPR_STAT_20,bo_key1}, // Key 1 "
+ {SPR_STAT_21,bo_key2}, // Key 2 "
+ {SPR_STAT_22,block}, // stuff (SOD:gibs)
+ {SPR_STAT_23}, // stuff
+ //
+ // NEW PAGE
+ //
+ {SPR_STAT_24,bo_food}, // Good food spr4v
+ {SPR_STAT_25,bo_firstaid}, // First aid "
+ {SPR_STAT_26,bo_clip}, // Clip "
+ {SPR_STAT_27,bo_machinegun}, // Machine gun "
+ {SPR_STAT_28,bo_chaingun}, // Gatling gun "
+ {SPR_STAT_29,bo_cross}, // Cross "
+ {SPR_STAT_30,bo_chalice}, // Chalice "
+ {SPR_STAT_31,bo_bible}, // Bible "
+ //
+ // NEW PAGE
+ //
+ {SPR_STAT_32,bo_crown}, // crown spr5v
+ {SPR_STAT_33,bo_fullheal,FL_FULLBRIGHT},// one up "
+ {SPR_STAT_34,bo_gibs}, // gibs "
+ {SPR_STAT_35,block}, // barrel "
+ {SPR_STAT_36,block}, // well "
+ {SPR_STAT_37,block}, // Empty well "
+ {SPR_STAT_38,bo_gibs}, // Gibs 2 "
+ {SPR_STAT_39,block}, // flag "
+ //
+ // NEW PAGE
+ //
+ #ifndef SPEAR
+ {SPR_STAT_40,block}, // Call Apogee spr7v
+ #else
+ {SPR_STAT_40}, // Red light
+ #endif
+ //
+ // NEW PAGE
+ //
+ {SPR_STAT_41}, // junk "
+ {SPR_STAT_42}, // junk "
+ {SPR_STAT_43}, // junk "
+ #ifndef SPEAR
+ {SPR_STAT_44}, // pots "
+ #else
+ {SPR_STAT_44,block}, // Gibs!
+ #endif
+ {SPR_STAT_45,block}, // stove " (SOD:gibs)
+ {SPR_STAT_46,block}, // spears " (SOD:gibs)
+ {SPR_STAT_47}, // vines "
+ //
+ // NEW PAGE
+ //
+ #ifdef SPEAR
+ {SPR_STAT_48,block}, // marble pillar
+ {SPR_STAT_49,bo_25clip}, // bonus 25 clip
+ {SPR_STAT_50,block}, // truck
+ {SPR_STAT_51,bo_spear}, // SPEAR OF DESTINY!
+ #endif
+
+ {SPR_STAT_26,bo_clip2}, // Clip "
+#ifdef USE_DIR3DSPR
+ // These are just two examples showing the new way of using dir 3d sprites.
+ // You can find the allowed values in the objflag_t enum in wl_def.h.
+ {SPR_STAT_47,none,FL_DIR_VERT_MID},
+ {SPR_STAT_47,block,FL_DIR_HORIZ_MID},
+#endif
+ {-1} // terminator
+};
+
+/*
+===============
+=
+= InitStaticList
+=
+===============
+*/
+
+void InitStaticList (void)
+{
+ laststatobj = &statobjlist[0];
+}
+
+
+
+/*
+===============
+=
+= SpawnStatic
+=
+===============
+*/
+
+void SpawnStatic (int tilex, int tiley, int type)
+{
+ laststatobj->shapenum = statinfo[type].picnum;
+ laststatobj->tilex = tilex;
+ laststatobj->tiley = tiley;
+ laststatobj->visspot = &spotvis[tilex][tiley];
+
+ switch (statinfo[type].type)
+ {
+ case block:
+ actorat[tilex][tiley] = (objtype *) 64; // consider it a blocking tile
+ case none:
+ laststatobj->flags = 0;
+ break;
+
+ case bo_cross:
+ case bo_chalice:
+ case bo_bible:
+ case bo_crown:
+ case bo_fullheal:
+ if (!loadedgame)
+ gamestate.treasuretotal++;
+
+ case bo_firstaid:
+ case bo_key1:
+ case bo_key2:
+ case bo_key3:
+ case bo_key4:
+ case bo_clip:
+ case bo_25clip:
+ case bo_machinegun:
+ case bo_chaingun:
+ case bo_food:
+ case bo_alpo:
+ case bo_gibs:
+ case bo_spear:
+ laststatobj->flags = FL_BONUS;
+ laststatobj->itemnumber = statinfo[type].type;
+ break;
+ }
+
+ laststatobj->flags |= statinfo[type].specialFlags;
+
+ laststatobj++;
+
+ if (laststatobj == &statobjlist[MAXSTATS])
+ Quit ("Too many static objects!\n");
+}
+
+
+/*
+===============
+=
+= PlaceItemType
+=
+= Called during game play to drop actors' items. It finds the proper
+= item number based on the item type (bo_???). If there are no free item
+= spots, nothing is done.
+=
+===============
+*/
+
+void PlaceItemType (int itemtype, int tilex, int tiley)
+{
+ int type;
+ statobj_t *spot;
+
+ //
+ // find the item number
+ //
+ for (type=0; ; type++)
+ {
+ if (statinfo[type].picnum == -1) // end of list
+ Quit ("PlaceItemType: couldn't find type!");
+ if (statinfo[type].type == itemtype)
+ break;
+ }
+
+ //
+ // find a spot in statobjlist to put it in
+ //
+ for (spot=&statobjlist[0]; ; spot++)
+ {
+ if (spot==laststatobj)
+ {
+ if (spot == &statobjlist[MAXSTATS])
+ return; // no free spots
+ laststatobj++; // space at end
+ break;
+ }
+
+ if (spot->shapenum == -1) // -1 is a free spot
+ break;
+ }
+ //
+ // place it
+ //
+ spot->shapenum = statinfo[type].picnum;
+ spot->tilex = tilex;
+ spot->tiley = tiley;
+ spot->visspot = &spotvis[tilex][tiley];
+ spot->flags = FL_BONUS | statinfo[type].specialFlags;
+ spot->itemnumber = statinfo[type].type;
+}
+
+
+
+/*
+=============================================================================
+
+ DOORS
+
+doorobjlist[] holds most of the information for the doors
+
+doorposition[] holds the amount the door is open, ranging from 0 to 0xffff
+ this is directly accessed by AsmRefresh during rendering
+
+The number of doors is limited to 64 because a spot in tilemap holds the
+ door number in the low 6 bits, with the high bit meaning a door center
+ and bit 6 meaning a door side tile
+
+Open doors conect two areas, so sounds will travel between them and sight
+ will be checked when the player is in a connected area.
+
+Areaconnect is incremented/decremented by each door. If >0 they connect
+
+Every time a door opens or closes the areabyplayer matrix gets recalculated.
+ An area is true if it connects with the player's current spor.
+
+=============================================================================
+*/
+
+#define DOORWIDTH 0x7800
+#define OPENTICS 300
+
+doorobj_t doorobjlist[MAXDOORS],*lastdoorobj;
+short doornum;
+
+word doorposition[MAXDOORS]; // leading edge of door 0=closed
+ // 0xffff = fully open
+
+byte areaconnect[NUMAREAS][NUMAREAS];
+
+boolean areabyplayer[NUMAREAS];
+
+
+/*
+==============
+=
+= ConnectAreas
+=
+= Scans outward from playerarea, marking all connected areas
+=
+==============
+*/
+
+void RecursiveConnect (int areanumber)
+{
+ int i;
+
+ for (i=0;i<NUMAREAS;i++)
+ {
+ if (areaconnect[areanumber][i] && !areabyplayer[i])
+ {
+ areabyplayer[i] = true;
+ RecursiveConnect (i);
+ }
+ }
+}
+
+
+void ConnectAreas (void)
+{
+ memset (areabyplayer,0,sizeof(areabyplayer));
+ areabyplayer[player->areanumber] = true;
+ RecursiveConnect (player->areanumber);
+}
+
+
+void InitAreas (void)
+{
+ memset (areabyplayer,0,sizeof(areabyplayer));
+ if (player->areanumber < NUMAREAS)
+ areabyplayer[player->areanumber] = true;
+}
+
+
+
+/*
+===============
+=
+= InitDoorList
+=
+===============
+*/
+
+void InitDoorList (void)
+{
+ memset (areabyplayer,0,sizeof(areabyplayer));
+ memset (areaconnect,0,sizeof(areaconnect));
+
+ lastdoorobj = &doorobjlist[0];
+ doornum = 0;
+}
+
+
+/*
+===============
+=
+= SpawnDoor
+=
+===============
+*/
+
+void SpawnDoor (int tilex, int tiley, boolean vertical, int lock)
+{
+ word *map;
+
+ if (doornum==MAXDOORS)
+ Quit ("64+ doors on level!");
+
+ doorposition[doornum] = 0; // doors start out fully closed
+ lastdoorobj->tilex = tilex;
+ lastdoorobj->tiley = tiley;
+ lastdoorobj->vertical = vertical;
+ lastdoorobj->lock = lock;
+ lastdoorobj->action = dr_closed;
+
+ actorat[tilex][tiley] = (objtype *)(uintptr_t)(doornum | 0x80); // consider it a solid wall
+
+ //
+ // make the door tile a special tile, and mark the adjacent tiles
+ // for door sides
+ //
+ tilemap[tilex][tiley] = doornum | 0x80;
+ map = mapsegs[0] + (tiley<<mapshift) +tilex;
+ if (vertical)
+ {
+ *map = *(map-1); // set area number
+ tilemap[tilex][tiley-1] |= 0x40;
+ tilemap[tilex][tiley+1] |= 0x40;
+ }
+ else
+ {
+ *map = *(map-mapwidth); // set area number
+ tilemap[tilex-1][tiley] |= 0x40;
+ tilemap[tilex+1][tiley] |= 0x40;
+ }
+
+ doornum++;
+ lastdoorobj++;
+}
+
+//===========================================================================
+
+/*
+=====================
+=
+= OpenDoor
+=
+=====================
+*/
+
+void OpenDoor (int door)
+{
+ if (doorobjlist[door].action == dr_open)
+ doorobjlist[door].ticcount = 0; // reset open time
+ else
+ doorobjlist[door].action = dr_opening; // start it opening
+}
+
+
+/*
+=====================
+=
+= CloseDoor
+=
+=====================
+*/
+
+void CloseDoor (int door)
+{
+ int tilex,tiley,area;
+ objtype *check;
+
+ //
+ // don't close on anything solid
+ //
+ tilex = doorobjlist[door].tilex;
+ tiley = doorobjlist[door].tiley;
+
+ if (actorat[tilex][tiley])
+ return;
+
+ if (player->tilex == tilex && player->tiley == tiley)
+ return;
+
+ if (doorobjlist[door].vertical)
+ {
+ if ( player->tiley == tiley )
+ {
+ if ( ((player->x+MINDIST) >>TILESHIFT) == tilex )
+ return;
+ if ( ((player->x-MINDIST) >>TILESHIFT) == tilex )
+ return;
+ }
+ check = actorat[tilex-1][tiley];
+ if (ISPOINTER(check) && ((check->x+MINDIST) >> TILESHIFT) == tilex )
+ return;
+ check = actorat[tilex+1][tiley];
+ if (ISPOINTER(check) && ((check->x-MINDIST) >> TILESHIFT) == tilex )
+ return;
+ }
+ else if (!doorobjlist[door].vertical)
+ {
+ if (player->tilex == tilex)
+ {
+ if ( ((player->y+MINDIST) >>TILESHIFT) == tiley )
+ return;
+ if ( ((player->y-MINDIST) >>TILESHIFT) == tiley )
+ return;
+ }
+ check = actorat[tilex][tiley-1];
+ if (ISPOINTER(check) && ((check->y+MINDIST) >> TILESHIFT) == tiley )
+ return;
+ check = actorat[tilex][tiley+1];
+ if (ISPOINTER(check) && ((check->y-MINDIST) >> TILESHIFT) == tiley )
+ return;
+ }
+
+
+ //
+ // play door sound if in a connected area
+ //
+ area = *(mapsegs[0] + (doorobjlist[door].tiley<<mapshift)
+ +doorobjlist[door].tilex)-AREATILE;
+ if (areabyplayer[area])
+ {
+ PlaySoundLocTile(CLOSEDOORSND,doorobjlist[door].tilex,doorobjlist[door].tiley); // JAB
+ }
+
+ doorobjlist[door].action = dr_closing;
+ //
+ // make the door space solid
+ //
+ actorat[tilex][tiley] = (objtype *)(uintptr_t)(door | 0x80);
+}
+
+
+
+/*
+=====================
+=
+= OperateDoor
+=
+= The player wants to change the door's direction
+=
+=====================
+*/
+
+void OperateDoor (int door)
+{
+ int lock;
+
+ lock = doorobjlist[door].lock;
+ if (lock >= dr_lock1 && lock <= dr_lock4)
+ {
+ if ( ! (gamestate.keys & (1 << (lock-dr_lock1) ) ) )
+ {
+ SD_PlaySound (NOWAYSND); // locked
+ return;
+ }
+ }
+
+ switch (doorobjlist[door].action)
+ {
+ case dr_closed:
+ case dr_closing:
+ OpenDoor (door);
+ break;
+ case dr_open:
+ case dr_opening:
+ CloseDoor (door);
+ break;
+ }
+}
+
+
+//===========================================================================
+
+/*
+===============
+=
+= DoorOpen
+=
+= Close the door after three seconds
+=
+===============
+*/
+
+void DoorOpen (int door)
+{
+ if ( (doorobjlist[door].ticcount += (short) tics) >= OPENTICS)
+ CloseDoor (door);
+}
+
+
+
+/*
+===============
+=
+= DoorOpening
+=
+===============
+*/
+
+void DoorOpening (int door)
+{
+ unsigned area1,area2;
+ word *map;
+ int32_t position;
+
+ position = doorposition[door];
+ if (!position)
+ {
+ //
+ // door is just starting to open, so connect the areas
+ //
+ map = mapsegs[0] + (doorobjlist[door].tiley<<mapshift)
+ +doorobjlist[door].tilex;
+
+ if (doorobjlist[door].vertical)
+ {
+ area1 = *(map+1);
+ area2 = *(map-1);
+ }
+ else
+ {
+ area1 = *(map-mapwidth);
+ area2 = *(map+mapwidth);
+ }
+ area1 -= AREATILE;
+ area2 -= AREATILE;
+
+ if (area1 < NUMAREAS && area2 < NUMAREAS)
+ {
+ areaconnect[area1][area2]++;
+ areaconnect[area2][area1]++;
+
+ if (player->areanumber < NUMAREAS)
+ ConnectAreas ();
+
+ if (areabyplayer[area1])
+ PlaySoundLocTile(OPENDOORSND,doorobjlist[door].tilex,doorobjlist[door].tiley); // JAB
+ }
+ }
+
+ //
+ // slide the door by an adaptive amount
+ //
+ position += tics<<10;
+ if (position >= 0xffff)
+ {
+ //
+ // door is all the way open
+ //
+ position = 0xffff;
+ doorobjlist[door].ticcount = 0;
+ doorobjlist[door].action = dr_open;
+ actorat[doorobjlist[door].tilex][doorobjlist[door].tiley] = 0;
+ }
+
+ doorposition[door] = (word) position;
+}
+
+
+/*
+===============
+=
+= DoorClosing
+=
+===============
+*/
+
+void DoorClosing (int door)
+{
+ unsigned area1,area2;
+ word *map;
+ int32_t position;
+ int tilex,tiley;
+
+ tilex = doorobjlist[door].tilex;
+ tiley = doorobjlist[door].tiley;
+
+ if ( ((int)(uintptr_t)actorat[tilex][tiley] != (door | 0x80))
+ || (player->tilex == tilex && player->tiley == tiley) )
+ { // something got inside the door
+ OpenDoor (door);
+ return;
+ };
+
+ position = doorposition[door];
+
+ //
+ // slide the door by an adaptive amount
+ //
+ position -= tics<<10;
+ if (position <= 0)
+ {
+ //
+ // door is closed all the way, so disconnect the areas
+ //
+ position = 0;
+
+ doorobjlist[door].action = dr_closed;
+
+ map = mapsegs[0] + (doorobjlist[door].tiley<<mapshift) + doorobjlist[door].tilex;
+
+ if (doorobjlist[door].vertical)
+ {
+ area1 = *(map+1);
+ area2 = *(map-1);
+ }
+ else
+ {
+ area1 = *(map-mapwidth);
+ area2 = *(map+mapwidth);
+ }
+ area1 -= AREATILE;
+ area2 -= AREATILE;
+
+ if (area1 < NUMAREAS && area2 < NUMAREAS)
+ {
+ areaconnect[area1][area2]--;
+ areaconnect[area2][area1]--;
+
+ if (player->areanumber < NUMAREAS)
+ ConnectAreas ();
+ }
+ }
+
+ doorposition[door] = (word) position;
+}
+
+
+
+
+/*
+=====================
+=
+= MoveDoors
+=
+= Called from PlayLoop
+=
+=====================
+*/
+
+void MoveDoors (void)
+{
+ int door;
+
+ if (gamestate.victoryflag) // don't move door during victory sequence
+ return;
+
+ for (door = 0; door < doornum; door++)
+ {
+ switch (doorobjlist[door].action)
+ {
+ case dr_open:
+ DoorOpen (door);
+ break;
+
+ case dr_opening:
+ DoorOpening(door);
+ break;
+
+ case dr_closing:
+ DoorClosing(door);
+ break;
+ }
+ }
+}
+
+
+/*
+=============================================================================
+
+ PUSHABLE WALLS
+
+=============================================================================
+*/
+
+word pwallstate;
+word pwallpos; // amount a pushable wall has been moved (0-63)
+word pwallx,pwally;
+byte pwalldir,pwalltile;
+int dirs[4][2]={{0,-1},{1,0},{0,1},{-1,0}};
+
+/*
+===============
+=
+= PushWall
+=
+===============
+*/
+
+void PushWall (int checkx, int checky, int dir)
+{
+ int oldtile, dx, dy;
+
+ if (pwallstate)
+ return;
+
+ oldtile = tilemap[checkx][checky];
+ if (!oldtile)
+ return;
+
+ dx = dirs[dir][0];
+ dy = dirs[dir][1];
+
+ if (actorat[checkx+dx][checky+dy])
+ {
+ SD_PlaySound (NOWAYSND);
+ return;
+ }
+ actorat[checkx+dx][checky+dy] = (objtype *)(uintptr_t) (tilemap[checkx+dx][checky+dy] = oldtile);
+
+ gamestate.secretcount++;
+ pwallx = checkx;
+ pwally = checky;
+ pwalldir = dir;
+ pwallstate = 1;
+ pwallpos = 0;
+ pwalltile = tilemap[pwallx][pwally];
+ tilemap[pwallx][pwally] = 64;
+ tilemap[pwallx+dx][pwally+dy] = 64;
+ *(mapsegs[1]+(pwally<<mapshift)+pwallx) = 0; // remove P tile info
+ *(mapsegs[0]+(pwally<<mapshift)+pwallx) = *(mapsegs[0]+(player->tiley<<mapshift)+player->tilex); // set correct floorcode (BrotherTank's fix)
+
+ SD_PlaySound (PUSHWALLSND);
+}
+
+
+
+/*
+=================
+=
+= MovePWalls
+=
+=================
+*/
+
+void MovePWalls (void)
+{
+ int oldblock,oldtile;
+
+ if (!pwallstate)
+ return;
+
+ oldblock = pwallstate/128;
+
+ pwallstate += (word)tics;
+
+ if (pwallstate/128 != oldblock)
+ {
+ // block crossed into a new block
+ oldtile = pwalltile;
+
+ //
+ // the tile can now be walked into
+ //
+ tilemap[pwallx][pwally] = 0;
+ actorat[pwallx][pwally] = 0;
+ *(mapsegs[0]+(pwally<<mapshift)+pwallx) = player->areanumber+AREATILE;
+
+ int dx=dirs[pwalldir][0], dy=dirs[pwalldir][1];
+ //
+ // see if it should be pushed farther
+ //
+ if (pwallstate>=256) // only move two tiles fix
+ {
+ //
+ // the block has been pushed two tiles
+ //
+ pwallstate = 0;
+ tilemap[pwallx+dx][pwally+dy] = oldtile;
+ return;
+ }
+ else
+ {
+ int xl,yl,xh,yh;
+ xl = (player->x-PLAYERSIZE) >> TILESHIFT;
+ yl = (player->y-PLAYERSIZE) >> TILESHIFT;
+ xh = (player->x+PLAYERSIZE) >> TILESHIFT;
+ yh = (player->y+PLAYERSIZE) >> TILESHIFT;
+
+ pwallx += dx;
+ pwally += dy;
+
+ if (actorat[pwallx+dx][pwally+dy]
+ || xl<=pwallx+dx && pwallx+dx<=xh && yl<=pwally+dy && pwally+dy<=yh)
+ {
+ pwallstate = 0;
+ tilemap[pwallx][pwally] = oldtile;
+ return;
+ }
+ actorat[pwallx+dx][pwally+dy] = (objtype *)(uintptr_t) (tilemap[pwallx+dx][pwally+dy] = oldtile);
+ tilemap[pwallx+dx][pwally+dy] = 64;
+ }
+ }
+
+ pwallpos = (pwallstate/2)&63;
+}
diff --git a/apps/plugins/sdl/progs/wolf3d/wl_act2.c b/apps/plugins/sdl/progs/wolf3d/wl_act2.c
new file mode 100644
index 0000000000..20a81f6329
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/wl_act2.c
@@ -0,0 +1,3899 @@
+// WL_ACT2.C
+
+#include <stdio.h>
+#include <math.h>
+#include "wl_def.h"
+#pragma hdrstop
+
+/*
+=============================================================================
+
+ LOCAL CONSTANTS
+
+=============================================================================
+*/
+
+#define PROJECTILESIZE 0xc000l
+
+#define BJRUNSPEED 2048
+#define BJJUMPSPEED 680
+
+
+/*
+=============================================================================
+
+ GLOBAL VARIABLES
+
+=============================================================================
+*/
+
+
+
+/*
+=============================================================================
+
+ LOCAL VARIABLES
+
+=============================================================================
+*/
+
+
+dirtype dirtable[9] = {northwest,north,northeast,west,nodir,east,
+ southwest,south,southeast};
+
+short starthitpoints[4][NUMENEMIES] =
+//
+// BABY MODE
+//
+{
+ {
+ 25, // guards
+ 50, // officer
+ 100, // SS
+ 1, // dogs
+ 850, // Hans
+ 850, // Schabbs
+ 200, // fake hitler
+ 800, // mecha hitler
+ 45, // mutants
+ 25, // ghosts
+ 25, // ghosts
+ 25, // ghosts
+ 25, // ghosts
+
+ 850, // Gretel
+ 850, // Gift
+ 850, // Fat
+ 5, // en_spectre,
+ 1450, // en_angel,
+ 850, // en_trans,
+ 1050, // en_uber,
+ 950, // en_will,
+ 1250 // en_death
+ },
+ //
+ // DON'T HURT ME MODE
+ //
+ {
+ 25, // guards
+ 50, // officer
+ 100, // SS
+ 1, // dogs
+ 950, // Hans
+ 950, // Schabbs
+ 300, // fake hitler
+ 950, // mecha hitler
+ 55, // mutants
+ 25, // ghosts
+ 25, // ghosts
+ 25, // ghosts
+ 25, // ghosts
+
+ 950, // Gretel
+ 950, // Gift
+ 950, // Fat
+ 10, // en_spectre,
+ 1550, // en_angel,
+ 950, // en_trans,
+ 1150, // en_uber,
+ 1050, // en_will,
+ 1350 // en_death
+ },
+ //
+ // BRING 'EM ON MODE
+ //
+ {
+ 25, // guards
+ 50, // officer
+ 100, // SS
+ 1, // dogs
+
+ 1050, // Hans
+ 1550, // Schabbs
+ 400, // fake hitler
+ 1050, // mecha hitler
+
+ 55, // mutants
+ 25, // ghosts
+ 25, // ghosts
+ 25, // ghosts
+ 25, // ghosts
+
+ 1050, // Gretel
+ 1050, // Gift
+ 1050, // Fat
+ 15, // en_spectre,
+ 1650, // en_angel,
+ 1050, // en_trans,
+ 1250, // en_uber,
+ 1150, // en_will,
+ 1450 // en_death
+ },
+ //
+ // DEATH INCARNATE MODE
+ //
+ {
+ 25, // guards
+ 50, // officer
+ 100, // SS
+ 1, // dogs
+
+ 1200, // Hans
+ 2400, // Schabbs
+ 500, // fake hitler
+ 1200, // mecha hitler
+
+ 65, // mutants
+ 25, // ghosts
+ 25, // ghosts
+ 25, // ghosts
+ 25, // ghosts
+
+ 1200, // Gretel
+ 1200, // Gift
+ 1200, // Fat
+ 25, // en_spectre,
+ 2000, // en_angel,
+ 1200, // en_trans,
+ 1400, // en_uber,
+ 1300, // en_will,
+ 1600 // en_death
+ }
+};
+
+void A_StartDeathCam (objtype *ob);
+
+
+void T_Path (objtype *ob);
+void T_Shoot (objtype *ob);
+void T_Bite (objtype *ob);
+void T_DogChase (objtype *ob);
+void T_Chase (objtype *ob);
+void T_Projectile (objtype *ob);
+void T_Stand (objtype *ob);
+
+void A_DeathScream (objtype *ob);
+
+extern statetype s_rocket;
+extern statetype s_smoke1;
+extern statetype s_smoke2;
+extern statetype s_smoke3;
+extern statetype s_smoke4;
+extern statetype s_boom2;
+extern statetype s_boom3;
+
+void A_Smoke (objtype *ob);
+
+statetype s_rocket = {true,SPR_ROCKET_1,3,(statefunc)T_Projectile,(statefunc)A_Smoke,&s_rocket};
+statetype s_smoke1 = {false,SPR_SMOKE_1,3,NULL,NULL,&s_smoke2};
+statetype s_smoke2 = {false,SPR_SMOKE_2,3,NULL,NULL,&s_smoke3};
+statetype s_smoke3 = {false,SPR_SMOKE_3,3,NULL,NULL,&s_smoke4};
+statetype s_smoke4 = {false,SPR_SMOKE_4,3,NULL,NULL,NULL};
+
+statetype s_boom1 = {false,SPR_BOOM_1,6,NULL,NULL,&s_boom2};
+statetype s_boom2 = {false,SPR_BOOM_2,6,NULL,NULL,&s_boom3};
+statetype s_boom3 = {false,SPR_BOOM_3,6,NULL,NULL,NULL};
+
+#ifdef SPEAR
+
+extern statetype s_hrocket;
+extern statetype s_hsmoke1;
+extern statetype s_hsmoke2;
+extern statetype s_hsmoke3;
+extern statetype s_hsmoke4;
+extern statetype s_hboom2;
+extern statetype s_hboom3;
+
+void A_Smoke (objtype *ob);
+
+statetype s_hrocket = {true,SPR_HROCKET_1,3,(statefunc)T_Projectile,(statefunc)A_Smoke,&s_hrocket};
+statetype s_hsmoke1 = {false,SPR_HSMOKE_1,3,NULL,NULL,&s_hsmoke2};
+statetype s_hsmoke2 = {false,SPR_HSMOKE_2,3,NULL,NULL,&s_hsmoke3};
+statetype s_hsmoke3 = {false,SPR_HSMOKE_3,3,NULL,NULL,&s_hsmoke4};
+statetype s_hsmoke4 = {false,SPR_HSMOKE_4,3,NULL,NULL,NULL};
+
+statetype s_hboom1 = {false,SPR_HBOOM_1,6,NULL,NULL,&s_hboom2};
+statetype s_hboom2 = {false,SPR_HBOOM_2,6,NULL,NULL,&s_hboom3};
+statetype s_hboom3 = {false,SPR_HBOOM_3,6,NULL,NULL,NULL};
+
+#endif
+
+void T_Schabb (objtype *ob);
+void T_SchabbThrow (objtype *ob);
+void T_Fake (objtype *ob);
+void T_FakeFire (objtype *ob);
+void T_Ghosts (objtype *ob);
+
+void A_Slurpie (objtype *ob);
+void A_HitlerMorph (objtype *ob);
+void A_MechaSound (objtype *ob);
+
+/*
+=================
+=
+= A_Smoke
+=
+=================
+*/
+
+void A_Smoke (objtype *ob)
+{
+ GetNewActor ();
+#ifdef SPEAR
+ if (ob->obclass == hrocketobj)
+ newobj->state = &s_hsmoke1;
+ else
+#endif
+ newobj->state = &s_smoke1;
+ newobj->ticcount = 6;
+
+ newobj->tilex = ob->tilex;
+ newobj->tiley = ob->tiley;
+ newobj->x = ob->x;
+ newobj->y = ob->y;
+ newobj->obclass = inertobj;
+ newobj->active = ac_yes;
+
+ newobj->flags = FL_NEVERMARK;
+}
+
+
+/*
+===================
+=
+= ProjectileTryMove
+=
+= returns true if move ok
+===================
+*/
+
+#define PROJSIZE 0x2000
+
+boolean ProjectileTryMove (objtype *ob)
+{
+ int xl,yl,xh,yh,x,y;
+ objtype *check;
+
+ xl = (ob->x-PROJSIZE) >> TILESHIFT;
+ yl = (ob->y-PROJSIZE) >> TILESHIFT;
+
+ xh = (ob->x+PROJSIZE) >> TILESHIFT;
+ yh = (ob->y+PROJSIZE) >> TILESHIFT;
+
+ //
+ // check for solid walls
+ //
+ for (y=yl;y<=yh;y++)
+ for (x=xl;x<=xh;x++)
+ {
+ check = actorat[x][y];
+ if (check && !ISPOINTER(check))
+ return false;
+ }
+
+ return true;
+}
+
+
+
+/*
+=================
+=
+= T_Projectile
+=
+=================
+*/
+
+void T_Projectile (objtype *ob)
+{
+ int32_t deltax,deltay;
+ int damage;
+ int32_t speed;
+
+ speed = (int32_t)ob->speed*tics;
+
+ deltax = FixedMul(speed,costable[ob->angle]);
+ deltay = -FixedMul(speed,sintable[ob->angle]);
+
+ if (deltax>0x10000l)
+ deltax = 0x10000l;
+ if (deltay>0x10000l)
+ deltay = 0x10000l;
+
+ ob->x += deltax;
+ ob->y += deltay;
+
+ deltax = LABS(ob->x - player->x);
+ deltay = LABS(ob->y - player->y);
+
+ if (!ProjectileTryMove (ob))
+ {
+#ifndef APOGEE_1_0 // actually the whole method is never reached in shareware 1.0
+ if (ob->obclass == rocketobj)
+ {
+ PlaySoundLocActor(MISSILEHITSND,ob);
+ ob->state = &s_boom1;
+ }
+#ifdef SPEAR
+ else if (ob->obclass == hrocketobj)
+ {
+ PlaySoundLocActor(MISSILEHITSND,ob);
+ ob->state = &s_hboom1;
+ }
+#endif
+ else
+#endif
+ ob->state = NULL; // mark for removal
+
+ return;
+ }
+
+ if (deltax < PROJECTILESIZE && deltay < PROJECTILESIZE)
+ { // hit the player
+ switch (ob->obclass)
+ {
+ case needleobj:
+ damage = (US_RndT() >>3) + 20;
+ break;
+ case rocketobj:
+ case hrocketobj:
+ case sparkobj:
+ damage = (US_RndT() >>3) + 30;
+ break;
+ case fireobj:
+ damage = (US_RndT() >>3);
+ break;
+ }
+
+ TakeDamage (damage,ob);
+ ob->state = NULL; // mark for removal
+ return;
+ }
+
+ ob->tilex = (short)(ob->x >> TILESHIFT);
+ ob->tiley = (short)(ob->y >> TILESHIFT);
+}
+
+
+/*
+=============================================================================
+
+GUARD
+
+=============================================================================
+*/
+
+//
+// guards
+//
+
+extern statetype s_grdstand;
+
+extern statetype s_grdpath1;
+extern statetype s_grdpath1s;
+extern statetype s_grdpath2;
+extern statetype s_grdpath3;
+extern statetype s_grdpath3s;
+extern statetype s_grdpath4;
+
+extern statetype s_grdpain;
+extern statetype s_grdpain1;
+
+extern statetype s_grdgiveup;
+
+extern statetype s_grdshoot1;
+extern statetype s_grdshoot2;
+extern statetype s_grdshoot3;
+extern statetype s_grdshoot4;
+
+extern statetype s_grdchase1;
+extern statetype s_grdchase1s;
+extern statetype s_grdchase2;
+extern statetype s_grdchase3;
+extern statetype s_grdchase3s;
+extern statetype s_grdchase4;
+
+extern statetype s_grddie1;
+extern statetype s_grddie1d;
+extern statetype s_grddie2;
+extern statetype s_grddie3;
+extern statetype s_grddie4;
+
+statetype s_grdstand = {true,SPR_GRD_S_1,0,(statefunc)T_Stand,NULL,&s_grdstand};
+
+statetype s_grdpath1 = {true,SPR_GRD_W1_1,20,(statefunc)T_Path,NULL,&s_grdpath1s};
+statetype s_grdpath1s = {true,SPR_GRD_W1_1,5,NULL,NULL,&s_grdpath2};
+statetype s_grdpath2 = {true,SPR_GRD_W2_1,15,(statefunc)T_Path,NULL,&s_grdpath3};
+statetype s_grdpath3 = {true,SPR_GRD_W3_1,20,(statefunc)T_Path,NULL,&s_grdpath3s};
+statetype s_grdpath3s = {true,SPR_GRD_W3_1,5,NULL,NULL,&s_grdpath4};
+statetype s_grdpath4 = {true,SPR_GRD_W4_1,15,(statefunc)T_Path,NULL,&s_grdpath1};
+
+statetype s_grdpain = {2,SPR_GRD_PAIN_1,10,NULL,NULL,&s_grdchase1};
+statetype s_grdpain1 = {2,SPR_GRD_PAIN_2,10,NULL,NULL,&s_grdchase1};
+
+statetype s_grdshoot1 = {false,SPR_GRD_SHOOT1,20,NULL,NULL,&s_grdshoot2};
+statetype s_grdshoot2 = {false,SPR_GRD_SHOOT2,20,NULL,(statefunc)T_Shoot,&s_grdshoot3};
+statetype s_grdshoot3 = {false,SPR_GRD_SHOOT3,20,NULL,NULL,&s_grdchase1};
+
+statetype s_grdchase1 = {true,SPR_GRD_W1_1,10,(statefunc)T_Chase,NULL,&s_grdchase1s};
+statetype s_grdchase1s = {true,SPR_GRD_W1_1,3,NULL,NULL,&s_grdchase2};
+statetype s_grdchase2 = {true,SPR_GRD_W2_1,8,(statefunc)T_Chase,NULL,&s_grdchase3};
+statetype s_grdchase3 = {true,SPR_GRD_W3_1,10,(statefunc)T_Chase,NULL,&s_grdchase3s};
+statetype s_grdchase3s = {true,SPR_GRD_W3_1,3,NULL,NULL,&s_grdchase4};
+statetype s_grdchase4 = {true,SPR_GRD_W4_1,8,(statefunc)T_Chase,NULL,&s_grdchase1};
+
+statetype s_grddie1 = {false,SPR_GRD_DIE_1,15,NULL,(statefunc)A_DeathScream,&s_grddie2};
+statetype s_grddie2 = {false,SPR_GRD_DIE_2,15,NULL,NULL,&s_grddie3};
+statetype s_grddie3 = {false,SPR_GRD_DIE_3,15,NULL,NULL,&s_grddie4};
+statetype s_grddie4 = {false,SPR_GRD_DEAD,0,NULL,NULL,&s_grddie4};
+
+
+#ifndef SPEAR
+//
+// ghosts
+//
+extern statetype s_blinkychase1;
+extern statetype s_blinkychase2;
+extern statetype s_inkychase1;
+extern statetype s_inkychase2;
+extern statetype s_pinkychase1;
+extern statetype s_pinkychase2;
+extern statetype s_clydechase1;
+extern statetype s_clydechase2;
+
+statetype s_blinkychase1 = {false,SPR_BLINKY_W1,10,(statefunc)T_Ghosts,NULL,&s_blinkychase2};
+statetype s_blinkychase2 = {false,SPR_BLINKY_W2,10,(statefunc)T_Ghosts,NULL,&s_blinkychase1};
+
+statetype s_inkychase1 = {false,SPR_INKY_W1,10,(statefunc)T_Ghosts,NULL,&s_inkychase2};
+statetype s_inkychase2 = {false,SPR_INKY_W2,10,(statefunc)T_Ghosts,NULL,&s_inkychase1};
+
+statetype s_pinkychase1 = {false,SPR_PINKY_W1,10,(statefunc)T_Ghosts,NULL,&s_pinkychase2};
+statetype s_pinkychase2 = {false,SPR_PINKY_W2,10,(statefunc)T_Ghosts,NULL,&s_pinkychase1};
+
+statetype s_clydechase1 = {false,SPR_CLYDE_W1,10,(statefunc)T_Ghosts,NULL,&s_clydechase2};
+statetype s_clydechase2 = {false,SPR_CLYDE_W2,10,(statefunc)T_Ghosts,NULL,&s_clydechase1};
+#endif
+
+//
+// dogs
+//
+
+extern statetype s_dogpath1;
+extern statetype s_dogpath1s;
+extern statetype s_dogpath2;
+extern statetype s_dogpath3;
+extern statetype s_dogpath3s;
+extern statetype s_dogpath4;
+
+extern statetype s_dogjump1;
+extern statetype s_dogjump2;
+extern statetype s_dogjump3;
+extern statetype s_dogjump4;
+extern statetype s_dogjump5;
+
+extern statetype s_dogchase1;
+extern statetype s_dogchase1s;
+extern statetype s_dogchase2;
+extern statetype s_dogchase3;
+extern statetype s_dogchase3s;
+extern statetype s_dogchase4;
+
+extern statetype s_dogdie1;
+extern statetype s_dogdie1d;
+extern statetype s_dogdie2;
+extern statetype s_dogdie3;
+extern statetype s_dogdead;
+
+statetype s_dogpath1 = {true,SPR_DOG_W1_1,20,(statefunc)T_Path,NULL,&s_dogpath1s};
+statetype s_dogpath1s = {true,SPR_DOG_W1_1,5,NULL,NULL,&s_dogpath2};
+statetype s_dogpath2 = {true,SPR_DOG_W2_1,15,(statefunc)T_Path,NULL,&s_dogpath3};
+statetype s_dogpath3 = {true,SPR_DOG_W3_1,20,(statefunc)T_Path,NULL,&s_dogpath3s};
+statetype s_dogpath3s = {true,SPR_DOG_W3_1,5,NULL,NULL,&s_dogpath4};
+statetype s_dogpath4 = {true,SPR_DOG_W4_1,15,(statefunc)T_Path,NULL,&s_dogpath1};
+
+statetype s_dogjump1 = {false,SPR_DOG_JUMP1,10,NULL,NULL,&s_dogjump2};
+statetype s_dogjump2 = {false,SPR_DOG_JUMP2,10,NULL,(statefunc)T_Bite,&s_dogjump3};
+statetype s_dogjump3 = {false,SPR_DOG_JUMP3,10,NULL,NULL,&s_dogjump4};
+statetype s_dogjump4 = {false,SPR_DOG_JUMP1,10,NULL,NULL,&s_dogjump5};
+statetype s_dogjump5 = {false,SPR_DOG_W1_1,10,NULL,NULL,&s_dogchase1};
+
+statetype s_dogchase1 = {true,SPR_DOG_W1_1,10,(statefunc)T_DogChase,NULL,&s_dogchase1s};
+statetype s_dogchase1s = {true,SPR_DOG_W1_1,3,NULL,NULL,&s_dogchase2};
+statetype s_dogchase2 = {true,SPR_DOG_W2_1,8,(statefunc)T_DogChase,NULL,&s_dogchase3};
+statetype s_dogchase3 = {true,SPR_DOG_W3_1,10,(statefunc)T_DogChase,NULL,&s_dogchase3s};
+statetype s_dogchase3s = {true,SPR_DOG_W3_1,3,NULL,NULL,&s_dogchase4};
+statetype s_dogchase4 = {true,SPR_DOG_W4_1,8,(statefunc)T_DogChase,NULL,&s_dogchase1};
+
+statetype s_dogdie1 = {false,SPR_DOG_DIE_1,15,NULL,(statefunc)A_DeathScream,&s_dogdie2};
+statetype s_dogdie2 = {false,SPR_DOG_DIE_2,15,NULL,NULL,&s_dogdie3};
+statetype s_dogdie3 = {false,SPR_DOG_DIE_3,15,NULL,NULL,&s_dogdead};
+statetype s_dogdead = {false,SPR_DOG_DEAD,15,NULL,NULL,&s_dogdead};
+
+
+//
+// officers
+//
+
+extern statetype s_ofcstand;
+
+extern statetype s_ofcpath1;
+extern statetype s_ofcpath1s;
+extern statetype s_ofcpath2;
+extern statetype s_ofcpath3;
+extern statetype s_ofcpath3s;
+extern statetype s_ofcpath4;
+
+extern statetype s_ofcpain;
+extern statetype s_ofcpain1;
+
+extern statetype s_ofcgiveup;
+
+extern statetype s_ofcshoot1;
+extern statetype s_ofcshoot2;
+extern statetype s_ofcshoot3;
+extern statetype s_ofcshoot4;
+
+extern statetype s_ofcchase1;
+extern statetype s_ofcchase1s;
+extern statetype s_ofcchase2;
+extern statetype s_ofcchase3;
+extern statetype s_ofcchase3s;
+extern statetype s_ofcchase4;
+
+extern statetype s_ofcdie1;
+extern statetype s_ofcdie2;
+extern statetype s_ofcdie3;
+extern statetype s_ofcdie4;
+extern statetype s_ofcdie5;
+
+statetype s_ofcstand = {true,SPR_OFC_S_1,0,(statefunc)T_Stand,NULL,&s_ofcstand};
+
+statetype s_ofcpath1 = {true,SPR_OFC_W1_1,20,(statefunc)T_Path,NULL,&s_ofcpath1s};
+statetype s_ofcpath1s = {true,SPR_OFC_W1_1,5,NULL,NULL,&s_ofcpath2};
+statetype s_ofcpath2 = {true,SPR_OFC_W2_1,15,(statefunc)T_Path,NULL,&s_ofcpath3};
+statetype s_ofcpath3 = {true,SPR_OFC_W3_1,20,(statefunc)T_Path,NULL,&s_ofcpath3s};
+statetype s_ofcpath3s = {true,SPR_OFC_W3_1,5,NULL,NULL,&s_ofcpath4};
+statetype s_ofcpath4 = {true,SPR_OFC_W4_1,15,(statefunc)T_Path,NULL,&s_ofcpath1};
+
+statetype s_ofcpain = {2,SPR_OFC_PAIN_1,10,NULL,NULL,&s_ofcchase1};
+statetype s_ofcpain1 = {2,SPR_OFC_PAIN_2,10,NULL,NULL,&s_ofcchase1};
+
+statetype s_ofcshoot1 = {false,SPR_OFC_SHOOT1,6,NULL,NULL,&s_ofcshoot2};
+statetype s_ofcshoot2 = {false,SPR_OFC_SHOOT2,20,NULL,(statefunc)T_Shoot,&s_ofcshoot3};
+statetype s_ofcshoot3 = {false,SPR_OFC_SHOOT3,10,NULL,NULL,&s_ofcchase1};
+
+statetype s_ofcchase1 = {true,SPR_OFC_W1_1,10,(statefunc)T_Chase,NULL,&s_ofcchase1s};
+statetype s_ofcchase1s = {true,SPR_OFC_W1_1,3,NULL,NULL,&s_ofcchase2};
+statetype s_ofcchase2 = {true,SPR_OFC_W2_1,8,(statefunc)T_Chase,NULL,&s_ofcchase3};
+statetype s_ofcchase3 = {true,SPR_OFC_W3_1,10,(statefunc)T_Chase,NULL,&s_ofcchase3s};
+statetype s_ofcchase3s = {true,SPR_OFC_W3_1,3,NULL,NULL,&s_ofcchase4};
+statetype s_ofcchase4 = {true,SPR_OFC_W4_1,8,(statefunc)T_Chase,NULL,&s_ofcchase1};
+
+statetype s_ofcdie1 = {false,SPR_OFC_DIE_1,11,NULL,(statefunc)A_DeathScream,&s_ofcdie2};
+statetype s_ofcdie2 = {false,SPR_OFC_DIE_2,11,NULL,NULL,&s_ofcdie3};
+statetype s_ofcdie3 = {false,SPR_OFC_DIE_3,11,NULL,NULL,&s_ofcdie4};
+statetype s_ofcdie4 = {false,SPR_OFC_DIE_4,11,NULL,NULL,&s_ofcdie5};
+statetype s_ofcdie5 = {false,SPR_OFC_DEAD,0,NULL,NULL,&s_ofcdie5};
+
+
+//
+// mutant
+//
+
+extern statetype s_mutstand;
+
+extern statetype s_mutpath1;
+extern statetype s_mutpath1s;
+extern statetype s_mutpath2;
+extern statetype s_mutpath3;
+extern statetype s_mutpath3s;
+extern statetype s_mutpath4;
+
+extern statetype s_mutpain;
+extern statetype s_mutpain1;
+
+extern statetype s_mutgiveup;
+
+extern statetype s_mutshoot1;
+extern statetype s_mutshoot2;
+extern statetype s_mutshoot3;
+extern statetype s_mutshoot4;
+
+extern statetype s_mutchase1;
+extern statetype s_mutchase1s;
+extern statetype s_mutchase2;
+extern statetype s_mutchase3;
+extern statetype s_mutchase3s;
+extern statetype s_mutchase4;
+
+extern statetype s_mutdie1;
+extern statetype s_mutdie2;
+extern statetype s_mutdie3;
+extern statetype s_mutdie4;
+extern statetype s_mutdie5;
+
+statetype s_mutstand = {true,SPR_MUT_S_1,0,(statefunc)T_Stand,NULL,&s_mutstand};
+
+statetype s_mutpath1 = {true,SPR_MUT_W1_1,20,(statefunc)T_Path,NULL,&s_mutpath1s};
+statetype s_mutpath1s = {true,SPR_MUT_W1_1,5,NULL,NULL,&s_mutpath2};
+statetype s_mutpath2 = {true,SPR_MUT_W2_1,15,(statefunc)T_Path,NULL,&s_mutpath3};
+statetype s_mutpath3 = {true,SPR_MUT_W3_1,20,(statefunc)T_Path,NULL,&s_mutpath3s};
+statetype s_mutpath3s = {true,SPR_MUT_W3_1,5,NULL,NULL,&s_mutpath4};
+statetype s_mutpath4 = {true,SPR_MUT_W4_1,15,(statefunc)T_Path,NULL,&s_mutpath1};
+
+statetype s_mutpain = {2,SPR_MUT_PAIN_1,10,NULL,NULL,&s_mutchase1};
+statetype s_mutpain1 = {2,SPR_MUT_PAIN_2,10,NULL,NULL,&s_mutchase1};
+
+statetype s_mutshoot1 = {false,SPR_MUT_SHOOT1,6,NULL,(statefunc)T_Shoot,&s_mutshoot2};
+statetype s_mutshoot2 = {false,SPR_MUT_SHOOT2,20,NULL,NULL,&s_mutshoot3};
+statetype s_mutshoot3 = {false,SPR_MUT_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_mutshoot4};
+statetype s_mutshoot4 = {false,SPR_MUT_SHOOT4,20,NULL,NULL,&s_mutchase1};
+
+statetype s_mutchase1 = {true,SPR_MUT_W1_1,10,(statefunc)T_Chase,NULL,&s_mutchase1s};
+statetype s_mutchase1s = {true,SPR_MUT_W1_1,3,NULL,NULL,&s_mutchase2};
+statetype s_mutchase2 = {true,SPR_MUT_W2_1,8,(statefunc)T_Chase,NULL,&s_mutchase3};
+statetype s_mutchase3 = {true,SPR_MUT_W3_1,10,(statefunc)T_Chase,NULL,&s_mutchase3s};
+statetype s_mutchase3s = {true,SPR_MUT_W3_1,3,NULL,NULL,&s_mutchase4};
+statetype s_mutchase4 = {true,SPR_MUT_W4_1,8,(statefunc)T_Chase,NULL,&s_mutchase1};
+
+statetype s_mutdie1 = {false,SPR_MUT_DIE_1,7,NULL,(statefunc)A_DeathScream,&s_mutdie2};
+statetype s_mutdie2 = {false,SPR_MUT_DIE_2,7,NULL,NULL,&s_mutdie3};
+statetype s_mutdie3 = {false,SPR_MUT_DIE_3,7,NULL,NULL,&s_mutdie4};
+statetype s_mutdie4 = {false,SPR_MUT_DIE_4,7,NULL,NULL,&s_mutdie5};
+statetype s_mutdie5 = {false,SPR_MUT_DEAD,0,NULL,NULL,&s_mutdie5};
+
+
+//
+// SS
+//
+
+extern statetype s_ssstand;
+
+extern statetype s_sspath1;
+extern statetype s_sspath1s;
+extern statetype s_sspath2;
+extern statetype s_sspath3;
+extern statetype s_sspath3s;
+extern statetype s_sspath4;
+
+extern statetype s_sspain;
+extern statetype s_sspain1;
+
+extern statetype s_ssshoot1;
+extern statetype s_ssshoot2;
+extern statetype s_ssshoot3;
+extern statetype s_ssshoot4;
+extern statetype s_ssshoot5;
+extern statetype s_ssshoot6;
+extern statetype s_ssshoot7;
+extern statetype s_ssshoot8;
+extern statetype s_ssshoot9;
+
+extern statetype s_sschase1;
+extern statetype s_sschase1s;
+extern statetype s_sschase2;
+extern statetype s_sschase3;
+extern statetype s_sschase3s;
+extern statetype s_sschase4;
+
+extern statetype s_ssdie1;
+extern statetype s_ssdie2;
+extern statetype s_ssdie3;
+extern statetype s_ssdie4;
+
+statetype s_ssstand = {true,SPR_SS_S_1,0,(statefunc)T_Stand,NULL,&s_ssstand};
+
+statetype s_sspath1 = {true,SPR_SS_W1_1,20,(statefunc)T_Path,NULL,&s_sspath1s};
+statetype s_sspath1s = {true,SPR_SS_W1_1,5,NULL,NULL,&s_sspath2};
+statetype s_sspath2 = {true,SPR_SS_W2_1,15,(statefunc)T_Path,NULL,&s_sspath3};
+statetype s_sspath3 = {true,SPR_SS_W3_1,20,(statefunc)T_Path,NULL,&s_sspath3s};
+statetype s_sspath3s = {true,SPR_SS_W3_1,5,NULL,NULL,&s_sspath4};
+statetype s_sspath4 = {true,SPR_SS_W4_1,15,(statefunc)T_Path,NULL,&s_sspath1};
+
+statetype s_sspain = {2,SPR_SS_PAIN_1,10,NULL,NULL,&s_sschase1};
+statetype s_sspain1 = {2,SPR_SS_PAIN_2,10,NULL,NULL,&s_sschase1};
+
+statetype s_ssshoot1 = {false,SPR_SS_SHOOT1,20,NULL,NULL,&s_ssshoot2};
+statetype s_ssshoot2 = {false,SPR_SS_SHOOT2,20,NULL,(statefunc)T_Shoot,&s_ssshoot3};
+statetype s_ssshoot3 = {false,SPR_SS_SHOOT3,10,NULL,NULL,&s_ssshoot4};
+statetype s_ssshoot4 = {false,SPR_SS_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_ssshoot5};
+statetype s_ssshoot5 = {false,SPR_SS_SHOOT3,10,NULL,NULL,&s_ssshoot6};
+statetype s_ssshoot6 = {false,SPR_SS_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_ssshoot7};
+statetype s_ssshoot7 = {false,SPR_SS_SHOOT3,10,NULL,NULL,&s_ssshoot8};
+statetype s_ssshoot8 = {false,SPR_SS_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_ssshoot9};
+statetype s_ssshoot9 = {false,SPR_SS_SHOOT3,10,NULL,NULL,&s_sschase1};
+
+statetype s_sschase1 = {true,SPR_SS_W1_1,10,(statefunc)T_Chase,NULL,&s_sschase1s};
+statetype s_sschase1s = {true,SPR_SS_W1_1,3,NULL,NULL,&s_sschase2};
+statetype s_sschase2 = {true,SPR_SS_W2_1,8,(statefunc)T_Chase,NULL,&s_sschase3};
+statetype s_sschase3 = {true,SPR_SS_W3_1,10,(statefunc)T_Chase,NULL,&s_sschase3s};
+statetype s_sschase3s = {true,SPR_SS_W3_1,3,NULL,NULL,&s_sschase4};
+statetype s_sschase4 = {true,SPR_SS_W4_1,8,(statefunc)T_Chase,NULL,&s_sschase1};
+
+statetype s_ssdie1 = {false,SPR_SS_DIE_1,15,NULL,(statefunc)A_DeathScream,&s_ssdie2};
+statetype s_ssdie2 = {false,SPR_SS_DIE_2,15,NULL,NULL,&s_ssdie3};
+statetype s_ssdie3 = {false,SPR_SS_DIE_3,15,NULL,NULL,&s_ssdie4};
+statetype s_ssdie4 = {false,SPR_SS_DEAD,0,NULL,NULL,&s_ssdie4};
+
+
+#ifndef SPEAR
+//
+// hans
+//
+extern statetype s_bossstand;
+
+extern statetype s_bosschase1;
+extern statetype s_bosschase1s;
+extern statetype s_bosschase2;
+extern statetype s_bosschase3;
+extern statetype s_bosschase3s;
+extern statetype s_bosschase4;
+
+extern statetype s_bossdie1;
+extern statetype s_bossdie2;
+extern statetype s_bossdie3;
+extern statetype s_bossdie4;
+
+extern statetype s_bossshoot1;
+extern statetype s_bossshoot2;
+extern statetype s_bossshoot3;
+extern statetype s_bossshoot4;
+extern statetype s_bossshoot5;
+extern statetype s_bossshoot6;
+extern statetype s_bossshoot7;
+extern statetype s_bossshoot8;
+
+
+statetype s_bossstand = {false,SPR_BOSS_W1,0,(statefunc)T_Stand,NULL,&s_bossstand};
+
+statetype s_bosschase1 = {false,SPR_BOSS_W1,10,(statefunc)T_Chase,NULL,&s_bosschase1s};
+statetype s_bosschase1s = {false,SPR_BOSS_W1,3,NULL,NULL,&s_bosschase2};
+statetype s_bosschase2 = {false,SPR_BOSS_W2,8,(statefunc)T_Chase,NULL,&s_bosschase3};
+statetype s_bosschase3 = {false,SPR_BOSS_W3,10,(statefunc)T_Chase,NULL,&s_bosschase3s};
+statetype s_bosschase3s = {false,SPR_BOSS_W3,3,NULL,NULL,&s_bosschase4};
+statetype s_bosschase4 = {false,SPR_BOSS_W4,8,(statefunc)T_Chase,NULL,&s_bosschase1};
+
+statetype s_bossdie1 = {false,SPR_BOSS_DIE1,15,NULL,(statefunc)A_DeathScream,&s_bossdie2};
+statetype s_bossdie2 = {false,SPR_BOSS_DIE2,15,NULL,NULL,&s_bossdie3};
+statetype s_bossdie3 = {false,SPR_BOSS_DIE3,15,NULL,NULL,&s_bossdie4};
+statetype s_bossdie4 = {false,SPR_BOSS_DEAD,0,NULL,NULL,&s_bossdie4};
+
+statetype s_bossshoot1 = {false,SPR_BOSS_SHOOT1,30,NULL,NULL,&s_bossshoot2};
+statetype s_bossshoot2 = {false,SPR_BOSS_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_bossshoot3};
+statetype s_bossshoot3 = {false,SPR_BOSS_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_bossshoot4};
+statetype s_bossshoot4 = {false,SPR_BOSS_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_bossshoot5};
+statetype s_bossshoot5 = {false,SPR_BOSS_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_bossshoot6};
+statetype s_bossshoot6 = {false,SPR_BOSS_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_bossshoot7};
+statetype s_bossshoot7 = {false,SPR_BOSS_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_bossshoot8};
+statetype s_bossshoot8 = {false,SPR_BOSS_SHOOT1,10,NULL,NULL,&s_bosschase1};
+
+
+//
+// gretel
+//
+extern statetype s_gretelstand;
+
+extern statetype s_gretelchase1;
+extern statetype s_gretelchase1s;
+extern statetype s_gretelchase2;
+extern statetype s_gretelchase3;
+extern statetype s_gretelchase3s;
+extern statetype s_gretelchase4;
+
+extern statetype s_greteldie1;
+extern statetype s_greteldie2;
+extern statetype s_greteldie3;
+extern statetype s_greteldie4;
+
+extern statetype s_gretelshoot1;
+extern statetype s_gretelshoot2;
+extern statetype s_gretelshoot3;
+extern statetype s_gretelshoot4;
+extern statetype s_gretelshoot5;
+extern statetype s_gretelshoot6;
+extern statetype s_gretelshoot7;
+extern statetype s_gretelshoot8;
+
+
+statetype s_gretelstand = {false,SPR_GRETEL_W1,0,(statefunc)T_Stand,NULL,&s_gretelstand};
+
+statetype s_gretelchase1 = {false,SPR_GRETEL_W1,10,(statefunc)T_Chase,NULL,&s_gretelchase1s};
+statetype s_gretelchase1s = {false,SPR_GRETEL_W1,3,NULL,NULL,&s_gretelchase2};
+statetype s_gretelchase2 = {false,SPR_GRETEL_W2,8,(statefunc)T_Chase,NULL,&s_gretelchase3};
+statetype s_gretelchase3 = {false,SPR_GRETEL_W3,10,(statefunc)T_Chase,NULL,&s_gretelchase3s};
+statetype s_gretelchase3s = {false,SPR_GRETEL_W3,3,NULL,NULL,&s_gretelchase4};
+statetype s_gretelchase4 = {false,SPR_GRETEL_W4,8,(statefunc)T_Chase,NULL,&s_gretelchase1};
+
+statetype s_greteldie1 = {false,SPR_GRETEL_DIE1,15,NULL,(statefunc)A_DeathScream,&s_greteldie2};
+statetype s_greteldie2 = {false,SPR_GRETEL_DIE2,15,NULL,NULL,&s_greteldie3};
+statetype s_greteldie3 = {false,SPR_GRETEL_DIE3,15,NULL,NULL,&s_greteldie4};
+statetype s_greteldie4 = {false,SPR_GRETEL_DEAD,0,NULL,NULL,&s_greteldie4};
+
+statetype s_gretelshoot1 = {false,SPR_GRETEL_SHOOT1,30,NULL,NULL,&s_gretelshoot2};
+statetype s_gretelshoot2 = {false,SPR_GRETEL_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_gretelshoot3};
+statetype s_gretelshoot3 = {false,SPR_GRETEL_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_gretelshoot4};
+statetype s_gretelshoot4 = {false,SPR_GRETEL_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_gretelshoot5};
+statetype s_gretelshoot5 = {false,SPR_GRETEL_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_gretelshoot6};
+statetype s_gretelshoot6 = {false,SPR_GRETEL_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_gretelshoot7};
+statetype s_gretelshoot7 = {false,SPR_GRETEL_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_gretelshoot8};
+statetype s_gretelshoot8 = {false,SPR_GRETEL_SHOOT1,10,NULL,NULL,&s_gretelchase1};
+#endif
+
+
+/*
+===============
+=
+= SpawnStand
+=
+===============
+*/
+
+void SpawnStand (enemy_t which, int tilex, int tiley, int dir)
+{
+ word *map;
+ word tile;
+
+ switch (which)
+ {
+ case en_guard:
+ SpawnNewObj (tilex,tiley,&s_grdstand);
+ newobj->speed = SPDPATROL;
+ if (!loadedgame)
+ gamestate.killtotal++;
+ break;
+
+ case en_officer:
+ SpawnNewObj (tilex,tiley,&s_ofcstand);
+ newobj->speed = SPDPATROL;
+ if (!loadedgame)
+ gamestate.killtotal++;
+ break;
+
+ case en_mutant:
+ SpawnNewObj (tilex,tiley,&s_mutstand);
+ newobj->speed = SPDPATROL;
+ if (!loadedgame)
+ gamestate.killtotal++;
+ break;
+
+ case en_ss:
+ SpawnNewObj (tilex,tiley,&s_ssstand);
+ newobj->speed = SPDPATROL;
+ if (!loadedgame)
+ gamestate.killtotal++;
+ break;
+ }
+
+
+ map = mapsegs[0]+(tiley<<mapshift)+tilex;
+ tile = *map;
+ if (tile == AMBUSHTILE)
+ {
+ tilemap[tilex][tiley] = 0;
+
+ if (*(map+1) >= AREATILE)
+ tile = *(map+1);
+ if (*(map-mapwidth) >= AREATILE)
+ tile = *(map-mapwidth);
+ if (*(map+mapwidth) >= AREATILE)
+ tile = *(map+mapwidth);
+ if ( *(map-1) >= AREATILE)
+ tile = *(map-1);
+
+ *map = tile;
+ newobj->areanumber = tile-AREATILE;
+
+ newobj->flags |= FL_AMBUSH;
+ }
+
+ newobj->obclass = (classtype)(guardobj + which);
+ newobj->hitpoints = starthitpoints[gamestate.difficulty][which];
+ newobj->dir = (dirtype)(dir * 2);
+ newobj->flags |= FL_SHOOTABLE;
+}
+
+
+
+/*
+===============
+=
+= SpawnDeadGuard
+=
+===============
+*/
+
+void SpawnDeadGuard (int tilex, int tiley)
+{
+ SpawnNewObj (tilex,tiley,&s_grddie4);
+ DEMOIF_SDL
+ {
+ newobj->flags |= FL_NONMARK; // walk through moving enemy fix
+ }
+ newobj->obclass = inertobj;
+}
+
+
+
+#ifndef SPEAR
+/*
+===============
+=
+= SpawnBoss
+=
+===============
+*/
+
+void SpawnBoss (int tilex, int tiley)
+{
+ SpawnNewObj (tilex,tiley,&s_bossstand);
+ newobj->speed = SPDPATROL;
+
+ newobj->obclass = bossobj;
+ newobj->hitpoints = starthitpoints[gamestate.difficulty][en_boss];
+ newobj->dir = nodir;
+ newobj->flags |= FL_SHOOTABLE|FL_AMBUSH;
+ if (!loadedgame)
+ gamestate.killtotal++;
+}
+
+/*
+===============
+=
+= SpawnGretel
+=
+===============
+*/
+
+void SpawnGretel (int tilex, int tiley)
+{
+ SpawnNewObj (tilex,tiley,&s_gretelstand);
+ newobj->speed = SPDPATROL;
+
+ newobj->obclass = gretelobj;
+ newobj->hitpoints = starthitpoints[gamestate.difficulty][en_gretel];
+ newobj->dir = nodir;
+ newobj->flags |= FL_SHOOTABLE|FL_AMBUSH;
+ if (!loadedgame)
+ gamestate.killtotal++;
+}
+#endif
+
+/*
+===============
+=
+= SpawnPatrol
+=
+===============
+*/
+
+void SpawnPatrol (enemy_t which, int tilex, int tiley, int dir)
+{
+ switch (which)
+ {
+ case en_guard:
+ SpawnNewObj (tilex,tiley,&s_grdpath1);
+ newobj->speed = SPDPATROL;
+ if (!loadedgame)
+ gamestate.killtotal++;
+ break;
+
+ case en_officer:
+ SpawnNewObj (tilex,tiley,&s_ofcpath1);
+ newobj->speed = SPDPATROL;
+ if (!loadedgame)
+ gamestate.killtotal++;
+ break;
+
+ case en_ss:
+ SpawnNewObj (tilex,tiley,&s_sspath1);
+ newobj->speed = SPDPATROL;
+ if (!loadedgame)
+ gamestate.killtotal++;
+ break;
+
+ case en_mutant:
+ SpawnNewObj (tilex,tiley,&s_mutpath1);
+ newobj->speed = SPDPATROL;
+ if (!loadedgame)
+ gamestate.killtotal++;
+ break;
+
+ case en_dog:
+ SpawnNewObj (tilex,tiley,&s_dogpath1);
+ newobj->speed = SPDDOG;
+ if (!loadedgame)
+ gamestate.killtotal++;
+ break;
+ }
+
+ newobj->obclass = (classtype)(guardobj+which);
+ newobj->dir = (dirtype)(dir*2);
+ newobj->hitpoints = starthitpoints[gamestate.difficulty][which];
+ newobj->distance = TILEGLOBAL;
+ newobj->flags |= FL_SHOOTABLE;
+ newobj->active = ac_yes;
+
+ actorat[newobj->tilex][newobj->tiley] = NULL; // don't use original spot
+
+ switch (dir)
+ {
+ case 0:
+ newobj->tilex++;
+ break;
+ case 1:
+ newobj->tiley--;
+ break;
+ case 2:
+ newobj->tilex--;
+ break;
+ case 3:
+ newobj->tiley++;
+ break;
+ }
+
+ actorat[newobj->tilex][newobj->tiley] = newobj;
+}
+
+
+
+/*
+==================
+=
+= A_DeathScream
+=
+==================
+*/
+
+void A_DeathScream (objtype *ob)
+{
+#ifndef UPLOAD
+#ifndef SPEAR
+ if (mapon==9 && !US_RndT())
+#else
+ if ((mapon==18 || mapon==19) && !US_RndT())
+#endif
+ {
+ switch(ob->obclass)
+ {
+ case mutantobj:
+ case guardobj:
+ case officerobj:
+ case ssobj:
+ case dogobj:
+ PlaySoundLocActor(DEATHSCREAM6SND,ob);
+ return;
+ }
+ }
+#endif
+
+ switch (ob->obclass)
+ {
+ case mutantobj:
+ PlaySoundLocActor(AHHHGSND,ob);
+ break;
+
+ case guardobj:
+ {
+ int sounds[9]={ DEATHSCREAM1SND,
+ DEATHSCREAM2SND,
+ DEATHSCREAM3SND,
+#ifndef APOGEE_1_0
+ DEATHSCREAM4SND,
+ DEATHSCREAM5SND,
+ DEATHSCREAM7SND,
+ DEATHSCREAM8SND,
+ DEATHSCREAM9SND
+#endif
+ };
+
+#ifndef UPLOAD
+ PlaySoundLocActor(sounds[US_RndT()%8],ob);
+#else
+ PlaySoundLocActor(sounds[US_RndT()%2],ob);
+#endif
+ break;
+ }
+ case officerobj:
+ PlaySoundLocActor(NEINSOVASSND,ob);
+ break;
+ case ssobj:
+ PlaySoundLocActor(LEBENSND,ob); // JAB
+ break;
+ case dogobj:
+ PlaySoundLocActor(DOGDEATHSND,ob); // JAB
+ break;
+#ifndef SPEAR
+ case bossobj:
+ SD_PlaySound(MUTTISND); // JAB
+ break;
+ case schabbobj:
+ SD_PlaySound(MEINGOTTSND);
+ break;
+ case fakeobj:
+ SD_PlaySound(HITLERHASND);
+ break;
+ case mechahitlerobj:
+ SD_PlaySound(SCHEISTSND);
+ break;
+ case realhitlerobj:
+ SD_PlaySound(EVASND);
+ break;
+#ifndef APOGEE_1_0
+ case gretelobj:
+ SD_PlaySound(MEINSND);
+ break;
+ case giftobj:
+ SD_PlaySound(DONNERSND);
+ break;
+ case fatobj:
+ SD_PlaySound(ROSESND);
+ break;
+#endif
+#else
+ case spectreobj:
+ SD_PlaySound(GHOSTFADESND);
+ break;
+ case angelobj:
+ SD_PlaySound(ANGELDEATHSND);
+ break;
+ case transobj:
+ SD_PlaySound(TRANSDEATHSND);
+ break;
+ case uberobj:
+ SD_PlaySound(UBERDEATHSND);
+ break;
+ case willobj:
+ SD_PlaySound(WILHELMDEATHSND);
+ break;
+ case deathobj:
+ SD_PlaySound(KNIGHTDEATHSND);
+ break;
+#endif
+ }
+}
+
+
+/*
+=============================================================================
+
+ SPEAR ACTORS
+
+=============================================================================
+*/
+
+#ifdef SPEAR
+
+void T_Launch (objtype *ob);
+void T_Will (objtype *ob);
+
+extern statetype s_angelshoot1;
+extern statetype s_deathshoot1;
+extern statetype s_spark1;
+
+//
+// trans
+//
+extern statetype s_transstand;
+
+extern statetype s_transchase1;
+extern statetype s_transchase1s;
+extern statetype s_transchase2;
+extern statetype s_transchase3;
+extern statetype s_transchase3s;
+extern statetype s_transchase4;
+
+extern statetype s_transdie0;
+extern statetype s_transdie01;
+extern statetype s_transdie1;
+extern statetype s_transdie2;
+extern statetype s_transdie3;
+extern statetype s_transdie4;
+
+extern statetype s_transshoot1;
+extern statetype s_transshoot2;
+extern statetype s_transshoot3;
+extern statetype s_transshoot4;
+extern statetype s_transshoot5;
+extern statetype s_transshoot6;
+extern statetype s_transshoot7;
+extern statetype s_transshoot8;
+
+
+statetype s_transstand = {false,SPR_TRANS_W1,0,(statefunc)T_Stand,NULL,&s_transstand};
+
+statetype s_transchase1 = {false,SPR_TRANS_W1,10,(statefunc)T_Chase,NULL,&s_transchase1s};
+statetype s_transchase1s = {false,SPR_TRANS_W1,3,NULL,NULL,&s_transchase2};
+statetype s_transchase2 = {false,SPR_TRANS_W2,8,(statefunc)T_Chase,NULL,&s_transchase3};
+statetype s_transchase3 = {false,SPR_TRANS_W3,10,(statefunc)T_Chase,NULL,&s_transchase3s};
+statetype s_transchase3s = {false,SPR_TRANS_W3,3,NULL,NULL,&s_transchase4};
+statetype s_transchase4 = {false,SPR_TRANS_W4,8,(statefunc)T_Chase,NULL,&s_transchase1};
+
+statetype s_transdie0 = {false,SPR_TRANS_W1,1,NULL,(statefunc)A_DeathScream,&s_transdie01};
+statetype s_transdie01 = {false,SPR_TRANS_W1,1,NULL,NULL,&s_transdie1};
+statetype s_transdie1 = {false,SPR_TRANS_DIE1,15,NULL,NULL,&s_transdie2};
+statetype s_transdie2 = {false,SPR_TRANS_DIE2,15,NULL,NULL,&s_transdie3};
+statetype s_transdie3 = {false,SPR_TRANS_DIE3,15,NULL,NULL,&s_transdie4};
+statetype s_transdie4 = {false,SPR_TRANS_DEAD,0,NULL,NULL,&s_transdie4};
+
+statetype s_transshoot1 = {false,SPR_TRANS_SHOOT1,30,NULL,NULL,&s_transshoot2};
+statetype s_transshoot2 = {false,SPR_TRANS_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_transshoot3};
+statetype s_transshoot3 = {false,SPR_TRANS_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_transshoot4};
+statetype s_transshoot4 = {false,SPR_TRANS_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_transshoot5};
+statetype s_transshoot5 = {false,SPR_TRANS_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_transshoot6};
+statetype s_transshoot6 = {false,SPR_TRANS_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_transshoot7};
+statetype s_transshoot7 = {false,SPR_TRANS_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_transshoot8};
+statetype s_transshoot8 = {false,SPR_TRANS_SHOOT1,10,NULL,NULL,&s_transchase1};
+
+
+/*
+===============
+=
+= SpawnTrans
+=
+===============
+*/
+
+void SpawnTrans (int tilex, int tiley)
+{
+ // word *map;
+ // word tile;
+
+ if (SoundBlasterPresent && DigiMode != sds_Off)
+ s_transdie01.tictime = 105;
+
+ SpawnNewObj (tilex,tiley,&s_transstand);
+ newobj->obclass = transobj;
+ newobj->hitpoints = starthitpoints[gamestate.difficulty][en_trans];
+ newobj->flags |= FL_SHOOTABLE|FL_AMBUSH;
+ if (!loadedgame)
+ gamestate.killtotal++;
+}
+
+
+//
+// uber
+//
+void T_UShoot (objtype *ob);
+
+extern statetype s_uberstand;
+
+extern statetype s_uberchase1;
+extern statetype s_uberchase1s;
+extern statetype s_uberchase2;
+extern statetype s_uberchase3;
+extern statetype s_uberchase3s;
+extern statetype s_uberchase4;
+
+extern statetype s_uberdie0;
+extern statetype s_uberdie01;
+extern statetype s_uberdie1;
+extern statetype s_uberdie2;
+extern statetype s_uberdie3;
+extern statetype s_uberdie4;
+extern statetype s_uberdie5;
+
+extern statetype s_ubershoot1;
+extern statetype s_ubershoot2;
+extern statetype s_ubershoot3;
+extern statetype s_ubershoot4;
+extern statetype s_ubershoot5;
+extern statetype s_ubershoot6;
+extern statetype s_ubershoot7;
+
+
+statetype s_uberstand = {false,SPR_UBER_W1,0,(statefunc)T_Stand,NULL,&s_uberstand};
+
+statetype s_uberchase1 = {false,SPR_UBER_W1,10,(statefunc)T_Chase,NULL,&s_uberchase1s};
+statetype s_uberchase1s = {false,SPR_UBER_W1,3,NULL,NULL,&s_uberchase2};
+statetype s_uberchase2 = {false,SPR_UBER_W2,8,(statefunc)T_Chase,NULL,&s_uberchase3};
+statetype s_uberchase3 = {false,SPR_UBER_W3,10,(statefunc)T_Chase,NULL,&s_uberchase3s};
+statetype s_uberchase3s = {false,SPR_UBER_W3,3,NULL,NULL,&s_uberchase4};
+statetype s_uberchase4 = {false,SPR_UBER_W4,8,(statefunc)T_Chase,NULL,&s_uberchase1};
+
+statetype s_uberdie0 = {false,SPR_UBER_W1,1,NULL,(statefunc)A_DeathScream,&s_uberdie01};
+statetype s_uberdie01 = {false,SPR_UBER_W1,1,NULL,NULL,&s_uberdie1};
+statetype s_uberdie1 = {false,SPR_UBER_DIE1,15,NULL,NULL,&s_uberdie2};
+statetype s_uberdie2 = {false,SPR_UBER_DIE2,15,NULL,NULL,&s_uberdie3};
+statetype s_uberdie3 = {false,SPR_UBER_DIE3,15,NULL,NULL,&s_uberdie4};
+statetype s_uberdie4 = {false,SPR_UBER_DIE4,15,NULL,NULL,&s_uberdie5};
+statetype s_uberdie5 = {false,SPR_UBER_DEAD,0,NULL,NULL,&s_uberdie5};
+
+statetype s_ubershoot1 = {false,SPR_UBER_SHOOT1,30,NULL,NULL,&s_ubershoot2};
+statetype s_ubershoot2 = {false,SPR_UBER_SHOOT2,12,NULL,(statefunc)T_UShoot,&s_ubershoot3};
+statetype s_ubershoot3 = {false,SPR_UBER_SHOOT3,12,NULL,(statefunc)T_UShoot,&s_ubershoot4};
+statetype s_ubershoot4 = {false,SPR_UBER_SHOOT4,12,NULL,(statefunc)T_UShoot,&s_ubershoot5};
+statetype s_ubershoot5 = {false,SPR_UBER_SHOOT3,12,NULL,(statefunc)T_UShoot,&s_ubershoot6};
+statetype s_ubershoot6 = {false,SPR_UBER_SHOOT2,12,NULL,(statefunc)T_UShoot,&s_ubershoot7};
+statetype s_ubershoot7 = {false,SPR_UBER_SHOOT1,12,NULL,NULL,&s_uberchase1};
+
+
+/*
+===============
+=
+= SpawnUber
+=
+===============
+*/
+
+void SpawnUber (int tilex, int tiley)
+{
+ if (SoundBlasterPresent && DigiMode != sds_Off)
+ s_uberdie01.tictime = 70;
+
+ SpawnNewObj (tilex,tiley,&s_uberstand);
+ newobj->obclass = uberobj;
+ newobj->hitpoints = starthitpoints[gamestate.difficulty][en_uber];
+ newobj->flags |= FL_SHOOTABLE|FL_AMBUSH;
+ if (!loadedgame)
+ gamestate.killtotal++;
+}
+
+
+/*
+===============
+=
+= T_UShoot
+=
+===============
+*/
+
+void T_UShoot (objtype *ob)
+{
+ int dx,dy,dist;
+
+ T_Shoot (ob);
+
+ dx = abs(ob->tilex - player->tilex);
+ dy = abs(ob->tiley - player->tiley);
+ dist = dx>dy ? dx : dy;
+ if (dist <= 1)
+ TakeDamage (10,ob);
+}
+
+
+//
+// will
+//
+extern statetype s_willstand;
+
+extern statetype s_willchase1;
+extern statetype s_willchase1s;
+extern statetype s_willchase2;
+extern statetype s_willchase3;
+extern statetype s_willchase3s;
+extern statetype s_willchase4;
+
+extern statetype s_willdie1;
+extern statetype s_willdie2;
+extern statetype s_willdie3;
+extern statetype s_willdie4;
+extern statetype s_willdie5;
+extern statetype s_willdie6;
+
+extern statetype s_willshoot1;
+extern statetype s_willshoot2;
+extern statetype s_willshoot3;
+extern statetype s_willshoot4;
+extern statetype s_willshoot5;
+extern statetype s_willshoot6;
+
+
+statetype s_willstand = {false,SPR_WILL_W1,0,(statefunc)T_Stand,NULL,&s_willstand};
+
+statetype s_willchase1 = {false,SPR_WILL_W1,10,(statefunc)T_Will,NULL,&s_willchase1s};
+statetype s_willchase1s = {false,SPR_WILL_W1,3,NULL,NULL,&s_willchase2};
+statetype s_willchase2 = {false,SPR_WILL_W2,8,(statefunc)T_Will,NULL,&s_willchase3};
+statetype s_willchase3 = {false,SPR_WILL_W3,10,(statefunc)T_Will,NULL,&s_willchase3s};
+statetype s_willchase3s = {false,SPR_WILL_W3,3,NULL,NULL,&s_willchase4};
+statetype s_willchase4 = {false,SPR_WILL_W4,8,(statefunc)T_Will,NULL,&s_willchase1};
+
+statetype s_willdeathcam = {false,SPR_WILL_W1,1,NULL,NULL,&s_willdie1};
+
+statetype s_willdie1 = {false,SPR_WILL_W1,1,NULL,(statefunc)A_DeathScream,&s_willdie2};
+statetype s_willdie2 = {false,SPR_WILL_W1,10,NULL,NULL,&s_willdie3};
+statetype s_willdie3 = {false,SPR_WILL_DIE1,10,NULL,NULL,&s_willdie4};
+statetype s_willdie4 = {false,SPR_WILL_DIE2,10,NULL,NULL,&s_willdie5};
+statetype s_willdie5 = {false,SPR_WILL_DIE3,10,NULL,NULL,&s_willdie6};
+statetype s_willdie6 = {false,SPR_WILL_DEAD,20,NULL,NULL,&s_willdie6};
+
+statetype s_willshoot1 = {false,SPR_WILL_SHOOT1,30,NULL,NULL,&s_willshoot2};
+statetype s_willshoot2 = {false,SPR_WILL_SHOOT2,10,NULL,(statefunc)T_Launch,&s_willshoot3};
+statetype s_willshoot3 = {false,SPR_WILL_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_willshoot4};
+statetype s_willshoot4 = {false,SPR_WILL_SHOOT4,10,NULL,(statefunc)T_Shoot,&s_willshoot5};
+statetype s_willshoot5 = {false,SPR_WILL_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_willshoot6};
+statetype s_willshoot6 = {false,SPR_WILL_SHOOT4,10,NULL,(statefunc)T_Shoot,&s_willchase1};
+
+
+/*
+===============
+=
+= SpawnWill
+=
+===============
+*/
+
+void SpawnWill (int tilex, int tiley)
+{
+ if (SoundBlasterPresent && DigiMode != sds_Off)
+ s_willdie2.tictime = 70;
+
+ SpawnNewObj (tilex,tiley,&s_willstand);
+ newobj->obclass = willobj;
+ newobj->hitpoints = starthitpoints[gamestate.difficulty][en_will];
+ newobj->flags |= FL_SHOOTABLE|FL_AMBUSH;
+ if (!loadedgame)
+ gamestate.killtotal++;
+}
+
+
+/*
+================
+=
+= T_Will
+=
+================
+*/
+
+void T_Will (objtype *ob)
+{
+ int32_t move;
+ int dx,dy,dist;
+ boolean dodge;
+
+ dodge = false;
+ dx = abs(ob->tilex - player->tilex);
+ dy = abs(ob->tiley - player->tiley);
+ dist = dx>dy ? dx : dy;
+
+ if (CheckLine(ob)) // got a shot at player?
+ {
+ ob->hidden = false;
+ if ( (unsigned) US_RndT() < (tics<<3) && objfreelist)
+ {
+ //
+ // go into attack frame
+ //
+ if (ob->obclass == willobj)
+ NewState (ob,&s_willshoot1);
+ else if (ob->obclass == angelobj)
+ NewState (ob,&s_angelshoot1);
+ else
+ NewState (ob,&s_deathshoot1);
+ return;
+ }
+ dodge = true;
+ }
+ else
+ ob->hidden = true;
+
+ if (ob->dir == nodir)
+ {
+ if (dodge)
+ SelectDodgeDir (ob);
+ else
+ SelectChaseDir (ob);
+ if (ob->dir == nodir)
+ return; // object is blocked in
+ }
+
+ move = ob->speed*tics;
+
+ while (move)
+ {
+ if (ob->distance < 0)
+ {
+ //
+ // waiting for a door to open
+ //
+ OpenDoor (-ob->distance-1);
+ if (doorobjlist[-ob->distance-1].action != dr_open)
+ return;
+ ob->distance = TILEGLOBAL; // go ahead, the door is now open
+ TryWalk(ob);
+ }
+
+ if (move < ob->distance)
+ {
+ MoveObj (ob,move);
+ break;
+ }
+
+ //
+ // reached goal tile, so select another one
+ //
+
+ //
+ // fix position to account for round off during moving
+ //
+ ob->x = ((int32_t)ob->tilex<<TILESHIFT)+TILEGLOBAL/2;
+ ob->y = ((int32_t)ob->tiley<<TILESHIFT)+TILEGLOBAL/2;
+
+ move -= ob->distance;
+
+ if (dist <4)
+ SelectRunDir (ob);
+ else if (dodge)
+ SelectDodgeDir (ob);
+ else
+ SelectChaseDir (ob);
+
+ if (ob->dir == nodir)
+ return; // object is blocked in
+ }
+
+}
+
+
+//
+// death
+//
+extern statetype s_deathstand;
+
+extern statetype s_deathchase1;
+extern statetype s_deathchase1s;
+extern statetype s_deathchase2;
+extern statetype s_deathchase3;
+extern statetype s_deathchase3s;
+extern statetype s_deathchase4;
+
+extern statetype s_deathdie1;
+extern statetype s_deathdie2;
+extern statetype s_deathdie3;
+extern statetype s_deathdie4;
+extern statetype s_deathdie5;
+extern statetype s_deathdie6;
+extern statetype s_deathdie7;
+extern statetype s_deathdie8;
+extern statetype s_deathdie9;
+
+extern statetype s_deathshoot1;
+extern statetype s_deathshoot2;
+extern statetype s_deathshoot3;
+extern statetype s_deathshoot4;
+extern statetype s_deathshoot5;
+
+
+statetype s_deathstand = {false,SPR_DEATH_W1,0,(statefunc)T_Stand,NULL,&s_deathstand};
+
+statetype s_deathchase1 = {false,SPR_DEATH_W1,10,(statefunc)T_Will,NULL,&s_deathchase1s};
+statetype s_deathchase1s = {false,SPR_DEATH_W1,3,NULL,NULL,&s_deathchase2};
+statetype s_deathchase2 = {false,SPR_DEATH_W2,8,(statefunc)T_Will,NULL,&s_deathchase3};
+statetype s_deathchase3 = {false,SPR_DEATH_W3,10,(statefunc)T_Will,NULL,&s_deathchase3s};
+statetype s_deathchase3s = {false,SPR_DEATH_W3,3,NULL,NULL,&s_deathchase4};
+statetype s_deathchase4 = {false,SPR_DEATH_W4,8,(statefunc)T_Will,NULL,&s_deathchase1};
+
+statetype s_deathdeathcam = {false,SPR_DEATH_W1,1,NULL,NULL,&s_deathdie1};
+
+statetype s_deathdie1 = {false,SPR_DEATH_W1,1,NULL,(statefunc)A_DeathScream,&s_deathdie2};
+statetype s_deathdie2 = {false,SPR_DEATH_W1,10,NULL,NULL,&s_deathdie3};
+statetype s_deathdie3 = {false,SPR_DEATH_DIE1,10,NULL,NULL,&s_deathdie4};
+statetype s_deathdie4 = {false,SPR_DEATH_DIE2,10,NULL,NULL,&s_deathdie5};
+statetype s_deathdie5 = {false,SPR_DEATH_DIE3,10,NULL,NULL,&s_deathdie6};
+statetype s_deathdie6 = {false,SPR_DEATH_DIE4,10,NULL,NULL,&s_deathdie7};
+statetype s_deathdie7 = {false,SPR_DEATH_DIE5,10,NULL,NULL,&s_deathdie8};
+statetype s_deathdie8 = {false,SPR_DEATH_DIE6,10,NULL,NULL,&s_deathdie9};
+statetype s_deathdie9 = {false,SPR_DEATH_DEAD,0,NULL,NULL,&s_deathdie9};
+
+statetype s_deathshoot1 = {false,SPR_DEATH_SHOOT1,30,NULL,NULL,&s_deathshoot2};
+statetype s_deathshoot2 = {false,SPR_DEATH_SHOOT2,10,NULL,(statefunc)T_Launch,&s_deathshoot3};
+statetype s_deathshoot3 = {false,SPR_DEATH_SHOOT4,10,NULL,(statefunc)T_Shoot,&s_deathshoot4};
+statetype s_deathshoot4 = {false,SPR_DEATH_SHOOT3,10,NULL,(statefunc)T_Launch,&s_deathshoot5};
+statetype s_deathshoot5 = {false,SPR_DEATH_SHOOT4,10,NULL,(statefunc)T_Shoot,&s_deathchase1};
+
+
+/*
+===============
+=
+= SpawnDeath
+=
+===============
+*/
+
+void SpawnDeath (int tilex, int tiley)
+{
+ if (SoundBlasterPresent && DigiMode != sds_Off)
+ s_deathdie2.tictime = 105;
+
+ SpawnNewObj (tilex,tiley,&s_deathstand);
+ newobj->obclass = deathobj;
+ newobj->hitpoints = starthitpoints[gamestate.difficulty][en_death];
+ newobj->flags |= FL_SHOOTABLE|FL_AMBUSH;
+ if (!loadedgame)
+ gamestate.killtotal++;
+}
+
+/*
+===============
+=
+= T_Launch
+=
+===============
+*/
+
+void T_Launch (objtype *ob)
+{
+ int32_t deltax,deltay;
+ float angle;
+ int iangle;
+
+ deltax = player->x - ob->x;
+ deltay = ob->y - player->y;
+ angle = (float) atan2 ((float) deltay, (float) deltax);
+ if (angle<0)
+ angle = (float) (M_PI*2+angle);
+ iangle = (int) (angle/(M_PI*2)*ANGLES);
+ if (ob->obclass == deathobj)
+ {
+ T_Shoot (ob);
+ if (ob->state == &s_deathshoot2)
+ {
+ iangle-=4;
+ if (iangle<0)
+ iangle+=ANGLES;
+ }
+ else
+ {
+ iangle+=4;
+ if (iangle>=ANGLES)
+ iangle-=ANGLES;
+ }
+ }
+
+ GetNewActor ();
+ newobj->state = &s_rocket;
+ newobj->ticcount = 1;
+
+ newobj->tilex = ob->tilex;
+ newobj->tiley = ob->tiley;
+ newobj->x = ob->x;
+ newobj->y = ob->y;
+ newobj->obclass = rocketobj;
+ switch(ob->obclass)
+ {
+ case deathobj:
+ newobj->state = &s_hrocket;
+ newobj->obclass = hrocketobj;
+ PlaySoundLocActor (KNIGHTMISSILESND,newobj);
+ break;
+ case angelobj:
+ newobj->state = &s_spark1;
+ newobj->obclass = sparkobj;
+ PlaySoundLocActor (ANGELFIRESND,newobj);
+ break;
+ default:
+ PlaySoundLocActor (MISSILEFIRESND,newobj);
+ }
+
+ newobj->dir = nodir;
+ newobj->angle = iangle;
+ newobj->speed = 0x2000l;
+ newobj->flags = FL_NEVERMARK;
+ newobj->active = ac_yes;
+}
+
+
+
+//
+// angel
+//
+void A_Relaunch (objtype *ob);
+void A_Victory (objtype *ob);
+void A_StartAttack (objtype *ob);
+void A_Breathing (objtype *ob);
+
+extern statetype s_angelstand;
+
+extern statetype s_angelchase1;
+extern statetype s_angelchase1s;
+extern statetype s_angelchase2;
+extern statetype s_angelchase3;
+extern statetype s_angelchase3s;
+extern statetype s_angelchase4;
+
+extern statetype s_angeldie1;
+extern statetype s_angeldie11;
+extern statetype s_angeldie2;
+extern statetype s_angeldie3;
+extern statetype s_angeldie4;
+extern statetype s_angeldie5;
+extern statetype s_angeldie6;
+extern statetype s_angeldie7;
+extern statetype s_angeldie8;
+extern statetype s_angeldie9;
+
+extern statetype s_angelshoot1;
+extern statetype s_angelshoot2;
+extern statetype s_angelshoot3;
+extern statetype s_angelshoot4;
+extern statetype s_angelshoot5;
+extern statetype s_angelshoot6;
+
+extern statetype s_angeltired;
+extern statetype s_angeltired2;
+extern statetype s_angeltired3;
+extern statetype s_angeltired4;
+extern statetype s_angeltired5;
+extern statetype s_angeltired6;
+extern statetype s_angeltired7;
+
+extern statetype s_spark1;
+extern statetype s_spark2;
+extern statetype s_spark3;
+extern statetype s_spark4;
+
+
+statetype s_angelstand = {false,SPR_ANGEL_W1,0,(statefunc)T_Stand,NULL,&s_angelstand};
+
+statetype s_angelchase1 = {false,SPR_ANGEL_W1,10,(statefunc)T_Will,NULL,&s_angelchase1s};
+statetype s_angelchase1s = {false,SPR_ANGEL_W1,3,NULL,NULL,&s_angelchase2};
+statetype s_angelchase2 = {false,SPR_ANGEL_W2,8,(statefunc)T_Will,NULL,&s_angelchase3};
+statetype s_angelchase3 = {false,SPR_ANGEL_W3,10,(statefunc)T_Will,NULL,&s_angelchase3s};
+statetype s_angelchase3s = {false,SPR_ANGEL_W3,3,NULL,NULL,&s_angelchase4};
+statetype s_angelchase4 = {false,SPR_ANGEL_W4,8,(statefunc)T_Will,NULL,&s_angelchase1};
+
+statetype s_angeldie1 = {false,SPR_ANGEL_W1,1,NULL,(statefunc)A_DeathScream,&s_angeldie11};
+statetype s_angeldie11 = {false,SPR_ANGEL_W1,1,NULL,NULL,&s_angeldie2};
+statetype s_angeldie2 = {false,SPR_ANGEL_DIE1,10,NULL,(statefunc)A_Slurpie,&s_angeldie3};
+statetype s_angeldie3 = {false,SPR_ANGEL_DIE2,10,NULL,NULL,&s_angeldie4};
+statetype s_angeldie4 = {false,SPR_ANGEL_DIE3,10,NULL,NULL,&s_angeldie5};
+statetype s_angeldie5 = {false,SPR_ANGEL_DIE4,10,NULL,NULL,&s_angeldie6};
+statetype s_angeldie6 = {false,SPR_ANGEL_DIE5,10,NULL,NULL,&s_angeldie7};
+statetype s_angeldie7 = {false,SPR_ANGEL_DIE6,10,NULL,NULL,&s_angeldie8};
+statetype s_angeldie8 = {false,SPR_ANGEL_DIE7,10,NULL,NULL,&s_angeldie9};
+statetype s_angeldie9 = {false,SPR_ANGEL_DEAD,130,NULL,(statefunc)A_Victory,&s_angeldie9};
+
+statetype s_angelshoot1 = {false,SPR_ANGEL_SHOOT1,10,NULL,(statefunc)A_StartAttack,&s_angelshoot2};
+statetype s_angelshoot2 = {false,SPR_ANGEL_SHOOT2,20,NULL,(statefunc)T_Launch,&s_angelshoot3};
+statetype s_angelshoot3 = {false,SPR_ANGEL_SHOOT1,10,NULL,(statefunc)A_Relaunch,&s_angelshoot2};
+
+statetype s_angeltired = {false,SPR_ANGEL_TIRED1,40,NULL,(statefunc)A_Breathing,&s_angeltired2};
+statetype s_angeltired2 = {false,SPR_ANGEL_TIRED2,40,NULL,NULL,&s_angeltired3};
+statetype s_angeltired3 = {false,SPR_ANGEL_TIRED1,40,NULL,(statefunc)A_Breathing,&s_angeltired4};
+statetype s_angeltired4 = {false,SPR_ANGEL_TIRED2,40,NULL,NULL,&s_angeltired5};
+statetype s_angeltired5 = {false,SPR_ANGEL_TIRED1,40,NULL,(statefunc)A_Breathing,&s_angeltired6};
+statetype s_angeltired6 = {false,SPR_ANGEL_TIRED2,40,NULL,NULL,&s_angeltired7};
+statetype s_angeltired7 = {false,SPR_ANGEL_TIRED1,40,NULL,(statefunc)A_Breathing,&s_angelchase1};
+
+statetype s_spark1 = {false,SPR_SPARK1,6,(statefunc)T_Projectile,NULL,&s_spark2};
+statetype s_spark2 = {false,SPR_SPARK2,6,(statefunc)T_Projectile,NULL,&s_spark3};
+statetype s_spark3 = {false,SPR_SPARK3,6,(statefunc)T_Projectile,NULL,&s_spark4};
+statetype s_spark4 = {false,SPR_SPARK4,6,(statefunc)T_Projectile,NULL,&s_spark1};
+
+
+void A_Slurpie (objtype *)
+{
+ SD_PlaySound(SLURPIESND);
+}
+
+void A_Breathing (objtype *)
+{
+ SD_PlaySound(ANGELTIREDSND);
+}
+
+/*
+===============
+=
+= SpawnAngel
+=
+===============
+*/
+
+void SpawnAngel (int tilex, int tiley)
+{
+ if (SoundBlasterPresent && DigiMode != sds_Off)
+ s_angeldie11.tictime = 105;
+
+ SpawnNewObj (tilex,tiley,&s_angelstand);
+ newobj->obclass = angelobj;
+ newobj->hitpoints = starthitpoints[gamestate.difficulty][en_angel];
+ newobj->flags |= FL_SHOOTABLE|FL_AMBUSH;
+ if (!loadedgame)
+ gamestate.killtotal++;
+}
+
+
+/*
+=================
+=
+= A_Victory
+=
+=================
+*/
+
+void A_Victory (objtype *)
+{
+ playstate = ex_victorious;
+}
+
+
+/*
+=================
+=
+= A_StartAttack
+=
+=================
+*/
+
+void A_StartAttack (objtype *ob)
+{
+ ob->temp1 = 0;
+}
+
+
+/*
+=================
+=
+= A_Relaunch
+=
+=================
+*/
+
+void A_Relaunch (objtype *ob)
+{
+ if (++ob->temp1 == 3)
+ {
+ NewState (ob,&s_angeltired);
+ return;
+ }
+
+ if (US_RndT()&1)
+ {
+ NewState (ob,&s_angelchase1);
+ return;
+ }
+}
+
+
+
+
+//
+// spectre
+//
+void T_SpectreWait (objtype *ob);
+void A_Dormant (objtype *ob);
+
+extern statetype s_spectrewait1;
+extern statetype s_spectrewait2;
+extern statetype s_spectrewait3;
+extern statetype s_spectrewait4;
+
+extern statetype s_spectrechase1;
+extern statetype s_spectrechase2;
+extern statetype s_spectrechase3;
+extern statetype s_spectrechase4;
+
+extern statetype s_spectredie1;
+extern statetype s_spectredie2;
+extern statetype s_spectredie3;
+extern statetype s_spectredie4;
+
+extern statetype s_spectrewake;
+
+statetype s_spectrewait1 = {false,SPR_SPECTRE_W1,10,(statefunc)T_Stand,NULL,&s_spectrewait2};
+statetype s_spectrewait2 = {false,SPR_SPECTRE_W2,10,(statefunc)T_Stand,NULL,&s_spectrewait3};
+statetype s_spectrewait3 = {false,SPR_SPECTRE_W3,10,(statefunc)T_Stand,NULL,&s_spectrewait4};
+statetype s_spectrewait4 = {false,SPR_SPECTRE_W4,10,(statefunc)T_Stand,NULL,&s_spectrewait1};
+
+statetype s_spectrechase1 = {false,SPR_SPECTRE_W1,10,(statefunc)T_Ghosts,NULL,&s_spectrechase2};
+statetype s_spectrechase2 = {false,SPR_SPECTRE_W2,10,(statefunc)T_Ghosts,NULL,&s_spectrechase3};
+statetype s_spectrechase3 = {false,SPR_SPECTRE_W3,10,(statefunc)T_Ghosts,NULL,&s_spectrechase4};
+statetype s_spectrechase4 = {false,SPR_SPECTRE_W4,10,(statefunc)T_Ghosts,NULL,&s_spectrechase1};
+
+statetype s_spectredie1 = {false,SPR_SPECTRE_F1,10,NULL,NULL,&s_spectredie2};
+statetype s_spectredie2 = {false,SPR_SPECTRE_F2,10,NULL,NULL,&s_spectredie3};
+statetype s_spectredie3 = {false,SPR_SPECTRE_F3,10,NULL,NULL,&s_spectredie4};
+statetype s_spectredie4 = {false,SPR_SPECTRE_F4,300,NULL,NULL,&s_spectrewake};
+statetype s_spectrewake = {false,SPR_SPECTRE_F4,10,NULL,(statefunc)A_Dormant,&s_spectrewake};
+
+/*
+===============
+=
+= SpawnSpectre
+=
+===============
+*/
+
+void SpawnSpectre (int tilex, int tiley)
+{
+ SpawnNewObj (tilex,tiley,&s_spectrewait1);
+ newobj->obclass = spectreobj;
+ newobj->hitpoints = starthitpoints[gamestate.difficulty][en_spectre];
+ newobj->flags |= FL_SHOOTABLE|FL_AMBUSH|FL_BONUS; // |FL_NEVERMARK|FL_NONMARK;
+ if (!loadedgame)
+ gamestate.killtotal++;
+}
+
+
+/*
+===============
+=
+= A_Dormant
+=
+===============
+*/
+
+void A_Dormant (objtype *ob)
+{
+ int32_t deltax,deltay;
+ int xl,xh,yl,yh;
+ int x,y;
+ uintptr_t tile;
+
+ deltax = ob->x - player->x;
+ if (deltax < -MINACTORDIST || deltax > MINACTORDIST)
+ goto moveok;
+ deltay = ob->y - player->y;
+ if (deltay < -MINACTORDIST || deltay > MINACTORDIST)
+ goto moveok;
+
+ return;
+moveok:
+
+ xl = (ob->x-MINDIST) >> TILESHIFT;
+ xh = (ob->x+MINDIST) >> TILESHIFT;
+ yl = (ob->y-MINDIST) >> TILESHIFT;
+ yh = (ob->y+MINDIST) >> TILESHIFT;
+
+ for (y=yl ; y<=yh ; y++)
+ for (x=xl ; x<=xh ; x++)
+ {
+ tile = (uintptr_t)actorat[x][y];
+ if (!tile)
+ continue;
+ if (!ISPOINTER(tile))
+ return;
+ if (((objtype *)tile)->flags&FL_SHOOTABLE)
+ return;
+ }
+
+ ob->flags |= FL_AMBUSH | FL_SHOOTABLE;
+ ob->flags &= ~FL_ATTACKMODE;
+ ob->flags &= ~FL_NONMARK; // stuck bugfix 1
+ ob->dir = nodir;
+ NewState (ob,&s_spectrewait1);
+}
+
+
+#endif
+
+/*
+=============================================================================
+
+ SCHABBS / GIFT / FAT
+
+=============================================================================
+*/
+
+#ifndef SPEAR
+/*
+===============
+=
+= SpawnGhosts
+=
+===============
+*/
+
+void SpawnGhosts (int which, int tilex, int tiley)
+{
+ switch(which)
+ {
+ case en_blinky:
+ SpawnNewObj (tilex,tiley,&s_blinkychase1);
+ break;
+ case en_clyde:
+ SpawnNewObj (tilex,tiley,&s_clydechase1);
+ break;
+ case en_pinky:
+ SpawnNewObj (tilex,tiley,&s_pinkychase1);
+ break;
+ case en_inky:
+ SpawnNewObj (tilex,tiley,&s_inkychase1);
+ break;
+ }
+
+ newobj->obclass = ghostobj;
+ newobj->speed = SPDDOG;
+
+ newobj->dir = east;
+ newobj->flags |= FL_AMBUSH;
+ if (!loadedgame)
+ {
+ gamestate.killtotal++;
+ gamestate.killcount++;
+ }
+}
+
+
+
+void T_Gift (objtype *ob);
+void T_GiftThrow (objtype *ob);
+
+void T_Fat (objtype *ob);
+void T_FatThrow (objtype *ob);
+
+//
+// schabb
+//
+extern statetype s_schabbstand;
+
+extern statetype s_schabbchase1;
+extern statetype s_schabbchase1s;
+extern statetype s_schabbchase2;
+extern statetype s_schabbchase3;
+extern statetype s_schabbchase3s;
+extern statetype s_schabbchase4;
+
+extern statetype s_schabbdie1;
+extern statetype s_schabbdie2;
+extern statetype s_schabbdie3;
+extern statetype s_schabbdie4;
+extern statetype s_schabbdie5;
+extern statetype s_schabbdie6;
+
+extern statetype s_schabbshoot1;
+extern statetype s_schabbshoot2;
+
+extern statetype s_needle1;
+extern statetype s_needle2;
+extern statetype s_needle3;
+extern statetype s_needle4;
+
+extern statetype s_schabbdeathcam;
+
+
+statetype s_schabbstand = {false,SPR_SCHABB_W1,0,(statefunc)T_Stand,NULL,&s_schabbstand};
+
+statetype s_schabbchase1 = {false,SPR_SCHABB_W1,10,(statefunc)T_Schabb,NULL,&s_schabbchase1s};
+statetype s_schabbchase1s = {false,SPR_SCHABB_W1,3,NULL,NULL,&s_schabbchase2};
+statetype s_schabbchase2 = {false,SPR_SCHABB_W2,8,(statefunc)T_Schabb,NULL,&s_schabbchase3};
+statetype s_schabbchase3 = {false,SPR_SCHABB_W3,10,(statefunc)T_Schabb,NULL,&s_schabbchase3s};
+statetype s_schabbchase3s = {false,SPR_SCHABB_W3,3,NULL,NULL,&s_schabbchase4};
+statetype s_schabbchase4 = {false,SPR_SCHABB_W4,8,(statefunc)T_Schabb,NULL,&s_schabbchase1};
+
+statetype s_schabbdeathcam = {false,SPR_SCHABB_W1,1,NULL,NULL,&s_schabbdie1};
+
+statetype s_schabbdie1 = {false,SPR_SCHABB_W1,10,NULL,(statefunc)A_DeathScream,&s_schabbdie2};
+statetype s_schabbdie2 = {false,SPR_SCHABB_W1,10,NULL,NULL,&s_schabbdie3};
+statetype s_schabbdie3 = {false,SPR_SCHABB_DIE1,10,NULL,NULL,&s_schabbdie4};
+statetype s_schabbdie4 = {false,SPR_SCHABB_DIE2,10,NULL,NULL,&s_schabbdie5};
+statetype s_schabbdie5 = {false,SPR_SCHABB_DIE3,10,NULL,NULL,&s_schabbdie6};
+statetype s_schabbdie6 = {false,SPR_SCHABB_DEAD,20,NULL,(statefunc)A_StartDeathCam,&s_schabbdie6};
+
+statetype s_schabbshoot1 = {false,SPR_SCHABB_SHOOT1,30,NULL,NULL,&s_schabbshoot2};
+statetype s_schabbshoot2 = {false,SPR_SCHABB_SHOOT2,10,NULL,(statefunc)T_SchabbThrow,&s_schabbchase1};
+
+statetype s_needle1 = {false,SPR_HYPO1,6,(statefunc)T_Projectile,NULL,&s_needle2};
+statetype s_needle2 = {false,SPR_HYPO2,6,(statefunc)T_Projectile,NULL,&s_needle3};
+statetype s_needle3 = {false,SPR_HYPO3,6,(statefunc)T_Projectile,NULL,&s_needle4};
+statetype s_needle4 = {false,SPR_HYPO4,6,(statefunc)T_Projectile,NULL,&s_needle1};
+
+
+//
+// gift
+//
+extern statetype s_giftstand;
+
+extern statetype s_giftchase1;
+extern statetype s_giftchase1s;
+extern statetype s_giftchase2;
+extern statetype s_giftchase3;
+extern statetype s_giftchase3s;
+extern statetype s_giftchase4;
+
+extern statetype s_giftdie1;
+extern statetype s_giftdie2;
+extern statetype s_giftdie3;
+extern statetype s_giftdie4;
+extern statetype s_giftdie5;
+extern statetype s_giftdie6;
+
+extern statetype s_giftshoot1;
+extern statetype s_giftshoot2;
+
+extern statetype s_needle1;
+extern statetype s_needle2;
+extern statetype s_needle3;
+extern statetype s_needle4;
+
+extern statetype s_giftdeathcam;
+
+extern statetype s_boom1;
+extern statetype s_boom2;
+extern statetype s_boom3;
+
+
+statetype s_giftstand = {false,SPR_GIFT_W1,0,(statefunc)T_Stand,NULL,&s_giftstand};
+
+statetype s_giftchase1 = {false,SPR_GIFT_W1,10,(statefunc)T_Gift,NULL,&s_giftchase1s};
+statetype s_giftchase1s = {false,SPR_GIFT_W1,3,NULL,NULL,&s_giftchase2};
+statetype s_giftchase2 = {false,SPR_GIFT_W2,8,(statefunc)T_Gift,NULL,&s_giftchase3};
+statetype s_giftchase3 = {false,SPR_GIFT_W3,10,(statefunc)T_Gift,NULL,&s_giftchase3s};
+statetype s_giftchase3s = {false,SPR_GIFT_W3,3,NULL,NULL,&s_giftchase4};
+statetype s_giftchase4 = {false,SPR_GIFT_W4,8,(statefunc)T_Gift,NULL,&s_giftchase1};
+
+statetype s_giftdeathcam = {false,SPR_GIFT_W1,1,NULL,NULL,&s_giftdie1};
+
+statetype s_giftdie1 = {false,SPR_GIFT_W1,1,NULL,(statefunc)A_DeathScream,&s_giftdie2};
+statetype s_giftdie2 = {false,SPR_GIFT_W1,10,NULL,NULL,&s_giftdie3};
+statetype s_giftdie3 = {false,SPR_GIFT_DIE1,10,NULL,NULL,&s_giftdie4};
+statetype s_giftdie4 = {false,SPR_GIFT_DIE2,10,NULL,NULL,&s_giftdie5};
+statetype s_giftdie5 = {false,SPR_GIFT_DIE3,10,NULL,NULL,&s_giftdie6};
+statetype s_giftdie6 = {false,SPR_GIFT_DEAD,20,NULL,(statefunc)A_StartDeathCam,&s_giftdie6};
+
+statetype s_giftshoot1 = {false,SPR_GIFT_SHOOT1,30,NULL,NULL,&s_giftshoot2};
+statetype s_giftshoot2 = {false,SPR_GIFT_SHOOT2,10,NULL,(statefunc)T_GiftThrow,&s_giftchase1};
+
+
+//
+// fat
+//
+extern statetype s_fatstand;
+
+extern statetype s_fatchase1;
+extern statetype s_fatchase1s;
+extern statetype s_fatchase2;
+extern statetype s_fatchase3;
+extern statetype s_fatchase3s;
+extern statetype s_fatchase4;
+
+extern statetype s_fatdie1;
+extern statetype s_fatdie2;
+extern statetype s_fatdie3;
+extern statetype s_fatdie4;
+extern statetype s_fatdie5;
+extern statetype s_fatdie6;
+
+extern statetype s_fatshoot1;
+extern statetype s_fatshoot2;
+extern statetype s_fatshoot3;
+extern statetype s_fatshoot4;
+extern statetype s_fatshoot5;
+extern statetype s_fatshoot6;
+
+extern statetype s_needle1;
+extern statetype s_needle2;
+extern statetype s_needle3;
+extern statetype s_needle4;
+
+extern statetype s_fatdeathcam;
+
+
+statetype s_fatstand = {false,SPR_FAT_W1,0,(statefunc)T_Stand,NULL,&s_fatstand};
+
+statetype s_fatchase1 = {false,SPR_FAT_W1,10,(statefunc)T_Fat,NULL,&s_fatchase1s};
+statetype s_fatchase1s = {false,SPR_FAT_W1,3,NULL,NULL,&s_fatchase2};
+statetype s_fatchase2 = {false,SPR_FAT_W2,8,(statefunc)T_Fat,NULL,&s_fatchase3};
+statetype s_fatchase3 = {false,SPR_FAT_W3,10,(statefunc)T_Fat,NULL,&s_fatchase3s};
+statetype s_fatchase3s = {false,SPR_FAT_W3,3,NULL,NULL,&s_fatchase4};
+statetype s_fatchase4 = {false,SPR_FAT_W4,8,(statefunc)T_Fat,NULL,&s_fatchase1};
+
+statetype s_fatdeathcam = {false,SPR_FAT_W1,1,NULL,NULL,&s_fatdie1};
+
+statetype s_fatdie1 = {false,SPR_FAT_W1,1,NULL,(statefunc)A_DeathScream,&s_fatdie2};
+statetype s_fatdie2 = {false,SPR_FAT_W1,10,NULL,NULL,&s_fatdie3};
+statetype s_fatdie3 = {false,SPR_FAT_DIE1,10,NULL,NULL,&s_fatdie4};
+statetype s_fatdie4 = {false,SPR_FAT_DIE2,10,NULL,NULL,&s_fatdie5};
+statetype s_fatdie5 = {false,SPR_FAT_DIE3,10,NULL,NULL,&s_fatdie6};
+statetype s_fatdie6 = {false,SPR_FAT_DEAD,20,NULL,(statefunc)A_StartDeathCam,&s_fatdie6};
+
+statetype s_fatshoot1 = {false,SPR_FAT_SHOOT1,30,NULL,NULL,&s_fatshoot2};
+statetype s_fatshoot2 = {false,SPR_FAT_SHOOT2,10,NULL,(statefunc)T_GiftThrow,&s_fatshoot3};
+statetype s_fatshoot3 = {false,SPR_FAT_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_fatshoot4};
+statetype s_fatshoot4 = {false,SPR_FAT_SHOOT4,10,NULL,(statefunc)T_Shoot,&s_fatshoot5};
+statetype s_fatshoot5 = {false,SPR_FAT_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_fatshoot6};
+statetype s_fatshoot6 = {false,SPR_FAT_SHOOT4,10,NULL,(statefunc)T_Shoot,&s_fatchase1};
+
+
+/*
+===============
+=
+= SpawnSchabbs
+=
+===============
+*/
+
+void SpawnSchabbs (int tilex, int tiley)
+{
+ if (DigiMode != sds_Off)
+ s_schabbdie2.tictime = 140;
+ else
+ s_schabbdie2.tictime = 5;
+
+ SpawnNewObj (tilex,tiley,&s_schabbstand);
+ newobj->speed = SPDPATROL;
+
+ newobj->obclass = schabbobj;
+ newobj->hitpoints = starthitpoints[gamestate.difficulty][en_schabbs];
+ newobj->dir = nodir;
+ newobj->flags |= FL_SHOOTABLE|FL_AMBUSH;
+ if (!loadedgame)
+ gamestate.killtotal++;
+}
+
+
+/*
+===============
+=
+= SpawnGift
+=
+===============
+*/
+
+void SpawnGift (int tilex, int tiley)
+{
+ if (DigiMode != sds_Off)
+ s_giftdie2.tictime = 140;
+ else
+ s_giftdie2.tictime = 5;
+
+ SpawnNewObj (tilex,tiley,&s_giftstand);
+ newobj->speed = SPDPATROL;
+
+ newobj->obclass = giftobj;
+ newobj->hitpoints = starthitpoints[gamestate.difficulty][en_gift];
+ newobj->dir = nodir;
+ newobj->flags |= FL_SHOOTABLE|FL_AMBUSH;
+ if (!loadedgame)
+ gamestate.killtotal++;
+}
+
+
+/*
+===============
+=
+= SpawnFat
+=
+===============
+*/
+
+void SpawnFat (int tilex, int tiley)
+{
+ if (DigiMode != sds_Off)
+ s_fatdie2.tictime = 140;
+ else
+ s_fatdie2.tictime = 5;
+
+ SpawnNewObj (tilex,tiley,&s_fatstand);
+ newobj->speed = SPDPATROL;
+
+ newobj->obclass = fatobj;
+ newobj->hitpoints = starthitpoints[gamestate.difficulty][en_fat];
+ newobj->dir = nodir;
+ newobj->flags |= FL_SHOOTABLE|FL_AMBUSH;
+ if (!loadedgame)
+ gamestate.killtotal++;
+}
+
+
+/*
+=================
+=
+= T_SchabbThrow
+=
+=================
+*/
+
+void T_SchabbThrow (objtype *ob)
+{
+ int32_t deltax,deltay;
+ float angle;
+ int iangle;
+
+ deltax = player->x - ob->x;
+ deltay = ob->y - player->y;
+ angle = (float) atan2((float) deltay, (float) deltax);
+ if (angle<0)
+ angle = (float) (M_PI*2+angle);
+ iangle = (int) (angle/(M_PI*2)*ANGLES);
+
+ GetNewActor ();
+ newobj->state = &s_needle1;
+ newobj->ticcount = 1;
+
+ newobj->tilex = ob->tilex;
+ newobj->tiley = ob->tiley;
+ newobj->x = ob->x;
+ newobj->y = ob->y;
+ newobj->obclass = needleobj;
+ newobj->dir = nodir;
+ newobj->angle = iangle;
+ newobj->speed = 0x2000l;
+
+ newobj->flags = FL_NEVERMARK;
+ newobj->active = ac_yes;
+
+ PlaySoundLocActor (SCHABBSTHROWSND,newobj);
+}
+
+/*
+=================
+=
+= T_GiftThrow
+=
+=================
+*/
+
+void T_GiftThrow (objtype *ob)
+{
+ int32_t deltax,deltay;
+ float angle;
+ int iangle;
+
+ deltax = player->x - ob->x;
+ deltay = ob->y - player->y;
+ angle = (float) atan2((float) deltay, (float) deltax);
+ if (angle<0)
+ angle = (float) (M_PI*2+angle);
+ iangle = (int) (angle/(M_PI*2)*ANGLES);
+
+ GetNewActor ();
+ newobj->state = &s_rocket;
+ newobj->ticcount = 1;
+
+ newobj->tilex = ob->tilex;
+ newobj->tiley = ob->tiley;
+ newobj->x = ob->x;
+ newobj->y = ob->y;
+ newobj->obclass = rocketobj;
+ newobj->dir = nodir;
+ newobj->angle = iangle;
+ newobj->speed = 0x2000l;
+ newobj->flags = FL_NEVERMARK;
+ newobj->active = ac_yes;
+
+#ifndef APOGEE_1_0 // T_GiftThrow will never be called in shareware v1.0
+ PlaySoundLocActor (MISSILEFIRESND,newobj);
+#endif
+}
+
+
+/*
+=================
+=
+= T_Schabb
+=
+=================
+*/
+
+void T_Schabb (objtype *ob)
+{
+ int32_t move;
+ int dx,dy,dist;
+ boolean dodge;
+
+ dodge = false;
+ dx = abs(ob->tilex - player->tilex);
+ dy = abs(ob->tiley - player->tiley);
+ dist = dx>dy ? dx : dy;
+
+ if (CheckLine(ob)) // got a shot at player?
+ {
+ ob->hidden = false;
+ if ( (unsigned) US_RndT() < (tics<<3) && objfreelist)
+ {
+ //
+ // go into attack frame
+ //
+ NewState (ob,&s_schabbshoot1);
+ return;
+ }
+ dodge = true;
+ }
+ else
+ ob->hidden = true;
+
+ if (ob->dir == nodir)
+ {
+ if (dodge)
+ SelectDodgeDir (ob);
+ else
+ SelectChaseDir (ob);
+ if (ob->dir == nodir)
+ return; // object is blocked in
+ }
+
+ move = ob->speed*tics;
+
+ while (move)
+ {
+ if (ob->distance < 0)
+ {
+ //
+ // waiting for a door to open
+ //
+ OpenDoor (-ob->distance-1);
+ if (doorobjlist[-ob->distance-1].action != dr_open)
+ return;
+ ob->distance = TILEGLOBAL; // go ahead, the door is now open
+ TryWalk(ob);
+ }
+
+ if (move < ob->distance)
+ {
+ MoveObj (ob,move);
+ break;
+ }
+
+ //
+ // reached goal tile, so select another one
+ //
+
+ //
+ // fix position to account for round off during moving
+ //
+ ob->x = ((int32_t)ob->tilex<<TILESHIFT)+TILEGLOBAL/2;
+ ob->y = ((int32_t)ob->tiley<<TILESHIFT)+TILEGLOBAL/2;
+
+ move -= ob->distance;
+
+ if (dist <4)
+ SelectRunDir (ob);
+ else if (dodge)
+ SelectDodgeDir (ob);
+ else
+ SelectChaseDir (ob);
+
+ if (ob->dir == nodir)
+ return; // object is blocked in
+ }
+}
+
+
+/*
+=================
+=
+= T_Gift
+=
+=================
+*/
+
+void T_Gift (objtype *ob)
+{
+ int32_t move;
+ int dx,dy,dist;
+ boolean dodge;
+
+ dodge = false;
+ dx = abs(ob->tilex - player->tilex);
+ dy = abs(ob->tiley - player->tiley);
+ dist = dx>dy ? dx : dy;
+
+ if (CheckLine(ob)) // got a shot at player?
+ {
+ ob->hidden = false;
+ if ( (unsigned) US_RndT() < (tics<<3) && objfreelist)
+ {
+ //
+ // go into attack frame
+ //
+ NewState (ob,&s_giftshoot1);
+ return;
+ }
+ dodge = true;
+ }
+ else
+ ob->hidden = true;
+
+ if (ob->dir == nodir)
+ {
+ if (dodge)
+ SelectDodgeDir (ob);
+ else
+ SelectChaseDir (ob);
+ if (ob->dir == nodir)
+ return; // object is blocked in
+ }
+
+ move = ob->speed*tics;
+
+ while (move)
+ {
+ if (ob->distance < 0)
+ {
+ //
+ // waiting for a door to open
+ //
+ OpenDoor (-ob->distance-1);
+ if (doorobjlist[-ob->distance-1].action != dr_open)
+ return;
+ ob->distance = TILEGLOBAL; // go ahead, the door is now open
+ TryWalk(ob);
+ }
+
+ if (move < ob->distance)
+ {
+ MoveObj (ob,move);
+ break;
+ }
+
+ //
+ // reached goal tile, so select another one
+ //
+
+ //
+ // fix position to account for round off during moving
+ //
+ ob->x = ((int32_t)ob->tilex<<TILESHIFT)+TILEGLOBAL/2;
+ ob->y = ((int32_t)ob->tiley<<TILESHIFT)+TILEGLOBAL/2;
+
+ move -= ob->distance;
+
+ if (dist <4)
+ SelectRunDir (ob);
+ else if (dodge)
+ SelectDodgeDir (ob);
+ else
+ SelectChaseDir (ob);
+
+ if (ob->dir == nodir)
+ return; // object is blocked in
+ }
+}
+
+
+/*
+=================
+=
+= T_Fat
+=
+=================
+*/
+
+void T_Fat (objtype *ob)
+{
+ int32_t move;
+ int dx,dy,dist;
+ boolean dodge;
+
+ dodge = false;
+ dx = abs(ob->tilex - player->tilex);
+ dy = abs(ob->tiley - player->tiley);
+ dist = dx>dy ? dx : dy;
+
+ if (CheckLine(ob)) // got a shot at player?
+ {
+ ob->hidden = false;
+ if ( (unsigned) US_RndT() < (tics<<3) && objfreelist)
+ {
+ //
+ // go into attack frame
+ //
+ NewState (ob,&s_fatshoot1);
+ return;
+ }
+ dodge = true;
+ }
+ else
+ ob->hidden = true;
+
+ if (ob->dir == nodir)
+ {
+ if (dodge)
+ SelectDodgeDir (ob);
+ else
+ SelectChaseDir (ob);
+ if (ob->dir == nodir)
+ return; // object is blocked in
+ }
+
+ move = ob->speed*tics;
+
+ while (move)
+ {
+ if (ob->distance < 0)
+ {
+ //
+ // waiting for a door to open
+ //
+ OpenDoor (-ob->distance-1);
+ if (doorobjlist[-ob->distance-1].action != dr_open)
+ return;
+ ob->distance = TILEGLOBAL; // go ahead, the door is now open
+ TryWalk(ob);
+ }
+
+ if (move < ob->distance)
+ {
+ MoveObj (ob,move);
+ break;
+ }
+
+ //
+ // reached goal tile, so select another one
+ //
+
+ //
+ // fix position to account for round off during moving
+ //
+ ob->x = ((int32_t)ob->tilex<<TILESHIFT)+TILEGLOBAL/2;
+ ob->y = ((int32_t)ob->tiley<<TILESHIFT)+TILEGLOBAL/2;
+
+ move -= ob->distance;
+
+ if (dist <4)
+ SelectRunDir (ob);
+ else if (dodge)
+ SelectDodgeDir (ob);
+ else
+ SelectChaseDir (ob);
+
+ if (ob->dir == nodir)
+ return; // object is blocked in
+ }
+}
+
+
+/*
+=============================================================================
+
+ HITLERS
+
+=============================================================================
+*/
+
+
+//
+// fake
+//
+extern statetype s_fakestand;
+
+extern statetype s_fakechase1;
+extern statetype s_fakechase1s;
+extern statetype s_fakechase2;
+extern statetype s_fakechase3;
+extern statetype s_fakechase3s;
+extern statetype s_fakechase4;
+
+extern statetype s_fakedie1;
+extern statetype s_fakedie2;
+extern statetype s_fakedie3;
+extern statetype s_fakedie4;
+extern statetype s_fakedie5;
+extern statetype s_fakedie6;
+
+extern statetype s_fakeshoot1;
+extern statetype s_fakeshoot2;
+extern statetype s_fakeshoot3;
+extern statetype s_fakeshoot4;
+extern statetype s_fakeshoot5;
+extern statetype s_fakeshoot6;
+extern statetype s_fakeshoot7;
+extern statetype s_fakeshoot8;
+extern statetype s_fakeshoot9;
+
+extern statetype s_fire1;
+extern statetype s_fire2;
+
+statetype s_fakestand = {false,SPR_FAKE_W1,0,(statefunc)T_Stand,NULL,&s_fakestand};
+
+statetype s_fakechase1 = {false,SPR_FAKE_W1,10,(statefunc)T_Fake,NULL,&s_fakechase1s};
+statetype s_fakechase1s = {false,SPR_FAKE_W1,3,NULL,NULL,&s_fakechase2};
+statetype s_fakechase2 = {false,SPR_FAKE_W2,8,(statefunc)T_Fake,NULL,&s_fakechase3};
+statetype s_fakechase3 = {false,SPR_FAKE_W3,10,(statefunc)T_Fake,NULL,&s_fakechase3s};
+statetype s_fakechase3s = {false,SPR_FAKE_W3,3,NULL,NULL,&s_fakechase4};
+statetype s_fakechase4 = {false,SPR_FAKE_W4,8,(statefunc)T_Fake,NULL,&s_fakechase1};
+
+statetype s_fakedie1 = {false,SPR_FAKE_DIE1,10,NULL,(statefunc)A_DeathScream,&s_fakedie2};
+statetype s_fakedie2 = {false,SPR_FAKE_DIE2,10,NULL,NULL,&s_fakedie3};
+statetype s_fakedie3 = {false,SPR_FAKE_DIE3,10,NULL,NULL,&s_fakedie4};
+statetype s_fakedie4 = {false,SPR_FAKE_DIE4,10,NULL,NULL,&s_fakedie5};
+statetype s_fakedie5 = {false,SPR_FAKE_DIE5,10,NULL,NULL,&s_fakedie6};
+statetype s_fakedie6 = {false,SPR_FAKE_DEAD,0,NULL,NULL,&s_fakedie6};
+
+statetype s_fakeshoot1 = {false,SPR_FAKE_SHOOT,8,NULL,(statefunc)T_FakeFire,&s_fakeshoot2};
+statetype s_fakeshoot2 = {false,SPR_FAKE_SHOOT,8,NULL,(statefunc)T_FakeFire,&s_fakeshoot3};
+statetype s_fakeshoot3 = {false,SPR_FAKE_SHOOT,8,NULL,(statefunc)T_FakeFire,&s_fakeshoot4};
+statetype s_fakeshoot4 = {false,SPR_FAKE_SHOOT,8,NULL,(statefunc)T_FakeFire,&s_fakeshoot5};
+statetype s_fakeshoot5 = {false,SPR_FAKE_SHOOT,8,NULL,(statefunc)T_FakeFire,&s_fakeshoot6};
+statetype s_fakeshoot6 = {false,SPR_FAKE_SHOOT,8,NULL,(statefunc)T_FakeFire,&s_fakeshoot7};
+statetype s_fakeshoot7 = {false,SPR_FAKE_SHOOT,8,NULL,(statefunc)T_FakeFire,&s_fakeshoot8};
+statetype s_fakeshoot8 = {false,SPR_FAKE_SHOOT,8,NULL,(statefunc)T_FakeFire,&s_fakeshoot9};
+statetype s_fakeshoot9 = {false,SPR_FAKE_SHOOT,8,NULL,NULL,&s_fakechase1};
+
+statetype s_fire1 = {false,SPR_FIRE1,6,NULL,(statefunc)T_Projectile,&s_fire2};
+statetype s_fire2 = {false,SPR_FIRE2,6,NULL,(statefunc)T_Projectile,&s_fire1};
+
+//
+// hitler
+//
+extern statetype s_mechachase1;
+extern statetype s_mechachase1s;
+extern statetype s_mechachase2;
+extern statetype s_mechachase3;
+extern statetype s_mechachase3s;
+extern statetype s_mechachase4;
+
+extern statetype s_mechadie1;
+extern statetype s_mechadie2;
+extern statetype s_mechadie3;
+extern statetype s_mechadie4;
+
+extern statetype s_mechashoot1;
+extern statetype s_mechashoot2;
+extern statetype s_mechashoot3;
+extern statetype s_mechashoot4;
+extern statetype s_mechashoot5;
+extern statetype s_mechashoot6;
+
+
+extern statetype s_hitlerchase1;
+extern statetype s_hitlerchase1s;
+extern statetype s_hitlerchase2;
+extern statetype s_hitlerchase3;
+extern statetype s_hitlerchase3s;
+extern statetype s_hitlerchase4;
+
+extern statetype s_hitlerdie1;
+extern statetype s_hitlerdie2;
+extern statetype s_hitlerdie3;
+extern statetype s_hitlerdie4;
+extern statetype s_hitlerdie5;
+extern statetype s_hitlerdie6;
+extern statetype s_hitlerdie7;
+extern statetype s_hitlerdie8;
+extern statetype s_hitlerdie9;
+extern statetype s_hitlerdie10;
+
+extern statetype s_hitlershoot1;
+extern statetype s_hitlershoot2;
+extern statetype s_hitlershoot3;
+extern statetype s_hitlershoot4;
+extern statetype s_hitlershoot5;
+extern statetype s_hitlershoot6;
+
+extern statetype s_hitlerdeathcam;
+
+statetype s_mechastand = {false,SPR_MECHA_W1,0,(statefunc)T_Stand,NULL,&s_mechastand};
+
+statetype s_mechachase1 = {false,SPR_MECHA_W1,10,(statefunc)T_Chase,(statefunc)A_MechaSound,&s_mechachase1s};
+statetype s_mechachase1s = {false,SPR_MECHA_W1,6,NULL,NULL,&s_mechachase2};
+statetype s_mechachase2 = {false,SPR_MECHA_W2,8,(statefunc)T_Chase,NULL,&s_mechachase3};
+statetype s_mechachase3 = {false,SPR_MECHA_W3,10,(statefunc)T_Chase,(statefunc)A_MechaSound,&s_mechachase3s};
+statetype s_mechachase3s = {false,SPR_MECHA_W3,6,NULL,NULL,&s_mechachase4};
+statetype s_mechachase4 = {false,SPR_MECHA_W4,8,(statefunc)T_Chase,NULL,&s_mechachase1};
+
+statetype s_mechadie1 = {false,SPR_MECHA_DIE1,10,NULL,(statefunc)A_DeathScream,&s_mechadie2};
+statetype s_mechadie2 = {false,SPR_MECHA_DIE2,10,NULL,NULL,&s_mechadie3};
+statetype s_mechadie3 = {false,SPR_MECHA_DIE3,10,NULL,(statefunc)A_HitlerMorph,&s_mechadie4};
+statetype s_mechadie4 = {false,SPR_MECHA_DEAD,0,NULL,NULL,&s_mechadie4};
+
+statetype s_mechashoot1 = {false,SPR_MECHA_SHOOT1,30,NULL,NULL,&s_mechashoot2};
+statetype s_mechashoot2 = {false,SPR_MECHA_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_mechashoot3};
+statetype s_mechashoot3 = {false,SPR_MECHA_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_mechashoot4};
+statetype s_mechashoot4 = {false,SPR_MECHA_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_mechashoot5};
+statetype s_mechashoot5 = {false,SPR_MECHA_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_mechashoot6};
+statetype s_mechashoot6 = {false,SPR_MECHA_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_mechachase1};
+
+
+statetype s_hitlerchase1 = {false,SPR_HITLER_W1,6,(statefunc)T_Chase,NULL,&s_hitlerchase1s};
+statetype s_hitlerchase1s = {false,SPR_HITLER_W1,4,NULL,NULL,&s_hitlerchase2};
+statetype s_hitlerchase2 = {false,SPR_HITLER_W2,2,(statefunc)T_Chase,NULL,&s_hitlerchase3};
+statetype s_hitlerchase3 = {false,SPR_HITLER_W3,6,(statefunc)T_Chase,NULL,&s_hitlerchase3s};
+statetype s_hitlerchase3s = {false,SPR_HITLER_W3,4,NULL,NULL,&s_hitlerchase4};
+statetype s_hitlerchase4 = {false,SPR_HITLER_W4,2,(statefunc)T_Chase,NULL,&s_hitlerchase1};
+
+statetype s_hitlerdeathcam = {false,SPR_HITLER_W1,10,NULL,NULL,&s_hitlerdie1};
+
+statetype s_hitlerdie1 = {false,SPR_HITLER_W1,1,NULL,(statefunc)A_DeathScream,&s_hitlerdie2};
+statetype s_hitlerdie2 = {false,SPR_HITLER_W1,10,NULL,NULL,&s_hitlerdie3};
+statetype s_hitlerdie3 = {false,SPR_HITLER_DIE1,10,NULL,(statefunc)A_Slurpie,&s_hitlerdie4};
+statetype s_hitlerdie4 = {false,SPR_HITLER_DIE2,10,NULL,NULL,&s_hitlerdie5};
+statetype s_hitlerdie5 = {false,SPR_HITLER_DIE3,10,NULL,NULL,&s_hitlerdie6};
+statetype s_hitlerdie6 = {false,SPR_HITLER_DIE4,10,NULL,NULL,&s_hitlerdie7};
+statetype s_hitlerdie7 = {false,SPR_HITLER_DIE5,10,NULL,NULL,&s_hitlerdie8};
+statetype s_hitlerdie8 = {false,SPR_HITLER_DIE6,10,NULL,NULL,&s_hitlerdie9};
+statetype s_hitlerdie9 = {false,SPR_HITLER_DIE7,10,NULL,NULL,&s_hitlerdie10};
+statetype s_hitlerdie10 = {false,SPR_HITLER_DEAD,20,NULL,(statefunc)A_StartDeathCam,&s_hitlerdie10};
+
+statetype s_hitlershoot1 = {false,SPR_HITLER_SHOOT1,30,NULL,NULL,&s_hitlershoot2};
+statetype s_hitlershoot2 = {false,SPR_HITLER_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_hitlershoot3};
+statetype s_hitlershoot3 = {false,SPR_HITLER_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_hitlershoot4};
+statetype s_hitlershoot4 = {false,SPR_HITLER_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_hitlershoot5};
+statetype s_hitlershoot5 = {false,SPR_HITLER_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_hitlershoot6};
+statetype s_hitlershoot6 = {false,SPR_HITLER_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_hitlerchase1};
+
+
+
+/*
+===============
+=
+= SpawnFakeHitler
+=
+===============
+*/
+
+void SpawnFakeHitler (int tilex, int tiley)
+{
+ if (DigiMode != sds_Off)
+ s_hitlerdie2.tictime = 140;
+ else
+ s_hitlerdie2.tictime = 5;
+
+ SpawnNewObj (tilex,tiley,&s_fakestand);
+ newobj->speed = SPDPATROL;
+
+ newobj->obclass = fakeobj;
+ newobj->hitpoints = starthitpoints[gamestate.difficulty][en_fake];
+ newobj->dir = nodir;
+ newobj->flags |= FL_SHOOTABLE|FL_AMBUSH;
+ if (!loadedgame)
+ gamestate.killtotal++;
+}
+
+
+/*
+===============
+=
+= SpawnHitler
+=
+===============
+*/
+
+void SpawnHitler (int tilex, int tiley)
+{
+ if (DigiMode != sds_Off)
+ s_hitlerdie2.tictime = 140;
+ else
+ s_hitlerdie2.tictime = 5;
+
+
+ SpawnNewObj (tilex,tiley,&s_mechastand);
+ newobj->speed = SPDPATROL;
+
+ newobj->obclass = mechahitlerobj;
+ newobj->hitpoints = starthitpoints[gamestate.difficulty][en_hitler];
+ newobj->dir = nodir;
+ newobj->flags |= FL_SHOOTABLE|FL_AMBUSH;
+ if (!loadedgame)
+ gamestate.killtotal++;
+}
+
+
+/*
+===============
+=
+= A_HitlerMorph
+=
+===============
+*/
+
+void A_HitlerMorph (objtype *ob)
+{
+ short hitpoints[4]={500,700,800,900};
+
+ SpawnNewObj (ob->tilex,ob->tiley,&s_hitlerchase1);
+ newobj->speed = SPDPATROL*5;
+
+ newobj->x = ob->x;
+ newobj->y = ob->y;
+
+ newobj->distance = ob->distance;
+ newobj->dir = ob->dir;
+ newobj->flags = ob->flags | FL_SHOOTABLE;
+ newobj->flags &= ~FL_NONMARK; // hitler stuck with nodir fix
+
+ newobj->obclass = realhitlerobj;
+ newobj->hitpoints = hitpoints[gamestate.difficulty];
+}
+
+
+////////////////////////////////////////////////////////
+//
+// A_MechaSound
+// A_Slurpie
+//
+////////////////////////////////////////////////////////
+void A_MechaSound (objtype *ob)
+{
+ if (areabyplayer[ob->areanumber])
+ PlaySoundLocActor (MECHSTEPSND,ob);
+}
+
+void A_Slurpie (objtype * ob)
+{
+ SD_PlaySound(SLURPIESND);
+}
+
+/*
+=================
+=
+= T_FakeFire
+=
+=================
+*/
+
+void T_FakeFire (objtype *ob)
+{
+ int32_t deltax,deltay;
+ float angle;
+ int iangle;
+
+ if (!objfreelist) // stop shooting if over MAXACTORS
+ {
+ NewState (ob,&s_fakechase1);
+ return;
+ }
+
+ deltax = player->x - ob->x;
+ deltay = ob->y - player->y;
+ angle = (float) atan2((float) deltay, (float) deltax);
+ if (angle<0)
+ angle = (float)(M_PI*2+angle);
+ iangle = (int) (angle/(M_PI*2)*ANGLES);
+
+ GetNewActor ();
+ newobj->state = &s_fire1;
+ newobj->ticcount = 1;
+
+ newobj->tilex = ob->tilex;
+ newobj->tiley = ob->tiley;
+ newobj->x = ob->x;
+ newobj->y = ob->y;
+ newobj->dir = nodir;
+ newobj->angle = iangle;
+ newobj->obclass = fireobj;
+ newobj->speed = 0x1200l;
+ newobj->flags = FL_NEVERMARK;
+ newobj->active = ac_yes;
+
+ PlaySoundLocActor (FLAMETHROWERSND,newobj);
+}
+
+
+
+/*
+=================
+=
+= T_Fake
+=
+=================
+*/
+
+void T_Fake (objtype *ob)
+{
+ int32_t move;
+
+ if (CheckLine(ob)) // got a shot at player?
+ {
+ ob->hidden = false;
+ if ( (unsigned) US_RndT() < (tics<<1) && objfreelist)
+ {
+ //
+ // go into attack frame
+ //
+ NewState (ob,&s_fakeshoot1);
+ return;
+ }
+ }
+ else
+ ob->hidden = true;
+
+ if (ob->dir == nodir)
+ {
+ SelectDodgeDir (ob);
+ if (ob->dir == nodir)
+ return; // object is blocked in
+ }
+
+ move = ob->speed*tics;
+
+ while (move)
+ {
+ if (move < ob->distance)
+ {
+ MoveObj (ob,move);
+ break;
+ }
+
+ //
+ // reached goal tile, so select another one
+ //
+
+ //
+ // fix position to account for round off during moving
+ //
+ ob->x = ((int32_t)ob->tilex<<TILESHIFT)+TILEGLOBAL/2;
+ ob->y = ((int32_t)ob->tiley<<TILESHIFT)+TILEGLOBAL/2;
+
+ move -= ob->distance;
+
+ SelectDodgeDir (ob);
+
+ if (ob->dir == nodir)
+ return; // object is blocked in
+ }
+}
+
+#endif
+/*
+============================================================================
+
+STAND
+
+============================================================================
+*/
+
+
+/*
+===============
+=
+= T_Stand
+=
+===============
+*/
+
+void T_Stand (objtype *ob)
+{
+ SightPlayer (ob);
+}
+
+
+/*
+============================================================================
+
+CHASE
+
+============================================================================
+*/
+
+/*
+=================
+=
+= T_Chase
+=
+=================
+*/
+
+void T_Chase (objtype *ob)
+{
+ int32_t move,target;
+ int dx,dy,dist,chance;
+ boolean dodge;
+
+ if (gamestate.victoryflag)
+ return;
+
+ dodge = false;
+ if (CheckLine(ob)) // got a shot at player?
+ {
+ ob->hidden = false;
+ dx = abs(ob->tilex - player->tilex);
+ dy = abs(ob->tiley - player->tiley);
+ dist = dx>dy ? dx : dy;
+
+#ifdef PLAYDEMOLIKEORIGINAL
+ if(DEMOCOND_ORIG)
+ {
+ if(!dist || (dist == 1 && ob->distance < 0x4000))
+ chance = 300;
+ else
+ chance = (tics<<4)/dist;
+ }
+ else
+#endif
+ {
+ if (dist)
+ chance = (tics<<4)/dist;
+ else
+ chance = 300;
+
+ if (dist == 1)
+ {
+ target = abs(ob->x - player->x);
+ if (target < 0x14000l)
+ {
+ target = abs(ob->y - player->y);
+ if (target < 0x14000l)
+ chance = 300;
+ }
+ }
+ }
+
+ if ( US_RndT()<chance)
+ {
+ //
+ // go into attack frame
+ //
+ switch (ob->obclass)
+ {
+ case guardobj:
+ NewState (ob,&s_grdshoot1);
+ break;
+ case officerobj:
+ NewState (ob,&s_ofcshoot1);
+ break;
+ case mutantobj:
+ NewState (ob,&s_mutshoot1);
+ break;
+ case ssobj:
+ NewState (ob,&s_ssshoot1);
+ break;
+#ifndef SPEAR
+ case bossobj:
+ NewState (ob,&s_bossshoot1);
+ break;
+ case gretelobj:
+ NewState (ob,&s_gretelshoot1);
+ break;
+ case mechahitlerobj:
+ NewState (ob,&s_mechashoot1);
+ break;
+ case realhitlerobj:
+ NewState (ob,&s_hitlershoot1);
+ break;
+#else
+ case angelobj:
+ NewState (ob,&s_angelshoot1);
+ break;
+ case transobj:
+ NewState (ob,&s_transshoot1);
+ break;
+ case uberobj:
+ NewState (ob,&s_ubershoot1);
+ break;
+ case willobj:
+ NewState (ob,&s_willshoot1);
+ break;
+ case deathobj:
+ NewState (ob,&s_deathshoot1);
+ break;
+#endif
+ }
+ return;
+ }
+ dodge = true;
+ }
+ else
+ ob->hidden = true;
+
+ if (ob->dir == nodir)
+ {
+ if (dodge)
+ SelectDodgeDir (ob);
+ else
+ SelectChaseDir (ob);
+ if (ob->dir == nodir)
+ return; // object is blocked in
+ }
+
+ move = ob->speed*tics;
+
+ while (move)
+ {
+ if (ob->distance < 0)
+ {
+ //
+ // waiting for a door to open
+ //
+ OpenDoor (-ob->distance-1);
+ if (doorobjlist[-ob->distance-1].action != dr_open)
+ return;
+ ob->distance = TILEGLOBAL; // go ahead, the door is now open
+ DEMOIF_SDL
+ {
+ TryWalk(ob);
+ }
+ }
+
+ if (move < ob->distance)
+ {
+ MoveObj (ob,move);
+ break;
+ }
+
+ //
+ // reached goal tile, so select another one
+ //
+
+ //
+ // fix position to account for round off during moving
+ //
+ ob->x = ((int32_t)ob->tilex<<TILESHIFT)+TILEGLOBAL/2;
+ ob->y = ((int32_t)ob->tiley<<TILESHIFT)+TILEGLOBAL/2;
+
+ move -= ob->distance;
+
+ if (dodge)
+ SelectDodgeDir (ob);
+ else
+ SelectChaseDir (ob);
+
+ if (ob->dir == nodir)
+ return; // object is blocked in
+ }
+}
+
+
+/*
+=================
+=
+= T_Ghosts
+=
+=================
+*/
+
+void T_Ghosts (objtype *ob)
+{
+ int32_t move;
+
+ if (ob->dir == nodir)
+ {
+ SelectChaseDir (ob);
+ if (ob->dir == nodir)
+ return; // object is blocked in
+ }
+
+ move = ob->speed*tics;
+
+ while (move)
+ {
+ if (move < ob->distance)
+ {
+ MoveObj (ob,move);
+ break;
+ }
+
+ //
+ // reached goal tile, so select another one
+ //
+
+ //
+ // fix position to account for round off during moving
+ //
+ ob->x = ((int32_t)ob->tilex<<TILESHIFT)+TILEGLOBAL/2;
+ ob->y = ((int32_t)ob->tiley<<TILESHIFT)+TILEGLOBAL/2;
+
+ move -= ob->distance;
+
+ SelectChaseDir (ob);
+
+ if (ob->dir == nodir)
+ return; // object is blocked in
+ }
+}
+
+/*
+=================
+=
+= T_DogChase
+=
+=================
+*/
+
+void T_DogChase (objtype *ob)
+{
+ int32_t move;
+ int32_t dx,dy;
+
+
+ if (ob->dir == nodir)
+ {
+ SelectDodgeDir (ob);
+ if (ob->dir == nodir)
+ return; // object is blocked in
+ }
+
+ move = ob->speed*tics;
+
+ while (move)
+ {
+ //
+ // check for byte range
+ //
+ dx = player->x - ob->x;
+ if (dx<0)
+ dx = -dx;
+ dx -= move;
+ if (dx <= MINACTORDIST)
+ {
+ dy = player->y - ob->y;
+ if (dy<0)
+ dy = -dy;
+ dy -= move;
+ if (dy <= MINACTORDIST)
+ {
+ NewState (ob,&s_dogjump1);
+ return;
+ }
+ }
+
+ if (move < ob->distance)
+ {
+ MoveObj (ob,move);
+ break;
+ }
+
+ //
+ // reached goal tile, so select another one
+ //
+
+ //
+ // fix position to account for round off during moving
+ //
+ ob->x = ((int32_t)ob->tilex<<TILESHIFT)+TILEGLOBAL/2;
+ ob->y = ((int32_t)ob->tiley<<TILESHIFT)+TILEGLOBAL/2;
+
+ move -= ob->distance;
+
+ SelectDodgeDir (ob);
+
+ if (ob->dir == nodir)
+ return; // object is blocked in
+ }
+}
+
+
+
+/*
+============================================================================
+
+ PATH
+
+============================================================================
+*/
+
+
+/*
+===============
+=
+= SelectPathDir
+=
+===============
+*/
+
+void SelectPathDir (objtype *ob)
+{
+ unsigned spot;
+
+ spot = MAPSPOT(ob->tilex,ob->tiley,1)-ICONARROWS;
+
+ if (spot<8)
+ {
+ // new direction
+ ob->dir = (dirtype)(spot);
+ }
+
+ ob->distance = TILEGLOBAL;
+
+ if (!TryWalk (ob))
+ ob->dir = nodir;
+}
+
+
+/*
+===============
+=
+= T_Path
+=
+===============
+*/
+
+void T_Path (objtype *ob)
+{
+ int32_t move;
+
+ if (SightPlayer (ob))
+ return;
+
+ if (ob->dir == nodir)
+ {
+ SelectPathDir (ob);
+ if (ob->dir == nodir)
+ return; // all movement is blocked
+ }
+
+
+ move = ob->speed*tics;
+
+ while (move)
+ {
+ if (ob->distance < 0)
+ {
+ //
+ // waiting for a door to open
+ //
+ OpenDoor (-ob->distance-1);
+ if (doorobjlist[-ob->distance-1].action != dr_open)
+ return;
+ ob->distance = TILEGLOBAL; // go ahead, the door is now open
+ DEMOIF_SDL
+ {
+ TryWalk(ob);
+ }
+ }
+
+ if (move < ob->distance)
+ {
+ MoveObj (ob,move);
+ break;
+ }
+
+ if (ob->tilex>MAPSIZE || ob->tiley>MAPSIZE)
+ {
+ sprintf (str, "T_Path hit a wall at %u,%u, dir %u",
+ ob->tilex,ob->tiley,ob->dir);
+ Quit (str);
+ }
+
+ ob->x = ((int32_t)ob->tilex<<TILESHIFT)+TILEGLOBAL/2;
+ ob->y = ((int32_t)ob->tiley<<TILESHIFT)+TILEGLOBAL/2;
+ move -= ob->distance;
+
+ SelectPathDir (ob);
+
+ if (ob->dir == nodir)
+ return; // all movement is blocked
+ }
+}
+
+
+/*
+=============================================================================
+
+ FIGHT
+
+=============================================================================
+*/
+
+
+/*
+===============
+=
+= T_Shoot
+=
+= Try to damage the player, based on skill level and player's speed
+=
+===============
+*/
+
+void T_Shoot (objtype *ob)
+{
+ int dx,dy,dist;
+ int hitchance,damage;
+
+ hitchance = 128;
+
+ if (!areabyplayer[ob->areanumber])
+ return;
+
+ if (CheckLine (ob)) // player is not behind a wall
+ {
+ dx = abs(ob->tilex - player->tilex);
+ dy = abs(ob->tiley - player->tiley);
+ dist = dx>dy ? dx:dy;
+
+ if (ob->obclass == ssobj || ob->obclass == bossobj)
+ dist = dist*2/3; // ss are better shots
+
+ if (thrustspeed >= RUNSPEED)
+ {
+ if (ob->flags&FL_VISABLE)
+ hitchance = 160-dist*16; // player can see to dodge
+ else
+ hitchance = 160-dist*8;
+ }
+ else
+ {
+ if (ob->flags&FL_VISABLE)
+ hitchance = 256-dist*16; // player can see to dodge
+ else
+ hitchance = 256-dist*8;
+ }
+
+ // see if the shot was a hit
+
+ if (US_RndT()<hitchance)
+ {
+ if (dist<2)
+ damage = US_RndT()>>2;
+ else if (dist<4)
+ damage = US_RndT()>>3;
+ else
+ damage = US_RndT()>>4;
+
+ TakeDamage (damage,ob);
+ }
+ }
+
+ switch(ob->obclass)
+ {
+ case ssobj:
+ PlaySoundLocActor(SSFIRESND,ob);
+ break;
+#ifndef SPEAR
+#ifndef APOGEE_1_0
+ case giftobj:
+ case fatobj:
+ PlaySoundLocActor(MISSILEFIRESND,ob);
+ break;
+#endif
+ case mechahitlerobj:
+ case realhitlerobj:
+ case bossobj:
+ PlaySoundLocActor(BOSSFIRESND,ob);
+ break;
+ case schabbobj:
+ PlaySoundLocActor(SCHABBSTHROWSND,ob);
+ break;
+ case fakeobj:
+ PlaySoundLocActor(FLAMETHROWERSND,ob);
+ break;
+#endif
+ default:
+ PlaySoundLocActor(NAZIFIRESND,ob);
+ }
+}
+
+
+/*
+===============
+=
+= T_Bite
+=
+===============
+*/
+
+void T_Bite (objtype *ob)
+{
+ int32_t dx,dy;
+
+ PlaySoundLocActor(DOGATTACKSND,ob); // JAB
+
+ dx = player->x - ob->x;
+ if (dx<0)
+ dx = -dx;
+ dx -= TILEGLOBAL;
+ if (dx <= MINACTORDIST)
+ {
+ dy = player->y - ob->y;
+ if (dy<0)
+ dy = -dy;
+ dy -= TILEGLOBAL;
+ if (dy <= MINACTORDIST)
+ {
+ if (US_RndT()<180)
+ {
+ TakeDamage (US_RndT()>>4,ob);
+ return;
+ }
+ }
+ }
+}
+
+
+#ifndef SPEAR
+/*
+============================================================================
+
+ BJ VICTORY
+
+============================================================================
+*/
+
+
+//
+// BJ victory
+//
+
+void T_BJRun (objtype *ob);
+void T_BJJump (objtype *ob);
+void T_BJDone (objtype *ob);
+void T_BJYell (objtype *ob);
+
+void T_DeathCam (objtype *ob);
+
+extern statetype s_bjrun1;
+extern statetype s_bjrun1s;
+extern statetype s_bjrun2;
+extern statetype s_bjrun3;
+extern statetype s_bjrun3s;
+extern statetype s_bjrun4;
+
+extern statetype s_bjjump1;
+extern statetype s_bjjump2;
+extern statetype s_bjjump3;
+extern statetype s_bjjump4;
+
+
+statetype s_bjrun1 = {false,SPR_BJ_W1,12,(statefunc)T_BJRun,NULL,&s_bjrun1s};
+statetype s_bjrun1s = {false,SPR_BJ_W1,3, NULL,NULL,&s_bjrun2};
+statetype s_bjrun2 = {false,SPR_BJ_W2,8,(statefunc)T_BJRun,NULL,&s_bjrun3};
+statetype s_bjrun3 = {false,SPR_BJ_W3,12,(statefunc)T_BJRun,NULL,&s_bjrun3s};
+statetype s_bjrun3s = {false,SPR_BJ_W3,3, NULL,NULL,&s_bjrun4};
+statetype s_bjrun4 = {false,SPR_BJ_W4,8,(statefunc)T_BJRun,NULL,&s_bjrun1};
+
+
+statetype s_bjjump1 = {false,SPR_BJ_JUMP1,14,(statefunc)T_BJJump,NULL,&s_bjjump2};
+statetype s_bjjump2 = {false,SPR_BJ_JUMP2,14,(statefunc)T_BJJump,(statefunc)T_BJYell,&s_bjjump3};
+statetype s_bjjump3 = {false,SPR_BJ_JUMP3,14,(statefunc)T_BJJump,NULL,&s_bjjump4};
+statetype s_bjjump4 = {false,SPR_BJ_JUMP4,300,NULL,(statefunc)T_BJDone,&s_bjjump4};
+
+
+statetype s_deathcam = {false,0,0,NULL,NULL,NULL};
+
+
+/*
+===============
+=
+= SpawnBJVictory
+=
+===============
+*/
+
+void SpawnBJVictory (void)
+{
+ SpawnNewObj (player->tilex,player->tiley+1,&s_bjrun1);
+ newobj->x = player->x;
+ newobj->y = player->y;
+ newobj->obclass = bjobj;
+ newobj->dir = north;
+ newobj->temp1 = 6; // tiles to run forward
+}
+
+
+
+/*
+===============
+=
+= T_BJRun
+=
+===============
+*/
+
+void T_BJRun (objtype *ob)
+{
+ int32_t move;
+
+ move = BJRUNSPEED*tics;
+
+ while (move)
+ {
+ if (move < ob->distance)
+ {
+ MoveObj (ob,move);
+ break;
+ }
+
+
+ ob->x = ((int32_t)ob->tilex<<TILESHIFT)+TILEGLOBAL/2;
+ ob->y = ((int32_t)ob->tiley<<TILESHIFT)+TILEGLOBAL/2;
+ move -= ob->distance;
+
+ SelectPathDir (ob);
+
+ if ( !(--ob->temp1) )
+ {
+ NewState (ob,&s_bjjump1);
+ return;
+ }
+ }
+}
+
+
+/*
+===============
+=
+= T_BJJump
+=
+===============
+*/
+
+void T_BJJump (objtype *ob)
+{
+ int32_t move;
+
+ move = BJJUMPSPEED*tics;
+ MoveObj (ob,move);
+}
+
+
+/*
+===============
+=
+= T_BJYell
+=
+===============
+*/
+
+void T_BJYell (objtype *ob)
+{
+ PlaySoundLocActor(YEAHSND,ob); // JAB
+}
+
+
+/*
+===============
+=
+= T_BJDone
+=
+===============
+*/
+
+void T_BJDone (objtype * ob)
+{
+ playstate = ex_victorious; // exit castle tile
+}
+
+
+
+//===========================================================================
+
+
+/*
+===============
+=
+= CheckPosition
+=
+===============
+*/
+
+boolean CheckPosition (objtype *ob)
+{
+ int x,y,xl,yl,xh,yh;
+ objtype *check;
+
+ xl = (ob->x-PLAYERSIZE) >> TILESHIFT;
+ yl = (ob->y-PLAYERSIZE) >> TILESHIFT;
+
+ xh = (ob->x+PLAYERSIZE) >> TILESHIFT;
+ yh = (ob->y+PLAYERSIZE) >> TILESHIFT;
+
+ //
+ // check for solid walls
+ //
+ for (y=yl;y<=yh;y++)
+ {
+ for (x=xl;x<=xh;x++)
+ {
+ check = actorat[x][y];
+ if (check && !ISPOINTER(check))
+ return false;
+ }
+ }
+
+ return true;
+}
+
+
+/*
+===============
+=
+= A_StartDeathCam
+=
+===============
+*/
+
+void A_StartDeathCam (objtype *ob)
+{
+ int32_t dx,dy;
+ float fangle;
+ int32_t xmove,ymove;
+ int32_t dist;
+
+ FinishPaletteShifts ();
+
+ VW_WaitVBL (100);
+
+ if (gamestate.victoryflag)
+ {
+ playstate = ex_victorious; // exit castle tile
+ return;
+ }
+
+ if(usedoublebuffering) VH_UpdateScreen();
+
+ gamestate.victoryflag = true;
+ unsigned fadeheight = viewsize != 21 ? screenHeight-scaleFactor*STATUSLINES : screenHeight;
+ VL_BarScaledCoord (0, 0, screenWidth, fadeheight, bordercol);
+ FizzleFade(screenBuffer, 0, 0, screenWidth, fadeheight, 70, false);
+
+ if (bordercol != VIEWCOLOR)
+ {
+ CA_CacheGrChunk (STARTFONT+1);
+ fontnumber = 1;
+ SETFONTCOLOR(15,bordercol);
+ PrintX = 68; PrintY = 45;
+ US_Print (STR_SEEAGAIN);
+ UNCACHEGRCHUNK(STARTFONT+1);
+ }
+ else
+ {
+ CacheLump(LEVELEND_LUMP_START,LEVELEND_LUMP_END);
+#ifdef JAPAN
+#ifndef JAPDEMO
+ CA_CacheScreen(C_LETSSEEPIC);
+#endif
+#else
+ Write(0,7,STR_SEEAGAIN);
+#endif
+ }
+
+ VW_UpdateScreen ();
+ if(usedoublebuffering) VH_UpdateScreen();
+
+ IN_UserInput(300);
+
+ //
+ // line angle up exactly
+ //
+ NewState (player,&s_deathcam);
+
+ player->x = gamestate.killx;
+ player->y = gamestate.killy;
+
+ dx = ob->x - player->x;
+ dy = player->y - ob->y;
+
+ fangle = (float) atan2((float) dy, (float) dx); // returns -pi to pi
+ if (fangle<0)
+ fangle = (float) (M_PI*2+fangle);
+
+ player->angle = (short) (fangle/(M_PI*2)*ANGLES);
+
+ //
+ // try to position as close as possible without being in a wall
+ //
+ dist = 0x14000l;
+ do
+ {
+ xmove = FixedMul(dist,costable[player->angle]);
+ ymove = -FixedMul(dist,sintable[player->angle]);
+
+ player->x = ob->x - xmove;
+ player->y = ob->y - ymove;
+ dist += 0x1000;
+
+ } while (!CheckPosition (player));
+ plux = (word)(player->x >> UNSIGNEDSHIFT); // scale to fit in unsigned
+ pluy = (word)(player->y >> UNSIGNEDSHIFT);
+ player->tilex = (word)(player->x >> TILESHIFT); // scale to tile values
+ player->tiley = (word)(player->y >> TILESHIFT);
+
+ //
+ // go back to the game
+ //
+
+ DrawPlayBorder ();
+
+ fizzlein = true;
+
+ switch (ob->obclass)
+ {
+#ifndef SPEAR
+ case schabbobj:
+ NewState (ob,&s_schabbdeathcam);
+ break;
+ case realhitlerobj:
+ NewState (ob,&s_hitlerdeathcam);
+ break;
+ case giftobj:
+ NewState (ob,&s_giftdeathcam);
+ break;
+ case fatobj:
+ NewState (ob,&s_fatdeathcam);
+ break;
+#endif
+ }
+}
+
+#endif
diff --git a/apps/plugins/sdl/progs/wolf3d/wl_agent.c b/apps/plugins/sdl/progs/wolf3d/wl_agent.c
new file mode 100644
index 0000000000..6b9b124a64
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/wl_agent.c
@@ -0,0 +1,1499 @@
+// WL_AGENT.C
+
+#include "wl_def.h"
+#pragma hdrstop
+
+/*
+=============================================================================
+
+ LOCAL CONSTANTS
+
+=============================================================================
+*/
+
+#define MAXMOUSETURN 10
+
+
+#define MOVESCALE 150l
+#define BACKMOVESCALE 100l
+#define ANGLESCALE 20
+
+/*
+=============================================================================
+
+ GLOBAL VARIABLES
+
+=============================================================================
+*/
+
+
+
+//
+// player state info
+//
+int32_t thrustspeed;
+
+word plux,pluy; // player coordinates scaled to unsigned
+
+short anglefrac;
+
+objtype *LastAttacker;
+
+/*
+=============================================================================
+
+ LOCAL VARIABLES
+
+=============================================================================
+*/
+
+
+void T_Player (objtype *ob);
+void T_Attack (objtype *ob);
+
+statetype s_player = {false,0,0,(statefunc) T_Player,NULL,NULL};
+statetype s_attack = {false,0,0,(statefunc) T_Attack,NULL,NULL};
+
+struct atkinf
+{
+ int8_t tics,attack,frame; // attack is 1 for gun, 2 for knife
+} attackinfo[4][14] =
+{
+ { {6,0,1},{6,2,2},{6,0,3},{6,-1,4} },
+ { {6,0,1},{6,1,2},{6,0,3},{6,-1,4} },
+ { {6,0,1},{6,1,2},{6,3,3},{6,-1,4} },
+ { {6,0,1},{6,1,2},{6,4,3},{6,-1,4} },
+};
+
+//===========================================================================
+
+//----------
+
+void Attack (void);
+void Use (void);
+void Search (objtype *ob);
+void SelectWeapon (void);
+void SelectItem (void);
+
+//----------
+
+boolean TryMove (objtype *ob);
+void T_Player (objtype *ob);
+
+void ClipMove (objtype *ob, int32_t xmove, int32_t ymove);
+
+/*
+=============================================================================
+
+ CONTROL STUFF
+
+=============================================================================
+*/
+
+/*
+======================
+=
+= CheckWeaponChange
+=
+= Keys 1-4 change weapons
+=
+======================
+*/
+
+void CheckWeaponChange (void)
+{
+ int newWeapon = -1;
+
+ if (!gamestate.ammo) // must use knife with no ammo
+ return;
+
+ if(buttonstate[bt_nextweapon] && !buttonheld[bt_nextweapon])
+ {
+ newWeapon = gamestate.weapon + 1;
+ if(newWeapon > gamestate.bestweapon) newWeapon = 0;
+ }
+ else if(buttonstate[bt_prevweapon] && !buttonheld[bt_prevweapon])
+ {
+ newWeapon = gamestate.weapon - 1;
+ if(newWeapon < 0) newWeapon = gamestate.bestweapon;
+ }
+ else
+ {
+ for(int i = wp_knife; i <= gamestate.bestweapon; i++)
+ {
+ if (buttonstate[bt_readyknife + i - wp_knife])
+ {
+ newWeapon = i;
+ break;
+ }
+ }
+ }
+
+ if(newWeapon != -1)
+ {
+ gamestate.weapon = gamestate.chosenweapon = (weapontype) newWeapon;
+ DrawWeapon();
+ }
+}
+
+
+/*
+=======================
+=
+= ControlMovement
+=
+= Takes controlx,controly, and buttonstate[bt_strafe]
+=
+= Changes the player's angle and position
+=
+= There is an angle hack because when going 70 fps, the roundoff becomes
+= significant
+=
+=======================
+*/
+
+void ControlMovement (objtype *ob)
+{
+ int32_t oldx,oldy;
+ int angle;
+ int angleunits;
+
+ thrustspeed = 0;
+
+ oldx = player->x;
+ oldy = player->y;
+
+ if(buttonstate[bt_strafeleft])
+ {
+ angle = ob->angle + ANGLES/4;
+ if(angle >= ANGLES)
+ angle -= ANGLES;
+ if(buttonstate[bt_run])
+ Thrust(angle, RUNMOVE * MOVESCALE * tics);
+ else
+ Thrust(angle, BASEMOVE * MOVESCALE * tics);
+ }
+
+ if(buttonstate[bt_straferight])
+ {
+ angle = ob->angle - ANGLES/4;
+ if(angle < 0)
+ angle += ANGLES;
+ if(buttonstate[bt_run])
+ Thrust(angle, RUNMOVE * MOVESCALE * tics );
+ else
+ Thrust(angle, BASEMOVE * MOVESCALE * tics);
+ }
+
+ //
+ // side to side move
+ //
+ if (buttonstate[bt_strafe])
+ {
+ //
+ // strafing
+ //
+ //
+ if (controlx > 0)
+ {
+ angle = ob->angle - ANGLES/4;
+ if (angle < 0)
+ angle += ANGLES;
+ Thrust (angle,controlx*MOVESCALE); // move to left
+ }
+ else if (controlx < 0)
+ {
+ angle = ob->angle + ANGLES/4;
+ if (angle >= ANGLES)
+ angle -= ANGLES;
+ Thrust (angle,-controlx*MOVESCALE); // move to right
+ }
+ }
+ else
+ {
+ //
+ // not strafing
+ //
+ anglefrac += controlx;
+ angleunits = anglefrac/ANGLESCALE;
+ anglefrac -= angleunits*ANGLESCALE;
+ ob->angle -= angleunits;
+
+ if (ob->angle >= ANGLES)
+ ob->angle -= ANGLES;
+ if (ob->angle < 0)
+ ob->angle += ANGLES;
+
+ }
+
+ //
+ // forward/backwards move
+ //
+ if (controly < 0)
+ {
+ Thrust (ob->angle,-controly*MOVESCALE); // move forwards
+ }
+ else if (controly > 0)
+ {
+ angle = ob->angle + ANGLES/2;
+ if (angle >= ANGLES)
+ angle -= ANGLES;
+ Thrust (angle,controly*BACKMOVESCALE); // move backwards
+ }
+
+ if (gamestate.victoryflag) // watching the BJ actor
+ return;
+}
+
+/*
+=============================================================================
+
+ STATUS WINDOW STUFF
+
+=============================================================================
+*/
+
+
+/*
+==================
+=
+= StatusDrawPic
+=
+==================
+*/
+
+void StatusDrawPic (unsigned x, unsigned y, unsigned picnum)
+{
+ LatchDrawPicScaledCoord ((screenWidth-scaleFactor*320)/16 + scaleFactor*x,
+ screenHeight-scaleFactor*(STATUSLINES-y),picnum);
+}
+
+void StatusDrawFace(unsigned picnum)
+{
+ StatusDrawPic(17, 4, picnum);
+
+#ifdef _arch_dreamcast
+ DC_StatusDrawLCD(picnum);
+#endif
+}
+
+
+/*
+==================
+=
+= DrawFace
+=
+==================
+*/
+
+void DrawFace (void)
+{
+ if(viewsize == 21 && ingame) return;
+ if (SD_SoundPlaying() == GETGATLINGSND)
+ StatusDrawFace(GOTGATLINGPIC);
+ else if (gamestate.health)
+ {
+#ifdef SPEAR
+ if (godmode)
+ StatusDrawFace(GODMODEFACE1PIC+gamestate.faceframe);
+ else
+#endif
+ StatusDrawFace(FACE1APIC+3*((100-gamestate.health)/16)+gamestate.faceframe);
+ }
+ else
+ {
+#ifndef SPEAR
+ if (LastAttacker && LastAttacker->obclass == needleobj)
+ StatusDrawFace(MUTANTBJPIC);
+ else
+#endif
+ StatusDrawFace(FACE8APIC);
+ }
+}
+
+/*
+===============
+=
+= UpdateFace
+=
+= Calls draw face if time to change
+=
+===============
+*/
+
+int facecount = 0;
+int facetimes = 0;
+
+void UpdateFace (void)
+{
+ // don't make demo depend on sound playback
+ if(demoplayback || demorecord)
+ {
+ if(facetimes > 0)
+ {
+ facetimes--;
+ return;
+ }
+ }
+ else if(SD_SoundPlaying() == GETGATLINGSND)
+ return;
+
+ facecount += tics;
+ if (facecount > US_RndT())
+ {
+ gamestate.faceframe = (US_RndT()>>6);
+ if (gamestate.faceframe==3)
+ gamestate.faceframe = 1;
+
+ facecount = 0;
+ DrawFace ();
+ }
+}
+
+
+
+/*
+===============
+=
+= LatchNumber
+=
+= right justifies and pads with blanks
+=
+===============
+*/
+
+static void LatchNumber (int x, int y, unsigned width, int32_t number)
+{
+ unsigned length,c;
+ char str[20];
+
+ ltoa (number,str,10);
+
+ length = (unsigned) strlen (str);
+
+ while (length<width)
+ {
+ StatusDrawPic (x,y,N_BLANKPIC);
+ x++;
+ width--;
+ }
+
+ c = length <= width ? 0 : length-width;
+
+ while (c<length)
+ {
+ StatusDrawPic (x,y,str[c]-'0'+ N_0PIC);
+ x++;
+ c++;
+ }
+}
+
+
+/*
+===============
+=
+= DrawHealth
+=
+===============
+*/
+
+void DrawHealth (void)
+{
+ if(viewsize == 21 && ingame) return;
+ LatchNumber (21,16,3,gamestate.health);
+}
+
+
+/*
+===============
+=
+= TakeDamage
+=
+===============
+*/
+
+void TakeDamage (int points,objtype *attacker)
+{
+ LastAttacker = attacker;
+
+ if (gamestate.victoryflag)
+ return;
+ if (gamestate.difficulty==gd_baby)
+ points>>=2;
+
+ if (!godmode)
+ gamestate.health -= points;
+
+ if (gamestate.health<=0)
+ {
+ gamestate.health = 0;
+ playstate = ex_died;
+ killerobj = attacker;
+ }
+
+ if (godmode != 2)
+ StartDamageFlash (points);
+
+ DrawHealth ();
+ DrawFace ();
+
+ //
+ // MAKE BJ'S EYES BUG IF MAJOR DAMAGE!
+ //
+#ifdef SPEAR
+ if (points > 30 && gamestate.health!=0 && !godmode && viewsize != 21)
+ {
+ StatusDrawFace(BJOUCHPIC);
+ facecount = 0;
+ }
+#endif
+}
+
+/*
+===============
+=
+= HealSelf
+=
+===============
+*/
+
+void HealSelf (int points)
+{
+ gamestate.health += points;
+ if (gamestate.health>100)
+ gamestate.health = 100;
+
+ DrawHealth ();
+ DrawFace ();
+}
+
+
+//===========================================================================
+
+
+/*
+===============
+=
+= DrawLevel
+=
+===============
+*/
+
+void DrawLevel (void)
+{
+ if(viewsize == 21 && ingame) return;
+#ifdef SPEAR
+ if (gamestate.mapon == 20)
+ LatchNumber (2,16,2,18);
+ else
+#endif
+ LatchNumber (2,16,2,gamestate.mapon+1);
+}
+
+//===========================================================================
+
+
+/*
+===============
+=
+= DrawLives
+=
+===============
+*/
+
+void DrawLives (void)
+{
+ if(viewsize == 21 && ingame) return;
+ LatchNumber (14,16,1,gamestate.lives);
+}
+
+
+/*
+===============
+=
+= GiveExtraMan
+=
+===============
+*/
+
+void GiveExtraMan (void)
+{
+ if (gamestate.lives<9)
+ gamestate.lives++;
+ DrawLives ();
+ SD_PlaySound (BONUS1UPSND);
+}
+
+//===========================================================================
+
+/*
+===============
+=
+= DrawScore
+=
+===============
+*/
+
+void DrawScore (void)
+{
+ if(viewsize == 21 && ingame) return;
+ LatchNumber (6,16,6,gamestate.score);
+}
+
+/*
+===============
+=
+= GivePoints
+=
+===============
+*/
+
+void GivePoints (int32_t points)
+{
+ gamestate.score += points;
+ while (gamestate.score >= gamestate.nextextra)
+ {
+ gamestate.nextextra += EXTRAPOINTS;
+ GiveExtraMan ();
+ }
+ DrawScore ();
+}
+
+//===========================================================================
+
+/*
+==================
+=
+= DrawWeapon
+=
+==================
+*/
+
+void DrawWeapon (void)
+{
+ if(viewsize == 21 && ingame) return;
+ StatusDrawPic (32,8,KNIFEPIC+gamestate.weapon);
+}
+
+
+/*
+==================
+=
+= DrawKeys
+=
+==================
+*/
+
+void DrawKeys (void)
+{
+ if(viewsize == 21 && ingame) return;
+ if (gamestate.keys & 1)
+ StatusDrawPic (30,4,GOLDKEYPIC);
+ else
+ StatusDrawPic (30,4,NOKEYPIC);
+
+ if (gamestate.keys & 2)
+ StatusDrawPic (30,20,SILVERKEYPIC);
+ else
+ StatusDrawPic (30,20,NOKEYPIC);
+}
+
+/*
+==================
+=
+= GiveWeapon
+=
+==================
+*/
+
+void GiveWeapon (int weapon)
+{
+ GiveAmmo (6);
+
+ if (gamestate.bestweapon<weapon)
+ gamestate.bestweapon = gamestate.weapon
+ = gamestate.chosenweapon = (weapontype) weapon;
+
+ DrawWeapon ();
+}
+
+//===========================================================================
+
+/*
+===============
+=
+= DrawAmmo
+=
+===============
+*/
+
+void DrawAmmo (void)
+{
+ if(viewsize == 21 && ingame) return;
+ LatchNumber (27,16,2,gamestate.ammo);
+}
+
+/*
+===============
+=
+= GiveAmmo
+=
+===============
+*/
+
+void GiveAmmo (int ammo)
+{
+ if (!gamestate.ammo) // knife was out
+ {
+ if (!gamestate.attackframe)
+ {
+ gamestate.weapon = gamestate.chosenweapon;
+ DrawWeapon ();
+ }
+ }
+ gamestate.ammo += ammo;
+ if (gamestate.ammo > 99)
+ gamestate.ammo = 99;
+ DrawAmmo ();
+}
+
+//===========================================================================
+
+/*
+==================
+=
+= GiveKey
+=
+==================
+*/
+
+void GiveKey (int key)
+{
+ gamestate.keys |= (1<<key);
+ DrawKeys ();
+}
+
+
+
+/*
+=============================================================================
+
+ MOVEMENT
+
+=============================================================================
+*/
+
+
+/*
+===================
+=
+= GetBonus
+=
+===================
+*/
+void GetBonus (statobj_t *check)
+{
+ switch (check->itemnumber)
+ {
+ case bo_firstaid:
+ if (gamestate.health == 100)
+ return;
+
+ SD_PlaySound (HEALTH2SND);
+ HealSelf (25);
+ break;
+
+ case bo_key1:
+ case bo_key2:
+ case bo_key3:
+ case bo_key4:
+ GiveKey (check->itemnumber - bo_key1);
+ SD_PlaySound (GETKEYSND);
+ break;
+
+ case bo_cross:
+ SD_PlaySound (BONUS1SND);
+ GivePoints (100);
+ gamestate.treasurecount++;
+ break;
+ case bo_chalice:
+ SD_PlaySound (BONUS2SND);
+ GivePoints (500);
+ gamestate.treasurecount++;
+ break;
+ case bo_bible:
+ SD_PlaySound (BONUS3SND);
+ GivePoints (1000);
+ gamestate.treasurecount++;
+ break;
+ case bo_crown:
+ SD_PlaySound (BONUS4SND);
+ GivePoints (5000);
+ gamestate.treasurecount++;
+ break;
+
+ case bo_clip:
+ if (gamestate.ammo == 99)
+ return;
+
+ SD_PlaySound (GETAMMOSND);
+ GiveAmmo (8);
+ break;
+ case bo_clip2:
+ if (gamestate.ammo == 99)
+ return;
+
+ SD_PlaySound (GETAMMOSND);
+ GiveAmmo (4);
+ break;
+
+#ifdef SPEAR
+ case bo_25clip:
+ if (gamestate.ammo == 99)
+ return;
+
+ SD_PlaySound (GETAMMOBOXSND);
+ GiveAmmo (25);
+ break;
+#endif
+
+ case bo_machinegun:
+ SD_PlaySound (GETMACHINESND);
+ GiveWeapon (wp_machinegun);
+ break;
+ case bo_chaingun:
+ SD_PlaySound (GETGATLINGSND);
+ facetimes = 38;
+ GiveWeapon (wp_chaingun);
+
+ if(viewsize != 21)
+ StatusDrawFace (GOTGATLINGPIC);
+ facecount = 0;
+ break;
+
+ case bo_fullheal:
+ SD_PlaySound (BONUS1UPSND);
+ HealSelf (99);
+ GiveAmmo (25);
+ GiveExtraMan ();
+ gamestate.treasurecount++;
+ break;
+
+ case bo_food:
+ if (gamestate.health == 100)
+ return;
+
+ SD_PlaySound (HEALTH1SND);
+ HealSelf (10);
+ break;
+
+ case bo_alpo:
+ if (gamestate.health == 100)
+ return;
+
+ SD_PlaySound (HEALTH1SND);
+ HealSelf (4);
+ break;
+
+ case bo_gibs:
+ if (gamestate.health >10)
+ return;
+
+ SD_PlaySound (SLURPIESND);
+ HealSelf (1);
+ break;
+
+#ifdef SPEAR
+ case bo_spear:
+ spearflag = true;
+ spearx = player->x;
+ speary = player->y;
+ spearangle = player->angle;
+ playstate = ex_completed;
+#endif
+ }
+
+ StartBonusFlash ();
+ check->shapenum = -1; // remove from list
+}
+
+/*
+===================
+=
+= TryMove
+=
+= returns true if move ok
+= debug: use pointers to optimize
+===================
+*/
+
+boolean TryMove (objtype *ob)
+{
+ int xl,yl,xh,yh,x,y;
+ objtype *check;
+ int32_t deltax,deltay;
+
+ xl = (ob->x-PLAYERSIZE) >>TILESHIFT;
+ yl = (ob->y-PLAYERSIZE) >>TILESHIFT;
+
+ xh = (ob->x+PLAYERSIZE) >>TILESHIFT;
+ yh = (ob->y+PLAYERSIZE) >>TILESHIFT;
+
+#define PUSHWALLMINDIST PLAYERSIZE
+
+ //
+ // check for solid walls
+ //
+ for (y=yl;y<=yh;y++)
+ {
+ for (x=xl;x<=xh;x++)
+ {
+ check = actorat[x][y];
+ if (check && !ISPOINTER(check))
+ {
+ if(tilemap[x][y]==64 && x==pwallx && y==pwally) // back of moving pushwall?
+ {
+ switch(pwalldir)
+ {
+ case di_north:
+ if(ob->y-PUSHWALLMINDIST<=(pwally<<TILESHIFT)+((63-pwallpos)<<10))
+ return false;
+ break;
+ case di_west:
+ if(ob->x-PUSHWALLMINDIST<=(pwallx<<TILESHIFT)+((63-pwallpos)<<10))
+ return false;
+ break;
+ case di_east:
+ if(ob->x+PUSHWALLMINDIST>=(pwallx<<TILESHIFT)+(pwallpos<<10))
+ return false;
+ break;
+ case di_south:
+ if(ob->y+PUSHWALLMINDIST>=(pwally<<TILESHIFT)+(pwallpos<<10))
+ return false;
+ break;
+ }
+ }
+ else return false;
+ }
+ }
+ }
+
+ //
+ // check for actors
+ //
+ if (yl>0)
+ yl--;
+ if (yh<MAPSIZE-1)
+ yh++;
+ if (xl>0)
+ xl--;
+ if (xh<MAPSIZE-1)
+ xh++;
+
+ for (y=yl;y<=yh;y++)
+ {
+ for (x=xl;x<=xh;x++)
+ {
+ check = actorat[x][y];
+ if (ISPOINTER(check) && check != player && (check->flags & FL_SHOOTABLE) )
+ {
+ deltax = ob->x - check->x;
+ if (deltax < -MINACTORDIST || deltax > MINACTORDIST)
+ continue;
+ deltay = ob->y - check->y;
+ if (deltay < -MINACTORDIST || deltay > MINACTORDIST)
+ continue;
+
+ return false;
+ }
+ }
+ }
+
+ return true;
+}
+
+
+/*
+===================
+=
+= ClipMove
+=
+===================
+*/
+
+void ClipMove (objtype *ob, int32_t xmove, int32_t ymove)
+{
+ int32_t basex,basey;
+
+ basex = ob->x;
+ basey = ob->y;
+
+ ob->x = basex+xmove;
+ ob->y = basey+ymove;
+ if (TryMove (ob))
+ return;
+
+#ifndef REMDEBUG
+ if (noclip && ob->x > 2*TILEGLOBAL && ob->y > 2*TILEGLOBAL
+ && ob->x < (((int32_t)(mapwidth-1))<<TILESHIFT)
+ && ob->y < (((int32_t)(mapheight-1))<<TILESHIFT) )
+ return; // walk through walls
+#endif
+
+ if (!SD_SoundPlaying())
+ SD_PlaySound (HITWALLSND);
+
+ ob->x = basex+xmove;
+ ob->y = basey;
+ if (TryMove (ob))
+ return;
+
+ ob->x = basex;
+ ob->y = basey+ymove;
+ if (TryMove (ob))
+ return;
+
+ ob->x = basex;
+ ob->y = basey;
+}
+
+//==========================================================================
+
+/*
+===================
+=
+= VictoryTile
+=
+===================
+*/
+
+void VictoryTile (void)
+{
+#ifndef SPEAR
+ SpawnBJVictory ();
+#endif
+
+ gamestate.victoryflag = true;
+}
+
+/*
+===================
+=
+= Thrust
+=
+===================
+*/
+
+// For player movement in demos exactly as in the original Wolf3D v1.4 source code
+static fixed FixedByFracOrig(fixed a, fixed b)
+{
+ int sign = 0;
+ if(b == 65536) b = 65535;
+ else if(b == -65536) b = 65535, sign = 1;
+ else if(b < 0) b = (-b), sign = 1;
+
+ if(a < 0)
+ {
+ a = -a;
+ sign = !sign;
+ }
+ fixed res = (fixed)(((int64_t) a * b) >> 16);
+ if(sign)
+ res = -res;
+ return res;
+}
+
+void Thrust (int angle, int32_t speed)
+{
+ int32_t xmove,ymove;
+ unsigned offset;
+
+
+ //
+ // ZERO FUNNY COUNTER IF MOVED!
+ //
+#ifdef SPEAR
+ if (speed)
+ funnyticount = 0;
+#endif
+
+ thrustspeed += speed;
+ //
+ // moving bounds speed
+ //
+ if (speed >= MINDIST*2)
+ speed = MINDIST*2-1;
+
+ xmove = DEMOCHOOSE_ORIG_SDL(
+ FixedByFracOrig(speed, costable[angle]),
+ FixedMul(speed,costable[angle]));
+ ymove = DEMOCHOOSE_ORIG_SDL(
+ -FixedByFracOrig(speed, sintable[angle]),
+ -FixedMul(speed,sintable[angle]));
+
+ ClipMove(player,xmove,ymove);
+
+ player->tilex = (short)(player->x >> TILESHIFT); // scale to tile values
+ player->tiley = (short)(player->y >> TILESHIFT);
+
+ offset = (player->tiley<<mapshift)+player->tilex;
+ player->areanumber = *(mapsegs[0] + offset) -AREATILE;
+
+ if (*(mapsegs[1] + offset) == EXITTILE)
+ VictoryTile ();
+}
+
+
+/*
+=============================================================================
+
+ ACTIONS
+
+=============================================================================
+*/
+
+
+/*
+===============
+=
+= Cmd_Fire
+=
+===============
+*/
+
+void Cmd_Fire (void)
+{
+ buttonheld[bt_attack] = true;
+
+ gamestate.weaponframe = 0;
+
+ player->state = &s_attack;
+
+ gamestate.attackframe = 0;
+ gamestate.attackcount =
+ attackinfo[gamestate.weapon][gamestate.attackframe].tics;
+ gamestate.weaponframe =
+ attackinfo[gamestate.weapon][gamestate.attackframe].frame;
+}
+
+//===========================================================================
+
+/*
+===============
+=
+= Cmd_Use
+=
+===============
+*/
+
+void Cmd_Use (void)
+{
+ int checkx,checky,doornum,dir;
+ boolean elevatorok;
+
+ //
+ // find which cardinal direction the player is facing
+ //
+ if (player->angle < ANGLES/8 || player->angle > 7*ANGLES/8)
+ {
+ checkx = player->tilex + 1;
+ checky = player->tiley;
+ dir = di_east;
+ elevatorok = true;
+ }
+ else if (player->angle < 3*ANGLES/8)
+ {
+ checkx = player->tilex;
+ checky = player->tiley-1;
+ dir = di_north;
+ elevatorok = false;
+ }
+ else if (player->angle < 5*ANGLES/8)
+ {
+ checkx = player->tilex - 1;
+ checky = player->tiley;
+ dir = di_west;
+ elevatorok = true;
+ }
+ else
+ {
+ checkx = player->tilex;
+ checky = player->tiley + 1;
+ dir = di_south;
+ elevatorok = false;
+ }
+
+ doornum = tilemap[checkx][checky];
+ if (*(mapsegs[1]+(checky<<mapshift)+checkx) == PUSHABLETILE)
+ {
+ //
+ // pushable wall
+ //
+
+ buttonheld[bt_use] = true;
+ buttonstate[bt_attack] = false;
+
+ PushWall (checkx,checky,dir);
+ return;
+ }
+ if (!buttonheld[bt_use] && doornum == ELEVATORTILE && elevatorok)
+ {
+ //
+ // use elevator
+ //
+ buttonheld[bt_use] = true;
+ buttonstate[bt_attack] = false;
+
+ tilemap[checkx][checky]++; // flip switch
+ if (*(mapsegs[0]+(player->tiley<<mapshift)+player->tilex) == ALTELEVATORTILE)
+ playstate = ex_secretlevel;
+ else
+ playstate = ex_completed;
+ SD_PlaySound (LEVELDONESND);
+ SD_WaitSoundDone();
+ }
+ else if (!buttonheld[bt_use] && doornum & 0x80)
+ {
+ buttonheld[bt_use] = true;
+ buttonstate[bt_attack] = false;
+ OperateDoor (doornum & ~0x80);
+ }
+ else
+ SD_PlaySound (DONOTHINGSND);
+}
+
+/*
+=============================================================================
+
+ PLAYER CONTROL
+
+=============================================================================
+*/
+
+
+
+/*
+===============
+=
+= SpawnPlayer
+=
+===============
+*/
+
+void SpawnPlayer (int tilex, int tiley, int dir)
+{
+ player->obclass = playerobj;
+ player->active = ac_yes;
+ player->tilex = tilex;
+ player->tiley = tiley;
+ player->areanumber = (byte) *(mapsegs[0]+(player->tiley<<mapshift)+player->tilex);
+ player->x = ((int32_t)tilex<<TILESHIFT)+TILEGLOBAL/2;
+ player->y = ((int32_t)tiley<<TILESHIFT)+TILEGLOBAL/2;
+ player->state = &s_player;
+ player->angle = (1-dir)*90;
+ if (player->angle<0)
+ player->angle += ANGLES;
+ player->flags = FL_NEVERMARK;
+ Thrust (0,0); // set some variables
+
+ InitAreas ();
+}
+
+
+//===========================================================================
+
+/*
+===============
+=
+= T_KnifeAttack
+=
+= Update player hands, and try to do damage when the proper frame is reached
+=
+===============
+*/
+
+void KnifeAttack (objtype *ob)
+{
+ objtype *check,*closest;
+ int32_t dist;
+
+ SD_PlaySound (ATKKNIFESND);
+ // actually fire
+ dist = 0x7fffffff;
+ closest = NULL;
+ for (check=ob->next; check; check=check->next)
+ {
+ if ( (check->flags & FL_SHOOTABLE) && (check->flags & FL_VISABLE)
+ && abs(check->viewx-centerx) < shootdelta)
+ {
+ if (check->transx < dist)
+ {
+ dist = check->transx;
+ closest = check;
+ }
+ }
+ }
+
+ if (!closest || dist > 0x18000l)
+ {
+ // missed
+ return;
+ }
+
+ // hit something
+ DamageActor (closest,US_RndT() >> 4);
+}
+
+
+
+void GunAttack (objtype *ob)
+{
+ objtype *check,*closest,*oldclosest;
+ int damage;
+ int dx,dy,dist;
+ int32_t viewdist;
+
+ switch (gamestate.weapon)
+ {
+ case wp_pistol:
+ SD_PlaySound (ATKPISTOLSND);
+ break;
+ case wp_machinegun:
+ SD_PlaySound (ATKMACHINEGUNSND);
+ break;
+ case wp_chaingun:
+ SD_PlaySound (ATKGATLINGSND);
+ break;
+ }
+
+ madenoise = true;
+
+ //
+ // find potential targets
+ //
+ viewdist = 0x7fffffffl;
+ closest = NULL;
+
+ while (1)
+ {
+ oldclosest = closest;
+
+ for (check=ob->next ; check ; check=check->next)
+ {
+ if ((check->flags & FL_SHOOTABLE) && (check->flags & FL_VISABLE)
+ && abs(check->viewx-centerx) < shootdelta)
+ {
+ if (check->transx < viewdist)
+ {
+ viewdist = check->transx;
+ closest = check;
+ }
+ }
+ }
+
+ if (closest == oldclosest)
+ return; // no more targets, all missed
+
+ //
+ // trace a line from player to enemey
+ //
+ if (CheckLine(closest))
+ break;
+ }
+
+ //
+ // hit something
+ //
+ dx = ABS(closest->tilex - player->tilex);
+ dy = ABS(closest->tiley - player->tiley);
+ dist = dx>dy ? dx:dy;
+ if (dist<2)
+ damage = US_RndT() / 4;
+ else if (dist<4)
+ damage = US_RndT() / 6;
+ else
+ {
+ if ( (US_RndT() / 12) < dist) // missed
+ return;
+ damage = US_RndT() / 6;
+ }
+ DamageActor (closest,damage);
+}
+
+//===========================================================================
+
+/*
+===============
+=
+= VictorySpin
+=
+===============
+*/
+
+void VictorySpin (void)
+{
+ int32_t desty;
+
+ if (player->angle > 270)
+ {
+ player->angle -= (short)(tics * 3);
+ if (player->angle < 270)
+ player->angle = 270;
+ }
+ else if (player->angle < 270)
+ {
+ player->angle += (short)(tics * 3);
+ if (player->angle > 270)
+ player->angle = 270;
+ }
+
+ desty = (((int32_t)player->tiley-5)<<TILESHIFT)-0x3000;
+
+ if (player->y > desty)
+ {
+ player->y -= tics*4096;
+ if (player->y < desty)
+ player->y = desty;
+ }
+}
+
+
+//===========================================================================
+
+/*
+===============
+=
+= T_Attack
+=
+===============
+*/
+
+void T_Attack (objtype *ob)
+{
+ struct atkinf *cur;
+
+ UpdateFace ();
+
+ if (gamestate.victoryflag) // watching the BJ actor
+ {
+ VictorySpin ();
+ return;
+ }
+
+ if ( buttonstate[bt_use] && !buttonheld[bt_use] )
+ buttonstate[bt_use] = false;
+
+ if ( buttonstate[bt_attack] && !buttonheld[bt_attack])
+ buttonstate[bt_attack] = false;
+
+ ControlMovement (ob);
+ if (gamestate.victoryflag) // watching the BJ actor
+ return;
+
+ plux = (word) (player->x >> UNSIGNEDSHIFT); // scale to fit in unsigned
+ pluy = (word) (player->y >> UNSIGNEDSHIFT);
+ player->tilex = (short)(player->x >> TILESHIFT); // scale to tile values
+ player->tiley = (short)(player->y >> TILESHIFT);
+
+ //
+ // change frame and fire
+ //
+ gamestate.attackcount -= (short) tics;
+ while (gamestate.attackcount <= 0)
+ {
+ cur = &attackinfo[gamestate.weapon][gamestate.attackframe];
+ switch (cur->attack)
+ {
+ case -1:
+ ob->state = &s_player;
+ if (!gamestate.ammo)
+ {
+ gamestate.weapon = wp_knife;
+ DrawWeapon ();
+ }
+ else
+ {
+ if (gamestate.weapon != gamestate.chosenweapon)
+ {
+ gamestate.weapon = gamestate.chosenweapon;
+ DrawWeapon ();
+ }
+ }
+ gamestate.attackframe = gamestate.weaponframe = 0;
+ return;
+
+ case 4:
+ if (!gamestate.ammo)
+ break;
+ if (buttonstate[bt_attack])
+ gamestate.attackframe -= 2;
+ case 1:
+ if (!gamestate.ammo)
+ { // can only happen with chain gun
+ gamestate.attackframe++;
+ break;
+ }
+ GunAttack (ob);
+ if (!ammocheat)
+ gamestate.ammo--;
+ DrawAmmo ();
+ break;
+
+ case 2:
+ KnifeAttack (ob);
+ break;
+
+ case 3:
+ if (gamestate.ammo && buttonstate[bt_attack])
+ gamestate.attackframe -= 2;
+ break;
+ }
+
+ gamestate.attackcount += cur->tics;
+ gamestate.attackframe++;
+ gamestate.weaponframe =
+ attackinfo[gamestate.weapon][gamestate.attackframe].frame;
+ }
+}
+
+
+
+//===========================================================================
+
+/*
+===============
+=
+= T_Player
+=
+===============
+*/
+
+static int last_use = 0;
+
+void T_Player (objtype *ob)
+{
+ if (gamestate.victoryflag) // watching the BJ actor
+ {
+ VictorySpin ();
+ return;
+ }
+
+ UpdateFace ();
+ CheckWeaponChange ();
+
+ // weird
+ if( buttonstate[bt_attack] )
+ Cmd_Use ();
+
+ if ( buttonstate[bt_attack] && !buttonheld[bt_attack])
+ Cmd_Fire ();
+
+ ControlMovement (ob);
+ if (gamestate.victoryflag) // watching the BJ actor
+ return;
+
+ plux = (word) (player->x >> UNSIGNEDSHIFT); // scale to fit in unsigned
+ pluy = (word) (player->y >> UNSIGNEDSHIFT);
+ player->tilex = (short)(player->x >> TILESHIFT); // scale to tile values
+ player->tiley = (short)(player->y >> TILESHIFT);
+}
diff --git a/apps/plugins/sdl/progs/wolf3d/wl_atmos.c b/apps/plugins/sdl/progs/wolf3d/wl_atmos.c
new file mode 100644
index 0000000000..f11336e77f
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/wl_atmos.c
@@ -0,0 +1,229 @@
+#include "version.h"
+
+#if defined(USE_STARSKY) || defined(USE_RAIN) || defined(USE_SNOW)
+
+#include "wl_def.h"
+
+#if defined(USE_RAIN) || defined(USE_SNOW)
+ uint32_t rainpos = 0;
+#endif
+
+typedef struct {
+ int32_t x, y, z;
+} point3d_t;
+
+#define MAXPOINTS 400
+point3d_t points[MAXPOINTS];
+
+byte moon[100]={
+ 0, 0, 27, 18, 15, 16, 19, 29, 0, 0,
+ 0, 22, 16, 15, 15, 16, 16, 18, 24, 0,
+ 27, 17, 15, 17, 16, 16, 17, 17, 18, 29,
+ 18, 15, 15, 15, 16, 16, 17, 17, 18, 20,
+ 16, 15, 15, 16, 16, 17, 17, 18, 19, 21,
+ 16, 15, 17, 20, 18, 17, 18, 18, 20, 22,
+ 19, 16, 18, 19, 17, 17, 18, 19, 22, 24,
+ 28, 19, 17, 17, 17, 18, 19, 21, 25, 31,
+ 0, 23, 18, 19, 18, 20, 22, 24, 28, 0,
+ 0, 0, 28, 21, 20, 22, 28, 30, 0, 0 };
+
+void Init3DPoints()
+{
+ int hvheight = viewheight >> 1;
+ for(int i = 0; i < MAXPOINTS; i++)
+ {
+ point3d_t *pt = &points[i];
+ pt->x = 16384 - (rand() & 32767);
+ pt->z = 16384 - (rand() & 32767);
+ float len = sqrt((float)pt->x * pt->x + (float)pt->z * pt->z);
+ int j=50;
+ do
+ {
+ pt->y = 1024 + (rand() & 8191);
+ j--;
+ }
+ while(j > 0 && (float)pt->y * 256.F / len >= hvheight);
+ }
+}
+
+#endif
+
+#ifdef USE_STARSKY
+
+void DrawStarSky(byte *vbuf, uint32_t vbufPitch)
+{
+ int hvheight = viewheight >> 1;
+ int hvwidth = viewwidth >> 1;
+
+ byte *ptr = vbuf;
+ int i;
+ for(i = 0; i < hvheight; i++, ptr += vbufPitch)
+ memset(ptr, 0, viewwidth);
+
+ for(i = 0; i < MAXPOINTS; i++)
+ {
+ point3d_t *pt = &points[i];
+ int32_t x = pt->x * viewcos + pt->z * viewsin;
+ int32_t y = pt->y << 16;
+ int32_t z = (pt->z * viewcos - pt->x * viewsin) >> 8;
+ if(z <= 0) continue;
+ int shade = z >> 18;
+ if(shade > 15) continue;
+ int32_t xx = x / z + hvwidth;
+ int32_t yy = hvheight - y / z;
+ if(xx >= 0 && xx < viewwidth && yy >= 0 && yy < hvheight)
+ vbuf[yy * vbufPitch + xx] = shade + 15;
+ }
+
+ int32_t x = 16384 * viewcos + 16384 * viewsin;
+ int32_t z = (16384 * viewcos - 16384 * viewsin) >> 8;
+ if(z <= 0) return;
+ int32_t xx = x / z + hvwidth;
+ int32_t yy = hvheight - ((hvheight - (hvheight >> 3)) << 22) / z;
+ if(xx > -10 && xx < viewwidth)
+ {
+ int stopx = 10, starty = 0, stopy = 10;
+ i = 0;
+ if(xx < 0) i = -xx;
+ if(xx > viewwidth - 11) stopx = viewwidth - xx;
+ if(yy < 0) startj = -yy;
+ if(yy > viewheight - 11) stopy = viewheight - yy;
+ for(; i < stopx; i++)
+ for(int j = starty; j < stopy; j++)
+ vbuf[(yy + j) * vbufPitch + xx + i] = moon[j * 10 + i];
+ }
+}
+
+#endif
+
+#ifdef USE_RAIN
+
+void DrawRain(byte *vbuf, uint32_t vbufPitch)
+{
+#if defined(USE_FLOORCEILINGTEX) && defined(FIXRAINSNOWLEAKS)
+ fixed dist; // distance to row projection
+ fixed tex_step; // global step per one screen pixel
+ fixed gu, gv, floorx, floory; // global texture coordinates
+#endif
+
+ fixed px = (player->y + FixedMul(0x7900, viewsin)) >> 6;
+ fixed pz = (player->x - FixedMul(0x7900, viewcos)) >> 6;
+ int32_t ax, az, x, y, z, xx, yy, height, actheight;
+ int shade;
+ int hvheight = viewheight >> 1;
+ int hvwidth = viewwidth >> 1;
+
+ rainpos -= tics * 900;
+ for(int i = 0; i < MAXPOINTS; i++)
+ {
+ point3d_t *pt = &points[i];
+ ax = pt->x + px;
+ ax = 0x1fff - (ax & 0x3fff);
+ az = pt->z + pz;
+ az = 0x1fff - (az & 0x3fff);
+ x = ax * viewcos + az * viewsin;
+ y = -(heightnumerator << 7) + ((((pt->y << 6) + rainpos) & 0x0ffff) << 11);
+ z = (az * viewcos - ax * viewsin) >> 8;
+ if(z <= 0) continue;
+ shade = z >> 17;
+ if(shade > 13) continue;
+ xx = x / z + hvwidth;
+ if(xx < 0 || xx >= viewwidth) continue;
+ actheight = y / z;
+ yy = hvheight - actheight;
+ height = (heightnumerator << 10) / z;
+ if(actheight < 0) actheight = -actheight;
+ if(actheight < (wallheight[xx] >> 3) && height < wallheight[xx]) continue;
+
+ if(xx >= 0 && xx < viewwidth && yy > 0 && yy < viewheight)
+ {
+#if defined(USE_FLOORCEILINGTEX) && defined(FIXRAINSNOWLEAKS)
+ // Find the rain's tile coordinate
+ // NOTE: This sometimes goes over the map edges.
+ dist = ((heightnumerator / ((height >> 3) + 1)) << 5);
+ gu = viewx + FixedMul(dist, viewcos);
+ gv = -viewy + FixedMul(dist, viewsin);
+ floorx = ( gu >> TILESHIFT ) & 63;
+ floory = (-(gv >> TILESHIFT) - 1) & 63;
+
+ // Is there a ceiling tile?
+ if(MAPSPOT(floorx, floory, 2) >> 8) continue;
+#endif
+
+ vbuf[yy * vbufPitch + xx] = shade+15;
+ vbuf[(yy - 1) * vbufPitch + xx] = shade+16;
+ if(yy > 2)
+ vbuf[(yy - 2) * vbufPitch + xx] = shade+17;
+ }
+ }
+}
+
+#endif
+
+#ifdef USE_SNOW
+
+void DrawSnow(byte *vbuf, uint32_t vbufPitch)
+{
+#if defined(USE_FLOORCEILINGTEX) && defined(FIXRAINSNOWLEAKS)
+ fixed dist; // distance to row projection
+ fixed tex_step; // global step per one screen pixel
+ fixed gu, gv, floorx, floory; // global texture coordinates
+#endif
+
+ fixed px = (player->y + FixedMul(0x7900, viewsin)) >> 6;
+ fixed pz = (player->x - FixedMul(0x7900, viewcos)) >> 6;
+ int32_t ax, az, x, y, z, xx, yy, height, actheight;
+ int shade;
+ int hvheight = viewheight >> 1;
+ int hvwidth = viewwidth >> 1;
+
+ rainpos -= tics * 256;
+ for(int i = 0; i < MAXPOINTS; i++)
+ {
+ point3d_t *pt = &points[i];
+ ax = pt->x + px;
+ ax = 0x1fff - (ax & 0x3fff);
+ az = pt->z + pz;
+ az = 0x1fff - (az & 0x3fff);
+ x = ax * viewcos + az * viewsin;
+ y = -(heightnumerator << 7) + ((((pt->y << 6) + rainpos) & 0x0ffff) << 11);
+ z = (az * viewcos - ax * viewsin) >> 8;
+ if(z <= 0) continue;
+ shade = z >> 17;
+ if(shade > 13) continue;
+ xx = x / z + hvwidth;
+ if(xx < 0 || xx >= viewwidth) continue;
+ actheight = y / z;
+ yy = hvheight - actheight;
+ height = (heightnumerator << 10) / z;
+ if(actheight < 0) actheight = -actheight;
+ if(actheight < (wallheight[xx] >> 3) && height < wallheight[xx]) continue;
+ if(xx > 0 && xx < viewwidth && yy > 0 && yy < viewheight)
+ {
+#if defined(USE_FLOORCEILINGTEX) && defined(FIXRAINSNOWLEAKS)
+ // Find the snow's tile coordinate
+ // NOTE: This sometimes goes over the map edges.
+ dist = ((heightnumerator / ((height >> 3) + 1)) << 5);
+ gu = viewx + FixedMul(dist, viewcos);
+ gv = -viewy + FixedMul(dist, viewsin);
+ floorx = ( gu >> TILESHIFT ) & 63;
+ floory = (-(gv >> TILESHIFT) - 1) & 63;
+
+ // Is there a ceiling tile?
+ if(MAPSPOT(floorx, floory, 2) >> 8) continue;
+#endif
+
+ if(shade < 10)
+ {
+ vbuf[yy * vbufPitch + xx] = shade+17;
+ vbuf[yy * vbufPitch + xx - 1] = shade+16;
+ vbuf[(yy - 1) * vbufPitch + xx] = shade+16;
+ vbuf[(yy - 1) * vbufPitch + xx - 1] = shade+15;
+ }
+ else
+ vbuf[yy * vbufPitch + xx] = shade+15;
+ }
+ }
+}
+
+#endif
diff --git a/apps/plugins/sdl/progs/wolf3d/wl_atmos.h b/apps/plugins/sdl/progs/wolf3d/wl_atmos.h
new file mode 100644
index 0000000000..59ef74d3a2
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/wl_atmos.h
@@ -0,0 +1,20 @@
+#ifndef _WL_ATMOS_H_
+#define _WL_ATMOS_H_
+
+#if defined(USE_STARSKY) || defined(USE_RAIN) || defined(USE_SNOW)
+ void Init3DPoints();
+#endif
+
+#ifdef USE_STARSKY
+ void DrawStarSky(byte *vbuf, uint32_t vbufPitch);
+#endif
+
+#ifdef USE_RAIN
+ void DrawRain(byte *vbuf, uint32_t vbufPitch);
+#endif
+
+#ifdef USE_SNOW
+ void DrawSnow(byte *vbuf, uint32_t vbufPitch);
+#endif
+
+#endif
diff --git a/apps/plugins/sdl/progs/wolf3d/wl_cloudsky.c b/apps/plugins/sdl/progs/wolf3d/wl_cloudsky.c
new file mode 100644
index 0000000000..a2f58cd8a6
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/wl_cloudsky.c
@@ -0,0 +1,259 @@
+#include "version.h"
+
+#ifdef USE_CLOUDSKY
+
+#include "wl_def.h"
+#include "wl_cloudsky.h"
+
+// Each colormap defines a number of colors which should be mapped from
+// the skytable. The according colormapentry_t array defines how these colors should
+// be mapped to the wolfenstein palette. The first int of each entry defines
+// how many colors are grouped to this entry and the absolute value of the
+// second int sets the starting palette index for this pair. If this value is
+// negative the index will be decremented for every color, if it's positive
+// it will be incremented.
+//
+// Example colormap:
+// colormapentry_t colmapents_1[] = { { 6, -10 }, { 2, 40 } };
+// colormap_t colorMaps[] = {
+// { 8, colmapents_1 }
+// };
+//
+// The colormap 0 consists of 8 colors. The first color group consists of 6
+// colors and starts descending at palette index 10: 10, 9, 8, 7, 6, 5
+// The second color group consists of 2 colors and starts ascending at
+// index 40: 40, 41
+// There's no other color group because all colors of this colormap are
+// already used (6+2=8)
+//
+// Warning: Always make sure that the sum of the amount of the colors in all
+// color groups is the number of colors used for your colormap!
+
+colormapentry_t colmapents_1[] = { { 16, -31 }, { 16, 136 } };
+colormapentry_t colmapents_2[] = { { 16, -31 } };
+
+colormap_t colorMaps[] = {
+ { 32, colmapents_1 },
+ { 16, colmapents_2 }
+};
+
+const int numColorMaps = lengthof(colorMaps);
+
+// The sky definitions which can be selected as defined by GetCloudSkyDefID() in wl_def.h
+// You can use <TAB>+Z in debug mode to find out suitable values for seed and colorMapIndex
+// Each entry consists of seed, speed, angle and colorMapIndex
+cloudsky_t cloudSkys[] = {
+ { 626, 800, 20, 0 },
+ { 1234, 650, 60, 1 },
+ { 0, 700, 120, 0 },
+ { 0, 0, 0, 0 },
+ { 11243, 750, 310, 0 },
+ { 32141, 750, 87, 0 },
+ { 12124, 750, 64, 0 },
+ { 55543, 500, 240, 0 },
+ { 65535, 200, 54, 1 },
+ { 4, 1200, 290, 0 },
+};
+
+byte skyc[65536L];
+
+long cloudx = 0, cloudy = 0;
+cloudsky_t *curSky = NULL;
+
+#ifdef USE_FEATUREFLAGS
+
+// The lower left tile of every map determines the used cloud sky definition from cloudSkys.
+static int GetCloudSkyDefID()
+{
+ int skyID = ffDataBottomLeft;
+ assert(skyID >= 0 && skyID < lengthof(cloudSkys));
+ return skyID;
+}
+
+#else
+
+static int GetCloudSkyDefID()
+{
+ int skyID;
+ switch(gamestate.episode * 10 + mapon)
+ {
+ case 0: skyID = 0; break;
+ case 1: skyID = 1; break;
+ case 2: skyID = 2; break;
+ case 3: skyID = 3; break;
+ case 4: skyID = 4; break;
+ case 5: skyID = 5; break;
+ case 6: skyID = 6; break;
+ case 7: skyID = 7; break;
+ case 8: skyID = 8; break;
+ case 9: skyID = 9; break;
+ default: skyID = 9; break;
+ }
+ assert(skyID >= 0 && skyID < lengthof(cloudSkys));
+ return skyID;
+}
+
+#endif
+
+void SplitS(unsigned size,unsigned x1,unsigned y1,unsigned x2,unsigned y2)
+{
+ if(size==1) return;
+ if(!skyc[((x1+size/2)*256+y1)])
+ {
+ skyc[((x1+size/2)*256+y1)]=(byte)(((int)skyc[(x1*256+y1)]
+ +(int)skyc[((x2&0xff)*256+y1)])/2)+rand()%(size*2)-size;
+ if(!skyc[((x1+size/2)*256+y1)]) skyc[((x1+size/2)*256+y1)]=1;
+ }
+ if(!skyc[((x1+size/2)*256+(y2&0xff))])
+ {
+ skyc[((x1+size/2)*256+(y2&0xff))]=(byte)(((int)skyc[(x1*256+(y2&0xff))]
+ +(int)skyc[((x2&0xff)*256+(y2&0xff))])/2)+rand()%(size*2)-size;
+ if(!skyc[((x1+size/2)*256+(y2&0xff))])
+ skyc[((x1+size/2)*256+(y2&0xff))]=1;
+ }
+ if(!skyc[(x1*256+y1+size/2)])
+ {
+ skyc[(x1*256+y1+size/2)]=(byte)(((int)skyc[(x1*256+y1)]
+ +(int)skyc[(x1*256+(y2&0xff))])/2)+rand()%(size*2)-size;
+ if(!skyc[(x1*256+y1+size/2)]) skyc[(x1*256+y1+size/2)]=1;
+ }
+ if(!skyc[((x2&0xff)*256+y1+size/2)])
+ {
+ skyc[((x2&0xff)*256+y1+size/2)]=(byte)(((int)skyc[((x2&0xff)*256+y1)]
+ +(int)skyc[((x2&0xff)*256+(y2&0xff))])/2)+rand()%(size*2)-size;
+ if(!skyc[((x2&0xff)*256+y1+size/2)]) skyc[((x2&0xff)*256+y1+size/2)]=1;
+ }
+
+ skyc[((x1+size/2)*256+y1+size/2)]=(byte)(((int)skyc[(x1*256+y1)]
+ +(int)skyc[((x2&0xff)*256+y1)]+(int)skyc[(x1*256+(y2&0xff))]
+ +(int)skyc[((x2&0xff)*256+(y2&0xff))])/4)+rand()%(size*2)-size;
+
+ SplitS(size/2,x1,y1+size/2,x1+size/2,y2);
+ SplitS(size/2,x1+size/2,y1,x2,y1+size/2);
+ SplitS(size/2,x1+size/2,y1+size/2,x2,y2);
+ SplitS(size/2,x1,y1,x1+size/2,y1+size/2);
+}
+
+void InitSky()
+{
+ unsigned cloudskyid = GetCloudSkyDefID();
+ if(cloudskyid >= lengthof(cloudSkys))
+ Quit("Illegal cloud sky id: %u", cloudskyid);
+ curSky = &cloudSkys[cloudskyid];
+
+ memset(skyc, 0, sizeof(skyc));
+ // funny water texture if used instead of memset ;D
+ // for(int i = 0; i < 65536; i++)
+ // skyc[i] = rand() % 32 * 8;
+
+ srand(curSky->seed);
+ skyc[0] = rand() % 256;
+ SplitS(256, 0, 0, 256, 256);
+
+ // Smooth the clouds a bit
+ for(int k = 0; k < 2; k++)
+ {
+ for(int i = 0; i < 256; i++)
+ {
+ for(int j = 0; j < 256; j++)
+ {
+ int32_t val = -skyc[j * 256 + i];
+ for(int m = 0; m < 3; m++)
+ {
+ for(int n = 0; n < 3; n++)
+ {
+ val += skyc[((j + n - 1) & 0xff) * 256 + ((i + m - 1) & 0xff)];
+ }
+ }
+ skyc[j * 256 + i] = (byte)(val >> 3);
+ }
+ }
+ }
+
+ // the following commented line could be useful, if you're trying to
+ // create a new color map. This will display your current color map
+ // in one (of course repeating) stripe of the sky
+
+ // for(int i = 0; i < 256; i++)
+ // skyc[i] = skyc[i + 256] = skyc[i + 512] = i;
+
+ if(curSky->colorMapIndex >= lengthof(colorMaps))
+ Quit("Illegal colorMapIndex for cloud sky def %u: %u", cloudskyid, curSky->colorMapIndex);
+
+ colormap_t *curMap = &colorMaps[curSky->colorMapIndex];
+ int numColors = curMap->numColors;
+ byte colormap[256];
+ colormapentry_t *curEntry = curMap->entries;
+ for(int calcedCols = 0; calcedCols < numColors; curEntry++)
+ {
+ if(curEntry->startAndDir < 0)
+ {
+ for(int i = 0, ind = -curEntry->startAndDir; i < curEntry->length; i++, ind--)
+ colormap[calcedCols++] = ind;
+ }
+ else
+ {
+ for(int i = 0, ind = curEntry->startAndDir; i < curEntry->length; i++, ind++)
+ colormap[calcedCols++] = ind;
+ }
+ }
+
+ for(int i = 0; i < 256; i++)
+ {
+ for(int j = 0; j < 256; j++)
+ {
+ skyc[i * 256 + j] = colormap[skyc[i * 256 + j] * numColors / 256];
+ }
+ }
+}
+
+// Based on Textured Floor and Ceiling by DarkOne
+void DrawClouds(byte *vbuf, unsigned vbufPitch, int min_wallheight)
+{
+ // Move clouds
+ fixed moveDist = tics * curSky->speed;
+ cloudx += FixedMul(moveDist,sintable[curSky->angle]);
+ cloudy -= FixedMul(moveDist,costable[curSky->angle]);
+
+ // Draw them
+ int y0, halfheight;
+ unsigned top_offset0;
+ fixed dist; // distance to row projection
+ fixed tex_step; // global step per one screen pixel
+ fixed gu, gv, du, dv; // global texture coordinates
+ int u, v; // local texture coordinates
+
+ // ------ * prepare * --------
+ halfheight = viewheight >> 1;
+ y0 = min_wallheight >> 3; // starting y value
+ if(y0 > halfheight)
+ return; // view obscured by walls
+ if(!y0) y0 = 1; // don't let division by zero
+ top_offset0 = vbufPitch * (halfheight - y0 - 1);
+
+ // draw horizontal lines
+ for(int y = y0, top_offset = top_offset0; y < halfheight; y++, top_offset -= vbufPitch)
+ {
+ dist = (heightnumerator / y) << 8;
+ gu = viewx + FixedMul(dist, viewcos) + cloudx;
+ gv = -viewy + FixedMul(dist, viewsin) + cloudy;
+ tex_step = (dist << 8) / viewwidth / 175;
+ du = FixedMul(tex_step, viewsin);
+ dv = -FixedMul(tex_step, viewcos);
+ gu -= (viewwidth >> 1)*du;
+ gv -= (viewwidth >> 1)*dv; // starting point (leftmost)
+ for(int x = 0, top_add = top_offset; x < viewwidth; x++, top_add++)
+ {
+ if(wallheight[x] >> 3 <= y)
+ {
+ u = (gu >> 13) & 255;
+ v = (gv >> 13) & 255;
+ vbuf[top_add] = skyc[((255 - u) << 8) + 255 - v];
+ }
+ gu += du;
+ gv += dv;
+ }
+ }
+}
+
+#endif
diff --git a/apps/plugins/sdl/progs/wolf3d/wl_cloudsky.h b/apps/plugins/sdl/progs/wolf3d/wl_cloudsky.h
new file mode 100644
index 0000000000..ad0316d643
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/wl_cloudsky.h
@@ -0,0 +1,46 @@
+#if defined(USE_CLOUDSKY) && !defined(_WL_CLOUDSKY_H_)
+#define _WL_CLOUDSKY_H_
+
+typedef struct
+{
+ int length;
+ int startAndDir;
+} colormapentry_t;
+
+typedef struct
+{
+ int numColors;
+ colormapentry_t *entries;
+} colormap_t;
+
+typedef struct
+{
+ // The seed defines the look of the sky and every value (0-4294967295)
+ // describes an unique sky. You can play around with these inside the game
+ // when pressing <TAB>+Z in debug mode. There you'll be able to change the
+ // active seed to find out a value, which is suitable for your needs.
+ uint32_t seed;
+
+ // The speed defines how fast the clouds will move (0-65535)
+ uint32_t speed;
+
+ // The angle defines the move direction (0-359)
+ uint32_t angle;
+
+ // An index selecting the color map to be used for this sky definition.
+ // This value can also be chosen with <TAB>+Z
+ uint32_t colorMapIndex;
+} cloudsky_t;
+
+extern cloudsky_t *curSky;
+extern colormap_t colorMaps[];
+extern const int numColorMaps;
+
+void InitSky();
+void DrawClouds(byte *vbuf, unsigned vbufPitch, int min_wallheight);
+
+#ifndef USE_FEATUREFLAGS
+int GetCloudSkyDefID();
+#endif
+
+#endif
diff --git a/apps/plugins/sdl/progs/wolf3d/wl_debug.c b/apps/plugins/sdl/progs/wolf3d/wl_debug.c
new file mode 100644
index 0000000000..bfa651e87c
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/wl_debug.c
@@ -0,0 +1,863 @@
+// WL_DEBUG.C
+
+#include "wl_def.h"
+#pragma hdrstop
+
+#ifdef USE_CLOUDSKY
+#include "wl_cloudsky.h"
+#endif
+
+/*
+=============================================================================
+
+ LOCAL CONSTANTS
+
+=============================================================================
+*/
+
+#define VIEWTILEX (viewwidth/16)
+#define VIEWTILEY (viewheight/16)
+
+/*
+=============================================================================
+
+ GLOBAL VARIABLES
+
+=============================================================================
+*/
+
+#ifdef DEBUGKEYS
+
+int DebugKeys (void);
+
+
+// from WL_DRAW.C
+
+void ScalePost();
+void SimpleScaleShape (int xcenter, int shapenum, unsigned height);
+
+/*
+=============================================================================
+
+ LOCAL VARIABLES
+
+=============================================================================
+*/
+
+int maporgx;
+int maporgy;
+enum {mapview,tilemapview,actoratview,visview} viewtype;
+
+void ViewMap (void);
+
+//===========================================================================
+
+/*
+==================
+=
+= CountObjects
+=
+==================
+*/
+
+void CountObjects (void)
+{
+ int i,total,count,active,inactive,doors;
+ objtype *obj;
+
+ CenterWindow (17,7);
+ active = inactive = count = doors = 0;
+
+ US_Print ("Total statics :");
+ total = (int)(laststatobj-&statobjlist[0]);
+ US_PrintUnsigned (total);
+
+ char str[60];
+ sprintf(str,"\nlaststatobj=%.8X",(int32_t)(uintptr_t)laststatobj);
+ US_Print(str);
+
+ US_Print ("\nIn use statics:");
+ for (i=0;i<total;i++)
+ {
+ if (statobjlist[i].shapenum != -1)
+ count++;
+ else
+ doors++; //debug
+ }
+ US_PrintUnsigned (count);
+
+ US_Print ("\nDoors :");
+ US_PrintUnsigned (doornum);
+
+ for (obj=player->next;obj;obj=obj->next)
+ {
+ if (obj->active)
+ active++;
+ else
+ inactive++;
+ }
+
+ US_Print ("\nTotal actors :");
+ US_PrintUnsigned (active+inactive);
+
+ US_Print ("\nActive actors :");
+ US_PrintUnsigned (active);
+
+ VW_UpdateScreen();
+ IN_Ack ();
+}
+
+
+//===========================================================================
+
+/*
+===================
+=
+= PictureGrabber
+=
+===================
+*/
+void PictureGrabber (void)
+{
+ static char fname[] = "WSHOT000.BMP";
+
+ for(int i = 0; i < 1000; i++)
+ {
+ fname[7] = i % 10 + '0';
+ fname[6] = (i / 10) % 10 + '0';
+ fname[5] = i / 100 + '0';
+ int file = open(fname, O_RDONLY | O_BINARY);
+ if(file == -1) break; // file does not exist, so use that filename
+ close(file);
+ }
+
+ // overwrites WSHOT999.BMP if all wshot files exist
+
+ SDL_SaveBMP(curSurface, fname);
+
+ CenterWindow (18,2);
+ US_PrintCentered ("Screenshot taken");
+ VW_UpdateScreen();
+ IN_Ack();
+}
+
+
+//===========================================================================
+
+/*
+===================
+=
+= BasicOverhead
+=
+===================
+*/
+
+void BasicOverhead (void)
+{
+ int x, y, z, offx, offy;
+
+ z = 128/MAPSIZE; // zoom scale
+ offx = 320/2;
+ offy = (160-MAPSIZE*z)/2;
+
+#ifdef MAPBORDER
+ int temp = viewsize;
+ NewViewSize(16);
+ DrawPlayBorder();
+#endif
+
+ // right side (raw)
+
+ for(x=0;x<MAPSIZE;x++)
+ for(y=0;y<MAPSIZE;y++)
+ VWB_Bar(x*z+offx, y*z+offy,z,z,(unsigned)(uintptr_t)actorat[x][y]);
+
+ // left side (filtered)
+
+ uintptr_t tile;
+ int color;
+ offx -= 128;
+
+ for(x=0;x<MAPSIZE;x++)
+ {
+ for(y=0;y<MAPSIZE;y++)
+ {
+ tile = (uintptr_t)actorat[x][y];
+ if (ISPOINTER(tile) && ((objtype *)tile)->flags&FL_SHOOTABLE) color = 72; // enemy
+ else if (!tile || ISPOINTER(tile))
+ {
+ if (spotvis[x][y]) color = 111; // visable
+ else color = 0; // nothing
+ }
+ else if (MAPSPOT(x,y,1) == PUSHABLETILE) color = 171; // pushwall
+ else if (tile == 64) color = 158; // solid obj
+ else if (tile < 128) color = 154; // walls
+ else if (tile < 256) color = 146; // doors
+
+ VWB_Bar(x*z+offx, y*z+offy,z,z,color);
+ }
+ }
+
+ VWB_Bar(player->tilex*z+offx,player->tiley*z+offy,z,z,15); // player
+
+ // resize the border to match
+
+ VW_UpdateScreen();
+ IN_Ack();
+
+#ifdef MAPBORDER
+ NewViewSize(temp);
+ DrawPlayBorder();
+#endif
+}
+
+
+//===========================================================================
+
+/*
+================
+=
+= ShapeTest
+=
+================
+*/
+
+void ShapeTest (void)
+{
+ //TODO
+#if NOTYET
+ extern word NumDigi;
+ extern word *DigiList;
+ extern int postx;
+ extern int postwidth;
+ extern byte *postsource;
+ static char buf[10];
+
+ boolean done;
+ ScanCode scan;
+ int i,j,k,x;
+ longword l;
+ byte *addr;
+ soundnames sound;
+ // PageListStruct far *page;
+
+ CenterWindow(20,16);
+ VW_UpdateScreen();
+ for (i = 0,done = false; !done;)
+ {
+ US_ClearWindow();
+ sound = (soundnames) -1;
+
+ // page = &PMPages[i];
+ US_Print(" Page #");
+ US_PrintUnsigned(i);
+ if (i < PMSpriteStart)
+ US_Print(" (Wall)");
+ else if (i < PMSoundStart)
+ US_Print(" (Sprite)");
+ else if (i == ChunksInFile - 1)
+ US_Print(" (Sound Info)");
+ else
+ US_Print(" (Sound)");
+
+ /* US_Print("\n XMS: ");
+ if (page->xmsPage != -1)
+ US_PrintUnsigned(page->xmsPage);
+ else
+ US_Print("No");
+
+ US_Print("\n Main: ");
+ if (page->mainPage != -1)
+ US_PrintUnsigned(page->mainPage);
+ else if (page->emsPage != -1)
+ {
+ US_Print("EMS ");
+ US_PrintUnsigned(page->emsPage);
+ }
+ else
+ US_Print("No");
+
+ US_Print("\n Last hit: ");
+ US_PrintUnsigned(page->lastHit);*/
+
+ US_Print("\n Address: ");
+ addr = (byte *) PM_GetPage(i);
+ sprintf(buf,"0x%08X",(int32_t) addr);
+ US_Print(buf);
+
+ if (addr)
+ {
+ if (i < PMSpriteStart)
+ {
+ //
+ // draw the wall
+ //
+ vbuf += 32*SCREENWIDTH;
+ postx = 128;
+ postwidth = 1;
+ postsource = addr;
+ for (x=0;x<64;x++,postx++,postsource+=64)
+ {
+ wallheight[postx] = 256;
+ ScalePost ();
+ }
+ vbuf -= 32*SCREENWIDTH;
+ }
+ else if (i < PMSoundStart)
+ {
+ //
+ // draw the sprite
+ //
+ vbuf += 32*SCREENWIDTH;
+ SimpleScaleShape (160, i-PMSpriteStart, 64);
+ vbuf -= 32*SCREENWIDTH;
+ }
+ else if (i == ChunksInFile - 1)
+ {
+ US_Print("\n\n Number of sounds: ");
+ US_PrintUnsigned(NumDigi);
+ for (l = j = k = 0;j < NumDigi;j++)
+ {
+ l += DigiList[(j * 2) + 1];
+ k += (DigiList[(j * 2) + 1] + (PMPageSize - 1)) / PMPageSize;
+ }
+ US_Print("\n Total bytes: ");
+ US_PrintUnsigned(l);
+ US_Print("\n Total pages: ");
+ US_PrintUnsigned(k);
+ }
+ else
+ {
+ byte *dp = addr;
+ for (j = 0;j < NumDigi;j++)
+ {
+ k = (DigiList[(j * 2) + 1] + (PMPageSize - 1)) / PMPageSize;
+ if ((i >= PMSoundStart + DigiList[j * 2])
+ && (i < PMSoundStart + DigiList[j * 2] + k))
+ break;
+ }
+ if (j < NumDigi)
+ {
+ sound = (soundnames) j;
+ US_Print("\n Sound #");
+ US_PrintUnsigned(j);
+ US_Print("\n Segment #");
+ US_PrintUnsigned(i - PMSoundStart - DigiList[j * 2]);
+ }
+ for (j = 0;j < PageLengths[i];j += 32)
+ {
+ byte v = dp[j];
+ int v2 = (unsigned)v;
+ v2 -= 128;
+ v2 /= 4;
+ if (v2 < 0)
+ VWB_Vlin(WindowY + WindowH - 32 + v2,
+ WindowY + WindowH - 32,
+ WindowX + 8 + (j / 32),BLACK);
+ else
+ VWB_Vlin(WindowY + WindowH - 32,
+ WindowY + WindowH - 32 + v2,
+ WindowX + 8 + (j / 32),BLACK);
+ }
+ }
+ }
+
+ VW_UpdateScreen();
+
+ IN_Ack();
+ scan = LastScan;
+
+ IN_ClearKey(scan);
+ switch (scan)
+ {
+ case sc_LeftArrow:
+ if (i)
+ i--;
+ break;
+ case sc_RightArrow:
+ if (++i >= ChunksInFile)
+ i--;
+ break;
+ case sc_W: // Walls
+ i = 0;
+ break;
+ case sc_S: // Sprites
+ i = PMSpriteStart;
+ break;
+ case sc_D: // Digitized
+ i = PMSoundStart;
+ break;
+ case sc_I: // Digitized info
+ i = ChunksInFile - 1;
+ break;
+/* case sc_L: // Load all pages
+ for (j = 0;j < ChunksInFile;j++)
+ PM_GetPage(j);
+ break;*/
+ case sc_P:
+ if (sound != -1)
+ SD_PlayDigitized(sound,8,8);
+ break;
+ case sc_Escape:
+ done = true;
+ break;
+/* case sc_Enter:
+ PM_GetPage(i);
+ break;*/
+ }
+ }
+ SD_StopDigitized();
+#endif
+}
+
+
+//===========================================================================
+
+
+/*
+================
+=
+= DebugKeys
+=
+================
+*/
+
+int DebugKeys (void)
+{
+ boolean esc;
+ int level;
+
+ if (Keyboard[sc_B]) // B = border color
+ {
+ CenterWindow(20,3);
+ PrintY+=6;
+ US_Print(" Border color (0-56): ");
+ VW_UpdateScreen();
+ esc = !US_LineInput (px,py,str,NULL,true,2,0);
+ if (!esc)
+ {
+ level = atoi (str);
+ if (level>=0 && level<=99)
+ {
+ if (level<30) level += 31;
+ else
+ {
+ if (level > 56) level=31;
+ else level -= 26;
+ }
+
+ bordercol=level*4+3;
+
+ if (bordercol == VIEWCOLOR)
+ DrawStatusBorder(bordercol);
+
+ DrawPlayBorder();
+
+ return 0;
+ }
+ }
+ return 1;
+ }
+ if (Keyboard[sc_C]) // C = count objects
+ {
+ CountObjects();
+ return 1;
+ }
+ if (Keyboard[sc_D]) // D = Darkone's FPS counter
+ {
+ CenterWindow (22,2);
+ if (fpscounter)
+ US_PrintCentered ("Darkone's FPS Counter OFF");
+ else
+ US_PrintCentered ("Darkone's FPS Counter ON");
+ VW_UpdateScreen();
+ IN_Ack();
+ fpscounter ^= 1;
+ return 1;
+ }
+ if (Keyboard[sc_E]) // E = quit level
+ playstate = ex_completed;
+
+ if (Keyboard[sc_F]) // F = facing spot
+ {
+ char str[60];
+ CenterWindow (14,6);
+ US_Print ("x:"); US_PrintUnsigned (player->x);
+ US_Print (" ("); US_PrintUnsigned (player->x%65536);
+ US_Print (")\ny:"); US_PrintUnsigned (player->y);
+ US_Print (" ("); US_PrintUnsigned (player->y%65536);
+ US_Print (")\nA:"); US_PrintUnsigned (player->angle);
+ US_Print (" X:"); US_PrintUnsigned (player->tilex);
+ US_Print (" Y:"); US_PrintUnsigned (player->tiley);
+ US_Print ("\n1:"); US_PrintUnsigned (tilemap[player->tilex][player->tiley]);
+ sprintf(str," 2:%.8X",(unsigned)(uintptr_t)actorat[player->tilex][player->tiley]); US_Print(str);
+ US_Print ("\nf 1:"); US_PrintUnsigned (player->areanumber);
+ US_Print (" 2:"); US_PrintUnsigned (MAPSPOT(player->tilex,player->tiley,1));
+ US_Print (" 3:");
+ if ((unsigned)(uintptr_t)actorat[player->tilex][player->tiley] < 256)
+ US_PrintUnsigned (spotvis[player->tilex][player->tiley]);
+ else
+ US_PrintUnsigned (actorat[player->tilex][player->tiley]->flags);
+ VW_UpdateScreen();
+ IN_Ack();
+ return 1;
+ }
+
+ if (Keyboard[sc_G]) // G = god mode
+ {
+ CenterWindow (12,2);
+ if (godmode == 0)
+ US_PrintCentered ("God mode ON");
+ else if (godmode == 1)
+ US_PrintCentered ("God (no flash)");
+ else if (godmode == 2)
+ US_PrintCentered ("God mode OFF");
+
+ VW_UpdateScreen();
+ IN_Ack();
+ if (godmode != 2)
+ godmode++;
+ else
+ godmode = 0;
+ return 1;
+ }
+ if (Keyboard[sc_H]) // H = hurt self
+ {
+ IN_ClearKeysDown ();
+ TakeDamage (16,NULL);
+ }
+ else if (Keyboard[sc_I]) // I = item cheat
+ {
+ CenterWindow (12,3);
+ US_PrintCentered ("Free items!");
+ VW_UpdateScreen();
+ GivePoints (100000);
+ HealSelf (99);
+ if (gamestate.bestweapon<wp_chaingun)
+ GiveWeapon (gamestate.bestweapon+1);
+ gamestate.ammo += 50;
+ if (gamestate.ammo > 99)
+ gamestate.ammo = 99;
+ DrawAmmo ();
+ IN_Ack ();
+ return 1;
+ }
+ else if (Keyboard[sc_K]) // K = give keys
+ {
+ CenterWindow(16,3);
+ PrintY+=6;
+ US_Print(" Give Key (1-4): ");
+ VW_UpdateScreen();
+ esc = !US_LineInput (px,py,str,NULL,true,1,0);
+ if (!esc)
+ {
+ level = atoi (str);
+ if (level>0 && level<5)
+ GiveKey(level-1);
+ }
+ return 1;
+ }
+ else if (Keyboard[sc_L]) // L = level ratios
+ {
+ byte x,start,end=LRpack;
+
+ if (end == 8) // wolf3d
+ {
+ CenterWindow(17,10);
+ start = 0;
+ }
+ else // sod
+ {
+ CenterWindow(17,12);
+ start = 0; end = 10;
+ }
+again:
+ for(x=start;x<end;x++)
+ {
+ US_PrintUnsigned(x+1);
+ US_Print(" ");
+ US_PrintUnsigned(LevelRatios[x].time/60);
+ US_Print(":");
+ if (LevelRatios[x].time%60 < 10)
+ US_Print("0");
+ US_PrintUnsigned(LevelRatios[x].time%60);
+ US_Print(" ");
+ US_PrintUnsigned(LevelRatios[x].kill);
+ US_Print("% ");
+ US_PrintUnsigned(LevelRatios[x].secret);
+ US_Print("% ");
+ US_PrintUnsigned(LevelRatios[x].treasure);
+ US_Print("%\n");
+ }
+ VW_UpdateScreen();
+ IN_Ack();
+ if (end == 10 && gamestate.mapon > 9)
+ {
+ start = 10; end = 20;
+ CenterWindow(17,12);
+ goto again;
+ }
+
+ return 1;
+ }
+ else if (Keyboard[sc_N]) // N = no clip
+ {
+ noclip^=1;
+ CenterWindow (18,3);
+ if (noclip)
+ US_PrintCentered ("No clipping ON");
+ else
+ US_PrintCentered ("No clipping OFF");
+ VW_UpdateScreen();
+ IN_Ack ();
+ return 1;
+ }
+ else if (Keyboard[sc_O]) // O = basic overhead
+ {
+ BasicOverhead();
+ return 1;
+ }
+ else if(Keyboard[sc_P]) // P = Ripper's picture grabber
+ {
+ PictureGrabber();
+ return 1;
+ }
+ else if (Keyboard[sc_Q]) // Q = fast quit
+ Quit (NULL);
+ else if (Keyboard[sc_S]) // S = slow motion
+ {
+ CenterWindow(30,3);
+ PrintY+=6;
+ US_Print(" Slow Motion steps (default 14): ");
+ VW_UpdateScreen();
+ esc = !US_LineInput (px,py,str,NULL,true,2,0);
+ if (!esc)
+ {
+ level = atoi (str);
+ if (level>=0 && level<=50)
+ singlestep = level;
+ }
+ return 1;
+ }
+ else if (Keyboard[sc_T]) // T = shape test
+ {
+ ShapeTest ();
+ return 1;
+ }
+ else if (Keyboard[sc_V]) // V = extra VBLs
+ {
+ CenterWindow(30,3);
+ PrintY+=6;
+ US_Print(" Add how many extra VBLs(0-8): ");
+ VW_UpdateScreen();
+ esc = !US_LineInput (px,py,str,NULL,true,1,0);
+ if (!esc)
+ {
+ level = atoi (str);
+ if (level>=0 && level<=8)
+ extravbls = level;
+ }
+ return 1;
+ }
+ else if (Keyboard[sc_W]) // W = warp to level
+ {
+ CenterWindow(26,3);
+ PrintY+=6;
+#ifndef SPEAR
+ US_Print(" Warp to which level(1-10): ");
+#else
+ US_Print(" Warp to which level(1-21): ");
+#endif
+ VW_UpdateScreen();
+ esc = !US_LineInput (px,py,str,NULL,true,2,0);
+ if (!esc)
+ {
+ level = atoi (str);
+#ifndef SPEAR
+ if (level>0 && level<11)
+#else
+ if (level>0 && level<22)
+#endif
+ {
+ gamestate.mapon = level-1;
+ playstate = ex_warped;
+ }
+ }
+ return 1;
+ }
+ else if (Keyboard[sc_X]) // X = item cheat
+ {
+ CenterWindow (12,3);
+ US_PrintCentered ("Extra stuff!");
+ VW_UpdateScreen();
+ // DEBUG: put stuff here
+ IN_Ack ();
+ return 1;
+ }
+#ifdef USE_CLOUDSKY
+ else if(Keyboard[sc_Z])
+ {
+ char defstr[15];
+
+ CenterWindow(34,4);
+ PrintY+=6;
+ US_Print(" Recalculate sky with seek: ");
+ int seekpx = px, seekpy = py;
+ US_PrintUnsigned(curSky->seed);
+ US_Print("\n Use color map (0-");
+ US_PrintUnsigned(numColorMaps - 1);
+ US_Print("): ");
+ int mappx = px, mappy = py;
+ US_PrintUnsigned(curSky->colorMapIndex);
+ VW_UpdateScreen();
+
+ sprintf(defstr, "%u", curSky->seed);
+ esc = !US_LineInput(seekpx, seekpy, str, defstr, true, 10, 0);
+ if(esc) return 0;
+ curSky->seed = (uint32_t) atoi(str);
+
+ sprintf(defstr, "%u", curSky->colorMapIndex);
+ esc = !US_LineInput(mappx, mappy, str, defstr, true, 10, 0);
+ if(esc) return 0;
+ uint32_t newInd = (uint32_t) atoi(str);
+ if(newInd < (uint32_t) numColorMaps)
+ {
+ curSky->colorMapIndex = newInd;
+ InitSky();
+ }
+ else
+ {
+ CenterWindow (18,3);
+ US_PrintCentered ("Illegal color map!");
+ VW_UpdateScreen();
+ IN_Ack ();
+ }
+ }
+#endif
+
+ return 0;
+}
+
+
+#if 0
+/*
+===================
+=
+= OverheadRefresh
+=
+===================
+*/
+
+void OverheadRefresh (void)
+{
+ unsigned x,y,endx,endy,sx,sy;
+ unsigned tile;
+
+
+ endx = maporgx+VIEWTILEX;
+ endy = maporgy+VIEWTILEY;
+
+ for (y=maporgy;y<endy;y++)
+ {
+ for (x=maporgx;x<endx;x++)
+ {
+ sx = (x-maporgx)*16;
+ sy = (y-maporgy)*16;
+
+ switch (viewtype)
+ {
+#if 0
+ case mapview:
+ tile = *(mapsegs[0]+farmapylookup[y]+x);
+ break;
+
+ case tilemapview:
+ tile = tilemap[x][y];
+ break;
+
+ case visview:
+ tile = spotvis[x][y];
+ break;
+#endif
+ case actoratview:
+ tile = (unsigned)actorat[x][y];
+ break;
+ }
+
+ if (tile<MAXWALLTILES)
+ LatchDrawTile(sx,sy,tile);
+ else
+ {
+ LatchDrawChar(sx,sy,NUMBERCHARS+((tile&0xf000)>>12));
+ LatchDrawChar(sx+8,sy,NUMBERCHARS+((tile&0x0f00)>>8));
+ LatchDrawChar(sx,sy+8,NUMBERCHARS+((tile&0x00f0)>>4));
+ LatchDrawChar(sx+8,sy+8,NUMBERCHARS+(tile&0x000f));
+ }
+ }
+ }
+}
+#endif
+
+#if 0
+/*
+===================
+=
+= ViewMap
+=
+===================
+*/
+
+void ViewMap (void)
+{
+ boolean button0held;
+
+ viewtype = actoratview;
+ // button0held = false;
+
+
+ maporgx = player->tilex - VIEWTILEX/2;
+ if (maporgx<0)
+ maporgx = 0;
+ if (maporgx>MAPSIZE-VIEWTILEX)
+ maporgx=MAPSIZE-VIEWTILEX;
+ maporgy = player->tiley - VIEWTILEY/2;
+ if (maporgy<0)
+ maporgy = 0;
+ if (maporgy>MAPSIZE-VIEWTILEY)
+ maporgy=MAPSIZE-VIEWTILEY;
+
+ do
+ {
+ //
+ // let user pan around
+ //
+ PollControls ();
+ if (controlx < 0 && maporgx>0)
+ maporgx--;
+ if (controlx > 0 && maporgx<mapwidth-VIEWTILEX)
+ maporgx++;
+ if (controly < 0 && maporgy>0)
+ maporgy--;
+ if (controly > 0 && maporgy<mapheight-VIEWTILEY)
+ maporgy++;
+
+#if 0
+ if (c.button0 && !button0held)
+ {
+ button0held = true;
+ viewtype++;
+ if (viewtype>visview)
+ viewtype = mapview;
+ }
+ if (!c.button0)
+ button0held = false;
+#endif
+
+ OverheadRefresh ();
+
+ } while (!Keyboard[sc_Escape]);
+
+ IN_ClearKeysDown ();
+}
+#endif
+#endif
diff --git a/apps/plugins/sdl/progs/wolf3d/wl_def.h b/apps/plugins/sdl/progs/wolf3d/wl_def.h
new file mode 100644
index 0000000000..04bbb41bfb
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/wl_def.h
@@ -0,0 +1,1479 @@
+#ifndef WL_DEF_H
+#define WL_DEF_H
+
+// Defines which version shall be built and configures supported extra features
+#include "version.h"
+
+#define SOUND_ENABLE
+
+#include "fixedpoint.h"
+#include <ctype.h>
+#include <stdint.h>
+#include <stdarg.h>
+#include <SDL.h>
+#include <SDL_mixer.h>
+
+#define open rb->open
+#define read(a, b, c) rb->read((a), (b), (c))
+#define write(a, b, c) rb->write((a), (b), (c))
+#define close(a) rb->close(a)
+
+#if !defined O_BINARY
+# define O_BINARY 0
+#endif
+
+#pragma pack(1)
+
+#if defined(_arch_dreamcast)
+#define YESBUTTONNAME "A"
+#define NOBUTTONNAME "B"
+#elif defined(GP2X)
+#define YESBUTTONNAME "Y"
+#define NOBUTTONNAME "B"
+#else
+#define YESBUTTONNAME "Y"
+#define NOBUTTONNAME "N"
+#endif
+
+#include "foreign.h"
+
+#ifndef SPEAR
+ #include "audiowl6.h"
+ #ifdef UPLOAD
+ #include "gfxv_apo.h"
+ #else
+ #ifdef GOODTIMES
+ #include "gfxv_wl6.h"
+ #else
+ #include "gfxv_apo.h"
+ #endif
+ #endif
+#else
+ #include "audiosod.h"
+ #include "gfxv_sod.h"
+ #include "f_spear.h"
+#endif
+
+typedef uint8_t byte;
+typedef uint16_t word;
+typedef int32_t fixed;
+typedef uint32_t longword;
+typedef int8_t boolean;
+typedef void * memptr;
+
+typedef struct
+{
+ int x,y;
+} Point;
+typedef struct
+{
+ Point ul,lr;
+} Rect;
+
+void Quit(const char *errorStr, ...);
+
+#include "id_pm.h"
+#include "id_sd.h"
+#include "id_in.h"
+#include "id_vl.h"
+#include "id_vh.h"
+#include "id_us.h"
+#include "id_ca.h"
+
+#include "wl_menu.h"
+
+#define MAPSPOT(x,y,plane) (mapsegs[plane][((y)<<mapshift)+(x)])
+
+#define SIGN(x) ((x)>0?1:-1)
+#define ABS(x) ((int)(x)>0?(x):-(x))
+#define LABS(x) ((int32_t)(x)>0?(x):-(x))
+
+#define abs(x) ABS(x)
+
+/*
+=============================================================================
+
+ GLOBAL CONSTANTS
+
+=============================================================================
+*/
+
+#define MAXTICS 10
+#define DEMOTICS 4
+
+#define MAXACTORS 150 // max number of nazis, etc / map
+#define MAXSTATS 400 // max number of lamps, bonus, etc
+#define MAXDOORS 64 // max number of sliding doors
+#define MAXWALLTILES 64 // max number of wall tiles
+
+//
+// tile constants
+//
+
+#define ICONARROWS 90
+#define PUSHABLETILE 98
+#define EXITTILE 99 // at end of castle
+#define AREATILE 107 // first of NUMAREAS floor tiles
+#define NUMAREAS 37
+#define ELEVATORTILE 21
+#define AMBUSHTILE 106
+#define ALTELEVATORTILE 107
+
+#define NUMBERCHARS 9
+
+
+//----------------
+
+#define EXTRAPOINTS 40000
+
+#define PLAYERSPEED 3000
+#define RUNSPEED 6000
+
+#define SCREENSEG 0xa000
+
+#define SCREENBWIDE 80
+
+#define HEIGHTRATIO 0.50 // also defined in id_mm.c
+
+#define BORDERCOLOR 3
+#define FLASHCOLOR 5
+#define FLASHTICS 4
+
+#ifndef SPEAR
+ #define LRpack 8 // # of levels to store in endgame
+#else
+ #define LRpack 20
+#endif
+
+#define PLAYERSIZE MINDIST // player radius
+#define MINACTORDIST 0x10000l // minimum dist from player center
+ // to any actor center
+
+#define NUMLATCHPICS 100
+
+#undef M_PI
+#define PI 3.141592657
+#define M_PI PI
+
+#define GLOBAL1 (1l<<16)
+#define TILEGLOBAL GLOBAL1
+#define PIXGLOBAL (GLOBAL1/64)
+#define TILESHIFT 16l
+#define UNSIGNEDSHIFT 8
+
+#define ANGLES 360 // must be divisable by 4
+#define ANGLEQUAD (ANGLES/4)
+#define FINEANGLES 3600
+#define ANG90 (FINEANGLES/4)
+#define ANG180 (ANG90*2)
+#define ANG270 (ANG90*3)
+#define ANG360 (ANG90*4)
+#define VANG90 (ANGLES/4)
+#define VANG180 (VANG90*2)
+#define VANG270 (VANG90*3)
+#define VANG360 (VANG90*4)
+
+#define MINDIST (0x5800l)
+
+#define mapshift 6
+#define MAPSIZE (1<<mapshift)
+#define maparea MAPSIZE*MAPSIZE
+
+#define mapheight MAPSIZE
+#define mapwidth MAPSIZE
+
+#ifdef USE_HIRES
+
+#define TEXTURESHIFT 7
+#define TEXTURESIZE (1<<TEXTURESHIFT)
+#define TEXTUREFROMFIXEDSHIFT 2
+#define TEXTUREMASK (TEXTURESIZE*(TEXTURESIZE-1))
+
+#define SPRITESCALEFACTOR 1
+
+#else
+
+#define TEXTURESHIFT 6
+#define TEXTURESIZE (1<<TEXTURESHIFT)
+#define TEXTUREFROMFIXEDSHIFT 4
+#define TEXTUREMASK (TEXTURESIZE*(TEXTURESIZE-1))
+
+#define SPRITESCALEFACTOR 2
+
+#endif
+
+#define NORTH 0
+#define EAST 1
+#define SOUTH 2
+#define WEST 3
+
+
+#define STATUSLINES 40
+
+#define SCREENSIZE (SCREENBWIDE*208)
+#define PAGE1START 0
+#define PAGE2START (SCREENSIZE)
+#define PAGE3START (SCREENSIZE*2u)
+#define FREESTART (SCREENSIZE*3u)
+
+
+#define PIXRADIUS 512
+
+#define STARTAMMO 8
+
+
+// object flag values
+
+typedef enum
+{
+ FL_SHOOTABLE = 0x00000001,
+ FL_BONUS = 0x00000002,
+ FL_NEVERMARK = 0x00000004,
+ FL_VISABLE = 0x00000008,
+ FL_ATTACKMODE = 0x00000010,
+ FL_FIRSTATTACK = 0x00000020,
+ FL_AMBUSH = 0x00000040,
+ FL_NONMARK = 0x00000080,
+ FL_FULLBRIGHT = 0x00000100,
+#ifdef USE_DIR3DSPR
+ // you can choose one of the following values in wl_act1.cpp
+ // to make a static sprite a directional 3d sprite
+ // (see example at the end of the statinfo array)
+ FL_DIR_HORIZ_MID = 0x00000200,
+ FL_DIR_HORIZ_FW = 0x00000400,
+ FL_DIR_HORIZ_BW = 0x00000600,
+ FL_DIR_VERT_MID = 0x00000a00,
+ FL_DIR_VERT_FW = 0x00000c00,
+ FL_DIR_VERT_BW = 0x00000e00,
+
+ // these values are just used to improve readability of code
+ FL_DIR_NONE = 0x00000000,
+ FL_DIR_POS_MID = 0x00000200,
+ FL_DIR_POS_FW = 0x00000400,
+ FL_DIR_POS_BW = 0x00000600,
+ FL_DIR_POS_MASK = 0x00000600,
+ FL_DIR_VERT_FLAG = 0x00000800,
+ FL_DIR_MASK = 0x00000e00,
+#endif
+ // next free bit is 0x00001000
+} objflag_t;
+
+
+//
+// sprite constants
+//
+
+enum
+{
+ SPR_DEMO,
+#ifndef APOGEE_1_0
+ SPR_DEATHCAM,
+#endif
+//
+// static sprites
+//
+ SPR_STAT_0,SPR_STAT_1,SPR_STAT_2,SPR_STAT_3,
+ SPR_STAT_4,SPR_STAT_5,SPR_STAT_6,SPR_STAT_7,
+
+ SPR_STAT_8,SPR_STAT_9,SPR_STAT_10,SPR_STAT_11,
+ SPR_STAT_12,SPR_STAT_13,SPR_STAT_14,SPR_STAT_15,
+
+ SPR_STAT_16,SPR_STAT_17,SPR_STAT_18,SPR_STAT_19,
+ SPR_STAT_20,SPR_STAT_21,SPR_STAT_22,SPR_STAT_23,
+
+ SPR_STAT_24,SPR_STAT_25,SPR_STAT_26,SPR_STAT_27,
+ SPR_STAT_28,SPR_STAT_29,SPR_STAT_30,SPR_STAT_31,
+
+ SPR_STAT_32,SPR_STAT_33,SPR_STAT_34,SPR_STAT_35,
+ SPR_STAT_36,SPR_STAT_37,SPR_STAT_38,SPR_STAT_39,
+
+ SPR_STAT_40,SPR_STAT_41,SPR_STAT_42,SPR_STAT_43,
+ SPR_STAT_44,SPR_STAT_45,SPR_STAT_46,SPR_STAT_47,
+
+#ifdef SPEAR
+ SPR_STAT_48,SPR_STAT_49,SPR_STAT_50,SPR_STAT_51,
+#endif
+
+//
+// guard
+//
+ SPR_GRD_S_1,SPR_GRD_S_2,SPR_GRD_S_3,SPR_GRD_S_4,
+ SPR_GRD_S_5,SPR_GRD_S_6,SPR_GRD_S_7,SPR_GRD_S_8,
+
+ SPR_GRD_W1_1,SPR_GRD_W1_2,SPR_GRD_W1_3,SPR_GRD_W1_4,
+ SPR_GRD_W1_5,SPR_GRD_W1_6,SPR_GRD_W1_7,SPR_GRD_W1_8,
+
+ SPR_GRD_W2_1,SPR_GRD_W2_2,SPR_GRD_W2_3,SPR_GRD_W2_4,
+ SPR_GRD_W2_5,SPR_GRD_W2_6,SPR_GRD_W2_7,SPR_GRD_W2_8,
+
+ SPR_GRD_W3_1,SPR_GRD_W3_2,SPR_GRD_W3_3,SPR_GRD_W3_4,
+ SPR_GRD_W3_5,SPR_GRD_W3_6,SPR_GRD_W3_7,SPR_GRD_W3_8,
+
+ SPR_GRD_W4_1,SPR_GRD_W4_2,SPR_GRD_W4_3,SPR_GRD_W4_4,
+ SPR_GRD_W4_5,SPR_GRD_W4_6,SPR_GRD_W4_7,SPR_GRD_W4_8,
+
+ SPR_GRD_PAIN_1,SPR_GRD_DIE_1,SPR_GRD_DIE_2,SPR_GRD_DIE_3,
+ SPR_GRD_PAIN_2,SPR_GRD_DEAD,
+
+ SPR_GRD_SHOOT1,SPR_GRD_SHOOT2,SPR_GRD_SHOOT3,
+
+//
+// dogs
+//
+ SPR_DOG_W1_1,SPR_DOG_W1_2,SPR_DOG_W1_3,SPR_DOG_W1_4,
+ SPR_DOG_W1_5,SPR_DOG_W1_6,SPR_DOG_W1_7,SPR_DOG_W1_8,
+
+ SPR_DOG_W2_1,SPR_DOG_W2_2,SPR_DOG_W2_3,SPR_DOG_W2_4,
+ SPR_DOG_W2_5,SPR_DOG_W2_6,SPR_DOG_W2_7,SPR_DOG_W2_8,
+
+ SPR_DOG_W3_1,SPR_DOG_W3_2,SPR_DOG_W3_3,SPR_DOG_W3_4,
+ SPR_DOG_W3_5,SPR_DOG_W3_6,SPR_DOG_W3_7,SPR_DOG_W3_8,
+
+ SPR_DOG_W4_1,SPR_DOG_W4_2,SPR_DOG_W4_3,SPR_DOG_W4_4,
+ SPR_DOG_W4_5,SPR_DOG_W4_6,SPR_DOG_W4_7,SPR_DOG_W4_8,
+
+ SPR_DOG_DIE_1,SPR_DOG_DIE_2,SPR_DOG_DIE_3,SPR_DOG_DEAD,
+ SPR_DOG_JUMP1,SPR_DOG_JUMP2,SPR_DOG_JUMP3,
+
+
+
+//
+// ss
+//
+ SPR_SS_S_1,SPR_SS_S_2,SPR_SS_S_3,SPR_SS_S_4,
+ SPR_SS_S_5,SPR_SS_S_6,SPR_SS_S_7,SPR_SS_S_8,
+
+ SPR_SS_W1_1,SPR_SS_W1_2,SPR_SS_W1_3,SPR_SS_W1_4,
+ SPR_SS_W1_5,SPR_SS_W1_6,SPR_SS_W1_7,SPR_SS_W1_8,
+
+ SPR_SS_W2_1,SPR_SS_W2_2,SPR_SS_W2_3,SPR_SS_W2_4,
+ SPR_SS_W2_5,SPR_SS_W2_6,SPR_SS_W2_7,SPR_SS_W2_8,
+
+ SPR_SS_W3_1,SPR_SS_W3_2,SPR_SS_W3_3,SPR_SS_W3_4,
+ SPR_SS_W3_5,SPR_SS_W3_6,SPR_SS_W3_7,SPR_SS_W3_8,
+
+ SPR_SS_W4_1,SPR_SS_W4_2,SPR_SS_W4_3,SPR_SS_W4_4,
+ SPR_SS_W4_5,SPR_SS_W4_6,SPR_SS_W4_7,SPR_SS_W4_8,
+
+ SPR_SS_PAIN_1,SPR_SS_DIE_1,SPR_SS_DIE_2,SPR_SS_DIE_3,
+ SPR_SS_PAIN_2,SPR_SS_DEAD,
+
+ SPR_SS_SHOOT1,SPR_SS_SHOOT2,SPR_SS_SHOOT3,
+
+//
+// mutant
+//
+ SPR_MUT_S_1,SPR_MUT_S_2,SPR_MUT_S_3,SPR_MUT_S_4,
+ SPR_MUT_S_5,SPR_MUT_S_6,SPR_MUT_S_7,SPR_MUT_S_8,
+
+ SPR_MUT_W1_1,SPR_MUT_W1_2,SPR_MUT_W1_3,SPR_MUT_W1_4,
+ SPR_MUT_W1_5,SPR_MUT_W1_6,SPR_MUT_W1_7,SPR_MUT_W1_8,
+
+ SPR_MUT_W2_1,SPR_MUT_W2_2,SPR_MUT_W2_3,SPR_MUT_W2_4,
+ SPR_MUT_W2_5,SPR_MUT_W2_6,SPR_MUT_W2_7,SPR_MUT_W2_8,
+
+ SPR_MUT_W3_1,SPR_MUT_W3_2,SPR_MUT_W3_3,SPR_MUT_W3_4,
+ SPR_MUT_W3_5,SPR_MUT_W3_6,SPR_MUT_W3_7,SPR_MUT_W3_8,
+
+ SPR_MUT_W4_1,SPR_MUT_W4_2,SPR_MUT_W4_3,SPR_MUT_W4_4,
+ SPR_MUT_W4_5,SPR_MUT_W4_6,SPR_MUT_W4_7,SPR_MUT_W4_8,
+
+ SPR_MUT_PAIN_1,SPR_MUT_DIE_1,SPR_MUT_DIE_2,SPR_MUT_DIE_3,
+ SPR_MUT_PAIN_2,SPR_MUT_DIE_4,SPR_MUT_DEAD,
+
+ SPR_MUT_SHOOT1,SPR_MUT_SHOOT2,SPR_MUT_SHOOT3,SPR_MUT_SHOOT4,
+
+//
+// officer
+//
+ SPR_OFC_S_1,SPR_OFC_S_2,SPR_OFC_S_3,SPR_OFC_S_4,
+ SPR_OFC_S_5,SPR_OFC_S_6,SPR_OFC_S_7,SPR_OFC_S_8,
+
+ SPR_OFC_W1_1,SPR_OFC_W1_2,SPR_OFC_W1_3,SPR_OFC_W1_4,
+ SPR_OFC_W1_5,SPR_OFC_W1_6,SPR_OFC_W1_7,SPR_OFC_W1_8,
+
+ SPR_OFC_W2_1,SPR_OFC_W2_2,SPR_OFC_W2_3,SPR_OFC_W2_4,
+ SPR_OFC_W2_5,SPR_OFC_W2_6,SPR_OFC_W2_7,SPR_OFC_W2_8,
+
+ SPR_OFC_W3_1,SPR_OFC_W3_2,SPR_OFC_W3_3,SPR_OFC_W3_4,
+ SPR_OFC_W3_5,SPR_OFC_W3_6,SPR_OFC_W3_7,SPR_OFC_W3_8,
+
+ SPR_OFC_W4_1,SPR_OFC_W4_2,SPR_OFC_W4_3,SPR_OFC_W4_4,
+ SPR_OFC_W4_5,SPR_OFC_W4_6,SPR_OFC_W4_7,SPR_OFC_W4_8,
+
+ SPR_OFC_PAIN_1,SPR_OFC_DIE_1,SPR_OFC_DIE_2,SPR_OFC_DIE_3,
+ SPR_OFC_PAIN_2,SPR_OFC_DIE_4,SPR_OFC_DEAD,
+
+ SPR_OFC_SHOOT1,SPR_OFC_SHOOT2,SPR_OFC_SHOOT3,
+
+#ifndef SPEAR
+//
+// ghosts
+//
+ SPR_BLINKY_W1,SPR_BLINKY_W2,SPR_PINKY_W1,SPR_PINKY_W2,
+ SPR_CLYDE_W1,SPR_CLYDE_W2,SPR_INKY_W1,SPR_INKY_W2,
+
+//
+// hans
+//
+ SPR_BOSS_W1,SPR_BOSS_W2,SPR_BOSS_W3,SPR_BOSS_W4,
+ SPR_BOSS_SHOOT1,SPR_BOSS_SHOOT2,SPR_BOSS_SHOOT3,SPR_BOSS_DEAD,
+
+ SPR_BOSS_DIE1,SPR_BOSS_DIE2,SPR_BOSS_DIE3,
+
+//
+// schabbs
+//
+ SPR_SCHABB_W1,SPR_SCHABB_W2,SPR_SCHABB_W3,SPR_SCHABB_W4,
+ SPR_SCHABB_SHOOT1,SPR_SCHABB_SHOOT2,
+
+ SPR_SCHABB_DIE1,SPR_SCHABB_DIE2,SPR_SCHABB_DIE3,SPR_SCHABB_DEAD,
+ SPR_HYPO1,SPR_HYPO2,SPR_HYPO3,SPR_HYPO4,
+
+//
+// fake
+//
+ SPR_FAKE_W1,SPR_FAKE_W2,SPR_FAKE_W3,SPR_FAKE_W4,
+ SPR_FAKE_SHOOT,SPR_FIRE1,SPR_FIRE2,
+
+ SPR_FAKE_DIE1,SPR_FAKE_DIE2,SPR_FAKE_DIE3,SPR_FAKE_DIE4,
+ SPR_FAKE_DIE5,SPR_FAKE_DEAD,
+
+//
+// hitler
+//
+ SPR_MECHA_W1,SPR_MECHA_W2,SPR_MECHA_W3,SPR_MECHA_W4,
+ SPR_MECHA_SHOOT1,SPR_MECHA_SHOOT2,SPR_MECHA_SHOOT3,SPR_MECHA_DEAD,
+
+ SPR_MECHA_DIE1,SPR_MECHA_DIE2,SPR_MECHA_DIE3,
+
+ SPR_HITLER_W1,SPR_HITLER_W2,SPR_HITLER_W3,SPR_HITLER_W4,
+ SPR_HITLER_SHOOT1,SPR_HITLER_SHOOT2,SPR_HITLER_SHOOT3,SPR_HITLER_DEAD,
+
+ SPR_HITLER_DIE1,SPR_HITLER_DIE2,SPR_HITLER_DIE3,SPR_HITLER_DIE4,
+ SPR_HITLER_DIE5,SPR_HITLER_DIE6,SPR_HITLER_DIE7,
+
+//
+// giftmacher
+//
+ SPR_GIFT_W1,SPR_GIFT_W2,SPR_GIFT_W3,SPR_GIFT_W4,
+ SPR_GIFT_SHOOT1,SPR_GIFT_SHOOT2,
+
+ SPR_GIFT_DIE1,SPR_GIFT_DIE2,SPR_GIFT_DIE3,SPR_GIFT_DEAD,
+#endif
+//
+// Rocket, smoke and small explosion
+//
+ SPR_ROCKET_1,SPR_ROCKET_2,SPR_ROCKET_3,SPR_ROCKET_4,
+ SPR_ROCKET_5,SPR_ROCKET_6,SPR_ROCKET_7,SPR_ROCKET_8,
+
+ SPR_SMOKE_1,SPR_SMOKE_2,SPR_SMOKE_3,SPR_SMOKE_4,
+ SPR_BOOM_1,SPR_BOOM_2,SPR_BOOM_3,
+
+//
+// Angel of Death's DeathSparks(tm)
+//
+#ifdef SPEAR
+ SPR_HROCKET_1,SPR_HROCKET_2,SPR_HROCKET_3,SPR_HROCKET_4,
+ SPR_HROCKET_5,SPR_HROCKET_6,SPR_HROCKET_7,SPR_HROCKET_8,
+
+ SPR_HSMOKE_1,SPR_HSMOKE_2,SPR_HSMOKE_3,SPR_HSMOKE_4,
+ SPR_HBOOM_1,SPR_HBOOM_2,SPR_HBOOM_3,
+
+ SPR_SPARK1,SPR_SPARK2,SPR_SPARK3,SPR_SPARK4,
+#endif
+
+#ifndef SPEAR
+//
+// gretel
+//
+ SPR_GRETEL_W1,SPR_GRETEL_W2,SPR_GRETEL_W3,SPR_GRETEL_W4,
+ SPR_GRETEL_SHOOT1,SPR_GRETEL_SHOOT2,SPR_GRETEL_SHOOT3,SPR_GRETEL_DEAD,
+
+ SPR_GRETEL_DIE1,SPR_GRETEL_DIE2,SPR_GRETEL_DIE3,
+
+//
+// fat face
+//
+ SPR_FAT_W1,SPR_FAT_W2,SPR_FAT_W3,SPR_FAT_W4,
+ SPR_FAT_SHOOT1,SPR_FAT_SHOOT2,SPR_FAT_SHOOT3,SPR_FAT_SHOOT4,
+
+ SPR_FAT_DIE1,SPR_FAT_DIE2,SPR_FAT_DIE3,SPR_FAT_DEAD,
+
+//
+// bj
+//
+#ifdef APOGEE_1_0
+ SPR_BJ_W1=360,
+#elif defined(APOGEE_1_1) && defined(UPLOAD)
+ SPR_BJ_W1=406,
+#else
+ SPR_BJ_W1,
+#endif
+ SPR_BJ_W2,SPR_BJ_W3,SPR_BJ_W4,
+ SPR_BJ_JUMP1,SPR_BJ_JUMP2,SPR_BJ_JUMP3,SPR_BJ_JUMP4,
+#else
+//
+// THESE ARE FOR 'SPEAR OF DESTINY'
+//
+
+//
+// Trans Grosse
+//
+ SPR_TRANS_W1,SPR_TRANS_W2,SPR_TRANS_W3,SPR_TRANS_W4,
+ SPR_TRANS_SHOOT1,SPR_TRANS_SHOOT2,SPR_TRANS_SHOOT3,SPR_TRANS_DEAD,
+
+ SPR_TRANS_DIE1,SPR_TRANS_DIE2,SPR_TRANS_DIE3,
+
+//
+// Wilhelm
+//
+ SPR_WILL_W1,SPR_WILL_W2,SPR_WILL_W3,SPR_WILL_W4,
+ SPR_WILL_SHOOT1,SPR_WILL_SHOOT2,SPR_WILL_SHOOT3,SPR_WILL_SHOOT4,
+
+ SPR_WILL_DIE1,SPR_WILL_DIE2,SPR_WILL_DIE3,SPR_WILL_DEAD,
+
+//
+// UberMutant
+//
+ SPR_UBER_W1,SPR_UBER_W2,SPR_UBER_W3,SPR_UBER_W4,
+ SPR_UBER_SHOOT1,SPR_UBER_SHOOT2,SPR_UBER_SHOOT3,SPR_UBER_SHOOT4,
+
+ SPR_UBER_DIE1,SPR_UBER_DIE2,SPR_UBER_DIE3,SPR_UBER_DIE4,
+ SPR_UBER_DEAD,
+
+//
+// Death Knight
+//
+ SPR_DEATH_W1,SPR_DEATH_W2,SPR_DEATH_W3,SPR_DEATH_W4,
+ SPR_DEATH_SHOOT1,SPR_DEATH_SHOOT2,SPR_DEATH_SHOOT3,SPR_DEATH_SHOOT4,
+
+ SPR_DEATH_DIE1,SPR_DEATH_DIE2,SPR_DEATH_DIE3,SPR_DEATH_DIE4,
+ SPR_DEATH_DIE5,SPR_DEATH_DIE6,SPR_DEATH_DEAD,
+
+//
+// Ghost
+//
+ SPR_SPECTRE_W1,SPR_SPECTRE_W2,SPR_SPECTRE_W3,SPR_SPECTRE_W4,
+ SPR_SPECTRE_F1,SPR_SPECTRE_F2,SPR_SPECTRE_F3,SPR_SPECTRE_F4,
+
+//
+// Angel of Death
+//
+ SPR_ANGEL_W1,SPR_ANGEL_W2,SPR_ANGEL_W3,SPR_ANGEL_W4,
+ SPR_ANGEL_SHOOT1,SPR_ANGEL_SHOOT2,SPR_ANGEL_TIRED1,SPR_ANGEL_TIRED2,
+
+ SPR_ANGEL_DIE1,SPR_ANGEL_DIE2,SPR_ANGEL_DIE3,SPR_ANGEL_DIE4,
+ SPR_ANGEL_DIE5,SPR_ANGEL_DIE6,SPR_ANGEL_DIE7,SPR_ANGEL_DEAD,
+
+#endif
+
+//
+// player attack frames
+//
+ SPR_KNIFEREADY,SPR_KNIFEATK1,SPR_KNIFEATK2,SPR_KNIFEATK3,
+ SPR_KNIFEATK4,
+
+ SPR_PISTOLREADY,SPR_PISTOLATK1,SPR_PISTOLATK2,SPR_PISTOLATK3,
+ SPR_PISTOLATK4,
+
+ SPR_MACHINEGUNREADY,SPR_MACHINEGUNATK1,SPR_MACHINEGUNATK2,MACHINEGUNATK3,
+ SPR_MACHINEGUNATK4,
+
+ SPR_CHAINREADY,SPR_CHAINATK1,SPR_CHAINATK2,SPR_CHAINATK3,
+ SPR_CHAINATK4,
+
+};
+
+
+/*
+=============================================================================
+
+ GLOBAL TYPES
+
+=============================================================================
+*/
+
+typedef enum {
+ di_north,
+ di_east,
+ di_south,
+ di_west
+} controldir_t;
+
+typedef enum {
+ dr_normal,
+ dr_lock1,
+ dr_lock2,
+ dr_lock3,
+ dr_lock4,
+ dr_elevator
+} door_t;
+
+typedef enum {
+ ac_badobject = -1,
+ ac_no,
+ ac_yes,
+ ac_allways
+} activetype;
+
+typedef enum {
+ nothing,
+ playerobj,
+ inertobj,
+ guardobj,
+ officerobj,
+ ssobj,
+ dogobj,
+ bossobj,
+ schabbobj,
+ fakeobj,
+ mechahitlerobj,
+ mutantobj,
+ needleobj,
+ fireobj,
+ bjobj,
+ ghostobj,
+ realhitlerobj,
+ gretelobj,
+ giftobj,
+ fatobj,
+ rocketobj,
+
+ spectreobj,
+ angelobj,
+ transobj,
+ uberobj,
+ willobj,
+ deathobj,
+ hrocketobj,
+ sparkobj
+} classtype;
+
+typedef enum {
+ none,
+ block,
+ bo_gibs,
+ bo_alpo,
+ bo_firstaid,
+ bo_key1,
+ bo_key2,
+ bo_key3,
+ bo_key4,
+ bo_cross,
+ bo_chalice,
+ bo_bible,
+ bo_crown,
+ bo_clip,
+ bo_clip2,
+ bo_machinegun,
+ bo_chaingun,
+ bo_food,
+ bo_fullheal,
+ bo_25clip,
+ bo_spear
+} wl_stat_t;
+
+typedef enum {
+ east,
+ northeast,
+ north,
+ northwest,
+ west,
+ southwest,
+ south,
+ southeast,
+ nodir
+} dirtype;
+
+
+#define NUMENEMIES 22
+typedef enum {
+ en_guard,
+ en_officer,
+ en_ss,
+ en_dog,
+ en_boss,
+ en_schabbs,
+ en_fake,
+ en_hitler,
+ en_mutant,
+ en_blinky,
+ en_clyde,
+ en_pinky,
+ en_inky,
+ en_gretel,
+ en_gift,
+ en_fat,
+ en_spectre,
+ en_angel,
+ en_trans,
+ en_uber,
+ en_will,
+ en_death
+} enemy_t;
+
+typedef void (* statefunc) (void *);
+
+typedef struct statestruct
+{
+ boolean rotate;
+ short shapenum; // a shapenum of -1 means get from ob->temp1
+ short tictime;
+ void (*think) (void *),(*action) (void *);
+ struct statestruct *next;
+} statetype;
+
+
+//---------------------
+//
+// trivial actor structure
+//
+//---------------------
+
+typedef struct statstruct
+{
+ byte tilex,tiley;
+ short shapenum; // if shapenum == -1 the obj has been removed
+ byte *visspot;
+ uint32_t flags;
+ byte itemnumber;
+} statobj_t;
+
+
+//---------------------
+//
+// door actor structure
+//
+//---------------------
+
+typedef enum
+{
+ dr_open,dr_closed,dr_opening,dr_closing
+} doortype;
+
+typedef struct doorstruct
+{
+ byte tilex,tiley;
+ boolean vertical;
+ byte lock;
+ doortype action;
+ short ticcount;
+} doorobj_t;
+
+
+//--------------------
+//
+// thinking actor structure
+//
+//--------------------
+
+typedef struct objstruct
+{
+ activetype active;
+ short ticcount;
+ classtype obclass;
+ statetype *state;
+
+ uint32_t flags; // FL_SHOOTABLE, etc
+
+ int32_t distance; // if negative, wait for that door to open
+ dirtype dir;
+
+ fixed x,y;
+ word tilex,tiley;
+ byte areanumber;
+
+ short viewx;
+ word viewheight;
+ fixed transx,transy; // in global coord
+
+ short angle;
+ short hitpoints;
+ int32_t speed;
+
+ short temp1,temp2,hidden;
+ struct objstruct *next,*prev;
+} objtype;
+
+enum
+{
+ bt_nobutton=-1,
+ bt_attack=0,
+ bt_strafe,
+ bt_run,
+ bt_use,
+ bt_readyknife,
+ bt_readypistol,
+ bt_readymachinegun,
+ bt_readychaingun,
+ bt_nextweapon,
+ bt_prevweapon,
+ bt_esc,
+ bt_pause,
+ bt_strafeleft,
+ bt_straferight,
+ bt_moveforward,
+ bt_movebackward,
+ bt_turnleft,
+ bt_turnright,
+ NUMBUTTONS
+};
+
+
+#define NUMWEAPONS 4
+typedef enum
+{
+ wp_knife,
+ wp_pistol,
+ wp_machinegun,
+ wp_chaingun
+} weapontype;
+
+
+enum
+{
+ gd_baby,
+ gd_easy,
+ gd_medium,
+ gd_hard
+};
+
+//---------------
+//
+// gamestate structure
+//
+//---------------
+
+typedef struct
+{
+ short difficulty;
+ short mapon;
+ int32_t oldscore,score,nextextra;
+ short lives;
+ short health;
+ short ammo;
+ short keys;
+ weapontype bestweapon,weapon,chosenweapon;
+
+ short faceframe;
+ short attackframe,attackcount,weaponframe;
+
+ short episode,secretcount,treasurecount,killcount,
+ secrettotal,treasuretotal,killtotal;
+ int32_t TimeCount;
+ int32_t killx,killy;
+ boolean victoryflag; // set during victory animations
+} gametype;
+
+
+typedef enum
+{
+ ex_stillplaying,
+ ex_completed,
+ ex_died,
+ ex_warped,
+ ex_resetgame,
+ ex_loadedgame,
+ ex_victorious,
+ ex_abort,
+ ex_demodone,
+ ex_secretlevel
+} exit_t;
+
+
+extern word *mapsegs[MAPPLANES];
+extern int mapon;
+
+/*
+=============================================================================
+
+ WL_MAIN DEFINITIONS
+
+=============================================================================
+*/
+
+extern boolean loadedgame;
+extern fixed focallength;
+extern int viewscreenx, viewscreeny;
+extern int viewwidth;
+extern int viewheight;
+extern short centerx;
+extern int32_t heightnumerator;
+extern fixed scale;
+
+extern int dirangle[9];
+
+extern int mouseadjustment;
+extern int shootdelta;
+extern unsigned screenofs;
+
+extern boolean startgame;
+extern char str[80];
+extern char configdir[256];
+extern char configname[13];
+
+//
+// Command line parameter variables
+//
+extern boolean param_debugmode;
+extern boolean param_nowait;
+extern int param_difficulty;
+extern int param_tedlevel;
+extern int param_joystickindex;
+extern int param_joystickhat;
+extern int param_samplerate;
+extern int param_audiobuffer;
+extern int param_mission;
+extern boolean param_goodtimes;
+extern boolean param_ignorenumchunks;
+
+
+void NewGame (int difficulty,int episode);
+void CalcProjection (int32_t focal);
+void NewViewSize (int width);
+boolean SetViewSize (unsigned width, unsigned height);
+boolean LoadTheGame(FILE *file,int x,int y);
+boolean SaveTheGame(FILE *file,int x,int y);
+void ShowViewSize (int width);
+void ShutdownId (void);
+
+
+/*
+=============================================================================
+
+ WL_GAME DEFINITIONS
+
+=============================================================================
+*/
+
+extern gametype gamestate;
+extern byte bordercol;
+extern SDL_Surface *latchpics[NUMLATCHPICS];
+extern char demoname[13];
+
+void SetupGameLevel (void);
+void GameLoop (void);
+void DrawPlayBorder (void);
+void DrawStatusBorder (byte color);
+void DrawPlayScreen (void);
+void DrawPlayBorderSides (void);
+void ShowActStatus();
+
+void PlayDemo (int demonumber);
+void RecordDemo (void);
+
+
+#ifdef SPEAR
+extern int32_t spearx,speary;
+extern unsigned spearangle;
+extern boolean spearflag;
+#endif
+
+
+#define ClearMemory SD_StopDigitized
+
+
+// JAB
+#define PlaySoundLocTile(s,tx,ty) PlaySoundLocGlobal(s,(((int32_t)(tx) << TILESHIFT) + (1L << (TILESHIFT - 1))),(((int32_t)ty << TILESHIFT) + (1L << (TILESHIFT - 1))))
+#define PlaySoundLocActor(s,ob) PlaySoundLocGlobal(s,(ob)->x,(ob)->y)
+void PlaySoundLocGlobal(word s,fixed gx,fixed gy);
+void UpdateSoundLoc(void);
+
+
+/*
+=============================================================================
+
+ WL_PLAY DEFINITIONS
+
+=============================================================================
+*/
+
+#define BASEMOVE 35
+#define RUNMOVE 70
+#define BASETURN 35
+#define RUNTURN 70
+
+#define JOYSCALE 2
+
+extern byte tilemap[MAPSIZE][MAPSIZE]; // wall values only
+extern byte spotvis[MAPSIZE][MAPSIZE];
+extern objtype *actorat[MAPSIZE][MAPSIZE];
+
+extern objtype *player;
+
+extern unsigned tics;
+extern int viewsize;
+
+extern int lastgamemusicoffset;
+
+//
+// current user input
+//
+extern int controlx,controly; // range from -100 to 100
+extern boolean buttonstate[NUMBUTTONS];
+extern objtype objlist[MAXACTORS];
+extern boolean buttonheld[NUMBUTTONS];
+extern exit_t playstate;
+extern boolean madenoise;
+extern statobj_t statobjlist[MAXSTATS];
+extern statobj_t *laststatobj;
+extern objtype *newobj,*killerobj;
+extern doorobj_t doorobjlist[MAXDOORS];
+extern doorobj_t *lastdoorobj;
+extern int godmode;
+
+extern boolean demorecord,demoplayback;
+extern int8_t *demoptr, *lastdemoptr;
+extern memptr demobuffer;
+
+//
+// control info
+//
+extern boolean mouseenabled,joystickenabled;
+extern int dirscan[4];
+extern int buttonscan[NUMBUTTONS];
+extern int buttonmouse[4];
+extern int buttonjoy[32];
+
+void InitActorList (void);
+void GetNewActor (void);
+void PlayLoop (void);
+
+void CenterWindow(word w,word h);
+
+void InitRedShifts (void);
+void FinishPaletteShifts (void);
+
+void RemoveObj (objtype *gone);
+void PollControls (void);
+int StopMusic(void);
+void StartMusic(void);
+void ContinueMusic(int offs);
+void StartDamageFlash (int damage);
+void StartBonusFlash (void);
+
+#ifdef SPEAR
+extern int32_t funnyticount; // FOR FUNNY BJ FACE
+#endif
+
+extern objtype *objfreelist; // *obj,*player,*lastobj,
+
+extern boolean noclip,ammocheat;
+extern int singlestep, extravbls;
+
+/*
+=============================================================================
+
+ WL_INTER
+
+=============================================================================
+*/
+
+void IntroScreen (void);
+void PG13(void);
+void DrawHighScores(void);
+void CheckHighScore (int32_t score,word other);
+void Victory (void);
+void LevelCompleted (void);
+void ClearSplitVWB (void);
+
+void PreloadGraphics(void);
+
+
+/*
+=============================================================================
+
+ WL_DEBUG
+
+=============================================================================
+*/
+
+int DebugKeys (void);
+
+/*
+=============================================================================
+
+ WL_DRAW DEFINITIONS
+
+=============================================================================
+*/
+
+//
+// math tables
+//
+extern short *pixelangle;
+extern int32_t finetangent[FINEANGLES/4];
+extern fixed sintable[];
+extern fixed *costable;
+extern int *wallheight;
+extern word horizwall[],vertwall[];
+extern int32_t lasttimecount;
+extern int32_t frameon;
+
+extern unsigned screenloc[3];
+
+extern boolean fizzlein, fpscounter;
+
+extern fixed viewx,viewy; // the focal point
+extern fixed viewsin,viewcos;
+
+void ThreeDRefresh (void);
+void CalcTics (void);
+
+typedef struct
+{
+ word leftpix,rightpix;
+ word dataofs[64];
+// table data after dataofs[rightpix-leftpix+1]
+} t_compshape;
+
+/*
+=============================================================================
+
+ WL_STATE DEFINITIONS
+
+=============================================================================
+*/
+#define TURNTICS 10
+#define SPDPATROL 512
+#define SPDDOG 1500
+
+
+void InitHitRect (objtype *ob, unsigned radius);
+void SpawnNewObj (unsigned tilex, unsigned tiley, statetype *state);
+void NewState (objtype *ob, statetype *state);
+
+boolean TryWalk (objtype *ob);
+void SelectChaseDir (objtype *ob);
+void SelectDodgeDir (objtype *ob);
+void SelectRunDir (objtype *ob);
+void MoveObj (objtype *ob, int32_t move);
+boolean SightPlayer (objtype *ob);
+
+void KillActor (objtype *ob);
+void DamageActor (objtype *ob, unsigned damage);
+
+boolean CheckLine (objtype *ob);
+boolean CheckSight (objtype *ob);
+
+/*
+=============================================================================
+
+ WL_AGENT DEFINITIONS
+
+=============================================================================
+*/
+
+extern short anglefrac;
+extern int facecount, facetimes;
+extern word plux,pluy; // player coordinates scaled to unsigned
+extern int32_t thrustspeed;
+extern objtype *LastAttacker;
+
+void Thrust (int angle, int32_t speed);
+void SpawnPlayer (int tilex, int tiley, int dir);
+void TakeDamage (int points,objtype *attacker);
+void GivePoints (int32_t points);
+void GetBonus (statobj_t *check);
+void GiveWeapon (int weapon);
+void GiveAmmo (int ammo);
+void GiveKey (int key);
+
+//
+// player state info
+//
+
+void StatusDrawFace(unsigned picnum);
+void DrawFace (void);
+void DrawHealth (void);
+void HealSelf (int points);
+void DrawLevel (void);
+void DrawLives (void);
+void GiveExtraMan (void);
+void DrawScore (void);
+void DrawWeapon (void);
+void DrawKeys (void);
+void DrawAmmo (void);
+
+
+/*
+=============================================================================
+
+ WL_ACT1 DEFINITIONS
+
+=============================================================================
+*/
+
+extern doorobj_t doorobjlist[MAXDOORS];
+extern doorobj_t *lastdoorobj;
+extern short doornum;
+
+extern word doorposition[MAXDOORS];
+
+extern byte areaconnect[NUMAREAS][NUMAREAS];
+
+extern boolean areabyplayer[NUMAREAS];
+
+extern word pwallstate;
+extern word pwallpos; // amount a pushable wall has been moved (0-63)
+extern word pwallx,pwally;
+extern byte pwalldir,pwalltile;
+
+
+void InitDoorList (void);
+void InitStaticList (void);
+void SpawnStatic (int tilex, int tiley, int type);
+void SpawnDoor (int tilex, int tiley, boolean vertical, int lock);
+void MoveDoors (void);
+void MovePWalls (void);
+void OpenDoor (int door);
+void PlaceItemType (int itemtype, int tilex, int tiley);
+void PushWall (int checkx, int checky, int dir);
+void OperateDoor (int door);
+void InitAreas (void);
+
+/*
+=============================================================================
+
+ WL_ACT2 DEFINITIONS
+
+=============================================================================
+*/
+
+#define s_nakedbody s_static10
+
+extern statetype s_grddie1;
+extern statetype s_dogdie1;
+extern statetype s_ofcdie1;
+extern statetype s_mutdie1;
+extern statetype s_ssdie1;
+extern statetype s_bossdie1;
+extern statetype s_schabbdie1;
+extern statetype s_fakedie1;
+extern statetype s_mechadie1;
+extern statetype s_hitlerdie1;
+extern statetype s_greteldie1;
+extern statetype s_giftdie1;
+extern statetype s_fatdie1;
+
+extern statetype s_spectredie1;
+extern statetype s_angeldie1;
+extern statetype s_transdie0;
+extern statetype s_uberdie0;
+extern statetype s_willdie1;
+extern statetype s_deathdie1;
+
+
+extern statetype s_grdchase1;
+extern statetype s_dogchase1;
+extern statetype s_ofcchase1;
+extern statetype s_sschase1;
+extern statetype s_mutchase1;
+extern statetype s_bosschase1;
+extern statetype s_schabbchase1;
+extern statetype s_fakechase1;
+extern statetype s_mechachase1;
+extern statetype s_gretelchase1;
+extern statetype s_giftchase1;
+extern statetype s_fatchase1;
+
+extern statetype s_spectrechase1;
+extern statetype s_angelchase1;
+extern statetype s_transchase1;
+extern statetype s_uberchase1;
+extern statetype s_willchase1;
+extern statetype s_deathchase1;
+
+extern statetype s_blinkychase1;
+extern statetype s_hitlerchase1;
+
+extern statetype s_grdpain;
+extern statetype s_grdpain1;
+extern statetype s_ofcpain;
+extern statetype s_ofcpain1;
+extern statetype s_sspain;
+extern statetype s_sspain1;
+extern statetype s_mutpain;
+extern statetype s_mutpain1;
+
+extern statetype s_deathcam;
+
+extern statetype s_schabbdeathcam2;
+extern statetype s_hitlerdeathcam2;
+extern statetype s_giftdeathcam2;
+extern statetype s_fatdeathcam2;
+
+void SpawnStand (enemy_t which, int tilex, int tiley, int dir);
+void SpawnPatrol (enemy_t which, int tilex, int tiley, int dir);
+void KillActor (objtype *ob);
+
+void SpawnDeadGuard (int tilex, int tiley);
+void SpawnBoss (int tilex, int tiley);
+void SpawnGretel (int tilex, int tiley);
+void SpawnTrans (int tilex, int tiley);
+void SpawnUber (int tilex, int tiley);
+void SpawnWill (int tilex, int tiley);
+void SpawnDeath (int tilex, int tiley);
+void SpawnAngel (int tilex, int tiley);
+void SpawnSpectre (int tilex, int tiley);
+void SpawnGhosts (int which, int tilex, int tiley);
+void SpawnSchabbs (int tilex, int tiley);
+void SpawnGift (int tilex, int tiley);
+void SpawnFat (int tilex, int tiley);
+void SpawnFakeHitler (int tilex, int tiley);
+void SpawnHitler (int tilex, int tiley);
+
+void A_DeathScream (objtype *ob);
+void SpawnBJVictory (void);
+
+/*
+=============================================================================
+
+ WL_TEXT DEFINITIONS
+
+=============================================================================
+*/
+
+extern char helpfilename[],endfilename[];
+
+extern void HelpScreens(void);
+extern void EndText(void);
+
+
+/*
+=============================================================================
+
+ GP2X DEFINITIONS
+
+=============================================================================
+*/
+
+#if defined(GP2X)
+
+#if defined(GP2X_940)
+void GP2X_MemoryInit(void);
+void GP2X_Shutdown(void);
+#endif
+void GP2X_ButtonDown(int button);
+void GP2X_ButtonUp(int button);
+
+#endif
+
+
+/*
+=============================================================================
+
+ MISC DEFINITIONS
+
+=============================================================================
+*/
+
+static fixed FixedMul(fixed a, fixed b)
+{
+ return (fixed)(((int64_t)a * b + 0x8000) >> 16);
+}
+
+#ifdef PLAYDEMOLIKEORIGINAL
+ #define DEMOCHOOSE_ORIG_SDL(orig, sdl) ((demorecord || demoplayback) ? (orig) : (sdl))
+ #define DEMOCOND_ORIG (demorecord || demoplayback)
+ #define DEMOIF_SDL if(DEMOCOND_SDL)
+#else
+ #define DEMOCHOOSE_ORIG_SDL(orig, sdl) (sdl)
+ #define DEMOCOND_ORIG false
+ #define DEMOIF_SDL
+#endif
+#define DEMOCOND_SDL (!DEMOCOND_ORIG)
+
+#define GetTicks() ((SDL_GetTicks()*7)/100)
+
+#define ISPOINTER(x) ((((uintptr_t)(x)) & ~0xffff) != 0)
+
+#define CHECKMALLOCRESULT(x) if(!(x)) Quit("Out of memory at %s:%i", __FILE__, __LINE__)
+
+#ifdef _WIN32
+ #define strcasecmp stricmp
+ #define strncasecmp strnicmp
+ #define snprintf _snprintf
+#else
+ static char* itoa(int value, char* string, int radix)
+ {
+ sprintf(string, "%d", value);
+ return string;
+ }
+
+ static char* ltoa(long value, char* string, int radix)
+ {
+ sprintf(string, "%ld", value);
+ return string;
+ }
+#endif
+
+#define lengthof(x) (sizeof(x) / sizeof(*(x)))
+#define endof(x) ((x) + lengthof(x))
+
+static word READWORD(byte **ptr)
+{
+ word val = (*ptr)[0] | (*ptr)[1] << 8;
+ *ptr += 2;
+ return val;
+}
+
+static longword READLONGWORD(byte **ptr)
+{
+ longword val = (*ptr)[0] | (*ptr)[1] << 8 | (*ptr)[2] << 16 | (*ptr)[3] << 24;
+ *ptr += 4;
+ return val;
+}
+
+
+/*
+=============================================================================
+
+ FEATURE DEFINITIONS
+
+=============================================================================
+*/
+
+#ifdef USE_FEATUREFLAGS
+ // The currently available feature flags
+ #define FF_STARSKY 0x0001
+ #define FF_PARALLAXSKY 0x0002
+ #define FF_CLOUDSKY 0x0004
+ #define FF_RAIN 0x0010
+ #define FF_SNOW 0x0020
+
+ // The ffData... variables contain the 16-bit values of the according corners of the current level.
+ // The corners are overwritten with adjacent tiles after initialization in SetupGameLevel
+ // to avoid interpretation as e.g. doors.
+ extern int ffDataTopLeft, ffDataTopRight, ffDataBottomLeft, ffDataBottomRight;
+
+ /*************************************************************
+ * Current usage of ffData... variables:
+ * ffDataTopLeft: lower 8-bit: ShadeDefID
+ * ffDataTopRight: FeatureFlags
+ * ffDataBottomLeft: CloudSkyDefID or ParallaxStartTexture
+ * ffDataBottomRight: unused
+ *************************************************************/
+
+ // The feature flags are stored as a wall in the upper right corner of each level
+ static word GetFeatureFlags()
+ {
+ return ffDataTopRight;
+ }
+
+#endif
+
+#ifdef USE_FLOORCEILINGTEX
+ void DrawFloorAndCeiling(byte *vbuf, unsigned vbufPitch, int min_wallheight);
+#endif
+
+#ifdef USE_PARALLAX
+ void DrawParallax(byte *vbuf, unsigned vbufPitch);
+#endif
+
+#ifdef USE_DIR3DSPR
+ void Scale3DShape(byte *vbuf, unsigned vbufPitch, statobj_t *ob);
+#endif
+
+#endif
diff --git a/apps/plugins/sdl/progs/wolf3d/wl_dir3dspr.c b/apps/plugins/sdl/progs/wolf3d/wl_dir3dspr.c
new file mode 100644
index 0000000000..4bae691621
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/wl_dir3dspr.c
@@ -0,0 +1,230 @@
+#include "version.h"
+
+#ifdef USE_DIR3DSPR
+#include "wl_def.h"
+#include "wl_shade.h"
+
+// Define directional 3d sprites in wl_act1.cpp (there are two examples)
+// Make sure you have according entries in ScanInfoPlane in wl_game.cpp.
+
+
+void Scale3DShaper(int x1, int x2, int shapenum, uint32_t flags, fixed ny1, fixed ny2,
+ fixed nx1, fixed nx2, byte *vbuf, unsigned vbufPitch)
+{
+ t_compshape *shape;
+ unsigned scale1,starty,endy;
+ word *cmdptr;
+ byte *line;
+ byte *vmem;
+ int dx,len,i,newstart,ycnt,pixheight,screndy,upperedge,scrstarty;
+ unsigned j;
+ fixed height,dheight,height1,height2;
+ int xpos[TEXTURESIZE+1];
+ int slinex;
+ fixed dxx=(ny2-ny1)<<8,dzz=(nx2-nx1)<<8;
+ fixed dxa=0,dza=0;
+ byte col;
+
+ shape = (t_compshape *) PM_GetSprite(shapenum);
+
+ len=shape->rightpix-shape->leftpix+1;
+ if(!len) return;
+
+ ny1+=dxx>>9;
+ nx1+=dzz>>9;
+
+ dxa=-(dxx>>1),dza=-(dzz>>1);
+ dxx>>=TEXTURESHIFT,dzz>>=TEXTURESHIFT;
+ dxa+=shape->leftpix*dxx,dza+=shape->leftpix*dzz;
+
+ xpos[0]=(int)((ny1+(dxa>>8))*scale/(nx1+(dza>>8))+centerx);
+ height1 = heightnumerator/((nx1+(dza>>8))>>8);
+ height=(((fixed)height1)<<12)+2048;
+
+ for(i=1;i<=len;i++)
+ {
+ dxa+=dxx,dza+=dzz;
+ xpos[i]=(int)((ny1+(dxa>>8))*scale/(nx1+(dza>>8))+centerx);
+ if(xpos[i-1]>viewwidth) break;
+ }
+ len=i-1;
+ dx = xpos[len] - xpos[0];
+ if(!dx) return;
+
+ height2 = heightnumerator/((nx1+(dza>>8))>>8);
+ dheight=(((fixed)height2-(fixed)height1)<<12)/(fixed)dx;
+
+ cmdptr = (word *) shape->dataofs;
+
+ i=0;
+ if(x2>viewwidth) x2=viewwidth;
+
+ for(i=0;i<len;i++)
+ {
+ for(slinex=xpos[i];slinex<xpos[i+1] && slinex<x2;slinex++)
+ {
+ height+=dheight;
+ if(slinex<0) continue;
+
+ scale1=(unsigned)(height>>15);
+
+ if(wallheight[slinex]<(height>>12) && scale1 /*&& scale1<=maxscale*/)
+ {
+#ifdef USE_SHADING
+ byte *curshades;
+ if(flags & FL_FULLBRIGHT)
+ curshades = shadetable[0];
+ else
+ curshades = shadetable[GetShade(scale1<<3)];
+#endif
+
+ pixheight=scale1*SPRITESCALEFACTOR;
+ upperedge=viewheight/2-scale1;
+
+ line=(byte *)shape + cmdptr[i];
+
+ while((endy = READWORD(&line)) != 0)
+ {
+ endy >>= 1;
+ newstart = READWORD(&line);
+ starty = READWORD(&line) >> 1;
+ j=starty;
+ ycnt=j*pixheight;
+ screndy=(ycnt>>6)+upperedge;
+ if(screndy<0) vmem=vbuf+slinex;
+ else vmem=vbuf+screndy*vbufPitch+slinex;
+ for(;j<endy;j++)
+ {
+ scrstarty=screndy;
+ ycnt+=pixheight;
+ screndy=(ycnt>>6)+upperedge;
+ if(scrstarty!=screndy && screndy>0)
+ {
+#ifdef USE_SHADING
+ col=curshades[((byte *)shape)[newstart+j]];
+#else
+ col=((byte *)shape)[newstart+j];
+#endif
+ if(scrstarty<0) scrstarty=0;
+ if(screndy>viewheight) screndy=viewheight,j=endy;
+
+ while(scrstarty<screndy)
+ {
+ *vmem=col;
+ vmem+=vbufPitch;
+ scrstarty++;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+void Scale3DShape(byte *vbuf, unsigned vbufPitch, statobj_t *ob)
+{
+ fixed nx1,nx2,ny1,ny2;
+ int viewx1,viewx2;
+ fixed diradd;
+ fixed playx = viewx;
+ fixed playy = viewy;
+
+ //
+ // the following values for "diradd" aren't optimized yet
+ // if you have problems with sprites being visible through wall edges
+ // where they shouldn't, you can try to adjust these values and SIZEADD
+ //
+
+#define SIZEADD 1024
+
+ switch(ob->flags & FL_DIR_POS_MASK)
+ {
+ case FL_DIR_POS_FW: diradd=0x7ff0+0x8000; break;
+ case FL_DIR_POS_BW: diradd=-0x7ff0+0x8000; break;
+ case FL_DIR_POS_MID: diradd=0x8000; break;
+ default:
+ Quit("Unknown directional 3d sprite position (shapenum = %i)", ob->shapenum);
+ }
+
+ if(ob->flags & FL_DIR_VERT_FLAG) // vertical dir 3d sprite
+ {
+ fixed gy1,gy2,gx,gyt1,gyt2,gxt;
+ //
+ // translate point to view centered coordinates
+ //
+ gy1 = (((long)ob->tiley) << TILESHIFT)+0x8000-playy-0x8000L-SIZEADD;
+ gy2 = gy1+0x10000L+2*SIZEADD;
+ gx = (((long)ob->tilex) << TILESHIFT)+diradd-playx;
+
+ //
+ // calculate newx
+ //
+ gxt = FixedMul(gx,viewcos);
+ gyt1 = FixedMul(gy1,viewsin);
+ gyt2 = FixedMul(gy2,viewsin);
+ nx1 = gxt-gyt1;
+ nx2 = gxt-gyt2;
+
+ //
+ // calculate newy
+ //
+ gxt = FixedMul(gx,viewsin);
+ gyt1 = FixedMul(gy1,viewcos);
+ gyt2 = FixedMul(gy2,viewcos);
+ ny1 = gyt1+gxt;
+ ny2 = gyt2+gxt;
+ }
+ else // horizontal dir 3d sprite
+ {
+ fixed gx1,gx2,gy,gxt1,gxt2,gyt;
+ //
+ // translate point to view centered coordinates
+ //
+ gx1 = (((long)ob->tilex) << TILESHIFT)+0x8000-playx-0x8000L-SIZEADD;
+ gx2 = gx1+0x10000L+2*SIZEADD;
+ gy = (((long)ob->tiley) << TILESHIFT)+diradd-playy;
+
+ //
+ // calculate newx
+ //
+ gxt1 = FixedMul(gx1,viewcos);
+ gxt2 = FixedMul(gx2,viewcos);
+ gyt = FixedMul(gy,viewsin);
+ nx1 = gxt1-gyt;
+ nx2 = gxt2-gyt;
+
+ //
+ // calculate newy
+ //
+ gxt1 = FixedMul(gx1,viewsin);
+ gxt2 = FixedMul(gx2,viewsin);
+ gyt = FixedMul(gy,viewcos);
+ ny1 = gyt+gxt1;
+ ny2 = gyt+gxt2;
+ }
+
+ if(nx1 < 0 || nx2 < 0) return; // TODO: Clip on viewplane
+
+ //
+ // calculate perspective ratio
+ //
+ if(nx1>=0 && nx1<=1792) nx1=1792;
+ if(nx1<0 && nx1>=-1792) nx1=-1792;
+ if(nx2>=0 && nx2<=1792) nx2=1792;
+ if(nx2<0 && nx2>=-1792) nx2=-1792;
+
+ viewx1=(int)(centerx+ny1*scale/nx1);
+ viewx2=(int)(centerx+ny2*scale/nx2);
+
+ if(viewx2 < viewx1)
+ {
+ Scale3DShaper(viewx2,viewx1,ob->shapenum,ob->flags,ny2,ny1,nx2,nx1,vbuf,vbufPitch);
+ }
+ else
+ {
+ Scale3DShaper(viewx1,viewx2,ob->shapenum,ob->flags,ny1,ny2,nx1,nx2,vbuf,vbufPitch);
+ }
+}
+
+#endif
diff --git a/apps/plugins/sdl/progs/wolf3d/wl_draw.c b/apps/plugins/sdl/progs/wolf3d/wl_draw.c
new file mode 100644
index 0000000000..625e93dc0a
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/wl_draw.c
@@ -0,0 +1,1647 @@
+// WL_DRAW.C
+
+#include "wl_def.h"
+#pragma hdrstop
+
+#include "wl_cloudsky.h"
+#include "wl_atmos.h"
+#include "wl_shade.h"
+
+/*
+=============================================================================
+
+ LOCAL CONSTANTS
+
+=============================================================================
+*/
+
+// the door is the last picture before the sprites
+#define DOORWALL (PMSpriteStart-8)
+
+#define ACTORSIZE 0x4000
+
+/*
+=============================================================================
+
+ GLOBAL VARIABLES
+
+=============================================================================
+*/
+
+static byte *vbuf = NULL;
+unsigned vbufPitch = 0;
+
+int32_t lasttimecount;
+int32_t frameon;
+boolean fpscounter;
+
+int fps_frames=0, fps_time=0, fps=0;
+
+int *wallheight;
+int min_wallheight;
+
+//
+// math tables
+//
+short *pixelangle;
+int32_t finetangent[FINEANGLES/4];
+fixed sintable[ANGLES+ANGLES/4];
+fixed *costable = sintable+(ANGLES/4);
+
+//
+// refresh variables
+//
+fixed viewx,viewy; // the focal point
+short viewangle;
+fixed viewsin,viewcos;
+
+void TransformActor (objtype *ob);
+void BuildTables (void);
+void ClearScreen (void);
+int CalcRotate (objtype *ob);
+void DrawScaleds (void);
+void CalcTics (void);
+void ThreeDRefresh (void);
+
+
+
+//
+// wall optimization variables
+//
+int lastside; // true for vertical
+int32_t lastintercept;
+int lasttilehit;
+int lasttexture;
+
+//
+// ray tracing variables
+//
+short focaltx,focalty,viewtx,viewty;
+longword xpartialup,xpartialdown,ypartialup,ypartialdown;
+
+short midangle,angle;
+
+word tilehit;
+int pixx;
+
+short xtile,ytile;
+short xtilestep,ytilestep;
+int32_t xintercept,yintercept;
+word xstep,ystep;
+word xspot,yspot;
+int texdelta;
+
+word horizwall[MAXWALLTILES],vertwall[MAXWALLTILES];
+
+
+/*
+============================================================================
+
+ 3 - D DEFINITIONS
+
+============================================================================
+*/
+
+/*
+========================
+=
+= TransformActor
+=
+= Takes paramaters:
+= gx,gy : globalx/globaly of point
+=
+= globals:
+= viewx,viewy : point of view
+= viewcos,viewsin : sin/cos of viewangle
+= scale : conversion from global value to screen value
+=
+= sets:
+= screenx,transx,transy,screenheight: projected edge location and size
+=
+========================
+*/
+
+
+//
+// transform actor
+//
+void TransformActor (objtype *ob)
+{
+ fixed gx,gy,gxt,gyt,nx,ny;
+
+//
+// translate point to view centered coordinates
+//
+ gx = ob->x-viewx;
+ gy = ob->y-viewy;
+
+//
+// calculate newx
+//
+ gxt = FixedMul(gx,viewcos);
+ gyt = FixedMul(gy,viewsin);
+ nx = gxt-gyt-ACTORSIZE; // fudge the shape forward a bit, because
+ // the midpoint could put parts of the shape
+ // into an adjacent wall
+
+//
+// calculate newy
+//
+ gxt = FixedMul(gx,viewsin);
+ gyt = FixedMul(gy,viewcos);
+ ny = gyt+gxt;
+
+//
+// calculate perspective ratio
+//
+ ob->transx = nx;
+ ob->transy = ny;
+
+ if (nx<MINDIST) // too close, don't overflow the divide
+ {
+ ob->viewheight = 0;
+ return;
+ }
+
+ ob->viewx = (word)(centerx + ny*scale/nx);
+
+//
+// calculate height (heightnumerator/(nx>>8))
+//
+ ob->viewheight = (word)(heightnumerator/(nx>>8));
+}
+
+//==========================================================================
+
+/*
+========================
+=
+= TransformTile
+=
+= Takes paramaters:
+= tx,ty : tile the object is centered in
+=
+= globals:
+= viewx,viewy : point of view
+= viewcos,viewsin : sin/cos of viewangle
+= scale : conversion from global value to screen value
+=
+= sets:
+= screenx,transx,transy,screenheight: projected edge location and size
+=
+= Returns true if the tile is withing getting distance
+=
+========================
+*/
+
+boolean TransformTile (int tx, int ty, short *dispx, short *dispheight)
+{
+ fixed gx,gy,gxt,gyt,nx,ny;
+
+//
+// translate point to view centered coordinates
+//
+ gx = ((int32_t)tx<<TILESHIFT)+0x8000-viewx;
+ gy = ((int32_t)ty<<TILESHIFT)+0x8000-viewy;
+
+//
+// calculate newx
+//
+ gxt = FixedMul(gx,viewcos);
+ gyt = FixedMul(gy,viewsin);
+ nx = gxt-gyt-0x2000; // 0x2000 is size of object
+
+//
+// calculate newy
+//
+ gxt = FixedMul(gx,viewsin);
+ gyt = FixedMul(gy,viewcos);
+ ny = gyt+gxt;
+
+
+//
+// calculate height / perspective ratio
+//
+ if (nx<MINDIST) // too close, don't overflow the divide
+ *dispheight = 0;
+ else
+ {
+ *dispx = (short)(centerx + ny*scale/nx);
+ *dispheight = (short)(heightnumerator/(nx>>8));
+ }
+
+//
+// see if it should be grabbed
+//
+ if (nx<TILEGLOBAL && ny>-TILEGLOBAL/2 && ny<TILEGLOBAL/2)
+ return true;
+ else
+ return false;
+}
+
+//==========================================================================
+
+/*
+====================
+=
+= CalcHeight
+=
+= Calculates the height of xintercept,yintercept from viewx,viewy
+=
+====================
+*/
+
+int CalcHeight()
+{
+ fixed z = FixedMul(xintercept - viewx, viewcos)
+ - FixedMul(yintercept - viewy, viewsin);
+ if(z < MINDIST) z = MINDIST;
+ int height = heightnumerator / (z >> 8);
+ if(height < min_wallheight) min_wallheight = height;
+ return height;
+}
+
+//==========================================================================
+
+/*
+===================
+=
+= ScalePost
+=
+===================
+*/
+
+byte *postsource;
+int postx;
+int postwidth;
+
+void ScalePost()
+{
+ int ywcount, yoffs, yw, yd, yendoffs;
+ byte col;
+
+#ifdef USE_SHADING
+ byte *curshades = shadetable[GetShade(wallheight[postx])];
+#endif
+
+ ywcount = yd = wallheight[postx] >> 3;
+ if(yd <= 0) yd = 100;
+
+ yoffs = (viewheight / 2 - ywcount) * vbufPitch;
+ if(yoffs < 0) yoffs = 0;
+ yoffs += postx;
+
+ yendoffs = viewheight / 2 + ywcount - 1;
+ yw=TEXTURESIZE-1;
+
+ while(yendoffs >= viewheight)
+ {
+ ywcount -= TEXTURESIZE/2;
+ while(ywcount <= 0)
+ {
+ ywcount += yd;
+ yw--;
+ }
+ yendoffs--;
+ }
+ if(yw < 0) return;
+
+#ifdef USE_SHADING
+ col = curshades[postsource[yw]];
+#else
+ col = postsource[yw];
+#endif
+ yendoffs = yendoffs * vbufPitch + postx;
+ while(yoffs <= yendoffs)
+ {
+ vbuf[yendoffs] = col;
+ ywcount -= TEXTURESIZE/2;
+ if(ywcount <= 0)
+ {
+ do
+ {
+ ywcount += yd;
+ yw--;
+ }
+ while(ywcount <= 0);
+ if(yw < 0) break;
+#ifdef USE_SHADING
+ col = curshades[postsource[yw]];
+#else
+ col = postsource[yw];
+#endif
+ }
+ yendoffs -= vbufPitch;
+ }
+}
+
+void GlobalScalePost(byte *vidbuf, unsigned pitch)
+{
+ vbuf = vidbuf;
+ vbufPitch = pitch;
+ ScalePost();
+}
+
+/*
+====================
+=
+= HitVertWall
+=
+= tilehit bit 7 is 0, because it's not a door tile
+= if bit 6 is 1 and the adjacent tile is a door tile, use door side pic
+=
+====================
+*/
+
+void HitVertWall (void)
+{
+ int wallpic;
+ int texture;
+
+ texture = ((yintercept+texdelta)>>TEXTUREFROMFIXEDSHIFT)&TEXTUREMASK;
+ if (xtilestep == -1)
+ {
+ texture = TEXTUREMASK-texture;
+ xintercept += TILEGLOBAL;
+ }
+
+ if(lastside==1 && lastintercept==xtile && lasttilehit==tilehit && !(lasttilehit & 0x40))
+ {
+ if((pixx&3) && texture == lasttexture)
+ {
+ ScalePost();
+ postx = pixx;
+ wallheight[pixx] = wallheight[pixx-1];
+ return;
+ }
+ ScalePost();
+ wallheight[pixx] = CalcHeight();
+ postsource+=texture-lasttexture;
+ postwidth=1;
+ postx=pixx;
+ lasttexture=texture;
+ return;
+ }
+
+ if(lastside!=-1) ScalePost();
+
+ lastside=1;
+ lastintercept=xtile;
+ lasttilehit=tilehit;
+ lasttexture=texture;
+ wallheight[pixx] = CalcHeight();
+ postx = pixx;
+ postwidth = 1;
+
+ if (tilehit & 0x40)
+ { // check for adjacent doors
+ ytile = (short)(yintercept>>TILESHIFT);
+ if ( tilemap[xtile-xtilestep][ytile]&0x80 )
+ wallpic = DOORWALL+3;
+ else
+ wallpic = vertwall[tilehit & ~0x40];
+ }
+ else
+ wallpic = vertwall[tilehit];
+
+ postsource = PM_GetTexture(wallpic) + texture;
+}
+
+
+/*
+====================
+=
+= HitHorizWall
+=
+= tilehit bit 7 is 0, because it's not a door tile
+= if bit 6 is 1 and the adjacent tile is a door tile, use door side pic
+=
+====================
+*/
+
+void HitHorizWall (void)
+{
+ int wallpic;
+ int texture;
+
+ texture = ((xintercept+texdelta)>>TEXTUREFROMFIXEDSHIFT)&TEXTUREMASK;
+ if (ytilestep == -1)
+ yintercept += TILEGLOBAL;
+ else
+ texture = TEXTUREMASK-texture;
+
+ if(lastside==0 && lastintercept==ytile && lasttilehit==tilehit && !(lasttilehit & 0x40))
+ {
+ if((pixx&3) && texture == lasttexture)
+ {
+ ScalePost();
+ postx=pixx;
+ wallheight[pixx] = wallheight[pixx-1];
+ return;
+ }
+ ScalePost();
+ wallheight[pixx] = CalcHeight();
+ postsource+=texture-lasttexture;
+ postwidth=1;
+ postx=pixx;
+ lasttexture=texture;
+ return;
+ }
+
+ if(lastside!=-1) ScalePost();
+
+ lastside=0;
+ lastintercept=ytile;
+ lasttilehit=tilehit;
+ lasttexture=texture;
+ wallheight[pixx] = CalcHeight();
+ postx = pixx;
+ postwidth = 1;
+
+ if (tilehit & 0x40)
+ { // check for adjacent doors
+ xtile = (short)(xintercept>>TILESHIFT);
+ if ( tilemap[xtile][ytile-ytilestep]&0x80)
+ wallpic = DOORWALL+2;
+ else
+ wallpic = horizwall[tilehit & ~0x40];
+ }
+ else
+ wallpic = horizwall[tilehit];
+
+ postsource = PM_GetTexture(wallpic) + texture;
+}
+
+//==========================================================================
+
+/*
+====================
+=
+= HitHorizDoor
+=
+====================
+*/
+
+void HitHorizDoor (void)
+{
+ int doorpage;
+ int doornum;
+ int texture;
+
+ doornum = tilehit&0x7f;
+ texture = ((xintercept-doorposition[doornum])>>TEXTUREFROMFIXEDSHIFT)&TEXTUREMASK;
+
+ if(lasttilehit==tilehit)
+ {
+ if((pixx&3) && texture == lasttexture)
+ {
+ ScalePost();
+ postx=pixx;
+ wallheight[pixx] = wallheight[pixx-1];
+ return;
+ }
+ ScalePost();
+ wallheight[pixx] = CalcHeight();
+ postsource+=texture-lasttexture;
+ postwidth=1;
+ postx=pixx;
+ lasttexture=texture;
+ return;
+ }
+
+ if(lastside!=-1) ScalePost();
+
+ lastside=2;
+ lasttilehit=tilehit;
+ lasttexture=texture;
+ wallheight[pixx] = CalcHeight();
+ postx = pixx;
+ postwidth = 1;
+
+ switch(doorobjlist[doornum].lock)
+ {
+ case dr_normal:
+ doorpage = DOORWALL;
+ break;
+ case dr_lock1:
+ case dr_lock2:
+ case dr_lock3:
+ case dr_lock4:
+ doorpage = DOORWALL+6;
+ break;
+ case dr_elevator:
+ doorpage = DOORWALL+4;
+ break;
+ }
+
+ postsource = PM_GetTexture(doorpage) + texture;
+}
+
+//==========================================================================
+
+/*
+====================
+=
+= HitVertDoor
+=
+====================
+*/
+
+void HitVertDoor (void)
+{
+ int doorpage;
+ int doornum;
+ int texture;
+
+ doornum = tilehit&0x7f;
+ texture = ((yintercept-doorposition[doornum])>>TEXTUREFROMFIXEDSHIFT)&TEXTUREMASK;
+
+ if(lasttilehit==tilehit)
+ {
+ if((pixx&3) && texture == lasttexture)
+ {
+ ScalePost();
+ postx=pixx;
+ wallheight[pixx] = wallheight[pixx-1];
+ return;
+ }
+ ScalePost();
+ wallheight[pixx] = CalcHeight();
+ postsource+=texture-lasttexture;
+ postwidth=1;
+ postx=pixx;
+ lasttexture=texture;
+ return;
+ }
+
+ if(lastside!=-1) ScalePost();
+
+ lastside=2;
+ lasttilehit=tilehit;
+ lasttexture=texture;
+ wallheight[pixx] = CalcHeight();
+ postx = pixx;
+ postwidth = 1;
+
+ switch(doorobjlist[doornum].lock)
+ {
+ case dr_normal:
+ doorpage = DOORWALL+1;
+ break;
+ case dr_lock1:
+ case dr_lock2:
+ case dr_lock3:
+ case dr_lock4:
+ doorpage = DOORWALL+7;
+ break;
+ case dr_elevator:
+ doorpage = DOORWALL+5;
+ break;
+ }
+
+ postsource = PM_GetTexture(doorpage) + texture;
+}
+
+//==========================================================================
+
+#define HitHorizBorder HitHorizWall
+#define HitVertBorder HitVertWall
+
+//==========================================================================
+
+byte vgaCeiling[]=
+{
+#ifndef SPEAR
+ 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0xbf,
+ 0x4e,0x4e,0x4e,0x1d,0x8d,0x4e,0x1d,0x2d,0x1d,0x8d,
+ 0x1d,0x1d,0x1d,0x1d,0x1d,0x2d,0xdd,0x1d,0x1d,0x98,
+
+ 0x1d,0x9d,0x2d,0xdd,0xdd,0x9d,0x2d,0x4d,0x1d,0xdd,
+ 0x7d,0x1d,0x2d,0x2d,0xdd,0xd7,0x1d,0x1d,0x1d,0x2d,
+ 0x1d,0x1d,0x1d,0x1d,0xdd,0xdd,0x7d,0xdd,0xdd,0xdd
+#else
+ 0x6f,0x4f,0x1d,0xde,0xdf,0x2e,0x7f,0x9e,0xae,0x7f,
+ 0x1d,0xde,0xdf,0xde,0xdf,0xde,0xe1,0xdc,0x2e,0x1d,0xdc
+#endif
+};
+
+/*
+=====================
+=
+= VGAClearScreen
+=
+=====================
+*/
+
+void VGAClearScreen (void)
+{
+ byte ceiling=vgaCeiling[gamestate.episode*10+mapon];
+
+ int y;
+ byte *ptr = vbuf;
+#ifdef USE_SHADING
+ for(y = 0; y < viewheight / 2; y++, ptr += vbufPitch)
+ memset(ptr, shadetable[GetShade((viewheight / 2 - y) << 3)][ceiling], viewwidth);
+ for(; y < viewheight; y++, ptr += vbufPitch)
+ memset(ptr, shadetable[GetShade((y - viewheight / 2) << 3)][0x19], viewwidth);
+#else
+ for(y = 0; y < viewheight / 2; y++, ptr += vbufPitch)
+ memset(ptr, ceiling, viewwidth);
+ for(; y < viewheight; y++, ptr += vbufPitch)
+ memset(ptr, 0x19, viewwidth);
+#endif
+}
+
+//==========================================================================
+
+/*
+=====================
+=
+= CalcRotate
+=
+=====================
+*/
+
+int CalcRotate (objtype *ob)
+{
+ int angle, viewangle;
+
+ // this isn't exactly correct, as it should vary by a trig value,
+ // but it is close enough with only eight rotations
+
+ viewangle = player->angle + (centerx - ob->viewx)/8;
+
+ if (ob->obclass == rocketobj || ob->obclass == hrocketobj)
+ angle = (viewangle-180) - ob->angle;
+ else
+ angle = (viewangle-180) - dirangle[ob->dir];
+
+ angle+=ANGLES/16;
+ while (angle>=ANGLES)
+ angle-=ANGLES;
+ while (angle<0)
+ angle+=ANGLES;
+
+ if (ob->state->rotate == 2) // 2 rotation pain frame
+ return 0; // pain with shooting frame bugfix
+
+ return angle/(ANGLES/8);
+}
+
+void ScaleShape (int xcenter, int shapenum, unsigned height, uint32_t flags)
+{
+ t_compshape *shape;
+ unsigned scale,pixheight;
+ unsigned starty,endy;
+ word *cmdptr;
+ byte *cline;
+ byte *line;
+ byte *vmem;
+ int actx,i,upperedge;
+ short newstart;
+ int scrstarty,screndy,lpix,rpix,pixcnt,ycnt;
+ unsigned j;
+ byte col;
+
+#ifdef USE_SHADING
+ byte *curshades;
+ if(flags & FL_FULLBRIGHT)
+ curshades = shadetable[0];
+ else
+ curshades = shadetable[GetShade(height)];
+#endif
+
+ shape = (t_compshape *) PM_GetSprite(shapenum);
+
+ scale=height>>3; // low three bits are fractional
+ if(!scale) return; // too close or far away
+
+ pixheight=scale*SPRITESCALEFACTOR;
+ actx=xcenter-scale;
+ upperedge=viewheight/2-scale;
+
+ cmdptr=(word *) shape->dataofs;
+
+ for(i=shape->leftpix,pixcnt=i*pixheight,rpix=(pixcnt>>6)+actx;i<=shape->rightpix;i++,cmdptr++)
+ {
+ lpix=rpix;
+ if(lpix>=viewwidth) break;
+ pixcnt+=pixheight;
+ rpix=(pixcnt>>6)+actx;
+ if(lpix!=rpix && rpix>0)
+ {
+ if(lpix<0) lpix=0;
+ if(rpix>viewwidth) rpix=viewwidth,i=shape->rightpix+1;
+ cline=(byte *)shape + *cmdptr;
+ while(lpix<rpix)
+ {
+ if(wallheight[lpix]<=(int)height)
+ {
+ line=cline;
+ while((endy = READWORD(&line)) != 0)
+ {
+ endy >>= 1;
+ newstart = READWORD(&line);
+ starty = READWORD(&line) >> 1;
+ j=starty;
+ ycnt=j*pixheight;
+ screndy=(ycnt>>6)+upperedge;
+ if(screndy<0) vmem=vbuf+lpix;
+ else vmem=vbuf+screndy*vbufPitch+lpix;
+ for(;j<endy;j++)
+ {
+ scrstarty=screndy;
+ ycnt+=pixheight;
+ screndy=(ycnt>>6)+upperedge;
+ if(scrstarty!=screndy && screndy>0)
+ {
+#ifdef USE_SHADING
+ col=curshades[((byte *)shape)[newstart+j]];
+#else
+ col=((byte *)shape)[newstart+j];
+#endif
+ if(scrstarty<0) scrstarty=0;
+ if(screndy>viewheight) screndy=viewheight,j=endy;
+
+ while(scrstarty<screndy)
+ {
+ *vmem=col;
+ vmem+=vbufPitch;
+ scrstarty++;
+ }
+ }
+ }
+ }
+ }
+ lpix++;
+ }
+ }
+ }
+}
+
+void SimpleScaleShape (int xcenter, int shapenum, unsigned height)
+{
+ t_compshape *shape;
+ unsigned scale,pixheight;
+ unsigned starty,endy;
+ word *cmdptr;
+ byte *cline;
+ byte *line;
+ int actx,i,upperedge;
+ short newstart;
+ int scrstarty,screndy,lpix,rpix,pixcnt,ycnt;
+ unsigned j;
+ byte col;
+ byte *vmem;
+
+ shape = (t_compshape *) PM_GetSprite(shapenum);
+
+ scale=height>>1;
+ pixheight=scale*SPRITESCALEFACTOR;
+ actx=xcenter-scale;
+ upperedge=viewheight/2-scale;
+
+ cmdptr=shape->dataofs;
+
+ for(i=shape->leftpix,pixcnt=i*pixheight,rpix=(pixcnt>>6)+actx;i<=shape->rightpix;i++,cmdptr++)
+ {
+ lpix=rpix;
+ if(lpix>=viewwidth) break;
+ pixcnt+=pixheight;
+ rpix=(pixcnt>>6)+actx;
+ if(lpix!=rpix && rpix>0)
+ {
+ if(lpix<0) lpix=0;
+ if(rpix>viewwidth) rpix=viewwidth,i=shape->rightpix+1;
+ cline = (byte *)shape + *cmdptr;
+ while(lpix<rpix)
+ {
+ line=cline;
+ while((endy = READWORD(&line)) != 0)
+ {
+ endy >>= 1;
+ newstart = READWORD(&line);
+ starty = READWORD(&line) >> 1;
+ j=starty;
+ ycnt=j*pixheight;
+ screndy=(ycnt>>6)+upperedge;
+ if(screndy<0) vmem=vbuf+lpix;
+ else vmem=vbuf+screndy*vbufPitch+lpix;
+ for(;j<endy;j++)
+ {
+ scrstarty=screndy;
+ ycnt+=pixheight;
+ screndy=(ycnt>>6)+upperedge;
+ if(scrstarty!=screndy && screndy>0)
+ {
+ col=((byte *)shape)[newstart+j];
+ if(scrstarty<0) scrstarty=0;
+ if(screndy>viewheight) screndy=viewheight,j=endy;
+
+ while(scrstarty<screndy)
+ {
+ *vmem=col;
+ vmem+=vbufPitch;
+ scrstarty++;
+ }
+ }
+ }
+ }
+ lpix++;
+ }
+ }
+ }
+}
+
+/*
+=====================
+=
+= DrawScaleds
+=
+= Draws all objects that are visable
+=
+=====================
+*/
+
+#define MAXVISABLE 250
+
+typedef struct
+{
+ short viewx,
+ viewheight,
+ shapenum;
+ short flags; // this must be changed to uint32_t, when you
+ // you need more than 16-flags for drawing
+#ifdef USE_DIR3DSPR
+ statobj_t *transsprite;
+#endif
+} visobj_t;
+
+visobj_t vislist[MAXVISABLE];
+visobj_t *visptr,*visstep,*farthest;
+
+void DrawScaleds (void)
+{
+ int i,least,numvisable,height;
+ byte *tilespot,*visspot;
+ unsigned spotloc;
+
+ statobj_t *statptr;
+ objtype *obj;
+
+ visptr = &vislist[0];
+
+//
+// place static objects
+//
+ for (statptr = &statobjlist[0] ; statptr !=laststatobj ; statptr++)
+ {
+ if ((visptr->shapenum = statptr->shapenum) == -1)
+ continue; // object has been deleted
+
+ if (!*statptr->visspot)
+ continue; // not visable
+
+ if (TransformTile (statptr->tilex,statptr->tiley,
+ &visptr->viewx,&visptr->viewheight) && statptr->flags & FL_BONUS)
+ {
+ GetBonus (statptr);
+ if(statptr->shapenum == -1)
+ continue; // object has been taken
+ }
+
+ if (!visptr->viewheight)
+ continue; // to close to the object
+
+#ifdef USE_DIR3DSPR
+ if(statptr->flags & FL_DIR_MASK)
+ visptr->transsprite=statptr;
+ else
+ visptr->transsprite=NULL;
+#endif
+
+ if (visptr < &vislist[MAXVISABLE-1]) // don't let it overflow
+ {
+ visptr->flags = (short) statptr->flags;
+ visptr++;
+ }
+ }
+
+//
+// place active objects
+//
+ for (obj = player->next;obj;obj=obj->next)
+ {
+ if ((visptr->shapenum = obj->state->shapenum)==0)
+ continue; // no shape
+
+ spotloc = (obj->tilex<<mapshift)+obj->tiley; // optimize: keep in struct?
+ visspot = &spotvis[0][0]+spotloc;
+ tilespot = &tilemap[0][0]+spotloc;
+
+ //
+ // could be in any of the nine surrounding tiles
+ //
+ if (*visspot
+ || ( *(visspot-1) && !*(tilespot-1) )
+ || ( *(visspot+1) && !*(tilespot+1) )
+ || ( *(visspot-65) && !*(tilespot-65) )
+ || ( *(visspot-64) && !*(tilespot-64) )
+ || ( *(visspot-63) && !*(tilespot-63) )
+ || ( *(visspot+65) && !*(tilespot+65) )
+ || ( *(visspot+64) && !*(tilespot+64) )
+ || ( *(visspot+63) && !*(tilespot+63) ) )
+ {
+ obj->active = ac_yes;
+ TransformActor (obj);
+ if (!obj->viewheight)
+ continue; // too close or far away
+
+ visptr->viewx = obj->viewx;
+ visptr->viewheight = obj->viewheight;
+ if (visptr->shapenum == -1)
+ visptr->shapenum = obj->temp1; // special shape
+
+ if (obj->state->rotate)
+ visptr->shapenum += CalcRotate (obj);
+
+ if (visptr < &vislist[MAXVISABLE-1]) // don't let it overflow
+ {
+ visptr->flags = (short) obj->flags;
+#ifdef USE_DIR3DSPR
+ visptr->transsprite = NULL;
+#endif
+ visptr++;
+ }
+ obj->flags |= FL_VISABLE;
+ }
+ else
+ obj->flags &= ~FL_VISABLE;
+ }
+
+//
+// draw from back to front
+//
+ numvisable = (int) (visptr-&vislist[0]);
+
+ if (!numvisable)
+ return; // no visable objects
+
+ for (i = 0; i<numvisable; i++)
+ {
+ least = 32000;
+ for (visstep=&vislist[0] ; visstep<visptr ; visstep++)
+ {
+ height = visstep->viewheight;
+ if (height < least)
+ {
+ least = height;
+ farthest = visstep;
+ }
+ }
+ //
+ // draw farthest
+ //
+#ifdef USE_DIR3DSPR
+ if(farthest->transsprite)
+ Scale3DShape(vbuf, vbufPitch, farthest->transsprite);
+ else
+#endif
+ ScaleShape(farthest->viewx, farthest->shapenum, farthest->viewheight, farthest->flags);
+
+ farthest->viewheight = 32000;
+ }
+}
+
+//==========================================================================
+
+/*
+==============
+=
+= DrawPlayerWeapon
+=
+= Draw the player's hands
+=
+==============
+*/
+
+int weaponscale[NUMWEAPONS] = {SPR_KNIFEREADY, SPR_PISTOLREADY,
+ SPR_MACHINEGUNREADY, SPR_CHAINREADY};
+
+void DrawPlayerWeapon (void)
+{
+ int shapenum;
+
+#ifndef SPEAR
+ if (gamestate.victoryflag)
+ {
+#ifndef APOGEE_1_0
+ if (player->state == &s_deathcam && (GetTimeCount()&32) )
+ SimpleScaleShape(viewwidth/2,SPR_DEATHCAM,viewheight+1);
+#endif
+ return;
+ }
+#endif
+
+ if (gamestate.weapon != -1)
+ {
+ shapenum = weaponscale[gamestate.weapon]+gamestate.weaponframe;
+ SimpleScaleShape(viewwidth/2,shapenum,viewheight+1);
+ }
+
+ if (demorecord || demoplayback)
+ SimpleScaleShape(viewwidth/2,SPR_DEMO,viewheight+1);
+}
+
+
+//==========================================================================
+
+
+/*
+=====================
+=
+= CalcTics
+=
+=====================
+*/
+
+void CalcTics (void)
+{
+//
+// calculate tics since last refresh for adaptive timing
+//
+ if (lasttimecount > (int32_t) GetTimeCount())
+ lasttimecount = GetTimeCount(); // if the game was paused a LONG time
+
+ uint32_t curtime = SDL_GetTicks();
+ tics = (curtime * 7) / 100 - lasttimecount;
+ if(!tics)
+ {
+ // wait until end of current tic
+ SDL_Delay(((lasttimecount + 1) * 100) / 7 - curtime);
+ tics = 1;
+ }
+
+ lasttimecount += tics;
+
+ if (tics>MAXTICS)
+ tics = MAXTICS;
+}
+
+
+//==========================================================================
+
+void AsmRefresh()
+{
+ int32_t xstep,ystep;
+ longword xpartial,ypartial;
+ boolean playerInPushwallBackTile = tilemap[focaltx][focalty] == 64;
+
+ for(pixx=0;pixx<viewwidth;pixx++)
+ {
+ short angl=midangle+pixelangle[pixx];
+ if(angl<0) angl+=FINEANGLES;
+ if(angl>=3600) angl-=FINEANGLES;
+ if(angl<900)
+ {
+ xtilestep=1;
+ ytilestep=-1;
+ xstep=finetangent[900-1-angl];
+ ystep=-finetangent[angl];
+ xpartial=xpartialup;
+ ypartial=ypartialdown;
+ }
+ else if(angl<1800)
+ {
+ xtilestep=-1;
+ ytilestep=-1;
+ xstep=-finetangent[angl-900];
+ ystep=-finetangent[1800-1-angl];
+ xpartial=xpartialdown;
+ ypartial=ypartialdown;
+ }
+ else if(angl<2700)
+ {
+ xtilestep=-1;
+ ytilestep=1;
+ xstep=-finetangent[2700-1-angl];
+ ystep=finetangent[angl-1800];
+ xpartial=xpartialdown;
+ ypartial=ypartialup;
+ }
+ else if(angl<3600)
+ {
+ xtilestep=1;
+ ytilestep=1;
+ xstep=finetangent[angl-2700];
+ ystep=finetangent[3600-1-angl];
+ xpartial=xpartialup;
+ ypartial=ypartialup;
+ }
+ yintercept=FixedMul(ystep,xpartial)+viewy;
+ xtile=focaltx+xtilestep;
+ xspot=(word)((xtile<<mapshift)+((uint32_t)yintercept>>16));
+ xintercept=FixedMul(xstep,ypartial)+viewx;
+ ytile=focalty+ytilestep;
+ yspot=(word)((((uint32_t)xintercept>>16)<<mapshift)+ytile);
+ texdelta=0;
+
+ // Special treatment when player is in back tile of pushwall
+ if(playerInPushwallBackTile)
+ {
+ if( pwalldir == di_east && xtilestep == 1
+ || pwalldir == di_west && xtilestep == -1)
+ {
+ int32_t yintbuf = yintercept - ((ystep * (64 - pwallpos)) >> 6);
+ if((yintbuf >> 16) == focalty) // ray hits pushwall back?
+ {
+ if(pwalldir == di_east)
+ xintercept = (focaltx << TILESHIFT) + (pwallpos << 10);
+ else
+ xintercept = (focaltx << TILESHIFT) - TILEGLOBAL + ((64 - pwallpos) << 10);
+ yintercept = yintbuf;
+ ytile = (short) (yintercept >> TILESHIFT);
+ tilehit = pwalltile;
+ HitVertWall();
+ continue;
+ }
+ }
+ else if(pwalldir == di_south && ytilestep == 1
+ || pwalldir == di_north && ytilestep == -1)
+ {
+ int32_t xintbuf = xintercept - ((xstep * (64 - pwallpos)) >> 6);
+ if((xintbuf >> 16) == focaltx) // ray hits pushwall back?
+ {
+ xintercept = xintbuf;
+ if(pwalldir == di_south)
+ yintercept = (focalty << TILESHIFT) + (pwallpos << 10);
+ else
+ yintercept = (focalty << TILESHIFT) - TILEGLOBAL + ((64 - pwallpos) << 10);
+ xtile = (short) (xintercept >> TILESHIFT);
+ tilehit = pwalltile;
+ HitHorizWall();
+ continue;
+ }
+ }
+ }
+
+ do
+ {
+ if(ytilestep==-1 && (yintercept>>16)<=ytile) goto horizentry;
+ if(ytilestep==1 && (yintercept>>16)>=ytile) goto horizentry;
+vertentry:
+ if((uint32_t)yintercept>mapheight*65536-1 || (word)xtile>=mapwidth)
+ {
+ if(xtile<0) xintercept=0, xtile=0;
+ else if(xtile>=mapwidth) xintercept=mapwidth<<TILESHIFT, xtile=mapwidth-1;
+ else xtile=(short) (xintercept >> TILESHIFT);
+ if(yintercept<0) yintercept=0, ytile=0;
+ else if(yintercept>=(mapheight<<TILESHIFT)) yintercept=mapheight<<TILESHIFT, ytile=mapheight-1;
+ yspot=0xffff;
+ tilehit=0;
+ HitHorizBorder();
+ break;
+ }
+ if(xspot>=maparea) break;
+ tilehit=((byte *)tilemap)[xspot];
+ if(tilehit)
+ {
+ if(tilehit&0x80)
+ {
+ int32_t yintbuf=yintercept+(ystep>>1);
+ if((yintbuf>>16)!=(yintercept>>16))
+ goto passvert;
+ if((word)yintbuf<doorposition[tilehit&0x7f])
+ goto passvert;
+ yintercept=yintbuf;
+ xintercept=(xtile<<TILESHIFT)|0x8000;
+ ytile = (short) (yintercept >> TILESHIFT);
+ HitVertDoor();
+ }
+ else
+ {
+ if(tilehit==64)
+ {
+ if(pwalldir==di_west || pwalldir==di_east)
+ {
+ int32_t yintbuf;
+ int pwallposnorm;
+ int pwallposinv;
+ if(pwalldir==di_west)
+ {
+ pwallposnorm = 64-pwallpos;
+ pwallposinv = pwallpos;
+ }
+ else
+ {
+ pwallposnorm = pwallpos;
+ pwallposinv = 64-pwallpos;
+ }
+ if(pwalldir == di_east && xtile==pwallx && ((uint32_t)yintercept>>16)==pwally
+ || pwalldir == di_west && !(xtile==pwallx && ((uint32_t)yintercept>>16)==pwally))
+ {
+ yintbuf=yintercept+((ystep*pwallposnorm)>>6);
+ if((yintbuf>>16)!=(yintercept>>16))
+ goto passvert;
+
+ xintercept=(xtile<<TILESHIFT)+TILEGLOBAL-(pwallposinv<<10);
+ yintercept=yintbuf;
+ ytile = (short) (yintercept >> TILESHIFT);
+ tilehit=pwalltile;
+ HitVertWall();
+ }
+ else
+ {
+ yintbuf=yintercept+((ystep*pwallposinv)>>6);
+ if((yintbuf>>16)!=(yintercept>>16))
+ goto passvert;
+
+ xintercept=(xtile<<TILESHIFT)-(pwallposinv<<10);
+ yintercept=yintbuf;
+ ytile = (short) (yintercept >> TILESHIFT);
+ tilehit=pwalltile;
+ HitVertWall();
+ }
+ }
+ else
+ {
+ int pwallposi = pwallpos;
+ if(pwalldir==di_north) pwallposi = 64-pwallpos;
+ if(pwalldir==di_south && (word)yintercept<(pwallposi<<10)
+ || pwalldir==di_north && (word)yintercept>(pwallposi<<10))
+ {
+ if(((uint32_t)yintercept>>16)==pwally && xtile==pwallx)
+ {
+ if(pwalldir==di_south && (int32_t)((word)yintercept)+ystep<(pwallposi<<10)
+ || pwalldir==di_north && (int32_t)((word)yintercept)+ystep>(pwallposi<<10))
+ goto passvert;
+
+ if(pwalldir==di_south)
+ yintercept=(yintercept&0xffff0000)+(pwallposi<<10);
+ else
+ yintercept=(yintercept&0xffff0000)-TILEGLOBAL+(pwallposi<<10);
+ xintercept=xintercept-((xstep*(64-pwallpos))>>6);
+ xtile = (short) (xintercept >> TILESHIFT);
+ tilehit=pwalltile;
+ HitHorizWall();
+ }
+ else
+ {
+ texdelta = -(pwallposi<<10);
+ xintercept=xtile<<TILESHIFT;
+ ytile = (short) (yintercept >> TILESHIFT);
+ tilehit=pwalltile;
+ HitVertWall();
+ }
+ }
+ else
+ {
+ if(((uint32_t)yintercept>>16)==pwally && xtile==pwallx)
+ {
+ texdelta = -(pwallposi<<10);
+ xintercept=xtile<<TILESHIFT;
+ ytile = (short) (yintercept >> TILESHIFT);
+ tilehit=pwalltile;
+ HitVertWall();
+ }
+ else
+ {
+ if(pwalldir==di_south && (int32_t)((word)yintercept)+ystep>(pwallposi<<10)
+ || pwalldir==di_north && (int32_t)((word)yintercept)+ystep<(pwallposi<<10))
+ goto passvert;
+
+ if(pwalldir==di_south)
+ yintercept=(yintercept&0xffff0000)-((64-pwallpos)<<10);
+ else
+ yintercept=(yintercept&0xffff0000)+((64-pwallpos)<<10);
+ xintercept=xintercept-((xstep*pwallpos)>>6);
+ xtile = (short) (xintercept >> TILESHIFT);
+ tilehit=pwalltile;
+ HitHorizWall();
+ }
+ }
+ }
+ }
+ else
+ {
+ xintercept=xtile<<TILESHIFT;
+ ytile = (short) (yintercept >> TILESHIFT);
+ HitVertWall();
+ }
+ }
+ break;
+ }
+passvert:
+ *((byte *)spotvis+xspot)=1;
+ xtile+=xtilestep;
+ yintercept+=ystep;
+ xspot=(word)((xtile<<mapshift)+((uint32_t)yintercept>>16));
+ }
+ while(1);
+ continue;
+
+ do
+ {
+ if(xtilestep==-1 && (xintercept>>16)<=xtile) goto vertentry;
+ if(xtilestep==1 && (xintercept>>16)>=xtile) goto vertentry;
+horizentry:
+ if((uint32_t)xintercept>mapwidth*65536-1 || (word)ytile>=mapheight)
+ {
+ if(ytile<0) yintercept=0, ytile=0;
+ else if(ytile>=mapheight) yintercept=mapheight<<TILESHIFT, ytile=mapheight-1;
+ else ytile=(short) (yintercept >> TILESHIFT);
+ if(xintercept<0) xintercept=0, xtile=0;
+ else if(xintercept>=(mapwidth<<TILESHIFT)) xintercept=mapwidth<<TILESHIFT, xtile=mapwidth-1;
+ xspot=0xffff;
+ tilehit=0;
+ HitVertBorder();
+ break;
+ }
+ if(yspot>=maparea) break;
+ tilehit=((byte *)tilemap)[yspot];
+ if(tilehit)
+ {
+ if(tilehit&0x80)
+ {
+ int32_t xintbuf=xintercept+(xstep>>1);
+ if((xintbuf>>16)!=(xintercept>>16))
+ goto passhoriz;
+ if((word)xintbuf<doorposition[tilehit&0x7f])
+ goto passhoriz;
+ xintercept=xintbuf;
+ yintercept=(ytile<<TILESHIFT)+0x8000;
+ xtile = (short) (xintercept >> TILESHIFT);
+ HitHorizDoor();
+ }
+ else
+ {
+ if(tilehit==64)
+ {
+ if(pwalldir==di_north || pwalldir==di_south)
+ {
+ int32_t xintbuf;
+ int pwallposnorm;
+ int pwallposinv;
+ if(pwalldir==di_north)
+ {
+ pwallposnorm = 64-pwallpos;
+ pwallposinv = pwallpos;
+ }
+ else
+ {
+ pwallposnorm = pwallpos;
+ pwallposinv = 64-pwallpos;
+ }
+ if(pwalldir == di_south && ytile==pwally && ((uint32_t)xintercept>>16)==pwallx
+ || pwalldir == di_north && !(ytile==pwally && ((uint32_t)xintercept>>16)==pwallx))
+ {
+ xintbuf=xintercept+((xstep*pwallposnorm)>>6);
+ if((xintbuf>>16)!=(xintercept>>16))
+ goto passhoriz;
+
+ yintercept=(ytile<<TILESHIFT)+TILEGLOBAL-(pwallposinv<<10);
+ xintercept=xintbuf;
+ xtile = (short) (xintercept >> TILESHIFT);
+ tilehit=pwalltile;
+ HitHorizWall();
+ }
+ else
+ {
+ xintbuf=xintercept+((xstep*pwallposinv)>>6);
+ if((xintbuf>>16)!=(xintercept>>16))
+ goto passhoriz;
+
+ yintercept=(ytile<<TILESHIFT)-(pwallposinv<<10);
+ xintercept=xintbuf;
+ xtile = (short) (xintercept >> TILESHIFT);
+ tilehit=pwalltile;
+ HitHorizWall();
+ }
+ }
+ else
+ {
+ int pwallposi = pwallpos;
+ if(pwalldir==di_west) pwallposi = 64-pwallpos;
+ if(pwalldir==di_east && (word)xintercept<(pwallposi<<10)
+ || pwalldir==di_west && (word)xintercept>(pwallposi<<10))
+ {
+ if(((uint32_t)xintercept>>16)==pwallx && ytile==pwally)
+ {
+ if(pwalldir==di_east && (int32_t)((word)xintercept)+xstep<(pwallposi<<10)
+ || pwalldir==di_west && (int32_t)((word)xintercept)+xstep>(pwallposi<<10))
+ goto passhoriz;
+
+ if(pwalldir==di_east)
+ xintercept=(xintercept&0xffff0000)+(pwallposi<<10);
+ else
+ xintercept=(xintercept&0xffff0000)-TILEGLOBAL+(pwallposi<<10);
+ yintercept=yintercept-((ystep*(64-pwallpos))>>6);
+ ytile = (short) (yintercept >> TILESHIFT);
+ tilehit=pwalltile;
+ HitVertWall();
+ }
+ else
+ {
+ texdelta = -(pwallposi<<10);
+ yintercept=ytile<<TILESHIFT;
+ xtile = (short) (xintercept >> TILESHIFT);
+ tilehit=pwalltile;
+ HitHorizWall();
+ }
+ }
+ else
+ {
+ if(((uint32_t)xintercept>>16)==pwallx && ytile==pwally)
+ {
+ texdelta = -(pwallposi<<10);
+ yintercept=ytile<<TILESHIFT;
+ xtile = (short) (xintercept >> TILESHIFT);
+ tilehit=pwalltile;
+ HitHorizWall();
+ }
+ else
+ {
+ if(pwalldir==di_east && (int32_t)((word)xintercept)+xstep>(pwallposi<<10)
+ || pwalldir==di_west && (int32_t)((word)xintercept)+xstep<(pwallposi<<10))
+ goto passhoriz;
+
+ if(pwalldir==di_east)
+ xintercept=(xintercept&0xffff0000)-((64-pwallpos)<<10);
+ else
+ xintercept=(xintercept&0xffff0000)+((64-pwallpos)<<10);
+ yintercept=yintercept-((ystep*pwallpos)>>6);
+ ytile = (short) (yintercept >> TILESHIFT);
+ tilehit=pwalltile;
+ HitVertWall();
+ }
+ }
+ }
+ }
+ else
+ {
+ yintercept=ytile<<TILESHIFT;
+ xtile = (short) (xintercept >> TILESHIFT);
+ HitHorizWall();
+ }
+ }
+ break;
+ }
+passhoriz:
+ *((byte *)spotvis+yspot)=1;
+ ytile+=ytilestep;
+ xintercept+=xstep;
+ yspot=(word)((((uint32_t)xintercept>>16)<<mapshift)+ytile);
+ }
+ while(1);
+ }
+}
+
+/*
+====================
+=
+= WallRefresh
+=
+====================
+*/
+
+void WallRefresh (void)
+{
+ xpartialdown = viewx&(TILEGLOBAL-1);
+ xpartialup = TILEGLOBAL-xpartialdown;
+ ypartialdown = viewy&(TILEGLOBAL-1);
+ ypartialup = TILEGLOBAL-ypartialdown;
+
+ min_wallheight = viewheight;
+ lastside = -1; // the first pixel is on a new wall
+ AsmRefresh ();
+ ScalePost (); // no more optimization on last post
+}
+
+void CalcViewVariables()
+{
+ viewangle = player->angle;
+ midangle = viewangle*(FINEANGLES/ANGLES);
+ viewsin = sintable[viewangle];
+ viewcos = costable[viewangle];
+ viewx = player->x - FixedMul(focallength,viewcos);
+ viewy = player->y + FixedMul(focallength,viewsin);
+
+ focaltx = (short)(viewx>>TILESHIFT);
+ focalty = (short)(viewy>>TILESHIFT);
+
+ viewtx = (short)(player->x >> TILESHIFT);
+ viewty = (short)(player->y >> TILESHIFT);
+}
+
+//==========================================================================
+
+/*
+========================
+=
+= ThreeDRefresh
+=
+========================
+*/
+
+void ThreeDRefresh (void)
+{
+//
+// clear out the traced array
+//
+ memset(spotvis,0,maparea);
+ spotvis[player->tilex][player->tiley] = 1; // Detect all sprites over player fix
+
+ vbuf = VL_LockSurface(screenBuffer);
+ vbuf+=screenofs;
+ vbufPitch = bufferPitch;
+
+ CalcViewVariables();
+
+//
+// follow the walls from there to the right, drawing as we go
+//
+ VGAClearScreen ();
+#if defined(USE_FEATUREFLAGS) && defined(USE_STARSKY)
+ if(GetFeatureFlags() & FF_STARSKY)
+ DrawStarSky(vbuf, vbufPitch);
+#endif
+
+ WallRefresh ();
+
+#if defined(USE_FEATUREFLAGS) && defined(USE_PARALLAX)
+ if(GetFeatureFlags() & FF_PARALLAXSKY)
+ DrawParallax(vbuf, vbufPitch);
+#endif
+#if defined(USE_FEATUREFLAGS) && defined(USE_CLOUDSKY)
+ if(GetFeatureFlags() & FF_CLOUDSKY)
+ DrawClouds(vbuf, vbufPitch, min_wallheight);
+#endif
+#ifdef USE_FLOORCEILINGTEX
+ DrawFloorAndCeiling(vbuf, vbufPitch, min_wallheight);
+#endif
+
+//
+// draw all the scaled images
+//
+ DrawScaleds(); // draw scaled stuff
+
+#if defined(USE_FEATUREFLAGS) && defined(USE_RAIN)
+ if(GetFeatureFlags() & FF_RAIN)
+ DrawRain(vbuf, vbufPitch);
+#endif
+#if defined(USE_FEATUREFLAGS) && defined(USE_SNOW)
+ if(GetFeatureFlags() & FF_SNOW)
+ DrawSnow(vbuf, vbufPitch);
+#endif
+
+ DrawPlayerWeapon (); // draw player's hands
+
+ if(Keyboard[sc_Tab] && viewsize == 21 && gamestate.weapon != -1)
+ ShowActStatus();
+
+ VL_UnlockSurface(screenBuffer);
+ vbuf = NULL;
+
+//
+// show screen and time last cycle
+//
+
+ if (fizzlein)
+ {
+ FizzleFade(screenBuffer, 0, 0, screenWidth, screenHeight, 20, false);
+ fizzlein = false;
+
+ lasttimecount = GetTimeCount(); // don't make a big tic count
+ }
+ else
+ {
+#ifndef REMDEBUG
+ if (fpscounter)
+ {
+ fontnumber = 0;
+ SETFONTCOLOR(7,127);
+ PrintX=4; PrintY=1;
+ VWB_Bar(0,0,50,10,bordercol);
+ US_PrintSigned(fps);
+ US_Print(" fps");
+ }
+#endif
+ SDL_BlitSurface(screenBuffer, NULL, screen, NULL);
+ SDL_Flip(screen);
+ }
+
+#ifndef REMDEBUG
+ if (fpscounter)
+ {
+ fps_frames++;
+ fps_time+=tics;
+
+ if(fps_time>35)
+ {
+ fps_time-=35;
+ fps=fps_frames<<1;
+ fps_frames=0;
+ }
+ }
+#endif
+}
diff --git a/apps/plugins/sdl/progs/wolf3d/wl_floorceiling.c b/apps/plugins/sdl/progs/wolf3d/wl_floorceiling.c
new file mode 100644
index 0000000000..39a1167020
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/wl_floorceiling.c
@@ -0,0 +1,87 @@
+#include "version.h"
+
+#ifdef USE_FLOORCEILINGTEX
+
+#include "wl_def.h"
+#include "wl_shade.h"
+
+// Textured Floor and Ceiling by DarkOne
+// With multi-textured floors and ceilings stored in lower and upper bytes of
+// according tile in third mapplane, respectively.
+void DrawFloorAndCeiling(byte *vbuf, unsigned vbufPitch, int min_wallheight)
+{
+ fixed dist; // distance to row projection
+ fixed tex_step; // global step per one screen pixel
+ fixed gu, gv, du, dv; // global texture coordinates
+ int u, v; // local texture coordinates
+ byte *toptex, *bottex;
+ unsigned lasttoptex = 0xffffffff, lastbottex = 0xffffffff;
+
+ int halfheight = viewheight >> 1;
+ int y0 = min_wallheight >> 3; // starting y value
+ if(y0 > halfheight)
+ return; // view obscured by walls
+ if(!y0) y0 = 1; // don't let division by zero
+ unsigned bot_offset0 = vbufPitch * (halfheight + y0);
+ unsigned top_offset0 = vbufPitch * (halfheight - y0 - 1);
+
+ // draw horizontal lines
+ for(int y = y0, bot_offset = bot_offset0, top_offset = top_offset0;
+ y < halfheight; y++, bot_offset += vbufPitch, top_offset -= vbufPitch)
+ {
+ dist = (heightnumerator / (y + 1)) << 5;
+ gu = viewx + FixedMul(dist, viewcos);
+ gv = -viewy + FixedMul(dist, viewsin);
+ tex_step = (dist << 8) / viewwidth / 175;
+ du = FixedMul(tex_step, viewsin);
+ dv = -FixedMul(tex_step, viewcos);
+ gu -= (viewwidth >> 1) * du;
+ gv -= (viewwidth >> 1) * dv; // starting point (leftmost)
+#ifdef USE_SHADING
+ byte *curshades = shadetable[GetShade(y << 3)];
+#endif
+ for(int x = 0, bot_add = bot_offset, top_add = top_offset;
+ x < viewwidth; x++, bot_add++, top_add++)
+ {
+ if(wallheight[x] >> 3 <= y)
+ {
+ int curx = (gu >> TILESHIFT) & (MAPSIZE - 1);
+ int cury = (-(gv >> TILESHIFT) - 1) & (MAPSIZE - 1);
+ unsigned curtex = MAPSPOT(curx, cury, 2);
+ if(curtex)
+ {
+ unsigned curtoptex = curtex >> 8;
+ if (curtoptex != lasttoptex)
+ {
+ lasttoptex = curtoptex;
+ toptex = PM_GetTexture(curtoptex);
+ }
+ unsigned curbottex = curtex & 0xff;
+ if (curbottex != lastbottex)
+ {
+ lastbottex = curbottex;
+ bottex = PM_GetTexture(curbottex);
+ }
+ u = (gu >> (TILESHIFT - TEXTURESHIFT)) & (TEXTURESIZE - 1);
+ v = (gv >> (TILESHIFT - TEXTURESHIFT)) & (TEXTURESIZE - 1);
+ unsigned texoffs = (u << TEXTURESHIFT) + (TEXTURESIZE - 1) - v;
+#ifdef USE_SHADING
+ if(curtoptex)
+ vbuf[top_add] = curshades[toptex[texoffs]];
+ if(curbottex)
+ vbuf[bot_add] = curshades[bottex[texoffs]];
+#else
+ if(curtoptex)
+ vbuf[top_add] = toptex[texoffs];
+ if(curbottex)
+ vbuf[bot_add] = bottex[texoffs];
+#endif
+ }
+ }
+ gu += du;
+ gv += dv;
+ }
+ }
+}
+
+#endif
diff --git a/apps/plugins/sdl/progs/wolf3d/wl_game.c b/apps/plugins/sdl/progs/wolf3d/wl_game.c
new file mode 100644
index 0000000000..445cf00153
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/wl_game.c
@@ -0,0 +1,1601 @@
+// WL_GAME.C
+
+#include "wl_def.h"
+#pragma hdrstop
+
+
+/*
+=============================================================================
+
+ LOCAL CONSTANTS
+
+=============================================================================
+*/
+
+
+/*
+=============================================================================
+
+ GLOBAL VARIABLES
+
+=============================================================================
+*/
+
+boolean ingame,fizzlein;
+gametype gamestate;
+byte bordercol=VIEWCOLOR; // color of the Change View/Ingame border
+
+#ifdef SPEAR
+int32_t spearx,speary;
+unsigned spearangle;
+boolean spearflag;
+#endif
+
+#ifdef USE_FEATUREFLAGS
+int ffDataTopLeft, ffDataTopRight, ffDataBottomLeft, ffDataBottomRight;
+#endif
+
+//
+// ELEVATOR BACK MAPS - REMEMBER (-1)!!
+//
+int ElevatorBackTo[]={1,1,7,3,5,3};
+
+void SetupGameLevel (void);
+void DrawPlayScreen (void);
+void LoadLatchMem (void);
+void GameLoop (void);
+
+/*
+=============================================================================
+
+ LOCAL VARIABLES
+
+=============================================================================
+*/
+
+
+
+//===========================================================================
+//===========================================================================
+
+
+/*
+==========================
+=
+= SetSoundLoc - Given the location of an object (in terms of global
+= coordinates, held in globalsoundx and globalsoundy), munges the values
+= for an approximate distance from the left and right ear, and puts
+= those values into leftchannel and rightchannel.
+=
+= JAB
+=
+==========================
+*/
+
+int leftchannel, rightchannel;
+#define ATABLEMAX 15
+byte righttable[ATABLEMAX][ATABLEMAX * 2] = {
+{ 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 6, 0, 0, 0, 0, 0, 1, 3, 5, 8, 8, 8, 8, 8, 8, 8, 8},
+{ 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 6, 4, 0, 0, 0, 0, 0, 2, 4, 6, 8, 8, 8, 8, 8, 8, 8, 8},
+{ 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 6, 6, 4, 1, 0, 0, 0, 1, 2, 4, 6, 8, 8, 8, 8, 8, 8, 8, 8},
+{ 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 6, 5, 4, 2, 1, 0, 1, 2, 3, 5, 7, 8, 8, 8, 8, 8, 8, 8, 8},
+{ 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 6, 5, 4, 3, 2, 2, 3, 3, 5, 6, 8, 8, 8, 8, 8, 8, 8, 8, 8},
+{ 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 6, 6, 5, 4, 4, 4, 4, 5, 6, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8},
+{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 6, 6, 5, 5, 5, 6, 6, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8},
+{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8},
+{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8},
+{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8},
+{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8},
+{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8},
+{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8},
+{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8},
+{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8}
+};
+byte lefttable[ATABLEMAX][ATABLEMAX * 2] = {
+{ 8, 8, 8, 8, 8, 8, 8, 8, 5, 3, 1, 0, 0, 0, 0, 0, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8},
+{ 8, 8, 8, 8, 8, 8, 8, 8, 6, 4, 2, 0, 0, 0, 0, 0, 4, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8},
+{ 8, 8, 8, 8, 8, 8, 8, 8, 6, 4, 2, 1, 0, 0, 0, 1, 4, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8},
+{ 8, 8, 8, 8, 8, 8, 8, 8, 7, 5, 3, 2, 1, 0, 1, 2, 4, 5, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8},
+{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 6, 5, 3, 3, 2, 2, 3, 4, 5, 6, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8},
+{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 6, 5, 4, 4, 4, 4, 5, 6, 6, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8},
+{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 6, 6, 5, 5, 5, 6, 6, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8},
+{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 6, 6, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8},
+{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8},
+{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8},
+{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8},
+{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8},
+{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8},
+{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8},
+{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8}
+};
+
+void
+SetSoundLoc(fixed gx,fixed gy)
+{
+ fixed xt,yt;
+ int x,y;
+
+//
+// translate point to view centered coordinates
+//
+ gx -= viewx;
+ gy -= viewy;
+
+//
+// calculate newx
+//
+ xt = FixedMul(gx,viewcos);
+ yt = FixedMul(gy,viewsin);
+ x = (xt - yt) >> TILESHIFT;
+
+//
+// calculate newy
+//
+ xt = FixedMul(gx,viewsin);
+ yt = FixedMul(gy,viewcos);
+ y = (yt + xt) >> TILESHIFT;
+
+ if (y >= ATABLEMAX)
+ y = ATABLEMAX - 1;
+ else if (y <= -ATABLEMAX)
+ y = -ATABLEMAX;
+ if (x < 0)
+ x = -x;
+ if (x >= ATABLEMAX)
+ x = ATABLEMAX - 1;
+ leftchannel = lefttable[x][y + ATABLEMAX];
+ rightchannel = righttable[x][y + ATABLEMAX];
+
+#if 0
+ CenterWindow(8,1);
+ US_PrintSigned(leftchannel);
+ US_Print(",");
+ US_PrintSigned(rightchannel);
+ VW_UpdateScreen();
+#endif
+}
+
+/*
+==========================
+=
+= SetSoundLocGlobal - Sets up globalsoundx & globalsoundy and then calls
+= UpdateSoundLoc() to transform that into relative channel volumes. Those
+= values are then passed to the Sound Manager so that they'll be used for
+= the next sound played (if possible).
+=
+= JAB
+=
+==========================
+*/
+void PlaySoundLocGlobal(word s,fixed gx,fixed gy)
+{
+ SetSoundLoc(gx, gy);
+ SD_PositionSound(leftchannel, rightchannel);
+
+ int channel = SD_PlaySound((soundnames) s);
+ if(channel)
+ {
+ channelSoundPos[channel - 1].globalsoundx = gx;
+ channelSoundPos[channel - 1].globalsoundy = gy;
+ channelSoundPos[channel - 1].valid = 1;
+ }
+}
+
+void UpdateSoundLoc(void)
+{
+/* if (SoundPositioned)
+ {
+ SetSoundLoc(globalsoundx,globalsoundy);
+ SD_SetPosition(leftchannel,rightchannel);
+ }*/
+
+ for(int i = 0; i < MIX_CHANNELS; i++)
+ {
+ if(channelSoundPos[i].valid)
+ {
+ SetSoundLoc(channelSoundPos[i].globalsoundx,
+ channelSoundPos[i].globalsoundy);
+ SD_SetPosition(i, leftchannel, rightchannel);
+ }
+ }
+}
+
+/*
+** JAB End
+*/
+
+/*
+==========================
+=
+= ScanInfoPlane
+=
+= Spawn all actors and mark down special places
+=
+==========================
+*/
+
+static void ScanInfoPlane(void)
+{
+ unsigned x,y;
+ int tile;
+ word *start;
+
+ start = mapsegs[1];
+ for (y=0;y<mapheight;y++)
+ {
+ for (x=0;x<mapwidth;x++)
+ {
+ tile = *start++;
+ if (!tile)
+ continue;
+
+ switch (tile)
+ {
+ case 19:
+ case 20:
+ case 21:
+ case 22:
+ SpawnPlayer(x,y,NORTH+tile-19);
+ break;
+
+ case 23:
+ case 24:
+ case 25:
+ case 26:
+ case 27:
+ case 28:
+ case 29:
+ case 30:
+
+ case 31:
+ case 32:
+ case 33:
+ case 34:
+ case 35:
+ case 36:
+ case 37:
+ case 38:
+
+ case 39:
+ case 40:
+ case 41:
+ case 42:
+ case 43:
+ case 44:
+ case 45:
+ case 46:
+
+ case 47:
+ case 48:
+ case 49:
+ case 50:
+ case 51:
+ case 52:
+ case 53:
+ case 54:
+
+ case 55:
+ case 56:
+ case 57:
+ case 58:
+ case 59:
+ case 60:
+ case 61:
+ case 62:
+
+ case 63:
+ case 64:
+ case 65:
+ case 66:
+ case 67:
+ case 68:
+ case 69:
+ case 70:
+ case 71:
+ case 72:
+#ifdef SPEAR
+ case 73: // TRUCK AND SPEAR!
+ case 74:
+#elif defined(USE_DIR3DSPR) // just for the example
+ case 73:
+#endif
+ SpawnStatic(x,y,tile-23);
+ break;
+
+//
+// P wall
+//
+ case 98:
+ if (!loadedgame)
+ gamestate.secrettotal++;
+ break;
+
+//
+// guard
+//
+ case 180:
+ case 181:
+ case 182:
+ case 183:
+ if (gamestate.difficulty<gd_hard)
+ break;
+ tile -= 36;
+ case 144:
+ case 145:
+ case 146:
+ case 147:
+ if (gamestate.difficulty<gd_medium)
+ break;
+ tile -= 36;
+ case 108:
+ case 109:
+ case 110:
+ case 111:
+ SpawnStand(en_guard,x,y,tile-108);
+ break;
+
+
+ case 184:
+ case 185:
+ case 186:
+ case 187:
+ if (gamestate.difficulty<gd_hard)
+ break;
+ tile -= 36;
+ case 148:
+ case 149:
+ case 150:
+ case 151:
+ if (gamestate.difficulty<gd_medium)
+ break;
+ tile -= 36;
+ case 112:
+ case 113:
+ case 114:
+ case 115:
+ SpawnPatrol(en_guard,x,y,tile-112);
+ break;
+
+ case 124:
+ SpawnDeadGuard (x,y);
+ break;
+//
+// officer
+//
+ case 188:
+ case 189:
+ case 190:
+ case 191:
+ if (gamestate.difficulty<gd_hard)
+ break;
+ tile -= 36;
+ case 152:
+ case 153:
+ case 154:
+ case 155:
+ if (gamestate.difficulty<gd_medium)
+ break;
+ tile -= 36;
+ case 116:
+ case 117:
+ case 118:
+ case 119:
+ SpawnStand(en_officer,x,y,tile-116);
+ break;
+
+
+ case 192:
+ case 193:
+ case 194:
+ case 195:
+ if (gamestate.difficulty<gd_hard)
+ break;
+ tile -= 36;
+ case 156:
+ case 157:
+ case 158:
+ case 159:
+ if (gamestate.difficulty<gd_medium)
+ break;
+ tile -= 36;
+ case 120:
+ case 121:
+ case 122:
+ case 123:
+ SpawnPatrol(en_officer,x,y,tile-120);
+ break;
+
+
+//
+// ss
+//
+ case 198:
+ case 199:
+ case 200:
+ case 201:
+ if (gamestate.difficulty<gd_hard)
+ break;
+ tile -= 36;
+ case 162:
+ case 163:
+ case 164:
+ case 165:
+ if (gamestate.difficulty<gd_medium)
+ break;
+ tile -= 36;
+ case 126:
+ case 127:
+ case 128:
+ case 129:
+ SpawnStand(en_ss,x,y,tile-126);
+ break;
+
+
+ case 202:
+ case 203:
+ case 204:
+ case 205:
+ if (gamestate.difficulty<gd_hard)
+ break;
+ tile -= 36;
+ case 166:
+ case 167:
+ case 168:
+ case 169:
+ if (gamestate.difficulty<gd_medium)
+ break;
+ tile -= 36;
+ case 130:
+ case 131:
+ case 132:
+ case 133:
+ SpawnPatrol(en_ss,x,y,tile-130);
+ break;
+
+//
+// dogs
+//
+ case 206:
+ case 207:
+ case 208:
+ case 209:
+ if (gamestate.difficulty<gd_hard)
+ break;
+ tile -= 36;
+ case 170:
+ case 171:
+ case 172:
+ case 173:
+ if (gamestate.difficulty<gd_medium)
+ break;
+ tile -= 36;
+ case 134:
+ case 135:
+ case 136:
+ case 137:
+ SpawnStand(en_dog,x,y,tile-134);
+ break;
+
+
+ case 210:
+ case 211:
+ case 212:
+ case 213:
+ if (gamestate.difficulty<gd_hard)
+ break;
+ tile -= 36;
+ case 174:
+ case 175:
+ case 176:
+ case 177:
+ if (gamestate.difficulty<gd_medium)
+ break;
+ tile -= 36;
+ case 138:
+ case 139:
+ case 140:
+ case 141:
+ SpawnPatrol(en_dog,x,y,tile-138);
+ break;
+
+//
+// boss
+//
+#ifndef SPEAR
+ case 214:
+ SpawnBoss (x,y);
+ break;
+ case 197:
+ SpawnGretel (x,y);
+ break;
+ case 215:
+ SpawnGift (x,y);
+ break;
+ case 179:
+ SpawnFat (x,y);
+ break;
+ case 196:
+ SpawnSchabbs (x,y);
+ break;
+ case 160:
+ SpawnFakeHitler (x,y);
+ break;
+ case 178:
+ SpawnHitler (x,y);
+ break;
+#else
+ case 106:
+ SpawnSpectre (x,y);
+ break;
+ case 107:
+ SpawnAngel (x,y);
+ break;
+ case 125:
+ SpawnTrans (x,y);
+ break;
+ case 142:
+ SpawnUber (x,y);
+ break;
+ case 143:
+ SpawnWill (x,y);
+ break;
+ case 161:
+ SpawnDeath (x,y);
+ break;
+
+#endif
+
+//
+// mutants
+//
+ case 252:
+ case 253:
+ case 254:
+ case 255:
+ if (gamestate.difficulty<gd_hard)
+ break;
+ tile -= 18;
+ case 234:
+ case 235:
+ case 236:
+ case 237:
+ if (gamestate.difficulty<gd_medium)
+ break;
+ tile -= 18;
+ case 216:
+ case 217:
+ case 218:
+ case 219:
+ SpawnStand(en_mutant,x,y,tile-216);
+ break;
+
+ case 256:
+ case 257:
+ case 258:
+ case 259:
+ if (gamestate.difficulty<gd_hard)
+ break;
+ tile -= 18;
+ case 238:
+ case 239:
+ case 240:
+ case 241:
+ if (gamestate.difficulty<gd_medium)
+ break;
+ tile -= 18;
+ case 220:
+ case 221:
+ case 222:
+ case 223:
+ SpawnPatrol(en_mutant,x,y,tile-220);
+ break;
+
+//
+// ghosts
+//
+#ifndef SPEAR
+ case 224:
+ SpawnGhosts (en_blinky,x,y);
+ break;
+ case 225:
+ SpawnGhosts (en_clyde,x,y);
+ break;
+ case 226:
+ SpawnGhosts (en_pinky,x,y);
+ break;
+ case 227:
+ SpawnGhosts (en_inky,x,y);
+ break;
+#endif
+ }
+ }
+ }
+}
+
+//==========================================================================
+
+/*
+==================
+=
+= SetupGameLevel
+=
+==================
+*/
+
+void SetupGameLevel (void)
+{
+ int x,y;
+ word *map;
+ word tile;
+
+
+ if (!loadedgame)
+ {
+ gamestate.TimeCount
+ = gamestate.secrettotal
+ = gamestate.killtotal
+ = gamestate.treasuretotal
+ = gamestate.secretcount
+ = gamestate.killcount
+ = gamestate.treasurecount
+ = pwallstate = pwallpos = facetimes = 0;
+ LastAttacker = NULL;
+ killerobj = NULL;
+ }
+
+ if (demoplayback || demorecord)
+ US_InitRndT (false);
+ else
+ US_InitRndT (true);
+
+//
+// load the level
+//
+ CA_CacheMap (gamestate.mapon+10*gamestate.episode);
+ mapon-=gamestate.episode*10;
+
+#ifdef USE_FEATUREFLAGS
+ // Temporary definition to make things clearer
+ #define MXX MAPSIZE - 1
+
+ // Read feature flags data from map corners and overwrite corners with adjacent tiles
+ ffDataTopLeft = MAPSPOT(0, 0, 0); MAPSPOT(0, 0, 0) = MAPSPOT(1, 0, 0);
+ ffDataTopRight = MAPSPOT(MXX, 0, 0); MAPSPOT(MXX, 0, 0) = MAPSPOT(MXX, 1, 0);
+ ffDataBottomRight = MAPSPOT(MXX, MXX, 0); MAPSPOT(MXX, MXX, 0) = MAPSPOT(MXX - 1, MXX, 0);
+ ffDataBottomLeft = MAPSPOT(0, MXX, 0); MAPSPOT(0, MXX, 0) = MAPSPOT(0, MXX - 1, 0);
+
+ #undef MXX
+#endif
+
+//
+// copy the wall data to a data segment array
+//
+ memset (tilemap,0,sizeof(tilemap));
+ memset (actorat,0,sizeof(actorat));
+ map = mapsegs[0];
+ for (y=0;y<mapheight;y++)
+ {
+ for (x=0;x<mapwidth;x++)
+ {
+ tile = *map++;
+ if (tile<AREATILE)
+ {
+ // solid wall
+ tilemap[x][y] = (byte) tile;
+ actorat[x][y] = (objtype *)(uintptr_t) tile;
+ }
+ else
+ {
+ // area floor
+ tilemap[x][y] = 0;
+ actorat[x][y] = 0;
+ }
+ }
+ }
+
+//
+// spawn doors
+//
+ InitActorList (); // start spawning things with a clean slate
+ InitDoorList ();
+ InitStaticList ();
+
+ map = mapsegs[0];
+ for (y=0;y<mapheight;y++)
+ {
+ for (x=0;x<mapwidth;x++)
+ {
+ tile = *map++;
+ if (tile >= 90 && tile <= 101)
+ {
+ // door
+ switch (tile)
+ {
+ case 90:
+ case 92:
+ case 94:
+ case 96:
+ case 98:
+ case 100:
+ SpawnDoor (x,y,1,(tile-90)/2);
+ break;
+ case 91:
+ case 93:
+ case 95:
+ case 97:
+ case 99:
+ case 101:
+ SpawnDoor (x,y,0,(tile-91)/2);
+ break;
+ }
+ }
+ }
+ }
+
+//
+// spawn actors
+//
+ ScanInfoPlane ();
+
+
+//
+// take out the ambush markers
+//
+ map = mapsegs[0];
+ for (y=0;y<mapheight;y++)
+ {
+ for (x=0;x<mapwidth;x++)
+ {
+ tile = *map++;
+ if (tile == AMBUSHTILE)
+ {
+ tilemap[x][y] = 0;
+ if ( (unsigned)(uintptr_t)actorat[x][y] == AMBUSHTILE)
+ actorat[x][y] = NULL;
+
+ if (*map >= AREATILE)
+ tile = *map;
+ if (*(map-1-mapwidth) >= AREATILE)
+ tile = *(map-1-mapwidth);
+ if (*(map-1+mapwidth) >= AREATILE)
+ tile = *(map-1+mapwidth);
+ if ( *(map-2) >= AREATILE)
+ tile = *(map-2);
+
+ *(map-1) = tile;
+ }
+ }
+ }
+
+
+//
+// have the caching manager load and purge stuff to make sure all marks
+// are in memory
+//
+ CA_LoadAllSounds ();
+}
+
+
+//==========================================================================
+
+
+/*
+===================
+=
+= DrawPlayBorderSides
+=
+= To fix window overwrites
+=
+===================
+*/
+void DrawPlayBorderSides(void)
+{
+ if(viewsize == 21) return;
+
+ const int sw = screenWidth;
+ const int sh = screenHeight;
+ const int vw = viewwidth;
+ const int vh = viewheight;
+ const int px = scaleFactor; // size of one "pixel"
+
+ const int h = sh - px * STATUSLINES;
+ const int xl = sw / 2 - vw / 2;
+ const int yl = (h - vh) / 2;
+
+ if(xl != 0)
+ {
+ VWB_BarScaledCoord(0, 0, xl - px, h, bordercol); // left side
+ VWB_BarScaledCoord(xl + vw + px, 0, xl - px * 2, h, bordercol); // right side
+ }
+
+ if(yl != 0)
+ {
+ VWB_BarScaledCoord(0, 0, sw, yl - px, bordercol); // upper side
+ VWB_BarScaledCoord(0, yl + vh + px, sw, yl - px, bordercol); // lower side
+ }
+
+ if(xl != 0)
+ {
+ // Paint game view border lines
+ VWB_BarScaledCoord(xl - px, yl - px, vw + px, px, 0); // upper border
+ VWB_BarScaledCoord(xl, yl + vh, vw + px, px, bordercol - 2); // lower border
+ VWB_BarScaledCoord(xl - px, yl - px, px, vh + px, 0); // left border
+ VWB_BarScaledCoord(xl + vw, yl - px, px, vh + px * 2, bordercol - 2); // right border
+ VWB_BarScaledCoord(xl - px, yl + vh, px, px, bordercol - 3); // lower left highlight
+ }
+ else
+ {
+ // Just paint a lower border line
+ VWB_BarScaledCoord(0, yl+vh, vw, px, bordercol-2); // lower border
+ }
+}
+
+
+/*
+===================
+=
+= DrawStatusBorder
+=
+===================
+*/
+
+void DrawStatusBorder (byte color)
+{
+ int statusborderw = (screenWidth-scaleFactor*320)/2;
+
+ VWB_BarScaledCoord (0,0,screenWidth,screenHeight-scaleFactor*(STATUSLINES-3),color);
+ VWB_BarScaledCoord (0,screenHeight-scaleFactor*(STATUSLINES-3),
+ statusborderw+scaleFactor*8,scaleFactor*(STATUSLINES-4),color);
+ VWB_BarScaledCoord (0,screenHeight-scaleFactor*2,screenWidth,scaleFactor*2,color);
+ VWB_BarScaledCoord (screenWidth-statusborderw-scaleFactor*8, screenHeight-scaleFactor*(STATUSLINES-3),
+ statusborderw+scaleFactor*8,scaleFactor*(STATUSLINES-4),color);
+
+ VWB_BarScaledCoord (statusborderw+scaleFactor*9, screenHeight-scaleFactor*3,
+ scaleFactor*97, scaleFactor*1, color-1);
+ VWB_BarScaledCoord (statusborderw+scaleFactor*106, screenHeight-scaleFactor*3,
+ scaleFactor*161, scaleFactor*1, color-2);
+ VWB_BarScaledCoord (statusborderw+scaleFactor*267, screenHeight-scaleFactor*3,
+ scaleFactor*44, scaleFactor*1, color-3);
+ VWB_BarScaledCoord (screenWidth-statusborderw-scaleFactor*9, screenHeight-scaleFactor*(STATUSLINES-4),
+ scaleFactor*1, scaleFactor*20, color-2);
+ VWB_BarScaledCoord (screenWidth-statusborderw-scaleFactor*9, screenHeight-scaleFactor*(STATUSLINES/2-4),
+ scaleFactor*1, scaleFactor*14, color-3);
+}
+
+
+/*
+===================
+=
+= DrawPlayBorder
+=
+===================
+*/
+
+void DrawPlayBorder (void)
+{
+ const int px = scaleFactor; // size of one "pixel"
+
+ if (bordercol != VIEWCOLOR)
+ DrawStatusBorder(bordercol);
+ else
+ {
+ const int statusborderw = (screenWidth-px*320)/2;
+ VWB_BarScaledCoord (0, screenHeight-px*STATUSLINES,
+ statusborderw+px*8, px*STATUSLINES, bordercol);
+ VWB_BarScaledCoord (screenWidth-statusborderw-px*8, screenHeight-px*STATUSLINES,
+ statusborderw+px*8, px*STATUSLINES, bordercol);
+ }
+
+ if((unsigned) viewheight == screenHeight) return;
+
+ VWB_BarScaledCoord (0,0,screenWidth,screenHeight-px*STATUSLINES,bordercol);
+
+ const int xl = screenWidth/2-viewwidth/2;
+ const int yl = (screenHeight-px*STATUSLINES-viewheight)/2;
+ VWB_BarScaledCoord (xl,yl,viewwidth,viewheight,0);
+
+ if(xl != 0)
+ {
+ // Paint game view border lines
+ VWB_BarScaledCoord(xl-px, yl-px, viewwidth+px, px, 0); // upper border
+ VWB_BarScaledCoord(xl, yl+viewheight, viewwidth+px, px, bordercol-2); // lower border
+ VWB_BarScaledCoord(xl-px, yl-px, px, viewheight+px, 0); // left border
+ VWB_BarScaledCoord(xl+viewwidth, yl-px, px, viewheight+2*px, bordercol-2); // right border
+ VWB_BarScaledCoord(xl-px, yl+viewheight, px, px, bordercol-3); // lower left highlight
+ }
+ else
+ {
+ // Just paint a lower border line
+ VWB_BarScaledCoord(0, yl+viewheight, viewwidth, px, bordercol-2); // lower border
+ }
+}
+
+
+/*
+===================
+=
+= DrawPlayScreen
+=
+===================
+*/
+
+void DrawPlayScreen (void)
+{
+ VWB_DrawPicScaledCoord ((screenWidth-scaleFactor*320)/2,screenHeight-scaleFactor*STATUSLINES,STATUSBARPIC);
+ DrawPlayBorder ();
+
+ DrawFace ();
+ DrawHealth ();
+ DrawLives ();
+ DrawLevel ();
+ DrawAmmo ();
+ DrawKeys ();
+ DrawWeapon ();
+ DrawScore ();
+}
+
+// Uses LatchDrawPic instead of StatusDrawPic
+void LatchNumberHERE (int x, int y, unsigned width, int32_t number)
+{
+ unsigned length,c;
+ char str[20];
+
+ ltoa (number,str,10);
+
+ length = (unsigned) strlen (str);
+
+ while (length<width)
+ {
+ LatchDrawPic (x,y,N_BLANKPIC);
+ x++;
+ width--;
+ }
+
+ c = length <= width ? 0 : length-width;
+
+ while (c<length)
+ {
+ LatchDrawPic (x,y,str[c]-'0'+ N_0PIC);
+ x++;
+ c++;
+ }
+}
+
+void ShowActStatus()
+{
+ // Draw status bar without borders
+ byte *source = grsegs[STATUSBARPIC];
+ int picnum = STATUSBARPIC - STARTPICS;
+ int width = pictable[picnum].width;
+ int height = pictable[picnum].height;
+ int destx = (screenWidth-scaleFactor*320)/2 + 9 * scaleFactor;
+ int desty = screenHeight - (height - 4) * scaleFactor;
+ VL_MemToScreenScaledCoord_ex(source, width, height, 9, 4, destx, desty, width - 18, height - 7);
+
+ ingame = false;
+ DrawFace ();
+ DrawHealth ();
+ DrawLives ();
+ DrawLevel ();
+ DrawAmmo ();
+ DrawKeys ();
+ DrawWeapon ();
+ DrawScore ();
+ ingame = true;
+}
+
+
+//==========================================================================
+
+/*
+==================
+=
+= StartDemoRecord
+=
+==================
+*/
+
+char demoname[13] = "DEMO?.";
+
+#ifndef REMDEBUG
+#define MAXDEMOSIZE 8192
+
+void StartDemoRecord (int levelnumber)
+{
+ demobuffer=malloc(MAXDEMOSIZE);
+ CHECKMALLOCRESULT(demobuffer);
+ demoptr = (int8_t *) demobuffer;
+ lastdemoptr = demoptr+MAXDEMOSIZE;
+
+ *demoptr = levelnumber;
+ demoptr += 4; // leave space for length
+ demorecord = true;
+}
+
+
+/*
+==================
+=
+= FinishDemoRecord
+=
+==================
+*/
+
+void FinishDemoRecord (void)
+{
+ int32_t length,level;
+
+ demorecord = false;
+
+ length = (int32_t) (demoptr - (int8_t *)demobuffer);
+
+ demoptr = ((int8_t *)demobuffer)+1;
+ demoptr[0] = (int8_t) length;
+ demoptr[1] = (int8_t) (length >> 8);
+ demoptr[2] = 0;
+
+ VW_FadeIn();
+ CenterWindow(24,3);
+ PrintY+=6;
+ fontnumber=0;
+ SETFONTCOLOR(0,15);
+ US_Print(" Demo number (0-9): ");
+ VW_UpdateScreen();
+
+ if (US_LineInput (px,py,str,NULL,true,1,0))
+ {
+ level = atoi (str);
+ if (level>=0 && level<=9)
+ {
+ demoname[4] = (char)('0'+level);
+ CA_WriteFile (demoname,demobuffer,length);
+ }
+ }
+
+ free(demobuffer);
+}
+
+//==========================================================================
+
+/*
+==================
+=
+= RecordDemo
+=
+= Fades the screen out, then starts a demo. Exits with the screen faded
+=
+==================
+*/
+
+void RecordDemo (void)
+{
+ int level,esc,maps;
+
+ CenterWindow(26,3);
+ PrintY+=6;
+ CA_CacheGrChunk(STARTFONT);
+ fontnumber=0;
+ SETFONTCOLOR(0,15);
+#ifndef SPEAR
+#ifdef UPLOAD
+ US_Print(" Demo which level(1-10): "); maps = 10;
+#else
+ US_Print(" Demo which level(1-60): "); maps = 60;
+#endif
+#else
+ US_Print(" Demo which level(1-21): "); maps = 21;
+#endif
+ VW_UpdateScreen();
+ VW_FadeIn ();
+ esc = !US_LineInput (px,py,str,NULL,true,2,0);
+ if (esc)
+ return;
+
+ level = atoi (str);
+ level--;
+
+ if (level >= maps || level < 0)
+ return;
+
+ VW_FadeOut ();
+
+#ifndef SPEAR
+ NewGame (gd_hard,level/10);
+ gamestate.mapon = level%10;
+#else
+ NewGame (gd_hard,0);
+ gamestate.mapon = level;
+#endif
+
+ StartDemoRecord (level);
+
+ DrawPlayScreen ();
+ VW_FadeIn ();
+
+ startgame = false;
+ demorecord = true;
+
+ SetupGameLevel ();
+ StartMusic ();
+
+ if(usedoublebuffering) VH_UpdateScreen();
+ fizzlein = true;
+
+ PlayLoop ();
+
+ demoplayback = false;
+
+ StopMusic ();
+ VW_FadeOut ();
+ ClearMemory ();
+
+ FinishDemoRecord ();
+}
+#else
+void FinishDemoRecord (void) {return;}
+void RecordDemo (void) {return;}
+#endif
+
+
+
+//==========================================================================
+
+/*
+==================
+=
+= PlayDemo
+=
+= Fades the screen out, then starts a demo. Exits with the screen unfaded
+=
+==================
+*/
+
+void PlayDemo (int demonumber)
+{
+ int length;
+#ifdef DEMOSEXTERN
+// debug: load chunk
+#ifndef SPEARDEMO
+ int dems[4]={T_DEMO0,T_DEMO1,T_DEMO2,T_DEMO3};
+#else
+ int dems[1]={T_DEMO0};
+#endif
+
+ CA_CacheGrChunk(dems[demonumber]);
+ demoptr = (int8_t *) grsegs[dems[demonumber]];
+#else
+ demoname[4] = '0'+demonumber;
+ CA_LoadFile (demoname,&demobuffer);
+ demoptr = (int8_t *)demobuffer;
+#endif
+
+ NewGame (1,0);
+ gamestate.mapon = *demoptr++;
+ LOGF("%d", gamestate.mapon);
+ gamestate.difficulty = gd_hard;
+ /* FIXME POSSIBLE BUG */
+ length = READWORD((uint8_t **)&demoptr);
+ LOGF("%d", length);
+ // TODO: Seems like the original demo format supports 16 MB demos
+ // But T_DEM00 and T_DEM01 of Wolf have a 0xd8 as third length size...
+ demoptr++;
+ lastdemoptr = demoptr-4+length;
+
+ VW_FadeOut ();
+
+ SETFONTCOLOR(0,15);
+ DrawPlayScreen ();
+
+ startgame = false;
+ demoplayback = true;
+
+ SetupGameLevel ();
+ StartMusic ();
+
+ PlayLoop ();
+
+#ifdef DEMOSEXTERN
+ UNCACHEGRCHUNK(dems[demonumber]);
+#else
+ MM_FreePtr (&demobuffer);
+#endif
+
+ demoplayback = false;
+
+ StopMusic ();
+ ClearMemory ();
+}
+
+//==========================================================================
+
+/*
+==================
+=
+= Died
+=
+==================
+*/
+
+#define DEATHROTATE 2
+
+void Died (void)
+{
+ float fangle;
+ int32_t dx,dy;
+ int iangle,curangle,clockwise,counter,change;
+
+ if (screenfaded)
+ {
+ ThreeDRefresh ();
+ VW_FadeIn ();
+ }
+
+ gamestate.weapon = (weapontype) -1; // take away weapon
+ SD_PlaySound (PLAYERDEATHSND);
+
+ //
+ // swing around to face attacker
+ //
+ if(killerobj)
+ {
+ dx = killerobj->x - player->x;
+ dy = player->y - killerobj->y;
+
+ fangle = (float) atan2((float) dy, (float) dx); // returns -pi to pi
+ if (fangle<0)
+ fangle = (float) (M_PI*2+fangle);
+
+ iangle = (int) (fangle/(M_PI*2)*ANGLES);
+ }
+ else
+ {
+ iangle = player->angle + ANGLES / 2;
+ if(iangle >= ANGLES) iangle -= ANGLES;
+ }
+
+ if (player->angle > iangle)
+ {
+ counter = player->angle - iangle;
+ clockwise = ANGLES-player->angle + iangle;
+ }
+ else
+ {
+ clockwise = iangle - player->angle;
+ counter = player->angle + ANGLES-iangle;
+ }
+
+ curangle = player->angle;
+
+ if (clockwise<counter)
+ {
+ //
+ // rotate clockwise
+ //
+ if (curangle>iangle)
+ curangle -= ANGLES;
+ do
+ {
+ change = tics*DEATHROTATE;
+ if (curangle + change > iangle)
+ change = iangle-curangle;
+
+ curangle += change;
+ player->angle += change;
+ if (player->angle >= ANGLES)
+ player->angle -= ANGLES;
+
+ ThreeDRefresh ();
+ CalcTics ();
+ } while (curangle != iangle);
+ }
+ else
+ {
+ //
+ // rotate counterclockwise
+ //
+ if (curangle<iangle)
+ curangle += ANGLES;
+ do
+ {
+ change = -(int)tics*DEATHROTATE;
+ if (curangle + change < iangle)
+ change = iangle-curangle;
+
+ curangle += change;
+ player->angle += change;
+ if (player->angle < 0)
+ player->angle += ANGLES;
+
+ ThreeDRefresh ();
+ CalcTics ();
+ } while (curangle != iangle);
+ }
+
+ //
+ // fade to red
+ //
+ FinishPaletteShifts ();
+
+ if(usedoublebuffering) VH_UpdateScreen();
+
+ VL_BarScaledCoord (viewscreenx,viewscreeny,viewwidth,viewheight,4);
+
+ IN_ClearKeysDown ();
+
+ FizzleFade(screenBuffer,viewscreenx,viewscreeny,viewwidth,viewheight,70,false);
+
+ IN_UserInput(100);
+ SD_WaitSoundDone ();
+ ClearMemory();
+
+ gamestate.lives--;
+
+ if (gamestate.lives > -1)
+ {
+ gamestate.health = 100;
+ gamestate.weapon = gamestate.bestweapon
+ = gamestate.chosenweapon = wp_pistol;
+ gamestate.ammo = STARTAMMO;
+ gamestate.keys = 0;
+ pwallstate = pwallpos = 0;
+ gamestate.attackframe = gamestate.attackcount =
+ gamestate.weaponframe = 0;
+
+ if(viewsize != 21)
+ {
+ DrawKeys ();
+ DrawWeapon ();
+ DrawAmmo ();
+ DrawHealth ();
+ DrawFace ();
+ DrawLives ();
+ }
+ }
+}
+
+//==========================================================================
+
+/*
+===================
+=
+= GameLoop
+=
+===================
+*/
+
+void GameLoop (void)
+{
+ boolean died;
+#ifdef MYPROFILE
+ clock_t start,end;
+#endif
+
+restartgame:
+ ClearMemory ();
+ SETFONTCOLOR(0,15);
+ VW_FadeOut();
+ DrawPlayScreen ();
+ died = false;
+ do
+ {
+ if (!loadedgame)
+ gamestate.score = gamestate.oldscore;
+ if(!died || viewsize != 21) DrawScore();
+
+ startgame = false;
+ if (!loadedgame)
+ SetupGameLevel ();
+
+#ifdef SPEAR
+ if (gamestate.mapon == 20) // give them the key allways
+ {
+ gamestate.keys |= 1;
+ DrawKeys ();
+ }
+#endif
+
+ ingame = true;
+ if(loadedgame)
+ {
+ ContinueMusic(lastgamemusicoffset);
+ loadedgame = false;
+ }
+ else StartMusic ();
+
+ if (!died)
+ PreloadGraphics (); // TODO: Let this do something useful!
+ else
+ {
+ died = false;
+ fizzlein = true;
+ }
+
+ DrawLevel ();
+
+#ifdef SPEAR
+startplayloop:
+#endif
+ PlayLoop ();
+
+#ifdef SPEAR
+ if (spearflag)
+ {
+ SD_StopSound();
+ SD_PlaySound(GETSPEARSND);
+ if (DigiMode != sds_Off)
+ {
+ Delay(150);
+ }
+ else
+ SD_WaitSoundDone();
+
+ ClearMemory ();
+ gamestate.oldscore = gamestate.score;
+ gamestate.mapon = 20;
+ SetupGameLevel ();
+ StartMusic ();
+ player->x = spearx;
+ player->y = speary;
+ player->angle = (short)spearangle;
+ spearflag = false;
+ Thrust (0,0);
+ goto startplayloop;
+ }
+#endif
+
+ StopMusic ();
+ ingame = false;
+
+ if (demorecord && playstate != ex_warped)
+ FinishDemoRecord ();
+
+ if (startgame || loadedgame)
+ goto restartgame;
+
+ switch (playstate)
+ {
+ case ex_completed:
+ case ex_secretlevel:
+ if(viewsize == 21) DrawPlayScreen();
+ gamestate.keys = 0;
+ DrawKeys ();
+ VW_FadeOut ();
+
+ ClearMemory ();
+
+ LevelCompleted (); // do the intermission
+ if(viewsize == 21) DrawPlayScreen();
+
+#ifdef SPEARDEMO
+ if (gamestate.mapon == 1)
+ {
+ died = true; // don't "get psyched!"
+
+ VW_FadeOut ();
+
+ ClearMemory ();
+
+ CheckHighScore (gamestate.score,gamestate.mapon+1);
+#ifndef JAPAN
+ strcpy(MainMenu[viewscores].string,STR_VS);
+#endif
+ MainMenu[viewscores].routine = CP_ViewScores;
+ return;
+ }
+#endif
+
+#ifdef JAPDEMO
+ if (gamestate.mapon == 3)
+ {
+ died = true; // don't "get psyched!"
+
+ VW_FadeOut ();
+
+ ClearMemory ();
+
+ CheckHighScore (gamestate.score,gamestate.mapon+1);
+#ifndef JAPAN
+ strcpy(MainMenu[viewscores].string,STR_VS);
+#endif
+ MainMenu[viewscores].routine = CP_ViewScores;
+ return;
+ }
+#endif
+
+ gamestate.oldscore = gamestate.score;
+
+#ifndef SPEAR
+ //
+ // COMING BACK FROM SECRET LEVEL
+ //
+ if (gamestate.mapon == 9)
+ gamestate.mapon = ElevatorBackTo[gamestate.episode]; // back from secret
+ else
+ //
+ // GOING TO SECRET LEVEL
+ //
+ if (playstate == ex_secretlevel)
+ gamestate.mapon = 9;
+#else
+
+#define FROMSECRET1 3
+#define FROMSECRET2 11
+
+ //
+ // GOING TO SECRET LEVEL
+ //
+ if (playstate == ex_secretlevel)
+ switch(gamestate.mapon)
+ {
+ case FROMSECRET1: gamestate.mapon = 18; break;
+ case FROMSECRET2: gamestate.mapon = 19; break;
+ }
+ else
+ //
+ // COMING BACK FROM SECRET LEVEL
+ //
+ if (gamestate.mapon == 18 || gamestate.mapon == 19)
+ switch(gamestate.mapon)
+ {
+ case 18: gamestate.mapon = FROMSECRET1+1; break;
+ case 19: gamestate.mapon = FROMSECRET2+1; break;
+ }
+#endif
+ else
+ //
+ // GOING TO NEXT LEVEL
+ //
+ gamestate.mapon++;
+ break;
+
+ case ex_died:
+ Died ();
+ died = true; // don't "get psyched!"
+
+ if (gamestate.lives > -1)
+ break; // more lives left
+
+ VW_FadeOut ();
+ if(screenHeight % 200 != 0)
+ VL_ClearScreen(0);
+
+#ifdef _arch_dreamcast
+ DC_StatusClearLCD();
+#endif
+
+ ClearMemory ();
+
+ CheckHighScore (gamestate.score,gamestate.mapon+1);
+#ifndef JAPAN
+ strcpy(MainMenu[viewscores].string,STR_VS);
+#endif
+ MainMenu[viewscores].routine = CP_ViewScores;
+ return;
+
+ case ex_victorious:
+ if(viewsize == 21) DrawPlayScreen();
+#ifndef SPEAR
+ VW_FadeOut ();
+#else
+ VL_FadeOut (0,255,0,17,17,300);
+#endif
+ ClearMemory ();
+
+ Victory ();
+
+ ClearMemory ();
+
+ CheckHighScore (gamestate.score,gamestate.mapon+1);
+#ifndef JAPAN
+ strcpy(MainMenu[viewscores].string,STR_VS);
+#endif
+ MainMenu[viewscores].routine = CP_ViewScores;
+ return;
+
+ default:
+ if(viewsize == 21) DrawPlayScreen();
+ ClearMemory ();
+ break;
+ }
+ } while (1);
+}
diff --git a/apps/plugins/sdl/progs/wolf3d/wl_inter.c b/apps/plugins/sdl/progs/wolf3d/wl_inter.c
new file mode 100644
index 0000000000..113c55c79d
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/wl_inter.c
@@ -0,0 +1,1723 @@
+// WL_INTER.C
+
+#include "wl_def.h"
+#pragma hdrstop
+
+LRstruct LevelRatios[LRpack];
+int32_t lastBreathTime = 0;
+
+void Write (int x, int y, const char *string);
+
+//==========================================================================
+
+/*
+==================
+=
+= CLearSplitVWB
+=
+==================
+*/
+
+void
+ClearSplitVWB (void)
+{
+ WindowX = 0;
+ WindowY = 0;
+ WindowW = 320;
+ WindowH = 160;
+}
+
+
+//==========================================================================
+
+#ifdef SPEAR
+#ifndef SPEARDEMO
+////////////////////////////////////////////////////////
+//
+// End of Spear of Destiny
+//
+////////////////////////////////////////////////////////
+
+void
+EndScreen (int palette, int screen)
+{
+ SDL_Color pal[256];
+ CA_CacheScreen (screen);
+ VW_UpdateScreen ();
+ CA_CacheGrChunk (palette);
+ VL_ConvertPalette(grsegs[palette], pal, 256);
+ VL_FadeIn (0, 255, pal, 30);
+ UNCACHEGRCHUNK (palette);
+ IN_ClearKeysDown ();
+ IN_Ack ();
+ VW_FadeOut ();
+}
+
+
+void
+EndSpear (void)
+{
+ SDL_Color pal[256];
+
+ EndScreen (END1PALETTE, ENDSCREEN11PIC);
+
+ CA_CacheScreen (ENDSCREEN3PIC);
+ VW_UpdateScreen ();
+ CA_CacheGrChunk (END3PALETTE);
+ VL_ConvertPalette(grsegs[END3PALETTE], pal, 256);
+ VL_FadeIn (0, 255, pal, 30);
+ UNCACHEGRCHUNK (END3PALETTE);
+ fontnumber = 0;
+ fontcolor = 0xd0;
+ WindowX = 0;
+ WindowW = 320;
+ PrintX = 0;
+ PrintY = 180;
+ US_CPrint (STR_ENDGAME1 "\n");
+ US_CPrint (STR_ENDGAME2);
+ VW_UpdateScreen ();
+ IN_UserInput(700);
+
+ PrintX = 0;
+ PrintY = 180;
+ VWB_Bar (0, 180, 320, 20, 0);
+ US_CPrint (STR_ENDGAME3 "\n");
+ US_CPrint (STR_ENDGAME4);
+ VW_UpdateScreen ();
+ IN_UserInput(700);
+
+ VW_FadeOut ();
+
+ EndScreen (END4PALETTE, ENDSCREEN4PIC);
+ EndScreen (END5PALETTE, ENDSCREEN5PIC);
+ EndScreen (END6PALETTE, ENDSCREEN6PIC);
+ EndScreen (END7PALETTE, ENDSCREEN7PIC);
+ EndScreen (END8PALETTE, ENDSCREEN8PIC);
+ EndScreen (END9PALETTE, ENDSCREEN9PIC);
+
+ EndScreen (END2PALETTE, ENDSCREEN12PIC);
+
+ MainMenu[savegame].active = 0;
+}
+#endif
+#endif
+
+//==========================================================================
+
+/*
+==================
+=
+= Victory
+=
+==================
+*/
+
+void
+Victory (void)
+{
+#ifndef SPEARDEMO
+ int32_t sec;
+ int i, min, kr, sr, tr, x;
+ char tempstr[8];
+
+#define RATIOX 6
+#define RATIOY 14
+#define TIMEX 14
+#define TIMEY 8
+
+
+#ifdef SPEAR
+ StartCPMusic (XTHEEND_MUS);
+
+ CA_CacheGrChunk (BJCOLLAPSE1PIC);
+ CA_CacheGrChunk (BJCOLLAPSE2PIC);
+ CA_CacheGrChunk (BJCOLLAPSE3PIC);
+ CA_CacheGrChunk (BJCOLLAPSE4PIC);
+
+ VWB_Bar (0, 0, 320, 200, VIEWCOLOR);
+ VWB_DrawPic (124, 44, BJCOLLAPSE1PIC);
+ VW_UpdateScreen ();
+ VW_FadeIn ();
+ VW_WaitVBL (2 * 70);
+ VWB_DrawPic (124, 44, BJCOLLAPSE2PIC);
+ VW_UpdateScreen ();
+ VW_WaitVBL (105);
+ VWB_DrawPic (124, 44, BJCOLLAPSE3PIC);
+ VW_UpdateScreen ();
+ VW_WaitVBL (105);
+ VWB_DrawPic (124, 44, BJCOLLAPSE4PIC);
+ VW_UpdateScreen ();
+ VW_WaitVBL (3 * 70);
+
+ UNCACHEGRCHUNK (BJCOLLAPSE1PIC);
+ UNCACHEGRCHUNK (BJCOLLAPSE2PIC);
+ UNCACHEGRCHUNK (BJCOLLAPSE3PIC);
+ UNCACHEGRCHUNK (BJCOLLAPSE4PIC);
+ VL_FadeOut (0, 255, 0, 17, 17, 5);
+#endif
+
+ StartCPMusic (URAHERO_MUS);
+ ClearSplitVWB ();
+ CacheLump (LEVELEND_LUMP_START, LEVELEND_LUMP_END);
+ CA_CacheGrChunk (STARTFONT);
+
+#ifndef SPEAR
+ CA_CacheGrChunk (C_TIMECODEPIC);
+#endif
+
+ VWB_Bar (0, 0, 320, screenHeight / scaleFactor - STATUSLINES + 1, VIEWCOLOR);
+ if (bordercol != VIEWCOLOR)
+ DrawStatusBorder (VIEWCOLOR);
+
+#ifdef JAPAN
+#ifndef JAPDEMO
+ CA_CacheGrChunk (C_ENDRATIOSPIC);
+ VWB_DrawPic (0, 0, C_ENDRATIOSPIC);
+ UNCACHEGRCHUNK (C_ENDRATIOSPIC);
+#endif
+#else
+ Write (18, 2, STR_YOUWIN);
+
+ Write (TIMEX, TIMEY - 2, STR_TOTALTIME);
+
+ Write (12, RATIOY - 2, "averages");
+
+#ifdef SPANISH
+ Write (RATIOX + 2, RATIOY, STR_RATKILL);
+ Write (RATIOX + 2, RATIOY + 2, STR_RATSECRET);
+ Write (RATIOX + 2, RATIOY + 4, STR_RATTREASURE);
+#else
+ Write (RATIOX + 8, RATIOY, STR_RATKILL);
+ Write (RATIOX + 4, RATIOY + 2, STR_RATSECRET);
+ Write (RATIOX, RATIOY + 4, STR_RATTREASURE);
+#endif
+
+#endif
+
+#ifndef JAPDEMO
+ VWB_DrawPic (8, 4, L_BJWINSPIC);
+#endif
+
+
+ for (kr = sr = tr = sec = i = 0; i < LRpack; i++)
+ {
+ sec += LevelRatios[i].time;
+ kr += LevelRatios[i].kill;
+ sr += LevelRatios[i].secret;
+ tr += LevelRatios[i].treasure;
+ }
+
+#ifndef SPEAR
+ kr /= LRpack;
+ sr /= LRpack;
+ tr /= LRpack;
+#else
+ kr /= 14;
+ sr /= 14;
+ tr /= 14;
+#endif
+
+ min = sec / 60;
+ sec %= 60;
+
+ if (min > 99)
+ min = sec = 99;
+
+ i = TIMEX * 8 + 1;
+ VWB_DrawPic (i, TIMEY * 8, L_NUM0PIC + (min / 10));
+ i += 2 * 8;
+ VWB_DrawPic (i, TIMEY * 8, L_NUM0PIC + (min % 10));
+ i += 2 * 8;
+ Write (i / 8, TIMEY, ":");
+ i += 1 * 8;
+ VWB_DrawPic (i, TIMEY * 8, L_NUM0PIC + (sec / 10));
+ i += 2 * 8;
+ VWB_DrawPic (i, TIMEY * 8, L_NUM0PIC + (sec % 10));
+ VW_UpdateScreen ();
+
+ itoa (kr, tempstr, 10);
+ x = RATIOX + 24 - (int) strlen(tempstr) * 2;
+ Write (x, RATIOY, tempstr);
+
+ itoa (sr, tempstr, 10);
+ x = RATIOX + 24 - (int) strlen(tempstr) * 2;
+ Write (x, RATIOY + 2, tempstr);
+
+ itoa (tr, tempstr, 10);
+ x = RATIOX + 24 - (int) strlen(tempstr) * 2;
+ Write (x, RATIOY + 4, tempstr);
+
+#ifndef SPANISH
+#ifndef UPLOAD
+#ifndef SPEAR
+ //
+ // TOTAL TIME VERIFICATION CODE
+ //
+ if (gamestate.difficulty >= gd_medium)
+ {
+ VWB_DrawPic (30 * 8, TIMEY * 8, C_TIMECODEPIC);
+ fontnumber = 0;
+ fontcolor = READHCOLOR;
+ PrintX = 30 * 8 - 3;
+ PrintY = TIMEY * 8 + 8;
+ PrintX += 4;
+ tempstr[0] = (((min / 10) ^ (min % 10)) ^ 0xa) + 'A';
+ tempstr[1] = (int) ((((sec / 10) ^ (sec % 10)) ^ 0xa) + 'A');
+ tempstr[2] = (tempstr[0] ^ tempstr[1]) + 'A';
+ tempstr[3] = 0;
+ US_Print (tempstr);
+ }
+#endif
+#endif
+#endif
+
+ fontnumber = 1;
+
+ VW_UpdateScreen ();
+ VW_FadeIn ();
+
+ IN_Ack ();
+
+ VW_FadeOut ();
+ if(screenHeight % 200 != 0)
+ VL_ClearScreen(0);
+
+#ifndef SPEAR
+ UNCACHEGRCHUNK (C_TIMECODEPIC);
+#endif
+ UnCacheLump (LEVELEND_LUMP_START, LEVELEND_LUMP_END);
+
+#ifndef SPEAR
+ EndText ();
+#else
+ EndSpear ();
+#endif
+
+#endif // SPEARDEMO
+}
+
+
+//==========================================================================
+
+#ifndef JAPAN
+/*
+==================
+=
+= PG13
+=
+==================
+*/
+
+void
+PG13 (void)
+{
+ VW_FadeOut ();
+ VWB_Bar (0, 0, 320, 200, 0x82); // background
+
+ CA_CacheGrChunk (PG13PIC);
+ VWB_DrawPic (216, 110, PG13PIC);
+ VW_UpdateScreen ();
+
+ UNCACHEGRCHUNK (PG13PIC);
+
+ VW_FadeIn ();
+ IN_UserInput (TickBase * 7);
+
+ VW_FadeOut ();
+}
+#endif
+
+
+//==========================================================================
+
+void
+Write (int x, int y, const char *string)
+{
+ static const int alpha[] = { L_NUM0PIC, L_NUM1PIC, L_NUM2PIC, L_NUM3PIC, L_NUM4PIC, L_NUM5PIC,
+ L_NUM6PIC, L_NUM7PIC, L_NUM8PIC, L_NUM9PIC, L_COLONPIC, 0, 0, 0, 0, 0, 0, L_APIC, L_BPIC,
+ L_CPIC, L_DPIC, L_EPIC, L_FPIC, L_GPIC, L_HPIC, L_IPIC, L_JPIC, L_KPIC,
+ L_LPIC, L_MPIC, L_NPIC, L_OPIC, L_PPIC, L_QPIC, L_RPIC, L_SPIC, L_TPIC,
+ L_UPIC, L_VPIC, L_WPIC, L_XPIC, L_YPIC, L_ZPIC
+ };
+
+ int i, ox, nx, ny, len = (int) strlen(string);
+ char ch;
+
+ ox = nx = x * 8;
+ ny = y * 8;
+ for (i = 0; i < len; i++)
+ {
+ if (string[i] == '\n')
+ {
+ nx = ox;
+ ny += 16;
+ }
+ else
+ {
+ ch = string[i];
+ if (ch >= 'a')
+ ch -= ('a' - 'A');
+ ch -= '0';
+
+ switch (string[i])
+ {
+ case '!':
+ VWB_DrawPic (nx, ny, L_EXPOINTPIC);
+ nx += 8;
+ continue;
+
+#ifndef APOGEE_1_0
+ case '\'':
+ VWB_DrawPic (nx, ny, L_APOSTROPHEPIC);
+ nx += 8;
+ continue;
+#endif
+
+ case ' ':
+ break;
+
+ case 0x3a: // ':'
+ VWB_DrawPic (nx, ny, L_COLONPIC);
+ nx += 8;
+ continue;
+
+ case '%':
+ VWB_DrawPic (nx, ny, L_PERCENTPIC);
+ break;
+
+ default:
+ VWB_DrawPic (nx, ny, alpha[ch]);
+ }
+ nx += 16;
+ }
+ }
+}
+
+
+//
+// Breathe Mr. BJ!!!
+//
+void
+BJ_Breathe (void)
+{
+ static int which = 0, max = 10;
+ int pics[2] = { L_GUYPIC, L_GUY2PIC };
+
+ SDL_Delay(5);
+
+ if ((int32_t) GetTimeCount () - lastBreathTime > max)
+ {
+ which ^= 1;
+ VWB_DrawPic (0, 16, pics[which]);
+ VW_UpdateScreen ();
+ lastBreathTime = GetTimeCount();
+ max = 35;
+ }
+}
+
+
+
+/*
+==================
+=
+= LevelCompleted
+=
+= Entered with the screen faded out
+= Still in split screen mode with the status bar
+=
+= Exit with the screen faded out
+=
+==================
+*/
+
+void
+LevelCompleted (void)
+{
+#define VBLWAIT 30
+#define PAR_AMOUNT 500
+#define PERCENT100AMT 10000
+ typedef struct
+ {
+ float time;
+ char timestr[6];
+ } times;
+
+ int x, i, min, sec, ratio, kr, sr, tr;
+ char tempstr[10];
+ int32_t bonus, timeleft = 0;
+ times parTimes[] = {
+#ifndef SPEAR
+ //
+ // Episode One Par Times
+ //
+ {1.5, "01:30"},
+ {2, "02:00"},
+ {2, "02:00"},
+ {3.5, "03:30"},
+ {3, "03:00"},
+ {3, "03:00"},
+ {2.5, "02:30"},
+ {2.5, "02:30"},
+ {0, "??:??"}, // Boss level
+ {0, "??:??"}, // Secret level
+
+ //
+ // Episode Two Par Times
+ //
+ {1.5, "01:30"},
+ {3.5, "03:30"},
+ {3, "03:00"},
+ {2, "02:00"},
+ {4, "04:00"},
+ {6, "06:00"},
+ {1, "01:00"},
+ {3, "03:00"},
+ {0, "??:??"},
+ {0, "??:??"},
+
+ //
+ // Episode Three Par Times
+ //
+ {1.5, "01:30"},
+ {1.5, "01:30"},
+ {2.5, "02:30"},
+ {2.5, "02:30"},
+ {3.5, "03:30"},
+ {2.5, "02:30"},
+ {2, "02:00"},
+ {6, "06:00"},
+ {0, "??:??"},
+ {0, "??:??"},
+
+ //
+ // Episode Four Par Times
+ //
+ {2, "02:00"},
+ {2, "02:00"},
+ {1.5, "01:30"},
+ {1, "01:00"},
+ {4.5, "04:30"},
+ {3.5, "03:30"},
+ {2, "02:00"},
+ {4.5, "04:30"},
+ {0, "??:??"},
+ {0, "??:??"},
+
+ //
+ // Episode Five Par Times
+ //
+ {2.5, "02:30"},
+ {1.5, "01:30"},
+ {2.5, "02:30"},
+ {2.5, "02:30"},
+ {4, "04:00"},
+ {3, "03:00"},
+ {4.5, "04:30"},
+ {3.5, "03:30"},
+ {0, "??:??"},
+ {0, "??:??"},
+
+ //
+ // Episode Six Par Times
+ //
+ {6.5, "06:30"},
+ {4, "04:00"},
+ {4.5, "04:30"},
+ {6, "06:00"},
+ {5, "05:00"},
+ {5.5, "05:30"},
+ {5.5, "05:30"},
+ {8.5, "08:30"},
+ {0, "??:??"},
+ {0, "??:??"}
+#else
+ //
+ // SPEAR OF DESTINY TIMES
+ //
+ {1.5, "01:30"},
+ {3.5, "03:30"},
+ {2.75, "02:45"},
+ {3.5, "03:30"},
+ {0, "??:??"}, // Boss 1
+ {4.5, "04:30"},
+ {3.25, "03:15"},
+ {2.75, "02:45"},
+ {4.75, "04:45"},
+ {0, "??:??"}, // Boss 2
+ {6.5, "06:30"},
+ {4.5, "04:30"},
+ {2.75, "02:45"},
+ {4.5, "04:30"},
+ {6, "06:00"},
+ {0, "??:??"}, // Boss 3
+ {6, "06:00"},
+ {0, "??:??"}, // Boss 4
+ {0, "??:??"}, // Secret level 1
+ {0, "??:??"}, // Secret level 2
+#endif
+ };
+
+ CacheLump (LEVELEND_LUMP_START, LEVELEND_LUMP_END);
+ ClearSplitVWB (); // set up for double buffering in split screen
+ VWB_Bar (0, 0, 320, screenHeight / scaleFactor - STATUSLINES + 1, VIEWCOLOR);
+
+ if (bordercol != VIEWCOLOR)
+ DrawStatusBorder (VIEWCOLOR);
+
+ StartCPMusic (ENDLEVEL_MUS);
+
+//
+// do the intermission
+//
+ IN_ClearKeysDown ();
+ IN_StartAck ();
+
+#ifdef JAPAN
+ CA_CacheGrChunk (C_INTERMISSIONPIC);
+ VWB_DrawPic (0, 0, C_INTERMISSIONPIC);
+ UNCACHEGRCHUNK (C_INTERMISSIONPIC);
+#endif
+ VWB_DrawPic (0, 16, L_GUYPIC);
+
+#ifndef SPEAR
+ if (mapon < 8)
+#else
+ if (mapon != 4 && mapon != 9 && mapon != 15 && mapon < 17)
+#endif
+ {
+#ifndef JAPAN
+#ifdef SPANISH
+ Write (14, 2, "piso\ncompletado");
+#else
+ Write (14, 2, "floor\ncompleted");
+#endif
+
+ Write (14, 7, STR_BONUS " 0");
+ Write (16, 10, STR_TIME);
+ Write (16, 12, STR_PAR);
+
+#ifdef SPANISH
+ Write (11, 14, STR_RAT2KILL);
+ Write (11, 16, STR_RAT2SECRET);
+ Write (11, 18, STR_RAT2TREASURE);
+#else
+ Write (9, 14, STR_RAT2KILL);
+ Write (5, 16, STR_RAT2SECRET);
+ Write (1, 18, STR_RAT2TREASURE);
+#endif
+
+ Write (26, 2, itoa (gamestate.mapon + 1, tempstr, 10));
+#endif
+
+#ifdef SPANISH
+ Write (30, 12, parTimes[gamestate.episode * 10 + mapon].timestr);
+#else
+ Write (26, 12, parTimes[gamestate.episode * 10 + mapon].timestr);
+#endif
+
+ //
+ // PRINT TIME
+ //
+ sec = gamestate.TimeCount / 70;
+
+ if (sec > 99 * 60) // 99 minutes max
+ sec = 99 * 60;
+
+ if (gamestate.TimeCount < parTimes[gamestate.episode * 10 + mapon].time * 4200)
+ timeleft = (int32_t) ((parTimes[gamestate.episode * 10 + mapon].time * 4200) / 70 - sec);
+
+ min = sec / 60;
+ sec %= 60;
+
+#ifdef SPANISH
+ i = 30 * 8;
+#else
+ i = 26 * 8;
+#endif
+ VWB_DrawPic (i, 10 * 8, L_NUM0PIC + (min / 10));
+ i += 2 * 8;
+ VWB_DrawPic (i, 10 * 8, L_NUM0PIC + (min % 10));
+ i += 2 * 8;
+ Write (i / 8, 10, ":");
+ i += 1 * 8;
+ VWB_DrawPic (i, 10 * 8, L_NUM0PIC + (sec / 10));
+ i += 2 * 8;
+ VWB_DrawPic (i, 10 * 8, L_NUM0PIC + (sec % 10));
+
+ VW_UpdateScreen ();
+ VW_FadeIn ();
+
+
+ //
+ // FIGURE RATIOS OUT BEFOREHAND
+ //
+ kr = sr = tr = 0;
+ if (gamestate.killtotal)
+ kr = (gamestate.killcount * 100) / gamestate.killtotal;
+ if (gamestate.secrettotal)
+ sr = (gamestate.secretcount * 100) / gamestate.secrettotal;
+ if (gamestate.treasuretotal)
+ tr = (gamestate.treasurecount * 100) / gamestate.treasuretotal;
+
+
+ //
+ // PRINT TIME BONUS
+ //
+ bonus = timeleft * PAR_AMOUNT;
+ if (bonus)
+ {
+ for (i = 0; i <= timeleft; i++)
+ {
+ ltoa ((int32_t) i * PAR_AMOUNT, tempstr, 10);
+ x = 36 - (int) strlen(tempstr) * 2;
+ Write (x, 7, tempstr);
+ if (!(i % (PAR_AMOUNT / 10)))
+ SD_PlaySound (ENDBONUS1SND);
+ if(!usedoublebuffering || !(i % (PAR_AMOUNT / 50))) VW_UpdateScreen ();
+ while(SD_SoundPlaying ())
+ BJ_Breathe ();
+ if (IN_CheckAck ())
+ goto done;
+ }
+
+ VW_UpdateScreen ();
+
+ SD_PlaySound (ENDBONUS2SND);
+ while (SD_SoundPlaying ())
+ BJ_Breathe ();
+ }
+
+
+#ifdef SPANISH
+#define RATIOXX 33
+#else
+#define RATIOXX 37
+#endif
+ //
+ // KILL RATIO
+ //
+ ratio = kr;
+ for (i = 0; i <= ratio; i++)
+ {
+ itoa (i, tempstr, 10);
+ x = RATIOXX - (int) strlen(tempstr) * 2;
+ Write (x, 14, tempstr);
+ if (!(i % 10))
+ SD_PlaySound (ENDBONUS1SND);
+ if(!usedoublebuffering || !(i & 1)) VW_UpdateScreen ();
+ while (SD_SoundPlaying ())
+ BJ_Breathe ();
+
+ if (IN_CheckAck ())
+ goto done;
+ }
+ if (ratio >= 100)
+ {
+ VW_WaitVBL (VBLWAIT);
+ SD_StopSound ();
+ bonus += PERCENT100AMT;
+ ltoa (bonus, tempstr, 10);
+ x = (RATIOXX - 1) - (int) strlen(tempstr) * 2;
+ Write (x, 7, tempstr);
+ VW_UpdateScreen ();
+ SD_PlaySound (PERCENT100SND);
+ }
+ else if (!ratio)
+ {
+ VW_WaitVBL (VBLWAIT);
+ SD_StopSound ();
+ SD_PlaySound (NOBONUSSND);
+ }
+ else
+ SD_PlaySound (ENDBONUS2SND);
+
+ VW_UpdateScreen ();
+ while (SD_SoundPlaying ())
+ BJ_Breathe ();
+
+ //
+ // SECRET RATIO
+ //
+ ratio = sr;
+ for (i = 0; i <= ratio; i++)
+ {
+ itoa (i, tempstr, 10);
+ x = RATIOXX - (int) strlen(tempstr) * 2;
+ Write (x, 16, tempstr);
+ if (!(i % 10))
+ SD_PlaySound (ENDBONUS1SND);
+ if(!usedoublebuffering || !(i & 1)) VW_UpdateScreen ();
+ while (SD_SoundPlaying ())
+ BJ_Breathe ();
+
+ if (IN_CheckAck ())
+ goto done;
+ }
+ if (ratio >= 100)
+ {
+ VW_WaitVBL (VBLWAIT);
+ SD_StopSound ();
+ bonus += PERCENT100AMT;
+ ltoa (bonus, tempstr, 10);
+ x = (RATIOXX - 1) - (int) strlen(tempstr) * 2;
+ Write (x, 7, tempstr);
+ VW_UpdateScreen ();
+ SD_PlaySound (PERCENT100SND);
+ }
+ else if (!ratio)
+ {
+ VW_WaitVBL (VBLWAIT);
+ SD_StopSound ();
+ SD_PlaySound (NOBONUSSND);
+ }
+ else
+ SD_PlaySound (ENDBONUS2SND);
+ VW_UpdateScreen ();
+ while (SD_SoundPlaying ())
+ BJ_Breathe ();
+
+ //
+ // TREASURE RATIO
+ //
+ ratio = tr;
+ for (i = 0; i <= ratio; i++)
+ {
+ itoa (i, tempstr, 10);
+ x = RATIOXX - (int) strlen(tempstr) * 2;
+ Write (x, 18, tempstr);
+ if (!(i % 10))
+ SD_PlaySound (ENDBONUS1SND);
+ if(!usedoublebuffering || !(i & 1)) VW_UpdateScreen ();
+ while (SD_SoundPlaying ())
+ BJ_Breathe ();
+ if (IN_CheckAck ())
+ goto done;
+ }
+ if (ratio >= 100)
+ {
+ VW_WaitVBL (VBLWAIT);
+ SD_StopSound ();
+ bonus += PERCENT100AMT;
+ ltoa (bonus, tempstr, 10);
+ x = (RATIOXX - 1) - (int) strlen(tempstr) * 2;
+ Write (x, 7, tempstr);
+ VW_UpdateScreen ();
+ SD_PlaySound (PERCENT100SND);
+ }
+ else if (!ratio)
+ {
+ VW_WaitVBL (VBLWAIT);
+ SD_StopSound ();
+ SD_PlaySound (NOBONUSSND);
+ }
+ else
+ SD_PlaySound (ENDBONUS2SND);
+ VW_UpdateScreen ();
+ while (SD_SoundPlaying ())
+ BJ_Breathe ();
+
+
+ //
+ // JUMP STRAIGHT HERE IF KEY PRESSED
+ //
+done: itoa (kr, tempstr, 10);
+ x = RATIOXX - (int) strlen(tempstr) * 2;
+ Write (x, 14, tempstr);
+
+ itoa (sr, tempstr, 10);
+ x = RATIOXX - (int) strlen(tempstr) * 2;
+ Write (x, 16, tempstr);
+
+ itoa (tr, tempstr, 10);
+ x = RATIOXX - (int) strlen(tempstr) * 2;
+ Write (x, 18, tempstr);
+
+ bonus = (int32_t) timeleft *PAR_AMOUNT +
+ (PERCENT100AMT * (kr >= 100)) +
+ (PERCENT100AMT * (sr >= 100)) + (PERCENT100AMT * (tr >= 100));
+
+ GivePoints (bonus);
+ ltoa (bonus, tempstr, 10);
+ x = 36 - (int) strlen(tempstr) * 2;
+ Write (x, 7, tempstr);
+
+ //
+ // SAVE RATIO INFORMATION FOR ENDGAME
+ //
+ LevelRatios[mapon].kill = kr;
+ LevelRatios[mapon].secret = sr;
+ LevelRatios[mapon].treasure = tr;
+ LevelRatios[mapon].time = min * 60 + sec;
+ }
+ else
+ {
+#ifdef SPEAR
+#ifndef SPEARDEMO
+ switch (mapon)
+ {
+ case 4:
+ Write (14, 4, " trans\n" " grosse\n" STR_DEFEATED);
+ break;
+ case 9:
+ Write (14, 4, "barnacle\n" "wilhelm\n" STR_DEFEATED);
+ break;
+ case 15:
+ Write (14, 4, "ubermutant\n" STR_DEFEATED);
+ break;
+ case 17:
+ Write (14, 4, " death\n" " knight\n" STR_DEFEATED);
+ break;
+ case 18:
+ Write (13, 4, "secret tunnel\n" " area\n" " completed!");
+ break;
+ case 19:
+ Write (13, 4, "secret castle\n" " area\n" " completed!");
+ break;
+ }
+#endif
+#else
+ Write (14, 4, "secret floor\n completed!");
+#endif
+
+ Write (10, 16, "15000 bonus!");
+
+ VW_UpdateScreen ();
+ VW_FadeIn ();
+
+ GivePoints (15000);
+ }
+
+
+ DrawScore ();
+ VW_UpdateScreen ();
+
+ lastBreathTime = GetTimeCount();
+ IN_StartAck ();
+ while (!IN_CheckAck ())
+ BJ_Breathe ();
+
+//
+// done
+//
+#ifdef SPEARDEMO
+ if (gamestate.mapon == 1)
+ {
+ SD_PlaySound (BONUS1UPSND);
+
+ CA_CacheGrChunk (STARTFONT + 1);
+ Message ("This concludes your demo\n"
+ "of Spear of Destiny! Now,\n" "go to your local software\n" "store and buy it!");
+ UNCACHEGRCHUNK (STARTFONT + 1);
+
+ IN_ClearKeysDown ();
+ IN_Ack ();
+ }
+#endif
+
+#ifdef JAPDEMO
+ if (gamestate.mapon == 3)
+ {
+ SD_PlaySound (BONUS1UPSND);
+
+ CA_CacheGrChunk (STARTFONT + 1);
+ Message ("This concludes your demo\n"
+ "of Wolfenstein 3-D! Now,\n" "go to your local software\n" "store and buy it!");
+ UNCACHEGRCHUNK (STARTFONT + 1);
+
+ IN_ClearKeysDown ();
+ IN_Ack ();
+ }
+#endif
+
+ VW_FadeOut ();
+ DrawPlayBorder();
+
+ UnCacheLump (LEVELEND_LUMP_START, LEVELEND_LUMP_END);
+}
+
+
+
+//==========================================================================
+
+
+/*
+=================
+=
+= PreloadGraphics
+=
+= Fill the cache up
+=
+=================
+*/
+
+boolean
+PreloadUpdate (unsigned current, unsigned total)
+{
+ unsigned w = WindowW - scaleFactor * 10;
+
+ VWB_BarScaledCoord (WindowX + scaleFactor * 5, WindowY + WindowH - scaleFactor * 3,
+ w, scaleFactor * 2, BLACK);
+ w = ((int32_t) w * current) / total;
+ if (w)
+ {
+ VWB_BarScaledCoord (WindowX + scaleFactor * 5, WindowY + WindowH - scaleFactor * 3,
+ w, scaleFactor * 2, 0x37); //SECONDCOLOR);
+ VWB_BarScaledCoord (WindowX + scaleFactor * 5, WindowY + WindowH - scaleFactor * 3,
+ w - scaleFactor * 1, scaleFactor * 1, 0x32);
+
+ }
+ VW_UpdateScreen ();
+// if (LastScan == sc_Escape)
+// {
+// IN_ClearKeysDown();
+// return(true);
+// }
+// else
+ return (false);
+}
+
+void
+PreloadGraphics (void)
+{
+ DrawLevel ();
+ ClearSplitVWB (); // set up for double buffering in split screen
+
+ VWB_BarScaledCoord (0, 0, screenWidth, screenHeight - scaleFactor * (STATUSLINES - 1), bordercol);
+ LatchDrawPicScaledCoord ((screenWidth-scaleFactor*224)/16,
+ (screenHeight-scaleFactor*(STATUSLINES+48))/2, GETPSYCHEDPIC);
+
+ WindowX = (screenWidth - scaleFactor*224)/2;
+ WindowY = (screenHeight - scaleFactor*(STATUSLINES+48))/2;
+ WindowW = scaleFactor * 28 * 8;
+ WindowH = scaleFactor * 48;
+
+ VW_UpdateScreen ();
+ VW_FadeIn ();
+
+// PM_Preload (PreloadUpdate);
+ PreloadUpdate (10, 10);
+ IN_UserInput (70);
+ VW_FadeOut ();
+
+ DrawPlayBorder ();
+ VW_UpdateScreen ();
+}
+
+
+//==========================================================================
+
+/*
+==================
+=
+= DrawHighScores
+=
+==================
+*/
+
+void
+DrawHighScores (void)
+{
+ char buffer[16];
+#ifndef SPEAR
+ char *str;
+#ifndef UPLOAD
+ char buffer1[5];
+#endif
+#endif
+ word i, w, h;
+ HighScore *s;
+
+#ifndef SPEAR
+ CA_CacheGrChunk (HIGHSCORESPIC);
+ CA_CacheGrChunk (STARTFONT);
+#ifndef APOGEE_1_0
+ CA_CacheGrChunk (C_LEVELPIC);
+ CA_CacheGrChunk (C_SCOREPIC);
+ CA_CacheGrChunk (C_NAMEPIC);
+#else
+ CA_CacheGrChunk (C_CODEPIC);
+#endif
+
+ ClearMScreen ();
+ DrawStripes (10);
+
+ VWB_DrawPic (48, 0, HIGHSCORESPIC);
+ UNCACHEGRCHUNK (HIGHSCORESPIC);
+
+#ifndef APOGEE_1_0
+ VWB_DrawPic (4 * 8, 68, C_NAMEPIC);
+ VWB_DrawPic (20 * 8, 68, C_LEVELPIC);
+ VWB_DrawPic (28 * 8, 68, C_SCOREPIC);
+#else
+ VWB_DrawPic(35*8,68,C_CODEPIC);
+#endif
+ fontnumber = 0;
+
+#else
+ CacheLump (BACKDROP_LUMP_START, BACKDROP_LUMP_END);
+ ClearMScreen ();
+ DrawStripes (10);
+ UnCacheLump (BACKDROP_LUMP_START, BACKDROP_LUMP_END);
+
+ CacheLump (HIGHSCORES_LUMP_START, HIGHSCORES_LUMP_END);
+ CA_CacheGrChunk (STARTFONT + 1);
+ VWB_DrawPic (0, 0, HIGHSCORESPIC);
+
+ fontnumber = 1;
+#endif
+
+
+#ifndef SPEAR
+ SETFONTCOLOR (15, 0x29);
+#else
+ SETFONTCOLOR (HIGHLIGHT, 0x29);
+#endif
+
+ for (i = 0, s = Scores; i < MaxScores; i++, s++)
+ {
+ PrintY = 76 + (16 * i);
+
+ //
+ // name
+ //
+#ifndef SPEAR
+ PrintX = 4 * 8;
+#else
+ PrintX = 16;
+#endif
+ US_Print (s->name);
+
+ //
+ // level
+ //
+ itoa (s->completed, buffer, 10);
+#ifndef SPEAR
+ for (str = buffer; *str; str++)
+ *str = *str + (129 - '0'); // Used fixed-width numbers (129...)
+ USL_MeasureString (buffer, &w, &h);
+ PrintX = (22 * 8) - w;
+#else
+ USL_MeasureString (buffer, &w, &h);
+ PrintX = 194 - w;
+#endif
+
+#ifndef UPLOAD
+#ifndef SPEAR
+ PrintX -= 6;
+ itoa (s->episode + 1, buffer1, 10);
+ US_Print ("E");
+ US_Print (buffer1);
+ US_Print ("/L");
+#endif
+#endif
+
+#ifdef SPEAR
+ if (s->completed == 21)
+ VWB_DrawPic (PrintX + 8, PrintY - 1, C_WONSPEARPIC);
+ else
+#endif
+ US_Print (buffer);
+
+ //
+ // score
+ //
+ itoa (s->score, buffer, 10);
+#ifndef SPEAR
+ for (str = buffer; *str; str++)
+ *str = *str + (129 - '0'); // Used fixed-width numbers (129...)
+ USL_MeasureString (buffer, &w, &h);
+ PrintX = (34 * 8) - 8 - w;
+#else
+ USL_MeasureString (buffer, &w, &h);
+ PrintX = 292 - w;
+#endif
+ US_Print (buffer);
+
+#ifdef APOGEE_1_0
+//#ifndef UPLOAD
+#ifndef SPEAR
+ //
+ // verification #
+ //
+ if (!i)
+ {
+ char temp = (((s->score >> 28) & 0xf) ^ ((s->score >> 24) & 0xf)) + 'A';
+ char temp1 = (((s->score >> 20) & 0xf) ^ ((s->score >> 16) & 0xf)) + 'A';
+ char temp2 = (((s->score >> 12) & 0xf) ^ ((s->score >> 8) & 0xf)) + 'A';
+ char temp3 = (((s->score >> 4) & 0xf) ^ ((s->score >> 0) & 0xf)) + 'A';
+
+ SETFONTCOLOR (0x49, 0x29);
+ PrintX = 35 * 8;
+ buffer[0] = temp;
+ buffer[1] = temp1;
+ buffer[2] = temp2;
+ buffer[3] = temp3;
+ buffer[4] = 0;
+ US_Print (buffer);
+ SETFONTCOLOR (15, 0x29);
+ }
+#endif
+//#endif
+#endif
+ }
+
+ VW_UpdateScreen ();
+
+#ifdef SPEAR
+ UnCacheLump (HIGHSCORES_LUMP_START, HIGHSCORES_LUMP_END);
+ fontnumber = 0;
+#endif
+}
+
+//===========================================================================
+
+
+/*
+=======================
+=
+= CheckHighScore
+=
+=======================
+*/
+
+void
+CheckHighScore (int32_t score, word other)
+{
+ word i, j;
+ int n;
+ HighScore myscore;
+
+ strcpy (myscore.name, "");
+ myscore.score = score;
+ myscore.episode = gamestate.episode;
+ myscore.completed = other;
+
+ for (i = 0, n = -1; i < MaxScores; i++)
+ {
+ if ((myscore.score > Scores[i].score)
+ || ((myscore.score == Scores[i].score) && (myscore.completed > Scores[i].completed)))
+ {
+ for (j = MaxScores; --j > i;)
+ Scores[j] = Scores[j - 1];
+ Scores[i] = myscore;
+ n = i;
+ break;
+ }
+ }
+
+#ifdef SPEAR
+ StartCPMusic (XAWARD_MUS);
+#else
+ StartCPMusic (ROSTER_MUS);
+#endif
+ DrawHighScores ();
+
+ VW_FadeIn ();
+
+ if (n != -1)
+ {
+ //
+ // got a high score
+ //
+ PrintY = 76 + (16 * n);
+#ifndef SPEAR
+ PrintX = 4 * 8;
+ backcolor = BORDCOLOR;
+ fontcolor = 15;
+ US_LineInput (PrintX, PrintY, Scores[n].name, 0, true, MaxHighName, 100);
+#else
+ PrintX = 16;
+ fontnumber = 1;
+ VWB_Bar (PrintX - 2, PrintY - 2, 145, 15, 0x9c);
+ VW_UpdateScreen ();
+ backcolor = 0x9c;
+ fontcolor = 15;
+ US_LineInput (PrintX, PrintY, Scores[n].name, 0, true, MaxHighName, 130);
+#endif
+ }
+ else
+ {
+ IN_ClearKeysDown ();
+ IN_UserInput (500);
+ }
+
+}
+
+
+#ifndef UPLOAD
+#ifndef SPEAR
+#ifndef JAPAN
+////////////////////////////////////////////////////////
+//
+// NON-SHAREWARE NOTICE
+//
+////////////////////////////////////////////////////////
+void
+NonShareware (void)
+{
+ VW_FadeOut ();
+
+ ClearMScreen ();
+ DrawStripes (10);
+
+ CA_CacheGrChunk (STARTFONT + 1);
+ fontnumber = 1;
+
+ SETFONTCOLOR (READHCOLOR, BKGDCOLOR);
+ PrintX = 110;
+ PrintY = 15;
+
+#ifdef SPANISH
+ US_Print ("Atencion");
+#else
+ US_Print ("Attention");
+#endif
+
+ SETFONTCOLOR (HIGHLIGHT, BKGDCOLOR);
+ WindowX = PrintX = 40;
+ PrintY = 60;
+#ifdef SPANISH
+ US_Print ("Este juego NO es gratis y\n");
+ US_Print ("NO es Shareware; favor de\n");
+ US_Print ("no distribuirlo.\n\n");
+#else
+ US_Print ("This game is NOT shareware.\n");
+ US_Print ("Please do not distribute it.\n");
+ US_Print ("Thanks.\n\n");
+#endif
+ US_Print (" Id Software\n");
+
+ VW_UpdateScreen ();
+ VW_FadeIn ();
+ IN_Ack ();
+}
+#endif
+#endif
+#endif
+
+#ifdef SPEAR
+#ifndef GOODTIMES
+#ifndef SPEARDEMO
+////////////////////////////////////////////////////////
+//
+// COPY PROTECTION FOR FormGen
+//
+////////////////////////////////////////////////////////
+char CopyProFailedStrs[][100] = {
+ STR_COPY1,
+ STR_COPY2,
+
+ STR_COPY3,
+ STR_COPY4,
+
+ STR_COPY5,
+ STR_COPY6,
+
+ STR_COPY7,
+ STR_COPY8,
+
+ STR_COPY9,
+ "",
+
+ STR_COPY10,
+ STR_COPY11,
+
+ STR_COPY12,
+ "",
+
+ STR_COPY13,
+ "",
+
+ STR_COPY14,
+ ""
+};
+
+char BackDoorStrs[5][16] = {
+ "a spoon?",
+ "bite me!",
+ "joshua",
+ "pelt",
+ "snoops"
+};
+
+char GoodBoyStrs[10][40] = {
+ "...is the CORRECT ANSWER!",
+ "",
+
+ "Consider yourself bitten, sir.",
+ "",
+
+ "Greetings Professor Falken, would you",
+ "like to play Spear of Destiny?",
+
+ "Do you have any gold spray paint?",
+ "",
+
+ "I wish I had a 21\" monitor...",
+ ""
+};
+
+char bossstrs[4][24] = {
+ "DEATH KNIGHT",
+ "BARNACLE WILHELM",
+ "UBERMUTANTUBER MUTANT",
+ "TRANS GROSSE"
+};
+
+char WordStr[5][20] = {
+ "New Game",
+ "Sound...F4",
+ "Control...F6",
+ "Change View...F5",
+ "Quit...F10"
+};
+
+char WordCorrect[5][2] = { "3", "4", "4", "5", "5" };
+
+char MemberStr[10][40] = {
+ STR_COPY15,
+ "",
+
+ STR_COPY16,
+ "",
+
+ STR_COPY17,
+ STR_COPY18,
+
+ STR_COPY19,
+ STR_COPY20,
+
+ STR_COPY21,
+ STR_COPY22
+};
+
+char MemberCorrect[5][24] = {
+ "adrian carmack",
+ "john carmackjohn romero",
+ "tom hall",
+ "jay wilbur",
+ "kevin cloud"
+};
+
+char DosMessages[9][80] = {
+ STR_NOPE1,
+ STR_NOPE2,
+ STR_NOPE3,
+ STR_NOPE4,
+ STR_NOPE5,
+ STR_NOPE6,
+ STR_NOPE7,
+ STR_NOPE8,
+ STR_NOPE9
+};
+
+char MiscTitle[4][20] = {
+ "BLOOD TEST",
+ "STRAIGHT-LACED",
+ "QUITE SHAPELY",
+ "I AM WHAT I AMMO"
+};
+
+char MiscStr[12][40] = {
+ STR_MISC1,
+ STR_MISC2,
+ "",
+
+ STR_MISC3,
+ STR_MISC4,
+ "",
+
+ STR_MISC5,
+ STR_MISC6,
+ "",
+
+ STR_MISC7,
+ STR_MISC8,
+ STR_MISC9
+};
+
+char MiscCorrect[4][5] = { "ss", "8", STR_STAR, "45" };
+
+
+int
+BackDoor (char *s)
+{
+ for (int i = 0; i < 5; i++)
+ {
+ if (!strcasecmp (s, BackDoorStrs[i]))
+ {
+ SETFONTCOLOR (14, 15);
+ fontnumber = 0;
+ PrintY = 175;
+ VWB_DrawPic (0, 20 * 8, COPYPROTBOXPIC);
+ US_CPrint (GoodBoyStrs[i * 2]);
+ US_CPrint (GoodBoyStrs[i * 2 + 1]);
+ VW_UpdateScreen ();
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+
+void
+CopyProtection (void)
+{
+#define TYPEBOX_Y 177
+#define TYPEBOX_BKGD 0x9c
+#define PRINTCOLOR HIGHLIGHT
+
+ unsigned i;
+ int match, whichboss, bossnum, attempt, whichline;
+ int enemypicked[4] = { 0, 0, 0, 0 };
+ int bosses[4] = { BOSSPIC1PIC, BOSSPIC2PIC, BOSSPIC3PIC, BOSSPIC4PIC };
+ int whichpicked[4] = { 0, 0, 0, 0 };
+ int whichone, quiztype, whichmem, whichword;
+ int memberpicked[5] = { 0, 0, 0, 0, 0 };
+ int wordpicked[5] = { 0, 0, 0, 0, 0 };
+
+ char inputbuffer[20];
+ char message[80];
+
+ enum
+ {
+ debriefing,
+ checkmanual,
+ staffquiz,
+ miscquiz,
+
+ totaltypes
+ };
+
+
+
+ attempt = 0;
+ VW_FadeOut ();
+ CA_CacheGrChunk (C_BACKDROPPIC);
+ CacheLump (COPYPROT_LUMP_START, COPYPROT_LUMP_END);
+ CA_CacheGrChunk (STARTFONT + 1);
+ CA_LoadAllSounds ();
+ StartCPMusic (COPYPRO_MUS);
+ US_InitRndT (true);
+
+ while (attempt < 3)
+ {
+ fontnumber = 1;
+ SETFONTCOLOR (PRINTCOLOR - 2, 15);
+ VWB_DrawPic (0, 0, C_BACKDROPPIC);
+ VWB_DrawPic (0, 0, COPYPROTTOPPIC);
+ VWB_DrawPic (0, 20 * 8, COPYPROTBOXPIC);
+ WindowX = WindowY = 0;
+ WindowW = 320;
+ WindowH = 200;
+ PrintY = 65;
+
+ quiztype = US_RndT () % totaltypes;
+ switch (quiztype)
+ {
+ //
+ // BOSSES QUIZ
+ //
+ case debriefing:
+ {
+ PrintX = 0;
+ US_Print (STR_DEBRIEF);
+ SETFONTCOLOR (PRINTCOLOR, 15);
+
+ while (enemypicked[whichboss = US_RndT () & 3]);
+ enemypicked[whichboss] = 1;
+ bossnum = bosses[whichboss];
+ VWB_DrawPic (128, 60, bossnum);
+ fontnumber = 0;
+ PrintY = 130;
+ US_CPrint (STR_ENEMY1 "\n");
+ US_CPrint (STR_ENEMY2 "\n\n");
+
+ VW_UpdateScreen ();
+ VW_FadeIn ();
+
+ PrintX = 100;
+ fontcolor = 15;
+ backcolor = TYPEBOX_BKGD;
+ inputbuffer[0] = 0;
+ PrintY = TYPEBOX_Y;
+ fontnumber = 1;
+ US_LineInput (PrintX, PrintY, inputbuffer, 0, true, 20, 100);
+
+ match = 0;
+ size_t inputlen = strlen(inputbuffer);
+ if(inputlen > 3)
+ {
+ size_t bosslen = strlen(bossstrs[whichboss]);
+ for (i = 0; i < bosslen; i++)
+ {
+ if (!strncasecmp (inputbuffer, bossstrs[whichboss] + i, inputlen))
+ {
+ match = 1;
+ break;
+ }
+ }
+ }
+
+ match += BackDoor (inputbuffer);
+ break;
+ }
+
+ //
+ // MANUAL CHECK
+ //
+ case checkmanual:
+ {
+ while (wordpicked[whichword = US_RndT () % 5]);
+ wordpicked[whichword] = 1;
+ US_CPrint (STR_CHECKMAN);
+ SETFONTCOLOR (PRINTCOLOR, 15);
+ PrintY += 25;
+ US_CPrint (STR_MAN1);
+ US_CPrint (STR_MAN2);
+ sprintf(message, STR_MAN3 " \"%s\" " STR_MAN4, WordStr[whichword]);
+ US_CPrint (message);
+ VW_UpdateScreen ();
+ VW_FadeIn ();
+
+ PrintX = 146;
+ fontcolor = 15;
+ backcolor = TYPEBOX_BKGD;
+ inputbuffer[0] = 0;
+ PrintY = TYPEBOX_Y;
+ US_LineInput (PrintX, PrintY, inputbuffer, 0, true, 6, 100);
+
+ match = 1 - (strcasecmp (inputbuffer, WordCorrect[whichword]) != 0);
+ match += BackDoor (inputbuffer);
+ break;
+ }
+
+ //
+ // STAFF QUIZ
+ //
+ case staffquiz:
+ {
+ while (memberpicked[whichmem = US_RndT () % 5]);
+ memberpicked[whichmem] = 1;
+ US_CPrint (STR_ID1);
+ SETFONTCOLOR (PRINTCOLOR, 15);
+ PrintY += 25;
+ US_CPrint (MemberStr[whichmem * 2]);
+ US_CPrint (MemberStr[whichmem * 2 + 1]);
+ VW_UpdateScreen ();
+ VW_FadeIn ();
+
+ PrintX = 100;
+ fontcolor = 15;
+ backcolor = TYPEBOX_BKGD;
+ inputbuffer[0] = 0;
+ PrintY = TYPEBOX_Y;
+ US_LineInput (PrintX, PrintY, inputbuffer, 0, true, 20, 120);
+
+ match = 0;
+ size_t inputlen = strlen(inputbuffer);
+ if(inputlen > 2)
+ {
+ size_t memberlen = strlen(MemberCorrect[whichmem]);
+ for (i = 0; i < memberlen; i++)
+ {
+ if (!strncasecmp (inputbuffer, MemberCorrect[whichmem] + i, inputlen))
+ {
+ match = 1;
+ break;
+ }
+ }
+ }
+
+ match += BackDoor (inputbuffer);
+ break;
+ }
+
+ //
+ // MISCELLANEOUS QUESTIONS
+ //
+ case miscquiz:
+ {
+ while (whichpicked[whichone = US_RndT () & 3]);
+ whichpicked[whichone] = 1;
+ US_CPrint (MiscTitle[whichone]);
+ SETFONTCOLOR (PRINTCOLOR, 15);
+ PrintY += 25;
+ US_CPrint (MiscStr[whichone * 3]);
+ US_CPrint (MiscStr[whichone * 3 + 1]);
+ US_CPrint (MiscStr[whichone * 3 + 2]);
+ VW_UpdateScreen ();
+ VW_FadeIn ();
+
+ PrintX = 146;
+ fontcolor = 15;
+ backcolor = TYPEBOX_BKGD;
+ inputbuffer[0] = 0;
+ PrintY = TYPEBOX_Y;
+ US_LineInput (PrintX, PrintY, inputbuffer, 0, true, 6, 100);
+
+ match = 1 - (strcasecmp (inputbuffer, MiscCorrect[whichone]) != 0);
+ match += BackDoor (inputbuffer);
+ break;
+ }
+ }
+
+ //
+ // IF NO MATCH, WE'VE GOT A (MINOR) PROBLEM!
+ //
+
+ if (!match)
+ {
+ whichline = 2 * (US_RndT () % 9);
+ SETFONTCOLOR (14, 15);
+ fontnumber = 0;
+ PrintY = 175;
+ VWB_DrawPic (0, 20 * 8, COPYPROTBOXPIC);
+ US_CPrint (CopyProFailedStrs[whichline]);
+ US_CPrint (CopyProFailedStrs[whichline + 1]);
+
+ VW_UpdateScreen ();
+ SD_PlaySound (NOWAYSND);
+ IN_UserInput (TickBase * 6);
+ VW_FadeOut ();
+ attempt++;
+ }
+ else
+ {
+ int start;
+
+ SD_PlaySound (BONUS1UPSND);
+ SD_WaitSoundDone ();
+ UNCACHEGRCHUNK (STARTFONT + 1);
+ UNCACHEGRCHUNK (C_BACKDROPPIC);
+ UnCacheLump (COPYPROT_LUMP_START, COPYPROT_LUMP_END);
+
+ switch (SoundMode)
+ {
+ case sdm_Off:
+ return;
+ case sdm_PC:
+ start = STARTPCSOUNDS;
+ break;
+ case sdm_AdLib:
+ start = STARTADLIBSOUNDS;
+ }
+
+/* for (i=0;i<NUMSOUNDS;i++,start++)
+ MM_FreePtr ((memptr *)&audiosegs[start]); */
+ return;
+ }
+ }
+
+ ClearMemory ();
+ ShutdownId ();
+
+ printf ("%s\n", DosMessages[US_RndT () % 9]);
+ exit (1);
+}
+
+#endif // SPEARDEMO
+#endif // GOODTIMES
+#endif // SPEAR
+//===========================================================================
diff --git a/apps/plugins/sdl/progs/wolf3d/wl_main.c b/apps/plugins/sdl/progs/wolf3d/wl_main.c
new file mode 100644
index 0000000000..e78274cbac
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/wl_main.c
@@ -0,0 +1,1953 @@
+// WL_MAIN.C
+
+#include "wl_def.h"
+#pragma hdrstop
+#include "wl_atmos.h"
+#include <SDL_syswm.h>
+
+
+/*
+=============================================================================
+
+ WOLFENSTEIN 3-D
+
+ An Id Software production
+
+ by John Carmack
+
+=============================================================================
+*/
+
+extern byte signon[];
+
+/*
+=============================================================================
+
+ LOCAL CONSTANTS
+
+=============================================================================
+*/
+
+
+#define FOCALLENGTH (0x5700l) // in global coordinates
+#define VIEWGLOBAL 0x10000 // globals visable flush to wall
+
+#define VIEWWIDTH 256 // size of view window
+#define VIEWHEIGHT 144
+
+/*
+=============================================================================
+
+ GLOBAL VARIABLES
+
+=============================================================================
+*/
+
+char str[80];
+int dirangle[9] = {0,ANGLES/8,2*ANGLES/8,3*ANGLES/8,4*ANGLES/8,
+ 5*ANGLES/8,6*ANGLES/8,7*ANGLES/8,ANGLES};
+
+//
+// proejection variables
+//
+fixed focallength;
+unsigned screenofs;
+int viewscreenx, viewscreeny;
+int viewwidth;
+int viewheight;
+short centerx;
+int shootdelta; // pixels away from centerx a target can be
+fixed scale;
+int32_t heightnumerator;
+
+
+void Quit (const char *error,...);
+
+boolean startgame;
+boolean loadedgame;
+int mouseadjustment;
+
+char configdir[256] = "";
+char configname[13] = "config.";
+
+//
+// Command line parameter variables
+//
+boolean param_debugmode = false;
+boolean param_nowait = false;
+int param_difficulty = 1; // default is "normal"
+int param_tedlevel = -1; // default is not to start a level
+int param_joystickindex = 0;
+
+#if defined(_arch_dreamcast)
+int param_joystickhat = 0;
+int param_samplerate = 11025; // higher samplerates result in "out of memory"
+int param_audiobuffer = 4096 / (44100 / param_samplerate);
+#elif defined(GP2X_940)
+int param_joystickhat = -1;
+int param_samplerate = 11025; // higher samplerates result in "out of memory"
+int param_audiobuffer = 128;
+#else
+int param_joystickhat = -1;
+int param_samplerate = RB_SAMPR;
+int param_audiobuffer = 2048 / (44100 / RB_SAMPR);
+#endif
+
+int param_mission = 0;
+boolean param_goodtimes = false;
+boolean param_ignorenumchunks = false;
+
+/*
+=============================================================================
+
+ LOCAL VARIABLES
+
+=============================================================================
+*/
+
+
+/*
+====================
+=
+= ReadConfig
+=
+====================
+*/
+
+void ReadConfig(void)
+{
+ SDMode sd;
+ SMMode sm;
+ SDSMode sds;
+
+ char configpath[300];
+
+#ifdef _arch_dreamcast
+ DC_LoadFromVMU(configname);
+#endif
+
+ if(configdir[0])
+ snprintf(configpath, sizeof(configpath), "%s/%s", configdir, configname);
+ else
+ strcpy(configpath, configname);
+
+ const int file = open(configpath, O_RDONLY | O_BINARY);
+ if (file >= 0)
+ {
+ //
+ // valid config file
+ //
+ word tmp;
+ read(file,&tmp,sizeof(tmp));
+ if(tmp!=0xfefa)
+ {
+ close(file);
+ goto noconfig;
+ }
+ read(file,Scores,sizeof(HighScore) * MaxScores);
+
+ read(file,&sd,sizeof(sd));
+ read(file,&sm,sizeof(sm));
+ read(file,&sds,sizeof(sds));
+
+ read(file,&mouseenabled,sizeof(mouseenabled));
+ read(file,&joystickenabled,sizeof(joystickenabled));
+ boolean dummyJoypadEnabled;
+ read(file,&dummyJoypadEnabled,sizeof(dummyJoypadEnabled));
+ boolean dummyJoystickProgressive;
+ read(file,&dummyJoystickProgressive,sizeof(dummyJoystickProgressive));
+ int dummyJoystickPort = 0;
+ read(file,&dummyJoystickPort,sizeof(dummyJoystickPort));
+
+ read(file,dirscan,sizeof(dirscan));
+ read(file,buttonscan,sizeof(buttonscan));
+ read(file,buttonmouse,sizeof(buttonmouse));
+ read(file,buttonjoy,sizeof(buttonjoy));
+
+ read(file,&viewsize,sizeof(viewsize));
+ read(file,&mouseadjustment,sizeof(mouseadjustment));
+
+ close(file);
+
+ /* hack to always enable sound */
+ sd = sdm_AdLib;
+ sm = smm_AdLib;
+
+ sds = sds_SoundBlaster;
+
+ // make sure values are correct
+
+ if(mouseenabled) mouseenabled=true;
+ if(joystickenabled) joystickenabled=true;
+
+ if (!MousePresent)
+ mouseenabled = false;
+ if (!IN_JoyPresent())
+ joystickenabled = false;
+
+ if(mouseadjustment<0) mouseadjustment=0;
+ else if(mouseadjustment>9) mouseadjustment=9;
+
+ if(viewsize<4) viewsize=4;
+ else if(viewsize>21) viewsize=21;
+
+ MainMenu[6].active=1;
+ MainItems.curpos=0;
+ }
+ else
+ {
+ //
+ // no config file, so select by hardware
+ //
+noconfig:
+ // always -FW19
+ sd = sdm_AdLib;
+ sm = smm_AdLib;
+
+ sds = sds_SoundBlaster;
+
+ if (MousePresent)
+ mouseenabled = true;
+
+ if (IN_JoyPresent())
+ joystickenabled = true;
+
+ viewsize = 19; // start with a good size
+ mouseadjustment=5;
+ }
+
+ SD_SetMusicMode (sm);
+ SD_SetSoundMode (sd);
+ SD_SetDigiDevice (sds);
+}
+
+/*
+====================
+=
+= WriteConfig
+=
+====================
+*/
+
+void WriteConfig(void)
+{
+ char configpath[300];
+
+#ifdef _arch_dreamcast
+ fs_unlink(configname);
+#endif
+
+ if(configdir[0])
+ snprintf(configpath, sizeof(configpath), "%s/%s", configdir, configname);
+ else
+ strcpy(configpath, configname);
+
+ const int file = open(configpath, O_CREAT | O_WRONLY | O_BINARY, 0644);
+ if (file != -1)
+ {
+ word tmp=0xfefa;
+ write(file,&tmp,sizeof(tmp));
+ write(file,Scores,sizeof(HighScore) * MaxScores);
+
+ write(file,&SoundMode,sizeof(SoundMode));
+ write(file,&MusicMode,sizeof(MusicMode));
+ write(file,&DigiMode,sizeof(DigiMode));
+
+ write(file,&mouseenabled,sizeof(mouseenabled));
+ write(file,&joystickenabled,sizeof(joystickenabled));
+ boolean dummyJoypadEnabled = false;
+ write(file,&dummyJoypadEnabled,sizeof(dummyJoypadEnabled));
+ boolean dummyJoystickProgressive = false;
+ write(file,&dummyJoystickProgressive,sizeof(dummyJoystickProgressive));
+ int dummyJoystickPort = 0;
+ write(file,&dummyJoystickPort,sizeof(dummyJoystickPort));
+
+ write(file,dirscan,sizeof(dirscan));
+ write(file,buttonscan,sizeof(buttonscan));
+ write(file,buttonmouse,sizeof(buttonmouse));
+ write(file,buttonjoy,sizeof(buttonjoy));
+
+ write(file,&viewsize,sizeof(viewsize));
+ write(file,&mouseadjustment,sizeof(mouseadjustment));
+
+ close(file);
+ }
+#ifdef _arch_dreamcast
+ DC_SaveToVMU(configname, NULL);
+#endif
+}
+
+
+//===========================================================================
+
+/*
+=====================
+=
+= NewGame
+=
+= Set up new game to start from the beginning
+=
+=====================
+*/
+
+void NewGame (int difficulty,int episode)
+{
+ memset (&gamestate,0,sizeof(gamestate));
+ gamestate.difficulty = difficulty;
+ gamestate.weapon = gamestate.bestweapon
+ = gamestate.chosenweapon = wp_pistol;
+ gamestate.health = 100;
+ gamestate.ammo = STARTAMMO;
+ gamestate.lives = 3;
+ gamestate.nextextra = EXTRAPOINTS;
+ gamestate.episode=episode;
+
+ startgame = true;
+}
+
+//===========================================================================
+
+void DiskFlopAnim(int x,int y)
+{
+ static int8_t which=0;
+ if (!x && !y)
+ return;
+ VWB_DrawPic(x,y,C_DISKLOADING1PIC+which);
+ VW_UpdateScreen();
+ which^=1;
+}
+
+
+int32_t DoChecksum(byte *source,unsigned size,int32_t checksum)
+{
+ unsigned i;
+
+ for (i=0;i<size-1;i++)
+ checksum += source[i]^source[i+1];
+
+ return checksum;
+}
+
+
+/*
+==================
+=
+= SaveTheGame
+=
+==================
+*/
+
+extern statetype s_grdstand;
+extern statetype s_player;
+
+boolean SaveTheGame(FILE *file,int x,int y)
+{
+// struct diskfree_t dfree;
+// int32_t avail,size,checksum;
+ int checksum;
+ objtype *ob;
+ objtype nullobj;
+ statobj_t nullstat;
+
+/* if (_dos_getdiskfree(0,&dfree))
+ Quit("Error in _dos_getdiskfree call");
+
+ avail = (int32_t)dfree.avail_clusters *
+ dfree.bytes_per_sector *
+ dfree.sectors_per_cluster;
+
+ size = 0;
+ for (ob = player; ob ; ob=ob->next)
+ size += sizeof(*ob);
+ size += sizeof(nullobj);
+
+ size += sizeof(gamestate) +
+ sizeof(LRstruct)*LRpack +
+ sizeof(tilemap) +
+ sizeof(actorat) +
+ sizeof(laststatobj) +
+ sizeof(statobjlist) +
+ sizeof(doorposition) +
+ sizeof(pwallstate) +
+ sizeof(pwalltile) +
+ sizeof(pwallx) +
+ sizeof(pwally) +
+ sizeof(pwalldir) +
+ sizeof(pwallpos);
+
+ if (avail < size)
+ {
+ Message(STR_NOSPACE1"\n"STR_NOSPACE2);
+ return false;
+ }*/
+
+ checksum = 0;
+
+ DiskFlopAnim(x,y);
+ fwrite(&gamestate,sizeof(gamestate),1,file);
+ checksum = DoChecksum((byte *)&gamestate,sizeof(gamestate),checksum);
+
+ DiskFlopAnim(x,y);
+ fwrite(&LevelRatios[0],sizeof(LRstruct)*LRpack,1,file);
+ checksum = DoChecksum((byte *)&LevelRatios[0],sizeof(LRstruct)*LRpack,checksum);
+
+ DiskFlopAnim(x,y);
+ fwrite(tilemap,sizeof(tilemap),1,file);
+ checksum = DoChecksum((byte *)tilemap,sizeof(tilemap),checksum);
+ DiskFlopAnim(x,y);
+
+ int i;
+ for(i=0;i<MAPSIZE;i++)
+ {
+ for(int j=0;j<MAPSIZE;j++)
+ {
+ word actnum;
+ objtype *objptr=actorat[i][j];
+ if(ISPOINTER(objptr))
+ actnum=0x8000 | (word)(objptr-objlist);
+ else
+ actnum=(word)(uintptr_t)objptr;
+ fwrite(&actnum,sizeof(actnum),1,file);
+ checksum = DoChecksum((byte *)&actnum,sizeof(actnum),checksum);
+ }
+ }
+
+ fwrite (areaconnect,sizeof(areaconnect),1,file);
+ fwrite (areabyplayer,sizeof(areabyplayer),1,file);
+
+ // player object needs special treatment as it's in WL_AGENT.CPP and not in
+ // WL_ACT2.CPP which could cause problems for the relative addressing
+
+ ob = player;
+ DiskFlopAnim(x,y);
+ memcpy(&nullobj,ob,sizeof(nullobj));
+ nullobj.state=(statetype *) ((uintptr_t)nullobj.state-(uintptr_t)&s_player);
+ fwrite(&nullobj,sizeof(nullobj),1,file);
+ ob = ob->next;
+
+ DiskFlopAnim(x,y);
+ for (; ob ; ob=ob->next)
+ {
+ memcpy(&nullobj,ob,sizeof(nullobj));
+ nullobj.state=(statetype *) ((uintptr_t)nullobj.state-(uintptr_t)&s_grdstand);
+ fwrite(&nullobj,sizeof(nullobj),1,file);
+ }
+ nullobj.active = ac_badobject; // end of file marker
+ DiskFlopAnim(x,y);
+ fwrite(&nullobj,sizeof(nullobj),1,file);
+
+ DiskFlopAnim(x,y);
+ word laststatobjnum=(word) (laststatobj-statobjlist);
+ fwrite(&laststatobjnum,sizeof(laststatobjnum),1,file);
+ checksum = DoChecksum((byte *)&laststatobjnum,sizeof(laststatobjnum),checksum);
+
+ DiskFlopAnim(x,y);
+ for(i=0;i<MAXSTATS;i++)
+ {
+ memcpy(&nullstat,statobjlist+i,sizeof(nullstat));
+ nullstat.visspot=(byte *) ((uintptr_t) nullstat.visspot-(uintptr_t)spotvis);
+ fwrite(&nullstat,sizeof(nullstat),1,file);
+ checksum = DoChecksum((byte *)&nullstat,sizeof(nullstat),checksum);
+ }
+
+ DiskFlopAnim(x,y);
+ fwrite (doorposition,sizeof(doorposition),1,file);
+ checksum = DoChecksum((byte *)doorposition,sizeof(doorposition),checksum);
+ DiskFlopAnim(x,y);
+ fwrite (doorobjlist,sizeof(doorobjlist),1,file);
+ checksum = DoChecksum((byte *)doorobjlist,sizeof(doorobjlist),checksum);
+
+ DiskFlopAnim(x,y);
+ fwrite (&pwallstate,sizeof(pwallstate),1,file);
+ checksum = DoChecksum((byte *)&pwallstate,sizeof(pwallstate),checksum);
+ fwrite (&pwalltile,sizeof(pwalltile),1,file);
+ checksum = DoChecksum((byte *)&pwalltile,sizeof(pwalltile),checksum);
+ fwrite (&pwallx,sizeof(pwallx),1,file);
+ checksum = DoChecksum((byte *)&pwallx,sizeof(pwallx),checksum);
+ fwrite (&pwally,sizeof(pwally),1,file);
+ checksum = DoChecksum((byte *)&pwally,sizeof(pwally),checksum);
+ fwrite (&pwalldir,sizeof(pwalldir),1,file);
+ checksum = DoChecksum((byte *)&pwalldir,sizeof(pwalldir),checksum);
+ fwrite (&pwallpos,sizeof(pwallpos),1,file);
+ checksum = DoChecksum((byte *)&pwallpos,sizeof(pwallpos),checksum);
+
+ //
+ // WRITE OUT CHECKSUM
+ //
+ fwrite (&checksum,sizeof(checksum),1,file);
+
+ fwrite (&lastgamemusicoffset,sizeof(lastgamemusicoffset),1,file);
+
+ return(true);
+}
+
+//===========================================================================
+
+/*
+==================
+=
+= LoadTheGame
+=
+==================
+*/
+
+boolean LoadTheGame(FILE *file,int x,int y)
+{
+ int32_t checksum,oldchecksum;
+ objtype nullobj;
+ statobj_t nullstat;
+
+ checksum = 0;
+
+ DiskFlopAnim(x,y);
+ fread (&gamestate,sizeof(gamestate),1,file);
+ checksum = DoChecksum((byte *)&gamestate,sizeof(gamestate),checksum);
+
+ DiskFlopAnim(x,y);
+ fread (&LevelRatios[0],sizeof(LRstruct)*LRpack,1,file);
+ checksum = DoChecksum((byte *)&LevelRatios[0],sizeof(LRstruct)*LRpack,checksum);
+
+ DiskFlopAnim(x,y);
+ SetupGameLevel ();
+
+ DiskFlopAnim(x,y);
+ fread (tilemap,sizeof(tilemap),1,file);
+ checksum = DoChecksum((byte *)tilemap,sizeof(tilemap),checksum);
+
+ DiskFlopAnim(x,y);
+
+ int actnum=0, i;
+ for(i=0;i<MAPSIZE;i++)
+ {
+ for(int j=0;j<MAPSIZE;j++)
+ {
+ fread (&actnum,sizeof(word),1,file);
+ checksum = DoChecksum((byte *) &actnum,sizeof(word),checksum);
+ if(actnum&0x8000)
+ actorat[i][j]=objlist+(actnum&0x7fff);
+ else
+ actorat[i][j]=(objtype *)(uintptr_t) actnum;
+ }
+ }
+
+ fread (areaconnect,sizeof(areaconnect),1,file);
+ fread (areabyplayer,sizeof(areabyplayer),1,file);
+
+ InitActorList ();
+ DiskFlopAnim(x,y);
+ fread (player,sizeof(*player),1,file);
+ player->state=(statetype *) ((uintptr_t)player->state+(uintptr_t)&s_player);
+
+ while (1)
+ {
+ DiskFlopAnim(x,y);
+ fread (&nullobj,sizeof(nullobj),1,file);
+ if (nullobj.active == ac_badobject)
+ break;
+ GetNewActor ();
+ nullobj.state=(statetype *) ((uintptr_t)nullobj.state+(uintptr_t)&s_grdstand);
+ // don't copy over the links
+ memcpy (newobj,&nullobj,sizeof(nullobj)-8);
+ }
+
+ DiskFlopAnim(x,y);
+ word laststatobjnum;
+ fread (&laststatobjnum,sizeof(laststatobjnum),1,file);
+ laststatobj=statobjlist+laststatobjnum;
+ checksum = DoChecksum((byte *)&laststatobjnum,sizeof(laststatobjnum),checksum);
+
+ DiskFlopAnim(x,y);
+ for(i=0;i<MAXSTATS;i++)
+ {
+ fread(&nullstat,sizeof(nullstat),1,file);
+ checksum = DoChecksum((byte *)&nullstat,sizeof(nullstat),checksum);
+ nullstat.visspot=(byte *) ((uintptr_t)nullstat.visspot+(uintptr_t)spotvis);
+ memcpy(statobjlist+i,&nullstat,sizeof(nullstat));
+ }
+
+ DiskFlopAnim(x,y);
+ fread (doorposition,sizeof(doorposition),1,file);
+ checksum = DoChecksum((byte *)doorposition,sizeof(doorposition),checksum);
+ DiskFlopAnim(x,y);
+ fread (doorobjlist,sizeof(doorobjlist),1,file);
+ checksum = DoChecksum((byte *)doorobjlist,sizeof(doorobjlist),checksum);
+
+ DiskFlopAnim(x,y);
+ fread (&pwallstate,sizeof(pwallstate),1,file);
+ checksum = DoChecksum((byte *)&pwallstate,sizeof(pwallstate),checksum);
+ fread (&pwalltile,sizeof(pwalltile),1,file);
+ checksum = DoChecksum((byte *)&pwalltile,sizeof(pwalltile),checksum);
+ fread (&pwallx,sizeof(pwallx),1,file);
+ checksum = DoChecksum((byte *)&pwallx,sizeof(pwallx),checksum);
+ fread (&pwally,sizeof(pwally),1,file);
+ checksum = DoChecksum((byte *)&pwally,sizeof(pwally),checksum);
+ fread (&pwalldir,sizeof(pwalldir),1,file);
+ checksum = DoChecksum((byte *)&pwalldir,sizeof(pwalldir),checksum);
+ fread (&pwallpos,sizeof(pwallpos),1,file);
+ checksum = DoChecksum((byte *)&pwallpos,sizeof(pwallpos),checksum);
+
+ if (gamestate.secretcount) // assign valid floorcodes under moved pushwalls
+ {
+ word *map, *obj; word tile, sprite;
+ map = mapsegs[0]; obj = mapsegs[1];
+ for (y=0;y<mapheight;y++)
+ for (x=0;x<mapwidth;x++)
+ {
+ tile = *map++; sprite = *obj++;
+ if (sprite == PUSHABLETILE && !tilemap[x][y]
+ && (tile < AREATILE || tile >= (AREATILE+NUMMAPS)))
+ {
+ if (*map >= AREATILE)
+ tile = *map;
+ if (*(map-1-mapwidth) >= AREATILE)
+ tile = *(map-1-mapwidth);
+ if (*(map-1+mapwidth) >= AREATILE)
+ tile = *(map-1+mapwidth);
+ if ( *(map-2) >= AREATILE)
+ tile = *(map-2);
+
+ *(map-1) = tile; *(obj-1) = 0;
+ }
+ }
+ }
+
+ Thrust(0,0); // set player->areanumber to the floortile you're standing on
+
+ fread (&oldchecksum,sizeof(oldchecksum),1,file);
+
+ fread (&lastgamemusicoffset,sizeof(lastgamemusicoffset),1,file);
+ if(lastgamemusicoffset<0) lastgamemusicoffset=0;
+
+
+ if (oldchecksum != checksum)
+ {
+ Message(STR_SAVECHT1"\n"
+ STR_SAVECHT2"\n"
+ STR_SAVECHT3"\n"
+ STR_SAVECHT4);
+
+ IN_ClearKeysDown();
+ IN_Ack();
+
+ gamestate.oldscore = gamestate.score = 0;
+ gamestate.lives = 1;
+ gamestate.weapon =
+ gamestate.chosenweapon =
+ gamestate.bestweapon = wp_pistol;
+ gamestate.ammo = 8;
+ }
+
+ return true;
+}
+
+//===========================================================================
+
+/*
+==========================
+=
+= ShutdownId
+=
+= Shuts down all ID_?? managers
+=
+==========================
+*/
+
+void ShutdownId (void)
+{
+ US_Shutdown (); // This line is completely useless...
+ SD_Shutdown ();
+ PM_Shutdown ();
+ IN_Shutdown ();
+ VW_Shutdown ();
+ CA_Shutdown ();
+#if defined(GP2X_940)
+ GP2X_Shutdown();
+#endif
+}
+
+
+//===========================================================================
+
+/*
+==================
+=
+= BuildTables
+=
+= Calculates:
+=
+= scale projection constant
+= sintable/costable overlapping fractional tables
+=
+==================
+*/
+
+const float radtoint = (float)(FINEANGLES/2/PI);
+
+void BuildTables (void)
+{
+ //
+ // calculate fine tangents
+ //
+
+ int i;
+ for(i=0;i<FINEANGLES/8;i++)
+ {
+ double tang=tan((i+0.5)/radtoint);
+ finetangent[i]=(int32_t)(tang*GLOBAL1);
+ finetangent[FINEANGLES/4-1-i]=(int32_t)((1/tang)*GLOBAL1);
+ }
+
+ //
+ // costable overlays sintable with a quarter phase shift
+ // ANGLES is assumed to be divisable by four
+ //
+
+ float angle=0;
+ float anglestep=(float)(PI/2/ANGLEQUAD);
+ for(i=0; i<ANGLEQUAD; i++)
+ {
+ fixed value=(int32_t)(GLOBAL1*sin(angle));
+ sintable[i]=sintable[i+ANGLES]=sintable[ANGLES/2-i]=value;
+ sintable[ANGLES-i]=sintable[ANGLES/2+i]=-value;
+ angle+=anglestep;
+ }
+ sintable[ANGLEQUAD] = 65536;
+ sintable[3*ANGLEQUAD] = -65536;
+
+#if defined(USE_STARSKY) || defined(USE_RAIN) || defined(USE_SNOW)
+ Init3DPoints();
+#endif
+}
+
+//===========================================================================
+
+
+/*
+====================
+=
+= CalcProjection
+=
+= Uses focallength
+=
+====================
+*/
+
+void CalcProjection (int32_t focal)
+{
+ int i;
+ int intang;
+ float angle;
+ double tang;
+ int halfview;
+ double facedist;
+
+ focallength = focal;
+ facedist = focal+MINDIST;
+ halfview = viewwidth/2; // half view in pixels
+
+ //
+ // calculate scale value for vertical height calculations
+ // and sprite x calculations
+ //
+ scale = (fixed) (halfview*facedist/(VIEWGLOBAL/2));
+
+ //
+ // divide heightnumerator by a posts distance to get the posts height for
+ // the heightbuffer. The pixel height is height>>2
+ //
+ heightnumerator = (TILEGLOBAL*scale)>>6;
+
+ //
+ // calculate the angle offset from view angle of each pixel's ray
+ //
+
+ for (i=0;i<halfview;i++)
+ {
+ // start 1/2 pixel over, so viewangle bisects two middle pixels
+ tang = (int32_t)i*VIEWGLOBAL/viewwidth/facedist;
+ angle = (float) atan(tang);
+ intang = (int) (angle*radtoint);
+ pixelangle[halfview-1-i] = intang;
+ pixelangle[halfview+i] = -intang;
+ }
+}
+
+
+
+//===========================================================================
+
+/*
+===================
+=
+= SetupWalls
+=
+= Map tile values to scaled pics
+=
+===================
+*/
+
+void SetupWalls (void)
+{
+ int i;
+
+ horizwall[0]=0;
+ vertwall[0]=0;
+
+ for (i=1;i<MAXWALLTILES;i++)
+ {
+ horizwall[i]=(i-1)*2;
+ vertwall[i]=(i-1)*2+1;
+ }
+}
+
+//===========================================================================
+
+/*
+==========================
+=
+= SignonScreen
+=
+==========================
+*/
+
+void SignonScreen (void) // VGA version
+{
+ VL_SetVGAPlaneMode ();
+
+ VL_MungePic (signon,320,200);
+ VL_MemToScreen (signon,320,200,0,0);
+}
+
+
+/*
+==========================
+=
+= FinishSignon
+=
+==========================
+*/
+
+void FinishSignon (void)
+{
+#ifndef SPEAR
+ VW_Bar (0,189,300,11,VL_GetPixel(0,0));
+ WindowX = 0;
+ WindowW = 320;
+ PrintY = 190;
+
+ #ifndef JAPAN
+ SETFONTCOLOR(14,4);
+
+ #ifdef SPANISH
+ US_CPrint ("Oprima una tecla");
+ #else
+ US_CPrint ("Press a key");
+ #endif
+
+ #endif
+
+ VH_UpdateScreen();
+
+ if (!param_nowait)
+ IN_Ack ();
+
+ #ifndef JAPAN
+ VW_Bar (0,189,300,11,VL_GetPixel(0,0));
+
+ PrintY = 190;
+ SETFONTCOLOR(10,4);
+
+ #ifdef SPANISH
+ US_CPrint ("pensando...");
+ #else
+ US_CPrint ("Working...");
+ #endif
+
+ VH_UpdateScreen();
+ #endif
+
+ SETFONTCOLOR(0,15);
+#else
+ VH_UpdateScreen();
+
+ if (!param_nowait)
+ VW_WaitVBL(3*70);
+#endif
+}
+
+//===========================================================================
+
+/*
+=====================
+=
+= InitDigiMap
+=
+=====================
+*/
+
+// channel mapping:
+// -1: any non reserved channel
+// 0: player weapons
+// 1: boss weapons
+
+static int wolfdigimap[] =
+ {
+ // These first sounds are in the upload version
+#ifndef SPEAR
+ HALTSND, 0, -1,
+ DOGBARKSND, 1, -1,
+ CLOSEDOORSND, 2, -1,
+ OPENDOORSND, 3, -1,
+ ATKMACHINEGUNSND, 4, 0,
+ ATKPISTOLSND, 5, 0,
+ ATKGATLINGSND, 6, 0,
+ SCHUTZADSND, 7, -1,
+ GUTENTAGSND, 8, -1,
+ MUTTISND, 9, -1,
+ BOSSFIRESND, 10, 1,
+ SSFIRESND, 11, -1,
+ DEATHSCREAM1SND, 12, -1,
+ DEATHSCREAM2SND, 13, -1,
+ DEATHSCREAM3SND, 13, -1,
+ TAKEDAMAGESND, 14, -1,
+ PUSHWALLSND, 15, -1,
+
+ LEBENSND, 20, -1,
+ NAZIFIRESND, 21, -1,
+ SLURPIESND, 22, -1,
+
+ YEAHSND, 32, -1,
+
+#ifndef UPLOAD
+ // These are in all other episodes
+ DOGDEATHSND, 16, -1,
+ AHHHGSND, 17, -1,
+ DIESND, 18, -1,
+ EVASND, 19, -1,
+
+ TOT_HUNDSND, 23, -1,
+ MEINGOTTSND, 24, -1,
+ SCHABBSHASND, 25, -1,
+ HITLERHASND, 26, -1,
+ SPIONSND, 27, -1,
+ NEINSOVASSND, 28, -1,
+ DOGATTACKSND, 29, -1,
+ LEVELDONESND, 30, -1,
+ MECHSTEPSND, 31, -1,
+
+ SCHEISTSND, 33, -1,
+ DEATHSCREAM4SND, 34, -1, // AIIEEE
+ DEATHSCREAM5SND, 35, -1, // DEE-DEE
+ DONNERSND, 36, -1, // EPISODE 4 BOSS DIE
+ EINESND, 37, -1, // EPISODE 4 BOSS SIGHTING
+ ERLAUBENSND, 38, -1, // EPISODE 6 BOSS SIGHTING
+ DEATHSCREAM6SND, 39, -1, // FART
+ DEATHSCREAM7SND, 40, -1, // GASP
+ DEATHSCREAM8SND, 41, -1, // GUH-BOY!
+ DEATHSCREAM9SND, 42, -1, // AH GEEZ!
+ KEINSND, 43, -1, // EPISODE 5 BOSS SIGHTING
+ MEINSND, 44, -1, // EPISODE 6 BOSS DIE
+ ROSESND, 45, -1, // EPISODE 5 BOSS DIE
+
+#endif
+#else
+//
+// SPEAR OF DESTINY DIGISOUNDS
+//
+ HALTSND, 0, -1,
+ CLOSEDOORSND, 2, -1,
+ OPENDOORSND, 3, -1,
+ ATKMACHINEGUNSND, 4, 0,
+ ATKPISTOLSND, 5, 0,
+ ATKGATLINGSND, 6, 0,
+ SCHUTZADSND, 7, -1,
+ BOSSFIRESND, 8, 1,
+ SSFIRESND, 9, -1,
+ DEATHSCREAM1SND, 10, -1,
+ DEATHSCREAM2SND, 11, -1,
+ TAKEDAMAGESND, 12, -1,
+ PUSHWALLSND, 13, -1,
+ AHHHGSND, 15, -1,
+ LEBENSND, 16, -1,
+ NAZIFIRESND, 17, -1,
+ SLURPIESND, 18, -1,
+ LEVELDONESND, 22, -1,
+ DEATHSCREAM4SND, 23, -1, // AIIEEE
+ DEATHSCREAM3SND, 23, -1, // DOUBLY-MAPPED!!!
+ DEATHSCREAM5SND, 24, -1, // DEE-DEE
+ DEATHSCREAM6SND, 25, -1, // FART
+ DEATHSCREAM7SND, 26, -1, // GASP
+ DEATHSCREAM8SND, 27, -1, // GUH-BOY!
+ DEATHSCREAM9SND, 28, -1, // AH GEEZ!
+ GETGATLINGSND, 38, -1, // Got Gat replacement
+
+#ifndef SPEARDEMO
+ DOGBARKSND, 1, -1,
+ DOGDEATHSND, 14, -1,
+ SPIONSND, 19, -1,
+ NEINSOVASSND, 20, -1,
+ DOGATTACKSND, 21, -1,
+ TRANSSIGHTSND, 29, -1, // Trans Sight
+ TRANSDEATHSND, 30, -1, // Trans Death
+ WILHELMSIGHTSND, 31, -1, // Wilhelm Sight
+ WILHELMDEATHSND, 32, -1, // Wilhelm Death
+ UBERDEATHSND, 33, -1, // Uber Death
+ KNIGHTSIGHTSND, 34, -1, // Death Knight Sight
+ KNIGHTDEATHSND, 35, -1, // Death Knight Death
+ ANGELSIGHTSND, 36, -1, // Angel Sight
+ ANGELDEATHSND, 37, -1, // Angel Death
+ GETSPEARSND, 39, -1, // Got Spear replacement
+#endif
+#endif
+ LASTSOUND
+ };
+
+
+void InitDigiMap (void)
+{
+ int *map;
+
+ int i = 0;
+ for (map = wolfdigimap; *map != LASTSOUND; map += 3)
+ {
+ rb->splashf(0, "Preparing sounds (%d/%d)", ++i, ARRAYLEN(wolfdigimap)/3);
+ DigiMap[map[0]] = map[1];
+ DigiChannel[map[1]] = map[2];
+ SD_PrepareSound(map[1]);
+ rb->yield();
+ }
+}
+
+#ifndef SPEAR
+CP_iteminfo MusicItems={CTL_X,CTL_Y,6,0,32};
+CP_itemtype MusicMenu[]=
+ {
+ {1,"Get Them!",0},
+ {1,"Searching",0},
+ {1,"P.O.W.",0},
+ {1,"Suspense",0},
+ {1,"War March",0},
+ {1,"Around The Corner!",0},
+
+ {1,"Nazi Anthem",0},
+ {1,"Lurking...",0},
+ {1,"Going After Hitler",0},
+ {1,"Pounding Headache",0},
+ {1,"Into the Dungeons",0},
+ {1,"Ultimate Conquest",0},
+
+ {1,"Kill the S.O.B.",0},
+ {1,"The Nazi Rap",0},
+ {1,"Twelfth Hour",0},
+ {1,"Zero Hour",0},
+ {1,"Ultimate Conquest",0},
+ {1,"Wolfpack",0}
+ };
+#else
+CP_iteminfo MusicItems={CTL_X,CTL_Y-20,9,0,32};
+CP_itemtype MusicMenu[]=
+ {
+ {1,"Funky Colonel Bill",0},
+ {1,"Death To The Nazis",0},
+ {1,"Tiptoeing Around",0},
+ {1,"Is This THE END?",0},
+ {1,"Evil Incarnate",0},
+ {1,"Jazzin' Them Nazis",0},
+ {1,"Puttin' It To The Enemy",0},
+ {1,"The SS Gonna Get You",0},
+ {1,"Towering Above",0}
+ };
+#endif
+
+#ifndef SPEARDEMO
+void DoJukebox(void)
+{
+ int which,lastsong=-1;
+ unsigned start;
+ unsigned songs[]=
+ {
+#ifndef SPEAR
+ GETTHEM_MUS,
+ SEARCHN_MUS,
+ POW_MUS,
+ SUSPENSE_MUS,
+ WARMARCH_MUS,
+ CORNER_MUS,
+
+ NAZI_OMI_MUS,
+ PREGNANT_MUS,
+ GOINGAFT_MUS,
+ HEADACHE_MUS,
+ DUNGEON_MUS,
+ ULTIMATE_MUS,
+
+ INTROCW3_MUS,
+ NAZI_RAP_MUS,
+ TWELFTH_MUS,
+ ZEROHOUR_MUS,
+ ULTIMATE_MUS,
+ PACMAN_MUS
+#else
+ XFUNKIE_MUS, // 0
+ XDEATH_MUS, // 2
+ XTIPTOE_MUS, // 4
+ XTHEEND_MUS, // 7
+ XEVIL_MUS, // 17
+ XJAZNAZI_MUS, // 18
+ XPUTIT_MUS, // 21
+ XGETYOU_MUS, // 22
+ XTOWER2_MUS // 23
+#endif
+ };
+
+ IN_ClearKeysDown();
+ if (!AdLibPresent && !SoundBlasterPresent)
+ return;
+
+ MenuFadeOut();
+
+#ifndef SPEAR
+#ifndef UPLOAD
+ start = ((SDL_GetTicks()/10)%3)*6;
+#else
+ start = 0;
+#endif
+#else
+ start = 0;
+#endif
+
+ CA_CacheGrChunk (STARTFONT+1);
+#ifdef SPEAR
+ CacheLump (BACKDROP_LUMP_START,BACKDROP_LUMP_END);
+#else
+ CacheLump (CONTROLS_LUMP_START,CONTROLS_LUMP_END);
+#endif
+ CA_LoadAllSounds ();
+
+ fontnumber=1;
+ ClearMScreen ();
+ VWB_DrawPic(112,184,C_MOUSELBACKPIC);
+ DrawStripes (10);
+ SETFONTCOLOR (TEXTCOLOR,BKGDCOLOR);
+
+#ifndef SPEAR
+ DrawWindow (CTL_X-2,CTL_Y-6,280,13*7,BKGDCOLOR);
+#else
+ DrawWindow (CTL_X-2,CTL_Y-26,280,13*10,BKGDCOLOR);
+#endif
+
+ DrawMenu (&MusicItems,&MusicMenu[start]);
+
+ SETFONTCOLOR (READHCOLOR,BKGDCOLOR);
+ PrintY=15;
+ WindowX = 0;
+ WindowY = 320;
+ US_CPrint ("Robert's Jukebox");
+
+ SETFONTCOLOR (TEXTCOLOR,BKGDCOLOR);
+ VW_UpdateScreen();
+ MenuFadeIn();
+
+ do
+ {
+ which = HandleMenu(&MusicItems,&MusicMenu[start],NULL);
+ if (which>=0)
+ {
+ if (lastsong >= 0)
+ MusicMenu[start+lastsong].active = 1;
+
+ StartCPMusic(songs[start + which]);
+ MusicMenu[start+which].active = 2;
+ DrawMenu (&MusicItems,&MusicMenu[start]);
+ VW_UpdateScreen();
+ lastsong = which;
+ }
+ } while(which>=0);
+
+ MenuFadeOut();
+ IN_ClearKeysDown();
+#ifdef SPEAR
+ UnCacheLump (BACKDROP_LUMP_START,BACKDROP_LUMP_END);
+#else
+ UnCacheLump (CONTROLS_LUMP_START,CONTROLS_LUMP_END);
+#endif
+}
+#endif
+
+/*
+==========================
+=
+= InitGame
+=
+= Load a few things right away
+=
+==========================
+*/
+
+static void InitGame()
+{
+#ifndef SPEARDEMO
+ boolean didjukebox=false;
+#endif
+
+ // initialize SDL
+#if defined _WIN32
+ putenv("SDL_VIDEODRIVER=directx");
+#endif
+ if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0)
+ {
+ printf("Unable to init SDL: %s\n", SDL_GetError());
+ exit(1);
+ }
+
+ atexit(SDL_Quit);
+
+ int numJoysticks = SDL_NumJoysticks();
+ if(param_joystickindex && (param_joystickindex < -1 || param_joystickindex >= numJoysticks))
+ {
+ if(!numJoysticks)
+ printf("No joysticks are available to SDL!\n");
+ else
+ printf("The joystick index must be between -1 and %i!\n", numJoysticks - 1);
+ exit(1);
+ }
+
+#if defined(GP2X_940)
+ GP2X_MemoryInit();
+#endif
+
+ SignonScreen ();
+
+#if defined _WIN32
+ if(!fullscreen)
+ {
+ struct SDL_SysWMinfo wmInfo;
+ SDL_VERSION(&wmInfo.version);
+
+ if(SDL_GetWMInfo(&wmInfo) != -1)
+ {
+ HWND hwndSDL = wmInfo.window;
+ DWORD style = GetWindowLong(hwndSDL, GWL_STYLE) & ~WS_SYSMENU;
+ SetWindowLong(hwndSDL, GWL_STYLE, style);
+ SetWindowPos(hwndSDL, NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
+ }
+ }
+#endif
+
+ VH_Startup ();
+ IN_Startup ();
+ PM_Startup ();
+ SD_Startup ();
+ CA_Startup ();
+ US_Startup ();
+
+ // TODO: Will any memory checking be needed someday??
+#ifdef NOTYET
+#ifndef SPEAR
+ if (mminfo.mainmem < 235000L)
+#else
+ if (mminfo.mainmem < 257000L && !MS_CheckParm("debugmode"))
+#endif
+ {
+ byte *screen;
+
+ CA_CacheGrChunk (ERRORSCREEN);
+ screen = grsegs[ERRORSCREEN];
+ ShutdownId();
+/* memcpy((byte *)0xb8000,screen+7+7*160,17*160);
+ gotoxy (1,23);*/
+ exit(1);
+ }
+#endif
+
+//
+// build some tables
+//
+ InitDigiMap ();
+
+ rb->splash(0, "Reading configuration...");
+
+ ReadConfig();
+
+ rb->splash(0, "Reading saved games...");
+
+ SetupSaveGames();
+
+//
+// HOLDING DOWN 'M' KEY? (Fire for rockbox)
+//
+#ifndef SPEARDEMO
+ if (Keyboard[sc_Control])
+ {
+ DoJukebox();
+ didjukebox=true;
+ }
+ else
+#endif
+
+//
+// draw intro screen stuff
+//
+ IntroScreen ();
+
+#ifdef _arch_dreamcast
+ //TODO: VMU Selection Screen
+#endif
+
+//
+// load in and lock down some basic chunks
+//
+
+ rb->splash(0, "Loading...");
+
+ CA_CacheGrChunk(STARTFONT);
+ CA_CacheGrChunk(STATUSBARPIC);
+
+ LoadLatchMem ();
+ BuildTables (); // trig tables
+ SetupWalls ();
+
+ rb->splash(0, "Loading (50%)...");
+
+ NewViewSize (viewsize);
+
+//
+// initialize variables
+//
+ InitRedShifts ();
+#ifndef SPEARDEMO
+ if(!didjukebox)
+#endif
+ FinishSignon();
+
+#ifdef NOTYET
+ vdisp = (byte *) (0xa0000+PAGE1START);
+ vbuf = (byte *) (0xa0000+PAGE2START);
+#endif
+}
+
+//===========================================================================
+
+/*
+==========================
+=
+= SetViewSize
+=
+==========================
+*/
+
+boolean SetViewSize (unsigned width, unsigned height)
+{
+ viewwidth = width&~15; // must be divisable by 16
+ viewheight = height&~1; // must be even
+ centerx = viewwidth/2-1;
+ shootdelta = viewwidth/10;
+ if((unsigned) viewheight == screenHeight)
+ viewscreenx = viewscreeny = screenofs = 0;
+ else
+ {
+ viewscreenx = (screenWidth-viewwidth) / 2;
+ viewscreeny = (screenHeight-scaleFactor*STATUSLINES-viewheight)/2;
+ screenofs = viewscreeny*screenWidth+viewscreenx;
+ }
+
+//
+// calculate trace angles and projection constants
+//
+ CalcProjection (FOCALLENGTH);
+
+ return true;
+}
+
+
+void ShowViewSize (int width)
+{
+ int oldwidth,oldheight;
+
+ oldwidth = viewwidth;
+ oldheight = viewheight;
+
+ if(width == 21)
+ {
+ viewwidth = screenWidth;
+ viewheight = screenHeight;
+ VWB_BarScaledCoord (0, 0, screenWidth, screenHeight, 0);
+ }
+ else if(width == 20)
+ {
+ viewwidth = screenWidth;
+ viewheight = screenHeight - scaleFactor*STATUSLINES;
+ DrawPlayBorder ();
+ }
+ else
+ {
+ viewwidth = width*16*screenWidth/320;
+ viewheight = (int) (width*16*HEIGHTRATIO*screenHeight/200);
+ DrawPlayBorder ();
+ }
+
+ viewwidth = oldwidth;
+ viewheight = oldheight;
+}
+
+
+void NewViewSize (int width)
+{
+ viewsize = width;
+ if(viewsize == 21)
+ SetViewSize(screenWidth, screenHeight);
+ else if(viewsize == 20)
+ SetViewSize(screenWidth, screenHeight - scaleFactor * STATUSLINES);
+ else
+ SetViewSize(width*16*screenWidth/320, (unsigned) (width*16*HEIGHTRATIO*screenHeight/200));
+}
+
+
+
+//===========================================================================
+
+/*
+==========================
+=
+= Quit
+=
+==========================
+*/
+
+void Quit (const char *errorStr, ...)
+{
+#ifdef NOTYET
+ byte *screen;
+#endif
+ char error[256];
+ if(errorStr != NULL)
+ {
+ va_list vlist;
+ va_start(vlist, errorStr);
+ vsprintf(error, errorStr, vlist);
+ va_end(vlist);
+ rb->splashf(HZ * 4, "FATAL: %s", error);
+ }
+ else error[0] = 0;
+
+ if (!pictable) // don't try to display the red box before it's loaded
+ {
+ ShutdownId();
+ if (error && *error)
+ {
+#ifdef NOTYET
+ SetTextCursor(0,0);
+#endif
+ puts(error);
+#ifdef NOTYET
+ SetTextCursor(0,2);
+#endif
+ VW_WaitVBL(100);
+ }
+ exit(1);
+ }
+
+ if (!error || !*error)
+ {
+#ifdef NOTYET
+ #ifndef JAPAN
+ CA_CacheGrChunk (ORDERSCREEN);
+ screen = grsegs[ORDERSCREEN];
+ #endif
+#endif
+ WriteConfig ();
+ }
+#ifdef NOTYET
+ else
+ {
+ CA_CacheGrChunk (ERRORSCREEN);
+ screen = grsegs[ERRORSCREEN];
+ }
+#endif
+
+ ShutdownId ();
+
+ if (error && *error)
+ {
+#ifdef NOTYET
+ memcpy((byte *)0xb8000,screen+7,7*160);
+ SetTextCursor(9,3);
+#endif
+ puts(error);
+#ifdef NOTYET
+ SetTextCursor(0,7);
+#endif
+ VW_WaitVBL(200);
+ exit(1);
+ }
+ else
+ if (!error || !(*error))
+ {
+#ifdef NOTYET
+ #ifndef JAPAN
+ memcpy((byte *)0xb8000,screen+7,24*160); // 24 for SPEAR/UPLOAD compatibility
+ #endif
+ SetTextCursor(0,23);
+#endif
+ }
+
+ exit(0);
+}
+
+//===========================================================================
+
+
+
+/*
+=====================
+=
+= DemoLoop
+=
+=====================
+*/
+
+
+static void DemoLoop()
+{
+ int LastDemo = 0;
+
+//
+// check for launch from ted
+//
+ if (param_tedlevel != -1)
+ {
+ param_nowait = true;
+ EnableEndGameMenuItem();
+ NewGame(param_difficulty,0);
+
+#ifndef SPEAR
+ gamestate.episode = param_tedlevel/10;
+ gamestate.mapon = param_tedlevel%10;
+#else
+ gamestate.episode = 0;
+ gamestate.mapon = param_tedlevel;
+#endif
+ GameLoop();
+ Quit (NULL);
+ }
+
+
+//
+// main game cycle
+//
+
+#ifndef DEMOTEST
+
+ #ifndef UPLOAD
+
+ #ifndef GOODTIMES
+ #ifndef SPEAR
+ #ifndef JAPAN
+ if (!param_nowait)
+ NonShareware();
+ #endif
+ #else
+ #ifndef GOODTIMES
+ #ifndef SPEARDEMO
+ extern void CopyProtection(void);
+ if(!param_goodtimes)
+ CopyProtection();
+ #endif
+ #endif
+ #endif
+ #endif
+ #endif
+
+ StartCPMusic(INTROSONG);
+
+#ifndef JAPAN
+ if (!param_nowait)
+ PG13 ();
+#endif
+
+#endif
+
+ while (1)
+ {
+ while (!param_nowait)
+ {
+//
+// title page
+//
+#ifndef DEMOTEST
+
+#ifdef SPEAR
+ SDL_Color pal[256];
+ CA_CacheGrChunk (TITLEPALETTE);
+ VL_ConvertPalette(grsegs[TITLEPALETTE], pal, 256);
+
+ CA_CacheGrChunk (TITLE1PIC);
+ VWB_DrawPic (0,0,TITLE1PIC);
+ UNCACHEGRCHUNK (TITLE1PIC);
+
+ CA_CacheGrChunk (TITLE2PIC);
+ VWB_DrawPic (0,80,TITLE2PIC);
+ UNCACHEGRCHUNK (TITLE2PIC);
+ VW_UpdateScreen ();
+ VL_FadeIn(0,255,pal,30);
+
+ UNCACHEGRCHUNK (TITLEPALETTE);
+#else
+ CA_CacheScreen (TITLEPIC);
+ VW_UpdateScreen ();
+ VW_FadeIn();
+#endif
+ if (IN_UserInput(TickBase*15))
+ break;
+ VW_FadeOut();
+//
+// credits page
+//
+ CA_CacheScreen (CREDITSPIC);
+ VW_UpdateScreen();
+ VW_FadeIn ();
+ if (IN_UserInput(TickBase*10))
+ break;
+ VW_FadeOut ();
+//
+// high scores
+//
+ DrawHighScores ();
+ VW_UpdateScreen ();
+ VW_FadeIn ();
+
+ if (IN_UserInput(TickBase*10))
+ break;
+#endif
+//
+// demo
+//
+
+ #ifndef SPEARDEMO
+ PlayDemo (LastDemo++%4);
+ #else
+ PlayDemo (0);
+ #endif
+
+ if (playstate == ex_abort)
+ break;
+ VW_FadeOut();
+ if(screenHeight % 200 != 0)
+ VL_ClearScreen(0);
+ StartCPMusic(INTROSONG);
+ }
+
+ VW_FadeOut ();
+
+#ifdef DEBUGKEYS
+ if (Keyboard[sc_Tab] && param_debugmode)
+ RecordDemo ();
+ else
+ US_ControlPanel (0);
+#else
+ US_ControlPanel (0);
+#endif
+
+ if (startgame || loadedgame)
+ {
+ GameLoop ();
+ if(!param_nowait)
+ {
+ VW_FadeOut();
+ StartCPMusic(INTROSONG);
+ }
+ }
+ }
+}
+
+
+//===========================================================================
+
+#define IFARG(str) if(!strcmp(arg, (str)))
+
+void CheckParameters(int argc, char *argv[])
+{
+ bool hasError = false, showHelp = false;
+ bool sampleRateGiven = false, audioBufferGiven = false;
+ int defaultSampleRate = param_samplerate;
+
+ for(int i = 1; i < argc; i++)
+ {
+ char *arg = argv[i];
+#ifndef SPEAR
+ IFARG("--goobers")
+#else
+ IFARG("--debugmode")
+#endif
+ param_debugmode = true;
+ else IFARG("--baby")
+ param_difficulty = 0;
+ else IFARG("--easy")
+ param_difficulty = 1;
+ else IFARG("--normal")
+ param_difficulty = 2;
+ else IFARG("--hard")
+ param_difficulty = 3;
+ else IFARG("--nowait")
+ param_nowait = true;
+ else IFARG("--tedlevel")
+ {
+ if(++i >= argc)
+ {
+ printf("The tedlevel option is missing the level argument!\n");
+ hasError = true;
+ }
+ else param_tedlevel = atoi(argv[i]);
+ }
+ else IFARG("--windowed")
+ fullscreen = false;
+ else IFARG("--windowed-mouse")
+ {
+ fullscreen = false;
+ forcegrabmouse = true;
+ }
+ else IFARG("--res")
+ {
+ if(i + 2 >= argc)
+ {
+ printf("The res option needs the width and/or the height argument!\n");
+ hasError = true;
+ }
+ else
+ {
+ screenWidth = atoi(argv[++i]);
+ screenHeight = atoi(argv[++i]);
+ unsigned factor = screenWidth / 320;
+ if(screenWidth % 320 || screenHeight != 200 * factor && screenHeight != 240 * factor)
+ printf("Screen size must be a multiple of 320x200 or 320x240!\n"), hasError = true;
+ }
+ }
+ else IFARG("--resf")
+ {
+ if(i + 2 >= argc)
+ {
+ printf("The resf option needs the width and/or the height argument!\n");
+ hasError = true;
+ }
+ else
+ {
+ screenWidth = atoi(argv[++i]);
+ screenHeight = atoi(argv[++i]);
+ if(screenWidth < 320)
+ printf("Screen width must be at least 320!\n"), hasError = true;
+ if(screenHeight < 200)
+ printf("Screen height must be at least 200!\n"), hasError = true;
+ }
+ }
+ else IFARG("--bits")
+ {
+ if(++i >= argc)
+ {
+ printf("The bits option is missing the color depth argument!\n");
+ hasError = true;
+ }
+ else
+ {
+ screenBits = atoi(argv[i]);
+ switch(screenBits)
+ {
+ case 8:
+ case 16:
+ case 24:
+ case 32:
+ break;
+
+ default:
+ printf("Screen color depth must be 8, 16, 24, or 32!\n");
+ hasError = true;
+ break;
+ }
+ }
+ }
+ else IFARG("--nodblbuf")
+ usedoublebuffering = false;
+ else IFARG("--extravbls")
+ {
+ if(++i >= argc)
+ {
+ printf("The extravbls option is missing the vbls argument!\n");
+ hasError = true;
+ }
+ else
+ {
+ extravbls = atoi(argv[i]);
+ if(extravbls < 0)
+ {
+ printf("Extravbls must be positive!\n");
+ hasError = true;
+ }
+ }
+ }
+ else IFARG("--joystick")
+ {
+ if(++i >= argc)
+ {
+ printf("The joystick option is missing the index argument!\n");
+ hasError = true;
+ }
+ else param_joystickindex = atoi(argv[i]); // index is checked in InitGame
+ }
+ else IFARG("--joystickhat")
+ {
+ if(++i >= argc)
+ {
+ printf("The joystickhat option is missing the index argument!\n");
+ hasError = true;
+ }
+ else param_joystickhat = atoi(argv[i]);
+ }
+ else IFARG("--samplerate")
+ {
+ if(++i >= argc)
+ {
+ printf("The samplerate option is missing the rate argument!\n");
+ hasError = true;
+ }
+ else param_samplerate = atoi(argv[i]);
+ sampleRateGiven = true;
+ }
+ else IFARG("--audiobuffer")
+ {
+ if(++i >= argc)
+ {
+ printf("The audiobuffer option is missing the size argument!\n");
+ hasError = true;
+ }
+ else param_audiobuffer = atoi(argv[i]);
+ audioBufferGiven = true;
+ }
+ else IFARG("--mission")
+ {
+ if(++i >= argc)
+ {
+ printf("The mission option is missing the mission argument!\n");
+ hasError = true;
+ }
+ else
+ {
+ param_mission = atoi(argv[i]);
+ if(param_mission < 0 || param_mission > 3)
+ {
+ printf("The mission option must be between 0 and 3!\n");
+ hasError = true;
+ }
+ }
+ }
+ else IFARG("--configdir")
+ {
+ if(++i >= argc)
+ {
+ printf("The configdir option is missing the dir argument!\n");
+ hasError = true;
+ }
+ else
+ {
+ size_t len = strlen(argv[i]);
+ if(len + 2 > sizeof(configdir))
+ {
+ printf("The config directory is too long!\n");
+ hasError = true;
+ }
+ else
+ {
+ strcpy(configdir, argv[i]);
+ if(argv[i][len] != '/' && argv[i][len] != '\\')
+ strcat(configdir, "/");
+ }
+ }
+ }
+ else IFARG("--goodtimes")
+ param_goodtimes = true;
+ else IFARG("--ignorenumchunks")
+ param_ignorenumchunks = true;
+ else IFARG("--help")
+ showHelp = true;
+ else hasError = true;
+ }
+ if(hasError || showHelp)
+ {
+ if(hasError) printf("\n");
+ printf(
+ "Wolf4SDL v1.7 ($Revision: 256 $)\n"
+ "Ported by Chaos-Software (http://www.chaos-software.de.vu)\n"
+ "Original Wolfenstein 3D by id Software\n\n"
+ "Usage: Wolf4SDL [options]\n"
+ "Options:\n"
+ " --help This help page\n"
+ " --tedlevel <level> Starts the game in the given level\n"
+ " --baby Sets the difficulty to baby for tedlevel\n"
+ " --easy Sets the difficulty to easy for tedlevel\n"
+ " --normal Sets the difficulty to normal for tedlevel\n"
+ " --hard Sets the difficulty to hard for tedlevel\n"
+ " --nowait Skips intro screens\n"
+ " --windowed[-mouse] Starts the game in a window [and grabs mouse]\n"
+ " --res <width> <height> Sets the screen resolution\n"
+ " (must be multiple of 320x200 or 320x240)\n"
+ " --resf <w> <h> Sets any screen resolution >= 320x200\n"
+ " (which may result in graphic errors)\n"
+ " --bits <b> Sets the screen color depth\n"
+ " (use this when you have palette/fading problems\n"
+ " allowed: 8, 16, 24, 32, default: \"best\" depth)\n"
+ " --nodblbuf Don't use SDL's double buffering\n"
+ " --extravbls <vbls> Sets a delay after each frame, which may help to\n"
+ " reduce flickering (unit is currently 8 ms, default: 0)\n"
+ " --joystick <index> Use the index-th joystick if available\n"
+ " (-1 to disable joystick, default: 0)\n"
+ " --joystickhat <index> Enables movement with the given coolie hat\n"
+ " --samplerate <rate> Sets the sound sample rate (given in Hz, default: %i)\n"
+ " --audiobuffer <size> Sets the size of the audio buffer (-> sound latency)\n"
+ " (given in bytes, default: 2048 / (44100 / samplerate))\n"
+ " --ignorenumchunks Ignores the number of chunks in VGAHEAD.*\n"
+ " (may be useful for some broken mods)\n"
+ " --configdir <dir> Directory where config file and save games are stored\n"
+#if defined(_arch_dreamcast) || defined(_WIN32)
+ " (default: current directory)\n"
+#else
+ " (default: $HOME/.wolf4sdl)\n"
+#endif
+#if defined(SPEAR) && !defined(SPEARDEMO)
+ " --mission <mission> Mission number to play (0-3)\n"
+ " (default: 0 -> .sod, 1-3 -> .sd*)\n"
+ " --goodtimes Disable copy protection quiz\n"
+#endif
+ , defaultSampleRate
+ );
+ exit(1);
+ }
+
+ if(sampleRateGiven && !audioBufferGiven)
+ param_audiobuffer = 2048 / (44100 / param_samplerate);
+}
+
+/*
+==========================
+=
+= main
+=
+==========================
+*/
+
+#define main my_main
+
+int main (int argc, char *argv[])
+{
+#if defined(_arch_dreamcast)
+ DC_Init();
+#else
+ CheckParameters(argc, argv);
+#endif
+
+ CheckForEpisodes();
+
+ InitGame();
+
+ DemoLoop();
+
+ Quit("Demo loop exited???");
+ return 1;
+}
diff --git a/apps/plugins/sdl/progs/wolf3d/wl_menu.c b/apps/plugins/sdl/progs/wolf3d/wl_menu.c
new file mode 100644
index 0000000000..3913fab33d
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/wl_menu.c
@@ -0,0 +1,4160 @@
+////////////////////////////////////////////////////////////////////
+//
+// WL_MENU.C
+// by John Romero (C) 1992 Id Software, Inc.
+//
+////////////////////////////////////////////////////////////////////
+
+#include "wl_def.h"
+#pragma hdrstop
+
+extern int lastgamemusicoffset;
+extern int numEpisodesMissing;
+
+//
+// PRIVATE PROTOTYPES
+//
+int CP_ReadThis (int);
+
+#ifdef SPEAR
+#define STARTITEM newgame
+
+#else
+#ifdef GOODTIMES
+#define STARTITEM newgame
+
+#else
+#define STARTITEM readthis
+#endif
+#endif
+
+// ENDSTRx constants are defined in foreign.h
+char endStrings[9][80] = {
+ ENDSTR1,
+ ENDSTR2,
+ ENDSTR3,
+ ENDSTR4,
+ ENDSTR5,
+ ENDSTR6,
+ ENDSTR7,
+ ENDSTR8,
+ ENDSTR9
+};
+
+CP_itemtype MainMenu[] = {
+#ifdef JAPAN
+ {1, "", CP_NewGame},
+ {1, "", CP_Sound},
+ {1, "", CP_Control},
+ {1, "", CP_LoadGame},
+ {0, "", CP_SaveGame},
+ {1, "", CP_ChangeView},
+ {2, "", CP_ReadThis},
+ {1, "", CP_ViewScores},
+ {1, "", 0},
+ {1, "", 0}
+#else
+
+ {1, STR_NG, CP_NewGame},
+ {1, STR_SD, CP_Sound},
+ {1, STR_CL, CP_Control},
+ {1, STR_LG, CP_LoadGame},
+ {0, STR_SG, CP_SaveGame},
+ {1, STR_CV, CP_ChangeView},
+
+#ifndef GOODTIMES
+#ifndef SPEAR
+
+#ifdef SPANISH
+ {2, "Ve esto!", CP_ReadThis},
+#else
+ {2, "Read This!", CP_ReadThis},
+#endif
+
+#endif
+#endif
+
+ {1, STR_VS, CP_ViewScores},
+ {1, STR_BD, 0},
+ {1, STR_QT, 0}
+#endif
+};
+
+CP_itemtype SndMenu[] = {
+#ifdef JAPAN
+ {1, "", 0},
+ {1, "", 0},
+ {1, "", 0},
+ {0, "", 0},
+ {0, "", 0},
+ {1, "", 0},
+ {1, "", 0},
+ {1, "", 0},
+ {0, "", 0},
+ {0, "", 0},
+ {1, "", 0},
+ {1, "", 0},
+#else
+ {1, STR_NONE, 0},
+ {0, STR_PC, 0},
+ {1, STR_ALSB, 0},
+ {0, "", 0},
+ {0, "", 0},
+ {1, STR_NONE, 0},
+ {0, STR_DISNEY, 0},
+ {1, STR_SB, 0},
+ {0, "", 0},
+ {0, "", 0},
+ {1, STR_NONE, 0},
+ {1, STR_ALSB, 0}
+#endif
+};
+
+enum { CTL_MOUSEENABLE, CTL_MOUSESENS, CTL_JOYENABLE, CTL_CUSTOMIZE };
+
+CP_itemtype CtlMenu[] = {
+#ifdef JAPAN
+ {0, "", 0},
+ {0, "", MouseSensitivity},
+ {0, "", 0},
+ {1, "", CustomControls}
+#else
+ {0, STR_MOUSEEN, 0},
+ {0, STR_SENS, MouseSensitivity},
+ {0, STR_JOYEN, 0},
+ {1, STR_CUSTOM, CustomControls}
+#endif
+};
+
+#ifndef SPEAR
+CP_itemtype NewEmenu[] = {
+#ifdef JAPAN
+#ifdef JAPDEMO
+ {1, "", 0},
+ {0, "", 0},
+ {0, "", 0},
+ {0, "", 0},
+ {0, "", 0},
+ {0, "", 0},
+ {0, "", 0},
+ {0, "", 0},
+ {0, "", 0},
+ {0, "", 0},
+ {0, "", 0},
+ {0, "", 0},
+#else
+ {1, "", 0},
+ {0, "", 0},
+ {1, "", 0},
+ {0, "", 0},
+ {1, "", 0},
+ {0, "", 0},
+ {1, "", 0},
+ {0, "", 0},
+ {1, "", 0},
+ {0, "", 0},
+ {1, "", 0},
+ {0, "", 0}
+#endif
+#else
+#ifdef SPANISH
+ {1, "Episodio 1\n" "Fuga desde Wolfenstein", 0},
+ {0, "", 0},
+ {3, "Episodio 2\n" "Operacion Eisenfaust", 0},
+ {0, "", 0},
+ {3, "Episodio 3\n" "Muere, Fuhrer, Muere!", 0},
+ {0, "", 0},
+ {3, "Episodio 4\n" "Un Negro Secreto", 0},
+ {0, "", 0},
+ {3, "Episodio 5\n" "Huellas del Loco", 0},
+ {0, "", 0},
+ {3, "Episodio 6\n" "Confrontacion", 0}
+#else
+ {1, "Episode 1\n" "Escape from Wolfenstein", 0},
+ {0, "", 0},
+ {3, "Episode 2\n" "Operation: Eisenfaust", 0},
+ {0, "", 0},
+ {3, "Episode 3\n" "Die, Fuhrer, Die!", 0},
+ {0, "", 0},
+ {3, "Episode 4\n" "A Dark Secret", 0},
+ {0, "", 0},
+ {3, "Episode 5\n" "Trail of the Madman", 0},
+ {0, "", 0},
+ {3, "Episode 6\n" "Confrontation", 0}
+#endif
+#endif
+};
+#endif
+
+
+CP_itemtype NewMenu[] = {
+#ifdef JAPAN
+ {1, "", 0},
+ {1, "", 0},
+ {1, "", 0},
+ {1, "", 0}
+#else
+ {1, STR_DADDY, 0},
+ {1, STR_HURTME, 0},
+ {1, STR_BRINGEM, 0},
+ {1, STR_DEATH, 0}
+#endif
+};
+
+CP_itemtype LSMenu[] = {
+ {1, "", 0},
+ {1, "", 0},
+ {1, "", 0},
+ {1, "", 0},
+ {1, "", 0},
+ {1, "", 0},
+ {1, "", 0},
+ {1, "", 0},
+ {1, "", 0},
+ {1, "", 0}
+};
+
+CP_itemtype CusMenu[] = {
+ {1, "", 0},
+ {0, "", 0},
+ {0, "", 0},
+ {1, "", 0},
+ {0, "", 0},
+ {0, "", 0},
+ {1, "", 0},
+ {0, "", 0},
+ {1, "", 0}
+};
+
+// CP_iteminfo struct format: short x, y, amount, curpos, indent;
+CP_iteminfo MainItems = { MENU_X, MENU_Y, lengthof(MainMenu), STARTITEM, 24 },
+ SndItems = { SM_X, SM_Y1, lengthof(SndMenu), 0, 52 },
+ LSItems = { LSM_X, LSM_Y, lengthof(LSMenu), 0, 24 },
+ CtlItems = { CTL_X, CTL_Y, lengthof(CtlMenu), -1, 56 },
+ CusItems = { 8, CST_Y + 13 * 2, lengthof(CusMenu), -1, 0},
+#ifndef SPEAR
+ NewEitems = { NE_X, NE_Y, lengthof(NewEmenu), 0, 88 },
+#endif
+ NewItems = { NM_X, NM_Y, lengthof(NewMenu), 2, 24 };
+
+int color_hlite[] = {
+ DEACTIVE,
+ HIGHLIGHT,
+ READHCOLOR,
+ 0x67
+};
+
+int color_norml[] = {
+ DEACTIVE,
+ TEXTCOLOR,
+ READCOLOR,
+ 0x6b
+};
+
+int EpisodeSelect[6] = { 1 };
+
+
+static int SaveGamesAvail[10];
+static int StartGame;
+static int SoundStatus = 1;
+static int pickquick;
+static char SaveGameNames[10][32];
+static char SaveName[13] = "savegam?.";
+
+
+////////////////////////////////////////////////////////////////////
+//
+// INPUT MANAGER SCANCODE TABLES
+//
+////////////////////////////////////////////////////////////////////
+
+#if 0
+static const char *ScanNames[] = // Scan code names with single chars
+{
+ "?", "?", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "+", "?", "?",
+ "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "[", "]", "|", "?", "A", "S",
+ "D", "F", "G", "H", "J", "K", "L", ";", "\"", "?", "?", "?", "Z", "X", "C", "V",
+ "B", "N", "M", ",", ".", "/", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?",
+ "?", "?", "?", "?", "?", "?", "?", "?", "\xf", "?", "-", "\x15", "5", "\x11", "+", "?",
+ "\x13", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?",
+ "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?",
+ "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?"
+}; // DEBUG - consolidate these
+static ScanCode ExtScanCodes[] = // Scan codes with >1 char names
+{
+ 1, 0xe, 0xf, 0x1d, 0x2a, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e,
+ 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x57, 0x59, 0x46, 0x1c, 0x36,
+ 0x37, 0x38, 0x47, 0x49, 0x4f, 0x51, 0x52, 0x53, 0x45, 0x48,
+ 0x50, 0x4b, 0x4d, 0x00
+};
+static const char *ExtScanNames[] = // Names corresponding to ExtScanCodes
+{
+ "Esc", "BkSp", "Tab", "Ctrl", "LShft", "Space", "CapsLk", "F1", "F2", "F3", "F4",
+ "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", "ScrlLk", "Enter", "RShft",
+ "PrtSc", "Alt", "Home", "PgUp", "End", "PgDn", "Ins", "Del", "NumLk", "Up",
+ "Down", "Left", "Right", ""
+};
+
+/*#pragma warning 737 9
+static byte
+ *ScanNames[] = // Scan code names with single chars
+ {
+ "?","?","1","2","3","4","5","6","7","8","9","0","-","+","?","?",
+ "Q","W","E","R","T","Y","U","I","O","P","[","]","|","?","A","S",
+ "D","F","G","H","J","K","L",";","\"","?","?","?","Z","X","C","V",
+ "B","N","M",",",".","/","?","?","?","?","?","?","?","?","?","?",
+ "?","?","?","?","?","?","?","?","\xf","?","-","\x15","5","\x11","+","?",
+ "\x13","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?",
+ "?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?",
+ "?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?"
+ }; // DEBUG - consolidate these
+static byte ExtScanCodes[] = // Scan codes with >1 char names
+ {
+ 1,0xe,0xf,0x1d,0x2a,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,
+ 0x3f,0x40,0x41,0x42,0x43,0x44,0x57,0x59,0x46,0x1c,0x36,
+ 0x37,0x38,0x47,0x49,0x4f,0x51,0x52,0x53,0x45,0x48,
+ 0x50,0x4b,0x4d,0x00
+ };
+static byte *ExtScanNames[] = // Names corresponding to ExtScanCodes
+ {
+ "Esc","BkSp","Tab","Ctrl","LShft","Space","CapsLk","F1","F2","F3","F4",
+ "F5","F6","F7","F8","F9","F10","F11","F12","ScrlLk","Enter","RShft",
+ "PrtSc","Alt","Home","PgUp","End","PgDn","Ins","Del","NumLk","Up",
+ "Down","Left","Right",""
+ };*/
+
+#else
+static const char* const ScanNames[SDLK_LAST] =
+ {
+ "?","?","?","?","?","?","?","?", // 0
+ "BkSp","Tab","?","?","?","Return","?","?", // 8
+ "?","?","?","Pause","?","?","?","?", // 16
+ "?","?","?","Esc","?","?","?","?", // 24
+ "Space","!","\"","#","$","?","&","'", // 32
+ "(",")","*","+",",","-",".","/", // 40
+ "0","1","2","3","4","5","6","7", // 48
+ "8","9",":",";","<","=",">","?", // 56
+ "@","A","B","C","D","E","F","G", // 64
+ "H","I","J","K","L","M","N","O", // 72
+ "P","Q","R","S","T","U","V","W", // 80
+ "X","Y","Z","[","\\","]","^","_", // 88
+ "`","a","b","c","d","e","f","h", // 96
+ "h","i","j","k","l","m","n","o", // 104
+ "p","q","r","s","t","u","v","w", // 112
+ "x","y","z","{","|","}","~","?", // 120
+ "?","?","?","?","?","?","?","?", // 128
+ "?","?","?","?","?","?","?","?", // 136
+ "?","?","?","?","?","?","?","?", // 144
+ "?","?","?","?","?","?","?","?", // 152
+ "?","?","?","?","?","?","?","?", // 160
+ "?","?","?","?","?","?","?","?", // 168
+ "?","?","?","?","?","?","?","?", // 176
+ "?","?","?","?","?","?","?","?", // 184
+ "?","?","?","?","?","?","?","?", // 192
+ "?","?","?","?","?","?","?","?", // 200
+ "?","?","?","?","?","?","?","?", // 208
+ "?","?","?","?","?","?","?","?", // 216
+ "?","?","?","?","?","?","?","?", // 224
+ "?","?","?","?","?","?","?","?", // 232
+ "?","?","?","?","?","?","?","?", // 240
+ "?","?","?","?","?","?","?","?", // 248
+ "?","?","?","?","?","?","?","?", // 256
+ "?","?","?","?","?","?","?","Enter", // 264
+ "?","Up","Down","Right","Left","Ins","Home","End", // 272
+ "PgUp","PgDn","F1","F2","F3","F4","F5","F6", // 280
+ "F7","F8","F9","F10","F11","F12","?","?", // 288
+ "?","?","?","?","NumLk","CapsLk","ScrlLk","RShft", // 296
+ "Shift","RCtrl","Ctrl","RAlt","Alt","?","?","?", // 304
+ "?","?","?","?","PrtSc","?","?","?", // 312
+ "?","?" // 320
+ };
+
+#endif
+
+////////////////////////////////////////////////////////////////////
+//
+// Wolfenstein Control Panel! Ta Da!
+//
+////////////////////////////////////////////////////////////////////
+void
+US_ControlPanel (ScanCode scancode)
+{
+ int which;
+
+#ifdef _arch_dreamcast
+ DC_StatusClearLCD();
+#endif
+
+ if (ingame)
+ {
+ if (CP_CheckQuick (scancode))
+ return;
+ lastgamemusicoffset = StartCPMusic (MENUSONG);
+ }
+ else
+ StartCPMusic (MENUSONG);
+ SetupControlPanel ();
+
+ //
+ // F-KEYS FROM WITHIN GAME
+ //
+ switch (scancode)
+ {
+ case sc_F1:
+#ifdef SPEAR
+ BossKey ();
+#else
+#ifdef GOODTIMES
+ BossKey ();
+#else
+ HelpScreens ();
+#endif
+#endif
+ goto finishup;
+
+ case sc_F2:
+ CP_SaveGame (0);
+ goto finishup;
+
+ case sc_F3:
+ CP_LoadGame (0);
+ goto finishup;
+
+ case sc_F4:
+ CP_Sound (0);
+ goto finishup;
+
+ case sc_F5:
+ CP_ChangeView (0);
+ goto finishup;
+
+ case sc_F6:
+ CP_Control (0);
+ goto finishup;
+
+ finishup:
+ CleanupControlPanel ();
+#ifdef SPEAR
+ UnCacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
+#endif
+ return;
+ }
+
+#ifdef SPEAR
+ CacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
+#endif
+
+ DrawMainMenu ();
+ MenuFadeIn ();
+ StartGame = 0;
+
+ //
+ // MAIN MENU LOOP
+ //
+ do
+ {
+ which = HandleMenu (&MainItems, &MainMenu[0], NULL);
+
+#ifdef SPEAR
+#ifndef SPEARDEMO
+ IN_ProcessEvents();
+
+ //
+ // EASTER EGG FOR SPEAR OF DESTINY!
+ //
+ if (Keyboard[sc_I] && Keyboard[sc_D])
+ {
+ VW_FadeOut ();
+ StartCPMusic (XJAZNAZI_MUS);
+ UnCacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
+ UnCacheLump (BACKDROP_LUMP_START, BACKDROP_LUMP_END);
+ ClearMemory ();
+
+
+ CA_CacheGrChunk (IDGUYS1PIC);
+ VWB_DrawPic (0, 0, IDGUYS1PIC);
+ UNCACHEGRCHUNK (IDGUYS1PIC);
+
+ CA_CacheGrChunk (IDGUYS2PIC);
+ VWB_DrawPic (0, 80, IDGUYS2PIC);
+ UNCACHEGRCHUNK (IDGUYS2PIC);
+
+ VW_UpdateScreen ();
+
+ SDL_Color pal[256];
+ CA_CacheGrChunk (IDGUYSPALETTE);
+ VL_ConvertPalette(grsegs[IDGUYSPALETTE], pal, 256);
+ VL_FadeIn (0, 255, pal, 30);
+ UNCACHEGRCHUNK (IDGUYSPALETTE);
+
+ while (Keyboard[sc_I] || Keyboard[sc_D])
+ IN_WaitAndProcessEvents();
+ IN_ClearKeysDown ();
+ IN_Ack ();
+
+ VW_FadeOut ();
+
+ CacheLump (BACKDROP_LUMP_START, BACKDROP_LUMP_END);
+ CacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
+ DrawMainMenu ();
+ StartCPMusic (MENUSONG);
+ MenuFadeIn ();
+ }
+#endif
+#endif
+
+ switch (which)
+ {
+ case viewscores:
+ if (MainMenu[viewscores].routine == NULL)
+ {
+ if (CP_EndGame (0))
+ StartGame = 1;
+ }
+ else
+ {
+ DrawMainMenu();
+ MenuFadeIn ();
+ }
+ break;
+
+ case backtodemo:
+ StartGame = 1;
+ if (!ingame)
+ StartCPMusic (INTROSONG);
+ VL_FadeOut (0, 255, 0, 0, 0, 10);
+ break;
+
+ case -1:
+ case quit:
+ CP_Quit (0);
+ break;
+
+ default:
+ if (!StartGame)
+ {
+ DrawMainMenu ();
+ MenuFadeIn ();
+ }
+ }
+
+ //
+ // "EXIT OPTIONS" OR "NEW GAME" EXITS
+ //
+ }
+ while (!StartGame);
+
+ //
+ // DEALLOCATE EVERYTHING
+ //
+ CleanupControlPanel ();
+
+ //
+ // CHANGE MAINMENU ITEM
+ //
+ if (startgame || loadedgame)
+ EnableEndGameMenuItem();
+
+ // RETURN/START GAME EXECUTION
+
+#ifdef SPEAR
+ UnCacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
+#endif
+}
+
+void EnableEndGameMenuItem()
+{
+ MainMenu[viewscores].routine = NULL;
+#ifndef JAPAN
+ strcpy (MainMenu[viewscores].string, STR_EG);
+#endif
+}
+
+////////////////////////
+//
+// DRAW MAIN MENU SCREEN
+//
+void
+DrawMainMenu (void)
+{
+#ifdef JAPAN
+ CA_CacheScreen (S_OPTIONSPIC);
+#else
+ ClearMScreen ();
+
+ VWB_DrawPic (112, 184, C_MOUSELBACKPIC);
+ DrawStripes (10);
+ VWB_DrawPic (84, 0, C_OPTIONSPIC);
+
+#ifdef SPANISH
+ DrawWindow (MENU_X - 8, MENU_Y - 3, MENU_W + 8, MENU_H, BKGDCOLOR);
+#else
+ DrawWindow (MENU_X - 8, MENU_Y - 3, MENU_W, MENU_H, BKGDCOLOR);
+#endif
+#endif
+
+ //
+ // CHANGE "GAME" AND "DEMO"
+ //
+ if (ingame)
+ {
+#ifndef JAPAN
+
+#ifdef SPANISH
+ strcpy (&MainMenu[backtodemo].string, STR_GAME);
+#else
+ strcpy (&MainMenu[backtodemo].string[8], STR_GAME);
+#endif
+
+#else
+ CA_CacheGrChunk (C_MRETGAMEPIC);
+ VWB_DrawPic (12 * 8, 20 * 8, C_MRETGAMEPIC);
+ UNCACHEGRCHUNK (C_MRETGAMEPIC);
+ CA_CacheGrChunk (C_MENDGAMEPIC);
+ VWB_DrawPic (12 * 8, 18 * 8, C_MENDGAMEPIC);
+ UNCACHEGRCHUNK (C_MENDGAMEPIC);
+#endif
+ MainMenu[backtodemo].active = 2;
+ }
+ else
+ {
+#ifndef JAPAN
+#ifdef SPANISH
+ strcpy (&MainMenu[backtodemo].string, STR_BD);
+#else
+ strcpy (&MainMenu[backtodemo].string[8], STR_DEMO);
+#endif
+#else
+ CA_CacheGrChunk (C_MRETDEMOPIC);
+ VWB_DrawPic (12 * 8, 20 * 8, C_MRETDEMOPIC);
+ UNCACHEGRCHUNK (C_MRETDEMOPIC);
+ CA_CacheGrChunk (C_MSCORESPIC);
+ VWB_DrawPic (12 * 8, 18 * 8, C_MSCORESPIC);
+ UNCACHEGRCHUNK (C_MSCORESPIC);
+#endif
+ MainMenu[backtodemo].active = 1;
+ }
+
+ DrawMenu (&MainItems, &MainMenu[0]);
+ VW_UpdateScreen ();
+}
+
+#ifndef GOODTIMES
+#ifndef SPEAR
+////////////////////////////////////////////////////////////////////
+//
+// READ THIS!
+//
+////////////////////////////////////////////////////////////////////
+int
+CP_ReadThis (int)
+{
+ StartCPMusic (CORNER_MUS);
+ HelpScreens ();
+ StartCPMusic (MENUSONG);
+ return true;
+}
+#endif
+#endif
+
+
+#ifdef GOODTIMES
+////////////////////////////////////////////////////////////////////
+//
+// BOSS KEY
+//
+////////////////////////////////////////////////////////////////////
+void
+BossKey (void)
+{
+#ifdef NOTYET
+ byte palette1[256][3];
+ SD_MusicOff ();
+/* _AX = 3;
+ geninterrupt(0x10); */
+ _asm
+ {
+ mov eax, 3 int 0x10}
+ puts ("C>");
+ SetTextCursor (2, 0);
+// while (!Keyboard[sc_Escape])
+ IN_Ack ();
+ IN_ClearKeysDown ();
+
+ SD_MusicOn ();
+ VL_SetVGAPlaneMode ();
+ for (int i = 0; i < 768; i++)
+ palette1[0][i] = 0;
+
+ VL_SetPalette (&palette1[0][0]);
+ LoadLatchMem ();
+#endif
+}
+#else
+#ifdef SPEAR
+void
+BossKey (void)
+{
+#ifdef NOTYET
+ byte palette1[256][3];
+ SD_MusicOff ();
+/* _AX = 3;
+ geninterrupt(0x10); */
+ _asm
+ {
+ mov eax, 3 int 0x10}
+ puts ("C>");
+ SetTextCursor (2, 0);
+// while (!Keyboard[sc_Escape])
+ IN_Ack ();
+ IN_ClearKeysDown ();
+
+ SD_MusicOn ();
+ VL_SetVGAPlaneMode ();
+ for (int i = 0; i < 768; i++)
+ palette1[0][i] = 0;
+
+ VL_SetPalette (&palette1[0][0]);
+ LoadLatchMem ();
+#endif
+}
+#endif
+#endif
+
+
+////////////////////////////////////////////////////////////////////
+//
+// CHECK QUICK-KEYS & QUIT (WHILE IN A GAME)
+//
+////////////////////////////////////////////////////////////////////
+int
+CP_CheckQuick (ScanCode scancode)
+{
+ switch (scancode)
+ {
+ //
+ // END GAME
+ //
+ case sc_F7:
+ CA_CacheGrChunk (STARTFONT + 1);
+
+ WindowH = 160;
+#ifdef JAPAN
+ if (GetYorN (7, 8, C_JAPQUITPIC))
+#else
+ if (Confirm (ENDGAMESTR))
+#endif
+ {
+ playstate = ex_died;
+ killerobj = NULL;
+ pickquick = gamestate.lives = 0;
+ }
+
+ WindowH = 200;
+ fontnumber = 0;
+ MainMenu[savegame].active = 0;
+ return 1;
+
+ //
+ // QUICKSAVE
+ //
+ case sc_F8:
+ if (SaveGamesAvail[LSItems.curpos] && pickquick)
+ {
+ CA_CacheGrChunk (STARTFONT + 1);
+ fontnumber = 1;
+ Message (STR_SAVING "...");
+ CP_SaveGame (1);
+ fontnumber = 0;
+ }
+ else
+ {
+#ifndef SPEAR
+ CA_CacheGrChunk (STARTFONT + 1);
+ CA_CacheGrChunk (C_CURSOR1PIC);
+ CA_CacheGrChunk (C_CURSOR2PIC);
+ CA_CacheGrChunk (C_DISKLOADING1PIC);
+ CA_CacheGrChunk (C_DISKLOADING2PIC);
+ CA_CacheGrChunk (C_SAVEGAMEPIC);
+ CA_CacheGrChunk (C_MOUSELBACKPIC);
+#else
+ CacheLump (BACKDROP_LUMP_START, BACKDROP_LUMP_END);
+ CA_CacheGrChunk (C_CURSOR1PIC);
+#endif
+
+ VW_FadeOut ();
+ if(screenHeight % 200 != 0)
+ VL_ClearScreen(0);
+
+ lastgamemusicoffset = StartCPMusic (MENUSONG);
+ pickquick = CP_SaveGame (0);
+
+ SETFONTCOLOR (0, 15);
+ IN_ClearKeysDown ();
+ VW_FadeOut();
+ if(viewsize != 21)
+ DrawPlayScreen ();
+
+ if (!startgame && !loadedgame)
+ ContinueMusic (lastgamemusicoffset);
+
+ if (loadedgame)
+ playstate = ex_abort;
+ lasttimecount = GetTimeCount ();
+
+ if (MousePresent && IN_IsInputGrabbed())
+ IN_CenterMouse(); // Clear accumulated mouse movement
+
+#ifndef SPEAR
+ UNCACHEGRCHUNK (C_CURSOR1PIC);
+ UNCACHEGRCHUNK (C_CURSOR2PIC);
+ UNCACHEGRCHUNK (C_DISKLOADING1PIC);
+ UNCACHEGRCHUNK (C_DISKLOADING2PIC);
+ UNCACHEGRCHUNK (C_SAVEGAMEPIC);
+ UNCACHEGRCHUNK (C_MOUSELBACKPIC);
+#else
+ UnCacheLump (BACKDROP_LUMP_START, BACKDROP_LUMP_END);
+#endif
+ }
+ return 1;
+
+ //
+ // QUICKLOAD
+ //
+ case sc_F9:
+ if (SaveGamesAvail[LSItems.curpos] && pickquick)
+ {
+ char string[100] = STR_LGC;
+
+
+ CA_CacheGrChunk (STARTFONT + 1);
+ fontnumber = 1;
+
+ strcat (string, SaveGameNames[LSItems.curpos]);
+ strcat (string, "\"?");
+
+ if (Confirm (string))
+ CP_LoadGame (1);
+
+ fontnumber = 0;
+ }
+ else
+ {
+#ifndef SPEAR
+ CA_CacheGrChunk (STARTFONT + 1);
+ CA_CacheGrChunk (C_CURSOR1PIC);
+ CA_CacheGrChunk (C_CURSOR2PIC);
+ CA_CacheGrChunk (C_DISKLOADING1PIC);
+ CA_CacheGrChunk (C_DISKLOADING2PIC);
+ CA_CacheGrChunk (C_LOADGAMEPIC);
+ CA_CacheGrChunk (C_MOUSELBACKPIC);
+#else
+ CA_CacheGrChunk (C_CURSOR1PIC);
+ CacheLump (BACKDROP_LUMP_START, BACKDROP_LUMP_END);
+#endif
+
+ VW_FadeOut ();
+ if(screenHeight % 200 != 0)
+ VL_ClearScreen(0);
+
+ lastgamemusicoffset = StartCPMusic (MENUSONG);
+ pickquick = CP_LoadGame (0); // loads lastgamemusicoffs
+
+ SETFONTCOLOR (0, 15);
+ IN_ClearKeysDown ();
+ VW_FadeOut();
+ if(viewsize != 21)
+ DrawPlayScreen ();
+
+ if (!startgame && !loadedgame)
+ ContinueMusic (lastgamemusicoffset);
+
+ if (loadedgame)
+ playstate = ex_abort;
+
+ lasttimecount = GetTimeCount ();
+
+ if (MousePresent && IN_IsInputGrabbed())
+ IN_CenterMouse(); // Clear accumulated mouse movement
+
+#ifndef SPEAR
+ UNCACHEGRCHUNK (C_CURSOR1PIC);
+ UNCACHEGRCHUNK (C_CURSOR2PIC);
+ UNCACHEGRCHUNK (C_DISKLOADING1PIC);
+ UNCACHEGRCHUNK (C_DISKLOADING2PIC);
+ UNCACHEGRCHUNK (C_LOADGAMEPIC);
+ UNCACHEGRCHUNK (C_MOUSELBACKPIC);
+#else
+ UnCacheLump (BACKDROP_LUMP_START, BACKDROP_LUMP_END);
+#endif
+ }
+ return 1;
+
+ //
+ // QUIT
+ //
+ case sc_F10:
+ CA_CacheGrChunk (STARTFONT + 1);
+
+ WindowX = WindowY = 0;
+ WindowW = 320;
+ WindowH = 160;
+#ifdef JAPAN
+ if (GetYorN (7, 8, C_QUITMSGPIC))
+#else
+#ifdef SPANISH
+ if (Confirm (ENDGAMESTR))
+#else
+ if (Confirm (endStrings[US_RndT () & 0x7 + (US_RndT () & 1)]))
+#endif
+#endif
+ {
+ VW_UpdateScreen ();
+ SD_MusicOff ();
+ SD_StopSound ();
+ MenuFadeOut ();
+
+ Quit (NULL);
+ }
+
+ DrawPlayBorder ();
+ WindowH = 200;
+ fontnumber = 0;
+ return 1;
+ }
+
+ return 0;
+}
+
+
+////////////////////////////////////////////////////////////////////
+//
+// END THE CURRENT GAME
+//
+////////////////////////////////////////////////////////////////////
+int
+CP_EndGame (int a)
+{
+ int res;
+#ifdef JAPAN
+ res = GetYorN (7, 8, C_JAPQUITPIC);
+#else
+ res = Confirm (ENDGAMESTR);
+#endif
+ DrawMainMenu();
+ if(!res) return 0;
+
+ pickquick = gamestate.lives = 0;
+ playstate = ex_died;
+ killerobj = NULL;
+
+ MainMenu[savegame].active = 0;
+ MainMenu[viewscores].routine = CP_ViewScores;
+#ifndef JAPAN
+ strcpy (MainMenu[viewscores].string, STR_VS);
+#endif
+
+ return 1;
+}
+
+
+////////////////////////////////////////////////////////////////////
+//
+// VIEW THE HIGH SCORES
+//
+////////////////////////////////////////////////////////////////////
+int
+CP_ViewScores (int a)
+{
+ fontnumber = 0;
+
+#ifdef SPEAR
+ UnCacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
+ StartCPMusic (XAWARD_MUS);
+#else
+ StartCPMusic (ROSTER_MUS);
+#endif
+
+ DrawHighScores ();
+ VW_UpdateScreen ();
+ MenuFadeIn ();
+ fontnumber = 1;
+
+ IN_Ack ();
+
+ StartCPMusic (MENUSONG);
+ MenuFadeOut ();
+
+#ifdef SPEAR
+ CacheLump (BACKDROP_LUMP_START, BACKDROP_LUMP_END);
+ CacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
+#endif
+ return 0;
+}
+
+
+////////////////////////////////////////////////////////////////////
+//
+// START A NEW GAME
+//
+////////////////////////////////////////////////////////////////////
+int
+CP_NewGame (int a)
+{
+ int which, episode;
+
+#ifdef SPEAR
+ UnCacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
+#endif
+
+
+#ifndef SPEAR
+ firstpart:
+
+ DrawNewEpisode ();
+ do
+ {
+ which = HandleMenu (&NewEitems, &NewEmenu[0], NULL);
+ switch (which)
+ {
+ case -1:
+ MenuFadeOut ();
+ return 0;
+
+ default:
+ if (!EpisodeSelect[which / 2])
+ {
+ SD_PlaySound (NOWAYSND);
+ Message ("Please select \"Read This!\"\n"
+ "from the Options menu to\n"
+ "find out how to order this\n" "episode from Apogee.");
+ IN_ClearKeysDown ();
+ IN_Ack ();
+ DrawNewEpisode ();
+ which = 0;
+ }
+ else
+ {
+ episode = which / 2;
+ which = 1;
+ }
+ break;
+ }
+
+ }
+ while (!which);
+
+ ShootSnd ();
+
+ //
+ // ALREADY IN A GAME?
+ //
+ if (ingame)
+#ifdef JAPAN
+ if (!GetYorN (7, 8, C_JAPNEWGAMEPIC))
+#else
+ if (!Confirm (CURGAME))
+#endif
+ {
+ MenuFadeOut ();
+ return 0;
+ }
+
+ MenuFadeOut ();
+
+#else
+ episode = 0;
+
+ //
+ // ALREADY IN A GAME?
+ //
+ CacheLump (NEWGAME_LUMP_START, NEWGAME_LUMP_END);
+ DrawNewGame ();
+ if (ingame)
+ if (!Confirm (CURGAME))
+ {
+ MenuFadeOut ();
+ UnCacheLump (NEWGAME_LUMP_START, NEWGAME_LUMP_END);
+ CacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
+ return 0;
+ }
+
+#endif
+
+ DrawNewGame ();
+ which = HandleMenu (&NewItems, &NewMenu[0], DrawNewGameDiff);
+ if (which < 0)
+ {
+ MenuFadeOut ();
+#ifndef SPEAR
+ goto firstpart;
+#else
+ UnCacheLump (NEWGAME_LUMP_START, NEWGAME_LUMP_END);
+ CacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
+ return 0;
+#endif
+ }
+
+ ShootSnd ();
+ NewGame (which, episode);
+ StartGame = 1;
+ MenuFadeOut ();
+
+ //
+ // CHANGE "READ THIS!" TO NORMAL COLOR
+ //
+#ifndef SPEAR
+#ifndef GOODTIMES
+ MainMenu[readthis].active = 1;
+#endif
+#endif
+
+ pickquick = 0;
+
+#ifdef SPEAR
+ UnCacheLump (NEWGAME_LUMP_START, NEWGAME_LUMP_END);
+ CacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
+#endif
+
+ return 0;
+}
+
+
+#ifndef SPEAR
+/////////////////////
+//
+// DRAW NEW EPISODE MENU
+//
+void
+DrawNewEpisode (void)
+{
+ int i;
+
+#ifdef JAPAN
+ CA_CacheScreen (S_EPISODEPIC);
+#else
+ ClearMScreen ();
+ VWB_DrawPic (112, 184, C_MOUSELBACKPIC);
+
+ DrawWindow (NE_X - 4, NE_Y - 4, NE_W + 8, NE_H + 8, BKGDCOLOR);
+ SETFONTCOLOR (READHCOLOR, BKGDCOLOR);
+ PrintY = 2;
+ WindowX = 0;
+#ifdef SPANISH
+ US_CPrint ("Cual episodio jugar?");
+#else
+ US_CPrint ("Which episode to play?");
+#endif
+#endif
+
+ SETFONTCOLOR (TEXTCOLOR, BKGDCOLOR);
+ DrawMenu (&NewEitems, &NewEmenu[0]);
+
+ for (i = 0; i < 6; i++)
+ VWB_DrawPic (NE_X + 32, NE_Y + i * 26, C_EPISODE1PIC + i);
+
+ VW_UpdateScreen ();
+ MenuFadeIn ();
+ WaitKeyUp ();
+}
+#endif
+
+/////////////////////
+//
+// DRAW NEW GAME MENU
+//
+void
+DrawNewGame (void)
+{
+#ifdef JAPAN
+ CA_CacheScreen (S_SKILLPIC);
+#else
+ ClearMScreen ();
+ VWB_DrawPic (112, 184, C_MOUSELBACKPIC);
+
+ SETFONTCOLOR (READHCOLOR, BKGDCOLOR);
+ PrintX = NM_X + 20;
+ PrintY = NM_Y - 32;
+
+#ifndef SPEAR
+#ifdef SPANISH
+ US_Print ("Eres macho?");
+#else
+ US_Print ("How tough are you?");
+#endif
+#else
+ VWB_DrawPic (PrintX, PrintY, C_HOWTOUGHPIC);
+#endif
+
+ DrawWindow (NM_X - 5, NM_Y - 10, NM_W, NM_H, BKGDCOLOR);
+#endif
+
+ DrawMenu (&NewItems, &NewMenu[0]);
+ DrawNewGameDiff (NewItems.curpos);
+ VW_UpdateScreen ();
+ MenuFadeIn ();
+ WaitKeyUp ();
+}
+
+
+////////////////////////
+//
+// DRAW NEW GAME GRAPHIC
+//
+void
+DrawNewGameDiff (int w)
+{
+ VWB_DrawPic (NM_X + 185, NM_Y + 7, w + C_BABYMODEPIC);
+}
+
+
+////////////////////////////////////////////////////////////////////
+//
+// HANDLE SOUND MENU
+//
+////////////////////////////////////////////////////////////////////
+int
+CP_Sound (int a)
+{
+ int which;
+
+
+#ifdef SPEAR
+ UnCacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
+ CacheLump (SOUND_LUMP_START, SOUND_LUMP_END);
+#endif
+
+ DrawSoundMenu ();
+ MenuFadeIn ();
+ WaitKeyUp ();
+
+ do
+ {
+ which = HandleMenu (&SndItems, &SndMenu[0], NULL);
+ //
+ // HANDLE MENU CHOICES
+ //
+ switch (which)
+ {
+ //
+ // SOUND EFFECTS
+ //
+ case 0:
+ if (SoundMode != sdm_Off)
+ {
+ SD_WaitSoundDone ();
+ SD_SetSoundMode (sdm_Off);
+ DrawSoundMenu ();
+ }
+ break;
+ case 1:
+ if (SoundMode != sdm_PC)
+ {
+ SD_WaitSoundDone ();
+ SD_SetSoundMode (sdm_PC);
+ CA_LoadAllSounds ();
+ DrawSoundMenu ();
+ ShootSnd ();
+ }
+ break;
+ case 2:
+ if (SoundMode != sdm_AdLib)
+ {
+ SD_WaitSoundDone ();
+ SD_SetSoundMode (sdm_AdLib);
+ CA_LoadAllSounds ();
+ DrawSoundMenu ();
+ ShootSnd ();
+ }
+ break;
+
+ //
+ // DIGITIZED SOUND
+ //
+ case 5:
+ if (DigiMode != sds_Off)
+ {
+ SD_SetDigiDevice (sds_Off);
+ DrawSoundMenu ();
+ }
+ break;
+ case 6:
+/* if (DigiMode != sds_SoundSource)
+ {
+ SD_SetDigiDevice (sds_SoundSource);
+ DrawSoundMenu ();
+ ShootSnd ();
+ }*/
+ break;
+ case 7:
+ if (DigiMode != sds_SoundBlaster)
+ {
+ SD_SetDigiDevice (sds_SoundBlaster);
+ DrawSoundMenu ();
+ ShootSnd ();
+ }
+ break;
+
+ //
+ // MUSIC
+ //
+ case 10:
+ if (MusicMode != smm_Off)
+ {
+ SD_SetMusicMode (smm_Off);
+ DrawSoundMenu ();
+ ShootSnd ();
+ }
+ break;
+ case 11:
+ if (MusicMode != smm_AdLib)
+ {
+ SD_SetMusicMode (smm_AdLib);
+ DrawSoundMenu ();
+ ShootSnd ();
+ StartCPMusic (MENUSONG);
+ }
+ break;
+ }
+ }
+ while (which >= 0);
+
+ MenuFadeOut ();
+
+#ifdef SPEAR
+ UnCacheLump (SOUND_LUMP_START, SOUND_LUMP_END);
+ CacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
+#endif
+ return 0;
+}
+
+
+//////////////////////
+//
+// DRAW THE SOUND MENU
+//
+void
+DrawSoundMenu (void)
+{
+ int i, on;
+
+
+#ifdef JAPAN
+ CA_CacheScreen (S_SOUNDPIC);
+#else
+ //
+ // DRAW SOUND MENU
+ //
+ ClearMScreen ();
+ VWB_DrawPic (112, 184, C_MOUSELBACKPIC);
+
+ DrawWindow (SM_X - 8, SM_Y1 - 3, SM_W, SM_H1, BKGDCOLOR);
+ DrawWindow (SM_X - 8, SM_Y2 - 3, SM_W, SM_H2, BKGDCOLOR);
+ DrawWindow (SM_X - 8, SM_Y3 - 3, SM_W, SM_H3, BKGDCOLOR);
+#endif
+
+ //
+ // IF NO ADLIB, NON-CHOOSENESS!
+ //
+ if (!AdLibPresent && !SoundBlasterPresent)
+ {
+ SndMenu[2].active = SndMenu[10].active = SndMenu[11].active = 0;
+ }
+
+ if (!SoundBlasterPresent)
+ SndMenu[7].active = 0;
+
+ if (!SoundBlasterPresent)
+ SndMenu[5].active = 0;
+
+ DrawMenu (&SndItems, &SndMenu[0]);
+#ifndef JAPAN
+ VWB_DrawPic (100, SM_Y1 - 20, C_FXTITLEPIC);
+ VWB_DrawPic (100, SM_Y2 - 20, C_DIGITITLEPIC);
+ VWB_DrawPic (100, SM_Y3 - 20, C_MUSICTITLEPIC);
+#endif
+
+ for (i = 0; i < SndItems.amount; i++)
+#ifdef JAPAN
+ if (i != 3 && i != 4 && i != 8 && i != 9)
+#else
+ if (SndMenu[i].string[0])
+#endif
+ {
+ //
+ // DRAW SELECTED/NOT SELECTED GRAPHIC BUTTONS
+ //
+ on = 0;
+ switch (i)
+ {
+ //
+ // SOUND EFFECTS
+ //
+ case 0:
+ if (SoundMode == sdm_Off)
+ on = 1;
+ break;
+ case 1:
+ if (SoundMode == sdm_PC)
+ on = 1;
+ break;
+ case 2:
+ if (SoundMode == sdm_AdLib)
+ on = 1;
+ break;
+
+ //
+ // DIGITIZED SOUND
+ //
+ case 5:
+ if (DigiMode == sds_Off)
+ on = 1;
+ break;
+ case 6:
+// if (DigiMode == sds_SoundSource)
+// on = 1;
+ break;
+ case 7:
+ if (DigiMode == sds_SoundBlaster)
+ on = 1;
+ break;
+
+ //
+ // MUSIC
+ //
+ case 10:
+ if (MusicMode == smm_Off)
+ on = 1;
+ break;
+ case 11:
+ if (MusicMode == smm_AdLib)
+ on = 1;
+ break;
+ }
+
+ if (on)
+ VWB_DrawPic (SM_X + 24, SM_Y1 + i * 13 + 2, C_SELECTEDPIC);
+ else
+ VWB_DrawPic (SM_X + 24, SM_Y1 + i * 13 + 2, C_NOTSELECTEDPIC);
+ }
+
+ DrawMenuGun (&SndItems);
+ VW_UpdateScreen ();
+}
+
+
+//
+// DRAW LOAD/SAVE IN PROGRESS
+//
+void
+DrawLSAction (int which)
+{
+#define LSA_X 96
+#define LSA_Y 80
+#define LSA_W 130
+#define LSA_H 42
+
+ DrawWindow (LSA_X, LSA_Y, LSA_W, LSA_H, TEXTCOLOR);
+ DrawOutline (LSA_X, LSA_Y, LSA_W, LSA_H, 0, HIGHLIGHT);
+ VWB_DrawPic (LSA_X + 8, LSA_Y + 5, C_DISKLOADING1PIC);
+
+ fontnumber = 1;
+ SETFONTCOLOR (0, TEXTCOLOR);
+ PrintX = LSA_X + 46;
+ PrintY = LSA_Y + 13;
+
+ if (!which)
+ US_Print (STR_LOADING "...");
+ else
+ US_Print (STR_SAVING "...");
+
+ VW_UpdateScreen ();
+}
+
+
+////////////////////////////////////////////////////////////////////
+//
+// LOAD SAVED GAMES
+//
+////////////////////////////////////////////////////////////////////
+int
+CP_LoadGame (int quick)
+{
+ FILE *file;
+ int which, exit = 0;
+ char name[13];
+ char loadpath[300];
+
+ strcpy (name, SaveName);
+
+ //
+ // QUICKLOAD?
+ //
+ if (quick)
+ {
+ which = LSItems.curpos;
+
+ if (SaveGamesAvail[which])
+ {
+ name[7] = which + '0';
+
+#ifdef _arch_dreamcast
+ DC_LoadFromVMU(name);
+#endif
+
+ if(configdir[0])
+ snprintf(loadpath, sizeof(loadpath), "%s/%s", configdir, name);
+ else
+ strcpy(loadpath, name);
+
+ file = fopen (loadpath, "rb");
+ fseek (file, 32, SEEK_SET);
+ loadedgame = true;
+ LoadTheGame (file, 0, 0);
+ loadedgame = false;
+ fclose (file);
+
+ DrawFace ();
+ DrawHealth ();
+ DrawLives ();
+ DrawLevel ();
+ DrawAmmo ();
+ DrawKeys ();
+ DrawWeapon ();
+ DrawScore ();
+ ContinueMusic (lastgamemusicoffset);
+ return 1;
+ }
+ }
+
+
+#ifdef SPEAR
+ UnCacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
+ CacheLump (LOADSAVE_LUMP_START, LOADSAVE_LUMP_END);
+#endif
+
+ DrawLoadSaveScreen (0);
+
+ do
+ {
+ which = HandleMenu (&LSItems, &LSMenu[0], TrackWhichGame);
+ if (which >= 0 && SaveGamesAvail[which])
+ {
+ ShootSnd ();
+ name[7] = which + '0';
+
+#ifdef _arch_dreamcast
+ DC_LoadFromVMU(name);
+#endif
+
+ if(configdir[0])
+ snprintf(loadpath, sizeof(loadpath), "%s/%s", configdir, name);
+ else
+ strcpy(loadpath, name);
+
+ file = fopen (loadpath, "rb");
+ fseek (file, 32, SEEK_SET);
+
+ DrawLSAction (0);
+ loadedgame = true;
+
+ LoadTheGame (file, LSA_X + 8, LSA_Y + 5);
+ fclose (file);
+
+ StartGame = 1;
+ ShootSnd ();
+ //
+ // CHANGE "READ THIS!" TO NORMAL COLOR
+ //
+
+#ifndef SPEAR
+#ifndef GOODTIMES
+ MainMenu[readthis].active = 1;
+#endif
+#endif
+
+ exit = 1;
+ break;
+ }
+
+ }
+ while (which >= 0);
+
+ MenuFadeOut ();
+
+#ifdef SPEAR
+ UnCacheLump (LOADSAVE_LUMP_START, LOADSAVE_LUMP_END);
+ CacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
+#endif
+
+ return exit;
+}
+
+
+///////////////////////////////////
+//
+// HIGHLIGHT CURRENT SELECTED ENTRY
+//
+void
+TrackWhichGame (int w)
+{
+ static int lastgameon = 0;
+
+ PrintLSEntry (lastgameon, TEXTCOLOR);
+ PrintLSEntry (w, HIGHLIGHT);
+
+ lastgameon = w;
+}
+
+
+////////////////////////////
+//
+// DRAW THE LOAD/SAVE SCREEN
+//
+void
+DrawLoadSaveScreen (int loadsave)
+{
+#define DISKX 100
+#define DISKY 0
+
+ int i;
+
+
+ ClearMScreen ();
+ fontnumber = 1;
+ VWB_DrawPic (112, 184, C_MOUSELBACKPIC);
+ DrawWindow (LSM_X - 10, LSM_Y - 5, LSM_W, LSM_H, BKGDCOLOR);
+ DrawStripes (10);
+
+ if (!loadsave)
+ VWB_DrawPic (60, 0, C_LOADGAMEPIC);
+ else
+ VWB_DrawPic (60, 0, C_SAVEGAMEPIC);
+
+ for (i = 0; i < 10; i++)
+ PrintLSEntry (i, TEXTCOLOR);
+
+ DrawMenu (&LSItems, &LSMenu[0]);
+ VW_UpdateScreen ();
+ MenuFadeIn ();
+ WaitKeyUp ();
+}
+
+
+///////////////////////////////////////////
+//
+// PRINT LOAD/SAVE GAME ENTRY W/BOX OUTLINE
+//
+void
+PrintLSEntry (int w, int color)
+{
+ SETFONTCOLOR (color, BKGDCOLOR);
+ DrawOutline (LSM_X + LSItems.indent, LSM_Y + w * 13, LSM_W - LSItems.indent - 15, 11, color,
+ color);
+ PrintX = LSM_X + LSItems.indent + 2;
+ PrintY = LSM_Y + w * 13 + 1;
+ fontnumber = 0;
+
+ if (SaveGamesAvail[w])
+ US_Print (SaveGameNames[w]);
+ else
+ US_Print (" - " STR_EMPTY " -");
+
+ fontnumber = 1;
+}
+
+
+////////////////////////////////////////////////////////////////////
+//
+// SAVE CURRENT GAME
+//
+////////////////////////////////////////////////////////////////////
+int
+CP_SaveGame (int quick)
+{
+ int which, exit = 0;
+ FILE *file;
+ char name[13];
+ char savepath[300];
+ char input[32];
+
+ strcpy (name, SaveName);
+
+ //
+ // QUICKSAVE?
+ //
+ if (quick)
+ {
+ which = LSItems.curpos;
+
+ if (SaveGamesAvail[which])
+ {
+ name[7] = which + '0';
+
+ if(configdir[0])
+ snprintf(savepath, sizeof(savepath), "%s/%s", configdir, name);
+ else
+ strcpy(savepath, name);
+
+ unlink (savepath);
+ file = fopen (savepath, "wb");
+
+ strcpy (input, &SaveGameNames[which][0]);
+
+ fwrite (input, 1, 32, file);
+ fseek (file, 32, SEEK_SET);
+ SaveTheGame (file, 0, 0);
+ fclose (file);
+
+#ifdef _arch_dreamcast
+ DC_SaveToVMU(name, input);
+#endif
+
+ return 1;
+ }
+ }
+
+
+#ifdef SPEAR
+ UnCacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
+ CacheLump (LOADSAVE_LUMP_START, LOADSAVE_LUMP_END);
+#endif
+
+ DrawLoadSaveScreen (1);
+
+ do
+ {
+ which = HandleMenu (&LSItems, &LSMenu[0], TrackWhichGame);
+ if (which >= 0)
+ {
+ //
+ // OVERWRITE EXISTING SAVEGAME?
+ //
+ if (SaveGamesAvail[which])
+ {
+#ifdef JAPAN
+ if (!GetYorN (7, 8, C_JAPSAVEOVERPIC))
+#else
+ if (!Confirm (GAMESVD))
+#endif
+ {
+ DrawLoadSaveScreen (1);
+ continue;
+ }
+ else
+ {
+ DrawLoadSaveScreen (1);
+ PrintLSEntry (which, HIGHLIGHT);
+ VW_UpdateScreen ();
+ }
+ }
+
+ ShootSnd ();
+
+ strcpy (input, &SaveGameNames[which][0]);
+ name[7] = which + '0';
+
+ fontnumber = 0;
+ if (!SaveGamesAvail[which])
+ VWB_Bar (LSM_X + LSItems.indent + 1, LSM_Y + which * 13 + 1,
+ LSM_W - LSItems.indent - 16, 10, BKGDCOLOR);
+ VW_UpdateScreen ();
+
+ if (US_LineInput
+ (LSM_X + LSItems.indent + 2, LSM_Y + which * 13 + 1, input, input, true, 31,
+ LSM_W - LSItems.indent - 30))
+ {
+ SaveGamesAvail[which] = 1;
+ strcpy (&SaveGameNames[which][0], input);
+
+ if(configdir[0])
+ snprintf(savepath, sizeof(savepath), "%s/%s", configdir, name);
+ else
+ strcpy(savepath, name);
+
+ unlink (savepath);
+ file = fopen (savepath, "wb");
+ fwrite (input, 32, 1, file);
+ fseek (file, 32, SEEK_SET);
+
+ DrawLSAction (1);
+ SaveTheGame (file, LSA_X + 8, LSA_Y + 5);
+
+ fclose (file);
+
+#ifdef _arch_dreamcast
+ DC_SaveToVMU(name, input);
+#endif
+
+ ShootSnd ();
+ exit = 1;
+ }
+ else
+ {
+ VWB_Bar (LSM_X + LSItems.indent + 1, LSM_Y + which * 13 + 1,
+ LSM_W - LSItems.indent - 16, 10, BKGDCOLOR);
+ PrintLSEntry (which, HIGHLIGHT);
+ VW_UpdateScreen ();
+ SD_PlaySound (ESCPRESSEDSND);
+ continue;
+ }
+
+ fontnumber = 1;
+ break;
+ }
+
+ }
+ while (which >= 0);
+
+ MenuFadeOut ();
+
+#ifdef SPEAR
+ UnCacheLump (LOADSAVE_LUMP_START, LOADSAVE_LUMP_END);
+ CacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
+#endif
+
+ return exit;
+}
+
+////////////////////////////////////////////////////////////////////
+//
+// DEFINE CONTROLS
+//
+////////////////////////////////////////////////////////////////////
+int
+CP_Control (int a)
+{
+ int which;
+
+#ifdef SPEAR
+ UnCacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
+ CacheLump (CONTROL_LUMP_START, CONTROL_LUMP_END);
+#endif
+
+ DrawCtlScreen ();
+ MenuFadeIn ();
+ WaitKeyUp ();
+
+ do
+ {
+ which = HandleMenu (&CtlItems, CtlMenu, NULL);
+ switch (which)
+ {
+ case CTL_MOUSEENABLE:
+ mouseenabled ^= 1;
+ if(IN_IsInputGrabbed())
+ IN_CenterMouse();
+ DrawCtlScreen ();
+ CusItems.curpos = -1;
+ ShootSnd ();
+ break;
+
+ case CTL_JOYENABLE:
+ joystickenabled ^= 1;
+ DrawCtlScreen ();
+ CusItems.curpos = -1;
+ ShootSnd ();
+ break;
+
+ case CTL_MOUSESENS:
+ case CTL_CUSTOMIZE:
+ DrawCtlScreen ();
+ MenuFadeIn ();
+ WaitKeyUp ();
+ break;
+ }
+ }
+ while (which >= 0);
+
+ MenuFadeOut ();
+
+#ifdef SPEAR
+ UnCacheLump (CONTROL_LUMP_START, CONTROL_LUMP_END);
+ CacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
+#endif
+ return 0;
+}
+
+
+////////////////////////////////
+//
+// DRAW MOUSE SENSITIVITY SCREEN
+//
+void
+DrawMouseSens (void)
+{
+#ifdef JAPAN
+ CA_CacheScreen (S_MOUSESENSPIC);
+#else
+ ClearMScreen ();
+ VWB_DrawPic (112, 184, C_MOUSELBACKPIC);
+#ifdef SPANISH
+ DrawWindow (10, 80, 300, 43, BKGDCOLOR);
+#else
+ DrawWindow (10, 80, 300, 30, BKGDCOLOR);
+#endif
+
+ WindowX = 0;
+ WindowW = 320;
+ PrintY = 82;
+ SETFONTCOLOR (READCOLOR, BKGDCOLOR);
+ US_CPrint (STR_MOUSEADJ);
+
+ SETFONTCOLOR (TEXTCOLOR, BKGDCOLOR);
+#ifdef SPANISH
+ PrintX = 14;
+ PrintY = 95 + 13;
+ US_Print (STR_SLOW);
+ PrintX = 252;
+ US_Print (STR_FAST);
+#else
+ PrintX = 14;
+ PrintY = 95;
+ US_Print (STR_SLOW);
+ PrintX = 269;
+ US_Print (STR_FAST);
+#endif
+#endif
+
+ VWB_Bar (60, 97, 200, 10, TEXTCOLOR);
+ DrawOutline (60, 97, 200, 10, 0, HIGHLIGHT);
+ DrawOutline (60 + 20 * mouseadjustment, 97, 20, 10, 0, READCOLOR);
+ VWB_Bar (61 + 20 * mouseadjustment, 98, 19, 9, READHCOLOR);
+
+ VW_UpdateScreen ();
+ MenuFadeIn ();
+}
+
+
+///////////////////////////
+//
+// ADJUST MOUSE SENSITIVITY
+//
+int
+MouseSensitivity (int a)
+{
+ ControlInfo ci;
+ int exit = 0, oldMA;
+
+
+ oldMA = mouseadjustment;
+ DrawMouseSens ();
+ do
+ {
+ SDL_Delay(5);
+ ReadAnyControl (&ci);
+ switch (ci.dir)
+ {
+ case dir_North:
+ case dir_West:
+ if (mouseadjustment)
+ {
+ mouseadjustment--;
+ VWB_Bar (60, 97, 200, 10, TEXTCOLOR);
+ DrawOutline (60, 97, 200, 10, 0, HIGHLIGHT);
+ DrawOutline (60 + 20 * mouseadjustment, 97, 20, 10, 0, READCOLOR);
+ VWB_Bar (61 + 20 * mouseadjustment, 98, 19, 9, READHCOLOR);
+ VW_UpdateScreen ();
+ SD_PlaySound (MOVEGUN1SND);
+ TicDelay(20);
+ }
+ break;
+
+ case dir_South:
+ case dir_East:
+ if (mouseadjustment < 9)
+ {
+ mouseadjustment++;
+ VWB_Bar (60, 97, 200, 10, TEXTCOLOR);
+ DrawOutline (60, 97, 200, 10, 0, HIGHLIGHT);
+ DrawOutline (60 + 20 * mouseadjustment, 97, 20, 10, 0, READCOLOR);
+ VWB_Bar (61 + 20 * mouseadjustment, 98, 19, 9, READHCOLOR);
+ VW_UpdateScreen ();
+ SD_PlaySound (MOVEGUN1SND);
+ TicDelay(20);
+ }
+ break;
+ }
+
+ if (ci.button0 || Keyboard[sc_Space] || Keyboard[sc_Enter])
+ exit = 1;
+ else if (ci.button1 || Keyboard[sc_Escape])
+ exit = 2;
+
+ }
+ while (!exit);
+
+ if (exit == 2)
+ {
+ mouseadjustment = oldMA;
+ SD_PlaySound (ESCPRESSEDSND);
+ }
+ else
+ SD_PlaySound (SHOOTSND);
+
+ WaitKeyUp ();
+ MenuFadeOut ();
+
+ return 0;
+}
+
+
+///////////////////////////
+//
+// DRAW CONTROL MENU SCREEN
+//
+void
+DrawCtlScreen (void)
+{
+ int i, x, y;
+
+#ifdef JAPAN
+ CA_CacheScreen (S_CONTROLPIC);
+#else
+ ClearMScreen ();
+ DrawStripes (10);
+ VWB_DrawPic (80, 0, C_CONTROLPIC);
+ VWB_DrawPic (112, 184, C_MOUSELBACKPIC);
+ DrawWindow (CTL_X - 8, CTL_Y - 5, CTL_W, CTL_H, BKGDCOLOR);
+#endif
+ WindowX = 0;
+ WindowW = 320;
+ SETFONTCOLOR (TEXTCOLOR, BKGDCOLOR);
+
+ if (IN_JoyPresent())
+ CtlMenu[CTL_JOYENABLE].active = 1;
+
+ if (MousePresent)
+ {
+ CtlMenu[CTL_MOUSESENS].active = CtlMenu[CTL_MOUSEENABLE].active = 1;
+ }
+
+ CtlMenu[CTL_MOUSESENS].active = mouseenabled;
+
+
+ DrawMenu (&CtlItems, CtlMenu);
+
+
+ x = CTL_X + CtlItems.indent - 24;
+ y = CTL_Y + 3;
+ if (mouseenabled)
+ VWB_DrawPic (x, y, C_SELECTEDPIC);
+ else
+ VWB_DrawPic (x, y, C_NOTSELECTEDPIC);
+
+ y = CTL_Y + 29;
+ if (joystickenabled)
+ VWB_DrawPic (x, y, C_SELECTEDPIC);
+ else
+ VWB_DrawPic (x, y, C_NOTSELECTEDPIC);
+
+ //
+ // PICK FIRST AVAILABLE SPOT
+ //
+ if (CtlItems.curpos < 0 || !CtlMenu[CtlItems.curpos].active)
+ {
+ for (i = 0; i < CtlItems.amount; i++)
+ {
+ if (CtlMenu[i].active)
+ {
+ CtlItems.curpos = i;
+ break;
+ }
+ }
+ }
+
+ DrawMenuGun (&CtlItems);
+ VW_UpdateScreen ();
+}
+
+
+////////////////////////////////////////////////////////////////////
+//
+// CUSTOMIZE CONTROLS
+//
+////////////////////////////////////////////////////////////////////
+enum
+{ FIRE, STRAFE, RUN, OPEN };
+char mbarray[4][3] = { "b0", "b1", "b2", "b3" };
+int8_t order[4] = { RUN, OPEN, FIRE, STRAFE };
+
+
+int
+CustomControls (int a)
+{
+ int which;
+
+ DrawCustomScreen ();
+ do
+ {
+ which = HandleMenu (&CusItems, &CusMenu[0], FixupCustom);
+ switch (which)
+ {
+ case 0:
+ DefineMouseBtns ();
+ DrawCustMouse (1);
+ break;
+ case 3:
+ DefineJoyBtns ();
+ DrawCustJoy (0);
+ break;
+ case 6:
+ DefineKeyBtns ();
+ DrawCustKeybd (0);
+ break;
+ case 8:
+ DefineKeyMove ();
+ DrawCustKeys (0);
+ }
+ }
+ while (which >= 0);
+
+ MenuFadeOut ();
+
+ return 0;
+}
+
+
+////////////////////////
+//
+// DEFINE THE MOUSE BUTTONS
+//
+void
+DefineMouseBtns (void)
+{
+ CustomCtrls mouseallowed = { 0, 1, 1, 1 };
+ EnterCtrlData (2, &mouseallowed, DrawCustMouse, PrintCustMouse, MOUSE);
+}
+
+
+////////////////////////
+//
+// DEFINE THE JOYSTICK BUTTONS
+//
+void
+DefineJoyBtns (void)
+{
+ CustomCtrls joyallowed = { 1, 1, 1, 1 };
+ EnterCtrlData (5, &joyallowed, DrawCustJoy, PrintCustJoy, JOYSTICK);
+}
+
+
+////////////////////////
+//
+// DEFINE THE KEYBOARD BUTTONS
+//
+void
+DefineKeyBtns (void)
+{
+ CustomCtrls keyallowed = { 1, 1, 1, 1 };
+ EnterCtrlData (8, &keyallowed, DrawCustKeybd, PrintCustKeybd, KEYBOARDBTNS);
+}
+
+
+////////////////////////
+//
+// DEFINE THE KEYBOARD BUTTONS
+//
+void
+DefineKeyMove (void)
+{
+ CustomCtrls keyallowed = { 1, 1, 1, 1 };
+ EnterCtrlData (10, &keyallowed, DrawCustKeys, PrintCustKeys, KEYBOARDMOVE);
+}
+
+
+////////////////////////
+//
+// ENTER CONTROL DATA FOR ANY TYPE OF CONTROL
+//
+enum
+{ FWRD, RIGHT, BKWD, LEFT };
+int moveorder[4] = { LEFT, RIGHT, FWRD, BKWD };
+
+void
+EnterCtrlData (int index, CustomCtrls * cust, void (*DrawRtn) (int), void (*PrintRtn) (int),
+ int type)
+{
+ int j, exit, tick, redraw, which, x, picked, lastFlashTime;
+ ControlInfo ci;
+
+
+ ShootSnd ();
+ PrintY = CST_Y + 13 * index;
+ IN_ClearKeysDown ();
+ exit = 0;
+ redraw = 1;
+ //
+ // FIND FIRST SPOT IN ALLOWED ARRAY
+ //
+ for (j = 0; j < 4; j++)
+ if (cust->allowed[j])
+ {
+ which = j;
+ break;
+ }
+
+ do
+ {
+ if (redraw)
+ {
+ x = CST_START + CST_SPC * which;
+ DrawWindow (5, PrintY - 1, 310, 13, BKGDCOLOR);
+
+ DrawRtn (1);
+ DrawWindow (x - 2, PrintY, CST_SPC, 11, TEXTCOLOR);
+ DrawOutline (x - 2, PrintY, CST_SPC, 11, 0, HIGHLIGHT);
+ SETFONTCOLOR (0, TEXTCOLOR);
+ PrintRtn (which);
+ PrintX = x;
+ SETFONTCOLOR (TEXTCOLOR, BKGDCOLOR);
+ VW_UpdateScreen ();
+ WaitKeyUp ();
+ redraw = 0;
+ }
+
+ SDL_Delay(5);
+ ReadAnyControl (&ci);
+
+ if (type == MOUSE || type == JOYSTICK)
+ if (IN_KeyDown (sc_Enter) || IN_KeyDown (sc_Control) || IN_KeyDown (sc_Alt))
+ {
+ IN_ClearKeysDown ();
+ ci.button0 = ci.button1 = false;
+ }
+
+ //
+ // CHANGE BUTTON VALUE?
+ //
+ if ((type != KEYBOARDBTNS && type != KEYBOARDMOVE) && (ci.button0 | ci.button1 | ci.button2 | ci.button3) ||
+ ((type == KEYBOARDBTNS || type == KEYBOARDMOVE) && LastScan == sc_Enter))
+ {
+ lastFlashTime = GetTimeCount();
+ tick = picked = 0;
+ SETFONTCOLOR (0, TEXTCOLOR);
+
+ if (type == KEYBOARDBTNS || type == KEYBOARDMOVE)
+ IN_ClearKeysDown ();
+
+ while(1)
+ {
+ int button, result = 0;
+
+ //
+ // FLASH CURSOR
+ //
+ if (GetTimeCount() - lastFlashTime > 10)
+ {
+ switch (tick)
+ {
+ case 0:
+ VWB_Bar (x, PrintY + 1, CST_SPC - 2, 10, TEXTCOLOR);
+ break;
+ case 1:
+ PrintX = x;
+ US_Print ("?");
+ SD_PlaySound (HITWALLSND);
+ }
+ tick ^= 1;
+ lastFlashTime = GetTimeCount();
+ VW_UpdateScreen ();
+ }
+ else SDL_Delay(5);
+
+ //
+ // WHICH TYPE OF INPUT DO WE PROCESS?
+ //
+ switch (type)
+ {
+ case MOUSE:
+ button = IN_MouseButtons();
+ switch (button)
+ {
+ case 1:
+ result = 1;
+ break;
+ case 2:
+ result = 2;
+ break;
+ case 4:
+ result = 3;
+ break;
+ }
+
+ if (result)
+ {
+ for (int z = 0; z < 4; z++)
+ if (order[which] == buttonmouse[z])
+ {
+ buttonmouse[z] = bt_nobutton;
+ break;
+ }
+
+ buttonmouse[result - 1] = order[which];
+ picked = 1;
+ SD_PlaySound (SHOOTDOORSND);
+ }
+ break;
+
+ case JOYSTICK:
+ if (ci.button0)
+ result = 1;
+ else if (ci.button1)
+ result = 2;
+ else if (ci.button2)
+ result = 3;
+ else if (ci.button3)
+ result = 4;
+
+ if (result)
+ {
+ for (int z = 0; z < 4; z++)
+ {
+ if (order[which] == buttonjoy[z])
+ {
+ buttonjoy[z] = bt_nobutton;
+ break;
+ }
+ }
+
+ buttonjoy[result - 1] = order[which];
+ picked = 1;
+ SD_PlaySound (SHOOTDOORSND);
+ }
+ break;
+
+ case KEYBOARDBTNS:
+ if (LastScan && LastScan != sc_Escape)
+ {
+ buttonscan[order[which]] = LastScan;
+ picked = 1;
+ ShootSnd ();
+ IN_ClearKeysDown ();
+ }
+ break;
+
+ case KEYBOARDMOVE:
+ if (LastScan && LastScan != sc_Escape)
+ {
+ dirscan[moveorder[which]] = LastScan;
+ picked = 1;
+ ShootSnd ();
+ IN_ClearKeysDown ();
+ }
+ break;
+ }
+
+ //
+ // EXIT INPUT?
+ //
+ if (IN_KeyDown (sc_Escape) || type != JOYSTICK && ci.button1)
+ {
+ picked = 1;
+ SD_PlaySound (ESCPRESSEDSND);
+ }
+
+ if(picked) break;
+
+ ReadAnyControl (&ci);
+ }
+
+ SETFONTCOLOR (TEXTCOLOR, BKGDCOLOR);
+ redraw = 1;
+ WaitKeyUp ();
+ continue;
+ }
+
+ if (ci.button1 || IN_KeyDown (sc_Escape))
+ exit = 1;
+
+ //
+ // MOVE TO ANOTHER SPOT?
+ //
+ switch (ci.dir)
+ {
+ case dir_West:
+ do
+ {
+ which--;
+ if (which < 0)
+ which = 3;
+ }
+ while (!cust->allowed[which]);
+ redraw = 1;
+ SD_PlaySound (MOVEGUN1SND);
+ while (ReadAnyControl (&ci), ci.dir != dir_None) SDL_Delay(5);
+ IN_ClearKeysDown ();
+ break;
+
+ case dir_East:
+ do
+ {
+ which++;
+ if (which > 3)
+ which = 0;
+ }
+ while (!cust->allowed[which]);
+ redraw = 1;
+ SD_PlaySound (MOVEGUN1SND);
+ while (ReadAnyControl (&ci), ci.dir != dir_None) SDL_Delay(5);
+ IN_ClearKeysDown ();
+ break;
+ case dir_North:
+ case dir_South:
+ exit = 1;
+ }
+ }
+ while (!exit);
+
+ SD_PlaySound (ESCPRESSEDSND);
+ WaitKeyUp ();
+ DrawWindow (5, PrintY - 1, 310, 13, BKGDCOLOR);
+}
+
+
+////////////////////////
+//
+// FIXUP GUN CURSOR OVERDRAW SHIT
+//
+void
+FixupCustom (int w)
+{
+ static int lastwhich = -1;
+ int y = CST_Y + 26 + w * 13;
+
+
+ VWB_Hlin (7, 32, y - 1, DEACTIVE);
+ VWB_Hlin (7, 32, y + 12, BORD2COLOR);
+#ifndef SPEAR
+ VWB_Hlin (7, 32, y - 2, BORDCOLOR);
+ VWB_Hlin (7, 32, y + 13, BORDCOLOR);
+#else
+ VWB_Hlin (7, 32, y - 2, BORD2COLOR);
+ VWB_Hlin (7, 32, y + 13, BORD2COLOR);
+#endif
+
+ switch (w)
+ {
+ case 0:
+ DrawCustMouse (1);
+ break;
+ case 3:
+ DrawCustJoy (1);
+ break;
+ case 6:
+ DrawCustKeybd (1);
+ break;
+ case 8:
+ DrawCustKeys (1);
+ }
+
+
+ if (lastwhich >= 0)
+ {
+ y = CST_Y + 26 + lastwhich * 13;
+ VWB_Hlin (7, 32, y - 1, DEACTIVE);
+ VWB_Hlin (7, 32, y + 12, BORD2COLOR);
+#ifndef SPEAR
+ VWB_Hlin (7, 32, y - 2, BORDCOLOR);
+ VWB_Hlin (7, 32, y + 13, BORDCOLOR);
+#else
+ VWB_Hlin (7, 32, y - 2, BORD2COLOR);
+ VWB_Hlin (7, 32, y + 13, BORD2COLOR);
+#endif
+
+ if (lastwhich != w)
+ switch (lastwhich)
+ {
+ case 0:
+ DrawCustMouse (0);
+ break;
+ case 3:
+ DrawCustJoy (0);
+ break;
+ case 6:
+ DrawCustKeybd (0);
+ break;
+ case 8:
+ DrawCustKeys (0);
+ }
+ }
+
+ lastwhich = w;
+}
+
+
+////////////////////////
+//
+// DRAW CUSTOMIZE SCREEN
+//
+void
+DrawCustomScreen (void)
+{
+ int i;
+
+
+#ifdef JAPAN
+ CA_CacheScreen (S_CUSTOMPIC);
+ fontnumber = 1;
+
+ PrintX = CST_START;
+ PrintY = CST_Y + 26;
+ DrawCustMouse (0);
+
+ PrintX = CST_START;
+ US_Print ("\n\n\n");
+ DrawCustJoy (0);
+
+ PrintX = CST_START;
+ US_Print ("\n\n\n");
+ DrawCustKeybd (0);
+
+ PrintX = CST_START;
+ US_Print ("\n\n\n");
+ DrawCustKeys (0);
+#else
+ ClearMScreen ();
+ WindowX = 0;
+ WindowW = 320;
+ VWB_DrawPic (112, 184, C_MOUSELBACKPIC);
+ DrawStripes (10);
+ VWB_DrawPic (80, 0, C_CUSTOMIZEPIC);
+
+ //
+ // MOUSE
+ //
+ SETFONTCOLOR (READCOLOR, BKGDCOLOR);
+ WindowX = 0;
+ WindowW = 320;
+
+#ifndef SPEAR
+ PrintY = CST_Y;
+ US_CPrint ("Mouse\n");
+#else
+ PrintY = CST_Y + 13;
+ VWB_DrawPic (128, 48, C_MOUSEPIC);
+#endif
+
+ SETFONTCOLOR (TEXTCOLOR, BKGDCOLOR);
+#ifdef SPANISH
+ PrintX = CST_START - 16;
+ US_Print (STR_CRUN);
+ PrintX = CST_START - 16 + CST_SPC * 1;
+ US_Print (STR_COPEN);
+ PrintX = CST_START - 16 + CST_SPC * 2;
+ US_Print (STR_CFIRE);
+ PrintX = CST_START - 16 + CST_SPC * 3;
+ US_Print (STR_CSTRAFE "\n");
+#else
+ PrintX = CST_START;
+ US_Print (STR_CRUN);
+ PrintX = CST_START + CST_SPC * 1;
+ US_Print (STR_COPEN);
+ PrintX = CST_START + CST_SPC * 2;
+ US_Print (STR_CFIRE);
+ PrintX = CST_START + CST_SPC * 3;
+ US_Print (STR_CSTRAFE "\n");
+#endif
+
+ DrawWindow (5, PrintY - 1, 310, 13, BKGDCOLOR);
+ DrawCustMouse (0);
+ US_Print ("\n");
+
+
+ //
+ // JOYSTICK/PAD
+ //
+#ifndef SPEAR
+ SETFONTCOLOR (READCOLOR, BKGDCOLOR);
+ US_CPrint ("Joystick/Gravis GamePad\n");
+#else
+ PrintY += 13;
+ VWB_DrawPic (40, 88, C_JOYSTICKPIC);
+#endif
+
+#ifdef SPEAR
+ VWB_DrawPic (112, 120, C_KEYBOARDPIC);
+#endif
+
+ SETFONTCOLOR (TEXTCOLOR, BKGDCOLOR);
+#ifdef SPANISH
+ PrintX = CST_START - 16;
+ US_Print (STR_CRUN);
+ PrintX = CST_START - 16 + CST_SPC * 1;
+ US_Print (STR_COPEN);
+ PrintX = CST_START - 16 + CST_SPC * 2;
+ US_Print (STR_CFIRE);
+ PrintX = CST_START - 16 + CST_SPC * 3;
+ US_Print (STR_CSTRAFE "\n");
+#else
+ PrintX = CST_START;
+ US_Print (STR_CRUN);
+ PrintX = CST_START + CST_SPC * 1;
+ US_Print (STR_COPEN);
+ PrintX = CST_START + CST_SPC * 2;
+ US_Print (STR_CFIRE);
+ PrintX = CST_START + CST_SPC * 3;
+ US_Print (STR_CSTRAFE "\n");
+#endif
+ DrawWindow (5, PrintY - 1, 310, 13, BKGDCOLOR);
+ DrawCustJoy (0);
+ US_Print ("\n");
+
+
+ //
+ // KEYBOARD
+ //
+#ifndef SPEAR
+ SETFONTCOLOR (READCOLOR, BKGDCOLOR);
+ US_CPrint ("Keyboard\n");
+#else
+ PrintY += 13;
+#endif
+ SETFONTCOLOR (TEXTCOLOR, BKGDCOLOR);
+#ifdef SPANISH
+ PrintX = CST_START - 16;
+ US_Print (STR_CRUN);
+ PrintX = CST_START - 16 + CST_SPC * 1;
+ US_Print (STR_COPEN);
+ PrintX = CST_START - 16 + CST_SPC * 2;
+ US_Print (STR_CFIRE);
+ PrintX = CST_START - 16 + CST_SPC * 3;
+ US_Print (STR_CSTRAFE "\n");
+#else
+ PrintX = CST_START;
+ US_Print (STR_CRUN);
+ PrintX = CST_START + CST_SPC * 1;
+ US_Print (STR_COPEN);
+ PrintX = CST_START + CST_SPC * 2;
+ US_Print (STR_CFIRE);
+ PrintX = CST_START + CST_SPC * 3;
+ US_Print (STR_CSTRAFE "\n");
+#endif
+ DrawWindow (5, PrintY - 1, 310, 13, BKGDCOLOR);
+ DrawCustKeybd (0);
+ US_Print ("\n");
+
+
+ //
+ // KEYBOARD MOVE KEYS
+ //
+ SETFONTCOLOR (TEXTCOLOR, BKGDCOLOR);
+#ifdef SPANISH
+ PrintX = 4;
+ US_Print (STR_LEFT);
+ US_Print ("/");
+ US_Print (STR_RIGHT);
+ US_Print ("/");
+ US_Print (STR_FRWD);
+ US_Print ("/");
+ US_Print (STR_BKWD "\n");
+#else
+ PrintX = CST_START;
+ US_Print (STR_LEFT);
+ PrintX = CST_START + CST_SPC * 1;
+ US_Print (STR_RIGHT);
+ PrintX = CST_START + CST_SPC * 2;
+ US_Print (STR_FRWD);
+ PrintX = CST_START + CST_SPC * 3;
+ US_Print (STR_BKWD "\n");
+#endif
+ DrawWindow (5, PrintY - 1, 310, 13, BKGDCOLOR);
+ DrawCustKeys (0);
+#endif
+ //
+ // PICK STARTING POINT IN MENU
+ //
+ if (CusItems.curpos < 0)
+ for (i = 0; i < CusItems.amount; i++)
+ if (CusMenu[i].active)
+ {
+ CusItems.curpos = i;
+ break;
+ }
+
+
+ VW_UpdateScreen ();
+ MenuFadeIn ();
+}
+
+
+void
+PrintCustMouse (int i)
+{
+ int j;
+
+ for (j = 0; j < 4; j++)
+ if (order[i] == buttonmouse[j])
+ {
+ PrintX = CST_START + CST_SPC * i;
+ US_Print (mbarray[j]);
+ break;
+ }
+}
+
+void
+DrawCustMouse (int hilight)
+{
+ int i, color;
+
+
+ color = TEXTCOLOR;
+ if (hilight)
+ color = HIGHLIGHT;
+ SETFONTCOLOR (color, BKGDCOLOR);
+
+ if (!mouseenabled)
+ {
+ SETFONTCOLOR (DEACTIVE, BKGDCOLOR);
+ CusMenu[0].active = 0;
+ }
+ else
+ CusMenu[0].active = 1;
+
+ PrintY = CST_Y + 13 * 2;
+ for (i = 0; i < 4; i++)
+ PrintCustMouse (i);
+}
+
+void
+PrintCustJoy (int i)
+{
+ for (int j = 0; j < 4; j++)
+ {
+ if (order[i] == buttonjoy[j])
+ {
+ PrintX = CST_START + CST_SPC * i;
+ US_Print (mbarray[j]);
+ break;
+ }
+ }
+}
+
+void
+DrawCustJoy (int hilight)
+{
+ int i, color;
+
+ color = TEXTCOLOR;
+ if (hilight)
+ color = HIGHLIGHT;
+ SETFONTCOLOR (color, BKGDCOLOR);
+
+ if (!joystickenabled)
+ {
+ SETFONTCOLOR (DEACTIVE, BKGDCOLOR);
+ CusMenu[3].active = 0;
+ }
+ else
+ CusMenu[3].active = 1;
+
+ PrintY = CST_Y + 13 * 5;
+ for (i = 0; i < 4; i++)
+ PrintCustJoy (i);
+}
+
+
+void
+PrintCustKeybd (int i)
+{
+ PrintX = CST_START + CST_SPC * i;
+ US_Print ((const char *) IN_GetScanName (buttonscan[order[i]]));
+}
+
+void
+DrawCustKeybd (int hilight)
+{
+ int i, color;
+
+
+ color = TEXTCOLOR;
+ if (hilight)
+ color = HIGHLIGHT;
+ SETFONTCOLOR (color, BKGDCOLOR);
+
+ PrintY = CST_Y + 13 * 8;
+ for (i = 0; i < 4; i++)
+ PrintCustKeybd (i);
+}
+
+void
+PrintCustKeys (int i)
+{
+ PrintX = CST_START + CST_SPC * i;
+ US_Print ((const char *) IN_GetScanName (dirscan[moveorder[i]]));
+}
+
+void
+DrawCustKeys (int hilight)
+{
+ int i, color;
+
+
+ color = TEXTCOLOR;
+ if (hilight)
+ color = HIGHLIGHT;
+ SETFONTCOLOR (color, BKGDCOLOR);
+
+ PrintY = CST_Y + 13 * 10;
+ for (i = 0; i < 4; i++)
+ PrintCustKeys (i);
+}
+
+
+////////////////////////////////////////////////////////////////////
+//
+// CHANGE SCREEN VIEWING SIZE
+//
+////////////////////////////////////////////////////////////////////
+int
+CP_ChangeView (int a)
+{
+ int exit = 0, oldview, newview;
+ ControlInfo ci;
+
+ WindowX = WindowY = 0;
+ WindowW = 320;
+ WindowH = 200;
+ newview = oldview = viewsize;
+ DrawChangeView (oldview);
+ MenuFadeIn ();
+
+ do
+ {
+ CheckPause ();
+ SDL_Delay(5);
+ ReadAnyControl (&ci);
+ switch (ci.dir)
+ {
+ case dir_South:
+ case dir_West:
+ newview--;
+ if (newview < 4)
+ newview = 4;
+ if(newview >= 19) DrawChangeView(newview);
+ else ShowViewSize (newview);
+ VW_UpdateScreen ();
+ SD_PlaySound (HITWALLSND);
+ TicDelay (10);
+ break;
+
+ case dir_North:
+ case dir_East:
+ newview++;
+ if (newview >= 21)
+ {
+ newview = 21;
+ DrawChangeView(newview);
+ }
+ else ShowViewSize (newview);
+ VW_UpdateScreen ();
+ SD_PlaySound (HITWALLSND);
+ TicDelay (10);
+ break;
+ }
+
+ if (ci.button0 || Keyboard[sc_Enter])
+ exit = 1;
+ else if (ci.button1 || Keyboard[sc_Escape])
+ {
+ SD_PlaySound (ESCPRESSEDSND);
+ MenuFadeOut ();
+ if(screenHeight % 200 != 0)
+ VL_ClearScreen(0);
+ return 0;
+ }
+ }
+ while (!exit);
+
+ if (oldview != newview)
+ {
+ SD_PlaySound (SHOOTSND);
+ Message (STR_THINK "...");
+ NewViewSize (newview);
+ }
+
+ ShootSnd ();
+ MenuFadeOut ();
+ if(screenHeight % 200 != 0)
+ VL_ClearScreen(0);
+
+ return 0;
+}
+
+
+/////////////////////////////
+//
+// DRAW THE CHANGEVIEW SCREEN
+//
+void
+DrawChangeView (int view)
+{
+ int rescaledHeight = screenHeight / scaleFactor;
+ if(view != 21) VWB_Bar (0, rescaledHeight - 40, 320, 40, bordercol);
+
+#ifdef JAPAN
+ CA_CacheScreen (S_CHANGEPIC);
+
+ ShowViewSize (view);
+#else
+ ShowViewSize (view);
+
+ PrintY = (screenHeight / scaleFactor) - 39;
+ WindowX = 0;
+ WindowY = 320; // TODO: Check this!
+ SETFONTCOLOR (HIGHLIGHT, BKGDCOLOR);
+
+ US_CPrint (STR_SIZE1 "\n");
+ US_CPrint (STR_SIZE2 "\n");
+ US_CPrint (STR_SIZE3);
+#endif
+ VW_UpdateScreen ();
+}
+
+
+////////////////////////////////////////////////////////////////////
+//
+// QUIT THIS INFERNAL GAME!
+//
+////////////////////////////////////////////////////////////////////
+int
+CP_Quit (int a)
+{
+#ifdef JAPAN
+ if (GetYorN (7, 11, C_QUITMSGPIC))
+#else
+
+#ifdef SPANISH
+ if (Confirm (ENDGAMESTR))
+#else
+ if (Confirm (endStrings[US_RndT () & 0x7 + (US_RndT () & 1)]))
+#endif
+
+#endif
+ {
+ VW_UpdateScreen ();
+ SD_MusicOff ();
+ SD_StopSound ();
+ MenuFadeOut ();
+ Quit (NULL);
+ }
+
+ DrawMainMenu ();
+ return 0;
+}
+
+
+////////////////////////////////////////////////////////////////////
+//
+// HANDLE INTRO SCREEN (SYSTEM CONFIG)
+//
+////////////////////////////////////////////////////////////////////
+void
+IntroScreen (void)
+{
+#ifdef SPEAR
+
+#define MAINCOLOR 0x4f
+#define EMSCOLOR 0x4f
+#define XMSCOLOR 0x4f
+
+#else
+
+#define MAINCOLOR 0x6c
+#define EMSCOLOR 0x6c // 0x4f
+#define XMSCOLOR 0x6c // 0x7f
+
+#endif
+#define FILLCOLOR 14
+
+// long memory;
+// long emshere,xmshere;
+ int i;
+/* int ems[10]={100,200,300,400,500,600,700,800,900,1000},
+ xms[10]={100,200,300,400,500,600,700,800,900,1000};
+ int main[10]={32,64,96,128,160,192,224,256,288,320};*/
+
+
+ //
+ // DRAW MAIN MEMORY
+ //
+#ifdef ABCAUS
+ memory = (1023l + mminfo.nearheap + mminfo.farheap) / 1024l;
+ for (i = 0; i < 10; i++)
+ if (memory >= main[i])
+ VWB_Bar (49, 163 - 8 * i, 6, 5, MAINCOLOR - i);
+
+ //
+ // DRAW EMS MEMORY
+ //
+ if (EMSPresent)
+ {
+ emshere = 4l * EMSPagesAvail;
+ for (i = 0; i < 10; i++)
+ if (emshere >= ems[i])
+ VWB_Bar (89, 163 - 8 * i, 6, 5, EMSCOLOR - i);
+ }
+
+ //
+ // DRAW XMS MEMORY
+ //
+ if (XMSPresent)
+ {
+ xmshere = 4l * XMSPagesAvail;
+ for (i = 0; i < 10; i++)
+ if (xmshere >= xms[i])
+ VWB_Bar (129, 163 - 8 * i, 6, 5, XMSCOLOR - i);
+ }
+#else
+ for (i = 0; i < 10; i++)
+ VWB_Bar (49, 163 - 8 * i, 6, 5, MAINCOLOR - i);
+ for (i = 0; i < 10; i++)
+ VWB_Bar (89, 163 - 8 * i, 6, 5, EMSCOLOR - i);
+ for (i = 0; i < 10; i++)
+ VWB_Bar (129, 163 - 8 * i, 6, 5, XMSCOLOR - i);
+#endif
+
+
+ //
+ // FILL BOXES
+ //
+ if (MousePresent)
+ VWB_Bar (164, 82, 12, 2, FILLCOLOR);
+
+ if (IN_JoyPresent())
+ VWB_Bar (164, 105, 12, 2, FILLCOLOR);
+
+ if (AdLibPresent && !SoundBlasterPresent)
+ VWB_Bar (164, 128, 12, 2, FILLCOLOR);
+
+ if (SoundBlasterPresent)
+ VWB_Bar (164, 151, 12, 2, FILLCOLOR);
+
+// if (SoundSourcePresent)
+// VWB_Bar (164, 174, 12, 2, FILLCOLOR);
+}
+
+
+////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////
+//
+// SUPPORT ROUTINES
+//
+////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////////////
+//
+// Clear Menu screens to dark red
+//
+////////////////////////////////////////////////////////////////////
+void
+ClearMScreen (void)
+{
+#ifndef SPEAR
+ VWB_Bar (0, 0, 320, 200, BORDCOLOR);
+#else
+ VWB_DrawPic (0, 0, C_BACKDROPPIC);
+#endif
+}
+
+
+////////////////////////////////////////////////////////////////////
+//
+// Un/Cache a LUMP of graphics
+//
+////////////////////////////////////////////////////////////////////
+void
+CacheLump (int lumpstart, int lumpend)
+{
+ int i;
+
+ for (i = lumpstart; i <= lumpend; i++)
+ CA_CacheGrChunk (i);
+}
+
+
+void
+UnCacheLump (int lumpstart, int lumpend)
+{
+ int i;
+
+ for (i = lumpstart; i <= lumpend; i++)
+ if (grsegs[i])
+ UNCACHEGRCHUNK (i);
+}
+
+
+////////////////////////////////////////////////////////////////////
+//
+// Draw a window for a menu
+//
+////////////////////////////////////////////////////////////////////
+void
+DrawWindow (int x, int y, int w, int h, int wcolor)
+{
+ VWB_Bar (x, y, w, h, wcolor);
+ DrawOutline (x, y, w, h, BORD2COLOR, DEACTIVE);
+}
+
+
+void
+DrawOutline (int x, int y, int w, int h, int color1, int color2)
+{
+ VWB_Hlin (x, x + w, y, color2);
+ VWB_Vlin (y, y + h, x, color2);
+ VWB_Hlin (x, x + w, y + h, color1);
+ VWB_Vlin (y, y + h, x + w, color1);
+}
+
+
+////////////////////////////////////////////////////////////////////
+//
+// Setup Control Panel stuff - graphics, etc.
+//
+////////////////////////////////////////////////////////////////////
+void
+SetupControlPanel (void)
+{
+ //
+ // CACHE GRAPHICS & SOUNDS
+ //
+ CA_CacheGrChunk (STARTFONT + 1);
+#ifndef SPEAR
+ CacheLump (CONTROLS_LUMP_START, CONTROLS_LUMP_END);
+#else
+ CacheLump (BACKDROP_LUMP_START, BACKDROP_LUMP_END);
+#endif
+
+ SETFONTCOLOR (TEXTCOLOR, BKGDCOLOR);
+ fontnumber = 1;
+ WindowH = 200;
+ if(screenHeight % 200 != 0)
+ VL_ClearScreen(0);
+
+ if (!ingame)
+ CA_LoadAllSounds ();
+ else
+ MainMenu[savegame].active = 1;
+
+ //
+ // CENTER MOUSE
+ //
+ if(IN_IsInputGrabbed())
+ IN_CenterMouse();
+}
+
+////////////////////////////////////////////////////////////////////
+//
+// SEE WHICH SAVE GAME FILES ARE AVAILABLE & READ STRING IN
+//
+////////////////////////////////////////////////////////////////////
+void SetupSaveGames()
+{
+ char name[13];
+ char savepath[300];
+
+ strcpy(name, SaveName);
+ for(int i = 0; i < 10; i++)
+ {
+ name[7] = '0' + i;
+#ifdef _arch_dreamcast
+ // Try to unpack file
+ if(DC_LoadFromVMU(name))
+ {
+#endif
+ if(configdir[0])
+ snprintf(savepath, sizeof(savepath), "%s/%s", configdir, name);
+ else
+ strcpy(savepath, name);
+
+ const int handle = open(savepath, O_RDONLY | O_BINARY);
+ if(handle >= 0)
+ {
+ char temp[32];
+
+ SaveGamesAvail[i] = 1;
+ read(handle, temp, 32);
+ close(handle);
+ strcpy(&SaveGameNames[i][0], temp);
+ }
+#ifdef _arch_dreamcast
+ // Remove unpacked version of file
+ fs_unlink(name);
+ }
+#endif
+ }
+}
+
+////////////////////////////////////////////////////////////////////
+//
+// Clean up all the Control Panel stuff
+//
+////////////////////////////////////////////////////////////////////
+void
+CleanupControlPanel (void)
+{
+#ifndef SPEAR
+ UnCacheLump (CONTROLS_LUMP_START, CONTROLS_LUMP_END);
+#else
+ UnCacheLump (BACKDROP_LUMP_START, BACKDROP_LUMP_END);
+#endif
+
+ fontnumber = 0;
+}
+
+
+////////////////////////////////////////////////////////////////////
+//
+// Handle moving gun around a menu
+//
+////////////////////////////////////////////////////////////////////
+int
+HandleMenu (CP_iteminfo * item_i, CP_itemtype * items, void (*routine) (int w))
+{
+ char key;
+ static int redrawitem = 1, lastitem = -1;
+ int i, x, y, basey, exit, which, shape;
+ int32_t lastBlinkTime, timer;
+ ControlInfo ci;
+
+
+ which = item_i->curpos;
+ x = item_i->x & -8;
+ basey = item_i->y - 2;
+ y = basey + which * 13;
+
+ VWB_DrawPic (x, y, C_CURSOR1PIC);
+ SetTextColor (items + which, 1);
+ if (redrawitem)
+ {
+ PrintX = item_i->x + item_i->indent;
+ PrintY = item_i->y + which * 13;
+ US_Print ((items + which)->string);
+ }
+ //
+ // CALL CUSTOM ROUTINE IF IT IS NEEDED
+ //
+ if (routine)
+ routine (which);
+ VW_UpdateScreen ();
+
+ shape = C_CURSOR1PIC;
+ timer = 8;
+ exit = 0;
+ lastBlinkTime = GetTimeCount ();
+ IN_ClearKeysDown ();
+
+
+ do
+ {
+ //
+ // CHANGE GUN SHAPE
+ //
+ if ((int32_t)GetTimeCount () - lastBlinkTime > timer)
+ {
+ lastBlinkTime = GetTimeCount ();
+ if (shape == C_CURSOR1PIC)
+ {
+ shape = C_CURSOR2PIC;
+ timer = 8;
+ }
+ else
+ {
+ shape = C_CURSOR1PIC;
+ timer = 70;
+ }
+ VWB_DrawPic (x, y, shape);
+ if (routine)
+ routine (which);
+ VW_UpdateScreen ();
+ }
+ else SDL_Delay(5);
+
+ CheckPause ();
+
+ //
+ // SEE IF ANY KEYS ARE PRESSED FOR INITIAL CHAR FINDING
+ //
+ key = LastASCII;
+ if (key)
+ {
+ int ok = 0;
+
+ if (key >= 'a')
+ key -= 'a' - 'A';
+
+ for (i = which + 1; i < item_i->amount; i++)
+ if ((items + i)->active && (items + i)->string[0] == key)
+ {
+ EraseGun (item_i, items, x, y, which);
+ which = i;
+ DrawGun (item_i, items, x, &y, which, basey, routine);
+ ok = 1;
+ IN_ClearKeysDown ();
+ break;
+ }
+
+ //
+ // DIDN'T FIND A MATCH FIRST TIME THRU. CHECK AGAIN.
+ //
+ if (!ok)
+ {
+ for (i = 0; i < which; i++)
+ if ((items + i)->active && (items + i)->string[0] == key)
+ {
+ EraseGun (item_i, items, x, y, which);
+ which = i;
+ DrawGun (item_i, items, x, &y, which, basey, routine);
+ IN_ClearKeysDown ();
+ break;
+ }
+ }
+ }
+
+ //
+ // GET INPUT
+ //
+ ReadAnyControl (&ci);
+ switch (ci.dir)
+ {
+ ////////////////////////////////////////////////
+ //
+ // MOVE UP
+ //
+ case dir_North:
+
+ EraseGun (item_i, items, x, y, which);
+
+ //
+ // ANIMATE HALF-STEP
+ //
+ if (which && (items + which - 1)->active)
+ {
+ y -= 6;
+ DrawHalfStep (x, y);
+ }
+
+ //
+ // MOVE TO NEXT AVAILABLE SPOT
+ //
+ do
+ {
+ if (!which)
+ which = item_i->amount - 1;
+ else
+ which--;
+ }
+ while (!(items + which)->active);
+
+ DrawGun (item_i, items, x, &y, which, basey, routine);
+ //
+ // WAIT FOR BUTTON-UP OR DELAY NEXT MOVE
+ //
+ TicDelay (20);
+ break;
+
+ ////////////////////////////////////////////////
+ //
+ // MOVE DOWN
+ //
+ case dir_South:
+
+ EraseGun (item_i, items, x, y, which);
+ //
+ // ANIMATE HALF-STEP
+ //
+ if (which != item_i->amount - 1 && (items + which + 1)->active)
+ {
+ y += 6;
+ DrawHalfStep (x, y);
+ }
+
+ do
+ {
+ if (which == item_i->amount - 1)
+ which = 0;
+ else
+ which++;
+ }
+ while (!(items + which)->active);
+
+ DrawGun (item_i, items, x, &y, which, basey, routine);
+
+ //
+ // WAIT FOR BUTTON-UP OR DELAY NEXT MOVE
+ //
+ TicDelay (20);
+ break;
+ }
+
+ if (ci.button0 || Keyboard[sc_Space] || Keyboard[sc_Enter])
+ exit = 1;
+
+ if (ci.button1 && !Keyboard[sc_Alt] || Keyboard[sc_Escape])
+ exit = 2;
+
+ }
+ while (!exit);
+
+
+ IN_ClearKeysDown ();
+
+ //
+ // ERASE EVERYTHING
+ //
+ if (lastitem != which)
+ {
+ VWB_Bar (x - 1, y, 25, 16, BKGDCOLOR);
+ PrintX = item_i->x + item_i->indent;
+ PrintY = item_i->y + which * 13;
+ US_Print ((items + which)->string);
+ redrawitem = 1;
+ }
+ else
+ redrawitem = 0;
+
+ if (routine)
+ routine (which);
+ VW_UpdateScreen ();
+
+ item_i->curpos = which;
+
+ lastitem = which;
+ switch (exit)
+ {
+ case 1:
+ //
+ // CALL THE ROUTINE
+ //
+ if ((items + which)->routine != NULL)
+ {
+ ShootSnd ();
+ MenuFadeOut ();
+ (items + which)->routine (0);
+ }
+ return which;
+
+ case 2:
+ SD_PlaySound (ESCPRESSEDSND);
+ return -1;
+ }
+
+ return 0; // JUST TO SHUT UP THE ERROR MESSAGES!
+}
+
+
+//
+// ERASE GUN & DE-HIGHLIGHT STRING
+//
+void
+EraseGun (CP_iteminfo * item_i, CP_itemtype * items, int x, int y, int which)
+{
+ VWB_Bar (x - 1, y, 25, 16, BKGDCOLOR);
+ SetTextColor (items + which, 0);
+
+ PrintX = item_i->x + item_i->indent;
+ PrintY = item_i->y + which * 13;
+ US_Print ((items + which)->string);
+ VW_UpdateScreen ();
+}
+
+
+//
+// DRAW HALF STEP OF GUN TO NEXT POSITION
+//
+void
+DrawHalfStep (int x, int y)
+{
+ VWB_DrawPic (x, y, C_CURSOR1PIC);
+ VW_UpdateScreen ();
+ SD_PlaySound (MOVEGUN1SND);
+ SDL_Delay (8 * 100 / 7);
+}
+
+
+//
+// DRAW GUN AT NEW POSITION
+//
+void
+DrawGun (CP_iteminfo * item_i, CP_itemtype * items, int x, int *y, int which, int basey,
+ void (*routine) (int w))
+{
+ VWB_Bar (x - 1, *y, 25, 16, BKGDCOLOR);
+ *y = basey + which * 13;
+ VWB_DrawPic (x, *y, C_CURSOR1PIC);
+ SetTextColor (items + which, 1);
+
+ PrintX = item_i->x + item_i->indent;
+ PrintY = item_i->y + which * 13;
+ US_Print ((items + which)->string);
+
+ //
+ // CALL CUSTOM ROUTINE IF IT IS NEEDED
+ //
+ if (routine)
+ routine (which);
+ VW_UpdateScreen ();
+ SD_PlaySound (MOVEGUN2SND);
+}
+
+////////////////////////////////////////////////////////////////////
+//
+// DELAY FOR AN AMOUNT OF TICS OR UNTIL CONTROLS ARE INACTIVE
+//
+////////////////////////////////////////////////////////////////////
+void
+TicDelay (int count)
+{
+ ControlInfo ci;
+
+ int32_t startTime = GetTimeCount ();
+ do
+ {
+ SDL_Delay(5);
+ ReadAnyControl (&ci);
+ }
+ while ((int32_t) GetTimeCount () - startTime < count && ci.dir != dir_None);
+}
+
+
+////////////////////////////////////////////////////////////////////
+//
+// Draw a menu
+//
+////////////////////////////////////////////////////////////////////
+void
+DrawMenu (CP_iteminfo * item_i, CP_itemtype * items)
+{
+ int i, which = item_i->curpos;
+
+
+ WindowX = PrintX = item_i->x + item_i->indent;
+ WindowY = PrintY = item_i->y;
+ WindowW = 320;
+ WindowH = 200;
+
+ for (i = 0; i < item_i->amount; i++)
+ {
+ SetTextColor (items + i, which == i);
+
+ PrintY = item_i->y + i * 13;
+ if ((items + i)->active)
+ US_Print ((items + i)->string);
+ else
+ {
+ SETFONTCOLOR (DEACTIVE, BKGDCOLOR);
+ US_Print ((items + i)->string);
+ SETFONTCOLOR (TEXTCOLOR, BKGDCOLOR);
+ }
+
+ US_Print ("\n");
+ }
+}
+
+
+////////////////////////////////////////////////////////////////////
+//
+// SET TEXT COLOR (HIGHLIGHT OR NO)
+//
+////////////////////////////////////////////////////////////////////
+void
+SetTextColor (CP_itemtype * items, int hlight)
+{
+ if (hlight)
+ {
+ SETFONTCOLOR (color_hlite[items->active], BKGDCOLOR);
+ }
+ else
+ {
+ SETFONTCOLOR (color_norml[items->active], BKGDCOLOR);
+ }
+}
+
+
+////////////////////////////////////////////////////////////////////
+//
+// WAIT FOR CTRLKEY-UP OR BUTTON-UP
+//
+////////////////////////////////////////////////////////////////////
+void
+WaitKeyUp (void)
+{
+ ControlInfo ci;
+ while (ReadAnyControl (&ci), ci.button0 |
+ ci.button1 |
+ ci.button2 | ci.button3 | Keyboard[sc_Space] | Keyboard[sc_Enter] | Keyboard[sc_Escape])
+ {
+ IN_WaitAndProcessEvents();
+ }
+}
+
+
+////////////////////////////////////////////////////////////////////
+//
+// READ KEYBOARD, JOYSTICK AND MOUSE FOR INPUT
+//
+////////////////////////////////////////////////////////////////////
+void
+ReadAnyControl (ControlInfo * ci)
+{
+ int mouseactive = 0;
+
+ IN_ReadControl (0, ci);
+#if 0
+ if (mouseenabled && IN_IsInputGrabbed())
+ {
+ int mousex, mousey, buttons;
+ buttons = SDL_GetMouseState(&mousex, &mousey);
+ int middlePressed = buttons & SDL_BUTTON(SDL_BUTTON_MIDDLE);
+ int rightPressed = buttons & SDL_BUTTON(SDL_BUTTON_RIGHT);
+ buttons &= ~(SDL_BUTTON(SDL_BUTTON_MIDDLE) | SDL_BUTTON(SDL_BUTTON_RIGHT));
+ if(middlePressed) buttons |= 1 << 2;
+ if(rightPressed) buttons |= 1 << 1;
+
+ if(mousey - CENTERY < -SENSITIVE)
+ {
+ ci->dir = dir_North;
+ mouseactive = 1;
+ }
+ else if(mousey - CENTERY > SENSITIVE)
+ {
+ ci->dir = dir_South;
+ mouseactive = 1;
+ }
+
+ if(mousex - CENTERX < -SENSITIVE)
+ {
+ ci->dir = dir_West;
+ mouseactive = 1;
+ }
+ else if(mousex - CENTERX > SENSITIVE)
+ {
+ ci->dir = dir_East;
+ mouseactive = 1;
+ }
+
+ if(mouseactive)
+ IN_CenterMouse();
+
+ if (buttons)
+ {
+ ci->button0 = buttons & 1;
+ ci->button1 = buttons & 2;
+ ci->button2 = buttons & 4;
+ ci->button3 = false;
+ mouseactive = 1;
+ }
+ }
+
+ if (joystickenabled && !mouseactive)
+ {
+ int jx, jy, jb;
+
+ IN_GetJoyDelta (&jx, &jy);
+ if (jy < -SENSITIVE)
+ ci->dir = dir_North;
+ else if (jy > SENSITIVE)
+ ci->dir = dir_South;
+
+ if (jx < -SENSITIVE)
+ ci->dir = dir_West;
+ else if (jx > SENSITIVE)
+ ci->dir = dir_East;
+
+ jb = IN_JoyButtons ();
+ if (jb)
+ {
+ ci->button0 = jb & 1;
+ ci->button1 = jb & 2;
+ ci->button2 = jb & 4;
+ ci->button3 = jb & 8;
+ }
+ }
+#endif
+}
+
+
+////////////////////////////////////////////////////////////////////
+//
+// DRAW DIALOG AND CONFIRM YES OR NO TO QUESTION
+//
+////////////////////////////////////////////////////////////////////
+int
+Confirm (const char *string)
+{
+ int xit = 0, x, y, tick = 0, lastBlinkTime;
+ int whichsnd[2] = { ESCPRESSEDSND, SHOOTSND };
+ ControlInfo ci;
+
+ Message (string);
+ IN_ClearKeysDown ();
+ WaitKeyUp ();
+
+ //
+ // BLINK CURSOR
+ //
+ x = PrintX;
+ y = PrintY;
+ lastBlinkTime = GetTimeCount();
+
+ do
+ {
+ ReadAnyControl(&ci);
+
+ if (GetTimeCount() - lastBlinkTime >= 10)
+ {
+ switch (tick)
+ {
+ case 0:
+ VWB_Bar (x, y, 8, 13, TEXTCOLOR);
+ break;
+ case 1:
+ PrintX = x;
+ PrintY = y;
+ US_Print ("_");
+ }
+ VW_UpdateScreen ();
+ tick ^= 1;
+ lastBlinkTime = GetTimeCount();
+ }
+ else SDL_Delay(5);
+
+#ifdef SPANISH
+ }
+ while (!Keyboard[sc_S] && !Keyboard[sc_N] && !Keyboard[sc_Escape]);
+#else
+ }
+ while (!Keyboard[sc_Return] && !Keyboard[sc_Y] && !Keyboard[sc_N] && !Keyboard[sc_Escape] && !ci.button0 && !ci.button1);
+#endif
+
+#ifdef SPANISH
+ if (Keyboard[sc_S] || ci.button0)
+ {
+ xit = 1;
+ ShootSnd ();
+ }
+#else
+ if (Keyboard[sc_Y] || Keyboard[sc_Return] || ci.button0)
+ {
+ xit = 1;
+ ShootSnd ();
+ }
+#endif
+
+ IN_ClearKeysDown ();
+ WaitKeyUp ();
+
+ SD_PlaySound ((soundnames) whichsnd[xit]);
+
+ return xit;
+}
+
+#ifdef JAPAN
+////////////////////////////////////////////////////////////////////
+//
+// DRAW MESSAGE & GET Y OR N
+//
+////////////////////////////////////////////////////////////////////
+int
+GetYorN (int x, int y, int pic)
+{
+ int xit = 0, whichsnd[2] = { ESCPRESSEDSND, SHOOTSND };
+
+
+ CA_CacheGrChunk (pic);
+ VWB_DrawPic (x * 8, y * 8, pic);
+ UNCACHEGRCHUNK (pic);
+ VW_UpdateScreen ();
+ IN_ClearKeysDown ();
+
+ do
+ {
+ IN_WaitAndProcessEvents();
+#ifndef SPEAR
+ if (Keyboard[sc_Tab] && Keyboard[sc_P] && param_debugmode)
+ PicturePause ();
+#endif
+
+#ifdef SPANISH
+ }
+ while (!Keyboard[sc_S] && !Keyboard[sc_N] && !Keyboard[sc_Escape]);
+#else
+ }
+ while (!Keyboard[sc_Y] && !Keyboard[sc_N] && !Keyboard[sc_Escape]);
+#endif
+
+#ifdef SPANISH
+ if (Keyboard[sc_S])
+ {
+ xit = 1;
+ ShootSnd ();
+ }
+
+ while (Keyboard[sc_S] || Keyboard[sc_N] || Keyboard[sc_Escape])
+ IN_WaitAndProcessEvents();
+
+#else
+
+ if (Keyboard[sc_Y])
+ {
+ xit = 1;
+ ShootSnd ();
+ }
+
+ while (Keyboard[sc_Y] || Keyboard[sc_N] || Keyboard[sc_Escape])
+ IN_WaitAndProcessEvents();
+#endif
+
+ IN_ClearKeysDown ();
+ SD_PlaySound (whichsnd[xit]);
+ return xit;
+}
+#endif
+
+
+////////////////////////////////////////////////////////////////////
+//
+// PRINT A MESSAGE IN A WINDOW
+//
+////////////////////////////////////////////////////////////////////
+void
+Message (const char *string)
+{
+ int h = 0, w = 0, mw = 0, i, len = (int) strlen(string);
+ fontstruct *font;
+
+
+ CA_CacheGrChunk (STARTFONT + 1);
+ fontnumber = 1;
+ font = (fontstruct *) grsegs[STARTFONT + fontnumber];
+ h = font->height;
+ for (i = 0; i < len; i++)
+ {
+ if (string[i] == '\n')
+ {
+ if (w > mw)
+ mw = w;
+ w = 0;
+ h += font->height;
+ }
+ else
+ w += font->width[string[i]];
+ }
+
+ if (w + 10 > mw)
+ mw = w + 10;
+
+ PrintY = (WindowH / 2) - h / 2;
+ PrintX = WindowX = 160 - mw / 2;
+
+ DrawWindow (WindowX - 5, PrintY - 5, mw + 10, h + 10, TEXTCOLOR);
+ DrawOutline (WindowX - 5, PrintY - 5, mw + 10, h + 10, 0, HIGHLIGHT);
+ SETFONTCOLOR (0, TEXTCOLOR);
+ US_Print (string);
+ VW_UpdateScreen ();
+}
+
+////////////////////////////////////////////////////////////////////
+//
+// THIS MAY BE FIXED A LITTLE LATER...
+//
+////////////////////////////////////////////////////////////////////
+static int lastmusic;
+
+int
+StartCPMusic (int song)
+{
+ int lastoffs;
+
+ lastmusic = song;
+ lastoffs = SD_MusicOff ();
+ UNCACHEAUDIOCHUNK (STARTMUSIC + lastmusic);
+
+ SD_StartMusic(STARTMUSIC + song);
+ return lastoffs;
+}
+
+void
+FreeMusic (void)
+{
+ UNCACHEAUDIOCHUNK (STARTMUSIC + lastmusic);
+}
+
+
+///////////////////////////////////////////////////////////////////////////
+//
+// IN_GetScanName() - Returns a string containing the name of the
+// specified scan code
+//
+///////////////////////////////////////////////////////////////////////////
+const char *
+IN_GetScanName (ScanCode scan)
+{
+/* const char **p;
+ ScanCode *s;
+
+ for (s = ExtScanCodes, p = ExtScanNames; *s; p++, s++)
+ if (*s == scan)
+ return (*p);*/
+
+ return (ScanNames[scan]);
+}
+
+
+///////////////////////////////////////////////////////////////////////////
+//
+// CHECK FOR PAUSE KEY (FOR MUSIC ONLY)
+//
+///////////////////////////////////////////////////////////////////////////
+void
+CheckPause (void)
+{
+ if (Paused)
+ {
+ switch (SoundStatus)
+ {
+ case 0:
+ SD_MusicOn ();
+ break;
+ case 1:
+ SD_MusicOff ();
+ break;
+ }
+
+ SoundStatus ^= 1;
+ VW_WaitVBL (3);
+ IN_ClearKeysDown ();
+ Paused = false;
+ }
+}
+
+
+///////////////////////////////////////////////////////////////////////////
+//
+// DRAW GUN CURSOR AT CORRECT POSITION IN MENU
+//
+///////////////////////////////////////////////////////////////////////////
+void
+DrawMenuGun (CP_iteminfo * iteminfo)
+{
+ int x, y;
+
+
+ x = iteminfo->x;
+ y = iteminfo->y + iteminfo->curpos * 13 - 2;
+ VWB_DrawPic (x, y, C_CURSOR1PIC);
+}
+
+
+///////////////////////////////////////////////////////////////////////////
+//
+// DRAW SCREEN TITLE STRIPES
+//
+///////////////////////////////////////////////////////////////////////////
+void
+DrawStripes (int y)
+{
+#ifndef SPEAR
+ VWB_Bar (0, y, 320, 24, 0);
+ VWB_Hlin (0, 319, y + 22, STRIPE);
+#else
+ VWB_Bar (0, y, 320, 22, 0);
+ VWB_Hlin (0, 319, y + 23, 0);
+#endif
+}
+
+void
+ShootSnd (void)
+{
+ SD_PlaySound (SHOOTSND);
+}
+
+
+///////////////////////////////////////////////////////////////////////////
+//
+// CHECK FOR EPISODES
+//
+///////////////////////////////////////////////////////////////////////////
+
+#define stat my_stat
+void *my_stat(const char *path, int *buf)
+{
+ if(rb->file_exists(path))
+ return NULL;
+ else
+ return 1;
+}
+
+void
+CheckForEpisodes (void)
+{
+ int statbuf;
+
+ // On Linux like systems, the configdir defaults to $HOME/.wolf4sdl
+#if !defined(_WIN32) && !defined(_arch_dreamcast)
+ if(configdir[0] == 0)
+ {
+ // Set config location to home directory for multi-user support
+ char *homedir = "/";
+ if(homedir == NULL)
+ {
+ Quit("Your $HOME directory is not defined. You must set this before playing.");
+ }
+ #define WOLFDIR "/.wolf4sdl"
+ if(strlen(homedir) + sizeof(WOLFDIR) > sizeof(configdir))
+ {
+ Quit("Your $HOME directory path is too long. It cannot be used for saving games.");
+ }
+ snprintf(configdir, sizeof(configdir), "%s" WOLFDIR, homedir);
+ }
+#endif
+
+ if(configdir[0] != 0)
+ {
+ // Ensure config directory exists and create if necessary
+ if(stat(configdir, &statbuf) != 0)
+ {
+#ifdef _WIN32
+ if(_mkdir(configdir) != 0)
+#else
+ if(mkdir(configdir) != 0)
+#endif
+ {
+ Quit("The configuration directory \"%s\" could not be created.", configdir);
+ }
+ }
+ }
+
+//
+// JAPANESE VERSION
+//
+#ifdef JAPAN
+#ifdef JAPDEMO
+ if(!stat(DATADIR "vswap.wj1", &statbuf))
+ {
+ strcpy (extension, "wj1");
+ numEpisodesMissing = 5;
+#else
+ if(!stat(DATADIR "vswap.wj6", &statbuf))
+ {
+ strcpy (extension, "wj6");
+#endif
+ strcat (configname, extension);
+ strcat (SaveName, extension);
+ strcat (demoname, extension);
+ EpisodeSelect[1] =
+ EpisodeSelect[2] = EpisodeSelect[3] = EpisodeSelect[4] = EpisodeSelect[5] = 1;
+ }
+ else
+ Quit ("NO JAPANESE WOLFENSTEIN 3-D DATA FILES to be found!");
+#else
+
+//
+// ENGLISH
+//
+#ifdef UPLOAD
+ if(!stat(DATADIR "vswap.wl1", &statbuf))
+ {
+ strcpy (extension, "wl1");
+ numEpisodesMissing = 5;
+ }
+ else
+ Quit ("NO WOLFENSTEIN 3-D DATA FILES to be found! %s", DATADIR"vswap.wl1");
+#else
+#ifndef SPEAR
+ if(!stat(DATADIR "vswap.wl6", &statbuf))
+ {
+ strcpy (extension, "wl6");
+ NewEmenu[2].active =
+ NewEmenu[4].active =
+ NewEmenu[6].active =
+ NewEmenu[8].active =
+ NewEmenu[10].active =
+ EpisodeSelect[1] =
+ EpisodeSelect[2] = EpisodeSelect[3] = EpisodeSelect[4] = EpisodeSelect[5] = 1;
+ }
+ else
+ {
+ if(!stat(DATADIR "vswap.wl3", &statbuf))
+ {
+ strcpy (extension, "wl3");
+ numEpisodesMissing = 3;
+ NewEmenu[2].active = NewEmenu[4].active = EpisodeSelect[1] = EpisodeSelect[2] = 1;
+ }
+ else
+ {
+ if(!stat(DATADIR "vswap.wl1", &statbuf))
+ {
+ strcpy (extension, "wl1");
+ numEpisodesMissing = 5;
+ }
+ else
+ Quit ("NO WOLFENSTEIN 3-D DATA FILES to be found!"DATADIR"vswap.wl[6,3,1]");
+ }
+ }
+#endif
+#endif
+
+
+#ifdef SPEAR
+#ifndef SPEARDEMO
+ if(param_mission == 0)
+ {
+ if(!stat(DATADIR "vswap.sod", &statbuf))
+ strcpy (extension, "sod");
+ else
+ Quit ("NO SPEAR OF DESTINY DATA FILES TO BE FOUND!");
+ }
+ else if(param_mission == 1)
+ {
+ if(!stat(DATADIR "vswap.sd1", &statbuf))
+ strcpy (extension, "sd1");
+ else
+ Quit ("NO SPEAR OF DESTINY DATA FILES TO BE FOUND!");
+ }
+ else if(param_mission == 2)
+ {
+ if(!stat(DATADIR "vswap.sd2", &statbuf))
+ strcpy (extension, "sd2");
+ else
+ Quit ("NO SPEAR OF DESTINY DATA FILES TO BE FOUND!");
+ }
+ else if(param_mission == 3)
+ {
+ if(!stat(DATADIR "vswap.sd3", &statbuf))
+ strcpy (extension, "sd3");
+ else
+ Quit ("NO SPEAR OF DESTINY DATA FILES TO BE FOUND!");
+ }
+ else
+ Quit ("UNSUPPORTED MISSION!");
+ strcpy (graphext, "sod");
+ strcpy (audioext, "sod");
+#else
+ if(!stat(DATADIR "vswap.sdm", &statbuf))
+ {
+ strcpy (extension, "sdm");
+ }
+ else
+ Quit ("NO SPEAR OF DESTINY DEMO DATA FILES TO BE FOUND!");
+ strcpy (graphext, "sdm");
+ strcpy (audioext, "sdm");
+#endif
+#else
+ strcpy (graphext, extension);
+ strcpy (audioext, extension);
+#endif
+
+ strcat (configname, extension);
+ strcat (SaveName, extension);
+ strcat (demoname, extension);
+
+#ifndef SPEAR
+#ifndef GOODTIMES
+ strcat (helpfilename, extension);
+#endif
+ strcat (endfilename, extension);
+#endif
+#endif
+}
diff --git a/apps/plugins/sdl/progs/wolf3d/wl_menu.h b/apps/plugins/sdl/progs/wolf3d/wl_menu.h
new file mode 100644
index 0000000000..c56fd7f576
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/wl_menu.h
@@ -0,0 +1,237 @@
+//
+// WL_MENU.H
+//
+#ifdef SPEAR
+
+#define BORDCOLOR 0x99
+#define BORD2COLOR 0x93
+#define DEACTIVE 0x9b
+#define BKGDCOLOR 0x9d
+//#define STRIPE 0x9c
+
+#define MenuFadeOut() VL_FadeOut(0,255,0,0,51,10)
+
+#else
+
+#define BORDCOLOR 0x29
+#define BORD2COLOR 0x23
+#define DEACTIVE 0x2b
+#define BKGDCOLOR 0x2d
+#define STRIPE 0x2c
+
+#define MenuFadeOut() VL_FadeOut(0,255,43,0,0,10)
+
+#endif
+
+#define READCOLOR 0x4a
+#define READHCOLOR 0x47
+#define VIEWCOLOR 0x7f
+#define TEXTCOLOR 0x17
+#define HIGHLIGHT 0x13
+#define MenuFadeIn() VL_FadeIn(0,255,gamepal,10)
+
+
+#define MENUSONG WONDERIN_MUS
+
+#ifndef SPEAR
+#define INTROSONG NAZI_NOR_MUS
+#else
+#define INTROSONG XTOWER2_MUS
+#endif
+
+#define SENSITIVE 60
+#define CENTERX ((int) screenWidth / 2)
+#define CENTERY ((int) screenHeight / 2)
+
+#define MENU_X 76
+#define MENU_Y 55
+#define MENU_W 178
+#ifndef SPEAR
+#ifndef GOODTIMES
+#define MENU_H 13*10+6
+#else
+#define MENU_H 13*9+6
+#endif
+#else
+#define MENU_H 13*9+6
+#endif
+
+#define SM_X 48
+#define SM_W 250
+
+#define SM_Y1 20
+#define SM_H1 4*13-7
+#define SM_Y2 SM_Y1+5*13
+#define SM_H2 4*13-7
+#define SM_Y3 SM_Y2+5*13
+#define SM_H3 3*13-7
+
+#define CTL_X 24
+#define CTL_Y 86
+#define CTL_W 284
+#define CTL_H 60
+
+#define LSM_X 85
+#define LSM_Y 55
+#define LSM_W 175
+#define LSM_H 10*13+10
+
+#define NM_X 50
+#define NM_Y 100
+#define NM_W 225
+#define NM_H 13*4+15
+
+#define NE_X 10
+#define NE_Y 23
+#define NE_W 320-NE_X*2
+#define NE_H 200-NE_Y*2
+
+#define CST_X 20
+#define CST_Y 48
+#define CST_START 60
+#define CST_SPC 60
+
+
+//
+// TYPEDEFS
+//
+typedef struct {
+ short x,y,amount,curpos,indent;
+ } CP_iteminfo;
+
+typedef struct {
+ short active;
+ char string[36];
+ int (* routine)(int temp1);
+ } CP_itemtype;
+
+typedef struct {
+ short allowed[4];
+ } CustomCtrls;
+
+extern CP_itemtype MainMenu[];
+extern CP_iteminfo MainItems;
+
+//
+// FUNCTION PROTOTYPES
+//
+
+void US_ControlPanel(ScanCode);
+
+void EnableEndGameMenuItem();
+
+void SetupControlPanel(void);
+void SetupSaveGames();
+void CleanupControlPanel(void);
+
+void DrawMenu(CP_iteminfo *item_i,CP_itemtype *items);
+int HandleMenu(CP_iteminfo *item_i,
+ CP_itemtype *items,
+ void (*routine)(int w));
+void ClearMScreen(void);
+void DrawWindow(int x,int y,int w,int h,int wcolor);
+void DrawOutline(int x,int y,int w,int h,int color1,int color2);
+void WaitKeyUp(void);
+void ReadAnyControl(ControlInfo *ci);
+void TicDelay(int count);
+void CacheLump(int lumpstart,int lumpend);
+void UnCacheLump(int lumpstart,int lumpend);
+int StartCPMusic(int song);
+int Confirm(const char *string);
+void Message(const char *string);
+void CheckPause(void);
+void ShootSnd(void);
+void CheckSecretMissions(void);
+void BossKey(void);
+
+void DrawGun(CP_iteminfo *item_i,CP_itemtype *items,int x,int *y,int which,int basey,void (*routine)(int w));
+void DrawHalfStep(int x,int y);
+void EraseGun(CP_iteminfo *item_i,CP_itemtype *items,int x,int y,int which);
+void SetTextColor(CP_itemtype *items,int hlight);
+void DrawMenuGun(CP_iteminfo *iteminfo);
+void DrawStripes(int y);
+
+void DefineMouseBtns(void);
+void DefineJoyBtns(void);
+void DefineKeyBtns(void);
+void DefineKeyMove(void);
+void EnterCtrlData(int index,CustomCtrls *cust,void (*DrawRtn)(int),void (*PrintRtn)(int),int type);
+
+void DrawMainMenu(void);
+void DrawSoundMenu(void);
+void DrawLoadSaveScreen(int loadsave);
+void DrawNewEpisode(void);
+void DrawNewGame(void);
+void DrawChangeView(int view);
+void DrawMouseSens(void);
+void DrawCtlScreen(void);
+void DrawCustomScreen(void);
+void DrawLSAction(int which);
+void DrawCustMouse(int hilight);
+void DrawCustJoy(int hilight);
+void DrawCustKeybd(int hilight);
+void DrawCustKeys(int hilight);
+void PrintCustMouse(int i);
+void PrintCustJoy(int i);
+void PrintCustKeybd(int i);
+void PrintCustKeys(int i);
+
+void PrintLSEntry(int w,int color);
+void TrackWhichGame(int w);
+void DrawNewGameDiff(int w);
+void FixupCustom(int w);
+
+int CP_NewGame(int);
+int CP_Sound(int);
+int CP_LoadGame(int quick);
+int CP_SaveGame(int quick);
+int CP_Control(int);
+int CP_ChangeView(int);
+int CP_ExitOptions(int);
+int CP_Quit(int);
+int CP_ViewScores(int);
+int CP_EndGame(int);
+int CP_CheckQuick(ScanCode scancode);
+int CustomControls(int);
+int MouseSensitivity(int);
+
+void CheckForEpisodes(void);
+
+void FreeMusic(void);
+
+
+enum {MOUSE,JOYSTICK,KEYBOARDBTNS,KEYBOARDMOVE}; // FOR INPUT TYPES
+
+enum menuitems
+{
+ newgame,
+ soundmenu,
+ control,
+ loadgame,
+ savegame,
+ changeview,
+
+#ifndef GOODTIMES
+#ifndef SPEAR
+ readthis,
+#endif
+#endif
+
+ viewscores,
+ backtodemo,
+ quit
+};
+
+//
+// WL_INTER
+//
+typedef struct {
+ int kill,secret,treasure;
+ int32_t time;
+ } LRstruct;
+
+extern LRstruct LevelRatios[];
+
+void Write (int x,int y,const char *string);
+void NonShareware(void);
+int GetYorN(int x,int y,int pic);
diff --git a/apps/plugins/sdl/progs/wolf3d/wl_parallax.c b/apps/plugins/sdl/progs/wolf3d/wl_parallax.c
new file mode 100644
index 0000000000..8fbc8cfb91
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/wl_parallax.c
@@ -0,0 +1,64 @@
+#include "version.h"
+
+#ifdef USE_PARALLAX
+
+#include "wl_def.h"
+
+#ifdef USE_FEATUREFLAGS
+
+// The lower left tile of every map determines the start texture of the parallax sky.
+static int GetParallaxStartTexture()
+{
+ int startTex = ffDataBottomLeft;
+ assert(startTex >= 0 && startTex < PMSpriteStart);
+ return startTex;
+}
+
+#else
+
+static int GetParallaxStartTexture()
+{
+ int startTex;
+ switch(gamestate.episode * 10 + mapon)
+ {
+ case 0: startTex = 20; break;
+ default: startTex = 0; break;
+ }
+ assert(startTex >= 0 && startTex < PMSpriteStart);
+ return startTex;
+}
+
+#endif
+
+void DrawParallax(byte *vbuf, unsigned vbufPitch)
+{
+ int startpage = GetParallaxStartTexture();
+ int midangle = player->angle * (FINEANGLES / ANGLES);
+ int skyheight = viewheight >> 1;
+ int curtex = -1;
+ byte *skytex;
+
+ startpage += USE_PARALLAX - 1;
+
+ for(int x = 0; x < viewwidth; x++)
+ {
+ int curang = pixelangle[x] + midangle;
+ if(curang < 0) curang += FINEANGLES;
+ else if(curang >= FINEANGLES) curang -= FINEANGLES;
+ int xtex = curang * USE_PARALLAX * TEXTURESIZE / FINEANGLES;
+ int newtex = xtex >> TEXTURESHIFT;
+ if(newtex != curtex)
+ {
+ curtex = newtex;
+ skytex = PM_GetTexture(startpage - curtex);
+ }
+ int texoffs = TEXTUREMASK - ((xtex & (TEXTURESIZE - 1)) << TEXTURESHIFT);
+ int yend = skyheight - (wallheight[x] >> 3);
+ if(yend <= 0) continue;
+
+ for(int y = 0, offs = x; y < yend; y++, offs += vbufPitch)
+ vbuf[offs] = skytex[texoffs + (y * TEXTURESIZE) / skyheight];
+ }
+}
+
+#endif
diff --git a/apps/plugins/sdl/progs/wolf3d/wl_play.c b/apps/plugins/sdl/progs/wolf3d/wl_play.c
new file mode 100644
index 0000000000..79efcefe50
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/wl_play.c
@@ -0,0 +1,1366 @@
+// WL_PLAY.C
+
+#include "wl_def.h"
+#pragma hdrstop
+
+#include "wl_cloudsky.h"
+#include "wl_shade.h"
+
+/*
+=============================================================================
+
+ LOCAL CONSTANTS
+
+=============================================================================
+*/
+
+#define sc_Question 0x35
+
+/*
+=============================================================================
+
+ GLOBAL VARIABLES
+
+=============================================================================
+*/
+
+boolean madenoise; // true when shooting or screaming
+
+exit_t playstate;
+
+static musicnames lastmusicchunk = (musicnames) 0;
+
+static int DebugOk;
+
+objtype objlist[MAXACTORS];
+objtype *newobj, *obj, *player, *lastobj, *objfreelist, *killerobj;
+
+boolean noclip, ammocheat;
+int godmode, singlestep, extravbls = 0;
+
+byte tilemap[MAPSIZE][MAPSIZE]; // wall values only
+byte spotvis[MAPSIZE][MAPSIZE];
+objtype *actorat[MAPSIZE][MAPSIZE];
+
+//
+// replacing refresh manager
+//
+unsigned tics;
+
+//
+// control info
+//
+boolean mouseenabled, joystickenabled;
+int dirscan[4] = { sc_UpArrow, sc_RightArrow, sc_DownArrow, sc_LeftArrow };
+
+int buttonscan[NUMBUTTONS] = { sc_Return, sc_Alt, sc_LShift, sc_UpArrow, sc_1, sc_2, sc_3, sc_4,
+ sc_DownArrow, 0, 0, 0, sc_A, sc_D };
+int buttonmouse[4] = { bt_attack, bt_strafe, bt_use, bt_nobutton };
+int buttonjoy[32] = {
+#ifdef _arch_dreamcast
+ bt_attack, bt_strafe, bt_use, bt_run, bt_esc, bt_prevweapon, bt_nobutton, bt_nextweapon,
+ bt_pause, bt_strafeleft, bt_straferight, bt_nobutton, bt_nobutton, bt_nobutton, bt_nobutton, bt_nobutton,
+#else
+ bt_attack, bt_strafe, bt_use, bt_run, bt_strafeleft, bt_straferight, bt_esc, bt_pause,
+ bt_prevweapon, bt_nextweapon, bt_nobutton, bt_nobutton, bt_nobutton, bt_nobutton, bt_nobutton, bt_nobutton,
+#endif
+ bt_nobutton, bt_nobutton, bt_nobutton, bt_nobutton, bt_nobutton, bt_nobutton, bt_nobutton, bt_nobutton,
+ bt_nobutton, bt_nobutton, bt_nobutton, bt_nobutton, bt_nobutton, bt_nobutton, bt_nobutton, bt_nobutton
+};
+
+int viewsize;
+
+boolean buttonheld[NUMBUTTONS];
+
+boolean demorecord, demoplayback;
+int8_t *demoptr, *lastdemoptr;
+memptr demobuffer;
+
+//
+// current user input
+//
+int controlx, controly; // range from -100 to 100 per tic
+boolean buttonstate[NUMBUTTONS];
+
+int lastgamemusicoffset = 0;
+
+
+//===========================================================================
+
+
+void CenterWindow (word w, word h);
+void InitObjList (void);
+void RemoveObj (objtype * gone);
+void PollControls (void);
+int StopMusic (void);
+void StartMusic (void);
+void ContinueMusic (int offs);
+void PlayLoop (void);
+
+/*
+=============================================================================
+
+ LOCAL VARIABLES
+
+=============================================================================
+*/
+
+
+objtype dummyobj;
+
+//
+// LIST OF SONGS FOR EACH VERSION
+//
+int songs[] = {
+#ifndef SPEAR
+ //
+ // Episode One
+ //
+ GETTHEM_MUS,
+ SEARCHN_MUS,
+ POW_MUS,
+ SUSPENSE_MUS,
+ GETTHEM_MUS,
+ SEARCHN_MUS,
+ POW_MUS,
+ SUSPENSE_MUS,
+
+ WARMARCH_MUS, // Boss level
+ CORNER_MUS, // Secret level
+
+ //
+ // Episode Two
+ //
+ NAZI_OMI_MUS,
+ PREGNANT_MUS,
+ GOINGAFT_MUS,
+ HEADACHE_MUS,
+ NAZI_OMI_MUS,
+ PREGNANT_MUS,
+ HEADACHE_MUS,
+ GOINGAFT_MUS,
+
+ WARMARCH_MUS, // Boss level
+ DUNGEON_MUS, // Secret level
+
+ //
+ // Episode Three
+ //
+ INTROCW3_MUS,
+ NAZI_RAP_MUS,
+ TWELFTH_MUS,
+ ZEROHOUR_MUS,
+ INTROCW3_MUS,
+ NAZI_RAP_MUS,
+ TWELFTH_MUS,
+ ZEROHOUR_MUS,
+
+ ULTIMATE_MUS, // Boss level
+ PACMAN_MUS, // Secret level
+
+ //
+ // Episode Four
+ //
+ GETTHEM_MUS,
+ SEARCHN_MUS,
+ POW_MUS,
+ SUSPENSE_MUS,
+ GETTHEM_MUS,
+ SEARCHN_MUS,
+ POW_MUS,
+ SUSPENSE_MUS,
+
+ WARMARCH_MUS, // Boss level
+ CORNER_MUS, // Secret level
+
+ //
+ // Episode Five
+ //
+ NAZI_OMI_MUS,
+ PREGNANT_MUS,
+ GOINGAFT_MUS,
+ HEADACHE_MUS,
+ NAZI_OMI_MUS,
+ PREGNANT_MUS,
+ HEADACHE_MUS,
+ GOINGAFT_MUS,
+
+ WARMARCH_MUS, // Boss level
+ DUNGEON_MUS, // Secret level
+
+ //
+ // Episode Six
+ //
+ INTROCW3_MUS,
+ NAZI_RAP_MUS,
+ TWELFTH_MUS,
+ ZEROHOUR_MUS,
+ INTROCW3_MUS,
+ NAZI_RAP_MUS,
+ TWELFTH_MUS,
+ ZEROHOUR_MUS,
+
+ ULTIMATE_MUS, // Boss level
+ FUNKYOU_MUS // Secret level
+#else
+
+ //////////////////////////////////////////////////////////////
+ //
+ // SPEAR OF DESTINY TRACKS
+ //
+ //////////////////////////////////////////////////////////////
+ XTIPTOE_MUS,
+ XFUNKIE_MUS,
+ XDEATH_MUS,
+ XGETYOU_MUS, // DON'T KNOW
+ ULTIMATE_MUS, // Trans Gr”sse
+
+ DUNGEON_MUS,
+ GOINGAFT_MUS,
+ POW_MUS,
+ TWELFTH_MUS,
+ ULTIMATE_MUS, // Barnacle Wilhelm BOSS
+
+ NAZI_OMI_MUS,
+ GETTHEM_MUS,
+ SUSPENSE_MUS,
+ SEARCHN_MUS,
+ ZEROHOUR_MUS,
+ ULTIMATE_MUS, // Super Mutant BOSS
+
+ XPUTIT_MUS,
+ ULTIMATE_MUS, // Death Knight BOSS
+
+ XJAZNAZI_MUS, // Secret level
+ XFUNKIE_MUS, // Secret level (DON'T KNOW)
+
+ XEVIL_MUS // Angel of Death BOSS
+#endif
+};
+
+
+/*
+=============================================================================
+
+ USER CONTROL
+
+=============================================================================
+*/
+
+/*
+===================
+=
+= PollKeyboardButtons
+=
+===================
+*/
+
+void PollKeyboardButtons (void)
+{
+ int i;
+
+ //LOGF("button state: ");
+ for (i = 0; i < NUMBUTTONS; i++)
+ {
+ if (Keyboard[buttonscan[i]])
+ {
+ buttonstate[i] = true;
+ LOGF("enabling bit %d in buttonstate");
+ }
+ //LOGF("%d ", buttonstate[i]);
+ }
+ //LOGF("\n");
+}
+
+
+/*
+===================
+=
+= PollMouseButtons
+=
+===================
+*/
+
+void PollMouseButtons (void)
+{
+ int buttons = IN_MouseButtons ();
+
+ if (buttons & 1)
+ buttonstate[buttonmouse[0]] = true;
+ if (buttons & 2)
+ buttonstate[buttonmouse[1]] = true;
+ if (buttons & 4)
+ buttonstate[buttonmouse[2]] = true;
+}
+
+
+
+/*
+===================
+=
+= PollJoystickButtons
+=
+===================
+*/
+
+void PollJoystickButtons (void)
+{
+ int buttons = IN_JoyButtons();
+
+ for(int i = 0, val = 1; i < JoyNumButtons; i++, val <<= 1)
+ {
+ if(buttons & val)
+ buttonstate[buttonjoy[i]] = true;
+ }
+}
+
+
+/*
+===================
+=
+= PollKeyboardMove
+=
+===================
+*/
+
+void PollKeyboardMove (void)
+{
+ int delta = buttonstate[bt_run] ? RUNMOVE * tics : BASEMOVE * tics;
+
+ if (Keyboard[dirscan[di_north]])
+ controly -= delta;
+ if (Keyboard[dirscan[di_south]])
+ controly += delta;
+ if (Keyboard[dirscan[di_west]])
+ controlx -= delta;
+ if (Keyboard[dirscan[di_east]])
+ controlx += delta;
+}
+
+
+/*
+===================
+=
+= PollMouseMove
+=
+===================
+*/
+
+void PollMouseMove (void)
+{
+ int mousexmove, mouseymove;
+
+ SDL_GetMouseState(&mousexmove, &mouseymove);
+ if(IN_IsInputGrabbed())
+ IN_CenterMouse();
+
+ mousexmove -= screenWidth / 2;
+ mouseymove -= screenHeight / 2;
+
+ controlx += mousexmove * 10 / (13 - mouseadjustment);
+ controly += mouseymove * 20 / (13 - mouseadjustment);
+}
+
+
+/*
+===================
+=
+= PollJoystickMove
+=
+===================
+*/
+
+void PollJoystickMove (void)
+{
+ int joyx, joyy;
+
+ IN_GetJoyDelta (&joyx, &joyy);
+
+ int delta = buttonstate[bt_run] ? RUNMOVE * tics : BASEMOVE * tics;
+
+ if (joyx > 64 || buttonstate[bt_turnright])
+ controlx += delta;
+ else if (joyx < -64 || buttonstate[bt_turnleft])
+ controlx -= delta;
+ if (joyy > 64 || buttonstate[bt_movebackward])
+ controly += delta;
+ else if (joyy < -64 || buttonstate[bt_moveforward])
+ controly -= delta;
+}
+
+/*
+===================
+=
+= PollControls
+=
+= Gets user or demo input, call once each frame
+=
+= controlx set between -100 and 100 per tic
+= controly
+= buttonheld[] the state of the buttons LAST frame
+= buttonstate[] the state of the buttons THIS frame
+=
+===================
+*/
+
+void PollControls (void)
+{
+ int max, min, i;
+ byte buttonbits;
+
+ IN_ProcessEvents();
+
+//
+// get timing info for last frame
+//
+ if (demoplayback || demorecord) // demo recording and playback needs to be constant
+ {
+ // wait up to DEMOTICS Wolf tics
+ uint32_t curtime = SDL_GetTicks();
+ lasttimecount += DEMOTICS;
+ int32_t timediff = (lasttimecount * 100) / 7 - curtime;
+ if(timediff > 0)
+ SDL_Delay(timediff);
+
+ if(timediff < -2 * DEMOTICS) // more than 2-times DEMOTICS behind?
+ lasttimecount = (curtime * 7) / 100; // yes, set to current timecount
+
+ tics = DEMOTICS;
+ }
+ else
+ CalcTics ();
+
+ controlx = 0;
+ controly = 0;
+ memcpy (buttonheld, buttonstate, sizeof (buttonstate));
+ memset (buttonstate, 0, sizeof (buttonstate));
+
+ if (demoplayback)
+ {
+ //
+ // read commands from demo buffer
+ //
+ buttonbits = *demoptr++;
+ for (i = 0; i < NUMBUTTONS; i++)
+ {
+ buttonstate[i] = buttonbits & 1;
+ buttonbits >>= 1;
+ }
+
+ controlx = *demoptr++;
+ controly = *demoptr++;
+ LOGF("%d %d %d", buttonbits, controlx, controly);
+
+ if (demoptr == lastdemoptr)
+ playstate = ex_completed; // demo is done
+
+ controlx *= (int) tics;
+ controly *= (int) tics;
+
+ return;
+ }
+
+
+//
+// get button states
+//
+ PollKeyboardButtons ();
+
+// if (mouseenabled && IN_IsInputGrabbed())
+// PollMouseButtons ();
+
+ if (joystickenabled)
+ PollJoystickButtons ();
+
+//
+// get movements
+//
+ PollKeyboardMove ();
+
+// if (mouseenabled && IN_IsInputGrabbed())
+// PollMouseMove ();
+
+ if (joystickenabled)
+ PollJoystickMove ();
+
+//
+// bound movement to a maximum
+//
+ max = 100 * tics;
+ min = -max;
+ if (controlx > max)
+ controlx = max;
+ else if (controlx < min)
+ controlx = min;
+
+ if (controly > max)
+ controly = max;
+ else if (controly < min)
+ controly = min;
+
+ if (demorecord)
+ {
+ //
+ // save info out to demo buffer
+ //
+ controlx /= (int) tics;
+ controly /= (int) tics;
+
+ buttonbits = 0;
+
+ // TODO: Support 32-bit buttonbits
+ for (i = NUMBUTTONS - 1; i >= 0; i--)
+ {
+ buttonbits <<= 1;
+ if (buttonstate[i])
+ buttonbits |= 1;
+ }
+
+ *demoptr++ = buttonbits;
+ *demoptr++ = controlx;
+ *demoptr++ = controly;
+
+ if (demoptr >= lastdemoptr - 8)
+ playstate = ex_completed;
+ else
+ {
+ controlx *= (int) tics;
+ controly *= (int) tics;
+ }
+ }
+}
+
+
+
+//==========================================================================
+
+
+
+///////////////////////////////////////////////////////////////////////////
+//
+// CenterWindow() - Generates a window of a given width & height in the
+// middle of the screen
+//
+///////////////////////////////////////////////////////////////////////////
+#define MAXX 320
+#define MAXY 160
+
+void CenterWindow (word w, word h)
+{
+ US_DrawWindow (((MAXX / 8) - w) / 2, ((MAXY / 8) - h) / 2, w, h);
+}
+
+//===========================================================================
+
+
+/*
+=====================
+=
+= CheckKeys
+=
+=====================
+*/
+
+void CheckKeys (void)
+{
+ ScanCode scan;
+
+
+ if (screenfaded || demoplayback) // don't do anything with a faded screen
+ return;
+
+ scan = LastScan;
+
+
+#ifdef SPEAR
+ //
+ // SECRET CHEAT CODE: TAB-G-F10
+ //
+ if (Keyboard[sc_Tab] && Keyboard[sc_G] && Keyboard[sc_F10])
+ {
+ WindowH = 160;
+ if (godmode)
+ {
+ Message ("God mode OFF");
+ SD_PlaySound (NOBONUSSND);
+ }
+ else
+ {
+ Message ("God mode ON");
+ SD_PlaySound (ENDBONUS2SND);
+ }
+
+ IN_Ack ();
+ godmode ^= 1;
+ DrawPlayBorderSides ();
+ IN_ClearKeysDown ();
+ return;
+ }
+#endif
+
+
+ //
+ // SECRET CHEAT CODE: 'MLI'
+ //
+ if (Keyboard[sc_M] && Keyboard[sc_L] && Keyboard[sc_I])
+ {
+ gamestate.health = 100;
+ gamestate.ammo = 99;
+ gamestate.keys = 3;
+ gamestate.score = 0;
+ gamestate.TimeCount += 42000L;
+ GiveWeapon (wp_chaingun);
+ DrawWeapon ();
+ DrawHealth ();
+ DrawKeys ();
+ DrawAmmo ();
+ DrawScore ();
+
+ ClearMemory ();
+ CA_CacheGrChunk (STARTFONT + 1);
+ ClearSplitVWB ();
+
+ Message (STR_CHEATER1 "\n"
+ STR_CHEATER2 "\n\n" STR_CHEATER3 "\n" STR_CHEATER4 "\n" STR_CHEATER5);
+
+ UNCACHEGRCHUNK (STARTFONT + 1);
+ IN_ClearKeysDown ();
+ IN_Ack ();
+
+ if (viewsize < 17)
+ DrawPlayBorder ();
+ }
+
+ //
+ // OPEN UP DEBUG KEYS
+ //
+#ifdef DEBUGKEYS
+ if (Keyboard[sc_BackSpace] && Keyboard[sc_LShift] && Keyboard[sc_Alt] && param_debugmode)
+ {
+ ClearMemory ();
+ CA_CacheGrChunk (STARTFONT + 1);
+ ClearSplitVWB ();
+
+ Message ("Debugging keys are\nnow available!");
+ UNCACHEGRCHUNK (STARTFONT + 1);
+ IN_ClearKeysDown ();
+ IN_Ack ();
+
+ DrawPlayBorderSides ();
+ DebugOk = 1;
+ }
+#endif
+
+ //
+ // TRYING THE KEEN CHEAT CODE!
+ //
+ if (Keyboard[sc_B] && Keyboard[sc_A] && Keyboard[sc_T])
+ {
+ ClearMemory ();
+ CA_CacheGrChunk (STARTFONT + 1);
+ ClearSplitVWB ();
+
+ Message ("Commander Keen is also\n"
+ "available from Apogee, but\n"
+ "then, you already know\n" "that - right, Cheatmeister?!");
+
+ UNCACHEGRCHUNK (STARTFONT + 1);
+ IN_ClearKeysDown ();
+ IN_Ack ();
+
+ if (viewsize < 18)
+ DrawPlayBorder ();
+ }
+
+//
+// pause key weirdness can't be checked as a scan code
+//
+ if(buttonstate[bt_pause]) Paused = true;
+ if(Paused)
+ {
+ int lastoffs = StopMusic();
+ LatchDrawPic (20 - 4, 80 - 2 * 8, PAUSEDPIC);
+ VH_UpdateScreen();
+ IN_Ack ();
+ Paused = false;
+ ContinueMusic(lastoffs);
+ if (MousePresent && IN_IsInputGrabbed())
+ IN_CenterMouse(); // Clear accumulated mouse movement
+ lasttimecount = GetTimeCount();
+ return;
+ }
+
+//
+// F1-F7/ESC to enter control panel
+//
+ if (
+#ifndef DEBCHECK
+ scan == sc_F10 ||
+#endif
+ scan == sc_F9 || scan == sc_F7 || scan == sc_F8) // pop up quit dialog
+ {
+ short oldmapon = gamestate.mapon;
+ short oldepisode = gamestate.episode;
+ ClearMemory ();
+ ClearSplitVWB ();
+ US_ControlPanel (scan);
+
+ DrawPlayBorderSides ();
+
+ SETFONTCOLOR (0, 15);
+ IN_ClearKeysDown ();
+ return;
+ }
+
+ if ((scan >= sc_F1 && scan <= sc_F9) || scan == sc_Escape || buttonstate[bt_esc])
+ {
+ int lastoffs = StopMusic ();
+ ClearMemory ();
+ VW_FadeOut ();
+
+ US_ControlPanel (buttonstate[bt_esc] ? sc_Escape : scan);
+
+ SETFONTCOLOR (0, 15);
+ IN_ClearKeysDown ();
+ VW_FadeOut();
+ if(viewsize != 21)
+ DrawPlayScreen ();
+ if (!startgame && !loadedgame)
+ ContinueMusic (lastoffs);
+ if (loadedgame)
+ playstate = ex_abort;
+ lasttimecount = GetTimeCount();
+ if (MousePresent && IN_IsInputGrabbed())
+ IN_CenterMouse(); // Clear accumulated mouse movement
+ return;
+ }
+
+//
+// TAB-? debug keys
+//
+#ifdef DEBUGKEYS
+ if (Keyboard[sc_Tab] && DebugOk)
+ {
+ CA_CacheGrChunk (STARTFONT);
+ fontnumber = 0;
+ SETFONTCOLOR (0, 15);
+ if (DebugKeys () && viewsize < 20)
+ DrawPlayBorder (); // dont let the blue borders flash
+
+ if (MousePresent && IN_IsInputGrabbed())
+ IN_CenterMouse(); // Clear accumulated mouse movement
+
+ lasttimecount = GetTimeCount();
+ return;
+ }
+#endif
+}
+
+
+//===========================================================================
+
+/*
+#############################################################################
+
+ The objlist data structure
+
+#############################################################################
+
+objlist containt structures for every actor currently playing. The structure
+is accessed as a linked list starting at *player, ending when ob->next ==
+NULL. GetNewObj inserts a new object at the end of the list, meaning that
+if an actor spawn another actor, the new one WILL get to think and react the
+same frame. RemoveObj unlinks the given object and returns it to the free
+list, but does not damage the objects ->next pointer, so if the current object
+removes itself, a linked list following loop can still safely get to the
+next element.
+
+<backwardly linked free list>
+
+#############################################################################
+*/
+
+
+/*
+=========================
+=
+= InitActorList
+=
+= Call to clear out the actor object lists returning them all to the free
+= list. Allocates a special spot for the player.
+=
+=========================
+*/
+
+int objcount;
+
+void InitActorList (void)
+{
+ int i;
+
+//
+// init the actor lists
+//
+ for (i = 0; i < MAXACTORS; i++)
+ {
+ objlist[i].prev = &objlist[i + 1];
+ objlist[i].next = NULL;
+ }
+
+ objlist[MAXACTORS - 1].prev = NULL;
+
+ objfreelist = &objlist[0];
+ lastobj = NULL;
+
+ objcount = 0;
+
+//
+// give the player the first free spots
+//
+ GetNewActor ();
+ player = newobj;
+
+}
+
+//===========================================================================
+
+/*
+=========================
+=
+= GetNewActor
+=
+= Sets the global variable new to point to a free spot in objlist.
+= The free spot is inserted at the end of the liked list
+=
+= When the object list is full, the caller can either have it bomb out ot
+= return a dummy object pointer that will never get used
+=
+=========================
+*/
+
+void GetNewActor (void)
+{
+ if (!objfreelist)
+ Quit ("GetNewActor: No free spots in objlist!");
+
+ newobj = objfreelist;
+ objfreelist = newobj->prev;
+ memset (newobj, 0, sizeof (*newobj));
+
+ if (lastobj)
+ lastobj->next = newobj;
+ newobj->prev = lastobj; // new->next is allready NULL from memset
+
+ newobj->active = ac_no;
+ lastobj = newobj;
+
+ objcount++;
+}
+
+//===========================================================================
+
+/*
+=========================
+=
+= RemoveObj
+=
+= Add the given object back into the free list, and unlink it from it's
+= neighbors
+=
+=========================
+*/
+
+void RemoveObj (objtype * gone)
+{
+ if (gone == player)
+ Quit ("RemoveObj: Tried to remove the player!");
+
+ gone->state = NULL;
+
+//
+// fix the next object's back link
+//
+ if (gone == lastobj)
+ lastobj = (objtype *) gone->prev;
+ else
+ gone->next->prev = gone->prev;
+
+//
+// fix the previous object's forward link
+//
+ gone->prev->next = gone->next;
+
+//
+// add it back in to the free list
+//
+ gone->prev = objfreelist;
+ objfreelist = gone;
+
+ objcount--;
+}
+
+/*
+=============================================================================
+
+ MUSIC STUFF
+
+=============================================================================
+*/
+
+
+/*
+=================
+=
+= StopMusic
+=
+=================
+*/
+int StopMusic (void)
+{
+ int lastoffs = SD_MusicOff ();
+
+ UNCACHEAUDIOCHUNK (STARTMUSIC + lastmusicchunk);
+
+ return lastoffs;
+}
+
+//==========================================================================
+
+
+/*
+=================
+=
+= StartMusic
+=
+=================
+*/
+
+void StartMusic ()
+{
+ SD_MusicOff ();
+ lastmusicchunk = (musicnames) songs[gamestate.mapon + gamestate.episode * 10];
+ SD_StartMusic(STARTMUSIC + lastmusicchunk);
+}
+
+void ContinueMusic (int offs)
+{
+ SD_MusicOff ();
+ lastmusicchunk = (musicnames) songs[gamestate.mapon + gamestate.episode * 10];
+ SD_ContinueMusic(STARTMUSIC + lastmusicchunk, offs);
+}
+
+/*
+=============================================================================
+
+ PALETTE SHIFTING STUFF
+
+=============================================================================
+*/
+
+#define NUMREDSHIFTS 6
+#define REDSTEPS 8
+
+#define NUMWHITESHIFTS 3
+#define WHITESTEPS 20
+#define WHITETICS 6
+
+
+SDL_Color redshifts[NUMREDSHIFTS][256];
+SDL_Color whiteshifts[NUMWHITESHIFTS][256];
+
+int damagecount, bonuscount;
+boolean palshifted;
+
+/*
+=====================
+=
+= InitRedShifts
+=
+=====================
+*/
+
+void InitRedShifts (void)
+{
+ SDL_Color *workptr, *baseptr;
+ int i, j, delta;
+
+
+//
+// fade through intermediate frames
+//
+ for (i = 1; i <= NUMREDSHIFTS; i++)
+ {
+ workptr = redshifts[i - 1];
+ baseptr = gamepal;
+
+ for (j = 0; j <= 255; j++)
+ {
+ delta = 256 - baseptr->r;
+ workptr->r = baseptr->r + delta * i / REDSTEPS;
+ delta = -baseptr->g;
+ workptr->g = baseptr->g + delta * i / REDSTEPS;
+ delta = -baseptr->b;
+ workptr->b = baseptr->b + delta * i / REDSTEPS;
+ baseptr++;
+ workptr++;
+ }
+ rb->yield();
+ }
+
+ for (i = 1; i <= NUMWHITESHIFTS; i++)
+ {
+ workptr = whiteshifts[i - 1];
+ baseptr = gamepal;
+
+ for (j = 0; j <= 255; j++)
+ {
+ delta = 256 - baseptr->r;
+ workptr->r = baseptr->r + delta * i / WHITESTEPS;
+ delta = 248 - baseptr->g;
+ workptr->g = baseptr->g + delta * i / WHITESTEPS;
+ delta = 0-baseptr->b;
+ workptr->b = baseptr->b + delta * i / WHITESTEPS;
+ baseptr++;
+ workptr++;
+ }
+ rb->yield();
+ }
+}
+
+
+/*
+=====================
+=
+= ClearPaletteShifts
+=
+=====================
+*/
+
+void ClearPaletteShifts (void)
+{
+ bonuscount = damagecount = 0;
+ palshifted = false;
+}
+
+
+/*
+=====================
+=
+= StartBonusFlash
+=
+=====================
+*/
+
+void StartBonusFlash (void)
+{
+ bonuscount = NUMWHITESHIFTS * WHITETICS; // white shift palette
+}
+
+
+/*
+=====================
+=
+= StartDamageFlash
+=
+=====================
+*/
+
+void StartDamageFlash (int damage)
+{
+ damagecount += damage;
+}
+
+
+/*
+=====================
+=
+= UpdatePaletteShifts
+=
+=====================
+*/
+
+void UpdatePaletteShifts (void)
+{
+ int red, white;
+
+ if (bonuscount)
+ {
+ white = bonuscount / WHITETICS + 1;
+ if (white > NUMWHITESHIFTS)
+ white = NUMWHITESHIFTS;
+ bonuscount -= tics;
+ if (bonuscount < 0)
+ bonuscount = 0;
+ }
+ else
+ white = 0;
+
+
+ if (damagecount)
+ {
+ red = damagecount / 10 + 1;
+ if (red > NUMREDSHIFTS)
+ red = NUMREDSHIFTS;
+
+ damagecount -= tics;
+ if (damagecount < 0)
+ damagecount = 0;
+ }
+ else
+ red = 0;
+
+ if (red)
+ {
+ VL_SetPalette (redshifts[red - 1], false);
+ palshifted = true;
+ }
+ else if (white)
+ {
+ VL_SetPalette (whiteshifts[white - 1], false);
+ palshifted = true;
+ }
+ else if (palshifted)
+ {
+ VL_SetPalette (gamepal, false); // back to normal
+ palshifted = false;
+ }
+}
+
+
+/*
+=====================
+=
+= FinishPaletteShifts
+=
+= Resets palette to normal if needed
+=
+=====================
+*/
+
+void FinishPaletteShifts (void)
+{
+ if (palshifted)
+ {
+ palshifted = 0;
+ VL_SetPalette (gamepal, true);
+ }
+}
+
+
+/*
+=============================================================================
+
+ CORE PLAYLOOP
+
+=============================================================================
+*/
+
+
+/*
+=====================
+=
+= DoActor
+=
+=====================
+*/
+
+void DoActor (objtype * ob)
+{
+ void (*think) (objtype *);
+
+ if (!ob->active && !areabyplayer[ob->areanumber])
+ return;
+
+ if (!(ob->flags & (FL_NONMARK | FL_NEVERMARK)))
+ actorat[ob->tilex][ob->tiley] = NULL;
+
+//
+// non transitional object
+//
+
+ if (!ob->ticcount)
+ {
+ think = (void (*)(objtype *)) ob->state->think;
+ if (think)
+ {
+ think (ob);
+ if (!ob->state)
+ {
+ RemoveObj (ob);
+ return;
+ }
+ }
+
+ if (ob->flags & FL_NEVERMARK)
+ return;
+
+ if ((ob->flags & FL_NONMARK) && actorat[ob->tilex][ob->tiley])
+ return;
+
+ actorat[ob->tilex][ob->tiley] = ob;
+ return;
+ }
+
+//
+// transitional object
+//
+ ob->ticcount -= (short) tics;
+ while (ob->ticcount <= 0)
+ {
+ think = (void (*)(objtype *)) ob->state->action; // end of state action
+ if (think)
+ {
+ think (ob);
+ if (!ob->state)
+ {
+ RemoveObj (ob);
+ return;
+ }
+ }
+
+ ob->state = ob->state->next;
+
+ if (!ob->state)
+ {
+ RemoveObj (ob);
+ return;
+ }
+
+ if (!ob->state->tictime)
+ {
+ ob->ticcount = 0;
+ goto think;
+ }
+
+ ob->ticcount += ob->state->tictime;
+ }
+
+think:
+ //
+ // think
+ //
+ think = (void (*)(objtype *)) ob->state->think;
+ if (think)
+ {
+ think (ob);
+ if (!ob->state)
+ {
+ RemoveObj (ob);
+ return;
+ }
+ }
+
+ if (ob->flags & FL_NEVERMARK)
+ return;
+
+ if ((ob->flags & FL_NONMARK) && actorat[ob->tilex][ob->tiley])
+ return;
+
+ actorat[ob->tilex][ob->tiley] = ob;
+}
+
+//==========================================================================
+
+
+/*
+===================
+=
+= PlayLoop
+=
+===================
+*/
+int32_t funnyticount;
+
+
+void PlayLoop (void)
+{
+#if defined(USE_FEATUREFLAGS) && defined(USE_CLOUDSKY)
+ if(GetFeatureFlags() & FF_CLOUDSKY)
+ InitSky();
+#endif
+
+#ifdef USE_SHADING
+ InitLevelShadeTable();
+#endif
+
+ playstate = ex_stillplaying;
+ lasttimecount = GetTimeCount();
+ frameon = 0;
+ anglefrac = 0;
+ facecount = 0;
+ funnyticount = 0;
+ memset (buttonstate, 0, sizeof (buttonstate));
+ ClearPaletteShifts ();
+
+ if (MousePresent && IN_IsInputGrabbed())
+ IN_CenterMouse(); // Clear accumulated mouse movement
+
+ if (demoplayback)
+ IN_StartAck ();
+
+ do
+ {
+ PollControls ();
+
+//
+// actor thinking
+//
+ madenoise = false;
+
+ MoveDoors ();
+ MovePWalls ();
+
+ for (obj = player; obj; obj = obj->next)
+ DoActor (obj);
+
+ UpdatePaletteShifts ();
+
+ ThreeDRefresh ();
+
+ //
+ // MAKE FUNNY FACE IF BJ DOESN'T MOVE FOR AWHILE
+ //
+#ifdef SPEAR
+ funnyticount += tics;
+ if (funnyticount > 30l * 70)
+ {
+ funnyticount = 0;
+ if(viewsize != 21)
+ StatusDrawFace(BJWAITING1PIC + (US_RndT () & 1));
+ facecount = 0;
+ }
+#endif
+
+ gamestate.TimeCount += tics;
+
+ UpdateSoundLoc (); // JAB
+ if (screenfaded)
+ VW_FadeIn ();
+
+ CheckKeys ();
+
+//
+// debug aids
+//
+ if (singlestep)
+ {
+ VW_WaitVBL (singlestep);
+ lasttimecount = GetTimeCount();
+ }
+ if (extravbls)
+ VW_WaitVBL (extravbls);
+
+ if (demoplayback)
+ {
+ if (IN_CheckAck ())
+ {
+ IN_ClearKeysDown ();
+ playstate = ex_abort;
+ }
+ }
+ }
+ while (!playstate && !startgame);
+
+ if (playstate != ex_died)
+ FinishPaletteShifts ();
+}
diff --git a/apps/plugins/sdl/progs/wolf3d/wl_shade.c b/apps/plugins/sdl/progs/wolf3d/wl_shade.c
new file mode 100644
index 0000000000..3f1d5a7b3f
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/wl_shade.c
@@ -0,0 +1,143 @@
+#include "version.h"
+
+#ifdef USE_SHADING
+#include "wl_def.h"
+#include "wl_shade.h"
+
+typedef struct {
+ uint8_t destRed, destGreen, destBlue; // values between 0 and 255
+ uint8_t fogStrength;
+} shadedef_t;
+
+shadedef_t shadeDefs[] = {
+ { 0, 0, 0, LSHADE_NOSHADING },
+ { 0, 0, 0, LSHADE_NORMAL },
+ { 0, 0, 0, LSHADE_FOG },
+ { 40, 40, 40, LSHADE_NORMAL },
+ { 60, 60, 60, LSHADE_FOG }
+};
+
+uint8_t shadetable[SHADE_COUNT][256];
+int LSHADE_flag;
+
+#ifdef USE_FEATUREFLAGS
+
+// The lower 8-bit of the upper left tile of every map determine
+// the used shading definition of shadeDefs.
+static int GetShadeDefID()
+{
+ int shadeID = ffDataTopLeft & 0x00ff;
+ assert(shadeID >= 0 && shadeID < lengthof(shadeDefs));
+ return shadeID;
+}
+
+#else
+
+static int GetShadeDefID()
+{
+ int shadeID;
+ switch(gamestate.episode * 10 + mapon)
+ {
+ case 0: shadeID = 4; break;
+ case 1:
+ case 2:
+ case 6: shadeID = 1; break;
+ case 3: shadeID = 0; break;
+ case 5: shadeID = 2; break;
+ default: shadeID = 3; break;
+ }
+ assert(shadeID >= 0 && shadeID < lengthof(shadeDefs));
+ return shadeID;
+}
+
+#endif
+
+
+// Returns the palette index of the nearest matching color of the
+// given RGB color in given palette
+byte GetColor(byte red, byte green, byte blue, SDL_Color *palette)
+{
+ byte mincol = 0;
+ double mindist = 200000.F, curdist, DRed, DGreen, DBlue;
+
+ SDL_Color *palPtr = palette;
+
+ for(int col = 0; col < 256; col++, palPtr++)
+ {
+ DRed = (double) (red - palPtr->r);
+ DGreen = (double) (green - palPtr->g);
+ DBlue = (double) (blue - palPtr->b);
+ curdist = DRed * DRed + DGreen * DGreen + DBlue * DBlue;
+ if(curdist < mindist)
+ {
+ mindist = curdist;
+ mincol = (byte) col;
+ }
+ }
+ return mincol;
+}
+
+// Fade all colors in 32 steps down to the destination-RGB
+// (use gray for fogging, black for standard shading)
+void GenerateShadeTable(byte destRed, byte destGreen, byte destBlue,
+ SDL_Color *palette, int fog)
+{
+ double curRed, curGreen, curBlue, redStep, greenStep, blueStep;
+ SDL_Color *palPtr = palette;
+
+ // Set the fog-flag
+ LSHADE_flag=fog;
+
+ // Color loop
+ for(int i = 0; i < 256; i++, palPtr++)
+ {
+ // Get original palette color
+ curRed = palPtr->r;
+ curGreen = palPtr->g;
+ curBlue = palPtr->b;
+
+ // Calculate increment per step
+ redStep = ((double) destRed - curRed) / (SHADE_COUNT + 8);
+ greenStep = ((double) destGreen - curGreen) / (SHADE_COUNT + 8);
+ blueStep = ((double) destBlue - curBlue) / (SHADE_COUNT + 8);
+
+ // Calc color for each shade of the current color
+ for (int shade = 0; shade < SHADE_COUNT; shade++)
+ {
+ shadetable[shade][i] = GetColor((byte) curRed, (byte) curGreen, (byte) curBlue, palette);
+
+ // Inc to next shade
+ curRed += redStep;
+ curGreen += greenStep;
+ curBlue += blueStep;
+ }
+ }
+}
+
+void NoShading()
+{
+ for(int shade = 0; shade < SHADE_COUNT; shade++)
+ for(int i = 0; i < 256; i++)
+ shadetable[shade][i] = i;
+}
+
+void InitLevelShadeTable()
+{
+ shadedef_t *shadeDef = &shadeDefs[GetShadeDefID()];
+ if(shadeDef->fogStrength == LSHADE_NOSHADING)
+ NoShading();
+ else
+ GenerateShadeTable(shadeDef->destRed, shadeDef->destGreen, shadeDef->destBlue, gamepal, shadeDef->fogStrength);
+}
+
+int GetShade(int scale)
+{
+ int shade = (scale >> 1) / (((viewwidth * 3) >> 8) + 1 + LSHADE_flag); // TODO: reconsider this...
+ if(shade > 32) shade = 32;
+ else if(shade < 1) shade = 1;
+ shade = 32 - shade;
+
+ return shade;
+}
+
+#endif
diff --git a/apps/plugins/sdl/progs/wolf3d/wl_shade.h b/apps/plugins/sdl/progs/wolf3d/wl_shade.h
new file mode 100644
index 0000000000..690356611b
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/wl_shade.h
@@ -0,0 +1,15 @@
+#if defined(USE_SHADING) && !defined(_WL_SHADE_H_)
+#define _WL_SHADE_H_
+
+#define SHADE_COUNT 32
+
+#define LSHADE_NOSHADING 0xff
+#define LSHADE_NORMAL 0
+#define LSHADE_FOG 5
+
+extern uint8_t shadetable[SHADE_COUNT][256];
+
+void InitLevelShadeTable();
+int GetShade(int scale);
+
+#endif
diff --git a/apps/plugins/sdl/progs/wolf3d/wl_state.c b/apps/plugins/sdl/progs/wolf3d/wl_state.c
new file mode 100644
index 0000000000..92b8ca1713
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/wl_state.c
@@ -0,0 +1,1530 @@
+// WL_STATE.C
+
+#include "wl_def.h"
+#pragma hdrstop
+
+/*
+=============================================================================
+
+ LOCAL CONSTANTS
+
+=============================================================================
+*/
+
+
+/*
+=============================================================================
+
+ GLOBAL VARIABLES
+
+=============================================================================
+*/
+
+
+static const dirtype opposite[9] =
+ {west,southwest,south,southeast,east,northeast,north,northwest,nodir};
+
+static const dirtype diagonal[9][9] =
+{
+ /* east */ {nodir,nodir,northeast,nodir,nodir,nodir,southeast,nodir,nodir},
+ {nodir,nodir,nodir,nodir,nodir,nodir,nodir,nodir,nodir},
+ /* north */ {northeast,nodir,nodir,nodir,northwest,nodir,nodir,nodir,nodir},
+ {nodir,nodir,nodir,nodir,nodir,nodir,nodir,nodir,nodir},
+ /* west */ {nodir,nodir,northwest,nodir,nodir,nodir,southwest,nodir,nodir},
+ {nodir,nodir,nodir,nodir,nodir,nodir,nodir,nodir,nodir},
+ /* south */ {southeast,nodir,nodir,nodir,southwest,nodir,nodir,nodir,nodir},
+ {nodir,nodir,nodir,nodir,nodir,nodir,nodir,nodir,nodir},
+ {nodir,nodir,nodir,nodir,nodir,nodir,nodir,nodir,nodir}
+};
+
+
+
+void SpawnNewObj (unsigned tilex, unsigned tiley, statetype *state);
+void NewState (objtype *ob, statetype *state);
+
+boolean TryWalk (objtype *ob);
+void MoveObj (objtype *ob, int32_t move);
+
+void KillActor (objtype *ob);
+void DamageActor (objtype *ob, unsigned damage);
+
+boolean CheckLine (objtype *ob);
+void FirstSighting (objtype *ob);
+boolean CheckSight (objtype *ob);
+
+/*
+=============================================================================
+
+ LOCAL VARIABLES
+
+=============================================================================
+*/
+
+
+
+//===========================================================================
+
+
+/*
+===================
+=
+= SpawnNewObj
+=
+= Spaws a new actor at the given TILE coordinates, with the given state, and
+= the given size in GLOBAL units.
+=
+= newobj = a pointer to an initialized new actor
+=
+===================
+*/
+
+void SpawnNewObj (unsigned tilex, unsigned tiley, statetype *state)
+{
+ GetNewActor ();
+ newobj->state = state;
+ if (state->tictime)
+ newobj->ticcount = DEMOCHOOSE_ORIG_SDL(
+ US_RndT () % state->tictime,
+ US_RndT () % state->tictime + 1); // Chris' moonwalk bugfix ;D
+ else
+ newobj->ticcount = 0;
+
+ newobj->tilex = (short) tilex;
+ newobj->tiley = (short) tiley;
+ newobj->x = ((int32_t)tilex<<TILESHIFT)+TILEGLOBAL/2;
+ newobj->y = ((int32_t)tiley<<TILESHIFT)+TILEGLOBAL/2;
+ newobj->dir = nodir;
+
+ actorat[tilex][tiley] = newobj;
+ newobj->areanumber =
+ *(mapsegs[0] + (newobj->tiley<<mapshift)+newobj->tilex) - AREATILE;
+}
+
+
+
+/*
+===================
+=
+= NewState
+=
+= Changes ob to a new state, setting ticcount to the max for that state
+=
+===================
+*/
+
+void NewState (objtype *ob, statetype *state)
+{
+ ob->state = state;
+ ob->ticcount = state->tictime;
+}
+
+
+
+/*
+=============================================================================
+
+ ENEMY TILE WORLD MOVEMENT CODE
+
+=============================================================================
+*/
+
+
+/*
+==================================
+=
+= TryWalk
+=
+= Attempts to move ob in its current (ob->dir) direction.
+=
+= If blocked by either a wall or an actor returns FALSE
+=
+= If move is either clear or blocked only by a door, returns TRUE and sets
+=
+= ob->tilex = new destination
+= ob->tiley
+= ob->areanumber = the floor tile number (0-(NUMAREAS-1)) of destination
+= ob->distance = TILEGLOBAl, or -doornumber if a door is blocking the way
+=
+= If a door is in the way, an OpenDoor call is made to start it opening.
+= The actor code should wait until
+= doorobjlist[-ob->distance].action = dr_open, meaning the door has been
+= fully opened
+=
+==================================
+*/
+
+#define CHECKDIAG(x,y) \
+{ \
+ temp=(uintptr_t)actorat[x][y]; \
+ if (temp) \
+ { \
+ if (temp<256) \
+ return false; \
+ if (((objtype *)temp)->flags&FL_SHOOTABLE) \
+ return false; \
+ } \
+}
+
+#ifdef PLAYDEMOLIKEORIGINAL
+ #define DOORCHECK \
+ if(DEMOCOND_ORIG) \
+ doornum = temp&63; \
+ else \
+ { \
+ doornum = (int) temp & 127; \
+ OpenDoor(doornum); \
+ ob->distance = -doornum - 1; \
+ return true; \
+ }
+#else
+ #define DOORCHECK \
+ doornum = (int) temp & 127; \
+ OpenDoor(doornum); \
+ ob->distance = -doornum - 1; \
+ return true;
+#endif
+
+#define CHECKSIDE(x,y) \
+{ \
+ temp=(uintptr_t)actorat[x][y]; \
+ if (temp) \
+ { \
+ if (temp<128) \
+ return false; \
+ if (temp<256) \
+ { \
+ DOORCHECK \
+ } \
+ else if (((objtype *)temp)->flags&FL_SHOOTABLE) \
+ return false; \
+ } \
+}
+
+
+boolean TryWalk (objtype *ob)
+{
+ int doornum = -1;
+ uintptr_t temp;
+
+ if (ob->obclass == inertobj)
+ {
+ switch (ob->dir)
+ {
+ case north:
+ ob->tiley--;
+ break;
+
+ case northeast:
+ ob->tilex++;
+ ob->tiley--;
+ break;
+
+ case east:
+ ob->tilex++;
+ break;
+
+ case southeast:
+ ob->tilex++;
+ ob->tiley++;
+ break;
+
+ case south:
+ ob->tiley++;
+ break;
+
+ case southwest:
+ ob->tilex--;
+ ob->tiley++;
+ break;
+
+ case west:
+ ob->tilex--;
+ break;
+
+ case northwest:
+ ob->tilex--;
+ ob->tiley--;
+ break;
+ }
+ }
+ else
+ {
+ switch (ob->dir)
+ {
+ case north:
+ if (ob->obclass == dogobj || ob->obclass == fakeobj
+ || ob->obclass == ghostobj || ob->obclass == spectreobj)
+ {
+ CHECKDIAG(ob->tilex,ob->tiley-1);
+ }
+ else
+ {
+ CHECKSIDE(ob->tilex,ob->tiley-1);
+ }
+ ob->tiley--;
+ break;
+
+ case northeast:
+ CHECKDIAG(ob->tilex+1,ob->tiley-1);
+ CHECKDIAG(ob->tilex+1,ob->tiley);
+ CHECKDIAG(ob->tilex,ob->tiley-1);
+ ob->tilex++;
+ ob->tiley--;
+ break;
+
+ case east:
+ if (ob->obclass == dogobj || ob->obclass == fakeobj
+ || ob->obclass == ghostobj || ob->obclass == spectreobj)
+ {
+ CHECKDIAG(ob->tilex+1,ob->tiley);
+ }
+ else
+ {
+ CHECKSIDE(ob->tilex+1,ob->tiley);
+ }
+ ob->tilex++;
+ break;
+
+ case southeast:
+ CHECKDIAG(ob->tilex+1,ob->tiley+1);
+ CHECKDIAG(ob->tilex+1,ob->tiley);
+ CHECKDIAG(ob->tilex,ob->tiley+1);
+ ob->tilex++;
+ ob->tiley++;
+ break;
+
+ case south:
+ if (ob->obclass == dogobj || ob->obclass == fakeobj
+ || ob->obclass == ghostobj || ob->obclass == spectreobj)
+ {
+ CHECKDIAG(ob->tilex,ob->tiley+1);
+ }
+ else
+ {
+ CHECKSIDE(ob->tilex,ob->tiley+1);
+ }
+ ob->tiley++;
+ break;
+
+ case southwest:
+ CHECKDIAG(ob->tilex-1,ob->tiley+1);
+ CHECKDIAG(ob->tilex-1,ob->tiley);
+ CHECKDIAG(ob->tilex,ob->tiley+1);
+ ob->tilex--;
+ ob->tiley++;
+ break;
+
+ case west:
+ if (ob->obclass == dogobj || ob->obclass == fakeobj
+ || ob->obclass == ghostobj || ob->obclass == spectreobj)
+ {
+ CHECKDIAG(ob->tilex-1,ob->tiley);
+ }
+ else
+ {
+ CHECKSIDE(ob->tilex-1,ob->tiley);
+ }
+ ob->tilex--;
+ break;
+
+ case northwest:
+ CHECKDIAG(ob->tilex-1,ob->tiley-1);
+ CHECKDIAG(ob->tilex-1,ob->tiley);
+ CHECKDIAG(ob->tilex,ob->tiley-1);
+ ob->tilex--;
+ ob->tiley--;
+ break;
+
+ case nodir:
+ return false;
+
+ default:
+ Quit ("Walk: Bad dir");
+ }
+ }
+
+#ifdef PLAYDEMOLIKEORIGINAL
+ if (DEMOCOND_ORIG && doornum != -1)
+ {
+ OpenDoor(doornum);
+ ob->distance = -doornum-1;
+ return true;
+ }
+#endif
+
+ ob->areanumber =
+ *(mapsegs[0] + (ob->tiley<<mapshift)+ob->tilex) - AREATILE;
+
+ ob->distance = TILEGLOBAL;
+ return true;
+}
+
+
+/*
+==================================
+=
+= SelectDodgeDir
+=
+= Attempts to choose and initiate a movement for ob that sends it towards
+= the player while dodging
+=
+= If there is no possible move (ob is totally surrounded)
+=
+= ob->dir = nodir
+=
+= Otherwise
+=
+= ob->dir = new direction to follow
+= ob->distance = TILEGLOBAL or -doornumber
+= ob->tilex = new destination
+= ob->tiley
+= ob->areanumber = the floor tile number (0-(NUMAREAS-1)) of destination
+=
+==================================
+*/
+
+void SelectDodgeDir (objtype *ob)
+{
+ int deltax,deltay,i;
+ unsigned absdx,absdy;
+ dirtype dirtry[5];
+ dirtype turnaround,tdir;
+
+ if (ob->flags & FL_FIRSTATTACK)
+ {
+ //
+ // turning around is only ok the very first time after noticing the
+ // player
+ //
+ turnaround = nodir;
+ ob->flags &= ~FL_FIRSTATTACK;
+ }
+ else
+ turnaround=opposite[ob->dir];
+
+ deltax = player->tilex - ob->tilex;
+ deltay = player->tiley - ob->tiley;
+
+ //
+ // arange 5 direction choices in order of preference
+ // the four cardinal directions plus the diagonal straight towards
+ // the player
+ //
+
+ if (deltax>0)
+ {
+ dirtry[1]= east;
+ dirtry[3]= west;
+ }
+ else
+ {
+ dirtry[1]= west;
+ dirtry[3]= east;
+ }
+
+ if (deltay>0)
+ {
+ dirtry[2]= south;
+ dirtry[4]= north;
+ }
+ else
+ {
+ dirtry[2]= north;
+ dirtry[4]= south;
+ }
+
+ //
+ // randomize a bit for dodging
+ //
+ absdx = abs(deltax);
+ absdy = abs(deltay);
+
+ if (absdx > absdy)
+ {
+ tdir = dirtry[1];
+ dirtry[1] = dirtry[2];
+ dirtry[2] = tdir;
+ tdir = dirtry[3];
+ dirtry[3] = dirtry[4];
+ dirtry[4] = tdir;
+ }
+
+ if (US_RndT() < 128)
+ {
+ tdir = dirtry[1];
+ dirtry[1] = dirtry[2];
+ dirtry[2] = tdir;
+ tdir = dirtry[3];
+ dirtry[3] = dirtry[4];
+ dirtry[4] = tdir;
+ }
+
+ dirtry[0] = diagonal [ dirtry[1] ] [ dirtry[2] ];
+
+ //
+ // try the directions util one works
+ //
+ for (i=0;i<5;i++)
+ {
+ if ( dirtry[i] == nodir || dirtry[i] == turnaround)
+ continue;
+
+ ob->dir = dirtry[i];
+ if (TryWalk(ob))
+ return;
+ }
+
+ //
+ // turn around only as a last resort
+ //
+ if (turnaround != nodir)
+ {
+ ob->dir = turnaround;
+
+ if (TryWalk(ob))
+ return;
+ }
+
+ ob->dir = nodir;
+}
+
+
+/*
+============================
+=
+= SelectChaseDir
+=
+= As SelectDodgeDir, but doesn't try to dodge
+=
+============================
+*/
+
+void SelectChaseDir (objtype *ob)
+{
+ int deltax,deltay;
+ dirtype d[3];
+ dirtype tdir, olddir, turnaround;
+
+
+ olddir=ob->dir;
+ turnaround=opposite[olddir];
+
+ deltax=player->tilex - ob->tilex;
+ deltay=player->tiley - ob->tiley;
+
+ d[1]=nodir;
+ d[2]=nodir;
+
+ if (deltax>0)
+ d[1]= east;
+ else if (deltax<0)
+ d[1]= west;
+ if (deltay>0)
+ d[2]=south;
+ else if (deltay<0)
+ d[2]=north;
+
+ if (abs(deltay)>abs(deltax))
+ {
+ tdir=d[1];
+ d[1]=d[2];
+ d[2]=tdir;
+ }
+
+ if (d[1]==turnaround)
+ d[1]=nodir;
+ if (d[2]==turnaround)
+ d[2]=nodir;
+
+
+ if (d[1]!=nodir)
+ {
+ ob->dir=d[1];
+ if (TryWalk(ob))
+ return; /*either moved forward or attacked*/
+ }
+
+ if (d[2]!=nodir)
+ {
+ ob->dir=d[2];
+ if (TryWalk(ob))
+ return;
+ }
+
+ /* there is no direct path to the player, so pick another direction */
+
+ if (olddir!=nodir)
+ {
+ ob->dir=olddir;
+ if (TryWalk(ob))
+ return;
+ }
+
+ if (US_RndT()>128) /*randomly determine direction of search*/
+ {
+ for (tdir=north; tdir<=west; tdir=(dirtype)(tdir+1))
+ {
+ if (tdir!=turnaround)
+ {
+ ob->dir=tdir;
+ if ( TryWalk(ob) )
+ return;
+ }
+ }
+ }
+ else
+ {
+ for (tdir=west; tdir>=north; tdir=(dirtype)(tdir-1))
+ {
+ if (tdir!=turnaround)
+ {
+ ob->dir=tdir;
+ if ( TryWalk(ob) )
+ return;
+ }
+ }
+ }
+
+ if (turnaround != nodir)
+ {
+ ob->dir=turnaround;
+ if (ob->dir != nodir)
+ {
+ if ( TryWalk(ob) )
+ return;
+ }
+ }
+
+ ob->dir = nodir; // can't move
+}
+
+
+/*
+============================
+=
+= SelectRunDir
+=
+= Run Away from player
+=
+============================
+*/
+
+void SelectRunDir (objtype *ob)
+{
+ int deltax,deltay;
+ dirtype d[3];
+ dirtype tdir;
+
+
+ deltax=player->tilex - ob->tilex;
+ deltay=player->tiley - ob->tiley;
+
+ if (deltax<0)
+ d[1]= east;
+ else
+ d[1]= west;
+ if (deltay<0)
+ d[2]=south;
+ else
+ d[2]=north;
+
+ if (abs(deltay)>abs(deltax))
+ {
+ tdir=d[1];
+ d[1]=d[2];
+ d[2]=tdir;
+ }
+
+ ob->dir=d[1];
+ if (TryWalk(ob))
+ return; /*either moved forward or attacked*/
+
+ ob->dir=d[2];
+ if (TryWalk(ob))
+ return;
+
+ /* there is no direct path to the player, so pick another direction */
+
+ if (US_RndT()>128) /*randomly determine direction of search*/
+ {
+ for (tdir=north; tdir<=west; tdir=(dirtype)(tdir+1))
+ {
+ ob->dir=tdir;
+ if ( TryWalk(ob) )
+ return;
+ }
+ }
+ else
+ {
+ for (tdir=west; tdir>=north; tdir=(dirtype)(tdir-1))
+ {
+ ob->dir=tdir;
+ if ( TryWalk(ob) )
+ return;
+ }
+ }
+
+ ob->dir = nodir; // can't move
+}
+
+
+/*
+=================
+=
+= MoveObj
+=
+= Moves ob be move global units in ob->dir direction
+= Actors are not allowed to move inside the player
+= Does NOT check to see if the move is tile map valid
+=
+= ob->x = adjusted for new position
+= ob->y
+=
+=================
+*/
+
+void MoveObj (objtype *ob, int32_t move)
+{
+ int32_t deltax,deltay;
+
+ switch (ob->dir)
+ {
+ case north:
+ ob->y -= move;
+ break;
+ case northeast:
+ ob->x += move;
+ ob->y -= move;
+ break;
+ case east:
+ ob->x += move;
+ break;
+ case southeast:
+ ob->x += move;
+ ob->y += move;
+ break;
+ case south:
+ ob->y += move;
+ break;
+ case southwest:
+ ob->x -= move;
+ ob->y += move;
+ break;
+ case west:
+ ob->x -= move;
+ break;
+ case northwest:
+ ob->x -= move;
+ ob->y -= move;
+ break;
+
+ case nodir:
+ return;
+
+ default:
+ Quit ("MoveObj: bad dir!");
+ }
+
+ //
+ // check to make sure it's not on top of player
+ //
+ if (areabyplayer[ob->areanumber])
+ {
+ deltax = ob->x - player->x;
+ if (deltax < -MINACTORDIST || deltax > MINACTORDIST)
+ goto moveok;
+ deltay = ob->y - player->y;
+ if (deltay < -MINACTORDIST || deltay > MINACTORDIST)
+ goto moveok;
+
+ if (ob->hidden) // move closer until he meets CheckLine
+ goto moveok;
+
+ if (ob->obclass == ghostobj || ob->obclass == spectreobj)
+ TakeDamage (tics*2,ob);
+
+ //
+ // back up
+ //
+ switch (ob->dir)
+ {
+ case north:
+ ob->y += move;
+ break;
+ case northeast:
+ ob->x -= move;
+ ob->y += move;
+ break;
+ case east:
+ ob->x -= move;
+ break;
+ case southeast:
+ ob->x -= move;
+ ob->y -= move;
+ break;
+ case south:
+ ob->y -= move;
+ break;
+ case southwest:
+ ob->x += move;
+ ob->y -= move;
+ break;
+ case west:
+ ob->x += move;
+ break;
+ case northwest:
+ ob->x += move;
+ ob->y += move;
+ break;
+
+ case nodir:
+ return;
+ }
+ return;
+ }
+moveok:
+ ob->distance -=move;
+}
+
+/*
+=============================================================================
+
+ STUFF
+
+=============================================================================
+*/
+
+/*
+===============
+=
+= DropItem
+=
+= Tries to drop a bonus item somewhere in the tiles surrounding the
+= given tilex/tiley
+=
+===============
+*/
+
+void DropItem (wl_stat_t itemtype, int tilex, int tiley)
+{
+ int x,y,xl,xh,yl,yh;
+
+ //
+ // find a free spot to put it in
+ //
+ if (!actorat[tilex][tiley])
+ {
+ PlaceItemType (itemtype, tilex,tiley);
+ return;
+ }
+
+ xl = tilex-1;
+ xh = tilex+1;
+ yl = tiley-1;
+ yh = tiley+1;
+
+ for (x=xl ; x<= xh ; x++)
+ {
+ for (y=yl ; y<= yh ; y++)
+ {
+ if (!actorat[x][y])
+ {
+ PlaceItemType (itemtype, x,y);
+ return;
+ }
+ }
+ }
+}
+
+
+
+/*
+===============
+=
+= KillActor
+=
+===============
+*/
+
+void KillActor (objtype *ob)
+{
+ int tilex,tiley;
+
+ tilex = ob->tilex = (word)(ob->x >> TILESHIFT); // drop item on center
+ tiley = ob->tiley = (word)(ob->y >> TILESHIFT);
+
+ switch (ob->obclass)
+ {
+ case guardobj:
+ GivePoints (100);
+ NewState (ob,&s_grddie1);
+ PlaceItemType (bo_clip2,tilex,tiley);
+ break;
+
+ case officerobj:
+ GivePoints (400);
+ NewState (ob,&s_ofcdie1);
+ PlaceItemType (bo_clip2,tilex,tiley);
+ break;
+
+ case mutantobj:
+ GivePoints (700);
+ NewState (ob,&s_mutdie1);
+ PlaceItemType (bo_clip2,tilex,tiley);
+ break;
+
+ case ssobj:
+ GivePoints (500);
+ NewState (ob,&s_ssdie1);
+ if (gamestate.bestweapon < wp_machinegun)
+ PlaceItemType (bo_machinegun,tilex,tiley);
+ else
+ PlaceItemType (bo_clip2,tilex,tiley);
+ break;
+
+ case dogobj:
+ GivePoints (200);
+ NewState (ob,&s_dogdie1);
+ break;
+
+#ifndef SPEAR
+ case bossobj:
+ GivePoints (5000);
+ NewState (ob,&s_bossdie1);
+ PlaceItemType (bo_key1,tilex,tiley);
+ break;
+
+ case gretelobj:
+ GivePoints (5000);
+ NewState (ob,&s_greteldie1);
+ PlaceItemType (bo_key1,tilex,tiley);
+ break;
+
+ case giftobj:
+ GivePoints (5000);
+ gamestate.killx = player->x;
+ gamestate.killy = player->y;
+ NewState (ob,&s_giftdie1);
+ break;
+
+ case fatobj:
+ GivePoints (5000);
+ gamestate.killx = player->x;
+ gamestate.killy = player->y;
+ NewState (ob,&s_fatdie1);
+ break;
+
+ case schabbobj:
+ GivePoints (5000);
+ gamestate.killx = player->x;
+ gamestate.killy = player->y;
+ NewState (ob,&s_schabbdie1);
+ break;
+ case fakeobj:
+ GivePoints (2000);
+ NewState (ob,&s_fakedie1);
+ break;
+
+ case mechahitlerobj:
+ GivePoints (5000);
+ NewState (ob,&s_mechadie1);
+ break;
+ case realhitlerobj:
+ GivePoints (5000);
+ gamestate.killx = player->x;
+ gamestate.killy = player->y;
+ NewState (ob,&s_hitlerdie1);
+ break;
+#else
+ case spectreobj:
+ if (ob->flags&FL_BONUS)
+ {
+ GivePoints (200); // Get points once for each
+ ob->flags &= ~FL_BONUS;
+ }
+ NewState (ob,&s_spectredie1);
+ break;
+
+ case angelobj:
+ GivePoints (5000);
+ NewState (ob,&s_angeldie1);
+ break;
+
+ case transobj:
+ GivePoints (5000);
+ NewState (ob,&s_transdie0);
+ PlaceItemType (bo_key1,tilex,tiley);
+ break;
+
+ case uberobj:
+ GivePoints (5000);
+ NewState (ob,&s_uberdie0);
+ PlaceItemType (bo_key1,tilex,tiley);
+ break;
+
+ case willobj:
+ GivePoints (5000);
+ NewState (ob,&s_willdie1);
+ PlaceItemType (bo_key1,tilex,tiley);
+ break;
+
+ case deathobj:
+ GivePoints (5000);
+ NewState (ob,&s_deathdie1);
+ PlaceItemType (bo_key1,tilex,tiley);
+ break;
+#endif
+ }
+
+ gamestate.killcount++;
+ ob->flags &= ~FL_SHOOTABLE;
+ actorat[ob->tilex][ob->tiley] = NULL;
+ ob->flags |= FL_NONMARK;
+}
+
+
+
+/*
+===================
+=
+= DamageActor
+=
+= Called when the player succesfully hits an enemy.
+=
+= Does damage points to enemy ob, either putting it into a stun frame or
+= killing it.
+=
+===================
+*/
+
+void DamageActor (objtype *ob, unsigned damage)
+{
+ madenoise = true;
+
+ //
+ // do double damage if shooting a non attack mode actor
+ //
+ if ( !(ob->flags & FL_ATTACKMODE) )
+ damage <<= 1;
+
+ ob->hitpoints -= (short)damage;
+
+ if (ob->hitpoints<=0)
+ KillActor (ob);
+ else
+ {
+ if (! (ob->flags & FL_ATTACKMODE) )
+ FirstSighting (ob); // put into combat mode
+
+ switch (ob->obclass) // dogs only have one hit point
+ {
+ case guardobj:
+ if (ob->hitpoints&1)
+ NewState (ob,&s_grdpain);
+ else
+ NewState (ob,&s_grdpain1);
+ break;
+
+ case officerobj:
+ if (ob->hitpoints&1)
+ NewState (ob,&s_ofcpain);
+ else
+ NewState (ob,&s_ofcpain1);
+ break;
+
+ case mutantobj:
+ if (ob->hitpoints&1)
+ NewState (ob,&s_mutpain);
+ else
+ NewState (ob,&s_mutpain1);
+ break;
+
+ case ssobj:
+ if (ob->hitpoints&1)
+ NewState (ob,&s_sspain);
+ else
+ NewState (ob,&s_sspain1);
+
+ break;
+ }
+ }
+}
+
+/*
+=============================================================================
+
+ CHECKSIGHT
+
+=============================================================================
+*/
+
+
+/*
+=====================
+=
+= CheckLine
+=
+= Returns true if a straight line between the player and ob is unobstructed
+=
+=====================
+*/
+
+boolean CheckLine (objtype *ob)
+{
+ int x1,y1,xt1,yt1,x2,y2,xt2,yt2;
+ int x,y;
+ int xdist,ydist,xstep,ystep;
+ int partial,delta;
+ int32_t ltemp;
+ int xfrac,yfrac,deltafrac;
+ unsigned value,intercept;
+
+ x1 = ob->x >> UNSIGNEDSHIFT; // 1/256 tile precision
+ y1 = ob->y >> UNSIGNEDSHIFT;
+ xt1 = x1 >> 8;
+ yt1 = y1 >> 8;
+
+ x2 = plux;
+ y2 = pluy;
+ xt2 = player->tilex;
+ yt2 = player->tiley;
+
+ xdist = abs(xt2-xt1);
+
+ if (xdist > 0)
+ {
+ if (xt2 > xt1)
+ {
+ partial = 256-(x1&0xff);
+ xstep = 1;
+ }
+ else
+ {
+ partial = x1&0xff;
+ xstep = -1;
+ }
+
+ deltafrac = abs(x2-x1);
+ delta = y2-y1;
+ ltemp = ((int32_t)delta<<8)/deltafrac;
+ if (ltemp > 0x7fffl)
+ ystep = 0x7fff;
+ else if (ltemp < -0x7fffl)
+ ystep = -0x7fff;
+ else
+ ystep = ltemp;
+ yfrac = y1 + (((int32_t)ystep*partial) >>8);
+
+ x = xt1+xstep;
+ xt2 += xstep;
+ do
+ {
+ y = yfrac>>8;
+ yfrac += ystep;
+
+ value = (unsigned)tilemap[x][y];
+ x += xstep;
+
+ if (!value)
+ continue;
+
+ if (value<128 || value>256)
+ return false;
+
+ //
+ // see if the door is open enough
+ //
+ value &= ~0x80;
+ intercept = yfrac-ystep/2;
+
+ if (intercept>doorposition[value])
+ return false;
+
+ } while (x != xt2);
+ }
+
+ ydist = abs(yt2-yt1);
+
+ if (ydist > 0)
+ {
+ if (yt2 > yt1)
+ {
+ partial = 256-(y1&0xff);
+ ystep = 1;
+ }
+ else
+ {
+ partial = y1&0xff;
+ ystep = -1;
+ }
+
+ deltafrac = abs(y2-y1);
+ delta = x2-x1;
+ ltemp = ((int32_t)delta<<8)/deltafrac;
+ if (ltemp > 0x7fffl)
+ xstep = 0x7fff;
+ else if (ltemp < -0x7fffl)
+ xstep = -0x7fff;
+ else
+ xstep = ltemp;
+ xfrac = x1 + (((int32_t)xstep*partial) >>8);
+
+ y = yt1 + ystep;
+ yt2 += ystep;
+ do
+ {
+ x = xfrac>>8;
+ xfrac += xstep;
+
+ value = (unsigned)tilemap[x][y];
+ y += ystep;
+
+ if (!value)
+ continue;
+
+ if (value<128 || value>256)
+ return false;
+
+ //
+ // see if the door is open enough
+ //
+ value &= ~0x80;
+ intercept = xfrac-xstep/2;
+
+ if (intercept>doorposition[value])
+ return false;
+ } while (y != yt2);
+ }
+
+ return true;
+}
+
+
+/*
+================
+=
+= CheckSight
+=
+= Checks a straight line between player and current object
+=
+= If the sight is ok, check alertness and angle to see if they notice
+=
+= returns true if the player has been spoted
+=
+================
+*/
+
+#define MINSIGHT 0x18000l
+
+boolean CheckSight (objtype *ob)
+{
+ int32_t deltax,deltay;
+
+ //
+ // don't bother tracing a line if the area isn't connected to the player's
+ //
+ if (!areabyplayer[ob->areanumber])
+ return false;
+
+ //
+ // if the player is real close, sight is automatic
+ //
+ deltax = player->x - ob->x;
+ deltay = player->y - ob->y;
+
+ if (deltax > -MINSIGHT && deltax < MINSIGHT
+ && deltay > -MINSIGHT && deltay < MINSIGHT)
+ return true;
+
+ //
+ // see if they are looking in the right direction
+ //
+ switch (ob->dir)
+ {
+ case north:
+ if (deltay > 0)
+ return false;
+ break;
+
+ case east:
+ if (deltax < 0)
+ return false;
+ break;
+
+ case south:
+ if (deltay < 0)
+ return false;
+ break;
+
+ case west:
+ if (deltax > 0)
+ return false;
+ break;
+
+ // check diagonal moving guards fix
+
+ case northwest:
+ if (DEMOCOND_SDL && deltay > -deltax)
+ return false;
+ break;
+
+ case northeast:
+ if (DEMOCOND_SDL && deltay > deltax)
+ return false;
+ break;
+
+ case southwest:
+ if (DEMOCOND_SDL && deltax > deltay)
+ return false;
+ break;
+
+ case southeast:
+ if (DEMOCOND_SDL && -deltax > deltay)
+ return false;
+ break;
+ }
+
+ //
+ // trace a line to check for blocking tiles (corners)
+ //
+ return CheckLine (ob);
+}
+
+
+/*
+===============
+=
+= FirstSighting
+=
+= Puts an actor into attack mode and possibly reverses the direction
+= if the player is behind it
+=
+===============
+*/
+
+void FirstSighting (objtype *ob)
+{
+ //
+ // react to the player
+ //
+ switch (ob->obclass)
+ {
+ case guardobj:
+ PlaySoundLocActor(HALTSND,ob);
+ NewState (ob,&s_grdchase1);
+ ob->speed *= 3; // go faster when chasing player
+ break;
+
+ case officerobj:
+ PlaySoundLocActor(SPIONSND,ob);
+ NewState (ob,&s_ofcchase1);
+ ob->speed *= 5; // go faster when chasing player
+ break;
+
+ case mutantobj:
+ NewState (ob,&s_mutchase1);
+ ob->speed *= 3; // go faster when chasing player
+ break;
+
+ case ssobj:
+ PlaySoundLocActor(SCHUTZADSND,ob);
+ NewState (ob,&s_sschase1);
+ ob->speed *= 4; // go faster when chasing player
+ break;
+
+ case dogobj:
+ PlaySoundLocActor(DOGBARKSND,ob);
+ NewState (ob,&s_dogchase1);
+ ob->speed *= 2; // go faster when chasing player
+ break;
+
+#ifndef SPEAR
+ case bossobj:
+ SD_PlaySound(GUTENTAGSND);
+ NewState (ob,&s_bosschase1);
+ ob->speed = SPDPATROL*3; // go faster when chasing player
+ break;
+
+#ifndef APOGEE_1_0
+ case gretelobj:
+ SD_PlaySound(KEINSND);
+ NewState (ob,&s_gretelchase1);
+ ob->speed *= 3; // go faster when chasing player
+ break;
+
+ case giftobj:
+ SD_PlaySound(EINESND);
+ NewState (ob,&s_giftchase1);
+ ob->speed *= 3; // go faster when chasing player
+ break;
+
+ case fatobj:
+ SD_PlaySound(ERLAUBENSND);
+ NewState (ob,&s_fatchase1);
+ ob->speed *= 3; // go faster when chasing player
+ break;
+#endif
+
+ case schabbobj:
+ SD_PlaySound(SCHABBSHASND);
+ NewState (ob,&s_schabbchase1);
+ ob->speed *= 3; // go faster when chasing player
+ break;
+
+ case fakeobj:
+ SD_PlaySound(TOT_HUNDSND);
+ NewState (ob,&s_fakechase1);
+ ob->speed *= 3; // go faster when chasing player
+ break;
+
+ case mechahitlerobj:
+ SD_PlaySound(DIESND);
+ NewState (ob,&s_mechachase1);
+ ob->speed *= 3; // go faster when chasing player
+ break;
+
+ case realhitlerobj:
+ SD_PlaySound(DIESND);
+ NewState (ob,&s_hitlerchase1);
+ ob->speed *= 5; // go faster when chasing player
+ break;
+
+ case ghostobj:
+ NewState (ob,&s_blinkychase1);
+ ob->speed *= 2; // go faster when chasing player
+ break;
+#else
+ case spectreobj:
+ SD_PlaySound(GHOSTSIGHTSND);
+ NewState (ob,&s_spectrechase1);
+ ob->speed = 800; // go faster when chasing player
+ break;
+
+ case angelobj:
+ SD_PlaySound(ANGELSIGHTSND);
+ NewState (ob,&s_angelchase1);
+ ob->speed = 1536; // go faster when chasing player
+ break;
+
+ case transobj:
+ SD_PlaySound(TRANSSIGHTSND);
+ NewState (ob,&s_transchase1);
+ ob->speed = 1536; // go faster when chasing player
+ break;
+
+ case uberobj:
+ NewState (ob,&s_uberchase1);
+ ob->speed = 3000; // go faster when chasing player
+ break;
+
+ case willobj:
+ SD_PlaySound(WILHELMSIGHTSND);
+ NewState (ob,&s_willchase1);
+ ob->speed = 2048; // go faster when chasing player
+ break;
+
+ case deathobj:
+ SD_PlaySound(KNIGHTSIGHTSND);
+ NewState (ob,&s_deathchase1);
+ ob->speed = 2048; // go faster when chasing player
+ break;
+#endif
+ }
+
+ if (ob->distance < 0)
+ ob->distance = 0; // ignore the door opening command
+
+ ob->flags |= FL_ATTACKMODE|FL_FIRSTATTACK;
+}
+
+
+
+/*
+===============
+=
+= SightPlayer
+=
+= Called by actors that ARE NOT chasing the player. If the player
+= is detected (by sight, noise, or proximity), the actor is put into
+= it's combat frame and true is returned.
+=
+= Incorporates a random reaction delay
+=
+===============
+*/
+
+boolean SightPlayer (objtype *ob)
+{
+ if (ob->flags & FL_ATTACKMODE)
+ Quit ("An actor in ATTACKMODE called SightPlayer!");
+
+ if (ob->temp2)
+ {
+ //
+ // count down reaction time
+ //
+ ob->temp2 -= (short) tics;
+ if (ob->temp2 > 0)
+ return false;
+ ob->temp2 = 0; // time to react
+ }
+ else
+ {
+ if (!areabyplayer[ob->areanumber])
+ return false;
+
+ if (ob->flags & FL_AMBUSH)
+ {
+ if (!CheckSight (ob))
+ return false;
+ ob->flags &= ~FL_AMBUSH;
+ }
+ else
+ {
+ if (!madenoise && !CheckSight (ob))
+ return false;
+ }
+
+
+ switch (ob->obclass)
+ {
+ case guardobj:
+ ob->temp2 = 1+US_RndT()/4;
+ break;
+ case officerobj:
+ ob->temp2 = 2;
+ break;
+ case mutantobj:
+ ob->temp2 = 1+US_RndT()/6;
+ break;
+ case ssobj:
+ ob->temp2 = 1+US_RndT()/6;
+ break;
+ case dogobj:
+ ob->temp2 = 1+US_RndT()/8;
+ break;
+
+ case bossobj:
+ case schabbobj:
+ case fakeobj:
+ case mechahitlerobj:
+ case realhitlerobj:
+ case gretelobj:
+ case giftobj:
+ case fatobj:
+ case spectreobj:
+ case angelobj:
+ case transobj:
+ case uberobj:
+ case willobj:
+ case deathobj:
+ ob->temp2 = 1;
+ break;
+ }
+ return false;
+ }
+
+ FirstSighting (ob);
+
+ return true;
+}
diff --git a/apps/plugins/sdl/progs/wolf3d/wl_text.c b/apps/plugins/sdl/progs/wolf3d/wl_text.c
new file mode 100644
index 0000000000..d51117b836
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/wl_text.c
@@ -0,0 +1,859 @@
+// WL_TEXT.C
+
+#include "wl_def.h"
+#pragma hdrstop
+
+/*
+=============================================================================
+
+TEXT FORMATTING COMMANDS
+------------------------
+^C<hex digit> Change text color
+^E[enter] End of layout (all pages)
+^G<y>,<x>,<pic>[enter] Draw a graphic and push margins
+^P[enter] start new page, must be the first chars in a layout
+^L<x>,<y>[ENTER] Locate to a specific spot, x in pixels, y in lines
+
+=============================================================================
+*/
+
+/*
+=============================================================================
+
+ LOCAL CONSTANTS
+
+=============================================================================
+*/
+
+#ifndef SPEAR
+
+#define BACKCOLOR 0x11
+
+
+#define WORDLIMIT 80
+#define FONTHEIGHT 10
+#define TOPMARGIN 16
+#define BOTTOMMARGIN 32
+#define LEFTMARGIN 16
+#define RIGHTMARGIN 16
+#define PICMARGIN 8
+#define TEXTROWS ((200-TOPMARGIN-BOTTOMMARGIN)/FONTHEIGHT)
+#define SPACEWIDTH 7
+#define SCREENPIXWIDTH 320
+#define SCREENMID (SCREENPIXWIDTH/2)
+
+/*
+=============================================================================
+
+ LOCAL VARIABLES
+
+=============================================================================
+*/
+
+static int pagenum;
+static int numpages;
+
+static unsigned leftmargin[TEXTROWS];
+static unsigned rightmargin[TEXTROWS];
+static char* text;
+static unsigned rowon;
+
+static int picx;
+static int picy;
+static int picnum;
+static int picdelay;
+static boolean layoutdone;
+
+//===========================================================================
+
+#ifndef JAPAN
+/*
+=====================
+=
+= RipToEOL
+=
+=====================
+*/
+
+void RipToEOL (void)
+{
+ while (*text++ != '\n') // scan to end of line
+ ;
+}
+
+
+/*
+=====================
+=
+= ParseNumber
+=
+=====================
+*/
+
+int ParseNumber (void)
+{
+ char ch;
+ char num[80];
+ char *numptr;
+
+ //
+ // scan until a number is found
+ //
+ ch = *text;
+ while (ch < '0' || ch >'9')
+ ch = *++text;
+
+ //
+ // copy the number out
+ //
+ numptr = num;
+ do
+ {
+ *numptr++ = ch;
+ ch = *++text;
+ } while (ch >= '0' && ch <= '9');
+ *numptr = 0;
+
+ return atoi (num);
+}
+
+
+
+/*
+=====================
+=
+= ParsePicCommand
+=
+= Call with text pointing just after a ^P
+= Upon exit text points to the start of next line
+=
+=====================
+*/
+
+void ParsePicCommand (void)
+{
+ picy=ParseNumber();
+ picx=ParseNumber();
+ picnum=ParseNumber();
+ RipToEOL ();
+}
+
+
+void ParseTimedCommand (void)
+{
+ picy=ParseNumber();
+ picx=ParseNumber();
+ picnum=ParseNumber();
+ picdelay=ParseNumber();
+ RipToEOL ();
+}
+
+
+/*
+=====================
+=
+= TimedPicCommand
+=
+= Call with text pointing just after a ^P
+= Upon exit text points to the start of next line
+=
+=====================
+*/
+
+void TimedPicCommand (void)
+{
+ ParseTimedCommand ();
+
+ //
+ // update the screen, and wait for time delay
+ //
+ VW_UpdateScreen ();
+
+ //
+ // wait for time
+ //
+ Delay(picdelay);
+
+ //
+ // draw pic
+ //
+ VWB_DrawPic (picx&~7,picy,picnum);
+}
+
+
+/*
+=====================
+=
+= HandleCommand
+=
+=====================
+*/
+
+void HandleCommand (void)
+{
+ int i,margin,top,bottom;
+ int picwidth,picheight,picmid;
+
+ switch (toupper(*++text))
+ {
+ case 'B':
+ picy=ParseNumber();
+ picx=ParseNumber();
+ picwidth=ParseNumber();
+ picheight=ParseNumber();
+ VWB_Bar(picx,picy,picwidth,picheight,BACKCOLOR);
+ RipToEOL();
+ break;
+ case ';': // comment
+ RipToEOL();
+ break;
+ case 'P': // ^P is start of next page, ^E is end of file
+ case 'E':
+ layoutdone = true;
+ text--; // back up to the '^'
+ break;
+
+ case 'C': // ^c<hex digit> changes text color
+ i = toupper(*++text);
+ if (i>='0' && i<='9')
+ fontcolor = i-'0';
+ else if (i>='A' && i<='F')
+ fontcolor = i-'A'+10;
+
+ fontcolor *= 16;
+ i = toupper(*++text);
+ if (i>='0' && i<='9')
+ fontcolor += i-'0';
+ else if (i>='A' && i<='F')
+ fontcolor += i-'A'+10;
+ text++;
+ break;
+
+ case '>':
+ px = 160;
+ text++;
+ break;
+
+ case 'L':
+ py=ParseNumber();
+ rowon = (py-TOPMARGIN)/FONTHEIGHT;
+ py = TOPMARGIN+rowon*FONTHEIGHT;
+ px=ParseNumber();
+ while (*text++ != '\n') // scan to end of line
+ ;
+ break;
+
+ case 'T': // ^Tyyy,xxx,ppp,ttt waits ttt tics, then draws pic
+ TimedPicCommand ();
+ break;
+
+ case 'G': // ^Gyyy,xxx,ppp draws graphic
+ ParsePicCommand ();
+ VWB_DrawPic (picx&~7,picy,picnum);
+ picwidth = pictable[picnum-STARTPICS].width;
+ picheight = pictable[picnum-STARTPICS].height;
+ //
+ // adjust margins
+ //
+ picmid = picx + picwidth/2;
+ if (picmid > SCREENMID)
+ margin = picx-PICMARGIN; // new right margin
+ else
+ margin = picx+picwidth+PICMARGIN; // new left margin
+
+ top = (picy-TOPMARGIN)/FONTHEIGHT;
+ if (top<0)
+ top = 0;
+ bottom = (picy+picheight-TOPMARGIN)/FONTHEIGHT;
+ if (bottom>=TEXTROWS)
+ bottom = TEXTROWS-1;
+
+ for (i=top;i<=bottom;i++)
+ if (picmid > SCREENMID)
+ rightmargin[i] = margin;
+ else
+ leftmargin[i] = margin;
+
+ //
+ // adjust this line if needed
+ //
+ if (px < (int) leftmargin[rowon])
+ px = leftmargin[rowon];
+ break;
+ }
+}
+
+
+/*
+=====================
+=
+= NewLine
+=
+=====================
+*/
+
+void NewLine (void)
+{
+ char ch;
+
+ if (++rowon == TEXTROWS)
+ {
+ //
+ // overflowed the page, so skip until next page break
+ //
+ layoutdone = true;
+ do
+ {
+ if (*text == '^')
+ {
+ ch = toupper(*(text+1));
+ if (ch == 'E' || ch == 'P')
+ {
+ layoutdone = true;
+ return;
+ }
+ }
+ text++;
+ } while (1);
+ }
+ px = leftmargin[rowon];
+ py+= FONTHEIGHT;
+}
+
+
+
+/*
+=====================
+=
+= HandleCtrls
+=
+=====================
+*/
+
+void HandleCtrls (void)
+{
+ char ch;
+
+ ch = *text++; // get the character and advance
+
+ if (ch == '\n')
+ {
+ NewLine ();
+ return;
+ }
+}
+
+
+/*
+=====================
+=
+= HandleWord
+=
+=====================
+*/
+
+void HandleWord (void)
+{
+ char wword[WORDLIMIT];
+ int wordindex;
+ word wwidth,wheight,newpos;
+
+
+ //
+ // copy the next word into [word]
+ //
+ wword[0] = *text++;
+ wordindex = 1;
+ while (*text>32)
+ {
+ wword[wordindex] = *text++;
+ if (++wordindex == WORDLIMIT)
+ Quit ("PageLayout: Word limit exceeded");
+ }
+ wword[wordindex] = 0; // stick a null at end for C
+
+ //
+ // see if it fits on this line
+ //
+ VW_MeasurePropString (wword,&wwidth,&wheight);
+
+ while (px+wwidth > (int) rightmargin[rowon])
+ {
+ NewLine ();
+ if (layoutdone)
+ return; // overflowed page
+ }
+
+ //
+ // print it
+ //
+ newpos = px+wwidth;
+ VWB_DrawPropString (wword);
+ px = newpos;
+
+ //
+ // suck up any extra spaces
+ //
+ while (*text == ' ')
+ {
+ px += SPACEWIDTH;
+ text++;
+ }
+}
+
+/*
+=====================
+=
+= PageLayout
+=
+= Clears the screen, draws the pics on the page, and word wraps the text.
+= Returns a pointer to the terminating command
+=
+=====================
+*/
+
+void PageLayout (boolean shownumber)
+{
+ int i,oldfontcolor;
+ char ch;
+
+ oldfontcolor = fontcolor;
+
+ fontcolor = 0;
+
+ //
+ // clear the screen
+ //
+ VWB_Bar (0,0,320,200,BACKCOLOR);
+ VWB_DrawPic (0,0,H_TOPWINDOWPIC);
+ VWB_DrawPic (0,8,H_LEFTWINDOWPIC);
+ VWB_DrawPic (312,8,H_RIGHTWINDOWPIC);
+ VWB_DrawPic (8,176,H_BOTTOMINFOPIC);
+
+
+ for (i=0; i<TEXTROWS; i++)
+ {
+ leftmargin[i] = LEFTMARGIN;
+ rightmargin[i] = SCREENPIXWIDTH-RIGHTMARGIN;
+ }
+
+ px = LEFTMARGIN;
+ py = TOPMARGIN;
+ rowon = 0;
+ layoutdone = false;
+
+ //
+ // make sure we are starting layout text (^P first command)
+ //
+ while (*text <= 32)
+ text++;
+
+ if (*text != '^' || toupper(*++text) != 'P')
+ Quit ("PageLayout: Text not headed with ^P");
+
+ while (*text++ != '\n')
+ ;
+
+
+ //
+ // process text stream
+ //
+ do
+ {
+ ch = *text;
+
+ if (ch == '^')
+ HandleCommand ();
+ else
+ if (ch == 9)
+ {
+ px = (px+8)&0xf8;
+ text++;
+ }
+ else if (ch <= 32)
+ HandleCtrls ();
+ else
+ HandleWord ();
+
+ } while (!layoutdone);
+
+ pagenum++;
+
+ if (shownumber)
+ {
+#ifdef SPANISH
+ sprintf(str, "Hoja %d de %d", pagenum, numpages);
+ px = 208;
+#else
+ sprintf(str, "pg %d of %d", pagenum, numpages);
+ px = 213;
+#endif
+ py = 183;
+ fontcolor = 0x4f; //12^BACKCOLOR;
+
+ VWB_DrawPropString (str);
+ }
+
+ fontcolor = oldfontcolor;
+}
+
+//===========================================================================
+
+/*
+=====================
+=
+= BackPage
+=
+= Scans for a previous ^P
+=
+=====================
+*/
+
+void BackPage (void)
+{
+ pagenum--;
+ do
+ {
+ text--;
+ if (*text == '^' && toupper(*(text+1)) == 'P')
+ return;
+ } while (1);
+}
+
+
+//===========================================================================
+
+
+/*
+=====================
+=
+= CacheLayoutGraphics
+=
+= Scans an entire layout file (until a ^E) marking all graphics used, and
+= counting pages, then caches the graphics in
+=
+=====================
+*/
+void CacheLayoutGraphics (void)
+{
+ char *bombpoint, *textstart;
+ char ch;
+
+ textstart = text;
+ bombpoint = text+30000;
+ numpages = pagenum = 0;
+
+ do
+ {
+ if (*text == '^')
+ {
+ ch = toupper(*++text);
+ if (ch == 'P') // start of a page
+ numpages++;
+ if (ch == 'E') // end of file, so load graphics and return
+ {
+#ifndef SPEAR
+ CA_CacheGrChunk(H_TOPWINDOWPIC);
+ CA_CacheGrChunk(H_LEFTWINDOWPIC);
+ CA_CacheGrChunk(H_RIGHTWINDOWPIC);
+ CA_CacheGrChunk(H_BOTTOMINFOPIC);
+#endif
+ // CA_CacheMarks ();
+ text = textstart;
+ return;
+ }
+ if (ch == 'G') // draw graphic command, so mark graphics
+ {
+ ParsePicCommand ();
+ CA_CacheGrChunk (picnum);
+ }
+ if (ch == 'T') // timed draw graphic command, so mark graphics
+ {
+ ParseTimedCommand ();
+ CA_CacheGrChunk (picnum);
+ }
+ }
+ else
+ text++;
+
+ } while (text<bombpoint);
+
+ Quit ("CacheLayoutGraphics: No ^E to terminate file!");
+}
+#endif
+
+
+/*
+=====================
+=
+= ShowArticle
+=
+=====================
+*/
+
+#ifdef JAPAN
+void ShowArticle (int which)
+#else
+void ShowArticle (char *article)
+#endif
+{
+#ifdef JAPAN
+ int snames[10] = {
+ H_HELP1PIC,
+ H_HELP2PIC,
+ H_HELP3PIC,
+ H_HELP4PIC,
+ H_HELP5PIC,
+ H_HELP6PIC,
+ H_HELP7PIC,
+ H_HELP8PIC,
+ H_HELP9PIC,
+ H_HELP10PIC};
+ int enames[14] = {
+ 0,0,
+#ifndef JAPDEMO
+ C_ENDGAME1APIC,
+ C_ENDGAME1BPIC,
+ C_ENDGAME2APIC,
+ C_ENDGAME2BPIC,
+ C_ENDGAME3APIC,
+ C_ENDGAME3BPIC,
+ C_ENDGAME4APIC,
+ C_ENDGAME4BPIC,
+ C_ENDGAME5APIC,
+ C_ENDGAME5BPIC,
+ C_ENDGAME6APIC,
+ C_ENDGAME6BPIC
+#endif
+ };
+#endif
+ unsigned oldfontnumber;
+ boolean newpage,firstpage;
+ ControlInfo ci;
+
+#ifdef JAPAN
+ pagenum = 1;
+ if (!which)
+ numpages = 10;
+ else
+ numpages = 2;
+#else
+ text = article;
+ oldfontnumber = fontnumber;
+ fontnumber = 0;
+ CA_CacheGrChunk(STARTFONT);
+ VWB_Bar (0,0,320,200,BACKCOLOR);
+ CacheLayoutGraphics ();
+#endif
+
+ newpage = true;
+ firstpage = true;
+
+ do
+ {
+ if (newpage)
+ {
+ newpage = false;
+#ifdef JAPAN
+ if (!which)
+ CA_CacheScreen(snames[pagenum - 1]);
+ else
+ CA_CacheScreen(enames[which*2 + pagenum - 1]);
+#else
+ PageLayout (true);
+#endif
+ VW_UpdateScreen ();
+ if (firstpage)
+ {
+ VL_FadeIn(0,255,gamepal,10);
+ firstpage = false;
+ }
+ }
+ SDL_Delay(5);
+
+ LastScan = 0;
+ ReadAnyControl(&ci);
+ Direction dir = ci.dir;
+ switch(dir)
+ {
+ case dir_North:
+ case dir_South:
+ break;
+
+ default:
+ if(ci.button0) dir = dir_South;
+ switch(LastScan)
+ {
+ case sc_UpArrow:
+ case sc_PgUp:
+ case sc_LeftArrow:
+ dir = dir_North;
+ break;
+
+ case sc_Enter:
+ case sc_DownArrow:
+ case sc_PgDn:
+ case sc_RightArrow:
+ dir = dir_South;
+ break;
+ }
+ break;
+ }
+
+ switch(dir)
+ {
+ case dir_North:
+ case dir_West:
+ if (pagenum>1)
+ {
+#ifndef JAPAN
+ BackPage ();
+ BackPage ();
+#else
+ pagenum--;
+#endif
+ newpage = true;
+ }
+ TicDelay(20);
+ break;
+
+ case dir_South:
+ case dir_East:
+ if (pagenum<numpages)
+ {
+ newpage = true;
+#ifdef JAPAN
+ pagenum++;
+#endif
+ }
+ TicDelay(20);
+ break;
+ }
+ } while (LastScan != sc_Escape && !ci.button1);
+
+ IN_ClearKeysDown ();
+ fontnumber = oldfontnumber;
+}
+
+
+//===========================================================================
+
+#ifndef JAPAN
+#ifdef ARTSEXTERN
+int endextern = T_ENDART1;
+#ifndef SPEAR
+int helpextern = T_HELPART;
+#endif
+#endif
+char helpfilename[13] = "HELPART.",
+ endfilename[13] = "ENDART1.";
+#endif
+
+/*
+=================
+=
+= HelpScreens
+=
+=================
+*/
+#ifndef SPEAR
+void HelpScreens (void)
+{
+ int artnum;
+ char *text;
+#ifndef ARTSEXTERN
+ memptr layout;
+#endif
+
+
+ // CA_UpLevel ();
+ // MM_SortMem ();
+#ifdef JAPAN
+ ShowArticle (0);
+ VW_FadeOut();
+ FreeMusic ();
+ CA_DownLevel ();
+ MM_SortMem ();
+#else
+
+#ifdef ARTSEXTERN
+ artnum = helpextern;
+ CA_CacheGrChunk (artnum);
+ text = (char *)grsegs[artnum];
+#else
+ CA_LoadFile (helpfilename,&layout);
+ text = (char *)layout;
+#endif
+
+ ShowArticle (text);
+
+#ifdef ARTSEXTERN
+ UNCACHEGRCHUNK(artnum);
+#else
+ free(layout);
+#endif
+
+ VW_FadeOut();
+
+ FreeMusic ();
+#endif
+}
+#endif
+
+//
+// END ARTICLES
+//
+void EndText (void)
+{
+ int artnum;
+ char *text;
+#ifndef ARTSEXTERN
+ memptr layout;
+#endif
+
+ ClearMemory ();
+
+#ifdef JAPAN
+ ShowArticle(gamestate.episode + 1);
+
+ VW_FadeOut();
+
+ SETFONTCOLOR(0,15);
+ IN_ClearKeysDown();
+ if (MousePresent && IN_IsInputGrabbed())
+ IN_CenterMouse(); // Clear accumulated mouse movement
+
+ FreeMusic ();
+#else
+
+
+
+#ifdef ARTSEXTERN
+ artnum = endextern+gamestate.episode;
+ CA_CacheGrChunk (artnum);
+ text = (char *)grsegs[artnum];
+#else
+ endfilename[6] = '1'+gamestate.episode;
+ CA_LoadFile (endfilename,&layout);
+ text = (char *)layout;
+#endif
+
+ ShowArticle (text);
+
+#ifdef ARTSEXTERN
+ UNCACHEGRCHUNK(artnum);
+#else
+ free(layout);
+#endif
+
+
+ VW_FadeOut();
+ SETFONTCOLOR(0,15);
+ IN_ClearKeysDown();
+ if (MousePresent && IN_IsInputGrabbed())
+ IN_CenterMouse(); // Clear accumulated mouse movement
+
+ FreeMusic ();
+#endif
+}
+#endif
diff --git a/apps/plugins/sdl/progs/wolf3d/wolfpal.inc b/apps/plugins/sdl/progs/wolf3d/wolfpal.inc
new file mode 100644
index 0000000000..1d087ff7ff
--- /dev/null
+++ b/apps/plugins/sdl/progs/wolf3d/wolfpal.inc
@@ -0,0 +1,52 @@
+RGB( 0, 0, 0),RGB( 0, 0, 42),RGB( 0, 42, 0),RGB( 0, 42, 42),RGB( 42, 0, 0),
+RGB( 42, 0, 42),RGB( 42, 21, 0),RGB( 42, 42, 42),RGB( 21, 21, 21),RGB( 21, 21, 63),
+RGB( 21, 63, 21),RGB( 21, 63, 63),RGB( 63, 21, 21),RGB( 63, 21, 63),RGB( 63, 63, 21),
+RGB( 63, 63, 63),RGB( 59, 59, 59),RGB( 55, 55, 55),RGB( 52, 52, 52),RGB( 48, 48, 48),
+RGB( 45, 45, 45),RGB( 42, 42, 42),RGB( 38, 38, 38),RGB( 35, 35, 35),RGB( 31, 31, 31),
+RGB( 28, 28, 28),RGB( 25, 25, 25),RGB( 21, 21, 21),RGB( 18, 18, 18),RGB( 14, 14, 14),
+RGB( 11, 11, 11),RGB( 8, 8, 8),RGB( 63, 0, 0),RGB( 59, 0, 0),RGB( 56, 0, 0),
+RGB( 53, 0, 0),RGB( 50, 0, 0),RGB( 47, 0, 0),RGB( 44, 0, 0),RGB( 41, 0, 0),
+RGB( 38, 0, 0),RGB( 34, 0, 0),RGB( 31, 0, 0),RGB( 28, 0, 0),RGB( 25, 0, 0),
+RGB( 22, 0, 0),RGB( 19, 0, 0),RGB( 16, 0, 0),RGB( 63, 54, 54),RGB( 63, 46, 46),
+RGB( 63, 39, 39),RGB( 63, 31, 31),RGB( 63, 23, 23),RGB( 63, 16, 16),RGB( 63, 8, 8),
+RGB( 63, 0, 0),RGB( 63, 42, 23),RGB( 63, 38, 16),RGB( 63, 34, 8),RGB( 63, 30, 0),
+RGB( 57, 27, 0),RGB( 51, 24, 0),RGB( 45, 21, 0),RGB( 39, 19, 0),RGB( 63, 63, 54),
+RGB( 63, 63, 46),RGB( 63, 63, 39),RGB( 63, 63, 31),RGB( 63, 62, 23),RGB( 63, 61, 16),
+RGB( 63, 61, 8),RGB( 63, 61, 0),RGB( 57, 54, 0),RGB( 51, 49, 0),RGB( 45, 43, 0),
+RGB( 39, 39, 0),RGB( 33, 33, 0),RGB( 28, 27, 0),RGB( 22, 21, 0),RGB( 16, 16, 0),
+RGB( 52, 63, 23),RGB( 49, 63, 16),RGB( 45, 63, 8),RGB( 40, 63, 0),RGB( 36, 57, 0),
+RGB( 32, 51, 0),RGB( 29, 45, 0),RGB( 24, 39, 0),RGB( 54, 63, 54),RGB( 47, 63, 46),
+RGB( 39, 63, 39),RGB( 32, 63, 31),RGB( 24, 63, 23),RGB( 16, 63, 16),RGB( 8, 63, 8),
+RGB( 0, 63, 0),RGB( 0, 63, 0),RGB( 0, 59, 0),RGB( 0, 56, 0),RGB( 0, 53, 0),
+RGB( 1, 50, 0),RGB( 1, 47, 0),RGB( 1, 44, 0),RGB( 1, 41, 0),RGB( 1, 38, 0),
+RGB( 1, 34, 0),RGB( 1, 31, 0),RGB( 1, 28, 0),RGB( 1, 25, 0),RGB( 1, 22, 0),
+RGB( 1, 19, 0),RGB( 1, 16, 0),RGB( 54, 63, 63),RGB( 46, 63, 63),RGB( 39, 63, 63),
+RGB( 31, 63, 62),RGB( 23, 63, 63),RGB( 16, 63, 63),RGB( 8, 63, 63),RGB( 0, 63, 63),
+RGB( 0, 57, 57),RGB( 0, 51, 51),RGB( 0, 45, 45),RGB( 0, 39, 39),RGB( 0, 33, 33),
+RGB( 0, 28, 28),RGB( 0, 22, 22),RGB( 0, 16, 16),RGB( 23, 47, 63),RGB( 16, 44, 63),
+RGB( 8, 42, 63),RGB( 0, 39, 63),RGB( 0, 35, 57),RGB( 0, 31, 51),RGB( 0, 27, 45),
+RGB( 0, 23, 39),RGB( 54, 54, 63),RGB( 46, 47, 63),RGB( 39, 39, 63),RGB( 31, 32, 63),
+RGB( 23, 24, 63),RGB( 16, 16, 63),RGB( 8, 9, 63),RGB( 0, 1, 63),RGB( 0, 0, 63),
+RGB( 0, 0, 59),RGB( 0, 0, 56),RGB( 0, 0, 53),RGB( 0, 0, 50),RGB( 0, 0, 47),
+RGB( 0, 0, 44),RGB( 0, 0, 41),RGB( 0, 0, 38),RGB( 0, 0, 34),RGB( 0, 0, 31),
+RGB( 0, 0, 28),RGB( 0, 0, 25),RGB( 0, 0, 22),RGB( 0, 0, 19),RGB( 0, 0, 16),
+RGB( 10, 10, 10),RGB( 63, 56, 13),RGB( 63, 53, 9),RGB( 63, 51, 6),RGB( 63, 48, 2),
+RGB( 63, 45, 0),RGB( 45, 8, 63),RGB( 42, 0, 63),RGB( 38, 0, 57),RGB( 32, 0, 51),
+RGB( 29, 0, 45),RGB( 24, 0, 39),RGB( 20, 0, 33),RGB( 17, 0, 28),RGB( 13, 0, 22),
+RGB( 10, 0, 16),RGB( 63, 54, 63),RGB( 63, 46, 63),RGB( 63, 39, 63),RGB( 63, 31, 63),
+RGB( 63, 23, 63),RGB( 63, 16, 63),RGB( 63, 8, 63),RGB( 63, 0, 63),RGB( 56, 0, 57),
+RGB( 50, 0, 51),RGB( 45, 0, 45),RGB( 39, 0, 39),RGB( 33, 0, 33),RGB( 27, 0, 28),
+RGB( 22, 0, 22),RGB( 16, 0, 16),RGB( 63, 58, 55),RGB( 63, 56, 52),RGB( 63, 54, 49),
+RGB( 63, 53, 47),RGB( 63, 51, 44),RGB( 63, 49, 41),RGB( 63, 47, 39),RGB( 63, 46, 36),
+RGB( 63, 44, 32),RGB( 63, 41, 28),RGB( 63, 39, 24),RGB( 60, 37, 23),RGB( 58, 35, 22),
+RGB( 55, 34, 21),RGB( 52, 32, 20),RGB( 50, 31, 19),RGB( 47, 30, 18),RGB( 45, 28, 17),
+RGB( 42, 26, 16),RGB( 40, 25, 15),RGB( 39, 24, 14),RGB( 36, 23, 13),RGB( 34, 22, 12),
+RGB( 32, 20, 11),RGB( 29, 19, 10),RGB( 27, 18, 9),RGB( 23, 16, 8),RGB( 21, 15, 7),
+RGB( 18, 14, 6),RGB( 16, 12, 6),RGB( 14, 11, 5),RGB( 10, 8, 3),RGB( 24, 0, 25),
+RGB( 0, 25, 25),RGB( 0, 24, 24),RGB( 0, 0, 7),RGB( 0, 0, 11),RGB( 12, 9, 4),
+RGB( 18, 0, 18),RGB( 20, 0, 20),RGB( 0, 0, 13),RGB( 7, 7, 7),RGB( 19, 19, 19),
+RGB( 23, 23, 23),RGB( 16, 16, 16),RGB( 12, 12, 12),RGB( 13, 13, 13),RGB( 54, 61, 61),
+RGB( 46, 58, 58),RGB( 39, 55, 55),RGB( 29, 50, 50),RGB( 18, 48, 48),RGB( 8, 45, 45),
+RGB( 8, 44, 44),RGB( 0, 41, 41),RGB( 0, 38, 38),RGB( 0, 35, 35),RGB( 0, 33, 33),
+RGB( 0, 31, 31),RGB( 0, 30, 30),RGB( 0, 29, 29),RGB( 0, 28, 28),RGB( 0, 27, 27),
+RGB( 38, 0, 34)
diff --git a/apps/plugins/sdl/sdl.make b/apps/plugins/sdl/sdl.make
index 98346389fc..871eac77d8 100644
--- a/apps/plugins/sdl/sdl.make
+++ b/apps/plugins/sdl/sdl.make
@@ -12,12 +12,14 @@ SDL_OBJDIR := $(BUILDDIR)/apps/plugins/sdl
SDL_SRC := $(call preprocess, $(SDL_SRCDIR)/SOURCES)
DUKE3D_SRC := $(call preprocess, $(SDL_SRCDIR)/SOURCES.duke)
+WOLF3D_SRC := $(call preprocess, $(SDL_SRCDIR)/SOURCES.wolf)
SDL_OBJ := $(call c2obj, $(SDL_SRC))
DUKE3D_OBJ = $(call c2obj, $(DUKE3D_SRC))
+WOLF3D_OBJ = $(call c2obj, $(WOLF3D_SRC))
# add source files to OTHER_SRC to get automatic dependencies
-OTHER_SRC += $(SDL_SRC) $(DUKE3D_SRC)
+OTHER_SRC += $(SDL_SRC) $(DUKE3D_SRC) $(WOLF3D_SRC)
OTHER_INC += -I$(SDL_SRCDIR)/include
# include comes first because of possible system SDL headers taking
@@ -31,14 +33,18 @@ endif
ifndef APP_TYPE
### no target has a big enough plugin buffer
- ROCKS += $(SDL_OBJDIR)/duke3d.ovl
+ ROCKS += $(SDL_OBJDIR)/duke3d.ovl $(SDL_OBJDIR)/wolf3d.ovl
DUKE3D_OUTLDS = $(SDL_OBJDIR)/duke3d.link
+ WOLF3D_OUTLDS = $(SDL_OBJDIR)/wolf3d.link
SDL_OVLFLAGS = -T$(DUKE3D_OUTLDS) -Wl,--gc-sections -Wl,-Map,$(basename $@).map
else
### simulator
ROCKS += $(SDL_OBJDIR)/duke3d.rock
+ ROCKS += $(SDL_OBJDIR)/wolf3d.rock
endif
+# Duke3D
+
$(SDL_OBJDIR)/duke3d.rock: $(SDL_OBJ) $(DUKE3D_OBJ) $(TLSFLIB)
$(SDL_OBJDIR)/duke3d.refmap: $(SDL_OBJ) $(DUKE3D_OBJ) $(TLSFLIB)
@@ -54,6 +60,25 @@ $(SDL_OBJDIR)/duke3d.ovl: $(SDL_OBJ) $(DUKE3D_OBJ) $(TLSFLIB) $(DUKE3D_OUTLDS)
-lgcc $(SDL_OVLFLAGS)
$(call PRINTS,LD $(@F))$(call objcopy,$(basename $@).elf,$@)
+# Wolf3D
+
+$(SDL_OBJDIR)/wolf3d.rock: $(SDL_OBJ) $(WOLF3D_OBJ) $(TLSFLIB)
+
+$(SDL_OBJDIR)/wolf3d.refmap: $(SDL_OBJ) $(WOLF3D_OBJ) $(TLSFLIB)
+
+$(WOLF3D_OUTLDS): $(PLUGIN_LDS) $(SDL_OBJDIR)/wolf3d.refmap
+ $(call PRINTS,PP $(@F))$(call preprocess2file,$<,$@,-DOVERLAY_OFFSET=$(shell \
+ $(TOOLSDIR)/ovl_offset.pl $(SDL_OBJDIR)/wolf3d.refmap))
+
+$(SDL_OBJDIR)/wolf3d.ovl: $(SDL_OBJ) $(WOLF3D_OBJ) $(TLSFLIB) $(WOLF3D_OUTLDS)
+ $(SILENT)$(CC) $(PLUGINFLAGS) -o $(basename $@).elf \
+ $(filter %.o, $^) \
+ $(filter %.a, $+) \
+ -lgcc $(SDL_OVLFLAGS)
+ $(call PRINTS,LD $(@F))$(call objcopy,$(basename $@).elf,$@)
+
+# common
+
$(SDL_OBJDIR)/%.o: $(SDL_SRCDIR)/%.c $(SDL_SRCDIR)/sdl.make $(BUILDDIR)/sysfont.h
$(SILENT)mkdir -p $(dir $@)
$(call PRINTS,CC $(subst $(ROOTDIR)/,,$<))$(CC) -I$(dir $<) $(SDLFLAGS) -c $< -o $@
diff --git a/apps/plugins/sdl/wrappers.c b/apps/plugins/sdl/wrappers.c
index e335e7fee1..ee512dd573 100644
--- a/apps/plugins/sdl/wrappers.c
+++ b/apps/plugins/sdl/wrappers.c
@@ -21,6 +21,7 @@ void fatal(char *fmt, ...)
va_start(ap, fmt);
char buf[80];
vsnprintf(buf, 80, fmt, ap);
+ printf("%s", buf);
rb->splash(HZ * 2, buf);
va_end(ap);
diff --git a/apps/plugins/wolf3d.c b/apps/plugins/wolf3d.c
new file mode 100644
index 0000000000..cb4bf7e664
--- /dev/null
+++ b/apps/plugins/wolf3d.c
@@ -0,0 +1,31 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2017 Franklin Wei
+ *
+ * Duke3D stub loader.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+#include "plugin.h"
+
+#include "lib/overlay.h"
+
+/* this is the plugin entry point */
+enum plugin_status plugin_start(const void* parameter)
+{
+ return run_overlay(parameter, PLUGIN_GAMES_DIR "/wolf3d.ovl", "Wolf3D");
+}
diff --git a/docs/CREDITS b/docs/CREDITS
index 43adcc5955..c9196e2e7a 100644
--- a/docs/CREDITS
+++ b/docs/CREDITS
@@ -708,3 +708,5 @@ The New RAW team (Piotr Padkowski and others)
The Fabother World team (Fabien Sanglard and others)
The sgt-puzzles team (Simon Tatham and others)
The Chocolate Duke Nukem 3D team
+The Wolfenstein 3D team
+The MAME team
diff --git a/manual/plugins/main.tex b/manual/plugins/main.tex
index 0d192eedeb..5b13829b65 100644
--- a/manual/plugins/main.tex
+++ b/manual/plugins/main.tex
@@ -105,6 +105,8 @@ text files%
\opt{lcd_non-mono}{\nopt{iriverh10_5gb,ipodmini1g,c200,c200v2,mpiohd200,clipzip,samsungyh820}{
\input{plugins/superdom.tex}}}
+\opt{lcd_color}{\nopt{lowmem,iaudiox5,iriverh300}{\input{plugins/wolf3d.tex}}}
+
\opt{lcd_bitmap}{\input{plugins/wormlet.tex}}
\opt{lcd_bitmap}{\input{plugins/xobox.tex}}
diff --git a/manual/plugins/wolf3d.tex b/manual/plugins/wolf3d.tex
new file mode 100644
index 0000000000..903a057365
--- /dev/null
+++ b/manual/plugins/wolf3d.tex
@@ -0,0 +1,7 @@
+\subsection{Wolf3D}
+
+This is a port of Wolfenstein 3-D, derived from Wolf4SDL.
+
+\subsubsection{Installation}
+Copy the original data files (e.g. *.WL6) into the
+\fname{/.rockbox/wolf3d/} directory. Sound should work by default.