summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFranklin Wei <git@fwei.tk>2019-07-07 22:00:20 -0400
committerFranklin Wei <git@fwei.tk>2019-07-09 11:20:55 -0400
commit3f59fc8b771625aca9c3aefe03cf1038d8461963 (patch)
treee0623a323613baa0b0993411b38bcaed144b27ed
parent439a0d1d91fa040d261fc39b87278bc9f5391dcc (diff)
downloadrockbox-3f59fc8b771625aca9c3aefe03cf1038d8461963.tar.gz
rockbox-3f59fc8b771625aca9c3aefe03cf1038d8461963.zip
Wolfenstein 3-D!
This is a port of Wolf4SDL, which is derived from the original id software source release. The port runs on top of the SDL plugin runtime and is loaded as an overlay. Licensing of the game code is not an issue, as discussed below (essentially, the Debian project treats Wolf4SDL as GPLv2, with an email from John Carmack backing it up): http://forums.rockbox.org/index.php?topic=52872 Included is a copy of MAME's Yamaha OPL sound chip emulator (fmopl_gpl.c). This file was not part of the original Wolf4SDL source (which includes a non-GPL'd version), but was rather rebased from from a later MAME source which had been relicensed to GPLv2. Change-Id: I64c2ba035e0be7e2f49252f40640641416613439
-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
180wavplay,viewers 180wavplay,viewers
181wavrecord,apps 181wavrecord,apps
182wavview,viewers 182wavview,viewers
183wolf3d,games
183wormlet,games 184wormlet,games
184xobox,games 185xobox,games
185xworld,games 186xworld,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
78 (!defined(LCD_STRIDEFORMAT) || (LCD_STRIDEFORMAT != VERTICAL_STRIDE)) 78 (!defined(LCD_STRIDEFORMAT) || (LCD_STRIDEFORMAT != VERTICAL_STRIDE))
79#if (PLUGIN_BUFFER_SIZE > 0x14000) && defined(CPU_ARM) 79#if (PLUGIN_BUFFER_SIZE > 0x14000) && defined(CPU_ARM)
80duke3d.c 80duke3d.c
81wolf3d.c
81#endif 82#endif
82#endif 83#endif
83 84
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
8clock 8clock
9#endif 9#endif
10 10
11
12/* For all targets with a bitmap display */ 11/* For all targets with a bitmap display */
13#ifdef HAVE_LCD_BITMAP 12#ifdef HAVE_LCD_BITMAP
14 13
@@ -22,7 +21,6 @@ xworld
22 defined(CPU_ARM) 21 defined(CPU_ARM)
23sdl 22sdl
24#endif 23#endif
25
26puzzles 24puzzles
27#endif 25#endif
28 26
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 @@
11.7 <February 01, 2009>
2- Saved game description saved to VMS header
3- Adjustments made to LCD
4- VMU loading code improved
5- Miscellaneous code clean ups
6- Work started on new disc check code
7
81.6 <October 04, 2008>
9- Getting the DC port up-to-date
10
111.5 <May 25, 2008>
12- Mouse support
13- Weapon switch support
14- Controllers with C & Z button support
15- Command line parameters via 'params.txt' support
16- SOD mission pack support via menu
17- 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 @@
1Wolf4SDL v1.7 (released 2011-05-15, revision 256)
2 - Added support for Mac OS X
3 (thanks to Chris Ballinger)
4 - Added support for .sd1 SOD game files as delivered by Steam
5 by changing --mission parameter slightly
6 (thanks to Pickle)
7 - Added --windowed-mouse parameter to start windowed mode with grabbed mouse
8 (thanks to Jared Breland)
9 - Rain and snow speed fix (thanks to Tricob)
10 - Floor/ceiling fix (thanks to Tricob / Adam Biser)
11 - Fixed moon out of screen bug (thanks to Tricob)
12 - Rain/snow leaking ceilings fix (thanks to Adam Biser / Tricob)
13 - Per-user configuration/savegame directories (~/.wolf4sdl) on
14 Linux like systems per default (thanks to Jared Breland)
15 - Added --configdir parameter
16 - Use SDL_DOUBLEBUF for vsync to avoid or at least reduce flickering
17 (thanks to Greg Ayrton for the hint, use --nodblbuf to disable it)
18 - Removed remainings of the frame rate counter on screen, when disabled
19 - Don't quit game when using TAB+E with --tedlevel
20 - Added --extravbls parameter
21 - Changed default for "extra VBLs" from 1 to 0
22 - Fixed missing umask parameter for open with O_CREAT
23 (bug reported by Daniel Fass)
24 - Fixed support for 1.0 shareware data files
25 (bug reported by Marcus Naylor)
26 - Fixed xtile and ytile not being valid in HitHorizWall and HitVertWall,
27 respectively. This caused problems with some tutorials.
28 - Removed unused HitHorizPWall and HitVertPWall.
29
30Wolf4SDL v1.6 (released 2008-09-01, revision 233)
31 - Fixed songs not really supporting more than 64kb
32 - Try to recognize whether data files don't fit to program version
33 instead of just using them and probably crash
34 (can be disabled with --ignorenumchunks)
35 - Fizzle fade now works for resolutions up to 8191x4095
36 (thanks to Xilinx, Inc. for the list of maximum-length LFSR counters)
37 - Fixed demos being dependent on actual duration of GETGATLINGSND
38 (fixes second demo, which even rarely worked in vanilla Wolf3D)
39 - Fixed demos by disabling some bugfixes during recording and playback
40 (see PLAYDEMOLIKEORIGINAL define in version.h)
41 - Removed system menu on Windows in windowed mode to avoid ALT to open it
42 - Fixed palette issues occurring on some Windows systems by using the
43 "best" color depth reported by libSDL per default (also see --bits option)
44 - Fixed directional 3d sprites on architectures only allowing aligned memory
45 access (bug reported by Pickle)
46 - Fixed remaining status bar after end of demo in 320x240s resolutions
47 (bug reported by Pickle)
48 - Removed last busy waiting (fixes very unstable framerates on machines with
49 stricter schedulers like FreeBSD; thanks to Tron for making me notice)
50 - Fixed compiling of SOD on case sensitive file systems
51 (thanks to Michael)
52
53Wolf4SDL v1.5 (released 2008-05-25, revision 215)
54 - Reduced minimum distance to back of moving pushwall to PLAYERSIZE
55 - Fixed pushwall rendering when player's eye is in the pushwall back tile
56 (bug reported by Pickle)
57 - Enable 'End game' menu item also when using --tedlevel
58 - Removed some unneccessary fade outs
59 (DrawPlayScreen does not call VW_FadeOut anymore!!)
60 - When using 'End game', 'View scores' does not directly show up anymore
61 - Fixed quickload/quicksave not working when started with --tedlevel (vanilla
62 bug). This now also only checks for save games once at startup (may speed
63 up entering the menu on Dreamcast)
64 - Fixed drawing moving pushwalls viewed at acute angles near the level border
65 - Fixed vanilla bug hiding bonus items on same tile as player, when he cannot
66 pick them up (e.g. medikit at 100% health) (thanks to Pickle for noticing)
67 - Added GP2X specific code by Pickle
68 - Reimplemented picture grabber to support all screen resolutions
69 (<TAB>+P in debug mode)
70 - Added --resf option to force to use unsupported resolutions >= 320x200
71 - Added support for resolutions being a multiple of 320x240
72 (thanks for your help, Pickle!)
73 - Fixed crash when cheat-hurting oneself to death (bug reported by Tricob)
74 - Cleaned up id_sd.cpp (kept PC speaker stuff for future reference)
75 - Added move buttons (invalidates config file, only hardcoded yet)
76 - Added joystick support to US_LineInput used for highscore names
77 and save games
78 - Added US_Printf and US_CPrintf (works just like printf)
79 - Fixed wrong surface locks/unlocks
80 - Added Visual C++ 6 support
81 - Removed some useless VW_WaitVBLs (Thanks to TexZK)
82 - Added some asserts in id_vl.cpp to check for screen access out of bounds
83 - Fixed BJ face popping up in fullsize mode sometimes
84 (Thanks to Andy_Nonymous)
85 - Rewrote page manager to support page >= 64kB
86 and to correctly handle sounds >= 4kB
87 - Improved SOD mission packs support (Thanks to fackue)
88 - Updated Code::Blocks search paths to ..\SDL-devel\
89 - Added version.h to Dev-C++ and Code::Blocks project file
90 - Fixed some files being read in text mode on MinGW
91
92Wolf4SDL v1.4 (released 2008-03-10, revision 164)
93 - Added MinGW/MSYS compatibility
94 - Updated Code::Blocks project
95 - Updated Dev-C++ project and added a README-devcpp.txt
96 - Fixed some busy waiting situations
97 - Added directional 3D sprites support (USE_DIR3DSPR)
98 - Added support for Spear mission packs (by fackue)
99 - Added support for Wolf3D full v1.1 and shareware v1.0, v1.1 and v1.2
100 - Added shading support (USE_SHADING)
101 - Added object flags (see objflag_t enum in wl_def.h)
102 - Reintroduced version.h
103 - Increased MAXVISABLE from 50 to 250
104 - Added outside atmosphere features (USE_STARSKY, USE_RAIN, USE_SNOW)
105 - Added cloud sky support (USE_CLOUDSKY)
106 - Added support for SoD demo
107 - Fixed SoD on systems with case sensitive filenames
108 - Added DarkOne's/Adam's multi-textured floors/ceiling (USE_FLOORCEILINGTEX)
109 - Added parallax sky support (USE_PARALLAX define)
110 - Introduced level feature flags (USE_FEATUREFLAGS define)
111 - Added high resolution support (USE_HIRES define)
112 - Added support for music > 64 kB as supported by WDC
113 - Added --samplerate and --audiobuffer parameters
114 - Added support for GP2X (ARM processor, thanks to Pickle)
115 - Added support for Dreamcast (SH-4 processor, thanks to fackue)
116 - Added joystick support (up to 32 buttons)
117
118Wolf4SDL v1.3 (released 2008-01-20, revision 113)
119 - Added parameter for SOD to disable copy protection quiz
120 - F12 now also grabs the mouse (for keyboards without scrolllock)
121 - Fixed out of bounds array access in key processing
122
123Wolf4SDL v1.2 (released 2008-01-09, revision 108)
124 - Fixed fading for 'End Game'
125 - Corrected fading speed
126 - Added Spear of Destiny compile support
127 - Reimplemented palette file (Sorry...)
128 - Fixed end game crash, when player did not die yet
129 (Thanks to Agent87 for noticing this bug!)
130 - Added full size screen feature
131 - Added project files for Code::Blocks and Dev-C++
132 (Thanks to Codetech84!)
133 - Made it MinGW compatible
134 - Fixed demo fading issues
135 - Reformatted many source code files
136 - Resolved all warnings reported by VC++ 8 and GCC
137 - Fixed crash when starting the game with no sound >effects<
138 (Thanks to Agent87 for noticing this bug!)
139 - Always grab mouse when started in fullscreen
140 - Map left and right alt, shift and ctrl keys to the same keys
141 - Fix numpad keys with numlock off
142 - Fixed a buffer overflow causing a crash
143
144Wolf4SDL v1.1 (released 2007-12-28, revision 70)
145 - Fixed Pause
146 - Fixed IN_Ack()
147 - Added command line parameters for windowed mode and screen resolution
148 - Reimplemented command line parameters (try --help)
149 - Improved scaled "Get Psyched" progress bar graphic
150 - Improved scaled screen borders
151 - Fixed "Fade in black screen" bug
152 - Avoid asserts when shutting down with an error
153 - Use software surfaces to reduce problems with palette on Windows
154 - Windows: Statically links to MSVCR80.DLL now to avoid missing files
155
156Wolf4SDL v1.0 (released 2007-12-26, revision 53)
157 - 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 @@
1Wolf4SDL by Moritz "Ripper" Kroll (http://www.chaos-software.de.vu)
2Original Wolfenstein 3D by id Software (http://www.idsoftware.com)
3GP2X support by Pickle
4
5Source and Windows Binary: http://www.stud.uni-karlsruhe.de/~uvaue/chaos/downloads.html
6GP2X Binary: http://archive.gp2x.de/cgi-bin/cfiles.cgi?0,0,0,0,20,2479
7
8SUMMARY:
9See main README.txt
10
11
12GP2X CONTROLS:
13Directional: these are mapped to the arrow keys.
14A : mapped to space, which opens doors
15B : mapped to left shift, which enables running. Also mapped
16 to key n, for the NO response in the menu.
17X : mapped to left control, which enables shooting.
18Y : mapped to the number keys, to select weapons. It cycles
19 through each weapon in order. Also mapped to key y, for
20 the YES responses in the menu.
21** NOTE: In "enter text" mode each button sends its letter,
22 for example a=a, y=y
23
24Select: mapped to the escape key
25Start: mapped to the enter key
26Select+Start: mapped to pause
27
28Shoulder Left: this is mapped in a way to strafe left
29Shoulder Right: this is mapped in a way to strafe right
30** NOTE: If you press both the left and right shoulder buttons the statusbar
31 will be shown in the fullscreen mode described above.
32
33Volume Buttons: raise and lower the volume.
34
35Either Volume Button + Select: show fps
36Either Volume Button + Start: take a screenshot
37
38
39** NOTE: The directional stick is given precedence over the strafe keys.
40 For example if you hold the shoulder right to strafe right and you
41 then move the stick right you will stop strafing and turn. If you
42 then release the stick you will resume strafing the right.
43 (I've tested this and it seems to work fairly well)
44
45
46INSTALL:
47Pick your Wolf4SDL binary and copy the files at the root of the zip to any
48folder together with the data files of the according game (e.g. *.WL6 for
49Wolfenstein 3D or *.SOD for Spear of Destiny).
50The binaries do not restart the GP2X menu application.
51If you use GMenu2x, select the wrapper option for your icon.
52If you use the GPH menu, you will have to create your own script to restart it.
53
54
55Compiling from source code:
56I used the Code::Blocks dev kit. (http://archive.gp2x.de/cgi-bin/cfiles.cgi?0,0,0,0,14,2295)
57You can use the template example. Add all of the source files to the project.
58Under build options (pick your GP2X compilier) and under "Compilier Settings"
59-> "Defines" add GP2X. Just press the build button.
60The Makefile should also work for linux type environments, although I have
61not tried it this way. If you use it, the GP2X define should be added to the
62Makefile using CFLAGS += -DGP2X.
63
64I also added the compiler flags
65"-fmerge-all-constants -ffast-math -funswitch-loops"
66which give a good performance increase.
67For Code::Blocks put this line in "Compiler Settings" - "Other Options".
68
69PERFORMANCE:
70The 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 @@
1Wolf4SDL\DC 1.7
2ported to Dreamcast by dcbasic
3
4A port of Wolf4SDL by Moritz "Ripper" Kroll.
5
6What's new in 1.7:
7- See Changes-dc.txt
8
9Instructions:
10- Extract the Wolf4SDL\DC archive to it's own folder.
11- Put your *.wl6 files inside /cd/data/wolf3d (if you have a commercial CD-ROM
12 release of Wolfenstein you can skip this step).
13- If you want to use the command line, create a text file called 'args.txt'
14 (without quotes) in the /cd/data/wolf3d folder and add any valid
15 arguments. Please keep them on one line.
16- Download and install BootDreams (http://dchelp.dcemulation.org/?BootDreams).
17- Open the folder you extracted Wolf4SDL\DC to in BootDreams.
18- Select a task. If you'd like to burn Wolf4SDL\DC directly to a CD-R, select
19 the CDRecord task and set the disc format to either Audio\Data or Data\Data
20 (both do essentially the same thing).
21- Click Process.
22- If you created a CD image, burn it with the appropriate burning program
23 e.g. Alcohol 120%.
24- Pop the CD-R in your Dreamcast and play.
25- If you have a commercial CD-ROM, wait until you're asked to swap in your
26 copy of Wolfenstein 3D, swap your copy in, press start and play.
27
28Valid Arguments:
29--goobers (Wolfenstein 3D only)
30--debugkeys (Spear of Destiny only)
31--goodtimes (Spear of Destiny only)
32--nowait
33--baby
34--easy
35--normal
36--hard
37--tedlevel <level>
38--res <width> <height> (default 320x200)
39--resf <width> <height>
40--bits <screen_bits> (default 8)
41--dblbuf
42--extravbls <vbls>
43--samplerate <rate> (default 11025)
44--audiobuffer <size> (default 4096)
45
46Notes:
47- The --res argument will also except '640 400' but will slow rendering down
48 greatly. The width must be a multiple of 320 and the height must be a
49 multiple of 200 or 240.
50- The --resf argument will force the passed screen resolution but may result
51 in graphic corruption.
52- The default samplerate is 11025 to keep the extra SOD missions from running
53 out of memory. Wolfenstein 3D and the original SOD mission will happily run
54 with the samplerate set to 22050.
55- The --dblbuf argument works but slows speed down by about 10 frames.
56
57Compiling:
58This port was developed under Code::Blocks 8.02 with the DC Dev ISO R4
59integrated within it. I've also included a Makefile in case you don't use
60Code::Blocks. You will need SDL and SDL mixer to compile Wolf4SDL\DC.
61
62DC Dev ISO can be downloaded from here:
63http://dcemulation.org/?title=DC_Dev_ISO
64
65It contains everything you need to compile Wolf4SDL. It includes Code::Blocks
668.02 and a tool to integrate Code::Blocks with DC Dev ISO. It uses Cygwin as
67the terminal environment and includes the DC compilers and all the SDL
68libraries that are needed to compile Wolf4SDL.
69
70To compile Wolf4SDL\DC under Code::Blocks, extract the source to it's own
71folder, open 'Wolf4SDL-DC.cbp' and goto 'Build' | 'Build'.
72
73To compile Wolf4SDL\DC using the supplied Makefile, extract the source to it's
74own directory in C:\cygwin\usr\local\dc and type 'make -f Makefile.dc' in your
75terminal while inside the folder Wolf4SDL\DC was extracted to. By default the
76Makefile will create a scrambled 1ST_READ.BIN, unscrambled Wolf4SDL.bin and of
77course, Wolf4SDL.elf.
78
79Credits & Thanks:
80- OneThiryt8 for which parts of this port was based on his port, sdlWolf
81- BlueCrab who wrote parts of the swap disc menu
82- BlackAura for which I stole parts of his menu code from nxDoom
83- Ripper for such a clean and friendly Wolfenstein 3D engine
84- Bero for the Dreamcast port of SDL, which this port uses
85- 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 @@
1This file explains how you can compile Wolf4SDL using Bloodshed's Dev-C++.
2Keep in mind, that Dev-C++ is a dead project since 2005. The recommended way
3to compile Wolf4SDL on Windows is using Visual Studio 2005 C++ or the free
4Visual C++ 2005 Express. But for dial-up users Dev-C++ is probably still a
5good option.
6
7Needed files:
8 - "Dev-C++ 5.0 Beta 9.2 (4.9.9.2)" with Mingw/GCC 3.4.2 (about 9 MB)
9 http://www.bloodshed.net/dev/devcpp.html
10 - SDL-1.2.13-1chaos.DevPak (544 kB)
11 http://www.chaos-software.de.vu -> Downloads
12 - SDL_mixer-1.2.6-2mol.DevPak (347 kB)
13 http://sourceforge.net/project/showfiles.php?group_id=94270&package_id=151751
14
15Installation:
16 - Install Dev-C++ to C:\Dev-Cpp
17 - Open Wolf4SDL.dev
18 - Go to "Tools" -> "Package Manager"
19 - Click on the "Install" button in the toolbar
20 - Select "SDL-1.2.13-1chaos.DevPak" (where ever you saved it)
21 - Some "Next" buttons and a "Finish" button later...
22 - Click on the "Install" button in the toolbar
23 - Select "SDL_mixer-1.2.6-2mol.DevPak" (where ever you saved it)
24 - Some "Next" buttons and a "Finish" button later...
25 - Close the Package Manager
26
27Data file setup:
28 - Copy the data files (e.g. *.WL6) you want to use to the Wolf4SDL
29 source code folder
30 - If you want to use the data files of the full Activision version of
31 Wolfenstein 3D v1.4, you can just skip to the next section
32 - Otherwise open "version.h" and comment/uncomment the definitions
33 according to the description given in this file
34
35Compiling Wolf4SDL:
36 - Compile via "Execute" -> "Compile"
37 - No errors should be displayed
38 - Run Wolf4SDL via "Execute" -> "Run"
39
40Troubleshooting:
41 - If you get an error message "undefined reference to `__cpu_features_init'",
42 make sure, there is no c:\mingw folder. Otherwise Dev-C++ will mix different
43 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 @@
1Wolf4SDL by Moritz "Ripper" Kroll (http://www.chaos-software.de.vu)
2Original Wolfenstein 3D by id Software (http://www.idsoftware.com)
3=============================================================================
4
5Wolf4SDL is an open-source port of id Software's classic first-person shooter
6Wolfenstein 3D to the cross-plattform multimedia library "Simple DirectMedia
7Layer (SDL)" (http://www.libsdl.org). It is meant to keep the original feel
8while taking advantage of some improvements mentioned in the list below.
9
10
11Main features:
12--------------
13
14 - Cross-plattform:
15 Supported operating systems are at least:
16 - Windows 98, Windows ME, Windows 2000, Windows XP, Windows Vista
17 (32 and 64 bit), Windows 7 (32 and 64 bit)
18 - Linux
19 - BSD variants
20 - Mac OS X (x86)
21 - KallistiOS (used for Dreamcast)
22 Only little endian platforms like x86, ARM and SH-4 are supported, yet.
23
24 - AdLib sounds and music:
25 This port includes the OPL2 emulator from MAME, so you can not only
26 hear the AdLib sounds but also music without any AdLib-compatible
27 soundcard in near to perfect quality!
28
29 - Multichannel digitized sounds:
30 Digitized sounds play on 8 channels! So in a fire fight you will
31 always hear, when a guard opens the door behind you ;)
32
33 - Higher screen resolutions:
34 Aside from the original 320x200 resolution, Wolf4SDL currently
35 supports any resolutions being multiples of 320x200 or 320x240,
36 the default being 640x400.
37 Unlike some other ports, Wolf4SDL does NOT apply any bilinear
38 or similar filtering, so the graphics are NOT blurred but
39 pixelated just as we love it.
40
41 - Fully playable with only a game controller:
42 Wolf4SDL can be played completely without a keyboard. At least two
43 buttons are required (shoot/YES and open door/NO), but five or more
44 are recommended (run, strafe, ESC).
45
46Additional features:
47--------------------
48
49 - Two additional view sizes:
50 Wolf4SDL supports one view size using the full width of the screen
51 and showing the status bar, like in Mac-enstein, and one view size
52 filling the whole screen (press TAB to see the status bar).
53
54 - (Nearly) unlimited sound and song lengths:
55 Mod developers are not restricted to 64kB for digitized sounds and
56 IMF songs anymore, so longer songs and digitized sounds with better
57 quality are possible.
58
59 - Resuming ingame music:
60 When you come back to the game from the menu or load a save game, the
61 music will be resumed where it was suspended rather than started from
62 the beginning.
63
64 - Freely movable pushwalls:
65 Moving pushwalls can be viewed from all sides, allowing mod developers
66 to place them with fewer restrictions. The player can also follow the
67 pushwall directly instead of having to wait until the pushwall has left
68 a whole tile.
69
70 - Optional integrated features for mod developers:
71 Wolf4SDL already contains the shading, directional 3D sprites,
72 floor and ceiling textures, high resolution textures/sprites,
73 parallax sky, cloud sky and outside atmosphere features, which
74 can be easily activated in version.h.
75
76
77The following versions of Wolfenstein 3D data files are currently supported
78by the source code (choose the version by commenting/uncommenting lines in
79version.h as described in that file):
80
81 - Wolfenstein 3D v1.1 full Apogee
82 - Wolfenstein 3D v1.4 full Apogee (not tested)
83 - Wolfenstein 3D v1.4 full GT/ID/Activision
84 - Wolfenstein 3D v1.0 shareware Apogee
85 - Wolfenstein 3D v1.1 shareware Apogee
86 - Wolfenstein 3D v1.2 shareware Apogee
87 - Wolfenstein 3D v1.4 shareware
88 - Spear of Destiny full
89 - Spear of Destiny demo
90 - Spear of Destiny - Mission 2: Return to Danger (not tested)
91 - Spear of Destiny - Mission 3: Ultimate Challenge (not tested)
92
93
94How to play:
95------------
96
97To play Wolfenstein 3D with Wolf4SDL, you just have to copy the original data
98files (e.g. *.WL6) into the same directory as the Wolf4SDL executable.
99Please make sure, that you use the correct version of the executable with the
100according data files version as the differences are hardcoded into the binary!
101
102On Windows SDL.dll and SDL_mixer.dll must also be copied into this directory.
103They are also available at http://www.chaos-software.de.vu
104
105If you play in windowed mode (--windowed parameter), press SCROLLLOCK or F12
106to grab the mouse. Press it again to release the mouse.
107
108
109Usage:
110------
111
112Wolf4SDL supports the following command line options:
113 --help This help page
114 --tedlevel <level> Starts the game in the given level
115 --baby Sets the difficulty to baby for tedlevel
116 --easy Sets the difficulty to easy for tedlevel
117 --normal Sets the difficulty to normal for tedlevel
118 --hard Sets the difficulty to hard for tedlevel
119 --nowait Skips intro screens
120 --windowed[-mouse] Starts the game in a window [and grabs mouse]
121 --res <width> <height> Sets the screen resolution
122 (must be multiple of 320x200 or 320x240)
123 --resf <w> <h> Sets any screen resolution >= 320x200
124 (which may result in graphic errors)
125 --bits <b> Sets the screen color depth
126 (Use this when you have palette/fading problem
127 or perhaps to optimize speed on old systems.
128 Allowed: 8, 16, 24, 32, default: "best" depth)
129 --nodblbuf Don't use SDL's double buffering
130 --extravbls <vbls> Sets a delay after each frame, which may help to
131 reduce flickering (SDL does not support vsync...)
132 (unit is currently 8 ms, default: 0)
133 --joystick <index> Use the index-th joystick if available
134 --joystickhat <index> Enables movement with the given coolie hat
135 --samplerate <rate> Sets the sound sample rate (given in Hz)
136 --audiobuffer <size> Sets the size of the audio buffer (-> sound latency)
137 (given in bytes)
138 --ignorenumchunks Ignores the number of chunks in VGAHEAD.*
139 (may be useful for some broken mods)
140 --configdir <dir> Directory where config file and save games are stored
141 (Windows default: current directory,
142 others: $HOME/.wolf4sdl)
143
144For Spear of Destiny the following additional options are available:
145 --mission <mission> Mission number to play (1-3)
146 --goodtimes Disable copy protection quiz
147
148
149Compiling from source code:
150---------------------------
151
152The current version of the source code is available in the svn repository at:
153 svn://tron.homeunix.org:3690/wolf3d/trunk
154
155The following ways of compiling the source code are supported:
156 - Makefile (for Linux, BSD variants and MinGW/MSYS)
157 - Visual C++ 2008 (Wolf4SDL.VC9.sln and Wolf4SDL.VC9.vcproj)
158 - Visual C++ 2005 (Wolf4SDL.sln and Wolf4SDL.vcproj)
159 - Visual C++ 6 (Wolf4SDL.dsw and Wolf4SDL.dsp)
160 - Code::Blocks 8.02 (Wolf4SDL.cbp)
161 - Dev-C++ 5.0 Beta 9.2 (4.9.9.2) (Wolf4SDL.dev) (see README-devcpp.txt)
162 - Xcode (for Mac OS X, macosx/Wolf4SDL.xcodeproj/project.pbxproj)
163 - Special compiling for Dreamcast (see README-dc.txt)
164 - Special compiling for GP2X (see README-GP2X.txt)
165
166To compile the source code you need the development libraries of
167 - SDL (http://www.libsdl.org/download-1.2.php) and
168 - SDL_mixer (http://www.libsdl.org/projects/SDL_mixer/)
169and have to adjust the include and library paths in the projects accordingly.
170
171Please note, that there is no official SDL_mixer development pack for MinGW,
172yet, but you can get the needed files from a Dev-C++ package here:
173http://sourceforge.net/project/showfiles.php?group_id=94270&package_id=151751
174Just rename the file extension from ".devpack" to ".tar.bz2" and unpack it
175with for example WinRAR. Then add the directories include/SDL and lib to the
176according search paths in your project.
177
178IMPORTANT: Do not forget to take care of version.h!
179 By default it compiles for "Wolfenstein 3D v1.4 full GT/ID/Activision"!
180
181
182TODOs:
183------
184
185 - Add PC speaker emulation
186 - Center non-ingame screens for resolutions being a multiple of 320x240
187 - Add support for any graphic resolution >= 320x200
188
189
190Known bugs:
191-----------
192
193 - None! ;D
194
195
196Troubleshooting:
197----------------
198
199 - If your frame rate is low, consider using the original screen resolution
200 (--res 320 200) or lowering the sound quality (--samplerate 22050)
201
202
203Credits:
204--------
205
206 - Special thanks to id Software! Without the source code we would still have
207 to pelt Wolfenstein 3D with hex editors and disassemblers ;D
208 - Special thanks to the MAME developer team for providing the source code
209 of the OPL2 emulator!
210 - Many thanks to "Der Tron" for hosting the svn repository, making Wolf4SDL
211 FreeBSD compatible, testing, bugfixing and cleaning up the code!
212 - Thanks to Chris for his improvements on Wolf4GW, on which Wolf4SDL bases.
213 - Thanks to Pickle for the GP2X support and help on 320x240 support
214 - Thanks to fackue for the Dreamcast support
215 - Thanks to Chris Ballinger for the Mac OS X support
216 - Thanks to Xilinx, Inc. for providing a list of maximum-length LFSR counters
217 used for higher resolutions of fizzle fade
218
219
220Licenses:
221---------
222
223 - The original source code of Wolfenstein 3D: license-id.txt
224 - 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 @@
1/////////////////////////////////////////////////
2//
3// MUSE Header for .SOD
4// Created Thu Aug 13 09:25:58 1992
5//
6/////////////////////////////////////////////////
7
8#define NUMSOUNDS 81
9#define NUMSNDCHUNKS 267
10
11//
12// Sound names & indexes
13//
14typedef enum {
15 HITWALLSND, // 0
16 MISSILEHITSND, // 1
17 SELECTITEMSND, // 2
18 GHOSTSIGHTSND, // 3
19 MOVEGUN2SND, // 4
20 MOVEGUN1SND, // 5
21 NOWAYSND, // 6
22 NAZIHITPLAYERSND, // 7
23 MISSILEFIRESND, // 8
24 PLAYERDEATHSND, // 9
25 DOGDEATHSND, // 10
26 ATKGATLINGSND, // 11
27 GETKEYSND, // 12
28 NOITEMSND, // 13
29 WALK1SND, // 14
30 WALK2SND, // 15
31 TAKEDAMAGESND, // 16
32 GAMEOVERSND, // 17
33 OPENDOORSND, // 18
34 CLOSEDOORSND, // 19
35 DONOTHINGSND, // 20
36 HALTSND, // 21
37 DEATHSCREAM2SND, // 22
38 ATKKNIFESND, // 23
39 ATKPISTOLSND, // 24
40 DEATHSCREAM3SND, // 25
41 ATKMACHINEGUNSND, // 26
42 HITENEMYSND, // 27
43 SHOOTDOORSND, // 28
44 DEATHSCREAM1SND, // 29
45 GETMACHINESND, // 30
46 GETAMMOSND, // 31
47 SHOOTSND, // 32
48 HEALTH1SND, // 33
49 HEALTH2SND, // 34
50 BONUS1SND, // 35
51 BONUS2SND, // 36
52 BONUS3SND, // 37
53 GETGATLINGSND, // 38
54 ESCPRESSEDSND, // 39
55 LEVELDONESND, // 40
56 DOGBARKSND, // 41
57 ENDBONUS1SND, // 42
58 ENDBONUS2SND, // 43
59 BONUS1UPSND, // 44
60 BONUS4SND, // 45
61 PUSHWALLSND, // 46
62 NOBONUSSND, // 47
63 PERCENT100SND, // 48
64 BOSSACTIVESND, // 49
65 DEATHSCREAM4SND, // 50
66 SCHUTZADSND, // 51
67 AHHHGSND, // 52
68 DEATHSCREAM5SND, // 53
69 DEATHSCREAM7SND, // 54
70 DEATHSCREAM8SND, // 55
71 LEBENSND, // 56
72 DEATHSCREAM6SND, // 57
73 NAZIFIRESND, // 58
74 BOSSFIRESND, // 59
75 SSFIRESND, // 60
76 SLURPIESND, // 61
77 GHOSTFADESND, // 62
78 DEATHSCREAM9SND, // 63
79 GETAMMOBOXSND, // 64
80 ANGELSIGHTSND, // 65
81 SPIONSND, // 66
82 NEINSOVASSND, // 67
83 DOGATTACKSND, // 68
84 ANGELFIRESND, // 69
85 TRANSSIGHTSND, // 70
86 TRANSDEATHSND, // 71
87 WILHELMSIGHTSND, // 72
88 WILHELMDEATHSND, // 73
89 UBERDEATHSND, // 74
90 KNIGHTSIGHTSND, // 75
91 KNIGHTDEATHSND, // 76
92 ANGELDEATHSND, // 77
93 KNIGHTMISSILESND, // 78
94 GETSPEARSND, // 79
95 ANGELTIREDSND, // 80
96 LASTSOUND
97} soundnames;
98
99//
100// Base offsets
101//
102#define STARTPCSOUNDS 0
103#define STARTADLIBSOUNDS 81
104#define STARTDIGISOUNDS 162
105#define STARTMUSIC 243
106
107//
108// Music names & indexes
109//
110typedef enum {
111 XFUNKIE_MUS, // 0
112 DUNGEON_MUS, // 1
113 XDEATH_MUS, // 2
114 GETTHEM_MUS, // 3
115 XTIPTOE_MUS, // 4
116 GOINGAFT_MUS, // 5
117 URAHERO_MUS, // 6
118 XTHEEND_MUS, // 7
119 NAZI_OMI_MUS, // 8
120 POW_MUS, // 9
121 TWELFTH_MUS, // 10
122 SEARCHN_MUS, // 11
123 SUSPENSE_MUS, // 12
124 ZEROHOUR_MUS, // 13
125 WONDERIN_MUS, // 14
126 ULTIMATE_MUS, // 15
127 ENDLEVEL_MUS, // 16
128 XEVIL_MUS, // 17
129 XJAZNAZI_MUS, // 18
130 COPYPRO_MUS, // 19
131 XAWARD_MUS, // 20
132 XPUTIT_MUS, // 21
133 XGETYOU_MUS, // 22
134 XTOWER2_MUS, // 23
135 LASTMUSIC
136} musicnames;
137
138/////////////////////////////////////////////////
139//
140// Thanks for playing with MUSE!
141//
142/////////////////////////////////////////////////
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 @@
1/////////////////////////////////////////////////
2//
3// MUSE Header for .WL6
4// Created Tue Jul 14 15:04:53 1992
5//
6/////////////////////////////////////////////////
7
8//
9// Sound names & indexes
10//
11typedef enum {
12 HITWALLSND, // 0
13 SELECTWPNSND, // 1
14 SELECTITEMSND, // 2
15 HEARTBEATSND, // 3
16 MOVEGUN2SND, // 4
17 MOVEGUN1SND, // 5
18 NOWAYSND, // 6
19 NAZIHITPLAYERSND, // 7
20 SCHABBSTHROWSND, // 8
21 PLAYERDEATHSND, // 9
22 DOGDEATHSND, // 10
23 ATKGATLINGSND, // 11
24 GETKEYSND, // 12
25 NOITEMSND, // 13
26 WALK1SND, // 14
27 WALK2SND, // 15
28 TAKEDAMAGESND, // 16
29 GAMEOVERSND, // 17
30 OPENDOORSND, // 18
31 CLOSEDOORSND, // 19
32 DONOTHINGSND, // 20
33 HALTSND, // 21
34 DEATHSCREAM2SND, // 22
35 ATKKNIFESND, // 23
36 ATKPISTOLSND, // 24
37 DEATHSCREAM3SND, // 25
38 ATKMACHINEGUNSND, // 26
39 HITENEMYSND, // 27
40 SHOOTDOORSND, // 28
41 DEATHSCREAM1SND, // 29
42 GETMACHINESND, // 30
43 GETAMMOSND, // 31
44 SHOOTSND, // 32
45 HEALTH1SND, // 33
46 HEALTH2SND, // 34
47 BONUS1SND, // 35
48 BONUS2SND, // 36
49 BONUS3SND, // 37
50 GETGATLINGSND, // 38
51 ESCPRESSEDSND, // 39
52 LEVELDONESND, // 40
53 DOGBARKSND, // 41
54 ENDBONUS1SND, // 42
55 ENDBONUS2SND, // 43
56 BONUS1UPSND, // 44
57 BONUS4SND, // 45
58 PUSHWALLSND, // 46
59 NOBONUSSND, // 47
60 PERCENT100SND, // 48
61 BOSSACTIVESND, // 49
62 MUTTISND, // 50
63 SCHUTZADSND, // 51
64 AHHHGSND, // 52
65 DIESND, // 53
66 EVASND, // 54
67 GUTENTAGSND, // 55
68 LEBENSND, // 56
69 SCHEISTSND, // 57
70 NAZIFIRESND, // 58
71 BOSSFIRESND, // 59
72 SSFIRESND, // 60
73 SLURPIESND, // 61
74 TOT_HUNDSND, // 62
75 MEINGOTTSND, // 63
76 SCHABBSHASND, // 64
77 HITLERHASND, // 65
78 SPIONSND, // 66
79 NEINSOVASSND, // 67
80 DOGATTACKSND, // 68
81 FLAMETHROWERSND, // 69
82 MECHSTEPSND, // 70
83 GOOBSSND, // 71
84 YEAHSND, // 72
85#ifndef APOGEE_1_0
86 DEATHSCREAM4SND, // 73
87 DEATHSCREAM5SND, // 74
88 DEATHSCREAM6SND, // 75
89 DEATHSCREAM7SND, // 76
90 DEATHSCREAM8SND, // 77
91 DEATHSCREAM9SND, // 78
92 DONNERSND, // 79
93 EINESND, // 80
94 ERLAUBENSND, // 81
95 KEINSND, // 82
96 MEINSND, // 83
97 ROSESND, // 84
98 MISSILEFIRESND, // 85
99 MISSILEHITSND, // 86
100#endif
101 LASTSOUND
102} soundnames;
103
104//
105// Base offsets
106//
107#define STARTPCSOUNDS 0
108#define STARTADLIBSOUNDS LASTSOUND
109#define STARTDIGISOUNDS (2*LASTSOUND)
110#define STARTMUSIC (3*LASTSOUND)
111
112//
113// Music names & indexes
114//
115typedef enum {
116 CORNER_MUS, // 0
117 DUNGEON_MUS, // 1
118 WARMARCH_MUS, // 2
119 GETTHEM_MUS, // 3
120 HEADACHE_MUS, // 4
121 HITLWLTZ_MUS, // 5
122 INTROCW3_MUS, // 6
123 NAZI_NOR_MUS, // 7
124 NAZI_OMI_MUS, // 8
125 POW_MUS, // 9
126 SALUTE_MUS, // 10
127 SEARCHN_MUS, // 11
128 SUSPENSE_MUS, // 12
129 VICTORS_MUS, // 13
130 WONDERIN_MUS, // 14
131 FUNKYOU_MUS, // 15
132 ENDLEVEL_MUS, // 16
133 GOINGAFT_MUS, // 17
134 PREGNANT_MUS, // 18
135 ULTIMATE_MUS, // 19
136 NAZI_RAP_MUS, // 20
137 ZEROHOUR_MUS, // 21
138 TWELFTH_MUS, // 22
139 ROSTER_MUS, // 23
140 URAHERO_MUS, // 24
141 VICMARCH_MUS, // 25
142 PACMAN_MUS, // 26
143 LASTMUSIC
144} musicnames;
145
146#define NUMSOUNDS LASTSOUND
147#define NUMSNDCHUNKS (STARTMUSIC + LASTMUSIC)
148
149/////////////////////////////////////////////////
150//
151// Thanks for playing with MUSE!
152//
153/////////////////////////////////////////////////
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 @@
1#define STR_ENDGAME1 "We owe you a great debt, Mr. Blazkowicz."
2#define STR_ENDGAME2 "You have served your country well."
3#define STR_ENDGAME3 "With the spear gone, the Allies will finally"
4#define STR_ENDGAME4 "by able to destroy Hitler..."
5
6#define STR_COPY1 "That's close, but not close enough to get"
7#define STR_COPY2 "you into the game."
8
9#define STR_COPY3 "Wow, you must have the early version of the"
10#define STR_COPY4 "manual with the totally false information in it."
11
12#define STR_COPY5 "I would let you into the game, but seeing"
13#define STR_COPY6 "as that was not at all the right answer..."
14
15#define STR_COPY7 "It's just too bad we can't get together on"
16#define STR_COPY8 "this one. Sorry."
17
18#define STR_COPY9 "Hey, you're just SO off base!"
19
20#define STR_COPY10 "You know, I once typed that myself when"
21#define STR_COPY11 "I was your age."
22
23#define STR_COPY12 "Nops. Zero points. Zugga."
24
25#define STR_COPY13 "Yeah...right."
26
27#define STR_COPY14 "You must like these quizzes."
28
29#define STR_COPY15 "Could be called \"PixelMeister\"?"
30
31#define STR_COPY16 "Might engineer some software?"
32
33#define STR_COPY17 "Would be found"
34#define STR_COPY18 "directing creatively?"
35
36#define STR_COPY19 "Might be found"
37#define STR_COPY20 "handling operations?"
38
39#define STR_COPY21 "Has a name familiar"
40#define STR_COPY22 "to your weatherman?"
41
42#define STR_NOPE1 "Welcome to the DOS prompt, pirate!"
43#define STR_NOPE2 "Eat hot DOS prompt, goober!"
44#define STR_NOPE3 "Ya know, this program doesn't cost that much."
45#define STR_NOPE4 "Hey...weren't you just AT this DOS prompt?"
46#define STR_NOPE5 "What's a nice user like you doin' at a DOS prompt like this?"
47#define STR_NOPE6 "Well, I'm sure you just \"misplaced\" the manual..."
48#define STR_NOPE7 "Run me again when you've boned up on your manual a bit."
49#define STR_NOPE8 "Nice try, but no Spear."
50#define STR_NOPE9 "That information is in the Spear of Destiny manual, by the way."
51
52#define STR_MISC1 "Under \"Killing the Enemy\", what"
53#define STR_MISC2 "type of enemy is pictured?"
54
55#define STR_MISC3 "How many eyelets are on B.J.'s"
56#define STR_MISC4 "boots? (see page 2)"
57
58#define STR_MISC5 "The word \"minister\" appears in"
59#define STR_MISC6 "what gray shape on page 2?"
60
61#define STR_MISC7 "How many bullets does B.J. have"
62#define STR_MISC8 "on the screen-shot in the middle"
63#define STR_MISC9 "of page 9?"
64
65#define STR_STAR "star"
66#define STR_DEBRIEF " DEBRIEFING\n SESSION\n"
67#define STR_ENEMY1 "Name the member of the"
68#define STR_ENEMY2 "enemy forces shown above"
69
70#define STR_CHECKMAN "CHECK YER MANUAL!"
71#define STR_MAN1 "Which manual page"
72#define STR_MAN2 "is the Options Menu"
73#define STR_MAN3 "function"
74#define STR_MAN4 "on?"
75
76#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 @@
1#define USE_GPL 1
2#if USE_GPL
3#include "fmopl_gpl.h"
4#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 @@
1/*
2 * Rockbox notes:
3 *
4 * This file is originally from the MAME project, from after their
5 * GPLv2 relicense. I (Franklin Wei) have made some modifications
6 * since then to make it work with the Wolf4SDL source. Notably, I
7 * corrected the behavior of YM3812Write() to write directly to the
8 * registers. Additionally, I fixed an unaligned write in OPL_CALC_CH
9 * which caused terrible output on ARM.
10 */
11
12// license:GPL-2.0+
13// copyright-holders:Jarek Burczynski,Tatsuyuki Satoh
14/*
15**
16** File: fmopl.c - software implementation of FM sound generator
17** types OPL and OPL2
18**
19** Copyright Jarek Burczynski (bujar at mame dot net)
20** Copyright Tatsuyuki Satoh , MultiArcadeMachineEmulator development
21**
22** Version 0.72
23**
24
25Revision History:
26
2704-08-2003 Jarek Burczynski:
28- removed BFRDY hack. BFRDY is busy flag, and it should be 0 only when the chip
29handles memory read/write or during the adpcm synthesis when the chip
30requests another byte of ADPCM data.
31
3224-07-2003 Jarek Burczynski:
33- added a small hack for Y8950 status BFRDY flag (bit 3 should be set after
34some (unknown) delay). Right now it's always set.
35
3614-06-2003 Jarek Burczynski:
37- implemented all of the status register flags in Y8950 emulation
38- renamed y8950_set_delta_t_memory() parameters from _rom_ to _mem_ since
39they can be either RAM or ROM
40
4108-10-2002 Jarek Burczynski (thanks to Dox for the YM3526 chip)
42- corrected ym3526_read() to always set bit 2 and bit 1
43to HIGH state - identical to ym3812_read (verified on real YM3526)
44
4504-28-2002 Jarek Burczynski:
46- binary exact Envelope Generator (verified on real YM3812);
47compared to YM2151: the EG clock is equal to internal_clock,
48rates are 2 times slower and volume resolution is one bit less
49- modified interface functions (they no longer return pointer -
50that's internal to the emulator now):
51- new wrapper functions for OPLCreate: ym3526_init(), ym3812_init() and y8950_init()
52- corrected 'off by one' error in feedback calculations (when feedback is off)
53- enabled waveform usage (credit goes to Vlad Romascanu and zazzal22)
54- speeded up noise generator calculations (Nicola Salmoria)
55
5603-24-2002 Jarek Burczynski (thanks to Dox for the YM3812 chip)
57Complete rewrite (all verified on real YM3812):
58- corrected sin_tab and tl_tab data
59- corrected operator output calculations
60- corrected waveform_select_enable register;
61simply: ignore all writes to waveform_select register when
62waveform_select_enable == 0 and do not change the waveform previously selected.
63- corrected KSR handling
64- corrected Envelope Generator: attack shape, Sustain mode and
65Percussive/Non-percussive modes handling
66- Envelope Generator rates are two times slower now
67- LFO amplitude (tremolo) and phase modulation (vibrato)
68- rhythm sounds phase generation
69- white noise generator (big thanks to Olivier Galibert for mentioning Berlekamp-Massey algorithm)
70- corrected key on/off handling (the 'key' signal is ORed from three sources: FM, rhythm and CSM)
71- funky details (like ignoring output of operator 1 in BD rhythm sound when connect == 1)
72
7312-28-2001 Acho A. Tang
74- reflected Delta-T EOS status on Y8950 status port.
75- fixed subscription range of attack/decay tables
76
77
78To do:
79add delay before key off in CSM mode (see CSMKeyControll)
80verify volume of the FM part on the Y8950
81*/
82
83#include "fmopl.h"
84
85
86
87/* output final shift */
88#if (OPL_SAMPLE_BITS==16)
89#define FINAL_SH (0)
90#define MAXOUT (+32767)
91#define MINOUT (-32768)
92#else
93#define FINAL_SH (8)
94#define MAXOUT (+127)
95#define MINOUT (-128)
96#endif
97
98
99#define FREQ_SH 16 /* 16.16 fixed point (frequency calculations) */
100#define EG_SH 16 /* 16.16 fixed point (EG timing) */
101#define LFO_SH 24 /* 8.24 fixed point (LFO calculations) */
102#define TIMER_SH 16 /* 16.16 fixed point (timers calculations) */
103
104#define FREQ_MASK ((1<<FREQ_SH)-1)
105
106/* envelope output entries */
107#define ENV_BITS 10
108#define ENV_LEN (1<<ENV_BITS)
109#define ENV_STEP (128.0/ENV_LEN)
110
111#define MAX_ATT_INDEX ((1<<(ENV_BITS-1))-1) /*511*/
112#define MIN_ATT_INDEX (0)
113
114/* sinwave entries */
115#define SIN_BITS 10
116#define SIN_LEN (1<<SIN_BITS)
117#define SIN_MASK (SIN_LEN-1)
118
119#define TL_RES_LEN (256) /* 8 bits addressing (real chip) */
120
121
122
123/* register number to channel number , slot offset */
124#define SLOT1 0
125#define SLOT2 1
126
127/* Envelope Generator phases */
128
129#define EG_ATT 4
130#define EG_DEC 3
131#define EG_SUS 2
132#define EG_REL 1
133#define EG_OFF 0
134
135
136/* save output as raw 16-bit sample */
137
138/*#define SAVE_SAMPLE*/
139
140#ifdef SAVE_SAMPLE
141static signed int acc_calc(signed int value)
142{
143 if (value>=0)
144 {
145 if (value < 0x0200)
146 return (value & ~0);
147 if (value < 0x0400)
148 return (value & ~1);
149 if (value < 0x0800)
150 return (value & ~3);
151 if (value < 0x1000)
152 return (value & ~7);
153 if (value < 0x2000)
154 return (value & ~15);
155 if (value < 0x4000)
156 return (value & ~31);
157 return (value & ~63);
158 }
159 /*else value < 0*/
160 if (value > -0x0200)
161 return (~abs(value) & ~0);
162 if (value > -0x0400)
163 return (~abs(value) & ~1);
164 if (value > -0x0800)
165 return (~abs(value) & ~3);
166 if (value > -0x1000)
167 return (~abs(value) & ~7);
168 if (value > -0x2000)
169 return (~abs(value) & ~15);
170 if (value > -0x4000)
171 return (~abs(value) & ~31);
172 return (~abs(value) & ~63);
173}
174
175
176static FILE *sample[1];
177#if 1 /*save to MONO file */
178#define SAVE_ALL_CHANNELS \
179 { signed int pom = acc_calc(lt); \
180 fputc((unsigned short)pom&0xff,sample[0]); \
181 fputc(((unsigned short)pom>>8)&0xff,sample[0]); \
182 }
183#else /*save to STEREO file */
184#define SAVE_ALL_CHANNELS \
185 { signed int pom = lt; \
186 fputc((unsigned short)pom&0xff,sample[0]); \
187 fputc(((unsigned short)pom>>8)&0xff,sample[0]); \
188 pom = rt; \
189 fputc((unsigned short)pom&0xff,sample[0]); \
190 fputc(((unsigned short)pom>>8)&0xff,sample[0]); \
191 }
192#endif
193#endif
194
195#define LOG_CYM_FILE 0
196static FILE * cymfile = NULL;
197
198
199
200#define OPL_TYPE_WAVESEL 0x01 /* waveform select */
201#define OPL_TYPE_ADPCM 0x02 /* DELTA-T ADPCM unit */
202#define OPL_TYPE_KEYBOARD 0x04 /* keyboard interface */
203#define OPL_TYPE_IO 0x08 /* I/O port */
204
205/* ---------- Generic interface section ---------- */
206#define OPL_TYPE_YM3526 (0)
207#define OPL_TYPE_YM3812 (OPL_TYPE_WAVESEL)
208#define OPL_TYPE_Y8950 (OPL_TYPE_ADPCM|OPL_TYPE_KEYBOARD|OPL_TYPE_IO)
209
210
211
212struct OPL_SLOT
213{
214 UINT32 ar; /* attack rate: AR<<2 */
215 UINT32 dr; /* decay rate: DR<<2 */
216 UINT32 rr; /* release rate:RR<<2 */
217 UINT8 KSR; /* key scale rate */
218 UINT8 ksl; /* keyscale level */
219 UINT8 ksr; /* key scale rate: kcode>>KSR */
220 UINT8 mul; /* multiple: mul_tab[ML] */
221
222 /* Phase Generator */
223 UINT32 Cnt; /* frequency counter */
224 UINT32 Incr; /* frequency counter step */
225 UINT8 FB; /* feedback shift value */
226 INT32 *connect1; /* slot1 output pointer */
227 INT32 op1_out[2]; /* slot1 output for feedback */
228 UINT8 CON; /* connection (algorithm) type */
229
230 /* Envelope Generator */
231 UINT8 eg_type; /* percussive/non-percussive mode */
232 UINT8 state; /* phase type */
233 UINT32 TL; /* total level: TL << 2 */
234 INT32 TLL; /* adjusted now TL */
235 INT32 volume; /* envelope counter */
236 UINT32 sl; /* sustain level: sl_tab[SL] */
237 UINT8 eg_sh_ar; /* (attack state) */
238 UINT8 eg_sel_ar; /* (attack state) */
239 UINT8 eg_sh_dr; /* (decay state) */
240 UINT8 eg_sel_dr; /* (decay state) */
241 UINT8 eg_sh_rr; /* (release state) */
242 UINT8 eg_sel_rr; /* (release state) */
243 UINT32 key; /* 0 = KEY OFF, >0 = KEY ON */
244
245 /* LFO */
246 UINT32 AMmask; /* LFO Amplitude Modulation enable mask */
247 UINT8 vib; /* LFO Phase Modulation enable flag (active high)*/
248
249 /* waveform select */
250 UINT16 wavetable;
251};
252
253typedef struct OPL_SLOT OPL_SLOT;
254
255struct OPL_CH
256{
257 OPL_SLOT SLOT[2];
258 /* phase generator state */
259 UINT32 block_fnum; /* block+fnum */
260 UINT32 fc; /* Freq. Increment base */
261 UINT32 ksl_base; /* KeyScaleLevel Base step */
262 UINT8 kcode; /* key code (for key scaling) */
263};
264
265typedef struct OPL_CH OPL_CH;
266
267/* OPL state */
268struct FM_OPL
269{
270 // moved to beginning to fix alignment
271 signed int phase_modulation __attribute__((aligned)); /* phase modulation input (SLOT 2) */
272 signed int output[1] __attribute__((aligned));
273
274 /* FM channel slots */
275 OPL_CH P_CH[9]; /* OPL/OPL2 chips have 9 channels*/
276
277 UINT32 eg_cnt; /* global envelope generator counter */
278 UINT32 eg_timer; /* global envelope generator counter works at frequency = chipclock/72 */
279 UINT32 eg_timer_add; /* step of eg_timer */
280 UINT32 eg_timer_overflow; /* envelope generator timer overlfows every 1 sample (on real chip) */
281
282 UINT8 rhythm; /* Rhythm mode */
283
284 UINT32 fn_tab[1024]; /* fnumber->increment counter */
285
286 /* LFO */
287 UINT32 LFO_AM;
288 INT32 LFO_PM;
289
290 UINT8 lfo_am_depth;
291 UINT8 lfo_pm_depth_range;
292 UINT32 lfo_am_cnt;
293 UINT32 lfo_am_inc;
294 UINT32 lfo_pm_cnt;
295 UINT32 lfo_pm_inc;
296
297 UINT32 noise_rng; /* 23 bit noise shift register */
298 UINT32 noise_p; /* current noise 'phase' */
299 UINT32 noise_f; /* current noise period */
300
301 UINT8 wavesel; /* waveform select enable flag */
302
303 UINT32 T[2]; /* timer counters */
304 UINT8 st[2]; /* timer enable */
305
306#if BUILD_Y8950
307 /* Delta-T ADPCM unit (Y8950) */
308
309 YM_DELTAT *deltat;
310
311 /* Keyboard and I/O ports interface */
312 UINT8 portDirection;
313 UINT8 portLatch;
314 OPL_PORTHANDLER_R porthandler_r;
315 OPL_PORTHANDLER_W porthandler_w;
316 void * port_param;
317 OPL_PORTHANDLER_R keyboardhandler_r;
318 OPL_PORTHANDLER_W keyboardhandler_w;
319 void * keyboard_param;
320#endif
321
322 /* external event callback handlers */
323 OPL_TIMERHANDLER timer_handler; /* TIMER handler */
324 void *TimerParam; /* TIMER parameter */
325 OPL_IRQHANDLER IRQHandler; /* IRQ handler */
326 void *IRQParam; /* IRQ parameter */
327 OPL_UPDATEHANDLER UpdateHandler;/* stream update handler */
328 void *UpdateParam; /* stream update parameter */
329
330 UINT8 type; /* chip type */
331 UINT8 address; /* address register */
332 UINT8 status; /* status flag */
333 UINT8 statusmask; /* status mask */
334 UINT8 mode; /* Reg.08 : CSM,notesel,etc. */
335
336 UINT32 clock; /* master clock (Hz) */
337 UINT32 rate; /* sampling rate (Hz) */
338 double freqbase; /* frequency base */
339 double TimerBase; /* Timer base time (==sampling time)*/
340 device_t *device;
341
342#if BUILD_Y8950
343 INT32 output_deltat[4]; /* for Y8950 DELTA-T, chip is mono, that 4 here is just for safety */
344#endif
345} __attribute__((aligned));
346
347typedef struct FM_OPL FM_OPL;
348
349/* mapping of register number (offset) to slot number used by the emulator */
350static const int slot_array[32]=
351{
352 0, 2, 4, 1, 3, 5,-1,-1,
353 6, 8,10, 7, 9,11,-1,-1,
354 12,14,16,13,15,17,-1,-1,
355 -1,-1,-1,-1,-1,-1,-1,-1
356};
357
358/* key scale level */
359/* table is 3dB/octave , DV converts this into 6dB/octave */
360/* 0.1875 is bit 0 weight of the envelope counter (volume) expressed in the 'decibel' scale */
361#define DV (0.1875/2.0)
362static const UINT32 ksl_tab[8*16]=
363{
364 /* OCT 0 */
365 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV,
366 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV,
367 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV,
368 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV,
369 /* OCT 1 */
370 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV,
371 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV,
372 0.000/DV, 0.750/DV, 1.125/DV, 1.500/DV,
373 1.875/DV, 2.250/DV, 2.625/DV, 3.000/DV,
374 /* OCT 2 */
375 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV,
376 0.000/DV, 1.125/DV, 1.875/DV, 2.625/DV,
377 3.000/DV, 3.750/DV, 4.125/DV, 4.500/DV,
378 4.875/DV, 5.250/DV, 5.625/DV, 6.000/DV,
379 /* OCT 3 */
380 0.000/DV, 0.000/DV, 0.000/DV, 1.875/DV,
381 3.000/DV, 4.125/DV, 4.875/DV, 5.625/DV,
382 6.000/DV, 6.750/DV, 7.125/DV, 7.500/DV,
383 7.875/DV, 8.250/DV, 8.625/DV, 9.000/DV,
384 /* OCT 4 */
385 0.000/DV, 0.000/DV, 3.000/DV, 4.875/DV,
386 6.000/DV, 7.125/DV, 7.875/DV, 8.625/DV,
387 9.000/DV, 9.750/DV,10.125/DV,10.500/DV,
388 10.875/DV,11.250/DV,11.625/DV,12.000/DV,
389 /* OCT 5 */
390 0.000/DV, 3.000/DV, 6.000/DV, 7.875/DV,
391 9.000/DV,10.125/DV,10.875/DV,11.625/DV,
392 12.000/DV,12.750/DV,13.125/DV,13.500/DV,
393 13.875/DV,14.250/DV,14.625/DV,15.000/DV,
394 /* OCT 6 */
395 0.000/DV, 6.000/DV, 9.000/DV,10.875/DV,
396 12.000/DV,13.125/DV,13.875/DV,14.625/DV,
397 15.000/DV,15.750/DV,16.125/DV,16.500/DV,
398 16.875/DV,17.250/DV,17.625/DV,18.000/DV,
399 /* OCT 7 */
400 0.000/DV, 9.000/DV,12.000/DV,13.875/DV,
401 15.000/DV,16.125/DV,16.875/DV,17.625/DV,
402 18.000/DV,18.750/DV,19.125/DV,19.500/DV,
403 19.875/DV,20.250/DV,20.625/DV,21.000/DV
404};
405#undef DV
406
407/* 0 / 3.0 / 1.5 / 6.0 dB/OCT */
408static const UINT32 ksl_shift[4] = { 31, 1, 2, 0 };
409
410
411/* sustain level table (3dB per step) */
412/* 0 - 15: 0, 3, 6, 9,12,15,18,21,24,27,30,33,36,39,42,93 (dB)*/
413#define SC(db) (UINT32) ( db * (2.0/ENV_STEP) )
414static const UINT32 sl_tab[16]={
415 SC( 0),SC( 1),SC( 2),SC(3 ),SC(4 ),SC(5 ),SC(6 ),SC( 7),
416 SC( 8),SC( 9),SC(10),SC(11),SC(12),SC(13),SC(14),SC(31)
417};
418#undef SC
419
420
421#define RATE_STEPS (8)
422static const unsigned char eg_inc[15*RATE_STEPS]={
423/*cycle:0 1 2 3 4 5 6 7*/
424
425 /* 0 */ 0,1, 0,1, 0,1, 0,1, /* rates 00..12 0 (increment by 0 or 1) */
426 /* 1 */ 0,1, 0,1, 1,1, 0,1, /* rates 00..12 1 */
427 /* 2 */ 0,1, 1,1, 0,1, 1,1, /* rates 00..12 2 */
428 /* 3 */ 0,1, 1,1, 1,1, 1,1, /* rates 00..12 3 */
429
430 /* 4 */ 1,1, 1,1, 1,1, 1,1, /* rate 13 0 (increment by 1) */
431 /* 5 */ 1,1, 1,2, 1,1, 1,2, /* rate 13 1 */
432 /* 6 */ 1,2, 1,2, 1,2, 1,2, /* rate 13 2 */
433 /* 7 */ 1,2, 2,2, 1,2, 2,2, /* rate 13 3 */
434
435 /* 8 */ 2,2, 2,2, 2,2, 2,2, /* rate 14 0 (increment by 2) */
436 /* 9 */ 2,2, 2,4, 2,2, 2,4, /* rate 14 1 */
437 /*10 */ 2,4, 2,4, 2,4, 2,4, /* rate 14 2 */
438 /*11 */ 2,4, 4,4, 2,4, 4,4, /* rate 14 3 */
439
440 /*12 */ 4,4, 4,4, 4,4, 4,4, /* rates 15 0, 15 1, 15 2, 15 3 (increment by 4) */
441 /*13 */ 8,8, 8,8, 8,8, 8,8, /* rates 15 2, 15 3 for attack */
442 /*14 */ 0,0, 0,0, 0,0, 0,0, /* infinity rates for attack and decay(s) */
443};
444
445
446#define O(a) (a*RATE_STEPS)
447
448/*note that there is no O(13) in this table - it's directly in the code */
449static const unsigned char eg_rate_select[16+64+16]={ /* Envelope Generator rates (16 + 64 rates + 16 RKS) */
450/* 16 infinite time rates */
451 O(14),O(14),O(14),O(14),O(14),O(14),O(14),O(14),
452 O(14),O(14),O(14),O(14),O(14),O(14),O(14),O(14),
453
454/* rates 00-12 */
455 O( 0),O( 1),O( 2),O( 3),
456 O( 0),O( 1),O( 2),O( 3),
457 O( 0),O( 1),O( 2),O( 3),
458 O( 0),O( 1),O( 2),O( 3),
459 O( 0),O( 1),O( 2),O( 3),
460 O( 0),O( 1),O( 2),O( 3),
461 O( 0),O( 1),O( 2),O( 3),
462 O( 0),O( 1),O( 2),O( 3),
463 O( 0),O( 1),O( 2),O( 3),
464 O( 0),O( 1),O( 2),O( 3),
465 O( 0),O( 1),O( 2),O( 3),
466 O( 0),O( 1),O( 2),O( 3),
467 O( 0),O( 1),O( 2),O( 3),
468
469/* rate 13 */
470 O( 4),O( 5),O( 6),O( 7),
471
472/* rate 14 */
473 O( 8),O( 9),O(10),O(11),
474
475/* rate 15 */
476 O(12),O(12),O(12),O(12),
477
478/* 16 dummy rates (same as 15 3) */
479 O(12),O(12),O(12),O(12),O(12),O(12),O(12),O(12),
480 O(12),O(12),O(12),O(12),O(12),O(12),O(12),O(12),
481
482};
483#undef O
484
485/*rate 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 */
486/*shift 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, 0, 0 */
487/*mask 4095, 2047, 1023, 511, 255, 127, 63, 31, 15, 7, 3, 1, 0, 0, 0, 0 */
488
489#define O(a) (a*1)
490static const unsigned char eg_rate_shift[16+64+16]={ /* Envelope Generator counter shifts (16 + 64 rates + 16 RKS) */
491/* 16 infinite time rates */
492 O(0),O(0),O(0),O(0),O(0),O(0),O(0),O(0),
493 O(0),O(0),O(0),O(0),O(0),O(0),O(0),O(0),
494
495/* rates 00-12 */
496 O(12),O(12),O(12),O(12),
497 O(11),O(11),O(11),O(11),
498 O(10),O(10),O(10),O(10),
499 O( 9),O( 9),O( 9),O( 9),
500 O( 8),O( 8),O( 8),O( 8),
501 O( 7),O( 7),O( 7),O( 7),
502 O( 6),O( 6),O( 6),O( 6),
503 O( 5),O( 5),O( 5),O( 5),
504 O( 4),O( 4),O( 4),O( 4),
505 O( 3),O( 3),O( 3),O( 3),
506 O( 2),O( 2),O( 2),O( 2),
507 O( 1),O( 1),O( 1),O( 1),
508 O( 0),O( 0),O( 0),O( 0),
509
510/* rate 13 */
511 O( 0),O( 0),O( 0),O( 0),
512
513/* rate 14 */
514 O( 0),O( 0),O( 0),O( 0),
515
516/* rate 15 */
517 O( 0),O( 0),O( 0),O( 0),
518
519/* 16 dummy rates (same as 15 3) */
520 O( 0),O( 0),O( 0),O( 0),O( 0),O( 0),O( 0),O( 0),
521 O( 0),O( 0),O( 0),O( 0),O( 0),O( 0),O( 0),O( 0),
522
523};
524#undef O
525
526
527/* multiple table */
528#define ML 2
529static const UINT8 mul_tab[16]= {
530/* 1/2, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,10,12,12,15,15 */
531 ML/2, 1*ML, 2*ML, 3*ML, 4*ML, 5*ML, 6*ML, 7*ML,
532 8*ML, 9*ML,10*ML,10*ML,12*ML,12*ML,15*ML,15*ML
533};
534#undef ML
535
536/* TL_TAB_LEN is calculated as:
537 * 12 - sinus amplitude bits (Y axis)
538 * 2 - sinus sign bit (Y axis)
539 * TL_RES_LEN - sinus resolution (X axis)
540 */
541#define TL_TAB_LEN (12*2*TL_RES_LEN)
542static signed int tl_tab[TL_TAB_LEN];
543
544#define ENV_QUIET (TL_TAB_LEN>>4)
545
546/* sin waveform table in 'decibel' scale */
547/* four waveforms on OPL2 type chips */
548static unsigned int sin_tab[SIN_LEN * 4];
549
550
551/* LFO Amplitude Modulation table (verified on real YM3812)
552 27 output levels (triangle waveform); 1 level takes one of: 192, 256 or 448 samples
553
554 Length: 210 elements.
555
556 Each of the elements has to be repeated
557 exactly 64 times (on 64 consecutive samples).
558 The whole table takes: 64 * 210 = 13440 samples.
559
560 When AM = 1 data is used directly
561 When AM = 0 data is divided by 4 before being used (losing precision is important)
562*/
563
564#define LFO_AM_TAB_ELEMENTS 210
565
566static const UINT8 lfo_am_table[LFO_AM_TAB_ELEMENTS] = {
567 0,0,0,0,0,0,0,
568 1,1,1,1,
569 2,2,2,2,
570 3,3,3,3,
571 4,4,4,4,
572 5,5,5,5,
573 6,6,6,6,
574 7,7,7,7,
575 8,8,8,8,
576 9,9,9,9,
577 10,10,10,10,
578 11,11,11,11,
579 12,12,12,12,
580 13,13,13,13,
581 14,14,14,14,
582 15,15,15,15,
583 16,16,16,16,
584 17,17,17,17,
585 18,18,18,18,
586 19,19,19,19,
587 20,20,20,20,
588 21,21,21,21,
589 22,22,22,22,
590 23,23,23,23,
591 24,24,24,24,
592 25,25,25,25,
593 26,26,26,
594 25,25,25,25,
595 24,24,24,24,
596 23,23,23,23,
597 22,22,22,22,
598 21,21,21,21,
599 20,20,20,20,
600 19,19,19,19,
601 18,18,18,18,
602 17,17,17,17,
603 16,16,16,16,
604 15,15,15,15,
605 14,14,14,14,
606 13,13,13,13,
607 12,12,12,12,
608 11,11,11,11,
609 10,10,10,10,
610 9,9,9,9,
611 8,8,8,8,
612 7,7,7,7,
613 6,6,6,6,
614 5,5,5,5,
615 4,4,4,4,
616 3,3,3,3,
617 2,2,2,2,
618 1,1,1,1
619};
620
621/* LFO Phase Modulation table (verified on real YM3812) */
622static const INT8 lfo_pm_table[8*8*2] = {
623/* FNUM2/FNUM = 00 0xxxxxxx (0x0000) */
624 0, 0, 0, 0, 0, 0, 0, 0, /*LFO PM depth = 0*/
625 0, 0, 0, 0, 0, 0, 0, 0, /*LFO PM depth = 1*/
626
627/* FNUM2/FNUM = 00 1xxxxxxx (0x0080) */
628 0, 0, 0, 0, 0, 0, 0, 0, /*LFO PM depth = 0*/
629 1, 0, 0, 0,-1, 0, 0, 0, /*LFO PM depth = 1*/
630
631/* FNUM2/FNUM = 01 0xxxxxxx (0x0100) */
632 1, 0, 0, 0,-1, 0, 0, 0, /*LFO PM depth = 0*/
633 2, 1, 0,-1,-2,-1, 0, 1, /*LFO PM depth = 1*/
634
635/* FNUM2/FNUM = 01 1xxxxxxx (0x0180) */
636 1, 0, 0, 0,-1, 0, 0, 0, /*LFO PM depth = 0*/
637 3, 1, 0,-1,-3,-1, 0, 1, /*LFO PM depth = 1*/
638
639/* FNUM2/FNUM = 10 0xxxxxxx (0x0200) */
640 2, 1, 0,-1,-2,-1, 0, 1, /*LFO PM depth = 0*/
641 4, 2, 0,-2,-4,-2, 0, 2, /*LFO PM depth = 1*/
642
643/* FNUM2/FNUM = 10 1xxxxxxx (0x0280) */
644 2, 1, 0,-1,-2,-1, 0, 1, /*LFO PM depth = 0*/
645 5, 2, 0,-2,-5,-2, 0, 2, /*LFO PM depth = 1*/
646
647/* FNUM2/FNUM = 11 0xxxxxxx (0x0300) */
648 3, 1, 0,-1,-3,-1, 0, 1, /*LFO PM depth = 0*/
649 6, 3, 0,-3,-6,-3, 0, 3, /*LFO PM depth = 1*/
650
651/* FNUM2/FNUM = 11 1xxxxxxx (0x0380) */
652 3, 1, 0,-1,-3,-1, 0, 1, /*LFO PM depth = 0*/
653 7, 3, 0,-3,-7,-3, 0, 3 /*LFO PM depth = 1*/
654};
655
656
657/* lock level of common table */
658static int num_lock = 0;
659
660
661#define SLOT7_1 (&OPL->P_CH[7].SLOT[SLOT1])
662#define SLOT7_2 (&OPL->P_CH[7].SLOT[SLOT2])
663#define SLOT8_1 (&OPL->P_CH[8].SLOT[SLOT1])
664#define SLOT8_2 (&OPL->P_CH[8].SLOT[SLOT2])
665
666
667
668
669static int limit( int val, int max, int min ) {
670 if ( val > max )
671 val = max;
672 else if ( val < min )
673 val = min;
674
675 return val;
676}
677
678
679/* status set and IRQ handling */
680static void OPL_STATUS_SET(FM_OPL *OPL,int flag)
681{
682 /* set status flag */
683 OPL->status |= flag;
684 if(!(OPL->status & 0x80))
685 {
686 if(OPL->status & OPL->statusmask)
687 { /* IRQ on */
688 OPL->status |= 0x80;
689 /* callback user interrupt handler (IRQ is OFF to ON) */
690 if(OPL->IRQHandler) (OPL->IRQHandler)(OPL->IRQParam,1);
691 }
692 }
693}
694
695/* status reset and IRQ handling */
696static void OPL_STATUS_RESET(FM_OPL *OPL,int flag)
697{
698 /* reset status flag */
699 OPL->status &=~flag;
700 if((OPL->status & 0x80))
701 {
702 if (!(OPL->status & OPL->statusmask) )
703 {
704 OPL->status &= 0x7f;
705 /* callback user interrupt handler (IRQ is ON to OFF) */
706 if(OPL->IRQHandler) (OPL->IRQHandler)(OPL->IRQParam,0);
707 }
708 }
709}
710
711/* IRQ mask set */
712static void OPL_STATUSMASK_SET(FM_OPL *OPL,int flag)
713{
714 OPL->statusmask = flag;
715 /* IRQ handling check */
716 OPL_STATUS_SET(OPL,0);
717 OPL_STATUS_RESET(OPL,0);
718}
719
720
721/* advance LFO to next sample */
722static void advance_lfo(FM_OPL *OPL)
723{
724 UINT8 tmp;
725
726 /* LFO */
727 OPL->lfo_am_cnt += OPL->lfo_am_inc;
728// if (OPL->lfo_am_cnt >= ((UINT32)LFO_AM_TAB_ELEMENTS<<LFO_SH) ) /* lfo_am_table is 210 elements long */
729// OPL->lfo_am_cnt -= ((UINT32)LFO_AM_TAB_ELEMENTS<<LFO_SH);
730 if (OPL->lfo_am_cnt >= (LFO_AM_TAB_ELEMENTS<<LFO_SH) ) /* lfo_am_table is 210 elements long */
731 OPL->lfo_am_cnt -= (LFO_AM_TAB_ELEMENTS<<LFO_SH);
732
733 tmp = lfo_am_table[ OPL->lfo_am_cnt >> LFO_SH ];
734
735 if (OPL->lfo_am_depth)
736 OPL->LFO_AM = tmp;
737 else
738 OPL->LFO_AM = tmp>>2;
739
740 OPL->lfo_pm_cnt += OPL->lfo_pm_inc;
741 OPL->LFO_PM = ((OPL->lfo_pm_cnt>>LFO_SH) & 7) | OPL->lfo_pm_depth_range;
742}
743
744/* advance to next sample */
745static void advance(FM_OPL *OPL)
746{
747 OPL_CH *CH;
748 OPL_SLOT *op;
749 int i;
750
751 OPL->eg_timer += OPL->eg_timer_add;
752
753 while (OPL->eg_timer >= OPL->eg_timer_overflow)
754 {
755 OPL->eg_timer -= OPL->eg_timer_overflow;
756
757 OPL->eg_cnt++;
758
759 for (i=0; i<9*2; i++)
760 {
761 CH = &OPL->P_CH[i/2];
762 op = &CH->SLOT[i&1];
763
764 /* Envelope Generator */
765 switch(op->state)
766 {
767 case EG_ATT: /* attack phase */
768 if ( !(OPL->eg_cnt & ((1<<op->eg_sh_ar)-1) ) )
769 {
770 op->volume += (~op->volume *
771 (eg_inc[op->eg_sel_ar + ((OPL->eg_cnt>>op->eg_sh_ar)&7)])
772 ) >>3;
773
774 if (op->volume <= MIN_ATT_INDEX)
775 {
776 op->volume = MIN_ATT_INDEX;
777 op->state = EG_DEC;
778 }
779
780 }
781 break;
782
783 case EG_DEC: /* decay phase */
784 if ( !(OPL->eg_cnt & ((1<<op->eg_sh_dr)-1) ) )
785 {
786 op->volume += eg_inc[op->eg_sel_dr + ((OPL->eg_cnt>>op->eg_sh_dr)&7)];
787
788 if ( (UINT32) op->volume >= op->sl )
789 op->state = EG_SUS;
790
791 }
792 break;
793
794 case EG_SUS: /* sustain phase */
795
796 /* this is important behaviour:
797 one can change percusive/non-percussive modes on the fly and
798 the chip will remain in sustain phase - verified on real YM3812 */
799
800 if(op->eg_type) /* non-percussive mode */
801 {
802 /* do nothing */
803 }
804 else /* percussive mode */
805 {
806 /* during sustain phase chip adds Release Rate (in percussive mode) */
807 if ( !(OPL->eg_cnt & ((1<<op->eg_sh_rr)-1) ) )
808 {
809 op->volume += eg_inc[op->eg_sel_rr + ((OPL->eg_cnt>>op->eg_sh_rr)&7)];
810
811 if ( op->volume >= MAX_ATT_INDEX )
812 op->volume = MAX_ATT_INDEX;
813 }
814 /* else do nothing in sustain phase */
815 }
816 break;
817
818 case EG_REL: /* release phase */
819 if ( !(OPL->eg_cnt & ((1<<op->eg_sh_rr)-1) ) )
820 {
821 op->volume += eg_inc[op->eg_sel_rr + ((OPL->eg_cnt>>op->eg_sh_rr)&7)];
822
823 if ( op->volume >= MAX_ATT_INDEX )
824 {
825 op->volume = MAX_ATT_INDEX;
826 op->state = EG_OFF;
827 }
828
829 }
830 break;
831
832 default:
833 break;
834 }
835 }
836 }
837
838 for (i=0; i<9*2; i++)
839 {
840 CH = &OPL->P_CH[i/2];
841 op = &CH->SLOT[i&1];
842
843 /* Phase Generator */
844 if(op->vib)
845 {
846 UINT8 block;
847 unsigned int block_fnum = CH->block_fnum;
848
849 unsigned int fnum_lfo = (block_fnum&0x0380) >> 7;
850
851 signed int lfo_fn_table_index_offset = lfo_pm_table[OPL->LFO_PM + 16*fnum_lfo ];
852
853 if (lfo_fn_table_index_offset) /* LFO phase modulation active */
854 {
855 block_fnum += lfo_fn_table_index_offset;
856 block = (block_fnum&0x1c00) >> 10;
857 op->Cnt += (OPL->fn_tab[block_fnum&0x03ff] >> (7-block)) * op->mul;
858 }
859 else /* LFO phase modulation = zero */
860 {
861 op->Cnt += op->Incr;
862 }
863 }
864 else /* LFO phase modulation disabled for this operator */
865 {
866 op->Cnt += op->Incr;
867 }
868 }
869
870 /* The Noise Generator of the YM3812 is 23-bit shift register.
871 * Period is equal to 2^23-2 samples.
872 * Register works at sampling frequency of the chip, so output
873 * can change on every sample.
874 *
875 * Output of the register and input to the bit 22 is:
876 * bit0 XOR bit14 XOR bit15 XOR bit22
877 *
878 * Simply use bit 22 as the noise output.
879 */
880
881 OPL->noise_p += OPL->noise_f;
882 i = OPL->noise_p >> FREQ_SH; /* number of events (shifts of the shift register) */
883 OPL->noise_p &= FREQ_MASK;
884 while (i)
885 {
886 /*
887 UINT32 j;
888 j = ( (OPL->noise_rng) ^ (OPL->noise_rng>>14) ^ (OPL->noise_rng>>15) ^ (OPL->noise_rng>>22) ) & 1;
889 OPL->noise_rng = (j<<22) | (OPL->noise_rng>>1);
890 */
891
892 /*
893 Instead of doing all the logic operations above, we
894 use a trick here (and use bit 0 as the noise output).
895 The difference is only that the noise bit changes one
896 step ahead. This doesn't matter since we don't know
897 what is real state of the noise_rng after the reset.
898 */
899
900 if (OPL->noise_rng & 1) OPL->noise_rng ^= 0x800302;
901 OPL->noise_rng >>= 1;
902
903 i--;
904 }
905}
906
907
908static signed int op_calc(UINT32 phase, unsigned int env, signed int pm, unsigned int wave_tab)
909{
910 UINT32 p;
911
912 p = (env<<4) + sin_tab[wave_tab + ((((signed int)((phase & ~FREQ_MASK) + (pm<<16))) >> FREQ_SH ) & SIN_MASK) ];
913
914 if (p >= TL_TAB_LEN)
915 return 0;
916 return tl_tab[p];
917}
918
919static signed int op_calc1(UINT32 phase, unsigned int env, signed int pm, unsigned int wave_tab)
920{
921 UINT32 p;
922
923 p = (env<<4) + sin_tab[wave_tab + ((((signed int)((phase & ~FREQ_MASK) + pm )) >> FREQ_SH ) & SIN_MASK) ];
924
925 if (p >= TL_TAB_LEN)
926 return 0;
927 return tl_tab[p];
928}
929
930
931#define volume_calc(OP) ((OP)->TLL + ((UINT32)(OP)->volume) + (OPL->LFO_AM & (OP)->AMmask))
932
933/* calculate output */
934static void OPL_CALC_CH( FM_OPL *OPL, OPL_CH *CH )
935{
936 OPL_SLOT *SLOT;
937 unsigned int env;
938 signed int out;
939
940 OPL->phase_modulation = 0;
941
942 /* SLOT 1 */
943 SLOT = &CH->SLOT[SLOT1];
944 env = volume_calc(SLOT);
945 out = SLOT->op1_out[0] + SLOT->op1_out[1];
946 SLOT->op1_out[0] = SLOT->op1_out[1];
947
948 //INT32 a;
949 //memcpy(&a, SLOT->connect1, sizeof(a));
950 //a += SLOT->op1_out[0];
951 //memcpy(SLOT->connect1, &a, sizeof(a));
952
953 *SLOT->connect1 += SLOT->op1_out[0]; // alignment issue on arm
954 SLOT->op1_out[1] = 0;
955 if( env < ENV_QUIET )
956 {
957 if (!SLOT->FB)
958 out = 0;
959 SLOT->op1_out[1] = op_calc1(SLOT->Cnt, env, (out<<SLOT->FB), SLOT->wavetable );
960 }
961 /* SLOT 2 */
962 SLOT++;
963 env = volume_calc(SLOT);
964 if( env < ENV_QUIET )
965 {
966 OPL->output[0] += op_calc(SLOT->Cnt, env, OPL->phase_modulation, SLOT->wavetable);
967 }
968}
969
970/*
971 operators used in the rhythm sounds generation process:
972
973 Envelope Generator:
974
975 channel operator register number Bass High Snare Tom Top
976 / slot number TL ARDR SLRR Wave Drum Hat Drum Tom Cymbal
977 6 / 0 12 50 70 90 f0 +
978 6 / 1 15 53 73 93 f3 +
979 7 / 0 13 51 71 91 f1 +
980 7 / 1 16 54 74 94 f4 +
981 8 / 0 14 52 72 92 f2 +
982 8 / 1 17 55 75 95 f5 +
983
984 Phase Generator:
985
986 channel operator register number Bass High Snare Tom Top
987 / slot number MULTIPLE Drum Hat Drum Tom Cymbal
988 6 / 0 12 30 +
989 6 / 1 15 33 +
990 7 / 0 13 31 + + +
991 7 / 1 16 34 ----- n o t u s e d -----
992 8 / 0 14 32 +
993 8 / 1 17 35 + +
994
995 channel operator register number Bass High Snare Tom Top
996 number number BLK/FNUM2 FNUM Drum Hat Drum Tom Cymbal
997 6 12,15 B6 A6 +
998
999 7 13,16 B7 A7 + + +
1000
1001 8 14,17 B8 A8 + + +
1002
1003*/
1004
1005/* calculate rhythm */
1006
1007static void OPL_CALC_RH( FM_OPL *OPL, OPL_CH *CH, unsigned int noise )
1008{
1009 OPL_SLOT *SLOT;
1010 signed int out;
1011 unsigned int env;
1012
1013
1014 /* Bass Drum (verified on real YM3812):
1015 - depends on the channel 6 'connect' register:
1016 when connect = 0 it works the same as in normal (non-rhythm) mode (op1->op2->out)
1017 when connect = 1 _only_ operator 2 is present on output (op2->out), operator 1 is ignored
1018 - output sample always is multiplied by 2
1019 */
1020
1021 OPL->phase_modulation = 0;
1022 /* SLOT 1 */
1023 SLOT = &CH[6].SLOT[SLOT1];
1024 env = volume_calc(SLOT);
1025
1026 out = SLOT->op1_out[0] + SLOT->op1_out[1];
1027 SLOT->op1_out[0] = SLOT->op1_out[1];
1028
1029 if (!SLOT->CON)
1030 OPL->phase_modulation = SLOT->op1_out[0];
1031 /* else ignore output of operator 1 */
1032
1033 SLOT->op1_out[1] = 0;
1034 if( env < ENV_QUIET )
1035 {
1036 if (!SLOT->FB)
1037 out = 0;
1038 SLOT->op1_out[1] = op_calc1(SLOT->Cnt, env, (out<<SLOT->FB), SLOT->wavetable );
1039 }
1040
1041 /* SLOT 2 */
1042 SLOT++;
1043 env = volume_calc(SLOT);
1044 if( env < ENV_QUIET )
1045 OPL->output[0] += op_calc(SLOT->Cnt, env, OPL->phase_modulation, SLOT->wavetable) * 2;
1046
1047
1048 /* Phase generation is based on: */
1049 /* HH (13) channel 7->slot 1 combined with channel 8->slot 2 (same combination as TOP CYMBAL but different output phases) */
1050 /* SD (16) channel 7->slot 1 */
1051 /* TOM (14) channel 8->slot 1 */
1052 /* TOP (17) channel 7->slot 1 combined with channel 8->slot 2 (same combination as HIGH HAT but different output phases) */
1053
1054 /* Envelope generation based on: */
1055 /* HH channel 7->slot1 */
1056 /* SD channel 7->slot2 */
1057 /* TOM channel 8->slot1 */
1058 /* TOP channel 8->slot2 */
1059
1060
1061 /* The following formulas can be well optimized.
1062 I leave them in direct form for now (in case I've missed something).
1063 */
1064
1065 /* High Hat (verified on real YM3812) */
1066 env = volume_calc(SLOT7_1);
1067 if( env < ENV_QUIET )
1068 {
1069 /* high hat phase generation:
1070 phase = d0 or 234 (based on frequency only)
1071 phase = 34 or 2d0 (based on noise)
1072 */
1073
1074 /* base frequency derived from operator 1 in channel 7 */
1075 unsigned char bit7 = ((SLOT7_1->Cnt>>FREQ_SH)>>7)&1;
1076 unsigned char bit3 = ((SLOT7_1->Cnt>>FREQ_SH)>>3)&1;
1077 unsigned char bit2 = ((SLOT7_1->Cnt>>FREQ_SH)>>2)&1;
1078
1079 unsigned char res1 = (bit2 ^ bit7) | bit3;
1080
1081 /* when res1 = 0 phase = 0x000 | 0xd0; */
1082 /* when res1 = 1 phase = 0x200 | (0xd0>>2); */
1083 UINT32 phase = res1 ? (0x200|(0xd0>>2)) : 0xd0;
1084
1085 /* enable gate based on frequency of operator 2 in channel 8 */
1086 unsigned char bit5e= ((SLOT8_2->Cnt>>FREQ_SH)>>5)&1;
1087 unsigned char bit3e= ((SLOT8_2->Cnt>>FREQ_SH)>>3)&1;
1088
1089 unsigned char res2 = (bit3e ^ bit5e);
1090
1091 /* when res2 = 0 pass the phase from calculation above (res1); */
1092 /* when res2 = 1 phase = 0x200 | (0xd0>>2); */
1093 if (res2)
1094 phase = (0x200|(0xd0>>2));
1095
1096
1097 /* when phase & 0x200 is set and noise=1 then phase = 0x200|0xd0 */
1098 /* when phase & 0x200 is set and noise=0 then phase = 0x200|(0xd0>>2), ie no change */
1099 if (phase&0x200)
1100 {
1101 if (noise)
1102 phase = 0x200|0xd0;
1103 }
1104 else
1105 /* when phase & 0x200 is clear and noise=1 then phase = 0xd0>>2 */
1106 /* when phase & 0x200 is clear and noise=0 then phase = 0xd0, ie no change */
1107 {
1108 if (noise)
1109 phase = 0xd0>>2;
1110 }
1111
1112 OPL->output[0] += op_calc(phase<<FREQ_SH, env, 0, SLOT7_1->wavetable) * 2;
1113 }
1114
1115 /* Snare Drum (verified on real YM3812) */
1116 env = volume_calc(SLOT7_2);
1117 if( env < ENV_QUIET )
1118 {
1119 /* base frequency derived from operator 1 in channel 7 */
1120 unsigned char bit8 = ((SLOT7_1->Cnt>>FREQ_SH)>>8)&1;
1121
1122 /* when bit8 = 0 phase = 0x100; */
1123 /* when bit8 = 1 phase = 0x200; */
1124 UINT32 phase = bit8 ? 0x200 : 0x100;
1125
1126 /* Noise bit XOR'es phase by 0x100 */
1127 /* when noisebit = 0 pass the phase from calculation above */
1128 /* when noisebit = 1 phase ^= 0x100; */
1129 /* in other words: phase ^= (noisebit<<8); */
1130 if (noise)
1131 phase ^= 0x100;
1132
1133 OPL->output[0] += op_calc(phase<<FREQ_SH, env, 0, SLOT7_2->wavetable) * 2;
1134 }
1135
1136 /* Tom Tom (verified on real YM3812) */
1137 env = volume_calc(SLOT8_1);
1138 if( env < ENV_QUIET )
1139 OPL->output[0] += op_calc(SLOT8_1->Cnt, env, 0, SLOT8_1->wavetable) * 2;
1140
1141 /* Top Cymbal (verified on real YM3812) */
1142 env = volume_calc(SLOT8_2);
1143 if( env < ENV_QUIET )
1144 {
1145 /* base frequency derived from operator 1 in channel 7 */
1146 unsigned char bit7 = ((SLOT7_1->Cnt>>FREQ_SH)>>7)&1;
1147 unsigned char bit3 = ((SLOT7_1->Cnt>>FREQ_SH)>>3)&1;
1148 unsigned char bit2 = ((SLOT7_1->Cnt>>FREQ_SH)>>2)&1;
1149
1150 unsigned char res1 = (bit2 ^ bit7) | bit3;
1151
1152 /* when res1 = 0 phase = 0x000 | 0x100; */
1153 /* when res1 = 1 phase = 0x200 | 0x100; */
1154 UINT32 phase = res1 ? 0x300 : 0x100;
1155
1156 /* enable gate based on frequency of operator 2 in channel 8 */
1157 unsigned char bit5e= ((SLOT8_2->Cnt>>FREQ_SH)>>5)&1;
1158 unsigned char bit3e= ((SLOT8_2->Cnt>>FREQ_SH)>>3)&1;
1159
1160 unsigned char res2 = (bit3e ^ bit5e);
1161 /* when res2 = 0 pass the phase from calculation above (res1); */
1162 /* when res2 = 1 phase = 0x200 | 0x100; */
1163 if (res2)
1164 phase = 0x300;
1165
1166 OPL->output[0] += op_calc(phase<<FREQ_SH, env, 0, SLOT8_2->wavetable) * 2;
1167 }
1168}
1169
1170
1171/* generic table initialize */
1172static int init_tables(void)
1173{
1174 signed int i,x;
1175 signed int n;
1176 double o,m;
1177
1178
1179 for (x=0; x<TL_RES_LEN; x++)
1180 {
1181 m = (1<<16) / pow(2, (x+1) * (ENV_STEP/4.0) / 8.0);
1182 m = floor(m);
1183
1184 /* we never reach (1<<16) here due to the (x+1) */
1185 /* result fits within 16 bits at maximum */
1186
1187 n = (int)m; /* 16 bits here */
1188 n >>= 4; /* 12 bits here */
1189 if (n&1) /* round to nearest */
1190 n = (n>>1)+1;
1191 else
1192 n = n>>1;
1193 /* 11 bits here (rounded) */
1194 n <<= 1; /* 12 bits here (as in real chip) */
1195 tl_tab[ x*2 + 0 ] = n;
1196 tl_tab[ x*2 + 1 ] = -tl_tab[ x*2 + 0 ];
1197
1198 for (i=1; i<12; i++)
1199 {
1200 tl_tab[ x*2+0 + i*2*TL_RES_LEN ] = tl_tab[ x*2+0 ]>>i;
1201 tl_tab[ x*2+1 + i*2*TL_RES_LEN ] = -tl_tab[ x*2+0 + i*2*TL_RES_LEN ];
1202 }
1203#if 0
1204 logerror("tl %04i", x*2);
1205 for (i=0; i<12; i++)
1206 logerror(", [%02i] %5i", i*2, tl_tab[ x*2 /*+1*/ + i*2*TL_RES_LEN ] );
1207 logerror("\n");
1208#endif
1209 }
1210 /*logerror("FMOPL.C: TL_TAB_LEN = %i elements (%i bytes)\n",TL_TAB_LEN, (int)sizeof(tl_tab));*/
1211
1212
1213 for (i=0; i<SIN_LEN; i++)
1214 {
1215 /* non-standard sinus */
1216 m = sin( ((i*2)+1) * M_PI / SIN_LEN ); /* checked against the real chip */
1217
1218 /* we never reach zero here due to ((i*2)+1) */
1219
1220 if (m>0.0)
1221 o = 8*log(1.0/m)/log(2.0); /* convert to 'decibels' */
1222 else
1223 o = 8*log(-1.0/m)/log(2.0); /* convert to 'decibels' */
1224
1225 o = o / (ENV_STEP/4);
1226
1227 n = (int)(2.0*o);
1228 if (n&1) /* round to nearest */
1229 n = (n>>1)+1;
1230 else
1231 n = n>>1;
1232
1233 sin_tab[ i ] = n*2 + (m>=0.0? 0: 1 );
1234
1235 /*logerror("FMOPL.C: sin [%4i (hex=%03x)]= %4i (tl_tab value=%5i)\n", i, i, sin_tab[i], tl_tab[sin_tab[i]] );*/
1236 }
1237
1238 for (i=0; i<SIN_LEN; i++)
1239 {
1240 /* waveform 1: __ __ */
1241 /* / \____/ \____*/
1242 /* output only first half of the sinus waveform (positive one) */
1243
1244 if (i & (1<<(SIN_BITS-1)) )
1245 sin_tab[1*SIN_LEN+i] = TL_TAB_LEN;
1246 else
1247 sin_tab[1*SIN_LEN+i] = sin_tab[i];
1248
1249 /* waveform 2: __ __ __ __ */
1250 /* / \/ \/ \/ \*/
1251 /* abs(sin) */
1252
1253 sin_tab[2*SIN_LEN+i] = sin_tab[i & (SIN_MASK>>1) ];
1254
1255 /* waveform 3: _ _ _ _ */
1256 /* / |_/ |_/ |_/ |_*/
1257 /* abs(output only first quarter of the sinus waveform) */
1258
1259 if (i & (1<<(SIN_BITS-2)) )
1260 sin_tab[3*SIN_LEN+i] = TL_TAB_LEN;
1261 else
1262 sin_tab[3*SIN_LEN+i] = sin_tab[i & (SIN_MASK>>2)];
1263
1264 /*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]] );
1265 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]] );
1266 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]] );*/
1267 }
1268 /*logerror("FMOPL.C: ENV_QUIET= %08x (dec*8=%i)\n", ENV_QUIET, ENV_QUIET*8 );*/
1269
1270
1271#ifdef SAVE_SAMPLE
1272 sample[0]=fopen("sampsum.pcm","wb");
1273#endif
1274
1275 return 1;
1276}
1277
1278static void OPLCloseTable( void )
1279{
1280#ifdef SAVE_SAMPLE
1281 fclose(sample[0]);
1282#endif
1283}
1284
1285
1286
1287static void OPL_initalize(FM_OPL *OPL)
1288{
1289 int i;
1290
1291 /* frequency base */
1292 OPL->freqbase = (OPL->rate) ? ((double)OPL->clock / 72.0) / OPL->rate : 0;
1293#if 0
1294 OPL->rate = (double)OPL->clock / 72.0;
1295 OPL->freqbase = 1.0;
1296#endif
1297
1298 /*logerror("freqbase=%f\n", OPL->freqbase);*/
1299
1300 /* Timer base time */
1301 OPL->TimerBase = 1.0 / ((double)OPL->clock / 72.0 );
1302
1303 /* make fnumber -> increment counter table */
1304 for( i=0 ; i < 1024 ; i++ )
1305 {
1306 /* opn phase increment counter = 20bit */
1307 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 */
1308#if 0
1309 logerror("FMOPL.C: fn_tab[%4i] = %08x (dec=%8i)\n",
1310 i, OPL->fn_tab[i]>>6, OPL->fn_tab[i]>>6 );
1311#endif
1312 }
1313
1314#if 0
1315 for( i=0 ; i < 16 ; i++ )
1316 {
1317 logerror("FMOPL.C: sl_tab[%i] = %08x\n",
1318 i, sl_tab[i] );
1319 }
1320 for( i=0 ; i < 8 ; i++ )
1321 {
1322 int j;
1323 logerror("FMOPL.C: ksl_tab[oct=%2i] =",i);
1324 for (j=0; j<16; j++)
1325 {
1326 logerror("%08x ", (UINT32)(ksl_tab[i*16+j]) );
1327 }
1328 logerror("\n");
1329 }
1330#endif
1331
1332
1333 /* Amplitude modulation: 27 output levels (triangle waveform); 1 level takes one of: 192, 256 or 448 samples */
1334 /* One entry from LFO_AM_TABLE lasts for 64 samples */
1335 OPL->lfo_am_inc = (UINT32) ((1.0 / 64.0 ) * (1<<LFO_SH) * OPL->freqbase);
1336
1337 /* Vibrato: 8 output levels (triangle waveform); 1 level takes 1024 samples */
1338 OPL->lfo_pm_inc = (UINT32) ((1.0 / 1024.0) * (1<<LFO_SH) * OPL->freqbase);
1339
1340 /*logerror ("OPL->lfo_am_inc = %8x ; OPL->lfo_pm_inc = %8x\n", OPL->lfo_am_inc, OPL->lfo_pm_inc);*/
1341
1342 /* Noise generator: a step takes 1 sample */
1343 OPL->noise_f = (UINT32) ((1.0 / 1.0) * (1<<FREQ_SH) * OPL->freqbase);
1344
1345 OPL->eg_timer_add = (UINT32) ((1<<EG_SH) * OPL->freqbase);
1346 OPL->eg_timer_overflow = ( 1 ) * (1<<EG_SH);
1347 /*logerror("OPLinit eg_timer_add=%8x eg_timer_overflow=%8x\n", OPL->eg_timer_add, OPL->eg_timer_overflow);*/
1348
1349}
1350
1351static void FM_KEYON(OPL_SLOT *SLOT, UINT32 key_set)
1352{
1353 if( !SLOT->key )
1354 {
1355 /* restart Phase Generator */
1356 SLOT->Cnt = 0;
1357 /* phase -> Attack */
1358 SLOT->state = EG_ATT;
1359 }
1360 SLOT->key |= key_set;
1361}
1362
1363static void FM_KEYOFF(OPL_SLOT *SLOT, UINT32 key_clr)
1364{
1365 if( SLOT->key )
1366 {
1367 SLOT->key &= key_clr;
1368
1369 if( !SLOT->key )
1370 {
1371 /* phase -> Release */
1372 if (SLOT->state>EG_REL)
1373 SLOT->state = EG_REL;
1374 }
1375 }
1376}
1377
1378/* update phase increment counter of operator (also update the EG rates if necessary) */
1379static void CALC_FCSLOT(OPL_CH *CH,OPL_SLOT *SLOT)
1380{
1381 int ksr;
1382
1383 /* (frequency) phase increment counter */
1384 SLOT->Incr = CH->fc * SLOT->mul;
1385 ksr = CH->kcode >> SLOT->KSR;
1386
1387 if( SLOT->ksr != ksr )
1388 {
1389 SLOT->ksr = ksr;
1390
1391 /* calculate envelope generator rates */
1392 if ((SLOT->ar + SLOT->ksr) < 16+62)
1393 {
1394 SLOT->eg_sh_ar = eg_rate_shift [SLOT->ar + SLOT->ksr ];
1395 SLOT->eg_sel_ar = eg_rate_select[SLOT->ar + SLOT->ksr ];
1396 }
1397 else
1398 {
1399 SLOT->eg_sh_ar = 0;
1400 SLOT->eg_sel_ar = 13*RATE_STEPS;
1401 }
1402 SLOT->eg_sh_dr = eg_rate_shift [SLOT->dr + SLOT->ksr ];
1403 SLOT->eg_sel_dr = eg_rate_select[SLOT->dr + SLOT->ksr ];
1404 SLOT->eg_sh_rr = eg_rate_shift [SLOT->rr + SLOT->ksr ];
1405 SLOT->eg_sel_rr = eg_rate_select[SLOT->rr + SLOT->ksr ];
1406 }
1407}
1408
1409/* set multi,am,vib,EG-TYP,KSR,mul */
1410static void set_mul(FM_OPL *OPL,int slot,int v)
1411{
1412 OPL_CH *CH = &OPL->P_CH[slot/2];
1413 OPL_SLOT *SLOT = &CH->SLOT[slot&1];
1414
1415 SLOT->mul = mul_tab[v&0x0f];
1416 SLOT->KSR = (v&0x10) ? 0 : 2;
1417 SLOT->eg_type = (v&0x20);
1418 SLOT->vib = (v&0x40);
1419 SLOT->AMmask = (v&0x80) ? ~0 : 0;
1420 CALC_FCSLOT(CH,SLOT);
1421}
1422
1423/* set ksl & tl */
1424static void set_ksl_tl(FM_OPL *OPL,int slot,int v)
1425{
1426#if 0
1427 OPL_CH *CH = &OPL->P_CH[slot/2];
1428 OPL_SLOT *SLOT = &CH->SLOT[slot&1];
1429
1430 SLOT->ksl = ksl_shift[v >> 6];
1431 SLOT->TL = (v&0x3f)<<(ENV_BITS-1-7); /* 7 bits TL (bit 6 = always 0) */
1432
1433 SLOT->TLL = SLOT->TL + (CH->ksl_base>>SLOT->ksl);
1434#else
1435 OPL_CH *CH = &OPL->P_CH[slot/2];
1436 OPL_SLOT *SLOT = &CH->SLOT[slot&1];
1437 int ksl = v>>6; /* 0 / 1.5 / 3.0 / 6.0 dB/OCT */
1438
1439 SLOT->ksl = ksl ? 3-ksl : 31;
1440 SLOT->TL = (v&0x3f)<<(ENV_BITS-1-7); /* 7 bits TL (bit 6 = always 0) */
1441
1442 SLOT->TLL = SLOT->TL + (CH->ksl_base>>SLOT->ksl);
1443#endif
1444}
1445
1446/* set attack rate & decay rate */
1447static void set_ar_dr(FM_OPL *OPL,int slot,int v)
1448{
1449 OPL_CH *CH = &OPL->P_CH[slot/2];
1450 OPL_SLOT *SLOT = &CH->SLOT[slot&1];
1451
1452 SLOT->ar = (v>>4) ? 16 + ((v>>4) <<2) : 0;
1453
1454 if ((SLOT->ar + SLOT->ksr) < 16+62)
1455 {
1456 SLOT->eg_sh_ar = eg_rate_shift [SLOT->ar + SLOT->ksr ];
1457 SLOT->eg_sel_ar = eg_rate_select[SLOT->ar + SLOT->ksr ];
1458 }
1459 else
1460 {
1461 SLOT->eg_sh_ar = 0;
1462 SLOT->eg_sel_ar = 13*RATE_STEPS;
1463 }
1464
1465 SLOT->dr = (v&0x0f)? 16 + ((v&0x0f)<<2) : 0;
1466 SLOT->eg_sh_dr = eg_rate_shift [SLOT->dr + SLOT->ksr ];
1467 SLOT->eg_sel_dr = eg_rate_select[SLOT->dr + SLOT->ksr ];
1468}
1469
1470/* set sustain level & release rate */
1471static void set_sl_rr(FM_OPL *OPL,int slot,int v)
1472{
1473 OPL_CH *CH = &OPL->P_CH[slot/2];
1474 OPL_SLOT *SLOT = &CH->SLOT[slot&1];
1475
1476 SLOT->sl = sl_tab[ v>>4 ];
1477
1478 SLOT->rr = (v&0x0f)? 16 + ((v&0x0f)<<2) : 0;
1479 SLOT->eg_sh_rr = eg_rate_shift [SLOT->rr + SLOT->ksr ];
1480 SLOT->eg_sel_rr = eg_rate_select[SLOT->rr + SLOT->ksr ];
1481}
1482
1483
1484/* write a value v to register r on OPL chip */
1485static void OPLWriteReg(FM_OPL *OPL, int r, int v)
1486{
1487 OPL_CH *CH;
1488 int slot;
1489 int block_fnum;
1490
1491
1492 /* adjust bus to 8 bits */
1493 r &= 0xff;
1494 v &= 0xff;
1495
1496 if (LOG_CYM_FILE && (cymfile) && (r!=0) )
1497 {
1498 fprintf(cymfile, "%02x = %02x\n", r, v);
1499 }
1500
1501
1502 switch(r&0xe0)
1503 {
1504 case 0x00: /* 00-1f:control */
1505 switch(r&0x1f)
1506 {
1507 case 0x01: /* waveform select enable */
1508 if(OPL->type&OPL_TYPE_WAVESEL)
1509 {
1510 OPL->wavesel = v&0x20;
1511 /* do not change the waveform previously selected */
1512 }
1513 break;
1514 case 0x02: /* Timer 1 */
1515 OPL->T[0] = (256-v)*4;
1516 break;
1517 case 0x03: /* Timer 2 */
1518 OPL->T[1] = (256-v)*16;
1519 break;
1520 case 0x04: /* IRQ clear / mask and Timer enable */
1521 if(v&0x80)
1522 { /* IRQ flag clear */
1523 OPL_STATUS_RESET(OPL,0x7f-0x08); /* don't reset BFRDY flag or we will have to call deltat module to set the flag */
1524 }
1525 else
1526 { /* set IRQ mask ,timer enable*/
1527 UINT8 st1 = v&1;
1528 UINT8 st2 = (v>>1)&1;
1529
1530 /* IRQRST,T1MSK,t2MSK,EOSMSK,BRMSK,x,ST2,ST1 */
1531 OPL_STATUS_RESET(OPL, v & (0x78-0x08) );
1532 OPL_STATUSMASK_SET(OPL, (~v) & 0x78 );
1533
1534 /* timer 2 */
1535 if(OPL->st[1] != st2)
1536 {
1537 double period = st2 ? (double)OPL->T[1]*OPL->TimerBase : 0.0;
1538 //double period = st2 ? (OPL->TimerBase * OPL->T[1]) : 0;
1539 OPL->st[1] = st2;
1540 if (OPL->timer_handler) (OPL->timer_handler)(1,period);
1541 }
1542 /* timer 1 */
1543 if(OPL->st[0] != st1)
1544 {
1545 double period = st1 ? (double)OPL->T[0]*OPL->TimerBase : 0.0;
1546 //double period = st1 ? (OPL->TimerBase * OPL->T[0]) : 0;
1547 OPL->st[0] = st1;
1548 if (OPL->timer_handler) (OPL->timer_handler)(0,period);
1549 }
1550 }
1551 break;
1552#if BUILD_Y8950
1553 case 0x06: /* Key Board OUT */
1554 if(OPL->type&OPL_TYPE_KEYBOARD)
1555 {
1556 if(OPL->keyboardhandler_w)
1557 OPL->keyboardhandler_w(OPL->keyboard_param,v);
1558 else
1559 {
1560 //OPL->device->logerror("Y8950: write unmapped KEYBOARD port\n");
1561 }
1562 }
1563 break;
1564 case 0x07: /* DELTA-T control 1 : START,REC,MEMDATA,REPT,SPOFF,x,x,RST */
1565 if(OPL->type&OPL_TYPE_ADPCM)
1566 YM_DELTAT_ADPCM_Write(OPL->deltat,r-0x07,v);
1567 break;
1568#endif
1569 case 0x08: /* MODE,DELTA-T control 2 : CSM,NOTESEL,x,x,smpl,da/ad,64k,rom */
1570 OPL->mode = v;
1571#if BUILD_Y8950
1572 if(OPL->type&OPL_TYPE_ADPCM)
1573 YM_DELTAT_ADPCM_Write(OPL->deltat,r-0x07,v&0x0f); /* mask 4 LSBs in register 08 for DELTA-T unit */
1574#endif
1575 break;
1576
1577#if BUILD_Y8950
1578 case 0x09: /* START ADD */
1579 case 0x0a:
1580 case 0x0b: /* STOP ADD */
1581 case 0x0c:
1582 case 0x0d: /* PRESCALE */
1583 case 0x0e:
1584 case 0x0f: /* ADPCM data write */
1585 case 0x10: /* DELTA-N */
1586 case 0x11: /* DELTA-N */
1587 case 0x12: /* ADPCM volume */
1588 if(OPL->type&OPL_TYPE_ADPCM)
1589 YM_DELTAT_ADPCM_Write(OPL->deltat,r-0x07,v);
1590 break;
1591
1592 case 0x15: /* DAC data high 8 bits (F7,F6...F2) */
1593 case 0x16: /* DAC data low 2 bits (F1, F0 in bits 7,6) */
1594 case 0x17: /* DAC data shift (S2,S1,S0 in bits 2,1,0) */
1595 //OPL->device->logerror("FMOPL.C: DAC data register written, but not implemented reg=%02x val=%02x\n",r,v);
1596 break;
1597
1598 case 0x18: /* I/O CTRL (Direction) */
1599 if(OPL->type&OPL_TYPE_IO)
1600 OPL->portDirection = v&0x0f;
1601 break;
1602 case 0x19: /* I/O DATA */
1603 if(OPL->type&OPL_TYPE_IO)
1604 {
1605 OPL->portLatch = v;
1606 if(OPL->porthandler_w)
1607 OPL->porthandler_w(OPL->port_param,v&OPL->portDirection);
1608 }
1609 break;
1610#endif
1611 default:
1612 //OPL->device->logerror("FMOPL.C: write to unknown register: %02x\n",r);
1613 break;
1614 }
1615 break;
1616 case 0x20: /* am ON, vib ON, ksr, eg_type, mul */
1617 slot = slot_array[r&0x1f];
1618 if(slot < 0) return;
1619 set_mul(OPL,slot,v);
1620 break;
1621 case 0x40:
1622 slot = slot_array[r&0x1f];
1623 if(slot < 0) return;
1624 set_ksl_tl(OPL,slot,v);
1625 break;
1626 case 0x60:
1627 slot = slot_array[r&0x1f];
1628 if(slot < 0) return;
1629 set_ar_dr(OPL,slot,v);
1630 break;
1631 case 0x80:
1632 slot = slot_array[r&0x1f];
1633 if(slot < 0) return;
1634 set_sl_rr(OPL,slot,v);
1635 break;
1636 case 0xa0:
1637 if (r == 0xbd) /* am depth, vibrato depth, r,bd,sd,tom,tc,hh */
1638 {
1639 OPL->lfo_am_depth = v & 0x80;
1640 OPL->lfo_pm_depth_range = (v&0x40) ? 8 : 0;
1641
1642 OPL->rhythm = v&0x3f;
1643
1644 if(OPL->rhythm&0x20)
1645 {
1646 /* BD key on/off */
1647 if(v&0x10)
1648 {
1649 FM_KEYON (&OPL->P_CH[6].SLOT[SLOT1], 2);
1650 FM_KEYON (&OPL->P_CH[6].SLOT[SLOT2], 2);
1651 }
1652 else
1653 {
1654 FM_KEYOFF(&OPL->P_CH[6].SLOT[SLOT1],~2);
1655 FM_KEYOFF(&OPL->P_CH[6].SLOT[SLOT2],~2);
1656 }
1657 /* HH key on/off */
1658 if(v&0x01) FM_KEYON (&OPL->P_CH[7].SLOT[SLOT1], 2);
1659 else FM_KEYOFF(&OPL->P_CH[7].SLOT[SLOT1],~2);
1660 /* SD key on/off */
1661 if(v&0x08) FM_KEYON (&OPL->P_CH[7].SLOT[SLOT2], 2);
1662 else FM_KEYOFF(&OPL->P_CH[7].SLOT[SLOT2],~2);
1663 /* TOM key on/off */
1664 if(v&0x04) FM_KEYON (&OPL->P_CH[8].SLOT[SLOT1], 2);
1665 else FM_KEYOFF(&OPL->P_CH[8].SLOT[SLOT1],~2);
1666 /* TOP-CY key on/off */
1667 if(v&0x02) FM_KEYON (&OPL->P_CH[8].SLOT[SLOT2], 2);
1668 else FM_KEYOFF(&OPL->P_CH[8].SLOT[SLOT2],~2);
1669 }
1670 else
1671 {
1672 /* BD key off */
1673 FM_KEYOFF(&OPL->P_CH[6].SLOT[SLOT1],~2);
1674 FM_KEYOFF(&OPL->P_CH[6].SLOT[SLOT2],~2);
1675 /* HH key off */
1676 FM_KEYOFF(&OPL->P_CH[7].SLOT[SLOT1],~2);
1677 /* SD key off */
1678 FM_KEYOFF(&OPL->P_CH[7].SLOT[SLOT2],~2);
1679 /* TOM key off */
1680 FM_KEYOFF(&OPL->P_CH[8].SLOT[SLOT1],~2);
1681 /* TOP-CY off */
1682 FM_KEYOFF(&OPL->P_CH[8].SLOT[SLOT2],~2);
1683 }
1684 return;
1685 }
1686 /* keyon,block,fnum */
1687 if( (r&0x0f) > 8) return;
1688 CH = &OPL->P_CH[r&0x0f];
1689 if(!(r&0x10))
1690 { /* a0-a8 */
1691 block_fnum = (CH->block_fnum&0x1f00) | v;
1692 }
1693 else
1694 { /* b0-b8 */
1695 block_fnum = ((v&0x1f)<<8) | (CH->block_fnum&0xff);
1696
1697 if(v&0x20)
1698 {
1699 FM_KEYON (&CH->SLOT[SLOT1], 1);
1700 FM_KEYON (&CH->SLOT[SLOT2], 1);
1701 }
1702 else
1703 {
1704 FM_KEYOFF(&CH->SLOT[SLOT1],~1);
1705 FM_KEYOFF(&CH->SLOT[SLOT2],~1);
1706 }
1707 }
1708 /* update */
1709 if(CH->block_fnum != (UINT32) block_fnum)
1710 {
1711 UINT8 block = block_fnum >> 10;
1712
1713 CH->block_fnum = block_fnum;
1714
1715 CH->ksl_base = (UINT32)(ksl_tab[block_fnum>>6]);
1716 CH->fc = OPL->fn_tab[block_fnum&0x03ff] >> (7-block);
1717
1718 /* BLK 2,1,0 bits -> bits 3,2,1 of kcode */
1719 CH->kcode = (CH->block_fnum&0x1c00)>>9;
1720
1721 /* the info below is actually opposite to what is stated in the Manuals (verifed on real YM3812) */
1722 /* if notesel == 0 -> lsb of kcode is bit 10 (MSB) of fnum */
1723 /* if notesel == 1 -> lsb of kcode is bit 9 (MSB-1) of fnum */
1724 if (OPL->mode&0x40)
1725 CH->kcode |= (CH->block_fnum&0x100)>>8; /* notesel == 1 */
1726 else
1727 CH->kcode |= (CH->block_fnum&0x200)>>9; /* notesel == 0 */
1728
1729 /* refresh Total Level in both SLOTs of this channel */
1730 CH->SLOT[SLOT1].TLL = CH->SLOT[SLOT1].TL + (CH->ksl_base>>CH->SLOT[SLOT1].ksl);
1731 CH->SLOT[SLOT2].TLL = CH->SLOT[SLOT2].TL + (CH->ksl_base>>CH->SLOT[SLOT2].ksl);
1732
1733 /* refresh frequency counter in both SLOTs of this channel */
1734 CALC_FCSLOT(CH,&CH->SLOT[SLOT1]);
1735 CALC_FCSLOT(CH,&CH->SLOT[SLOT2]);
1736 }
1737 break;
1738 case 0xc0:
1739 /* FB,C */
1740 if( (r&0x0f) > 8) return;
1741 CH = &OPL->P_CH[r&0x0f];
1742 CH->SLOT[SLOT1].FB = (v>>1)&7 ? ((v>>1)&7) + 7 : 0;
1743 CH->SLOT[SLOT1].CON = v&1;
1744 CH->SLOT[SLOT1].connect1 = CH->SLOT[SLOT1].CON ? &OPL->output[0] : &OPL->phase_modulation;
1745 break;
1746 case 0xe0: /* waveform select */
1747 /* simply ignore write to the waveform select register if selecting not enabled in test register */
1748 if(OPL->wavesel)
1749 {
1750 slot = slot_array[r&0x1f];
1751 if(slot < 0) return;
1752 CH = &OPL->P_CH[slot/2];
1753
1754 CH->SLOT[slot&1].wavetable = (v&0x03)*SIN_LEN;
1755 }
1756 break;
1757 }
1758}
1759
1760static TIMER_CALLBACK( cymfile_callback )
1761{
1762 if (cymfile)
1763 {
1764 //fputc( (unsigned char)0, cymfile );
1765 }
1766}
1767
1768/* lock/unlock for common table */
1769static int OPL_LockTable(device_t *device)
1770{
1771 num_lock++;
1772 if(num_lock>1) return 0;
1773
1774 /* first time */
1775
1776 /* allocate total level table (128kb space) */
1777 if( !init_tables() )
1778 {
1779 num_lock--;
1780 return -1;
1781 }
1782
1783 if (LOG_CYM_FILE)
1784 {
1785 cymfile = fopen("/3812_.cym","w");
1786 if (cymfile)
1787 {
1788 //device->machine().scheduler().timer_pulse ( double::from_hz(110), FUNC(cymfile_callback)); /*110 Hz pulse timer*/
1789 }
1790 else
1791 {
1792 //device->logerror("Could not create file 3812_.cym\n");
1793 }
1794 }
1795
1796 return 0;
1797}
1798
1799static void OPL_UnLockTable(void)
1800{
1801 if(num_lock) num_lock--;
1802 if(num_lock) return;
1803
1804 /* last time */
1805
1806 OPLCloseTable();
1807
1808 if (cymfile)
1809 fclose (cymfile);
1810 cymfile = NULL;
1811}
1812
1813static void OPLResetChip(FM_OPL *OPL)
1814{
1815 int c,s;
1816 int i;
1817
1818 OPL->eg_timer = 0;
1819 OPL->eg_cnt = 0;
1820
1821 OPL->noise_rng = 1; /* noise shift register */
1822 OPL->mode = 0; /* normal mode */
1823 OPL_STATUS_RESET(OPL,0x7f);
1824
1825 /* reset with register write */
1826 OPLWriteReg(OPL,0x01,0); /* wavesel disable */
1827 OPLWriteReg(OPL,0x02,0); /* Timer1 */
1828 OPLWriteReg(OPL,0x03,0); /* Timer2 */
1829 OPLWriteReg(OPL,0x04,0); /* IRQ mask clear */
1830 for(i = 0xff ; i >= 0x20 ; i-- ) OPLWriteReg(OPL,i,0);
1831
1832 /* reset operator parameters */
1833 for( c = 0 ; c < 9 ; c++ )
1834 {
1835 OPL_CH *CH = &OPL->P_CH[c];
1836 for(s = 0 ; s < 2 ; s++ )
1837 {
1838 /* wave table */
1839 CH->SLOT[s].wavetable = 0;
1840 CH->SLOT[s].state = EG_OFF;
1841 CH->SLOT[s].volume = MAX_ATT_INDEX;
1842 }
1843 }
1844#if BUILD_Y8950
1845 if(OPL->type&OPL_TYPE_ADPCM)
1846 {
1847 YM_DELTAT *DELTAT = OPL->deltat;
1848
1849 DELTAT->freqbase = OPL->freqbase;
1850 DELTAT->output_pointer = &OPL->output_deltat[0];
1851 DELTAT->portshift = 5;
1852 DELTAT->output_range = 1<<23;
1853 YM_DELTAT_ADPCM_Reset(DELTAT,0,YM_DELTAT_EMULATION_MODE_NORMAL,OPL->device);
1854 }
1855#endif
1856}
1857
1858
1859static void OPL_postload(FM_OPL *OPL)
1860{
1861 int slot, ch;
1862
1863 for( ch=0 ; ch < 9 ; ch++ )
1864 {
1865 OPL_CH *CH = &OPL->P_CH[ch];
1866
1867 /* Look up key scale level */
1868 UINT32 block_fnum = CH->block_fnum;
1869 CH->ksl_base = (UINT32)(ksl_tab[block_fnum >> 6]);
1870 CH->fc = OPL->fn_tab[block_fnum & 0x03ff] >> (7 - (block_fnum >> 10));
1871
1872 for( slot=0 ; slot < 2 ; slot++ )
1873 {
1874 OPL_SLOT *SLOT = &CH->SLOT[slot];
1875
1876 /* Calculate key scale rate */
1877 SLOT->ksr = CH->kcode >> SLOT->KSR;
1878
1879 /* Calculate attack, decay and release rates */
1880 if ((SLOT->ar + SLOT->ksr) < 16+62)
1881 {
1882 SLOT->eg_sh_ar = eg_rate_shift [SLOT->ar + SLOT->ksr ];
1883 SLOT->eg_sel_ar = eg_rate_select[SLOT->ar + SLOT->ksr ];
1884 }
1885 else
1886 {
1887 SLOT->eg_sh_ar = 0;
1888 SLOT->eg_sel_ar = 13*RATE_STEPS;
1889 }
1890 SLOT->eg_sh_dr = eg_rate_shift [SLOT->dr + SLOT->ksr ];
1891 SLOT->eg_sel_dr = eg_rate_select[SLOT->dr + SLOT->ksr ];
1892 SLOT->eg_sh_rr = eg_rate_shift [SLOT->rr + SLOT->ksr ];
1893 SLOT->eg_sel_rr = eg_rate_select[SLOT->rr + SLOT->ksr ];
1894
1895 /* Calculate phase increment */
1896 SLOT->Incr = CH->fc * SLOT->mul;
1897
1898 /* Total level */
1899 SLOT->TLL = SLOT->TL + (CH->ksl_base >> SLOT->ksl);
1900
1901 /* Connect output */
1902 SLOT->connect1 = SLOT->CON ? &OPL->output[0] : &OPL->phase_modulation;
1903 }
1904 }
1905#if BUILD_Y8950
1906 if ( (OPL->type & OPL_TYPE_ADPCM) && (OPL->deltat) )
1907 {
1908 // We really should call the postlod function for the YM_DELTAT, but it's hard without registers
1909 // (see the way the YM2610 does it)
1910 //YM_DELTAT_postload(OPL->deltat, REGS);
1911 }
1912#endif
1913}
1914
1915
1916static void OPLsave_state_channel(device_t *device, OPL_CH *CH)
1917{
1918}
1919
1920
1921/* Register savestate for a virtual YM3812/YM3526Y8950 */
1922
1923static void OPL_save_state(FM_OPL *OPL, device_t *device)
1924{
1925}
1926
1927
1928/* Create one of virtual YM3812/YM3526/Y8950 */
1929/* 'clock' is chip clock in Hz */
1930/* 'rate' is sampling rate */
1931static FM_OPL *OPLCreate(device_t *device, UINT32 clock, UINT32 rate, int type)
1932{
1933 char *ptr;
1934 FM_OPL *OPL;
1935 int state_size;
1936
1937 if (OPL_LockTable(device) == -1) return NULL;
1938
1939 /* calculate OPL state size */
1940 state_size = sizeof(FM_OPL);
1941
1942#if BUILD_Y8950
1943 if (type&OPL_TYPE_ADPCM) state_size+= sizeof(YM_DELTAT);
1944#endif
1945
1946 /* allocate memory block */
1947 ptr = malloc(state_size);
1948
1949 if(!ptr)
1950 return NULL;
1951
1952 memset(ptr, 0, state_size);
1953
1954 OPL = (FM_OPL *)ptr;
1955
1956 /* GCC behaves weirdly... check that it's not acting up */
1957
1958 if((UINT32)OPL & 3 == 0)
1959 printf("OPL is word-aligned");
1960 if((UINT32)(OPL->output) & 3 == 0)
1961 printf("output is word-aligned");
1962
1963 ptr += sizeof(FM_OPL);
1964
1965#if BUILD_Y8950
1966 if (type&OPL_TYPE_ADPCM)
1967 {
1968 OPL->deltat = (YM_DELTAT *)ptr;
1969 }
1970 ptr += sizeof(YM_DELTAT);
1971#endif
1972
1973 OPL->device = device;
1974 OPL->type = type;
1975 OPL->clock = clock;
1976 OPL->rate = rate;
1977
1978 /* init global tables */
1979 OPL_initalize(OPL);
1980
1981 return OPL;
1982}
1983
1984/* Destroy one of virtual YM3812 */
1985static void OPLDestroy(FM_OPL *OPL)
1986{
1987 OPL_UnLockTable();
1988 free(OPL);
1989}
1990
1991/* Optional handlers */
1992
1993static void OPLSetTimerHandler(FM_OPL *OPL,OPL_TIMERHANDLER timer_handler,void *param)
1994{
1995 OPL->timer_handler = timer_handler;
1996 OPL->TimerParam = param;
1997}
1998static void OPLSetIRQHandler(FM_OPL *OPL,OPL_IRQHANDLER IRQHandler,void *param)
1999{
2000 OPL->IRQHandler = IRQHandler;
2001 OPL->IRQParam = param;
2002}
2003static void OPLSetUpdateHandler(FM_OPL *OPL,OPL_UPDATEHANDLER UpdateHandler,void *param)
2004{
2005 OPL->UpdateHandler = UpdateHandler;
2006 OPL->UpdateParam = param;
2007}
2008
2009static int OPLWrite(FM_OPL *OPL,int a,int v)
2010{
2011 if( !(a&1) )
2012 { /* address port */
2013 OPL->address = v & 0xff;
2014 }
2015 else
2016 { /* data port */
2017 if(OPL->UpdateHandler) OPL->UpdateHandler(OPL->UpdateParam,0);
2018 OPLWriteReg(OPL,OPL->address,v);
2019 }
2020 return OPL->status>>7;
2021}
2022
2023static unsigned char OPLRead(FM_OPL *OPL,int a)
2024{
2025 if( !(a&1) )
2026 {
2027 /* status port */
2028
2029#if BUILD_Y8950
2030
2031 if(OPL->type&OPL_TYPE_ADPCM) /* Y8950 */
2032 {
2033 return (OPL->status & (OPL->statusmask|0x80)) | (OPL->deltat->PCM_BSY&1);
2034 }
2035
2036#endif
2037
2038 /* OPL and OPL2 */
2039 return OPL->status & (OPL->statusmask|0x80);
2040 }
2041
2042#if BUILD_Y8950
2043 /* data port */
2044 switch(OPL->address)
2045 {
2046 case 0x05: /* KeyBoard IN */
2047 if(OPL->type&OPL_TYPE_KEYBOARD)
2048 {
2049 if(OPL->keyboardhandler_r)
2050 return OPL->keyboardhandler_r(OPL->keyboard_param);
2051 else
2052 OPL->device->logerror("Y8950: read unmapped KEYBOARD port\n");
2053 }
2054 return 0;
2055
2056 case 0x0f: /* ADPCM-DATA */
2057 if(OPL->type&OPL_TYPE_ADPCM)
2058 {
2059 UINT8 val;
2060
2061 val = YM_DELTAT_ADPCM_Read(OPL->deltat);
2062 /*logerror("Y8950: read ADPCM value read=%02x\n",val);*/
2063 return val;
2064 }
2065 return 0;
2066
2067 case 0x19: /* I/O DATA */
2068 if(OPL->type&OPL_TYPE_IO)
2069 {
2070 if(OPL->porthandler_r)
2071 return OPL->porthandler_r(OPL->port_param);
2072 else
2073 OPL->device->logerror("Y8950:read unmapped I/O port\n");
2074 }
2075 return 0;
2076 case 0x1a: /* PCM-DATA */
2077 if(OPL->type&OPL_TYPE_ADPCM)
2078 {
2079 OPL->device->logerror("Y8950 A/D convertion is accessed but not implemented !\n");
2080 return 0x80; /* 2's complement PCM data - result from A/D convertion */
2081 }
2082 return 0;
2083 }
2084#endif
2085
2086 return 0xff;
2087}
2088
2089/* CSM Key Controll */
2090static void CSMKeyControll(OPL_CH *CH)
2091{
2092 FM_KEYON (&CH->SLOT[SLOT1], 4);
2093 FM_KEYON (&CH->SLOT[SLOT2], 4);
2094
2095 /* The key off should happen exactly one sample later - not implemented correctly yet */
2096
2097 FM_KEYOFF(&CH->SLOT[SLOT1], ~4);
2098 FM_KEYOFF(&CH->SLOT[SLOT2], ~4);
2099}
2100
2101
2102static int OPLTimerOver(FM_OPL *OPL,int c)
2103{
2104 if( c )
2105 { /* Timer B */
2106 OPL_STATUS_SET(OPL,0x20);
2107 }
2108 else
2109 { /* Timer A */
2110 OPL_STATUS_SET(OPL,0x40);
2111 /* CSM mode key,TL controll */
2112 if( OPL->mode & 0x80 )
2113 { /* CSM mode total level latch and auto key on */
2114 int ch;
2115 if(OPL->UpdateHandler) OPL->UpdateHandler(OPL->UpdateParam,0);
2116 for(ch=0; ch<9; ch++)
2117 CSMKeyControll( &OPL->P_CH[ch] );
2118 }
2119 }
2120 /* reload timer */
2121 if (OPL->timer_handler) (OPL->timer_handler)(c,OPL->TimerBase * OPL->T[c]);
2122 return OPL->status>>7;
2123}
2124
2125
2126#define MAX_OPL_CHIPS 2
2127
2128
2129#if (BUILD_YM3812)
2130
2131void * YM3812Init(device_t *device, UINT32 clock, UINT32 rate)
2132{
2133 /* emulator create */
2134 FM_OPL *YM3812 = OPLCreate(device,clock,rate,OPL_TYPE_YM3812);
2135 if (YM3812)
2136 {
2137 OPL_save_state(YM3812, device);
2138 YM3812ResetChip(YM3812);
2139 }
2140 return YM3812;
2141}
2142
2143void YM3812Shutdown(void *chip)
2144{
2145 FM_OPL *YM3812 = (FM_OPL *)chip;
2146
2147 /* emulator shutdown */
2148 OPLDestroy(YM3812);
2149}
2150void YM3812ResetChip(void *chip)
2151{
2152 FM_OPL *YM3812 = (FM_OPL *)chip;
2153 OPLResetChip(YM3812);
2154}
2155
2156int YM3812Write(void *chip, int a, int v)
2157{
2158 FM_OPL *YM3812 = (FM_OPL *)chip;
2159
2160 OPLWriteReg(YM3812, a, v);
2161 return (YM3812->status>>7);
2162
2163 // technically correct, but breaks Wolf4SDL - FW19
2164 //return OPLWrite(YM3812, a, v);
2165}
2166
2167unsigned char YM3812Read(void *chip, int a)
2168{
2169 FM_OPL *YM3812 = (FM_OPL *)chip;
2170 /* YM3812 always returns bit2 and bit1 in HIGH state */
2171 return OPLRead(YM3812, a) | 0x06 ;
2172}
2173int YM3812TimerOver(void *chip, int c)
2174{
2175 FM_OPL *YM3812 = (FM_OPL *)chip;
2176 return OPLTimerOver(YM3812, c);
2177}
2178
2179void YM3812SetTimerHandler(void *chip, OPL_TIMERHANDLER timer_handler, void *param)
2180{
2181 FM_OPL *YM3812 = (FM_OPL *)chip;
2182 OPLSetTimerHandler(YM3812, timer_handler, param);
2183}
2184void YM3812SetIRQHandler(void *chip,OPL_IRQHANDLER IRQHandler,void *param)
2185{
2186 FM_OPL *YM3812 = (FM_OPL *)chip;
2187 OPLSetIRQHandler(YM3812, IRQHandler, param);
2188}
2189void YM3812SetUpdateHandler(void *chip,OPL_UPDATEHANDLER UpdateHandler,void *param)
2190{
2191 FM_OPL *YM3812 = (FM_OPL *)chip;
2192 OPLSetUpdateHandler(YM3812, UpdateHandler, param);
2193}
2194
2195
2196/*
2197** Generate samples for one of the YM3812's
2198**
2199** 'which' is the virtual YM3812 number
2200** '*buffer' is the output buffer pointer
2201** 'length' is the number of samples that should be generated
2202*/
2203void YM3812UpdateOne(void *chip, OPLSAMPLE *buffer, int length)
2204{
2205 FM_OPL *OPL = (FM_OPL *)chip;
2206 UINT8 rhythm = OPL->rhythm&0x20;
2207 OPLSAMPLE *buf = buffer;
2208 int i;
2209
2210 for( i=0; i < length ; i++ )
2211 {
2212 int lt;
2213
2214 OPL->output[0] = 0;
2215
2216 advance_lfo(OPL);
2217
2218 /* FM part */
2219 OPL_CALC_CH(OPL, &OPL->P_CH[0]);
2220 OPL_CALC_CH(OPL, &OPL->P_CH[1]);
2221 OPL_CALC_CH(OPL, &OPL->P_CH[2]);
2222 OPL_CALC_CH(OPL, &OPL->P_CH[3]);
2223 OPL_CALC_CH(OPL, &OPL->P_CH[4]);
2224 OPL_CALC_CH(OPL, &OPL->P_CH[5]);
2225
2226 if(!rhythm)
2227 {
2228 OPL_CALC_CH(OPL, &OPL->P_CH[6]);
2229 OPL_CALC_CH(OPL, &OPL->P_CH[7]);
2230 OPL_CALC_CH(OPL, &OPL->P_CH[8]);
2231 }
2232 else /* Rhythm part */
2233 {
2234 OPL_CALC_RH(OPL, &OPL->P_CH[0], (OPL->noise_rng>>0)&1 );
2235 }
2236
2237 lt = OPL->output[0];
2238
2239 //lt >>= FINAL_SH;
2240 lt <<= 2;
2241
2242 /* limit check */
2243 lt = limit( lt , MAXOUT, MINOUT );
2244
2245#ifdef SAVE_SAMPLE
2246 if (which==0)
2247 {
2248 SAVE_ALL_CHANNELS
2249 }
2250#endif
2251
2252 /* store to sound buffer */
2253 //buf[i] = lt;
2254
2255 buf[i*2] = lt; // stereo version
2256 buf[i*2+1] = lt;
2257
2258 advance(OPL);
2259 }
2260}
2261#endif /* BUILD_YM3812 */
2262
2263// Rockbox: we don't care about the rest.
2264
2265#if (BUILD_YM3526)
2266
2267void *ym3526_init(device_t *device, UINT32 clock, UINT32 rate)
2268{
2269 /* emulator create */
2270 FM_OPL *YM3526 = OPLCreate(device,clock,rate,OPL_TYPE_YM3526);
2271 if (YM3526)
2272 {
2273 OPL_save_state(YM3526, device);
2274 ym3526_reset_chip(YM3526);
2275 }
2276 return YM3526;
2277}
2278
2279void ym3526_shutdown(void *chip)
2280{
2281 FM_OPL *YM3526 = (FM_OPL *)chip;
2282 /* emulator shutdown */
2283 OPLDestroy(YM3526);
2284}
2285void ym3526_reset_chip(void *chip)
2286{
2287 FM_OPL *YM3526 = (FM_OPL *)chip;
2288 OPLResetChip(YM3526);
2289}
2290
2291int ym3526_write(void *chip, int a, int v)
2292{
2293 FM_OPL *YM3526 = (FM_OPL *)chip;
2294 return OPLWrite(YM3526, a, v);
2295}
2296
2297unsigned char ym3526_read(void *chip, int a)
2298{
2299 FM_OPL *YM3526 = (FM_OPL *)chip;
2300 /* YM3526 always returns bit2 and bit1 in HIGH state */
2301 return OPLRead(YM3526, a) | 0x06 ;
2302}
2303int ym3526_timer_over(void *chip, int c)
2304{
2305 FM_OPL *YM3526 = (FM_OPL *)chip;
2306 return OPLTimerOver(YM3526, c);
2307}
2308
2309void ym3526_set_timer_handler(void *chip, OPL_TIMERHANDLER timer_handler, void *param)
2310{
2311 FM_OPL *YM3526 = (FM_OPL *)chip;
2312 OPLSetTimerHandler(YM3526, timer_handler, param);
2313}
2314void ym3526_set_irq_handler(void *chip,OPL_IRQHANDLER IRQHandler,void *param)
2315{
2316 FM_OPL *YM3526 = (FM_OPL *)chip;
2317 OPLSetIRQHandler(YM3526, IRQHandler, param);
2318}
2319void ym3526_set_update_handler(void *chip,OPL_UPDATEHANDLER UpdateHandler,void *param)
2320{
2321 FM_OPL *YM3526 = (FM_OPL *)chip;
2322 OPLSetUpdateHandler(YM3526, UpdateHandler, param);
2323}
2324
2325
2326/*
2327** Generate samples for one of the YM3526's
2328**
2329** 'which' is the virtual YM3526 number
2330** '*buffer' is the output buffer pointer
2331** 'length' is the number of samples that should be generated
2332*/
2333void ym3526_update_one(void *chip, OPLSAMPLE *buffer, int length)
2334{
2335 FM_OPL *OPL = (FM_OPL *)chip;
2336 UINT8 rhythm = OPL->rhythm&0x20;
2337 OPLSAMPLE *buf = buffer;
2338 int i;
2339
2340 for( i=0; i < length ; i++ )
2341 {
2342 int lt;
2343
2344 OPL->output[0] = 0;
2345
2346 advance_lfo(OPL);
2347
2348 /* FM part */
2349 OPL_CALC_CH(OPL, &OPL->P_CH[0]);
2350 OPL_CALC_CH(OPL, &OPL->P_CH[1]);
2351 OPL_CALC_CH(OPL, &OPL->P_CH[2]);
2352 OPL_CALC_CH(OPL, &OPL->P_CH[3]);
2353 OPL_CALC_CH(OPL, &OPL->P_CH[4]);
2354 OPL_CALC_CH(OPL, &OPL->P_CH[5]);
2355
2356 if(!rhythm)
2357 {
2358 OPL_CALC_CH(OPL, &OPL->P_CH[6]);
2359 OPL_CALC_CH(OPL, &OPL->P_CH[7]);
2360 OPL_CALC_CH(OPL, &OPL->P_CH[8]);
2361 }
2362 else /* Rhythm part */
2363 {
2364 OPL_CALC_RH(OPL, &OPL->P_CH[0], (OPL->noise_rng>>0)&1 );
2365 }
2366
2367 lt = OPL->output[0];
2368
2369 lt >>= FINAL_SH;
2370
2371 /* limit check */
2372 lt = limit( lt , MAXOUT, MINOUT );
2373
2374#ifdef SAVE_SAMPLE
2375 if (which==0)
2376 {
2377 SAVE_ALL_CHANNELS
2378 }
2379#endif
2380
2381 /* store to sound buffer */
2382 buf[i] = lt;
2383
2384 advance(OPL);
2385 }
2386
2387}
2388#endif /* BUILD_YM3526 */
2389
2390
2391
2392
2393#if BUILD_Y8950
2394
2395static void Y8950_deltat_status_set(void *chip, UINT8 changebits)
2396{
2397 FM_OPL *Y8950 = (FM_OPL *)chip;
2398 OPL_STATUS_SET(Y8950, changebits);
2399}
2400static void Y8950_deltat_status_reset(void *chip, UINT8 changebits)
2401{
2402 FM_OPL *Y8950 = (FM_OPL *)chip;
2403 OPL_STATUS_RESET(Y8950, changebits);
2404}
2405
2406void *y8950_init(device_t *device, UINT32 clock, UINT32 rate)
2407{
2408 /* emulator create */
2409 FM_OPL *Y8950 = OPLCreate(device,clock,rate,OPL_TYPE_Y8950);
2410 if (Y8950)
2411 {
2412 Y8950->deltat->status_set_handler = Y8950_deltat_status_set;
2413 Y8950->deltat->status_reset_handler = Y8950_deltat_status_reset;
2414 Y8950->deltat->status_change_which_chip = Y8950;
2415 Y8950->deltat->status_change_EOS_bit = 0x10; /* status flag: set bit4 on End Of Sample */
2416 Y8950->deltat->status_change_BRDY_bit = 0x08; /* status flag: set bit3 on BRDY (End Of: ADPCM analysis/synthesis, memory reading/writing) */
2417
2418 /*Y8950->deltat->write_time = 10.0 / clock;*/ /* a single byte write takes 10 cycles of main clock */
2419 /*Y8950->deltat->read_time = 8.0 / clock;*/ /* a single byte read takes 8 cycles of main clock */
2420 /* reset */
2421 OPL_save_state(Y8950, device);
2422 y8950_reset_chip(Y8950);
2423 }
2424
2425 return Y8950;
2426}
2427
2428void y8950_shutdown(void *chip)
2429{
2430 FM_OPL *Y8950 = (FM_OPL *)chip;
2431 /* emulator shutdown */
2432 OPLDestroy(Y8950);
2433}
2434void y8950_reset_chip(void *chip)
2435{
2436 FM_OPL *Y8950 = (FM_OPL *)chip;
2437 OPLResetChip(Y8950);
2438}
2439
2440int y8950_write(void *chip, int a, int v)
2441{
2442 FM_OPL *Y8950 = (FM_OPL *)chip;
2443 return OPLWrite(Y8950, a, v);
2444}
2445
2446unsigned char y8950_read(void *chip, int a)
2447{
2448 FM_OPL *Y8950 = (FM_OPL *)chip;
2449 return OPLRead(Y8950, a);
2450}
2451int y8950_timer_over(void *chip, int c)
2452{
2453 FM_OPL *Y8950 = (FM_OPL *)chip;
2454 return OPLTimerOver(Y8950, c);
2455}
2456
2457void y8950_set_timer_handler(void *chip, OPL_TIMERHANDLER timer_handler, void *param)
2458{
2459 FM_OPL *Y8950 = (FM_OPL *)chip;
2460 OPLSetTimerHandler(Y8950, timer_handler, param);
2461}
2462void y8950_set_irq_handler(void *chip,OPL_IRQHANDLER IRQHandler,void *param)
2463{
2464 FM_OPL *Y8950 = (FM_OPL *)chip;
2465 OPLSetIRQHandler(Y8950, IRQHandler, param);
2466}
2467void y8950_set_update_handler(void *chip,OPL_UPDATEHANDLER UpdateHandler,void *param)
2468{
2469 FM_OPL *Y8950 = (FM_OPL *)chip;
2470 OPLSetUpdateHandler(Y8950, UpdateHandler, param);
2471}
2472
2473void y8950_set_delta_t_memory(void *chip, void * deltat_mem_ptr, int deltat_mem_size )
2474{
2475 FM_OPL *OPL = (FM_OPL *)chip;
2476 OPL->deltat->memory = (UINT8 *)(deltat_mem_ptr);
2477 OPL->deltat->memory_size = deltat_mem_size;
2478}
2479
2480/*
2481** Generate samples for one of the Y8950's
2482**
2483** 'which' is the virtual Y8950 number
2484** '*buffer' is the output buffer pointer
2485** 'length' is the number of samples that should be generated
2486*/
2487void y8950_update_one(void *chip, OPLSAMPLE *buffer, int length)
2488{
2489 int i;
2490 FM_OPL *OPL = (FM_OPL *)chip;
2491 UINT8 rhythm = OPL->rhythm&0x20;
2492 YM_DELTAT *DELTAT = OPL->deltat;
2493 OPLSAMPLE *buf = buffer;
2494
2495 for( i=0; i < length ; i++ )
2496 {
2497 int lt;
2498
2499 OPL->output[0] = 0;
2500 OPL->output_deltat[0] = 0;
2501
2502 advance_lfo(OPL);
2503
2504 /* deltaT ADPCM */
2505 if( DELTAT->portstate&0x80 )
2506 YM_DELTAT_ADPCM_CALC(DELTAT);
2507
2508 /* FM part */
2509 OPL_CALC_CH(OPL, &OPL->P_CH[0]);
2510 OPL_CALC_CH(OPL, &OPL->P_CH[1]);
2511 OPL_CALC_CH(OPL, &OPL->P_CH[2]);
2512 OPL_CALC_CH(OPL, &OPL->P_CH[3]);
2513 OPL_CALC_CH(OPL, &OPL->P_CH[4]);
2514 OPL_CALC_CH(OPL, &OPL->P_CH[5]);
2515
2516 if(!rhythm)
2517 {
2518 OPL_CALC_CH(OPL, &OPL->P_CH[6]);
2519 OPL_CALC_CH(OPL, &OPL->P_CH[7]);
2520 OPL_CALC_CH(OPL, &OPL->P_CH[8]);
2521 }
2522 else /* Rhythm part */
2523 {
2524 OPL_CALC_RH(OPL, &OPL->P_CH[0], (OPL->noise_rng>>0)&1 );
2525 }
2526
2527 lt = OPL->output[0] + (OPL->output_deltat[0]>>11);
2528
2529 lt >>= FINAL_SH;
2530
2531 /* limit check */
2532 lt = limit( lt , MAXOUT, MINOUT );
2533
2534#ifdef SAVE_SAMPLE
2535 if (which==0)
2536 {
2537 SAVE_ALL_CHANNELS
2538 }
2539#endif
2540
2541 /* store to sound buffer */
2542 buf[i] = lt;
2543
2544 advance(OPL);
2545 }
2546
2547}
2548
2549void y8950_set_port_handler(void *chip,OPL_PORTHANDLER_W PortHandler_w,OPL_PORTHANDLER_R PortHandler_r,void * param)
2550{
2551 FM_OPL *OPL = (FM_OPL *)chip;
2552 OPL->porthandler_w = PortHandler_w;
2553 OPL->porthandler_r = PortHandler_r;
2554 OPL->port_param = param;
2555}
2556
2557void y8950_set_keyboard_handler(void *chip,OPL_PORTHANDLER_W KeyboardHandler_w,OPL_PORTHANDLER_R KeyboardHandler_r,void * param)
2558{
2559 FM_OPL *OPL = (FM_OPL *)chip;
2560 OPL->keyboardhandler_w = KeyboardHandler_w;
2561 OPL->keyboardhandler_r = KeyboardHandler_r;
2562 OPL->keyboard_param = param;
2563}
2564
2565#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 @@
1#ifndef __FMOPL_H_
2#define __FMOPL_H_
3
4#include "wl_def.h"
5
6#define HAS_YM3812 1
7
8/* --- select emulation chips --- */
9#define BUILD_YM3812 (HAS_YM3812)
10#define BUILD_YM3526 (HAS_YM3526)
11#define BUILD_Y8950 (HAS_Y8950)
12
13/* select output bits size of output : 8 or 16 */
14#define OPL_SAMPLE_BITS 16
15
16/* compiler dependence */
17#ifndef OSD_CPU_H
18#define OSD_CPU_H
19typedef unsigned char UINT8; /* unsigned 8bit */
20typedef unsigned short UINT16; /* unsigned 16bit */
21typedef unsigned int UINT32; /* unsigned 32bit */
22typedef signed char INT8; /* signed 8bit */
23typedef signed short INT16; /* signed 16bit */
24typedef signed int INT32; /* signed 32bit */
25#endif
26
27#if (OPL_SAMPLE_BITS==16)
28typedef INT16 OPLSAMPLE;
29#endif
30#if (OPL_SAMPLE_BITS==8)
31typedef INT8 OPLSAMPLE;
32#endif
33
34
35typedef void (*OPL_TIMERHANDLER)(int channel,double interval_Sec);
36typedef void (*OPL_IRQHANDLER)(int param,int irq);
37typedef void (*OPL_UPDATEHANDLER)(int param,int min_interval_us);
38typedef void (*OPL_PORTHANDLER_W)(int param,unsigned char data);
39typedef unsigned char (*OPL_PORTHANDLER_R)(int param);
40
41
42#if BUILD_YM3812
43
44
45typedef void device_t;
46void *YM3812Init(device_t *junk, UINT32 clock, UINT32 rate);
47void YM3812Shutdown(void *chip);
48void YM3812ResetChip(void *chip);
49int YM3812Write(void *chip, int a, int v);
50unsigned char YM3812Read(void *chip, int a);
51void YM3812Mute(void *chip,int channel,bool mute);
52int YM3812TimerOver(void *chip, int c);
53void YM3812UpdateOne(void *chip, INT16 *buffer, int length);
54
55// not used
56//void YM3812SetTimerHandler(void *chip, OPL_TIMERHANDLER TimerHandler, int channelOffset);
57//void YM3812SetIRQHandler(void *chip, OPL_IRQHANDLER IRQHandler, int param);
58//void YM3812SetUpdateHandler(void *chip, OPL_UPDATEHANDLER UpdateHandler, int param);
59
60#endif
61
62
63#if BUILD_YM3526
64
65/*
66** Initialize YM3526 emulator(s).
67**
68** 'num' is the number of virtual YM3526's to allocate
69** 'clock' is the chip clock in Hz
70** 'rate' is sampling rate
71*/
72int YM3526Init(int num, int clock, int rate);
73/* shutdown the YM3526 emulators*/
74void YM3526Shutdown(void);
75void YM3526ResetChip(int which);
76int YM3526Write(int which, int a, int v);
77unsigned char YM3526Read(int which, int a);
78int YM3526TimerOver(int which, int c);
79/*
80** Generate samples for one of the YM3526's
81**
82** 'which' is the virtual YM3526 number
83** '*buffer' is the output buffer pointer
84** 'length' is the number of samples that should be generated
85*/
86void YM3526UpdateOne(int which, INT16 *buffer, int length);
87
88void YM3526SetTimerHandler(int which, OPL_TIMERHANDLER TimerHandler, int channelOffset);
89void YM3526SetIRQHandler(int which, OPL_IRQHANDLER IRQHandler, int param);
90void YM3526SetUpdateHandler(int which, OPL_UPDATEHANDLER UpdateHandler, int param);
91
92#endif
93
94
95#if BUILD_Y8950
96
97/* Y8950 port handlers */
98void Y8950SetPortHandler(int which, OPL_PORTHANDLER_W PortHandler_w, OPL_PORTHANDLER_R PortHandler_r, int param);
99void Y8950SetKeyboardHandler(int which, OPL_PORTHANDLER_W KeyboardHandler_w, OPL_PORTHANDLER_R KeyboardHandler_r, int param);
100void Y8950SetDeltaTMemory(int which, void * deltat_mem_ptr, int deltat_mem_size );
101
102int Y8950Init (int num, int clock, int rate);
103void Y8950Shutdown (void);
104void Y8950ResetChip (int which);
105int Y8950Write (int which, int a, int v);
106unsigned char Y8950Read (int which, int a);
107int Y8950TimerOver (int which, int c);
108void Y8950UpdateOne (int which, INT16 *buffer, int length);
109
110void Y8950SetTimerHandler (int which, OPL_TIMERHANDLER TimerHandler, int channelOffset);
111void Y8950SetIRQHandler (int which, OPL_IRQHANDLER IRQHandler, int param);
112void Y8950SetUpdateHandler (int which, OPL_UPDATEHANDLER UpdateHandler, int param);
113
114#endif
115
116
117#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 @@
1#define QUITSUR "Are you sure you want\n"\
2 "to quit this great game?"
3
4#define CURGAME "You are currently in\n"\
5 "a game. Continuing will\n"\
6 "erase old game. Ok?"
7
8#define GAMESVD "There's already a game\n"\
9 "saved at this position.\n"\
10 " Overwrite?"
11
12#define ENDGAMESTR "Are you sure you want\n"\
13 "to end the game you\n"\
14 "are playing? (Y or N):"
15
16#define STR_NG "New Game"
17#define STR_SD "Sound"
18#define STR_CL "Control"
19#define STR_LG "Load Game"
20#define STR_SG "Save Game"
21#define STR_CV "Change View"
22#define STR_VS "View Scores"
23#define STR_EG "End Game"
24#define STR_BD "Back to Demo"
25#define STR_QT "Quit"
26
27#define STR_LOADING "Loading"
28#define STR_SAVING "Saving"
29
30#define STR_GAME "Game"
31#define STR_DEMO "Demo"
32#define STR_LGC "Load Game called\n\""
33#define STR_EMPTY "empty"
34#define STR_CALIB "Calibrate"
35#define STR_JOYST "Joystick"
36#define STR_MOVEJOY "Move joystick to\nupper left and\npress button 0\n"
37#define STR_MOVEJOY2 "Move joystick to\nlower right and\npress button 1\n"
38#define STR_ESCEXIT "ESC to exit"
39
40#define STR_NONE "None"
41#define STR_PC "PC Speaker"
42#define STR_ALSB "AdLib/Sound Blaster"
43#define STR_DISNEY "Disney Sound Source"
44#define STR_SB "Sound Blaster"
45
46#define STR_MOUSEEN "Mouse Enabled"
47#define STR_JOYEN "Joystick Enabled"
48#define STR_PORT2 "Use joystick port 2"
49#define STR_GAMEPAD "Gravis GamePad Enabled"
50#define STR_SENS "Mouse Sensitivity"
51#define STR_CUSTOM "Customize controls"
52
53#define STR_DADDY "Can I play, Daddy?"
54#define STR_HURTME "Don't hurt me."
55#define STR_BRINGEM "Bring 'em on!"
56#define STR_DEATH "I am Death incarnate!"
57
58#define STR_MOUSEADJ "Adjust Mouse Sensitivity"
59#define STR_SLOW "Slow"
60#define STR_FAST "Fast"
61
62#define STR_CRUN "Run"
63#define STR_COPEN "Open"
64#define STR_CFIRE "Fire"
65#define STR_CSTRAFE "Strafe"
66
67#define STR_LEFT "Left"
68#define STR_RIGHT "Right"
69#define STR_FRWD "Frwd"
70#define STR_BKWD "Bkwrd"
71#define STR_THINK "Thinking"
72
73#define STR_SIZE1 "Use arrows to size"
74#define STR_SIZE2 "ENTER to accept"
75#define STR_SIZE3 "ESC to cancel"
76
77#define STR_YOUWIN "you win!"
78
79#define STR_TOTALTIME "total time"
80
81#define STR_RATKILL "kill %"
82#define STR_RATSECRET "secret %"
83#define STR_RATTREASURE "treasure %"
84
85#define STR_BONUS "bonus"
86#define STR_TIME "time"
87#define STR_PAR " par"
88
89#define STR_RAT2KILL "kill ratio %"
90#define STR_RAT2SECRET "secret ratio %"
91#define STR_RAT2TREASURE "treasure ratio %"
92
93#define STR_DEFEATED "defeated!"
94
95#define STR_CHEATER1 "You now have 100% Health,"
96#define STR_CHEATER2 "99 Ammo and both Keys!"
97#define STR_CHEATER3 "Note that you have basically"
98#define STR_CHEATER4 "eliminated your chances of"
99#define STR_CHEATER5 "getting a high score!"
100
101#define STR_NOSPACE1 "There is not enough space"
102#define STR_NOSPACE2 "on your disk to Save Game!"
103
104#define STR_SAVECHT1 "Your Save Game file is,"
105#define STR_SAVECHT2 "shall we say, \"corrupted\"."
106#define STR_SAVECHT3 "But I'll let you go on and"
107#define STR_SAVECHT4 "play anyway...."
108
109#define STR_SEEAGAIN "Let's see that again!"
110
111#ifdef SPEAR
112#define ENDSTR1 "Heroes don't quit, but\ngo ahead and press " YESBUTTONNAME "\nif you aren't one."
113#define ENDSTR2 "Press " YESBUTTONNAME " to quit,\nor press " NOBUTTONNAME " to enjoy\nmore violent diversion."
114#define ENDSTR3 "Depressing the " YESBUTTONNAME " key means\nyou must return to the\nhumdrum workday world."
115#define ENDSTR4 "Hey, quit or play,\n" YESBUTTONNAME " or " NOBUTTONNAME ":\nit's your choice."
116#define ENDSTR5 "Sure you don't want to\nwaste a few more\nproductive hours?"
117#define ENDSTR6 "I think you had better\nplay some more. Please\npress " NOBUTTONNAME "...please?"
118#define ENDSTR7 "If you are tough, press " NOBUTTONNAME ".\nIf not, press " YESBUTTONNAME " daintily."
119#define ENDSTR8 "I'm thinkin' that\nyou might wanna press " NOBUTTONNAME "\nto play more. You do it."
120#define ENDSTR9 "Sure. Fine. Quit.\nSee if we care.\nGet it over with.\nPress " YESBUTTONNAME "."
121#else
122#define ENDSTR1 "Dost thou wish to\nleave with such hasty\nabandon?"
123#define ENDSTR2 "Chickening out...\nalready?"
124#define ENDSTR3 "Press " NOBUTTONNAME " for more carnage.\nPress " YESBUTTONNAME " to be a weenie."
125#define ENDSTR4 "So, you think you can\nquit this easily, huh?"
126#define ENDSTR5 "Press " NOBUTTONNAME " to save the world.\nPress " YESBUTTONNAME " to abandon it in\nits hour of need."
127#define ENDSTR6 "Press " NOBUTTONNAME " if you are brave.\nPress " YESBUTTONNAME " to cower in shame."
128#define ENDSTR7 "Heroes, press " NOBUTTONNAME ".\nWimps, press " YESBUTTONNAME "."
129#define ENDSTR8 "You are at an intersection.\nA sign says, 'Press " YESBUTTONNAME " to quit.'\n>"
130#define ENDSTR9 "For guns and glory, press " NOBUTTONNAME ".\nFor work and worry, press " YESBUTTONNAME "."
131#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 @@
1//////////////////////////////////////
2//
3// Graphics .H file for Apogee v1.4
4// IGRAB-ed on Sun May 03 01:19:32 1992
5//
6//////////////////////////////////////
7
8typedef enum {
9 // Lump Start
10 H_BJPIC=3,
11 H_CASTLEPIC, // 4
12 H_KEYBOARDPIC, // 5
13 H_JOYPIC, // 6
14 H_HEALPIC, // 7
15 H_TREASUREPIC, // 8
16 H_GUNPIC, // 9
17 H_KEYPIC, // 10
18 H_BLAZEPIC, // 11
19 H_WEAPON1234PIC, // 12
20 H_WOLFLOGOPIC, // 13
21 H_VISAPIC, // 14
22 H_MCPIC, // 15
23 H_IDLOGOPIC, // 16
24 H_TOPWINDOWPIC, // 17
25 H_LEFTWINDOWPIC, // 18
26 H_RIGHTWINDOWPIC, // 19
27 H_BOTTOMINFOPIC, // 20
28#if !defined(APOGEE_1_0) && !defined(APOGEE_1_1) && !defined(APOGEE_1_2)
29 H_SPEARADPIC, // 21
30#endif
31 // Lump Start
32 C_OPTIONSPIC, // 22
33 C_CURSOR1PIC, // 23
34 C_CURSOR2PIC, // 24
35 C_NOTSELECTEDPIC, // 25
36 C_SELECTEDPIC, // 26
37 C_FXTITLEPIC, // 27
38 C_DIGITITLEPIC, // 28
39 C_MUSICTITLEPIC, // 29
40 C_MOUSELBACKPIC, // 30
41 C_BABYMODEPIC, // 31
42 C_EASYPIC, // 32
43 C_NORMALPIC, // 33
44 C_HARDPIC, // 34
45 C_LOADSAVEDISKPIC, // 35
46 C_DISKLOADING1PIC, // 36
47 C_DISKLOADING2PIC, // 37
48 C_CONTROLPIC, // 38
49 C_CUSTOMIZEPIC, // 39
50 C_LOADGAMEPIC, // 40
51 C_SAVEGAMEPIC, // 41
52 C_EPISODE1PIC, // 42
53 C_EPISODE2PIC, // 43
54 C_EPISODE3PIC, // 44
55 C_EPISODE4PIC, // 45
56 C_EPISODE5PIC, // 46
57 C_EPISODE6PIC, // 47
58 C_CODEPIC, // 48
59#ifndef APOGEE_1_0
60 C_TIMECODEPIC, // 49
61 C_LEVELPIC, // 50
62 C_NAMEPIC, // 51
63 C_SCOREPIC, // 52
64#if !defined(APOGEE_1_1) && !defined(APOGEE_1_2)
65 C_JOY1PIC, // 53
66 C_JOY2PIC, // 54
67#endif
68#else
69 C_TIMECODEPIC=C_CODEPIC, // 47
70#endif
71 // Lump Start
72 L_GUYPIC, // 55
73 L_COLONPIC, // 56
74 L_NUM0PIC, // 57
75 L_NUM1PIC, // 58
76 L_NUM2PIC, // 59
77 L_NUM3PIC, // 60
78 L_NUM4PIC, // 61
79 L_NUM5PIC, // 62
80 L_NUM6PIC, // 63
81 L_NUM7PIC, // 64
82 L_NUM8PIC, // 65
83 L_NUM9PIC, // 66
84 L_PERCENTPIC, // 67
85 L_APIC, // 68
86 L_BPIC, // 69
87 L_CPIC, // 70
88 L_DPIC, // 71
89 L_EPIC, // 72
90 L_FPIC, // 73
91 L_GPIC, // 74
92 L_HPIC, // 75
93 L_IPIC, // 76
94 L_JPIC, // 77
95 L_KPIC, // 78
96 L_LPIC, // 79
97 L_MPIC, // 80
98 L_NPIC, // 81
99 L_OPIC, // 82
100 L_PPIC, // 83
101 L_QPIC, // 84
102 L_RPIC, // 85
103 L_SPIC, // 86
104 L_TPIC, // 87
105 L_UPIC, // 88
106 L_VPIC, // 89
107 L_WPIC, // 90
108 L_XPIC, // 91
109 L_YPIC, // 92
110 L_ZPIC, // 93
111 L_EXPOINTPIC, // 94
112#ifndef APOGEE_1_0
113 L_APOSTROPHEPIC, // 95
114#endif
115 L_GUY2PIC, // 96
116 L_BJWINSPIC, // 97
117 STATUSBARPIC, // 98
118 TITLEPIC, // 99
119 PG13PIC, // 100
120 CREDITSPIC, // 101
121 HIGHSCORESPIC, // 102
122 // Lump Start
123 KNIFEPIC, // 103
124 GUNPIC, // 104
125 MACHINEGUNPIC, // 105
126 GATLINGGUNPIC, // 106
127 NOKEYPIC, // 107
128 GOLDKEYPIC, // 108
129 SILVERKEYPIC, // 109
130 N_BLANKPIC, // 110
131 N_0PIC, // 111
132 N_1PIC, // 112
133 N_2PIC, // 113
134 N_3PIC, // 114
135 N_4PIC, // 115
136 N_5PIC, // 116
137 N_6PIC, // 117
138 N_7PIC, // 118
139 N_8PIC, // 119
140 N_9PIC, // 120
141 FACE1APIC, // 121
142 FACE1BPIC, // 122
143 FACE1CPIC, // 123
144 FACE2APIC, // 124
145 FACE2BPIC, // 125
146 FACE2CPIC, // 126
147 FACE3APIC, // 127
148 FACE3BPIC, // 128
149 FACE3CPIC, // 129
150 FACE4APIC, // 130
151 FACE4BPIC, // 131
152 FACE4CPIC, // 132
153 FACE5APIC, // 133
154 FACE5BPIC, // 134
155 FACE5CPIC, // 135
156 FACE6APIC, // 136
157 FACE6BPIC, // 137
158 FACE6CPIC, // 138
159 FACE7APIC, // 139
160 FACE7BPIC, // 140
161 FACE7CPIC, // 141
162 FACE8APIC, // 142
163 GOTGATLINGPIC, // 143
164 MUTANTBJPIC, // 144
165 PAUSEDPIC, // 145
166 GETPSYCHEDPIC, // 146
167
168 TILE8, // 147
169
170 ORDERSCREEN, // 148
171 ERRORSCREEN, // 149
172 T_HELPART, // 150
173#ifdef APOGEE_1_0
174 T_ENDART1, // 143
175#endif
176 T_DEMO0, // 151
177 T_DEMO1, // 152
178 T_DEMO2, // 153
179 T_DEMO3, // 154
180#ifndef APOGEE_1_0
181 T_ENDART1, // 155
182 T_ENDART2, // 156
183 T_ENDART3, // 157
184 T_ENDART4, // 158
185 T_ENDART5, // 159
186 T_ENDART6, // 160
187#endif
188
189 ENUMEND
190} graphicnums;
191
192//
193// Data LUMPs
194//
195#define README_LUMP_START H_BJPIC
196#define README_LUMP_END H_BOTTOMINFOPIC
197
198#define CONTROLS_LUMP_START C_OPTIONSPIC
199#define CONTROLS_LUMP_END (L_GUYPIC - 1)
200
201#define LEVELEND_LUMP_START L_GUYPIC
202#define LEVELEND_LUMP_END L_BJWINSPIC
203
204#define LATCHPICS_LUMP_START KNIFEPIC
205#define LATCHPICS_LUMP_END GETPSYCHEDPIC
206
207
208//
209// Amount of each data item
210//
211#define NUMCHUNKS ENUMEND
212#define NUMFONT 2
213#define NUMFONTM 0
214#define NUMPICS (GETPSYCHEDPIC - NUMFONT)
215#define NUMPICM 0
216#define NUMSPRITES 0
217#define NUMTILE8 72
218#define NUMTILE8M 0
219#define NUMTILE16 0
220#define NUMTILE16M 0
221#define NUMTILE32 0
222#define NUMTILE32M 0
223#define NUMEXTERNS 13
224//
225// File offsets for data items
226//
227#define STRUCTPIC 0
228
229#define STARTFONT 1
230#define STARTFONTM 3
231#define STARTPICS 3
232#define STARTPICM TILE8
233#define STARTSPRITES TILE8
234#define STARTTILE8 TILE8
235#define STARTTILE8M ORDERSCREEN
236#define STARTTILE16 ORDERSCREEN
237#define STARTTILE16M ORDERSCREEN
238#define STARTTILE32 ORDERSCREEN
239#define STARTTILE32M ORDERSCREEN
240#define STARTEXTERNS ORDERSCREEN
241
242//
243// Thank you for using IGRAB!
244//
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 @@
1//////////////////////////////////////
2//
3// Graphics .H file for .SOD
4// IGRAB-ed on Thu Oct 08 20:38:29 1992
5//
6//////////////////////////////////////
7
8typedef enum {
9 // Lump Start
10 C_BACKDROPPIC=3,
11 C_MOUSELBACKPIC, // 4
12 C_CURSOR1PIC, // 5
13 C_CURSOR2PIC, // 6
14 C_NOTSELECTEDPIC, // 7
15 C_SELECTEDPIC, // 8
16 // Lump Start
17 C_CUSTOMIZEPIC, // 9
18 C_JOY1PIC, // 10
19 C_JOY2PIC, // 11
20 C_MOUSEPIC, // 12
21 C_JOYSTICKPIC, // 13
22 C_KEYBOARDPIC, // 14
23 C_CONTROLPIC, // 15
24 // Lump Start
25 C_OPTIONSPIC, // 16
26 // Lump Start
27 C_FXTITLEPIC, // 17
28 C_DIGITITLEPIC, // 18
29 C_MUSICTITLEPIC, // 19
30 // Lump Start
31 C_HOWTOUGHPIC, // 20
32 C_BABYMODEPIC, // 21
33 C_EASYPIC, // 22
34 C_NORMALPIC, // 23
35 C_HARDPIC, // 24
36 // Lump Start
37 C_DISKLOADING1PIC, // 25
38 C_DISKLOADING2PIC, // 26
39 C_LOADGAMEPIC, // 27
40 C_SAVEGAMEPIC, // 28
41 // Lump Start
42 HIGHSCORESPIC, // 29
43 C_WONSPEARPIC, // 30
44#ifndef SPEARDEMO
45 // Lump Start
46 BJCOLLAPSE1PIC, // 31
47 BJCOLLAPSE2PIC, // 32
48 BJCOLLAPSE3PIC, // 33
49 BJCOLLAPSE4PIC, // 34
50 ENDPICPIC, // 35
51#endif
52 // Lump Start
53 L_GUYPIC, // 36
54 L_COLONPIC, // 37
55 L_NUM0PIC, // 38
56 L_NUM1PIC, // 39
57 L_NUM2PIC, // 40
58 L_NUM3PIC, // 41
59 L_NUM4PIC, // 42
60 L_NUM5PIC, // 43
61 L_NUM6PIC, // 44
62 L_NUM7PIC, // 45
63 L_NUM8PIC, // 46
64 L_NUM9PIC, // 47
65 L_PERCENTPIC, // 48
66 L_APIC, // 49
67 L_BPIC, // 50
68 L_CPIC, // 51
69 L_DPIC, // 52
70 L_EPIC, // 53
71 L_FPIC, // 54
72 L_GPIC, // 55
73 L_HPIC, // 56
74 L_IPIC, // 57
75 L_JPIC, // 58
76 L_KPIC, // 59
77 L_LPIC, // 60
78 L_MPIC, // 61
79 L_NPIC, // 62
80 L_OPIC, // 63
81 L_PPIC, // 64
82 L_QPIC, // 65
83 L_RPIC, // 66
84 L_SPIC, // 67
85 L_TPIC, // 68
86 L_UPIC, // 69
87 L_VPIC, // 70
88 L_WPIC, // 71
89 L_XPIC, // 72
90 L_YPIC, // 73
91 L_ZPIC, // 74
92 L_EXPOINTPIC, // 75
93 L_APOSTROPHEPIC, // 76
94 L_GUY2PIC, // 77
95 L_BJWINSPIC, // 78
96 // Lump Start
97 TITLE1PIC, // 79
98 TITLE2PIC, // 80
99#ifndef SPEARDEMO
100 // Lump Start
101 ENDSCREEN11PIC, // 81
102 // Lump Start
103 ENDSCREEN12PIC, // 82
104 ENDSCREEN3PIC, // 83
105 ENDSCREEN4PIC, // 84
106 ENDSCREEN5PIC, // 85
107 ENDSCREEN6PIC, // 86
108 ENDSCREEN7PIC, // 87
109 ENDSCREEN8PIC, // 88
110 ENDSCREEN9PIC, // 89
111#endif
112 STATUSBARPIC, // 90
113 PG13PIC, // 91
114 CREDITSPIC, // 92
115#ifndef SPEARDEMO
116 // Lump Start
117 IDGUYS1PIC, // 93
118 IDGUYS2PIC, // 94
119 // Lump Start
120 COPYPROTTOPPIC, // 95
121 COPYPROTBOXPIC, // 96
122 BOSSPIC1PIC, // 97
123 BOSSPIC2PIC, // 98
124 BOSSPIC3PIC, // 99
125 BOSSPIC4PIC, // 100
126#endif
127 // Lump Start
128 KNIFEPIC, // 101
129 GUNPIC, // 102
130 MACHINEGUNPIC, // 103
131 GATLINGGUNPIC, // 104
132 NOKEYPIC, // 105
133 GOLDKEYPIC, // 106
134 SILVERKEYPIC, // 107
135 N_BLANKPIC, // 108
136 N_0PIC, // 109
137 N_1PIC, // 110
138 N_2PIC, // 111
139 N_3PIC, // 112
140 N_4PIC, // 113
141 N_5PIC, // 114
142 N_6PIC, // 115
143 N_7PIC, // 116
144 N_8PIC, // 117
145 N_9PIC, // 118
146 FACE1APIC, // 119
147 FACE1BPIC, // 120
148 FACE1CPIC, // 121
149 FACE2APIC, // 122
150 FACE2BPIC, // 123
151 FACE2CPIC, // 124
152 FACE3APIC, // 125
153 FACE3BPIC, // 126
154 FACE3CPIC, // 127
155 FACE4APIC, // 128
156 FACE4BPIC, // 129
157 FACE4CPIC, // 130
158 FACE5APIC, // 131
159 FACE5BPIC, // 132
160 FACE5CPIC, // 133
161 FACE6APIC, // 134
162 FACE6BPIC, // 135
163 FACE6CPIC, // 136
164 FACE7APIC, // 137
165 FACE7BPIC, // 138
166 FACE7CPIC, // 139
167 FACE8APIC, // 140
168 GOTGATLINGPIC, // 141
169 GODMODEFACE1PIC, // 142
170 GODMODEFACE2PIC, // 143
171 GODMODEFACE3PIC, // 144
172 BJWAITING1PIC, // 145
173 BJWAITING2PIC, // 146
174 BJOUCHPIC, // 147
175 PAUSEDPIC, // 148
176 GETPSYCHEDPIC, // 149
177
178 TILE8, // 150
179
180 ORDERSCREEN, // 151
181 ERRORSCREEN, // 152
182 TITLEPALETTE, // 153
183#ifndef SPEARDEMO
184 END1PALETTE, // 154
185 END2PALETTE, // 155
186 END3PALETTE, // 156
187 END4PALETTE, // 157
188 END5PALETTE, // 158
189 END6PALETTE, // 159
190 END7PALETTE, // 160
191 END8PALETTE, // 161
192 END9PALETTE, // 162
193 IDGUYSPALETTE, // 163
194#endif
195 T_DEMO0, // 164
196#ifndef SPEARDEMO
197 T_DEMO1, // 165
198 T_DEMO2, // 166
199 T_DEMO3, // 167
200 T_ENDART1, // 168
201#endif
202 ENUMEND
203} graphicnums;
204
205//
206// Data LUMPs
207//
208#define BACKDROP_LUMP_START 3
209#define BACKDROP_LUMP_END 8
210
211#define CONTROL_LUMP_START 9
212#define CONTROL_LUMP_END 15
213
214#define OPTIONS_LUMP_START 16
215#define OPTIONS_LUMP_END 16
216
217#define SOUND_LUMP_START 17
218#define SOUND_LUMP_END 19
219
220#define NEWGAME_LUMP_START 20
221#define NEWGAME_LUMP_END 24
222
223#define LOADSAVE_LUMP_START 25
224#define LOADSAVE_LUMP_END 28
225
226#define HIGHSCORES_LUMP_START 29
227#define HIGHSCORES_LUMP_END 30
228
229#define ENDGAME_LUMP_START 31
230#define ENDGAME_LUMP_END 35
231
232#define LEVELEND_LUMP_START L_GUYPIC
233#define LEVELEND_LUMP_END L_BJWINSPIC
234
235#define TITLESCREEN_LUMP_START TITLE1PIC
236#define TITLESCREEN_LUMP_END TITLE2PIC
237
238#define ENDGAME1_LUMP_START ENDSCREEN11PIC
239#define ENDGAME1_LUMP_END ENDSCREEN11PIC
240
241#define ENDGAME2_LUMP_START ENDSCREEN12PIC
242#define ENDGAME2_LUMP_END ENDSCREEN12PIC
243
244#define EASTEREGG_LUMP_START IDGUYS1PIC
245#define EASTEREGG_LUMP_END IDGUYS2PIC
246
247#define COPYPROT_LUMP_START COPYPROTTOPPIC
248#define COPYPROT_LUMP_END BOSSPIC4PIC
249
250#define LATCHPICS_LUMP_START KNIFEPIC
251#define LATCHPICS_LUMP_END GETPSYCHEDPIC
252
253
254//
255// Amount of each data item
256//
257#define NUMCHUNKS ENUMEND
258#define NUMFONT 2
259#define NUMFONTM 0
260#define NUMPICS (GETPSYCHEDPIC - NUMFONT)
261#define NUMPICM 0
262#define NUMSPRITES 0
263#define NUMTILE8 72
264#define NUMTILE8M 0
265#define NUMTILE16 0
266#define NUMTILE16M 0
267#define NUMTILE32 0
268#define NUMTILE32M 0
269#define NUMEXTERNS 18
270//
271// File offsets for data items
272//
273#define STRUCTPIC 0
274
275#define STARTFONT 1
276#define STARTFONTM 3
277#define STARTPICS 3
278#define STARTPICM TILE8
279#define STARTSPRITES TILE8
280#define STARTTILE8 TILE8
281#define STARTTILE8M ORDERSCREEN
282#define STARTTILE16 ORDERSCREEN
283#define STARTTILE16M ORDERSCREEN
284#define STARTTILE32 ORDERSCREEN
285#define STARTTILE32M ORDERSCREEN
286#define STARTEXTERNS ORDERSCREEN
287
288//
289// Thank you for using IGRAB!
290//
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 @@
1//////////////////////////////////////
2//
3// Graphics .H file for .WL6
4// IGRAB-ed on Wed Apr 13 06:58:44 1994
5//
6//////////////////////////////////////
7
8typedef enum {
9 // Lump Start
10 H_BJPIC=3,
11 H_CASTLEPIC, // 4
12 H_BLAZEPIC, // 5
13 H_TOPWINDOWPIC, // 6
14 H_LEFTWINDOWPIC, // 7
15 H_RIGHTWINDOWPIC, // 8
16 H_BOTTOMINFOPIC, // 9
17 // Lump Start
18 C_OPTIONSPIC, // 10
19 C_CURSOR1PIC, // 11
20 C_CURSOR2PIC, // 12
21 C_NOTSELECTEDPIC, // 13
22 C_SELECTEDPIC, // 14
23 C_FXTITLEPIC, // 15
24 C_DIGITITLEPIC, // 16
25 C_MUSICTITLEPIC, // 17
26 C_MOUSELBACKPIC, // 18
27 C_BABYMODEPIC, // 19
28 C_EASYPIC, // 20
29 C_NORMALPIC, // 21
30 C_HARDPIC, // 22
31 C_LOADSAVEDISKPIC, // 23
32 C_DISKLOADING1PIC, // 24
33 C_DISKLOADING2PIC, // 25
34 C_CONTROLPIC, // 26
35 C_CUSTOMIZEPIC, // 27
36 C_LOADGAMEPIC, // 28
37 C_SAVEGAMEPIC, // 29
38 C_EPISODE1PIC, // 30
39 C_EPISODE2PIC, // 31
40 C_EPISODE3PIC, // 32
41 C_EPISODE4PIC, // 33
42 C_EPISODE5PIC, // 34
43 C_EPISODE6PIC, // 35
44 C_CODEPIC, // 36
45 C_TIMECODEPIC, // 37
46 C_LEVELPIC, // 38
47 C_NAMEPIC, // 39
48 C_SCOREPIC, // 40
49 C_JOY1PIC, // 41
50 C_JOY2PIC, // 42
51 // Lump Start
52 L_GUYPIC, // 43
53 L_COLONPIC, // 44
54 L_NUM0PIC, // 45
55 L_NUM1PIC, // 46
56 L_NUM2PIC, // 47
57 L_NUM3PIC, // 48
58 L_NUM4PIC, // 49
59 L_NUM5PIC, // 50
60 L_NUM6PIC, // 51
61 L_NUM7PIC, // 52
62 L_NUM8PIC, // 53
63 L_NUM9PIC, // 54
64 L_PERCENTPIC, // 55
65 L_APIC, // 56
66 L_BPIC, // 57
67 L_CPIC, // 58
68 L_DPIC, // 59
69 L_EPIC, // 60
70 L_FPIC, // 61
71 L_GPIC, // 62
72 L_HPIC, // 63
73 L_IPIC, // 64
74 L_JPIC, // 65
75 L_KPIC, // 66
76 L_LPIC, // 67
77 L_MPIC, // 68
78 L_NPIC, // 69
79 L_OPIC, // 70
80 L_PPIC, // 71
81 L_QPIC, // 72
82 L_RPIC, // 73
83 L_SPIC, // 74
84 L_TPIC, // 75
85 L_UPIC, // 76
86 L_VPIC, // 77
87 L_WPIC, // 78
88 L_XPIC, // 79
89 L_YPIC, // 80
90 L_ZPIC, // 81
91 L_EXPOINTPIC, // 82
92 L_APOSTROPHEPIC, // 83
93 L_GUY2PIC, // 84
94 L_BJWINSPIC, // 85
95 STATUSBARPIC, // 86
96 TITLEPIC, // 87
97 PG13PIC, // 88
98 CREDITSPIC, // 89
99 HIGHSCORESPIC, // 90
100 // Lump Start
101 KNIFEPIC, // 91
102 GUNPIC, // 92
103 MACHINEGUNPIC, // 93
104 GATLINGGUNPIC, // 94
105 NOKEYPIC, // 95
106 GOLDKEYPIC, // 96
107 SILVERKEYPIC, // 97
108 N_BLANKPIC, // 98
109 N_0PIC, // 99
110 N_1PIC, // 100
111 N_2PIC, // 101
112 N_3PIC, // 102
113 N_4PIC, // 103
114 N_5PIC, // 104
115 N_6PIC, // 105
116 N_7PIC, // 106
117 N_8PIC, // 107
118 N_9PIC, // 108
119 FACE1APIC, // 109
120 FACE1BPIC, // 110
121 FACE1CPIC, // 111
122 FACE2APIC, // 112
123 FACE2BPIC, // 113
124 FACE2CPIC, // 114
125 FACE3APIC, // 115
126 FACE3BPIC, // 116
127 FACE3CPIC, // 117
128 FACE4APIC, // 118
129 FACE4BPIC, // 119
130 FACE4CPIC, // 120
131 FACE5APIC, // 121
132 FACE5BPIC, // 122
133 FACE5CPIC, // 123
134 FACE6APIC, // 124
135 FACE6BPIC, // 125
136 FACE6CPIC, // 126
137 FACE7APIC, // 127
138 FACE7BPIC, // 128
139 FACE7CPIC, // 129
140 FACE8APIC, // 130
141 GOTGATLINGPIC, // 131
142 MUTANTBJPIC, // 132
143 PAUSEDPIC, // 133
144 GETPSYCHEDPIC, // 134
145
146
147
148 ORDERSCREEN=136,
149 ERRORSCREEN, // 137
150 T_HELPART, // 138
151 T_DEMO0, // 139
152 T_DEMO1, // 140
153 T_DEMO2, // 141
154 T_DEMO3, // 142
155 T_ENDART1, // 143
156 T_ENDART2, // 144
157 T_ENDART3, // 145
158 T_ENDART4, // 146
159 T_ENDART5, // 147
160 T_ENDART6, // 148
161 ENUMEND
162} graphicnums;
163
164//
165// Data LUMPs
166//
167#define README_LUMP_START 3
168#define README_LUMP_END 9
169
170#define CONTROLS_LUMP_START 10
171#define CONTROLS_LUMP_END 42
172
173#define LEVELEND_LUMP_START 43
174#define LEVELEND_LUMP_END 85
175
176#define LATCHPICS_LUMP_START 91
177#define LATCHPICS_LUMP_END 134
178
179
180//
181// Amount of each data item
182//
183#define NUMCHUNKS 149
184#define NUMFONT 2
185#define NUMFONTM 0
186#define NUMPICS 132
187#define NUMPICM 0
188#define NUMSPRITES 0
189#define NUMTILE8 72
190#define NUMTILE8M 0
191#define NUMTILE16 0
192#define NUMTILE16M 0
193#define NUMTILE32 0
194#define NUMTILE32M 0
195#define NUMEXTERNS 13
196//
197// File offsets for data items
198//
199#define STRUCTPIC 0
200
201#define STARTFONT 1
202#define STARTFONTM 3
203#define STARTPICS 3
204#define STARTPICM 135
205#define STARTSPRITES 135
206#define STARTTILE8 135
207#define STARTTILE8M 136
208#define STARTTILE16 136
209#define STARTTILE16M 136
210#define STARTTILE32 136
211#define STARTTILE32M 136
212#define STARTEXTERNS 136
213
214//
215// Thank you for using IGRAB!
216//
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 @@
1#ifndef GP2X_H
2#define GP2X_H
3
4#include <SDL/SDL.h>
5#include <sys/ioctl.h>
6#include <sys/soundcard.h>
7#include <fcntl.h>
8#include <unistd.h>
9
10#include "wl_def.h"
11
12#define GP2X_BUTTON_UP (0)
13#define GP2X_BUTTON_DOWN (4)
14#define GP2X_BUTTON_LEFT (2)
15#define GP2X_BUTTON_RIGHT (6)
16#define GP2X_BUTTON_UPLEFT (1)
17#define GP2X_BUTTON_UPRIGHT (7)
18#define GP2X_BUTTON_DOWNLEFT (3)
19#define GP2X_BUTTON_DOWNRIGHT (5)
20#define GP2X_BUTTON_CLICK (18)
21#define GP2X_BUTTON_A (12)
22#define GP2X_BUTTON_B (13)
23#define GP2X_BUTTON_X (15)
24#define GP2X_BUTTON_Y (14)
25#define GP2X_BUTTON_L (11)
26#define GP2X_BUTTON_R (10)
27#define GP2X_BUTTON_START (8)
28#define GP2X_BUTTON_SELECT (9)
29#define GP2X_BUTTON_VOLUP (16)
30#define GP2X_BUTTON_VOLDOWN (17)
31
32#define VOLUME_MIN 0
33#define VOLUME_MAX 100
34#define VOLUME_CHANGE_RATE 2
35#define VOLUME_NOCHG 0
36#define VOLUME_DOWN 1
37#define VOLUME_UP 2
38#define KEY_DOWN 1
39#define KEY_UP 0
40
41void GP2X_Init();
42void GP2X_Shutdown();
43void GP2X_StartMMUHack();
44
45void GP2X_AdjustVolume( int direction );
46void GP2X_ButtonDown( int button );
47void GP2X_ButtonUp( int button );
48void Screenshot( void );
49void SetKeyboard( unsigned int key, int press );
50
51#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 @@
1// ID_CA.C
2
3// this has been customized for WOLF
4
5/*
6=============================================================================
7
8Id Software Caching Manager
9---------------------------
10
11Must be started BEFORE the memory manager, because it needs to get the headers
12loaded into the data segment
13
14=============================================================================
15*/
16
17#include <SDL.h>
18
19
20#include "wl_def.h"
21#pragma hdrstop
22
23#define THREEBYTEGRSTARTS
24
25/*
26=============================================================================
27
28 LOCAL CONSTANTS
29
30=============================================================================
31*/
32
33typedef struct
34{
35 word bit0,bit1; // 0-255 is a character, > is a pointer to a node
36} huffnode;
37
38
39typedef struct
40{
41 word RLEWtag;
42 int32_t headeroffsets[100];
43} mapfiletype;
44
45
46/*
47=============================================================================
48
49 GLOBAL VARIABLES
50
51=============================================================================
52*/
53
54#define BUFFERSIZE 0x1000
55static int32_t bufferseg[BUFFERSIZE/4];
56
57int mapon;
58
59word *mapsegs[MAPPLANES];
60static maptype* mapheaderseg[NUMMAPS];
61byte *audiosegs[NUMSNDCHUNKS];
62byte *grsegs[NUMCHUNKS];
63
64word RLEWtag;
65
66int numEpisodesMissing = 0;
67
68/*
69=============================================================================
70
71 LOCAL VARIABLES
72
73=============================================================================
74*/
75
76char extension[5]; // Need a string, not constant to change cache files
77char graphext[5];
78char audioext[5];
79static const char gheadname[] = DATADIR "vgahead.";
80static const char gfilename[] = DATADIR "vgagraph.";
81static const char gdictname[] = DATADIR "vgadict.";
82static const char mheadname[] = DATADIR "maphead.";
83static const char mfilename[] = DATADIR "maptemp.";
84static const char mfilecama[] = DATADIR "gamemaps.";
85static const char aheadname[] = DATADIR "audiohed.";
86static const char afilename[] = DATADIR "audiot.";
87
88void CA_CannotOpen(const char *string);
89
90static int32_t grstarts[NUMCHUNKS + 1];
91static int32_t* audiostarts; // array of offsets in audio / audiot
92
93#ifdef GRHEADERLINKED
94huffnode *grhuffman;
95#else
96huffnode grhuffman[255];
97#endif
98
99int grhandle = -1; // handle to EGAGRAPH
100int maphandle = -1; // handle to MAPTEMP / GAMEMAPS
101int audiohandle = -1; // handle to AUDIOT / AUDIO
102
103int32_t chunkcomplen,chunkexplen;
104
105SDMode oldsoundmode;
106
107
108static int32_t GRFILEPOS(const size_t idx)
109{
110 assert(idx < lengthof(grstarts));
111 return grstarts[idx];
112}
113
114/*
115=============================================================================
116
117 LOW LEVEL ROUTINES
118
119=============================================================================
120*/
121
122/*
123============================
124=
125= CAL_GetGrChunkLength
126=
127= Gets the length of an explicit length chunk (not tiles)
128= The file pointer is positioned so the compressed data can be read in next.
129=
130============================
131*/
132
133void CAL_GetGrChunkLength (int chunk)
134{
135 lseek(grhandle,GRFILEPOS(chunk),SEEK_SET);
136 read(grhandle,&chunkexplen,sizeof(chunkexplen));
137 chunkcomplen = GRFILEPOS(chunk+1)-GRFILEPOS(chunk)-4;
138}
139
140
141/*
142==========================
143=
144= CA_WriteFile
145=
146= Writes a file from a memory buffer
147=
148==========================
149*/
150
151boolean CA_WriteFile (const char *filename, void *ptr, int32_t length)
152{
153 const int handle = open(filename, O_CREAT | O_WRONLY | O_BINARY, 0644);
154 if (handle == -1)
155 return false;
156
157 if (!write (handle,ptr,length))
158 {
159 close (handle);
160 return false;
161 }
162 close (handle);
163 return true;
164}
165
166
167
168/*
169==========================
170=
171= CA_LoadFile
172=
173= Allocate space for and load a file
174=
175==========================
176*/
177
178boolean CA_LoadFile (const char *filename, memptr *ptr)
179{
180 int32_t size;
181
182 const int handle = open(filename, O_RDONLY | O_BINARY);
183 if (handle == -1)
184 return false;
185
186 size = lseek(handle, 0, SEEK_END);
187 lseek(handle, 0, SEEK_SET);
188 *ptr=malloc(size);
189 CHECKMALLOCRESULT(*ptr);
190 if (!read (handle,*ptr,size))
191 {
192 close (handle);
193 return false;
194 }
195 close (handle);
196 return true;
197}
198
199/*
200============================================================================
201
202 COMPRESSION routines, see JHUFF.C for more
203
204============================================================================
205*/
206
207static void CAL_HuffExpand(byte *source, byte *dest, int32_t length, huffnode *hufftable)
208{
209 byte *end;
210 huffnode *headptr, *huffptr;
211
212 if(!length || !dest)
213 {
214 Quit("length or dest is null!");
215 return;
216 }
217
218 headptr = hufftable+254; // head node is always node 254
219
220 int written = 0;
221
222 end=dest+length;
223
224 byte val = *source++;
225 byte mask = 1;
226 word nodeval;
227 huffptr = headptr;
228 while(1)
229 {
230 if(!(val & mask))
231 nodeval = huffptr->bit0;
232 else
233 nodeval = huffptr->bit1;
234 if(mask==0x80)
235 {
236 val = *source++;
237 mask = 1;
238 }
239 else mask <<= 1;
240
241 if(nodeval<256)
242 {
243 *dest++ = (byte) nodeval;
244 written++;
245 huffptr = headptr;
246 if(dest>=end) break;
247 }
248 else
249 {
250 huffptr = hufftable + (nodeval - 256);
251 }
252 }
253}
254
255/*
256======================
257=
258= CAL_CarmackExpand
259=
260= Length is the length of the EXPANDED data
261=
262======================
263*/
264
265#define NEARTAG 0xa7
266#define FARTAG 0xa8
267
268void CAL_CarmackExpand (byte *source, word *dest, int length)
269{
270 word ch,chhigh,count,offset;
271 byte *inptr;
272 word *copyptr, *outptr;
273
274 length/=2;
275
276 inptr = (byte *) source;
277 outptr = dest;
278
279 while (length>0)
280 {
281 ch = READWORD(&inptr);
282 chhigh = ch>>8;
283 if (chhigh == NEARTAG)
284 {
285 count = ch&0xff;
286 if (!count)
287 { // have to insert a word containing the tag byte
288 ch |= *inptr++;
289 *outptr++ = ch;
290 length--;
291 }
292 else
293 {
294 offset = *inptr++;
295 copyptr = outptr - offset;
296 length -= count;
297 if(length<0) return;
298 while (count--)
299 *outptr++ = *copyptr++;
300 }
301 }
302 else if (chhigh == FARTAG)
303 {
304 count = ch&0xff;
305 if (!count)
306 { // have to insert a word containing the tag byte
307 ch |= *inptr++;
308 *outptr++ = ch;
309 length --;
310 }
311 else
312 {
313 offset = READWORD(&inptr);
314 copyptr = dest + offset;
315 length -= count;
316 if(length<0) return;
317 while (count--)
318 *outptr++ = *copyptr++;
319 }
320 }
321 else
322 {
323 *outptr++ = ch;
324 length --;
325 }
326 }
327}
328
329/*
330======================
331=
332= CA_RLEWcompress
333=
334======================
335*/
336
337int32_t CA_RLEWCompress (word *source, int32_t length, word *dest, word rlewtag)
338{
339 word value,count;
340 unsigned i;
341 word *start,*end;
342
343 start = dest;
344
345 end = source + (length+1)/2;
346
347 //
348 // compress it
349 //
350 do
351 {
352 count = 1;
353 value = *source++;
354 while (*source == value && source<end)
355 {
356 count++;
357 source++;
358 }
359 if (count>3 || value == rlewtag)
360 {
361 //
362 // send a tag / count / value string
363 //
364 *dest++ = rlewtag;
365 *dest++ = count;
366 *dest++ = value;
367 }
368 else
369 {
370 //
371 // send word without compressing
372 //
373 for (i=1;i<=count;i++)
374 *dest++ = value;
375 }
376
377 } while (source<end);
378
379 return (int32_t)(2*(dest-start));
380}
381
382
383/*
384======================
385=
386= CA_RLEWexpand
387= length is EXPANDED length
388=
389======================
390*/
391
392void CA_RLEWexpand (word *source, word *dest, int32_t length, word rlewtag)
393{
394 word value,count,i;
395 word *end=dest+length/2;
396
397//
398// expand it
399//
400 do
401 {
402 value = *source++;
403 if (value != rlewtag)
404 //
405 // uncompressed
406 //
407 *dest++=value;
408 else
409 {
410 //
411 // compressed string
412 //
413 count = *source++;
414 value = *source++;
415 for (i=1;i<=count;i++)
416 *dest++ = value;
417 }
418 } while (dest<end);
419}
420
421
422
423/*
424=============================================================================
425
426 CACHE MANAGER ROUTINES
427
428=============================================================================
429*/
430
431
432/*
433======================
434=
435= CAL_SetupGrFile
436=
437======================
438*/
439
440void CAL_SetupGrFile (void)
441{
442 char fname[13 + sizeof(DATADIR)];
443 int handle;
444 byte *compseg;
445
446#ifdef GRHEADERLINKED
447
448 grhuffman = (huffnode *)&EGAdict;
449 grstarts = (int32_t _seg *)FP_SEG(&EGAhead);
450
451#else
452
453//
454// load ???dict.ext (huffman dictionary for graphics files)
455//
456
457 strcpy(fname,gdictname);
458 strcat(fname,graphext);
459
460 handle = open(fname, O_RDONLY | O_BINARY);
461 if (handle == -1)
462 CA_CannotOpen(fname);
463
464 read(handle, grhuffman, sizeof(grhuffman));
465 close(handle);
466
467 // load the data offsets from ???head.ext
468 strcpy(fname,gheadname);
469 strcat(fname,graphext);
470
471 handle = open(fname, O_RDONLY | O_BINARY);
472 if (handle == -1)
473 CA_CannotOpen(fname);
474
475 long headersize = lseek(handle, 0, SEEK_END);
476 lseek(handle, 0, SEEK_SET);
477
478#ifndef APOGEE_1_0
479 int expectedsize = lengthof(grstarts) - numEpisodesMissing;
480#else
481 int expectedsize = lengthof(grstarts);
482#endif
483
484 if(!param_ignorenumchunks && headersize / 3 != (long) expectedsize)
485 Quit("Wolf4SDL was not compiled for these data files:\n"
486 "%s contains a wrong number of offsets (%i instead of %i)!\n\n"
487 "Please check whether you are using the right executable!\n"
488 "(For mod developers: perhaps you forgot to update NUMCHUNKS?)",
489 fname, headersize / 3, expectedsize);
490
491 byte data[lengthof(grstarts) * 3];
492 read(handle, data, sizeof(data));
493 close(handle);
494
495 const byte* d = data;
496 for (int32_t* i = grstarts; i != endof(grstarts); ++i)
497 {
498 const int32_t val = d[0] | d[1] << 8 | d[2] << 16;
499 *i = (val == 0x00FFFFFF ? -1 : val);
500 d += 3;
501 }
502#endif
503
504//
505// Open the graphics file, leaving it open until the game is finished
506//
507 strcpy(fname,gfilename);
508 strcat(fname,graphext);
509
510 grhandle = open(fname, O_RDONLY | O_BINARY);
511 if (grhandle == -1)
512 CA_CannotOpen(fname);
513
514
515//
516// load the pic and sprite headers into the arrays in the data segment
517//
518 pictable=(pictabletype *) malloc(NUMPICS*sizeof(pictabletype));
519 CHECKMALLOCRESULT(pictable);
520 CAL_GetGrChunkLength(STRUCTPIC); // position file pointer
521 compseg=(byte *) malloc(chunkcomplen);
522 CHECKMALLOCRESULT(compseg);
523 read (grhandle,compseg,chunkcomplen);
524 CAL_HuffExpand(compseg, (byte*)pictable, NUMPICS * sizeof(pictabletype), grhuffman);
525 free(compseg);
526}
527
528//==========================================================================
529
530
531/*
532======================
533=
534= CAL_SetupMapFile
535=
536======================
537*/
538
539void CAL_SetupMapFile (void)
540{
541 int i;
542 int handle;
543 int32_t length,pos;
544 char fname[13 + sizeof(DATADIR)];
545
546//
547// load maphead.ext (offsets and tileinfo for map file)
548//
549 strcpy(fname,mheadname);
550 strcat(fname,extension);
551
552 handle = open(fname, O_RDONLY | O_BINARY);
553 if (handle == -1)
554 CA_CannotOpen(fname);
555
556 length = NUMMAPS*4+2; // used to be "filelength(handle);"
557 mapfiletype *tinf=(mapfiletype *) malloc(sizeof(mapfiletype));
558 CHECKMALLOCRESULT(tinf);
559 read(handle, tinf, length);
560 close(handle);
561
562 RLEWtag=tinf->RLEWtag;
563
564//
565// open the data file
566//
567#ifdef CARMACIZED
568 strcpy(fname, mfilecama);
569 strcat(fname, extension);
570
571 maphandle = open(fname, O_RDONLY | O_BINARY);
572 if (maphandle == -1)
573 CA_CannotOpen(fname);
574#else
575 strcpy(fname,mfilename);
576 strcat(fname,extension);
577
578 maphandle = open(fname, O_RDONLY | O_BINARY);
579 if (maphandle == -1)
580 CA_CannotOpen(fname);
581#endif
582
583//
584// load all map header
585//
586 for (i=0;i<NUMMAPS;i++)
587 {
588 pos = tinf->headeroffsets[i];
589 if (pos<0) // $FFFFFFFF start is a sparse map
590 continue;
591
592 mapheaderseg[i]=(maptype *) malloc(sizeof(maptype));
593 CHECKMALLOCRESULT(mapheaderseg[i]);
594 lseek(maphandle,pos,SEEK_SET);
595 read (maphandle,(memptr)mapheaderseg[i],sizeof(maptype));
596 }
597
598 free(tinf);
599
600//
601// allocate space for 3 64*64 planes
602//
603 for (i=0;i<MAPPLANES;i++)
604 {
605 mapsegs[i]=(word *) malloc(maparea*2);
606 CHECKMALLOCRESULT(mapsegs[i]);
607 }
608}
609
610
611//==========================================================================
612
613
614/*
615======================
616=
617= CAL_SetupAudioFile
618=
619======================
620*/
621
622void CAL_SetupAudioFile (void)
623{
624 char fname[13 + sizeof(DATADIR)];
625
626//
627// load audiohed.ext (offsets for audio file)
628//
629 strcpy(fname,aheadname);
630 strcat(fname,audioext);
631
632 void* ptr;
633 if (!CA_LoadFile(fname, &ptr))
634 CA_CannotOpen(fname);
635 audiostarts = (int32_t*)ptr;
636
637//
638// open the data file
639//
640 strcpy(fname,afilename);
641 strcat(fname,audioext);
642
643 audiohandle = open(fname, O_RDONLY | O_BINARY);
644 if (audiohandle == -1)
645 CA_CannotOpen(fname);
646}
647
648//==========================================================================
649
650
651/*
652======================
653=
654= CA_Startup
655=
656= Open all files and load in headers
657=
658======================
659*/
660
661void CA_Startup (void)
662{
663#ifdef PROFILE
664 unlink ("PROFILE.TXT");
665 profilehandle = open("PROFILE.TXT", O_CREAT | O_WRONLY | O_TEXT);
666#endif
667
668 CAL_SetupMapFile ();
669 CAL_SetupGrFile ();
670 CAL_SetupAudioFile ();
671
672 mapon = -1;
673}
674
675//==========================================================================
676
677
678/*
679======================
680=
681= CA_Shutdown
682=
683= Closes all files
684=
685======================
686*/
687
688void CA_Shutdown (void)
689{
690 int i,start;
691
692 if(maphandle != -1)
693 close(maphandle);
694 if(grhandle != -1)
695 close(grhandle);
696 if(audiohandle != -1)
697 close(audiohandle);
698
699 for(i=0; i<NUMCHUNKS; i++)
700 UNCACHEGRCHUNK(i);
701 free(pictable);
702
703 switch(oldsoundmode)
704 {
705 case sdm_Off:
706 return;
707 case sdm_PC:
708 start = STARTPCSOUNDS;
709 break;
710 case sdm_AdLib:
711 start = STARTADLIBSOUNDS;
712 break;
713 }
714
715 for(i=0; i<NUMSOUNDS; i++,start++)
716 UNCACHEAUDIOCHUNK(start);
717}
718
719//===========================================================================
720
721/*
722======================
723=
724= CA_CacheAudioChunk
725=
726======================
727*/
728
729int32_t CA_CacheAudioChunk (int chunk)
730{
731#ifdef SOUND_ENABLE
732 int32_t pos = audiostarts[chunk];
733 int32_t size = audiostarts[chunk+1]-pos;
734
735 if (audiosegs[chunk])
736 return size; // already in memory
737
738 audiosegs[chunk]=(byte *) malloc(size);
739 CHECKMALLOCRESULT(audiosegs[chunk]);
740
741 lseek(audiohandle,pos,SEEK_SET);
742 read(audiohandle,audiosegs[chunk],size);
743
744 return size;
745#endif
746 return 0;
747}
748
749void CA_CacheAdlibSoundChunk (int chunk)
750{
751#ifdef SOUND_ENABLE
752 int32_t pos = audiostarts[chunk];
753 int32_t size = audiostarts[chunk+1]-pos;
754
755 if (audiosegs[chunk])
756 return; // already in memory
757
758 lseek(audiohandle, pos, SEEK_SET);
759 read(audiohandle, bufferseg, ORIG_ADLIBSOUND_SIZE - 1); // without data[1]
760
761 AdLibSound *sound = (AdLibSound *) malloc(size + sizeof(AdLibSound) - ORIG_ADLIBSOUND_SIZE);
762 CHECKMALLOCRESULT(sound);
763
764 byte *ptr = (byte *) bufferseg;
765 sound->common.length = READLONGWORD(&ptr);
766 sound->common.priority = READWORD(&ptr);
767 sound->inst.mChar = *ptr++;
768 sound->inst.cChar = *ptr++;
769 sound->inst.mScale = *ptr++;
770 sound->inst.cScale = *ptr++;
771 sound->inst.mAttack = *ptr++;
772 sound->inst.cAttack = *ptr++;
773 sound->inst.mSus = *ptr++;
774 sound->inst.cSus = *ptr++;
775 sound->inst.mWave = *ptr++;
776 sound->inst.cWave = *ptr++;
777 sound->inst.nConn = *ptr++;
778 sound->inst.voice = *ptr++;
779 sound->inst.mode = *ptr++;
780 sound->inst.unused[0] = *ptr++;
781 sound->inst.unused[1] = *ptr++;
782 sound->inst.unused[2] = *ptr++;
783 sound->block = *ptr++;
784
785 read(audiohandle, sound->data, size - ORIG_ADLIBSOUND_SIZE + 1); // + 1 because of byte data[1]
786
787 audiosegs[chunk]=(byte *) sound;
788#endif
789}
790
791//===========================================================================
792
793/*
794======================
795=
796= CA_LoadAllSounds
797=
798= Purges all sounds, then loads all new ones (mode switch)
799=
800======================
801*/
802
803void CA_LoadAllSounds (void)
804{
805#ifdef SOUND_ENABLE
806 unsigned start,i;
807
808 switch (oldsoundmode)
809 {
810 case sdm_Off:
811 goto cachein;
812 case sdm_PC:
813 start = STARTPCSOUNDS;
814 break;
815 case sdm_AdLib:
816 start = STARTADLIBSOUNDS;
817 break;
818 }
819
820 for (i=0;i<NUMSOUNDS;i++,start++)
821 UNCACHEAUDIOCHUNK(start);
822
823cachein:
824
825 oldsoundmode = SoundMode;
826
827 switch (SoundMode)
828 {
829 case sdm_Off:
830 start = STARTADLIBSOUNDS; // needed for priorities...
831 break;
832 case sdm_PC:
833 start = STARTPCSOUNDS;
834 break;
835 case sdm_AdLib:
836 start = STARTADLIBSOUNDS;
837 break;
838 }
839
840 if(start == STARTADLIBSOUNDS)
841 {
842 for (i=0;i<NUMSOUNDS;i++,start++)
843 CA_CacheAdlibSoundChunk(start);
844 }
845 else
846 {
847 for (i=0;i<NUMSOUNDS;i++,start++)
848 CA_CacheAudioChunk(start);
849 }
850#endif
851}
852
853//===========================================================================
854
855
856/*
857======================
858=
859= CAL_ExpandGrChunk
860=
861= Does whatever is needed with a pointer to a compressed chunk
862=
863======================
864*/
865
866void CAL_ExpandGrChunk (int chunk, int32_t *source)
867{
868 int32_t expanded;
869
870 if (chunk >= STARTTILE8 && chunk < STARTEXTERNS)
871 {
872 //
873 // expanded sizes of tile8/16/32 are implicit
874 //
875
876#define BLOCK 64
877#define MASKBLOCK 128
878
879 if (chunk<STARTTILE8M) // tile 8s are all in one chunk!
880 expanded = BLOCK*NUMTILE8;
881 else if (chunk<STARTTILE16)
882 expanded = MASKBLOCK*NUMTILE8M;
883 else if (chunk<STARTTILE16M) // all other tiles are one/chunk
884 expanded = BLOCK*4;
885 else if (chunk<STARTTILE32)
886 expanded = MASKBLOCK*4;
887 else if (chunk<STARTTILE32M)
888 expanded = BLOCK*16;
889 else
890 expanded = MASKBLOCK*16;
891 }
892 else
893 {
894 //
895 // everything else has an explicit size longword
896 //
897 expanded = *source++;
898 }
899
900 //
901 // allocate final space, decompress it, and free bigbuffer
902 // Sprites need to have shifts made and various other junk
903 //
904 grsegs[chunk]=(byte *) malloc(expanded);
905 CHECKMALLOCRESULT(grsegs[chunk]);
906 CAL_HuffExpand((byte *) source, grsegs[chunk], expanded, grhuffman);
907}
908
909
910/*
911======================
912=
913= CA_CacheGrChunk
914=
915= Makes sure a given chunk is in memory, loadiing it if needed
916=
917======================
918*/
919
920void CA_CacheGrChunk (int chunk)
921{
922 int32_t pos,compressed;
923 int32_t *source;
924 int next;
925
926 if (grsegs[chunk])
927 return; // already in memory
928
929//
930// load the chunk into a buffer, either the miscbuffer if it fits, or allocate
931// a larger buffer
932//
933 pos = GRFILEPOS(chunk);
934 if (pos<0) // $FFFFFFFF start is a sparse tile
935 return;
936
937 next = chunk +1;
938 while (GRFILEPOS(next) == -1) // skip past any sparse tiles
939 next++;
940
941 compressed = GRFILEPOS(next)-pos;
942
943 lseek(grhandle,pos,SEEK_SET);
944
945 if (compressed<=BUFFERSIZE)
946 {
947 read(grhandle,bufferseg,compressed);
948 source = bufferseg;
949 }
950 else
951 {
952 source = (int32_t *) malloc(compressed);
953 CHECKMALLOCRESULT(source);
954 read(grhandle,source,compressed);
955 }
956
957 CAL_ExpandGrChunk (chunk,source);
958
959 if (compressed>BUFFERSIZE)
960 free(source);
961}
962
963
964
965//==========================================================================
966
967/*
968======================
969=
970= CA_CacheScreen
971=
972= Decompresses a chunk from disk straight onto the screen
973=
974======================
975*/
976
977void CA_CacheScreen (int chunk)
978{
979 int32_t pos,compressed,expanded;
980 memptr bigbufferseg;
981 int32_t *source;
982 int next;
983
984//
985// load the chunk into a buffer
986//
987 pos = GRFILEPOS(chunk);
988 next = chunk +1;
989 while (GRFILEPOS(next) == -1) // skip past any sparse tiles
990 next++;
991 compressed = GRFILEPOS(next)-pos;
992
993 lseek(grhandle,pos,SEEK_SET);
994
995 bigbufferseg=malloc(compressed);
996 CHECKMALLOCRESULT(bigbufferseg);
997 read(grhandle,bigbufferseg,compressed);
998 source = (int32_t *) bigbufferseg;
999
1000 expanded = *source++;
1001
1002//
1003// allocate final space, decompress it, and free bigbuffer
1004// Sprites need to have shifts made and various other junk
1005//
1006 byte *pic = (byte *) malloc(64000);
1007 CHECKMALLOCRESULT(pic);
1008 CAL_HuffExpand((byte *) source, pic, expanded, grhuffman);
1009
1010 byte *vbuf = LOCK();
1011 for(int y = 0, scy = 0; y < 200; y++, scy += scaleFactor)
1012 {
1013 for(int x = 0, scx = 0; x < 320; x++, scx += scaleFactor)
1014 {
1015 byte col = pic[(y * 80 + (x >> 2)) + (x & 3) * 80 * 200];
1016 for(unsigned i = 0; i < scaleFactor; i++)
1017 for(unsigned j = 0; j < scaleFactor; j++)
1018 vbuf[(scy + i) * curPitch + scx + j] = col;
1019 }
1020 }
1021 UNLOCK();
1022 free(pic);
1023 free(bigbufferseg);
1024}
1025
1026//==========================================================================
1027
1028/*
1029======================
1030=
1031= CA_CacheMap
1032=
1033= WOLF: This is specialized for a 64*64 map size
1034=
1035======================
1036*/
1037
1038void CA_CacheMap (int mapnum)
1039{
1040 int32_t pos,compressed;
1041 int plane;
1042 word *dest;
1043 memptr bigbufferseg;
1044 unsigned size;
1045 word *source;
1046#ifdef CARMACIZED
1047 word *buffer2seg;
1048 int32_t expanded;
1049#endif
1050
1051 mapon = mapnum;
1052
1053//
1054// load the planes into the allready allocated buffers
1055//
1056 size = maparea*2;
1057
1058 for (plane = 0; plane<MAPPLANES; plane++)
1059 {
1060 pos = mapheaderseg[mapnum]->planestart[plane];
1061 compressed = mapheaderseg[mapnum]->planelength[plane];
1062
1063 dest = mapsegs[plane];
1064
1065 lseek(maphandle,pos,SEEK_SET);
1066 if (compressed<=BUFFERSIZE)
1067 source = (word *) bufferseg;
1068 else
1069 {
1070 bigbufferseg=malloc(compressed);
1071 CHECKMALLOCRESULT(bigbufferseg);
1072 source = (word *) bigbufferseg;
1073 }
1074
1075 read(maphandle,source,compressed);
1076#ifdef CARMACIZED
1077 //
1078 // unhuffman, then unRLEW
1079 // The huffman'd chunk has a two byte expanded length first
1080 // The resulting RLEW chunk also does, even though it's not really
1081 // needed
1082 //
1083 expanded = *source;
1084 source++;
1085 buffer2seg = (word *) malloc(expanded);
1086 CHECKMALLOCRESULT(buffer2seg);
1087 CAL_CarmackExpand((byte *) source, buffer2seg,expanded);
1088 CA_RLEWexpand(buffer2seg+1,dest,size,RLEWtag);
1089 free(buffer2seg);
1090
1091#else
1092 //
1093 // unRLEW, skipping expanded length
1094 //
1095 CA_RLEWexpand (source+1,dest,size,RLEWtag);
1096#endif
1097
1098 if (compressed>BUFFERSIZE)
1099 free(bigbufferseg);
1100 }
1101}
1102
1103//===========================================================================
1104
1105void CA_CannotOpen(const char *string)
1106{
1107 char str[30];
1108
1109 strcpy(str,"Can't open ");
1110 strcat(str,string);
1111 strcat(str,"!\n");
1112 Quit (str);
1113}
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 @@
1#ifndef __ID_CA__
2#define __ID_CA__
3
4//===========================================================================
5
6#define NUMMAPS 60
7#ifdef USE_FLOORCEILINGTEX
8 #define MAPPLANES 3
9#else
10 #define MAPPLANES 2
11#endif
12
13#define UNCACHEGRCHUNK(chunk) {if(grsegs[chunk]) {free(grsegs[chunk]); grsegs[chunk]=NULL;}}
14#define UNCACHEAUDIOCHUNK(chunk) {if(audiosegs[chunk]) {free(audiosegs[chunk]); audiosegs[chunk]=NULL;}}
15
16//===========================================================================
17
18typedef struct
19{
20 int32_t planestart[3];
21 word planelength[3];
22 word width,height;
23 char name[16];
24} maptype;
25
26//===========================================================================
27
28extern int mapon;
29
30extern word *mapsegs[MAPPLANES];
31extern byte *audiosegs[NUMSNDCHUNKS];
32extern byte *grsegs[NUMCHUNKS];
33
34extern char extension[5];
35extern char graphext[5];
36extern char audioext[5];
37
38//===========================================================================
39
40boolean CA_LoadFile (const char *filename, memptr *ptr);
41boolean CA_WriteFile (const char *filename, void *ptr, int32_t length);
42
43int32_t CA_RLEWCompress (word *source, int32_t length, word *dest, word rlewtag);
44
45void CA_RLEWexpand (word *source, word *dest, int32_t length, word rlewtag);
46
47void CA_Startup (void);
48void CA_Shutdown (void);
49
50int32_t CA_CacheAudioChunk (int chunk);
51void CA_LoadAllSounds (void);
52
53void CA_CacheGrChunk (int chunk);
54void CA_CacheMap (int mapnum);
55
56void CA_CacheScreen (int chunk);
57
58void CA_CannotOpen(const char *name);
59
60#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 @@
1//
2// ID Engine
3// ID_IN.c - Input Manager
4// v1.0d1
5// By Jason Blochowiak
6//
7
8//
9// This module handles dealing with the various input devices
10//
11// Depends on: Memory Mgr (for demo recording), Sound Mgr (for timing stuff),
12// User Mgr (for command line parms)
13//
14// Globals:
15// LastScan - The keyboard scan code of the last key pressed
16// LastASCII - The ASCII value of the last key pressed
17// DEBUG - there are more globals
18//
19
20#include "wl_def.h"
21
22
23/*
24=============================================================================
25
26 GLOBAL VARIABLES
27
28=============================================================================
29*/
30
31
32//
33// configuration variables
34//
35boolean MousePresent;
36boolean forcegrabmouse;
37
38
39// Global variables
40volatile boolean Keyboard[SDLK_LAST];
41volatile boolean Paused;
42volatile char LastASCII;
43volatile ScanCode LastScan;
44
45//KeyboardDef KbdDefs = {0x1d,0x38,0x47,0x48,0x49,0x4b,0x4d,0x4f,0x50,0x51};
46static KeyboardDef KbdDefs = {
47 sc_Return, // button0
48 sc_Alt, // button1
49 sc_Home, // upleft
50 sc_UpArrow, // up
51 sc_PgUp, // upright
52 sc_LeftArrow, // left
53 sc_RightArrow, // right
54 sc_End, // downleft
55 sc_DownArrow, // down
56 sc_PgDn // downright
57};
58
59static SDL_Joystick *Joystick;
60int JoyNumButtons;
61static int JoyNumHats;
62
63static bool GrabInput = false;
64
65/*
66=============================================================================
67
68 LOCAL VARIABLES
69
70=============================================================================
71*/
72byte ASCIINames[] = // Unshifted ASCII for scan codes // TODO: keypad
73{
74// 0 1 2 3 4 5 6 7 8 9 A B C D E F
75 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,8 ,9 ,0 ,0 ,0 ,13 ,0 ,0 , // 0
76 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,27 ,0 ,0 ,0 , // 1
77 ' ',0 ,0 ,0 ,0 ,0 ,0 ,39 ,0 ,0 ,'*','+',',','-','.','/', // 2
78 '0','1','2','3','4','5','6','7','8','9',0 ,';',0 ,'=',0 ,0 , // 3
79 '`','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o', // 4
80 'p','q','r','s','t','u','v','w','x','y','z','[',92 ,']',0 ,0 , // 5
81 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 6
82 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 // 7
83};
84byte ShiftNames[] = // Shifted ASCII for scan codes
85{
86// 0 1 2 3 4 5 6 7 8 9 A B C D E F
87 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,8 ,9 ,0 ,0 ,0 ,13 ,0 ,0 , // 0
88 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,27 ,0 ,0 ,0 , // 1
89 ' ',0 ,0 ,0 ,0 ,0 ,0 ,34 ,0 ,0 ,'*','+','<','_','>','?', // 2
90 ')','!','@','#','$','%','^','&','*','(',0 ,':',0 ,'+',0 ,0 , // 3
91 '~','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O', // 4
92 'P','Q','R','S','T','U','V','W','X','Y','Z','{','|','}',0 ,0 , // 5
93 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 6
94 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 // 7
95};
96byte SpecialNames[] = // ASCII for 0xe0 prefixed codes
97{
98// 0 1 2 3 4 5 6 7 8 9 A B C D E F
99 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 0
100 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,13 ,0 ,0 ,0 , // 1
101 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 2
102 0 ,0 ,0 ,0 ,0 ,'/',0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 3
103 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 4
104 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 5
105 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 6
106 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 // 7
107};
108
109
110static boolean IN_Started;
111
112static Direction DirTable[] = // Quick lookup for total direction
113{
114 dir_NorthWest, dir_North, dir_NorthEast,
115 dir_West, dir_None, dir_East,
116 dir_SouthWest, dir_South, dir_SouthEast
117};
118
119
120///////////////////////////////////////////////////////////////////////////
121//
122// INL_GetMouseButtons() - Gets the status of the mouse buttons from the
123// mouse driver
124//
125///////////////////////////////////////////////////////////////////////////
126static int
127INL_GetMouseButtons(void)
128{
129 int buttons = SDL_GetMouseState(NULL, NULL);
130 int middlePressed = buttons & SDL_BUTTON(SDL_BUTTON_MIDDLE);
131 int rightPressed = buttons & SDL_BUTTON(SDL_BUTTON_RIGHT);
132 buttons &= ~(SDL_BUTTON(SDL_BUTTON_MIDDLE) | SDL_BUTTON(SDL_BUTTON_RIGHT));
133 if(middlePressed) buttons |= 1 << 2;
134 if(rightPressed) buttons |= 1 << 1;
135
136 return buttons;
137}
138
139///////////////////////////////////////////////////////////////////////////
140//
141// IN_GetJoyDelta() - Returns the relative movement of the specified
142// joystick (from +/-127)
143//
144///////////////////////////////////////////////////////////////////////////
145void IN_GetJoyDelta(int *dx,int *dy)
146{
147 if(!Joystick)
148 {
149 *dx = *dy = 0;
150 return;
151 }
152
153 SDL_JoystickUpdate();
154#ifdef _arch_dreamcast
155 int x = 0;
156 int y = 0;
157#else
158 int x = SDL_JoystickGetAxis(Joystick, 0) >> 8;
159 int y = SDL_JoystickGetAxis(Joystick, 1) >> 8;
160#endif
161
162 if(param_joystickhat != -1)
163 {
164 uint8_t hatState = SDL_JoystickGetHat(Joystick, param_joystickhat);
165 if(hatState & SDL_HAT_RIGHT)
166 x += 127;
167 else if(hatState & SDL_HAT_LEFT)
168 x -= 127;
169 if(hatState & SDL_HAT_DOWN)
170 y += 127;
171 else if(hatState & SDL_HAT_UP)
172 y -= 127;
173
174 if(x < -128) x = -128;
175 else if(x > 127) x = 127;
176
177 if(y < -128) y = -128;
178 else if(y > 127) y = 127;
179 }
180
181 *dx = x;
182 *dy = y;
183}
184
185///////////////////////////////////////////////////////////////////////////
186//
187// IN_GetJoyFineDelta() - Returns the relative movement of the specified
188// joystick without dividing the results by 256 (from +/-127)
189//
190///////////////////////////////////////////////////////////////////////////
191void IN_GetJoyFineDelta(int *dx, int *dy)
192{
193 if(!Joystick)
194 {
195 *dx = 0;
196 *dy = 0;
197 return;
198 }
199
200 SDL_JoystickUpdate();
201 int x = SDL_JoystickGetAxis(Joystick, 0);
202 int y = SDL_JoystickGetAxis(Joystick, 1);
203
204 if(x < -128) x = -128;
205 else if(x > 127) x = 127;
206
207 if(y < -128) y = -128;
208 else if(y > 127) y = 127;
209
210 *dx = x;
211 *dy = y;
212}
213
214/*
215===================
216=
217= IN_JoyButtons
218=
219===================
220*/
221
222int IN_JoyButtons()
223{
224 if(!Joystick) return 0;
225
226 SDL_JoystickUpdate();
227
228 int res = 0;
229 for(int i = 0; i < JoyNumButtons && i < 32; i++)
230 res |= SDL_JoystickGetButton(Joystick, i) << i;
231 return res;
232}
233
234boolean IN_JoyPresent()
235{
236 return Joystick != NULL;
237}
238
239static void processEvent(SDL_Event *event)
240{
241 switch (event->type)
242 {
243 // exit if the window is closed
244 case SDL_QUIT:
245 Quit(NULL);
246
247 // check for keypresses
248 case SDL_KEYDOWN:
249 {
250 if(event->key.keysym.sym==SDLK_SCROLLOCK || event->key.keysym.sym==SDLK_F12)
251 {
252 GrabInput = !GrabInput;
253 SDL_WM_GrabInput(GrabInput ? SDL_GRAB_ON : SDL_GRAB_OFF);
254 return;
255 }
256
257 LastScan = event->key.keysym.sym;
258 SDLMod mod = SDL_GetModState();
259 if(Keyboard[sc_Alt])
260 {
261 if(LastScan==SDLK_F4)
262 Quit(NULL);
263 }
264
265 if(LastScan == SDLK_KP_ENTER) LastScan = SDLK_RETURN;
266 else if(LastScan == SDLK_RSHIFT) LastScan = SDLK_LSHIFT;
267 else if(LastScan == SDLK_RALT) LastScan = SDLK_LALT;
268 else if(LastScan == SDLK_RCTRL) LastScan = SDLK_LCTRL;
269 else
270 {
271 if((mod & KMOD_NUM) == 0)
272 {
273 switch(LastScan)
274 {
275 case SDLK_KP2: LastScan = SDLK_DOWN; break;
276 case SDLK_KP4: LastScan = SDLK_LEFT; break;
277 case SDLK_KP6: LastScan = SDLK_RIGHT; break;
278 case SDLK_KP8: LastScan = SDLK_UP; break;
279 }
280 }
281 }
282
283 int sym = LastScan;
284 if(sym >= 'a' && sym <= 'z')
285 sym -= 32; // convert to uppercase
286
287 if(mod & (KMOD_SHIFT | KMOD_CAPS))
288 {
289 if(sym < lengthof(ShiftNames) && ShiftNames[sym])
290 LastASCII = ShiftNames[sym];
291 }
292 else
293 {
294 if(sym < lengthof(ASCIINames) && ASCIINames[sym])
295 LastASCII = ASCIINames[sym];
296 }
297 if(LastScan<SDLK_LAST)
298 {
299 LOGF("setting key %d", LastScan);
300 Keyboard[LastScan] = 1;
301 }
302 if(LastScan == SDLK_PAUSE)
303 Paused = true;
304 break;
305 }
306
307 case SDL_KEYUP:
308 {
309 int key = event->key.keysym.sym;
310 if(key == SDLK_KP_ENTER) key = SDLK_RETURN;
311 else if(key == SDLK_RSHIFT) key = SDLK_LSHIFT;
312 else if(key == SDLK_RALT) key = SDLK_LALT;
313 else if(key == SDLK_RCTRL) key = SDLK_LCTRL;
314 else
315 {
316 if((SDL_GetModState() & KMOD_NUM) == 0)
317 {
318 switch(key)
319 {
320 case SDLK_KP2: key = SDLK_DOWN; break;
321 case SDLK_KP4: key = SDLK_LEFT; break;
322 case SDLK_KP6: key = SDLK_RIGHT; break;
323 case SDLK_KP8: key = SDLK_UP; break;
324 }
325 }
326 }
327
328 if(key<SDLK_LAST)
329 Keyboard[key] = 0;
330 break;
331 }
332
333#if defined(GP2X)
334 case SDL_JOYBUTTONDOWN:
335 GP2X_ButtonDown(event->jbutton.button);
336 break;
337
338 case SDL_JOYBUTTONUP:
339 GP2X_ButtonUp(event->jbutton.button);
340 break;
341#endif
342 }
343}
344
345void IN_WaitAndProcessEvents()
346{
347 SDL_Event event;
348 if(!SDL_WaitEvent(&event)) return;
349 do
350 {
351 processEvent(&event);
352 }
353 while(SDL_PollEvent(&event));
354}
355
356void IN_ProcessEvents()
357{
358 SDL_Event event;
359
360 while (SDL_PollEvent(&event))
361 {
362 processEvent(&event);
363 }
364}
365
366
367///////////////////////////////////////////////////////////////////////////
368//
369// IN_Startup() - Starts up the Input Mgr
370//
371///////////////////////////////////////////////////////////////////////////
372void
373IN_Startup(void)
374{
375 if (IN_Started)
376 return;
377
378 IN_ClearKeysDown();
379
380 if(param_joystickindex >= 0 && param_joystickindex < SDL_NumJoysticks())
381 {
382 Joystick = SDL_JoystickOpen(param_joystickindex);
383 if(Joystick)
384 {
385 JoyNumButtons = SDL_JoystickNumButtons(Joystick);
386 if(JoyNumButtons > 32) JoyNumButtons = 32; // only up to 32 buttons are supported
387 JoyNumHats = SDL_JoystickNumHats(Joystick);
388 if(param_joystickhat < -1 || param_joystickhat >= JoyNumHats)
389 Quit("The joystickhat param must be between 0 and %i!", JoyNumHats - 1);
390 }
391 }
392
393 SDL_EventState(SDL_MOUSEMOTION, SDL_IGNORE);
394
395 if(fullscreen || forcegrabmouse)
396 {
397 GrabInput = true;
398 SDL_WM_GrabInput(SDL_GRAB_ON);
399 }
400
401 // I didn't find a way to ask libSDL whether a mouse is present, yet...
402#if defined(GP2X)
403 MousePresent = false;
404#elif defined(_arch_dreamcast)
405 MousePresent = DC_MousePresent();
406#else
407 MousePresent = true;
408#endif
409
410 IN_Started = true;
411}
412
413///////////////////////////////////////////////////////////////////////////
414//
415// IN_Shutdown() - Shuts down the Input Mgr
416//
417///////////////////////////////////////////////////////////////////////////
418void
419IN_Shutdown(void)
420{
421 if (!IN_Started)
422 return;
423
424 if(Joystick)
425 SDL_JoystickClose(Joystick);
426
427 IN_Started = false;
428}
429
430///////////////////////////////////////////////////////////////////////////
431//
432// IN_ClearKeysDown() - Clears the keyboard array
433//
434///////////////////////////////////////////////////////////////////////////
435void
436IN_ClearKeysDown(void)
437{
438 LastScan = sc_None;
439 LastASCII = key_None;
440 memset ((void *) Keyboard,0,sizeof(Keyboard));
441}
442
443
444///////////////////////////////////////////////////////////////////////////
445//
446// IN_ReadControl() - Reads the device associated with the specified
447// player and fills in the control info struct
448//
449///////////////////////////////////////////////////////////////////////////
450void
451IN_ReadControl(int player,ControlInfo *info)
452{
453 word buttons;
454 int dx,dy;
455 Motion mx,my;
456
457 dx = dy = 0;
458 mx = my = motion_None;
459 buttons = 0;
460
461 IN_ProcessEvents();
462
463 if (Keyboard[KbdDefs.upleft])
464 mx = motion_Left,my = motion_Up;
465 else if (Keyboard[KbdDefs.upright])
466 mx = motion_Right,my = motion_Up;
467 else if (Keyboard[KbdDefs.downleft])
468 mx = motion_Left,my = motion_Down;
469 else if (Keyboard[KbdDefs.downright])
470 mx = motion_Right,my = motion_Down;
471
472 if (Keyboard[KbdDefs.up])
473 my = motion_Up;
474 else if (Keyboard[KbdDefs.down])
475 my = motion_Down;
476
477 if (Keyboard[KbdDefs.left])
478 mx = motion_Left;
479 else if (Keyboard[KbdDefs.right])
480 mx = motion_Right;
481
482 if (Keyboard[KbdDefs.button0])
483 buttons += 1 << 0;
484 if (Keyboard[KbdDefs.button1])
485 buttons += 1 << 1;
486
487 dx = mx * 127;
488 dy = my * 127;
489
490 info->x = dx;
491 info->xaxis = mx;
492 info->y = dy;
493 info->yaxis = my;
494 info->button0 = (buttons & (1 << 0)) != 0;
495 info->button1 = (buttons & (1 << 1)) != 0;
496 info->button2 = (buttons & (1 << 2)) != 0;
497 info->button3 = (buttons & (1 << 3)) != 0;
498 info->dir = DirTable[((my + 1) * 3) + (mx + 1)];
499}
500
501///////////////////////////////////////////////////////////////////////////
502//
503// IN_WaitForKey() - Waits for a scan code, then clears LastScan and
504// returns the scan code
505//
506///////////////////////////////////////////////////////////////////////////
507ScanCode
508IN_WaitForKey(void)
509{
510 ScanCode result;
511
512 while ((result = LastScan)==0)
513 IN_WaitAndProcessEvents();
514 LastScan = 0;
515 return(result);
516}
517
518///////////////////////////////////////////////////////////////////////////
519//
520// IN_WaitForASCII() - Waits for an ASCII char, then clears LastASCII and
521// returns the ASCII value
522//
523///////////////////////////////////////////////////////////////////////////
524char
525IN_WaitForASCII(void)
526{
527 char result;
528
529 while ((result = LastASCII)==0)
530 IN_WaitAndProcessEvents();
531 LastASCII = '\0';
532 return(result);
533}
534
535///////////////////////////////////////////////////////////////////////////
536//
537// IN_Ack() - waits for a button or key press. If a button is down, upon
538// calling, it must be released for it to be recognized
539//
540///////////////////////////////////////////////////////////////////////////
541
542boolean btnstate[NUMBUTTONS];
543
544void IN_StartAck(void)
545{
546 IN_ProcessEvents();
547//
548// get initial state of everything
549//
550 IN_ClearKeysDown();
551 memset(btnstate, 0, sizeof(btnstate));
552
553 int buttons = IN_JoyButtons() << 4;
554
555 if(MousePresent)
556 buttons |= IN_MouseButtons();
557
558 for(int i = 0; i < NUMBUTTONS; i++, buttons >>= 1)
559 if(buttons & 1)
560 btnstate[i] = true;
561}
562
563
564boolean IN_CheckAck (void)
565{
566 IN_ProcessEvents();
567//
568// see if something has been pressed
569//
570 if(LastScan)
571 return true;
572
573 int buttons = IN_JoyButtons() << 4;
574
575 if(MousePresent)
576 buttons |= IN_MouseButtons();
577
578 for(int i = 0; i < NUMBUTTONS; i++, buttons >>= 1)
579 {
580 if(buttons & 1)
581 {
582 if(!btnstate[i])
583 {
584 // Wait until button has been released
585 do
586 {
587 IN_WaitAndProcessEvents();
588 buttons = IN_JoyButtons() << 4;
589
590 if(MousePresent)
591 buttons |= IN_MouseButtons();
592 }
593 while(buttons & (1 << i));
594
595 return true;
596 }
597 }
598 else
599 btnstate[i] = false;
600 }
601
602 return false;
603}
604
605
606void IN_Ack (void)
607{
608 IN_StartAck ();
609
610 do
611 {
612 IN_WaitAndProcessEvents();
613 }
614 while(!IN_CheckAck ());
615}
616
617
618///////////////////////////////////////////////////////////////////////////
619//
620// IN_UserInput() - Waits for the specified delay time (in ticks) or the
621// user pressing a key or a mouse button. If the clear flag is set, it
622// then either clears the key or waits for the user to let the mouse
623// button up.
624//
625///////////////////////////////////////////////////////////////////////////
626boolean IN_UserInput(longword delay)
627{
628 longword lasttime;
629
630 lasttime = GetTimeCount();
631 IN_StartAck ();
632 do
633 {
634 IN_ProcessEvents();
635 if (IN_CheckAck())
636 return true;
637 SDL_Delay(5);
638 } while (GetTimeCount() - lasttime < delay);
639 return(false);
640}
641
642//===========================================================================
643
644/*
645===================
646=
647= IN_MouseButtons
648=
649===================
650*/
651int IN_MouseButtons (void)
652{
653 if (MousePresent)
654 return INL_GetMouseButtons();
655 else
656 return 0;
657}
658
659bool IN_IsInputGrabbed()
660{
661 return GrabInput;
662}
663
664void IN_CenterMouse()
665{
666 SDL_WarpMouse(screenWidth / 2, screenHeight / 2);
667}
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 @@
1//
2// ID Engine
3// ID_IN.h - Header file for Input Manager
4// v1.0d1
5// By Jason Blochowiak
6//
7
8#ifndef __ID_IN__
9#define __ID_IN__
10
11#ifdef __DEBUG__
12#define __DEBUG_InputMgr__
13#endif
14
15typedef int ScanCode;
16#define sc_None 0
17#define sc_Bad 0xff
18#define sc_Return SDLK_RETURN
19#define sc_Enter sc_Return
20#define sc_Escape SDLK_ESCAPE
21#define sc_Space SDLK_SPACE
22#define sc_BackSpace SDLK_BACKSPACE
23#define sc_Tab SDLK_TAB
24#define sc_Alt SDLK_LALT
25#define sc_Control SDLK_LCTRL
26#define sc_CapsLock SDLK_CAPSLOCK
27#define sc_LShift SDLK_LSHIFT
28#define sc_RShift SDLK_RSHIFT
29#define sc_UpArrow SDLK_UP
30#define sc_DownArrow SDLK_DOWN
31#define sc_LeftArrow SDLK_LEFT
32#define sc_RightArrow SDLK_RIGHT
33#define sc_Insert SDLK_INSERT
34#define sc_Delete SDLK_DELETE
35#define sc_Home SDLK_HOME
36#define sc_End SDLK_END
37#define sc_PgUp SDLK_PAGEUP
38#define sc_PgDn SDLK_PAGEDOWN
39#define sc_F1 SDLK_F1
40#define sc_F2 SDLK_F2
41#define sc_F3 SDLK_F3
42#define sc_F4 SDLK_F4
43#define sc_F5 SDLK_F5
44#define sc_F6 SDLK_F6
45#define sc_F7 SDLK_F7
46#define sc_F8 SDLK_F8
47#define sc_F9 SDLK_F9
48#define sc_F10 SDLK_F10
49#define sc_F11 SDLK_F11
50#define sc_F12 SDLK_F12
51
52#define sc_ScrollLock SDLK_SCROLLOCK
53#define sc_PrintScreen SDLK_PRINT
54
55#define sc_1 SDLK_1
56#define sc_2 SDLK_2
57#define sc_3 SDLK_3
58#define sc_4 SDLK_4
59#define sc_5 SDLK_5
60#define sc_6 SDLK_6
61#define sc_7 SDLK_7
62#define sc_8 SDLK_8
63#define sc_9 SDLK_9
64#define sc_0 SDLK_0
65
66#define sc_A SDLK_a
67#define sc_B SDLK_b
68#define sc_C SDLK_c
69#define sc_D SDLK_d
70#define sc_E SDLK_e
71#define sc_F SDLK_f
72#define sc_G SDLK_g
73#define sc_H SDLK_h
74#define sc_I SDLK_i
75#define sc_J SDLK_j
76#define sc_K SDLK_k
77#define sc_L SDLK_l
78#define sc_M SDLK_m
79#define sc_N SDLK_n
80#define sc_O SDLK_o
81#define sc_P SDLK_p
82#define sc_Q SDLK_q
83#define sc_R SDLK_r
84#define sc_S SDLK_s
85#define sc_T SDLK_t
86#define sc_U SDLK_u
87#define sc_V SDLK_v
88#define sc_W SDLK_w
89#define sc_X SDLK_x
90#define sc_Y SDLK_y
91#define sc_Z SDLK_z
92
93#define key_None 0
94
95typedef enum {
96 demo_Off,demo_Record,demo_Playback,demo_PlayDone
97 } Demo;
98typedef enum {
99 ctrl_Keyboard,
100 ctrl_Keyboard1 = ctrl_Keyboard,ctrl_Keyboard2,
101 ctrl_Joystick,
102 ctrl_Joystick1 = ctrl_Joystick,ctrl_Joystick2,
103 ctrl_Mouse
104 } ControlType;
105typedef enum {
106 motion_Left = -1,motion_Up = -1,
107 motion_None = 0,
108 motion_Right = 1,motion_Down = 1
109 } Motion;
110typedef enum {
111 dir_North,dir_NorthEast,
112 dir_East,dir_SouthEast,
113 dir_South,dir_SouthWest,
114 dir_West,dir_NorthWest,
115 dir_None
116 } Direction;
117typedef struct {
118 boolean button0,button1,button2,button3;
119 short x,y;
120 Motion xaxis,yaxis;
121 Direction dir;
122 } CursorInfo;
123typedef CursorInfo ControlInfo;
124typedef struct {
125 ScanCode button0,button1,
126 upleft, up, upright,
127 left, right,
128 downleft, down, downright;
129 } KeyboardDef;
130typedef struct {
131 word joyMinX,joyMinY,
132 threshMinX,threshMinY,
133 threshMaxX,threshMaxY,
134 joyMaxX,joyMaxY,
135 joyMultXL,joyMultYL,
136 joyMultXH,joyMultYH;
137 } JoystickDef;
138// Global variables
139extern volatile boolean Keyboard[];
140extern boolean MousePresent;
141extern volatile boolean Paused;
142extern volatile char LastASCII;
143extern volatile ScanCode LastScan;
144extern int JoyNumButtons;
145extern boolean forcegrabmouse;
146
147
148// Function prototypes
149#define IN_KeyDown(code) (Keyboard[(code)])
150#define IN_ClearKey(code) {Keyboard[code] = false;\
151 if (code == LastScan) LastScan = sc_None;}
152
153// DEBUG - put names in prototypes
154extern void IN_Startup(void),IN_Shutdown(void);
155extern void IN_ClearKeysDown(void);
156extern void IN_ReadControl(int,ControlInfo *);
157extern void IN_GetJoyAbs(word joy,word *xp,word *yp);
158extern void IN_SetupJoy(word joy,word minx,word maxx,
159 word miny,word maxy);
160extern void IN_StopDemo(void),IN_FreeDemoBuffer(void),
161 IN_Ack(void);
162extern boolean IN_UserInput(longword delay);
163extern char IN_WaitForASCII(void);
164extern ScanCode IN_WaitForKey(void);
165extern word IN_GetJoyButtonsDB(word joy);
166extern const char *IN_GetScanName(ScanCode);
167
168void IN_WaitAndProcessEvents();
169void IN_ProcessEvents();
170
171int IN_MouseButtons (void);
172
173boolean IN_JoyPresent();
174void IN_SetJoyCurrent(int joyIndex);
175int IN_JoyButtons (void);
176void IN_GetJoyDelta(int *dx,int *dy);
177void IN_GetJoyFineDelta(int *dx, int *dy);
178
179void IN_StartAck(void);
180boolean IN_CheckAck (void);
181bool IN_IsInputGrabbed();
182void IN_CenterMouse();
183#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 @@
1#include "wl_def.h"
2
3int ChunksInFile;
4int PMSpriteStart;
5int PMSoundStart;
6
7bool PMSoundInfoPagePadded = false;
8
9// holds the whole VSWAP
10uint32_t *PMPageData;
11size_t PMPageDataSize;
12
13// ChunksInFile+1 pointers to page starts.
14// The last pointer points one byte after the last page.
15uint8_t **PMPages;
16
17void PM_Startup()
18{
19 char fname[13 + sizeof(DATADIR)] = DATADIR "vswap.";
20 strcat(fname,extension);
21
22 FILE *file = fopen(fname,"rb");
23 if(!file)
24 CA_CannotOpen(fname);
25
26 ChunksInFile = 0;
27 fread(&ChunksInFile, sizeof(word), 1, file);
28 PMSpriteStart = 0;
29 fread(&PMSpriteStart, sizeof(word), 1, file);
30 PMSoundStart = 0;
31 fread(&PMSoundStart, sizeof(word), 1, file);
32
33 uint32_t* pageOffsets = (uint32_t *) malloc((ChunksInFile + 1) * sizeof(int32_t));
34 CHECKMALLOCRESULT(pageOffsets);
35 fread(pageOffsets, sizeof(uint32_t), ChunksInFile, file);
36
37 word *pageLengths = (word *) malloc(ChunksInFile * sizeof(word));
38 CHECKMALLOCRESULT(pageLengths);
39 fread(pageLengths, sizeof(word), ChunksInFile, file);
40
41 fseek(file, 0, SEEK_END);
42 long fileSize = ftell(file);
43 long pageDataSize = fileSize - pageOffsets[0];
44 if(pageDataSize > (size_t) -1)
45 Quit("The page file \"%s\" is too large!", fname);
46
47 pageOffsets[ChunksInFile] = fileSize;
48
49 uint32_t dataStart = pageOffsets[0];
50 int i;
51
52 // Check that all pageOffsets are valid
53 for(i = 0; i < ChunksInFile; i++)
54 {
55 if(!pageOffsets[i]) continue; // sparse page
56 if(pageOffsets[i] < dataStart || pageOffsets[i] >= (size_t) fileSize)
57 Quit("Illegal page offset for page %i: %u (filesize: %u)",
58 i, pageOffsets[i], fileSize);
59 }
60
61 // Calculate total amount of padding needed for sprites and sound info page
62 int alignPadding = 0;
63 for(i = PMSpriteStart; i < PMSoundStart; i++)
64 {
65 if(!pageOffsets[i]) continue; // sparse page
66 uint32_t offs = pageOffsets[i] - dataStart + alignPadding;
67 if(offs & 1)
68 alignPadding++;
69 }
70
71 if((pageOffsets[ChunksInFile - 1] - dataStart + alignPadding) & 1)
72 alignPadding++;
73
74 PMPageDataSize = (size_t) pageDataSize + alignPadding;
75 PMPageData = (uint32_t *) malloc(PMPageDataSize);
76 CHECKMALLOCRESULT(PMPageData);
77
78 PMPages = (uint8_t **) malloc((ChunksInFile + 1) * sizeof(uint8_t *));
79 CHECKMALLOCRESULT(PMPages);
80
81 // Load pages and initialize PMPages pointers
82 uint8_t *ptr = (uint8_t *) PMPageData;
83 for(i = 0; i < ChunksInFile; i++)
84 {
85 if(i >= PMSpriteStart && i < PMSoundStart || i == ChunksInFile - 1)
86 {
87 size_t offs = ptr - (uint8_t *) PMPageData;
88
89 // pad with zeros to make it 2-byte aligned
90 if(offs & 1)
91 {
92 *ptr++ = 0;
93 if(i == ChunksInFile - 1) PMSoundInfoPagePadded = true;
94 }
95 }
96
97 PMPages[i] = ptr;
98
99 if(!pageOffsets[i])
100 continue; // sparse page
101
102 // Use specified page length, when next page is sparse page.
103 // Otherwise, calculate size from the offset difference between this and the next page.
104 uint32_t size;
105 if(!pageOffsets[i + 1]) size = pageLengths[i];
106 else size = pageOffsets[i + 1] - pageOffsets[i];
107
108 fseek(file, pageOffsets[i], SEEK_SET);
109 fread(ptr, 1, size, file);
110 ptr += size;
111 }
112
113 // last page points after page buffer
114 PMPages[ChunksInFile] = ptr;
115
116 free(pageLengths);
117 free(pageOffsets);
118 fclose(file);
119}
120
121void PM_Shutdown()
122{
123 free(PMPages);
124 free(PMPageData);
125}
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 @@
1#ifndef __ID_PM__
2#define __ID_PM__
3
4#ifdef USE_HIRES
5#define PMPageSize 16384
6#else
7#define PMPageSize 4096
8#endif
9
10extern int ChunksInFile;
11extern int PMSpriteStart;
12extern int PMSoundStart;
13
14extern bool PMSoundInfoPagePadded;
15
16// ChunksInFile+1 pointers to page starts.
17// The last pointer points one byte after the last page.
18extern uint8_t **PMPages;
19
20void PM_Startup();
21void PM_Shutdown();
22
23static uint32_t PM_GetPageSize(int page)
24{
25 if(page < 0 || page >= ChunksInFile)
26 Quit("PM_GetPageSize: Tried to access illegal page: %i", page);
27 return (uint32_t) (PMPages[page + 1] - PMPages[page]);
28}
29
30static uint8_t *PM_GetPage(int page)
31{
32 if(page < 0 || page >= ChunksInFile)
33 Quit("PM_GetPage: Tried to access illegal page: %i", page);
34 return PMPages[page];
35}
36
37static uint8_t *PM_GetEnd()
38{
39 return PMPages[ChunksInFile];
40}
41
42static byte *PM_GetTexture(int wallpic)
43{
44 return PM_GetPage(wallpic);
45}
46
47static uint16_t *PM_GetSprite(int shapenum)
48{
49 // correct alignment is enforced by PM_Startup()
50 return (uint16_t *) (void *) PM_GetPage(PMSpriteStart + shapenum);
51}
52
53static byte *PM_GetSound(int soundpagenum)
54{
55 return PM_GetPage(PMSoundStart + soundpagenum);
56}
57
58#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 @@
1//
2// ID Engine
3// ID_SD.c - Sound Manager for Wolfenstein 3D
4// v1.2
5// By Jason Blochowiak
6//
7
8//
9// This module handles dealing with generating sound on the appropriate
10// hardware
11//
12// Depends on: User Mgr (for parm checking)
13//
14// Globals:
15// For User Mgr:
16// SoundBlasterPresent - SoundBlaster card present?
17// AdLibPresent - AdLib card present?
18// SoundMode - What device is used for sound effects
19// (Use SM_SetSoundMode() to set)
20// MusicMode - What device is used for music
21// (Use SM_SetMusicMode() to set)
22// DigiMode - What device is used for digitized sound effects
23// (Use SM_SetDigiDevice() to set)
24//
25// For Cache Mgr:
26// NeedsDigitized - load digitized sounds?
27// NeedsMusic - load music?
28//
29
30#include "wl_def.h"
31#include "fmopl.h"
32
33#include "fixedpoint.h"
34
35#pragma hdrstop
36
37#define ORIGSAMPLERATE 7042
38
39typedef struct
40{
41 char RIFF[4];
42 longword filelenminus8;
43 char WAVE[4];
44 char fmt_[4];
45 longword formatlen;
46 word val0x0001;
47 word channels;
48 longword samplerate;
49 longword bytespersec;
50 word bytespersample;
51 word bitspersample;
52} headchunk;
53
54typedef struct
55{
56 char chunkid[4];
57 longword chunklength;
58} wavechunk;
59
60typedef struct
61{
62 uint32_t startpage;
63 uint32_t length;
64} digiinfo;
65
66static Mix_Chunk *SoundChunks[ STARTMUSIC - STARTDIGISOUNDS];
67static byte *SoundBuffers[STARTMUSIC - STARTDIGISOUNDS];
68
69globalsoundpos channelSoundPos[MIX_CHANNELS];
70
71// Global variables
72 boolean AdLibPresent,
73 SoundBlasterPresent,SBProPresent,
74 SoundPositioned;
75 SDMode SoundMode;
76 SMMode MusicMode;
77 SDSMode DigiMode;
78static byte **SoundTable;
79 int DigiMap[LASTSOUND];
80 int DigiChannel[STARTMUSIC - STARTDIGISOUNDS];
81
82// Internal variables
83static boolean SD_Started;
84static boolean nextsoundpos;
85static soundnames SoundNumber;
86static soundnames DigiNumber;
87static word SoundPriority;
88static word DigiPriority;
89static int LeftPosition;
90static int RightPosition;
91
92 word NumDigi;
93static digiinfo *DigiList;
94static boolean DigiPlaying;
95
96// PC Sound variables
97static volatile byte pcLastSample;
98static byte * volatile pcSound;
99static longword pcLengthLeft;
100
101// AdLib variables
102static byte * volatile alSound;
103static byte alBlock;
104static longword alLengthLeft;
105static longword alTimeCount;
106static Instrument alZeroInst;
107
108// Sequencer variables
109static volatile boolean sqActive;
110static word *sqHack;
111static word *sqHackPtr;
112static int sqHackLen;
113static int sqHackSeqLen;
114static longword sqHackTime;
115
116
117static void SDL_SoundFinished(void)
118{
119#ifdef SOUND_ENABLE
120 SoundNumber = (soundnames)0;
121 SoundPriority = 0;
122#endif
123}
124
125
126#ifdef NOTYET
127
128void SDL_turnOnPCSpeaker(word timerval);
129#pragma aux SDL_turnOnPCSpeaker = \
130 "mov al,0b6h" \
131 "out 43h,al" \
132 "mov al,bl" \
133 "out 42h,al" \
134 "mov al,bh" \
135 "out 42h,al" \
136 "in al,61h" \
137 "or al,3" \
138 "out 61h,al" \
139 parm [bx] \
140 modify exact [al]
141
142void SDL_turnOffPCSpeaker();
143#pragma aux SDL_turnOffPCSpeaker = \
144 "in al,61h" \
145 "and al,0fch" \
146 "out 61h,al" \
147 modify exact [al]
148
149void SDL_setPCSpeaker(byte val);
150#pragma aux SDL_setPCSpeaker = \
151 "in al,61h" \
152 "and al,0fch" \
153 "or al,ah" \
154 "out 61h,al" \
155 parm [ah] \
156 modify exact [al]
157
158void SDL_DoFX()
159{
160 if(pcSound)
161 {
162 if(*pcSound!=pcLastSample)
163 {
164 pcLastSample=*pcSound;
165
166 if(pcLastSample)
167 SDL_turnOnPCSpeaker(pcLastSample*60);
168 else
169 SDL_turnOffPCSpeaker();
170 }
171 pcSound++;
172 pcLengthLeft--;
173 if(!pcLengthLeft)
174 {
175 pcSound=0;
176 SoundNumber=(soundnames)0;
177 SoundPriority=0;
178 SDL_turnOffPCSpeaker();
179 }
180 }
181
182 // [adlib sound stuff removed...]
183}
184
185static void SDL_DigitizedDoneInIRQ(void);
186
187void SDL_DoFast()
188{
189 count_fx++;
190 if(count_fx>=5)
191 {
192 count_fx=0;
193
194 SDL_DoFX();
195
196 count_time++;
197 if(count_time>=2)
198 {
199 TimeCount++;
200 count_time=0;
201 }
202 }
203
204 // [adlib music and soundsource stuff removed...]
205
206 TimerCount+=TimerDivisor;
207 if(*((word *)&TimerCount+1))
208 {
209 *((word *)&TimerCount+1)=0;
210 t0OldService();
211 }
212 else
213 {
214 outp(0x20,0x20);
215 }
216}
217
218// Timer 0 ISR for 7000Hz interrupts
219void __interrupt SDL_t0ExtremeAsmService(void)
220{
221 if(pcindicate)
222 {
223 if(pcSound)
224 {
225 SDL_setPCSpeaker(((*pcSound++)&0x80)>>6);
226 pcLengthLeft--;
227 if(!pcLengthLeft)
228 {
229 pcSound=0;
230 SDL_turnOffPCSpeaker();
231 SDL_DigitizedDoneInIRQ();
232 }
233 }
234 }
235 extreme++;
236 if(extreme>=10)
237 {
238 extreme=0;
239 SDL_DoFast();
240 }
241 else
242 outp(0x20,0x20);
243}
244
245// Timer 0 ISR for 700Hz interrupts
246void __interrupt SDL_t0FastAsmService(void)
247{
248 SDL_DoFast();
249}
250
251// Timer 0 ISR for 140Hz interrupts
252void __interrupt SDL_t0SlowAsmService(void)
253{
254 count_time++;
255 if(count_time>=2)
256 {
257 TimeCount++;
258 count_time=0;
259 }
260
261 SDL_DoFX();
262
263 TimerCount+=TimerDivisor;
264 if(*((word *)&TimerCount+1))
265 {
266 *((word *)&TimerCount+1)=0;
267 t0OldService();
268 }
269 else
270 outp(0x20,0x20);
271}
272
273void SDL_IndicatePC(boolean ind)
274{
275 pcindicate=ind;
276}
277
278///////////////////////////////////////////////////////////////////////////
279//
280// SDL_SetTimer0() - Sets system timer 0 to the specified speed
281//
282///////////////////////////////////////////////////////////////////////////
283static void
284SDL_SetTimer0(word speed)
285{
286#ifndef TPROF // If using Borland's profiling, don't screw with the timer
287// _asm pushfd
288 _asm cli
289
290 outp(0x43,0x36); // Change timer 0
291 outp(0x40,(byte)speed);
292 outp(0x40,speed >> 8);
293 // Kludge to handle special case for digitized PC sounds
294 if (TimerDivisor == (1192030 / (TickBase * 100)))
295 TimerDivisor = (1192030 / (TickBase * 10));
296 else
297 TimerDivisor = speed;
298
299// _asm popfd
300 _asm sti
301#else
302 TimerDivisor = 0x10000;
303#endif
304}
305
306///////////////////////////////////////////////////////////////////////////
307//
308// SDL_SetIntsPerSec() - Uses SDL_SetTimer0() to set the number of
309// interrupts generated by system timer 0 per second
310//
311///////////////////////////////////////////////////////////////////////////
312static void
313SDL_SetIntsPerSec(word ints)
314{
315 TimerRate = ints;
316 SDL_SetTimer0(1192030 / ints);
317}
318
319static void
320SDL_SetTimerSpeed(void)
321{
322 word rate;
323 void (_interrupt *isr)(void);
324
325 if ((DigiMode == sds_PC) && DigiPlaying)
326 {
327 rate = TickBase * 100;
328 isr = SDL_t0ExtremeAsmService;
329 }
330 else if ((MusicMode == smm_AdLib) || ((DigiMode == sds_SoundSource) && DigiPlaying) )
331 {
332 rate = TickBase * 10;
333 isr = SDL_t0FastAsmService;
334 }
335 else
336 {
337 rate = TickBase * 2;
338 isr = SDL_t0SlowAsmService;
339 }
340
341 if (rate != TimerRate)
342 {
343 _dos_setvect(8,isr);
344 SDL_SetIntsPerSec(rate);
345 TimerRate = rate;
346 }
347}
348
349//
350// PC Sound code
351//
352
353///////////////////////////////////////////////////////////////////////////
354//
355// SDL_PCPlaySample() - Plays the specified sample on the PC speaker
356//
357///////////////////////////////////////////////////////////////////////////
358#ifdef _MUSE_
359void
360#else
361static void
362#endif
363SDL_PCPlaySample(byte *data,longword len,boolean inIRQ)
364{
365 if(!inIRQ)
366 {
367// _asm pushfd
368 _asm cli
369 }
370
371 SDL_IndicatePC(true);
372
373 pcLengthLeft = len;
374 pcSound = (volatile byte *)data;
375
376 if(!inIRQ)
377 {
378// _asm popfd
379 _asm sti
380 }
381}
382
383///////////////////////////////////////////////////////////////////////////
384//
385// SDL_PCStopSample() - Stops a sample playing on the PC speaker
386//
387///////////////////////////////////////////////////////////////////////////
388#ifdef _MUSE_
389void
390#else
391static void
392#endif
393SDL_PCStopSampleInIRQ(void)
394{
395 pcSound = 0;
396
397 SDL_IndicatePC(false);
398
399 _asm in al,0x61 // Turn the speaker off
400 _asm and al,0xfd // ~2
401 _asm out 0x61,al
402}
403
404///////////////////////////////////////////////////////////////////////////
405//
406// SDL_PCPlaySound() - Plays the specified sound on the PC speaker
407//
408///////////////////////////////////////////////////////////////////////////
409#ifdef _MUSE_
410void
411#else
412static void
413#endif
414SDL_PCPlaySound(PCSound *sound)
415{
416// _asm pushfd
417 _asm cli
418
419 pcLastSample = -1;
420 pcLengthLeft = sound->common.length;
421 pcSound = sound->data;
422
423// _asm popfd
424 _asm sti
425}
426
427///////////////////////////////////////////////////////////////////////////
428//
429// SDL_PCStopSound() - Stops the current sound playing on the PC Speaker
430//
431///////////////////////////////////////////////////////////////////////////
432#ifdef _MUSE_
433void
434#else
435static void
436#endif
437SDL_PCStopSound(void)
438{
439// _asm pushfd
440 _asm cli
441
442 pcSound = 0;
443
444 _asm in al,0x61 // Turn the speaker off
445 _asm and al,0xfd // ~2
446 _asm out 0x61,al
447
448// _asm popfd
449 _asm sti
450}
451
452///////////////////////////////////////////////////////////////////////////
453//
454// SDL_ShutPC() - Turns off the pc speaker
455//
456///////////////////////////////////////////////////////////////////////////
457static void
458SDL_ShutPC(void)
459{
460// _asm pushfd
461 _asm cli
462
463 pcSound = 0;
464
465 _asm in al,0x61 // Turn the speaker & gate off
466 _asm and al,0xfc // ~3
467 _asm out 0x61,al
468
469// _asm popfd
470 _asm sti
471}
472
473#endif
474
475void
476SD_StopDigitized(void)
477{
478#ifdef SOUND_ENABLE
479 DigiPlaying = false;
480 DigiNumber = (soundnames) 0;
481 DigiPriority = 0;
482 SoundPositioned = false;
483 if ((DigiMode == sds_PC) && (SoundMode == sdm_PC))
484 SDL_SoundFinished();
485
486 switch (DigiMode)
487 {
488 case sds_PC:
489// SDL_PCStopSampleInIRQ();
490 break;
491 case sds_SoundBlaster:
492// SDL_SBStopSampleInIRQ();
493 Mix_HaltChannel(-1);
494 break;
495 }
496#endif
497}
498
499int SD_GetChannelForDigi(int which)
500{
501#ifdef SOUND_ENABLE
502 if(DigiChannel[which] != -1) return DigiChannel[which];
503
504 int channel = Mix_GroupAvailable(1);
505 if(channel == -1) channel = Mix_GroupOldest(1);
506 if(channel == -1) // All sounds stopped in the meantime?
507 return Mix_GroupAvailable(1);
508 return channel;
509#endif
510 return 0;
511}
512
513void SD_SetPosition(int channel, int leftpos, int rightpos)
514{
515#ifdef SOUND_ENABLE
516 if((leftpos < 0) || (leftpos > 15) || (rightpos < 0) || (rightpos > 15)
517 || ((leftpos == 15) && (rightpos == 15)))
518 Quit("SD_SetPosition: Illegal position");
519
520 switch (DigiMode)
521 {
522 case sds_SoundBlaster:
523// SDL_PositionSBP(leftpos,rightpos);
524 Mix_SetPanning(channel, ((15 - leftpos) << 4) + 15,
525 ((15 - rightpos) << 4) + 15);
526 break;
527 }
528#endif
529}
530
531#define FP_FLOOR(x, fracbits) (x & (~((1<<(fracbits))-1)))
532
533/* more precise than original samples */
534#define FRACBITS 10
535#define FP_MATH
536
537#ifdef FP_MATH
538/* Looks to be some sort of interpolation - FW19 */
539Sint16 GetSample(long csample_fp, byte *samples, int size)
540{
541 //float s0=0, s1=0, s2=0;
542 long s0_fp = 0, s1_fp = 0, s2_fp = 0;
543 long cursample_fp = FP_FLOOR(csample_fp, FRACBITS);
544 long sf_fp = csample_fp - cursample_fp;
545 const long one = 1 << FRACBITS;
546
547 int cursample = cursample_fp >> FRACBITS;
548
549 if(cursample-1 >= 0) s0_fp = (samples[cursample-1] - 128) << FRACBITS;
550 s1_fp = (samples[cursample] - 128) << FRACBITS;
551 if(cursample+1 < size) s2_fp = (samples[cursample+1] - 128) << FRACBITS;
552
553 //float val = s0*sf*(sf-1)/2 - s1*(sf*sf-1) + s2*(sf+1)*sf/2;
554
555 long val_fp = fp_mul(s0_fp, fp_mul(sf_fp, sf_fp - one, FRACBITS), FRACBITS) / 2 -
556 fp_mul(s1_fp, fp_mul(sf_fp, sf_fp, FRACBITS) - one, FRACBITS) +
557 fp_mul(s2_fp, fp_mul(sf_fp + one, sf_fp, FRACBITS), FRACBITS) / 2;
558
559 int32_t intval = (int32_t) (val_fp * 256) >> FRACBITS;
560 if(intval < -32768) intval = -32768;
561 else if(intval > 32767) intval = 32767;
562 return (Sint16) intval;
563}
564#else
565Sint16 GetSample(float csample, byte *samples, int size)
566{
567 float s0=0, s1=0, s2=0;
568 int cursample = (int) csample;
569 float sf = csample - (float) cursample;
570
571 if(cursample-1 >= 0) s0 = (float) (samples[cursample-1] - 128);
572 s1 = (float) (samples[cursample] - 128);
573 if(cursample+1 < size) s2 = (float) (samples[cursample+1] - 128);
574
575 float val = s0*sf*(sf-1)/2 - s1*(sf*sf-1) + s2*(sf+1)*sf/2;
576 int32_t intval = (int32_t) (val * 256);
577 if(intval < -32768) intval = -32768;
578 else if(intval > 32767) intval = 32767;
579 return (Sint16) intval;
580}
581#endif
582
583void SD_PrepareSound(int which)
584{
585#ifdef SOUND_ENABLE
586#ifdef FP_MATH
587 if(DigiList == NULL)
588 Quit("SD_PrepareSound(%i): DigiList not initialized!\n", which);
589
590 int page = DigiList[which].startpage;
591 int size = DigiList[which].length;
592
593 byte *origsamples = PM_GetSound(page);
594 if(origsamples + size >= PM_GetEnd())
595 Quit("SD_PrepareSound(%i): Sound reaches out of page file!\n", which);
596
597 /* this is fine to keep as floating-point */
598 int destsamples = (int) ((float) size * (float) param_samplerate
599 / (float) ORIGSAMPLERATE);
600
601 byte *wavebuffer = (byte *) malloc(sizeof(headchunk) + sizeof(wavechunk)
602 + destsamples * 2); // dest are 16-bit samples
603 if(wavebuffer == NULL)
604 Quit("Unable to allocate wave buffer for sound %i size %d %d %d %d!\n", which, destsamples, size, param_samplerate, ORIGSAMPLERATE);
605
606 headchunk head = {{'R','I','F','F'}, 0, {'W','A','V','E'},
607 {'f','m','t',' '}, 0x10, 0x0001, 1, param_samplerate, param_samplerate*2, 2, 16};
608 wavechunk dhead = {{'d', 'a', 't', 'a'}, destsamples*2};
609 head.filelenminus8 = sizeof(head) + destsamples*2; // (sizeof(dhead)-8 = 0)
610 memcpy(wavebuffer, &head, sizeof(head));
611 memcpy(wavebuffer+sizeof(head), &dhead, sizeof(dhead));
612
613 // alignment is correct, as wavebuffer comes from malloc
614 // and sizeof(headchunk) % 4 == 0 and sizeof(wavechunk) % 4 == 0
615 Sint16 *newsamples = (Sint16 *)(void *) (wavebuffer + sizeof(headchunk)
616 + sizeof(wavechunk));
617
618 long scale_fac_fp = fp_div(size << FRACBITS, destsamples << FRACBITS, FRACBITS);
619
620 for(int i=0; i<destsamples; i++)
621 {
622 newsamples[i] = GetSample(fp_mul(i << FRACBITS, scale_fac_fp, FRACBITS),
623 origsamples, size);
624 }
625 SoundBuffers[which] = wavebuffer;
626
627 SoundChunks[which] = Mix_LoadWAV_RW(SDL_RWFromMem(wavebuffer,
628 sizeof(headchunk) + sizeof(wavechunk) + destsamples * 2), 1);
629#else
630 if(DigiList == NULL)
631 Quit("SD_PrepareSound(%i): DigiList not initialized!\n", which);
632
633 int page = DigiList[which].startpage;
634 int size = DigiList[which].length;
635
636 byte *origsamples = PM_GetSound(page);
637 if(origsamples + size >= PM_GetEnd())
638 Quit("SD_PrepareSound(%i): Sound reaches out of page file!\n", which);
639
640 int destsamples = (int) ((float) size * (float) param_samplerate
641 / (float) ORIGSAMPLERATE);
642
643 byte *wavebuffer = (byte *) malloc(sizeof(headchunk) + sizeof(wavechunk)
644 + destsamples * 2); // dest are 16-bit samples
645 if(wavebuffer == NULL)
646 Quit("Unable to allocate wave buffer for sound %i!\n", which);
647
648 headchunk head = {{'R','I','F','F'}, 0, {'W','A','V','E'},
649 {'f','m','t',' '}, 0x10, 0x0001, 1, param_samplerate, param_samplerate*2, 2, 16};
650 wavechunk dhead = {{'d', 'a', 't', 'a'}, destsamples*2};
651 head.filelenminus8 = sizeof(head) + destsamples*2; // (sizeof(dhead)-8 = 0)
652 memcpy(wavebuffer, &head, sizeof(head));
653 memcpy(wavebuffer+sizeof(head), &dhead, sizeof(dhead));
654
655 // alignment is correct, as wavebuffer comes from malloc
656 // and sizeof(headchunk) % 4 == 0 and sizeof(wavechunk) % 4 == 0
657 Sint16 *newsamples = (Sint16 *)(void *) (wavebuffer + sizeof(headchunk)
658 + sizeof(wavechunk));
659 float cursample = 0.F;
660 float samplestep = (float) ORIGSAMPLERATE / (float) param_samplerate;
661 for(int i=0; i<destsamples; i++, cursample+=samplestep)
662 {
663 newsamples[i] = GetSample((float)size * (float)i / (float)destsamples,
664 origsamples, size);
665 }
666 SoundBuffers[which] = wavebuffer;
667
668 SoundChunks[which] = Mix_LoadWAV_RW(SDL_RWFromMem(wavebuffer,
669 sizeof(headchunk) + sizeof(wavechunk) + destsamples * 2), 1);
670#endif
671#endif
672}
673
674int SD_PlayDigitized(word which,int leftpos,int rightpos)
675{
676#ifdef SOUND_ENABLE
677 if (!DigiMode)
678 return 0;
679
680 if (which >= NumDigi)
681 Quit("SD_PlayDigitized: bad sound number %i", which);
682
683 int channel = SD_GetChannelForDigi(which);
684 SD_SetPosition(channel, leftpos,rightpos);
685
686 DigiPlaying = true;
687
688 Mix_Chunk *sample = SoundChunks[which];
689 if(sample == NULL)
690 {
691 printf("SoundChunks[%i] is NULL!\n", which);
692 return 0;
693 }
694
695 if(Mix_PlayChannel(channel, sample, 0) == -1)
696 {
697 printf("Unable to play sound: %s\n", Mix_GetError());
698 return 0;
699 }
700
701 return channel;
702#endif
703 return 0;
704}
705
706void SD_ChannelFinished(int channel)
707{
708#ifdef SOUND_ENABLE
709 channelSoundPos[channel].valid = 0;
710#endif
711}
712
713void
714SD_SetDigiDevice(SDSMode mode)
715{
716#ifdef SOUND_ENABLE
717 boolean devicenotpresent;
718
719 if (mode == DigiMode)
720 return;
721
722 SD_StopDigitized();
723
724 devicenotpresent = false;
725 switch (mode)
726 {
727 case sds_SoundBlaster:
728 if (!SoundBlasterPresent)
729 devicenotpresent = true;
730 break;
731 }
732
733 if (!devicenotpresent)
734 {
735 DigiMode = mode;
736
737#ifdef NOTYET
738 SDL_SetTimerSpeed();
739#endif
740 }
741#endif
742}
743
744void
745SDL_SetupDigi(void)
746{
747#ifdef SOUND_ENABLE
748 // Correct padding enforced by PM_Startup()
749 word *soundInfoPage = (word *) (void *) PM_GetPage(ChunksInFile-1);
750 NumDigi = (word) PM_GetPageSize(ChunksInFile - 1) / 4;
751
752 DigiList = (digiinfo *) malloc(NumDigi * sizeof(digiinfo));
753 int i;
754 for(i = 0; i < NumDigi; i++)
755 {
756 // Calculate the size of the digi from the sizes of the pages between
757 // the start page and the start page of the next sound
758
759 DigiList[i].startpage = soundInfoPage[i * 2];
760 if((int) DigiList[i].startpage >= ChunksInFile - 1)
761 {
762 NumDigi = i;
763 break;
764 }
765
766 int lastPage;
767 if(i < NumDigi - 1)
768 {
769 lastPage = soundInfoPage[i * 2 + 2];
770 if(lastPage == 0 || lastPage + PMSoundStart > ChunksInFile - 1) lastPage = ChunksInFile - 1;
771 else lastPage += PMSoundStart;
772 }
773 else lastPage = ChunksInFile - 1;
774
775 int size = 0;
776 for(int page = PMSoundStart + DigiList[i].startpage; page < lastPage; page++)
777 size += PM_GetPageSize(page);
778
779 // Don't include padding of sound info page, if padding was added
780 if(lastPage == ChunksInFile - 1 && PMSoundInfoPagePadded) size--;
781
782 // Patch lower 16-bit of size with size from sound info page.
783 // The original VSWAP contains padding which is included in the page size,
784 // but not included in the 16-bit size. So we use the more precise value.
785 if((size & 0xffff0000) != 0 && (size & 0xffff) < soundInfoPage[i * 2 + 1])
786 size -= 0x10000;
787 size = (size & 0xffff0000) | soundInfoPage[i * 2 + 1];
788
789 DigiList[i].length = size;
790 }
791
792 for(i = 0; i < LASTSOUND; i++)
793 {
794 DigiMap[i] = -1;
795 DigiChannel[i] = -1;
796 }
797#endif
798}
799
800// AdLib Code
801
802///////////////////////////////////////////////////////////////////////////
803//
804// SDL_ALStopSound() - Turns off any sound effects playing through the
805// AdLib card
806//
807///////////////////////////////////////////////////////////////////////////
808static void
809SDL_ALStopSound(void)
810{
811#ifdef SOUND_ENABLE
812 alSound = 0;
813 alOut(alFreqH + 0, 0);
814#endif
815}
816
817static void
818SDL_AlSetFXInst(Instrument *inst)
819{
820#ifdef SOUND_ENABLE
821 byte c,m;
822
823 m = 0; // modulator cell for channel 0
824 c = 3; // carrier cell for channel 0
825 alOut(m + alChar,inst->mChar);
826 alOut(m + alScale,inst->mScale);
827 alOut(m + alAttack,inst->mAttack);
828 alOut(m + alSus,inst->mSus);
829 alOut(m + alWave,inst->mWave);
830 alOut(c + alChar,inst->cChar);
831 alOut(c + alScale,inst->cScale);
832 alOut(c + alAttack,inst->cAttack);
833 alOut(c + alSus,inst->cSus);
834 alOut(c + alWave,inst->cWave);
835
836 // Note: Switch commenting on these lines for old MUSE compatibility
837// alOutInIRQ(alFeedCon,inst->nConn);
838 alOut(alFeedCon,0);
839#endif
840}
841
842///////////////////////////////////////////////////////////////////////////
843//
844// SDL_ALPlaySound() - Plays the specified sound on the AdLib card
845//
846///////////////////////////////////////////////////////////////////////////
847static void
848SDL_ALPlaySound(AdLibSound *sound)
849{
850#ifdef SOUND_ENABLE
851 Instrument *inst;
852 byte *data;
853
854 SDL_ALStopSound();
855
856 alLengthLeft = sound->common.length;
857 data = sound->data;
858 alBlock = ((sound->block & 7) << 2) | 0x20;
859 inst = &sound->inst;
860
861 if (!(inst->mSus | inst->cSus))
862 {
863 Quit("SDL_ALPlaySound() - Bad instrument");
864 }
865
866 SDL_AlSetFXInst(inst);
867 alSound = (byte *)data;
868#endif
869}
870
871///////////////////////////////////////////////////////////////////////////
872//
873// SDL_ShutAL() - Shuts down the AdLib card for sound effects
874//
875///////////////////////////////////////////////////////////////////////////
876static void
877SDL_ShutAL(void)
878{
879#ifdef SOUND_ENABLE
880 alSound = 0;
881 alOut(alEffects,0);
882 alOut(alFreqH + 0,0);
883 SDL_AlSetFXInst(&alZeroInst);
884#endif
885}
886
887///////////////////////////////////////////////////////////////////////////
888//
889// SDL_CleanAL() - Totally shuts down the AdLib card
890//
891///////////////////////////////////////////////////////////////////////////
892static void
893SDL_CleanAL(void)
894{
895#ifdef SOUND_ENABLE
896 int i;
897
898 alOut(alEffects,0);
899 for (i = 1; i < 0xf5; i++)
900 alOut(i, 0);
901#endif
902}
903
904///////////////////////////////////////////////////////////////////////////
905//
906// SDL_StartAL() - Starts up the AdLib card for sound effects
907//
908///////////////////////////////////////////////////////////////////////////
909static void
910SDL_StartAL(void)
911{
912#ifdef SOUND_ENABLE
913 alOut(alEffects, 0);
914 SDL_AlSetFXInst(&alZeroInst);
915#endif
916}
917
918///////////////////////////////////////////////////////////////////////////
919//
920// SDL_DetectAdLib() - Determines if there's an AdLib (or SoundBlaster
921// emulating an AdLib) present
922//
923///////////////////////////////////////////////////////////////////////////
924static boolean
925SDL_DetectAdLib(void)
926{
927#ifdef SOUND_ENABLE
928 for (int i = 1; i <= 0xf5; i++) // Zero all the registers
929 alOut(i, 0);
930
931 alOut(1, 0x20); // Set WSE=1
932// alOut(8, 0); // Set CSM=0 & SEL=0
933
934 return true;
935#endif
936}
937
938////////////////////////////////////////////////////////////////////////////
939//
940// SDL_ShutDevice() - turns off whatever device was being used for sound fx
941//
942////////////////////////////////////////////////////////////////////////////
943static void
944SDL_ShutDevice(void)
945{
946#ifdef SOUND_ENABLE
947 switch (SoundMode)
948 {
949 case sdm_PC:
950// SDL_ShutPC();
951 break;
952 case sdm_AdLib:
953 SDL_ShutAL();
954 break;
955 }
956 SoundMode = sdm_Off;
957#endif
958}
959
960///////////////////////////////////////////////////////////////////////////
961//
962// SDL_CleanDevice() - totally shuts down all sound devices
963//
964///////////////////////////////////////////////////////////////////////////
965static void
966SDL_CleanDevice(void)
967{
968#ifdef SOUND_ENABLE
969 if ((SoundMode == sdm_AdLib) || (MusicMode == smm_AdLib))
970 SDL_CleanAL();
971#endif
972}
973
974///////////////////////////////////////////////////////////////////////////
975//
976// SDL_StartDevice() - turns on whatever device is to be used for sound fx
977//
978///////////////////////////////////////////////////////////////////////////
979static void
980SDL_StartDevice(void)
981{
982#ifdef SOUND_ENABLE
983 switch (SoundMode)
984 {
985 case sdm_AdLib:
986 SDL_StartAL();
987 break;
988 }
989 SoundNumber = (soundnames) 0;
990 SoundPriority = 0;
991#endif
992}
993
994// Public routines
995
996///////////////////////////////////////////////////////////////////////////
997//
998// SD_SetSoundMode() - Sets which sound hardware to use for sound effects
999//
1000///////////////////////////////////////////////////////////////////////////
1001boolean
1002SD_SetSoundMode(SDMode mode)
1003{
1004#ifdef SOUND_ENABLE
1005 boolean result = false;
1006 word tableoffset;
1007
1008 SD_StopSound();
1009
1010 if ((mode == sdm_AdLib) && !AdLibPresent)
1011 mode = sdm_PC;
1012
1013 switch (mode)
1014 {
1015 case sdm_Off:
1016 tableoffset = STARTADLIBSOUNDS;
1017 result = true;
1018 break;
1019 case sdm_PC:
1020 tableoffset = STARTPCSOUNDS;
1021 result = true;
1022 break;
1023 case sdm_AdLib:
1024 tableoffset = STARTADLIBSOUNDS;
1025 if (AdLibPresent)
1026 result = true;
1027 break;
1028 default:
1029 Quit("SD_SetSoundMode: Invalid sound mode %i", mode);
1030 return false;
1031 }
1032 SoundTable = &audiosegs[tableoffset];
1033
1034 if (result && (mode != SoundMode))
1035 {
1036 SDL_ShutDevice();
1037 SoundMode = mode;
1038 SDL_StartDevice();
1039 }
1040
1041 return(result);
1042#endif
1043 return true;
1044}
1045
1046///////////////////////////////////////////////////////////////////////////
1047//
1048// SD_SetMusicMode() - sets the device to use for background music
1049//
1050///////////////////////////////////////////////////////////////////////////
1051boolean
1052SD_SetMusicMode(SMMode mode)
1053{
1054#ifdef SOUND_ENABLE
1055 boolean result = false;
1056
1057 SD_FadeOutMusic();
1058 while (SD_MusicPlaying())
1059 SDL_Delay(5);
1060
1061 switch (mode)
1062 {
1063 case smm_Off:
1064 result = true;
1065 break;
1066 case smm_AdLib:
1067 if (AdLibPresent)
1068 result = true;
1069 break;
1070 }
1071
1072 if (result)
1073 MusicMode = mode;
1074
1075// SDL_SetTimerSpeed();
1076
1077 return(result);
1078#endif
1079}
1080
1081int numreadysamples = 0;
1082byte *curAlSound = 0;
1083byte *curAlSoundPtr = 0;
1084longword curAlLengthLeft = 0;
1085int soundTimeCounter = 5;
1086int samplesPerMusicTick;
1087
1088void *OPL_ptr = NULL;
1089
1090void SDL_IMFMusicPlayer(void *udata, Uint8 *stream, int len)
1091{
1092#ifdef SOUND_ENABLE
1093 int stereolen = len>>1;
1094 int sampleslen = stereolen>>1;
1095 INT16 *stream16 = (INT16 *) (void *) stream; // expect correct alignment
1096
1097 while(1)
1098 {
1099 if(numreadysamples)
1100 {
1101 if(numreadysamples<sampleslen)
1102 {
1103 YM3812UpdateOne(OPL_ptr, stream16, numreadysamples);
1104 stream16 += numreadysamples*2;
1105 sampleslen -= numreadysamples;
1106 }
1107 else
1108 {
1109 YM3812UpdateOne(OPL_ptr, stream16, sampleslen);
1110 numreadysamples -= sampleslen;
1111 return;
1112 }
1113 }
1114 soundTimeCounter--;
1115 if(!soundTimeCounter)
1116 {
1117 soundTimeCounter = 5;
1118 if(curAlSound != alSound)
1119 {
1120 curAlSound = curAlSoundPtr = alSound;
1121 curAlLengthLeft = alLengthLeft;
1122 }
1123 if(curAlSound)
1124 {
1125 if(*curAlSoundPtr)
1126 {
1127 alOut(alFreqL, *curAlSoundPtr);
1128 alOut(alFreqH, alBlock);
1129 }
1130 else alOut(alFreqH, 0);
1131 curAlSoundPtr++;
1132 curAlLengthLeft--;
1133 if(!curAlLengthLeft)
1134 {
1135 curAlSound = alSound = 0;
1136 SoundNumber = (soundnames) 0;
1137 SoundPriority = 0;
1138 alOut(alFreqH, 0);
1139 }
1140 }
1141 }
1142 if(sqActive)
1143 {
1144 do
1145 {
1146 if(sqHackTime > alTimeCount) break;
1147 sqHackTime = alTimeCount + *(sqHackPtr+1);
1148 alOut(*(byte *) sqHackPtr, *(((byte *) sqHackPtr)+1));
1149 sqHackPtr += 2;
1150 sqHackLen -= 4;
1151 }
1152 while(sqHackLen>0);
1153 alTimeCount++;
1154 if(!sqHackLen)
1155 {
1156 sqHackPtr = sqHack;
1157 sqHackLen = sqHackSeqLen;
1158 sqHackTime = 0;
1159 alTimeCount = 0;
1160 }
1161 }
1162 numreadysamples = samplesPerMusicTick;
1163 }
1164#endif
1165}
1166
1167///////////////////////////////////////////////////////////////////////////
1168//
1169// SD_Startup() - starts up the Sound Mgr
1170// Detects all additional sound hardware and installs my ISR
1171//
1172///////////////////////////////////////////////////////////////////////////
1173void
1174SD_Startup(void)
1175{
1176#ifdef SOUND_ENABLE
1177 int i;
1178
1179 if (SD_Started)
1180 return;
1181
1182 if(Mix_OpenAudio(param_samplerate, AUDIO_S16, 2, param_audiobuffer))
1183 {
1184 printf("Unable to open audio: %s\n", Mix_GetError());
1185 return;
1186 }
1187
1188 Mix_ReserveChannels(2); // reserve player and boss weapon channels
1189 Mix_GroupChannels(2, MIX_CHANNELS-1, 1); // group remaining channels
1190
1191 // Init music
1192
1193 samplesPerMusicTick = param_samplerate / 700; // SDL_t0FastAsmService played at 700Hz
1194
1195 if(!(OPL_ptr = YM3812Init((void*)1,3579545,param_samplerate)))
1196 {
1197 //printf("Unable to create virtual OPL!!\n");
1198 }
1199
1200 for(i=1;i<0xf6;i++)
1201 YM3812Write(OPL_ptr,i,0);
1202
1203 YM3812Write(OPL_ptr,1,0x20); // Set WSE=1
1204// YM3812Write(0,8,0); // Set CSM=0 & SEL=0 // already set in for statement
1205
1206 Mix_HookMusic(SDL_IMFMusicPlayer, 0);
1207 Mix_ChannelFinished(SD_ChannelFinished);
1208 AdLibPresent = true;
1209 SoundBlasterPresent = true;
1210
1211 alTimeCount = 0;
1212
1213 SD_SetSoundMode(sdm_Off);
1214 SD_SetMusicMode(smm_Off);
1215
1216 SDL_SetupDigi();
1217
1218 SD_Started = true;
1219#endif
1220}
1221
1222///////////////////////////////////////////////////////////////////////////
1223//
1224// SD_Shutdown() - shuts down the Sound Mgr
1225// Removes sound ISR and turns off whatever sound hardware was active
1226//
1227///////////////////////////////////////////////////////////////////////////
1228void
1229SD_Shutdown(void)
1230{
1231#ifdef SOUND_ENABLE
1232 if (!SD_Started)
1233 return;
1234
1235 SD_MusicOff();
1236 SD_StopSound();
1237
1238 for(int i = 0; i < STARTMUSIC - STARTDIGISOUNDS; i++)
1239 {
1240 if(SoundChunks[i]) Mix_FreeChunk(SoundChunks[i]);
1241 if(SoundBuffers[i]) free(SoundBuffers[i]);
1242 }
1243
1244 free(DigiList);
1245
1246 SD_Started = false;
1247#endif
1248}
1249
1250///////////////////////////////////////////////////////////////////////////
1251//
1252// SD_PositionSound() - Sets up a stereo imaging location for the next
1253// sound to be played. Each channel ranges from 0 to 15.
1254//
1255///////////////////////////////////////////////////////////////////////////
1256void
1257SD_PositionSound(int leftvol,int rightvol)
1258{
1259#ifdef SOUND_ENABLE
1260 LeftPosition = leftvol;
1261 RightPosition = rightvol;
1262 nextsoundpos = true;
1263#endif
1264}
1265
1266///////////////////////////////////////////////////////////////////////////
1267//
1268// SD_PlaySound() - plays the specified sound on the appropriate hardware
1269//
1270///////////////////////////////////////////////////////////////////////////
1271boolean
1272SD_PlaySound(soundnames sound)
1273{
1274#ifdef SOUND_ENABLE
1275 boolean ispos;
1276 SoundCommon *s;
1277 int lp,rp;
1278
1279 lp = LeftPosition;
1280 rp = RightPosition;
1281 LeftPosition = 0;
1282 RightPosition = 0;
1283
1284 ispos = nextsoundpos;
1285 nextsoundpos = false;
1286
1287 if (sound == -1 || (DigiMode == sds_Off && SoundMode == sdm_Off))
1288 return 0;
1289
1290 s = (SoundCommon *) SoundTable[sound];
1291
1292 if ((SoundMode != sdm_Off) && !s)
1293 Quit("SD_PlaySound() - Uncached sound");
1294
1295 if ((DigiMode != sds_Off) && (DigiMap[sound] != -1))
1296 {
1297 if ((DigiMode == sds_PC) && (SoundMode == sdm_PC))
1298 {
1299#ifdef NOTYET
1300 if (s->priority < SoundPriority)
1301 return 0;
1302
1303 SDL_PCStopSound();
1304
1305 SD_PlayDigitized(DigiMap[sound],lp,rp);
1306 SoundPositioned = ispos;
1307 SoundNumber = sound;
1308 SoundPriority = s->priority;
1309#else
1310 return 0;
1311#endif
1312 }
1313 else
1314 {
1315#ifdef NOTYET
1316 if (s->priority < DigiPriority)
1317 return(false);
1318#endif
1319
1320 int channel = SD_PlayDigitized(DigiMap[sound], lp, rp);
1321 SoundPositioned = ispos;
1322 DigiNumber = sound;
1323 DigiPriority = s->priority;
1324 return channel + 1;
1325 }
1326
1327 return(true);
1328 }
1329
1330 if (SoundMode == sdm_Off)
1331 return 0;
1332
1333 if (!s->length)
1334 Quit("SD_PlaySound() - Zero length sound");
1335 if (s->priority < SoundPriority)
1336 return 0;
1337
1338 switch (SoundMode)
1339 {
1340 case sdm_PC:
1341// SDL_PCPlaySound((PCSound *)s);
1342 break;
1343 case sdm_AdLib:
1344 SDL_ALPlaySound((AdLibSound *)s);
1345 break;
1346 }
1347
1348 SoundNumber = sound;
1349 SoundPriority = s->priority;
1350
1351 return 0;
1352#endif
1353 return 0;
1354}
1355
1356///////////////////////////////////////////////////////////////////////////
1357//
1358// SD_SoundPlaying() - returns the sound number that's playing, or 0 if
1359// no sound is playing
1360//
1361///////////////////////////////////////////////////////////////////////////
1362word
1363SD_SoundPlaying(void)
1364{
1365#ifdef SOUND_ENABLE
1366 boolean result = false;
1367
1368 switch (SoundMode)
1369 {
1370 case sdm_PC:
1371 result = pcSound? true : false;
1372 break;
1373 case sdm_AdLib:
1374 result = alSound? true : false;
1375 break;
1376 }
1377
1378 if (result)
1379 return(SoundNumber);
1380 else
1381 return(false);
1382#endif
1383 return false;
1384}
1385
1386///////////////////////////////////////////////////////////////////////////
1387//
1388// SD_StopSound() - if a sound is playing, stops it
1389//
1390///////////////////////////////////////////////////////////////////////////
1391void
1392SD_StopSound(void)
1393{
1394#ifdef SOUND_ENABLE
1395 if (DigiPlaying)
1396 SD_StopDigitized();
1397
1398 switch (SoundMode)
1399 {
1400 case sdm_PC:
1401// SDL_PCStopSound();
1402 break;
1403 case sdm_AdLib:
1404 SDL_ALStopSound();
1405 break;
1406 }
1407
1408 SoundPositioned = false;
1409
1410 SDL_SoundFinished();
1411#endif
1412}
1413
1414///////////////////////////////////////////////////////////////////////////
1415//
1416// SD_WaitSoundDone() - waits until the current sound is done playing
1417//
1418///////////////////////////////////////////////////////////////////////////
1419void
1420SD_WaitSoundDone(void)
1421{
1422#ifdef SOUND_ENABLE
1423 while (SD_SoundPlaying())
1424 SDL_Delay(5);
1425#endif
1426}
1427
1428///////////////////////////////////////////////////////////////////////////
1429//
1430// SD_MusicOn() - turns on the sequencer
1431//
1432///////////////////////////////////////////////////////////////////////////
1433void
1434SD_MusicOn(void)
1435{
1436#ifdef SOUND_ENABLE
1437 sqActive = true;
1438#endif
1439}
1440
1441///////////////////////////////////////////////////////////////////////////
1442//
1443// SD_MusicOff() - turns off the sequencer and any playing notes
1444// returns the last music offset for music continue
1445//
1446///////////////////////////////////////////////////////////////////////////
1447int
1448SD_MusicOff(void)
1449{
1450#ifdef SOUND_ENABLE
1451 word i;
1452
1453 sqActive = false;
1454 switch (MusicMode)
1455 {
1456 case smm_AdLib:
1457 alOut(alEffects, 0);
1458 for (i = 0;i < sqMaxTracks;i++)
1459 alOut(alFreqH + i + 1, 0);
1460 break;
1461 }
1462
1463 return (int) (sqHackPtr-sqHack);
1464#endif
1465}
1466
1467///////////////////////////////////////////////////////////////////////////
1468//
1469// SD_StartMusic() - starts playing the music pointed to
1470//
1471///////////////////////////////////////////////////////////////////////////
1472void
1473SD_StartMusic(int chunk)
1474{
1475#ifdef SOUND_ENABLE
1476 SD_MusicOff();
1477
1478 if (MusicMode == smm_AdLib)
1479 {
1480 int32_t chunkLen = CA_CacheAudioChunk(chunk);
1481 sqHack = (word *)(void *) audiosegs[chunk]; // alignment is correct
1482 if(*sqHack == 0) sqHackLen = sqHackSeqLen = chunkLen;
1483 else sqHackLen = sqHackSeqLen = *sqHack++;
1484 sqHackPtr = sqHack;
1485 sqHackTime = 0;
1486 alTimeCount = 0;
1487 SD_MusicOn();
1488 }
1489#endif
1490}
1491
1492void
1493SD_ContinueMusic(int chunk, int startoffs)
1494{
1495#ifdef SOUND_ENABLE
1496 SD_MusicOff();
1497
1498 if (MusicMode == smm_AdLib)
1499 {
1500 int32_t chunkLen = CA_CacheAudioChunk(chunk);
1501 sqHack = (word *)(void *) audiosegs[chunk]; // alignment is correct
1502 if(*sqHack == 0) sqHackLen = sqHackSeqLen = chunkLen;
1503 else sqHackLen = sqHackSeqLen = *sqHack++;
1504 sqHackPtr = sqHack;
1505
1506 if(startoffs >= sqHackLen)
1507 {
1508 Quit("SD_StartMusic: Illegal startoffs provided!");
1509 }
1510
1511 // fast forward to correct position
1512 // (needed to reconstruct the instruments)
1513
1514 for(int i = 0; i < startoffs; i += 2)
1515 {
1516 byte reg = *(byte *)sqHackPtr;
1517 byte val = *(((byte *)sqHackPtr) + 1);
1518 if(reg >= 0xb1 && reg <= 0xb8) val &= 0xdf; // disable play note flag
1519 else if(reg == 0xbd) val &= 0xe0; // disable drum flags
1520
1521 alOut(reg,val);
1522 sqHackPtr += 2;
1523 sqHackLen -= 4;
1524 }
1525 sqHackTime = 0;
1526 alTimeCount = 0;
1527
1528 SD_MusicOn();
1529 }
1530#endif
1531}
1532
1533///////////////////////////////////////////////////////////////////////////
1534//
1535// SD_FadeOutMusic() - starts fading out the music. Call SD_MusicPlaying()
1536// to see if the fadeout is complete
1537//
1538///////////////////////////////////////////////////////////////////////////
1539void
1540SD_FadeOutMusic(void)
1541{
1542#ifdef SOUND_ENABLE
1543 switch (MusicMode)
1544 {
1545 case smm_AdLib:
1546 // DEBUG - quick hack to turn the music off
1547 SD_MusicOff();
1548 break;
1549 }
1550#endif
1551}
1552
1553///////////////////////////////////////////////////////////////////////////
1554//
1555// SD_MusicPlaying() - returns true if music is currently playing, false if
1556// not
1557//
1558///////////////////////////////////////////////////////////////////////////
1559boolean
1560SD_MusicPlaying(void)
1561{
1562#ifdef SOUND_ENABLE
1563 boolean result;
1564
1565 switch (MusicMode)
1566 {
1567 case smm_AdLib:
1568 result = sqActive;
1569 break;
1570 default:
1571 result = false;
1572 break;
1573 }
1574
1575 return(result);
1576#endif
1577 return false;
1578}
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 @@
1//
2// ID Engine
3// ID_SD.h - Sound Manager Header
4// Version for Wolfenstein
5// By Jason Blochowiak
6//
7
8#ifndef __ID_SD__
9#define __ID_SD__
10
11extern void *OPL_ptr;
12
13#define alOut(n,b) YM3812Write(OPL_ptr, n, b)
14
15#define TickBase 70 // 70Hz per tick - used as a base for timer 0
16
17typedef enum
18{
19 sdm_Off,
20 sdm_PC,sdm_AdLib,
21} SDMode;
22
23typedef enum
24{
25 smm_Off,smm_AdLib
26} SMMode;
27
28typedef enum
29{
30 sds_Off,sds_PC,sds_SoundBlaster
31} SDSMode;
32
33typedef struct
34{
35 longword length;
36 word priority;
37} SoundCommon;
38
39#define ORIG_SOUNDCOMMON_SIZE 6
40
41// PC Sound stuff
42#define pcTimer 0x42
43#define pcTAccess 0x43
44#define pcSpeaker 0x61
45
46#define pcSpkBits 3
47
48typedef struct
49{
50 SoundCommon common;
51 byte data[1];
52} PCSound;
53
54// Register addresses
55// Operator stuff
56#define alChar 0x20
57#define alScale 0x40
58#define alAttack 0x60
59#define alSus 0x80
60#define alWave 0xe0
61// Channel stuff
62#define alFreqL 0xa0
63#define alFreqH 0xb0
64#define alFeedCon 0xc0
65// Global stuff
66#define alEffects 0xbd
67
68typedef struct
69{
70 byte mChar,cChar,
71 mScale,cScale,
72 mAttack,cAttack,
73 mSus,cSus,
74 mWave,cWave,
75 nConn,
76
77 // These are only for Muse - these bytes are really unused
78 voice,
79 mode;
80 byte unused[3];
81} Instrument;
82
83#define ORIG_INSTRUMENT_SIZE 16
84
85typedef struct
86{
87 SoundCommon common;
88 Instrument inst;
89 byte block;
90 byte data[1];
91} AdLibSound;
92
93#define ORIG_ADLIBSOUND_SIZE (ORIG_SOUNDCOMMON_SIZE + ORIG_INSTRUMENT_SIZE + 2)
94
95//
96// Sequencing stuff
97//
98#define sqMaxTracks 10
99
100typedef struct
101{
102 word length;
103 word values[1];
104} MusicGroup;
105
106typedef struct
107{
108 int valid;
109 fixed globalsoundx, globalsoundy;
110} globalsoundpos;
111
112extern globalsoundpos channelSoundPos[];
113
114// Global variables
115extern boolean AdLibPresent,
116 SoundBlasterPresent,
117 SoundPositioned;
118extern SDMode SoundMode;
119extern SDSMode DigiMode;
120extern SMMode MusicMode;
121extern int DigiMap[];
122extern int DigiChannel[];
123
124#define GetTimeCount() ((SDL_GetTicks()*7)/100)
125
126inline void Delay(int wolfticks)
127{
128 if(wolfticks>0) SDL_Delay(wolfticks * 100 / 7);
129}
130
131// Function prototypes
132extern void SD_Startup(void),
133 SD_Shutdown(void);
134
135extern int SD_GetChannelForDigi(int which);
136extern void SD_PositionSound(int leftvol,int rightvol);
137extern boolean SD_PlaySound(soundnames sound);
138extern void SD_SetPosition(int channel, int leftvol,int rightvol);
139extern void SD_StopSound(void),
140 SD_WaitSoundDone(void);
141
142extern void SD_StartMusic(int chunk);
143extern void SD_ContinueMusic(int chunk, int startoffs);
144extern void SD_MusicOn(void),
145 SD_FadeOutMusic(void);
146extern int SD_MusicOff(void);
147
148extern boolean SD_MusicPlaying(void);
149extern boolean SD_SetSoundMode(SDMode mode);
150extern boolean SD_SetMusicMode(SMMode mode);
151extern word SD_SoundPlaying(void);
152
153extern void SD_SetDigiDevice(SDSMode);
154extern void SD_PreparSound(int which);
155extern int SD_PlayDigitized(word which,int leftpos,int rightpos);
156extern void SD_StopDigitized(void);
157
158#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 @@
1//
2// ID Engine
3// ID_US.h - Header file for the User Manager
4// v1.0d1
5// By Jason Blochowiak
6//
7
8#ifndef __ID_US__
9#define __ID_US__
10
11#ifdef __DEBUG__
12#define __DEBUG_UserMgr__
13#endif
14
15//#define HELPTEXTLINKED
16
17#define MaxX 320
18#define MaxY 200
19
20#define MaxHelpLines 500
21
22#define MaxHighName 57
23#define MaxScores 7
24typedef struct
25{
26 char name[MaxHighName + 1];
27 int32_t score;
28 word completed,episode;
29} HighScore;
30
31#define MaxGameName 32
32#define MaxSaveGames 6
33typedef struct
34{
35 char signature[4];
36 word *oldtest;
37 boolean present;
38 char name[MaxGameName + 1];
39} SaveGame;
40
41#define MaxString 128 // Maximum input string size
42
43typedef struct
44{
45 int x,y,
46 w,h,
47 px,py;
48} WindowRec; // Record used to save & restore screen windows
49
50extern boolean ingame, // Set by game code if a game is in progress
51 loadedgame; // Set if the current game was loaded
52extern word PrintX,PrintY; // Current printing location in the window
53extern word WindowX,WindowY,// Current location of window
54 WindowW,WindowH;// Current size of window
55
56extern void (*USL_MeasureString)(const char *,word *,word *);
57extern void (*USL_DrawString)(const char *);
58
59extern boolean (*USL_SaveGame)(int),(*USL_LoadGame)(int);
60extern void (*USL_ResetGame)(void);
61extern SaveGame Games[MaxSaveGames];
62extern HighScore Scores[];
63
64#define US_HomeWindow() {PrintX = WindowX; PrintY = WindowY;}
65
66void US_Startup(void);
67void US_Shutdown(void);
68void US_TextScreen(void),
69 US_UpdateTextScreen(void),
70 US_FinishTextScreen(void);
71void US_DrawWindow(word x,word y,word w,word h);
72void US_CenterWindow(word,word);
73void US_SaveWindow(WindowRec *win),
74 US_RestoreWindow(WindowRec *win);
75void US_ClearWindow(void);
76void US_SetPrintRoutines(void (*measure)(const char *,word *,word *),
77 void (*print)(const char *));
78void US_PrintCentered(const char *s),
79 US_CPrint(const char *s),
80 US_CPrintLine(const char *s),
81 US_Print(const char *s);
82void US_Printf(const char *formatStr, ...);
83void US_CPrintf(const char *formatStr, ...);
84
85void US_PrintUnsigned(longword n);
86void US_PrintSigned(int32_t n);
87void US_StartCursor(void),
88 US_ShutCursor(void);
89void US_CheckHighScore(int32_t score,word other);
90void US_DisplayHighScores(int which);
91extern boolean US_UpdateCursor(void);
92boolean US_LineInput(int x,int y,char *buf,const char *def,boolean escok,
93 int maxchars,int maxwidth);
94
95void USL_PrintInCenter(const char *s,Rect r);
96char *USL_GiveSaveName(word game);
97
98void US_InitRndT(int randomize);
99int US_RndT();
100
101#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 @@
1//
2// ID Engine
3// ID_US_1.c - User Manager - General routines
4// v1.1d1
5// By Jason Blochowiak
6// Hacked up for Catacomb 3D
7//
8
9//
10// This module handles dealing with user input & feedback
11//
12// Depends on: Input Mgr, View Mgr, some variables from the Sound, Caching,
13// and Refresh Mgrs, Memory Mgr for background save/restore
14//
15// Globals:
16// ingame - Flag set by game indicating if a game is in progress
17// loadedgame - Flag set if a game was loaded
18// PrintX, PrintY - Where the User Mgr will print (global coords)
19// WindowX,WindowY,WindowW,WindowH - The dimensions of the current
20// window
21//
22
23#include "wl_def.h"
24
25#pragma hdrstop
26
27#if _MSC_VER == 1200 // Visual C++ 6
28 #define vsnprintf _vsnprintf
29#endif
30
31// Global variables
32 word PrintX,PrintY;
33 word WindowX,WindowY,WindowW,WindowH;
34
35// Internal variables
36#define ConfigVersion 1
37
38static boolean US_Started;
39
40 void (*USL_MeasureString)(const char *,word *,word *) = VW_MeasurePropString;
41 void (*USL_DrawString)(const char *) = VWB_DrawPropString;
42
43 SaveGame Games[MaxSaveGames];
44 HighScore Scores[MaxScores] =
45 {
46 {"id software-'92",10000,1},
47 {"Adrian Carmack",10000,1},
48 {"John Carmack",10000,1},
49 {"Kevin Cloud",10000,1},
50 {"Tom Hall",10000,1},
51 {"John Romero",10000,1},
52 {"Jay Wilbur",10000,1},
53 };
54
55int rndindex = 0;
56
57static byte rndtable[] = {
58 0, 8, 109, 220, 222, 241, 149, 107, 75, 248, 254, 140, 16, 66,
59 74, 21, 211, 47, 80, 242, 154, 27, 205, 128, 161, 89, 77, 36,
60 95, 110, 85, 48, 212, 140, 211, 249, 22, 79, 200, 50, 28, 188,
61 52, 140, 202, 120, 68, 145, 62, 70, 184, 190, 91, 197, 152, 224,
62 149, 104, 25, 178, 252, 182, 202, 182, 141, 197, 4, 81, 181, 242,
63 145, 42, 39, 227, 156, 198, 225, 193, 219, 93, 122, 175, 249, 0,
64 175, 143, 70, 239, 46, 246, 163, 53, 163, 109, 168, 135, 2, 235,
65 25, 92, 20, 145, 138, 77, 69, 166, 78, 176, 173, 212, 166, 113,
66 94, 161, 41, 50, 239, 49, 111, 164, 70, 60, 2, 37, 171, 75,
67 136, 156, 11, 56, 42, 146, 138, 229, 73, 146, 77, 61, 98, 196,
68 135, 106, 63, 197, 195, 86, 96, 203, 113, 101, 170, 247, 181, 113,
69 80, 250, 108, 7, 255, 237, 129, 226, 79, 107, 112, 166, 103, 241,
70 24, 223, 239, 120, 198, 58, 60, 82, 128, 3, 184, 66, 143, 224,
71 145, 224, 81, 206, 163, 45, 63, 90, 168, 114, 59, 33, 159, 95,
72 28, 139, 123, 98, 125, 196, 15, 70, 194, 253, 54, 14, 109, 226,
73 71, 17, 161, 93, 186, 87, 244, 138, 20, 52, 123, 251, 26, 36,
74 17, 46, 52, 231, 232, 76, 31, 221, 84, 37, 216, 165, 212, 106,
75 197, 242, 98, 43, 39, 175, 254, 145, 190, 84, 118, 222, 187, 136,
76 120, 163, 236, 249 };
77
78// Internal routines
79
80// Public routines
81
82///////////////////////////////////////////////////////////////////////////
83//
84// US_Startup() - Starts the User Mgr
85//
86///////////////////////////////////////////////////////////////////////////
87void US_Startup()
88{
89 if (US_Started)
90 return;
91
92 US_InitRndT(true); // Initialize the random number generator
93
94 US_Started = true;
95}
96
97
98///////////////////////////////////////////////////////////////////////////
99//
100// US_Shutdown() - Shuts down the User Mgr
101//
102///////////////////////////////////////////////////////////////////////////
103void
104US_Shutdown(void)
105{
106 if (!US_Started)
107 return;
108
109 US_Started = false;
110}
111
112// Window/Printing routines
113
114///////////////////////////////////////////////////////////////////////////
115//
116// US_SetPrintRoutines() - Sets the routines used to measure and print
117// from within the User Mgr. Primarily provided to allow switching
118// between masked and non-masked fonts
119//
120///////////////////////////////////////////////////////////////////////////
121void
122US_SetPrintRoutines(void (*measure)(const char *,word *,word *),
123 void (*print)(const char *))
124{
125 USL_MeasureString = measure;
126 USL_DrawString = print;
127}
128
129///////////////////////////////////////////////////////////////////////////
130//
131// US_Print() - Prints a string in the current window. Newlines are
132// supported.
133//
134///////////////////////////////////////////////////////////////////////////
135void
136US_Print(const char *sorg)
137{
138 char c;
139 char *sstart = strdup(sorg);
140 char *s = sstart;
141 char *se;
142 word w,h;
143
144 while (*s)
145 {
146 se = s;
147 while ((c = *se)!=0 && (c != '\n'))
148 se++;
149 *se = '\0';
150
151 USL_MeasureString(s,&w,&h);
152 px = PrintX;
153 py = PrintY;
154 USL_DrawString(s);
155
156 s = se;
157 if (c)
158 {
159 *se = c;
160 s++;
161
162 PrintX = WindowX;
163 PrintY += h;
164 }
165 else
166 PrintX += w;
167 }
168 free(sstart);
169}
170
171///////////////////////////////////////////////////////////////////////////
172//
173// US_PrintUnsigned() - Prints an unsigned long
174//
175///////////////////////////////////////////////////////////////////////////
176void
177US_PrintUnsigned(longword n)
178{
179 char buffer[32];
180 sprintf(buffer, "%lu", n);
181
182 US_Print(buffer);
183}
184
185///////////////////////////////////////////////////////////////////////////
186//
187// US_PrintSigned() - Prints a signed long
188//
189///////////////////////////////////////////////////////////////////////////
190void
191US_PrintSigned(int32_t n)
192{
193 char buffer[32];
194
195 US_Print(ltoa(n,buffer,10));
196}
197
198///////////////////////////////////////////////////////////////////////////
199//
200// USL_PrintInCenter() - Prints a string in the center of the given rect
201//
202///////////////////////////////////////////////////////////////////////////
203void
204USL_PrintInCenter(const char *s,Rect r)
205{
206 word w,h,
207 rw,rh;
208
209 USL_MeasureString(s,&w,&h);
210 rw = r.lr.x - r.ul.x;
211 rh = r.lr.y - r.ul.y;
212
213 px = r.ul.x + ((rw - w) / 2);
214 py = r.ul.y + ((rh - h) / 2);
215 USL_DrawString(s);
216}
217
218///////////////////////////////////////////////////////////////////////////
219//
220// US_PrintCentered() - Prints a string centered in the current window.
221//
222///////////////////////////////////////////////////////////////////////////
223void
224US_PrintCentered(const char *s)
225{
226 Rect r;
227
228 r.ul.x = WindowX;
229 r.ul.y = WindowY;
230 r.lr.x = r.ul.x + WindowW;
231 r.lr.y = r.ul.y + WindowH;
232
233 USL_PrintInCenter(s,r);
234}
235
236///////////////////////////////////////////////////////////////////////////
237//
238// US_CPrintLine() - Prints a string centered on the current line and
239// advances to the next line. Newlines are not supported.
240//
241///////////////////////////////////////////////////////////////////////////
242void
243US_CPrintLine(const char *s)
244{
245 word w,h;
246
247 USL_MeasureString(s,&w,&h);
248
249 if (w > WindowW)
250 Quit("US_CPrintLine() - String exceeds width");
251 px = WindowX + ((WindowW - w) / 2);
252 py = PrintY;
253 USL_DrawString(s);
254 PrintY += h;
255}
256
257///////////////////////////////////////////////////////////////////////////
258//
259// US_CPrint() - Prints a string centered in the current window.
260// Newlines are supported.
261//
262///////////////////////////////////////////////////////////////////////////
263void
264US_CPrint(const char *sorg)
265{
266 char c;
267 char *sstart = strdup(sorg);
268 char *s = sstart;
269 char *se;
270
271 while (*s)
272 {
273 se = s;
274 while ((c = *se)!=0 && (c != '\n'))
275 se++;
276 *se = '\0';
277
278 US_CPrintLine(s);
279
280 s = se;
281 if (c)
282 {
283 *se = c;
284 s++;
285 }
286 }
287 free(sstart);
288}
289
290///////////////////////////////////////////////////////////////////////////
291//
292// US_Printf() - Prints a formatted string in the current window.
293// Newlines are supported.
294//
295///////////////////////////////////////////////////////////////////////////
296
297void US_Printf(const char *formatStr, ...)
298{
299 char strbuf[256];
300 va_list vlist;
301 va_start(vlist, formatStr);
302 int len = vsnprintf(strbuf, sizeof(strbuf), formatStr, vlist);
303 va_end(vlist);
304 if(len <= -1 || len >= sizeof(strbuf))
305 strbuf[sizeof(strbuf) - 1] = 0;
306 US_Print(strbuf);
307}
308
309///////////////////////////////////////////////////////////////////////////
310//
311// US_CPrintf() - Prints a formatted string centered in the current window.
312// Newlines are supported.
313//
314///////////////////////////////////////////////////////////////////////////
315
316void US_CPrintf(const char *formatStr, ...)
317{
318 char strbuf[256];
319 va_list vlist;
320 va_start(vlist, formatStr);
321 int len = vsnprintf(strbuf, sizeof(strbuf), formatStr, vlist);
322 va_end(vlist);
323 if(len <= -1 || len >= sizeof(strbuf))
324 strbuf[sizeof(strbuf) - 1] = 0;
325 US_CPrint(strbuf);
326}
327
328///////////////////////////////////////////////////////////////////////////
329//
330// US_ClearWindow() - Clears the current window to white and homes the
331// cursor
332//
333///////////////////////////////////////////////////////////////////////////
334void
335US_ClearWindow(void)
336{
337 VWB_Bar(WindowX,WindowY,WindowW,WindowH,WHITE);
338 PrintX = WindowX;
339 PrintY = WindowY;
340}
341
342///////////////////////////////////////////////////////////////////////////
343//
344// US_DrawWindow() - Draws a frame and sets the current window parms
345//
346///////////////////////////////////////////////////////////////////////////
347void
348US_DrawWindow(word x,word y,word w,word h)
349{
350 word i,
351 sx,sy,sw,sh;
352
353 WindowX = x * 8;
354 WindowY = y * 8;
355 WindowW = w * 8;
356 WindowH = h * 8;
357
358 PrintX = WindowX;
359 PrintY = WindowY;
360
361 sx = (x - 1) * 8;
362 sy = (y - 1) * 8;
363 sw = (w + 1) * 8;
364 sh = (h + 1) * 8;
365
366 US_ClearWindow();
367
368 VWB_DrawTile8(sx,sy,0),VWB_DrawTile8(sx,sy + sh,5);
369 for (i = sx + 8;i <= sx + sw - 8;i += 8)
370 VWB_DrawTile8(i,sy,1),VWB_DrawTile8(i,sy + sh,6);
371 VWB_DrawTile8(i,sy,2),VWB_DrawTile8(i,sy + sh,7);
372
373 for (i = sy + 8;i <= sy + sh - 8;i += 8)
374 VWB_DrawTile8(sx,i,3),VWB_DrawTile8(sx + sw,i,4);
375}
376
377///////////////////////////////////////////////////////////////////////////
378//
379// US_CenterWindow() - Generates a window of a given width & height in the
380// middle of the screen
381//
382///////////////////////////////////////////////////////////////////////////
383void
384US_CenterWindow(word w,word h)
385{
386 US_DrawWindow(((MaxX / 8) - w) / 2,((MaxY / 8) - h) / 2,w,h);
387}
388
389///////////////////////////////////////////////////////////////////////////
390//
391// US_SaveWindow() - Saves the current window parms into a record for
392// later restoration
393//
394///////////////////////////////////////////////////////////////////////////
395void
396US_SaveWindow(WindowRec *win)
397{
398 win->x = WindowX;
399 win->y = WindowY;
400 win->w = WindowW;
401 win->h = WindowH;
402
403 win->px = PrintX;
404 win->py = PrintY;
405}
406
407///////////////////////////////////////////////////////////////////////////
408//
409// US_RestoreWindow() - Sets the current window parms to those held in the
410// record
411//
412///////////////////////////////////////////////////////////////////////////
413void
414US_RestoreWindow(WindowRec *win)
415{
416 WindowX = win->x;
417 WindowY = win->y;
418 WindowW = win->w;
419 WindowH = win->h;
420
421 PrintX = win->px;
422 PrintY = win->py;
423}
424
425// Input routines
426
427///////////////////////////////////////////////////////////////////////////
428//
429// USL_XORICursor() - XORs the I-bar text cursor. Used by US_LineInput()
430//
431///////////////////////////////////////////////////////////////////////////
432static void
433USL_XORICursor(int x,int y,const char *s,word cursor)
434{
435 static boolean status; // VGA doesn't XOR...
436 char buf[MaxString];
437 int temp;
438 word w,h;
439
440 strcpy(buf,s);
441 buf[cursor] = '\0';
442 USL_MeasureString(buf,&w,&h);
443
444 px = x + w - 1;
445 py = y;
446 if (status^=1)
447 USL_DrawString("\x80");
448 else
449 {
450 temp = fontcolor;
451 fontcolor = backcolor;
452 USL_DrawString("\x80");
453 fontcolor = temp;
454 }
455}
456
457char USL_RotateChar(char ch, int dir)
458{
459 static const char charSet[] = " ABCDEFGHIJKLMNOPQRSTUVWXYZ.,-!?0123456789";
460 const int numChars = sizeof(charSet) / sizeof(char) - 1;
461 int i;
462 for(i = 0; i < numChars; i++)
463 {
464 if(ch == charSet[i]) break;
465 }
466
467 if(i == numChars) i = 0;
468
469 i += dir;
470 if(i < 0) i = numChars - 1;
471 else if(i >= numChars) i = 0;
472 return charSet[i];
473}
474
475///////////////////////////////////////////////////////////////////////////
476//
477// US_LineInput() - Gets a line of user input at (x,y), the string defaults
478// to whatever is pointed at by def. Input is restricted to maxchars
479// chars or maxwidth pixels wide. If the user hits escape (and escok is
480// true), nothing is copied into buf, and false is returned. If the
481// user hits return, the current string is copied into buf, and true is
482// returned
483//
484///////////////////////////////////////////////////////////////////////////
485boolean
486US_LineInput(int x,int y,char *buf,const char *def,boolean escok,
487 int maxchars,int maxwidth)
488{
489 boolean redraw,
490 cursorvis,cursormoved,
491 done,result, checkkey;
492 ScanCode sc;
493 char c;
494 char s[MaxString],olds[MaxString];
495 int cursor,len;
496 word i,
497 w,h,
498 temp;
499 longword curtime, lasttime, lastdirtime, lastbuttontime, lastdirmovetime;
500 ControlInfo ci;
501 Direction lastdir = dir_None;
502
503 if (def)
504 strcpy(s,def);
505 else
506 *s = '\0';
507 *olds = '\0';
508 cursor = (int) strlen(s);
509 cursormoved = redraw = true;
510
511 cursorvis = done = false;
512 lasttime = lastdirtime = lastdirmovetime = GetTimeCount();
513 lastbuttontime = lasttime + TickBase / 4; // 250 ms => first button press accepted after 500 ms
514 LastASCII = key_None;
515 LastScan = sc_None;
516
517 while (!done)
518 {
519 ReadAnyControl(&ci);
520
521 if (cursorvis)
522 USL_XORICursor(x,y,s,cursor);
523
524 sc = LastScan;
525 LastScan = sc_None;
526 c = LastASCII;
527 LastASCII = key_None;
528
529 checkkey = true;
530 curtime = GetTimeCount();
531
532 // After each direction change accept the next change after 250 ms and then everz 125 ms
533 if(ci.dir != lastdir || curtime - lastdirtime > TickBase / 4 && curtime - lastdirmovetime > TickBase / 8)
534 {
535 if(ci.dir != lastdir)
536 {
537 lastdir = ci.dir;
538 lastdirtime = curtime;
539 }
540 lastdirmovetime = curtime;
541
542 switch(ci.dir)
543 {
544 case dir_West:
545 if(cursor)
546 {
547 // Remove trailing whitespace if cursor is at end of string
548 if(s[cursor] == ' ' && s[cursor + 1] == 0)
549 s[cursor] = 0;
550 cursor--;
551 }
552 cursormoved = true;
553 checkkey = false;
554 break;
555 case dir_East:
556 if(cursor >= MaxString - 1) break;
557
558 if(!s[cursor])
559 {
560 USL_MeasureString(s,&w,&h);
561 if(len >= maxchars || maxwidth && w >= maxwidth) break;
562
563 s[cursor] = ' ';
564 s[cursor + 1] = 0;
565 }
566 cursor++;
567 cursormoved = true;
568 checkkey = false;
569 break;
570
571 case dir_North:
572 if(!s[cursor])
573 {
574 USL_MeasureString(s,&w,&h);
575 if(len >= maxchars || maxwidth && w >= maxwidth) break;
576 s[cursor + 1] = 0;
577 }
578 s[cursor] = USL_RotateChar(s[cursor], 1);
579 redraw = true;
580 checkkey = false;
581 break;
582
583 case dir_South:
584 if(!s[cursor])
585 {
586 USL_MeasureString(s,&w,&h);
587 if(len >= maxchars || maxwidth && w >= maxwidth) break;
588 s[cursor + 1] = 0;
589 }
590 s[cursor] = USL_RotateChar(s[cursor], -1);
591 redraw = true;
592 checkkey = false;
593 break;
594 }
595 }
596
597 if((int)(curtime - lastbuttontime) > TickBase / 4) // 250 ms
598 {
599 if(ci.button0) // acts as return
600 {
601 strcpy(buf,s);
602 done = true;
603 result = true;
604 checkkey = false;
605 }
606 if(ci.button1 && escok) // acts as escape
607 {
608 done = true;
609 result = false;
610 checkkey = false;
611 }
612 if(ci.button2) // acts as backspace
613 {
614 lastbuttontime = curtime;
615 if(cursor)
616 {
617 strcpy(s + cursor - 1,s + cursor);
618 cursor--;
619 redraw = true;
620 }
621 cursormoved = true;
622 checkkey = false;
623 }
624 }
625
626 if(checkkey)
627 {
628 switch (sc)
629 {
630 case sc_LeftArrow:
631 if (cursor)
632 cursor--;
633 c = key_None;
634 cursormoved = true;
635 break;
636 case sc_RightArrow:
637 if (s[cursor])
638 cursor++;
639 c = key_None;
640 cursormoved = true;
641 break;
642 case sc_Home:
643 cursor = 0;
644 c = key_None;
645 cursormoved = true;
646 break;
647 case sc_End:
648 cursor = (int) strlen(s);
649 c = key_None;
650 cursormoved = true;
651 break;
652
653 case sc_Return:
654 strcpy(buf,s);
655 done = true;
656 result = true;
657 c = key_None;
658 break;
659 case sc_Escape:
660 if (escok)
661 {
662 done = true;
663 result = false;
664 }
665 c = key_None;
666 break;
667
668 case sc_BackSpace:
669 if (cursor)
670 {
671 strcpy(s + cursor - 1,s + cursor);
672 cursor--;
673 redraw = true;
674 }
675 c = key_None;
676 cursormoved = true;
677 break;
678 case sc_Delete:
679 if (s[cursor])
680 {
681 strcpy(s + cursor,s + cursor + 1);
682 redraw = true;
683 }
684 c = key_None;
685 cursormoved = true;
686 break;
687
688 case SDLK_KP5: //0x4c: // Keypad 5 // TODO: hmmm...
689 case sc_UpArrow:
690 case sc_DownArrow:
691 case sc_PgUp:
692 case sc_PgDn:
693 case sc_Insert:
694 c = key_None;
695 break;
696 }
697
698 if (c)
699 {
700 len = (int) strlen(s);
701 USL_MeasureString(s,&w,&h);
702
703 if(isprint(c) && (len < MaxString - 1) && ((!maxchars) || (len < maxchars))
704 && ((!maxwidth) || (w < maxwidth)))
705 {
706 for (i = len + 1;i > cursor;i--)
707 s[i] = s[i - 1];
708 s[cursor++] = c;
709 redraw = true;
710 }
711 }
712 }
713
714 if (redraw)
715 {
716 px = x;
717 py = y;
718 temp = fontcolor;
719 fontcolor = backcolor;
720 USL_DrawString(olds);
721 fontcolor = (byte) temp;
722 strcpy(olds,s);
723
724 px = x;
725 py = y;
726 USL_DrawString(s);
727
728 redraw = false;
729 }
730
731 if (cursormoved)
732 {
733 cursorvis = false;
734 lasttime = curtime - TickBase;
735
736 cursormoved = false;
737 }
738 if (curtime - lasttime > TickBase / 2) // 500 ms
739 {
740 lasttime = curtime;
741
742 cursorvis ^= true;
743 }
744 else SDL_Delay(5);
745 if (cursorvis)
746 USL_XORICursor(x,y,s,cursor);
747
748 VW_UpdateScreen();
749 }
750
751 if (cursorvis)
752 USL_XORICursor(x,y,s,cursor);
753 if (!result)
754 {
755 px = x;
756 py = y;
757 USL_DrawString(olds);
758 }
759 VW_UpdateScreen();
760
761 IN_ClearKeysDown();
762 return(result);
763}
764
765///////////////////////////////////////////////////////////////////////////
766//
767// US_InitRndT - Initializes the pseudo random number generator.
768// If randomize is true, the seed will be initialized depending on the
769// current time
770//
771///////////////////////////////////////////////////////////////////////////
772void US_InitRndT(int randomize)
773{
774 if(randomize)
775 rndindex = (SDL_GetTicks() >> 4) & 0xff;
776 else
777 rndindex = 0;
778}
779
780///////////////////////////////////////////////////////////////////////////
781//
782// US_RndT - Returns the next 8-bit pseudo random number
783//
784///////////////////////////////////////////////////////////////////////////
785int US_RndT()
786{
787 rndindex = (rndindex+1)&0xff;
788 return rndtable[rndindex];
789}
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 @@
1#include "wl_def.h"
2
3
4pictabletype *pictable;
5SDL_Surface *latchpics[NUMLATCHPICS];
6
7int px,py;
8byte fontcolor,backcolor;
9int fontnumber;
10
11//==========================================================================
12
13void VWB_DrawPropString(const char* string)
14{
15 fontstruct *font;
16 int width, step, height;
17 byte *source, *dest;
18 byte ch;
19
20 byte *vbuf = LOCK();
21
22 font = (fontstruct *) grsegs[STARTFONT+fontnumber];
23 height = font->height;
24 dest = vbuf + scaleFactor * (py * curPitch + px);
25
26 while ((ch = (byte)*string++)!=0)
27 {
28 width = step = font->width[ch];
29 source = ((byte *)font)+font->location[ch];
30 while (width--)
31 {
32 for(int i=0;i<height;i++)
33 {
34 if(source[i*step])
35 {
36 for(unsigned sy=0; sy<scaleFactor; sy++)
37 for(unsigned sx=0; sx<scaleFactor; sx++)
38 dest[(scaleFactor*i+sy)*curPitch+sx]=fontcolor;
39 }
40 }
41
42 source++;
43 px++;
44 dest+=scaleFactor;
45 }
46 }
47
48 UNLOCK();
49}
50
51/*
52=================
53=
54= VL_MungePic
55=
56=================
57*/
58
59void VL_MungePic (byte *source, unsigned width, unsigned height)
60{
61 unsigned x,y,plane,size,pwidth;
62 byte *temp, *dest, *srcline;
63
64 size = width*height;
65
66 if (width&3)
67 Quit ("VL_MungePic: Not divisable by 4!");
68
69//
70// copy the pic to a temp buffer
71//
72 temp=(byte *) malloc(size);
73 CHECKMALLOCRESULT(temp);
74 memcpy (temp,source,size);
75
76//
77// munge it back into the original buffer
78//
79 dest = source;
80 pwidth = width/4;
81
82 for (plane=0;plane<4;plane++)
83 {
84 srcline = temp;
85 for (y=0;y<height;y++)
86 {
87 for (x=0;x<pwidth;x++)
88 *dest++ = *(srcline+x*4+plane);
89 srcline+=width;
90 }
91 }
92
93 free(temp);
94}
95
96void VWL_MeasureString (const char *string, word *width, word *height, fontstruct *font)
97{
98 *height = font->height;
99 for (*width = 0;*string;string++)
100 *width += font->width[*((byte *)string)]; // proportional width
101}
102
103void VW_MeasurePropString (const char *string, word *width, word *height)
104{
105 VWL_MeasureString(string,width,height,(fontstruct *)grsegs[STARTFONT+fontnumber]);
106}
107
108/*
109=============================================================================
110
111 Double buffer management routines
112
113=============================================================================
114*/
115
116void VH_UpdateScreen()
117{
118 SDL_BlitSurface(screenBuffer, NULL, screen, NULL);
119 SDL_Flip(screen);
120}
121
122
123void VWB_DrawTile8 (int x, int y, int tile)
124{
125 LatchDrawChar(x,y,tile);
126}
127
128void VWB_DrawTile8M (int x, int y, int tile)
129{
130 VL_MemToScreen (((byte *)grsegs[STARTTILE8M])+tile*64,8,8,x,y);
131}
132
133void VWB_DrawPic (int x, int y, int chunknum)
134{
135 int picnum = chunknum - STARTPICS;
136 unsigned width,height;
137
138 x &= ~7;
139
140 width = pictable[picnum].width;
141 height = pictable[picnum].height;
142
143 VL_MemToScreen (grsegs[chunknum],width,height,x,y);
144}
145
146void VWB_DrawPicScaledCoord (int scx, int scy, int chunknum)
147{
148 int picnum = chunknum - STARTPICS;
149 unsigned width,height;
150
151 width = pictable[picnum].width;
152 height = pictable[picnum].height;
153
154 VL_MemToScreenScaledCoord (grsegs[chunknum],width,height,scx,scy);
155}
156
157
158void VWB_Bar (int x, int y, int width, int height, int color)
159{
160 VW_Bar (x,y,width,height,color);
161}
162
163void VWB_Plot (int x, int y, int color)
164{
165 if(scaleFactor == 1)
166 VW_Plot(x,y,color);
167 else
168 VW_Bar(x, y, 1, 1, color);
169}
170
171void VWB_Hlin (int x1, int x2, int y, int color)
172{
173 if(scaleFactor == 1)
174 VW_Hlin(x1,x2,y,color);
175 else
176 VW_Bar(x1, y, x2-x1+1, 1, color);
177}
178
179void VWB_Vlin (int y1, int y2, int x, int color)
180{
181 if(scaleFactor == 1)
182 VW_Vlin(y1,y2,x,color);
183 else
184 VW_Bar(x, y1, 1, y2-y1+1, color);
185}
186
187
188/*
189=============================================================================
190
191 WOLFENSTEIN STUFF
192
193=============================================================================
194*/
195
196/*
197=====================
198=
199= LatchDrawPic
200=
201=====================
202*/
203
204void LatchDrawPic (unsigned x, unsigned y, unsigned picnum)
205{
206 VL_LatchToScreen_ez (latchpics[2+picnum-LATCHPICS_LUMP_START], x*8, y);
207}
208
209void LatchDrawPicScaledCoord (unsigned scx, unsigned scy, unsigned picnum)
210{
211 VL_LatchToScreenScaledCoord_ez (latchpics[2+picnum-LATCHPICS_LUMP_START], scx*8, scy);
212}
213
214
215//==========================================================================
216
217/*
218===================
219=
220= LoadLatchMem
221=
222===================
223*/
224
225void LoadLatchMem (void)
226{
227 int i,width,height,start,end;
228 byte *src;
229 SDL_Surface *surf;
230
231//
232// tile 8s
233//
234 surf = SDL_CreateRGBSurface(SDL_HWSURFACE, 8*8,
235 ((NUMTILE8 + 7) / 8) * 8, 8, 0, 0, 0, 0);
236 if(surf == NULL)
237 {
238 Quit("Unable to create surface for tiles!");
239 }
240 SDL_SetColors(surf, gamepal, 0, 256);
241
242 latchpics[0] = surf;
243 CA_CacheGrChunk (STARTTILE8);
244 src = grsegs[STARTTILE8];
245
246 for (i=0;i<NUMTILE8;i++)
247 {
248 VL_MemToLatch (src, 8, 8, surf, (i & 7) * 8, (i >> 3) * 8);
249 src += 64;
250 }
251 UNCACHEGRCHUNK (STARTTILE8);
252
253//
254// pics
255//
256 start = LATCHPICS_LUMP_START;
257 end = LATCHPICS_LUMP_END;
258
259 for (i=start;i<=end;i++)
260 {
261 width = pictable[i-STARTPICS].width;
262 height = pictable[i-STARTPICS].height;
263 surf = SDL_CreateRGBSurface(SDL_HWSURFACE, width, height, 8, 0, 0, 0, 0);
264 if(surf == NULL)
265 {
266 Quit("Unable to create surface for picture!");
267 }
268 SDL_SetColors(surf, gamepal, 0, 256);
269
270 latchpics[2+i-start] = surf;
271 CA_CacheGrChunk (i);
272 VL_MemToLatch (grsegs[i], width, height, surf, 0, 0);
273 UNCACHEGRCHUNK(i);
274 }
275}
276
277//==========================================================================
278
279/*
280===================
281=
282= FizzleFade
283=
284= returns true if aborted
285=
286= It uses maximum-length Linear Feedback Shift Registers (LFSR) counters.
287= You can find a list of them with lengths from 3 to 168 at:
288= http://www.xilinx.com/support/documentation/application_notes/xapp052.pdf
289= Many thanks to Xilinx for this list!!!
290=
291===================
292*/
293
294// XOR masks for the pseudo-random number sequence starting with n=17 bits
295static const uint32_t rndmasks[] = {
296 // n XNOR from (starting at 1, not 0 as usual)
297 0x00012000, // 17 17,14
298 0x00020400, // 18 18,11
299 0x00040023, // 19 19,6,2,1
300 0x00090000, // 20 20,17
301 0x00140000, // 21 21,19
302 0x00300000, // 22 22,21
303 0x00420000, // 23 23,18
304 0x00e10000, // 24 24,23,22,17
305 0x01200000, // 25 25,22 (this is enough for 8191x4095)
306};
307
308static unsigned int rndbits_y;
309static unsigned int rndmask;
310
311extern SDL_Color curpal[256];
312
313// Returns the number of bits needed to represent the given value
314static int log2_ceil(uint32_t x)
315{
316 int n = 0;
317 uint32_t v = 1;
318 while(v < x)
319 {
320 n++;
321 v <<= 1;
322 }
323 return n;
324}
325
326void VH_Startup()
327{
328 int rndbits_x = log2_ceil(screenWidth);
329 rndbits_y = log2_ceil(screenHeight);
330
331 int rndbits = rndbits_x + rndbits_y;
332 if(rndbits < 17)
333 rndbits = 17; // no problem, just a bit slower
334 else if(rndbits > 25)
335 rndbits = 25; // fizzle fade will not fill whole screen
336
337 rndmask = rndmasks[rndbits - 17];
338}
339
340boolean FizzleFade (SDL_Surface *source, int x1, int y1,
341 unsigned width, unsigned height, unsigned frames, boolean abortable)
342{
343 unsigned x, y, frame, pixperframe;
344 int32_t rndval, lastrndval;
345 int first = 1;
346
347 lastrndval = 0;
348 pixperframe = width * height / frames;
349
350 IN_StartAck ();
351
352 frame = GetTimeCount();
353 byte *srcptr = VL_LockSurface(source);
354 do
355 {
356 if(abortable && IN_CheckAck ())
357 {
358 VL_UnlockSurface(source);
359 SDL_BlitSurface(source, NULL, screen, NULL);
360 SDL_Flip(screen);
361 return true;
362 }
363
364 byte *destptr = VL_LockSurface(screen);
365
366 rndval = lastrndval;
367
368 // When using double buffering, we have to copy the pixels of the last AND the current frame.
369 // Only for the first frame, there is no "last frame"
370 for(int i = first; i < 2; i++)
371 {
372 for(unsigned p = 0; p < pixperframe; p++)
373 {
374 //
375 // seperate random value into x/y pair
376 //
377
378 x = rndval >> rndbits_y;
379 y = rndval & ((1 << rndbits_y) - 1);
380
381 //
382 // advance to next random element
383 //
384
385 rndval = (rndval >> 1) ^ (rndval & 1 ? 0 : rndmask);
386
387 if(x >= width || y >= height)
388 {
389 if(rndval == 0) // entire sequence has been completed
390 goto finished;
391 p--;
392 continue;
393 }
394
395 //
396 // copy one pixel
397 //
398
399 if(screenBits == 8)
400 {
401 *(destptr + (y1 + y) * screen->pitch + x1 + x)
402 = *(srcptr + (y1 + y) * source->pitch + x1 + x);
403 }
404 else
405 {
406 byte col = *(srcptr + (y1 + y) * source->pitch + x1 + x);
407 uint32_t fullcol = SDL_MapRGB(screen->format, curpal[col].r, curpal[col].g, curpal[col].b);
408 memcpy(destptr + (y1 + y) * screen->pitch + (x1 + x) * screen->format->BytesPerPixel,
409 &fullcol, screen->format->BytesPerPixel);
410 }
411
412 if(rndval == 0) // entire sequence has been completed
413 goto finished;
414 }
415
416 if(!i || first) lastrndval = rndval;
417 }
418
419 // If there is no double buffering, we always use the "first frame" case
420 if(usedoublebuffering) first = 0;
421
422 VL_UnlockSurface(screen);
423 SDL_Flip(screen);
424
425 frame++;
426 Delay(frame - GetTimeCount()); // don't go too fast
427 } while (1);
428
429finished:
430 VL_UnlockSurface(source);
431 VL_UnlockSurface(screen);
432 SDL_BlitSurface(source, NULL, screen, NULL);
433 SDL_Flip(screen);
434 return false;
435}
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 @@
1// ID_VH.H
2
3
4#define WHITE 15 // graphics mode independant colors
5#define BLACK 0
6#define FIRSTCOLOR 1
7#define SECONDCOLOR 12
8#define F_WHITE 15
9#define F_BLACK 0
10#define F_FIRSTCOLOR 1
11#define F_SECONDCOLOR 12
12
13//===========================================================================
14
15#define MAXSHIFTS 1
16
17typedef struct
18{
19 int16_t width,height;
20} pictabletype;
21
22
23typedef struct
24{
25 int16_t height;
26 int16_t location[256];
27 int8_t width[256];
28} fontstruct;
29
30
31//===========================================================================
32
33
34extern pictabletype *pictable;
35extern pictabletype *picmtable;
36
37extern byte fontcolor,backcolor;
38extern int fontnumber;
39extern int px,py;
40
41#define SETFONTCOLOR(f,b) fontcolor=f;backcolor=b;
42
43//
44// mode independant routines
45// coordinates in pixels, rounded to best screen res
46// regions marked in double buffer
47//
48
49void VWB_DrawPropString (const char *string);
50
51void VWB_DrawTile8 (int x, int y, int tile);
52void VWB_DrawTile8M (int x, int y, int tile);
53void VWB_DrawTile16 (int x, int y, int tile);
54void VWB_DrawTile16M (int x, int y, int tile);
55void VWB_DrawPic (int x, int y, int chunknum);
56void VWB_DrawPicScaledCoord (int x, int y, int chunknum);
57void VWB_DrawMPic(int x, int y, int chunknum);
58void VWB_Bar (int x, int y, int width, int height, int color);
59#define VWB_BarScaledCoord VL_BarScaledCoord
60void VWB_Plot (int x, int y, int color);
61#define VWB_PlotScaledCoord VW_Plot
62void VWB_Hlin (int x1, int x2, int y, int color);
63void VWB_Vlin (int y1, int y2, int x, int color);
64#define VWB_HlinScaledCoord VW_Hlin
65#define VWB_VlinScaledCoord VW_Vlin
66
67void VH_UpdateScreen();
68#define VW_UpdateScreen VH_UpdateScreen
69
70//
71// wolfenstein EGA compatability stuff
72//
73
74
75#define VW_Shutdown VL_Shutdown
76#define VW_Bar VL_Bar
77#define VW_Plot VL_Plot
78#define VW_Hlin(x,z,y,c) VL_Hlin(x,y,(z)-(x)+1,c)
79#define VW_Vlin(y,z,x,c) VL_Vlin(x,y,(z)-(y)+1,c)
80#define VW_DrawPic VH_DrawPic
81#define VW_WaitVBL VL_WaitVBL
82#define VW_FadeIn() VL_FadeIn(0,255,gamepal,30);
83#define VW_FadeOut() VL_FadeOut(0,255,0,0,0,30);
84#define VW_ScreenToScreen VL_ScreenToScreen
85void VW_MeasurePropString (const char *string, word *width, word *height);
86
87#define LatchDrawChar(x,y,p) VL_LatchToScreen(latchpics[0],((p)&7)*8,((p)>>3)*8*64,8,8,x,y)
88#define LatchDrawTile(x,y,p) VL_LatchToScreen(latchpics[1],(p)*64,0,16,16,x,y)
89
90void LatchDrawPic (unsigned x, unsigned y, unsigned picnum);
91void LatchDrawPicScaledCoord (unsigned scx, unsigned scy, unsigned picnum);
92void LoadLatchMem (void);
93
94void VH_Startup();
95boolean FizzleFade (SDL_Surface *source, int x1, int y1,
96 unsigned width, unsigned height, unsigned frames, boolean abortable);
97
98#define NUMLATCHPICS 100
99extern 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 @@
1// ID_VL.C
2
3#include <string.h>
4#include "wl_def.h"
5#pragma hdrstop
6
7// Uncomment the following line, if you get destination out of bounds
8// assertion errors and want to ignore them during debugging
9//#define IGNORE_BAD_DEST
10
11#ifdef IGNORE_BAD_DEST
12#undef assert
13#define assert(x) if(!(x)) return
14#define assert_ret(x) if(!(x)) return 0
15#else
16#define assert_ret(x) assert(x)
17#endif
18
19boolean fullscreen = true;
20boolean usedoublebuffering = true;
21unsigned screenWidth = 320; // SDL will scale for us
22unsigned screenHeight = 200;
23unsigned screenBits = LCD_DEPTH; // use "best" color depth according to libSDL
24
25SDL_Surface *screen = NULL;
26unsigned screenPitch;
27
28SDL_Surface *screenBuffer = NULL;
29unsigned bufferPitch;
30
31SDL_Surface *curSurface = NULL;
32unsigned curPitch;
33
34unsigned scaleFactor;
35
36boolean screenfaded;
37unsigned bordercolor;
38
39SDL_Color palette1[256], palette2[256];
40SDL_Color curpal[256];
41
42
43#define CASSERT(x) extern int ASSERT_COMPILE[((x) != 0) * 2 - 1];
44#define RGB(r, g, b) {(r)*255/63, (g)*255/63, (b)*255/63, 0}
45
46SDL_Color gamepal[]={
47#ifdef SPEAR
48 #include "sodpal.inc"
49#else
50 #include "wolfpal.inc"
51#endif
52};
53
54CASSERT(lengthof(gamepal) == 256)
55
56//===========================================================================
57
58
59/*
60=======================
61=
62= VL_Shutdown
63=
64=======================
65*/
66
67void VL_Shutdown (void)
68{
69 //VL_SetTextMode ();
70}
71
72
73/*
74=======================
75=
76= VL_SetVGAPlaneMode
77=
78=======================
79*/
80
81void VL_SetVGAPlaneMode (void)
82{
83#ifdef SPEAR
84 SDL_WM_SetCaption("Spear of Destiny", NULL);
85#else
86 SDL_WM_SetCaption("Wolfenstein 3D", NULL);
87#endif
88
89 if(screenBits == -1)
90 {
91 const SDL_VideoInfo *vidInfo = SDL_GetVideoInfo();
92 screenBits = vidInfo->vfmt->BitsPerPixel;
93 }
94
95 screen = SDL_SetVideoMode(screenWidth, screenHeight, screenBits,
96 (usedoublebuffering ? SDL_HWSURFACE | SDL_DOUBLEBUF : 0)
97 | (screenBits == 8 ? SDL_HWPALETTE : 0)
98 | (fullscreen ? SDL_FULLSCREEN : 0));
99 if(!screen)
100 {
101 printf("Unable to set %ix%ix%i video mode: %s\n", screenWidth,
102 screenHeight, screenBits, SDL_GetError());
103 exit(1);
104 }
105 if((screen->flags & SDL_DOUBLEBUF) != SDL_DOUBLEBUF)
106 usedoublebuffering = false;
107 SDL_ShowCursor(SDL_DISABLE);
108
109 SDL_SetColors(screen, gamepal, 0, 256);
110 memcpy(curpal, gamepal, sizeof(SDL_Color) * 256);
111
112 screenBuffer = SDL_CreateRGBSurface(SDL_SWSURFACE, screenWidth,
113 screenHeight, 8, 0, 0, 0, 0);
114 if(!screenBuffer)
115 {
116 printf("Unable to create screen buffer surface: %s\n", SDL_GetError());
117 exit(1);
118 }
119 SDL_SetColors(screenBuffer, gamepal, 0, 256);
120
121 screenPitch = screen->pitch;
122 bufferPitch = screenBuffer->pitch;
123
124 curSurface = screenBuffer;
125 curPitch = bufferPitch;
126
127 scaleFactor = screenWidth/320;
128 if(screenHeight/200 < scaleFactor) scaleFactor = screenHeight/200;
129
130 pixelangle = (short *) malloc(screenWidth * sizeof(short));
131 CHECKMALLOCRESULT(pixelangle);
132 wallheight = (int *) malloc(screenWidth * sizeof(int));
133 CHECKMALLOCRESULT(wallheight);
134}
135
136/*
137=============================================================================
138
139 PALETTE OPS
140
141 To avoid snow, do a WaitVBL BEFORE calling these
142
143=============================================================================
144*/
145
146/*
147=================
148=
149= VL_ConvertPalette
150=
151=================
152*/
153
154void VL_ConvertPalette(byte *srcpal, SDL_Color *destpal, int numColors)
155{
156 for(int i=0; i<numColors; i++)
157 {
158 destpal[i].r = *srcpal++ * 255 / 63;
159 destpal[i].g = *srcpal++ * 255 / 63;
160 destpal[i].b = *srcpal++ * 255 / 63;
161 }
162}
163
164/*
165=================
166=
167= VL_FillPalette
168=
169=================
170*/
171
172void VL_FillPalette (int red, int green, int blue)
173{
174 int i;
175 SDL_Color pal[256];
176
177 for(i=0; i<256; i++)
178 {
179 pal[i].r = red;
180 pal[i].g = green;
181 pal[i].b = blue;
182 }
183
184 VL_SetPalette(pal, true);
185}
186
187//===========================================================================
188
189/*
190=================
191=
192= VL_SetColor
193=
194=================
195*/
196
197void VL_SetColor (int color, int red, int green, int blue)
198{
199 SDL_Color col = { red, green, blue };
200 curpal[color] = col;
201
202 if(screenBits == 8)
203 SDL_SetPalette(screen, SDL_PHYSPAL, &col, color, 1);
204 else
205 {
206 SDL_SetPalette(curSurface, SDL_LOGPAL, &col, color, 1);
207 SDL_BlitSurface(curSurface, NULL, screen, NULL);
208 SDL_Flip(screen);
209 }
210}
211
212//===========================================================================
213
214/*
215=================
216=
217= VL_GetColor
218=
219=================
220*/
221
222void VL_GetColor (int color, int *red, int *green, int *blue)
223{
224 SDL_Color *col = &curpal[color];
225 *red = col->r;
226 *green = col->g;
227 *blue = col->b;
228}
229
230//===========================================================================
231
232/*
233=================
234=
235= VL_SetPalette
236=
237=================
238*/
239
240void VL_SetPalette (SDL_Color *palette, bool forceupdate)
241{
242 memcpy(curpal, palette, sizeof(SDL_Color) * 256);
243
244 if(screenBits == 8)
245 SDL_SetPalette(screen, SDL_PHYSPAL, palette, 0, 256);
246 else
247 {
248 SDL_SetPalette(curSurface, SDL_LOGPAL, palette, 0, 256);
249 if(forceupdate)
250 {
251 SDL_BlitSurface(curSurface, NULL, screen, NULL);
252 SDL_Flip(screen);
253 }
254 }
255}
256
257
258//===========================================================================
259
260/*
261=================
262=
263= VL_GetPalette
264=
265=================
266*/
267
268void VL_GetPalette (SDL_Color *palette)
269{
270 memcpy(palette, curpal, sizeof(SDL_Color) * 256);
271}
272
273
274//===========================================================================
275
276/*
277=================
278=
279= VL_FadeOut
280=
281= Fades the current palette to the given color in the given number of steps
282=
283=================
284*/
285
286void VL_FadeOut (int start, int end, int red, int green, int blue, int steps)
287{
288 int i,j,orig,delta;
289 SDL_Color *origptr, *newptr;
290
291 red = red * 255 / 63;
292 green = green * 255 / 63;
293 blue = blue * 255 / 63;
294
295 // rockbox
296 steps = steps / 2;
297
298 VL_WaitVBL(1);
299 VL_GetPalette(palette1);
300 memcpy(palette2, palette1, sizeof(SDL_Color) * 256);
301
302//
303// fade through intermediate frames
304//
305 for (i=0;i<steps;i++)
306 {
307 origptr = &palette1[start];
308 newptr = &palette2[start];
309 for (j=start;j<=end;j++)
310 {
311 orig = origptr->r;
312 delta = red-orig;
313 newptr->r = orig + delta * i / steps;
314 orig = origptr->g;
315 delta = green-orig;
316 newptr->g = orig + delta * i / steps;
317 orig = origptr->b;
318 delta = blue-orig;
319 newptr->b = orig + delta * i / steps;
320 origptr++;
321 newptr++;
322 }
323
324 if(!usedoublebuffering || screenBits == 8) VL_WaitVBL(1);
325 VL_SetPalette (palette2, true);
326 rb->yield();
327 }
328
329//
330// final color
331//
332 VL_FillPalette (red,green,blue);
333
334 screenfaded = true;
335}
336
337
338/*
339=================
340=
341= VL_FadeIn
342=
343=================
344*/
345
346void VL_FadeIn (int start, int end, SDL_Color *palette, int steps)
347{
348 int i,j,delta;
349
350 VL_WaitVBL(1);
351 VL_GetPalette(palette1);
352 memcpy(palette2, palette1, sizeof(SDL_Color) * 256);
353
354 steps = steps / 2;
355
356//
357// fade through intermediate frames
358//
359 for (i=0;i<steps;i++)
360 {
361 for (j=start;j<=end;j++)
362 {
363 delta = palette[j].r-palette1[j].r;
364 palette2[j].r = palette1[j].r + delta * i / steps;
365 delta = palette[j].g-palette1[j].g;
366 palette2[j].g = palette1[j].g + delta * i / steps;
367 delta = palette[j].b-palette1[j].b;
368 palette2[j].b = palette1[j].b + delta * i / steps;
369 }
370
371 if(!usedoublebuffering || screenBits == 8) VL_WaitVBL(1);
372 VL_SetPalette(palette2, true);
373 }
374
375//
376// final color
377//
378 VL_SetPalette (palette, true);
379 screenfaded = false;
380}
381
382/*
383=============================================================================
384
385 PIXEL OPS
386
387=============================================================================
388*/
389
390byte *VL_LockSurface(SDL_Surface *surface)
391{
392 if(SDL_MUSTLOCK(surface))
393 {
394 if(SDL_LockSurface(surface) < 0)
395 return NULL;
396 }
397 return (byte *) surface->pixels;
398}
399
400void VL_UnlockSurface(SDL_Surface *surface)
401{
402 if(SDL_MUSTLOCK(surface))
403 {
404 SDL_UnlockSurface(surface);
405 }
406}
407
408/*
409=================
410=
411= VL_Plot
412=
413=================
414*/
415
416void VL_Plot (int x, int y, int color)
417{
418 assert(x >= 0 && (unsigned) x < screenWidth
419 && y >= 0 && (unsigned) y < screenHeight
420 && "VL_Plot: Pixel out of bounds!");
421
422 VL_LockSurface(curSurface);
423 ((byte *) curSurface->pixels)[y * curPitch + x] = color;
424 VL_UnlockSurface(curSurface);
425}
426
427/*
428=================
429=
430= VL_GetPixel
431=
432=================
433*/
434
435byte VL_GetPixel (int x, int y)
436{
437 assert_ret(x >= 0 && (unsigned) x < screenWidth
438 && y >= 0 && (unsigned) y < screenHeight
439 && "VL_GetPixel: Pixel out of bounds!");
440
441 VL_LockSurface(curSurface);
442 byte col = ((byte *) curSurface->pixels)[y * curPitch + x];
443 VL_UnlockSurface(curSurface);
444 return col;
445}
446
447
448/*
449=================
450=
451= VL_Hlin
452=
453=================
454*/
455
456void VL_Hlin (unsigned x, unsigned y, unsigned width, int color)
457{
458 assert(x >= 0 && x + width <= screenWidth
459 && y >= 0 && y < screenHeight
460 && "VL_Hlin: Destination rectangle out of bounds!");
461
462 VL_LockSurface(curSurface);
463 Uint8 *dest = ((byte *) curSurface->pixels) + y * curPitch + x;
464 memset(dest, color, width);
465 VL_UnlockSurface(curSurface);
466}
467
468
469/*
470=================
471=
472= VL_Vlin
473=
474=================
475*/
476
477void VL_Vlin (int x, int y, int height, int color)
478{
479 assert(x >= 0 && (unsigned) x < screenWidth
480 && y >= 0 && (unsigned) y + height <= screenHeight
481 && "VL_Vlin: Destination rectangle out of bounds!");
482
483 VL_LockSurface(curSurface);
484 Uint8 *dest = ((byte *) curSurface->pixels) + y * curPitch + x;
485
486 while (height--)
487 {
488 *dest = color;
489 dest += curPitch;
490 }
491 VL_UnlockSurface(curSurface);
492}
493
494
495/*
496=================
497=
498= VL_Bar
499=
500=================
501*/
502
503void VL_BarScaledCoord (int scx, int scy, int scwidth, int scheight, int color)
504{
505 assert(scx >= 0 && (unsigned) scx + scwidth <= screenWidth
506 && scy >= 0 && (unsigned) scy + scheight <= screenHeight
507 && "VL_BarScaledCoord: Destination rectangle out of bounds!");
508
509 VL_LockSurface(curSurface);
510 Uint8 *dest = ((byte *) curSurface->pixels) + scy * curPitch + scx;
511
512 while (scheight--)
513 {
514 memset(dest, color, scwidth);
515 dest += curPitch;
516 }
517 VL_UnlockSurface(curSurface);
518}
519
520/*
521============================================================================
522
523 MEMORY OPS
524
525============================================================================
526*/
527
528/*
529=================
530=
531= VL_MemToLatch
532=
533=================
534*/
535
536void VL_MemToLatch(byte *source, int width, int height,
537 SDL_Surface *destSurface, int x, int y)
538{
539 assert(x >= 0 && (unsigned) x + width <= screenWidth
540 && y >= 0 && (unsigned) y + height <= screenHeight
541 && "VL_MemToLatch: Destination rectangle out of bounds!");
542
543 VL_LockSurface(destSurface);
544 int pitch = destSurface->pitch;
545 byte *dest = (byte *) destSurface->pixels + y * pitch + x;
546 for(int ysrc = 0; ysrc < height; ysrc++)
547 {
548 for(int xsrc = 0; xsrc < width; xsrc++)
549 {
550 dest[ysrc * pitch + xsrc] = source[(ysrc * (width >> 2) + (xsrc >> 2))
551 + (xsrc & 3) * (width >> 2) * height];
552 }
553 }
554 VL_UnlockSurface(destSurface);
555}
556
557//===========================================================================
558
559
560/*
561=================
562=
563= VL_MemToScreenScaledCoord
564=
565= Draws a block of data to the screen with scaling according to scaleFactor.
566=
567=================
568*/
569
570void VL_MemToScreenScaledCoord (byte *source, int width, int height, int destx, int desty)
571{
572 assert(destx >= 0 && destx + width * scaleFactor <= screenWidth
573 && desty >= 0 && desty + height * scaleFactor <= screenHeight
574 && "VL_MemToScreenScaledCoord: Destination rectangle out of bounds!");
575
576 VL_LockSurface(curSurface);
577 byte *vbuf = (byte *) curSurface->pixels;
578 for(int j=0,scj=0; j<height; j++, scj+=scaleFactor)
579 {
580 for(int i=0,sci=0; i<width; i++, sci+=scaleFactor)
581 {
582 byte col = source[(j*(width>>2)+(i>>2))+(i&3)*(width>>2)*height];
583 for(unsigned m=0; m<scaleFactor; m++)
584 {
585 for(unsigned n=0; n<scaleFactor; n++)
586 {
587 vbuf[(scj+m+desty)*curPitch+sci+n+destx] = col;
588 }
589 }
590 }
591 }
592 VL_UnlockSurface(curSurface);
593}
594
595/*
596=================
597=
598= VL_MemToScreenScaledCoord
599=
600= Draws a part of a block of data to the screen.
601= The block has the size origwidth*origheight.
602= The part at (srcx, srcy) has the size width*height
603= and will be painted to (destx, desty) with scaling according to scaleFactor.
604=
605=================
606*/
607
608void VL_MemToScreenScaledCoord_ex (byte *source, int origwidth, int origheight, int srcx, int srcy,
609 int destx, int desty, int width, int height)
610{
611 assert(destx >= 0 && destx + width * scaleFactor <= screenWidth
612 && desty >= 0 && desty + height * scaleFactor <= screenHeight
613 && "VL_MemToScreenScaledCoord: Destination rectangle out of bounds!");
614
615 VL_LockSurface(curSurface);
616 byte *vbuf = (byte *) curSurface->pixels;
617 for(int j=0,scj=0; j<height; j++, scj+=scaleFactor)
618 {
619 for(int i=0,sci=0; i<width; i++, sci+=scaleFactor)
620 {
621 byte col = source[((j+srcy)*(origwidth>>2)+((i+srcx)>>2))+((i+srcx)&3)*(origwidth>>2)*origheight];
622 for(unsigned m=0; m<scaleFactor; m++)
623 {
624 for(unsigned n=0; n<scaleFactor; n++)
625 {
626 vbuf[(scj+m+desty)*curPitch+sci+n+destx] = col;
627 }
628 }
629 }
630 }
631 VL_UnlockSurface(curSurface);
632}
633
634//==========================================================================
635
636/*
637=================
638=
639= VL_LatchToScreen
640=
641=================
642*/
643
644void VL_LatchToScreenScaledCoord(SDL_Surface *source, int xsrc, int ysrc,
645 int width, int height, int scxdest, int scydest)
646{
647 assert(scxdest >= 0 && scxdest + width * scaleFactor <= screenWidth
648 && scydest >= 0 && scydest + height * scaleFactor <= screenHeight
649 && "VL_LatchToScreenScaledCoord: Destination rectangle out of bounds!");
650
651 if(scaleFactor == 1)
652 {
653 // HACK: If screenBits is not 8 and the screen is faded out, the
654 // result will be black when using SDL_BlitSurface. The reason
655 // is that the logical palette needed for the transformation
656 // to the screen color depth is not equal to the logical
657 // palette of the latch (the latch is not faded). Therefore,
658 // SDL tries to map the colors...
659 // The result: All colors are mapped to black.
660 // So, we do the blit on our own...
661 if(screenBits != 8)
662 {
663 VL_LockSurface(source);
664 byte *src = (byte *) source->pixels;
665 unsigned srcPitch = source->pitch;
666
667 VL_LockSurface(curSurface);
668 byte *vbuf = (byte *) curSurface->pixels;
669 for(int j=0,scj=0; j<height; j++, scj++)
670 {
671 for(int i=0,sci=0; i<width; i++, sci++)
672 {
673 byte col = src[(ysrc + j)*srcPitch + xsrc + i];
674 vbuf[(scydest+scj)*curPitch+scxdest+sci] = col;
675 }
676 }
677 VL_UnlockSurface(curSurface);
678 VL_UnlockSurface(source);
679 }
680 else
681 {
682 SDL_Rect srcrect = { xsrc, ysrc, width, height };
683 SDL_Rect destrect = { scxdest, scydest, 0, 0 }; // width and height are ignored
684 SDL_BlitSurface(source, &srcrect, curSurface, &destrect);
685 }
686 }
687 else
688 {
689 VL_LockSurface(source);
690 byte *src = (byte *) source->pixels;
691 unsigned srcPitch = source->pitch;
692
693 VL_LockSurface(curSurface);
694 byte *vbuf = (byte *) curSurface->pixels;
695 for(int j=0,scj=0; j<height; j++, scj+=scaleFactor)
696 {
697 for(int i=0,sci=0; i<width; i++, sci+=scaleFactor)
698 {
699 byte col = src[(ysrc + j)*srcPitch + xsrc + i];
700 for(unsigned m=0; m<scaleFactor; m++)
701 {
702 for(unsigned n=0; n<scaleFactor; n++)
703 {
704 vbuf[(scydest+scj+m)*curPitch+scxdest+sci+n] = col;
705 }
706 }
707 }
708 }
709 VL_UnlockSurface(curSurface);
710 VL_UnlockSurface(source);
711 }
712}
713
714//===========================================================================
715
716/*
717=================
718=
719= VL_ScreenToScreen
720=
721=================
722*/
723
724void VL_ScreenToScreen (SDL_Surface *source, SDL_Surface *dest)
725{
726 SDL_BlitSurface(source, NULL, dest, NULL);
727}
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 @@
1// ID_VL.H
2
3// wolf compatability
4
5void Quit (const char *error,...);
6
7//===========================================================================
8
9#define CHARWIDTH 2
10#define TILEWIDTH 4
11
12//===========================================================================
13
14extern SDL_Surface *screen, *screenBuffer, *curSurface;
15
16extern boolean fullscreen, usedoublebuffering;
17extern unsigned screenWidth, screenHeight, screenBits, screenPitch, bufferPitch, curPitch;
18extern unsigned scaleFactor;
19
20extern boolean screenfaded;
21extern unsigned bordercolor;
22
23extern SDL_Color gamepal[256];
24
25//===========================================================================
26
27//
28// VGA hardware routines
29//
30
31#define VL_WaitVBL(a) SDL_Delay((a)*8)
32
33void VL_SetVGAPlaneMode (void);
34void VL_SetTextMode (void);
35void VL_Shutdown (void);
36
37void VL_ConvertPalette(byte *srcpal, SDL_Color *destpal, int numColors);
38void VL_FillPalette (int red, int green, int blue);
39void VL_SetColor (int color, int red, int green, int blue);
40void VL_GetColor (int color, int *red, int *green, int *blue);
41void VL_SetPalette (SDL_Color *palette, bool forceupdate);
42void VL_GetPalette (SDL_Color *palette);
43void VL_FadeOut (int start, int end, int red, int green, int blue, int steps);
44void VL_FadeIn (int start, int end, SDL_Color *palette, int steps);
45
46byte *VL_LockSurface(SDL_Surface *surface);
47void VL_UnlockSurface(SDL_Surface *surface);
48
49#define LOCK() VL_LockSurface(curSurface)
50#define UNLOCK() VL_UnlockSurface(curSurface)
51
52byte VL_GetPixel (int x, int y);
53void VL_Plot (int x, int y, int color);
54void VL_Hlin (unsigned x, unsigned y, unsigned width, int color);
55void VL_Vlin (int x, int y, int height, int color);
56void VL_BarScaledCoord (int scx, int scy, int scwidth, int scheight, int color);
57inline void VL_Bar (int x, int y, int width, int height, int color)
58{
59 VL_BarScaledCoord(scaleFactor*x, scaleFactor*y,
60 scaleFactor*width, scaleFactor*height, color);
61}
62inline void VL_ClearScreen(int color)
63{
64 SDL_FillRect(curSurface, NULL, color);
65}
66
67void VL_MungePic (byte *source, unsigned width, unsigned height);
68void VL_DrawPicBare (int x, int y, byte *pic, int width, int height);
69void VL_MemToLatch (byte *source, int width, int height,
70 SDL_Surface *destSurface, int x, int y);
71void VL_ScreenToScreen (SDL_Surface *source, SDL_Surface *dest);
72void VL_MemToScreenScaledCoord (byte *source, int width, int height, int scx, int scy);
73void VL_MemToScreenScaledCoord_ex (byte *source, int origwidth, int origheight, int srcx, int srcy,
74 int destx, int desty, int width, int height);
75
76inline void VL_MemToScreen (byte *source, int width, int height, int x, int y)
77{
78 VL_MemToScreenScaledCoord(source, width, height,
79 scaleFactor*x, scaleFactor*y);
80}
81
82void VL_MaskedToScreen (byte *source, int width, int height, int x, int y);
83
84void VL_LatchToScreenScaledCoord (SDL_Surface *source, int xsrc, int ysrc,
85 int width, int height, int scxdest, int scydest);
86
87inline void VL_LatchToScreen (SDL_Surface *source, int xsrc, int ysrc,
88 int width, int height, int xdest, int ydest)
89{
90 VL_LatchToScreenScaledCoord(source,xsrc,ysrc,width,height,
91 scaleFactor*xdest,scaleFactor*ydest);
92}
93inline void VL_LatchToScreenScaledCoord_ez (SDL_Surface *source, int scx, int scy)
94{
95 VL_LatchToScreenScaledCoord(source,0,0,source->w,source->h,scx,scy);
96}
97inline void VL_LatchToScreen_ez (SDL_Surface *source, int x, int y)
98{
99 VL_LatchToScreenScaledCoord(source,0,0,source->w,source->h,
100 scaleFactor*x,scaleFactor*y);
101}
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 @@
1#ifdef _WIN32
2
3/*
4 SDL_main.c, placed in the public domain by Sam Lantinga 4/13/98
5
6 Modified to write stdout/stderr to a message box at shutdown by Ripper 2007-12-27
7
8 The WinMain function -- calls your program's main() function
9*/
10
11#include <stdio.h>
12#include <stdlib.h>
13
14#define WIN32_LEAN_AND_MEAN
15#include <windows.h>
16
17#ifdef _WIN32_WCE
18# define DIR_SEPERATOR TEXT("\\")
19# undef _getcwd
20# define _getcwd(str,len) wcscpy(str,TEXT(""))
21# define setbuf(f,b)
22# define setvbuf(w,x,y,z)
23# define fopen _wfopen
24# define freopen _wfreopen
25# define remove(x) DeleteFile(x)
26#else
27# define DIR_SEPERATOR TEXT("/")
28# include <direct.h>
29#endif
30
31/* Include the SDL main definition header */
32#include "SDL.h"
33#include "SDL_main.h"
34
35#ifdef main
36# ifndef _WIN32_WCE_EMULATION
37# undef main
38# endif /* _WIN32_WCE_EMULATION */
39#endif /* main */
40
41/* The standard output files */
42#define STDOUT_FILE TEXT("stdout.txt")
43#define STDERR_FILE TEXT("stderr.txt")
44
45#ifndef NO_STDIO_REDIRECT
46# ifdef _WIN32_WCE
47 static wchar_t stdoutPath[MAX_PATH];
48 static wchar_t stderrPath[MAX_PATH];
49# else
50 static char stdoutPath[MAX_PATH];
51 static char stderrPath[MAX_PATH];
52# endif
53#endif
54
55#if defined(_WIN32_WCE) && _WIN32_WCE < 300
56/* seems to be undefined in Win CE although in online help */
57#define isspace(a) (((CHAR)a == ' ') || ((CHAR)a == '\t'))
58#endif /* _WIN32_WCE < 300 */
59
60/* Parse a command line buffer into arguments */
61static int ParseCommandLine(char *cmdline, char **argv)
62{
63 char *bufp;
64 int argc;
65
66 argc = 0;
67 for ( bufp = cmdline; *bufp; ) {
68 /* Skip leading whitespace */
69 while ( isspace(*bufp) ) {
70 ++bufp;
71 }
72 /* Skip over argument */
73 if ( *bufp == '"' ) {
74 ++bufp;
75 if ( *bufp ) {
76 if ( argv ) {
77 argv[argc] = bufp;
78 }
79 ++argc;
80 }
81 /* Skip over word */
82 while ( *bufp && (*bufp != '"') ) {
83 ++bufp;
84 }
85 } else {
86 if ( *bufp ) {
87 if ( argv ) {
88 argv[argc] = bufp;
89 }
90 ++argc;
91 }
92 /* Skip over word */
93 while ( *bufp && ! isspace(*bufp) ) {
94 ++bufp;
95 }
96 }
97 if ( *bufp ) {
98 if ( argv ) {
99 *bufp = '\0';
100 }
101 ++bufp;
102 }
103 }
104 if ( argv ) {
105 argv[argc] = NULL;
106 }
107 return(argc);
108}
109
110/* Show an error message */
111static void ShowError(const char *title, const char *message)
112{
113/* If USE_MESSAGEBOX is defined, you need to link with user32.lib */
114#ifdef USE_MESSAGEBOX
115 MessageBox(NULL, message, title, MB_ICONEXCLAMATION|MB_OK);
116#else
117 fprintf(stderr, "%s: %s\n", title, message);
118#endif
119}
120
121/* Pop up an out of memory message, returns to Windows */
122static bool OutOfMemory(void)
123{
124 ShowError("Fatal Error", "Out of memory - aborting");
125 return FALSE;
126}
127
128/* SDL_Quit() shouldn't be used with atexit() directly because
129 calling conventions may differ... */
130static void cleanup(void)
131{
132 SDL_Quit();
133}
134
135/* Remove the output files if there was no output written */
136static void cleanup_output(void)
137{
138#if 1
139#ifndef NO_STDIO_REDIRECT
140 FILE *file;
141#endif
142#endif
143
144 /* Flush the output in case anything is queued */
145 fclose(stdout);
146 fclose(stderr);
147
148#if 1
149#ifndef NO_STDIO_REDIRECT
150 /* See if the files have any output in them */
151 if ( stdoutPath[0] ) {
152 file = fopen(stdoutPath, TEXT("r"));
153 if ( file ) {
154 char buf[16384];
155 size_t readbytes = fread(buf, 1, 16383, file);
156 fclose(file);
157
158 if(readbytes != 0)
159 {
160 buf[readbytes] = 0; // cut after last byte (<=16383)
161 MessageBox(NULL, buf, "Wolf4SDL", MB_OK);
162 }
163 else
164 remove(stdoutPath); // remove empty file
165 }
166 }
167 if ( stderrPath[0] ) {
168 file = fopen(stderrPath, TEXT("rb"));
169 if ( file ) {
170 char buf[16384];
171 size_t readbytes = fread(buf, 1, 16383, file);
172 fclose(file);
173
174 if(readbytes != 0)
175 {
176 buf[readbytes] = 0; // cut after last byte (<=16383)
177 MessageBox(NULL, buf, "Wolf4SDL", MB_OK);
178 }
179 else
180 remove(stderrPath); // remove empty file
181 }
182 }
183#endif
184#endif
185}
186
187//#if defined(_MSC_VER) && !defined(_WIN32_WCE)
188///* The VC++ compiler needs main defined */
189//#define console_main main
190//#endif
191
192/* This is where execution begins [console apps] */
193int console_main(int argc, char *argv[])
194{
195 size_t n;
196 char *bufp, *appname;
197 int status;
198
199 /* Get the class name from argv[0] */
200 appname = argv[0];
201 if ( (bufp=SDL_strrchr(argv[0], '\\')) != NULL ) {
202 appname = bufp+1;
203 } else
204 if ( (bufp=SDL_strrchr(argv[0], '/')) != NULL ) {
205 appname = bufp+1;
206 }
207
208 if ( (bufp=SDL_strrchr(appname, '.')) == NULL )
209 n = SDL_strlen(appname);
210 else
211 n = (bufp-appname);
212
213 bufp = SDL_stack_alloc(char, n+1);
214 if ( bufp == NULL ) {
215 return OutOfMemory();
216 }
217 SDL_strlcpy(bufp, appname, n+1);
218 appname = bufp;
219
220 /* Load SDL dynamic link library */
221 if ( SDL_Init(SDL_INIT_NOPARACHUTE) < 0 ) {
222 ShowError("WinMain() error", SDL_GetError());
223 return(FALSE);
224 }
225 atexit(cleanup_output);
226 atexit(cleanup);
227
228 /* Sam:
229 We still need to pass in the application handle so that
230 DirectInput will initialize properly when SDL_RegisterApp()
231 is called later in the video initialization.
232 */
233 SDL_SetModuleHandle(GetModuleHandle(NULL));
234
235 /* Run the application main() code */
236 status = SDL_main(argc, argv);
237
238 /* Exit cleanly, calling atexit() functions */
239 exit(status);
240
241 /* Hush little compiler, don't you cry... */
242 return 0;
243}
244
245/* This is where execution begins [windowed apps] */
246#ifdef _WIN32_WCE
247int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPWSTR szCmdLine, int sw)
248#else
249int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int sw)
250#endif
251{
252 HINSTANCE handle;
253 char **argv;
254 int argc;
255 char *cmdline;
256#ifdef _WIN32_WCE
257 wchar_t *bufp;
258 int nLen;
259#else
260 char *bufp;
261 size_t nLen;
262#endif
263#ifndef NO_STDIO_REDIRECT
264 DWORD pathlen;
265#ifdef _WIN32_WCE
266 wchar_t path[MAX_PATH];
267#else
268 char path[MAX_PATH];
269#endif
270 FILE *newfp;
271#endif
272
273 /* Start up DDHELP.EXE before opening any files, so DDHELP doesn't
274 keep them open. This is a hack.. hopefully it will be fixed
275 someday. DDHELP.EXE starts up the first time DDRAW.DLL is loaded.
276 */
277 handle = LoadLibrary(TEXT("DDRAW.DLL"));
278 if ( handle != NULL ) {
279 FreeLibrary(handle);
280 }
281
282#ifndef NO_STDIO_REDIRECT
283 pathlen = GetModuleFileName(NULL, path, SDL_arraysize(path));
284 while ( pathlen > 0 && path[pathlen] != '\\' ) {
285 --pathlen;
286 }
287 path[pathlen] = '\0';
288
289#ifdef _WIN32_WCE
290 wcsncpy( stdoutPath, path, SDL_arraysize(stdoutPath) );
291 wcsncat( stdoutPath, DIR_SEPERATOR STDOUT_FILE, SDL_arraysize(stdoutPath) );
292#else
293 SDL_strlcpy( stdoutPath, path, SDL_arraysize(stdoutPath) );
294 SDL_strlcat( stdoutPath, DIR_SEPERATOR STDOUT_FILE, SDL_arraysize(stdoutPath) );
295#endif
296
297 /* Redirect standard input and standard output */
298 newfp = freopen(stdoutPath, TEXT("w"), stdout);
299
300#ifndef _WIN32_WCE
301 if ( newfp == NULL ) { /* This happens on NT */
302#if !defined(stdout)
303 stdout = fopen(stdoutPath, TEXT("w"));
304#else
305 newfp = fopen(stdoutPath, TEXT("w"));
306 if ( newfp ) {
307 *stdout = *newfp;
308 }
309#endif
310 }
311#endif /* _WIN32_WCE */
312
313#ifdef _WIN32_WCE
314 wcsncpy( stderrPath, path, SDL_arraysize(stdoutPath) );
315 wcsncat( stderrPath, DIR_SEPERATOR STDOUT_FILE, SDL_arraysize(stdoutPath) );
316#else
317 SDL_strlcpy( stderrPath, path, SDL_arraysize(stderrPath) );
318 SDL_strlcat( stderrPath, DIR_SEPERATOR STDERR_FILE, SDL_arraysize(stderrPath) );
319#endif
320
321 newfp = freopen(stderrPath, TEXT("w"), stderr);
322#ifndef _WIN32_WCE
323 if ( newfp == NULL ) { /* This happens on NT */
324#if !defined(stderr)
325 stderr = fopen(stderrPath, TEXT("w"));
326#else
327 newfp = fopen(stderrPath, TEXT("w"));
328 if ( newfp ) {
329 *stderr = *newfp;
330 }
331#endif
332 }
333#endif /* _WIN32_WCE */
334
335 setvbuf(stdout, NULL, _IOLBF, BUFSIZ); /* Line buffered */
336 setbuf(stderr, NULL); /* No buffering */
337#endif /* !NO_STDIO_REDIRECT */
338
339#ifdef _WIN32_WCE
340 nLen = wcslen(szCmdLine)+128+1;
341 bufp = SDL_stack_alloc(wchar_t, nLen*2);
342 wcscpy (bufp, TEXT("\""));
343 GetModuleFileName(NULL, bufp+1, 128-3);
344 wcscpy (bufp+wcslen(bufp), TEXT("\" "));
345 wcsncpy(bufp+wcslen(bufp), szCmdLine,nLen-wcslen(bufp));
346 nLen = wcslen(bufp)+1;
347 cmdline = SDL_stack_alloc(char, nLen);
348 if ( cmdline == NULL ) {
349 return OutOfMemory();
350 }
351 WideCharToMultiByte(CP_ACP, 0, bufp, -1, cmdline, nLen, NULL, NULL);
352#else
353 /* Grab the command line */
354 bufp = GetCommandLine();
355 nLen = SDL_strlen(bufp)+1;
356 cmdline = SDL_stack_alloc(char, nLen);
357 if ( cmdline == NULL ) {
358 return OutOfMemory();
359 }
360 SDL_strlcpy(cmdline, bufp, nLen);
361#endif
362
363 /* Parse it into argv and argc */
364 argc = ParseCommandLine(cmdline, NULL);
365 argv = SDL_stack_alloc(char*, argc+1);
366 if ( argv == NULL ) {
367 return OutOfMemory();
368 }
369 ParseCommandLine(cmdline, argv);
370
371 /* Run the main program (after a little SDL initialization) */
372 console_main(argc, argv);
373
374 /* Hush little compiler, don't you cry... */
375 return 0;
376}
377
378#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 @@
1#include "wl_def.h"
2
3#ifndef SPEAR
4byte signon[] = {
5 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
6 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
7 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
8 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
9 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
10 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
11 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
12 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
13 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
14 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
15 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
16 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
17 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
18 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
19 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
20 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
21 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
22 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
23 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
24 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
25 0x04,0x22,0x24,0x21,0x22,0x23,0x21,0x22,0x04,0x25,0x25,0x22,0x22,0x24,0x22,0x22,
26 0x26,0x22,0x25,0x22,0x21,0x25,0x23,0x21,0x22,0x22,0x22,0x21,0x25,0x22,0x25,0x24,
27 0x25,0x22,0x21,0x22,0x22,0x21,0x24,0x23,0x04,0x28,0x29,0x28,0x29,0x23,0x26,0x25,
28 0x26,0x22,0x04,0x23,0x23,0x26,0x24,0x23,0x25,0x25,0x23,0x23,0x04,0x23,0x25,0x04,
29 0x28,0x25,0x23,0x24,0x22,0x25,0x28,0x28,0x28,0x23,0x23,0x04,0x23,0x22,0x23,0x25,
30 0x23,0x25,0x25,0x04,0x22,0x22,0x21,0x23,0x23,0x25,0x25,0x22,0x23,0x25,0x26,0x23,
31 0x29,0x29,0x22,0x24,0x23,0x22,0x04,0x25,0x22,0x04,0x23,0x23,0x22,0x23,0x25,0x24,
32 0x23,0x23,0x23,0x25,0x24,0x28,0x23,0x22,0x23,0x23,0x22,0x24,0x25,0x22,0x04,0x22,
33 0x22,0x24,0x04,0x24,0x24,0x24,0x24,0x25,0x24,0x28,0x2A,0x23,0x22,0x26,0x22,0x26,
34 0x25,0x22,0x22,0x26,0x28,0x26,0x28,0x28,0x24,0x24,0x25,0x22,0x24,0x25,0x22,0x25,
35 0x25,0x25,0x26,0x22,0x25,0x24,0x24,0x24,0x25,0x24,0x25,0x22,0x04,0x24,0x25,0x25,
36 0x26,0x24,0x22,0x26,0x26,0x24,0x24,0x23,0x04,0x22,0x25,0x28,0x24,0x26,0x22,0x26,
37 0x25,0x26,0x2A,0x28,0x23,0x25,0x25,0x25,0x23,0x28,0x25,0x25,0x04,0x25,0x24,0x23,
38 0x25,0x23,0x28,0x26,0x25,0x20,0x20,0x25,0x20,0x22,0x22,0x25,0x22,0x28,0x25,0x25,
39 0x28,0x04,0x28,0x25,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x28,0x28,0x25,0x25,0x26,
40 0x23,0x04,0x25,0x04,0x24,0x25,0x28,0x28,0x23,0x26,0x25,0x26,0x25,0x26,0x25,0x28,
41 0x28,0x24,0x26,0x28,0x20,0x20,0x26,0x20,0x23,0x04,0x26,0x25,0x24,0x26,0x28,0x28,
42 0x28,0x24,0x28,0x28,0x25,0x25,0x26,0x26,0x04,0x25,0x26,0x26,0x04,0x26,0x22,0x25,
43 0x25,0x22,0x28,0x24,0x28,0x25,0x26,0x26,0x26,0x25,0x25,0x28,0x28,0x26,0x28,0x28,
44 0x28,0x26,0x28,0x24,0x28,0x04,0x28,0x26,0x25,0x26,0x26,0x26,0x25,0x28,0x26,0x29,
45 0x25,0x22,0x25,0x23,0x25,0x25,0x22,0x22,0x04,0x22,0x23,0x25,0x25,0x23,0x22,0x22,
46 0x22,0x22,0x21,0x04,0x24,0x04,0x24,0x23,0x25,0x22,0x22,0x21,0x23,0x23,0x04,0x23,
47 0x24,0x23,0x25,0x25,0x25,0x22,0x04,0x25,0x23,0x25,0x25,0x25,0x25,0x25,0x24,0x25,
48 0x24,0x23,0x25,0x24,0x22,0x25,0x25,0x24,0x22,0x23,0x23,0x23,0x25,0x26,0x25,0x25,
49 0x24,0x24,0x25,0x24,0x24,0x21,0x25,0x26,0x04,0x22,0x25,0x25,0x23,0x22,0x25,0x26,
50 0x04,0x23,0x23,0x23,0x26,0x22,0x25,0x25,0x26,0x24,0x25,0x26,0x24,0x04,0x04,0x22,
51 0x25,0x24,0x04,0x25,0x28,0x25,0x26,0x26,0x04,0x28,0x23,0x25,0x22,0x22,0x26,0x23,
52 0x25,0x04,0x04,0x22,0x25,0x22,0x25,0x23,0x22,0x23,0x24,0x22,0x24,0x23,0x04,0x04,
53 0x28,0x28,0x21,0x24,0x25,0x24,0x28,0x23,0x28,0x28,0x25,0x25,0x23,0x23,0x24,0x25,
54 0x24,0x22,0x25,0x04,0x28,0x04,0x04,0x26,0x26,0x26,0x26,0x26,0x25,0x28,0x24,0x25,
55 0x28,0x24,0x25,0x04,0x24,0x25,0x24,0x24,0x24,0x24,0x24,0x04,0x24,0x22,0x24,0x23,
56 0x25,0x25,0x25,0x04,0x26,0x25,0x25,0x26,0x26,0x25,0x26,0x25,0x25,0x26,0x26,0x26,
57 0x04,0x28,0x28,0x26,0x25,0x28,0x28,0x28,0x28,0x28,0x24,0x25,0x23,0x26,0x25,0x25,
58 0x26,0x23,0x20,0x20,0x20,0x22,0x20,0x20,0x20,0x26,0x23,0x28,0x26,0x25,0x28,0x28,
59 0x26,0x26,0x28,0x04,0x28,0x28,0x26,0x26,0x24,0x26,0x25,0x28,0x27,0x04,0x24,0x26,
60 0x28,0x04,0x26,0x26,0x22,0x28,0x25,0x28,0x25,0x25,0x26,0x04,0x24,0x26,0x26,0x23,
61 0x26,0x23,0x26,0x25,0x24,0x25,0x22,0x25,0x26,0x25,0x24,0x25,0x22,0x25,0x26,0x25,
62 0x04,0x26,0x26,0x04,0x25,0x28,0x24,0x28,0x25,0x26,0x24,0x25,0x04,0x24,0x26,0x26,
63 0x28,0x25,0x23,0x26,0x28,0x28,0x25,0x04,0x28,0x23,0x26,0x28,0x04,0x24,0x25,0x26,
64 0x26,0x25,0x28,0x28,0x28,0x25,0x24,0x25,0x28,0x26,0x26,0x04,0x24,0x26,0x25,0x29,
65 0x22,0x22,0x25,0x26,0x25,0x22,0x26,0x21,0x25,0x25,0x22,0x22,0x23,0x25,0x24,0x24,
66 0x21,0x23,0x22,0x24,0x21,0x22,0x26,0x22,0x22,0x22,0x24,0x24,0x22,0x04,0x28,0x25,
67 0x25,0x23,0x28,0x04,0x23,0x25,0x25,0x25,0x25,0x23,0x23,0x22,0x22,0x04,0x25,0x25,
68 0x25,0x22,0x22,0x23,0x23,0x23,0x22,0x24,0x24,0x25,0x25,0x25,0x23,0x24,0x25,0x23,
69 0x22,0x23,0x24,0x24,0x23,0x22,0x25,0x24,0x26,0x25,0x25,0x28,0x26,0x25,0x25,0x22,
70 0x26,0x25,0x25,0x26,0x25,0x25,0x04,0x25,0x04,0x26,0x29,0x29,0x29,0x28,0x04,0x28,
71 0x25,0x26,0x26,0x28,0x25,0x23,0x26,0x04,0x28,0x28,0x28,0x28,0x25,0x25,0x23,0x23,
72 0x25,0x25,0x26,0x25,0x23,0x24,0x25,0x04,0x25,0x26,0x26,0x04,0x04,0x25,0x25,0x25,
73 0x27,0x28,0x22,0x24,0x04,0x28,0x04,0x26,0x26,0x28,0x23,0x22,0x23,0x24,0x28,0x25,
74 0x24,0x24,0x25,0x28,0x24,0x28,0x24,0x22,0x26,0x28,0x28,0x04,0x26,0x22,0x24,0x25,
75 0x25,0x25,0x28,0x25,0x26,0x25,0x26,0x26,0x25,0x24,0x26,0x22,0x25,0x26,0x26,0x26,
76 0x25,0x04,0x25,0x25,0x22,0x24,0x25,0x04,0x26,0x24,0x28,0x26,0x25,0x25,0x28,0x04,
77 0x28,0x26,0x29,0x28,0x29,0x28,0x27,0x25,0x26,0x25,0x22,0x22,0x04,0x24,0x26,0x23,
78 0x20,0x20,0x20,0x22,0x20,0x20,0x22,0x25,0x25,0x26,0x28,0x25,0x25,0x28,0x24,0x25,
79 0x04,0x28,0x28,0x04,0x26,0x04,0x28,0x25,0x04,0x04,0x04,0x25,0x28,0x25,0x24,0x04,
80 0x26,0x26,0x26,0x26,0x28,0x28,0x28,0x25,0x28,0x25,0x25,0x26,0x26,0x04,0x26,0x25,
81 0x23,0x25,0x04,0x22,0x22,0x22,0x24,0x26,0x24,0x26,0x26,0x25,0x25,0x04,0x28,0x24,
82 0x24,0x28,0x26,0x28,0x25,0x22,0x26,0x24,0x22,0x28,0x24,0x04,0x22,0x24,0x26,0x24,
83 0x26,0x24,0x26,0x26,0x26,0x25,0x25,0x26,0x04,0x28,0x26,0x28,0x26,0x26,0x28,0x28,
84 0x26,0x26,0x24,0x25,0x28,0x28,0x26,0x28,0x28,0x26,0x25,0x24,0x26,0x24,0x25,0x29,
85 0x21,0x25,0x22,0x24,0x22,0x22,0x21,0x25,0x24,0x23,0x22,0x25,0x25,0x21,0x24,0x23,
86 0x21,0x28,0x24,0x24,0x22,0x23,0x23,0x04,0x24,0x25,0x25,0x26,0x24,0x28,0x26,0x25,
87 0x28,0x28,0x04,0x26,0x25,0x22,0x23,0x24,0x24,0x23,0x25,0x23,0x25,0x25,0x26,0x25,
88 0x22,0x22,0x28,0x23,0x23,0x26,0x22,0x25,0x25,0x23,0x22,0x23,0x23,0x25,0x24,0x04,
89 0x23,0x22,0x26,0x23,0x22,0x23,0x23,0x25,0x22,0x24,0x22,0x21,0x04,0x28,0x25,0x26,
90 0x28,0x25,0x28,0x26,0x04,0x29,0x04,0x26,0x04,0x24,0x27,0x28,0x04,0x23,0x04,0x26,
91 0x04,0x23,0x26,0x24,0x28,0x24,0x24,0x26,0x26,0x28,0x28,0x26,0x28,0x04,0x04,0x25,
92 0x26,0x04,0x26,0x25,0x28,0x24,0x28,0x25,0x26,0x29,0x29,0x29,0x29,0x24,0x29,0x29,
93 0x26,0x25,0x23,0x29,0x28,0x25,0x27,0x26,0x04,0x22,0x25,0x26,0x28,0x24,0x24,0x26,
94 0x26,0x04,0x26,0x24,0x26,0x24,0x28,0x26,0x23,0x26,0x23,0x28,0x28,0x26,0x28,0x26,
95 0x26,0x25,0x28,0x25,0x28,0x25,0x28,0x25,0x25,0x28,0x28,0x28,0x26,0x26,0x26,0x28,
96 0x28,0x04,0x25,0x27,0x26,0x26,0x25,0x28,0x28,0x24,0x28,0x28,0x28,0x29,0x2A,0x2A,
97 0x26,0x28,0x28,0x27,0x04,0x04,0x25,0x24,0x22,0x23,0x23,0x20,0x22,0x24,0x22,0x24,
98 0x21,0x22,0x22,0x23,0x26,0x24,0x25,0x25,0x26,0x24,0x26,0x25,0x24,0x26,0x04,0x28,
99 0x24,0x28,0x26,0x26,0x24,0x28,0x26,0x26,0x04,0x04,0x24,0x24,0x24,0x25,0x26,0x24,
100 0x26,0x25,0x28,0x24,0x25,0x24,0x26,0x28,0x26,0x25,0x26,0x04,0x25,0x25,0x23,0x25,
101 0x25,0x23,0x23,0x26,0x04,0x25,0x26,0x28,0x28,0x23,0x28,0x26,0x25,0x26,0x26,0x28,
102 0x28,0x25,0x25,0x26,0x28,0x25,0x28,0x24,0x26,0x24,0x28,0x24,0x28,0x04,0x28,0x04,
103 0x04,0x28,0x26,0x26,0x04,0x04,0x25,0x28,0x04,0x04,0x28,0x28,0x25,0x28,0x26,0x04,
104 0x24,0x04,0x04,0x26,0x04,0x24,0x28,0x28,0x04,0x04,0x26,0x25,0x28,0x28,0x04,0x29,
105 0x22,0x22,0x22,0x22,0x23,0x22,0x22,0x28,0x25,0x21,0x25,0x23,0x22,0x22,0x04,0x25,
106 0x23,0x22,0x24,0x24,0x26,0x26,0x26,0x04,0x24,0x26,0x26,0x26,0x26,0x25,0x25,0x24,
107 0x04,0x25,0x24,0x28,0x26,0x25,0x26,0x23,0x22,0x04,0x23,0x22,0x25,0x04,0x04,0x23,
108 0x22,0x23,0x23,0x23,0x26,0x04,0x24,0x25,0x23,0x23,0x23,0x25,0x23,0x25,0x23,0x23,
109 0x23,0x22,0x25,0x22,0x23,0x22,0x21,0x23,0x23,0x22,0x25,0x23,0x25,0x25,0x26,0x27,
110 0x26,0x29,0x28,0x28,0x24,0x23,0x26,0x26,0x23,0x23,0x25,0x25,0x24,0x24,0x25,0x23,
111 0x22,0x25,0x23,0x23,0x23,0x22,0x28,0x23,0x26,0x24,0x24,0x26,0x29,0x28,0x28,0x28,
112 0x25,0x24,0x28,0x04,0x28,0x28,0x29,0x04,0x25,0x26,0x04,0x27,0x27,0x25,0x27,0x24,
113 0x24,0x28,0x27,0x25,0x28,0x29,0x25,0x29,0x26,0x25,0x28,0x28,0x28,0x28,0x28,0x28,
114 0x25,0x26,0x28,0x25,0x28,0x26,0x22,0x28,0x28,0x26,0x25,0x26,0x28,0x26,0x24,0x24,
115 0x04,0x25,0x26,0x26,0x25,0x26,0x28,0x04,0x04,0x25,0x22,0x28,0x25,0x28,0x25,0x24,
116 0x26,0x27,0x28,0x25,0x04,0x04,0x2A,0x26,0x28,0x26,0x2A,0x28,0x28,0x28,0x25,0x26,
117 0x28,0x24,0x28,0x25,0x23,0x24,0x24,0x22,0x25,0x24,0x22,0x20,0x20,0x24,0x23,0x21,
118 0x25,0x25,0x24,0x04,0x25,0x28,0x25,0x04,0x28,0x26,0x04,0x26,0x23,0x28,0x28,0x24,
119 0x24,0x26,0x25,0x26,0x26,0x25,0x25,0x25,0x25,0x26,0x24,0x24,0x25,0x24,0x28,0x25,
120 0x25,0x26,0x28,0x23,0x26,0x28,0x22,0x04,0x26,0x23,0x25,0x24,0x28,0x25,0x21,0x24,
121 0x22,0x25,0x26,0x28,0x25,0x24,0x28,0x26,0x28,0x24,0x26,0x25,0x23,0x25,0x04,0x25,
122 0x04,0x26,0x04,0x28,0x26,0x28,0x28,0x25,0x28,0x24,0x26,0x28,0x27,0x27,0x25,0x28,
123 0x26,0x28,0x25,0x24,0x25,0x28,0x25,0x28,0x28,0x28,0x04,0x25,0x28,0x28,0x29,0x28,
124 0x04,0x29,0x28,0x29,0x28,0x28,0x04,0x28,0x26,0x29,0x29,0x28,0x29,0x29,0x28,0x29,
125 0x25,0x25,0x24,0x25,0x04,0x28,0x24,0x24,0x24,0x26,0x21,0x21,0x25,0x21,0x24,0x22,
126 0x24,0x25,0x25,0x28,0x26,0x04,0x23,0x28,0x28,0x26,0x25,0x28,0x24,0x24,0x04,0x28,
127 0x04,0x04,0x26,0x28,0x29,0x28,0x24,0x23,0x28,0x04,0x28,0x25,0x26,0x26,0x26,0x24,
128 0x28,0x26,0x23,0x25,0x26,0x04,0x04,0x24,0x22,0x25,0x25,0x22,0x24,0x23,0x04,0x22,
129 0x25,0x24,0x26,0x26,0x22,0x23,0x23,0x21,0x04,0x25,0x23,0x24,0x23,0x26,0x25,0x28,
130 0x24,0x22,0x25,0x28,0x22,0x24,0x23,0x25,0x23,0x25,0x26,0x25,0x23,0x04,0x22,0x28,
131 0x23,0x25,0x23,0x25,0x25,0x25,0x25,0x23,0x24,0x25,0x24,0x28,0x23,0x28,0x04,0x28,
132 0x28,0x28,0x04,0x26,0x25,0x24,0x26,0x26,0x25,0x28,0x28,0x25,0x24,0x24,0x04,0x24,
133 0x25,0x23,0x24,0x21,0x24,0x25,0x26,0x04,0x26,0x26,0x25,0x04,0x24,0x28,0x04,0x25,
134 0x25,0x23,0x28,0x26,0x26,0x04,0x26,0x04,0x26,0x28,0x26,0x24,0x04,0x28,0x25,0x24,
135 0x22,0x26,0x04,0x26,0x24,0x26,0x04,0x26,0x28,0x24,0x04,0x24,0x04,0x25,0x28,0x28,
136 0x29,0x24,0x29,0x28,0x25,0x29,0x28,0x28,0x28,0x28,0x25,0x28,0x28,0x28,0x27,0x26,
137 0x26,0x24,0x25,0x23,0x26,0x22,0x20,0x22,0x22,0x26,0x24,0x22,0x25,0x23,0x22,0x28,
138 0x23,0x28,0x25,0x25,0x26,0x28,0x26,0x25,0x26,0x25,0x04,0x26,0x25,0x28,0x25,0x25,
139 0x04,0x04,0x26,0x26,0x04,0x25,0x28,0x25,0x25,0x04,0x04,0x25,0x26,0x25,0x04,0x26,
140 0x25,0x25,0x26,0x26,0x26,0x04,0x26,0x26,0x26,0x25,0x26,0x25,0x26,0x20,0x22,0x24,
141 0x04,0x26,0x26,0x28,0x28,0x28,0x26,0x04,0x26,0x28,0x26,0x26,0x24,0x04,0x28,0x24,
142 0x25,0x26,0x26,0x24,0x25,0x26,0x24,0x25,0x26,0x26,0x04,0x04,0x28,0x28,0x28,0x28,
143 0x25,0x26,0x28,0x26,0x25,0x25,0x28,0x04,0x26,0x28,0x28,0x24,0x25,0x28,0x04,0x25,
144 0x2A,0x28,0x2A,0x28,0x2A,0x29,0x2A,0x28,0x29,0x04,0x29,0x28,0x28,0x28,0x25,0x29,
145 0x22,0x21,0x21,0x24,0x24,0x21,0x21,0x24,0x23,0x20,0x24,0x20,0x20,0x22,0x22,0x24,
146 0x24,0x24,0x25,0x25,0x04,0x25,0x26,0x28,0x26,0x26,0x25,0x26,0x28,0x28,0x22,0x04,
147 0x28,0x27,0x04,0x28,0x24,0x28,0x25,0x29,0x28,0x26,0x28,0x22,0x25,0x23,0x25,0x22,
148 0x23,0x25,0x25,0x26,0x26,0x24,0x26,0x25,0x28,0x28,0x25,0x26,0x28,0x25,0x24,0x04,
149 0x24,0x25,0x26,0x26,0x25,0x28,0x25,0x25,0x23,0x26,0x26,0x25,0x24,0x28,0x28,0x26,
150 0x26,0x25,0x22,0x23,0x22,0x23,0x23,0x24,0x23,0x22,0x24,0x26,0x04,0x26,0x24,0x21,
151 0x25,0x26,0x24,0x23,0x24,0x23,0x23,0x22,0x22,0x04,0x26,0x25,0x24,0x26,0x26,0x28,
152 0x24,0x26,0x25,0x28,0x24,0x26,0x28,0x28,0x25,0x25,0x25,0x28,0x24,0x23,0x04,0x04,
153 0x22,0x25,0x04,0x24,0x25,0x25,0x25,0x23,0x25,0x24,0x25,0x23,0x24,0x25,0x25,0x22,
154 0x04,0x04,0x24,0x04,0x24,0x25,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x28,0x28,0x25,
155 0x24,0x26,0x28,0x24,0x25,0x23,0x04,0x22,0x24,0x29,0x26,0x26,0x26,0x04,0x28,0x28,
156 0x26,0x29,0x28,0x24,0x25,0x25,0x25,0x28,0x28,0x04,0x28,0x04,0x28,0x25,0x25,0x25,
157 0x24,0x22,0x24,0x25,0x23,0x20,0x23,0x25,0x04,0x25,0x24,0x25,0x23,0x23,0x04,0x25,
158 0x24,0x23,0x24,0x26,0x26,0x26,0x23,0x25,0x24,0x28,0x25,0x04,0x04,0x26,0x04,0x25,
159 0x26,0x26,0x04,0x28,0x26,0x26,0x25,0x25,0x26,0x25,0x25,0x26,0x04,0x24,0x26,0x25,
160 0x26,0x28,0x23,0x28,0x28,0x26,0x26,0x04,0x04,0x25,0x25,0x22,0x20,0x22,0x25,0x24,
161 0x26,0x26,0x04,0x26,0x28,0x25,0x04,0x28,0x28,0x04,0x26,0x25,0x26,0x28,0x04,0x26,
162 0x28,0x25,0x26,0x24,0x26,0x24,0x25,0x25,0x28,0x25,0x26,0x25,0x24,0x24,0x04,0x28,
163 0x28,0x25,0x28,0x28,0x28,0x04,0x28,0x28,0x25,0x28,0x04,0x26,0x24,0x29,0x29,0x28,
164 0x29,0x28,0x28,0x26,0x29,0x28,0x29,0x28,0x28,0x25,0x23,0x25,0x27,0x24,0x26,0x29,
165 0x20,0x26,0x22,0x20,0x20,0x20,0x20,0x20,0x22,0x23,0x25,0x24,0x22,0x22,0x26,0x04,
166 0x26,0x20,0x04,0x26,0x25,0x24,0x22,0x04,0x28,0x26,0x26,0x28,0x26,0x28,0x28,0x25,
167 0x24,0x28,0x26,0x26,0x25,0x25,0x26,0x28,0x23,0x27,0x26,0x28,0x28,0x04,0x04,0x25,
168 0x22,0x23,0x25,0x24,0x25,0x25,0x25,0x25,0x26,0x25,0x24,0x27,0x25,0x28,0x25,0x24,
169 0x04,0x26,0x25,0x23,0x28,0x28,0x28,0x28,0x26,0x29,0x26,0x28,0x27,0x24,0x26,0x25,
170 0x28,0x04,0x26,0x25,0x22,0x26,0x25,0x22,0x23,0x24,0x23,0x23,0x22,0x22,0x23,0x23,
171 0x25,0x24,0x25,0x22,0x23,0x26,0x04,0x24,0x26,0x24,0x25,0x26,0x28,0x23,0x24,0x26,
172 0x24,0x25,0x28,0x26,0x23,0x28,0x24,0x24,0x22,0x23,0x22,0x25,0x25,0x25,0x26,0x25,
173 0x25,0x24,0x25,0x23,0x22,0x24,0x24,0x28,0x24,0x25,0x23,0x24,0x25,0x25,0x24,0x26,
174 0x25,0x25,0x28,0x25,0x04,0x24,0x25,0x25,0x24,0x26,0x24,0x24,0x28,0x28,0x29,0x28,
175 0x28,0x28,0x29,0x26,0x29,0x28,0x29,0x29,0x29,0x26,0x25,0x27,0x25,0x28,0x04,0x28,
176 0x27,0x28,0x26,0x28,0x26,0x26,0x29,0x28,0x26,0x28,0x25,0x25,0x28,0x24,0x20,0x23,
177 0x20,0x22,0x22,0x23,0x25,0x22,0x23,0x24,0x22,0x24,0x23,0x23,0x26,0x24,0x28,0x23,
178 0x28,0x04,0x24,0x26,0x28,0x26,0x24,0x26,0x26,0x04,0x04,0x04,0x25,0x25,0x24,0x26,
179 0x25,0x26,0x26,0x25,0x28,0x25,0x25,0x26,0x25,0x24,0x28,0x23,0x28,0x28,0x04,0x26,
180 0x04,0x24,0x25,0x26,0x04,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x26,0x28,0x25,0x23,
181 0x26,0x25,0x25,0x28,0x22,0x25,0x28,0x24,0x24,0x25,0x28,0x25,0x27,0x28,0x26,0x26,
182 0x27,0x28,0x28,0x04,0x27,0x25,0x25,0x28,0x28,0x28,0x28,0x26,0x29,0x26,0x25,0x28,
183 0x24,0x25,0x24,0x28,0x25,0x24,0x25,0x24,0x27,0x24,0x28,0x26,0x26,0x28,0x28,0x26,
184 0x28,0x24,0x28,0x04,0x25,0x28,0x23,0x28,0x24,0x04,0x28,0x28,0x04,0x26,0x26,0x29,
185 0x21,0x22,0x25,0x24,0x23,0x22,0x25,0x25,0x21,0x25,0x26,0x26,0x04,0x28,0x28,0x25,
186 0x04,0x21,0x20,0x20,0x25,0x22,0x25,0x25,0x24,0x28,0x25,0x25,0x24,0x04,0x04,0x24,
187 0x23,0x28,0x25,0x04,0x25,0x25,0x23,0x23,0x04,0x25,0x23,0x23,0x25,0x29,0x28,0x26,
188 0x24,0x28,0x25,0x25,0x28,0x04,0x25,0x26,0x28,0x27,0x25,0x28,0x24,0x28,0x28,0x04,
189 0x04,0x28,0x28,0x04,0x26,0x28,0x28,0x27,0x24,0x28,0x27,0x28,0x26,0x26,0x28,0x28,
190 0x28,0x25,0x28,0x25,0x25,0x25,0x25,0x26,0x24,0x25,0x22,0x23,0x22,0x25,0x23,0x23,
191 0x25,0x24,0x23,0x25,0x26,0x26,0x26,0x26,0x24,0x24,0x28,0x26,0x26,0x28,0x24,0x26,
192 0x28,0x28,0x25,0x23,0x24,0x26,0x24,0x22,0x23,0x24,0x04,0x23,0x22,0x23,0x23,0x25,
193 0x24,0x23,0x22,0x22,0x23,0x25,0x28,0x25,0x23,0x04,0x26,0x23,0x25,0x26,0x28,0x23,
194 0x25,0x22,0x25,0x22,0x24,0x24,0x22,0x25,0x24,0x22,0x22,0x24,0x23,0x28,0x04,0x24,
195 0x26,0x24,0x24,0x23,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x25,0x25,0x04,0x28,0x27,
196 0x28,0x28,0x04,0x28,0x28,0x26,0x28,0x26,0x28,0x04,0x26,0x24,0x20,0x22,0x22,0x22,
197 0x22,0x25,0x23,0x25,0x23,0x04,0x24,0x25,0x24,0x25,0x25,0x04,0x25,0x22,0x26,0x28,
198 0x26,0x26,0x04,0x24,0x26,0x24,0x25,0x26,0x22,0x25,0x26,0x26,0x04,0x28,0x23,0x28,
199 0x26,0x25,0x28,0x23,0x26,0x25,0x28,0x04,0x28,0x24,0x28,0x24,0x26,0x28,0x25,0x25,
200 0x25,0x25,0x23,0x26,0x25,0x23,0x20,0x24,0x24,0x23,0x24,0x25,0x26,0x25,0x28,0x26,
201 0x24,0x26,0x26,0x26,0x26,0x26,0x26,0x28,0x26,0x28,0x26,0x04,0x04,0x29,0x25,0x29,
202 0x26,0x28,0x28,0x28,0x28,0x29,0x04,0x29,0x28,0x26,0x26,0x28,0x04,0x29,0x28,0x28,
203 0x24,0x04,0x25,0x28,0x28,0x25,0x04,0x04,0x28,0x04,0x28,0x28,0x26,0x04,0x25,0x28,
204 0x24,0x04,0x04,0x26,0x26,0x23,0x24,0x04,0x26,0x28,0x28,0x25,0x26,0x04,0x25,0x29,
205 0x26,0x28,0x28,0x26,0x25,0x26,0x26,0x04,0x26,0x26,0x26,0x26,0x26,0x24,0x24,0x25,
206 0x22,0x25,0x22,0x26,0x04,0x24,0x28,0x04,0x28,0x28,0x04,0x04,0x26,0x23,0x24,0x28,
207 0x25,0x25,0x23,0x04,0x26,0x28,0x25,0x25,0x26,0x25,0x22,0x25,0x04,0x26,0x26,0x27,
208 0x28,0x25,0x28,0x25,0x25,0x25,0x28,0x26,0x24,0x25,0x04,0x28,0x28,0x23,0x24,0x22,
209 0x26,0x26,0x04,0x25,0x22,0x28,0x28,0x23,0x26,0x26,0x25,0x04,0x28,0x27,0x04,0x25,
210 0x26,0x24,0x26,0x29,0x28,0x28,0x26,0x26,0x27,0x24,0x26,0x04,0x24,0x22,0x26,0x25,
211 0x22,0x25,0x24,0x04,0x24,0x28,0x25,0x26,0x26,0x26,0x24,0x23,0x25,0x04,0x25,0x24,
212 0x25,0x25,0x22,0x22,0x28,0x25,0x25,0x22,0x25,0x24,0x24,0x26,0x25,0x25,0x23,0x23,
213 0x25,0x04,0x25,0x26,0x22,0x24,0x24,0x25,0x25,0x24,0x23,0x04,0x25,0x24,0x25,0x04,
214 0x26,0x04,0x26,0x28,0x28,0x24,0x26,0x26,0x25,0x28,0x24,0x25,0x26,0x26,0x22,0x24,
215 0x25,0x28,0x26,0x28,0x28,0x28,0x28,0x04,0x28,0x24,0x04,0x04,0x28,0x29,0x28,0x04,
216 0x28,0x28,0x25,0x25,0x26,0x26,0x23,0x25,0x21,0x24,0x22,0x20,0x25,0x24,0x28,0x23,
217 0x25,0x24,0x23,0x24,0x22,0x25,0x25,0x28,0x26,0x23,0x25,0x22,0x26,0x25,0x25,0x04,
218 0x26,0x26,0x24,0x25,0x25,0x26,0x24,0x28,0x28,0x04,0x25,0x26,0x25,0x24,0x26,0x25,
219 0x26,0x26,0x26,0x24,0x28,0x26,0x24,0x04,0x28,0x04,0x28,0x28,0x28,0x25,0x25,0x04,
220 0x25,0x24,0x23,0x22,0x20,0x24,0x21,0x28,0x25,0x28,0x25,0x28,0x25,0x26,0x28,0x26,
221 0x28,0x04,0x26,0x25,0x04,0x28,0x25,0x24,0x25,0x28,0x28,0x29,0x28,0x28,0x26,0x28,
222 0x25,0x28,0x25,0x26,0x26,0x29,0x29,0x25,0x28,0x25,0x04,0x24,0x26,0x28,0x29,0x28,
223 0x26,0x25,0x27,0x24,0x23,0x25,0x28,0x25,0x26,0x28,0x24,0x25,0x25,0x04,0x28,0x04,
224 0x25,0x24,0x26,0x04,0x26,0x26,0x26,0x26,0x22,0x25,0x28,0x04,0x23,0x28,0x28,0x29,
225 0x24,0x28,0x24,0x28,0x25,0x04,0x24,0x26,0x24,0x23,0x04,0x26,0x22,0x28,0x24,0x28,
226 0x04,0x25,0x26,0x25,0x28,0x28,0x28,0x24,0x20,0x22,0x28,0x25,0x23,0x23,0x28,0x24,
227 0x22,0x25,0x22,0x04,0x22,0x21,0x26,0x25,0x23,0x21,0x22,0x22,0x25,0x04,0x28,0x25,
228 0x28,0x22,0x28,0x28,0x04,0x04,0x24,0x22,0x25,0x25,0x22,0x23,0x25,0x22,0x21,0x23,
229 0x22,0x22,0x28,0x23,0x23,0x24,0x04,0x28,0x28,0x22,0x04,0x28,0x25,0x28,0x28,0x04,
230 0x26,0x26,0x28,0x28,0x24,0x04,0x22,0x25,0x28,0x28,0x28,0x26,0x25,0x28,0x28,0x26,
231 0x25,0x04,0x28,0x26,0x25,0x26,0x28,0x25,0x22,0x26,0x23,0x23,0x23,0x21,0x25,0x26,
232 0x25,0x26,0x25,0x28,0x25,0x04,0x26,0x25,0x26,0x22,0x25,0x24,0x24,0x25,0x25,0x28,
233 0x24,0x22,0x26,0x24,0x04,0x26,0x24,0x25,0x26,0x26,0x25,0x25,0x04,0x04,0x28,0x28,
234 0x24,0x24,0x28,0x25,0x23,0x04,0x24,0x22,0x04,0x26,0x26,0x28,0x28,0x26,0x26,0x27,
235 0x24,0x28,0x25,0x26,0x25,0x29,0x28,0x25,0x28,0x04,0x28,0x28,0x25,0x25,0x27,0x28,
236 0x26,0x28,0x24,0x23,0x24,0x23,0x25,0x24,0x20,0x22,0x23,0x25,0x23,0x28,0x26,0x04,
237 0x23,0x24,0x25,0x25,0x23,0x26,0x26,0x25,0x25,0x04,0x24,0x28,0x04,0x25,0x28,0x04,
238 0x24,0x24,0x25,0x28,0x26,0x28,0x04,0x25,0x25,0x28,0x04,0x26,0x28,0x28,0x28,0x28,
239 0x04,0x25,0x04,0x26,0x04,0x26,0x24,0x04,0x28,0x22,0x26,0x25,0x25,0x26,0x25,0x26,
240 0x25,0x25,0x22,0x25,0x23,0x23,0x28,0x25,0x25,0x24,0x22,0x28,0x24,0x26,0x25,0x24,
241 0x25,0x04,0x25,0x04,0x26,0x25,0x28,0x28,0x04,0x28,0x29,0x04,0x28,0x28,0x27,0x24,
242 0x28,0x27,0x25,0x27,0x25,0x28,0x28,0x28,0x26,0x28,0x04,0x28,0x04,0x22,0x26,0x26,
243 0x04,0x28,0x28,0x26,0x04,0x28,0x28,0x25,0x28,0x24,0x22,0x25,0x28,0x28,0x23,0x28,
244 0x04,0x26,0x28,0x28,0x26,0x04,0x26,0x24,0x24,0x26,0x25,0x28,0x24,0x23,0x24,0x29,
245 0x28,0x28,0x28,0x28,0x28,0x26,0x27,0x28,0x26,0x24,0x26,0x25,0x23,0x28,0x04,0x28,
246 0x28,0x27,0x24,0x25,0x24,0x26,0x25,0x24,0x23,0x25,0x20,0x20,0x20,0x25,0x20,0x04,
247 0x04,0x28,0x28,0x04,0x23,0x26,0x26,0x25,0x25,0x23,0x22,0x20,0x20,0x20,0x20,0x20,
248 0x22,0x23,0x26,0x28,0x23,0x24,0x04,0x25,0x23,0x28,0x23,0x26,0x25,0x25,0x25,0x28,
249 0x28,0x28,0x24,0x25,0x28,0x04,0x04,0x26,0x25,0x26,0x23,0x24,0x28,0x25,0x26,0x24,
250 0x26,0x25,0x25,0x24,0x25,0x22,0x28,0x26,0x25,0x22,0x26,0x28,0x25,0x25,0x28,0x25,
251 0x28,0x24,0x26,0x25,0x26,0x26,0x28,0x25,0x24,0x04,0x26,0x26,0x04,0x26,0x04,0x28,
252 0x28,0x04,0x04,0x24,0x24,0x25,0x04,0x04,0x24,0x28,0x26,0x26,0x28,0x27,0x28,0x25,
253 0x25,0x24,0x04,0x04,0x27,0x26,0x24,0x27,0x28,0x24,0x25,0x26,0x28,0x26,0x25,0x25,
254 0x25,0x28,0x04,0x28,0x25,0x28,0x25,0x25,0x28,0x28,0x25,0x28,0x28,0x25,0x23,0x29,
255 0x04,0x28,0x28,0x28,0x28,0x25,0x26,0x24,0x25,0x25,0x28,0x25,0x26,0x26,0x25,0x21,
256 0x25,0x23,0x22,0x21,0x25,0x24,0x20,0x25,0x28,0x23,0x23,0x25,0x22,0x25,0x23,0x22,
257 0x26,0x28,0x24,0x26,0x04,0x26,0x25,0x28,0x28,0x23,0x26,0x25,0x28,0x25,0x25,0x04,
258 0x28,0x04,0x25,0x28,0x26,0x28,0x28,0x22,0x25,0x28,0x26,0x04,0x28,0x25,0x25,0x04,
259 0x26,0x25,0x28,0x28,0x26,0x25,0x04,0x04,0x26,0x28,0x26,0x26,0x26,0x26,0x24,0x25,
260 0x25,0x23,0x25,0x25,0x25,0x23,0x28,0x24,0x22,0x25,0x28,0x27,0x24,0x28,0x26,0x28,
261 0x25,0x26,0x28,0x25,0x28,0x28,0x28,0x28,0x28,0x29,0x25,0x25,0x28,0x25,0x27,0x04,
262 0x28,0x28,0x28,0x25,0x26,0x25,0x25,0x24,0x24,0x24,0x25,0x24,0x26,0x26,0x24,0x26,
263 0x24,0x28,0x25,0x28,0x04,0x28,0x24,0x04,0x26,0x26,0x28,0x26,0x28,0x25,0x22,0x26,
264 0x26,0x04,0x25,0x28,0x28,0x26,0x04,0x04,0x24,0x24,0x23,0x23,0x26,0x25,0x20,0x29,
265 0x29,0x28,0x28,0x25,0x26,0x24,0x29,0x26,0x25,0x25,0x27,0x26,0x28,0x04,0x24,0x24,
266 0x25,0x26,0x04,0x26,0x23,0x25,0x22,0x04,0x23,0x24,0x26,0x24,0x22,0x25,0x24,0x25,
267 0x24,0x25,0x25,0x04,0x23,0x04,0x25,0x25,0x04,0x28,0x28,0x22,0x28,0x23,0x23,0x25,
268 0x23,0x25,0x23,0x23,0x20,0x23,0x04,0x26,0x04,0x27,0x04,0x28,0x26,0x26,0x24,0x04,
269 0x04,0x25,0x26,0x25,0x28,0x25,0x28,0x25,0x25,0x28,0x28,0x04,0x25,0x22,0x28,0x23,
270 0x25,0x28,0x24,0x22,0x25,0x22,0x04,0x26,0x23,0x26,0x28,0x28,0x25,0x25,0x24,0x23,
271 0x26,0x25,0x26,0x28,0x25,0x23,0x28,0x04,0x04,0x24,0x26,0x26,0x04,0x25,0x28,0x26,
272 0x26,0x25,0x28,0x29,0x29,0x24,0x28,0x04,0x04,0x23,0x25,0x29,0x29,0x04,0x04,0x29,
273 0x25,0x29,0x26,0x29,0x25,0x28,0x25,0x28,0x04,0x22,0x26,0x29,0x29,0x28,0x29,0x04,
274 0x04,0x25,0x29,0x28,0x29,0x28,0x25,0x28,0x28,0x28,0x29,0x28,0x28,0x04,0x28,0x28,
275 0x26,0x28,0x28,0x04,0x25,0x25,0x22,0x25,0x25,0x22,0x24,0x24,0x22,0x26,0x25,0x23,
276 0x21,0x22,0x24,0x21,0x20,0x20,0x24,0x22,0x24,0x28,0x25,0x24,0x24,0x22,0x23,0x28,
277 0x22,0x28,0x28,0x25,0x04,0x26,0x26,0x25,0x04,0x26,0x28,0x24,0x28,0x28,0x28,0x28,
278 0x26,0x04,0x04,0x25,0x25,0x26,0x24,0x28,0x26,0x26,0x28,0x24,0x28,0x26,0x24,0x24,
279 0x28,0x04,0x28,0x22,0x26,0x04,0x26,0x24,0x26,0x24,0x26,0x26,0x21,0x25,0x04,0x26,
280 0x23,0x28,0x28,0x28,0x28,0x24,0x28,0x28,0x29,0x25,0x25,0x29,0x28,0x29,0x28,0x28,
281 0x28,0x29,0x24,0x29,0x23,0x28,0x25,0x26,0x28,0x28,0x28,0x04,0x26,0x26,0x26,0x24,
282 0x04,0x25,0x27,0x25,0x25,0x25,0x28,0x25,0x25,0x24,0x04,0x26,0x25,0x26,0x26,0x28,
283 0x28,0x28,0x22,0x28,0x28,0x28,0x26,0x24,0x26,0x28,0x04,0x26,0x26,0x04,0x26,0x28,
284 0x24,0x26,0x25,0x28,0x26,0x25,0x26,0x26,0x26,0x28,0x24,0x04,0x23,0x20,0x23,0x29,
285 0x28,0x25,0x28,0x04,0x27,0x25,0x26,0x28,0x28,0x25,0x28,0x24,0x26,0x25,0x23,0x25,
286 0x25,0x96,0x96,0x96,0x96,0x4A,0x4A,0x4A,0x4A,0x4A,0x96,0x96,0x98,0x98,0x98,0x98,
287 0x98,0x98,0x98,0x98,0x99,0x99,0x99,0x99,0x99,0x99,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,
288 0x9A,0x9A,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9C,0x9C,0x9C,0x9C,0x9C,0x9C,0x26,0x25,
289 0x24,0x25,0x25,0x28,0x25,0x04,0x26,0x22,0x22,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,
290 0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,
291 0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,
292 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,
293 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,
294 0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,
295 0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,
296 0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,
297 0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1E,0x1E,
298 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,
299 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,
300 0x1E,0x1E,0x1E,0x1E,0x24,0x28,0x28,0x28,0x25,0x98,0x98,0x98,0x98,0x98,0x98,0x98,
301 0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,
302 0x98,0x98,0x98,0x98,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
303 0x99,0x99,0x99,0x99,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,
304 0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,0x22,0x20,0x28,0x29,
305 0x26,0x28,0x26,0x28,0x28,0x23,0x28,0x04,0x25,0x26,0x28,0x23,0x24,0x24,0x25,0x28,
306 0x25,0x96,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
307 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
308 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2A,0x22,
309 0x22,0x25,0x25,0x23,0x22,0x23,0x23,0x22,0x23,0x1A,0x00,0x00,0x00,0x00,0x00,0x00,
310 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
311 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
312 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
313 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
314 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
315 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
316 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
317 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
318 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
319 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
320 0x00,0x00,0x00,0x00,0x2C,0x04,0x28,0x04,0x28,0x98,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
321 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
322 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
323 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
324 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2A,0x24,0x25,0x29,
325 0x28,0x04,0x28,0x26,0x28,0x26,0x26,0x26,0x24,0x26,0x28,0x25,0x22,0x25,0x25,0x28,
326 0x28,0x96,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
327 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
328 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x47,0x9F,0x9F,0x9F,0x9F,0x2A,0x26,
329 0x22,0x23,0x25,0x22,0x22,0x20,0x24,0x22,0x24,0x1A,0x00,0x00,0x00,0x00,0x00,0x00,
330 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
331 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
332 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
333 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
334 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
335 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
336 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
337 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
338 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
339 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
340 0x00,0x00,0x00,0x00,0x2B,0x26,0x04,0x28,0x28,0x98,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
341 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
342 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
343 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
344 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2E,0x28,0x24,0x29,
345 0x26,0x28,0x24,0x26,0x25,0x25,0x24,0x25,0x26,0x28,0x04,0x28,0x25,0x28,0x04,0x04,
346 0x28,0x96,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
347 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
348 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2B,0x2C,
349 0x28,0x23,0x25,0x24,0x04,0x23,0x25,0x25,0x23,0x1A,0x00,0x00,0x18,0x08,0x1D,0x00,
350 0x00,0x00,0x1C,0x07,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
351 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
352 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
353 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
354 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
355 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
356 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
357 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
358 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
359 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,
360 0x08,0x1D,0x00,0x00,0x2B,0x2C,0x24,0x26,0x24,0x98,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
361 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
362 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
363 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
364 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2A,0x29,0x28,0x29,
365 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
366 0x00,0x96,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
367 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
368 0x9F,0x9F,0x9F,0x9F,0x9F,0x47,0x9F,0x9F,0x9F,0x9F,0x47,0x9F,0x9F,0x9F,0x00,0x00,
369 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1A,0x00,0x00,0x08,0x1D,0x1F,0x00,
370 0x00,0x1E,0x08,0x08,0x14,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
371 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
372 0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x1C,0x00,0x1E,0x00,0x00,0x00,0x00,0x07,0x12,
373 0x07,0x00,0x07,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
374 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
375 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
376 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
377 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
378 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
379 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,
380 0x1D,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
381 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
382 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x3C,0x38,0x45,0x45,
383 0x38,0xD5,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
384 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
385 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
386 0x00,0x96,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
387 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
388 0x9F,0x9F,0x9F,0x9F,0x9F,0x4C,0x47,0x47,0x47,0x47,0x4C,0x9F,0x9F,0x9F,0x00,0x00,
389 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1A,0x00,0x00,0x1D,0x1F,0x1F,0x00,
390 0x00,0x08,0x08,0x08,0x08,0x14,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2A,0x20,
391 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
392 0x00,0x00,0x00,0x16,0x0F,0x1A,0x18,0x07,0x18,0x17,0x00,0x08,0x07,0x17,0x1A,0x1A,
393 0x16,0x12,0x1A,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
394 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
395 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
396 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
397 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
398 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
399 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,
400 0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
401 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
402 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x28,0x34,0x33,0x33,0x33,0x33,0x33,
403 0x33,0x34,0x3F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
404 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
405 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
406 0x00,0x96,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
407 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
408 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
409 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1A,0x00,0x00,0x00,0x00,0x00,0x00,
410 0x08,0x1A,0x1A,0x1A,0x1A,0x1A,0x07,0x0F,0x07,0x00,0x00,0x00,0x00,0x28,0x08,0x1A,
411 0x31,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
412 0x00,0x00,0x13,0x1A,0x1A,0x1A,0x1A,0x1A,0x18,0x28,0x16,0x1A,0x1A,0x1A,0x1A,0x1A,
413 0x1A,0x1A,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
414 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
415 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
416 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
417 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x12,
418 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2D,
419 0x17,0x07,0x00,0x00,0x00,0x26,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
420 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
421 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
422 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x28,0x21,0x36,0x36,0x36,0x36,0x36,0x36,0x36,
423 0x36,0x36,0xD9,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
424 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
425 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
426 0x00,0x96,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
427 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
428 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
429 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1A,0x00,0x00,0x00,0x00,0x00,0x32,
430 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x07,0x0F,0x00,0x00,0x24,0x19,0x19,0x19,
431 0x19,0x31,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
432 0x00,0x11,0x19,0x19,0x19,0x19,0x19,0x07,0x35,0x00,0x18,0x19,0x19,0x19,0x07,0x19,
433 0x19,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
434 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
435 0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
436 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
437 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x12,0x07,0x19,0x18,
438 0x12,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x1A,
439 0x1A,0x1A,0x11,0x26,0x26,0x1A,0x17,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
440 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
441 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
442 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x29,0x23,0x23,0x23,0x23,0x2A,0xAD,0xAD,0x2A,0x23,
443 0x23,0x27,0xAD,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
444 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
445 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
446 0x00,0x98,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
447 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x4A,0x4C,0x4E,0x9F,0x9F,0x9F,
448 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
449 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1A,0x00,0x00,0x00,0x00,0x22,0x19,
450 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x32,0x00,0x00,0x35,0x19,0x19,0x19,
451 0x19,0x19,0x18,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
452 0x00,0x17,0x18,0x18,0x18,0x0F,0x28,0x2A,0x00,0x00,0x19,0x18,0x18,0x18,0x07,0x04,
453 0x2A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
454 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
455 0x00,0x00,0x00,0x00,0x00,0x24,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
456 0x00,0x00,0x00,0x00,0x00,0x04,0x13,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
457 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x19,0x19,0x19,
458 0x19,0x07,0x12,0x11,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x19,0x19,
459 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x08,0x00,0x1D,0x13,0x07,0x00,0x00,0x00,0x00,
460 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
461 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
462 0x9F,0x9F,0x9F,0x9F,0x9F,0x29,0x25,0x25,0x25,0x28,0x9F,0x9F,0x9F,0xAE,0x27,0x25,
463 0x27,0xAD,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
464 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
465 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
466 0x00,0x98,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
467 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x49,0x4C,0x4E,0x9F,
468 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
469 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1A,0x00,0x00,0x00,0x00,0x32,0x17,
470 0x17,0x17,0x17,0x00,0x0F,0x17,0x17,0x17,0x17,0x0C,0x00,0x1A,0x17,0x17,0x17,0x17,
471 0x17,0x17,0x17,0x17,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
472 0x00,0x18,0x18,0x17,0x17,0x0F,0x00,0x00,0x00,0x00,0x08,0x17,0x17,0x17,0x18,0x00,
473 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
474 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
475 0x00,0x00,0x00,0x00,0x22,0x17,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
476 0x00,0x00,0x00,0x00,0x00,0x18,0x08,0x18,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
477 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x18,0x18,0x18,
478 0x18,0x18,0x18,0x18,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x18,0x18,0x18,
479 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x12,0x07,0x00,0x00,
480 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
481 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
482 0x9F,0x9F,0x9F,0x9F,0x29,0x26,0x26,0x28,0x2C,0x9F,0x9F,0x9F,0xAF,0x27,0x26,0x27,
483 0xAD,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
484 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
485 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
486 0x00,0x98,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
487 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x49,0x4D,
488 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
489 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1A,0x00,0x00,0x00,0x00,0x07,0x14,
490 0x17,0x17,0x2B,0x00,0x0F,0x17,0x17,0x17,0x17,0x36,0x00,0x17,0x17,0x17,0x08,0x17,
491 0x17,0x17,0x17,0x17,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
492 0x00,0x1A,0x17,0x16,0x16,0x11,0x00,0x00,0x00,0x00,0x04,0x16,0x16,0x16,0x1A,0x00,
493 0x00,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
494 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
495 0x00,0x00,0x00,0x35,0x16,0x16,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
496 0x00,0x00,0x00,0x00,0x07,0x08,0x1D,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
497 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x26,0x26,0x00,
498 0x17,0x17,0x17,0x17,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x17,0x17,0x17,0x17,
499 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x07,0x00,
500 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
501 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
502 0x9F,0x9F,0x9F,0x29,0x28,0x28,0x2A,0xE6,0x9F,0x9F,0x9F,0x9F,0x29,0x28,0x28,0xAD,
503 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
504 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
505 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
506 0x00,0x98,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
507 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x49,
508 0x4D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
509 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x18,0x11,
510 0x16,0x2B,0x00,0x00,0x11,0x16,0x16,0x16,0x16,0x22,0x00,0x07,0x16,0x08,0x00,0x1A,
511 0x16,0x16,0x16,0x16,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
512 0x00,0x1C,0x16,0x16,0x16,0x13,0x00,0x00,0x00,0x00,0x04,0x16,0x16,0x16,0x08,0x0C,
513 0x0C,0x08,0x00,0x00,0x00,0x1A,0x17,0x0F,0x00,0x00,0x00,0x00,0x0C,0x07,0x00,0x00,
514 0x00,0x1C,0x07,0x12,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x08,0x0F,0x00,0x00,
515 0x18,0x00,0x04,0x16,0x16,0x16,0x0F,0x11,0x13,0x00,0x00,0x00,0x00,0x18,0x13,0x08,
516 0x00,0x00,0x00,0x00,0x2D,0x2D,0x00,0x00,0x00,0x00,0x00,0x07,0x08,0x00,0x00,0x00,
517 0x18,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,
518 0x16,0x16,0x16,0x16,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x16,0x16,0x16,0x16,
519 0x00,0x12,0x16,0x16,0x16,0x16,0x00,0x00,0x1E,0x16,0x16,0x16,0x16,0x16,0x17,0x00,
520 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
521 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
522 0x9F,0x9F,0xBE,0xBD,0xBD,0xBD,0xE6,0x9F,0x9F,0x9F,0x9F,0xAD,0xBD,0xBD,0xAD,0x9F,
523 0x9F,0xAE,0xAE,0xAE,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
524 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
525 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
526 0x00,0x98,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
527 0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x4D,0x49,0x47,0x47,0x47,0x47,0x47,0x47,
528 0x49,0x4E,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
529 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x0F,
530 0x07,0x04,0x00,0x00,0x12,0x16,0x16,0x16,0x16,0x04,0x00,0x19,0x07,0x08,0x00,0x11,
531 0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x1A,0x11,0x0F,0x07,0x08,0x00,
532 0x00,0x1E,0x16,0x07,0x07,0x07,0x00,0x00,0x08,0x07,0x07,0x07,0x07,0x07,0x07,0x07,
533 0x07,0x08,0x00,0x08,0x08,0x16,0x07,0x07,0x0F,0x00,0x00,0x0C,0x07,0x07,0x0F,0x0F,
534 0x00,0x08,0x07,0x07,0x12,0x0F,0x12,0x00,0x00,0x0C,0x24,0x18,0x07,0x12,0x0F,0x07,
535 0x07,0x08,0x07,0x07,0x07,0x07,0x07,0x07,0x08,0x00,0x00,0x1A,0x19,0x07,0x07,0x0F,
536 0x08,0x00,0x00,0x21,0x19,0x07,0x0F,0x11,0x08,0x00,0x04,0x07,0x12,0x0F,0x00,0x00,
537 0x18,0x07,0x12,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,
538 0x07,0x07,0x07,0x07,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x07,0x07,0x07,0x00,
539 0x00,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x1E,0x08,0x07,0x07,0x07,0x07,0x18,0x00,
540 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
541 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
542 0x9F,0xBE,0xBD,0xBD,0xBD,0xAE,0x9F,0x9F,0x9F,0x9F,0xAD,0xBD,0xBD,0xAD,0x9F,0x9F,
543 0xAE,0xBE,0xBE,0xAE,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
544 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
545 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
546 0x00,0x98,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
547 0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x49,0x47,0x47,0x47,0x47,0x47,
548 0x47,0x4C,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
549 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x18,
550 0x14,0x36,0x00,0x00,0x13,0x07,0x07,0x07,0x07,0x04,0x00,0x00,0x07,0x08,0x00,0x12,
551 0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x19,0x07,0x07,0x07,0x07,0x07,0x07,0x0F,0x31,
552 0x00,0x1F,0x07,0x14,0x14,0x16,0x00,0x19,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,
553 0x18,0x04,0x0C,0x16,0x14,0x14,0x14,0x14,0x07,0x0F,0x0C,0x14,0x14,0x14,0x14,0x14,
554 0x1C,0x18,0x14,0x14,0x14,0x14,0x14,0x21,0x17,0x14,0x14,0x14,0x14,0x14,0x14,0x14,
555 0x08,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x08,0x0C,0x19,0x14,0x14,0x14,0x14,0x14,
556 0x0F,0x08,0x0C,0x16,0x14,0x14,0x14,0x14,0x12,0x04,0x14,0x14,0x14,0x14,0x17,0x08,
557 0x14,0x14,0x14,0x14,0x14,0x1A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,
558 0x14,0x14,0x14,0x14,0x1A,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x16,0x14,0x1A,0x00,
559 0x00,0x0C,0x14,0x14,0x14,0x14,0x00,0x00,0x00,0x19,0x14,0x14,0x14,0x14,0x1A,0x00,
560 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
561 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
562 0xBE,0xBD,0xBD,0xBD,0xAE,0x9F,0x9F,0xAE,0xAD,0xAD,0xBD,0xBD,0xAD,0x9F,0x9F,0xAE,
563 0xBE,0xBE,0xAE,0x9F,0x9F,0xAE,0xBE,0xBE,0xBE,0xBE,0xBE,0xBE,0xAE,0x9F,0x9F,0x9F,
564 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
565 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
566 0x00,0x98,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
567 0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x49,0x47,0x47,0x47,0x47,
568 0x47,0x49,0x4E,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x9F,0x00,0x00,
569 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,
570 0x18,0x18,0x00,0x00,0x14,0x14,0x14,0x14,0x14,0x00,0x00,0x00,0x00,0x07,0x07,0x14,
571 0x14,0x14,0x14,0x14,0x04,0x24,0x17,0x14,0x14,0x14,0x04,0x14,0x14,0x14,0x14,0x14,
572 0x19,0x00,0x14,0x13,0x13,0x18,0x00,0x19,0x13,0x08,0x08,0x13,0x13,0x13,0x08,0x00,
573 0x00,0x0C,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x07,0x08,0x13,0x13,0x13,0x13,
574 0x18,0x13,0x13,0x13,0x13,0x13,0x07,0x35,0x13,0x13,0x13,0x13,0x08,0x13,0x13,0x0C,
575 0x08,0x18,0x1C,0x13,0x13,0x13,0x1C,0x08,0x04,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
576 0x13,0x0F,0x08,0x08,0x13,0x13,0x13,0x13,0x04,0x04,0x13,0x13,0x13,0x13,0x13,0x13,
577 0x13,0x13,0x13,0x13,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,
578 0x13,0x13,0x13,0x1A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x1A,0x13,0x1A,0x00,
579 0x00,0x0C,0x13,0x13,0x13,0x13,0x00,0x00,0x00,0x08,0x13,0x13,0x13,0x13,0x08,0x00,
580 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
581 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0xBE,
582 0xBC,0xBC,0xBC,0xBE,0xAE,0x9F,0xAE,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,
583 0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xBE,0xAE,0x9F,0x9F,0x9F,
584 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
585 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
586 0x00,0x99,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
587 0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x4D,0x47,0x47,0x47,0x47,
588 0x47,0x47,0x4E,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
589 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,
590 0x00,0x00,0x00,0x00,0x07,0x13,0x13,0x13,0x13,0x2C,0x00,0x00,0x00,0x00,0x00,0x16,
591 0x13,0x13,0x13,0x13,0x04,0x21,0x13,0x13,0x13,0x13,0x04,0x0C,0x13,0x13,0x13,0x13,
592 0x19,0x00,0x13,0x12,0x12,0x1A,0x00,0x08,0x08,0x00,0x1D,0x12,0x12,0x12,0x1C,0x00,
593 0x00,0x08,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x04,0x12,0x12,0x12,0x12,
594 0x12,0x12,0x12,0x12,0x12,0x12,0x07,0x21,0x12,0x12,0x12,0x12,0x04,0x25,0x20,0x00,
595 0x00,0x00,0x1E,0x12,0x12,0x12,0x00,0x00,0x08,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
596 0x12,0x12,0x08,0x04,0x12,0x12,0x12,0x12,0x04,0x00,0x08,0x12,0x12,0x12,0x12,0x12,
597 0x12,0x12,0x12,0x12,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x08,
598 0x11,0x18,0x08,0x00,0x16,0x28,0x28,0x32,0x07,0x07,0x07,0x0F,0x08,0x0F,0x1A,0x00,
599 0x00,0x35,0x11,0x11,0x11,0x11,0x00,0x00,0x00,0x1D,0x11,0x11,0x11,0x11,0x1D,0x00,
600 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
601 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0xBE,0xBB,
602 0xBB,0xBB,0xBD,0xAE,0x9F,0xAE,0xBD,0xBC,0xBC,0xBC,0xBC,0xBC,0xBC,0xBC,0xBC,0xBC,
603 0xBC,0xBC,0xBC,0xBC,0xBC,0xBC,0xBC,0xBE,0xAE,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
604 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
605 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
606 0x00,0x99,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
607 0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x4F,0x47,0x47,0x47,0x47,
608 0x47,0x47,0x4D,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x9F,0x00,0x00,
609 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,
610 0x00,0x00,0x00,0x00,0x16,0x13,0x12,0x12,0x12,0x2F,0x00,0x07,0x17,0x18,0x00,0x17,
611 0x12,0x12,0x12,0x12,0x27,0x35,0x12,0x12,0x12,0x12,0x04,0x0C,0x12,0x12,0x12,0x12,
612 0x33,0x00,0x12,0x11,0x11,0x18,0x00,0x00,0x00,0x00,0x00,0x10,0x11,0x11,0x1E,0x00,
613 0x00,0x1D,0x10,0x11,0x11,0x11,0x00,0x11,0x11,0x11,0x11,0x0C,0x13,0x11,0x11,0x11,
614 0x11,0x08,0x13,0x11,0x11,0x11,0x07,0x08,0x07,0x11,0x11,0x11,0x00,0x08,0x00,0x00,
615 0x00,0x00,0x08,0x11,0x11,0x11,0x1D,0x00,0x18,0x13,0x11,0x11,0x11,0x00,0x13,0x11,
616 0x11,0x11,0x08,0x04,0x11,0x11,0x11,0x11,0x04,0x00,0x08,0x10,0x11,0x11,0x11,0x16,
617 0x1C,0x10,0x11,0x11,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x0F,
618 0x0F,0x0F,0x0F,0x07,0x19,0x04,0x13,0x11,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x1A,0x00,
619 0x00,0x20,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x1F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,
620 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
621 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0xAD,0xBA,0xBA,
622 0xBA,0xBC,0xAE,0x9F,0xAE,0xBD,0xFF,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBC,
623 0xAB,0xAC,0xAD,0xAE,0xAE,0xAE,0xAE,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
624 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
625 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
626 0x00,0x99,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
627 0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,
628 0x47,0x47,0x4D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
629 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,
630 0x00,0x00,0x00,0x00,0x16,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x0F,0x0F,0x0F,0x00,0x19,
631 0x0F,0x0F,0x0F,0x11,0x23,0x23,0x0F,0x0F,0x0F,0x0F,0x1A,0x04,0x16,0x0F,0x0F,0x0F,
632 0x32,0x00,0x0F,0x0F,0x0F,0x16,0x00,0x00,0x00,0x00,0x1F,0x0F,0x0F,0x0F,0x00,0x00,
633 0x00,0x18,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x18,0x0F,0x07,0x07,0x0F,0x0F,0x0F,0x0F,
634 0x18,0x08,0x00,0x07,0x07,0x0F,0x07,0x00,0x00,0x17,0x07,0x07,0x07,0x07,0x07,0x08,
635 0x00,0x00,0x19,0x1A,0x07,0x13,0x19,0x00,0x07,0x00,0x07,0x07,0x07,0x00,0x08,0x08,
636 0x07,0x08,0x00,0x08,0x08,0x07,0x07,0x0F,0x08,0x00,0x08,0x18,0x07,0x07,0x0F,0x08,
637 0x00,0x18,0x07,0x07,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
638 0x00,0x00,0x1E,0x07,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
639 0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,
640 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
641 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0xBC,0xBA,0xB9,
642 0xBB,0xBE,0xAF,0x9F,0xAE,0xAE,0xAE,0xAE,0xAE,0xAE,0xAD,0xBC,0xBA,0xBA,0xBC,0xAB,
643 0xAD,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
644 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
645 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
646 0x00,0x99,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
647 0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,
648 0x47,0x47,0x4D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
649 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,
650 0x00,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x07,
651 0x00,0x00,0x00,0x17,0x21,0x33,0x00,0x00,0x00,0x00,0x16,0x1F,0x00,0x00,0x00,0x00,
652 0x07,0x00,0x00,0x00,0x1D,0x14,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,
653 0x00,0x07,0x00,0x00,0x00,0x08,0x00,0x00,0x2A,0x11,0x00,0x0F,0x1F,0x00,0x00,0x00,
654 0x08,0x00,0x00,0x00,0x00,0x08,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x13,
655 0x00,0x00,0x17,0x00,0x00,0x00,0x14,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
656 0x19,0x00,0x00,0x17,0x00,0x00,0x00,0x1D,0x07,0x00,0x1D,0x00,0x00,0x00,0x08,0x1C,
657 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x07,0x00,0x00,0x00,
658 0x00,0x00,0x00,0x1E,0x1A,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,
659 0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,
660 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
661 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0xAC,0xBC,0xBB,0xAA,
662 0xAB,0xAE,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0xAB,0xBC,0xAA,0xBC,0xAC,0xAE,
663 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
664 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
665 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
666 0x00,0x99,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
667 0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,
668 0x47,0x47,0x4D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
669 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,
670 0x00,0x00,0x00,0x00,0x19,0x2D,0x2D,0x2D,0x2F,0x00,0x2D,0x2D,0x2D,0x2D,0x00,0x2D,
671 0x2D,0x2D,0x2F,0x00,0x26,0x32,0x2D,0x2D,0x2D,0x00,0x12,0x1E,0x2D,0x2D,0x2D,0x00,
672 0x13,0x00,0x2D,0x2B,0x00,0x12,0x00,0x00,0x00,0x00,0x19,0x2B,0x2B,0x2B,0x00,0x00,
673 0x00,0x18,0x2B,0x2B,0x2B,0x00,0x00,0x2A,0x0F,0x00,0x00,0x12,0x2B,0x2B,0x2B,0x00,
674 0x08,0x00,0x2B,0x2B,0x2B,0x00,0x07,0x00,0x00,0x00,0x2B,0x2B,0x2B,0x2B,0x2B,0x1A,
675 0x17,0x00,0x18,0x2B,0x2B,0x2B,0x07,0x00,0x13,0x2B,0x2B,0x2B,0x2B,0x00,0x2A,0x07,
676 0x00,0x00,0x00,0x12,0x2B,0x2B,0x2B,0x00,0x0F,0x00,0x1C,0x2B,0x2B,0x2B,0x08,0x00,
677 0x00,0x2B,0x2B,0x2B,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x19,0x07,0x08,0x1D,0x12,
678 0x2A,0x2A,0x2A,0x2A,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
679 0x00,0x2C,0x2A,0x2A,0x2A,0x2A,0x00,0x00,0x00,0x1C,0x2A,0x2A,0x2A,0x2A,0x00,0x00,
680 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
681 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0xAA,0xAA,0xAA,0xAA,
682 0xAC,0xAF,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0xAB,0xAA,0xAA,0xAA,0xAA,0xAE,0x9F,
683 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
684 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
685 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
686 0x00,0x99,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
687 0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x4F,0x47,0x47,0x47,0x47,
688 0x47,0x47,0x4D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
689 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,
690 0x00,0x00,0x00,0x00,0x1A,0x28,0x27,0x27,0x27,0x2E,0x25,0x27,0x27,0x25,0x2E,0x27,
691 0x27,0x27,0x27,0x0F,0x00,0x07,0x25,0x23,0x24,0x23,0x0F,0x08,0x04,0x25,0x28,0x26,
692 0x11,0x00,0x24,0x28,0x28,0x10,0x00,0x00,0x00,0x00,0x17,0x28,0x28,0x28,0x1E,0x00,
693 0x00,0x1C,0x28,0x28,0x28,0x28,0x28,0x0F,0x00,0x00,0x00,0x17,0x28,0x28,0x28,0x28,
694 0x08,0x00,0x28,0x28,0x28,0x28,0x17,0x00,0x00,0x00,0x00,0x19,0x28,0x28,0x28,0x28,
695 0x07,0x00,0x1A,0x28,0x28,0x28,0x1A,0x00,0x16,0x28,0x28,0x28,0x28,0x28,0x19,0x00,
696 0x00,0x00,0x00,0x11,0x28,0x28,0x28,0x28,0x07,0x00,0x19,0x28,0x28,0x28,0x1C,0x00,
697 0x00,0x28,0x28,0x28,0x08,0x00,0x00,0x00,0x00,0x00,0x07,0x26,0x17,0x00,0x00,0x0F,
698 0x26,0x26,0x26,0x26,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
699 0x00,0x2A,0x26,0x26,0x26,0x26,0x00,0x00,0x07,0x26,0x26,0x26,0x26,0x26,0x00,0x00,
700 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
701 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0xAC,0xA9,0xA9,0xA9,0xAA,
702 0xAE,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0xAB,0xA9,0xA9,0xA9,0xA9,0xAC,0x9F,0x9F,
703 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
704 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
705 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
706 0x00,0x9A,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
707 0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x4D,0x47,0x47,0x47,0x47,
708 0x47,0x47,0x4E,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
709 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,
710 0x00,0x00,0x00,0x00,0x08,0x27,0x27,0x27,0x27,0x27,0x27,0x2B,0x27,0x27,0x27,0x27,
711 0x27,0x27,0x18,0x08,0x00,0x16,0x27,0x27,0x27,0x27,0x0F,0x18,0x04,0x27,0x04,0x04,
712 0x0F,0x00,0x04,0x25,0x25,0x07,0x0F,0x07,0x1E,0x00,0x07,0x25,0x25,0x25,0x1C,0x00,
713 0x00,0x1E,0x25,0x25,0x25,0x25,0x0F,0x00,0x00,0x00,0x1E,0x1A,0x25,0x25,0x25,0x25,
714 0x08,0x00,0x25,0x25,0x25,0x25,0x1A,0x00,0x00,0x07,0x0F,0x17,0x25,0x25,0x25,0x25,
715 0x07,0x00,0x1C,0x25,0x25,0x25,0x17,0x00,0x18,0x25,0x25,0x25,0x25,0x25,0x18,0x00,
716 0x00,0x00,0x00,0x07,0x25,0x25,0x25,0x25,0x07,0x00,0x07,0x25,0x25,0x25,0x17,0x00,
717 0x00,0x25,0x25,0x25,0x18,0x00,0x00,0x00,0x00,0x00,0x07,0x22,0x22,0x17,0x00,0x11,
718 0x22,0x22,0x22,0x22,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
719 0x08,0x07,0x22,0x22,0x22,0x22,0x00,0x12,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00,
720 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
721 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x87,0xA8,0xA8,0xA8,0xAB,
722 0xAE,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0xAB,0xA8,0xA8,0xA8,0xA8,0xA8,0xAE,0x9F,0x9F,
723 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
724 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
725 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
726 0x00,0x9A,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
727 0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x49,0x47,0x47,0x47,0x47,
728 0x47,0x49,0x4E,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
729 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,
730 0x00,0x00,0x00,0x00,0x08,0x24,0x24,0x24,0x24,0x24,0x24,0x00,0x24,0x24,0x24,0x24,
731 0x24,0x24,0x17,0x00,0x00,0x18,0x24,0x24,0x24,0x24,0x12,0x36,0x24,0x24,0x24,0x24,
732 0x07,0x1E,0x24,0x22,0x22,0x22,0x22,0x22,0x33,0x00,0x0F,0x22,0x22,0x22,0x1A,0x00,
733 0x00,0x00,0x22,0x22,0x22,0x22,0x07,0x0F,0x18,0x00,0x1E,0x08,0x23,0x23,0x23,0x23,
734 0x07,0x08,0x23,0x23,0x23,0x23,0x08,0x00,0x07,0x23,0x23,0x08,0x23,0x23,0x23,0x23,
735 0x13,0x00,0x1C,0x23,0x23,0x23,0x12,0x08,0x1A,0x22,0x22,0x22,0x22,0x23,0x0F,0x13,
736 0x18,0x22,0x08,0x18,0x23,0x23,0x23,0x23,0x07,0x00,0x19,0x23,0x23,0x23,0x11,0x00,
737 0x00,0x23,0x23,0x23,0x12,0x07,0x00,0x00,0x00,0x00,0x17,0x35,0x35,0x35,0x08,0x13,
738 0x35,0x35,0x35,0x35,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
739 0x35,0x35,0x35,0x35,0x35,0x35,0x19,0x35,0x35,0x35,0x35,0x35,0x35,0x1C,0x00,0x00,
740 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
741 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x86,0x8C,0x8C,0x8C,0xAC,
742 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0xAB,0x8C,0x8C,0x8C,0x8C,0x8C,0xAB,0x9F,0x9F,0x9F,
743 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
744 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
745 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
746 0x00,0x9A,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
747 0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x49,0x47,0x47,0x47,0x47,0x47,
748 0x47,0x4C,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
749 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,
750 0x00,0x00,0x00,0x00,0x08,0x36,0x36,0x36,0x36,0x36,0x26,0x00,0x36,0x36,0x36,0x36,
751 0x36,0x16,0x00,0x00,0x00,0x1A,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x18,
752 0x00,0x1D,0x36,0x35,0x35,0x35,0x35,0x35,0x33,0x00,0x16,0x35,0x35,0x35,0x18,0x00,
753 0x00,0x1D,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x1E,0x08,0x35,0x35,0x35,0x35,
754 0x35,0x08,0x35,0x35,0x35,0x35,0x35,0x00,0x25,0x35,0x35,0x35,0x35,0x35,0x35,0x1A,
755 0x07,0x1D,0x1C,0x35,0x35,0x35,0x35,0x1A,0x08,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
756 0x35,0x08,0x1E,0x08,0x35,0x35,0x35,0x35,0x35,0x08,0x00,0x35,0x35,0x35,0x35,0x08,
757 0x00,0x35,0x35,0x35,0x35,0x08,0x00,0x00,0x00,0x00,0x18,0x34,0x34,0x34,0x0C,0x34,
758 0x34,0x34,0x34,0x34,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
759 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x0C,0x1C,0x00,0x00,0x00,
760 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9A,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
761 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x85,0x8B,0x8B,0x8B,0xAC,
762 0x9F,0x9F,0x9F,0x9F,0x9F,0xAA,0x85,0x8B,0x8B,0x8B,0x8B,0x85,0xAE,0x9F,0x9F,0x9F,
763 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
764 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
765 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
766 0x00,0x9A,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
767 0x47,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x4D,0x49,0x47,0x47,0x47,0x47,0x47,0x47,
768 0x49,0x4E,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
769 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,
770 0x00,0x00,0x00,0x1C,0x34,0x34,0x34,0x34,0x34,0x34,0x1D,0x00,0x00,0x34,0x34,0x34,
771 0x18,0x00,0x00,0x00,0x00,0x1D,0x1D,0x34,0x34,0x34,0x34,0x34,0x34,0x0C,0x07,0x00,
772 0x00,0x1C,0x0C,0x33,0x33,0x33,0x33,0x33,0x07,0x00,0x18,0x33,0x33,0x33,0x16,0x00,
773 0x00,0x08,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x08,0x1E,0x00,0x08,0x33,0x33,0x33,
774 0x19,0x00,0x19,0x33,0x33,0x33,0x18,0x00,0x08,0x1E,0x33,0x33,0x07,0x08,0x1E,0x00,
775 0x00,0x1D,0x1A,0x33,0x33,0x33,0x07,0x00,0x1C,0x1C,0x33,0x33,0x33,0x33,0x33,0x33,
776 0x33,0x07,0x00,0x00,0x20,0x33,0x33,0x33,0x18,0x08,0x00,0x33,0x33,0x33,0x08,0x08,
777 0x00,0x33,0x33,0x33,0x08,0x00,0x00,0x00,0x00,0x00,0x16,0x32,0x32,0x32,0x32,0x32,
778 0x32,0x32,0x32,0x32,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,
779 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x1C,0x00,0x00,0x00,0x00,
780 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9A,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
781 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x84,0x83,0x83,0x83,0xAB,
782 0xAE,0xAF,0xAF,0xAE,0xAA,0x85,0x82,0x83,0x82,0x83,0x83,0x87,0x9F,0x9F,0x9F,0x9F,
783 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
784 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
785 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
786 0x00,0x9A,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
787 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x49,
788 0x4E,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
789 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,
790 0x00,0x00,0x00,0x19,0x08,0x1C,0x1D,0x1E,0x1F,0x1C,0x00,0x00,0x1F,0x1D,0x1C,0x08,
791 0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x08,0x1D,0x1E,0x1F,0x00,0x1E,0x07,0x00,0x00,
792 0x00,0x1D,0x18,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x1A,0x32,0x32,0x32,0x18,0x00,
793 0x00,0x00,0x1C,0x18,0x07,0x08,0x1C,0x1E,0x1E,0x1E,0x00,0x00,0x1D,0x1E,0x17,0x07,
794 0x00,0x00,0x1D,0x1E,0x17,0x07,0x00,0x00,0x00,0x00,0x1F,0x18,0x00,0x00,0x00,0x00,
795 0x00,0x00,0x00,0x1D,0x18,0x18,0x00,0x00,0x00,0x1C,0x08,0x18,0x18,0x18,0x18,0x18,
796 0x18,0x08,0x00,0x00,0x1D,0x18,0x18,0x18,0x00,0x00,0x00,0x1D,0x18,0x08,0x00,0x00,
797 0x00,0x19,0x18,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x30,0x30,0x30,0x30,
798 0x07,0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,
799 0x07,0x18,0x1C,0x1E,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
800 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9A,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
801 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x83,0x83,0x83,0x83,0x86,
802 0xAA,0xAC,0xAB,0x87,0x85,0x83,0x82,0x83,0x83,0x83,0x84,0xAE,0x9F,0x9F,0x9F,0x9F,
803 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
804 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
805 0x2B,0x2A,0x2C,0x2C,0x2B,0x2A,0x2A,0x2C,0x2B,0x2C,0x2A,0x2C,0x2B,0x2B,0x2B,0x2B,
806 0x2B,0x9A,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
807 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x49,0x4D,
808 0x9F,0x9F,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x9F,0x2F,0x2D,
809 0x2C,0x2B,0x2B,0x2C,0x2C,0x2C,0x2D,0x2D,0x2C,0x1D,0x00,0x00,0x00,0x00,0x00,0x00,
810 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
811 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
812 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x19,0x08,0x19,0x31,0x31,0x31,0x1A,0x00,
813 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
814 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
815 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
816 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
817 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x10,0x10,0x12,
818 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,
819 0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
820 0x00,0x00,0x00,0x00,0x2D,0x2B,0x29,0x29,0x28,0x9A,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
821 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x85,0x82,0x82,0x82,0x84,
822 0x85,0x85,0x84,0x84,0x82,0x82,0x84,0x86,0x83,0x83,0x87,0x9F,0x9F,0x9F,0x9F,0x9F,
823 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
824 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2B,0x2C,0x2B,0x28,
825 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
826 0x00,0x9A,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
827 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x49,0x4D,0x4E,0x9F,
828 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,
829 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x00,0x00,0x00,0x00,0x00,
830 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
831 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
832 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x08,0x00,
833 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
834 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
835 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
836 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
837 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x12,0x00,
838 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
839 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x1D,0x1D,0x00,0x1D,0x1D,
840 0x00,0x1D,0x1D,0x00,0x00,0x00,0x00,0x00,0x00,0x9A,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
841 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0xAC,0xF6,0x83,0xF6,0x83,
842 0xF6,0x83,0xF6,0xF6,0x84,0x86,0xAC,0x85,0xF6,0x84,0xAD,0x9F,0x9F,0x9F,0x9F,0x9F,
843 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
844 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x00,0x00,0x00,0x00,
845 0x24,0x24,0x25,0x22,0x24,0x25,0x21,0x24,0x21,0x23,0x28,0x24,0x21,0x25,0x25,0x22,
846 0x26,0x9A,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x47,0x47,0x9F,0x9F,0x47,0x47,0x47,0x47,
847 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x49,0x4A,0x4D,0x4E,0x9F,0x9F,0x9F,
848 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2B,0x29,
849 0x28,0x26,0x04,0x04,0x25,0x25,0x23,0x28,0x23,0x1D,0x00,0x00,0x00,0x00,0x00,0x00,
850 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
851 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
852 0x00,0x00,0x00,0x00,0x00,0x08,0x30,0x30,0x30,0x30,0x30,0x30,0x14,0x22,0x28,0x00,
853 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
854 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
855 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
856 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
857 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
858 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
859 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x00,0x1D,0x00,
860 0x1D,0x00,0x1D,0x00,0x2B,0x29,0x28,0x28,0x25,0x9A,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
861 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x86,0xF7,0xF7,0xF7,
862 0xF7,0xF7,0xF7,0xF7,0x87,0x9F,0xAC,0xF7,0xF7,0x86,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
863 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
864 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2A,0x28,0x20,0x29,
865 0x21,0x24,0x26,0x21,0x28,0x04,0x26,0x24,0x22,0x04,0x22,0x25,0x24,0x23,0x24,0x24,
866 0x24,0x9B,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
867 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
868 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2B,0x29,
869 0x25,0x23,0x24,0x24,0x25,0x25,0x23,0x28,0x25,0x1D,0x00,0x00,0x00,0x00,0x00,0x00,
870 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
871 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
872 0x00,0x00,0x00,0x00,0x1C,0x25,0x25,0x25,0x25,0x32,0x30,0x33,0x00,0x00,0x00,0x00,
873 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
874 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
875 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
876 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
877 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
878 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
879 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x00,0x1D,0x00,
880 0x00,0x00,0x1D,0x00,0x2A,0x2A,0x25,0x28,0x26,0x9A,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
881 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x87,0x7C,0x7C,
882 0x7C,0x7C,0x7C,0x87,0x9F,0x9F,0x87,0x7C,0x7C,0xAC,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
883 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
884 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2A,0x29,0x24,0x29,
885 0x28,0x23,0x24,0x22,0x23,0x26,0x21,0x24,0x22,0x22,0x25,0x24,0x23,0x22,0x25,0x25,
886 0x24,0x9B,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
887 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
888 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2A,0x28,
889 0x24,0x28,0x25,0x22,0x21,0x25,0x21,0x22,0x26,0x1D,0x00,0x00,0x00,0x00,0x00,0x00,
890 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
891 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
892 0x00,0x00,0x00,0x00,0x1E,0x1E,0x00,0x00,0x00,0x2A,0x1A,0x00,0x00,0x00,0x00,0x00,
893 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
894 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
895 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
896 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
897 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
898 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
899 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
900 0x00,0x00,0x00,0x00,0x2C,0x29,0x28,0x26,0x25,0x9A,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
901 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0xAC,0x87,
902 0x87,0x87,0xAC,0x9F,0x9F,0xAC,0xFC,0xFC,0x87,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
903 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
904 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2B,0x27,0x04,0x29,
905 0x24,0x23,0x24,0x23,0x22,0x25,0x23,0x04,0x24,0x25,0x24,0x25,0x23,0x04,0x25,0x04,
906 0x24,0x9B,0x9F,0x9F,0x4C,0x47,0x47,0x9F,0x9F,0x4C,0x47,0x4C,0x9F,0x9F,0x47,0x47,
907 0x9F,0x9F,0x47,0x47,0x47,0x9F,0x9F,0x47,0x9F,0x47,0x9F,0x9F,0x9F,0x47,0x47,0x47,
908 0x9F,0x9F,0x9F,0x47,0x47,0x4C,0x9F,0x9F,0x9F,0x47,0x47,0x9F,0x9F,0x9F,0x2B,0x2A,
909 0x04,0x22,0x23,0x22,0x26,0x22,0x26,0x25,0x28,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,
910 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
911 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
912 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
913 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
914 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
915 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
916 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
917 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
918 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
919 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
920 0x00,0x00,0x00,0x00,0x2B,0x29,0x04,0x24,0x04,0x9A,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
921 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
922 0x9F,0x9F,0x9F,0x9F,0x9F,0x87,0x7D,0x7D,0xAC,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
923 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
924 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2A,0x2A,0x24,0x29,
925 0x28,0x24,0x23,0x25,0x22,0x22,0x21,0x22,0x24,0x22,0x23,0x23,0x23,0x24,0x22,0x25,
926 0x28,0x9B,0x9F,0x9F,0x47,0x4B,0x9F,0x9F,0x9F,0x47,0x9F,0x47,0x9F,0x9F,0x47,0x9F,
927 0x9F,0x9F,0x9F,0x47,0x9F,0x9F,0x9F,0x47,0x9F,0x47,0x9F,0x9F,0x9F,0x47,0x9F,0x47,
928 0x9F,0x9F,0x9F,0x47,0x9F,0x47,0x9F,0x9F,0x9F,0x47,0x9F,0x9F,0x9F,0x9F,0x2C,0x2A,
929 0x23,0x24,0x25,0x24,0x25,0x23,0x26,0x25,0x04,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,
930 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
931 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,
932 0x1D,0x1D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
933 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
934 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x1D,0x1D,0x1D,0x00,
935 0x1D,0x1D,0x1D,0x00,0x1D,0x1D,0x1D,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x00,0x00,
936 0x00,0x00,0x00,0x1D,0x1D,0x1D,0x00,0x1D,0x1D,0x1D,0x00,0x1D,0x1D,0x1D,0x1D,0x1D,
937 0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x1D,0x1D,0x00,0x1D,0x1D,0x1D,0x00,0x1D,0x1D,
938 0x1D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
939 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
940 0x00,0x00,0x00,0x00,0x2A,0x28,0x26,0x04,0x26,0x9A,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
941 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
942 0x9F,0x9F,0x9F,0x9F,0xAC,0x6B,0x6B,0x87,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
943 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
944 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2B,0x2A,0x29,0x29,
945 0x26,0x22,0x22,0x04,0x24,0x25,0x21,0x23,0x22,0x24,0x24,0x04,0x26,0x25,0x25,0x23,
946 0x26,0x9B,0x9F,0x9F,0x9F,0x47,0x9F,0x9F,0x9F,0x47,0x9F,0x47,0x9F,0x9F,0x47,0x47,
947 0x9F,0x9F,0x9F,0x47,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x9F,0x9F,0x9F,0x47,0x47,0x47,
948 0x9F,0x9F,0x9F,0x47,0x47,0x9F,0x9F,0x9F,0x9F,0x47,0x47,0x9F,0x9F,0x9F,0x2A,0x2A,
949 0x22,0x22,0x24,0x25,0x22,0x20,0x22,0x22,0x25,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,
950 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
951 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,
952 0x00,0x00,0x1D,0x00,0x00,0x00,0x1D,0x1D,0x00,0x00,0x1D,0x1D,0x00,0x00,0x1D,0x1D,
953 0x00,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x1D,0x00,0x00,0x1D,0x00,0x00,0x1D,0x1D,0x00,
954 0x1D,0x00,0x1D,0x00,0x1D,0x1D,0x1D,0x00,0x00,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,
955 0x1D,0x00,0x1D,0x00,0x00,0x1F,0x1D,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x1D,0x1D,
956 0x00,0x00,0x00,0x1D,0x00,0x00,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x00,0x00,0x1D,
957 0x00,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,
958 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
959 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
960 0x00,0x00,0x00,0x00,0x2A,0x28,0x26,0x25,0x25,0x9A,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
961 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
962 0x9F,0x9F,0x9F,0x9F,0x6B,0x6B,0x6B,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
963 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
964 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2C,0x2A,0x04,0x29,
965 0x24,0x23,0x23,0x25,0x26,0x24,0x23,0x24,0x23,0x24,0x04,0x25,0x25,0x24,0x23,0x04,
966 0x24,0x9B,0x9F,0x9F,0x9F,0x4D,0x47,0x9F,0x9F,0x47,0x9F,0x47,0x9F,0x9F,0x47,0x9F,
967 0x9F,0x9F,0x9F,0x47,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x9F,0x9F,0x9F,0x47,0x9F,0x47,
968 0x9F,0x9F,0x9F,0x47,0x9F,0x47,0x9F,0x9F,0x9F,0x47,0x9F,0x9F,0x9F,0x9F,0x2A,0x2A,
969 0x22,0x20,0x25,0x22,0x26,0x23,0x04,0x23,0x28,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,
970 0x00,0x1F,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,
971 0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1F,0x1D,0x00,0x00,
972 0x1D,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x00,0x00,0x1D,0x00,0x00,0x1D,0x00,0x1D,0x00,
973 0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x00,0x00,
974 0x1D,0x00,0x1D,0x00,0x00,0x1D,0x00,0x00,0x00,0x00,0x1D,0x00,0x1D,0x1D,0x1D,0x00,
975 0x1D,0x1D,0x1D,0x00,0x1F,0x1D,0x1F,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x1D,0x00,
976 0x1D,0x00,0x00,0x1D,0x1D,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x1D,0x1D,0x00,0x1D,
977 0x00,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x1D,
978 0x00,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,
979 0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1F,0x00,0x00,0x00,0x00,
980 0x00,0x00,0x00,0x00,0x2A,0x27,0x04,0x23,0x24,0x9A,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
981 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
982 0x9F,0x9F,0x9F,0x7F,0x6B,0x6B,0x7E,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
983 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
984 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2C,0x2A,0x26,0x29,
985 0x28,0x23,0x24,0x24,0x23,0x22,0x22,0x22,0x23,0x22,0x04,0x28,0x24,0x26,0x28,0x26,
986 0x23,0x9C,0x9F,0x9F,0x9F,0x4B,0x47,0x9F,0x9F,0x47,0x9F,0x47,0x9F,0x9F,0x47,0x9F,
987 0x9F,0x9F,0x9F,0x47,0x9F,0x9F,0x9F,0x47,0x47,0x47,0x9F,0x9F,0x9F,0x47,0x9F,0x47,
988 0x9F,0x9F,0x9F,0x47,0x9F,0x47,0x9F,0x9F,0x9F,0x47,0x9F,0x9F,0x9F,0x9F,0x2C,0x28,
989 0x22,0x22,0x25,0x23,0x23,0x22,0x23,0x25,0x22,0x1E,0x00,0x00,0x18,0x08,0x1D,0x00,
990 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
991 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x1D,
992 0x1F,0x00,0x00,0x1D,0x00,0x1D,0x00,0x00,0x00,0x1D,0x00,0x00,0x1D,0x00,0x1D,0x1D,
993 0x00,0x00,0x00,0x1D,0x00,0x00,0x1D,0x1D,0x00,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,
994 0x1D,0x1D,0x1D,0x00,0x00,0x1D,0x00,0x00,0x00,0x00,0x1D,0x00,0x00,0x00,0x1D,0x00,
995 0x00,0x00,0x1D,0x00,0x1D,0x1D,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x1D,0x00,
996 0x1D,0x00,0x00,0x00,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x00,0x00,0x1D,
997 0x00,0x00,0x1D,0x1D,0x1D,0x00,0x1D,0x1D,0x1D,0x00,0x1D,0x1D,0x00,0x00,0x1D,0x00,
998 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
999 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,
1000 0x08,0x1D,0x00,0x00,0x2C,0x29,0x20,0x24,0x24,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
1001 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
1002 0x9F,0x9F,0x9F,0x6C,0x6C,0x6C,0x7F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
1003 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
1004 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2C,0x2A,0x28,0x29,
1005 0x22,0x28,0x26,0x28,0x26,0x28,0x28,0x25,0x22,0x25,0x04,0x28,0x26,0x25,0x28,0x24,
1006 0x26,0x9C,0x9F,0x9F,0x47,0x47,0x4C,0x9F,0x9F,0x4C,0x47,0x4C,0x9F,0x9F,0x47,0x9F,
1007 0x9F,0x9F,0x9F,0x47,0x9F,0x9F,0x9F,0x47,0x9F,0x47,0x9F,0x9F,0x9F,0x47,0x9F,0x47,
1008 0x9F,0x9F,0x9F,0x47,0x9F,0x47,0x9F,0x9F,0x9F,0x47,0x47,0x9F,0x9F,0x9F,0x2B,0x2A,
1009 0x20,0x22,0x22,0x22,0x26,0x22,0x24,0x26,0x24,0x1E,0x00,0x00,0x08,0x1D,0x1F,0x00,
1010 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1011 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x00,
1012 0x1D,0x1D,0x00,0x1D,0x00,0x00,0x1D,0x1D,0x00,0x00,0x1D,0x1D,0x00,0x00,0x1D,0x00,
1013 0x00,0x00,0x00,0x1D,0x00,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x00,0x1D,0x1D,0x00,
1014 0x1D,0x00,0x1D,0x00,0x00,0x1D,0x00,0x00,0x00,0x00,0x1D,0x00,0x00,0x00,0x1D,0x00,
1015 0x00,0x00,0x1D,0x00,0x1D,0x1D,0x1D,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x1D,0x1D,
1016 0x00,0x00,0x00,0x1D,0x1D,0x1D,0x00,0x1D,0x1D,0x1D,0x00,0x1D,0x00,0x00,0x00,0x1D,
1017 0x00,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x1D,
1018 0x1D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1019 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,
1020 0x1D,0x1F,0x00,0x00,0x2C,0x2A,0x26,0x25,0x22,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
1021 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
1022 0x9F,0x9F,0x9F,0x6D,0x6D,0x6D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
1023 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
1024 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2B,0x28,0x28,0x29,
1025 0x28,0x24,0x25,0x28,0x28,0x24,0x28,0x28,0x28,0x26,0x23,0x04,0x25,0x26,0x25,0x04,
1026 0x28,0x9C,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
1027 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
1028 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2B,0x27,
1029 0x22,0x24,0x20,0x20,0x26,0x20,0x24,0x22,0x20,0x1E,0x00,0x00,0x1D,0x1F,0x1F,0x00,
1030 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1031 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,
1032 0x00,0x00,0x1D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1033 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1034 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1035 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1036 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1037 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1038 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1039 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,
1040 0x1F,0x1F,0x00,0x00,0x2B,0x2A,0x04,0x04,0x25,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
1041 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
1042 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
1043 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
1044 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2C,0x2B,0x24,0x29,
1045 0x28,0x25,0x26,0x25,0x25,0x24,0x25,0x24,0x25,0x25,0x23,0x26,0x04,0x25,0x25,0x24,
1046 0x25,0x9C,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
1047 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
1048 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2B,0x2A,
1049 0x25,0x28,0x22,0x25,0x24,0x22,0x20,0x24,0x22,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,
1050 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1051 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,
1052 0x1D,0x1D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1053 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1054 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1055 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1056 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1057 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1058 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1059 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1060 0x00,0x00,0x00,0x00,0x2C,0x2A,0x26,0x28,0x28,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
1061 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
1062 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
1063 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
1064 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2C,0x2A,0x25,0x29,
1065 0x22,0x25,0x25,0x25,0x23,0x22,0x25,0x25,0x22,0x28,0x25,0x25,0x28,0x25,0x23,0x28,
1066 0x28,0x9C,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
1067 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
1068 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2B,0x29,
1069 0x26,0x28,0x25,0x24,0x23,0x26,0x22,0x25,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1070 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1071 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1072 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1073 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1074 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1075 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1076 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1077 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1078 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1079 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1080 0x00,0x00,0x00,0x00,0x2A,0x2B,0x23,0x24,0x26,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
1081 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
1082 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
1083 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
1084 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x2B,0x29,0x28,0x29,
1085 0x23,0x22,0x22,0x25,0x25,0x25,0x22,0x25,0x23,0x26,0x28,0x22,0x25,0x23,0x28,0x28,
1086 0x26,0x22,0x2D,0x2A,0x2A,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2A,0x2B,0x2C,0x2A,0x2A,
1087 0x2C,0x2B,0x2A,0x2C,0x2B,0x2A,0x2A,0x2C,0x2A,0x2B,0x2B,0x2A,0x2A,0x2A,0x2B,0x2B,
1088 0x2A,0x2A,0x2B,0x2A,0x2B,0x2B,0x2A,0x2B,0x2C,0x2B,0x2A,0x2A,0x2C,0x2A,0x2C,0x29,
1089 0x26,0x23,0x25,0x25,0x23,0x25,0x22,0x25,0x23,0x25,0x2B,0x2A,0x2B,0x2B,0x2A,0x2A,
1090 0x2A,0x2A,0x2A,0x2C,0x2A,0x2A,0x2A,0x2A,0x2B,0x2A,0x29,0x29,0x2A,0x2A,0x2A,0x2A,
1091 0x2C,0x2A,0x2B,0x2A,0x2B,0x2A,0x2A,0x2B,0x2C,0x2C,0x2A,0x2B,0x2C,0x2B,0x2B,0x2B,
1092 0x2C,0x2C,0x2C,0x2D,0x2D,0x2D,0x2C,0x2D,0x2C,0x2C,0x2B,0x2B,0x2B,0x2C,0x2B,0x2C,
1093 0x2A,0x2B,0x2A,0x2B,0x2C,0x2A,0x2C,0x2B,0x2C,0x2B,0x2C,0x2C,0x2C,0x2B,0x2C,0x2B,
1094 0x2B,0x2C,0x2B,0x2B,0x29,0x2A,0x2B,0x2C,0x2C,0x2C,0x2C,0x2C,0x2B,0x2A,0x2B,0x2C,
1095 0x2C,0x2D,0x2C,0x2C,0x2C,0x2C,0x2C,0x2D,0x2C,0x2C,0x2C,0x2D,0x2C,0x2C,0x2C,0x2C,
1096 0x2C,0x2D,0x2C,0x2C,0x2D,0x2C,0x2C,0x2B,0x2C,0x2C,0x2C,0x2B,0x2B,0x2B,0x2B,0x2C,
1097 0x2C,0x2A,0x2C,0x2C,0x2D,0x2C,0x2B,0x2C,0x2B,0x2C,0x2C,0x2B,0x2B,0x2B,0x2C,0x2B,
1098 0x2B,0x2C,0x29,0x2C,0x2B,0x2C,0x2B,0x2C,0x2C,0x2C,0x2B,0x2B,0x2C,0x2A,0x2C,0x2B,
1099 0x2B,0x2C,0x2B,0x2A,0x2A,0x2A,0x2B,0x29,0x2A,0x2A,0x2B,0x2A,0x2A,0x2A,0x2B,0x2C,
1100 0x2B,0x2C,0x2C,0x2B,0x2C,0x2A,0x22,0x22,0x04,0x26,0x29,0x2D,0x2C,0x2A,0x2C,0x2B,
1101 0x2B,0x2C,0x2C,0x2C,0x2C,0x2B,0x2C,0x2B,0x2C,0x2B,0x2C,0x2B,0x2B,0x2C,0x2B,0x2A,
1102 0x2B,0x2C,0x2B,0x2B,0x2B,0x2A,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2B,0x2B,0x2C,0x2B,
1103 0x2B,0x2B,0x2C,0x2B,0x2C,0x2A,0x2B,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2B,0x2B,0x2B,
1104 0x2B,0x2C,0x2B,0x2C,0x2C,0x2B,0x2C,0x2C,0x2C,0x2C,0x2B,0x2C,0x2E,0x2A,0x28,0x29,
1105 0x22,0x04,0x28,0x21,0x25,0x23,0x25,0x25,0x25,0x22,0x20,0x25,0x23,0x22,0x22,0x23,
1106 0x24,0x26,0x23,0x28,0x2D,0x28,0x29,0x2A,0x2A,0x29,0x29,0x2A,0x2A,0x2A,0x28,0x2A,
1107 0x29,0x29,0x29,0x29,0x28,0x28,0x29,0x2A,0x29,0x29,0x2A,0x29,0x2A,0x2A,0x2A,0x2A,
1108 0x28,0x29,0x2A,0x28,0x27,0x28,0x28,0x29,0x28,0x29,0x29,0x29,0x29,0x29,0x28,0x2A,
1109 0x25,0x25,0x25,0x22,0x26,0x22,0x22,0x23,0x22,0x25,0x24,0x29,0x2B,0x28,0x27,0x28,
1110 0x29,0x28,0x28,0x29,0x29,0x27,0x2A,0x27,0x26,0x27,0x28,0x27,0x27,0x27,0x04,0x28,
1111 0x2A,0x2A,0x28,0x2A,0x29,0x29,0x29,0x28,0x28,0x28,0x29,0x29,0x27,0x28,0x2A,0x2A,
1112 0x29,0x2A,0x28,0x2A,0x2A,0x2A,0x2A,0x2A,0x28,0x28,0x29,0x2A,0x2A,0x2A,0x2C,0x29,
1113 0x28,0x29,0x28,0x28,0x2A,0x2A,0x2A,0x2A,0x27,0x28,0x29,0x2A,0x2A,0x29,0x2A,0x29,
1114 0x29,0x2A,0x29,0x27,0x26,0x2A,0x29,0x2A,0x29,0x29,0x2A,0x29,0x28,0x2A,0x28,0x27,
1115 0x2A,0x2A,0x2A,0x29,0x2A,0x28,0x2A,0x2A,0x2A,0x2A,0x28,0x29,0x2A,0x29,0x29,0x2A,
1116 0x29,0x29,0x29,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x29,0x29,0x29,0x2A,0x2A,0x29,0x29,
1117 0x29,0x2A,0x29,0x29,0x2C,0x28,0x2A,0x29,0x2A,0x29,0x28,0x29,0x28,0x28,0x2A,0x29,
1118 0x29,0x28,0x27,0x29,0x2A,0x2A,0x29,0x2A,0x29,0x29,0x29,0x28,0x2A,0x29,0x29,0x2A,
1119 0x29,0x29,0x27,0x27,0x26,0x29,0x29,0x28,0x29,0x2A,0x29,0x29,0x29,0x29,0x2A,0x2A,
1120 0x29,0x2A,0x29,0x2A,0x28,0x2B,0x28,0x24,0x25,0x24,0x04,0x28,0x28,0x2D,0x2A,0x29,
1121 0x2A,0x2A,0x29,0x2A,0x2A,0x2A,0x29,0x2A,0x2A,0x2A,0x2A,0x29,0x2A,0x29,0x29,0x29,
1122 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x29,0x29,0x29,0x2A,0x29,0x2A,0x29,0x2A,0x29,0x29,
1123 0x28,0x2A,0x2A,0x29,0x29,0x2A,0x2A,0x2A,0x2A,0x28,0x29,0x2A,0x28,0x2A,0x2A,0x2A,
1124 0x2B,0x2A,0x2A,0x2A,0x2A,0x2B,0x2A,0x2A,0x2A,0x29,0x2A,0x29,0x2A,0x2A,0x28,0x29,
1125 0x24,0x20,0x25,0x25,0x24,0x24,0x20,0x22,0x23,0x25,0x23,0x26,0x25,0x25,0x23,0x20,
1126 0x24,0x21,0x22,0x25,0x24,0x23,0x23,0x25,0x04,0x22,0x28,0x26,0x26,0x26,0x04,0x25,
1127 0x26,0x26,0x28,0x25,0x28,0x28,0x22,0x04,0x22,0x26,0x24,0x25,0x26,0x25,0x26,0x25,
1128 0x04,0x22,0x25,0x22,0x23,0x23,0x04,0x23,0x25,0x22,0x23,0x23,0x28,0x22,0x23,0x24,
1129 0x24,0x24,0x04,0x22,0x25,0x23,0x25,0x22,0x24,0x25,0x25,0x24,0x24,0x22,0x21,0x25,
1130 0x23,0x25,0x23,0x04,0x24,0x28,0x04,0x25,0x22,0x22,0x26,0x24,0x24,0x23,0x25,0x25,
1131 0x24,0x04,0x23,0x25,0x23,0x20,0x23,0x22,0x20,0x24,0x22,0x25,0x25,0x24,0x25,0x26,
1132 0x25,0x26,0x04,0x25,0x25,0x25,0x25,0x28,0x24,0x25,0x26,0x24,0x28,0x28,0x25,0x25,
1133 0x25,0x04,0x25,0x28,0x24,0x04,0x23,0x28,0x24,0x23,0x25,0x25,0x26,0x28,0x28,0x04,
1134 0x26,0x24,0x24,0x23,0x25,0x28,0x25,0x26,0x04,0x28,0x28,0x28,0x04,0x25,0x23,0x26,
1135 0x25,0x25,0x04,0x26,0x26,0x25,0x23,0x28,0x25,0x25,0x23,0x24,0x23,0x26,0x26,0x28,
1136 0x26,0x28,0x28,0x28,0x25,0x04,0x04,0x28,0x28,0x25,0x28,0x04,0x26,0x28,0x28,0x04,
1137 0x28,0x28,0x28,0x04,0x28,0x28,0x04,0x28,0x04,0x26,0x25,0x23,0x24,0x26,0x24,0x26,
1138 0x24,0x22,0x04,0x26,0x04,0x28,0x04,0x04,0x25,0x26,0x24,0x26,0x22,0x24,0x26,0x26,
1139 0x28,0x25,0x24,0x24,0x28,0x04,0x26,0x25,0x25,0x26,0x04,0x28,0x04,0x04,0x28,0x26,
1140 0x28,0x04,0x25,0x26,0x04,0x22,0x24,0x24,0x26,0x28,0x26,0x24,0x24,0x24,0x04,0x04,
1141 0x04,0x26,0x25,0x23,0x25,0x26,0x28,0x04,0x04,0x28,0x26,0x28,0x28,0x28,0x28,0x27,
1142 0x28,0x25,0x29,0x25,0x28,0x28,0x26,0x25,0x26,0x26,0x28,0x24,0x26,0x28,0x04,0x28,
1143 0x04,0x04,0x04,0x04,0x28,0x28,0x28,0x26,0x04,0x25,0x28,0x28,0x25,0x24,0x28,0x29,
1144 0x28,0x25,0x28,0x25,0x28,0x26,0x04,0x27,0x27,0x28,0x27,0x27,0x27,0x28,0x04,0x29,
1145 0x23,0x26,0x26,0x04,0x25,0x04,0x26,0x25,0x25,0x23,0x25,0x26,0x25,0x28,0x23,0x22,
1146 0x20,0x24,0x25,0x25,0x21,0x26,0x23,0x28,0x24,0x28,0x25,0x28,0x28,0x25,0x04,0x04,
1147 0x04,0x24,0x25,0x25,0x24,0x26,0x24,0x28,0x04,0x26,0x25,0x04,0x26,0x25,0x25,0x25,
1148 0x21,0x28,0x24,0x23,0x26,0x24,0x24,0x25,0x25,0x23,0x23,0x26,0x23,0x22,0x25,0x28,
1149 0x25,0x23,0x24,0x25,0x22,0x04,0x23,0x04,0x22,0x23,0x24,0x24,0x23,0x04,0x24,0x26,
1150 0x25,0x23,0x25,0x04,0x22,0x26,0x28,0x23,0x23,0x23,0x25,0x04,0x23,0x22,0x20,0x22,
1151 0x20,0x22,0x22,0x04,0x22,0x24,0x24,0x24,0x23,0x23,0x04,0x24,0x22,0x23,0x20,0x20,
1152 0x22,0x20,0x23,0x23,0x22,0x21,0x28,0x25,0x24,0x25,0x25,0x25,0x22,0x28,0x28,0x25,
1153 0x28,0x28,0x24,0x24,0x25,0x04,0x25,0x25,0x23,0x21,0x22,0x25,0x24,0x25,0x23,0x25,
1154 0x25,0x24,0x22,0x22,0x25,0x04,0x25,0x04,0x04,0x28,0x23,0x25,0x04,0x25,0x28,0x24,
1155 0x25,0x24,0x04,0x22,0x26,0x25,0x25,0x26,0x25,0x24,0x26,0x26,0x26,0x28,0x28,0x24,
1156 0x04,0x27,0x25,0x25,0x29,0x28,0x04,0x29,0x28,0x04,0x28,0x28,0x24,0x28,0x28,0x28,
1157 0x28,0x04,0x28,0x28,0x04,0x28,0x25,0x24,0x24,0x25,0x25,0x25,0x04,0x25,0x22,0x22,
1158 0x23,0x24,0x28,0x24,0x26,0x25,0x28,0x25,0x26,0x24,0x28,0x04,0x24,0x26,0x22,0x25,
1159 0x22,0x22,0x25,0x24,0x25,0x26,0x25,0x28,0x25,0x04,0x25,0x24,0x26,0x26,0x28,0x28,
1160 0x25,0x26,0x25,0x25,0x25,0x26,0x04,0x25,0x25,0x04,0x28,0x28,0x28,0x26,0x26,0x26,
1161 0x28,0x24,0x25,0x25,0x25,0x25,0x26,0x28,0x26,0x26,0x04,0x25,0x04,0x25,0x25,0x28,
1162 0x28,0x2A,0x28,0x28,0x28,0x28,0x28,0x25,0x04,0x26,0x28,0x24,0x26,0x27,0x28,0x28,
1163 0x28,0x28,0x04,0x28,0x28,0x24,0x28,0x26,0x04,0x28,0x25,0x29,0x04,0x26,0x04,0x25,
1164 0x28,0x28,0x28,0x04,0x26,0x24,0x26,0x28,0x04,0x28,0x04,0x28,0x04,0x04,0x25,0x29,
1165 0x24,0x28,0x26,0x28,0x26,0x26,0x25,0x26,0x22,0x28,0x23,0x25,0x25,0x22,0x22,0x20,
1166 0x24,0x04,0x25,0x23,0x25,0x04,0x25,0x24,0x22,0x26,0x23,0x04,0x26,0x25,0x24,0x23,
1167 0x25,0x04,0x26,0x21,0x28,0x24,0x28,0x25,0x25,0x25,0x25,0x25,0x25,0x24,0x25,0x28,
1168 0x24,0x28,0x26,0x25,0x23,0x25,0x22,0x25,0x24,0x22,0x22,0x25,0x28,0x23,0x25,0x24,
1169 0x04,0x25,0x24,0x24,0x28,0x25,0x23,0x22,0x25,0x26,0x22,0x25,0x23,0x22,0x25,0x24,
1170 0x26,0x26,0x24,0x25,0x23,0x23,0x24,0x26,0x25,0x24,0x22,0x24,0x22,0x25,0x21,0x22,
1171 0x20,0x25,0x04,0x22,0x25,0x22,0x25,0x22,0x24,0x04,0x28,0x22,0x22,0x26,0x26,0x24,
1172 0x28,0x24,0x23,0x26,0x24,0x23,0x23,0x25,0x24,0x25,0x04,0x04,0x23,0x22,0x23,0x25,
1173 0x23,0x23,0x28,0x24,0x21,0x22,0x25,0x24,0x24,0x22,0x22,0x23,0x26,0x24,0x20,0x04,
1174 0x24,0x20,0x28,0x25,0x25,0x26,0x26,0x28,0x28,0x26,0x22,0x26,0x04,0x28,0x25,0x26,
1175 0x28,0x04,0x25,0x28,0x25,0x23,0x26,0x26,0x24,0x26,0x04,0x04,0x04,0x28,0x28,0x29,
1176 0x29,0x04,0x25,0x22,0x28,0x26,0x26,0x28,0x24,0x04,0x28,0x25,0x28,0x04,0x25,0x24,
1177 0x25,0x28,0x28,0x29,0x24,0x25,0x24,0x28,0x04,0x26,0x26,0x26,0x22,0x24,0x22,0x24,
1178 0x28,0x25,0x04,0x23,0x25,0x04,0x25,0x04,0x28,0x26,0x26,0x25,0x24,0x25,0x04,0x26,
1179 0x28,0x04,0x24,0x26,0x28,0x04,0x25,0x28,0x28,0x26,0x27,0x22,0x04,0x24,0x28,0x28,
1180 0x26,0x26,0x25,0x28,0x28,0x26,0x26,0x26,0x26,0x24,0x25,0x04,0x28,0x04,0x04,0x26,
1181 0x28,0x27,0x23,0x24,0x26,0x24,0x28,0x26,0x28,0x28,0x28,0x29,0x29,0x26,0x29,0x29,
1182 0x28,0x28,0x26,0x28,0x24,0x28,0x28,0x28,0x26,0x28,0x28,0x28,0x04,0x25,0x25,0x25,
1183 0x28,0x29,0x28,0x28,0x28,0x04,0x29,0x28,0x28,0x28,0x28,0x26,0x28,0x28,0x28,0x27,
1184 0x26,0x04,0x24,0x25,0x04,0x25,0x26,0x28,0x28,0x28,0x28,0x25,0x26,0x28,0x26,0x29,
1185 0x28,0x04,0x25,0x26,0x23,0x22,0x24,0x23,0x04,0x25,0x28,0x28,0x28,0x23,0x21,0x24,
1186 0x25,0x25,0x22,0x24,0x22,0x25,0x22,0x26,0x21,0x26,0x24,0x25,0x25,0x24,0x23,0x23,
1187 0x26,0x24,0x25,0x25,0x25,0x28,0x26,0x25,0x22,0x26,0x22,0x22,0x26,0x25,0x26,0x26,
1188 0x28,0x26,0x24,0x21,0x25,0x26,0x22,0x26,0x23,0x24,0x25,0x23,0x24,0x23,0x21,0x22,
1189 0x23,0x25,0x26,0x25,0x25,0x22,0x26,0x22,0x23,0x23,0x24,0x04,0x28,0x25,0x25,0x28,
1190 0x22,0x23,0x23,0x24,0x26,0x22,0x25,0x22,0x22,0x23,0x24,0x24,0x25,0x25,0x25,0x24,
1191 0x22,0x24,0x25,0x23,0x20,0x25,0x21,0x21,0x23,0x26,0x04,0x25,0x23,0x28,0x22,0x04,
1192 0x25,0x28,0x23,0x04,0x20,0x25,0x22,0x20,0x23,0x26,0x04,0x22,0x25,0x23,0x25,0x24,
1193 0x24,0x24,0x23,0x25,0x22,0x22,0x22,0x25,0x25,0x22,0x22,0x20,0x22,0x20,0x22,0x26,
1194 0x23,0x26,0x22,0x24,0x25,0x25,0x26,0x25,0x28,0x26,0x23,0x23,0x25,0x24,0x04,0x25,
1195 0x23,0x28,0x22,0x26,0x24,0x04,0x28,0x04,0x26,0x24,0x28,0x28,0x25,0x04,0x25,0x28,
1196 0x25,0x04,0x25,0x25,0x28,0x26,0x04,0x28,0x25,0x25,0x28,0x28,0x04,0x28,0x23,0x28,
1197 0x22,0x28,0x28,0x25,0x24,0x28,0x26,0x24,0x26,0x04,0x28,0x23,0x24,0x25,0x25,0x25,
1198 0x24,0x25,0x22,0x25,0x26,0x28,0x25,0x24,0x26,0x25,0x28,0x28,0x04,0x28,0x24,0x25,
1199 0x22,0x22,0x24,0x24,0x24,0x26,0x26,0x28,0x28,0x28,0x28,0x24,0x28,0x28,0x28,0x26,
1200 0x26,0x26,0x24,0x22,0x28,0x26,0x27,0x26,0x28,0x28,0x28,0x28,0x27,0x25,0x26,0x26,
1201 0x28,0x28,0x26,0x28,0x25,0x28,0x04,0x28,0x04,0x28,0x28,0x28,0x28,0x26,0x28,0x25,
1202 0x25,0x28,0x25,0x28,0x25,0x28,0x28,0x29,0x29,0x26,0x28,0x28,0x24,0x26,0x29,0x28,
1203 0x28,0x04,0x28,0x24,0x04,0x26,0x28,0x28,0x28,0x26,0x25,0x27,0x26,0x26,0x26,0x25,
1204 0x26,0x04,0x04,0x28,0x28,0x04,0x24,0x04,0x04,0x23,0x25,0x22,0x24,0x28,0x26,0x29,
1205 0x28,0x28,0x23,0x28,0x24,0x28,0x25,0x28,0x26,0x22,0x22,0x24,0x24,0x25,0x25,0x24,
1206 0x22,0x26,0x25,0x26,0x24,0x24,0x25,0x04,0x26,0x23,0x23,0x21,0x04,0x26,0x23,0x26,
1207 0x25,0x28,0x21,0x04,0x24,0x25,0x26,0x04,0x26,0x23,0x24,0x25,0x25,0x24,0x25,0x25,
1208 0x26,0x25,0x28,0x26,0x28,0x28,0x25,0x25,0x04,0x25,0x24,0x25,0x28,0x25,0x25,0x04,
1209 0x22,0x25,0x22,0x21,0x22,0x22,0x24,0x23,0x22,0x24,0x22,0x21,0x25,0x21,0x22,0x23,
1210 0x23,0x23,0x24,0x22,0x23,0x23,0x28,0x22,0x23,0x25,0x23,0x25,0x24,0x25,0x04,0x25,
1211 0x25,0x22,0x22,0x24,0x21,0x24,0x25,0x24,0x24,0x22,0x28,0x25,0x24,0x25,0x23,0x23,
1212 0x22,0x24,0x24,0x04,0x24,0x22,0x24,0x24,0x24,0x28,0x25,0x22,0x26,0x21,0x26,0x23,
1213 0x24,0x23,0x24,0x22,0x26,0x22,0x25,0x20,0x23,0x25,0x23,0x24,0x26,0x25,0x28,0x25,
1214 0x25,0x25,0x28,0x28,0x26,0x25,0x28,0x25,0x25,0x28,0x04,0x28,0x29,0x28,0x28,0x26,
1215 0x25,0x26,0x26,0x28,0x28,0x25,0x24,0x25,0x28,0x04,0x28,0x04,0x22,0x25,0x26,0x26,
1216 0x28,0x28,0x24,0x26,0x28,0x26,0x28,0x26,0x28,0x28,0x28,0x28,0x25,0x28,0x28,0x28,
1217 0x28,0x25,0x04,0x28,0x25,0x26,0x26,0x26,0x04,0x26,0x25,0x25,0x24,0x24,0x04,0x04,
1218 0x27,0x25,0x28,0x28,0x26,0x28,0x24,0x24,0x25,0x27,0x25,0x04,0x28,0x28,0x26,0x23,
1219 0x24,0x28,0x28,0x28,0x28,0x04,0x04,0x26,0x23,0x28,0x22,0x26,0x28,0x24,0x25,0x25,
1220 0x23,0x25,0x28,0x28,0x25,0x28,0x28,0x26,0x28,0x28,0x27,0x26,0x28,0x26,0x24,0x26,
1221 0x28,0x28,0x28,0x28,0x2A,0x28,0x29,0x29,0x28,0x28,0x28,0x28,0x26,0x28,0x28,0x29,
1222 0x23,0x28,0x26,0x28,0x28,0x04,0x28,0x04,0x28,0x28,0x28,0x28,0x04,0x26,0x04,0x28,
1223 0x28,0x28,0x28,0x28,0x27,0x25,0x26,0x24,0x25,0x28,0x28,0x28,0x26,0x25,0x26,0x24,
1224 0x04,0x26,0x27,0x28,0x28,0x28,0x04,0x28,0x28,0x27,0x27,0x25,0x25,0x27,0x04,0x29,
1225 0x23,0x23,0x23,0x21,0x23,0x24,0x25,0x24,0x23,0x25,0x20,0x20,0x24,0x21,0x25,0x22,
1226 0x25,0x25,0x22,0x24,0x23,0x24,0x26,0x22,0x24,0x23,0x26,0x25,0x24,0x25,0x22,0x23,
1227 0x25,0x04,0x28,0x26,0x25,0x25,0x24,0x25,0x26,0x24,0x25,0x26,0x25,0x22,0x25,0x26,
1228 0x22,0x23,0x24,0x26,0x04,0x25,0x25,0x28,0x23,0x25,0x25,0x25,0x04,0x23,0x22,0x04,
1229 0x24,0x25,0x20,0x24,0x20,0x20,0x20,0x25,0x20,0x20,0x24,0x20,0x22,0x20,0x24,0x20,
1230 0x25,0x20,0x25,0x20,0x24,0x20,0x23,0x25,0x24,0x23,0x24,0x28,0x24,0x25,0x25,0x23,
1231 0x25,0x04,0x26,0x25,0x26,0x22,0x23,0x25,0x24,0x21,0x24,0x25,0x22,0x22,0x04,0x22,
1232 0x25,0x24,0x22,0x22,0x04,0x25,0x26,0x23,0x21,0x22,0x21,0x23,0x21,0x25,0x20,0x25,
1233 0x24,0x26,0x22,0x26,0x26,0x23,0x26,0x24,0x23,0x24,0x23,0x28,0x28,0x23,0x22,0x22,
1234 0x26,0x04,0x28,0x04,0x26,0x04,0x24,0x28,0x28,0x26,0x25,0x28,0x27,0x04,0x28,0x29,
1235 0x04,0x28,0x04,0x28,0x26,0x26,0x25,0x26,0x28,0x28,0x26,0x25,0x28,0x26,0x25,0x28,
1236 0x26,0x04,0x23,0x25,0x28,0x25,0x26,0x28,0x24,0x28,0x26,0x28,0x28,0x28,0x28,0x04,
1237 0x26,0x28,0x24,0x28,0x04,0x26,0x28,0x28,0x04,0x26,0x28,0x25,0x25,0x25,0x26,0x04,
1238 0x24,0x04,0x28,0x28,0x25,0x28,0x04,0x28,0x28,0x28,0x28,0x28,0x26,0x25,0x28,0x22,
1239 0x24,0x24,0x26,0x28,0x28,0x25,0x28,0x25,0x25,0x23,0x24,0x28,0x26,0x26,0x24,0x28,
1240 0x24,0x28,0x25,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x04,0x28,0x23,0x28,0x27,0x28,
1241 0x25,0x28,0x28,0x28,0x28,0x28,0x26,0x28,0x24,0x25,0x04,0x28,0x28,0x28,0x29,0x28,
1242 0x25,0x29,0x25,0x26,0x25,0x28,0x25,0x28,0x29,0x29,0x29,0x28,0x28,0x04,0x28,0x28,
1243 0x28,0x26,0x25,0x23,0x28,0x25,0x28,0x26,0x26,0x26,0x26,0x04,0x29,0x28,0x26,0x28,
1244 0x26,0x29,0x28,0x28,0x04,0x28,0x26,0x28,0x28,0x28,0x04,0x04,0x28,0x28,0x24,0x29,
1245 0x26,0x23,0x22,0x22,0x24,0x25,0x20,0x24,0x22,0x25,0x24,0x04,0x22,0x22,0x20,0x23,
1246 0x24,0x24,0x24,0x04,0x23,0x04,0x25,0x22,0x25,0x23,0x25,0x26,0x24,0x24,0x23,0x24,
1247 0x28,0x26,0x25,0x25,0x26,0x26,0x25,0x23,0x24,0x25,0x28,0x22,0x24,0x25,0x25,0x24,
1248 0x28,0x24,0x28,0x26,0x28,0x26,0x25,0x26,0x25,0x25,0x23,0x24,0x23,0x22,0x24,0x26,
1249 0x25,0x25,0x25,0x25,0x24,0x23,0x25,0x22,0x23,0x23,0x26,0x28,0x22,0x23,0x22,0x24,
1250 0x25,0x23,0x25,0x25,0x22,0x20,0x20,0x04,0x22,0x22,0x25,0x22,0x24,0x23,0x26,0x23,
1251 0x04,0x22,0x25,0x23,0x24,0x28,0x24,0x25,0x25,0x21,0x23,0x25,0x22,0x22,0x22,0x04,
1252 0x23,0x25,0x22,0x25,0x21,0x22,0x04,0x22,0x22,0x22,0x22,0x23,0x24,0x25,0x24,0x04,
1253 0x25,0x04,0x24,0x25,0x24,0x25,0x23,0x22,0x04,0x04,0x24,0x28,0x28,0x23,0x28,0x25,
1254 0x25,0x28,0x25,0x26,0x24,0x26,0x28,0x26,0x25,0x24,0x25,0x26,0x25,0x25,0x04,0x26,
1255 0x04,0x28,0x25,0x04,0x26,0x28,0x26,0x26,0x28,0x04,0x25,0x26,0x26,0x25,0x25,0x24,
1256 0x24,0x24,0x04,0x28,0x25,0x28,0x26,0x04,0x24,0x28,0x28,0x28,0x23,0x29,0x26,0x28,
1257 0x28,0x28,0x25,0x28,0x28,0x25,0x25,0x25,0x22,0x22,0x28,0x04,0x28,0x24,0x04,0x25,
1258 0x04,0x28,0x04,0x04,0x28,0x25,0x04,0x28,0x28,0x28,0x26,0x28,0x04,0x26,0x25,0x26,
1259 0x25,0x25,0x25,0x28,0x25,0x25,0x28,0x04,0x28,0x26,0x28,0x25,0x25,0x28,0x04,0x25,
1260 0x28,0x29,0x28,0x29,0x28,0x25,0x28,0x26,0x26,0x28,0x04,0x26,0x04,0x04,0x25,0x28,
1261 0x25,0x28,0x28,0x26,0x26,0x04,0x28,0x25,0x25,0x26,0x25,0x24,0x28,0x25,0x04,0x29,
1262 0x28,0x28,0x28,0x04,0x28,0x04,0x24,0x24,0x28,0x28,0x27,0x25,0x28,0x04,0x28,0x28,
1263 0x29,0x25,0x28,0x29,0x29,0x25,0x28,0x28,0x28,0x28,0x29,0x28,0x29,0x28,0x29,0x28,
1264 0x28,0x29,0x28,0x25,0x25,0x29,0x26,0x2A,0x29,0x2A,0x29,0x28,0x26,0x04,0x28,0x29,
1265 0x23,0x25,0x23,0x21,0x04,0x28,0x25,0x24,0x22,0x25,0x22,0x28,0x26,0x25,0x28,0x25,
1266 0x26,0x22,0x25,0x25,0x25,0x25,0x23,0x25,0x25,0x22,0x22,0x25,0x22,0x22,0x04,0x22,
1267 0x25,0x25,0x23,0x26,0x23,0x25,0x22,0x25,0x25,0x25,0x22,0x22,0x04,0x21,0x23,0x24,
1268 0x25,0x23,0x25,0x24,0x22,0x22,0x04,0x04,0x04,0x25,0x20,0x22,0x28,0x25,0x25,0x28,
1269 0x25,0x26,0x25,0x26,0x24,0x24,0x23,0x24,0x21,0x24,0x24,0x23,0x23,0x22,0x25,0x23,
1270 0x24,0x04,0x04,0x26,0x22,0x28,0x22,0x20,0x25,0x20,0x20,0x20,0x24,0x23,0x22,0x23,
1271 0x28,0x22,0x24,0x23,0x22,0x25,0x23,0x25,0x21,0x25,0x22,0x24,0x28,0x26,0x04,0x04,
1272 0x22,0x24,0x23,0x24,0x22,0x24,0x23,0x04,0x25,0x22,0x22,0x26,0x23,0x25,0x23,0x04,
1273 0x23,0x25,0x23,0x26,0x24,0x24,0x04,0x26,0x04,0x22,0x28,0x25,0x04,0x26,0x24,0x04,
1274 0x28,0x28,0x04,0x25,0x25,0x26,0x25,0x26,0x24,0x23,0x24,0x25,0x04,0x28,0x28,0x26,
1275 0x25,0x25,0x26,0x25,0x26,0x28,0x04,0x25,0x28,0x26,0x26,0x24,0x26,0x24,0x26,0x25,
1276 0x04,0x25,0x24,0x24,0x23,0x26,0x26,0x26,0x28,0x28,0x28,0x26,0x26,0x28,0x29,0x28,
1277 0x28,0x29,0x29,0x28,0x28,0x26,0x26,0x22,0x24,0x04,0x28,0x24,0x25,0x26,0x28,0x25,
1278 0x25,0x23,0x24,0x04,0x28,0x04,0x28,0x28,0x28,0x25,0x04,0x25,0x25,0x26,0x25,0x26,
1279 0x24,0x25,0x25,0x04,0x25,0x23,0x26,0x28,0x24,0x04,0x2A,0x04,0x28,0x24,0x2A,0x28,
1280 0x28,0x28,0x29,0x28,0x29,0x28,0x24,0x25,0x25,0x25,0x28,0x04,0x28,0x28,0x25,0x25,
1281 0x29,0x28,0x29,0x25,0x28,0x28,0x25,0x28,0x04,0x24,0x28,0x28,0x28,0x04,0x26,0x25,
1282 0x26,0x04,0x27,0x26,0x25,0x04,0x28,0x25,0x25,0x25,0x28,0x04,0x04,0x23,0x25,0x26,
1283 0x28,0x25,0x28,0x28,0x28,0x28,0x04,0x28,0x25,0x28,0x28,0x28,0x28,0x29,0x28,0x26,
1284 0x28,0x2A,0x04,0x29,0x29,0x29,0x28,0x28,0x29,0x28,0x29,0x04,0x28,0x29,0x28,0x29,
1285 0x28,0x25,0x28,0x22,0x28,0x24,0x25,0x28,0x04,0x22,0x26,0x22,0x22,0x24,0x26,0x28,
1286 0x28,0x23,0x22,0x23,0x20,0x26,0x25,0x26,0x04,0x22,0x25,0x23,0x04,0x24,0x23,0x04,
1287 0x23,0x24,0x24,0x24,0x22,0x25,0x25,0x22,0x23,0x22,0x21,0x24,0x24,0x20,0x22,0x20,
1288 0x04,0x20,0x20,0x22,0x24,0x22,0x25,0x22,0x25,0x25,0x25,0x24,0x25,0x24,0x24,0x24,
1289 0x04,0x04,0x28,0x25,0x25,0x25,0x24,0x22,0x25,0x25,0x24,0x22,0x22,0x25,0x24,0x28,
1290 0x25,0x25,0x23,0x22,0x25,0x22,0x04,0x26,0x22,0x25,0x04,0x25,0x22,0x24,0x25,0x24,
1291 0x20,0x20,0x25,0x26,0x24,0x22,0x20,0x22,0x22,0x25,0x22,0x25,0x28,0x25,0x22,0x25,
1292 0x23,0x28,0x22,0x25,0x22,0x24,0x24,0x25,0x25,0x23,0x25,0x23,0x24,0x28,0x04,0x24,
1293 0x28,0x04,0x24,0x25,0x04,0x25,0x25,0x28,0x28,0x25,0x26,0x23,0x28,0x26,0x28,0x25,
1294 0x23,0x26,0x04,0x26,0x04,0x28,0x26,0x28,0x25,0x25,0x24,0x28,0x04,0x26,0x28,0x28,
1295 0x26,0x25,0x25,0x28,0x04,0x28,0x28,0x28,0x28,0x24,0x04,0x24,0x04,0x04,0x23,0x28,
1296 0x04,0x28,0x04,0x26,0x28,0x28,0x26,0x28,0x04,0x2A,0x28,0x28,0x25,0x28,0x28,0x28,
1297 0x25,0x29,0x2A,0x26,0x04,0x28,0x28,0x25,0x25,0x28,0x26,0x04,0x28,0x28,0x04,0x25,
1298 0x28,0x26,0x28,0x28,0x25,0x29,0x28,0x04,0x25,0x28,0x25,0x28,0x22,0x25,0x26,0x24,
1299 0x28,0x26,0x27,0x04,0x26,0x28,0x28,0x29,0x28,0x28,0x26,0x25,0x25,0x28,0x28,0x28,
1300 0x28,0x28,0x04,0x28,0x26,0x26,0x26,0x24,0x28,0x28,0x24,0x25,0x28,0x26,0x28,0x2A,
1301 0x28,0x24,0x26,0x29,0x25,0x29,0x28,0x23,0x28,0x25,0x28,0x25,0x25,0x28,0x28,0x28,
1302 0x23,0x28,0x28,0x26,0x25,0x26,0x04,0x26,0x28,0x25,0x25,0x24,0x04,0x28,0x28,0x26,
1303 0x25,0x04,0x28,0x28,0x28,0x04,0x28,0x28,0x26,0x29,0x28,0x28,0x29,0x29,0x28,0x29,
1304 0x04,0x28,0x04,0x28,0x28,0x28,0x26,0x28,0x24,0x28,0x24,0x28,0x28,0x29,0x25,0x29,
1305 0x26,0x25,0x23,0x22,0x22,0x22,0x23,0x22,0x23,0x25,0x04,0x04,0x04,0x25,0x26,0x04,
1306 0x22,0x25,0x26,0x04,0x23,0x22,0x22,0x24,0x20,0x22,0x04,0x22,0x04,0x21,0x22,0x23,
1307 0x25,0x24,0x26,0x28,0x21,0x21,0x20,0x25,0x24,0x22,0x20,0x25,0x04,0x26,0x23,0x24,
1308 0x26,0x24,0x26,0x20,0x22,0x20,0x24,0x20,0x22,0x04,0x26,0x22,0x22,0x24,0x23,0x22,
1309 0x28,0x28,0x25,0x04,0x26,0x25,0x04,0x28,0x28,0x26,0x04,0x28,0x23,0x28,0x04,0x25,
1310 0x21,0x25,0x23,0x23,0x24,0x21,0x24,0x26,0x25,0x23,0x23,0x26,0x25,0x24,0x25,0x24,
1311 0x22,0x25,0x26,0x23,0x28,0x26,0x25,0x23,0x26,0x23,0x23,0x28,0x22,0x25,0x23,0x25,
1312 0x24,0x23,0x23,0x23,0x25,0x25,0x26,0x26,0x22,0x24,0x26,0x25,0x26,0x25,0x24,0x23,
1313 0x23,0x26,0x28,0x04,0x28,0x28,0x27,0x25,0x28,0x26,0x28,0x04,0x26,0x04,0x28,0x25,
1314 0x28,0x26,0x26,0x04,0x26,0x04,0x04,0x04,0x25,0x26,0x26,0x26,0x04,0x04,0x28,0x25,
1315 0x25,0x28,0x26,0x04,0x04,0x24,0x04,0x04,0x04,0x26,0x28,0x26,0x28,0x28,0x22,0x04,
1316 0x04,0x26,0x25,0x28,0x29,0x26,0x29,0x25,0x04,0x04,0x28,0x28,0x29,0x2A,0x28,0x2A,
1317 0x25,0x2A,0x28,0x28,0x2A,0x29,0x28,0x25,0x25,0x2A,0x28,0x04,0x25,0x25,0x28,0x04,
1318 0x28,0x28,0x28,0x28,0x28,0x29,0x26,0x28,0x26,0x28,0x25,0x22,0x04,0x28,0x29,0x28,
1319 0x28,0x28,0x04,0x28,0x28,0x28,0x25,0x24,0x28,0x27,0x28,0x04,0x28,0x28,0x26,0x25,
1320 0x23,0x25,0x28,0x26,0x28,0x28,0x28,0x25,0x04,0x26,0x28,0x28,0x29,0x25,0x04,0x28,
1321 0x28,0x2A,0x28,0x28,0x04,0x04,0x28,0x28,0x28,0x26,0x26,0x28,0x04,0x24,0x24,0x25,
1322 0x26,0x04,0x26,0x28,0x28,0x28,0x25,0x25,0x28,0x25,0x25,0x26,0x26,0x25,0x25,0x24,
1323 0x28,0x28,0x04,0x25,0x28,0x28,0x25,0x25,0x28,0x28,0x28,0x29,0x28,0x04,0x25,0x29,
1324 0x26,0x25,0x25,0x28,0x28,0x25,0x04,0x28,0x25,0x04,0x26,0x26,0x24,0x25,0x28,0x29,
1325 0x04,0x28,0x23,0x25,0x25,0x26,0x23,0x28,0x25,0x28,0x25,0x23,0x04,0x23,0x26,0x23,
1326 0x26,0x28,0x22,0x04,0x23,0x23,0x24,0x24,0x22,0x22,0x22,0x20,0x24,0x23,0x20,0x22,
1327 0x04,0x25,0x25,0x23,0x23,0x22,0x20,0x20,0x21,0x24,0x23,0x04,0x24,0x28,0x22,0x25,
1328 0x24,0x26,0x22,0x20,0x20,0x20,0x23,0x24,0x25,0x22,0x20,0x20,0x25,0x24,0x25,0x24,
1329 0x23,0x26,0x23,0x25,0x28,0x25,0x26,0x25,0x23,0x26,0x24,0x28,0x04,0x26,0x24,0x26,
1330 0x24,0x24,0x25,0x24,0x25,0x04,0x22,0x24,0x22,0x24,0x25,0x22,0x24,0x23,0x24,0x23,
1331 0x26,0x23,0x24,0x22,0x23,0x28,0x04,0x28,0x24,0x25,0x25,0x25,0x23,0x23,0x24,0x25,
1332 0x04,0x25,0x28,0x26,0x23,0x24,0x04,0x24,0x25,0x28,0x26,0x23,0x25,0x22,0x23,0x26,
1333 0x26,0x28,0x23,0x28,0x24,0x24,0x04,0x22,0x04,0x23,0x24,0x24,0x26,0x04,0x28,0x04,
1334 0x04,0x28,0x26,0x04,0x22,0x24,0x28,0x24,0x25,0x26,0x04,0x27,0x25,0x25,0x28,0x28,
1335 0x28,0x04,0x28,0x26,0x04,0x25,0x28,0x23,0x28,0x26,0x04,0x04,0x24,0x25,0x28,0x26,
1336 0x25,0x28,0x25,0x28,0x26,0x26,0x29,0x28,0x28,0x29,0x26,0x04,0x26,0x28,0x28,0x29,
1337 0x26,0x2A,0x04,0x28,0x04,0x28,0x28,0x27,0x28,0x28,0x28,0x29,0x25,0x22,0x22,0x26,
1338 0x29,0x28,0x26,0x28,0x28,0x28,0x04,0x25,0x28,0x26,0x29,0x04,0x2A,0x28,0x28,0x28,
1339 0x28,0x28,0x26,0x26,0x28,0x25,0x28,0x28,0x23,0x28,0x28,0x28,0x26,0x25,0x27,0x28,
1340 0x27,0x27,0x28,0x25,0x04,0x28,0x28,0x04,0x28,0x04,0x25,0x28,0x29,0x28,0x2A,0x28,
1341 0x28,0x2A,0x28,0x28,0x2A,0x24,0x04,0x28,0x25,0x04,0x28,0x25,0x26,0x25,0x24,0x25,
1342 0x26,0x25,0x25,0x23,0x28,0x26,0x25,0x25,0x04,0x28,0x26,0x26,0x04,0x04,0x26,0x04,
1343 0x26,0x22,0x04,0x04,0x28,0x28,0x28,0x28,0x28,0x28,0x04,0x28,0x25,0x27,0x25,0x28,
1344 0x24,0x22,0x26,0x28,0x26,0x04,0x28,0x04,0x28,0x25,0x28,0x28,0x04,0x25,0x24,0x29,
1345 0x28,0x25,0x23,0x25,0x22,0x25,0x28,0x26,0x23,0x24,0x04,0x23,0x28,0x22,0x25,0x22,
1346 0x28,0x22,0x24,0x25,0x26,0x25,0x25,0x22,0x22,0x22,0x23,0x26,0x23,0x26,0x22,0x24,
1347 0x04,0x25,0x22,0x25,0x23,0x22,0x25,0x28,0x22,0x24,0x25,0x23,0x24,0x23,0x25,0x25,
1348 0x25,0x21,0x23,0x20,0x20,0x22,0x22,0x23,0x28,0x22,0x23,0x25,0x22,0x28,0x24,0x26,
1349 0x23,0x25,0x28,0x26,0x26,0x26,0x28,0x28,0x25,0x25,0x25,0x28,0x28,0x25,0x26,0x28,
1350 0x24,0x28,0x24,0x23,0x28,0x28,0x26,0x04,0x26,0x28,0x04,0x26,0x24,0x24,0x04,0x25,
1351 0x25,0x25,0x04,0x26,0x04,0x26,0x24,0x28,0x25,0x25,0x23,0x25,0x24,0x25,0x25,0x25,
1352 0x24,0x25,0x25,0x23,0x22,0x25,0x25,0x25,0x04,0x23,0x04,0x28,0x26,0x26,0x28,0x04,
1353 0x28,0x28,0x28,0x28,0x24,0x28,0x24,0x04,0x04,0x04,0x28,0x28,0x24,0x25,0x04,0x26,
1354 0x24,0x25,0x26,0x04,0x26,0x28,0x28,0x28,0x28,0x25,0x26,0x29,0x04,0x28,0x26,0x28,
1355 0x28,0x26,0x25,0x28,0x04,0x25,0x24,0x28,0x28,0x26,0x28,0x25,0x25,0x24,0x26,0x25,
1356 0x24,0x28,0x27,0x28,0x26,0x04,0x25,0x29,0x28,0x28,0x28,0x04,0x04,0x28,0x26,0x29,
1357 0x29,0x29,0x04,0x26,0x25,0x28,0x24,0x24,0x24,0x04,0x28,0x04,0x28,0x24,0x28,0x28,
1358 0x27,0x29,0x04,0x26,0x26,0x25,0x28,0x25,0x29,0x04,0x29,0x28,0x28,0x28,0x28,0x28,
1359 0x2B,0x29,0x2B,0x2C,0x29,0x28,0x26,0x04,0x28,0x25,0x28,0x26,0x27,0x28,0x28,0x28,
1360 0x04,0x25,0x24,0x28,0x28,0x04,0x28,0x25,0x25,0x25,0x26,0x28,0x28,0x28,0x29,0x29,
1361 0x28,0x28,0x22,0x28,0x28,0x28,0x28,0x28,0x24,0x24,0x26,0x26,0x25,0x25,0x04,0x28,
1362 0x04,0x25,0x28,0x24,0x28,0x25,0x04,0x28,0x26,0x24,0x26,0x04,0x28,0x26,0x26,0x25,
1363 0x28,0x28,0x28,0x29,0x25,0x28,0x25,0x28,0x28,0x26,0x04,0x25,0x04,0x28,0x28,0x28,
1364 0x04,0x25,0x25,0x28,0x28,0x24,0x28,0x28,0x26,0x24,0x28,0x24,0x26,0x25,0x28,0x29,
1365 0x04,0x23,0x22,0x24,0x25,0x25,0x23,0x25,0x23,0x23,0x22,0x04,0x04,0x24,0x26,0x24,
1366 0x23,0x24,0x04,0x04,0x04,0x25,0x22,0x28,0x25,0x25,0x22,0x25,0x26,0x25,0x22,0x23,
1367 0x22,0x25,0x23,0x25,0x04,0x24,0x23,0x25,0x22,0x28,0x22,0x25,0x22,0x25,0x28,0x22,
1368 0x25,0x26,0x25,0x20,0x26,0x04,0x20,0x23,0x23,0x25,0x25,0x25,0x24,0x22,0x25,0x24,
1369 0x25,0x24,0x25,0x28,0x04,0x25,0x25,0x24,0x28,0x25,0x28,0x28,0x26,0x25,0x24,0x23,
1370 0x26,0x24,0x28,0x25,0x28,0x27,0x28,0x25,0x27,0x26,0x26,0x26,0x26,0x25,0x04,0x26,
1371 0x28,0x25,0x25,0x28,0x28,0x26,0x04,0x04,0x26,0x24,0x24,0x24,0x04,0x24,0x28,0x25,
1372 0x24,0x24,0x04,0x26,0x26,0x25,0x26,0x25,0x23,0x28,0x25,0x25,0x25,0x29,0x04,0x24,
1373 0x28,0x28,0x24,0x25,0x04,0x22,0x26,0x28,0x26,0x04,0x28,0x25,0x25,0x28,0x28,0x24,
1374 0x04,0x26,0x04,0x04,0x04,0x26,0x04,0x27,0x25,0x28,0x28,0x28,0x28,0x26,0x26,0x29,
1375 0x26,0x28,0x28,0x28,0x28,0x25,0x24,0x28,0x28,0x28,0x26,0x25,0x28,0x25,0x28,0x28,
1376 0x28,0x26,0x26,0x28,0x28,0x25,0x2A,0x28,0x28,0x26,0x25,0x25,0x24,0x25,0x24,0x25,
1377 0x23,0x26,0x28,0x25,0x24,0x22,0x25,0x25,0x25,0x25,0x28,0x04,0x25,0x04,0x26,0x28,
1378 0x04,0x26,0x28,0x29,0x28,0x29,0x28,0x25,0x25,0x28,0x04,0x28,0x28,0x26,0x28,0x28,
1379 0x28,0x25,0x2B,0x29,0x29,0x04,0x04,0x28,0x24,0x25,0x29,0x28,0x25,0x28,0x28,0x28,
1380 0x28,0x22,0x26,0x25,0x26,0x28,0x28,0x28,0x24,0x28,0x25,0x24,0x24,0x28,0x04,0x26,
1381 0x28,0x23,0x28,0x29,0x28,0x04,0x26,0x26,0x04,0x24,0x24,0x25,0x25,0x26,0x24,0x25,
1382 0x22,0x04,0x25,0x26,0x26,0x22,0x28,0x24,0x24,0x26,0x28,0x28,0x28,0x26,0x28,0x26,
1383 0x26,0x28,0x28,0x04,0x04,0x24,0x04,0x25,0x25,0x04,0x25,0x28,0x26,0x25,0x25,0x25,
1384 0x04,0x04,0x25,0x25,0x26,0x24,0x24,0x25,0x28,0x26,0x25,0x25,0x26,0x28,0x25,0x29,
1385 0x23,0x04,0x25,0x24,0x25,0x26,0x25,0x26,0x25,0x25,0x28,0x25,0x28,0x28,0x24,0x25,
1386 0x26,0x25,0x04,0x25,0x25,0x22,0x22,0x25,0x25,0x24,0x26,0x04,0x22,0x24,0x24,0x24,
1387 0x23,0x23,0x26,0x22,0x25,0x24,0x25,0x28,0x25,0x22,0x26,0x26,0x25,0x24,0x28,0x04,
1388 0x25,0x22,0x26,0x23,0x26,0x25,0x04,0x28,0x04,0x26,0x04,0x28,0x25,0x22,0x22,0x24,
1389 0x20,0x22,0x24,0x25,0x24,0x23,0x25,0x04,0x25,0x28,0x28,0x28,0x28,0x04,0x25,0x28,
1390 0x27,0x25,0x25,0x26,0x25,0x24,0x27,0x25,0x26,0x28,0x25,0x25,0x04,0x28,0x27,0x28,
1391 0x24,0x25,0x25,0x28,0x25,0x24,0x04,0x28,0x25,0x26,0x26,0x04,0x26,0x26,0x25,0x24,
1392 0x25,0x28,0x04,0x28,0x26,0x25,0x28,0x26,0x28,0x22,0x04,0x25,0x28,0x25,0x25,0x28,
1393 0x25,0x25,0x28,0x25,0x28,0x24,0x28,0x24,0x26,0x28,0x28,0x04,0x28,0x25,0x24,0x25,
1394 0x28,0x27,0x25,0x04,0x04,0x26,0x28,0x24,0x26,0x04,0x28,0x24,0x28,0x04,0x28,0x27,
1395 0x24,0x26,0x26,0x28,0x25,0x24,0x28,0x04,0x26,0x23,0x04,0x28,0x04,0x26,0x29,0x28,
1396 0x26,0x28,0x26,0x28,0x26,0x28,0x25,0x28,0x29,0x25,0x28,0x27,0x28,0x25,0x28,0x24,
1397 0x22,0x22,0x20,0x20,0x25,0x23,0x04,0x26,0x24,0x28,0x28,0x25,0x24,0x24,0x25,0x25,
1398 0x28,0x28,0x04,0x28,0x26,0x28,0x28,0x04,0x28,0x28,0x29,0x28,0x26,0x28,0x26,0x25,
1399 0x28,0x28,0x28,0x2A,0x24,0x29,0x28,0x28,0x28,0x28,0x28,0x04,0x2A,0x28,0x25,0x04,
1400 0x28,0x28,0x26,0x2A,0x2A,0x04,0x24,0x26,0x28,0x26,0x26,0x04,0x28,0x04,0x28,0x28,
1401 0x28,0x29,0x29,0x28,0x28,0x28,0x28,0x28,0x24,0x28,0x28,0x28,0x24,0x26,0x25,0x25,
1402 0x25,0x28,0x23,0x24,0x28,0x24,0x26,0x28,0x26,0x25,0x28,0x29,0x28,0x04,0x26,0x28,
1403 0x28,0x28,0x2A,0x04,0x04,0x04,0x24,0x25,0x04,0x26,0x28,0x25,0x25,0x26,0x26,0x24,
1404 0x04,0x04,0x04,0x28,0x04,0x26,0x26,0x04,0x28,0x26,0x24,0x28,0x28,0x26,0x04,0x29,
1405 0x24,0x28,0x28,0x23,0x23,0x22,0x25,0x04,0x23,0x24,0x22,0x26,0x25,0x22,0x26,0x23,
1406 0x25,0x24,0x23,0x25,0x23,0x04,0x04,0x24,0x25,0x25,0x25,0x22,0x22,0x26,0x22,0x04,
1407 0x04,0x25,0x26,0x04,0x04,0x25,0x25,0x23,0x25,0x24,0x28,0x04,0x25,0x04,0x24,0x04,
1408 0x24,0x25,0x20,0x22,0x04,0x25,0x28,0x25,0x26,0x23,0x26,0x26,0x28,0x04,0x04,0x26,
1409 0x25,0x25,0x25,0x26,0x23,0x24,0x23,0x25,0x04,0x28,0x25,0x28,0x28,0x28,0x04,0x28,
1410 0x28,0x04,0x22,0x28,0x25,0x28,0x25,0x26,0x25,0x28,0x27,0x28,0x28,0x25,0x28,0x28,
1411 0x28,0x24,0x24,0x22,0x04,0x04,0x25,0x26,0x25,0x28,0x25,0x28,0x04,0x28,0x28,0x26,
1412 0x26,0x25,0x04,0x25,0x28,0x26,0x26,0x28,0x25,0x04,0x04,0x26,0x28,0x24,0x28,0x25,
1413 0x04,0x28,0x04,0x25,0x21,0x28,0x26,0x24,0x04,0x25,0x28,0x04,0x28,0x28,0x25,0x28,
1414 0x28,0x26,0x28,0x04,0x04,0x26,0x26,0x28,0x26,0x24,0x24,0x24,0x28,0x04,0x25,0x26,
1415 0x28,0x28,0x24,0x28,0x25,0x25,0x25,0x25,0x28,0x26,0x04,0x28,0x24,0x28,0x26,0x28,
1416 0x26,0x29,0x26,0x28,0x26,0x25,0x26,0x25,0x24,0x28,0x25,0x26,0x22,0x26,0x28,0x28,
1417 0x04,0x22,0x20,0x24,0x21,0x23,0x25,0x24,0x26,0x25,0x26,0x24,0x25,0x25,0x26,0x28,
1418 0x26,0x25,0x24,0x26,0x28,0x04,0x26,0x28,0x28,0x28,0x28,0x28,0x27,0x28,0x28,0x04,
1419 0x27,0x24,0x25,0x04,0x29,0x26,0x28,0x28,0x28,0x28,0x28,0x28,0x04,0x26,0x2A,0x28,
1420 0x2A,0x28,0x25,0x25,0x26,0x04,0x28,0x28,0x28,0x28,0x28,0x28,0x24,0x26,0x25,0x28,
1421 0x28,0x28,0x24,0x28,0x25,0x25,0x28,0x28,0x28,0x28,0x28,0x25,0x22,0x28,0x26,0x26,
1422 0x25,0x25,0x04,0x28,0x25,0x28,0x28,0x28,0x23,0x25,0x26,0x29,0x25,0x28,0x29,0x25,
1423 0x29,0x29,0x25,0x24,0x25,0x25,0x26,0x28,0x28,0x25,0x28,0x28,0x24,0x24,0x25,0x26,
1424 0x28,0x25,0x04,0x28,0x28,0x24,0x26,0x28,0x28,0x26,0x28,0x23,0x28,0x04,0x04,0x29,
1425 0x22,0x26,0x23,0x26,0x25,0x21,0x04,0x22,0x25,0x04,0x04,0x23,0x25,0x04,0x28,0x24,
1426 0x25,0x25,0x24,0x24,0x24,0x25,0x04,0x22,0x24,0x23,0x23,0x04,0x26,0x24,0x24,0x25,
1427 0x28,0x28,0x04,0x28,0x25,0x28,0x23,0x25,0x04,0x25,0x24,0x26,0x25,0x28,0x25,0x24,
1428 0x23,0x28,0x04,0x25,0x24,0x28,0x25,0x04,0x25,0x25,0x28,0x04,0x28,0x04,0x28,0x25,
1429 0x28,0x25,0x20,0x22,0x22,0x21,0x21,0x23,0x25,0x26,0x26,0x22,0x22,0x24,0x25,0x25,
1430 0x28,0x26,0x25,0x26,0x23,0x25,0x04,0x28,0x28,0x28,0x04,0x25,0x26,0x22,0x24,0x28,
1431 0x26,0x28,0x25,0x28,0x25,0x26,0x23,0x26,0x04,0x28,0x04,0x25,0x04,0x28,0x2A,0x29,
1432 0x25,0x25,0x26,0x24,0x25,0x04,0x28,0x25,0x25,0x25,0x28,0x04,0x25,0x23,0x28,0x28,
1433 0x04,0x28,0x24,0x25,0x26,0x28,0x04,0x25,0x25,0x28,0x27,0x26,0x28,0x28,0x26,0x26,
1434 0x25,0x26,0x26,0x24,0x26,0x04,0x26,0x26,0x04,0x04,0x28,0x28,0x24,0x24,0x26,0x25,
1435 0x28,0x29,0x28,0x28,0x26,0x28,0x04,0x28,0x24,0x26,0x28,0x04,0x28,0x04,0x28,0x04,
1436 0x29,0x24,0x29,0x29,0x24,0x28,0x28,0x25,0x25,0x28,0x28,0x28,0x04,0x22,0x24,0x20,
1437 0x20,0x26,0x23,0x25,0x26,0x28,0x24,0x25,0x04,0x22,0x04,0x26,0x25,0x28,0x28,0x28,
1438 0x28,0x24,0x28,0x28,0x04,0x28,0x25,0x04,0x26,0x24,0x04,0x26,0x26,0x28,0x28,0x25,
1439 0x04,0x25,0x26,0x04,0x27,0x28,0x23,0x27,0x28,0x28,0x28,0x28,0x28,0x26,0x26,0x28,
1440 0x28,0x28,0x04,0x28,0x28,0x25,0x28,0x28,0x29,0x28,0x28,0x28,0x25,0x26,0x24,0x26,
1441 0x28,0x26,0x25,0x04,0x25,0x22,0x28,0x28,0x26,0x04,0x29,0x29,0x28,0x25,0x25,0x25,
1442 0x04,0x26,0x28,0x28,0x28,0x26,0x28,0x28,0x28,0x29,0x28,0x28,0x04,0x28,0x28,0x28,
1443 0x04,0x04,0x26,0x28,0x25,0x23,0x23,0x26,0x25,0x23,0x26,0x04,0x28,0x24,0x26,0x28,
1444 0x26,0x04,0x22,0x22,0x22,0x26,0x26,0x04,0x28,0x25,0x25,0x28,0x25,0x26,0x28,0x29,
1445 0x24,0x22,0x23,0x22,0x25,0x04,0x25,0x26,0x25,0x28,0x04,0x22,0x23,0x24,0x24,0x25,
1446 0x26,0x28,0x04,0x22,0x25,0x26,0x24,0x28,0x04,0x04,0x28,0x26,0x26,0x25,0x28,0x25,
1447 0x26,0x26,0x22,0x26,0x26,0x23,0x28,0x22,0x22,0x04,0x26,0x25,0x25,0x26,0x20,0x22,
1448 0x24,0x04,0x25,0x26,0x28,0x24,0x04,0x26,0x25,0x24,0x24,0x26,0x28,0x28,0x26,0x28,
1449 0x26,0x26,0x24,0x04,0x23,0x22,0x23,0x26,0x04,0x28,0x26,0x04,0x23,0x22,0x22,0x22,
1450 0x23,0x22,0x23,0x25,0x20,0x20,0x25,0x25,0x28,0x28,0x25,0x25,0x24,0x23,0x22,0x24,
1451 0x25,0x26,0x28,0x04,0x28,0x26,0x29,0x25,0x28,0x28,0x28,0x24,0x28,0x25,0x28,0x29,
1452 0x28,0x28,0x28,0x28,0x04,0x28,0x04,0x28,0x25,0x04,0x28,0x28,0x25,0x28,0x28,0x28,
1453 0x28,0x27,0x25,0x28,0x28,0x04,0x28,0x25,0x28,0x24,0x28,0x23,0x25,0x28,0x25,0x25,
1454 0x28,0x26,0x26,0x28,0x28,0x25,0x28,0x25,0x23,0x04,0x24,0x25,0x28,0x26,0x28,0x26,
1455 0x28,0x28,0x29,0x26,0x28,0x28,0x28,0x04,0x28,0x26,0x28,0x25,0x28,0x2A,0x28,0x28,
1456 0x26,0x28,0x28,0x28,0x28,0x25,0x26,0x25,0x25,0x26,0x25,0x25,0x25,0x24,0x20,0x20,
1457 0x22,0x22,0x04,0x25,0x28,0x25,0x04,0x25,0x24,0x26,0x26,0x04,0x25,0x28,0x26,0x28,
1458 0x04,0x28,0x26,0x04,0x24,0x25,0x26,0x28,0x04,0x25,0x25,0x04,0x04,0x28,0x25,0x28,
1459 0x24,0x28,0x28,0x26,0x24,0x25,0x23,0x04,0x28,0x28,0x25,0x24,0x28,0x26,0x28,0x28,
1460 0x28,0x28,0x04,0x26,0x28,0x25,0x04,0x25,0x22,0x26,0x26,0x04,0x24,0x26,0x04,0x28,
1461 0x25,0x28,0x26,0x26,0x04,0x28,0x23,0x26,0x24,0x25,0x28,0x26,0x04,0x28,0x26,0x29,
1462 0x28,0x28,0x28,0x29,0x28,0x24,0x29,0x28,0x28,0x28,0x28,0x04,0x04,0x25,0x25,0x24,
1463 0x24,0x26,0x25,0x25,0x22,0x20,0x20,0x22,0x24,0x22,0x23,0x20,0x20,0x22,0x20,0x22,
1464 0x20,0x22,0x20,0x24,0x23,0x22,0x25,0x23,0x23,0x28,0x26,0x20,0x20,0x20,0x20,0x29,
1465 0x28,0x28,0x25,0x28,0x04,0x26,0x25,0x26,0x25,0x26,0x25,0x26,0x28,0x28,0x04,0x04,
1466 0x28,0x26,0x24,0x28,0x28,0x28,0x28,0x28,0x26,0x23,0x26,0x28,0x04,0x25,0x25,0x26,
1467 0x28,0x28,0x26,0x26,0x26,0x28,0x04,0x22,0x04,0x25,0x25,0x28,0x04,0x26,0x04,0x28,
1468 0x28,0x04,0x28,0x04,0x24,0x28,0x28,0x28,0x28,0x28,0x24,0x26,0x24,0x28,0x25,0x04,
1469 0x28,0x28,0x23,0x28,0x24,0x24,0x28,0x26,0x25,0x28,0x25,0x25,0x25,0x24,0x22,0x04,
1470 0x23,0x25,0x23,0x24,0x24,0x24,0x26,0x26,0x26,0x24,0x28,0x28,0x24,0x22,0x25,0x04,
1471 0x25,0x28,0x26,0x29,0x24,0x28,0x25,0x28,0x24,0x28,0x25,0x28,0x24,0x28,0x28,0x26,
1472 0x26,0x28,0x25,0x28,0x25,0x28,0x28,0x26,0x28,0x29,0x28,0x28,0x24,0x24,0x24,0x26,
1473 0x23,0x26,0x04,0x25,0x04,0x26,0x04,0x25,0x23,0x25,0x04,0x24,0x25,0x24,0x23,0x24,
1474 0x26,0x25,0x24,0x24,0x25,0x04,0x25,0x25,0x28,0x28,0x24,0x28,0x25,0x04,0x29,0x25,
1475 0x04,0x04,0x28,0x28,0x04,0x28,0x04,0x29,0x04,0x26,0x28,0x28,0x28,0x28,0x28,0x28,
1476 0x28,0x24,0x28,0x25,0x04,0x24,0x23,0x22,0x25,0x23,0x20,0x25,0x23,0x25,0x25,0x25,
1477 0x23,0x24,0x26,0x28,0x28,0x25,0x04,0x26,0x04,0x28,0x25,0x26,0x28,0x26,0x25,0x28,
1478 0x04,0x25,0x04,0x26,0x28,0x26,0x25,0x28,0x28,0x28,0x28,0x23,0x25,0x25,0x28,0x25,
1479 0x28,0x25,0x28,0x25,0x26,0x25,0x25,0x26,0x04,0x26,0x25,0x28,0x28,0x26,0x25,0x26,
1480 0x28,0x04,0x28,0x25,0x26,0x25,0x28,0x04,0x04,0x28,0x29,0x04,0x26,0x28,0x26,0x28,
1481 0x28,0x29,0x28,0x28,0x29,0x25,0x29,0x25,0x29,0x28,0x29,0x28,0x29,0x28,0x28,0x28,
1482 0x28,0x29,0x24,0x04,0x24,0x04,0x25,0x27,0x28,0x24,0x24,0x28,0x04,0x23,0x24,0x23,
1483 0x26,0x22,0x24,0x22,0x20,0x26,0x25,0x28,0x23,0x24,0x04,0x22,0x22,0x23,0x20,0x24,
1484 0x26,0x26,0x20,0x22,0x20,0x24,0x22,0x24,0x20,0x24,0x22,0x24,0x25,0x24,0x28,0x29,
1485 0x04,0x24,0x28,0x26,0x28,0x23,0x28,0x28,0x28,0x24,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1486 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1487 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1488 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1489 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1490 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1491 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1492 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1493 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x25,0x25,0x28,0x26,
1494 0x25,0x25,0x25,0x25,0x25,0x26,0x28,0x04,0x24,0x26,0x28,0x2A,0x2F,0x2F,0x2F,0x2F,
1495 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1496 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1497 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1498 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1499 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1500 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,
1501 0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,
1502 0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2D,0x2D,
1503 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2C,
1504 0x2C,0x2C,0x2C,0x2C,0x2C,0x26,0x22,0x22,0x28,0x25,0x24,0x24,0x26,0x28,0x25,0x29,
1505 0x04,0x28,0x28,0x28,0x24,0x25,0x25,0x04,0x25,0x24,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1506 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1507 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1508 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1509 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1510 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1511 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1512 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1513 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x25,0x25,0x26,0x25,
1514 0x24,0x04,0x04,0x23,0x23,0x26,0x26,0x23,0x2A,0x28,0x25,0x2A,0x2F,0x2F,0x2F,0x2F,
1515 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1516 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1517 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1518 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1519 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1520 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1521 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1522 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1523 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1524 0x2F,0x2F,0x2F,0x2F,0x2F,0x23,0x25,0x26,0x25,0x28,0x26,0x24,0x24,0x04,0x24,0x29,
1525 0x25,0x28,0x26,0x25,0x28,0x26,0x22,0x25,0x25,0x24,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
1526 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1527 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1528 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1529 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1530 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1531 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1532 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1533 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x22,0x25,0x28,0x26,
1534 0x22,0x24,0x24,0x24,0x28,0x28,0x04,0x29,0x25,0x28,0x28,0x26,0x2F,0x2F,0x2D,0x2D,
1535 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1536 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1537 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1538 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1539 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1540 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1541 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1542 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1543 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1544 0x2D,0x2D,0x2D,0x2D,0x2D,0x20,0x28,0x28,0x04,0x04,0x04,0x28,0x24,0x24,0x28,0x29,
1545 0x26,0x25,0x26,0x25,0x28,0x22,0x25,0x25,0x24,0x23,0x2F,0x2F,0x2D,0x2D,0x7A,0x7A,
1546 0x7A,0x7A,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x7A,0x7A,
1547 0x7A,0x7A,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,
1548 0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,
1549 0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,
1550 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,
1551 0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,
1552 0x7A,0x7A,0x2D,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,
1553 0x7A,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x22,0x25,0x28,0x04,
1554 0x28,0x28,0x26,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x27,0x28,0x2F,0x2F,0x2D,0x2D,
1555 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1556 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1557 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1558 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1559 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1560 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1561 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1562 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1563 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1564 0x2D,0x2D,0x2D,0x2D,0x2D,0x36,0x04,0x04,0x28,0x24,0x26,0x24,0x28,0x04,0x25,0x29,
1565 0x04,0x25,0x22,0x23,0x24,0x25,0x22,0x22,0x23,0x24,0x2F,0x2F,0x2D,0x7A,0x7A,0x7A,
1566 0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,
1567 0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,
1568 0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,
1569 0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,
1570 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x7A,0x2D,0x2D,0x2D,0x7A,0x7A,0x7A,0x2D,
1571 0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,0x2D,0x2D,0x2D,0x7A,
1572 0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,
1573 0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x22,0x28,0x28,0x26,
1574 0x29,0x28,0x28,0x04,0x26,0x29,0x28,0x24,0x26,0x28,0x26,0x25,0x2F,0x2F,0x2D,0x2D,
1575 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1576 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,
1577 0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,
1578 0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
1579 0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1580 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1581 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1582 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1583 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1584 0x2D,0x2D,0x2D,0x2D,0x2D,0x36,0x28,0x04,0x22,0x25,0x23,0x25,0x28,0x26,0x23,0x29,
1585 0x25,0x26,0x28,0x26,0x26,0x28,0x04,0x22,0x22,0x25,0x2F,0x2F,0x2D,0x7A,0x7A,0x2D,
1586 0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,
1587 0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,
1588 0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,
1589 0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,
1590 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x2D,0x7A,0x7A,0x7A,0x7A,0x2D,
1591 0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x2D,0x7A,0x7A,
1592 0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,
1593 0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x22,0x28,0x28,0x28,
1594 0x04,0x04,0x28,0x28,0x28,0x24,0x28,0x26,0x26,0x28,0x25,0x26,0x2F,0x2F,0x2D,0x2D,
1595 0x32,0x33,0x33,0x34,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x35,0x35,0x35,0x35,0x36,0x36,
1596 0x36,0x36,0x20,0x23,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,
1597 0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,
1598 0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
1599 0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1600 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1601 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1602 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1603 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1604 0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x28,0x24,0x23,0x28,0x28,0x28,0x25,0x25,0x20,0x29,
1605 0x23,0x04,0x28,0x23,0x24,0x24,0x24,0x25,0x20,0x25,0x2F,0x2F,0x2D,0x7A,0x7A,0x7A,
1606 0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,
1607 0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,
1608 0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,
1609 0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,
1610 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,
1611 0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,
1612 0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,
1613 0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x22,0x28,0x04,0x04,
1614 0x04,0x04,0x26,0x28,0x26,0x25,0x04,0x26,0x26,0x23,0x22,0x22,0x2E,0x2F,0x2D,0x2D,
1615 0x33,0x36,0x22,0x25,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,
1616 0x28,0x28,0x28,0x2C,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,
1617 0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,
1618 0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,
1619 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1620 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1621 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1622 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1623 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1624 0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x24,0x25,0x24,0x28,0x23,0x22,0x25,0x25,0x04,0x29,
1625 0x22,0x24,0x20,0x22,0x22,0x23,0x23,0x23,0x21,0x23,0x2F,0x2F,0x2D,0x7A,0x7A,0x7A,
1626 0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,
1627 0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,
1628 0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,
1629 0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,
1630 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,0x7A,0x7A,0x7A,0x2D,0x7A,0x7A,0x2D,
1631 0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,0x7A,0x7A,0x7A,0x2D,
1632 0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,
1633 0x7A,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x2D,0x22,0x26,0x26,0x25,
1634 0x28,0x26,0x26,0x25,0x28,0x28,0x25,0x04,0x24,0x25,0x25,0x25,0x2E,0x2F,0x2D,0x2D,
1635 0x34,0x22,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1636 0x00,0x28,0x28,0x2C,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
1637 0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,
1638 0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,
1639 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1640 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1641 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1642 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1643 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1644 0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x24,0x28,0x23,0x22,0x24,0x04,0x20,0x20,0x23,0x29,
1645 0x22,0x20,0x20,0x24,0x22,0x23,0x24,0x22,0x24,0x24,0x2F,0x2F,0x2D,0x7A,0x7A,0x2D,
1646 0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,
1647 0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,
1648 0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,
1649 0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,
1650 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,
1651 0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x2D,0x2D,
1652 0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,
1653 0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x22,0x23,0x24,0x25,
1654 0x04,0x28,0x26,0x25,0x23,0x04,0x26,0x24,0x22,0x20,0x25,0x23,0x2E,0x2F,0x2D,0x2D,
1655 0x34,0x25,0x27,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
1656 0x1F,0x28,0x28,0x2D,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
1657 0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,
1658 0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
1659 0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1660 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1661 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1662 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1663 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1664 0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x23,0x22,0x04,0x25,0x25,0x04,0x22,0x22,0x23,0x29,
1665 0x20,0x26,0x21,0x24,0x23,0x28,0x23,0x23,0x22,0x26,0x2F,0x2F,0x2D,0x7A,0x7A,0x2D,
1666 0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,
1667 0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,
1668 0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,
1669 0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,
1670 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,
1671 0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,
1672 0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,
1673 0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x22,0x25,0x23,0x22,
1674 0x22,0x22,0x20,0x26,0x20,0x24,0x20,0x23,0x26,0x28,0x22,0x25,0x2E,0x2F,0x2D,0x2D,
1675 0x35,0x27,0x27,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
1676 0x1F,0x28,0x28,0x2D,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x17,0x2D,0x2D,
1677 0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,
1678 0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
1679 0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1680 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1681 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1682 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1683 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1684 0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x28,0x23,0x24,0x04,0x22,0x20,0x22,0x22,0x26,0x29,
1685 0x25,0x21,0x25,0x22,0x24,0x23,0x24,0x24,0x04,0x04,0x2F,0x2F,0x2D,0x7A,0x7A,0x2D,
1686 0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,
1687 0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,
1688 0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,
1689 0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,
1690 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,
1691 0x2D,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x2D,
1692 0x7A,0x7A,0x2D,0x2D,0x2D,0x7A,0x7A,0x7A,0x7A,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,
1693 0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x7A,0x7A,0x2D,0x2D,0x2D,0x2D,0x22,0x26,0x28,0x28,
1694 0x04,0x25,0x20,0x24,0x22,0x24,0x20,0x23,0x25,0x28,0x25,0x24,0x2E,0x2F,0x2D,0x2D,
1695 0x36,0x27,0x28,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
1696 0x1F,0x28,0x28,0x2E,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,
1697 0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,
1698 0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
1699 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1700 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1701 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1702 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1703 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1704 0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x04,0x25,0x04,0x20,0x26,0x24,0x23,0x04,0x04,0x29,
1705 0x23,0x22,0x25,0x22,0x25,0x23,0x25,0x25,0x28,0x25,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
1706 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1707 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1708 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1709 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1710 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1711 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1712 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1713 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x22,0x25,0x24,0x26,
1714 0x04,0x24,0x21,0x24,0x25,0x22,0x22,0x25,0x26,0x23,0x23,0x25,0x2D,0x2F,0x2D,0x2D,
1715 0x20,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,
1716 0x28,0x28,0x28,0x2E,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,
1717 0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,
1718 0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,
1719 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1720 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1721 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1722 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1723 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1724 0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x20,0x23,0x25,0x23,0x26,0x24,0x28,0x28,0x04,0x29,
1725 0x25,0x24,0x26,0x26,0x28,0x04,0x28,0x04,0x28,0x25,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
1726 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1727 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1728 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1729 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1730 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1731 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1732 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1733 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x22,0x24,0x26,0x23,
1734 0x25,0x22,0x25,0x23,0x22,0x26,0x28,0x23,0x20,0x25,0x22,0x24,0x2D,0x2F,0x2D,0x2D,
1735 0x23,0x2A,0x2C,0x2C,0x2D,0x2D,0x2D,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2F,0x2F,0x2F,
1736 0x2F,0x2F,0x2F,0x2F,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,
1737 0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,
1738 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
1739 0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1740 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1741 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1742 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1743 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1744 0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x20,0x28,0x26,0x26,0x25,0x28,0x28,0x04,0x24,0x29,
1745 0x26,0x26,0x25,0x04,0x04,0x04,0x25,0x25,0x26,0x22,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
1746 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1747 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1748 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1749 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1750 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1751 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1752 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1753 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x22,0x25,0x23,0x26,
1754 0x25,0x28,0x25,0x28,0x26,0x28,0x28,0x24,0x25,0x25,0x22,0x04,0x2C,0x2F,0x2D,0x2D,
1755 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1756 0x2F,0x2F,0x2F,0x2F,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,
1757 0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,
1758 0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
1759 0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1760 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1761 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1762 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1763 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1764 0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x24,0x28,0x27,0x25,0x28,0x04,0x28,0x24,0x26,0x29,
1765 0x28,0x26,0x25,0x25,0x28,0x26,0x25,0x25,0x25,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
1766 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1767 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1768 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1769 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1770 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1771 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1772 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1773 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x22,0x22,0x22,0x23,
1774 0x25,0x26,0x25,0x04,0x25,0x28,0x24,0x22,0x26,0x23,0x23,0x26,0x2C,0x2F,0x2D,0x2D,
1775 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1776 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1777 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1778 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1779 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1780 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1781 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1782 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1783 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1784 0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x04,0x29,0x28,0x29,0x28,0x28,0x25,0x25,0x26,0x29,
1785 0x28,0x04,0x25,0x28,0x04,0x28,0x24,0x26,0x25,0x24,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
1786 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1787 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1788 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1789 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1790 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1791 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1792 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1793 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x22,0x26,0x24,0x26,
1794 0x28,0x04,0x22,0x26,0x25,0x25,0x22,0x24,0x25,0x23,0x22,0x25,0x2C,0x2F,0x2D,0x2D,
1795 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1796 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1797 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1798 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1799 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1800 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1801 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1802 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1803 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1804 0x2D,0x2D,0x2D,0x2D,0x2D,0x33,0x28,0x28,0x28,0x25,0x28,0x29,0x29,0x28,0x25,0x29,
1805 0x25,0x26,0x25,0x25,0x26,0x26,0x26,0x28,0x28,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
1806 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,
1807 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
1808 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,
1809 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
1810 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,
1811 0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,
1812 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
1813 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x22,0x24,0x25,0x04,
1814 0x24,0x26,0x25,0x04,0x21,0x24,0x20,0x24,0x22,0x25,0x25,0x24,0x2C,0x2F,0x2D,0x2D,
1815 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1816 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1817 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1818 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1819 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1820 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1821 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1822 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1823 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1824 0x2D,0x2D,0x2D,0x2D,0x2D,0x33,0x25,0x28,0x25,0x25,0x26,0x25,0x28,0x29,0x25,0x29,
1825 0x04,0x04,0x25,0x25,0x24,0x23,0x26,0x04,0x24,0x26,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
1826 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,
1827 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
1828 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x22,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,
1829 0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
1830 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x24,
1831 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,
1832 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
1833 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x23,0x2D,0x2D,0x2D,0x2D,0x22,0x24,0x25,0x25,
1834 0x22,0x20,0x20,0x20,0x22,0x22,0x26,0x26,0x24,0x23,0x23,0x22,0x28,0x24,0x24,0x24,
1835 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,
1836 0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,
1837 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x21,
1838 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
1839 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
1840 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
1841 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x36,0x36,0x36,
1842 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
1843 0x35,0x35,0x35,0x35,0x35,0x0C,0x0C,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,
1844 0x34,0x34,0x34,0x33,0x33,0x32,0x04,0x25,0x28,0x24,0x25,0x04,0x28,0x24,0x2B,0x29,
1845 0x27,0x24,0x25,0x04,0x25,0x25,0x04,0x25,0x22,0x04,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
1846 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,
1847 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
1848 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,
1849 0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
1850 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
1851 0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,
1852 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
1853 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x20,0x22,0x23,0x22,
1854 0x22,0x04,0x24,0x25,0x26,0x25,0x24,0x04,0x25,0x25,0x24,0x24,0x22,0x26,0x25,0x25,
1855 0x24,0x24,0x24,0x26,0x25,0x28,0x25,0x28,0x28,0x28,0x25,0x24,0x26,0x24,0x25,0x28,
1856 0x22,0x22,0x25,0x26,0x24,0x24,0x26,0x04,0x26,0x25,0x22,0x04,0x25,0x25,0x28,0x28,
1857 0x26,0x26,0x29,0x28,0x28,0x29,0x25,0x29,0x29,0x25,0x29,0x28,0x04,0x29,0x28,0x25,
1858 0x04,0x28,0x04,0x26,0x26,0x23,0x26,0x25,0x26,0x28,0x25,0x23,0x25,0x25,0x28,0x26,
1859 0x25,0x28,0x26,0x28,0x28,0x25,0x29,0x28,0x28,0x04,0x24,0x28,0x28,0x25,0x28,0x28,
1860 0x28,0x28,0x04,0x26,0x26,0x26,0x28,0x26,0x26,0x25,0x26,0x26,0x28,0x28,0x28,0x28,
1861 0x28,0x2A,0x29,0x28,0x28,0x29,0x28,0x2A,0x28,0x2A,0x28,0x26,0x28,0x28,0x28,0x28,
1862 0x04,0x04,0x28,0x24,0x25,0x25,0x24,0x20,0x20,0x04,0x25,0x25,0x25,0x26,0x24,0x25,
1863 0x24,0x23,0x28,0x26,0x24,0x28,0x04,0x26,0x26,0x04,0x04,0x04,0x23,0x26,0x25,0x22,
1864 0x28,0x25,0x24,0x04,0x24,0x25,0x25,0x27,0x04,0x28,0x28,0x28,0x28,0x04,0x28,0x29,
1865 0x04,0x04,0x25,0x25,0x23,0x26,0x23,0x04,0x24,0x23,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
1866 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,
1867 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
1868 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,
1869 0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
1870 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
1871 0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,
1872 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
1873 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x20,0x24,0x25,0x25,
1874 0x28,0x24,0x24,0x24,0x25,0x22,0x26,0x25,0x24,0x26,0x23,0x22,0x25,0x04,0x24,0x24,
1875 0x28,0x23,0x28,0x23,0x23,0x04,0x26,0x25,0x25,0x25,0x28,0x24,0x26,0x21,0x25,0x24,
1876 0x22,0x26,0x24,0x24,0x25,0x04,0x04,0x26,0x25,0x28,0x04,0x25,0x28,0x04,0x26,0x28,
1877 0x29,0x29,0x26,0x29,0x04,0x28,0x25,0x04,0x04,0x28,0x25,0x28,0x28,0x28,0x25,0x28,
1878 0x28,0x24,0x28,0x04,0x04,0x26,0x24,0x25,0x25,0x26,0x26,0x28,0x28,0x28,0x25,0x26,
1879 0x28,0x26,0x25,0x26,0x25,0x28,0x26,0x28,0x29,0x26,0x25,0x28,0x28,0x28,0x26,0x25,
1880 0x29,0x04,0x26,0x04,0x24,0x04,0x25,0x25,0x28,0x04,0x25,0x04,0x26,0x28,0x28,0x25,
1881 0x28,0x26,0x04,0x29,0x28,0x26,0x25,0x28,0x28,0x25,0x28,0x2A,0x25,0x28,0x28,0x26,
1882 0x04,0x23,0x20,0x24,0x22,0x24,0x22,0x25,0x22,0x25,0x25,0x23,0x22,0x22,0x22,0x26,
1883 0x25,0x28,0x26,0x28,0x04,0x04,0x28,0x29,0x28,0x25,0x25,0x28,0x28,0x28,0x28,0x26,
1884 0x29,0x23,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,
1885 0x28,0x28,0x25,0x23,0x25,0x23,0x23,0x23,0x25,0x24,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
1886 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,
1887 0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
1888 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,
1889 0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
1890 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
1891 0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,
1892 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
1893 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x20,0x25,0x28,0x23,
1894 0x26,0x24,0x26,0x25,0x28,0x25,0x25,0x26,0x22,0x23,0x26,0x25,0x23,0x25,0x25,0x24,
1895 0x25,0x23,0x25,0x26,0x24,0x26,0x24,0x28,0x25,0x24,0x04,0x22,0x28,0x23,0x28,0x04,
1896 0x24,0x04,0x28,0x28,0x28,0x26,0x28,0x26,0x28,0x24,0x28,0x28,0x29,0x28,0x28,0x28,
1897 0x28,0x28,0x28,0x28,0x28,0x04,0x25,0x26,0x28,0x04,0x28,0x26,0x28,0x28,0x04,0x25,
1898 0x26,0x25,0x26,0x25,0x26,0x24,0x28,0x28,0x26,0x04,0x28,0x24,0x25,0x25,0x28,0x04,
1899 0x28,0x28,0x04,0x28,0x26,0x28,0x25,0x26,0x28,0x28,0x28,0x28,0x04,0x28,0x28,0x25,
1900 0x26,0x04,0x24,0x25,0x04,0x22,0x22,0x20,0x28,0x26,0x26,0x28,0x25,0x25,0x04,0x25,
1901 0x04,0x23,0x28,0x22,0x22,0x27,0x28,0x25,0x25,0x28,0x04,0x04,0x26,0x28,0x28,0x28,
1902 0x25,0x25,0x25,0x24,0x24,0x25,0x23,0x24,0x23,0x25,0x25,0x23,0x24,0x21,0x04,0x26,
1903 0x25,0x28,0x25,0x26,0x28,0x04,0x04,0x26,0x29,0x04,0x28,0x29,0x26,0x29,0x28,0x25,
1904 0x29,0x28,0x28,0x28,0x26,0x2A,0x2A,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x2D,0x29,
1905 0x25,0x22,0x22,0x25,0x26,0x25,0x04,0x25,0x25,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
1906 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,
1907 0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
1908 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,
1909 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
1910 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,
1911 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,
1912 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
1913 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x20,0x24,0x25,0x24,
1914 0x23,0x26,0x24,0x24,0x25,0x26,0x22,0x04,0x22,0x26,0x24,0x28,0x24,0x04,0x24,0x25,
1915 0x28,0x25,0x26,0x26,0x25,0x28,0x04,0x25,0x24,0x04,0x25,0x25,0x23,0x25,0x28,0x04,
1916 0x24,0x04,0x28,0x24,0x28,0x29,0x26,0x28,0x04,0x29,0x25,0x2A,0x26,0x28,0x28,0x28,
1917 0x04,0x24,0x28,0x28,0x28,0x23,0x25,0x28,0x24,0x26,0x26,0x25,0x28,0x22,0x26,0x25,
1918 0x28,0x04,0x25,0x04,0x28,0x28,0x28,0x26,0x28,0x26,0x28,0x22,0x24,0x26,0x28,0x26,
1919 0x26,0x28,0x26,0x28,0x26,0x26,0x25,0x04,0x25,0x24,0x26,0x28,0x26,0x25,0x28,0x24,
1920 0x23,0x20,0x24,0x20,0x20,0x23,0x23,0x22,0x28,0x25,0x28,0x04,0x04,0x25,0x28,0x26,
1921 0x28,0x24,0x26,0x25,0x28,0x04,0x28,0x28,0x04,0x27,0x28,0x28,0x25,0x28,0x28,0x04,
1922 0x25,0x25,0x25,0x04,0x25,0x24,0x20,0x22,0x23,0x22,0x25,0x23,0x25,0x28,0x28,0x28,
1923 0x25,0x28,0x25,0x28,0x28,0x04,0x28,0x28,0x28,0x25,0x28,0x28,0x26,0x28,0x26,0x28,
1924 0x25,0x25,0x28,0x28,0x28,0x24,0x25,0x04,0x28,0x28,0x2A,0x28,0x28,0x28,0x28,0x29,
1925 0x23,0x23,0x23,0x25,0x04,0x24,0x23,0x24,0x21,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
1926 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1927 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1928 0x2B,0x04,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1929 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1930 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2B,0x23,0x27,0x27,0x27,0x27,0x25,0x22,
1931 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1932 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1933 0x2B,0x25,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x20,0x22,0x23,0x04,
1934 0x25,0x26,0x28,0x24,0x25,0x23,0x26,0x28,0x28,0x04,0x25,0x28,0x28,0x25,0x25,0x28,
1935 0x25,0x24,0x23,0x28,0x04,0x23,0x23,0x26,0x22,0x25,0x25,0x26,0x25,0x26,0x28,0x28,
1936 0x25,0x26,0x28,0x28,0x28,0x28,0x28,0x26,0x04,0x28,0x28,0x28,0x25,0x25,0x24,0x26,
1937 0x28,0x04,0x25,0x28,0x04,0x26,0x28,0x04,0x26,0x28,0x24,0x28,0x28,0x26,0x25,0x04,
1938 0x28,0x25,0x04,0x28,0x04,0x28,0x28,0x28,0x04,0x28,0x28,0x24,0x26,0x26,0x24,0x28,
1939 0x04,0x26,0x25,0x26,0x25,0x28,0x25,0x26,0x24,0x25,0x26,0x04,0x26,0x25,0x26,0x28,
1940 0x20,0x20,0x22,0x25,0x23,0x24,0x28,0x23,0x25,0x04,0x25,0x28,0x26,0x25,0x25,0x04,
1941 0x24,0x26,0x24,0x26,0x28,0x25,0x25,0x26,0x04,0x26,0x28,0x26,0x25,0x24,0x25,0x25,
1942 0x22,0x20,0x20,0x22,0x24,0x28,0x28,0x26,0x26,0x04,0x25,0x24,0x28,0x29,0x28,0x28,
1943 0x28,0x26,0x28,0x04,0x29,0x28,0x28,0x28,0x28,0x28,0x04,0x28,0x2A,0x2A,0x28,0x26,
1944 0x25,0x24,0x28,0x2A,0x26,0x28,0x25,0x2A,0x2A,0x28,0x28,0x28,0x28,0x24,0x22,0x29,
1945 0x24,0x22,0x23,0x25,0x23,0x22,0x25,0x23,0x22,0x22,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
1946 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1947 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1948 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1949 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1950 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1951 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1952 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1953 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x20,0x26,0x24,0x25,
1954 0x25,0x25,0x28,0x23,0x28,0x26,0x26,0x23,0x23,0x25,0x28,0x26,0x2F,0x2F,0x2F,0x2F,
1955 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1956 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1957 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1958 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1959 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1960 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,
1961 0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,
1962 0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2D,0x2D,
1963 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2C,
1964 0x2C,0x2C,0x2C,0x2C,0x2C,0x26,0x26,0x28,0x28,0x29,0x26,0x26,0x28,0x04,0x25,0x29,
1965 0x23,0x20,0x20,0x24,0x22,0x22,0x26,0x24,0x22,0x22,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
1966 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
1967 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
1968 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1969 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
1970 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,
1971 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,
1972 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
1973 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x20,0x25,0x04,0x04,
1974 0x25,0x28,0x25,0x25,0x04,0x25,0x26,0x04,0x21,0x23,0x28,0x23,0x2F,0x2F,0x2F,0x2F,
1975 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1976 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1977 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1978 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1979 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1980 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1981 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1982 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1983 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
1984 0x2F,0x2F,0x2F,0x2F,0x2F,0x23,0x28,0x04,0x28,0x26,0x25,0x23,0x28,0x26,0x24,0x29,
1985 0x20,0x20,0x23,0x23,0x22,0x20,0x24,0x22,0x20,0x24,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
1986 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
1987 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
1988 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x26,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1989 0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
1990 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x22,
1991 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,
1992 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
1993 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x23,0x2D,0x2D,0x2D,0x2D,0x20,0x25,0x26,0x23,
1994 0x22,0x28,0x25,0x28,0x25,0x25,0x25,0x24,0x22,0x25,0x26,0x24,0x2F,0x2F,0x2D,0x2D,
1995 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1996 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1997 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1998 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
1999 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2000 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2001 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2002 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2003 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2004 0x2D,0x2D,0x2D,0x2D,0x2D,0x20,0x04,0x25,0x25,0x25,0x26,0x26,0x26,0x28,0x28,0x29,
2005 0x20,0x26,0x20,0x25,0x22,0x20,0x24,0x20,0x25,0x20,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2006 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,
2007 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
2008 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2009 0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
2010 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
2011 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,
2012 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
2013 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x20,0x21,0x25,0x25,
2014 0x23,0x22,0x24,0x22,0x22,0x28,0x04,0x23,0x25,0x28,0x24,0x23,0x2F,0x2F,0x2D,0x2D,
2015 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2016 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2017 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2018 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2019 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2020 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2021 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2022 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2023 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2024 0x2D,0x2D,0x2D,0x2D,0x2D,0x36,0x26,0x28,0x28,0x04,0x04,0x04,0x28,0x04,0x23,0x29,
2025 0x22,0x22,0x23,0x26,0x23,0x20,0x22,0x25,0x22,0x20,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2026 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
2027 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
2028 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2029 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
2030 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
2031 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,
2032 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
2033 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x20,0x24,0x04,0x23,
2034 0x24,0x24,0x28,0x22,0x25,0x23,0x25,0x25,0x04,0x28,0x25,0x26,0x2F,0x2F,0x2D,0x2D,
2035 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2036 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
2037 0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x2D,
2038 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,
2039 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x17,
2040 0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,
2041 0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2042 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2043 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2044 0x2D,0x2D,0x2D,0x2D,0x2D,0x36,0x26,0x24,0x22,0x24,0x24,0x28,0x04,0x25,0x25,0x29,
2045 0x20,0x23,0x24,0x20,0x25,0x24,0x28,0x24,0x23,0x24,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2046 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,
2047 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
2048 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2049 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
2050 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
2051 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
2052 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
2053 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x20,0x25,0x24,0x28,
2054 0x24,0x23,0x23,0x25,0x24,0x26,0x24,0x25,0x24,0x25,0x25,0x04,0x2F,0x2F,0x2D,0x2D,
2055 0x32,0x33,0x33,0x34,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x35,0x35,0x35,0x35,0x36,0x36,
2056 0x36,0x36,0x20,0x23,0x2F,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
2057 0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
2058 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,
2059 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,
2060 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,
2061 0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2062 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2063 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2064 0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x28,0x28,0x22,0x04,0x28,0x25,0x04,0x04,0x24,0x29,
2065 0x24,0x22,0x25,0x21,0x22,0x23,0x22,0x26,0x26,0x23,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2066 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,
2067 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
2068 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2069 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
2070 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,
2071 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,
2072 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
2073 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x20,0x23,0x23,0x25,
2074 0x25,0x25,0x25,0x25,0x23,0x26,0x28,0x25,0x26,0x25,0x26,0x25,0x2E,0x2F,0x2D,0x2D,
2075 0x33,0x36,0x22,0x25,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,
2076 0x28,0x28,0x28,0x2C,0x2F,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
2077 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
2078 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,
2079 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,
2080 0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,
2081 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2082 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2083 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2084 0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x26,0x24,0x24,0x04,0x28,0x04,0x26,0x25,0x28,0x29,
2085 0x25,0x26,0x25,0x23,0x26,0x25,0x24,0x25,0x04,0x24,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2086 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2087 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2088 0x2B,0x24,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2089 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2090 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2B,0x28,0x27,0x27,0x27,0x27,0x25,0x22,
2091 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2092 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2093 0x2B,0x04,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x20,0x22,0x23,0x23,
2094 0x26,0x23,0x28,0x24,0x04,0x28,0x28,0x28,0x23,0x28,0x27,0x27,0x2E,0x2F,0x2D,0x2D,
2095 0x34,0x22,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2096 0x00,0x28,0x28,0x2C,0x2F,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
2097 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
2098 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2099 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,
2100 0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,
2101 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2102 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2103 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2104 0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x28,0x28,0x25,0x26,0x26,0x26,0x04,0x24,0x20,0x29,
2105 0x25,0x26,0x22,0x25,0x24,0x25,0x24,0x04,0x26,0x25,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2106 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2107 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2108 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2109 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2110 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2111 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2112 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2113 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x20,0x25,0x24,0x26,
2114 0x04,0x25,0x26,0x26,0x04,0x28,0x23,0x04,0x04,0x29,0x28,0x28,0x2E,0x2F,0x2D,0x2D,
2115 0x34,0x25,0x27,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
2116 0x1F,0x28,0x28,0x2D,0x2F,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
2117 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,
2118 0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,
2119 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,
2120 0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,
2121 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2122 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2123 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2124 0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x26,0x28,0x25,0x25,0x28,0x28,0x28,0x24,0x04,0x29,
2125 0x26,0x23,0x23,0x25,0x25,0x04,0x25,0x25,0x26,0x24,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2126 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
2127 0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
2128 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2129 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
2130 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,
2131 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,
2132 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
2133 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x20,0x28,0x25,0x26,
2134 0x25,0x25,0x26,0x26,0x25,0x04,0x26,0x28,0x28,0x28,0x26,0x26,0x2E,0x2F,0x2D,0x2D,
2135 0x35,0x27,0x27,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
2136 0x1F,0x28,0x28,0x2D,0x2F,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
2137 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,
2138 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,
2139 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,
2140 0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,
2141 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2142 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2143 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2144 0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x24,0x25,0x24,0x28,0x23,0x25,0x22,0x04,0x25,0x29,
2145 0x25,0x25,0x25,0x28,0x25,0x24,0x23,0x25,0x23,0x23,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2146 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
2147 0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2148 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x24,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2149 0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
2150 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x28,
2151 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,
2152 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
2153 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x20,0x25,0x23,0x28,
2154 0x23,0x26,0x29,0x04,0x28,0x29,0x28,0x28,0x26,0x28,0x28,0x04,0x2E,0x2F,0x2D,0x2D,
2155 0x36,0x27,0x28,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
2156 0x1F,0x28,0x28,0x2E,0x2F,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
2157 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,
2158 0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,
2159 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,
2160 0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,
2161 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2162 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2163 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2164 0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x04,0x04,0x25,0x26,0x26,0x26,0x28,0x25,0x28,0x29,
2165 0x04,0x24,0x23,0x24,0x23,0x24,0x22,0x25,0x24,0x23,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2166 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,
2167 0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
2168 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2169 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
2170 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
2171 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,
2172 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
2173 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x20,0x28,0x25,0x28,
2174 0x28,0x25,0x04,0x25,0x29,0x26,0x28,0x28,0x28,0x25,0x23,0x04,0x2D,0x2F,0x2D,0x2D,
2175 0x20,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,
2176 0x28,0x28,0x28,0x2E,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,
2177 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,
2178 0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,
2179 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,
2180 0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,
2181 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2182 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2183 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2184 0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x25,0x28,0x26,0x28,0x28,0x25,0x28,0x28,0x28,0x29,
2185 0x23,0x25,0x26,0x28,0x22,0x25,0x04,0x28,0x28,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2186 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
2187 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
2188 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2189 0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
2190 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
2191 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,
2192 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
2193 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x20,0x29,0x29,0x25,
2194 0x28,0x04,0x04,0x28,0x28,0x28,0x28,0x28,0x25,0x28,0x25,0x28,0x2D,0x2F,0x2D,0x2D,
2195 0x23,0x2A,0x2C,0x2C,0x2D,0x2D,0x2D,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2F,0x2F,0x2F,
2196 0x2F,0x2F,0x2F,0x2F,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
2197 0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,
2198 0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,
2199 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,
2200 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,
2201 0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2202 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2203 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2204 0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x28,0x26,0x04,0x2A,0x04,0x24,0x28,0x29,0x04,0x29,
2205 0x25,0x25,0x25,0x04,0x04,0x24,0x28,0x28,0x28,0x25,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2206 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,
2207 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
2208 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2209 0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
2210 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
2211 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,
2212 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
2213 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x20,0x28,0x28,0x25,
2214 0x28,0x28,0x28,0x29,0x28,0x28,0x27,0x25,0x04,0x28,0x26,0x24,0x2C,0x2F,0x2D,0x2D,
2215 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
2216 0x2F,0x2F,0x2F,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
2217 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,
2218 0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,
2219 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x17,
2220 0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,
2221 0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2222 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2223 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2224 0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x04,0x28,0x29,0x28,0x04,0x2A,0x2A,0x2A,0x28,0x29,
2225 0x28,0x25,0x25,0x04,0x24,0x28,0x04,0x26,0x28,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2226 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,
2227 0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
2228 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2229 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
2230 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,
2231 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,
2232 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
2233 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x36,0x28,0x29,0x28,
2234 0x25,0x29,0x28,0x2A,0x25,0x24,0x28,0x25,0x24,0x26,0x04,0x22,0x2C,0x2F,0x2D,0x2D,
2235 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2236 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2237 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2238 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2239 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2240 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2241 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2242 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2243 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2244 0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x28,0x28,0x2A,0x25,0x28,0x04,0x25,0x26,0x28,0x29,
2245 0x25,0x25,0x25,0x26,0x25,0x24,0x25,0x28,0x28,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2246 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2247 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2248 0x2B,0x04,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2249 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2250 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2B,0x26,0x27,0x27,0x27,0x27,0x25,0x22,
2251 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2252 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2253 0x2B,0x28,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x36,0x28,0x26,0x04,
2254 0x28,0x26,0x24,0x22,0x25,0x25,0x25,0x28,0x22,0x20,0x26,0x22,0x2C,0x2F,0x2D,0x2D,
2255 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2256 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2257 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2258 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2259 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2260 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2261 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2262 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2263 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2264 0x2D,0x2D,0x2D,0x2D,0x2D,0x33,0x25,0x25,0x25,0x28,0x28,0x2A,0x04,0x29,0x28,0x29,
2265 0x04,0x23,0x26,0x28,0x25,0x28,0x04,0x28,0x24,0x04,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2266 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2267 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2268 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2269 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2270 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2271 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2272 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2273 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x36,0x28,0x28,0x28,
2274 0x28,0x25,0x25,0x28,0x22,0x24,0x25,0x25,0x25,0x26,0x04,0x28,0x2C,0x2F,0x2D,0x2D,
2275 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2276 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2277 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2278 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2279 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2280 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2281 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2282 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2283 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2284 0x2D,0x2D,0x2D,0x2D,0x2D,0x33,0x25,0x04,0x28,0x25,0x04,0x2A,0x28,0x2A,0x2B,0x29,
2285 0x24,0x28,0x22,0x23,0x24,0x26,0x04,0x25,0x24,0x25,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2286 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
2287 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
2288 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2289 0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
2290 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,
2291 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
2292 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
2293 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x36,0x28,0x26,0x28,
2294 0x25,0x22,0x26,0x23,0x23,0x25,0x22,0x20,0x26,0x20,0x23,0x04,0x28,0x24,0x24,0x24,
2295 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,
2296 0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,
2297 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x21,
2298 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
2299 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
2300 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
2301 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x36,0x36,0x36,
2302 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
2303 0x35,0x35,0x35,0x35,0x35,0x0C,0x0C,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,
2304 0x34,0x34,0x34,0x33,0x33,0x32,0x29,0x25,0x28,0x28,0x2A,0x28,0x29,0x28,0x25,0x29,
2305 0x04,0x23,0x23,0x24,0x24,0x04,0x28,0x24,0x26,0x25,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2306 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
2307 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
2308 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x28,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2309 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
2310 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x24,
2311 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
2312 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
2313 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x22,0x2D,0x2D,0x2D,0x2D,0x36,0x25,0x25,0x20,
2314 0x24,0x23,0x24,0x20,0x22,0x24,0x25,0x24,0x24,0x25,0x25,0x24,0x28,0x28,0x28,0x04,
2315 0x28,0x25,0x28,0x28,0x25,0x04,0x28,0x28,0x04,0x25,0x25,0x28,0x04,0x28,0x28,0x26,
2316 0x28,0x24,0x24,0x20,0x22,0x04,0x25,0x23,0x21,0x21,0x26,0x25,0x21,0x25,0x28,0x23,
2317 0x25,0x25,0x22,0x23,0x25,0x22,0x22,0x22,0x20,0x23,0x25,0x23,0x28,0x04,0x04,0x28,
2318 0x24,0x25,0x25,0x25,0x20,0x22,0x23,0x24,0x26,0x25,0x24,0x26,0x26,0x28,0x22,0x24,
2319 0x26,0x26,0x25,0x24,0x23,0x23,0x24,0x25,0x26,0x24,0x25,0x25,0x24,0x20,0x20,0x22,
2320 0x28,0x25,0x25,0x24,0x23,0x25,0x24,0x25,0x24,0x25,0x22,0x23,0x04,0x04,0x25,0x23,
2321 0x25,0x28,0x28,0x25,0x22,0x24,0x25,0x25,0x25,0x04,0x28,0x25,0x28,0x26,0x24,0x26,
2322 0x25,0x23,0x04,0x25,0x26,0x25,0x25,0x24,0x04,0x25,0x24,0x26,0x04,0x28,0x29,0x28,
2323 0x28,0x28,0x2A,0x28,0x28,0x28,0x29,0x28,0x26,0x26,0x04,0x24,0x22,0x04,0x25,0x28,
2324 0x25,0x26,0x29,0x25,0x28,0x24,0x28,0x26,0x29,0x28,0x25,0x28,0x04,0x26,0x04,0x29,
2325 0x04,0x04,0x23,0x28,0x28,0x25,0x25,0x23,0x04,0x26,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2326 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,
2327 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
2328 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2329 0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
2330 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
2331 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,
2332 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
2333 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x36,0x20,0x22,0x23,
2334 0x20,0x24,0x22,0x24,0x22,0x20,0x24,0x25,0x26,0x24,0x25,0x28,0x22,0x04,0x28,0x2A,
2335 0x28,0x28,0x26,0x29,0x28,0x29,0x28,0x26,0x25,0x25,0x26,0x24,0x28,0x26,0x28,0x23,
2336 0x22,0x20,0x04,0x26,0x24,0x22,0x28,0x28,0x25,0x23,0x04,0x24,0x22,0x04,0x24,0x04,
2337 0x25,0x28,0x25,0x28,0x25,0x24,0x26,0x28,0x04,0x24,0x22,0x04,0x23,0x04,0x04,0x24,
2338 0x26,0x26,0x26,0x25,0x25,0x28,0x22,0x23,0x28,0x25,0x28,0x25,0x22,0x25,0x23,0x28,
2339 0x04,0x26,0x28,0x25,0x28,0x28,0x24,0x25,0x26,0x25,0x28,0x22,0x22,0x25,0x25,0x28,
2340 0x25,0x22,0x25,0x20,0x25,0x20,0x25,0x24,0x22,0x24,0x26,0x26,0x04,0x26,0x24,0x26,
2341 0x25,0x26,0x24,0x04,0x25,0x26,0x25,0x24,0x26,0x24,0x26,0x26,0x04,0x28,0x26,0x24,
2342 0x28,0x25,0x04,0x25,0x28,0x04,0x22,0x24,0x04,0x27,0x26,0x28,0x04,0x25,0x25,0x28,
2343 0x28,0x04,0x28,0x29,0x23,0x25,0x28,0x26,0x25,0x22,0x25,0x24,0x22,0x22,0x28,0x29,
2344 0x28,0x28,0x28,0x28,0x25,0x04,0x04,0x26,0x29,0x25,0x24,0x04,0x26,0x22,0x24,0x29,
2345 0x25,0x28,0x28,0x26,0x04,0x25,0x23,0x04,0x25,0x26,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2346 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
2347 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
2348 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2349 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
2350 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
2351 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
2352 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
2353 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x36,0x20,0x25,0x22,
2354 0x24,0x23,0x22,0x25,0x25,0x28,0x26,0x25,0x04,0x24,0x28,0x28,0x29,0x28,0x25,0x2A,
2355 0x28,0x28,0x04,0x28,0x25,0x25,0x22,0x22,0x26,0x20,0x20,0x26,0x24,0x24,0x28,0x26,
2356 0x28,0x25,0x28,0x28,0x25,0x25,0x26,0x28,0x28,0x04,0x28,0x25,0x24,0x25,0x04,0x28,
2357 0x26,0x26,0x28,0x04,0x26,0x25,0x26,0x24,0x28,0x28,0x25,0x24,0x28,0x04,0x25,0x25,
2358 0x25,0x25,0x25,0x04,0x24,0x04,0x24,0x25,0x04,0x26,0x28,0x25,0x28,0x24,0x25,0x26,
2359 0x25,0x26,0x26,0x04,0x28,0x26,0x25,0x26,0x25,0x25,0x25,0x22,0x20,0x22,0x25,0x23,
2360 0x20,0x20,0x22,0x28,0x28,0x22,0x24,0x23,0x26,0x25,0x28,0x25,0x28,0x28,0x28,0x23,
2361 0x25,0x25,0x24,0x28,0x28,0x26,0x26,0x25,0x25,0x28,0x24,0x25,0x24,0x28,0x25,0x28,
2362 0x28,0x28,0x04,0x25,0x28,0x28,0x25,0x28,0x28,0x28,0x29,0x28,0x28,0x28,0x28,0x28,
2363 0x29,0x28,0x27,0x27,0x25,0x24,0x24,0x25,0x04,0x26,0x25,0x25,0x28,0x29,0x24,0x26,
2364 0x25,0x26,0x25,0x24,0x27,0x25,0x25,0x25,0x04,0x28,0x04,0x04,0x28,0x28,0x28,0x29,
2365 0x28,0x26,0x04,0x04,0x22,0x25,0x22,0x24,0x25,0x24,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2366 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,
2367 0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
2368 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2369 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
2370 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
2371 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
2372 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
2373 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x36,0x25,0x25,0x24,
2374 0x24,0x26,0x26,0x04,0x25,0x25,0x28,0x28,0x04,0x2A,0x04,0x28,0x28,0x28,0x26,0x28,
2375 0x28,0x28,0x26,0x28,0x22,0x23,0x25,0x22,0x26,0x28,0x24,0x25,0x28,0x26,0x28,0x28,
2376 0x04,0x26,0x24,0x28,0x25,0x25,0x28,0x25,0x04,0x25,0x22,0x26,0x26,0x24,0x26,0x04,
2377 0x28,0x04,0x28,0x25,0x25,0x04,0x28,0x25,0x24,0x26,0x24,0x04,0x04,0x24,0x28,0x25,
2378 0x04,0x26,0x26,0x28,0x25,0x25,0x23,0x26,0x04,0x28,0x26,0x25,0x28,0x25,0x24,0x04,
2379 0x24,0x22,0x26,0x24,0x28,0x28,0x28,0x26,0x28,0x26,0x24,0x24,0x20,0x24,0x23,0x20,
2380 0x24,0x28,0x24,0x26,0x25,0x28,0x26,0x04,0x26,0x28,0x25,0x26,0x24,0x23,0x26,0x26,
2381 0x28,0x26,0x28,0x22,0x25,0x26,0x25,0x25,0x26,0x04,0x24,0x28,0x04,0x25,0x28,0x26,
2382 0x28,0x28,0x29,0x26,0x04,0x04,0x28,0x28,0x25,0x28,0x25,0x28,0x26,0x28,0x26,0x28,
2383 0x04,0x28,0x25,0x22,0x28,0x26,0x26,0x28,0x04,0x26,0x29,0x25,0x28,0x24,0x26,0x26,
2384 0x26,0x25,0x25,0x25,0x28,0x28,0x26,0x26,0x04,0x24,0x23,0x24,0x25,0x28,0x04,0x29,
2385 0x22,0x22,0x21,0x24,0x25,0x25,0x26,0x23,0x26,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2386 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,
2387 0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
2388 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2389 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
2390 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,
2391 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
2392 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
2393 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x36,0x25,0x04,0x25,
2394 0x04,0x25,0x28,0x04,0x26,0x28,0x28,0x28,0x24,0x25,0x28,0x28,0x26,0x04,0x28,0x25,
2395 0x26,0x26,0x24,0x23,0x04,0x28,0x24,0x28,0x24,0x26,0x28,0x04,0x26,0x26,0x24,0x25,
2396 0x24,0x2A,0x26,0x29,0x28,0x28,0x04,0x26,0x28,0x25,0x26,0x26,0x26,0x28,0x26,0x25,
2397 0x26,0x26,0x25,0x25,0x25,0x26,0x04,0x04,0x25,0x26,0x25,0x24,0x26,0x26,0x24,0x25,
2398 0x26,0x28,0x25,0x28,0x26,0x28,0x26,0x28,0x28,0x26,0x25,0x25,0x25,0x25,0x28,0x23,
2399 0x28,0x28,0x22,0x25,0x04,0x28,0x04,0x24,0x24,0x23,0x25,0x04,0x25,0x22,0x20,0x04,
2400 0x26,0x25,0x24,0x26,0x26,0x28,0x26,0x26,0x04,0x26,0x25,0x24,0x25,0x24,0x24,0x28,
2401 0x24,0x25,0x04,0x24,0x25,0x26,0x23,0x24,0x27,0x28,0x28,0x28,0x29,0x28,0x25,0x28,
2402 0x2A,0x2A,0x2A,0x29,0x2A,0x28,0x26,0x28,0x28,0x26,0x28,0x26,0x24,0x25,0x28,0x26,
2403 0x25,0x26,0x04,0x28,0x04,0x28,0x04,0x24,0x28,0x04,0x28,0x28,0x29,0x04,0x28,0x23,
2404 0x04,0x28,0x24,0x28,0x26,0x28,0x28,0x28,0x28,0x27,0x25,0x04,0x04,0x28,0x26,0x29,
2405 0x22,0x25,0x26,0x04,0x25,0x23,0x26,0x23,0x23,0x25,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2406 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2407 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2408 0x2B,0x25,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2409 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2410 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2B,0x20,0x27,0x27,0x27,0x27,0x25,0x22,
2411 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2412 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2413 0x2B,0x23,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x36,0x25,0x24,0x26,
2414 0x29,0x28,0x29,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x26,0x25,0x2F,0x2F,0x2F,0x2F,
2415 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
2416 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
2417 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
2418 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
2419 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
2420 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,
2421 0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,
2422 0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2D,0x2D,
2423 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2C,
2424 0x2C,0x2C,0x2C,0x2C,0x2C,0x26,0x28,0x26,0x28,0x28,0x25,0x26,0x28,0x29,0x25,0x29,
2425 0x24,0x23,0x21,0x22,0x28,0x25,0x23,0x21,0x28,0x24,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2426 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2427 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2428 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2429 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2430 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2431 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2432 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2433 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x36,0x25,0x28,0x04,
2434 0x04,0x28,0x28,0x28,0x29,0x28,0x26,0x28,0x26,0x24,0x28,0x28,0x2F,0x2F,0x2F,0x2F,
2435 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
2436 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
2437 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
2438 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
2439 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
2440 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
2441 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
2442 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
2443 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
2444 0x2F,0x2F,0x2F,0x2F,0x2F,0x23,0x28,0x26,0x04,0x28,0x28,0x04,0x29,0x28,0x04,0x29,
2445 0x22,0x26,0x22,0x22,0x23,0x04,0x24,0x25,0x24,0x24,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2446 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
2447 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
2448 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2449 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
2450 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,
2451 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,
2452 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
2453 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x36,0x28,0x25,0x29,
2454 0x26,0x26,0x28,0x28,0x26,0x28,0x28,0x26,0x04,0x25,0x04,0x22,0x2F,0x2F,0x2D,0x2D,
2455 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2456 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2457 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2458 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2459 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2460 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2461 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2462 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2463 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2464 0x2D,0x2D,0x2D,0x2D,0x2D,0x20,0x25,0x28,0x28,0x28,0x28,0x25,0x25,0x25,0x27,0x29,
2465 0x23,0x24,0x23,0x26,0x04,0x28,0x25,0x26,0x23,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2466 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,
2467 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
2468 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x24,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2469 0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
2470 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x24,
2471 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
2472 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
2473 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x24,0x2D,0x2D,0x2D,0x2D,0x36,0x25,0x28,0x28,
2474 0x28,0x28,0x25,0x28,0x24,0x04,0x26,0x04,0x28,0x28,0x26,0x20,0x2F,0x2F,0x2D,0x2D,
2475 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2476 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2477 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2478 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2479 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2480 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2481 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2482 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2483 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2484 0x2D,0x2D,0x2D,0x2D,0x2D,0x36,0x28,0x28,0x04,0x04,0x2A,0x04,0x28,0x24,0x28,0x29,
2485 0x24,0x24,0x25,0x23,0x28,0x04,0x26,0x26,0x25,0x04,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2486 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
2487 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
2488 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2489 0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
2490 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
2491 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,
2492 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
2493 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x36,0x25,0x26,0x28,
2494 0x26,0x04,0x28,0x04,0x28,0x25,0x24,0x26,0x25,0x22,0x25,0x28,0x2F,0x2F,0x2D,0x2D,
2495 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2496 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
2497 0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x2D,
2498 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
2499 0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2500 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2501 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2502 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2503 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2504 0x2D,0x2D,0x2D,0x2D,0x2D,0x36,0x28,0x04,0x28,0x28,0x2A,0x29,0x28,0x28,0x2A,0x29,
2505 0x28,0x23,0x04,0x25,0x28,0x22,0x26,0x28,0x23,0x04,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2506 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
2507 0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
2508 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2509 0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
2510 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
2511 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,
2512 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
2513 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x36,0x25,0x26,0x24,
2514 0x26,0x28,0x24,0x04,0x25,0x24,0x22,0x20,0x20,0x23,0x24,0x25,0x2F,0x2F,0x2D,0x2D,
2515 0x32,0x33,0x33,0x34,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x35,0x35,0x35,0x35,0x36,0x36,
2516 0x36,0x36,0x20,0x23,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
2517 0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
2518 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
2519 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2520 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2521 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2522 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2523 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2524 0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x28,0x28,0x28,0x28,0x28,0x26,0x04,0x04,0x28,0x29,
2525 0x23,0x25,0x04,0x28,0x25,0x25,0x22,0x24,0x25,0x04,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2526 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
2527 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2528 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2529 0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
2530 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
2531 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,
2532 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
2533 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x36,0x28,0x25,0x26,
2534 0x24,0x20,0x22,0x20,0x22,0x26,0x22,0x23,0x25,0x04,0x25,0x04,0x2E,0x2F,0x2D,0x2D,
2535 0x33,0x36,0x22,0x25,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,
2536 0x28,0x28,0x28,0x2C,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,
2537 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
2538 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,
2539 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2540 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2541 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2542 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2543 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2544 0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x04,0x29,0x29,0x04,0x28,0x04,0x22,0x22,0x20,0x29,
2545 0x04,0x25,0x25,0x23,0x23,0x25,0x22,0x25,0x23,0x26,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2546 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
2547 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
2548 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2549 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
2550 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,
2551 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,
2552 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
2553 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x36,0x20,0x25,0x25,
2554 0x25,0x22,0x04,0x23,0x04,0x24,0x04,0x04,0x24,0x04,0x04,0x28,0x2E,0x2F,0x2D,0x2D,
2555 0x34,0x22,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
2556 0x00,0x28,0x28,0x2C,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,
2557 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
2558 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,
2559 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2560 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2561 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2562 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2563 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2564 0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x29,0x28,0x27,0x25,0x26,0x22,0x24,0x24,0x20,0x29,
2565 0x28,0x24,0x25,0x24,0x26,0x22,0x28,0x24,0x22,0x22,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2566 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2567 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2568 0x2B,0x25,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2569 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2570 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2B,0x28,0x27,0x27,0x27,0x27,0x25,0x22,
2571 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2572 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2573 0x2B,0x28,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x36,0x25,0x25,0x25,
2574 0x25,0x25,0x04,0x23,0x04,0x25,0x26,0x25,0x25,0x22,0x26,0x28,0x2E,0x2F,0x2D,0x2D,
2575 0x34,0x25,0x27,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
2576 0x1F,0x28,0x28,0x2D,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
2577 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
2578 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
2579 0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2580 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2581 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2582 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2583 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2584 0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x04,0x04,0x23,0x25,0x24,0x25,0x23,0x23,0x04,0x29,
2585 0x23,0x26,0x23,0x25,0x25,0x25,0x04,0x22,0x24,0x25,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2586 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2587 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2588 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2589 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2590 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2591 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2592 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2593 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x04,0x24,0x28,
2594 0x25,0x25,0x24,0x23,0x24,0x25,0x28,0x23,0x23,0x04,0x04,0x22,0x2E,0x2F,0x2D,0x2D,
2595 0x35,0x27,0x27,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
2596 0x1F,0x28,0x28,0x2D,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
2597 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
2598 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
2599 0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2600 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2601 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2602 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2603 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2604 0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x25,0x23,0x22,0x04,0x23,0x22,0x28,0x28,0x25,0x29,
2605 0x25,0x22,0x23,0x24,0x24,0x20,0x23,0x26,0x23,0x22,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2606 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
2607 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
2608 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2609 0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
2610 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,
2611 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
2612 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
2613 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x35,0x22,0x24,0x25,
2614 0x25,0x24,0x25,0x22,0x25,0x25,0x26,0x25,0x26,0x22,0x28,0x28,0x2E,0x2F,0x2D,0x2D,
2615 0x36,0x27,0x28,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
2616 0x1F,0x28,0x28,0x2E,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,
2617 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
2618 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,
2619 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2620 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2621 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2622 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2623 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2624 0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x25,0x20,0x25,0x24,0x25,0x26,0x04,0x24,0x28,0x29,
2625 0x23,0x23,0x25,0x24,0x24,0x04,0x04,0x22,0x25,0x22,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2626 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,
2627 0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
2628 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x22,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2629 0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
2630 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x28,
2631 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
2632 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
2633 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x35,0x24,0x28,0x26,
2634 0x25,0x04,0x25,0x28,0x24,0x22,0x25,0x26,0x23,0x25,0x25,0x28,0x2D,0x2F,0x2D,0x2D,
2635 0x20,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,
2636 0x28,0x28,0x28,0x2E,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,
2637 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
2638 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,
2639 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2640 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2641 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2642 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2643 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2644 0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x22,0x24,0x04,0x25,0x25,0x04,0x04,0x28,0x04,0x29,
2645 0x25,0x23,0x25,0x23,0x25,0x21,0x22,0x25,0x22,0x23,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2646 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
2647 0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
2648 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2649 0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
2650 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
2651 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,
2652 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
2653 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x35,0x25,0x25,0x23,
2654 0x24,0x24,0x24,0x25,0x21,0x24,0x25,0x25,0x22,0x28,0x04,0x22,0x2D,0x2F,0x2D,0x2D,
2655 0x23,0x2A,0x2C,0x2C,0x2D,0x2D,0x2D,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2F,0x2F,0x2F,
2656 0x2F,0x2F,0x2F,0x2F,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,
2657 0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,
2658 0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
2659 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2660 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2661 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2662 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2663 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2664 0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x23,0x28,0x04,0x23,0x04,0x28,0x26,0x26,0x27,0x29,
2665 0x26,0x26,0x25,0x22,0x22,0x20,0x25,0x20,0x25,0x04,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2666 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
2667 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
2668 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2669 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
2670 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
2671 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
2672 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
2673 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x35,0x24,0x04,0x28,
2674 0x22,0x26,0x24,0x24,0x25,0x24,0x25,0x28,0x25,0x24,0x24,0x25,0x2C,0x2F,0x2D,0x2D,
2675 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
2676 0x2F,0x2F,0x2F,0x2F,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,
2677 0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,
2678 0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
2679 0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2680 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2681 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2682 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2683 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2684 0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x26,0x04,0x28,0x26,0x26,0x04,0x04,0x25,0x25,0x29,
2685 0x25,0x22,0x24,0x22,0x20,0x23,0x20,0x25,0x24,0x25,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2686 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
2687 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
2688 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2689 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
2690 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
2691 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
2692 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
2693 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x35,0x04,0x04,0x25,
2694 0x23,0x22,0x25,0x04,0x25,0x26,0x28,0x25,0x24,0x04,0x28,0x25,0x2C,0x2F,0x2D,0x2D,
2695 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2696 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2697 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2698 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2699 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2700 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2701 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2702 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2703 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2704 0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x25,0x25,0x28,0x04,0x26,0x25,0x26,0x28,0x26,0x29,
2705 0x20,0x04,0x22,0x04,0x24,0x24,0x26,0x23,0x25,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2706 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
2707 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
2708 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2709 0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
2710 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,
2711 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,
2712 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
2713 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x35,0x25,0x28,0x24,
2714 0x22,0x24,0x22,0x04,0x25,0x23,0x22,0x25,0x23,0x24,0x04,0x25,0x2C,0x2F,0x2D,0x2D,
2715 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2716 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2717 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2718 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2719 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2720 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2721 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2722 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2723 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2724 0x2D,0x2D,0x2D,0x2D,0x2D,0x33,0x04,0x28,0x04,0x28,0x04,0x26,0x28,0x25,0x28,0x29,
2725 0x24,0x20,0x26,0x21,0x25,0x22,0x25,0x28,0x04,0x23,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2726 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2727 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2728 0x2B,0x28,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2729 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2730 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2B,0x28,0x27,0x27,0x27,0x27,0x25,0x22,
2731 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2732 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2733 0x2B,0x25,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x35,0x22,0x04,0x28,
2734 0x25,0x23,0x23,0x28,0x25,0x25,0x24,0x24,0x23,0x28,0x24,0x26,0x2C,0x2F,0x2D,0x2D,
2735 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2736 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2737 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2738 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2739 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2740 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2741 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2742 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2743 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2744 0x2D,0x2D,0x2D,0x2D,0x2D,0x33,0x25,0x26,0x28,0x04,0x04,0x24,0x28,0x25,0x28,0x29,
2745 0x20,0x25,0x04,0x23,0x25,0x22,0x22,0x25,0x25,0x25,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2746 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2747 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2748 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2749 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2750 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2751 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2752 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2753 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x25,0x28,0x24,
2754 0x04,0x25,0x24,0x24,0x26,0x25,0x22,0x28,0x23,0x26,0x28,0x24,0x28,0x24,0x24,0x24,
2755 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,
2756 0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,
2757 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x21,
2758 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
2759 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
2760 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
2761 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x36,0x36,0x36,
2762 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
2763 0x35,0x35,0x35,0x35,0x35,0x0C,0x0C,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,
2764 0x34,0x34,0x34,0x33,0x33,0x32,0x28,0x04,0x25,0x04,0x26,0x04,0x04,0x28,0x04,0x29,
2765 0x22,0x26,0x04,0x24,0x22,0x25,0x26,0x23,0x22,0x22,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2766 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
2767 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
2768 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2769 0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
2770 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,
2771 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,
2772 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
2773 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x35,0x26,0x21,0x24,
2774 0x26,0x25,0x23,0x25,0x23,0x25,0x25,0x25,0x24,0x23,0x25,0x26,0x26,0x23,0x25,0x25,
2775 0x04,0x26,0x24,0x24,0x21,0x25,0x25,0x25,0x25,0x26,0x04,0x26,0x25,0x04,0x26,0x26,
2776 0x04,0x28,0x28,0x28,0x28,0x25,0x26,0x04,0x23,0x25,0x25,0x25,0x26,0x26,0x24,0x26,
2777 0x28,0x26,0x25,0x04,0x25,0x26,0x04,0x23,0x23,0x20,0x25,0x22,0x20,0x04,0x22,0x23,
2778 0x24,0x04,0x22,0x24,0x26,0x24,0x28,0x28,0x04,0x27,0x04,0x28,0x04,0x25,0x26,0x28,
2779 0x28,0x29,0x28,0x26,0x28,0x25,0x28,0x28,0x28,0x28,0x28,0x2A,0x28,0x29,0x28,0x29,
2780 0x2A,0x28,0x28,0x25,0x28,0x28,0x28,0x04,0x26,0x28,0x28,0x2B,0x29,0x29,0x28,0x24,
2781 0x28,0x25,0x29,0x04,0x28,0x25,0x2A,0x2A,0x28,0x28,0x28,0x29,0x2B,0x28,0x2A,0x2A,
2782 0x04,0x28,0x28,0x28,0x04,0x28,0x22,0x22,0x20,0x20,0x22,0x20,0x20,0x22,0x23,0x04,
2783 0x04,0x26,0x22,0x24,0x24,0x04,0x24,0x25,0x23,0x25,0x25,0x28,0x25,0x25,0x26,0x28,
2784 0x25,0x26,0x04,0x26,0x04,0x24,0x28,0x28,0x28,0x28,0x28,0x26,0x04,0x04,0x26,0x29,
2785 0x22,0x22,0x21,0x20,0x20,0x24,0x25,0x20,0x23,0x24,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2786 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,
2787 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
2788 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x28,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2789 0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
2790 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,
2791 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,
2792 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
2793 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x35,0x24,0x23,0x26,
2794 0x22,0x24,0x04,0x04,0x26,0x24,0x26,0x23,0x25,0x28,0x04,0x25,0x26,0x22,0x23,0x23,
2795 0x23,0x28,0x23,0x25,0x04,0x23,0x23,0x23,0x25,0x25,0x25,0x04,0x28,0x28,0x04,0x04,
2796 0x25,0x26,0x26,0x26,0x26,0x28,0x28,0x28,0x28,0x24,0x25,0x26,0x24,0x28,0x28,0x04,
2797 0x24,0x25,0x04,0x23,0x26,0x26,0x25,0x25,0x26,0x20,0x25,0x23,0x26,0x04,0x25,0x25,
2798 0x22,0x20,0x26,0x26,0x28,0x26,0x28,0x04,0x26,0x24,0x28,0x26,0x04,0x28,0x28,0x28,
2799 0x28,0x28,0x25,0x28,0x25,0x26,0x28,0x29,0x28,0x28,0x28,0x2A,0x28,0x28,0x25,0x2A,
2800 0x26,0x2B,0x29,0x28,0x2B,0x2B,0x2B,0x28,0x28,0x28,0x28,0x28,0x04,0x29,0x26,0x28,
2801 0x29,0x28,0x28,0x2B,0x04,0x29,0x25,0x04,0x28,0x24,0x25,0x2A,0x28,0x04,0x28,0x28,
2802 0x28,0x28,0x28,0x04,0x21,0x23,0x25,0x23,0x24,0x26,0x24,0x25,0x25,0x24,0x28,0x26,
2803 0x24,0x28,0x26,0x24,0x25,0x04,0x24,0x23,0x04,0x28,0x25,0x22,0x28,0x24,0x28,0x28,
2804 0x28,0x28,0x28,0x28,0x28,0x04,0x28,0x23,0x23,0x04,0x04,0x26,0x28,0x24,0x25,0x29,
2805 0x20,0x20,0x20,0x26,0x25,0x22,0x28,0x25,0x04,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2806 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
2807 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
2808 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2809 0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
2810 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
2811 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
2812 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
2813 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x35,0x04,0x24,0x23,
2814 0x28,0x04,0x04,0x25,0x25,0x24,0x22,0x24,0x24,0x26,0x25,0x25,0x25,0x28,0x28,0x26,
2815 0x24,0x24,0x04,0x23,0x04,0x25,0x04,0x26,0x26,0x26,0x25,0x04,0x26,0x24,0x25,0x28,
2816 0x26,0x04,0x26,0x28,0x23,0x28,0x28,0x23,0x25,0x04,0x25,0x25,0x26,0x28,0x28,0x25,
2817 0x26,0x28,0x26,0x22,0x26,0x23,0x23,0x22,0x22,0x20,0x26,0x04,0x25,0x28,0x25,0x23,
2818 0x23,0x24,0x24,0x28,0x25,0x28,0x28,0x26,0x26,0x23,0x26,0x04,0x28,0x26,0x25,0x24,
2819 0x04,0x28,0x26,0x28,0x28,0x28,0x28,0x28,0x22,0x25,0x28,0x26,0x28,0x23,0x24,0x26,
2820 0x28,0x26,0x29,0x28,0x29,0x28,0x25,0x28,0x25,0x04,0x28,0x28,0x28,0x2A,0x25,0x2A,
2821 0x2B,0x28,0x29,0x04,0x28,0x28,0x04,0x28,0x28,0x28,0x25,0x28,0x04,0x28,0x26,0x28,
2822 0x26,0x24,0x23,0x25,0x23,0x25,0x04,0x24,0x24,0x28,0x28,0x25,0x04,0x26,0x28,0x04,
2823 0x04,0x25,0x28,0x26,0x04,0x04,0x28,0x24,0x28,0x28,0x26,0x28,0x04,0x28,0x25,0x24,
2824 0x25,0x28,0x28,0x26,0x24,0x28,0x28,0x26,0x26,0x04,0x28,0x28,0x25,0x25,0x27,0x29,
2825 0x24,0x26,0x23,0x26,0x25,0x25,0x25,0x25,0x28,0x25,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2826 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
2827 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
2828 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2829 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
2830 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
2831 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
2832 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
2833 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x35,0x28,0x25,0x26,
2834 0x25,0x26,0x28,0x04,0x04,0x28,0x04,0x28,0x04,0x26,0x24,0x04,0x04,0x04,0x04,0x04,
2835 0x26,0x28,0x26,0x25,0x28,0x28,0x28,0x26,0x28,0x28,0x24,0x04,0x04,0x25,0x25,0x24,
2836 0x25,0x23,0x24,0x28,0x04,0x25,0x04,0x04,0x25,0x28,0x28,0x24,0x28,0x25,0x26,0x26,
2837 0x26,0x26,0x22,0x21,0x25,0x22,0x20,0x25,0x23,0x26,0x25,0x25,0x25,0x25,0x24,0x22,
2838 0x25,0x25,0x28,0x26,0x28,0x26,0x04,0x24,0x25,0x04,0x25,0x25,0x28,0x22,0x28,0x04,
2839 0x28,0x22,0x04,0x25,0x28,0x28,0x28,0x25,0x22,0x04,0x26,0x28,0x22,0x28,0x25,0x23,
2840 0x28,0x28,0x04,0x04,0x04,0x28,0x28,0x25,0x27,0x28,0x04,0x28,0x25,0x28,0x2A,0x26,
2841 0x28,0x25,0x29,0x28,0x28,0x29,0x28,0x28,0x04,0x28,0x28,0x26,0x04,0x28,0x23,0x25,
2842 0x28,0x23,0x22,0x20,0x20,0x28,0x28,0x25,0x28,0x24,0x22,0x24,0x28,0x25,0x26,0x26,
2843 0x04,0x26,0x04,0x24,0x28,0x24,0x28,0x24,0x28,0x24,0x28,0x23,0x04,0x26,0x26,0x04,
2844 0x28,0x28,0x04,0x28,0x28,0x28,0x28,0x25,0x28,0x25,0x25,0x24,0x28,0x28,0x28,0x29,
2845 0x26,0x22,0x22,0x28,0x23,0x25,0x22,0x22,0x28,0x23,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2846 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
2847 0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
2848 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2849 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
2850 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
2851 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
2852 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
2853 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x35,0x26,0x26,0x28,
2854 0x28,0x28,0x25,0x25,0x25,0x24,0x24,0x25,0x28,0x25,0x28,0x28,0x24,0x26,0x28,0x04,
2855 0x26,0x28,0x28,0x26,0x28,0x28,0x28,0x26,0x28,0x24,0x26,0x25,0x26,0x25,0x25,0x04,
2856 0x25,0x04,0x26,0x26,0x28,0x26,0x26,0x28,0x22,0x25,0x28,0x25,0x28,0x24,0x25,0x26,
2857 0x25,0x20,0x22,0x23,0x25,0x23,0x28,0x25,0x25,0x26,0x25,0x25,0x25,0x24,0x24,0x25,
2858 0x22,0x04,0x25,0x26,0x26,0x26,0x26,0x28,0x24,0x04,0x04,0x25,0x25,0x26,0x26,0x25,
2859 0x25,0x25,0x28,0x24,0x26,0x26,0x26,0x24,0x28,0x23,0x28,0x04,0x25,0x25,0x28,0x04,
2860 0x28,0x04,0x26,0x04,0x25,0x04,0x25,0x28,0x26,0x28,0x28,0x04,0x28,0x28,0x28,0x28,
2861 0x28,0x28,0x26,0x04,0x25,0x04,0x28,0x28,0x25,0x25,0x24,0x25,0x22,0x26,0x26,0x20,
2862 0x22,0x22,0x25,0x22,0x20,0x23,0x04,0x22,0x24,0x28,0x04,0x28,0x28,0x25,0x25,0x28,
2863 0x28,0x25,0x28,0x04,0x28,0x25,0x26,0x26,0x28,0x25,0x25,0x25,0x26,0x28,0x26,0x28,
2864 0x26,0x26,0x28,0x28,0x28,0x04,0x23,0x24,0x25,0x25,0x04,0x28,0x04,0x04,0x28,0x29,
2865 0x25,0x04,0x26,0x26,0x24,0x25,0x28,0x26,0x28,0x24,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2866 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
2867 0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
2868 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2869 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
2870 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,
2871 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
2872 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
2873 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x35,0x28,0x28,0x22,
2874 0x25,0x28,0x25,0x25,0x26,0x22,0x23,0x26,0x28,0x25,0x26,0x26,0x2F,0x2F,0x2F,0x2F,
2875 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
2876 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
2877 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
2878 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
2879 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
2880 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,
2881 0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,
2882 0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2D,0x2D,
2883 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2C,
2884 0x2C,0x2C,0x2C,0x2C,0x2C,0x26,0x28,0x04,0x24,0x28,0x04,0x26,0x28,0x28,0x28,0x29,
2885 0x28,0x28,0x25,0x28,0x24,0x25,0x22,0x22,0x28,0x04,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2886 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2887 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2888 0x2B,0x26,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2889 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2890 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2B,0x25,0x27,0x27,0x27,0x27,0x25,0x22,
2891 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2892 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2893 0x2B,0x26,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x35,0x28,0x04,0x26,
2894 0x28,0x28,0x04,0x04,0x04,0x27,0x28,0x24,0x24,0x28,0x26,0x28,0x2F,0x2F,0x2F,0x2F,
2895 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
2896 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
2897 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
2898 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
2899 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
2900 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
2901 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
2902 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
2903 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
2904 0x2F,0x2F,0x2F,0x2F,0x2F,0x23,0x28,0x04,0x28,0x22,0x04,0x04,0x25,0x25,0x27,0x29,
2905 0x24,0x25,0x25,0x04,0x26,0x28,0x23,0x04,0x28,0x04,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2906 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2907 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2908 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2909 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2910 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2911 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2912 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2913 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x29,0x28,0x26,
2914 0x26,0x28,0x28,0x04,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x25,0x2F,0x2F,0x2D,0x2D,
2915 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2916 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2917 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2918 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2919 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2920 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2921 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2922 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2923 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2924 0x2D,0x2D,0x2D,0x2D,0x2D,0x20,0x26,0x04,0x24,0x28,0x28,0x28,0x26,0x28,0x04,0x29,
2925 0x25,0x26,0x04,0x24,0x26,0x28,0x25,0x25,0x26,0x25,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2926 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2927 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
2928 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2929 0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
2930 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,
2931 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,
2932 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
2933 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x35,0x04,0x04,0x28,
2934 0x25,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x28,0x28,0x2F,0x2F,0x2D,0x2D,
2935 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2936 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2937 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2938 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2939 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2940 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2941 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2942 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2943 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2944 0x2D,0x2D,0x2D,0x2D,0x2D,0x36,0x28,0x04,0x28,0x25,0x04,0x28,0x29,0x28,0x2B,0x29,
2945 0x28,0x26,0x24,0x25,0x23,0x23,0x25,0x23,0x26,0x04,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2946 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2947 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2948 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x28,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2949 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
2950 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x26,
2951 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
2952 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
2953 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x35,0x26,0x24,0x25,
2954 0x28,0x26,0x25,0x26,0x28,0x26,0x04,0x28,0x28,0x24,0x24,0x28,0x2F,0x2F,0x2D,0x2D,
2955 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2956 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
2957 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x2D,
2958 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,
2959 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,
2960 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
2961 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,
2962 0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
2963 0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
2964 0x17,0x17,0x2D,0x2D,0x2D,0x36,0x04,0x29,0x28,0x25,0x28,0x04,0x25,0x25,0x04,0x29,
2965 0x25,0x23,0x26,0x23,0x04,0x22,0x23,0x24,0x25,0x22,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2966 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2967 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
2968 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2969 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
2970 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
2971 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,
2972 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
2973 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x35,0x25,0x04,0x25,
2974 0x28,0x04,0x24,0x26,0x26,0x25,0x22,0x28,0x26,0x04,0x26,0x24,0x2F,0x2F,0x2D,0x2D,
2975 0x32,0x33,0x33,0x34,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x35,0x35,0x35,0x35,0x36,0x36,
2976 0x36,0x36,0x20,0x23,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
2977 0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
2978 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x2D,
2979 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,
2980 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
2981 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,
2982 0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
2983 0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
2984 0x17,0x17,0x17,0x2D,0x2D,0x35,0x28,0x28,0x28,0x26,0x28,0x04,0x25,0x26,0x26,0x29,
2985 0x24,0x26,0x04,0x25,0x22,0x22,0x28,0x28,0x04,0x04,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
2986 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2987 0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
2988 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
2989 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
2990 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
2991 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
2992 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
2993 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x35,0x24,0x25,0x24,
2994 0x23,0x04,0x28,0x25,0x26,0x26,0x28,0x26,0x24,0x04,0x26,0x28,0x2E,0x2F,0x2D,0x2D,
2995 0x33,0x36,0x22,0x25,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,
2996 0x28,0x28,0x28,0x2C,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,
2997 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
2998 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
2999 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,
3000 0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
3001 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,
3002 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,
3003 0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,
3004 0x17,0x17,0x17,0x2D,0x2D,0x35,0x23,0x04,0x26,0x25,0x04,0x28,0x28,0x04,0x24,0x29,
3005 0x28,0x23,0x22,0x23,0x23,0x28,0x23,0x25,0x25,0x04,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
3006 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3007 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
3008 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3009 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
3010 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
3011 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
3012 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
3013 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x35,0x25,0x04,0x24,
3014 0x23,0x25,0x22,0x23,0x25,0x04,0x28,0x25,0x22,0x23,0x21,0x22,0x2E,0x2F,0x2D,0x2D,
3015 0x34,0x22,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
3016 0x00,0x28,0x28,0x2C,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,
3017 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
3018 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,
3019 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,
3020 0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
3021 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,
3022 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,
3023 0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,
3024 0x17,0x17,0x17,0x2D,0x2D,0x35,0x22,0x04,0x04,0x25,0x28,0x28,0x04,0x23,0x22,0x29,
3025 0x28,0x25,0x25,0x25,0x23,0x25,0x04,0x28,0x24,0x25,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
3026 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3027 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
3028 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3029 0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
3030 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,
3031 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,
3032 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
3033 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x35,0x23,0x22,0x25,
3034 0x24,0x22,0x20,0x24,0x20,0x24,0x22,0x23,0x20,0x20,0x22,0x22,0x2E,0x2F,0x2D,0x2D,
3035 0x34,0x25,0x27,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
3036 0x1F,0x28,0x28,0x2D,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
3037 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
3038 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,
3039 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,
3040 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
3041 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,
3042 0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,
3043 0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
3044 0x17,0x17,0x17,0x2D,0x2D,0x35,0x04,0x25,0x26,0x26,0x25,0x26,0x24,0x22,0x27,0x29,
3045 0x28,0x28,0x26,0x24,0x26,0x25,0x04,0x25,0x23,0x04,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
3046 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3047 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3048 0x2B,0x25,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3049 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3050 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2B,0x28,0x27,0x27,0x27,0x27,0x25,0x22,
3051 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3052 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3053 0x2B,0x26,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x35,0x22,0x25,0x25,
3054 0x04,0x22,0x24,0x22,0x26,0x23,0x25,0x26,0x25,0x26,0x22,0x20,0x2E,0x2F,0x2D,0x2D,
3055 0x35,0x27,0x27,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
3056 0x1F,0x28,0x28,0x2D,0x2F,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
3057 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
3058 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,
3059 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,
3060 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
3061 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,
3062 0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,
3063 0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
3064 0x17,0x17,0x2D,0x2D,0x2D,0x0C,0x26,0x25,0x26,0x24,0x23,0x25,0x25,0x25,0x22,0x29,
3065 0x25,0x04,0x23,0x25,0x28,0x28,0x27,0x29,0x25,0x26,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
3066 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3067 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3068 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3069 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3070 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3071 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3072 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3073 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x28,0x25,0x23,
3074 0x04,0x25,0x26,0x04,0x23,0x04,0x26,0x23,0x23,0x25,0x21,0x22,0x2E,0x2F,0x2D,0x2D,
3075 0x36,0x27,0x28,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
3076 0x1F,0x28,0x28,0x2E,0x2F,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
3077 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
3078 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,
3079 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,
3080 0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
3081 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
3082 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,
3083 0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
3084 0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x22,0x04,0x25,0x04,0x25,0x24,0x28,0x25,0x04,0x29,
3085 0x28,0x22,0x26,0x04,0x28,0x25,0x28,0x28,0x28,0x26,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
3086 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3087 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
3088 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3089 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
3090 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,
3091 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,
3092 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
3093 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x35,0x26,0x25,0x23,
3094 0x25,0x28,0x23,0x25,0x22,0x28,0x25,0x26,0x28,0x24,0x24,0x04,0x2D,0x2F,0x2D,0x2D,
3095 0x20,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,
3096 0x28,0x28,0x28,0x2E,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,
3097 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
3098 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,
3099 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,
3100 0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
3101 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,
3102 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,
3103 0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
3104 0x17,0x2D,0x2D,0x2D,0x2D,0x0C,0x28,0x25,0x28,0x04,0x28,0x23,0x25,0x22,0x27,0x29,
3105 0x25,0x24,0x26,0x24,0x28,0x26,0x25,0x26,0x28,0x26,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
3106 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3107 0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
3108 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x24,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3109 0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
3110 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,
3111 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,
3112 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
3113 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x35,0x26,0x25,0x26,
3114 0x26,0x21,0x28,0x23,0x20,0x20,0x04,0x26,0x26,0x28,0x24,0x25,0x2D,0x2F,0x2D,0x2D,
3115 0x23,0x2A,0x2C,0x2C,0x2D,0x2D,0x2D,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2F,0x2F,0x2F,
3116 0x2F,0x2F,0x2F,0x2F,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
3117 0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,
3118 0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,
3119 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,
3120 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
3121 0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,
3122 0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,
3123 0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,
3124 0x17,0x17,0x2D,0x2D,0x2D,0x34,0x04,0x26,0x28,0x22,0x28,0x04,0x28,0x25,0x24,0x29,
3125 0x04,0x04,0x22,0x26,0x29,0x28,0x04,0x21,0x25,0x26,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
3126 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3127 0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
3128 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3129 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
3130 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
3131 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
3132 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
3133 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x35,0x26,0x20,0x20,
3134 0x26,0x25,0x24,0x22,0x20,0x24,0x20,0x28,0x04,0x04,0x28,0x28,0x2C,0x2F,0x2D,0x2D,
3135 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
3136 0x2F,0x2F,0x2F,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
3137 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,
3138 0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,
3139 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,
3140 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
3141 0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,
3142 0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,
3143 0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x17,
3144 0x17,0x17,0x17,0x2D,0x2D,0x34,0x25,0x24,0x04,0x28,0x24,0x25,0x22,0x27,0x26,0x29,
3145 0x04,0x26,0x28,0x26,0x26,0x04,0x25,0x26,0x23,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
3146 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3147 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
3148 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3149 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
3150 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
3151 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,
3152 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
3153 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x35,0x25,0x22,0x26,
3154 0x25,0x25,0x28,0x28,0x04,0x28,0x26,0x28,0x04,0x24,0x26,0x25,0x2C,0x2F,0x2D,0x2D,
3155 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3156 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3157 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3158 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3159 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3160 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3161 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3162 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3163 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3164 0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x25,0x25,0x25,0x04,0x28,0x24,0x28,0x04,0x28,0x29,
3165 0x28,0x28,0x04,0x04,0x28,0x28,0x25,0x28,0x26,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
3166 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3167 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
3168 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3169 0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
3170 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
3171 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
3172 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
3173 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x35,0x04,0x28,0x25,
3174 0x24,0x28,0x25,0x04,0x28,0x04,0x25,0x25,0x28,0x28,0x25,0x26,0x2C,0x2F,0x2D,0x2D,
3175 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3176 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3177 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3178 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3179 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3180 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3181 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3182 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3183 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3184 0x2D,0x2D,0x2D,0x2D,0x2D,0x33,0x04,0x25,0x28,0x26,0x04,0x28,0x28,0x28,0x26,0x29,
3185 0x28,0x28,0x25,0x25,0x28,0x25,0x28,0x23,0x25,0x26,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
3186 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3187 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
3188 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3189 0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
3190 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,
3191 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
3192 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
3193 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x35,0x04,0x28,0x23,
3194 0x20,0x24,0x25,0x28,0x28,0x25,0x28,0x28,0x27,0x28,0x26,0x25,0x2C,0x2F,0x2D,0x2D,
3195 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3196 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3197 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3198 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3199 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3200 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3201 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3202 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3203 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3204 0x2D,0x2D,0x2D,0x2D,0x2D,0x33,0x24,0x28,0x28,0x04,0x26,0x28,0x24,0x28,0x25,0x29,
3205 0x29,0x26,0x28,0x25,0x28,0x25,0x24,0x22,0x22,0x24,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
3206 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3207 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3208 0x2B,0x23,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3209 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3210 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2B,0x24,0x27,0x27,0x27,0x27,0x25,0x22,
3211 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3212 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3213 0x2B,0x26,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x35,0x25,0x26,0x25,
3214 0x04,0x28,0x28,0x25,0x04,0x24,0x26,0x26,0x24,0x23,0x26,0x26,0x28,0x24,0x23,0x24,
3215 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,
3216 0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,
3217 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x21,
3218 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
3219 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
3220 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
3221 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x36,0x36,0x36,
3222 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
3223 0x35,0x35,0x35,0x35,0x35,0x0C,0x0C,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,
3224 0x34,0x34,0x34,0x33,0x33,0x32,0x29,0x28,0x28,0x28,0x28,0x28,0x04,0x28,0x26,0x29,
3225 0x28,0x26,0x28,0x28,0x28,0x25,0x25,0x04,0x22,0x25,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
3226 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3227 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3228 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3229 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3230 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3231 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3232 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3233 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x04,0x26,0x25,
3234 0x25,0x26,0x28,0x04,0x23,0x26,0x25,0x26,0x26,0x28,0x26,0x24,0x28,0x25,0x28,0x28,
3235 0x04,0x28,0x26,0x24,0x04,0x04,0x25,0x25,0x26,0x28,0x25,0x28,0x04,0x28,0x25,0x25,
3236 0x28,0x25,0x28,0x28,0x25,0x28,0x24,0x28,0x28,0x27,0x28,0x25,0x26,0x28,0x28,0x04,
3237 0x28,0x23,0x28,0x04,0x24,0x26,0x24,0x28,0x25,0x28,0x28,0x29,0x28,0x2A,0x28,0x28,
3238 0x28,0x28,0x2A,0x25,0x29,0x28,0x26,0x28,0x2A,0x29,0x04,0x29,0x28,0x26,0x29,0x28,
3239 0x28,0x28,0x28,0x28,0x25,0x28,0x25,0x25,0x25,0x25,0x23,0x04,0x20,0x24,0x24,0x25,
3240 0x04,0x23,0x22,0x22,0x20,0x25,0x24,0x24,0x25,0x25,0x25,0x04,0x04,0x28,0x28,0x26,
3241 0x28,0x28,0x22,0x23,0x28,0x25,0x24,0x25,0x28,0x28,0x29,0x23,0x25,0x26,0x28,0x26,
3242 0x26,0x22,0x04,0x24,0x25,0x24,0x25,0x25,0x26,0x25,0x28,0x23,0x24,0x28,0x25,0x28,
3243 0x28,0x28,0x04,0x25,0x26,0x23,0x22,0x24,0x24,0x25,0x28,0x29,0x28,0x28,0x04,0x2A,
3244 0x26,0x04,0x26,0x28,0x04,0x04,0x25,0x28,0x04,0x28,0x04,0x04,0x29,0x2A,0x26,0x29,
3245 0x04,0x26,0x24,0x25,0x22,0x22,0x25,0x24,0x25,0x24,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
3246 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3247 0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
3248 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3249 0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
3250 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,
3251 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,
3252 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
3253 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2B,0x2D,0x2D,0x2D,0x2D,0x0C,0x26,0x27,0x24,
3254 0x25,0x25,0x28,0x28,0x28,0x25,0x26,0x28,0x28,0x24,0x04,0x24,0x04,0x04,0x23,0x25,
3255 0x27,0x25,0x27,0x26,0x24,0x28,0x27,0x04,0x27,0x25,0x28,0x26,0x26,0x25,0x27,0x28,
3256 0x28,0x25,0x25,0x28,0x04,0x28,0x04,0x04,0x28,0x04,0x28,0x28,0x28,0x28,0x28,0x28,
3257 0x26,0x28,0x29,0x26,0x25,0x28,0x28,0x24,0x28,0x28,0x04,0x24,0x28,0x26,0x28,0x29,
3258 0x25,0x25,0x29,0x27,0x24,0x28,0x26,0x25,0x25,0x24,0x26,0x04,0x28,0x28,0x26,0x26,
3259 0x25,0x26,0x26,0x28,0x25,0x24,0x28,0x22,0x25,0x22,0x20,0x20,0x22,0x26,0x25,0x25,
3260 0x22,0x20,0x22,0x25,0x04,0x25,0x25,0x26,0x28,0x26,0x25,0x25,0x26,0x25,0x28,0x28,
3261 0x28,0x28,0x29,0x28,0x29,0x29,0x28,0x28,0x26,0x28,0x26,0x24,0x24,0x24,0x24,0x28,
3262 0x23,0x24,0x25,0x04,0x24,0x25,0x24,0x26,0x26,0x23,0x26,0x25,0x26,0x25,0x26,0x28,
3263 0x28,0x04,0x24,0x28,0x28,0x24,0x22,0x25,0x28,0x28,0x28,0x28,0x25,0x29,0x28,0x23,
3264 0x28,0x28,0x28,0x04,0x28,0x28,0x28,0x2A,0x04,0x28,0x28,0x2A,0x04,0x28,0x2B,0x29,
3265 0x25,0x26,0x26,0x04,0x24,0x25,0x28,0x26,0x25,0x23,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
3266 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3267 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
3268 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x24,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3269 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
3270 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x28,
3271 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,
3272 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
3273 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x28,0x2D,0x2D,0x2D,0x2D,0x0C,0x27,0x25,0x24,
3274 0x24,0x04,0x22,0x28,0x28,0x27,0x04,0x04,0x27,0x28,0x25,0x25,0x25,0x04,0x28,0x26,
3275 0x04,0x04,0x04,0x28,0x04,0x23,0x26,0x04,0x04,0x25,0x04,0x28,0x04,0x28,0x04,0x28,
3276 0x26,0x04,0x28,0x28,0x28,0x24,0x27,0x28,0x28,0x28,0x04,0x28,0x26,0x28,0x26,0x28,
3277 0x28,0x28,0x28,0x28,0x04,0x2A,0x2A,0x29,0x29,0x25,0x28,0x29,0x29,0x28,0x26,0x29,
3278 0x28,0x04,0x04,0x26,0x04,0x25,0x20,0x23,0x25,0x04,0x20,0x26,0x20,0x24,0x20,0x20,
3279 0x25,0x20,0x22,0x20,0x22,0x22,0x23,0x20,0x22,0x20,0x22,0x26,0x24,0x23,0x20,0x20,
3280 0x04,0x20,0x24,0x22,0x26,0x25,0x04,0x04,0x25,0x28,0x25,0x24,0x28,0x28,0x28,0x28,
3281 0x26,0x29,0x28,0x28,0x28,0x24,0x04,0x29,0x28,0x28,0x25,0x26,0x23,0x25,0x23,0x25,
3282 0x28,0x28,0x26,0x25,0x26,0x26,0x28,0x24,0x23,0x26,0x28,0x28,0x25,0x28,0x28,0x28,
3283 0x24,0x28,0x25,0x25,0x22,0x04,0x24,0x25,0x28,0x2A,0x04,0x28,0x29,0x04,0x28,0x25,
3284 0x28,0x28,0x28,0x28,0x04,0x28,0x04,0x28,0x29,0x28,0x25,0x24,0x29,0x04,0x28,0x29,
3285 0x22,0x24,0x23,0x25,0x28,0x23,0x20,0x25,0x26,0x26,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
3286 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3287 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2D,
3288 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3289 0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
3290 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
3291 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,
3292 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
3293 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x0C,0x28,0x26,0x25,
3294 0x28,0x24,0x26,0x26,0x28,0x04,0x04,0x28,0x25,0x28,0x24,0x04,0x24,0x25,0x04,0x04,
3295 0x04,0x24,0x26,0x26,0x26,0x22,0x26,0x28,0x26,0x25,0x28,0x26,0x25,0x26,0x26,0x28,
3296 0x24,0x26,0x24,0x25,0x25,0x28,0x28,0x28,0x28,0x28,0x29,0x04,0x24,0x28,0x28,0x28,
3297 0x04,0x26,0x28,0x28,0x28,0x04,0x2A,0x28,0x28,0x28,0x25,0x26,0x29,0x26,0x04,0x25,
3298 0x26,0x21,0x23,0x24,0x24,0x25,0x24,0x26,0x22,0x24,0x26,0x28,0x24,0x24,0x22,0x04,
3299 0x28,0x24,0x24,0x04,0x24,0x24,0x23,0x20,0x22,0x25,0x22,0x23,0x24,0x20,0x04,0x25,
3300 0x25,0x24,0x24,0x24,0x04,0x24,0x04,0x28,0x23,0x26,0x26,0x23,0x28,0x26,0x25,0x28,
3301 0x28,0x28,0x29,0x2A,0x28,0x26,0x25,0x28,0x25,0x25,0x25,0x26,0x24,0x24,0x25,0x26,
3302 0x25,0x28,0x28,0x25,0x25,0x29,0x25,0x2A,0x28,0x29,0x28,0x28,0x26,0x25,0x28,0x04,
3303 0x25,0x26,0x04,0x04,0x28,0x28,0x2A,0x24,0x25,0x28,0x29,0x29,0x28,0x26,0x26,0x28,
3304 0x28,0x26,0x24,0x25,0x22,0x27,0x26,0x28,0x28,0x04,0x28,0x27,0x04,0x28,0x28,0x29,
3305 0x26,0x04,0x25,0x28,0x24,0x20,0x25,0x28,0x24,0x04,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
3306 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3307 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,
3308 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3309 0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
3310 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
3311 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,
3312 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
3313 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x0C,0x26,0x04,0x23,
3314 0x25,0x26,0x28,0x26,0x04,0x25,0x04,0x26,0x26,0x26,0x26,0x25,0x28,0x26,0x26,0x25,
3315 0x24,0x26,0x25,0x26,0x04,0x28,0x26,0x24,0x26,0x26,0x26,0x26,0x22,0x04,0x04,0x26,
3316 0x28,0x28,0x28,0x04,0x28,0x28,0x28,0x29,0x26,0x04,0x24,0x28,0x04,0x25,0x28,0x28,
3317 0x28,0x28,0x04,0x28,0x29,0x25,0x2A,0x29,0x04,0x28,0x26,0x26,0x26,0x25,0x23,0x04,
3318 0x24,0x24,0x22,0x28,0x22,0x28,0x26,0x26,0x26,0x26,0x24,0x28,0x25,0x04,0x28,0x28,
3319 0x25,0x26,0x23,0x22,0x26,0x20,0x20,0x22,0x23,0x23,0x23,0x20,0x20,0x22,0x25,0x28,
3320 0x04,0x04,0x28,0x24,0x25,0x28,0x28,0x28,0x28,0x28,0x04,0x29,0x04,0x28,0x27,0x26,
3321 0x26,0x28,0x28,0x28,0x28,0x27,0x28,0x24,0x26,0x28,0x24,0x28,0x26,0x26,0x29,0x28,
3322 0x04,0x04,0x25,0x28,0x25,0x26,0x24,0x29,0x04,0x2A,0x28,0x04,0x24,0x28,0x28,0x25,
3323 0x24,0x28,0x28,0x29,0x28,0x29,0x28,0x25,0x23,0x25,0x04,0x26,0x24,0x28,0x28,0x28,
3324 0x27,0x24,0x25,0x26,0x04,0x26,0x23,0x25,0x24,0x04,0x27,0x28,0x04,0x28,0x04,0x29,
3325 0x24,0x28,0x04,0x22,0x22,0x04,0x23,0x24,0x28,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
3326 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3327 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3328 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3329 0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,
3330 0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,
3331 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x2D,
3332 0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x17,0x17,0x2D,0x2D,0x17,0x17,0x2D,0x2D,
3333 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x27,0x2D,0x2D,0x2D,0x2D,0x0C,0x25,0x25,0x24,
3334 0x26,0x25,0x25,0x26,0x28,0x26,0x26,0x28,0x26,0x04,0x26,0x24,0x2F,0x2F,0x2F,0x2F,
3335 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
3336 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
3337 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
3338 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
3339 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
3340 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,
3341 0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,
3342 0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2D,0x2D,
3343 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2C,
3344 0x2C,0x2C,0x2C,0x2C,0x2C,0x26,0x25,0x25,0x28,0x22,0x04,0x04,0x25,0x23,0x28,0x29,
3345 0x25,0x28,0x04,0x20,0x25,0x24,0x24,0x25,0x25,0x26,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
3346 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3347 0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
3348 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3349 0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,
3350 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,
3351 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,
3352 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,
3353 0x2F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x25,0x2D,0x2D,0x2D,0x2D,0x0C,0x26,0x28,0x26,
3354 0x28,0x28,0x26,0x28,0x26,0x25,0x24,0x25,0x28,0x28,0x28,0x28,0x2F,0x2F,0x2F,0x2F,
3355 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
3356 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
3357 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
3358 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
3359 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
3360 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
3361 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
3362 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
3363 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
3364 0x2F,0x2F,0x2F,0x2F,0x2F,0x23,0x26,0x28,0x26,0x25,0x24,0x25,0x22,0x25,0x20,0x29,
3365 0x24,0x24,0x23,0x23,0x22,0x22,0x23,0x04,0x23,0x25,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
3366 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3367 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3368 0x2B,0x24,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3369 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3370 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2B,0x26,0x27,0x27,0x27,0x27,0x25,0x22,
3371 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3372 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3373 0x2B,0x26,0x27,0x27,0x27,0x27,0x25,0x22,0x2D,0x2D,0x2D,0x2D,0x0C,0x25,0x25,0x28,
3374 0x24,0x25,0x28,0x04,0x28,0x26,0x28,0x24,0x25,0x25,0x25,0x25,0x2F,0x2F,0x2D,0x2D,
3375 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3376 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3377 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3378 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3379 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3380 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3381 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3382 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3383 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3384 0x2D,0x2D,0x2D,0x2D,0x2D,0x20,0x28,0x23,0x23,0x24,0x25,0x28,0x28,0x24,0x28,0x29,
3385 0x25,0x23,0x22,0x24,0x23,0x28,0x26,0x22,0x22,0x22,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
3386 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3387 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3388 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3389 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3390 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3391 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3392 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3393 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x24,0x26,0x26,
3394 0x25,0x04,0x26,0x24,0x26,0x26,0x04,0x25,0x25,0x22,0x04,0x28,0x2F,0x2F,0x2D,0x2D,
3395 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3396 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3397 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3398 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3399 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3400 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3401 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3402 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3403 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3404 0x2D,0x2D,0x2D,0x2D,0x2D,0x36,0x28,0x28,0x25,0x28,0x28,0x23,0x25,0x28,0x28,0x29,
3405 0x20,0x20,0x22,0x24,0x24,0x23,0x20,0x22,0x22,0x22,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
3406 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3407 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3408 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3409 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3410 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3411 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3412 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3413 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x26,0x25,0x04,
3414 0x25,0x28,0x26,0x24,0x04,0x26,0x22,0x26,0x25,0x25,0x26,0x23,0x2F,0x2F,0x2D,0x2D,
3415 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3416 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
3417 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x2D,
3418 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,
3419 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3420 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
3421 0x17,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,
3422 0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,
3423 0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3424 0x2D,0x2D,0x2D,0x2D,0x2D,0x36,0x22,0x22,0x25,0x27,0x28,0x28,0x26,0x28,0x28,0x29,
3425 0x20,0x22,0x25,0x04,0x04,0x20,0x20,0x26,0x20,0x24,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
3426 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x14,0x2D,0x2D,0x2D,0x2D,0x14,0x2D,0x2D,
3427 0x14,0x14,0x14,0x14,0x2D,0x2D,0x14,0x14,0x2D,0x14,0x14,0x2D,0x2D,0x14,0x14,0x2D,
3428 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3429 0x2D,0x14,0x14,0x14,0x14,0x14,0x14,0x2D,0x14,0x2D,0x2D,0x2D,0x2D,0x14,0x2D,0x2D,
3430 0x14,0x14,0x14,0x14,0x14,0x14,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3431 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x14,0x14,0x2D,0x2D,0x14,0x14,0x2D,
3432 0x14,0x2D,0x2D,0x2D,0x2D,0x14,0x2D,0x2D,0x14,0x14,0x14,0x14,0x14,0x14,0x2D,0x2D,
3433 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x25,0x22,0x22,
3434 0x26,0x26,0x25,0x25,0x26,0x24,0x25,0x26,0x26,0x25,0x26,0x22,0x2F,0x2F,0x2D,0x2D,
3435 0x32,0x33,0x33,0x34,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x35,0x35,0x35,0x35,0x36,0x36,
3436 0x36,0x36,0x20,0x23,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
3437 0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
3438 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x2D,
3439 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,
3440 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
3441 0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,
3442 0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
3443 0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3444 0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x27,0x29,0x26,0x28,0x24,0x27,0x24,0x26,0x26,0x29,
3445 0x20,0x24,0x22,0x22,0x22,0x20,0x26,0x22,0x25,0x24,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
3446 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x14,0x14,0x2D,0x2D,0x14,0x14,0x2D,0x14,
3447 0x14,0x2D,0x2D,0x14,0x14,0x2D,0x14,0x14,0x2D,0x14,0x14,0x14,0x2D,0x14,0x14,0x2D,
3448 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3449 0x2D,0x14,0x14,0x2D,0x2D,0x2D,0x2D,0x2D,0x14,0x14,0x2D,0x2D,0x14,0x14,0x2D,0x14,
3450 0x14,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3451 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x14,0x14,0x14,0x14,0x2D,0x2D,
3452 0x14,0x14,0x2D,0x2D,0x14,0x14,0x2D,0x14,0x14,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3453 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x04,0x25,0x04,
3454 0x28,0x04,0x26,0x25,0x26,0x26,0x26,0x25,0x28,0x04,0x04,0x26,0x2E,0x2F,0x2D,0x2D,
3455 0x33,0x36,0x22,0x25,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,
3456 0x28,0x28,0x28,0x2C,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,
3457 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
3458 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
3459 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,
3460 0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,
3461 0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,
3462 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,
3463 0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3464 0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x28,0x28,0x27,0x28,0x27,0x23,0x27,0x26,0x28,0x29,
3465 0x22,0x25,0x25,0x25,0x25,0x24,0x28,0x25,0x28,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
3466 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x14,0x14,0x14,0x14,0x14,0x14,0x2D,0x14,
3467 0x14,0x14,0x14,0x14,0x14,0x2D,0x14,0x14,0x2D,0x14,0x14,0x14,0x14,0x14,0x14,0x2D,
3468 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3469 0x2D,0x14,0x14,0x14,0x14,0x14,0x2D,0x2D,0x14,0x14,0x14,0x14,0x14,0x14,0x2D,0x2D,
3470 0x14,0x14,0x14,0x14,0x14,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3471 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x14,0x14,0x2D,0x2D,0x2D,
3472 0x14,0x14,0x14,0x14,0x14,0x14,0x2D,0x2D,0x14,0x14,0x14,0x14,0x14,0x2D,0x2D,0x2D,
3473 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x24,0x26,0x25,
3474 0x25,0x23,0x26,0x25,0x25,0x28,0x26,0x28,0x28,0x24,0x28,0x04,0x2E,0x2F,0x2D,0x2D,
3475 0x34,0x22,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
3476 0x00,0x28,0x28,0x2C,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,
3477 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
3478 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,
3479 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,
3480 0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,
3481 0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,
3482 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3483 0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3484 0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x28,0x04,0x24,0x28,0x27,0x24,0x28,0x25,0x25,0x29,
3485 0x25,0x24,0x25,0x25,0x26,0x25,0x25,0x04,0x25,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
3486 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x14,0x14,0x14,0x14,0x14,0x14,0x2D,0x14,
3487 0x14,0x2D,0x2D,0x14,0x14,0x2D,0x14,0x14,0x2D,0x14,0x14,0x2D,0x14,0x14,0x14,0x2D,
3488 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3489 0x2D,0x14,0x14,0x2D,0x2D,0x2D,0x2D,0x2D,0x14,0x14,0x14,0x14,0x14,0x14,0x2D,0x2D,
3490 0x2D,0x2D,0x2D,0x2D,0x14,0x14,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3491 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x14,0x14,0x14,0x14,0x2D,0x2D,
3492 0x14,0x14,0x14,0x14,0x14,0x14,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x14,0x14,0x2D,0x2D,
3493 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x24,0x26,0x25,
3494 0x28,0x26,0x24,0x26,0x25,0x24,0x26,0x24,0x26,0x28,0x28,0x28,0x2E,0x2F,0x2D,0x2D,
3495 0x34,0x25,0x27,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
3496 0x1F,0x28,0x28,0x2D,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
3497 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
3498 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x2D,
3499 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,
3500 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,
3501 0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,
3502 0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3503 0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3504 0x2D,0x2D,0x2D,0x2D,0x2D,0x35,0x25,0x22,0x26,0x27,0x28,0x28,0x28,0x28,0x25,0x29,
3505 0x26,0x26,0x25,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
3506 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x14,0x14,0x2D,0x2D,0x14,0x14,0x2D,0x14,
3507 0x14,0x2D,0x2D,0x14,0x14,0x2D,0x14,0x14,0x2D,0x14,0x14,0x2D,0x2D,0x14,0x14,0x2D,
3508 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3509 0x2D,0x14,0x14,0x14,0x14,0x14,0x14,0x2D,0x14,0x14,0x2D,0x2D,0x14,0x14,0x2D,0x14,
3510 0x14,0x14,0x14,0x14,0x14,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3511 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x14,0x14,0x2D,0x2D,0x14,0x14,0x2D,
3512 0x14,0x14,0x2D,0x2D,0x14,0x14,0x2D,0x14,0x14,0x14,0x14,0x14,0x14,0x2D,0x2D,0x2D,
3513 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x04,0x28,0x04,
3514 0x26,0x28,0x26,0x23,0x25,0x04,0x26,0x26,0x24,0x04,0x28,0x04,0x2E,0x2F,0x2D,0x2D,
3515 0x35,0x27,0x27,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
3516 0x1F,0x28,0x28,0x2D,0x2F,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
3517 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
3518 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,
3519 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3520 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,
3521 0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,
3522 0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3523 0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3524 0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x24,0x28,0x27,0x24,0x22,0x25,0x24,0x24,0x25,0x29,
3525 0x26,0x25,0x23,0x28,0x04,0x04,0x28,0x24,0x04,0x04,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
3526 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3527 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3528 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3529 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3530 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3531 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3532 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3533 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x24,0x26,0x26,
3534 0x28,0x04,0x04,0x04,0x25,0x28,0x25,0x28,0x04,0x28,0x28,0x27,0x2E,0x2F,0x2D,0x2D,
3535 0x36,0x27,0x28,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
3536 0x1F,0x28,0x28,0x2E,0x2F,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,
3537 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
3538 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,
3539 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3540 0x2D,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,
3541 0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,
3542 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3543 0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3544 0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x23,0x26,0x28,0x27,0x28,0x26,0x28,0x25,0x04,0x29,
3545 0x28,0x28,0x04,0x26,0x22,0x04,0x21,0x25,0x22,0x26,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
3546 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3547 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3548 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3549 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3550 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3551 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3552 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3553 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x28,0x25,0x28,
3554 0x26,0x28,0x25,0x26,0x29,0x28,0x04,0x26,0x26,0x28,0x04,0x23,0x2D,0x2F,0x2D,0x2D,
3555 0x20,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,
3556 0x28,0x28,0x28,0x2E,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,
3557 0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,
3558 0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,
3559 0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,
3560 0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,
3561 0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,
3562 0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,
3563 0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3564 0x2D,0x2D,0x2D,0x2D,0x2D,0x0C,0x28,0x28,0x28,0x04,0x27,0x26,0x25,0x04,0x25,0x29,
3565 0x26,0x28,0x26,0x25,0x22,0x26,0x25,0x22,0x04,0x26,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
3566 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3567 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3568 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3569 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3570 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3571 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3572 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3573 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x24,0x26,0x28,
3574 0x25,0x25,0x28,0x29,0x24,0x28,0x28,0x28,0x04,0x28,0x26,0x26,0x2D,0x2F,0x2D,0x2D,
3575 0x23,0x2A,0x2C,0x2C,0x2D,0x2D,0x2D,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2F,0x2F,0x2F,
3576 0x2F,0x2F,0x2F,0x2F,0x2F,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
3577 0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,
3578 0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,
3579 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x17,
3580 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
3581 0x17,0x17,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x17,0x17,0x17,
3582 0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
3583 0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3584 0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x25,0x26,0x25,0x24,0x28,0x25,0x25,0x24,0x24,0x29,
3585 0x25,0x24,0x23,0x23,0x23,0x25,0x24,0x21,0x24,0x23,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
3586 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3587 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3588 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3589 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3590 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3591 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3592 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3593 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x27,0x25,0x04,
3594 0x28,0x28,0x26,0x28,0x25,0x04,0x28,0x25,0x25,0x26,0x26,0x24,0x2C,0x2F,0x2D,0x2D,
3595 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
3596 0x2F,0x2F,0x2F,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
3597 0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,
3598 0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x2D,
3599 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3600 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,
3601 0x17,0x2D,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,
3602 0x2D,0x2D,0x17,0x17,0x17,0x17,0x2D,0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,
3603 0x2D,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3604 0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x26,0x25,0x28,0x23,0x25,0x25,0x23,0x23,0x25,0x29,
3605 0x25,0x22,0x23,0x24,0x25,0x22,0x04,0x23,0x28,0x26,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
3606 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3607 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3608 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3609 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3610 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3611 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3612 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3613 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x24,0x29,0x04,
3614 0x29,0x26,0x27,0x25,0x04,0x24,0x28,0x24,0x04,0x22,0x25,0x25,0x2C,0x2F,0x2D,0x2D,
3615 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3616 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3617 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3618 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3619 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3620 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3621 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3622 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3623 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3624 0x2D,0x2D,0x2D,0x2D,0x2D,0x34,0x28,0x25,0x25,0x22,0x04,0x23,0x25,0x28,0x25,0x29,
3625 0x23,0x25,0x23,0x24,0x26,0x24,0x26,0x28,0x26,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
3626 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3627 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3628 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3629 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3630 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3631 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3632 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3633 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x33,0x28,0x25,0x28,
3634 0x28,0x28,0x28,0x28,0x24,0x04,0x25,0x25,0x26,0x24,0x26,0x04,0x2C,0x2F,0x2D,0x2D,
3635 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3636 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3637 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3638 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3639 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3640 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3641 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3642 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3643 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3644 0x2D,0x2D,0x2D,0x2D,0x2D,0x33,0x22,0x28,0x24,0x25,0x25,0x22,0x28,0x27,0x24,0x29,
3645 0x23,0x23,0x23,0x23,0x28,0x24,0x28,0x28,0x28,0x28,0x2F,0x2F,0x2D,0x2D,0x2D,0x2D,
3646 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3647 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3648 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3649 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3650 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3651 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3652 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3653 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x33,0x04,0x28,0x25,
3654 0x25,0x23,0x28,0x04,0x04,0x04,0x04,0x27,0x28,0x28,0x25,0x26,0x2C,0x2F,0x2D,0x2D,
3655 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3656 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3657 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3658 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3659 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3660 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3661 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3662 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3663 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3664 0x2D,0x2D,0x2D,0x2D,0x2D,0x33,0x23,0x25,0x25,0x27,0x26,0x23,0x28,0x26,0x04,0x29,
3665 0x22,0x22,0x22,0x04,0x28,0x24,0x27,0x26,0x27,0x26,0x25,0x25,0x25,0x24,0x24,0x24,
3666 0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,
3667 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,
3668 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x20,0x20,0x20,0x20,
3669 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
3670 0x20,0x20,0x20,0x20,0x20,0x20,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,
3671 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,
3672 0x36,0x36,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
3673 0x35,0x35,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x33,0x33,0x32,0x25,0x04,0x04,
3674 0x04,0x25,0x24,0x25,0x24,0x28,0x28,0x26,0x25,0x04,0x25,0x27,0x28,0x24,0x23,0x24,
3675 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,
3676 0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,
3677 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x21,
3678 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
3679 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
3680 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
3681 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x36,0x36,0x36,
3682 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
3683 0x35,0x35,0x35,0x35,0x35,0x0C,0x0C,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,
3684 0x34,0x34,0x34,0x33,0x33,0x32,0x24,0x25,0x22,0x04,0x27,0x04,0x22,0x28,0x25,0x29,
3685 0x25,0x25,0x28,0x25,0x28,0x28,0x28,0x28,0x22,0x25,0x28,0x26,0x04,0x22,0x26,0x23,
3686 0x22,0x25,0x23,0x25,0x24,0x24,0x24,0x25,0x22,0x28,0x21,0x26,0x25,0x22,0x24,0x25,
3687 0x24,0x23,0x25,0x22,0x20,0x20,0x22,0x20,0x22,0x20,0x23,0x24,0x22,0x25,0x22,0x21,
3688 0x22,0x22,0x04,0x20,0x24,0x21,0x24,0x22,0x21,0x22,0x23,0x25,0x22,0x21,0x25,0x22,
3689 0x24,0x25,0x25,0x22,0x22,0x24,0x26,0x26,0x23,0x04,0x26,0x24,0x28,0x04,0x25,0x28,
3690 0x25,0x25,0x23,0x24,0x23,0x26,0x25,0x24,0x28,0x26,0x26,0x26,0x28,0x26,0x22,0x25,
3691 0x04,0x24,0x04,0x04,0x26,0x25,0x04,0x26,0x26,0x25,0x28,0x04,0x29,0x26,0x04,0x28,
3692 0x29,0x26,0x28,0x28,0x28,0x28,0x28,0x29,0x28,0x28,0x26,0x29,0x29,0x26,0x28,0x28,
3693 0x26,0x29,0x25,0x29,0x28,0x28,0x28,0x28,0x25,0x25,0x26,0x26,0x28,0x25,0x24,0x25,
3694 0x28,0x28,0x26,0x26,0x28,0x28,0x04,0x04,0x25,0x26,0x04,0x25,0x26,0x25,0x26,0x04,
3695 0x24,0x24,0x22,0x20,0x25,0x23,0x22,0x25,0x20,0x22,0x20,0x24,0x22,0x24,0x25,0x28,
3696 0x23,0x26,0x25,0x26,0x26,0x04,0x04,0x28,0x04,0x25,0x28,0x26,0x25,0x26,0x22,0x26,
3697 0x26,0x26,0x26,0x26,0x26,0x28,0x04,0x24,0x26,0x28,0x24,0x25,0x29,0x04,0x26,0x28,
3698 0x24,0x28,0x25,0x25,0x04,0x22,0x26,0x26,0x24,0x23,0x22,0x25,0x26,0x26,0x25,0x28,
3699 0x26,0x26,0x25,0x22,0x24,0x26,0x24,0x04,0x24,0x26,0x26,0x25,0x26,0x28,0x26,0x26,
3700 0x23,0x23,0x28,0x25,0x22,0x25,0x04,0x28,0x28,0x25,0x24,0x26,0x27,0x28,0x04,0x28,
3701 0x26,0x28,0x28,0x28,0x26,0x04,0x29,0x28,0x28,0x28,0x29,0x28,0x24,0x28,0x28,0x28,
3702 0x25,0x28,0x04,0x28,0x04,0x04,0x26,0x28,0x24,0x25,0x04,0x25,0x28,0x26,0x28,0x28,
3703 0x28,0x28,0x26,0x28,0x28,0x04,0x25,0x26,0x25,0x26,0x25,0x26,0x25,0x22,0x23,0x22,
3704 0x25,0x24,0x24,0x23,0x27,0x28,0x24,0x28,0x26,0x26,0x27,0x22,0x28,0x28,0x28,0x29,
3705 0x23,0x28,0x25,0x04,0x25,0x28,0x04,0x22,0x26,0x24,0x22,0x22,0x23,0x04,0x25,0x22,
3706 0x26,0x25,0x23,0x22,0x24,0x24,0x26,0x22,0x23,0x28,0x26,0x25,0x28,0x28,0x23,0x22,
3707 0x25,0x20,0x22,0x20,0x24,0x22,0x23,0x20,0x20,0x22,0x20,0x22,0x25,0x20,0x25,0x20,
3708 0x20,0x25,0x22,0x24,0x22,0x22,0x20,0x20,0x20,0x20,0x20,0x22,0x21,0x20,0x20,0x20,
3709 0x21,0x23,0x23,0x22,0x25,0x24,0x25,0x28,0x04,0x28,0x25,0x25,0x29,0x28,0x26,0x24,
3710 0x28,0x25,0x28,0x28,0x28,0x24,0x26,0x26,0x24,0x25,0x28,0x26,0x24,0x25,0x24,0x27,
3711 0x27,0x25,0x27,0x25,0x04,0x28,0x26,0x04,0x26,0x04,0x28,0x28,0x28,0x23,0x29,0x04,
3712 0x04,0x28,0x28,0x26,0x29,0x28,0x28,0x26,0x28,0x25,0x26,0x28,0x28,0x29,0x28,0x25,
3713 0x28,0x25,0x04,0x28,0x29,0x29,0x25,0x28,0x26,0x26,0x04,0x2A,0x04,0x28,0x26,0x2A,
3714 0x28,0x28,0x26,0x28,0x25,0x25,0x28,0x28,0x25,0x25,0x26,0x04,0x23,0x24,0x25,0x23,
3715 0x24,0x22,0x20,0x20,0x04,0x25,0x20,0x22,0x20,0x20,0x26,0x20,0x20,0x26,0x25,0x28,
3716 0x23,0x25,0x24,0x23,0x26,0x26,0x28,0x04,0x26,0x24,0x24,0x26,0x25,0x26,0x25,0x28,
3717 0x28,0x04,0x26,0x23,0x26,0x04,0x26,0x26,0x25,0x28,0x29,0x04,0x28,0x27,0x26,0x25,
3718 0x28,0x23,0x23,0x23,0x24,0x22,0x22,0x25,0x21,0x22,0x25,0x26,0x25,0x24,0x28,0x24,
3719 0x25,0x25,0x25,0x28,0x25,0x25,0x25,0x24,0x28,0x28,0x27,0x23,0x26,0x04,0x24,0x24,
3720 0x24,0x25,0x24,0x25,0x25,0x24,0x22,0x28,0x24,0x24,0x26,0x26,0x25,0x28,0x25,0x26,
3721 0x29,0x28,0x04,0x28,0x04,0x26,0x28,0x28,0x04,0x2A,0x28,0x28,0x24,0x28,0x26,0x26,
3722 0x04,0x25,0x26,0x28,0x27,0x25,0x29,0x28,0x28,0x24,0x28,0x26,0x28,0x04,0x28,0x04,
3723 0x04,0x24,0x25,0x23,0x23,0x04,0x24,0x28,0x24,0x04,0x22,0x26,0x26,0x25,0x25,0x28,
3724 0x25,0x28,0x28,0x04,0x27,0x25,0x25,0x24,0x25,0x27,0x27,0x25,0x23,0x24,0x27,0x29,
3725 0x04,0x26,0x25,0x26,0x26,0x26,0x22,0x04,0x25,0x04,0x25,0x28,0x28,0x25,0x25,0x04,
3726 0x25,0x24,0x25,0x25,0x28,0x28,0x28,0x24,0x04,0x28,0x28,0x25,0x25,0x24,0x24,0x24,
3727 0x25,0x20,0x23,0x22,0x23,0x22,0x25,0x25,0x24,0x25,0x25,0x28,0x25,0x28,0x22,0x24,
3728 0x24,0x24,0x23,0x25,0x26,0x04,0x25,0x22,0x25,0x20,0x24,0x20,0x20,0x24,0x23,0x24,
3729 0x22,0x22,0x24,0x25,0x24,0x24,0x28,0x25,0x22,0x23,0x28,0x28,0x25,0x28,0x26,0x26,
3730 0x23,0x28,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x25,0x26,0x26,0x28,0x28,0x28,0x29,
3731 0x28,0x28,0x04,0x29,0x28,0x26,0x29,0x04,0x25,0x28,0x04,0x29,0x29,0x29,0x28,0x28,
3732 0x24,0x04,0x28,0x28,0x28,0x26,0x26,0x04,0x28,0x29,0x04,0x29,0x04,0x29,0x26,0x28,
3733 0x29,0x25,0x28,0x29,0x24,0x04,0x29,0x2A,0x2A,0x28,0x04,0x04,0x29,0x28,0x04,0x29,
3734 0x2A,0x28,0x28,0x28,0x26,0x25,0x29,0x26,0x25,0x28,0x24,0x24,0x26,0x23,0x20,0x22,
3735 0x20,0x04,0x20,0x25,0x25,0x20,0x20,0x25,0x22,0x22,0x20,0x22,0x28,0x25,0x25,0x25,
3736 0x25,0x25,0x26,0x28,0x26,0x28,0x28,0x25,0x25,0x28,0x28,0x04,0x28,0x28,0x25,0x25,
3737 0x28,0x28,0x26,0x04,0x26,0x28,0x26,0x28,0x28,0x28,0x28,0x28,0x04,0x25,0x24,0x25,
3738 0x25,0x24,0x21,0x23,0x24,0x04,0x24,0x22,0x24,0x25,0x25,0x25,0x24,0x22,0x25,0x28,
3739 0x04,0x04,0x26,0x26,0x25,0x04,0x28,0x28,0x28,0x26,0x26,0x26,0x23,0x28,0x25,0x25,
3740 0x23,0x27,0x28,0x24,0x28,0x27,0x28,0x23,0x04,0x26,0x28,0x28,0x29,0x04,0x28,0x28,
3741 0x28,0x29,0x2A,0x25,0x25,0x2A,0x28,0x26,0x29,0x29,0x28,0x25,0x28,0x23,0x25,0x25,
3742 0x27,0x25,0x26,0x26,0x28,0x29,0x28,0x04,0x04,0x28,0x28,0x04,0x04,0x04,0x04,0x25,
3743 0x25,0x25,0x25,0x26,0x22,0x24,0x25,0x28,0x28,0x24,0x24,0x22,0x26,0x24,0x28,0x25,
3744 0x24,0x24,0x24,0x04,0x27,0x24,0x23,0x28,0x24,0x27,0x26,0x28,0x24,0x25,0x04,0x29,
3745 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3746 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3747 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3748 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3749 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3750 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3751 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3752 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3753 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3754 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3755 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3756 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3757 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3758 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3759 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3760 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3761 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3762 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3763 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3764 0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,0x2D,
3765 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
3766 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
3767 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
3768 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
3769 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
3770 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
3771 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
3772 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
3773 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
3774 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
3775 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
3776 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
3777 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
3778 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
3779 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
3780 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
3781 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
3782 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
3783 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
3784 0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,
3785 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3786 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3787 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3788 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3789 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3790 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3791 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3792 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3793 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3794 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3795 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3796 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3797 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3798 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3799 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3800 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3801 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3802 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3803 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3804 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3805 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3806 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3807 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3808 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3809 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3810 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3811 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3812 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3813 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3814 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3815 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3816 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3817 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3818 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3819 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3820 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3821 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3822 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3823 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3824 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3825 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3826 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3827 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3828 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3829 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3830 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3831 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3832 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x00,0x00,0x00,0x00,0x29,0x29,0x29,0x29,
3833 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3834 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3835 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3836 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3837 0x29,0x29,0x29,0x00,0x00,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3838 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3839 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3840 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3841 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3842 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3843 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3844 0x29,0x29,0x29,0x2A,0x2C,0x29,0x29,0x29,0x29,0x29,0x29,0x2A,0x2C,0x29,0x29,0x29,
3845 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3846 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3847 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3848 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3849 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3850 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3851 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3852 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x29,
3853 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3854 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3855 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3856 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3857 0x29,0x29,0x29,0x00,0x00,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3858 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3859 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3860 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3861 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3862 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3863 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3864 0x29,0x29,0x29,0x2C,0x2C,0x29,0x29,0x29,0x29,0x29,0x2A,0x2C,0x2C,0x29,0x29,0x29,
3865 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3866 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3867 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3868 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3869 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3870 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3871 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3872 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x00,
3873 0x00,0x00,0x00,0x00,0x29,0x29,0x29,0x29,0x00,0x00,0x00,0x00,0x29,0x29,0x29,0x29,
3874 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x29,0x29,
3875 0x29,0x29,0x00,0x00,0x00,0x00,0x29,0x29,0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
3876 0x29,0x29,0x29,0x29,0x00,0x00,0x00,0x00,0x29,0x29,0x29,0x00,0x00,0x00,0x00,0x00,
3877 0x29,0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3878 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3879 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3880 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3881 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3882 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3883 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x2C,0x29,0x29,
3884 0x29,0x2C,0x29,0x29,0x2C,0x29,0x29,0x29,0x29,0x2A,0x2C,0x2A,0x2C,0x29,0x29,0x29,
3885 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3886 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3887 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3888 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3889 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3890 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3891 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3892 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x00,
3893 0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x29,
3894 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x00,0x00,0x29,0x00,0x00,0x29,0x00,0x00,0x29,
3895 0x29,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x00,0x00,0x29,0x00,
3896 0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x00,
3897 0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3898 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3899 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3900 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3901 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3902 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3903 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x2C,0x29,0x29,
3904 0x29,0x2C,0x29,0x29,0x2C,0x29,0x29,0x29,0x2A,0x2C,0x2A,0x29,0x2C,0x29,0x29,0x29,
3905 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3906 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3907 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3908 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3909 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3910 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3911 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3912 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x00,
3913 0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x29,0x29,0x29,
3914 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x00,0x00,0x29,0x00,0x00,0x29,0x00,0x00,0x29,
3915 0x29,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x00,0x00,0x29,0x00,
3916 0x00,0x29,0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x00,
3917 0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3918 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3919 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3920 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3921 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3922 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3923 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x2C,0x2A,0x29,
3924 0x2A,0x2C,0x29,0x29,0x2C,0x29,0x29,0x29,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x29,0x29,
3925 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3926 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3927 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3928 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3929 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3930 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3931 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3932 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x00,
3933 0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3934 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x00,0x00,0x29,0x00,0x00,0x29,0x00,0x00,0x29,
3935 0x29,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x00,0x00,0x29,0x00,
3936 0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x29,0x29,0x29,0x29,0x00,0x00,0x29,0x29,0x00,
3937 0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x29,0x29,0x29,0x00,0x00,0x29,0x29,0x00,0x00,
3938 0x29,0x29,0x00,0x00,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3939 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3940 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3941 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3942 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3943 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x2A,0x2C,0x2A,
3944 0x2C,0x2A,0x29,0x29,0x2C,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x2C,0x29,0x29,0x29,
3945 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3946 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3947 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3948 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3949 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3950 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3951 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3952 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x00,0x00,0x00,0x00,0x29,0x29,0x29,0x00,
3953 0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x29,0x00,0x00,0x00,0x00,0x00,0x29,0x29,0x29,
3954 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x00,0x00,0x29,0x00,0x00,0x29,0x00,0x00,0x29,
3955 0x29,0x29,0x00,0x00,0x00,0x00,0x29,0x29,0x29,0x00,0x00,0x29,0x00,0x00,0x29,0x00,
3956 0x00,0x29,0x29,0x29,0x00,0x00,0x00,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x00,
3957 0x00,0x29,0x29,0x29,0x00,0x00,0x00,0x00,0x29,0x29,0x00,0x00,0x29,0x29,0x00,0x00,
3958 0x29,0x29,0x00,0x00,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3959 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3960 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3961 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3962 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3963 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x2A,0x2C,
3964 0x2A,0x29,0x29,0x2C,0x2C,0x2C,0x29,0x2C,0x29,0x29,0x29,0x29,0x2C,0x29,0x29,0x29,
3965 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3966 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3967 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3968 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3969 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3970 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3971 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3972 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3973 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3974 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3975 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3976 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3977 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3978 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3979 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3980 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3981 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3982 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3983 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3984 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3985 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3986 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3987 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3988 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3989 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3990 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3991 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3992 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3993 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3994 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3995 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3996 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3997 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3998 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
3999 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
4000 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
4001 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
4002 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
4003 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
4004 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29};
4005#else
4006byte signon[] = {
4007 0x92,0x01,0x92,0x94,0x91,0x92,0x93,0x91,0x92,0x01,0x95,0x95,0x92,0x92,0x94,0x92,
4008 0x92,0x96,0x92,0x95,0x92,0x91,0x95,0x93,0x91,0x92,0x92,0x92,0x91,0x95,0x92,0x95,
4009 0x94,0x95,0x92,0x91,0x92,0x92,0x91,0x94,0x93,0x01,0x98,0x99,0x98,0x99,0x93,0x96,
4010 0x95,0x96,0x92,0x01,0x93,0x93,0x96,0x94,0x93,0x95,0x95,0x93,0x93,0x01,0x93,0x95,
4011 0x01,0x98,0x95,0x93,0x94,0x92,0x95,0x98,0x98,0x98,0x93,0x93,0x01,0x93,0x92,0x93,
4012 0x95,0x93,0x95,0x95,0x01,0x92,0x92,0x91,0x93,0x93,0x95,0x95,0x92,0x93,0x95,0x96,
4013 0x93,0x99,0x99,0x92,0x94,0x93,0x92,0x01,0x95,0x92,0x01,0x93,0x93,0x92,0x93,0x95,
4014 0x94,0x93,0x93,0x93,0x95,0x94,0x98,0x93,0x92,0x93,0x93,0x92,0x94,0x95,0x92,0x01,
4015 0x92,0x92,0x94,0x01,0x94,0x94,0x94,0x94,0x95,0x94,0x98,0x9A,0x93,0x92,0x96,0x92,
4016 0x96,0x95,0x92,0x92,0x96,0x98,0x96,0x98,0x98,0x94,0x94,0x95,0x92,0x94,0x95,0x92,
4017 0x95,0x95,0x95,0x96,0x92,0x95,0x94,0x94,0x94,0x95,0x94,0x95,0x92,0x01,0x94,0x95,
4018 0x95,0x96,0x94,0x92,0x96,0x96,0x94,0x94,0x93,0x01,0x92,0x95,0x98,0x94,0x96,0x92,
4019 0x96,0x95,0x96,0x9A,0x98,0x93,0x95,0x95,0x95,0x93,0x98,0x95,0x95,0x01,0x95,0x94,
4020 0x93,0x95,0x93,0x98,0x96,0x95,0x8E,0x8E,0x95,0x8D,0x92,0x92,0x95,0x92,0x98,0x95,
4021 0x95,0x98,0x01,0x98,0x95,0x94,0x94,0x94,0x94,0x94,0x95,0x95,0x98,0x98,0x95,0x95,
4022 0x96,0x93,0x01,0x95,0x01,0x94,0x95,0x98,0x98,0x93,0x96,0x95,0x96,0x95,0x96,0x95,
4023 0x98,0x98,0x94,0x96,0x98,0x8D,0x8E,0x96,0x8E,0x93,0x01,0x96,0x95,0x94,0x96,0x98,
4024 0x98,0x98,0x94,0x98,0x98,0x95,0x95,0x96,0x96,0x01,0x95,0x96,0x96,0x01,0x96,0x92,
4025 0x95,0x95,0x92,0x98,0x94,0x98,0x95,0x96,0x96,0x96,0x95,0x95,0x98,0x98,0x96,0x98,
4026 0x98,0x98,0x96,0x98,0x94,0x98,0x01,0x98,0x96,0x95,0x96,0x96,0x96,0x95,0x98,0x96,
4027 0x92,0x95,0x92,0x95,0x93,0x95,0x95,0x92,0x92,0x01,0x92,0x93,0x95,0x95,0x93,0x92,
4028 0x92,0x92,0x92,0x91,0x01,0x94,0x01,0x94,0x93,0x95,0x92,0x92,0x91,0x93,0x93,0x01,
4029 0x93,0x94,0x93,0x95,0x95,0x95,0x92,0x01,0x95,0x93,0x95,0x95,0x95,0x95,0x95,0x94,
4030 0x95,0x94,0x93,0x95,0x94,0x92,0x95,0x95,0x94,0x92,0x93,0x93,0x93,0x95,0x96,0x95,
4031 0x95,0x94,0x94,0x95,0x94,0x94,0x91,0x95,0x96,0x01,0x92,0x95,0x95,0x93,0x92,0x95,
4032 0x96,0x01,0x93,0x93,0x93,0x96,0x92,0x95,0x95,0x96,0x94,0x95,0x96,0x94,0x01,0x01,
4033 0x92,0x95,0x94,0x01,0x95,0x98,0x95,0x96,0x96,0x01,0x98,0x93,0x95,0x92,0x92,0x96,
4034 0x93,0x95,0x01,0x01,0x92,0x95,0x92,0x95,0x93,0x92,0x93,0x94,0x92,0x94,0x93,0x01,
4035 0x01,0x98,0x98,0x91,0x94,0x95,0x94,0x98,0x93,0x98,0x98,0x95,0x95,0x93,0x93,0x94,
4036 0x95,0x94,0x92,0x95,0x01,0x98,0x01,0x01,0x96,0x96,0x96,0x96,0x96,0x95,0x98,0x94,
4037 0x95,0x98,0x94,0x95,0x01,0x94,0x95,0x94,0x94,0x94,0x94,0x94,0x01,0x94,0x92,0x94,
4038 0x93,0x95,0x95,0x95,0x01,0x96,0x95,0x95,0x96,0x96,0x95,0x96,0x95,0x95,0x96,0x96,
4039 0x96,0x01,0x98,0x98,0x96,0x95,0x98,0x98,0x98,0x98,0x98,0x94,0x95,0x93,0x96,0x95,
4040 0x95,0x96,0x93,0x8E,0x8E,0x8E,0x92,0x8E,0x8E,0x8E,0x96,0x93,0x98,0x96,0x95,0x98,
4041 0x98,0x96,0x96,0x98,0x01,0x98,0x98,0x96,0x96,0x94,0x96,0x95,0x98,0x97,0x01,0x94,
4042 0x96,0x98,0x01,0x96,0x96,0x92,0x98,0x95,0x98,0x95,0x95,0x96,0x01,0x94,0x96,0x96,
4043 0x93,0x96,0x93,0x96,0x95,0x94,0x95,0x92,0x95,0x96,0x95,0x94,0x95,0x92,0x95,0x96,
4044 0x95,0x01,0x96,0x96,0x01,0x95,0x98,0x94,0x98,0x95,0x96,0x94,0x95,0x01,0x94,0x96,
4045 0x96,0x98,0x95,0x93,0x96,0x98,0x98,0x95,0x01,0x98,0x93,0x96,0x98,0x01,0x94,0x95,
4046 0x96,0x96,0x95,0x98,0x98,0x98,0x95,0x94,0x95,0x98,0x96,0x96,0x01,0x94,0x96,0x95,
4047 0x91,0x92,0x92,0x95,0x96,0x95,0x92,0x96,0x91,0x95,0x95,0x92,0x92,0x93,0x95,0x94,
4048 0x94,0x91,0x93,0x92,0x94,0x91,0x92,0x96,0x92,0x92,0x92,0x94,0x94,0x92,0x01,0x98,
4049 0x95,0x95,0x93,0x98,0x01,0x93,0x95,0x95,0x95,0x95,0x93,0x93,0x92,0x92,0x01,0x95,
4050 0x95,0x95,0x92,0x92,0x93,0x93,0x93,0x92,0x94,0x94,0x95,0x95,0x95,0x93,0x94,0x95,
4051 0x93,0x92,0x93,0x94,0x94,0x93,0x92,0x95,0x94,0x96,0x95,0x95,0x98,0x96,0x95,0x95,
4052 0x92,0x96,0x95,0x95,0x96,0x95,0x95,0x01,0x95,0x01,0x96,0x99,0x99,0x99,0x98,0x01,
4053 0x98,0x95,0x96,0x96,0x98,0x95,0x93,0x96,0x01,0x98,0x98,0x98,0x98,0x95,0x95,0x93,
4054 0x93,0x95,0x95,0x96,0x95,0x93,0x94,0x95,0x01,0x95,0x96,0x96,0x01,0x01,0x95,0x95,
4055 0x95,0x97,0x98,0x92,0x94,0x01,0x98,0x01,0x96,0x96,0x98,0x93,0x92,0x93,0x94,0x98,
4056 0x95,0x94,0x94,0x95,0x98,0x94,0x98,0x94,0x92,0x96,0x98,0x98,0x01,0x96,0x92,0x94,
4057 0x95,0x95,0x95,0x98,0x95,0x96,0x95,0x96,0x96,0x95,0x94,0x96,0x92,0x95,0x96,0x96,
4058 0x96,0x95,0x01,0x95,0x95,0x92,0x94,0x95,0x01,0x96,0x94,0x98,0x96,0x95,0x95,0x98,
4059 0x01,0x98,0x96,0x99,0x98,0x99,0x98,0x97,0x95,0x96,0x95,0x92,0x92,0x01,0x94,0x96,
4060 0x93,0x8E,0x8E,0x8E,0x92,0x8E,0x8E,0x92,0x95,0x95,0x96,0x98,0x95,0x95,0x98,0x94,
4061 0x95,0x01,0x98,0x98,0x01,0x96,0x01,0x98,0x95,0x01,0x01,0x01,0x95,0x98,0x95,0x94,
4062 0x01,0x96,0x96,0x96,0x96,0x98,0x98,0x98,0x95,0x98,0x95,0x95,0x96,0x96,0x01,0x96,
4063 0x95,0x93,0x95,0x01,0x92,0x92,0x92,0x94,0x96,0x94,0x96,0x96,0x95,0x95,0x01,0x98,
4064 0x94,0x94,0x98,0x96,0x98,0x95,0x92,0x96,0x94,0x92,0x98,0x94,0x01,0x92,0x94,0x96,
4065 0x94,0x96,0x94,0x96,0x96,0x96,0x95,0x95,0x96,0x01,0x98,0x96,0x98,0x96,0x96,0x98,
4066 0x98,0x96,0x96,0x94,0x95,0x98,0x98,0x96,0x98,0x98,0x96,0x95,0x94,0x96,0x94,0x95,
4067 0x92,0x91,0x95,0x92,0x94,0x92,0x92,0x91,0x95,0x94,0x93,0x92,0x95,0x95,0x91,0x94,
4068 0x93,0x91,0x98,0x94,0x94,0x92,0x93,0x93,0x01,0x94,0x95,0x95,0x96,0x94,0x98,0x96,
4069 0x95,0x98,0x98,0x01,0x96,0x95,0x92,0x93,0x94,0x94,0x93,0x95,0x93,0x95,0x95,0x96,
4070 0x95,0x92,0x92,0x98,0x93,0x93,0x96,0x92,0x95,0x95,0x93,0x92,0x93,0x93,0x95,0x94,
4071 0x01,0x93,0x92,0x96,0x93,0x92,0x93,0x93,0x95,0x92,0x94,0x92,0x91,0x01,0x98,0x95,
4072 0x96,0x98,0x95,0x98,0x96,0x01,0x99,0x01,0x96,0x01,0x94,0x97,0x98,0x01,0x93,0x01,
4073 0x96,0x01,0x93,0x96,0x94,0x98,0x94,0x94,0x96,0x96,0x98,0x98,0x96,0x98,0x01,0x01,
4074 0x95,0x96,0x01,0x96,0x95,0x98,0x94,0x98,0x95,0x96,0x99,0x99,0x99,0x99,0x94,0x99,
4075 0x99,0x96,0x95,0x93,0x99,0x98,0x95,0x97,0x96,0x01,0x92,0x95,0x96,0x98,0x94,0x94,
4076 0x96,0x96,0x01,0x96,0x94,0x96,0x94,0x98,0x96,0x93,0x96,0x93,0x98,0x98,0x96,0x98,
4077 0x96,0x96,0x95,0x98,0x95,0x98,0x95,0x98,0x95,0x95,0x98,0x98,0x98,0x96,0x96,0x96,
4078 0x98,0x98,0x01,0x95,0x97,0x96,0x96,0x95,0x98,0x98,0x94,0x98,0x98,0x98,0x99,0x9A,
4079 0x9A,0x96,0x98,0x98,0x97,0x01,0x01,0x95,0x94,0x92,0x93,0x93,0x8E,0x92,0x94,0x92,
4080 0x94,0x91,0x92,0x92,0x93,0x96,0x94,0x95,0x95,0x96,0x94,0x96,0x95,0x94,0x96,0x01,
4081 0x98,0x94,0x98,0x96,0x96,0x94,0x98,0x96,0x96,0x01,0x01,0x94,0x94,0x94,0x95,0x96,
4082 0x94,0x96,0x95,0x98,0x94,0x95,0x94,0x96,0x98,0x96,0x95,0x96,0x01,0x95,0x95,0x93,
4083 0x95,0x95,0x93,0x93,0x96,0x01,0x95,0x96,0x98,0x98,0x93,0x98,0x96,0x95,0x96,0x96,
4084 0x98,0x98,0x95,0x95,0x96,0x98,0x95,0x98,0x94,0x96,0x94,0x98,0x94,0x98,0x01,0x98,
4085 0x01,0x01,0x98,0x96,0x96,0x01,0x01,0x95,0x98,0x01,0x01,0x98,0x98,0x95,0x98,0x96,
4086 0x01,0x94,0x01,0x01,0x96,0x01,0x94,0x98,0x98,0x01,0x01,0x96,0x95,0x98,0x98,0x01,
4087 0x92,0x92,0x92,0x92,0x92,0x93,0x92,0x92,0x98,0x95,0x91,0x95,0x93,0x92,0x92,0x01,
4088 0x95,0x93,0x92,0x94,0x94,0x96,0x96,0x96,0x01,0x94,0x96,0x96,0x96,0x96,0x95,0x95,
4089 0x94,0x01,0x95,0x94,0x98,0x96,0x95,0x96,0x93,0x92,0x01,0x93,0x92,0x95,0x01,0x01,
4090 0x93,0x92,0x93,0x93,0x93,0x96,0x01,0x94,0x95,0x93,0x93,0x93,0x95,0x93,0x95,0x93,
4091 0x93,0x93,0x92,0x95,0x92,0x93,0x92,0x91,0x93,0x93,0x92,0x95,0x93,0x95,0x95,0x96,
4092 0x97,0x96,0x99,0x98,0x98,0x94,0x93,0x96,0x96,0x93,0x93,0x95,0x95,0x94,0x94,0x95,
4093 0x93,0x92,0x95,0x93,0x93,0x93,0x92,0x98,0x93,0x96,0x94,0x94,0x96,0x99,0x98,0x98,
4094 0x98,0x95,0x94,0x98,0x01,0x98,0x98,0x99,0x01,0x95,0x96,0x01,0x97,0x97,0x95,0x97,
4095 0x94,0x94,0x98,0x97,0x95,0x98,0x99,0x95,0x99,0x96,0x95,0x98,0x98,0x98,0x98,0x98,
4096 0x98,0x95,0x96,0x98,0x95,0x98,0x96,0x92,0x98,0x98,0x96,0x95,0x96,0x98,0x96,0x94,
4097 0x94,0x01,0x95,0x96,0x96,0x95,0x96,0x98,0x01,0x01,0x95,0x92,0x98,0x95,0x98,0x95,
4098 0x94,0x96,0x97,0x98,0x95,0x01,0x01,0x9A,0x96,0x98,0x96,0x9A,0x98,0x98,0x98,0x95,
4099 0x96,0x98,0x94,0x98,0x95,0x93,0x94,0x94,0x92,0x95,0x94,0x92,0x8E,0x8E,0x94,0x93,
4100 0x91,0x95,0x95,0x94,0x01,0x95,0x98,0x95,0x01,0x98,0x96,0x01,0x96,0x93,0x98,0x98,
4101 0x94,0x94,0x96,0x95,0x96,0x96,0x95,0x95,0x95,0x95,0x96,0x94,0x94,0x95,0x94,0x98,
4102 0x95,0x95,0x96,0x98,0x93,0x96,0x98,0x92,0x01,0x96,0x93,0x95,0x94,0x98,0x95,0x91,
4103 0x94,0x92,0x95,0x96,0x98,0x95,0x94,0x98,0x96,0x98,0x94,0x96,0x95,0x93,0x95,0x01,
4104 0x95,0x01,0x96,0x01,0x98,0x96,0x98,0x98,0x95,0x98,0x94,0x96,0x98,0x97,0x97,0x95,
4105 0x98,0x96,0x98,0x95,0x94,0x95,0x98,0x95,0x98,0x98,0x98,0x01,0x95,0x98,0x98,0x99,
4106 0x98,0x01,0x99,0x98,0x99,0x98,0x98,0x01,0x98,0x96,0x99,0x99,0x98,0x99,0x99,0x98,
4107 0x01,0x95,0x95,0x94,0x95,0x01,0x98,0x94,0x94,0x94,0x96,0x91,0x91,0x95,0x91,0x94,
4108 0x92,0x94,0x95,0x95,0x98,0x96,0x01,0x93,0x98,0x98,0x96,0x95,0x98,0x94,0x94,0x01,
4109 0x98,0x01,0x01,0x96,0x98,0x99,0x98,0x94,0x93,0x98,0x01,0x98,0x95,0x96,0x96,0x96,
4110 0x94,0x98,0x96,0x93,0x95,0x96,0x01,0x01,0x94,0x92,0x95,0x95,0x92,0x94,0x93,0x01,
4111 0x92,0x95,0x94,0x96,0x96,0x92,0x93,0x93,0x91,0x01,0x95,0x93,0x94,0x93,0x96,0x95,
4112 0x98,0x94,0x92,0x95,0x98,0x92,0x94,0x93,0x95,0x93,0x95,0x96,0x95,0x93,0x01,0x92,
4113 0x98,0x93,0x95,0x93,0x95,0x95,0x95,0x95,0x93,0x94,0x95,0x94,0x98,0x93,0x98,0x01,
4114 0x98,0x98,0x98,0x01,0x96,0x95,0x94,0x96,0x96,0x95,0x98,0x98,0x95,0x94,0x94,0x01,
4115 0x94,0x95,0x93,0x94,0x91,0x94,0x95,0x96,0x01,0x96,0x96,0x95,0x01,0x94,0x98,0x01,
4116 0x95,0x95,0x93,0x98,0x96,0x96,0x01,0x96,0x01,0x96,0x98,0x96,0x94,0x01,0x98,0x95,
4117 0x94,0x92,0x96,0x01,0x96,0x94,0x96,0x01,0x96,0x98,0x94,0x01,0x94,0x01,0x95,0x98,
4118 0x98,0x99,0x94,0x99,0x98,0x95,0x99,0x98,0x98,0x98,0x98,0x95,0x98,0x98,0x98,0x97,
4119 0x96,0x96,0x94,0x95,0x93,0x96,0x92,0x8E,0x92,0x92,0x96,0x94,0x92,0x95,0x93,0x92,
4120 0x98,0x93,0x98,0x95,0x95,0x96,0x98,0x96,0x95,0x96,0x95,0x01,0x96,0x95,0x98,0x95,
4121 0x95,0x01,0x01,0x96,0x96,0x01,0x95,0x98,0x95,0x95,0x01,0x01,0x95,0x96,0x95,0x01,
4122 0x96,0x95,0x95,0x96,0x96,0x96,0x01,0x96,0x96,0x96,0x95,0x96,0x95,0x96,0x8E,0x92,
4123 0x94,0x01,0x96,0x96,0x98,0x98,0x98,0x96,0x01,0x96,0x98,0x96,0x96,0x94,0x01,0x98,
4124 0x94,0x95,0x96,0x96,0x94,0x95,0x96,0x94,0x95,0x96,0x96,0x01,0x01,0x98,0x98,0x98,
4125 0x98,0x95,0x96,0x98,0x96,0x95,0x95,0x98,0x01,0x96,0x98,0x98,0x94,0x95,0x98,0x01,
4126 0x95,0x9A,0x98,0x9A,0x98,0x9A,0x99,0x9A,0x98,0x99,0x01,0x99,0x98,0x98,0x98,0x95,
4127 0x95,0x92,0x91,0x91,0x94,0x94,0x91,0x91,0x94,0x93,0x8E,0x94,0x8E,0x8E,0x92,0x92,
4128 0x94,0x94,0x94,0x95,0x95,0x01,0x95,0x96,0x98,0x96,0x96,0x95,0x96,0x98,0x98,0x92,
4129 0x01,0x98,0x97,0x01,0x98,0x94,0x98,0x95,0x99,0x98,0x96,0x98,0x92,0x95,0x93,0x95,
4130 0x92,0x93,0x95,0x95,0x96,0x96,0x94,0x96,0x95,0x98,0x98,0x95,0x96,0x98,0x95,0x94,
4131 0x01,0x94,0x95,0x96,0x96,0x95,0x98,0x95,0x95,0x93,0x96,0x96,0x95,0x94,0x98,0x98,
4132 0x96,0x96,0x95,0x92,0x93,0x92,0x93,0x93,0x94,0x93,0x92,0x94,0x96,0x01,0x96,0x94,
4133 0x91,0x95,0x96,0x94,0x93,0x94,0x93,0x93,0x92,0x92,0x01,0x96,0x95,0x94,0x96,0x96,
4134 0x98,0x94,0x96,0x95,0x98,0x94,0x96,0x98,0x98,0x95,0x95,0x95,0x98,0x94,0x93,0x01,
4135 0x01,0x92,0x95,0x01,0x94,0x95,0x95,0x95,0x93,0x95,0x94,0x95,0x93,0x94,0x95,0x95,
4136 0x92,0x01,0x01,0x94,0x01,0x94,0x95,0x94,0x94,0x94,0x94,0x94,0x95,0x95,0x98,0x98,
4137 0x95,0x94,0x96,0x98,0x94,0x95,0x93,0x01,0x92,0x94,0x99,0x96,0x96,0x96,0x01,0x98,
4138 0x98,0x96,0x99,0x98,0x94,0x95,0x95,0x95,0x98,0x98,0x01,0x98,0x01,0x98,0x95,0x95,
4139 0x95,0x94,0x92,0x94,0x95,0x93,0x8E,0x93,0x95,0x01,0x95,0x94,0x95,0x93,0x93,0x01,
4140 0x95,0x94,0x93,0x94,0x96,0x96,0x96,0x93,0x95,0x94,0x98,0x95,0x01,0x01,0x96,0x01,
4141 0x95,0x96,0x96,0x01,0x98,0x96,0x96,0x95,0x95,0x96,0x95,0x95,0x96,0x01,0x94,0x96,
4142 0x95,0x96,0x98,0x93,0x98,0x98,0x96,0x96,0x01,0x01,0x95,0x95,0x92,0x8E,0x92,0x95,
4143 0x94,0x96,0x96,0x01,0x96,0x98,0x95,0x01,0x98,0x98,0x01,0x96,0x95,0x96,0x98,0x01,
4144 0x96,0x98,0x95,0x96,0x94,0x96,0x94,0x95,0x95,0x98,0x95,0x96,0x95,0x94,0x94,0x01,
4145 0x98,0x98,0x95,0x98,0x98,0x98,0x01,0x98,0x98,0x95,0x98,0x01,0x96,0x94,0x99,0x99,
4146 0x98,0x99,0x98,0x98,0x96,0x99,0x98,0x99,0x98,0x98,0x95,0x93,0x95,0x97,0x94,0x96,
4147 0x01,0x8E,0x96,0x92,0x8E,0x8E,0x8E,0x8E,0x8E,0x92,0x93,0x95,0x94,0x92,0x92,0x96,
4148 0x01,0x96,0x8E,0x01,0x96,0x95,0x94,0x92,0x01,0x98,0x96,0x96,0x98,0x96,0x98,0x98,
4149 0x95,0x94,0x98,0x96,0x96,0x95,0x95,0x96,0x98,0x93,0x97,0x96,0x98,0x98,0x01,0x01,
4150 0x95,0x92,0x93,0x95,0x94,0x95,0x95,0x95,0x95,0x96,0x95,0x94,0x97,0x95,0x98,0x95,
4151 0x94,0x01,0x96,0x95,0x93,0x98,0x98,0x98,0x98,0x96,0x99,0x96,0x98,0x97,0x94,0x96,
4152 0x95,0x98,0x01,0x96,0x95,0x92,0x96,0x95,0x92,0x93,0x94,0x93,0x93,0x92,0x92,0x93,
4153 0x93,0x95,0x94,0x95,0x92,0x93,0x96,0x01,0x94,0x96,0x94,0x95,0x96,0x98,0x93,0x94,
4154 0x96,0x94,0x95,0x98,0x96,0x93,0x98,0x94,0x94,0x92,0x93,0x92,0x95,0x95,0x95,0x96,
4155 0x95,0x95,0x94,0x95,0x93,0x92,0x94,0x94,0x98,0x94,0x95,0x93,0x94,0x95,0x95,0x94,
4156 0x96,0x95,0x95,0x98,0x95,0x01,0x94,0x95,0x95,0x94,0x96,0x94,0x94,0x98,0x98,0x99,
4157 0x98,0x98,0x98,0x99,0x96,0x99,0x98,0x99,0x99,0x99,0x96,0x95,0x97,0x95,0x98,0x01,
4158 0x98,0x97,0x98,0x96,0x98,0x96,0x96,0x99,0x98,0x96,0x98,0x95,0x95,0x98,0x94,0x8E,
4159 0x93,0x8E,0x92,0x92,0x93,0x95,0x92,0x93,0x94,0x92,0x94,0x93,0x93,0x96,0x94,0x98,
4160 0x93,0x98,0x01,0x94,0x96,0x98,0x96,0x94,0x96,0x96,0x01,0x01,0x01,0x95,0x95,0x94,
4161 0x96,0x95,0x96,0x96,0x95,0x98,0x95,0x95,0x96,0x95,0x94,0x98,0x93,0x98,0x98,0x01,
4162 0x96,0x01,0x94,0x95,0x96,0x01,0x95,0x94,0x94,0x94,0x94,0x94,0x94,0x96,0x98,0x95,
4163 0x93,0x96,0x95,0x95,0x98,0x92,0x95,0x98,0x94,0x94,0x95,0x98,0x95,0x97,0x98,0x96,
4164 0x96,0x97,0x98,0x98,0x01,0x97,0x95,0x95,0x98,0x98,0x98,0x98,0x96,0x99,0x96,0x95,
4165 0x98,0x94,0x95,0x94,0x98,0x95,0x94,0x95,0x94,0x97,0x94,0x98,0x96,0x96,0x98,0x98,
4166 0x96,0x98,0x94,0x98,0x01,0x95,0x98,0x93,0x98,0x94,0x01,0x98,0x98,0x01,0x96,0x96,
4167 0x8D,0x91,0x92,0x95,0x94,0x93,0x92,0x95,0x95,0x91,0x95,0x96,0x96,0x01,0x98,0x98,
4168 0x95,0x01,0x91,0x8E,0x8E,0x95,0x92,0x95,0x95,0x94,0x98,0x95,0x95,0x94,0x01,0x01,
4169 0x94,0x93,0x98,0x95,0x01,0x95,0x95,0x93,0x93,0x01,0x95,0x93,0x93,0x95,0x99,0x98,
4170 0x96,0x94,0x98,0x95,0x95,0x98,0x01,0x95,0x96,0x98,0x97,0x95,0x98,0x94,0x98,0x98,
4171 0x01,0x01,0x98,0x98,0x01,0x96,0x98,0x98,0x97,0x94,0x98,0x97,0x98,0x96,0x96,0x98,
4172 0x98,0x98,0x95,0x98,0x95,0x95,0x95,0x95,0x96,0x94,0x95,0x92,0x93,0x92,0x95,0x93,
4173 0x93,0x95,0x94,0x93,0x95,0x96,0x96,0x96,0x96,0x94,0x94,0x98,0x96,0x96,0x98,0x94,
4174 0x96,0x98,0x98,0x95,0x93,0x94,0x96,0x94,0x92,0x93,0x94,0x01,0x93,0x92,0x93,0x93,
4175 0x95,0x94,0x93,0x92,0x92,0x93,0x95,0x98,0x95,0x93,0x01,0x96,0x93,0x95,0x96,0x98,
4176 0x93,0x95,0x92,0x95,0x92,0x94,0x94,0x92,0x95,0x94,0x92,0x92,0x94,0x93,0x98,0x01,
4177 0x94,0x96,0x94,0x94,0x93,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x95,0x95,0x01,0x98,
4178 0x97,0x98,0x98,0x01,0x98,0x98,0x96,0x98,0x96,0x98,0x01,0x96,0x94,0x8E,0x92,0x92,
4179 0x92,0x92,0x95,0x93,0x95,0x93,0x01,0x94,0x95,0x94,0x95,0x95,0x01,0x95,0x92,0x96,
4180 0x98,0x96,0x96,0x01,0x94,0x96,0x94,0x95,0x96,0x92,0x95,0x96,0x96,0x01,0x98,0x93,
4181 0x98,0x96,0x95,0x98,0x93,0x96,0x95,0x98,0x01,0x98,0x94,0x98,0x94,0x96,0x98,0x95,
4182 0x95,0x95,0x95,0x93,0x96,0x95,0x93,0x8E,0x94,0x94,0x93,0x94,0x95,0x96,0x95,0x98,
4183 0x96,0x94,0x96,0x96,0x96,0x96,0x96,0x96,0x98,0x96,0x98,0x96,0x01,0x01,0x99,0x95,
4184 0x99,0x96,0x98,0x98,0x98,0x98,0x99,0x01,0x99,0x98,0x96,0x96,0x98,0x01,0x99,0x98,
4185 0x98,0x94,0x01,0x95,0x98,0x98,0x95,0x01,0x01,0x98,0x01,0x98,0x98,0x96,0x01,0x95,
4186 0x98,0x94,0x01,0x01,0x96,0x96,0x93,0x94,0x01,0x96,0x98,0x98,0x95,0x96,0x01,0x95,
4187 0x97,0x96,0x98,0x98,0x96,0x95,0x96,0x96,0x01,0x96,0x96,0x96,0x96,0x96,0x94,0x94,
4188 0x95,0x92,0x95,0x92,0x96,0x01,0x94,0x98,0x01,0x98,0x98,0x01,0x01,0x96,0x93,0x94,
4189 0x98,0x95,0x95,0x93,0x01,0x96,0x98,0x95,0x95,0x96,0x95,0x92,0x95,0x01,0x96,0x96,
4190 0x97,0x98,0x95,0x98,0x95,0x95,0x95,0x98,0x96,0x94,0x95,0x01,0x98,0x98,0x93,0x94,
4191 0x92,0x96,0x96,0x01,0x95,0x92,0x98,0x98,0x93,0x96,0x96,0x95,0x01,0x98,0x97,0x01,
4192 0x95,0x96,0x94,0x96,0x99,0x98,0x98,0x96,0x96,0x97,0x94,0x96,0x01,0x94,0x92,0x96,
4193 0x95,0x92,0x95,0x94,0x01,0x94,0x98,0x95,0x96,0x96,0x96,0x94,0x93,0x95,0x01,0x95,
4194 0x94,0x95,0x95,0x92,0x92,0x98,0x95,0x95,0x92,0x95,0x94,0x94,0x96,0x95,0x95,0x93,
4195 0x93,0x95,0x01,0x95,0x96,0x92,0x94,0x94,0x95,0x95,0x94,0x93,0x01,0x95,0x94,0x95,
4196 0x01,0x96,0x01,0x96,0x98,0x98,0x94,0x96,0x96,0x95,0x98,0x94,0x95,0x96,0x96,0x92,
4197 0x94,0x95,0x98,0x96,0x98,0x98,0x98,0x98,0x01,0x98,0x94,0x01,0x01,0x98,0x99,0x98,
4198 0x01,0x98,0x98,0x95,0x95,0x96,0x96,0x93,0x95,0x91,0x94,0x92,0x8E,0x95,0x94,0x98,
4199 0x93,0x95,0x94,0x93,0x94,0x92,0x95,0x95,0x98,0x96,0x93,0x95,0x92,0x96,0x95,0x95,
4200 0x01,0x96,0x96,0x94,0x95,0x95,0x96,0x94,0x98,0x98,0x01,0x95,0x96,0x95,0x94,0x96,
4201 0x95,0x96,0x96,0x96,0x94,0x98,0x96,0x94,0x01,0x98,0x01,0x98,0x98,0x98,0x95,0x95,
4202 0x01,0x95,0x94,0x93,0x92,0x8E,0x94,0x91,0x98,0x95,0x98,0x95,0x98,0x95,0x96,0x98,
4203 0x96,0x98,0x01,0x96,0x95,0x01,0x98,0x95,0x94,0x95,0x98,0x98,0x99,0x98,0x98,0x96,
4204 0x98,0x95,0x98,0x95,0x96,0x96,0x99,0x99,0x95,0x98,0x95,0x01,0x94,0x96,0x98,0x99,
4205 0x98,0x96,0x95,0x97,0x94,0x93,0x95,0x98,0x95,0x96,0x98,0x94,0x95,0x95,0x01,0x98,
4206 0x01,0x95,0x94,0x96,0x01,0x96,0x96,0x96,0x96,0x92,0x95,0x98,0x01,0x93,0x98,0x98,
4207 0x9B,0x94,0x98,0x94,0x98,0x95,0x01,0x94,0x96,0x94,0x93,0x01,0x96,0x92,0x98,0x94,
4208 0x98,0x01,0x95,0x96,0x95,0x98,0x98,0x98,0x94,0x8E,0x92,0x98,0x95,0x93,0x93,0x98,
4209 0x94,0x92,0x95,0x92,0x01,0x92,0x91,0x96,0x95,0x93,0x91,0x92,0x92,0x95,0x01,0x98,
4210 0x95,0x98,0x92,0x98,0x98,0x01,0x01,0x94,0x92,0x95,0x95,0x92,0x93,0x95,0x92,0x91,
4211 0x93,0x92,0x92,0x98,0x93,0x93,0x94,0x01,0x98,0x98,0x92,0x01,0x98,0x95,0x98,0x98,
4212 0x01,0x96,0x96,0x98,0x98,0x94,0x01,0x92,0x95,0x98,0x98,0x98,0x96,0x95,0x98,0x98,
4213 0x96,0x95,0x01,0x98,0x96,0x95,0x96,0x98,0x95,0x92,0x96,0x93,0x93,0x93,0x91,0x95,
4214 0x96,0x95,0x96,0x95,0x98,0x95,0x01,0x96,0x95,0x96,0x92,0x95,0x94,0x94,0x95,0x95,
4215 0x98,0x94,0x92,0x96,0x94,0x01,0x96,0x94,0x95,0x96,0x96,0x95,0x95,0x01,0x01,0x98,
4216 0x98,0x94,0x94,0x98,0x95,0x93,0x01,0x94,0x92,0x01,0x96,0x96,0x98,0x98,0x96,0x96,
4217 0x97,0x94,0x98,0x95,0x96,0x95,0x99,0x98,0x95,0x98,0x01,0x98,0x98,0x95,0x95,0x97,
4218 0x98,0x96,0x98,0x94,0x93,0x94,0x93,0x95,0x94,0x8E,0x92,0x93,0x95,0x93,0x98,0x96,
4219 0x01,0x93,0x94,0x95,0x95,0x93,0x96,0x96,0x95,0x95,0x01,0x94,0x98,0x01,0x95,0x98,
4220 0x01,0x94,0x94,0x95,0x98,0x96,0x98,0x01,0x95,0x95,0x98,0x01,0x96,0x98,0x98,0x98,
4221 0x98,0x01,0x95,0x01,0x96,0x01,0x96,0x94,0x01,0x98,0x92,0x96,0x95,0x95,0x96,0x95,
4222 0x96,0x95,0x95,0x92,0x95,0x93,0x93,0x98,0x95,0x95,0x94,0x92,0x98,0x94,0x96,0x95,
4223 0x94,0x95,0x01,0x95,0x01,0x96,0x95,0x98,0x98,0x01,0x98,0x99,0x01,0x98,0x98,0x97,
4224 0x94,0x98,0x97,0x95,0x97,0x95,0x98,0x98,0x98,0x96,0x98,0x01,0x98,0x01,0x92,0x96,
4225 0x96,0x01,0x98,0x98,0x96,0x01,0x98,0x98,0x95,0x98,0x94,0x92,0x95,0x98,0x98,0x93,
4226 0x98,0x01,0x96,0x98,0x98,0x96,0x01,0x96,0x94,0x94,0x96,0x95,0x98,0x94,0x93,0x94,
4227 0x9B,0x98,0x98,0x98,0x98,0x98,0x96,0x97,0x98,0x96,0x94,0x96,0x95,0x93,0x98,0x01,
4228 0x98,0x98,0x97,0x94,0x95,0x94,0x96,0x95,0x94,0x93,0x95,0x8E,0x8E,0x8E,0x95,0x8E,
4229 0x01,0x01,0x98,0x98,0x01,0x93,0x96,0x96,0x95,0x95,0x93,0x92,0x8E,0x8E,0x8E,0x8E,
4230 0x8E,0x92,0x93,0x96,0x98,0x93,0x94,0x01,0x95,0x93,0x98,0x93,0x96,0x95,0x95,0x95,
4231 0x98,0x98,0x98,0x94,0x95,0x98,0x01,0x01,0x96,0x95,0x96,0x93,0x94,0x98,0x95,0x96,
4232 0x94,0x96,0x95,0x95,0x94,0x95,0x92,0x98,0x96,0x95,0x92,0x96,0x98,0x95,0x95,0x98,
4233 0x95,0x98,0x94,0x96,0x95,0x96,0x96,0x98,0x95,0x94,0x01,0x96,0x96,0x01,0x96,0x01,
4234 0x98,0x98,0x01,0x01,0x94,0x94,0x95,0x01,0x01,0x94,0x98,0x96,0x96,0x98,0x97,0x98,
4235 0x95,0x95,0x94,0x01,0x01,0x97,0x96,0x94,0x97,0x98,0x94,0x95,0x96,0x98,0x96,0x95,
4236 0x95,0x95,0x98,0x01,0x98,0x95,0x98,0x95,0x95,0x98,0x98,0x95,0x98,0x98,0x95,0x93,
4237 0x99,0x01,0x98,0x98,0x98,0x98,0x95,0x96,0x94,0x95,0x95,0x98,0x95,0x96,0x96,0x95,
4238 0x91,0x95,0x93,0x92,0x91,0x95,0x94,0x8E,0x95,0x98,0x93,0x93,0x95,0x92,0x95,0x93,
4239 0x92,0x96,0x98,0x94,0x96,0x01,0x96,0x95,0x98,0x98,0x93,0x96,0x95,0x98,0x95,0x95,
4240 0x01,0x98,0x01,0x95,0x98,0x96,0x98,0x98,0x92,0x95,0x98,0x96,0x01,0x98,0x95,0x95,
4241 0x01,0x96,0x95,0x98,0x98,0x96,0x95,0x01,0x01,0x96,0x98,0x96,0x96,0x96,0x96,0x94,
4242 0x95,0x95,0x93,0x95,0x95,0x95,0x93,0x98,0x94,0x92,0x95,0x98,0x97,0x94,0x98,0x96,
4243 0x98,0x95,0x96,0x98,0x95,0x98,0x98,0x98,0x98,0x98,0x99,0x95,0x95,0x98,0x95,0x97,
4244 0x01,0x98,0x98,0x98,0x95,0x96,0x95,0x95,0x94,0x94,0x94,0x95,0x94,0x96,0x96,0x94,
4245 0x96,0x94,0x98,0x95,0x98,0x01,0x98,0x94,0x01,0x96,0x96,0x98,0x96,0x98,0x95,0x92,
4246 0x96,0x96,0x01,0x95,0x98,0x98,0x96,0x01,0x01,0x94,0x94,0x93,0x93,0x96,0x95,0x8D,
4247 0x9B,0x99,0x98,0x98,0x95,0x96,0x94,0x99,0x96,0x95,0x95,0x97,0x96,0x98,0x01,0x94,
4248 0x94,0x95,0x96,0x01,0x96,0x93,0x95,0x92,0x01,0x93,0x94,0x96,0x94,0x92,0x95,0x94,
4249 0x95,0x94,0x95,0x95,0x01,0x93,0x01,0x95,0x95,0x01,0x98,0x98,0x92,0x98,0x93,0x93,
4250 0x95,0x93,0x95,0x93,0x93,0x8E,0x93,0x01,0x96,0x01,0x97,0x01,0x98,0x96,0x96,0x94,
4251 0x01,0x01,0x95,0x96,0x95,0x98,0x95,0x98,0x95,0x95,0x98,0x98,0x01,0x95,0x92,0x98,
4252 0x93,0x95,0x98,0x94,0x92,0x95,0x92,0x01,0x96,0x93,0x96,0x98,0x98,0x95,0x95,0x94,
4253 0x93,0x96,0x95,0x96,0x98,0x95,0x93,0x98,0x01,0x01,0x94,0x96,0x96,0x01,0x95,0x98,
4254 0x96,0x96,0x95,0x98,0x99,0x99,0x94,0x98,0x01,0x01,0x93,0x95,0x99,0x99,0x01,0x01,
4255 0x99,0x95,0x99,0x96,0x99,0x95,0x98,0x95,0x98,0x01,0x92,0x96,0x99,0x99,0x98,0x99,
4256 0x01,0x01,0x95,0x99,0x98,0x99,0x98,0x95,0x98,0x98,0x98,0x99,0x98,0x98,0x01,0x98,
4257 0x98,0x96,0x98,0x98,0x01,0x95,0x95,0x92,0x95,0x95,0x92,0x94,0x94,0x92,0x96,0x95,
4258 0x93,0x91,0x92,0x94,0x91,0x8E,0x8E,0x94,0x92,0x94,0x98,0x95,0x94,0x94,0x92,0x93,
4259 0x98,0x92,0x98,0x98,0x95,0x01,0x96,0x96,0x95,0x01,0x96,0x98,0x94,0x98,0x98,0x98,
4260 0x98,0x96,0x01,0x01,0x95,0x95,0x96,0x94,0x98,0x96,0x96,0x98,0x94,0x98,0x96,0x94,
4261 0x94,0x98,0x01,0x98,0x92,0x96,0x01,0x96,0x94,0x96,0x94,0x96,0x96,0x91,0x95,0x01,
4262 0x96,0x93,0x98,0x98,0x98,0x98,0x94,0x98,0x98,0x99,0x95,0x95,0x99,0x98,0x99,0x98,
4263 0x98,0x98,0x99,0x94,0x99,0x93,0x98,0x95,0x96,0x98,0x98,0x98,0x01,0x96,0x96,0x96,
4264 0x94,0x01,0x95,0x97,0x95,0x95,0x95,0x98,0x95,0x95,0x94,0x01,0x96,0x95,0x96,0x96,
4265 0x98,0x98,0x98,0x92,0x98,0x98,0x98,0x96,0x94,0x96,0x98,0x01,0x96,0x96,0x01,0x96,
4266 0x98,0x94,0x96,0x95,0x98,0x96,0x95,0x96,0x96,0x96,0x98,0x94,0x01,0x93,0x8E,0x93,
4267 0x98,0x98,0x95,0x98,0x01,0x97,0x95,0x96,0x98,0x98,0x95,0x98,0x94,0x96,0x95,0x93,
4268 0x95,0x95,0x96,0x94,0x94,0x96,0x96,0x98,0x95,0x01,0x94,0x01,0x97,0x94,0x97,0x01,
4269 0x96,0x98,0x98,0x93,0x95,0x8E,0x96,0x96,0x01,0x95,0x94,0x94,0x95,0x01,0x96,0x96,
4270 0x98,0x92,0x96,0x92,0x94,0x93,0x94,0x95,0x96,0x94,0x1C,0x1D,0x1D,0x1D,0x1D,0x1E,
4271 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,
4272 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,
4273 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,
4274 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,
4275 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1F,0x1F,0x1F,0x1F,0x1F,
4276 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
4277 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
4278 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
4279 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
4280 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
4281 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
4282 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
4283 0x1F,0x1F,0x1F,0x1F,0x1F,0x95,0x01,0x01,0x98,0x01,0x95,0x98,0x96,0x96,0x94,0x96,
4284 0x01,0x01,0x95,0x98,0x94,0x98,0x01,0x98,0x98,0x01,0x96,0x96,0x96,0x98,0x92,0x01,
4285 0x95,0x94,0x95,0x98,0x93,0x95,0x94,0x95,0x98,0x95,0x93,0x92,0x95,0x95,0x01,0x96,
4286 0x96,0x94,0x94,0x95,0x96,0x94,0x94,0x98,0x95,0x95,0x8E,0x8E,0x95,0x92,0x8E,0x98,
4287 0x98,0x96,0x98,0x96,0x98,0x98,0x93,0x98,0x01,0x95,0x96,0x98,0x93,0x94,0x94,0x95,
4288 0x98,0x95,0x96,0x96,0x95,0x96,0x98,0x94,0x95,0x95,0x95,0x95,0x95,0x93,0x93,0x94,
4289 0x93,0x94,0x92,0x98,0x98,0x96,0x96,0x98,0x95,0x94,0x96,0x94,0x98,0x95,0x94,0x95,
4290 0x99,0x98,0x99,0x96,0x99,0x98,0x01,0x98,0x95,0x95,0x1D,0x00,0x00,0x00,0x00,0x00,
4291 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4292 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4293 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4294 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4295 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4296 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4297 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4298 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4299 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4300 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4301 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4302 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4303 0x00,0x00,0x00,0x00,0xAF,0x9D,0x9A,0x96,0x98,0x01,0x96,0x95,0x96,0x96,0x91,0x96,
4304 0x98,0x98,0x98,0x95,0x95,0x95,0x91,0x01,0x96,0x01,0x92,0x92,0x95,0x93,0x95,0x8E,
4305 0x8E,0x8E,0x93,0x95,0x93,0x94,0x96,0x94,0x95,0x92,0x8E,0x94,0x96,0x98,0x93,0x95,
4306 0x95,0x95,0x8E,0x8E,0x8E,0x95,0x92,0x93,0x8E,0x92,0x93,0x95,0x92,0x96,0x94,0x95,
4307 0x94,0x98,0x01,0x98,0x96,0x98,0x96,0x96,0x96,0x94,0x96,0x98,0x95,0x92,0x95,0x95,
4308 0x98,0x98,0x94,0x98,0x98,0x94,0x93,0x95,0x01,0x92,0x92,0x95,0x94,0x96,0x96,0x94,
4309 0x95,0x92,0x98,0x98,0x01,0x95,0x95,0x98,0x92,0x95,0x96,0x95,0x01,0x96,0x96,0x96,
4310 0x94,0x96,0x98,0x98,0x96,0x95,0x98,0x98,0x95,0x98,0x1D,0x00,0x00,0x00,0x00,0x00,
4311 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4312 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4313 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4314 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4315 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4316 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4317 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4318 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4319 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4320 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4321 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4322 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4323 0x00,0x00,0x00,0x00,0xAF,0x9D,0x9B,0x96,0x98,0x94,0x93,0x93,0x95,0x01,0x96,0x95,
4324 0x96,0x96,0x8E,0x95,0x92,0x8E,0x95,0x92,0x92,0x92,0x8E,0x92,0x8E,0x95,0x93,0x92,
4325 0x95,0x8E,0x8E,0x95,0x94,0x94,0x92,0x92,0x94,0x95,0x8E,0x96,0x8E,0x92,0x92,0x01,
4326 0x93,0x96,0x95,0x95,0x8E,0x8E,0x92,0x96,0x94,0x91,0x92,0x95,0x98,0x92,0x98,0x94,
4327 0x98,0x96,0x98,0x94,0x96,0x95,0x95,0x94,0x95,0x96,0x98,0x01,0x98,0x95,0x98,0x01,
4328 0x01,0x98,0x95,0x96,0x01,0x96,0x01,0x92,0x98,0x92,0x95,0x95,0x92,0x95,0x96,0x95,
4329 0x95,0x98,0x98,0x96,0x92,0x95,0x95,0x95,0x98,0x95,0x01,0x98,0x96,0x98,0x94,0x01,
4330 0x96,0x96,0x01,0x93,0x96,0x94,0x98,0x96,0x96,0x93,0x1D,0x00,0x00,0xA7,0x08,0x1F,
4331 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4332 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4333 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4334 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4335 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4336 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4337 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4338 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4339 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4340 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4341 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4342 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA7,
4343 0x08,0x1F,0x00,0x00,0xAF,0x9D,0x01,0x93,0x93,0x98,0x96,0x94,0x01,0x96,0x95,0x95,
4344 0x8E,0x93,0x94,0x8E,0x93,0x95,0x92,0x92,0x96,0x93,0x95,0x98,0x96,0x98,0x94,0x95,
4345 0x94,0x93,0x94,0x01,0x95,0x94,0x98,0x98,0x91,0x94,0x98,0x96,0x98,0x01,0x98,0x01,
4346 0x98,0x95,0x95,0x96,0x01,0x98,0x94,0x95,0x94,0x95,0x96,0x98,0x01,0x9A,0x9A,0x98,
4347 0x98,0x98,0x95,0x95,0x92,0x94,0x93,0x93,0x93,0x93,0x01,0x95,0x95,0x97,0x96,0x01,
4348 0x98,0x96,0x95,0x93,0x92,0x01,0x95,0x96,0x96,0x95,0x94,0x98,0x94,0x98,0x98,0x95,
4349 0x96,0x01,0x95,0x95,0x95,0x96,0x98,0x98,0x98,0x96,0x99,0x95,0x98,0x94,0x96,0x95,
4350 0x95,0x92,0x98,0x95,0x96,0x93,0x95,0x96,0x98,0x94,0x1D,0x00,0x00,0x08,0x1D,0x1E,
4351 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4352 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4353 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4354 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4355 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4356 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x10,0x10,0x19,0x1F,0x00,0x00,0x08,0x19,
4357 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x07,0x08,0x00,0x00,0x00,
4358 0x00,0x12,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4359 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4360 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4361 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4362 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,
4363 0x1D,0x1E,0x00,0x00,0xAF,0x9B,0x9A,0x94,0x96,0x91,0x93,0x93,0x95,0x98,0x93,0x8E,
4364 0x92,0x95,0x92,0x98,0x93,0x95,0x94,0x92,0x95,0x01,0x94,0x98,0x01,0x01,0x96,0x01,
4365 0x95,0x94,0x96,0x01,0x94,0x92,0x01,0x95,0x94,0x95,0x95,0x99,0x99,0x98,0x98,0x98,
4366 0x99,0x96,0x98,0x95,0x96,0x95,0x96,0x95,0x01,0x98,0x98,0x9A,0x01,0x9A,0x98,0x98,
4367 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4368 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4369 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4370 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x00,0x1F,0x1E,0xE9,
4371 0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x07,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4372 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4373 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4374 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4375 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4376 0x00,0x00,0x00,0x00,0x00,0x1E,0x11,0x19,0x19,0x1A,0x1A,0x1A,0x19,0x19,0x1A,0x13,
4377 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x18,0x17,0x11,0x08,0x00,0x00,
4378 0x12,0x1A,0xEB,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4379 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4380 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4381 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4382 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,
4383 0x1E,0xE9,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4384 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4385 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4386 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4387 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4388 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4389 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4390 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x00,0x00,0x00,0x00,
4391 0x00,0x00,0x00,0x00,0x1D,0x14,0x18,0x1C,0x1C,0x1C,0x00,0x00,0x14,0x1E,0x00,0x00,
4392 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4393 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4394 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4395 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4396 0x00,0x00,0x00,0x00,0x00,0x11,0x18,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x1A,0x13,0x00,
4397 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x19,0x1C,0x08,0x17,0x11,0x12,0x12,
4398 0xEB,0x08,0x1C,0x1C,0x1D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4399 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4400 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4401 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4402 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4403 0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4404 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4405 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4406 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4407 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4408 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4409 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4410 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x00,0x00,0x00,0x00,
4411 0x00,0x00,0x1D,0x14,0x15,0x1B,0x1C,0x1C,0x1B,0x1B,0x1C,0x1C,0x1C,0x1E,0x00,0x00,
4412 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4413 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4414 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4415 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4416 0x00,0x00,0x00,0x00,0x00,0x10,0x19,0x19,0x19,0x19,0x1D,0x1D,0x1A,0x17,0x00,0x00,
4417 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x18,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,
4418 0x1C,0x1C,0x1C,0x1C,0x1C,0x08,0x1A,0x17,0x07,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,
4419 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4420 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4421 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4422 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4423 0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4424 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4425 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4426 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4427 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4428 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4429 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4430 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x00,0x00,0x00,0x00,
4431 0x1D,0x13,0x15,0x1A,0x1A,0x1A,0x1A,0x19,0x1A,0x1A,0x1A,0x1A,0x1B,0x1E,0x00,0x00,
4432 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4433 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4434 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4435 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4436 0x00,0x00,0x00,0x00,0x00,0x10,0x18,0x18,0x18,0x18,0x1F,0x00,0x00,0x00,0x00,0x00,
4437 0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x18,0x1A,0x1A,0x1A,0x1B,0x1B,0x1B,0x1B,0x1B,
4438 0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1A,0x19,0x13,0x13,0x1E,0x00,0x00,0x00,0x00,
4439 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4440 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4441 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4442 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4443 0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4444 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4445 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4446 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4447 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4448 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4449 0x00,0x00,0x1E,0x1D,0xEC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4450 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x12,
4451 0x15,0x1A,0x19,0x19,0x19,0x19,0x1A,0x1B,0x16,0x18,0x19,0x19,0x18,0x1E,0x00,0x00,
4452 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4453 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4454 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4455 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4456 0x00,0x00,0x00,0x00,0x00,0x10,0x17,0x17,0x17,0x17,0x1F,0x00,0x00,0x00,0x00,0x00,
4457 0x00,0x00,0x00,0x00,0x00,0x12,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x1A,0x1A,0x1A,
4458 0x1A,0x1A,0x19,0x19,0x1A,0x1A,0x1A,0x1A,0x19,0x18,0x16,0x13,0x1E,0x00,0x00,0x00,
4459 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4460 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4461 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4462 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4463 0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4464 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEC,0x1D,0x1E,0x00,0x00,0x00,
4465 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4466 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4467 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4468 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,
4469 0x1D,0xEC,0x1D,0x1E,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4470 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x12,
4471 0x19,0x18,0x18,0x18,0x18,0x18,0x1C,0x1E,0x1C,0x16,0x19,0x18,0x1E,0x00,0x00,0x00,
4472 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4473 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4474 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4475 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4476 0x00,0x00,0x00,0x00,0x00,0x10,0x16,0x16,0x16,0x16,0x1F,0x00,0x1F,0x1F,0x00,0x00,
4477 0x00,0x00,0x00,0x00,0x00,0x12,0x16,0x17,0x17,0x17,0x17,0x08,0x13,0x17,0x17,0x18,
4478 0x18,0x18,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x17,0x17,0x17,0x14,0x00,0x00,0x00,
4479 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4480 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4481 0x0F,0x10,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4482 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4483 0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4484 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1E,0x1D,0xEC,0x1D,0x1E,
4485 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4486 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4487 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4488 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x1D,0xEC,0x1D,
4489 0x1E,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0xEE,0xEC,0x00,0x00,0x00,0x00,
4490 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x12,
4491 0x17,0x17,0x17,0x17,0x17,0x17,0x1F,0x1F,0x1F,0x15,0x18,0x1E,0x00,0x00,0x00,0x00,
4492 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4493 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4494 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4495 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4496 0x00,0x00,0x00,0x00,0x00,0x10,0x16,0x16,0x16,0x16,0x1F,0x1F,0x07,0x13,0x00,0x00,
4497 0x00,0x00,0x00,0x00,0x12,0x07,0x16,0x16,0x16,0x16,0x08,0x1F,0x16,0x16,0x16,0x16,
4498 0x16,0x16,0x1E,0x08,0x18,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x07,0x00,0x00,0x00,
4499 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4500 0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x19,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x12,
4501 0x12,0x12,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4502 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4503 0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4504 0x00,0x00,0x00,0xEC,0xEE,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x1F,0x1F,0x1E,0x1D,
4505 0xEC,0x1D,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4506 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4507 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4508 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x1D,0xEC,0x1D,0x1E,0x1F,0x1F,
4509 0x1F,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0xEE,0xEC,0x1E,0x1F,0x00,0x00,0x00,0x00,
4510 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x12,
4511 0x16,0x16,0x16,0x16,0x16,0x16,0x1C,0x00,0x00,0x1E,0x1E,0x00,0x00,0x00,0x00,0x00,
4512 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4513 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4514 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4515 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4516 0x00,0x00,0x00,0x10,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x13,0x00,0x00,
4517 0x00,0x00,0x00,0x00,0x12,0x14,0x07,0x07,0x07,0x08,0x1F,0x00,0x16,0x07,0x07,0x07,
4518 0x07,0x07,0x1E,0x00,0x08,0x18,0x07,0x07,0x07,0x07,0x07,0x07,0x18,0x00,0x00,0x00,
4519 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4520 0x00,0x00,0x00,0x00,0x00,0x10,0x17,0x17,0x1F,0x00,0x00,0x00,0x00,0x00,0x07,0x16,
4521 0x16,0x19,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4522 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4523 0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4524 0x00,0x00,0x00,0x1F,0x1E,0xEC,0xEE,0x00,0x00,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
4525 0x1F,0x1E,0x1D,0xEC,0x1D,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4526 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4527 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4528 0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x1D,0xEC,0x1D,0x1E,0x1F,0x1F,0x1F,0x1F,0x1F,
4529 0x1F,0x1F,0x1F,0x1F,0x1F,0x00,0xEE,0xEC,0x1E,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x00,
4530 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x13,
4531 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4532 0x00,0x00,0x0F,0x0F,0x0F,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x0F,
4533 0x0F,0x0F,0x00,0x00,0x00,0x00,0x0F,0x12,0x12,0x12,0x12,0x11,0x0F,0x17,0x08,0x00,
4534 0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x0F,0x1B,0x1F,0x00,0x1F,0x10,0x0F,0x0F,0x0F,
4535 0xEB,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x11,0x0F,0x07,
4536 0x1F,0x00,0x10,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x1E,0x00,0x00,
4537 0x00,0x00,0x00,0x00,0x12,0x14,0x14,0x14,0x1A,0x1F,0x00,0x00,0x16,0x14,0x14,0x14,
4538 0x14,0x14,0x1E,0x00,0x00,0x08,0x18,0x14,0x14,0x14,0x14,0x14,0x1A,0x00,0x00,0x00,
4539 0x00,0x10,0x10,0x17,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x0F,0x11,0x1E,0x1F,
4540 0x00,0x0F,0x0F,0x00,0x10,0x14,0x14,0x14,0x0F,0x0F,0x11,0x13,0x00,0x00,0x00,0x00,
4541 0x00,0x00,0x00,0x00,0x00,0x0F,0x18,0x1D,0x00,0x00,0x00,0x19,0x07,0x08,0x00,0x00,
4542 0x00,0x00,0x0F,0x11,0x13,0x1A,0x00,0x00,0x1F,0x0F,0x0F,0x11,0x1F,0x00,0x00,0x00,
4543 0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4544 0x00,0x00,0x00,0x1F,0x1F,0x1F,0x1E,0xEC,0xEE,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
4545 0x1F,0x1F,0x1F,0x1F,0x1E,0x1D,0xEC,0x1D,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4546 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4547 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4548 0x00,0x00,0x00,0x1E,0x1D,0xEC,0x1D,0x1E,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
4549 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0xED,0xED,0xED,0xED,
4550 0x1E,0xE9,0x1D,0xED,0xED,0xED,0xED,0xED,0xED,0xED,0x1E,0x00,0x00,0x00,0x00,0x14,
4551 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4552 0x00,0x0F,0x16,0x16,0x16,0x10,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x15,0x16,
4553 0x16,0x15,0x0F,0x00,0x00,0x00,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x10,
4554 0x1E,0x00,0x00,0x10,0x18,0x18,0x18,0x18,0x17,0x1F,0x1F,0x11,0x18,0x18,0x18,0x18,
4555 0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x13,0x19,0x19,0x19,0x19,0x19,0x17,
4556 0x0F,0x1F,0x08,0x08,0x08,0x10,0x13,0x13,0x13,0x13,0x17,0x17,0x1E,0x00,0x00,0x00,
4557 0x00,0x00,0x00,0x00,0x00,0x12,0x13,0x13,0x08,0x00,0x00,0x00,0x16,0x13,0x13,0x13,
4558 0x13,0x13,0x1E,0x00,0x00,0x00,0x08,0x13,0x13,0x13,0x13,0x13,0x08,0x00,0x00,0x00,
4559 0x10,0x18,0x18,0x18,0x18,0x1E,0x00,0x00,0x00,0x1F,0x0F,0x11,0x07,0x07,0x07,0x12,
4560 0x0F,0x07,0x07,0x10,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x0F,0x11,0x11,
4561 0x11,0x11,0x08,0x00,0x0F,0x14,0x14,0x19,0x1D,0x00,0x18,0x07,0x12,0x0F,0x07,0x00,
4562 0x00,0x0F,0x07,0x07,0x07,0x07,0x19,0x1F,0x07,0x07,0x07,0x07,0x07,0x1F,0x00,0x00,
4563 0x00,0x00,0x00,0x00,0xAF,0xED,0xED,0xED,0xED,0xED,0xED,0xED,0x1D,0xE9,0x1E,0xED,
4564 0xED,0xED,0xED,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
4565 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1E,0x1D,0xEC,0x1D,0x1E,0x00,0x00,0x00,0x00,
4566 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4567 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4568 0x1E,0x1D,0xEC,0x1D,0x1E,0x1F,0x1F,0x1F,0x1F,0x1E,0x1E,0x1E,0x1E,0xED,0xED,0xEE,
4569 0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,
4570 0xED,0xE9,0x1C,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1E,0x00,0x00,0x00,0x00,0xEA,
4571 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x1B,0x00,0x00,0x00,0x00,0x00,0x00,
4572 0x0F,0x15,0x15,0x14,0x15,0x13,0x10,0x1C,0x00,0x00,0x00,0x00,0x10,0x14,0x14,0x13,
4573 0x13,0x14,0x14,0x0F,0x00,0x00,0x1C,0x18,0x19,0x19,0x19,0x17,0x17,0x17,0x17,0x18,
4574 0x19,0x00,0x10,0x10,0x0F,0x16,0x16,0x16,0x16,0x11,0x11,0x17,0x16,0x16,0x16,0x16,
4575 0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x13,0x18,0x17,0x17,0x17,0x17,0x17,0x17,
4576 0x17,0x14,0x1F,0x00,0x00,0x10,0x12,0x12,0x12,0x12,0x1E,0x00,0x00,0x00,0x00,0x00,
4577 0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x07,0x19,0x00,0x00,0x00,0x16,0x12,0x12,0x12,
4578 0x12,0x12,0x1E,0x00,0x00,0x00,0x1C,0x12,0x12,0x12,0x12,0x12,0x1C,0x00,0x00,0x10,
4579 0x17,0x16,0x15,0x15,0x16,0x17,0x1E,0x00,0x00,0x0F,0x07,0x14,0x14,0x14,0x14,0x14,
4580 0x14,0x14,0x10,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x1F,0x13,0x13,0x14,0x14,
4581 0x14,0x14,0x12,0x0F,0x14,0x14,0x14,0x14,0x08,0x18,0x14,0x14,0x14,0x14,0x14,0x1A,
4582 0x0F,0x14,0x14,0x14,0x14,0x14,0x0F,0x0F,0x07,0x14,0x14,0x14,0x30,0x0F,0x1F,0x00,
4583 0x00,0x00,0x00,0x00,0xAF,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1C,0xE9,0xED,0x1D,
4584 0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0xEE,
4585 0xED,0xED,0x1E,0x1E,0x1E,0x1E,0x1F,0x1F,0x1F,0x1F,0x1E,0x1D,0xEC,0x1D,0x1E,0x00,
4586 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4587 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1E,0x1D,
4588 0xEC,0x1E,0x1F,0x1F,0x1F,0x1F,0x1F,0x1E,0x1E,0x1E,0xED,0xED,0xEE,0xEE,0xEE,0xEE,
4589 0xEE,0xEE,0xEE,0xEE,0xED,0xED,0xED,0xED,0xED,0xED,0xED,0xED,0xED,0xED,0xED,0xED,
4590 0x1E,0xE9,0x1D,0xED,0xED,0xED,0xED,0xED,0xED,0xED,0x1E,0x00,0x00,0x00,0x00,0x00,
4591 0x1A,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x1A,0x00,0x00,0x00,0x00,0x0F,
4592 0x12,0x12,0x12,0x13,0x13,0x12,0x13,0x13,0x1C,0x00,0x00,0x31,0x30,0x12,0x13,0x1D,
4593 0x13,0x13,0x12,0x12,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x16,0x14,0x14,0x14,
4594 0xEB,0x00,0x00,0x00,0x0F,0x13,0x13,0x13,0x13,0x14,0x14,0x15,0x14,0x14,0x15,0x13,
4595 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x13,0x14,0x14,0x13,0x1F,0x0F,0x14,0x14,
4596 0x14,0x13,0x1F,0x00,0x00,0x10,0x10,0x11,0x11,0x11,0x1E,0x00,0x00,0x00,0x00,0x00,
4597 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x19,0x00,0x00,0x00,0x16,0x11,0x10,0x10,
4598 0x10,0x10,0x1E,0x00,0x00,0x00,0x1E,0x11,0x10,0x10,0x10,0x10,0x1E,0x00,0x10,0x16,
4599 0x15,0x13,0x13,0x13,0x13,0x15,0x16,0x1E,0x00,0x0F,0x13,0x13,0x13,0x13,0x14,0x13,
4600 0x13,0x1E,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x1F,0x1F,0x1F,0x00,0x0F,0x13,0x13,
4601 0x13,0x13,0x1E,0x0F,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x1A,0x00,
4602 0x00,0x0F,0x13,0x13,0x30,0x30,0x1F,0x00,0x0F,0x30,0x30,0x30,0x30,0x1F,0x1F,0x00,
4603 0x00,0x00,0x00,0x00,0xAF,0xED,0xED,0xED,0xED,0xED,0xED,0xED,0x1D,0xE9,0x1E,0xED,
4604 0xED,0xED,0xED,0xED,0xED,0xED,0xED,0xED,0xED,0xED,0xED,0xEE,0xEE,0xEE,0xEE,0xEE,
4605 0xEE,0xEE,0xEE,0xED,0xED,0x1E,0x1E,0x1E,0x1F,0x1F,0x1F,0x1F,0x1F,0x1E,0xEC,0x1D,
4606 0x1E,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4607 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,
4608 0x1D,0x1C,0x1C,0xEC,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xED,0x1E,0x1E,0x1E,
4609 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,
4610 0x1E,0xE9,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x00,0x00,0x00,0x00,0x00,
4611 0x00,0x1A,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x1A,0x00,0x00,0x00,0x0F,
4612 0x32,0x32,0x32,0x18,0x1C,0x12,0x32,0x32,0x32,0x1C,0x00,0x31,0x31,0x31,0x31,0x1D,
4613 0x1C,0x12,0x31,0x31,0x12,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x13,0x13,0x13,0x13,
4614 0x08,0x00,0x00,0x00,0x0F,0x11,0x11,0x11,0x11,0x14,0x00,0x00,0xEB,0x17,0x15,0x00,
4615 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x12,0x10,0x10,0x12,0x1F,0x0F,0x12,0x10,
4616 0x10,0x12,0x1F,0x00,0x00,0x10,0x11,0x11,0x11,0x11,0x1E,0x00,0x00,0x00,0x00,0x00,
4617 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x16,0x10,0x10,0x10,
4618 0x10,0x10,0x1E,0x00,0x00,0x00,0x1E,0x10,0x10,0x10,0x10,0x10,0x1E,0x00,0x10,0x12,
4619 0x12,0x12,0x1E,0x18,0x12,0x12,0x12,0x12,0x00,0x0F,0x12,0x12,0x12,0x12,0x1E,0x1E,
4620 0x1E,0x2F,0x2F,0x2F,0x10,0x30,0x30,0x30,0x30,0x1F,0x00,0x00,0x00,0x0F,0x30,0x30,
4621 0x30,0x30,0x1E,0x00,0x0F,0x12,0x31,0x31,0x31,0x12,0x31,0x31,0x31,0x12,0x1F,0x00,
4622 0x00,0x0F,0x31,0x31,0x31,0x31,0x1F,0x00,0x0F,0x31,0x31,0x31,0x31,0x1F,0x00,0x00,
4623 0x00,0x00,0x00,0x00,0xAF,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0xE9,0x1E,0x1E,
4624 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,
4625 0x1E,0x1E,0xED,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEC,0x1C,0x1C,0x1D,0x1F,
4626 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4627 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4628 0x00,0x00,0x1F,0x1D,0x1C,0x1C,0xEC,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,
4629 0x1D,0x1D,0x1D,0x1D,0x1D,0xED,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0xE9,0xE9,0xE9,0xE9,
4630 0xE9,0xE9,0xE9,0xE9,0xE9,0xE9,0xE9,0xE9,0xE9,0xE9,0x1E,0x00,0x00,0x00,0x00,0x00,
4631 0x00,0x00,0x1A,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x32,0x32,0x1A,0x00,0x00,0x0F,
4632 0x33,0x33,0x33,0x18,0x00,0x1C,0x33,0x33,0x33,0x18,0x00,0x31,0x32,0x32,0x32,0x1D,
4633 0x00,0x1C,0x32,0x32,0x32,0x00,0x00,0x0F,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,
4634 0x08,0x00,0x00,0x00,0x0F,0x31,0x31,0x31,0x31,0x16,0x00,0x00,0x00,0x00,0x00,0x00,
4635 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x11,0x0F,0x0F,0x11,0x1F,0x0F,0x0F,0x0F,
4636 0x0F,0x11,0x1F,0x00,0x00,0x10,0x31,0x30,0x30,0x31,0x1E,0x00,0x00,0x00,0x00,0x00,
4637 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x30,0x30,0x30,
4638 0x30,0x30,0x1E,0x00,0x00,0x00,0x1F,0x30,0x30,0x30,0x30,0x30,0x1E,0x00,0x10,0x31,
4639 0x31,0x31,0x1E,0x00,0x0F,0x31,0x31,0x31,0x00,0x0F,0x31,0x31,0x31,0x31,0x1E,0x00,
4640 0x00,0x00,0x00,0x2F,0x10,0x31,0x31,0x31,0x31,0x1F,0x00,0x00,0x00,0x0F,0x31,0x31,
4641 0x31,0x31,0x1E,0x00,0x0F,0x32,0x32,0x32,0x08,0x08,0x32,0x32,0x32,0x32,0x1F,0x00,
4642 0x00,0x0F,0x32,0x32,0x32,0x32,0x1F,0x00,0x0F,0x32,0x32,0x32,0x32,0x1F,0x00,0x00,
4643 0x00,0x00,0x00,0x00,0xAF,0xE9,0xE9,0xE9,0xE9,0xE9,0xE9,0xE9,0xE9,0xE9,0xE9,0xE9,
4644 0xE9,0xE9,0xE9,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0xED,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,
4645 0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0xEC,0x1C,0x1C,0x1D,0x1F,0x00,0x00,0x00,
4646 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4647 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4648 0x00,0x00,0x00,0x00,0x00,0x1F,0x1D,0x1C,0x1C,0xEC,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,
4649 0x1D,0x1D,0x1D,0x1D,0x1D,0x00,0xEE,0x1C,0xEC,0x1D,0x1D,0x1D,0x00,0x00,0x00,0x00,
4650 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,
4651 0x00,0x00,0x00,0x1A,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x11,0x00,0x00,0x0F,
4652 0x34,0x34,0x34,0x18,0x00,0x00,0x32,0x34,0x34,0x18,0x00,0x31,0x33,0x33,0x33,0x1D,
4653 0x00,0x00,0x17,0x33,0x1A,0x00,0x0F,0x33,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,
4654 0xEC,0x00,0x00,0x00,0x0F,0x32,0x32,0x32,0x32,0x19,0x00,0x00,0x00,0x00,0x00,0x00,
4655 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x32,0x31,0x31,0x32,0x1F,0x0F,0x31,0x31,
4656 0x31,0x31,0x1F,0x00,0x00,0x10,0x31,0x31,0x31,0x31,0x1E,0x00,0x00,0x00,0x00,0x00,
4657 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x31,0x31,0x31,
4658 0x31,0x31,0x1E,0x00,0x00,0x00,0x1E,0x31,0x31,0x31,0x31,0x31,0x1E,0x00,0x10,0x32,
4659 0x32,0x32,0x1E,0x00,0x0F,0x32,0x32,0x1E,0x00,0x0F,0x32,0x32,0x32,0x32,0x32,0x32,
4660 0x32,0x1E,0x00,0x2F,0x10,0x32,0x32,0x32,0x32,0x1F,0x00,0x00,0x00,0x0F,0x33,0x33,
4661 0x33,0x33,0x1E,0x00,0x0F,0x33,0x33,0x33,0x08,0x00,0x32,0x33,0x33,0x33,0x1F,0x00,
4662 0x00,0x0F,0x33,0x33,0x33,0x33,0x1F,0x00,0x0F,0x33,0x33,0x33,0x33,0x1F,0x00,0x00,
4663 0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4664 0x00,0x00,0x00,0x1D,0x1D,0x1D,0xEC,0x1C,0xEE,0x00,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,
4665 0x1D,0x1D,0x1D,0x1D,0x1D,0xEC,0x1C,0x1C,0x1D,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,
4666 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4667 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4668 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1D,0x1C,0x1C,0xEC,0x1D,0x1D,0x1D,
4669 0x1D,0x1D,0x1D,0x1D,0x1D,0x00,0x00,0x00,0xEE,0x1C,0xEC,0x1D,0x00,0x00,0x00,0x00,
4670 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,
4671 0x00,0x00,0x00,0x00,0x1D,0x2D,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x00,0x00,0x35,
4672 0x00,0x00,0x2F,0x04,0x00,0x00,0x34,0x00,0x2F,0x2A,0x00,0x25,0x2E,0x2F,0x2E,0x1D,
4673 0x00,0x17,0x2E,0x2E,0x00,0x00,0x34,0x00,0x00,0x00,0x2F,0x2F,0x2F,0x00,0x00,0x2F,
4674 0x2E,0x00,0x00,0x00,0x33,0x2F,0x00,0x00,0x2F,0x2E,0x00,0x00,0x00,0x00,0x00,0x00,
4675 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x2B,0x2B,0x2B,0x2B,0x2E,0x33,0x2B,0x2B,
4676 0x2B,0x2B,0x2E,0x00,0x00,0x33,0x2B,0x2B,0x2B,0x2B,0x2F,0x00,0x00,0x00,0x00,0x00,
4677 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x29,0x29,0x29,
4678 0x29,0x29,0x1E,0x00,0x00,0x00,0x1C,0x2B,0x2C,0x2D,0x2E,0x2E,0x2F,0x00,0x33,0x2F,
4679 0x2F,0x2F,0x1E,0x00,0x0F,0x2F,0x2F,0x00,0x00,0x33,0x27,0x2F,0x2F,0x2F,0x2F,0x2F,
4680 0x2F,0x2F,0x2F,0x2F,0x35,0x2F,0x2F,0x2F,0x2F,0x2F,0x00,0x00,0x00,0x32,0x2F,0x2F,
4681 0x00,0x00,0x2F,0x00,0x32,0x00,0x00,0x00,0x2F,0x00,0x32,0x00,0x00,0x00,0x2F,0x00,
4682 0x00,0x32,0x00,0x00,0x00,0x00,0xED,0x00,0x32,0x00,0x00,0x00,0x00,0x2F,0x00,0x00,
4683 0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4684 0x00,0x00,0x00,0x1D,0xEC,0x1C,0xEE,0x00,0x00,0x00,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,
4685 0x1D,0x1D,0xEC,0x1C,0x1C,0x1D,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4686 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4687 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4688 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1D,0x1C,0x1C,0xEC,
4689 0x1D,0x1D,0x1D,0x1D,0x1D,0x00,0x00,0x00,0x00,0x00,0xEE,0x1C,0x00,0x00,0x00,0x00,
4690 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,
4691 0x00,0x00,0x00,0x00,0x00,0x1D,0x2A,0x2F,0x2D,0x2D,0x2D,0x2F,0x34,0x00,0x00,0x34,
4692 0x2B,0x2B,0x2B,0x04,0x00,0x00,0x34,0x2B,0x2B,0x2A,0x00,0x25,0x2B,0x2B,0x2B,0x2F,
4693 0x17,0x2A,0x2E,0x00,0x00,0x00,0x34,0x2B,0x2B,0x2B,0x2F,0x00,0x23,0x2B,0x2B,0x2B,
4694 0x2E,0x00,0x00,0x00,0x33,0x27,0x27,0x27,0x27,0x2E,0x00,0x00,0x00,0x00,0x00,0x00,
4695 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x29,0x29,0x29,0x29,0x2E,0x33,0x29,0x29,
4696 0x29,0x29,0x2E,0x00,0x00,0x33,0x28,0x28,0x28,0x28,0x2F,0x00,0x00,0x00,0x00,0x00,
4697 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x08,0x1E,0x33,0x27,0x28,0x28,
4698 0x28,0x27,0x1E,0x00,0x00,0x1C,0x2B,0x2B,0x2C,0x2C,0x2C,0x2B,0x2F,0x00,0x33,0x2B,
4699 0x2E,0x2E,0x2B,0x0F,0x2A,0x2F,0x00,0x00,0x00,0x00,0x21,0x27,0x2D,0x2D,0x2D,0x2D,
4700 0x2D,0x2C,0x2F,0x2F,0x35,0x2D,0x2F,0x2F,0x2D,0x2F,0x00,0x00,0x00,0x32,0x2D,0x2C,
4701 0x2C,0x2D,0x2F,0x00,0x32,0x2D,0x2D,0x2D,0x2F,0x00,0x32,0x2D,0x2D,0x2F,0x2F,0x00,
4702 0x00,0x32,0x2E,0x2E,0x2E,0x2E,0x1E,0x1E,0x34,0x2E,0x2E,0x2E,0x2E,0x2F,0x00,0x00,
4703 0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4704 0x00,0x00,0x00,0x1C,0xEE,0x00,0x00,0x00,0x00,0x00,0x1D,0x1D,0x1D,0x1D,0x1D,0xEC,
4705 0x1C,0x1C,0x1D,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4706 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4707 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4708 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1D,
4709 0x1C,0x1C,0xEC,0x1D,0x1D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4710 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,
4711 0x00,0x00,0x1D,0x33,0x31,0x32,0x34,0x28,0x2A,0x2A,0x2A,0x2A,0x34,0x00,0x00,0x34,
4712 0x04,0x04,0x04,0x04,0x2F,0x34,0x22,0x26,0x27,0x27,0x00,0x34,0x25,0x25,0x25,0x25,
4713 0x28,0x2E,0x00,0x00,0x00,0x00,0x34,0x29,0x29,0x29,0x2F,0x00,0x34,0x29,0x29,0x29,
4714 0x2E,0x00,0x00,0x00,0x33,0x22,0x22,0x22,0x22,0x2E,0x00,0x00,0x00,0x00,0x00,0x00,
4715 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x2E,0x33,0x24,0x24,
4716 0x24,0x24,0x2E,0x00,0x00,0x33,0x25,0x25,0x25,0x25,0x2F,0x00,0x00,0x00,0x00,0x00,
4717 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x22,0x08,0x33,0x24,0x26,0x26,
4718 0x26,0x24,0x1E,0x00,0x1C,0x27,0x27,0x29,0x29,0x29,0x29,0x27,0x2F,0x00,0x33,0x28,
4719 0x28,0x28,0x28,0x28,0x2F,0x00,0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x35,0x28,0x28,
4720 0x28,0x28,0x2F,0x2F,0x35,0x28,0x28,0x28,0x28,0x2F,0x00,0x00,0x00,0x32,0x28,0x28,
4721 0x28,0x28,0x2F,0x00,0x32,0x28,0x28,0x28,0x2F,0x00,0x32,0x28,0x28,0x28,0x2F,0x00,
4722 0x00,0x32,0x2A,0x2B,0x2B,0x2A,0x23,0x34,0x36,0x2A,0x2B,0x2B,0x2A,0x2F,0x00,0x00,
4723 0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4724 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x1D,0xEC,0x1C,0x1C,0x1D,
4725 0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4726 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4727 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4728 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4729 0x00,0x1F,0x1D,0x1C,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4730 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,
4731 0x00,0x31,0x33,0x36,0x37,0x37,0x25,0x25,0x27,0x27,0x27,0x27,0x35,0x00,0x00,0x34,
4732 0x24,0x24,0x24,0x36,0x34,0x36,0x24,0x24,0x24,0x04,0x00,0x34,0x25,0x23,0x21,0x37,
4733 0x2E,0x00,0x00,0x00,0x00,0x00,0x34,0x25,0x25,0x25,0x2F,0x00,0x32,0x25,0x25,0x25,
4734 0x2E,0x00,0x00,0x00,0x32,0x36,0x36,0x36,0x36,0x2E,0x00,0x00,0x00,0x00,0x00,0x00,
4735 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x37,0x37,0x37,0x37,0x2E,0x33,0x37,0x37,
4736 0x37,0x37,0x2E,0x00,0x00,0x33,0x22,0x22,0x22,0x22,0x2F,0x00,0x00,0x00,0x00,0x00,
4737 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x36,0x08,0x33,0x37,0x23,0x23,
4738 0x21,0x36,0x1E,0x1C,0x36,0x21,0x23,0x23,0x23,0x23,0x21,0x36,0x2F,0x00,0x33,0x25,
4739 0x25,0x25,0x25,0x2F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x33,0x35,0x25,0x25,
4740 0x25,0x25,0x2F,0x2F,0x35,0x25,0x25,0x25,0x25,0x2F,0x00,0x00,0x00,0x32,0x25,0x25,
4741 0x25,0x25,0x2F,0x00,0x32,0x25,0x25,0x25,0x2F,0x00,0x32,0x25,0x25,0x25,0x2F,0x00,
4742 0x00,0x32,0x25,0x25,0x27,0x27,0x25,0x36,0x23,0x25,0x27,0x27,0x25,0x2F,0x2F,0x00,
4743 0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4744 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1D,0x1F,0x00,0x00,
4745 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4746 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4747 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4748 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4749 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4750 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,
4751 0x33,0x34,0x35,0x36,0x36,0x21,0x21,0x21,0x23,0x23,0x23,0x21,0x37,0x00,0x00,0x34,
4752 0x21,0x21,0x21,0x36,0x36,0x22,0x22,0x22,0x24,0x2E,0x00,0x34,0x23,0x21,0x21,0x21,
4753 0x2E,0x2E,0x2E,0x2E,0x2E,0x00,0x34,0x23,0x23,0x23,0x2F,0x1F,0x32,0x23,0x23,0x23,
4754 0x2E,0x00,0x00,0x2E,0x34,0x35,0x35,0x35,0x35,0x37,0x2C,0x00,0x00,0x00,0x00,0x00,
4755 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x36,0x36,0x36,0x36,0x2E,0x24,0x36,0x36,
4756 0x36,0x36,0x2E,0x00,0x00,0x33,0x35,0x36,0x36,0x35,0x2F,0x00,0x00,0x00,0x00,0x00,
4757 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x35,0x35,0x35,0x37,0x21,0x21,
4758 0x36,0x35,0x1C,0x35,0x35,0x21,0x21,0x21,0x37,0x37,0x34,0x2F,0x00,0x00,0x33,0x22,
4759 0x22,0x22,0x22,0x2F,0x2F,0x2F,0x2F,0x2F,0x00,0x00,0x33,0x36,0x23,0x23,0x23,0x23,
4760 0x23,0x23,0x2F,0x2F,0x35,0x23,0x23,0x23,0x23,0x2F,0x2F,0x00,0x00,0x32,0x23,0x23,
4761 0x23,0x23,0x2F,0x00,0x32,0x23,0x23,0x23,0x2F,0x00,0x32,0x23,0x23,0x23,0x2F,0x00,
4762 0x00,0x32,0x24,0x24,0x24,0x25,0x25,0x24,0x24,0x24,0x25,0x24,0x24,0x28,0x2F,0x00,
4763 0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4764 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4765 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4766 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4767 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4768 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4769 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4770 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,
4771 0x31,0x34,0x35,0x35,0x35,0x35,0x36,0x36,0x21,0x21,0x24,0x28,0x2D,0x00,0x00,0x33,
4772 0x37,0x37,0x36,0x36,0x36,0x36,0x36,0x28,0x2D,0x00,0x00,0x34,0x35,0x36,0x36,0x36,
4773 0x35,0x35,0x34,0x34,0x2E,0x00,0x34,0x36,0x36,0x36,0x33,0x32,0x33,0x36,0x36,0x36,
4774 0x2E,0x2E,0x2E,0x2E,0x33,0x35,0x35,0x35,0x35,0x34,0x2E,0x00,0x00,0x00,0x00,0x00,
4775 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
4776 0x35,0x2E,0x00,0x00,0x00,0x33,0x34,0x35,0x35,0x34,0x2F,0x00,0x00,0x00,0x00,0x00,
4777 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x34,0x34,0x35,0x35,0x37,0x37,
4778 0x36,0x34,0x34,0x35,0x37,0x37,0x37,0x37,0x35,0x34,0x2F,0x00,0x00,0x00,0x33,0x34,
4779 0x35,0x35,0x35,0x35,0x35,0x35,0x34,0x2F,0x00,0x33,0x35,0x35,0x35,0x35,0x35,0x35,
4780 0x35,0x28,0x2F,0x2F,0x35,0x35,0x35,0x35,0x35,0x35,0x2F,0x00,0x32,0x35,0x35,0x35,
4781 0x35,0x35,0x35,0x2F,0x32,0x35,0x35,0x35,0x2F,0x00,0x32,0x35,0x35,0x35,0x2F,0x2F,
4782 0x00,0x2A,0x36,0x36,0x36,0x36,0x36,0x35,0x2F,0x35,0x36,0x36,0x36,0x35,0x2F,0x00,
4783 0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4784 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4785 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4786 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4787 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4788 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4789 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4790 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,
4791 0x31,0x34,0x34,0x34,0x34,0x34,0x34,0x0C,0x36,0x27,0x2B,0x2F,0x00,0x00,0x00,0x33,
4792 0x35,0x35,0x35,0x34,0x2E,0x2E,0x2E,0x2E,0x00,0x00,0x00,0x2B,0x22,0x34,0x33,0x33,
4793 0x33,0x33,0x33,0x34,0x2E,0x00,0x21,0x35,0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x35,
4794 0x35,0x35,0x2E,0x00,0x2E,0x33,0x34,0x34,0x34,0x28,0x2E,0x00,0x00,0x00,0x00,0x00,
4795 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x0C,
4796 0x2E,0x00,0x33,0x33,0x33,0x33,0x34,0x35,0x35,0x34,0x2F,0x00,0x00,0x00,0x00,0x00,
4797 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x34,0x33,0x34,0x34,0x34,0x35,
4798 0x35,0x35,0x35,0x35,0x35,0x34,0x33,0x33,0x34,0x2F,0x00,0x00,0x00,0x00,0x2F,0x33,
4799 0x32,0x31,0x31,0x31,0x32,0x33,0x34,0x2F,0x00,0x2F,0x28,0x34,0x33,0x33,0x33,0x34,
4800 0x28,0x2F,0x00,0x2F,0x28,0x33,0x33,0x33,0x33,0x28,0x2F,0x00,0x28,0x33,0x33,0x33,
4801 0x33,0x33,0x28,0x00,0x32,0x33,0x33,0x33,0x2F,0x2F,0x32,0x33,0x33,0x33,0x2F,0x00,
4802 0x00,0x00,0x2A,0x34,0x34,0x34,0x34,0x2F,0x00,0x31,0x34,0x34,0x34,0x33,0x2F,0x00,
4803 0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4804 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4805 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4806 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4807 0x01,0x99,0x99,0x9A,0x98,0x9B,0x9A,0x99,0x99,0x98,0x98,0x9B,0x97,0x98,0x9B,0x98,
4808 0x9A,0x9B,0x9A,0x99,0x98,0x98,0x98,0x9A,0x97,0x99,0x98,0x9B,0x98,0x9A,0x9B,0x9B,
4809 0x9A,0x9B,0x99,0x9A,0x9B,0x9B,0x9B,0x98,0x9B,0x99,0x98,0x9A,0x9A,0x9B,0x99,0x98,
4810 0x9A,0x99,0x99,0x99,0x9A,0x9A,0x9A,0x9B,0x9B,0x9A,0x1F,0x00,0x00,0x00,0x00,0x00,
4811 0x31,0x2F,0x2F,0x2F,0x28,0x33,0x34,0x04,0x2A,0x2E,0x00,0x00,0x00,0x00,0x2F,0x33,
4812 0x34,0x34,0x34,0x33,0x2D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2B,0x2B,0x2B,0x2B,
4813 0x2B,0x2B,0x2B,0x2B,0x2E,0x00,0x00,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,0x2E,
4814 0x2E,0x2E,0x00,0x00,0x00,0x2E,0x2E,0x2E,0x2E,0x2E,0x00,0x00,0x00,0x00,0x00,0x00,
4815 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x27,0x29,0x2E,0x2E,0x2E,0x2E,0x2E,
4816 0x00,0x31,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x2F,0x00,0x00,0x00,0x00,0x00,
4817 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2F,0x24,0x34,0x32,0x32,0x32,0x32,
4818 0x32,0x32,0x32,0x32,0x32,0x33,0x34,0x28,0x2F,0x00,0x00,0x00,0x00,0x00,0x00,0x2F,
4819 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2F,0x2F,0x2F,
4820 0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2F,0x2F,0x2F,0x00,0x00,0x00,0x2F,0x2F,0x2F,
4821 0x2F,0x2F,0x00,0x00,0x00,0x2F,0x2F,0x2F,0x2F,0x00,0x00,0x2F,0x2F,0x2F,0x2F,0x00,
4822 0x00,0x00,0x00,0x2F,0x2F,0x2F,0x2F,0x00,0x00,0x31,0x33,0x33,0x33,0x32,0x2F,0x00,
4823 0x00,0x00,0x00,0x00,0xAF,0x9B,0x9A,0x9B,0x98,0x9A,0x9A,0x9B,0x9B,0x9A,0x9B,0x9A,
4824 0x98,0x9A,0x9B,0x9B,0x9A,0x9B,0x9B,0x9A,0x9B,0x9B,0x98,0x9A,0x9B,0x99,0x98,0x98,
4825 0x99,0x9A,0x9B,0x99,0x9A,0x01,0x01,0x01,0x9A,0x01,0x9A,0x98,0x99,0x98,0x98,0x98,
4826 0x9B,0x9B,0x9A,0x9B,0x9A,0x9B,0x9A,0x9A,0x9A,0x9B,0x9B,0x9B,0x9B,0x99,0x9A,0x9A,
4827 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4828 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4829 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4830 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,
4831 0x2E,0x2F,0x2F,0x2F,0x2C,0x27,0x2D,0x2F,0x00,0x00,0x00,0x00,0x00,0x00,0x35,0x32,
4832 0x33,0x33,0x33,0x32,0x35,0x2F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4833 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4834 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4835 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4836 0x31,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x2F,0x00,0x00,0x00,0x00,0x00,0x00,
4837 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,
4838 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4839 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4840 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4841 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4842 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x33,0x33,0x32,0x32,0x2F,0x00,
4843 0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4844 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4845 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4846 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4847 0x98,0x97,0x99,0x9A,0x97,0x9B,0x9B,0x9A,0x99,0x98,0x9B,0x98,0x9A,0x99,0x98,0x99,
4848 0x99,0x99,0x9B,0x9A,0x98,0x9B,0x9A,0x9B,0x98,0x98,0x9A,0x9B,0x9A,0x9B,0x9B,0x98,
4849 0x98,0x9B,0x9A,0x98,0x9A,0x9A,0x9A,0x98,0x98,0x9B,0x98,0x9A,0x9A,0x98,0x98,0x99,
4850 0x9A,0x9A,0x98,0x98,0x98,0x9A,0x98,0x9B,0x99,0x9B,0x1F,0x00,0x00,0x00,0x00,0x00,
4851 0x00,0x00,0x00,0x00,0x00,0x2E,0x2F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x35,0x31,
4852 0x32,0x32,0x32,0x32,0x35,0x2F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4853 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4854 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4855 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x31,
4856 0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x2F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4857 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4858 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4859 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4860 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4861 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4862 0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x30,0x32,0x33,0x33,0x32,0x34,0x2F,0x00,
4863 0x00,0x00,0x00,0x00,0xAF,0x9F,0x9B,0x9B,0x9A,0x9B,0x9B,0x9A,0x9B,0x9A,0x9A,0x9A,
4864 0x01,0x98,0x9A,0x01,0x01,0x98,0x01,0x9A,0x98,0x99,0x99,0x98,0x9B,0x9A,0x9A,0x9B,
4865 0x9A,0x9A,0x98,0x9A,0x98,0x9A,0x9A,0x9B,0x9B,0x9B,0x9A,0x9B,0x9A,0x9A,0x9A,0x98,
4866 0x9A,0x9A,0x9B,0x9B,0x9A,0x9B,0x9A,0x9B,0x9B,0x9A,0x9A,0x9B,0x9B,0x99,0x9A,0x99,
4867 0x93,0x98,0x93,0x94,0x92,0x93,0x96,0x91,0x94,0x92,0x92,0x95,0x94,0x93,0x92,0x95,
4868 0x95,0x94,0x96,0x92,0x01,0x94,0x95,0x98,0x95,0x95,0x98,0x98,0x98,0x94,0x01,0x92,
4869 0x96,0x94,0x94,0x98,0x96,0x95,0x96,0x96,0x98,0x98,0x98,0x94,0x98,0x95,0x95,0x98,
4870 0x95,0x94,0x96,0x94,0x92,0x94,0x95,0x93,0x95,0x93,0x1F,0x00,0x00,0x00,0x00,0x00,
4871 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2F,0x35,
4872 0x31,0x31,0x31,0x35,0x2F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4873 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4874 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4875 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2F,
4876 0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x2F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4877 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4878 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4879 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4880 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4881 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4882 0x00,0x00,0x00,0x00,0x30,0x31,0x32,0x32,0x32,0x32,0x32,0x31,0x34,0x28,0x2F,0x00,
4883 0x00,0x00,0x00,0x00,0xAF,0x9D,0x9A,0x96,0x98,0x98,0x94,0x95,0x98,0x94,0x93,0x94,
4884 0x01,0x98,0x95,0x95,0x95,0x94,0x95,0x92,0x95,0x8E,0x8E,0x92,0x01,0x98,0x98,0x95,
4885 0x96,0x98,0x93,0x95,0x96,0x95,0x94,0x93,0x01,0x01,0x98,0x98,0x98,0x94,0x95,0x01,
4886 0x93,0x01,0x98,0x96,0x94,0x98,0x96,0x98,0x95,0x95,0x96,0x94,0x94,0x95,0x95,0x01,
4887 0x93,0x94,0x93,0x94,0x93,0x92,0x95,0x93,0x01,0x94,0x95,0x94,0x95,0x93,0x01,0x95,
4888 0x01,0x94,0x93,0x92,0x95,0x01,0x96,0x96,0x98,0x98,0x96,0x94,0x94,0x01,0x92,0x95,
4889 0x94,0x95,0x01,0x95,0x95,0x95,0x92,0x94,0x96,0x93,0x92,0x01,0x95,0x96,0x95,0x94,
4890 0x94,0x96,0x95,0x95,0x96,0x98,0x01,0x95,0x96,0x95,0x1F,0x00,0x00,0x00,0x00,0x00,
4891 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2F,
4892 0x2F,0x2F,0x2E,0x2F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4893 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4894 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4895 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4896 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4897 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4898 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4899 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4900 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4901 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4902 0x00,0x00,0x00,0x30,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x34,0x26,0x2F,0x00,0x00,
4903 0x00,0x00,0x00,0x00,0xAF,0x9D,0x9B,0x96,0x92,0x98,0x95,0x92,0x92,0x95,0x95,0x95,
4904 0x98,0x95,0x98,0x94,0x96,0x98,0x94,0x01,0x95,0x95,0x96,0x96,0x01,0x93,0x98,0x96,
4905 0x01,0x92,0x01,0x96,0x94,0x98,0x96,0x93,0x95,0x95,0x98,0x96,0x01,0x96,0x96,0x01,
4906 0x96,0x93,0x96,0x98,0x98,0x96,0x96,0x95,0x96,0x97,0x92,0x98,0x94,0x98,0x98,0x94,
4907 0x96,0x98,0x94,0x93,0x95,0x92,0x92,0x91,0x92,0x94,0x92,0x93,0x93,0x93,0x94,0x92,
4908 0x95,0x98,0x96,0x96,0x98,0x96,0x96,0x96,0x96,0x98,0x98,0x95,0x95,0x93,0x98,0x96,
4909 0x95,0x95,0x95,0x01,0x95,0x92,0x95,0x01,0x96,0x92,0x95,0x92,0x92,0x95,0x93,0x93,
4910 0x01,0x93,0x96,0x95,0x94,0x95,0x95,0x95,0x92,0x95,0x1F,0x00,0x00,0x00,0x00,0x00,
4911 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4912 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4913 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4914 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4915 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4916 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4917 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4918 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4919 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4920 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4921 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4922 0x00,0x00,0x00,0x30,0x34,0x2F,0x2F,0x34,0x31,0x30,0x34,0x26,0x2F,0x00,0x00,0x00,
4923 0x00,0x00,0x00,0x00,0xAF,0x9D,0x01,0x93,0x95,0x92,0x92,0x95,0x8E,0x92,0x01,0x95,
4924 0x96,0x94,0x95,0x98,0x98,0x95,0x95,0x95,0x95,0x98,0x95,0x98,0x94,0x96,0x98,0x95,
4925 0x95,0x96,0x95,0x98,0x95,0x98,0x96,0x95,0x98,0x95,0x95,0x94,0x01,0x96,0x01,0x94,
4926 0x96,0x98,0x93,0x01,0x96,0x98,0x01,0x98,0x96,0x99,0x98,0x98,0x98,0x99,0x96,0x99,
4927 0x92,0x96,0x92,0x92,0x01,0x94,0x95,0x91,0x93,0x92,0x94,0x94,0x01,0x96,0x95,0x95,
4928 0x93,0x96,0x96,0x98,0x98,0x95,0x95,0x01,0x95,0x98,0x01,0x95,0x95,0x96,0x95,0x01,
4929 0x94,0x94,0x93,0x95,0x95,0x8E,0x8E,0x96,0x93,0x01,0x94,0x92,0x93,0x95,0x8E,0x94,
4930 0x92,0x92,0x92,0x91,0x93,0x93,0x01,0x93,0x98,0x95,0x1F,0x00,0x00,0x00,0x00,0x00,
4931 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4932 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4933 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4934 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4935 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4936 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4937 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4938 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4939 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4940 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4941 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4942 0x00,0x00,0x00,0x2F,0x2F,0x00,0x00,0x2F,0x2F,0x2F,0x2F,0x2F,0x00,0x00,0x00,0x00,
4943 0x00,0x00,0x00,0x00,0xAF,0x9B,0x9A,0x94,0x95,0x92,0x01,0x96,0x95,0x01,0x95,0x01,
4944 0x96,0x96,0x94,0x01,0x94,0x96,0x94,0x96,0x94,0x95,0x95,0x95,0x96,0x96,0x98,0x98,
4945 0x96,0x01,0x96,0x96,0x98,0x96,0x95,0x96,0x93,0x95,0x95,0x98,0x96,0x95,0x95,0x98,
4946 0x98,0x01,0x97,0x01,0x95,0x96,0x98,0x99,0x95,0x9A,0x98,0x9A,0x98,0x98,0x9A,0x01,
4947 0x98,0x94,0x93,0x93,0x95,0x96,0x94,0x93,0x94,0x93,0x94,0x01,0x95,0x95,0x94,0x93,
4948 0x01,0x94,0x98,0x01,0x01,0x96,0x96,0x98,0x92,0x98,0x98,0x95,0x92,0x93,0x8E,0x95,
4949 0x92,0x94,0x92,0x92,0x92,0x8E,0x94,0x01,0x93,0x96,0x94,0x95,0x94,0x8E,0x8E,0x92,
4950 0x92,0x93,0x8E,0x94,0x92,0x92,0x92,0x8E,0x92,0x8E,0x1F,0x00,0x00,0x00,0x00,0x00,
4951 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4952 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4953 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1D,
4954 0x1D,0x1D,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4955 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4956 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x1D,0x1D,0x1D,0x00,
4957 0x1D,0x1D,0x1D,0x00,0x1D,0x1D,0x1D,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x1D,0x1D,
4958 0x1F,0x00,0x00,0x1F,0x1D,0x1D,0x00,0x1F,0x1D,0x1F,0x00,0x1D,0x1D,0x1D,0x1D,0x1D,
4959 0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1F,0x1D,0x1F,0x00,0x1D,0x1D,0x1F,0x00,0x1D,0x1D,
4960 0x1D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4961 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4962 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4963 0x00,0x00,0x00,0x00,0xAF,0x9D,0x98,0x96,0x96,0x96,0x94,0x95,0x95,0x96,0x98,0x94,
4964 0x01,0x94,0x95,0x95,0x95,0x98,0x01,0x95,0x96,0x98,0x95,0x94,0x92,0x01,0x01,0x98,
4965 0x01,0x95,0x94,0x98,0x97,0x98,0x95,0x98,0x01,0x98,0x95,0x94,0x98,0x01,0x98,0x98,
4966 0x95,0x93,0x98,0x95,0x98,0x96,0x98,0x9A,0x9A,0x98,0x98,0x99,0x99,0x96,0x96,0x96,
4967 0x95,0x98,0x93,0x94,0x94,0x93,0x92,0x92,0x92,0x93,0x92,0x01,0x98,0x94,0x96,0x98,
4968 0x96,0x93,0x96,0x94,0x95,0x95,0x95,0x96,0x98,0x96,0x92,0x8E,0x94,0x92,0x92,0x8E,
4969 0x92,0x92,0x92,0x94,0x98,0x92,0x8E,0x92,0x94,0x92,0x95,0x93,0x01,0x94,0x92,0x8E,
4970 0x92,0x92,0x8E,0x92,0x95,0x95,0x92,0x8E,0x94,0x92,0x1F,0x00,0x00,0x00,0x00,0x00,
4971 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4972 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4973 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1D,0x00,
4974 0x00,0x00,0x1D,0x1F,0x00,0x1F,0x1D,0x1D,0x00,0x1F,0x1D,0x1D,0x1F,0x00,0x1D,0x1D,
4975 0x1F,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x1D,0x1F,0x00,0x1D,0x00,0x1F,0x1D,0x1D,0x00,
4976 0x1D,0x00,0x1D,0x00,0x1D,0x1D,0x1D,0x00,0x00,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,
4977 0x1D,0x00,0x1D,0x00,0x00,0x1F,0x1D,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x1D,0x00,
4978 0x1D,0x00,0x00,0x1D,0x00,0x00,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x00,0x00,0x1D,
4979 0x00,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,
4980 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4981 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4982 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
4983 0x00,0x00,0x00,0x00,0xAF,0x9D,0x9A,0x95,0x93,0x01,0x95,0x96,0x95,0x96,0x98,0x98,
4984 0x98,0x95,0x95,0x01,0x95,0x95,0x98,0x96,0x95,0x96,0x96,0x96,0x96,0x01,0x96,0x01,
4985 0x95,0x95,0x98,0x01,0x98,0x96,0x99,0x95,0x96,0x96,0x95,0x98,0x98,0x01,0x99,0x96,
4986 0x98,0x01,0x9A,0x98,0x99,0x98,0x99,0x99,0x01,0x98,0x98,0x01,0x95,0x92,0x96,0x98,
4987 0x95,0x92,0x98,0x96,0x98,0x96,0x98,0x98,0x95,0x92,0x95,0x01,0x98,0x96,0x95,0x98,
4988 0x94,0x96,0x01,0x96,0x95,0x01,0x98,0x98,0x96,0x92,0x95,0x95,0x94,0x92,0x92,0x95,
4989 0x92,0x91,0x01,0x92,0x92,0x93,0x95,0x01,0x8E,0x96,0x92,0x8E,0x8E,0x93,0x92,0x8E,
4990 0x95,0x8E,0x93,0x01,0x95,0x92,0x98,0x8E,0x98,0x8E,0x1F,0x00,0x00,0x00,0x00,0x00,
4991 0x00,0x00,0x00,0x00,0x00,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,
4992 0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,
4993 0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1F,0x1D,0x00,0x00,
4994 0x1D,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x00,0x00,0x1D,0x00,0x00,0x1D,0x00,0x1D,0x00,
4995 0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x00,0x00,
4996 0x1D,0x00,0x1D,0x00,0x00,0x1D,0x00,0x00,0x00,0x00,0x1D,0x00,0x1D,0x1D,0x1D,0x00,
4997 0x1D,0x1D,0x1D,0x00,0x1F,0x1D,0x1F,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x1D,0x00,
4998 0x1D,0x00,0x00,0x1F,0x1D,0x1F,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x1D,0x1D,0x00,0x1D,
4999 0x00,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x1D,
5000 0x00,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,
5001 0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,
5002 0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
5003 0x00,0x00,0x00,0x00,0xAF,0x9C,0x98,0x93,0x98,0x96,0x96,0x98,0x96,0x96,0x92,0x94,
5004 0x98,0x98,0x98,0x96,0x96,0x95,0x98,0x95,0x94,0x01,0x01,0x96,0x98,0x98,0x95,0x96,
5005 0x98,0x95,0x98,0x01,0x98,0x98,0x98,0x95,0x92,0x01,0x94,0x98,0x98,0x98,0x98,0x96,
5006 0x01,0x98,0x9A,0x98,0x95,0x99,0x95,0x98,0x95,0x95,0x01,0x98,0x01,0x98,0x95,0x98,
5007 0x93,0x98,0x94,0x95,0x98,0x98,0x94,0x98,0x98,0x98,0x96,0x93,0x01,0x95,0x96,0x95,
5008 0x01,0x98,0x96,0x96,0x93,0x94,0x98,0x93,0x96,0x92,0x92,0x92,0x95,0x94,0x95,0x91,
5009 0x94,0x92,0x92,0x93,0x93,0x95,0x01,0x95,0x94,0x93,0x01,0x96,0x92,0x92,0x92,0x93,
5010 0x93,0x96,0x93,0x92,0x01,0x01,0x94,0x92,0x92,0x91,0x1F,0x00,0x00,0xA7,0x08,0x1F,
5011 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
5012 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
5013 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x1D,
5014 0x1F,0x00,0x00,0x1D,0x00,0x1D,0x00,0x00,0x00,0x1D,0x00,0x00,0x1D,0x00,0x1D,0x1D,
5015 0x1F,0x00,0x1F,0x1D,0x1F,0x00,0x1D,0x1D,0x00,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,
5016 0x1D,0x1D,0x1D,0x00,0x00,0x1D,0x00,0x00,0x00,0x00,0x1D,0x00,0x00,0x00,0x1D,0x00,
5017 0x00,0x00,0x1D,0x00,0x1D,0x1D,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x1D,0x00,
5018 0x1D,0x00,0x00,0x00,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x00,0x00,0x1D,
5019 0x00,0x00,0x1D,0x1D,0x1D,0x00,0x1D,0x1D,0x1D,0x00,0x1D,0x1D,0x1F,0x00,0x1D,0x00,
5020 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
5021 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
5022 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA7,
5023 0x08,0x1F,0x00,0x00,0xAF,0x9D,0x9B,0x96,0x98,0x96,0x98,0x92,0x94,0x01,0x94,0x94,
5024 0x01,0x01,0x98,0x95,0x95,0x98,0x01,0x98,0x98,0x98,0x97,0x01,0x01,0x93,0x95,0x95,
5025 0x98,0x98,0x01,0x01,0x98,0x01,0x98,0x96,0x98,0x97,0x96,0x96,0x01,0x98,0x98,0x98,
5026 0x98,0x98,0x98,0x94,0x94,0x98,0x95,0x96,0x01,0x96,0x01,0x95,0x01,0x98,0x98,0x94,
5027 0x93,0x98,0x95,0x96,0x95,0x95,0x94,0x95,0x94,0x95,0x95,0x93,0x96,0x01,0x95,0x95,
5028 0x94,0x95,0x01,0x94,0x01,0x8E,0x95,0x93,0x95,0x94,0x93,0x93,0x93,0x95,0x91,0x93,
5029 0x93,0x96,0x92,0x95,0x96,0x95,0x95,0x93,0x95,0x95,0x96,0x96,0x96,0x93,0x92,0x01,
5030 0x96,0x92,0x01,0x92,0x92,0x94,0x95,0x95,0x01,0x95,0x1F,0x00,0x00,0x08,0x1D,0x1E,
5031 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
5032 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
5033 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x00,
5034 0x1D,0x1D,0x00,0x1D,0x00,0x1F,0x1D,0x1D,0x00,0x1F,0x1D,0x1D,0x1F,0x00,0x1D,0x00,
5035 0x00,0x00,0x00,0x1D,0x00,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1F,0x1D,0x1D,0x00,
5036 0x1D,0x00,0x1D,0x00,0x00,0x1D,0x00,0x00,0x00,0x00,0x1D,0x00,0x00,0x00,0x1D,0x00,
5037 0x00,0x00,0x1D,0x00,0x1D,0x1D,0x1D,0x00,0x00,0x00,0x00,0x00,0x1D,0x00,0x1D,0x1D,
5038 0x1F,0x00,0x00,0x1D,0x1D,0x1F,0x00,0x1F,0x1D,0x1F,0x00,0x1D,0x00,0x00,0x00,0x1D,
5039 0x00,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x00,0x1D,0x1D,
5040 0x1D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
5041 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
5042 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,
5043 0x1D,0x1E,0x00,0x00,0xAF,0x9D,0x9B,0x95,0x01,0x95,0x96,0x01,0x98,0x96,0x95,0x01,
5044 0x96,0x94,0x96,0x95,0x98,0x01,0x01,0x95,0x01,0x98,0x01,0x01,0x98,0x98,0x98,0x99,
5045 0x99,0x98,0x98,0x95,0x95,0x95,0x96,0x98,0x99,0x98,0x95,0x98,0x99,0x98,0x98,0x95,
5046 0x97,0x95,0x95,0x01,0x96,0x95,0x01,0x01,0x01,0x95,0x94,0x96,0x97,0x97,0x98,0x95,
5047 0x98,0x92,0x95,0x95,0x95,0x93,0x92,0x95,0x95,0x92,0x98,0x95,0x95,0x98,0x95,0x93,
5048 0x98,0x98,0x95,0x95,0x92,0x01,0x01,0x94,0x95,0x93,0x92,0x01,0x95,0x95,0x93,0x94,
5049 0x95,0x98,0x93,0x95,0x96,0x93,0x92,0x91,0x94,0x95,0x94,0x94,0x95,0x96,0x95,0x95,
5050 0x92,0x94,0x95,0x01,0x92,0x92,0x94,0x94,0x96,0x93,0x1F,0x00,0x00,0x1F,0x1E,0xE9,
5051 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
5052 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
5053 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1D,0x00,
5054 0x00,0x00,0x1D,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
5055 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
5056 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
5057 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
5058 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
5059 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
5060 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
5061 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
5062 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,
5063 0x1E,0xE9,0x00,0x00,0xAF,0x9D,0x9B,0x98,0x94,0x98,0x98,0x95,0x96,0x01,0x96,0x01,
5064 0x98,0x98,0x97,0x01,0x98,0x96,0x95,0x92,0x98,0x01,0x98,0x98,0x98,0x01,0x98,0x98,
5065 0x95,0x01,0x94,0x01,0x98,0x92,0x01,0x01,0x95,0x95,0x94,0x98,0x99,0x96,0x92,0x96,
5066 0x95,0x95,0x94,0x98,0x95,0x01,0x95,0x95,0x95,0x99,0x99,0x99,0x01,0x98,0x99,0x98,
5067 0x98,0x93,0x92,0x92,0x95,0x95,0x95,0x92,0x95,0x93,0x96,0x98,0x92,0x95,0x93,0x98,
5068 0x98,0x96,0x92,0x93,0x94,0x91,0x95,0x95,0x95,0x95,0x96,0x95,0x93,0x95,0x98,0x93,
5069 0x93,0x98,0x95,0x94,0x98,0x95,0x94,0x92,0x01,0x94,0x96,0x96,0x92,0x93,0x93,0x96,
5070 0x95,0x91,0x93,0x95,0x92,0x95,0x96,0x93,0x95,0x98,0x1F,0x00,0x00,0x00,0x00,0x00,
5071 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
5072 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
5073 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1D,
5074 0x1D,0x1D,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
5075 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
5076 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
5077 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
5078 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
5079 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
5080 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
5081 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
5082 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
5083 0x00,0x00,0x00,0x00,0xAF,0x9D,0x9A,0x98,0x96,0x98,0x95,0x98,0x95,0x95,0x01,0x95,
5084 0x94,0x95,0x98,0x96,0x95,0x96,0x94,0x98,0x99,0x98,0x98,0x98,0x01,0x95,0x95,0x01,
5085 0x95,0x96,0x96,0x01,0x96,0x01,0x94,0x95,0x98,0x98,0x98,0x98,0x97,0x01,0x95,0x96,
5086 0x95,0x95,0x98,0x96,0x98,0x98,0x96,0x98,0x99,0x01,0x98,0x95,0x99,0x99,0x98,0x98,
5087 0x95,0x92,0x01,0x98,0x91,0x95,0x93,0x95,0x95,0x95,0x92,0x8E,0x95,0x93,0x92,0x92,
5088 0x93,0x94,0x96,0x93,0x93,0x92,0x94,0x95,0x98,0x01,0x95,0x95,0x98,0x98,0x01,0x93,
5089 0x98,0x95,0x95,0x95,0x95,0x94,0x93,0x95,0x98,0x95,0x95,0x98,0x95,0x01,0x98,0x98,
5090 0x98,0x93,0x95,0x01,0x93,0x92,0x93,0x94,0x95,0x93,0x1F,0xAF,0xAF,0xAF,0xAF,0xAF,
5091 0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,
5092 0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,
5093 0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,
5094 0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,
5095 0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,
5096 0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,
5097 0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,
5098 0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,
5099 0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,
5100 0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,
5101 0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,
5102 0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,0xAF,
5103 0xAF,0xAF,0xAF,0xAF,0xAF,0x9D,0x9B,0x95,0x98,0x98,0x98,0x01,0x95,0x01,0x95,0x96,
5104 0x95,0x01,0x97,0x98,0x98,0x01,0x01,0x96,0x95,0x95,0x01,0x95,0x01,0x96,0x98,0x96,
5105 0x95,0x94,0x98,0x98,0x95,0x95,0x98,0x98,0x98,0x98,0x94,0x95,0x98,0x94,0x98,0x98,
5106 0x01,0x99,0x01,0x98,0x98,0x98,0x99,0x98,0x98,0x01,0x95,0x98,0x96,0x95,0x01,0x98,
5107 0x8E,0x94,0x8E,0x95,0x95,0x94,0x94,0x8E,0x92,0x93,0x95,0x93,0x96,0x95,0x95,0x93,
5108 0x8E,0x94,0x91,0x92,0x95,0x94,0x93,0x93,0x95,0x01,0x92,0x98,0x96,0x96,0x96,0x01,
5109 0x95,0x96,0x96,0x98,0x95,0x98,0x98,0x92,0x01,0x92,0x96,0x94,0x95,0x96,0x95,0x96,
5110 0x95,0x01,0x92,0x95,0x92,0x93,0x93,0x01,0x93,0x95,0x92,0x93,0x98,0x9D,0x9B,0x9B,
5111 0x9C,0x9C,0x9C,0x9D,0x9B,0x9D,0x9B,0x9D,0x9B,0x9C,0x9D,0x9D,0x9C,0x9C,0x9B,0x9B,
5112 0x9D,0x9B,0x9D,0x9B,0x9D,0x9C,0x9D,0x9D,0x9D,0x9B,0x9B,0x9D,0x9C,0x9C,0x9B,0x9D,
5113 0x9D,0x9C,0x9D,0x9B,0x9D,0x9B,0x9B,0x9B,0x9B,0x9B,0x9C,0x9B,0x9D,0x9D,0x9C,0x9D,
5114 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9C,0x9D,0x9D,0x9C,0x9D,0x9D,0x9D,
5115 0x9D,0x9D,0x9D,0x9D,0x9D,0x9C,0x9D,0x9B,0x9D,0x9C,0x9B,0x9D,0x9D,0x9D,0x9D,0x9D,
5116 0x9D,0x9D,0x9C,0x9C,0x9B,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9B,
5117 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9B,0x9D,0x9D,0x9D,0x9B,0x9C,0x9B,0x9D,0x9D,
5118 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5119 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9B,0x9C,0x9D,0x9C,
5120 0x9D,0x9C,0x9B,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9C,0x9D,0x9B,0x9C,0x9D,
5121 0x9D,0x9D,0x9D,0x9C,0x9C,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5122 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9B,0x9C,0x9C,0x9D,0x9D,0x9D,0x9C,0x9C,0x9C,0x9D,
5123 0x9D,0x9D,0x9D,0x9D,0x9B,0x9D,0x9A,0x98,0x01,0x01,0x98,0x96,0x98,0x98,0x98,0x98,
5124 0x97,0x98,0x95,0x99,0x95,0x98,0x98,0x96,0x95,0x96,0x96,0x98,0x94,0x96,0x98,0x01,
5125 0x98,0x01,0x01,0x01,0x01,0x98,0x98,0x98,0x96,0x01,0x95,0x98,0x98,0x95,0x94,0x98,
5126 0x99,0x98,0x95,0x98,0x95,0x98,0x96,0x01,0x97,0x97,0x98,0x97,0x97,0x97,0x98,0x01,
5127 0x93,0x93,0x96,0x96,0x01,0x95,0x01,0x96,0x95,0x95,0x93,0x95,0x96,0x95,0x98,0x93,
5128 0x92,0x8E,0x94,0x95,0x95,0x91,0x96,0x93,0x98,0x94,0x98,0x95,0x98,0x98,0x95,0x01,
5129 0x01,0x01,0x94,0x95,0x95,0x94,0x96,0x94,0x98,0x01,0x96,0x95,0x01,0x96,0x95,0x95,
5130 0x95,0x91,0x98,0x94,0x93,0x96,0x94,0x94,0x95,0x95,0x93,0x93,0x9A,0x98,0x98,0x9A,
5131 0x9B,0x9A,0x98,0x99,0x9A,0x98,0x9B,0x98,0x9B,0x98,0x98,0x99,0x99,0x98,0x9B,0x99,
5132 0x9A,0x9A,0x98,0x9A,0x9B,0x98,0x9A,0x9B,0x98,0x98,0x98,0x9A,0x9B,0x98,0x98,0x01,
5133 0x98,0x01,0x98,0x98,0x9B,0x98,0x99,0x99,0x99,0x98,0x98,0x9B,0x99,0x98,0x98,0x01,
5134 0x01,0x98,0x01,0x98,0x98,0x98,0x97,0x9B,0x9A,0x99,0x9A,0x9A,0x9A,0x98,0x9B,0x9B,
5135 0x9A,0x9B,0x9B,0x99,0x99,0x9A,0x9B,0x9A,0x9A,0x98,0x97,0x98,0x9A,0x99,0x9A,0x98,
5136 0x9A,0x9A,0x99,0x98,0x98,0x9A,0x9B,0x9A,0x9B,0x9B,0x9B,0x98,0x9A,0x9B,0x9A,0x9B,
5137 0x99,0x9A,0x99,0x9B,0x98,0x9A,0x9A,0x9A,0x9A,0x9A,0x99,0x9A,0x9A,0x9A,0x9B,0x9B,
5138 0x99,0x9B,0x9B,0x9A,0x9A,0x9C,0x9B,0x9B,0x9C,0x9B,0x9B,0x9B,0x9B,0x99,0x9B,0x9B,
5139 0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0x9A,0x99,0x99,0x9A,0x9A,0x9A,0x9B,0x9A,0x98,
5140 0x98,0x98,0x99,0x9B,0x99,0x9A,0x9A,0x9B,0x9A,0x9A,0x99,0x9B,0x9B,0x99,0x9A,0x98,
5141 0x9A,0x98,0x98,0x9A,0x99,0x9A,0x9A,0x9A,0x9B,0x9A,0x9B,0x9A,0x99,0x9A,0x9A,0x9B,
5142 0x9B,0x9A,0x9A,0x9A,0x9A,0x9A,0x9A,0x9B,0x9A,0x9A,0x9B,0x9B,0x9B,0x9B,0x9A,0x9A,
5143 0x9A,0x9B,0x99,0x9A,0x9A,0x9A,0x9A,0x96,0x98,0x96,0x96,0x01,0x95,0x01,0x95,0x95,
5144 0x98,0x98,0x9A,0x98,0x98,0x98,0x98,0x98,0x95,0x01,0x96,0x98,0x94,0x96,0x97,0x98,
5145 0x98,0x98,0x98,0x01,0x98,0x98,0x94,0x98,0x96,0x01,0x98,0x95,0x99,0x01,0x96,0x01,
5146 0x95,0x98,0x98,0x98,0x01,0x96,0x94,0x96,0x98,0x01,0x98,0x01,0x98,0x01,0x01,0x95,
5147 0x01,0x94,0x98,0x96,0x98,0x96,0x96,0x95,0x96,0x92,0x98,0x93,0x95,0x95,0x92,0x92,
5148 0x8E,0x94,0x01,0x95,0x93,0x95,0x01,0x95,0x94,0x92,0x96,0x93,0x01,0x96,0x95,0x94,
5149 0x93,0x95,0x01,0x96,0x91,0x98,0x94,0x98,0x95,0x95,0x95,0x95,0x95,0x95,0x94,0x95,
5150 0x98,0x94,0x98,0x96,0x95,0x93,0x95,0x92,0x95,0x94,0x92,0x92,0x95,0x98,0x93,0x95,
5151 0x94,0x01,0x95,0x94,0x94,0x98,0x95,0x93,0x92,0x95,0x96,0x92,0x95,0x93,0x92,0x95,
5152 0x94,0x96,0x96,0x94,0x95,0x93,0x93,0x94,0x96,0x95,0x94,0x92,0x94,0x92,0x95,0x91,
5153 0x92,0x8E,0x95,0x01,0x92,0x95,0x92,0x95,0x92,0x94,0x01,0x98,0x92,0x92,0x96,0x96,
5154 0x94,0x98,0x94,0x93,0x96,0x94,0x93,0x93,0x95,0x94,0x95,0x01,0x01,0x93,0x92,0x93,
5155 0x95,0x93,0x93,0x98,0x94,0x91,0x92,0x95,0x94,0x94,0x92,0x92,0x93,0x96,0x94,0x8E,
5156 0x01,0x94,0x8E,0x98,0x95,0x95,0x96,0x96,0x98,0x98,0x96,0x92,0x96,0x01,0x98,0x95,
5157 0x96,0x98,0x01,0x95,0x98,0x95,0x93,0x96,0x96,0x94,0x96,0x01,0x01,0x01,0x98,0x98,
5158 0x99,0x99,0x01,0x95,0x92,0x98,0x96,0x96,0x98,0x94,0x01,0x98,0x95,0x98,0x01,0x95,
5159 0x94,0x95,0x98,0x98,0x99,0x94,0x95,0x94,0x98,0x01,0x96,0x96,0x96,0x92,0x94,0x92,
5160 0x94,0x98,0x95,0x01,0x93,0x95,0x01,0x95,0x01,0x98,0x96,0x96,0x95,0x94,0x95,0x01,
5161 0x96,0x98,0x01,0x94,0x96,0x98,0x01,0x95,0x98,0x98,0x96,0x97,0x92,0x01,0x94,0x98,
5162 0x98,0x96,0x96,0x95,0x98,0x98,0x96,0x96,0x96,0x96,0x94,0x95,0x01,0x98,0x01,0x01,
5163 0x96,0x98,0x97,0x93,0x94,0x96,0x94,0x98,0x96,0x98,0x98,0x98,0x99,0x99,0x96,0x99,
5164 0x99,0x98,0x98,0x96,0x98,0x94,0x98,0x98,0x98,0x96,0x98,0x98,0x98,0x01,0x95,0x95,
5165 0x95,0x98,0x99,0x98,0x98,0x98,0x01,0x99,0x98,0x98,0x98,0x98,0x96,0x98,0x98,0x98,
5166 0x97,0x96,0x01,0x94,0x95,0x01,0x95,0x96,0x98,0x98,0x98,0x98,0x95,0x96,0x98,0x96,
5167 0x8E,0x98,0x01,0x95,0x96,0x93,0x92,0x94,0x93,0x01,0x95,0x98,0x98,0x98,0x93,0x91,
5168 0x94,0x95,0x95,0x92,0x94,0x92,0x95,0x92,0x96,0x91,0x96,0x94,0x95,0x95,0x94,0x93,
5169 0x93,0x96,0x94,0x95,0x95,0x95,0x98,0x96,0x95,0x92,0x96,0x92,0x92,0x96,0x95,0x96,
5170 0x96,0x98,0x96,0x94,0x91,0x95,0x96,0x92,0x96,0x93,0x94,0x95,0x93,0x94,0x93,0x91,
5171 0x92,0x93,0x95,0x96,0x95,0x95,0x92,0x96,0x92,0x93,0x93,0x94,0x01,0x98,0x95,0x95,
5172 0x98,0x92,0x93,0x93,0x94,0x96,0x92,0x95,0x92,0x92,0x93,0x94,0x94,0x95,0x95,0x95,
5173 0x94,0x92,0x94,0x95,0x93,0x8F,0x95,0x91,0x91,0x93,0x96,0x01,0x95,0x93,0x98,0x92,
5174 0x01,0x95,0x98,0x93,0x01,0x8E,0x95,0x92,0x8E,0x93,0x96,0x01,0x92,0x95,0x93,0x95,
5175 0x94,0x94,0x94,0x93,0x95,0x92,0x92,0x92,0x95,0x95,0x92,0x92,0x8E,0x92,0x8E,0x92,
5176 0x96,0x93,0x96,0x92,0x94,0x95,0x95,0x96,0x95,0x98,0x96,0x93,0x93,0x95,0x94,0x01,
5177 0x95,0x93,0x98,0x92,0x96,0x94,0x01,0x98,0x01,0x96,0x94,0x98,0x98,0x95,0x01,0x95,
5178 0x98,0x95,0x01,0x95,0x95,0x98,0x96,0x01,0x98,0x95,0x95,0x98,0x98,0x01,0x98,0x93,
5179 0x98,0x92,0x98,0x98,0x95,0x94,0x98,0x96,0x94,0x96,0x01,0x98,0x93,0x94,0x95,0x95,
5180 0x95,0x94,0x95,0x92,0x95,0x96,0x98,0x95,0x94,0x96,0x95,0x98,0x98,0x01,0x98,0x94,
5181 0x95,0x92,0x92,0x94,0x94,0x94,0x96,0x96,0x98,0x98,0x98,0x98,0x94,0x98,0x98,0x98,
5182 0x96,0x96,0x96,0x94,0x92,0x98,0x96,0x97,0x96,0x98,0x98,0x98,0x98,0x97,0x95,0x96,
5183 0x96,0x98,0x98,0x96,0x98,0x95,0x98,0x01,0x98,0x01,0x98,0x98,0x98,0x98,0x96,0x98,
5184 0x95,0x95,0x98,0x95,0x98,0x95,0x98,0x98,0x99,0x99,0x96,0x98,0x98,0x94,0x96,0x99,
5185 0x98,0x98,0x01,0x98,0x94,0x01,0x96,0x98,0x98,0x98,0x96,0x95,0x97,0x96,0x96,0x96,
5186 0x95,0x96,0x01,0x01,0x98,0x98,0x01,0x94,0x01,0x01,0x93,0x95,0x92,0x94,0x98,0x96,
5187 0x95,0x98,0x98,0x93,0x98,0x94,0x98,0x95,0x98,0x96,0x92,0x92,0x94,0x94,0x95,0x95,
5188 0x94,0x92,0x96,0x95,0x96,0x94,0x94,0x95,0x01,0x96,0x93,0x93,0x91,0x01,0x96,0x93,
5189 0x96,0x95,0x98,0x91,0x01,0x94,0x95,0x96,0x01,0x96,0x93,0x94,0x95,0x95,0x94,0x95,
5190 0x95,0x96,0x95,0x98,0x96,0x98,0x98,0x95,0x95,0x01,0x95,0x94,0x95,0x98,0x95,0x95,
5191 0x01,0x92,0x95,0x92,0x91,0x92,0x92,0x94,0x93,0x92,0x94,0x92,0x91,0x95,0x91,0x92,
5192 0x93,0x93,0x93,0x94,0x92,0x93,0x93,0x98,0x92,0x93,0x95,0x93,0x95,0x94,0x95,0x01,
5193 0x95,0x95,0x92,0x92,0x94,0x91,0x94,0x95,0x94,0x94,0x92,0x98,0x95,0x94,0x95,0x93,
5194 0x93,0x92,0x94,0x94,0x01,0x94,0x92,0x94,0x94,0x94,0x98,0x95,0x92,0x96,0x91,0x96,
5195 0x93,0x94,0x93,0x94,0x92,0x96,0x92,0x95,0x8E,0x93,0x95,0x93,0x94,0x96,0x95,0x98,
5196 0x95,0x95,0x95,0x98,0x98,0x96,0x95,0x98,0x95,0x95,0x98,0x01,0x98,0x99,0x98,0x98,
5197 0x96,0x95,0x96,0x96,0x98,0x98,0x95,0x94,0x95,0x98,0x01,0x98,0x01,0x92,0x95,0x96,
5198 0x96,0x98,0x98,0x94,0x96,0x98,0x96,0x98,0x96,0x98,0x98,0x98,0x98,0x95,0x98,0x98,
5199 0x98,0x98,0x95,0x01,0x98,0x95,0x96,0x96,0x96,0x01,0x96,0x95,0x95,0x94,0x94,0x01,
5200 0x01,0x97,0x95,0x98,0x98,0x96,0x98,0x94,0x94,0x95,0x97,0x95,0x01,0x98,0x98,0x96,
5201 0x93,0x94,0x98,0x98,0x98,0x98,0x01,0x01,0x96,0x93,0x98,0x92,0x96,0x98,0x94,0x95,
5202 0x95,0x93,0x95,0x98,0x98,0x95,0x98,0x98,0x96,0x98,0x98,0x97,0x96,0x98,0x96,0x94,
5203 0x96,0x98,0x98,0x98,0x98,0x9A,0x98,0x99,0x99,0x98,0x98,0x98,0x98,0x96,0x98,0x98,
5204 0x99,0x93,0x98,0x96,0x98,0x98,0x01,0x98,0x01,0x98,0x98,0x98,0x98,0x01,0x96,0x01,
5205 0x98,0x98,0x98,0x98,0x98,0x97,0x95,0x96,0x94,0x95,0x98,0x98,0x98,0x96,0x95,0x96,
5206 0x94,0x01,0x96,0x97,0x98,0x98,0x98,0x01,0x98,0x98,0x97,0x97,0x95,0x95,0x97,0x01,
5207 0x96,0x93,0x93,0x93,0x91,0x93,0x94,0x95,0x94,0x93,0x95,0x8E,0x8E,0x94,0x91,0x95,
5208 0x92,0x95,0x95,0x92,0x94,0x93,0x94,0x96,0x92,0x94,0x93,0x96,0x95,0x94,0x95,0x92,
5209 0x93,0x95,0x01,0x98,0x96,0x95,0x95,0x94,0x95,0x96,0x94,0x95,0x96,0x95,0x92,0x95,
5210 0x96,0x92,0x93,0x94,0x96,0x01,0x95,0x95,0x98,0x93,0x95,0x95,0x95,0x01,0x93,0x92,
5211 0x01,0x94,0x95,0x8E,0x94,0x8E,0x8E,0x8E,0x95,0x8E,0x8E,0x94,0x8E,0x92,0x8E,0x94,
5212 0x8E,0x95,0x8E,0x95,0x8E,0x94,0x8E,0x93,0x95,0x94,0x93,0x94,0x98,0x94,0x95,0x95,
5213 0x93,0x95,0x01,0x96,0x95,0x96,0x92,0x93,0x95,0x94,0x91,0x94,0x95,0x92,0x92,0x01,
5214 0x92,0x95,0x94,0x92,0x92,0x01,0x95,0x96,0x93,0x91,0x92,0x91,0x93,0x91,0x95,0x8E,
5215 0x95,0x94,0x96,0x92,0x96,0x96,0x93,0x96,0x94,0x93,0x94,0x93,0x98,0x98,0x93,0x92,
5216 0x92,0x96,0x01,0x98,0x01,0x96,0x01,0x94,0x98,0x98,0x96,0x95,0x98,0x97,0x01,0x98,
5217 0x99,0x01,0x98,0x01,0x98,0x96,0x96,0x95,0x96,0x98,0x98,0x96,0x95,0x98,0x96,0x95,
5218 0x98,0x96,0x01,0x93,0x95,0x98,0x95,0x96,0x98,0x94,0x98,0x96,0x98,0x98,0x98,0x98,
5219 0x01,0x96,0x98,0x94,0x98,0x01,0x96,0x98,0x98,0x01,0x96,0x98,0x95,0x95,0x95,0x96,
5220 0x01,0x94,0x01,0x98,0x98,0x95,0x98,0x01,0x98,0x98,0x98,0x98,0x98,0x96,0x95,0x98,
5221 0x92,0x94,0x94,0x96,0x98,0x98,0x95,0x98,0x95,0x95,0x93,0x94,0x98,0x96,0x96,0x94,
5222 0x98,0x94,0x98,0x95,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x01,0x98,0x93,0x98,0x97,
5223 0x98,0x95,0x98,0x98,0x98,0x98,0x98,0x96,0x98,0x94,0x95,0x01,0x98,0x98,0x98,0x99,
5224 0x98,0x95,0x99,0x95,0x96,0x95,0x98,0x95,0x98,0x99,0x99,0x99,0x98,0x98,0x01,0x98,
5225 0x98,0x98,0x96,0x95,0x93,0x98,0x95,0x98,0x96,0x96,0x96,0x96,0x01,0x99,0x98,0x96,
5226 0x98,0x96,0x99,0x98,0x98,0x01,0x98,0x96,0x98,0x98,0x98,0x01,0x01,0x98,0x98,0x94,
5227 0x92,0x96,0x93,0x92,0x92,0x94,0x95,0x8E,0x94,0x92,0x95,0x94,0x01,0x92,0x92,0x8E,
5228 0x93,0x94,0x94,0x94,0x01,0x93,0x01,0x95,0x92,0x95,0x93,0x95,0x96,0x94,0x94,0x93,
5229 0x94,0x98,0x96,0x95,0x95,0x96,0x96,0x95,0x93,0x94,0x95,0x98,0x92,0x94,0x95,0x95,
5230 0x94,0x98,0x94,0x98,0x96,0x98,0x96,0x95,0x96,0x95,0x95,0x93,0x94,0x93,0x92,0x94,
5231 0x96,0x95,0x95,0x95,0x95,0x94,0x93,0x95,0x92,0x93,0x93,0x96,0x98,0x92,0x93,0x92,
5232 0x94,0x95,0x93,0x95,0x95,0x92,0x8E,0x8E,0x01,0x92,0x92,0x95,0x92,0x94,0x93,0x96,
5233 0x93,0x01,0x92,0x95,0x93,0x94,0x98,0x94,0x95,0x95,0x91,0x93,0x95,0x92,0x92,0x92,
5234 0x01,0x93,0x95,0x92,0x95,0x91,0x92,0x01,0x92,0x92,0x92,0x92,0x93,0x94,0x95,0x94,
5235 0x01,0x95,0x01,0x94,0x95,0x94,0x95,0x93,0x92,0x01,0x01,0x94,0x98,0x98,0x93,0x98,
5236 0x95,0x95,0x98,0x95,0x96,0x94,0x96,0x98,0x96,0x95,0x94,0x95,0x96,0x95,0x95,0x01,
5237 0x96,0x01,0x98,0x95,0x01,0x96,0x98,0x96,0x96,0x98,0x01,0x95,0x96,0x96,0x95,0x95,
5238 0x94,0x94,0x94,0x01,0x98,0x95,0x98,0x96,0x01,0x94,0x98,0x98,0x98,0x93,0x99,0x96,
5239 0x98,0x98,0x98,0x95,0x98,0x98,0x95,0x95,0x95,0x92,0x92,0x98,0x01,0x98,0x94,0x01,
5240 0x95,0x01,0x98,0x01,0x01,0x98,0x95,0x01,0x98,0x98,0x98,0x96,0x98,0x01,0x96,0x95,
5241 0x96,0x95,0x95,0x95,0x98,0x95,0x95,0x98,0x01,0x98,0x96,0x98,0x95,0x95,0x98,0x01,
5242 0x95,0x98,0x99,0x98,0x99,0x98,0x95,0x98,0x96,0x96,0x98,0x01,0x96,0x01,0x01,0x95,
5243 0x98,0x95,0x98,0x98,0x96,0x96,0x01,0x98,0x95,0x95,0x96,0x95,0x94,0x98,0x95,0x01,
5244 0x99,0x98,0x98,0x98,0x01,0x98,0x01,0x94,0x94,0x98,0x98,0x97,0x95,0x98,0x01,0x98,
5245 0x98,0x99,0x95,0x98,0x99,0x99,0x95,0x98,0x98,0x98,0x98,0x99,0x98,0x99,0x98,0x99,
5246 0x98,0x98,0x99,0x98,0x95,0x95,0x99,0x96,0x9A,0x99,0x9A,0x99,0x98,0x96,0x01,0x98,
5247 0x01,0x93,0x95,0x93,0x91,0x01,0x98,0x95,0x94,0x92,0x95,0x92,0x98,0x96,0x95,0x98,
5248 0x95,0x96,0x92,0x95,0x95,0x95,0x95,0x93,0x95,0x95,0x92,0x92,0x95,0x92,0x92,0x01,
5249 0x92,0x95,0x95,0x93,0x96,0x93,0x95,0x92,0x95,0x95,0x95,0x92,0x92,0x01,0x91,0x93,
5250 0x94,0x95,0x93,0x95,0x94,0x92,0x92,0x01,0x01,0x01,0x95,0x8E,0x92,0x98,0x95,0x95,
5251 0x98,0x95,0x96,0x95,0x96,0x94,0x94,0x93,0x94,0x91,0x94,0x94,0x93,0x93,0x92,0x95,
5252 0x93,0x94,0x01,0x01,0x96,0x92,0x98,0x92,0x8E,0x95,0x8E,0x8E,0x8E,0x94,0x93,0x92,
5253 0x93,0x98,0x92,0x94,0x93,0x92,0x95,0x93,0x95,0x91,0x95,0x92,0x94,0x98,0x96,0x01,
5254 0x01,0x92,0x94,0x93,0x94,0x92,0x94,0x93,0x01,0x95,0x92,0x92,0x96,0x93,0x95,0x93,
5255 0x01,0x93,0x95,0x93,0x96,0x94,0x94,0x01,0x96,0x01,0x92,0x98,0x95,0x01,0x96,0x94,
5256 0x01,0x98,0x98,0x01,0x95,0x95,0x96,0x95,0x96,0x94,0x93,0x94,0x95,0x01,0x98,0x98,
5257 0x96,0x95,0x95,0x96,0x95,0x96,0x98,0x01,0x95,0x98,0x96,0x96,0x94,0x96,0x94,0x96,
5258 0x95,0x01,0x95,0x94,0x94,0x93,0x96,0x96,0x96,0x98,0x98,0x98,0x96,0x96,0x98,0x99,
5259 0x98,0x98,0x99,0x99,0x98,0x98,0x96,0x96,0x92,0x94,0x01,0x98,0x94,0x95,0x96,0x98,
5260 0x95,0x95,0x93,0x94,0x01,0x98,0x01,0x98,0x98,0x98,0x95,0x01,0x95,0x95,0x96,0x95,
5261 0x96,0x94,0x95,0x95,0x01,0x95,0x93,0x96,0x98,0x94,0x01,0x9A,0x01,0x98,0x94,0x9A,
5262 0x98,0x98,0x98,0x99,0x98,0x99,0x98,0x94,0x95,0x95,0x95,0x98,0x01,0x98,0x98,0x95,
5263 0x95,0x99,0x98,0x99,0x95,0x98,0x98,0x95,0x98,0x01,0x94,0x98,0x98,0x98,0x01,0x96,
5264 0x95,0x96,0x01,0x97,0x96,0x95,0x01,0x98,0x95,0x95,0x95,0x98,0x01,0x01,0x93,0x95,
5265 0x96,0x98,0x95,0x98,0x98,0x98,0x98,0x01,0x98,0x95,0x98,0x98,0x98,0x98,0x99,0x98,
5266 0x96,0x98,0x9A,0x01,0x99,0x99,0x99,0x98,0x98,0x99,0x98,0x99,0x01,0x98,0x99,0x98,
5267 0x98,0x98,0x95,0x98,0x92,0x98,0x94,0x95,0x98,0x01,0x92,0x96,0x92,0x92,0x94,0x96,
5268 0x98,0x98,0x93,0x92,0x93,0x8E,0x96,0x95,0x96,0x01,0x92,0x95,0x93,0x01,0x94,0x93,
5269 0x01,0x93,0x94,0x94,0x94,0x92,0x95,0x95,0x92,0x93,0x92,0x91,0x94,0x94,0x8E,0x92,
5270 0x8E,0x01,0x8E,0x8E,0x92,0x94,0x92,0x95,0x92,0x95,0x95,0x95,0x94,0x95,0x94,0x94,
5271 0x94,0x01,0x01,0x98,0x95,0x95,0x95,0x94,0x92,0x95,0x95,0x94,0x92,0x92,0x95,0x94,
5272 0x98,0x95,0x95,0x93,0x92,0x95,0x92,0x01,0x96,0x92,0x95,0x01,0x95,0x92,0x94,0x95,
5273 0x94,0x8E,0x8E,0x95,0x96,0x94,0x92,0x8E,0x92,0x92,0x95,0x92,0x95,0x98,0x95,0x92,
5274 0x95,0x93,0x98,0x92,0x95,0x92,0x94,0x94,0x95,0x95,0x93,0x95,0x93,0x94,0x98,0x01,
5275 0x94,0x98,0x01,0x94,0x95,0x01,0x95,0x95,0x98,0x98,0x95,0x96,0x93,0x98,0x96,0x98,
5276 0x95,0x93,0x96,0x01,0x96,0x01,0x98,0x96,0x98,0x95,0x95,0x94,0x98,0x01,0x96,0x98,
5277 0x98,0x96,0x95,0x95,0x98,0x01,0x98,0x98,0x98,0x98,0x94,0x01,0x94,0x01,0x01,0x93,
5278 0x98,0x01,0x98,0x01,0x96,0x98,0x98,0x96,0x98,0x01,0x9A,0x98,0x98,0x95,0x98,0x98,
5279 0x98,0x95,0x99,0x9A,0x96,0x01,0x98,0x98,0x95,0x95,0x98,0x96,0x01,0x98,0x98,0x01,
5280 0x95,0x98,0x96,0x98,0x98,0x95,0x99,0x98,0x01,0x95,0x98,0x95,0x98,0x92,0x95,0x96,
5281 0x94,0x98,0x96,0x97,0x01,0x96,0x98,0x98,0x99,0x98,0x98,0x96,0x95,0x95,0x98,0x98,
5282 0x98,0x98,0x98,0x01,0x98,0x96,0x96,0x96,0x94,0x98,0x98,0x94,0x95,0x98,0x96,0x98,
5283 0x9A,0x98,0x94,0x96,0x99,0x95,0x99,0x98,0x93,0x98,0x95,0x98,0x95,0x95,0x98,0x98,
5284 0x98,0x93,0x98,0x98,0x96,0x95,0x96,0x01,0x96,0x98,0x95,0x95,0x94,0x01,0x98,0x98,
5285 0x96,0x95,0x01,0x98,0x98,0x98,0x01,0x98,0x98,0x96,0x99,0x98,0x98,0x99,0x99,0x98,
5286 0x99,0x01,0x98,0x01,0x98,0x98,0x98,0x96,0x98,0x94,0x98,0x94,0x98,0x98,0x99,0x95,
5287 0x98,0x96,0x95,0x93,0x92,0x92,0x92,0x93,0x92,0x93,0x95,0x01,0x01,0x01,0x95,0x96,
5288 0x01,0x92,0x95,0x96,0x01,0x93,0x92,0x92,0x94,0x8E,0x92,0x01,0x92,0x01,0x91,0x92,
5289 0x93,0x95,0x94,0x96,0x98,0x91,0x91,0x8E,0x95,0x94,0x92,0x8F,0x95,0x01,0x96,0x93,
5290 0x94,0x96,0x94,0x96,0x8E,0x92,0x8E,0x94,0x8E,0x92,0x01,0x96,0x92,0x92,0x94,0x93,
5291 0x92,0x98,0x98,0x95,0x01,0x96,0x95,0x01,0x98,0x98,0x96,0x01,0x98,0x93,0x98,0x01,
5292 0x95,0x91,0x95,0x93,0x93,0x94,0x91,0x94,0x96,0x95,0x93,0x93,0x96,0x95,0x94,0x95,
5293 0x94,0x92,0x95,0x96,0x93,0x98,0x96,0x95,0x93,0x96,0x93,0x93,0x98,0x92,0x95,0x93,
5294 0x95,0x94,0x93,0x93,0x93,0x95,0x95,0x96,0x96,0x92,0x94,0x96,0x95,0x96,0x95,0x94,
5295 0x93,0x93,0x96,0x98,0x01,0x98,0x98,0x97,0x95,0x98,0x96,0x98,0x01,0x96,0x01,0x98,
5296 0x95,0x98,0x96,0x96,0x01,0x96,0x01,0x01,0x01,0x95,0x96,0x96,0x96,0x01,0x01,0x98,
5297 0x95,0x95,0x98,0x96,0x01,0x01,0x94,0x01,0x01,0x01,0x96,0x98,0x96,0x98,0x98,0x92,
5298 0x01,0x01,0x96,0x95,0x98,0x99,0x96,0x99,0x95,0x01,0x01,0x98,0x98,0x99,0x9A,0x98,
5299 0x9A,0x95,0x9A,0x98,0x98,0x9A,0x99,0x98,0x95,0x95,0x9A,0x98,0x01,0x95,0x95,0x98,
5300 0x01,0x98,0x98,0x98,0x98,0x98,0x99,0x96,0x98,0x96,0x98,0x95,0x92,0x01,0x98,0x99,
5301 0x98,0x98,0x98,0x01,0x98,0x98,0x98,0x95,0x94,0x98,0x97,0x98,0x01,0x98,0x98,0x96,
5302 0x95,0x93,0x95,0x98,0x96,0x98,0x98,0x98,0x95,0x01,0x96,0x98,0x98,0x99,0x95,0x01,
5303 0x98,0x98,0x9A,0x98,0x98,0x01,0x01,0x98,0x98,0x98,0x96,0x96,0x98,0x01,0x94,0x94,
5304 0x95,0x96,0x01,0x96,0x98,0x98,0x98,0x95,0x95,0x98,0x95,0x95,0x96,0x96,0x95,0x95,
5305 0x94,0x98,0x98,0x01,0x95,0x98,0x98,0x95,0x95,0x98,0x98,0x98,0x99,0x98,0x01,0x95,
5306 0x99,0x96,0x95,0x95,0x98,0x98,0x95,0x01,0x98,0x95,0x01,0x96,0x96,0x94,0x95,0x98,
5307 0x98,0x01,0x98,0x93,0x95,0x95,0x96,0x93,0x98,0x95,0x98,0x95,0x93,0x01,0x93,0x96,
5308 0x93,0x96,0x98,0x92,0x01,0x93,0x93,0x94,0x94,0x92,0x92,0x92,0x8E,0x94,0x93,0x8E,
5309 0x92,0x01,0x95,0x95,0x93,0x93,0x92,0x8E,0x8E,0x91,0x94,0x93,0x01,0x94,0x98,0x92,
5310 0x95,0x94,0x96,0x92,0x8E,0x8E,0x8E,0x93,0x94,0x95,0x92,0x8E,0x8E,0x95,0x94,0x95,
5311 0x94,0x93,0x96,0x93,0x95,0x98,0x95,0x96,0x95,0x93,0x96,0x94,0x98,0x01,0x96,0x94,
5312 0x96,0x94,0x94,0x95,0x94,0x95,0x01,0x92,0x94,0x92,0x94,0x95,0x92,0x94,0x93,0x94,
5313 0x93,0x96,0x93,0x94,0x92,0x93,0x98,0x01,0x98,0x94,0x95,0x95,0x95,0x93,0x93,0x94,
5314 0x95,0x01,0x95,0x98,0x96,0x93,0x94,0x01,0x94,0x95,0x98,0x96,0x93,0x95,0x92,0x93,
5315 0x96,0x96,0x98,0x93,0x98,0x94,0x94,0x01,0x92,0x01,0x93,0x94,0x94,0x96,0x01,0x98,
5316 0x01,0x01,0x98,0x96,0x01,0x92,0x94,0x98,0x94,0x95,0x96,0x01,0x97,0x95,0x95,0x98,
5317 0x98,0x98,0x01,0x98,0x96,0x01,0x95,0x98,0x93,0x98,0x96,0x01,0x01,0x94,0x95,0x98,
5318 0x96,0x95,0x98,0x95,0x98,0x96,0x96,0x99,0x98,0x98,0x99,0x96,0x01,0x96,0x98,0x98,
5319 0x99,0x96,0x9A,0x01,0x98,0x01,0x98,0x98,0x97,0x98,0x98,0x98,0x99,0x95,0x92,0x92,
5320 0x96,0x99,0x98,0x96,0x98,0x98,0x98,0x01,0x95,0x98,0x96,0x99,0x01,0x9A,0x98,0x98,
5321 0x98,0x98,0x98,0x96,0x96,0x98,0x95,0x98,0x98,0x93,0x98,0x98,0x98,0x96,0x95,0x97,
5322 0x98,0x97,0x97,0x98,0x95,0x01,0x98,0x98,0x01,0x98,0x01,0x95,0x98,0x99,0x98,0x9A,
5323 0x98,0x98,0x9A,0x98,0x98,0x9A,0x94,0x01,0x98,0x95,0x01,0x98,0x95,0x96,0x95,0x94,
5324 0x95,0x96,0x95,0x95,0x93,0x98,0x96,0x95,0x95,0x01,0x98,0x96,0x96,0x01,0x01,0x96,
5325 0x01,0x96,0x92,0x01,0x01,0x98,0x98,0x98,0x98,0x98,0x98,0x01,0x98,0x95,0x97,0x95,
5326 0x98,0x94,0x92,0x96,0x98,0x96,0x01,0x98,0x01,0x98,0x95,0x98,0x98,0x01,0x95,0x94,
5327 0x98,0x98,0x95,0x93,0x95,0x92,0x95,0x98,0x96,0x93,0x94,0x01,0x93,0x98,0x92,0x95,
5328 0x92,0x98,0x92,0x94,0x95,0x96,0x95,0x95,0x92,0x92,0x92,0x93,0x96,0x93,0x96,0x92,
5329 0x94,0x01,0x95,0x92,0x95,0x93,0x92,0x95,0x98,0x92,0x94,0x95,0x93,0x94,0x93,0x95,
5330 0x95,0x95,0x91,0x93,0x8E,0x8E,0x92,0x92,0x93,0x98,0x92,0x93,0x95,0x92,0x98,0x94,
5331 0x96,0x93,0x95,0x98,0x96,0x96,0x96,0x98,0x98,0x95,0x95,0x95,0x98,0x98,0x95,0x96,
5332 0x98,0x94,0x98,0x94,0x93,0x98,0x98,0x96,0x01,0x96,0x98,0x01,0x96,0x94,0x94,0x01,
5333 0x95,0x95,0x95,0x01,0x96,0x01,0x96,0x94,0x98,0x95,0x95,0x93,0x95,0x94,0x95,0x95,
5334 0x95,0x94,0x95,0x95,0x93,0x92,0x95,0x95,0x95,0x01,0x93,0x01,0x98,0x96,0x96,0x98,
5335 0x01,0x98,0x98,0x98,0x98,0x94,0x98,0x94,0x01,0x01,0x01,0x98,0x98,0x94,0x95,0x01,
5336 0x96,0x94,0x95,0x96,0x01,0x96,0x98,0x98,0x98,0x98,0x95,0x96,0x99,0x01,0x98,0x96,
5337 0x98,0x98,0x96,0x95,0x98,0x01,0x95,0x94,0x98,0x98,0x96,0x98,0x95,0x95,0x94,0x96,
5338 0x95,0x94,0x98,0x97,0x98,0x96,0x01,0x95,0x99,0x98,0x98,0x98,0x01,0x01,0x98,0x96,
5339 0x99,0x99,0x99,0x01,0x96,0x95,0x98,0x94,0x94,0x94,0x01,0x98,0x01,0x98,0x94,0x98,
5340 0x98,0x97,0x99,0x01,0x96,0x96,0x95,0x98,0x95,0x99,0x01,0x99,0x98,0x98,0x98,0x98,
5341 0x98,0x9B,0x99,0x9B,0x9C,0x99,0x98,0x96,0x01,0x98,0x95,0x98,0x96,0x97,0x98,0x98,
5342 0x98,0x01,0x95,0x94,0x98,0x98,0x01,0x98,0x95,0x95,0x95,0x96,0x98,0x98,0x98,0x99,
5343 0x99,0x98,0x98,0x92,0x98,0x98,0x98,0x98,0x98,0x94,0x94,0x96,0x96,0x95,0x95,0x01,
5344 0x98,0x01,0x95,0x98,0x94,0x98,0x95,0x01,0x98,0x96,0x94,0x96,0x01,0x98,0x96,0x96,
5345 0x95,0x98,0x98,0x98,0x99,0x95,0x98,0x95,0x98,0x98,0x96,0x01,0x95,0x01,0x98,0x98,
5346 0x98,0x01,0x95,0x95,0x98,0x98,0x94,0x98,0x98,0x96,0x94,0x98,0x94,0x96,0x95,0x98,
5347 0x98,0x01,0x93,0x92,0x94,0x95,0x95,0x93,0x95,0x93,0x93,0x92,0x01,0x01,0x94,0x96,
5348 0x94,0x93,0x94,0x01,0x01,0x01,0x95,0x92,0x98,0x95,0x95,0x92,0x95,0x96,0x95,0x92,
5349 0x93,0x92,0x95,0x93,0x95,0x01,0x94,0x93,0x95,0x92,0x98,0x92,0x95,0x92,0x95,0x98,
5350 0x92,0x95,0x96,0x95,0x8E,0x96,0x01,0x8E,0x93,0x93,0x95,0x95,0x95,0x94,0x92,0x95,
5351 0x94,0x95,0x94,0x95,0x98,0x01,0x95,0x95,0x94,0x98,0x95,0x98,0x98,0x96,0x95,0x94,
5352 0x93,0x96,0x94,0x98,0x95,0x98,0x97,0x98,0x95,0x97,0x96,0x96,0x96,0x96,0x95,0x01,
5353 0x96,0x98,0x95,0x95,0x98,0x98,0x96,0x01,0x01,0x96,0x94,0x94,0x94,0x01,0x94,0x98,
5354 0x95,0x94,0x94,0x01,0x96,0x96,0x95,0x96,0x95,0x93,0x98,0x95,0x95,0x95,0x99,0x01,
5355 0x94,0x98,0x98,0x94,0x95,0x01,0x92,0x96,0x98,0x96,0x01,0x98,0x95,0x95,0x98,0x98,
5356 0x94,0x01,0x96,0x01,0x01,0x01,0x96,0x01,0x97,0x95,0x98,0x98,0x98,0x98,0x96,0x96,
5357 0x99,0x96,0x98,0x98,0x98,0x98,0x95,0x94,0x98,0x98,0x98,0x96,0x95,0x98,0x95,0x98,
5358 0x98,0x98,0x96,0x96,0x98,0x98,0x95,0x9A,0x98,0x98,0x96,0x95,0x95,0x94,0x95,0x94,
5359 0x95,0x93,0x96,0x98,0x95,0x94,0x92,0x95,0x95,0x95,0x95,0x98,0x01,0x95,0x01,0x96,
5360 0x98,0x01,0x96,0x98,0x99,0x98,0x99,0x98,0x95,0x95,0x98,0x01,0x98,0x98,0x96,0x98,
5361 0x98,0x98,0x95,0x9B,0x99,0x99,0x01,0x01,0x98,0x94,0x95,0x99,0x98,0x95,0x98,0x98,
5362 0x98,0x98,0x92,0x96,0x95,0x96,0x98,0x98,0x98,0x94,0x98,0x95,0x94,0x94,0x98,0x01,
5363 0x96,0x98,0x93,0x98,0x99,0x98,0x01,0x96,0x96,0x01,0x94,0x94,0x95,0x95,0x96,0x94,
5364 0x95,0x92,0x01,0x95,0x96,0x96,0x92,0x98,0x94,0x94,0x96,0x98,0x98,0x98,0x96,0x98,
5365 0x96,0x96,0x98,0x98,0x01,0x01,0x94,0x01,0x95,0x95,0x01,0x95,0x98,0x96,0x95,0x95,
5366 0x95,0x01,0x01,0x95,0x95,0x96,0x94,0x94,0x95,0x98,0x96,0x95,0x95,0x96,0x98,0x95,
5367 0x94,0x93,0x01,0x95,0x94,0x95,0x96,0x95,0x96,0x95,0x95,0x98,0x95,0x98,0x98,0x94,
5368 0x95,0x96,0x95,0x01,0x95,0x95,0x92,0x92,0x95,0x95,0x94,0x96,0x01,0x92,0x94,0x94,
5369 0x94,0x93,0x93,0x96,0x92,0x95,0x94,0x95,0x98,0x95,0x92,0x96,0x96,0x95,0x94,0x98,
5370 0x01,0x95,0x92,0x96,0x93,0x96,0x95,0x01,0x98,0x01,0x96,0x01,0x98,0x95,0x92,0x92,
5371 0x94,0x8E,0x92,0x94,0x95,0x94,0x93,0x95,0x01,0x95,0x98,0x98,0x98,0x98,0x01,0x95,
5372 0x98,0x97,0x95,0x95,0x96,0x95,0x94,0x97,0x95,0x96,0x98,0x95,0x95,0x01,0x98,0x97,
5373 0x98,0x94,0x95,0x95,0x98,0x95,0x94,0x01,0x98,0x95,0x96,0x96,0x01,0x96,0x96,0x95,
5374 0x94,0x95,0x98,0x01,0x98,0x96,0x95,0x98,0x96,0x98,0x92,0x01,0x95,0x98,0x95,0x95,
5375 0x98,0x95,0x95,0x98,0x95,0x98,0x94,0x98,0x94,0x96,0x98,0x98,0x01,0x98,0x95,0x94,
5376 0x95,0x98,0x97,0x95,0x01,0x01,0x96,0x98,0x94,0x96,0x01,0x98,0x94,0x98,0x01,0x98,
5377 0x97,0x94,0x96,0x96,0x98,0x95,0x94,0x98,0x01,0x96,0x93,0x01,0x98,0x01,0x96,0x99,
5378 0x98,0x96,0x98,0x96,0x98,0x96,0x98,0x95,0x98,0x99,0x95,0x98,0x97,0x98,0x95,0x98,
5379 0x94,0x92,0x92,0x8E,0x8E,0x95,0x93,0x01,0x96,0x94,0x98,0x98,0x95,0x94,0x94,0x95,
5380 0x95,0x98,0x98,0x01,0x98,0x96,0x98,0x98,0x01,0x98,0x98,0x99,0x98,0x96,0x98,0x96,
5381 0x95,0x98,0x98,0x98,0x9A,0x94,0x99,0x98,0x98,0x98,0x98,0x98,0x01,0x9A,0x98,0x95,
5382 0x01,0x98,0x98,0x96,0x9A,0x9A,0x01,0x94,0x96,0x98,0x96,0x96,0x01,0x98,0x01,0x98,
5383 0x98,0x98,0x99,0x99,0x98,0x98,0x98,0x98,0x98,0x94,0x98,0x98,0x98,0x94,0x96,0x95,
5384 0x95,0x95,0x98,0x93,0x94,0x98,0x94,0x96,0x98,0x96,0x95,0x98,0x99,0x98,0x01,0x96,
5385 0x98,0x98,0x98,0x9A,0x01,0x01,0x01,0x94,0x95,0x01,0x96,0x98,0x95,0x95,0x96,0x96,
5386 0x94,0x01,0x01,0x01,0x98,0x01,0x96,0x96,0x01,0x98,0x96,0x94,0x98,0x98,0x96,0x01,
5387 0x01,0x94,0x98,0x98,0x93,0x93,0x92,0x95,0x01,0x93,0x94,0x92,0x96,0x95,0x92,0x96,
5388 0x93,0x95,0x94,0x93,0x95,0x93,0x01,0x01,0x94,0x95,0x95,0x95,0x92,0x92,0x96,0x92,
5389 0x01,0x01,0x95,0x96,0x01,0x01,0x95,0x95,0x93,0x95,0x94,0x98,0x01,0x95,0x01,0x94,
5390 0x01,0x94,0x95,0x8E,0x92,0x01,0x95,0x98,0x95,0x96,0x93,0x96,0x96,0x98,0x01,0x01,
5391 0x96,0x95,0x95,0x95,0x96,0x93,0x94,0x93,0x95,0x01,0x98,0x95,0x98,0x98,0x98,0x01,
5392 0x98,0x98,0x01,0x92,0x98,0x95,0x98,0x95,0x96,0x95,0x98,0x97,0x98,0x98,0x95,0x98,
5393 0x98,0x98,0x94,0x94,0x92,0x01,0x01,0x95,0x96,0x95,0x98,0x95,0x98,0x01,0x98,0x98,
5394 0x96,0x96,0x95,0x01,0x95,0x98,0x96,0x96,0x98,0x95,0x01,0x01,0x96,0x98,0x94,0x98,
5395 0x95,0x01,0x98,0x01,0x95,0x91,0x98,0x96,0x94,0x01,0x95,0x98,0x01,0x98,0x98,0x95,
5396 0x98,0x98,0x96,0x98,0x01,0x01,0x96,0x96,0x98,0x96,0x94,0x94,0x94,0x98,0x01,0x95,
5397 0x96,0x98,0x98,0x94,0x98,0x95,0x95,0x95,0x95,0x98,0x96,0x01,0x98,0x94,0x98,0x96,
5398 0x98,0x96,0x99,0x96,0x98,0x96,0x95,0x96,0x95,0x94,0x98,0x95,0x96,0x92,0x96,0x98,
5399 0x98,0x01,0x92,0x8E,0x94,0x91,0x93,0x95,0x94,0x96,0x95,0x96,0x94,0x95,0x95,0x96,
5400 0x98,0x96,0x95,0x94,0x96,0x98,0x01,0x96,0x98,0x98,0x98,0x98,0x98,0x97,0x98,0x98,
5401 0x01,0x97,0x94,0x95,0x01,0x99,0x96,0x98,0x98,0x98,0x98,0x98,0x98,0x01,0x96,0x9A,
5402 0x98,0x9A,0x98,0x95,0x95,0x96,0x01,0x98,0x98,0x98,0x98,0x98,0x98,0x94,0x96,0x95,
5403 0x98,0x98,0x98,0x94,0x98,0x95,0x95,0x98,0x98,0x98,0x98,0x98,0x95,0x92,0x98,0x96,
5404 0x96,0x95,0x95,0x01,0x98,0x95,0x98,0x98,0x98,0x93,0x95,0x96,0x99,0x95,0x98,0x99,
5405 0x95,0x99,0x99,0x95,0x94,0x95,0x95,0x96,0x98,0x98,0x95,0x98,0x98,0x94,0x94,0x95,
5406 0x96,0x98,0x95,0x01,0x98,0x98,0x94,0x96,0x98,0x98,0x96,0x98,0x93,0x98,0x01,0x01,
5407 0x92,0x92,0x96,0x93,0x96,0x95,0x91,0x01,0x92,0x95,0x01,0x01,0x93,0x95,0x01,0x98,
5408 0x94,0x95,0x95,0x94,0x94,0x94,0x95,0x01,0x92,0x94,0x93,0x93,0x01,0x96,0x94,0x94,
5409 0x95,0x98,0x98,0x01,0x98,0x95,0x98,0x93,0x95,0x01,0x95,0x94,0x96,0x95,0x98,0x95,
5410 0x94,0x93,0x98,0x01,0x95,0x94,0x98,0x95,0x01,0x95,0x95,0x98,0x01,0x98,0x01,0x98,
5411 0x95,0x98,0x95,0x8E,0x92,0x92,0x91,0x91,0x93,0x95,0x96,0x96,0x92,0x92,0x94,0x95,
5412 0x95,0x98,0x96,0x95,0x96,0x93,0x95,0x01,0x98,0x98,0x98,0x01,0x95,0x96,0x92,0x94,
5413 0x98,0x96,0x98,0x95,0x98,0x95,0x96,0x93,0x96,0x01,0x98,0x01,0x95,0x01,0x98,0x9A,
5414 0x99,0x95,0x95,0x96,0x94,0x95,0x01,0x98,0x95,0x95,0x95,0x98,0x01,0x95,0x93,0x98,
5415 0x98,0x01,0x98,0x94,0x95,0x96,0x98,0x01,0x95,0x95,0x98,0x97,0x96,0x98,0x98,0x96,
5416 0x96,0x95,0x96,0x96,0x94,0x96,0x01,0x96,0x96,0x01,0x01,0x98,0x98,0x94,0x94,0x96,
5417 0x95,0x98,0x99,0x98,0x98,0x96,0x98,0x01,0x98,0x94,0x96,0x98,0x01,0x98,0x01,0x98,
5418 0x01,0x99,0x94,0x99,0x99,0x94,0x98,0x98,0x95,0x95,0x98,0x98,0x98,0x01,0x92,0x94,
5419 0x8E,0x8E,0x96,0x93,0x95,0x96,0x98,0x94,0x95,0x01,0x92,0x01,0x96,0x95,0x98,0x98,
5420 0x98,0x98,0x94,0x98,0x98,0x01,0x98,0x95,0x01,0x96,0x94,0x01,0x96,0x96,0x98,0x98,
5421 0x95,0x01,0x95,0x96,0x01,0x97,0x98,0x93,0x97,0x98,0x98,0x98,0x98,0x98,0x96,0x96,
5422 0x98,0x98,0x98,0x01,0x98,0x98,0x95,0x98,0x98,0x99,0x98,0x98,0x98,0x95,0x96,0x94,
5423 0x96,0x98,0x96,0x95,0x01,0x95,0x92,0x98,0x98,0x96,0x01,0x99,0x99,0x98,0x95,0x95,
5424 0x95,0x01,0x96,0x98,0x98,0x98,0x96,0x98,0x98,0x98,0x99,0x98,0x98,0x01,0x98,0x98,
5425 0x98,0x01,0x01,0x96,0x98,0x95,0x93,0x93,0x96,0x95,0x93,0x96,0x01,0x98,0x94,0x96,
5426 0x98,0x96,0x01,0x92,0x92,0x92,0x96,0x96,0x01,0x98,0x95,0x95,0x98,0x95,0x96,0x98,
5427 0x92,0x94,0x92,0x93,0x92,0x95,0x01,0x95,0x96,0x95,0x98,0x01,0x92,0x93,0x94,0x94,
5428 0x95,0x96,0x98,0x01,0x92,0x95,0x96,0x94,0x98,0x01,0x01,0x98,0x96,0x96,0x95,0x98,
5429 0x95,0x96,0x96,0x92,0x96,0x96,0x93,0x98,0x92,0x92,0x01,0x96,0x95,0x95,0x96,0x8E,
5430 0x92,0x94,0x01,0x95,0x96,0x98,0x94,0x01,0x96,0x95,0x94,0x94,0x96,0x98,0x98,0x96,
5431 0x98,0x96,0x96,0x94,0x01,0x93,0x92,0x93,0x96,0x01,0x98,0x96,0x01,0x93,0x92,0x92,
5432 0x92,0x93,0x92,0x93,0x95,0x8E,0x8E,0x95,0x95,0x98,0x98,0x95,0x95,0x94,0x93,0x92,
5433 0x94,0x95,0x96,0x98,0x01,0x98,0x96,0x99,0x95,0x98,0x98,0x98,0x94,0x98,0x95,0x98,
5434 0x99,0x98,0x98,0x98,0x98,0x01,0x98,0x01,0x98,0x95,0x01,0x98,0x98,0x95,0x98,0x98,
5435 0x98,0x98,0x97,0x95,0x98,0x98,0x01,0x98,0x95,0x98,0x94,0x98,0x93,0x95,0x98,0x95,
5436 0x95,0x98,0x96,0x96,0x98,0x98,0x95,0x98,0x95,0x93,0x01,0x94,0x95,0x98,0x96,0x98,
5437 0x96,0x98,0x98,0x99,0x96,0x98,0x98,0x98,0x01,0x98,0x96,0x98,0x95,0x98,0x9A,0x98,
5438 0x98,0x96,0x98,0x98,0x98,0x98,0x95,0x96,0x95,0x95,0x96,0x95,0x95,0x95,0x94,0x8E,
5439 0x8E,0x92,0x92,0x01,0x95,0x98,0x95,0x01,0x95,0x94,0x96,0x96,0x01,0x95,0x98,0x96,
5440 0x98,0x01,0x98,0x96,0x01,0x94,0x95,0x96,0x98,0x01,0x95,0x95,0x01,0x01,0x98,0x95,
5441 0x98,0x94,0x98,0x98,0x96,0x94,0x95,0x93,0x01,0x98,0x98,0x95,0x94,0x98,0x96,0x98,
5442 0x98,0x98,0x98,0x01,0x96,0x98,0x95,0x01,0x95,0x92,0x96,0x96,0x01,0x94,0x96,0x01,
5443 0x98,0x95,0x98,0x96,0x96,0x01,0x98,0x93,0x96,0x94,0x95,0x98,0x96,0x01,0x98,0x96,
5444 0x99,0x98,0x98,0x98,0x99,0x98,0x94,0x99,0x98,0x98,0x98,0x98,0x01,0x01,0x95,0x95,
5445 0x94,0x94,0x96,0x95,0x95,0x92,0x8E,0x8E,0x92,0x94,0x92,0x93,0x8E,0x8E,0x92,0x8E,
5446 0x92,0x8E,0x92,0x8E,0x94,0x93,0x92,0x95,0x93,0x93,0x98,0x96,0x8E,0x8E,0x8E,0x8D,
5447 0x95,0x98,0x98,0x95,0x98,0x01,0x96,0x95,0x96,0x95,0x96,0x95,0x96,0x98,0x98,0x01,
5448 0x01,0x98,0x96,0x94,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x96,0x98,0x01,0x95,0x95,
5449 0x96,0x98,0x98,0x96,0x96,0x96,0x98,0x01,0x92,0x01,0x95,0x95,0x98,0x01,0x96,0x01,
5450 0x98,0x98,0x01,0x98,0x01,0x94,0x98,0x98,0x98,0x98,0x98,0x94,0x96,0x94,0x98,0x95,
5451 0x01,0x98,0x98,0x93,0x98,0x94,0x94,0x98,0x96,0x95,0x98,0x95,0x95,0x95,0x94,0x92,
5452 0x01,0x93,0x95,0x93,0x94,0x94,0x94,0x96,0x96,0x96,0x94,0x98,0x98,0x94,0x92,0x95,
5453 0x01,0x95,0x98,0x96,0x99,0x94,0x98,0x95,0x98,0x94,0x98,0x95,0x98,0x94,0x98,0x98,
5454 0x96,0x96,0x98,0x95,0x98,0x95,0x98,0x98,0x96,0x98,0x99,0x98,0x98,0x94,0x94,0x94,
5455 0x96,0x93,0x96,0x01,0x95,0x01,0x96,0x01,0x95,0x93,0x95,0x01,0x94,0x95,0x94,0x93,
5456 0x94,0x96,0x95,0x94,0x94,0x95,0x01,0x95,0x95,0x98,0x98,0x94,0x98,0x95,0x01,0x99,
5457 0x95,0x01,0x01,0x98,0x98,0x01,0x98,0x01,0x99,0x01,0x96,0x98,0x98,0x98,0x98,0x98,
5458 0x98,0x98,0x94,0x98,0x95,0x01,0x94,0x93,0x92,0x95,0x93,0x8E,0x95,0x93,0x95,0x95,
5459 0x95,0x93,0x94,0x96,0x98,0x98,0x95,0x01,0x96,0x01,0x98,0x95,0x96,0x98,0x96,0x95,
5460 0x98,0x01,0x95,0x01,0x96,0x98,0x96,0x95,0x98,0x98,0x98,0x98,0x93,0x95,0x95,0x98,
5461 0x95,0x98,0x95,0x98,0x95,0x96,0x95,0x95,0x96,0x01,0x96,0x95,0x98,0x98,0x96,0x95,
5462 0x96,0x98,0x01,0x98,0x95,0x96,0x95,0x98,0x01,0x01,0x98,0x99,0x01,0x96,0x98,0x96,
5463 0x98,0x98,0x99,0x98,0x98,0x99,0x95,0x99,0x95,0x99,0x98,0x99,0x98,0x99,0x98,0x98,
5464 0x98,0x98,0x99,0x94,0x01,0x94,0x01,0x95,0x97,0x98,0x94,0x94,0x98,0x01,0x93,0x94,
5465 0x93,0x96,0x92,0x94,0x92,0x8E,0x96,0x95,0x98,0x93,0x94,0x01,0x92,0x92,0x93,0x8D,
5466 0x94,0x96,0x96,0x8E,0x92,0x8E,0x94,0x92,0x94,0x8E,0x94,0x92,0x94,0x95,0x94,0x98,
5467 0x92,0x01,0x94,0x98,0x96,0x98,0x93,0x98,0x98,0x98,0x94,0x96,0x95,0x98,0x98,0x96,
5468 0x96,0x98,0x98,0x01,0x96,0x95,0x94,0x96,0x98,0x98,0x01,0x01,0x96,0x93,0x96,0x95,
5469 0x95,0x95,0x98,0x98,0x98,0x98,0x01,0x96,0x95,0x96,0x01,0x98,0x98,0x96,0x98,0x98,
5470 0x96,0x98,0x96,0x01,0x98,0x98,0x01,0x98,0x98,0x96,0x95,0x98,0x95,0x98,0x01,0x98,
5471 0x92,0x96,0x96,0x98,0x96,0x96,0x95,0x97,0x98,0x96,0x95,0x01,0x01,0x98,0x95,0x96,
5472 0x01,0x01,0x96,0x95,0x95,0x94,0x01,0x01,0x98,0x95,0x01,0x96,0x98,0x98,0x93,0x01,
5473 0x01,0x95,0x96,0x98,0x96,0x01,0x98,0x96,0x96,0x94,0x98,0x95,0x01,0x94,0x94,0x98,
5474 0x93,0x95,0x98,0x01,0x98,0x98,0x98,0x98,0x96,0x01,0x01,0x95,0x98,0x96,0x95,0x95,
5475 0x01,0x98,0x92,0x01,0x95,0x96,0x98,0x94,0x98,0x98,0x94,0x01,0x95,0x94,0x95,0x98,
5476 0x96,0x95,0x95,0x95,0x95,0x95,0x96,0x98,0x01,0x94,0x96,0x98,0x9A,0x01,0x99,0x98,
5477 0x98,0x01,0x99,0x98,0x01,0x98,0x01,0x01,0x98,0x98,0x98,0x98,0x98,0x95,0x98,0x95,
5478 0x96,0x95,0x95,0x95,0x98,0x94,0x93,0x93,0x01,0x92,0x92,0x98,0x95,0x93,0x94,0x92,
5479 0x94,0x98,0x95,0x98,0x95,0x95,0x96,0x94,0x96,0x96,0x91,0x98,0x96,0x95,0x98,0x98,
5480 0x94,0x95,0x94,0x96,0x98,0x95,0x95,0x01,0x95,0x94,0x01,0x98,0x96,0x98,0x98,0x96,
5481 0x94,0x95,0x98,0x98,0x96,0x92,0x98,0x96,0x95,0x95,0x98,0x95,0x98,0x94,0x95,0x98,
5482 0x98,0x98,0x95,0x95,0x98,0x01,0x96,0x98,0x98,0x93,0x98,0x98,0x96,0x98,0x98,0x96,
5483 0x98,0x98,0x01,0x01,0x98,0x98,0x98,0x95,0x95,0x01,0x98,0x01,0x98,0x01,0x98,0x98,
5484 0x98,0x98,0x01,0x01,0x95,0x96,0x96,0x98,0x98,0x98,0x93,0x98,0x93,0x96,0x95,0x95,
5485 0x94,0x8E,0x8E,0x94,0x92,0x94,0x95,0x95,0x96,0x93,0x01,0x8E,0x95,0x94,0x8E,0x95,
5486 0x95,0x92,0x8E,0x95,0x96,0x94,0x92,0x92,0x92,0x98,0x95,0x94,0x94,0x96,0x98,0x95,
5487 0x92,0x01,0x98,0x98,0x98,0x94,0x95,0x95,0x01,0x95,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5488 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5489 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5490 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5491 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5492 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5493 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5494 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5495 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x96,0x98,0x95,0x96,
5496 0x95,0x94,0x01,0x01,0x93,0x93,0x96,0x96,0x93,0x9A,0x98,0x95,0x9F,0x9F,0x9F,0x9F,
5497 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5498 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5499 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5500 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5501 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5502 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5503 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5504 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5505 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5506 0x9F,0x9F,0x9F,0x9F,0x9F,0x97,0x96,0x95,0x96,0x95,0x98,0x96,0x94,0x94,0x01,0x94,
5507 0x96,0x95,0x98,0x96,0x95,0x98,0x96,0x92,0x95,0x95,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5508 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5509 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5510 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5511 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5512 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5513 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5514 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5515 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x96,0x92,0x95,0x98,
5516 0x96,0x92,0x94,0x94,0x94,0x98,0x98,0x01,0x99,0x95,0x98,0x98,0x9F,0x9F,0x9F,0x9F,
5517 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5518 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5519 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5520 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5521 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5522 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5523 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5524 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5525 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5526 0x9F,0x9F,0x9F,0x9F,0x9F,0x94,0x98,0x98,0x98,0x01,0x01,0x01,0x98,0x94,0x94,0x98,
5527 0x98,0x96,0x95,0x96,0x95,0x98,0x92,0x95,0x95,0x94,0x9F,0x9F,0x9D,0x9D,0x95,0x95,
5528 0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x9D,0x9D,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,
5529 0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x9D,0x9D,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,
5530 0x9D,0x9D,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,
5531 0x9D,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,
5532 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x9D,
5533 0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,
5534 0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,
5535 0x95,0x9D,0x9D,0x9D,0x95,0x95,0x9D,0x9D,0x95,0x95,0x9D,0x9D,0x93,0x94,0x95,0x98,
5536 0x01,0x98,0x98,0x96,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x97,0x9F,0x9F,0x9D,0x9D,
5537 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5538 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5539 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5540 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5541 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5542 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5543 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5544 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5545 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5546 0x9D,0x9D,0x9D,0x9D,0x9D,0x91,0x98,0x01,0x01,0x98,0x94,0x96,0x94,0x98,0x01,0x95,
5547 0x91,0x01,0x95,0x92,0x93,0x94,0x95,0x92,0x92,0x93,0x9F,0x9F,0x9D,0x95,0x10,0x10,
5548 0x10,0x10,0x95,0x9D,0x95,0x10,0x10,0x95,0x95,0x10,0x10,0x95,0x9D,0x95,0x10,0x10,
5549 0x10,0x10,0x95,0x9D,0x95,0x10,0x10,0x95,0x95,0x10,0x10,0x95,0x9D,0x9D,0x9D,0x9D,
5550 0x9D,0x95,0x10,0x10,0x10,0x10,0x95,0x9D,0x95,0x10,0x10,0x10,0x10,0x10,0x95,0x9D,
5551 0x95,0x10,0x10,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x95,
5552 0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x10,0x10,0x95,0x9D,0x9D,0x9D,0x95,0x10,0x10,0x95,
5553 0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x95,0x95,0x10,0x10,0x95,0x9D,0x9D,0x9D,0x95,
5554 0x10,0x10,0x95,0x9D,0x95,0x10,0x10,0x10,0x10,0x95,0x9D,0x95,0x10,0x10,0x10,0x10,
5555 0x10,0x95,0x9D,0x95,0x10,0x10,0x95,0x95,0x10,0x10,0x95,0x9D,0x93,0x95,0x98,0x98,
5556 0x96,0x99,0x98,0x98,0x01,0x96,0x99,0x98,0x94,0x96,0x98,0x96,0x9F,0x9F,0x9D,0x9D,
5557 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5558 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,
5559 0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,
5560 0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,
5561 0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5562 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5563 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5564 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5565 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5566 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x01,0x98,0x01,0x92,0x95,0x93,0x95,0x98,0x96,0x93,
5567 0x99,0x95,0x96,0x98,0x96,0x96,0x98,0x01,0x92,0x92,0x9F,0x9F,0x95,0x10,0x11,0x10,
5568 0x11,0x10,0x11,0x95,0x95,0x10,0x11,0x95,0x95,0x10,0x11,0x95,0x95,0x10,0x11,0x10,
5569 0x11,0x10,0x11,0x95,0x95,0x10,0x11,0x95,0x95,0x10,0x11,0x95,0x9D,0x9D,0x9D,0x9D,
5570 0x95,0x10,0x11,0x10,0x11,0x10,0x11,0x95,0x95,0x10,0x11,0x10,0x11,0x10,0x11,0x95,
5571 0x95,0x10,0x11,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x10,0x11,0x10,0x11,0x10,0x11,0x95,
5572 0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x11,0x10,0x11,0x95,0x9D,0x95,0x11,0x10,0x11,0x95,
5573 0x95,0x10,0x11,0x10,0x11,0x10,0x11,0x95,0x95,0x10,0x11,0x10,0x95,0x9D,0x95,0x10,
5574 0x11,0x10,0x95,0x95,0x11,0x10,0x11,0x10,0x11,0x10,0x95,0x95,0x11,0x10,0x11,0x10,
5575 0x11,0x10,0x95,0x95,0x11,0x10,0x95,0x95,0x11,0x10,0x95,0x9D,0x93,0x98,0x98,0x98,
5576 0x98,0x01,0x01,0x98,0x98,0x98,0x94,0x98,0x96,0x96,0x98,0x95,0x9F,0x9F,0x9D,0x9D,
5577 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5578 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x10,0x10,0x10,0x95,0x9D,0x9D,0x9D,0x95,
5579 0x10,0x10,0x10,0x95,0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x95,0x95,0x10,0x10,
5580 0x10,0x95,0x9D,0x95,0x10,0x10,0x10,0x95,0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
5581 0x95,0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,
5582 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5583 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5584 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5585 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5586 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x96,0x98,0x94,0x93,0x98,0x98,0x98,0x95,0x95,0x8E,
5587 0x01,0x93,0x01,0x98,0x93,0x94,0x94,0x94,0x95,0x8E,0x9F,0x9F,0x95,0x12,0x12,0x95,
5588 0x95,0x12,0x12,0x95,0x95,0x12,0x12,0x95,0x95,0x12,0x12,0x95,0x95,0x12,0x12,0x95,
5589 0x95,0x12,0x12,0x95,0x95,0x12,0x12,0x95,0x95,0x12,0x12,0x95,0x9D,0x9D,0x9D,0x9D,
5590 0x95,0x12,0x12,0x95,0x95,0x12,0x12,0x95,0x95,0x12,0x12,0x95,0x95,0x12,0x12,0x95,
5591 0x95,0x12,0x12,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x12,0x12,0x95,0x95,0x95,0x95,0x9D,
5592 0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x12,0x12,0x11,0x12,0x95,0x12,0x11,0x12,0x12,0x95,
5593 0x95,0x12,0x12,0x95,0x95,0x95,0x95,0x9D,0x95,0x12,0x12,0x12,0x11,0x95,0x12,0x12,
5594 0x11,0x12,0x95,0x95,0x11,0x12,0x95,0x95,0x11,0x12,0x95,0x95,0x11,0x12,0x95,0x95,
5595 0x11,0x12,0x95,0x95,0x11,0x12,0x95,0x95,0x11,0x12,0x95,0x9D,0x93,0x95,0x98,0x01,
5596 0x01,0x01,0x01,0x96,0x98,0x96,0x95,0x01,0x96,0x96,0x93,0x92,0x9F,0x9F,0x9D,0x9D,
5597 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
5598 0x90,0x90,0x91,0x94,0x9F,0x9D,0x9D,0x95,0x10,0x11,0x10,0x11,0x95,0x9D,0x95,0x11,
5599 0x10,0x11,0x10,0x95,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x95,0x10,0x11,
5600 0x10,0x95,0x9D,0x95,0x10,0x11,0x10,0x95,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,
5601 0x10,0x95,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,
5602 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5603 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5604 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5605 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5606 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x94,0x95,0x94,0x98,0x93,0x92,0x95,0x95,0x01,
5607 0x98,0x92,0x94,0x8E,0x92,0x92,0x93,0x93,0x93,0x91,0x9F,0x9F,0x95,0x12,0x13,0x12,
5608 0x13,0x12,0x13,0x95,0x95,0x12,0x13,0x95,0x95,0x12,0x13,0x95,0x95,0x12,0x13,0x12,
5609 0x13,0x12,0x13,0x95,0x95,0x12,0x13,0x95,0x95,0x12,0x13,0x95,0x9D,0x9D,0x9D,0x9D,
5610 0x95,0x12,0x13,0x12,0x13,0x12,0x13,0x95,0x95,0x12,0x13,0x12,0x13,0x12,0x95,0x9D,
5611 0x95,0x12,0x13,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x12,0x13,0x12,0x13,0x12,0x95,0x9D,
5612 0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x13,0x12,0x13,0x12,0x13,0x12,0x13,0x12,0x13,0x95,
5613 0x95,0x12,0x13,0x12,0x13,0x12,0x95,0x9D,0x95,0x12,0x13,0x12,0x13,0x12,0x13,0x12,
5614 0x13,0x12,0x95,0x95,0x13,0x12,0x95,0x95,0x13,0x12,0x95,0x95,0x13,0x12,0x13,0x12,
5615 0x13,0x12,0x95,0x95,0x13,0x12,0x13,0x12,0x13,0x12,0x95,0x9D,0x93,0x96,0x96,0x96,
5616 0x95,0x98,0x96,0x96,0x95,0x98,0x98,0x95,0x01,0x94,0x95,0x95,0x9F,0x9F,0x9D,0x9D,
5617 0x90,0x90,0x93,0x96,0x98,0x98,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
5618 0x99,0x99,0x99,0x9D,0x9F,0x9D,0x9D,0x95,0x12,0x12,0x12,0x11,0x12,0x95,0x12,0x11,
5619 0x12,0x12,0x12,0x95,0x12,0x12,0x12,0x95,0x95,0x95,0x12,0x11,0x12,0x95,0x12,0x11,
5620 0x12,0x95,0x9D,0x95,0x12,0x12,0x12,0x95,0x12,0x12,0x12,0x95,0x95,0x95,0x12,0x11,
5621 0x12,0x95,0x12,0x11,0x12,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5622 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5623 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5624 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5625 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5626 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x94,0x98,0x93,0x92,0x94,0x01,0x8E,0x8E,0x93,
5627 0x8D,0x92,0x8E,0x8E,0x94,0x92,0x93,0x94,0x92,0x94,0x9F,0x9F,0x95,0x13,0x13,0x13,
5628 0x13,0x13,0x13,0x95,0x95,0x13,0x13,0x95,0x95,0x13,0x13,0x95,0x95,0x13,0x13,0x13,
5629 0x13,0x13,0x13,0x95,0x95,0x13,0x13,0x95,0x95,0x13,0x13,0x95,0x9D,0x9D,0x9D,0x9D,
5630 0x95,0x13,0x13,0x14,0x13,0x13,0x13,0x95,0x95,0x13,0x13,0x14,0x13,0x13,0x13,0x95,
5631 0x95,0x13,0x13,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x13,0x13,0x14,0x13,0x13,0x95,0x9D,
5632 0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x13,0x13,0x95,0x13,0x13,0x14,0x95,0x13,0x13,0x95,
5633 0x95,0x13,0x13,0x14,0x13,0x13,0x95,0x9D,0x95,0x13,0x13,0x95,0x13,0x13,0x13,0x95,
5634 0x13,0x13,0x95,0x95,0x13,0x13,0x95,0x95,0x13,0x13,0x95,0x95,0x13,0x13,0x13,0x13,
5635 0x13,0x95,0x9D,0x9D,0x95,0x13,0x13,0x13,0x13,0x95,0x9D,0x9D,0x93,0x92,0x93,0x94,
5636 0x95,0x01,0x98,0x96,0x95,0x93,0x01,0x96,0x94,0x92,0x8E,0x95,0x9F,0x9F,0x9D,0x9D,
5637 0x90,0x93,0x96,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
5638 0x00,0x99,0x99,0x9D,0x9F,0x9D,0x9D,0x95,0x12,0x13,0x12,0x13,0x12,0x13,0x12,0x13,
5639 0x12,0x13,0x12,0x95,0x12,0x13,0x12,0x95,0x9D,0x95,0x12,0x13,0x12,0x95,0x12,0x13,
5640 0x12,0x95,0x9D,0x95,0x12,0x13,0x12,0x95,0x12,0x13,0x12,0x95,0x95,0x95,0x95,0x95,
5641 0x95,0x95,0x12,0x13,0x12,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5642 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5643 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5644 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5645 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5646 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x01,0x93,0x92,0x01,0x95,0x95,0x01,0x92,0x92,0x93,
5647 0x92,0x8E,0x96,0x91,0x94,0x93,0x98,0x93,0x93,0x92,0x9F,0x9F,0x95,0x14,0x14,0x95,
5648 0x95,0x14,0x15,0x95,0x95,0x14,0x14,0x14,0x15,0x14,0x15,0x95,0x95,0x14,0x14,0x95,
5649 0x95,0x14,0x15,0x95,0x95,0x14,0x14,0x95,0x95,0x14,0x15,0x95,0x95,0x95,0x95,0x9D,
5650 0x95,0x14,0x15,0x95,0x95,0x14,0x14,0x95,0x95,0x14,0x15,0x95,0x95,0x14,0x14,0x95,
5651 0x95,0x14,0x15,0x95,0x95,0x95,0x95,0x9D,0x95,0x14,0x15,0x95,0x95,0x95,0x95,0x9D,
5652 0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x14,0x14,0x95,0x95,0x15,0x95,0x95,0x14,0x14,0x95,
5653 0x95,0x14,0x15,0x95,0x95,0x95,0x95,0x9D,0x95,0x14,0x15,0x95,0x95,0x14,0x95,0x95,
5654 0x15,0x14,0x95,0x95,0x15,0x14,0x95,0x95,0x15,0x14,0x95,0x95,0x15,0x14,0x95,0x95,
5655 0x15,0x14,0x95,0x9D,0x9D,0x95,0x14,0x14,0x95,0x9D,0x9D,0x9D,0x93,0x92,0x95,0x93,
5656 0x92,0x92,0x92,0x8E,0x96,0x8E,0x94,0x8E,0x93,0x96,0x98,0x92,0x9F,0x9F,0x9D,0x9D,
5657 0x90,0x96,0x98,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
5658 0x1F,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x95,0x13,0x13,0x13,0x95,0x13,0x13,0x14,0x95,
5659 0x13,0x13,0x13,0x95,0x13,0x13,0x14,0x95,0x9D,0x95,0x13,0x13,0x13,0x95,0x14,0x13,
5660 0x13,0x95,0x9D,0x95,0x13,0x13,0x14,0x95,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x13,
5661 0x95,0x95,0x13,0x13,0x13,0x13,0x14,0x13,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5662 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5663 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5664 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5665 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5666 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x94,0x98,0x93,0x94,0x01,0x92,0x8E,0x92,0x92,0x96,
5667 0x92,0x95,0x91,0x95,0x92,0x94,0x93,0x94,0x94,0x01,0x9F,0x9F,0x95,0x15,0x15,0x95,
5668 0x95,0x15,0x15,0x95,0x9D,0x95,0x15,0x15,0x15,0x15,0x95,0x9D,0x95,0x15,0x15,0x95,
5669 0x95,0x15,0x15,0x95,0x95,0x15,0x15,0x95,0x95,0x15,0x15,0x15,0x15,0x15,0x15,0x95,
5670 0x95,0x15,0x15,0x95,0x95,0x15,0x15,0x95,0x95,0x15,0x15,0x15,0x15,0x15,0x15,0x95,
5671 0x95,0x15,0x15,0x15,0x15,0x15,0x15,0x95,0x95,0x15,0x15,0x15,0x15,0x15,0x15,0x95,
5672 0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x15,0x15,0x95,0x9D,0x95,0x9D,0x95,0x15,0x15,0x95,
5673 0x95,0x15,0x15,0x15,0x15,0x15,0x15,0x95,0x95,0x15,0x15,0x95,0x9D,0x95,0x9D,0x95,
5674 0x15,0x15,0x95,0x95,0x15,0x15,0x15,0x15,0x15,0x15,0x95,0x95,0x15,0x15,0x95,0x95,
5675 0x15,0x15,0x95,0x9D,0x9D,0x95,0x15,0x15,0x95,0x9D,0x9D,0x9D,0x93,0x94,0x96,0x98,
5676 0x98,0x01,0x95,0x8E,0x94,0x92,0x94,0x8E,0x93,0x95,0x98,0x95,0x9F,0x9F,0x9D,0x9D,
5677 0x90,0x98,0x98,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
5678 0x1F,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x95,0x14,0x14,0x14,0x95,0x95,0x15,0x95,0x95,
5679 0x14,0x14,0x14,0x95,0x14,0x15,0x14,0x95,0x9D,0x95,0x14,0x15,0x14,0x95,0x14,0x15,
5680 0x14,0x95,0x9D,0x95,0x14,0x15,0x14,0x95,0x95,0x14,0x14,0x15,0x14,0x15,0x14,0x15,
5681 0x14,0x95,0x14,0x15,0x14,0x15,0x14,0x15,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5682 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5683 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5684 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5685 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5686 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x93,0x01,0x95,0x01,0x8E,0x96,0x94,0x93,0x01,0x01,
5687 0x95,0x93,0x92,0x95,0x92,0x95,0x93,0x95,0x95,0x98,0x9F,0x9F,0x95,0x16,0x16,0x95,
5688 0x95,0x16,0x16,0x95,0x9D,0x9D,0x95,0x15,0x16,0x95,0x9D,0x9D,0x95,0x16,0x16,0x95,
5689 0x95,0x16,0x16,0x95,0x95,0x16,0x16,0x95,0x95,0x16,0x16,0x15,0x16,0x16,0x16,0x95,
5690 0x95,0x16,0x16,0x95,0x95,0x16,0x16,0x95,0x95,0x16,0x16,0x15,0x16,0x16,0x95,0x9D,
5691 0x95,0x16,0x16,0x15,0x16,0x16,0x16,0x95,0x95,0x16,0x16,0x15,0x16,0x16,0x16,0x95,
5692 0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x16,0x15,0x95,0x9D,0x9D,0x9D,0x95,0x16,0x16,0x95,
5693 0x95,0x16,0x16,0x15,0x16,0x16,0x16,0x95,0x95,0x16,0x16,0x95,0x9D,0x9D,0x9D,0x95,
5694 0x16,0x16,0x95,0x9D,0x95,0x16,0x16,0x15,0x16,0x95,0x9D,0x95,0x16,0x16,0x95,0x95,
5695 0x16,0x16,0x95,0x9D,0x9D,0x95,0x16,0x15,0x95,0x9D,0x9D,0x9D,0x93,0x92,0x95,0x94,
5696 0x96,0x01,0x94,0x91,0x94,0x95,0x92,0x92,0x95,0x96,0x93,0x93,0x9F,0x9F,0x9D,0x9D,
5697 0x90,0x98,0x99,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
5698 0x1F,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x95,0x15,0x15,0x15,0x95,0x9D,0x95,0x9D,0x95,
5699 0x15,0x15,0x15,0x95,0x15,0x15,0x15,0x95,0x9D,0x95,0x15,0x15,0x15,0x95,0x15,0x15,
5700 0x15,0x95,0x9D,0x95,0x15,0x15,0x15,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x15,0x15,
5701 0x15,0x95,0x15,0x15,0x15,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5702 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5703 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5704 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5705 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5706 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x94,0x8E,0x93,0x95,0x93,0x96,0x94,0x98,0x98,0x01,
5707 0x92,0x95,0x94,0x96,0x96,0x98,0x01,0x98,0x01,0x98,0x9F,0x9F,0x9D,0x95,0x95,0x9D,
5708 0x9D,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x9D,
5709 0x9D,0x95,0x95,0x9D,0x9D,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,
5710 0x9D,0x95,0x95,0x9D,0x9D,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,
5711 0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,
5712 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x9D,
5713 0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,
5714 0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x9D,0x9D,
5715 0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x93,0x95,0x94,0x96,
5716 0x93,0x95,0x92,0x95,0x93,0x92,0x96,0x98,0x93,0x8E,0x95,0x92,0x9F,0x9F,0x9D,0x9D,
5717 0x91,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
5718 0x99,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x95,0x16,0x16,0x15,0x95,0x9D,0x9D,0x9D,0x95,
5719 0x16,0x16,0x15,0x95,0x16,0x16,0x15,0x95,0x95,0x95,0x15,0x16,0x16,0x95,0x15,0x16,
5720 0x16,0x95,0x95,0x95,0x16,0x16,0x15,0x95,0x16,0x16,0x15,0x95,0x95,0x95,0x15,0x16,
5721 0x16,0x95,0x15,0x16,0x16,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5722 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5723 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5724 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5725 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5726 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x8E,0x8E,0x98,0x96,0x96,0x95,0x98,0x98,0x01,0x94,
5727 0x95,0x96,0x96,0x95,0x01,0x01,0x01,0x95,0x95,0x96,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
5728 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5729 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5730 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5731 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5732 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5733 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5734 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5735 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x93,0x92,0x95,0x93,
5736 0x96,0x95,0x98,0x95,0x98,0x96,0x98,0x98,0x94,0x95,0x95,0x92,0x9F,0x9F,0x9D,0x9D,
5737 0x94,0x9B,0x9D,0x9D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5738 0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9D,0x95,0x17,0x17,0x17,0x95,0x9D,0x9D,0x9D,0x95,
5739 0x17,0x17,0x17,0x95,0x17,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x95,0x17,0x17,
5740 0x17,0x17,0x17,0x17,0x17,0x16,0x17,0x95,0x17,0x17,0x17,0x17,0x17,0x16,0x17,0x17,
5741 0x17,0x95,0x17,0x17,0x17,0x16,0x17,0x17,0x17,0x17,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,
5742 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5743 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5744 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5745 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5746 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x94,0x94,0x98,0x97,0x95,0x98,0x01,0x98,0x94,0x96,
5747 0x98,0x98,0x96,0x95,0x95,0x98,0x96,0x95,0x95,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
5748 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5749 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5750 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5751 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5752 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5753 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5754 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5755 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x93,0x96,0x92,0x92,
5756 0x93,0x95,0x96,0x95,0x01,0x95,0x98,0x94,0x92,0x96,0x93,0x93,0x9F,0x9F,0x9D,0x9D,
5757 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5758 0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9D,0x95,0x17,0x18,0x17,0x95,0x9D,0x9D,0x9D,0x95,
5759 0x17,0x18,0x17,0x95,0x95,0x18,0x17,0x18,0x17,0x18,0x17,0x18,0x95,0x9D,0x95,0x18,
5760 0x17,0x18,0x17,0x18,0x17,0x18,0x95,0x9D,0x95,0x18,0x17,0x18,0x17,0x18,0x17,0x18,
5761 0x95,0x95,0x17,0x18,0x17,0x18,0x17,0x18,0x17,0x18,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,
5762 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5763 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5764 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5765 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5766 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x01,0x99,0x98,0x99,0x98,0x98,0x95,0x95,0x96,
5767 0x98,0x98,0x01,0x95,0x98,0x01,0x98,0x94,0x96,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
5768 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5769 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5770 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5771 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5772 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5773 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5774 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5775 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x93,0x94,0x96,0x94,
5776 0x96,0x98,0x01,0x92,0x96,0x95,0x95,0x92,0x94,0x95,0x93,0x92,0x9F,0x9F,0x9D,0x9D,
5777 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5778 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,
5779 0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,
5780 0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,
5781 0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5782 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5783 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5784 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5785 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5786 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x98,0x98,0x98,0x95,0x98,0x99,0x99,0x98,0x95,
5787 0x98,0x95,0x96,0x95,0x95,0x96,0x96,0x96,0x98,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
5788 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,
5789 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
5790 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x9D,0x9D,
5791 0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
5792 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,
5793 0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,
5794 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
5795 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x93,0x91,0x94,0x95,
5796 0x01,0x94,0x96,0x95,0x01,0x91,0x94,0x8E,0x94,0x92,0x95,0x95,0x9F,0x9F,0x9D,0x9D,
5797 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5798 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5799 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5800 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5801 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5802 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5803 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5804 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5805 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5806 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x95,0x98,0x95,0x95,0x96,0x95,0x98,0x99,0x95,
5807 0x9B,0x01,0x01,0x95,0x95,0x94,0x93,0x96,0x01,0x94,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
5808 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x9D,
5809 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
5810 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,
5811 0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
5812 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,
5813 0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,
5814 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
5815 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x93,0x94,0x94,0x95,
5816 0x95,0x92,0x8E,0x8E,0x8E,0x92,0x92,0x96,0x96,0x94,0x93,0x93,0x9F,0x9F,0x9D,0x9D,
5817 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5818 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5819 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5820 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5821 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5822 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5823 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5824 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5825 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5826 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x96,0x01,0x95,0x98,0x94,0x95,0x01,0x98,0x94,0x9B,
5827 0x98,0x97,0x94,0x95,0x01,0x95,0x95,0x01,0x95,0x92,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
5828 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,
5829 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
5830 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x98,0x17,0x17,0x17,0x98,0x9D,
5831 0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
5832 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
5833 0x9D,0x9D,0x98,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,
5834 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
5835 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x93,0x94,0x92,0x93,
5836 0x92,0x92,0x01,0x94,0x95,0x96,0x95,0x94,0x01,0x95,0x95,0x94,0x99,0x95,0x95,0x95,
5837 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x94,0x94,0x94,0x94,0x94,
5838 0x94,0x94,0x94,0x94,0x94,0x94,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,
5839 0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x92,0x92,0x92,0x92,
5840 0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,
5841 0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,
5842 0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,
5843 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
5844 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
5845 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
5846 0x90,0x90,0x90,0x90,0x90,0x90,0x95,0x95,0x97,0x01,0x98,0x98,0x98,0x98,0x01,0x98,
5847 0x95,0x01,0x01,0x95,0x95,0x93,0x96,0x93,0x01,0x94,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
5848 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x98,0x9D,
5849 0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
5850 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,
5851 0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
5852 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
5853 0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,
5854 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
5855 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x91,0x98,0x94,0x95,
5856 0x95,0x98,0x94,0x94,0x94,0x95,0x92,0x96,0x95,0x94,0x96,0x93,0x92,0x95,0x01,0x94,
5857 0x94,0x98,0x93,0x98,0x93,0x93,0x01,0x96,0x95,0x95,0x95,0x98,0x94,0x96,0x91,0x95,
5858 0x94,0x92,0x96,0x94,0x94,0x95,0x01,0x01,0x96,0x95,0x98,0x01,0x95,0x98,0x01,0x96,
5859 0x98,0x99,0x99,0x96,0x99,0x01,0x98,0x95,0x01,0x01,0x98,0x95,0x98,0x98,0x98,0x95,
5860 0x98,0x98,0x94,0x98,0x01,0x01,0x96,0x94,0x95,0x95,0x96,0x96,0x98,0x98,0x98,0x95,
5861 0x96,0x98,0x96,0x95,0x96,0x95,0x98,0x96,0x98,0x99,0x96,0x95,0x98,0x98,0x98,0x96,
5862 0x95,0x99,0x01,0x96,0x01,0x94,0x01,0x95,0x95,0x98,0x01,0x95,0x01,0x96,0x98,0x98,
5863 0x95,0x98,0x96,0x01,0x99,0x98,0x96,0x95,0x98,0x98,0x95,0x98,0x9A,0x95,0x98,0x98,
5864 0x96,0x01,0x93,0x8E,0x94,0x92,0x94,0x92,0x95,0x92,0x95,0x95,0x93,0x92,0x92,0x92,
5865 0x96,0x95,0x98,0x96,0x98,0x01,0x01,0x98,0x99,0x98,0x95,0x95,0x98,0x98,0x98,0x98,
5866 0x96,0x99,0x93,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,
5867 0x93,0x98,0x98,0x95,0x93,0x95,0x93,0x93,0x93,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
5868 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x17,0x17,0x98,
5869 0x98,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
5870 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,
5871 0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
5872 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
5873 0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,
5874 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
5875 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x91,0x93,0x95,0x98,
5876 0x93,0x96,0x94,0x96,0x95,0x98,0x95,0x95,0x96,0x92,0x93,0x96,0x95,0x93,0x95,0x95,
5877 0x94,0x95,0x93,0x95,0x96,0x94,0x96,0x94,0x98,0x95,0x94,0x01,0x92,0x98,0x93,0x98,
5878 0x01,0x94,0x01,0x98,0x98,0x98,0x96,0x98,0x96,0x98,0x94,0x98,0x98,0x99,0x98,0x98,
5879 0x98,0x98,0x98,0x98,0x98,0x98,0x01,0x95,0x96,0x98,0x01,0x98,0x96,0x98,0x98,0x01,
5880 0x95,0x96,0x95,0x96,0x95,0x96,0x94,0x98,0x98,0x96,0x01,0x98,0x94,0x95,0x95,0x98,
5881 0x01,0x98,0x98,0x01,0x98,0x96,0x98,0x95,0x96,0x98,0x98,0x98,0x98,0x01,0x98,0x98,
5882 0x95,0x96,0x01,0x94,0x95,0x01,0x92,0x92,0x8E,0x98,0x96,0x96,0x98,0x95,0x95,0x01,
5883 0x95,0x01,0x93,0x98,0x92,0x92,0x97,0x98,0x95,0x95,0x98,0x01,0x01,0x96,0x98,0x98,
5884 0x98,0x95,0x95,0x95,0x94,0x94,0x95,0x93,0x94,0x93,0x95,0x95,0x93,0x94,0x91,0x01,
5885 0x96,0x95,0x98,0x95,0x96,0x98,0x01,0x01,0x96,0x99,0x01,0x98,0x99,0x96,0x99,0x98,
5886 0x95,0x99,0x98,0x98,0x98,0x96,0x9A,0x9A,0x98,0x98,0x98,0x98,0x98,0x98,0x99,0x9D,
5887 0x92,0x95,0x92,0x92,0x95,0x96,0x95,0x01,0x95,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
5888 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,
5889 0x17,0x17,0x98,0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
5890 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,
5891 0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
5892 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
5893 0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,
5894 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
5895 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x91,0x96,0x94,0x95,
5896 0x94,0x93,0x96,0x94,0x94,0x95,0x96,0x92,0x01,0x92,0x96,0x94,0x98,0x94,0x01,0x94,
5897 0x95,0x98,0x95,0x96,0x96,0x95,0x98,0x01,0x95,0x94,0x01,0x95,0x95,0x93,0x95,0x98,
5898 0x01,0x94,0x01,0x98,0x94,0x98,0x99,0x96,0x98,0x01,0x99,0x95,0x9A,0x96,0x98,0x98,
5899 0x98,0x01,0x94,0x98,0x98,0x98,0x93,0x95,0x98,0x94,0x96,0x96,0x95,0x98,0x92,0x96,
5900 0x95,0x98,0x01,0x95,0x01,0x98,0x98,0x98,0x96,0x98,0x96,0x98,0x92,0x94,0x96,0x98,
5901 0x96,0x96,0x98,0x96,0x98,0x96,0x96,0x95,0x01,0x95,0x94,0x96,0x98,0x96,0x95,0x98,
5902 0x94,0x93,0x8E,0x94,0x8E,0x8E,0x93,0x93,0x92,0x98,0x95,0x98,0x01,0x01,0x95,0x98,
5903 0x96,0x98,0x94,0x96,0x95,0x98,0x01,0x98,0x98,0x01,0x97,0x98,0x98,0x95,0x98,0x98,
5904 0x01,0x95,0x95,0x95,0x01,0x95,0x94,0x8E,0x92,0x93,0x92,0x95,0x93,0x95,0x98,0x98,
5905 0x98,0x95,0x98,0x95,0x98,0x98,0x01,0x98,0x98,0x98,0x95,0x98,0x98,0x96,0x98,0x96,
5906 0x98,0x95,0x95,0x98,0x98,0x98,0x94,0x95,0x01,0x98,0x98,0x9A,0x98,0x98,0x98,0x98,
5907 0x01,0x93,0x93,0x93,0x95,0x01,0x94,0x93,0x94,0x91,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
5908 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x98,
5909 0x17,0x17,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,
5910 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,
5911 0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
5912 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,
5913 0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,
5914 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,
5915 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x91,0x93,0x92,0x93,
5916 0x01,0x95,0x96,0x98,0x94,0x95,0x93,0x96,0x98,0x98,0x01,0x95,0x98,0x98,0x95,0x95,
5917 0x98,0x95,0x94,0x93,0x98,0x01,0x93,0x93,0x96,0x92,0x95,0x95,0x96,0x95,0x96,0x98,
5918 0x98,0x95,0x96,0x98,0x98,0x98,0x98,0x98,0x96,0x01,0x98,0x98,0x98,0x95,0x95,0x94,
5919 0x96,0x98,0x01,0x95,0x98,0x01,0x96,0x98,0x01,0x96,0x98,0x94,0x98,0x98,0x96,0x95,
5920 0x01,0x98,0x95,0x01,0x98,0x01,0x98,0x98,0x98,0x01,0x98,0x98,0x94,0x96,0x96,0x94,
5921 0x98,0x01,0x96,0x95,0x96,0x95,0x98,0x95,0x96,0x94,0x95,0x96,0x01,0x96,0x95,0x96,
5922 0x98,0x8E,0x8E,0x92,0x95,0x93,0x94,0x98,0x93,0x95,0x01,0x95,0x98,0x96,0x95,0x95,
5923 0x01,0x94,0x96,0x94,0x96,0x98,0x95,0x95,0x96,0x01,0x96,0x98,0x96,0x95,0x94,0x95,
5924 0x95,0x92,0x8E,0x8E,0x92,0x94,0x98,0x98,0x96,0x96,0x01,0x95,0x94,0x98,0x99,0x98,
5925 0x98,0x98,0x96,0x98,0x01,0x99,0x98,0x98,0x98,0x98,0x98,0x01,0x98,0x9A,0x9A,0x98,
5926 0x96,0x95,0x94,0x98,0x9A,0x96,0x98,0x95,0x9A,0x9A,0x98,0x98,0x98,0x98,0x94,0x92,
5927 0x91,0x94,0x92,0x93,0x95,0x93,0x92,0x95,0x93,0x92,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
5928 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,
5929 0x98,0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,
5930 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,
5931 0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
5932 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,
5933 0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,
5934 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,
5935 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x91,0x94,0x96,0x94,
5936 0x95,0x95,0x95,0x98,0x93,0x98,0x96,0x96,0x93,0x93,0x95,0x98,0x96,0x94,0x96,0x96,
5937 0x93,0x96,0x93,0x95,0x94,0x91,0x92,0x92,0x93,0x98,0x92,0x96,0x01,0x98,0x94,0x98,
5938 0x01,0x95,0x01,0x95,0x95,0x01,0x96,0x01,0x98,0x01,0x98,0x96,0x97,0x98,0x95,0x94,
5939 0x95,0x96,0x95,0x96,0x98,0x95,0x92,0x95,0x98,0x95,0x96,0x95,0x94,0x93,0x95,0x95,
5940 0x95,0x95,0x96,0x96,0x98,0x95,0x96,0x01,0x96,0x93,0x98,0x95,0x98,0x01,0x95,0x96,
5941 0x96,0x96,0x94,0x96,0x96,0x96,0x96,0x95,0x98,0x92,0x96,0x96,0x01,0x98,0x01,0x96,
5942 0x94,0x95,0x8E,0x98,0x95,0x95,0x95,0x94,0x95,0x98,0x98,0x95,0x95,0x01,0x98,0x94,
5943 0x96,0x96,0x98,0x96,0x95,0x98,0x01,0x95,0x94,0x95,0x96,0x94,0x98,0x94,0x95,0x8E,
5944 0x8E,0x8E,0x94,0x95,0x01,0x95,0x96,0x95,0x95,0x94,0x98,0x01,0x99,0x98,0x98,0x98,
5945 0x9A,0x99,0x9A,0x9A,0x98,0x98,0x94,0x98,0x98,0x01,0x95,0x9A,0x95,0x98,0x9A,0x01,
5946 0x95,0x96,0x01,0x9A,0x98,0x98,0x9A,0x96,0x98,0x98,0x99,0x96,0x96,0x98,0x01,0x95,
5947 0x94,0x93,0x8E,0x8E,0x94,0x92,0x92,0x96,0x94,0x92,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
5948 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,
5949 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
5950 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5951 0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
5952 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,
5953 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,
5954 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
5955 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x91,0x94,0x95,0x01,
5956 0x01,0x95,0x98,0x95,0x95,0x01,0x95,0x96,0x01,0x91,0x93,0x98,0x9F,0x9F,0x9F,0x9F,
5957 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5958 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5959 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5960 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5961 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5962 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5963 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5964 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5965 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5966 0x9F,0x9F,0x9F,0x9F,0x9F,0x97,0x94,0x98,0x01,0x98,0x96,0x95,0x93,0x98,0x96,0x94,
5967 0x94,0x8E,0x8E,0x93,0x93,0x92,0x8E,0x94,0x92,0x8E,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
5968 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,
5969 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
5970 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5971 0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
5972 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,
5973 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,
5974 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
5975 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x91,0x92,0x95,0x96,
5976 0x93,0x92,0x98,0x95,0x98,0x95,0x95,0x95,0x94,0x92,0x95,0x96,0x9F,0x9F,0x9F,0x9F,
5977 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5978 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5979 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5980 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5981 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5982 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5983 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5984 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5985 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
5986 0x9F,0x9F,0x9F,0x9F,0x9F,0x94,0x95,0x01,0x95,0x95,0x95,0x96,0x96,0x96,0x98,0x98,
5987 0x96,0x8E,0x96,0x8E,0x95,0x92,0x8E,0x94,0x8E,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
5988 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,
5989 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
5990 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5991 0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
5992 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
5993 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,
5994 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
5995 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x91,0x98,0x91,0x95,
5996 0x95,0x93,0x92,0x94,0x92,0x92,0x98,0x01,0x93,0x95,0x98,0x94,0x9F,0x9F,0x9D,0x9D,
5997 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5998 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
5999 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6000 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6001 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6002 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6003 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6004 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6005 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6006 0x9D,0x9D,0x9D,0x9D,0x9D,0x91,0x94,0x96,0x98,0x98,0x01,0x01,0x01,0x98,0x01,0x93,
6007 0x8D,0x92,0x92,0x93,0x96,0x93,0x8E,0x92,0x95,0x92,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6008 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,
6009 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
6010 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6011 0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
6012 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
6013 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,
6014 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6015 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x91,0x94,0x94,0x01,
6016 0x93,0x94,0x94,0x98,0x92,0x95,0x93,0x95,0x95,0x01,0x98,0x95,0x9F,0x9F,0x9D,0x9D,
6017 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6018 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,
6019 0x95,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x9D,
6020 0x9D,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,
6021 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x95,
6022 0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,
6023 0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6024 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6025 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6026 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x96,0x94,0x92,0x94,0x94,0x98,0x01,0x95,0x95,
6027 0x95,0x8E,0x93,0x94,0x8E,0x95,0x94,0x98,0x94,0x93,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6028 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x98,
6029 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6030 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6031 0x9D,0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
6032 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
6033 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x17,0x98,
6034 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6035 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x91,0x93,0x95,0x94,
6036 0x98,0x94,0x93,0x93,0x95,0x94,0x96,0x94,0x95,0x94,0x95,0x95,0x9F,0x9F,0x9D,0x9D,
6037 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6038 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x10,0x10,
6039 0x10,0x95,0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x95,0x95,0x10,0x10,0x10,0x95,
6040 0x9D,0x95,0x10,0x10,0x10,0x95,0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x95,0x95,
6041 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x95,0x10,0x10,0x10,0x95,0x95,0x10,
6042 0x10,0x10,0x10,0x10,0x10,0x10,0x95,0x95,0x10,0x10,0x10,0x95,0x9D,0x95,0x10,0x10,
6043 0x10,0x10,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6044 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6045 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6046 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x01,0x98,0x98,0x92,0x01,0x98,0x95,0x01,0x01,0x94,
6047 0x01,0x94,0x92,0x95,0x91,0x92,0x93,0x92,0x96,0x96,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6048 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x98,0x98,0x98,
6049 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6050 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6051 0x9D,0x9D,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
6052 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
6053 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x17,0x17,0x98,
6054 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6055 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x91,0x95,0x93,0x93,
6056 0x95,0x95,0x95,0x95,0x95,0x93,0x96,0x98,0x95,0x96,0x95,0x96,0x9F,0x9F,0x9D,0x9D,
6057 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
6058 0x90,0x90,0x91,0x94,0x9F,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x10,0x11,
6059 0x10,0x95,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x95,0x10,0x11,0x10,0x95,
6060 0x9D,0x95,0x10,0x11,0x10,0x95,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x95,
6061 0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x95,0x10,0x11,0x10,0x95,0x10,0x11,
6062 0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x95,0x10,0x11,0x10,0x95,0x95,0x11,0x10,0x11,
6063 0x10,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6064 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6065 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6066 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x96,0x96,0x94,0x94,0x01,0x98,0x01,0x96,0x95,0x98,
6067 0x98,0x95,0x96,0x95,0x93,0x96,0x95,0x94,0x95,0x01,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6068 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x17,0x17,0x98,
6069 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,
6070 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6071 0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
6072 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,
6073 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,
6074 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,
6075 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x91,0x91,0x92,0x93,
6076 0x93,0x96,0x93,0x98,0x94,0x01,0x98,0x98,0x98,0x93,0x98,0x97,0x9F,0x9F,0x9D,0x9D,
6077 0x90,0x90,0x93,0x96,0x98,0x98,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
6078 0x99,0x99,0x99,0x9D,0x9F,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x12,0x11,
6079 0x12,0x95,0x12,0x11,0x12,0x95,0x95,0x95,0x12,0x12,0x12,0x95,0x12,0x12,0x12,0x95,
6080 0x9D,0x95,0x12,0x11,0x12,0x95,0x12,0x11,0x12,0x95,0x95,0x95,0x12,0x12,0x12,0x95,
6081 0x95,0x95,0x95,0x11,0x12,0x12,0x95,0x95,0x95,0x95,0x12,0x11,0x12,0x95,0x12,0x11,
6082 0x12,0x95,0x95,0x95,0x12,0x12,0x12,0x95,0x12,0x12,0x12,0x95,0x12,0x12,0x12,0x11,
6083 0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6084 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6085 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6086 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x93,0x98,0x98,0x95,0x96,0x96,0x96,0x01,0x94,0x8E,
6087 0x93,0x95,0x96,0x92,0x95,0x94,0x95,0x94,0x01,0x96,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6088 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x98,0x98,0x9D,
6089 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,
6090 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6091 0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
6092 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,
6093 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,
6094 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,
6095 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x91,0x94,0x95,0x94,
6096 0x96,0x01,0x95,0x96,0x96,0x01,0x98,0x93,0x01,0x01,0x99,0x98,0x9F,0x9F,0x9D,0x9D,
6097 0x90,0x93,0x96,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
6098 0x00,0x99,0x99,0x9D,0x9F,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x12,0x13,
6099 0x12,0x95,0x12,0x13,0x12,0x95,0x9D,0x95,0x12,0x13,0x12,0x95,0x12,0x13,0x12,0x95,
6100 0x95,0x95,0x12,0x13,0x12,0x95,0x12,0x13,0x12,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,
6101 0x9D,0x9D,0x95,0x13,0x12,0x13,0x95,0x9D,0x9D,0x95,0x12,0x13,0x12,0x95,0x12,0x13,
6102 0x12,0x95,0x9D,0x9D,0x95,0x95,0x95,0x95,0x12,0x13,0x12,0x13,0x12,0x13,0x12,0x95,
6103 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6104 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6105 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6106 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x96,0x96,0x98,0x95,0x95,0x98,0x98,0x98,0x94,0x01,
6107 0x93,0x96,0x93,0x93,0x95,0x95,0x01,0x95,0x95,0x96,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6108 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,
6109 0x98,0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
6110 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6111 0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
6112 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,
6113 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,
6114 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
6115 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x91,0x98,0x98,0x95,
6116 0x96,0x95,0x95,0x96,0x96,0x95,0x01,0x96,0x98,0x98,0x98,0x96,0x9F,0x9F,0x9D,0x9D,
6117 0x90,0x96,0x98,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
6118 0x1F,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x14,0x13,
6119 0x13,0x95,0x13,0x13,0x13,0x95,0x9D,0x95,0x13,0x13,0x13,0x95,0x95,0x13,0x14,0x13,
6120 0x13,0x13,0x13,0x13,0x95,0x95,0x14,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x95,0x9D,
6121 0x9D,0x9D,0x95,0x13,0x13,0x13,0x95,0x9D,0x9D,0x95,0x13,0x13,0x13,0x95,0x14,0x13,
6122 0x13,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x13,0x13,0x13,0x13,0x13,0x13,0x95,0x9D,
6123 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6124 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6125 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6126 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x94,0x94,0x95,0x94,0x98,0x93,0x95,0x92,0x01,0x95,
6127 0x96,0x95,0x95,0x95,0x98,0x95,0x94,0x93,0x95,0x93,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6128 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x98,
6129 0x17,0x17,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
6130 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6131 0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
6132 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,
6133 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,
6134 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
6135 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x91,0x96,0x95,0x93,
6136 0x98,0x93,0x96,0x99,0x01,0x98,0x99,0x98,0x98,0x96,0x98,0x98,0x9F,0x9F,0x9D,0x9D,
6137 0x90,0x98,0x98,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
6138 0x1F,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x14,0x15,
6139 0x14,0x95,0x14,0x15,0x14,0x95,0x9D,0x95,0x14,0x14,0x14,0x95,0x9D,0x95,0x14,0x15,
6140 0x14,0x14,0x14,0x95,0x9D,0x9D,0x95,0x15,0x14,0x14,0x14,0x15,0x14,0x15,0x14,0x95,
6141 0x9D,0x9D,0x95,0x15,0x14,0x15,0x95,0x9D,0x9D,0x95,0x14,0x15,0x14,0x95,0x14,0x15,
6142 0x14,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x14,0x14,0x14,0x15,0x14,0x15,0x95,0x9D,
6143 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6144 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6145 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6146 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x01,0x01,0x95,0x96,0x96,0x96,0x98,0x95,0x98,
6147 0x95,0x01,0x94,0x93,0x94,0x93,0x94,0x92,0x95,0x94,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6148 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,
6149 0x17,0x17,0x98,0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
6150 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6151 0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
6152 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
6153 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,
6154 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6155 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x91,0x96,0x98,0x95,
6156 0x98,0x98,0x95,0x01,0x95,0x99,0x96,0x98,0x98,0x98,0x95,0x93,0x9F,0x9F,0x9D,0x9D,
6157 0x90,0x98,0x99,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
6158 0x1F,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x95,0x15,0x15,
6159 0x15,0x95,0x15,0x15,0x15,0x95,0x9D,0x95,0x15,0x15,0x15,0x95,0x9D,0x9D,0x95,0x15,
6160 0x15,0x15,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x15,0x15,0x15,0x95,
6161 0x9D,0x9D,0x95,0x15,0x15,0x15,0x95,0x9D,0x9D,0x95,0x15,0x15,0x15,0x95,0x15,0x15,
6162 0x15,0x95,0x9D,0x9D,0x95,0x95,0x95,0x95,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x95,
6163 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6164 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6165 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6166 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x96,0x95,0x98,0x96,0x98,0x98,0x95,0x98,0x98,0x98,
6167 0x93,0x93,0x95,0x96,0x98,0x92,0x95,0x01,0x98,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6168 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,
6169 0x17,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
6170 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6171 0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
6172 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
6173 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x98,
6174 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6175 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x91,0x98,0x99,0x99,
6176 0x95,0x98,0x01,0x01,0x98,0x98,0x98,0x98,0x98,0x95,0x98,0x95,0x9F,0x9F,0x9D,0x9D,
6177 0x91,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
6178 0x99,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x95,0x16,0x16,0x15,0x95,0x95,0x95,0x15,0x16,
6179 0x16,0x95,0x15,0x16,0x16,0x95,0x95,0x95,0x16,0x16,0x15,0x95,0x9D,0x9D,0x95,0x16,
6180 0x16,0x16,0x95,0x9D,0x9D,0x95,0x15,0x16,0x16,0x95,0x95,0x95,0x16,0x16,0x15,0x95,
6181 0x9D,0x9D,0x95,0x16,0x16,0x16,0x95,0x9D,0x9D,0x95,0x15,0x16,0x16,0x95,0x15,0x16,
6182 0x16,0x95,0x95,0x95,0x16,0x16,0x15,0x95,0x16,0x16,0x15,0x95,0x16,0x16,0x15,0x16,
6183 0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6184 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6185 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6186 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x98,0x96,0x01,0x9A,0x01,0x94,0x98,0x99,0x01,
6187 0x95,0x95,0x95,0x95,0x01,0x01,0x94,0x98,0x98,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6188 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,
6189 0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6190 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6191 0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
6192 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
6193 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,
6194 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6195 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x91,0x99,0x98,0x98,
6196 0x95,0x98,0x98,0x98,0x99,0x98,0x98,0x97,0x95,0x01,0x98,0x96,0x9F,0x9F,0x9D,0x9D,
6197 0x94,0x9B,0x9D,0x9D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6198 0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9D,0x95,0x17,0x17,0x17,0x17,0x17,0x16,0x17,0x17,
6199 0x17,0x95,0x17,0x17,0x17,0x16,0x17,0x17,0x17,0x17,0x17,0x95,0x9D,0x9D,0x95,0x17,
6200 0x17,0x17,0x95,0x9D,0x9D,0x95,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x17,0x95,
6201 0x9D,0x9D,0x95,0x17,0x17,0x16,0x95,0x9D,0x9D,0x95,0x17,0x17,0x17,0x95,0x17,0x17,
6202 0x17,0x17,0x17,0x17,0x17,0x16,0x17,0x95,0x17,0x17,0x17,0x95,0x95,0x16,0x17,0x17,
6203 0x17,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6204 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6205 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6206 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x99,0x01,0x98,0x99,0x98,0x01,0x9A,0x9A,0x9A,0x98,
6207 0x96,0x98,0x95,0x95,0x01,0x94,0x98,0x01,0x96,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6208 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x98,0x98,0x9D,
6209 0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6210 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6211 0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
6212 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
6213 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,
6214 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6215 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x91,0x98,0x98,0x99,
6216 0x98,0x95,0x99,0x98,0x9A,0x95,0x94,0x98,0x95,0x94,0x96,0x01,0x9F,0x9F,0x9D,0x9D,
6217 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6218 0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9D,0x9D,0x95,0x18,0x17,0x18,0x17,0x18,0x17,0x18,
6219 0x95,0x9D,0x95,0x18,0x17,0x18,0x17,0x18,0x17,0x18,0x95,0x9D,0x9D,0x9D,0x95,0x18,
6220 0x17,0x18,0x95,0x9D,0x9D,0x9D,0x95,0x18,0x17,0x18,0x17,0x18,0x17,0x18,0x95,0x9D,
6221 0x9D,0x9D,0x95,0x18,0x17,0x18,0x95,0x9D,0x9D,0x95,0x17,0x18,0x17,0x95,0x95,0x18,
6222 0x17,0x18,0x17,0x18,0x17,0x18,0x95,0x95,0x17,0x18,0x17,0x95,0x9D,0x95,0x17,0x18,
6223 0x17,0x18,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6224 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6225 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6226 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x98,0x98,0x9A,0x95,0x98,0x01,0x95,0x96,0x98,
6227 0x98,0x95,0x95,0x95,0x96,0x95,0x94,0x95,0x98,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6228 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x17,0x17,0x98,
6229 0x17,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,
6230 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6231 0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
6232 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,
6233 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,
6234 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,
6235 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x98,0x96,
6236 0x01,0x98,0x96,0x94,0x92,0x95,0x95,0x95,0x98,0x92,0x8E,0x96,0x9F,0x9F,0x9D,0x9D,
6237 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6238 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,
6239 0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,
6240 0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,
6241 0x9D,0x9D,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x95,
6242 0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,
6243 0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6244 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6245 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6246 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x95,0x95,0x95,0x98,0x98,0x9A,0x01,0x99,0x98,
6247 0x98,0x01,0x93,0x96,0x98,0x95,0x98,0x01,0x98,0x94,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6248 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x98,0x98,0x9D,
6249 0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,
6250 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6251 0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
6252 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,
6253 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,
6254 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,
6255 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x98,0x98,
6256 0x98,0x98,0x95,0x95,0x98,0x92,0x94,0x95,0x95,0x95,0x96,0x01,0x9F,0x9F,0x9D,0x9D,
6257 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6258 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6259 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6260 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6261 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6262 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6263 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6264 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6265 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6266 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x95,0x01,0x98,0x95,0x01,0x9A,0x98,0x9A,0x9B,
6267 0x99,0x94,0x98,0x92,0x93,0x94,0x96,0x01,0x95,0x94,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6268 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,
6269 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x98,0x98,0x9D,0x9D,0x98,0x98,0x9D,0x9D,0x9F,
6270 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6271 0x9D,0x98,0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
6272 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,
6273 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x98,0x98,0x9D,
6274 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
6275 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x98,0x96,
6276 0x98,0x95,0x92,0x96,0x93,0x93,0x95,0x92,0x8E,0x96,0x8E,0x93,0x9F,0x9F,0x9D,0x9D,
6277 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6278 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6279 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6280 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6281 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6282 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6283 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6284 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6285 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6286 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x99,0x95,0x98,0x98,0x9A,0x98,0x99,0x98,0x95,
6287 0x98,0x01,0x93,0x93,0x94,0x94,0x01,0x98,0x94,0x96,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6288 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,
6289 0x98,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6290 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6291 0x98,0x17,0x17,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
6292 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,
6293 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x17,0x17,0x98,
6294 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
6295 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x90,0x93,0x95,0x95,
6296 0x8E,0x94,0x93,0x94,0x8E,0x92,0x94,0x95,0x94,0x94,0x95,0x95,0x99,0x95,0x95,0x95,
6297 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x94,0x94,0x94,0x94,0x94,
6298 0x94,0x94,0x94,0x94,0x94,0x94,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,
6299 0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x92,0x92,0x92,0x92,
6300 0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,
6301 0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,
6302 0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,
6303 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
6304 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
6305 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
6306 0x90,0x90,0x90,0x90,0x90,0x90,0x94,0x98,0x96,0x99,0x98,0x95,0x98,0x01,0x96,0x01,
6307 0x98,0x01,0x01,0x93,0x98,0x98,0x95,0x95,0x93,0x01,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6308 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,
6309 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6310 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6311 0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
6312 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
6313 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,
6314 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6315 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x94,0x8E,0x92,
6316 0x93,0x8E,0x94,0x92,0x94,0x92,0x8E,0x94,0x95,0x96,0x94,0x95,0x98,0x92,0x01,0x98,
6317 0x9A,0x98,0x98,0x96,0x99,0x98,0x99,0x98,0x96,0x95,0x95,0x96,0x94,0x98,0x96,0x98,
6318 0x93,0x92,0x8E,0x01,0x96,0x94,0x92,0x98,0x98,0x95,0x93,0x01,0x94,0x92,0x01,0x94,
6319 0x01,0x95,0x98,0x95,0x98,0x95,0x94,0x96,0x98,0x01,0x94,0x92,0x01,0x93,0x01,0x01,
6320 0x94,0x96,0x96,0x96,0x95,0x95,0x98,0x92,0x93,0x98,0x95,0x98,0x95,0x92,0x95,0x93,
6321 0x98,0x01,0x96,0x98,0x95,0x98,0x98,0x94,0x95,0x96,0x95,0x98,0x92,0x92,0x95,0x95,
6322 0x98,0x95,0x92,0x95,0x8E,0x95,0x8E,0x95,0x94,0x92,0x94,0x96,0x96,0x01,0x96,0x94,
6323 0x96,0x95,0x96,0x94,0x01,0x95,0x96,0x95,0x94,0x96,0x94,0x96,0x96,0x01,0x98,0x96,
6324 0x94,0x98,0x95,0x01,0x95,0x98,0x01,0x92,0x94,0x01,0x97,0x96,0x98,0x01,0x95,0x95,
6325 0x98,0x98,0x01,0x98,0x99,0x93,0x95,0x98,0x96,0x95,0x92,0x95,0x94,0x92,0x92,0x98,
6326 0x99,0x98,0x98,0x98,0x98,0x95,0x01,0x01,0x96,0x99,0x95,0x94,0x01,0x96,0x92,0x94,
6327 0x95,0x95,0x98,0x98,0x96,0x01,0x95,0x93,0x01,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6328 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,
6329 0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x17,0x17,0x17,0x17,0x98,0x9D,0x9F,
6330 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6331 0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
6332 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
6333 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,
6334 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6335 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x8E,0x95,
6336 0x92,0x94,0x93,0x92,0x95,0x95,0x98,0x96,0x95,0x01,0x94,0x98,0x98,0x99,0x98,0x95,
6337 0x9A,0x98,0x98,0x01,0x98,0x95,0x95,0x92,0x92,0x96,0x8E,0x8E,0x96,0x94,0x94,0x98,
6338 0x96,0x98,0x95,0x98,0x98,0x95,0x95,0x96,0x98,0x98,0x01,0x98,0x95,0x94,0x95,0x01,
6339 0x98,0x96,0x96,0x98,0x01,0x96,0x95,0x96,0x94,0x98,0x98,0x95,0x94,0x98,0x01,0x95,
6340 0x95,0x95,0x95,0x95,0x01,0x94,0x01,0x94,0x95,0x01,0x96,0x98,0x95,0x98,0x94,0x95,
6341 0x96,0x95,0x96,0x96,0x01,0x98,0x96,0x95,0x96,0x95,0x95,0x95,0x92,0x8E,0x92,0x95,
6342 0x93,0x8E,0x8E,0x92,0x98,0x98,0x92,0x94,0x93,0x96,0x95,0x98,0x95,0x98,0x98,0x98,
6343 0x93,0x95,0x95,0x94,0x98,0x98,0x96,0x96,0x95,0x95,0x98,0x94,0x95,0x94,0x98,0x95,
6344 0x98,0x98,0x98,0x01,0x95,0x98,0x98,0x95,0x98,0x98,0x98,0x99,0x98,0x98,0x98,0x98,
6345 0x98,0x99,0x98,0x97,0x97,0x95,0x94,0x94,0x95,0x01,0x96,0x95,0x95,0x98,0x99,0x94,
6346 0x96,0x95,0x96,0x95,0x94,0x97,0x95,0x95,0x95,0x01,0x98,0x01,0x01,0x98,0x98,0x98,
6347 0x94,0x98,0x96,0x01,0x01,0x92,0x95,0x92,0x94,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6348 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,
6349 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6350 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6351 0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
6352 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
6353 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x98,
6354 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6355 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x8E,0x95,0x95,
6356 0x94,0x94,0x96,0x96,0x01,0x95,0x95,0x98,0x98,0x01,0x9A,0x01,0x98,0x98,0x98,0x96,
6357 0x98,0x98,0x98,0x96,0x98,0x92,0x93,0x95,0x92,0x96,0x98,0x94,0x95,0x98,0x96,0x98,
6358 0x98,0x01,0x96,0x94,0x98,0x95,0x95,0x98,0x95,0x01,0x95,0x92,0x96,0x96,0x94,0x96,
6359 0x01,0x98,0x01,0x98,0x95,0x95,0x01,0x98,0x95,0x94,0x96,0x94,0x01,0x01,0x94,0x98,
6360 0x95,0x01,0x96,0x96,0x98,0x95,0x95,0x93,0x96,0x01,0x98,0x96,0x95,0x98,0x95,0x94,
6361 0x01,0x94,0x92,0x96,0x94,0x98,0x98,0x98,0x96,0x98,0x96,0x94,0x94,0x8E,0x94,0x93,
6362 0x8E,0x94,0x98,0x94,0x96,0x95,0x98,0x96,0x01,0x96,0x98,0x95,0x96,0x94,0x93,0x96,
6363 0x96,0x98,0x96,0x98,0x92,0x95,0x96,0x95,0x95,0x96,0x01,0x94,0x98,0x01,0x95,0x98,
6364 0x96,0x98,0x98,0x99,0x96,0x01,0x01,0x98,0x98,0x95,0x98,0x95,0x98,0x96,0x98,0x96,
6365 0x98,0x01,0x98,0x95,0x92,0x98,0x96,0x96,0x98,0x01,0x96,0x99,0x95,0x98,0x94,0x96,
6366 0x96,0x96,0x95,0x95,0x95,0x98,0x98,0x96,0x96,0x01,0x94,0x93,0x94,0x95,0x98,0x01,
6367 0x95,0x92,0x92,0x91,0x94,0x95,0x95,0x96,0x93,0x96,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6368 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x98,0x98,0x98,
6369 0x17,0x17,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x9F,
6370 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6371 0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
6372 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
6373 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x98,
6374 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6375 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x95,0x01,
6376 0x95,0x01,0x95,0x98,0x01,0x96,0x98,0x98,0x98,0x94,0x95,0x98,0x98,0x96,0x01,0x98,
6377 0x95,0x96,0x96,0x94,0x93,0x01,0x98,0x94,0x98,0x94,0x96,0x98,0x01,0x96,0x96,0x94,
6378 0x95,0x94,0x9A,0x96,0x99,0x98,0x98,0x01,0x96,0x98,0x95,0x96,0x96,0x96,0x98,0x96,
6379 0x95,0x96,0x96,0x95,0x95,0x95,0x96,0x01,0x01,0x95,0x96,0x95,0x94,0x96,0x96,0x94,
6380 0x95,0x96,0x98,0x95,0x98,0x96,0x98,0x96,0x98,0x98,0x96,0x95,0x95,0x95,0x95,0x98,
6381 0x93,0x98,0x98,0x92,0x95,0x01,0x98,0x01,0x94,0x94,0x93,0x95,0x01,0x95,0x92,0x8E,
6382 0x01,0x96,0x95,0x94,0x96,0x96,0x98,0x96,0x96,0x01,0x96,0x95,0x94,0x95,0x94,0x94,
6383 0x98,0x94,0x95,0x01,0x94,0x95,0x96,0x93,0x94,0x97,0x98,0x98,0x98,0x99,0x98,0x95,
6384 0x98,0x9A,0x9A,0x9A,0x99,0x9A,0x98,0x96,0x98,0x98,0x96,0x98,0x96,0x94,0x95,0x98,
6385 0x96,0x95,0x96,0x01,0x98,0x01,0x98,0x01,0x94,0x98,0x01,0x98,0x98,0x99,0x01,0x98,
6386 0x93,0x01,0x98,0x94,0x98,0x96,0x98,0x98,0x98,0x98,0x97,0x95,0x01,0x01,0x98,0x96,
6387 0x92,0x92,0x95,0x96,0x01,0x95,0x93,0x96,0x93,0x93,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6388 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x17,0x17,0x98,
6389 0x17,0x17,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x9D,
6390 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6391 0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
6392 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,
6393 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x9D,
6394 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,
6395 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x90,0x01,0x95,0x94,
6396 0x96,0x99,0x98,0x99,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x95,0x94,0x01,0x94,
6397 0x96,0x93,0x95,0x93,0x01,0x94,0x95,0x95,0x94,0x96,0x93,0x98,0x98,0x94,0x95,0x98,
6398 0x95,0x95,0x98,0x98,0x95,0x98,0x98,0x98,0x9A,0x94,0x98,0x98,0x98,0x98,0x01,0x98,
6399 0x01,0x98,0x98,0x96,0x96,0x94,0x96,0x01,0x98,0x01,0x98,0x96,0x01,0x96,0x96,0x93,
6400 0x98,0x94,0x95,0x98,0x98,0x96,0x98,0x96,0x94,0x95,0x94,0x95,0x96,0x96,0x92,0x96,
6401 0x96,0x94,0x95,0x95,0x94,0x95,0x94,0x98,0x98,0x96,0x94,0x8E,0x94,0x95,0x01,0x93,
6402 0x92,0x96,0x94,0x98,0x95,0x98,0x98,0x01,0x94,0x96,0x94,0x98,0x95,0x98,0x96,0x98,
6403 0x95,0x98,0x96,0x95,0x98,0x98,0x98,0x93,0x94,0x98,0x96,0x98,0x96,0x95,0x95,0x98,
6404 0x01,0x01,0x98,0x98,0x98,0x98,0x01,0x01,0x96,0x99,0x99,0x98,0x96,0x98,0x99,0x96,
6405 0x01,0x01,0x96,0x98,0x95,0x98,0x95,0x98,0x98,0x01,0x95,0x9A,0x98,0x98,0x96,0x95,
6406 0x01,0x98,0x98,0x95,0x96,0x98,0x94,0x98,0x96,0x98,0x98,0x95,0x96,0x98,0x99,0x95,
6407 0x98,0x94,0x93,0x91,0x92,0x98,0x95,0x93,0x91,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6408 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x98,0x98,0x9D,
6409 0x98,0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x9D,0x9D,0x9A,
6410 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6411 0x9D,0x9D,0x9D,0x98,0x98,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
6412 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,
6413 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x9D,0x9D,0x9D,
6414 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,
6415 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x90,0x94,0x95,0x98,
6416 0x01,0x01,0x98,0x98,0x98,0x99,0x98,0x96,0x98,0x96,0x94,0x98,0x9F,0x9F,0x9F,0x9F,
6417 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6418 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6419 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6420 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6421 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6422 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6423 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6424 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6425 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6426 0x9F,0x9F,0x9F,0x9F,0x9F,0x97,0x98,0x98,0x96,0x01,0x98,0x98,0x01,0x99,0x98,0x01,
6427 0x98,0x92,0x96,0x92,0x92,0x93,0x01,0x94,0x95,0x94,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6428 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x9D,0x9D,0x9D,
6429 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
6430 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6431 0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
6432 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,
6433 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,
6434 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
6435 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x98,0x95,
6436 0x99,0x96,0x96,0x98,0x98,0x96,0x98,0x98,0x96,0x01,0x95,0x01,0x9F,0x9F,0x9F,0x9F,
6437 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6438 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6439 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6440 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6441 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6442 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6443 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6444 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6445 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6446 0x9F,0x9F,0x9F,0x9F,0x9F,0x94,0x9A,0x95,0x98,0x98,0x98,0x98,0x95,0x95,0x95,0x97,
6447 0x95,0x93,0x94,0x93,0x96,0x01,0x98,0x95,0x96,0x93,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6448 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x9D,
6449 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
6450 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6451 0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
6452 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,
6453 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,
6454 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
6455 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x95,0x98,
6456 0x98,0x98,0x98,0x95,0x98,0x94,0x01,0x96,0x01,0x98,0x98,0x96,0x9F,0x9F,0x9D,0x9D,
6457 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6458 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6459 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6460 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6461 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6462 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6463 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6464 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6465 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6466 0x9D,0x9D,0x9D,0x9D,0x9D,0x91,0x99,0x98,0x98,0x01,0x01,0x9A,0x01,0x98,0x94,0x98,
6467 0x93,0x94,0x94,0x95,0x93,0x98,0x01,0x96,0x96,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6468 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x98,0x9D,0x98,
6469 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6470 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6471 0x98,0x17,0x17,0x98,0x98,0x98,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
6472 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
6473 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x98,0x9D,0x98,
6474 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6475 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x95,0x96,
6476 0x98,0x96,0x01,0x98,0x01,0x98,0x95,0x94,0x96,0x95,0x92,0x95,0x9F,0x9F,0x9D,0x9D,
6477 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6478 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,
6479 0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x9D,
6480 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,
6481 0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6482 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6483 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6484 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6485 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6486 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x99,0x98,0x01,0x98,0x98,0x9A,0x99,0x98,0x98,0x9A,
6487 0x94,0x98,0x93,0x01,0x95,0x98,0x92,0x96,0x98,0x93,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6488 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x98,
6489 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6490 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6491 0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
6492 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
6493 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x98,
6494 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6495 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x01,0x95,0x96,
6496 0x94,0x96,0x98,0x94,0x01,0x95,0x94,0x92,0x8E,0x8E,0x93,0x94,0x9F,0x9F,0x9D,0x9D,
6497 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6498 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
6499 0x95,0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x95,0x95,0x10,0x10,0x10,0x95,
6500 0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x10,0x10,0x10,0x95,0x10,0x10,0x10,0x10,0x10,0x10,
6501 0x10,0x10,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6502 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6503 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6504 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6505 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6506 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x99,0x98,0x98,0x98,0x98,0x98,0x96,0x01,0x01,0x98,
6507 0x96,0x93,0x95,0x01,0x98,0x95,0x95,0x92,0x94,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6508 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x9D,
6509 0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
6510 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6511 0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
6512 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
6513 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,
6514 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6515 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x96,0x98,0x95,
6516 0x96,0x94,0x8E,0x92,0x8E,0x92,0x96,0x92,0x93,0x95,0x01,0x95,0x9F,0x9F,0x9D,0x9D,
6517 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
6518 0x90,0x90,0x91,0x94,0x9F,0x9D,0x9D,0x95,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,
6519 0x10,0x95,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x95,0x10,0x11,0x10,0x95,
6520 0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x10,0x11,0x10,0x95,0x10,0x11,0x10,0x11,0x10,0x11,
6521 0x10,0x11,0x10,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6522 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6523 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6524 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6525 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6526 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x01,0x99,0x99,0x01,0x98,0x01,0x92,0x92,0x8D,
6527 0x94,0x01,0x95,0x95,0x93,0x93,0x95,0x92,0x95,0x93,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6528 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x9D,
6529 0x9D,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9F,
6530 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6531 0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
6532 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
6533 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,
6534 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6535 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x93,0x8E,0x95,
6536 0x95,0x95,0x92,0x01,0x93,0x01,0x94,0x01,0x01,0x94,0x01,0x01,0x9F,0x9F,0x9D,0x9D,
6537 0x90,0x90,0x93,0x96,0x98,0x98,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
6538 0x99,0x99,0x99,0x9D,0x9F,0x9D,0x9D,0x95,0x12,0x12,0x12,0x95,0x95,0x95,0x12,0x11,
6539 0x12,0x95,0x12,0x11,0x12,0x95,0x95,0x95,0x12,0x12,0x12,0x95,0x12,0x12,0x12,0x95,
6540 0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x12,0x11,0x12,0x95,0x12,0x11,0x12,0x95,0x95,0x95,
6541 0x12,0x12,0x12,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6542 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6543 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6544 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6545 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6546 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x99,0x98,0x97,0x95,0x96,0x92,0x94,0x94,0x8D,
6547 0x92,0x98,0x94,0x95,0x94,0x96,0x92,0x98,0x94,0x92,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6548 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,
6549 0x98,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,
6550 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6551 0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
6552 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,
6553 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,
6554 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,
6555 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x95,0x95,
6556 0x95,0x95,0x95,0x01,0x93,0x01,0x95,0x96,0x95,0x95,0x92,0x96,0x9F,0x9F,0x9D,0x9D,
6557 0x90,0x93,0x96,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
6558 0x00,0x99,0x99,0x9D,0x9F,0x9D,0x9D,0x95,0x12,0x13,0x12,0x95,0x95,0x95,0x12,0x13,
6559 0x12,0x95,0x12,0x13,0x12,0x95,0x9D,0x95,0x12,0x13,0x12,0x95,0x12,0x13,0x12,0x95,
6560 0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x12,0x13,0x12,0x95,0x12,0x13,0x12,0x95,0x95,0x95,
6561 0x12,0x13,0x12,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6562 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6563 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6564 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6565 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6566 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x01,0x01,0x93,0x95,0x94,0x95,0x93,0x93,0x01,
6567 0x94,0x93,0x96,0x93,0x95,0x95,0x95,0x01,0x92,0x94,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6568 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,
6569 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x98,0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9A,
6570 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6571 0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
6572 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,
6573 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,
6574 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,
6575 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x90,0x94,0x01,0x94,
6576 0x98,0x95,0x95,0x94,0x93,0x94,0x95,0x98,0x93,0x93,0x01,0x01,0x9F,0x9F,0x9D,0x9D,
6577 0x90,0x96,0x98,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
6578 0x1F,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x95,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x13,
6579 0x13,0x95,0x13,0x13,0x13,0x95,0x9D,0x95,0x13,0x13,0x13,0x95,0x13,0x13,0x14,0x95,
6580 0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x14,0x13,0x13,0x95,0x13,0x13,0x13,0x13,0x14,0x13,
6581 0x13,0x13,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6582 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6583 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6584 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6585 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6586 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x93,0x95,0x93,0x92,0x01,0x93,0x92,0x98,0x98,0x95,
6587 0x92,0x95,0x92,0x93,0x94,0x94,0x8E,0x93,0x96,0x93,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6588 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x9D,0x9D,0x9D,
6589 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
6590 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6591 0x9D,0x98,0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
6592 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,
6593 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x98,0x98,0x9D,
6594 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
6595 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x90,0x94,0x92,0x94,
6596 0x95,0x95,0x94,0x95,0x92,0x95,0x95,0x96,0x95,0x96,0x92,0x98,0x9F,0x9F,0x9D,0x9D,
6597 0x90,0x98,0x98,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
6598 0x1F,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x95,0x14,0x14,0x14,0x15,0x14,0x15,0x14,0x15,
6599 0x14,0x95,0x14,0x15,0x14,0x95,0x9D,0x95,0x14,0x14,0x14,0x95,0x14,0x15,0x14,0x95,
6600 0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x14,0x15,0x14,0x95,0x14,0x15,0x14,0x15,0x14,0x15,
6601 0x14,0x14,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6602 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6603 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6604 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6605 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6606 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x92,0x95,0x8E,0x95,0x94,0x95,0x96,0x01,0x94,0x98,
6607 0x95,0x93,0x93,0x95,0x94,0x94,0x01,0x01,0x92,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6608 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x9D,
6609 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
6610 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6611 0x98,0x17,0x17,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
6612 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,
6613 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x17,0x17,0x98,
6614 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
6615 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x94,0x98,
6616 0x96,0x95,0x01,0x95,0x98,0x94,0x92,0x95,0x96,0x93,0x95,0x95,0x9F,0x9F,0x9D,0x9D,
6617 0x90,0x98,0x99,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
6618 0x1F,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x95,0x15,0x15,0x15,0x95,0x95,0x95,0x15,0x15,
6619 0x15,0x95,0x15,0x15,0x15,0x95,0x9D,0x95,0x15,0x15,0x15,0x95,0x15,0x15,0x15,0x95,
6620 0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x15,0x15,0x15,0x95,0x15,0x15,0x15,0x95,0x95,0x95,
6621 0x15,0x15,0x15,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6622 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6623 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6624 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6625 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6626 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x8E,0x92,0x94,0x01,0x95,0x95,0x01,0x01,0x98,0x01,
6627 0x92,0x95,0x93,0x95,0x93,0x95,0x91,0x92,0x95,0x92,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6628 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x98,0x9D,0x98,
6629 0x17,0x17,0x98,0x98,0x98,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6630 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6631 0x98,0x17,0x17,0x98,0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
6632 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
6633 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x98,0x98,0x98,
6634 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6635 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x92,0x95,0x95,
6636 0x93,0x94,0x94,0x94,0x95,0x91,0x94,0x95,0x95,0x92,0x98,0x01,0x9F,0x9F,0x9D,0x9D,
6637 0x91,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
6638 0x99,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x95,0x16,0x16,0x15,0x95,0x9D,0x95,0x15,0x16,
6639 0x16,0x95,0x15,0x16,0x16,0x95,0x95,0x95,0x16,0x16,0x15,0x95,0x16,0x16,0x15,0x95,
6640 0x95,0x95,0x95,0x95,0x95,0x95,0x15,0x16,0x16,0x95,0x15,0x16,0x16,0x95,0x95,0x95,
6641 0x16,0x16,0x15,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6642 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6643 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6644 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6645 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6646 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x01,0x93,0x98,0x01,0x93,0x01,0x98,0x96,0x96,0x97,
6647 0x92,0x96,0x96,0x95,0x92,0x92,0x8E,0x95,0x8E,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6648 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x98,
6649 0x17,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6650 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6651 0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
6652 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
6653 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x98,
6654 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6655 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x01,0x94,0x01,
6656 0x98,0x92,0x96,0x94,0x94,0x95,0x94,0x95,0x98,0x95,0x94,0x94,0x9F,0x9F,0x9D,0x9D,
6657 0x94,0x9B,0x9D,0x9D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6658 0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9D,0x95,0x17,0x17,0x17,0x95,0x9D,0x95,0x17,0x17,
6659 0x17,0x95,0x17,0x17,0x17,0x16,0x17,0x17,0x17,0x17,0x17,0x95,0x17,0x16,0x17,0x17,
6660 0x17,0x17,0x17,0x17,0x17,0x95,0x17,0x17,0x17,0x95,0x17,0x17,0x17,0x16,0x17,0x17,
6661 0x17,0x17,0x17,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6662 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6663 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6664 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6665 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6666 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x96,0x01,0x98,0x96,0x96,0x01,0x01,0x95,0x95,
6667 0x92,0x95,0x92,0x94,0x92,0x8E,0x93,0x8E,0x95,0x94,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6668 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x98,
6669 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6670 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6671 0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
6672 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
6673 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,
6674 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6675 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x01,0x01,
6676 0x95,0x93,0x92,0x95,0x01,0x95,0x96,0x98,0x95,0x94,0x01,0x98,0x9F,0x9F,0x9D,0x9D,
6677 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6678 0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9D,0x95,0x17,0x18,0x17,0x95,0x9D,0x95,0x17,0x18,
6679 0x17,0x95,0x17,0x18,0x17,0x18,0x17,0x18,0x17,0x18,0x95,0x95,0x17,0x18,0x17,0x18,
6680 0x17,0x18,0x17,0x18,0x17,0x95,0x17,0x18,0x17,0x95,0x17,0x18,0x17,0x18,0x17,0x18,
6681 0x17,0x18,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6682 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6683 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6684 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6685 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6686 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x96,0x95,0x95,0x98,0x01,0x96,0x95,0x96,0x98,0x96,
6687 0x99,0x8E,0x01,0x92,0x01,0x94,0x94,0x96,0x93,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6688 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x98,
6689 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6690 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6691 0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
6692 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
6693 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,
6694 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6695 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x92,0x95,0x98,
6696 0x94,0x92,0x94,0x92,0x01,0x95,0x93,0x92,0x95,0x93,0x94,0x01,0x9F,0x9F,0x9D,0x9D,
6697 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6698 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,
6699 0x95,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x95,
6700 0x95,0x95,0x95,0x95,0x95,0x9D,0x95,0x95,0x95,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,
6701 0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6702 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6703 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6704 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6705 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6706 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x01,0x98,0x01,0x98,0x01,0x96,0x98,0x95,0x98,
6707 0x92,0x94,0x8E,0x96,0x91,0x95,0x92,0x95,0x98,0x01,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6708 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,
6709 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,
6710 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6711 0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
6712 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,
6713 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x9D,
6714 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,
6715 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x92,0x01,
6716 0x98,0x95,0x93,0x93,0x98,0x95,0x95,0x94,0x94,0x93,0x98,0x94,0x9F,0x9F,0x9D,0x9D,
6717 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6718 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6719 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6720 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6721 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6722 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6723 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6724 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6725 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6726 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x96,0x95,0x96,0x98,0x01,0x01,0x94,0x98,0x95,0x98,
6727 0x8E,0x8E,0x95,0x01,0x93,0x95,0x92,0x92,0x95,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6728 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,
6729 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,
6730 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6731 0x9D,0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
6732 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,
6733 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,
6734 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,
6735 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x90,0x94,0x95,0x98,
6736 0x94,0x01,0x95,0x94,0x94,0x96,0x95,0x92,0x98,0x93,0x96,0x98,0x9F,0x9F,0x9D,0x9D,
6737 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6738 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6739 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6740 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6741 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6742 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6743 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6744 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6745 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6746 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x98,0x01,0x95,0x01,0x96,0x01,0x01,0x98,0x01,
6747 0x8E,0x92,0x96,0x01,0x94,0x92,0x95,0x96,0x93,0x92,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6748 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x9D,0x9D,0x9D,
6749 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
6750 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6751 0x9D,0x98,0x98,0x9D,0x9D,0x98,0x98,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
6752 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,
6753 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x9D,0x9D,0x98,0x98,0x9D,
6754 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
6755 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x90,0x94,0x96,0x91,
6756 0x94,0x96,0x95,0x93,0x95,0x93,0x95,0x95,0x95,0x94,0x93,0x95,0x99,0x95,0x95,0x95,
6757 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x94,0x94,0x94,0x94,0x94,
6758 0x94,0x94,0x94,0x94,0x94,0x94,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,
6759 0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x92,0x92,0x92,0x92,
6760 0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,
6761 0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,
6762 0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,
6763 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
6764 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
6765 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
6766 0x90,0x90,0x90,0x90,0x90,0x90,0x94,0x98,0x98,0x98,0x98,0x98,0x96,0x01,0x01,0x96,
6767 0x94,0x92,0x92,0x91,0x8E,0x8E,0x94,0x95,0x8E,0x93,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6768 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x9D,
6769 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
6770 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6771 0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
6772 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,
6773 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,
6774 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
6775 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x90,0x94,0x94,0x93,
6776 0x96,0x92,0x94,0x01,0x01,0x96,0x94,0x96,0x93,0x95,0x98,0x01,0x95,0x96,0x92,0x93,
6777 0x93,0x93,0x98,0x93,0x95,0x01,0x93,0x93,0x93,0x95,0x95,0x95,0x01,0x98,0x98,0x01,
6778 0x01,0x95,0x96,0x96,0x96,0x96,0x98,0x98,0x98,0x98,0x94,0x95,0x96,0x94,0x98,0x98,
6779 0x01,0x94,0x95,0x01,0x93,0x96,0x96,0x95,0x95,0x96,0x8E,0x95,0x93,0x96,0x01,0x95,
6780 0x95,0x92,0x8E,0x96,0x96,0x98,0x96,0x98,0x01,0x96,0x94,0x98,0x96,0x01,0x98,0x98,
6781 0x98,0x98,0x98,0x95,0x98,0x95,0x96,0x98,0x99,0x98,0x98,0x98,0x9A,0x98,0x98,0x95,
6782 0x9A,0x96,0x9B,0x99,0x98,0x9B,0x9B,0x9B,0x98,0x98,0x98,0x98,0x98,0x01,0x99,0x96,
6783 0x98,0x99,0x98,0x98,0x9B,0x01,0x99,0x95,0x01,0x98,0x94,0x95,0x9A,0x98,0x01,0x98,
6784 0x98,0x98,0x98,0x98,0x01,0x91,0x93,0x95,0x93,0x94,0x96,0x94,0x95,0x95,0x94,0x98,
6785 0x96,0x94,0x98,0x96,0x94,0x95,0x01,0x94,0x93,0x01,0x98,0x95,0x92,0x98,0x94,0x98,
6786 0x98,0x98,0x98,0x98,0x98,0x98,0x01,0x98,0x93,0x93,0x01,0x01,0x96,0x98,0x94,0x95,
6787 0x93,0x8E,0x8E,0x8E,0x96,0x95,0x92,0x98,0x95,0x01,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6788 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x98,0x9D,0x98,
6789 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6790 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6791 0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
6792 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
6793 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,
6794 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6795 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x01,0x94,
6796 0x93,0x98,0x01,0x01,0x95,0x95,0x94,0x92,0x94,0x94,0x96,0x95,0x95,0x95,0x98,0x98,
6797 0x96,0x94,0x94,0x01,0x93,0x01,0x95,0x01,0x96,0x96,0x96,0x95,0x01,0x96,0x94,0x95,
6798 0x98,0x96,0x01,0x96,0x98,0x93,0x98,0x98,0x93,0x95,0x01,0x95,0x95,0x96,0x98,0x98,
6799 0x95,0x96,0x98,0x96,0x92,0x96,0x93,0x93,0x92,0x92,0x8E,0x96,0x01,0x95,0x98,0x95,
6800 0x93,0x93,0x94,0x94,0x98,0x95,0x98,0x98,0x96,0x96,0x93,0x96,0x01,0x98,0x96,0x95,
6801 0x94,0x01,0x98,0x96,0x98,0x98,0x98,0x98,0x98,0x92,0x95,0x98,0x96,0x98,0x93,0x94,
6802 0x96,0x98,0x96,0x99,0x98,0x99,0x98,0x95,0x98,0x95,0x01,0x98,0x98,0x98,0x9A,0x95,
6803 0x9A,0x9B,0x98,0x99,0x01,0x98,0x98,0x01,0x98,0x98,0x98,0x95,0x98,0x01,0x98,0x96,
6804 0x98,0x96,0x94,0x93,0x95,0x93,0x95,0x01,0x94,0x94,0x98,0x98,0x95,0x01,0x96,0x98,
6805 0x01,0x01,0x95,0x98,0x96,0x01,0x01,0x98,0x94,0x98,0x98,0x96,0x98,0x01,0x98,0x95,
6806 0x94,0x95,0x98,0x98,0x96,0x94,0x98,0x98,0x96,0x96,0x01,0x98,0x98,0x95,0x95,0x97,
6807 0x8E,0x94,0x96,0x93,0x96,0x95,0x95,0x95,0x95,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6808 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x9D,
6809 0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
6810 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6811 0x98,0x17,0x17,0x17,0x17,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
6812 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
6813 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x17,0x17,0x98,
6814 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6815 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x98,0x95,
6816 0x96,0x95,0x96,0x98,0x01,0x01,0x98,0x01,0x98,0x01,0x96,0x94,0x01,0x01,0x01,0x01,
6817 0x01,0x96,0x98,0x96,0x95,0x98,0x98,0x98,0x96,0x98,0x98,0x94,0x01,0x01,0x95,0x95,
6818 0x94,0x95,0x93,0x94,0x98,0x01,0x95,0x01,0x01,0x95,0x98,0x98,0x94,0x98,0x95,0x96,
6819 0x96,0x96,0x96,0x92,0x91,0x95,0x92,0x8E,0x95,0x93,0x96,0x95,0x95,0x95,0x95,0x94,
6820 0x92,0x95,0x95,0x98,0x96,0x98,0x96,0x01,0x94,0x95,0x01,0x95,0x95,0x98,0x92,0x98,
6821 0x01,0x98,0x92,0x01,0x95,0x98,0x98,0x98,0x95,0x92,0x01,0x96,0x98,0x92,0x98,0x95,
6822 0x93,0x98,0x98,0x01,0x01,0x01,0x98,0x98,0x95,0x97,0x98,0x01,0x98,0x95,0x98,0x9A,
6823 0x96,0x98,0x95,0x99,0x98,0x98,0x99,0x98,0x98,0x01,0x98,0x98,0x96,0x01,0x98,0x93,
6824 0x95,0x98,0x93,0x92,0x8E,0x8E,0x98,0x98,0x95,0x98,0x94,0x92,0x94,0x98,0x95,0x96,
6825 0x96,0x01,0x96,0x01,0x94,0x98,0x94,0x98,0x94,0x98,0x94,0x98,0x93,0x01,0x96,0x96,
6826 0x01,0x98,0x98,0x01,0x98,0x98,0x98,0x98,0x95,0x98,0x95,0x95,0x94,0x98,0x98,0x98,
6827 0x92,0x96,0x92,0x92,0x98,0x93,0x95,0x92,0x92,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6828 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x9D,
6829 0x98,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6830 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6831 0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
6832 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
6833 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,
6834 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6835 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x96,0x96,0x96,
6836 0x98,0x98,0x98,0x95,0x95,0x95,0x94,0x94,0x95,0x98,0x95,0x98,0x98,0x94,0x96,0x98,
6837 0x01,0x96,0x98,0x98,0x96,0x98,0x98,0x98,0x96,0x98,0x94,0x96,0x95,0x96,0x95,0x95,
6838 0x01,0x95,0x01,0x96,0x96,0x98,0x96,0x96,0x98,0x92,0x95,0x98,0x95,0x98,0x94,0x95,
6839 0x96,0x95,0x8E,0x92,0x93,0x95,0x93,0x98,0x95,0x95,0x96,0x95,0x95,0x95,0x94,0x94,
6840 0x95,0x92,0x01,0x95,0x96,0x96,0x96,0x96,0x98,0x94,0x01,0x01,0x95,0x95,0x96,0x96,
6841 0x95,0x95,0x95,0x98,0x94,0x96,0x96,0x96,0x94,0x98,0x93,0x98,0x01,0x95,0x95,0x98,
6842 0x01,0x98,0x01,0x96,0x01,0x95,0x01,0x95,0x98,0x96,0x98,0x98,0x01,0x98,0x98,0x98,
6843 0x98,0x98,0x98,0x96,0x01,0x95,0x01,0x98,0x98,0x95,0x95,0x94,0x95,0x92,0x96,0x96,
6844 0x8E,0x92,0x92,0x95,0x92,0x8E,0x93,0x01,0x92,0x94,0x98,0x01,0x98,0x98,0x95,0x95,
6845 0x98,0x98,0x95,0x98,0x01,0x98,0x95,0x96,0x96,0x98,0x95,0x95,0x95,0x96,0x98,0x96,
6846 0x98,0x96,0x96,0x98,0x98,0x98,0x01,0x93,0x94,0x95,0x95,0x01,0x98,0x01,0x01,0x98,
6847 0x92,0x95,0x01,0x96,0x96,0x94,0x95,0x98,0x96,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6848 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x98,
6849 0x17,0x17,0x98,0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6850 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6851 0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
6852 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
6853 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,
6854 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6855 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x92,0x98,0x98,
6856 0x92,0x95,0x98,0x95,0x95,0x96,0x92,0x93,0x96,0x98,0x95,0x96,0x96,0x98,0x98,0x95,
6857 0x98,0x95,0x99,0x01,0x96,0x01,0x96,0x01,0x98,0x96,0x95,0x01,0x95,0x98,0x01,0x93,
6858 0x98,0x96,0x96,0x94,0x96,0x96,0x95,0x96,0x92,0x94,0x95,0x98,0x92,0x92,0x98,0x94,
6859 0x93,0x8E,0x8E,0x92,0x93,0x95,0x01,0x94,0x95,0x95,0x95,0x94,0x92,0x95,0x93,0x93,
6860 0x94,0x95,0x98,0x95,0x98,0x95,0x95,0x95,0x01,0x96,0x96,0x93,0x96,0x95,0x98,0x94,
6861 0x95,0x01,0x98,0x96,0x95,0x98,0x98,0x96,0x95,0x92,0x96,0x01,0x96,0x93,0x95,0x98,
6862 0x98,0x98,0x9A,0x98,0x96,0x95,0x96,0x01,0x98,0x98,0x94,0x98,0x01,0x98,0x9A,0x99,
6863 0x99,0x98,0x98,0x96,0x95,0x98,0x01,0x01,0x01,0x96,0x01,0x92,0x92,0x8E,0x93,0x94,
6864 0x95,0x93,0x8E,0x8E,0x92,0x94,0x94,0x95,0x01,0x94,0x95,0x96,0x98,0x96,0x95,0x93,
6865 0x93,0x95,0x92,0x95,0x96,0x98,0x95,0x95,0x95,0x96,0x94,0x98,0x94,0x01,0x01,0x94,
6866 0x96,0x98,0x98,0x98,0x01,0x96,0x01,0x98,0x01,0x94,0x98,0x01,0x96,0x98,0x98,0x98,
6867 0x99,0x98,0x98,0x95,0x98,0x94,0x95,0x92,0x92,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6868 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x98,
6869 0x17,0x17,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,
6870 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6871 0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
6872 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,
6873 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,
6874 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,
6875 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x98,0x01,
6876 0x96,0x98,0x98,0x01,0x01,0x01,0x97,0x98,0x94,0x94,0x98,0x96,0x9F,0x9F,0x9F,0x9F,
6877 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6878 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6879 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6880 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6881 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6882 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6883 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6884 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6885 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6886 0x9F,0x9F,0x9F,0x9F,0x9F,0x97,0x98,0x98,0x01,0x98,0x92,0x01,0x01,0x95,0x95,0x97,
6887 0x98,0x94,0x95,0x95,0x01,0x96,0x98,0x93,0x01,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6888 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,
6889 0x98,0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,
6890 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6891 0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
6892 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,
6893 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x9D,
6894 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,
6895 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x90,0x01,0x99,0x98,
6896 0x96,0x96,0x98,0x98,0x01,0x98,0x98,0x98,0x98,0x98,0x98,0x99,0x9F,0x9F,0x9F,0x9F,
6897 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6898 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6899 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6900 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6901 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6902 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6903 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6904 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6905 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
6906 0x9F,0x9F,0x9F,0x9F,0x9F,0x94,0x95,0x96,0x01,0x94,0x98,0x98,0x98,0x96,0x98,0x01,
6907 0x95,0x95,0x96,0x01,0x94,0x96,0x98,0x95,0x95,0x96,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6908 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6909 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
6910 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6911 0x9D,0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
6912 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,
6913 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,
6914 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
6915 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x01,0x01,
6916 0x98,0x95,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x99,0x98,0x9F,0x9F,0x9D,0x9D,
6917 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6918 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6919 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6920 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6921 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6922 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6923 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6924 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6925 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6926 0x9D,0x9D,0x9D,0x9D,0x9D,0x91,0x98,0x98,0x01,0x98,0x95,0x01,0x98,0x99,0x98,0x9B,
6927 0x96,0x98,0x96,0x94,0x95,0x93,0x93,0x95,0x93,0x96,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6928 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6929 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
6930 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6931 0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
6932 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,
6933 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x9D,
6934 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
6935 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x90,0x94,0x96,0x94,
6936 0x95,0x98,0x96,0x95,0x96,0x98,0x96,0x01,0x98,0x98,0x94,0x94,0x9F,0x9F,0x9D,0x9D,
6937 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6938 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,
6939 0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x9D,
6940 0x9D,0x9D,0x95,0x95,0x95,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x9D,
6941 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,
6942 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,
6943 0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,
6944 0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,
6945 0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,
6946 0x95,0x95,0x9D,0x9D,0x9D,0x90,0x98,0x01,0x99,0x98,0x95,0x98,0x01,0x95,0x95,0x01,
6947 0x96,0x95,0x93,0x96,0x93,0x01,0x92,0x93,0x94,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6948 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,
6949 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
6950 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6951 0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
6952 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
6953 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,
6954 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6955 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x95,0x01,
6956 0x95,0x98,0x01,0x94,0x96,0x96,0x95,0x92,0x98,0x96,0x01,0x96,0x9F,0x9F,0x9D,0x9D,
6957 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6958 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
6959 0x95,0x9D,0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x95,0x95,0x10,0x10,0x10,0x95,
6960 0x9D,0x95,0x10,0x10,0x10,0x95,0x10,0x10,0x10,0x95,0x9D,0x95,0x10,0x10,0x10,0x95,
6961 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x10,
6962 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x95,0x95,0x10,0x10,0x10,0x95,0x9D,0x9D,0x9D,
6963 0x9D,0x9D,0x9D,0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x95,0x9D,0x95,0x10,0x10,
6964 0x10,0x10,0x10,0x10,0x10,0x95,0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
6965 0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x95,0x10,0x10,0x10,0x10,0x10,0x10,
6966 0x10,0x10,0x95,0x9D,0x9D,0x90,0x98,0x98,0x98,0x98,0x96,0x98,0x01,0x95,0x96,0x96,
6967 0x99,0x94,0x96,0x01,0x95,0x92,0x92,0x98,0x98,0x01,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6968 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,
6969 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
6970 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6971 0x9D,0x9D,0x98,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
6972 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
6973 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x98,0x98,
6974 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6975 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x94,0x95,
6976 0x94,0x93,0x01,0x98,0x95,0x96,0x96,0x98,0x96,0x94,0x01,0x96,0x9F,0x9F,0x9D,0x9D,
6977 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
6978 0x90,0x90,0x91,0x94,0x9F,0x9D,0x9D,0x95,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,
6979 0x11,0x95,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x95,0x11,0x10,0x11,0x95,
6980 0x9D,0x95,0x11,0x10,0x11,0x95,0x11,0x10,0x11,0x10,0x95,0x95,0x11,0x10,0x11,0x95,
6981 0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x10,
6982 0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x95,0x10,0x11,0x10,0x95,0x9D,0x9D,0x9D,
6983 0x9D,0x9D,0x95,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x95,0x10,0x11,0x10,
6984 0x11,0x10,0x11,0x10,0x11,0x10,0x95,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,
6985 0x95,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x95,0x11,0x10,0x11,0x10,0x11,0x10,
6986 0x11,0x10,0x11,0x95,0x9D,0x90,0x98,0x93,0x01,0x96,0x95,0x01,0x98,0x98,0x01,0x94,
6987 0x95,0x98,0x93,0x92,0x93,0x93,0x98,0x93,0x95,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
6988 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6989 0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6990 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
6991 0x9D,0x9D,0x9D,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
6992 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
6993 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x17,0x17,0x98,
6994 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
6995 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x01,0x95,0x01,
6996 0x94,0x93,0x95,0x92,0x93,0x95,0x01,0x98,0x95,0x92,0x93,0x91,0x9F,0x9F,0x9D,0x9D,
6997 0x90,0x90,0x93,0x96,0x98,0x98,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
6998 0x99,0x99,0x99,0x9D,0x9F,0x9D,0x9D,0x95,0x11,0x12,0x12,0x95,0x95,0x95,0x12,0x12,
6999 0x11,0x95,0x12,0x12,0x11,0x95,0x95,0x95,0x11,0x12,0x12,0x95,0x11,0x12,0x12,0x95,
7000 0x9D,0x95,0x12,0x12,0x11,0x95,0x12,0x12,0x11,0x12,0x12,0x95,0x11,0x12,0x12,0x95,
7001 0x11,0x12,0x12,0x95,0x95,0x95,0x12,0x12,0x11,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x12,
7002 0x11,0x12,0x95,0x95,0x95,0x12,0x12,0x12,0x95,0x12,0x12,0x12,0x95,0x9D,0x9D,0x9D,
7003 0x9D,0x9D,0x95,0x12,0x11,0x12,0x95,0x95,0x95,0x12,0x12,0x12,0x95,0x12,0x12,0x12,
7004 0x95,0x95,0x95,0x12,0x11,0x12,0x95,0x95,0x95,0x95,0x12,0x12,0x11,0x95,0x95,0x95,
7005 0x95,0x12,0x12,0x12,0x95,0x95,0x95,0x95,0x95,0x95,0x12,0x12,0x11,0x95,0x95,0x95,
7006 0x11,0x12,0x12,0x95,0x9D,0x90,0x01,0x92,0x01,0x01,0x95,0x98,0x98,0x01,0x93,0x92,
7007 0x95,0x98,0x95,0x95,0x95,0x93,0x95,0x01,0x98,0x94,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
7008 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7009 0x9D,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
7010 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7011 0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
7012 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
7013 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,
7014 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
7015 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x93,0x92,
7016 0x95,0x94,0x92,0x8E,0x94,0x8E,0x94,0x92,0x93,0x8E,0x8E,0x92,0x9F,0x9F,0x9D,0x9D,
7017 0x90,0x93,0x96,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
7018 0x00,0x99,0x99,0x9D,0x9F,0x9D,0x9D,0x95,0x13,0x12,0x13,0x95,0x95,0x95,0x95,0x95,
7019 0x95,0x95,0x13,0x12,0x13,0x95,0x9D,0x95,0x13,0x12,0x13,0x95,0x13,0x12,0x13,0x95,
7020 0x9D,0x95,0x13,0x12,0x13,0x95,0x13,0x12,0x13,0x12,0x13,0x12,0x13,0x12,0x13,0x95,
7021 0x13,0x12,0x13,0x95,0x9D,0x95,0x13,0x12,0x13,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x12,
7022 0x13,0x12,0x95,0x95,0x95,0x12,0x13,0x12,0x95,0x12,0x13,0x12,0x95,0x9D,0x9D,0x9D,
7023 0x9D,0x9D,0x95,0x12,0x13,0x12,0x95,0x95,0x95,0x12,0x13,0x12,0x95,0x12,0x13,0x12,
7024 0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x13,0x12,0x13,0x95,0x9D,0x9D,
7025 0x95,0x12,0x13,0x12,0x95,0x95,0x95,0x9D,0x9D,0x95,0x13,0x12,0x13,0x95,0x95,0x95,
7026 0x13,0x12,0x13,0x95,0x9D,0x90,0x93,0x01,0x95,0x96,0x96,0x95,0x96,0x94,0x92,0x97,
7027 0x96,0x98,0x98,0x96,0x94,0x96,0x95,0x01,0x95,0x93,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
7028 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7029 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,
7030 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7031 0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
7032 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,
7033 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x9D,
7034 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,
7035 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x90,0x93,0x92,0x95,
7036 0x95,0x01,0x92,0x94,0x92,0x96,0x93,0x95,0x96,0x95,0x96,0x92,0x9F,0x9F,0x9D,0x9D,
7037 0x90,0x96,0x98,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
7038 0x1F,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x95,0x13,0x13,0x13,0x14,0x13,0x13,0x13,0x13,
7039 0x95,0x95,0x13,0x14,0x13,0x95,0x9D,0x95,0x13,0x13,0x13,0x95,0x13,0x13,0x13,0x95,
7040 0x9D,0x95,0x13,0x14,0x13,0x95,0x13,0x13,0x13,0x95,0x13,0x14,0x13,0x13,0x13,0x95,
7041 0x13,0x13,0x13,0x95,0x9D,0x95,0x13,0x13,0x13,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x13,
7042 0x13,0x13,0x13,0x14,0x13,0x13,0x13,0x95,0x95,0x13,0x13,0x14,0x95,0x9D,0x9D,0x9D,
7043 0x9D,0x9D,0x95,0x14,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x95,0x13,0x13,0x13,
7044 0x13,0x13,0x13,0x14,0x13,0x95,0x9D,0x9D,0x9D,0x95,0x13,0x14,0x13,0x95,0x9D,0x9D,
7045 0x95,0x13,0x13,0x14,0x13,0x13,0x13,0x95,0x9D,0x95,0x13,0x14,0x13,0x13,0x13,0x13,
7046 0x13,0x13,0x13,0x95,0x9D,0x90,0x95,0x96,0x95,0x96,0x94,0x93,0x95,0x95,0x95,0x92,
7047 0x98,0x95,0x01,0x93,0x95,0x98,0x98,0x97,0x99,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
7048 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7049 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,
7050 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7051 0x9D,0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
7052 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,
7053 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,
7054 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,
7055 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x90,0x96,0x98,0x95,
7056 0x93,0x01,0x95,0x96,0x01,0x93,0x01,0x96,0x93,0x93,0x95,0x91,0x9F,0x9F,0x9D,0x9D,
7057 0x90,0x98,0x98,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
7058 0x1F,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x9D,0x95,0x14,0x15,0x14,0x15,0x14,0x14,0x14,
7059 0x15,0x95,0x15,0x14,0x15,0x95,0x9D,0x95,0x15,0x14,0x15,0x95,0x15,0x14,0x14,0x95,
7060 0x9D,0x95,0x15,0x14,0x15,0x95,0x14,0x14,0x15,0x95,0x95,0x14,0x15,0x14,0x14,0x95,
7061 0x15,0x14,0x15,0x95,0x9D,0x95,0x14,0x14,0x15,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x14,
7062 0x15,0x14,0x15,0x14,0x15,0x14,0x14,0x95,0x95,0x14,0x15,0x14,0x95,0x9D,0x9D,0x9D,
7063 0x9D,0x9D,0x95,0x14,0x15,0x14,0x14,0x14,0x15,0x14,0x15,0x14,0x95,0x95,0x14,0x14,
7064 0x15,0x14,0x15,0x14,0x15,0x14,0x95,0x9D,0x9D,0x95,0x15,0x14,0x15,0x95,0x9D,0x9D,
7065 0x95,0x14,0x15,0x14,0x15,0x14,0x14,0x95,0x9D,0x95,0x15,0x14,0x15,0x14,0x14,0x14,
7066 0x15,0x14,0x95,0x9D,0x9D,0x90,0x98,0x92,0x01,0x95,0x01,0x95,0x94,0x98,0x95,0x01,
7067 0x98,0x98,0x92,0x96,0x01,0x98,0x95,0x98,0x98,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
7068 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7069 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x98,0x98,0x9D,0x9D,0x98,0x98,0x9D,0x9D,0x9F,
7070 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7071 0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
7072 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,
7073 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,
7074 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
7075 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x96,0x95,
7076 0x93,0x95,0x98,0x93,0x95,0x92,0x98,0x95,0x96,0x98,0x94,0x94,0x9F,0x9F,0x9D,0x9D,
7077 0x90,0x98,0x99,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
7078 0x1F,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x15,0x15,
7079 0x15,0x95,0x15,0x15,0x15,0x95,0x9D,0x95,0x15,0x15,0x15,0x95,0x15,0x15,0x15,0x95,
7080 0x9D,0x95,0x15,0x15,0x15,0x95,0x15,0x15,0x15,0x95,0x9D,0x95,0x15,0x15,0x15,0x95,
7081 0x15,0x15,0x15,0x95,0x9D,0x95,0x15,0x15,0x15,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x15,
7082 0x15,0x15,0x95,0x95,0x95,0x15,0x15,0x15,0x95,0x15,0x15,0x15,0x95,0x9D,0x9D,0x9D,
7083 0x9D,0x9D,0x95,0x15,0x15,0x15,0x95,0x95,0x95,0x15,0x15,0x15,0x95,0x95,0x95,0x95,
7084 0x95,0x95,0x95,0x15,0x15,0x15,0x95,0x9D,0x9D,0x95,0x15,0x15,0x15,0x95,0x9D,0x9D,
7085 0x95,0x15,0x15,0x15,0x95,0x95,0x95,0x9D,0x9D,0x95,0x15,0x15,0x15,0x15,0x15,0x15,
7086 0x95,0x95,0x9D,0x9D,0x9D,0x90,0x98,0x98,0x95,0x98,0x01,0x98,0x93,0x95,0x92,0x97,
7087 0x94,0x95,0x94,0x96,0x94,0x98,0x96,0x95,0x96,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
7088 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7089 0x98,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
7090 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7091 0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
7092 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,
7093 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,
7094 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
7095 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x90,0x94,0x96,0x95,
7096 0x96,0x96,0x91,0x98,0x93,0x8E,0x8E,0x01,0x96,0x96,0x98,0x94,0x9F,0x9F,0x9D,0x9D,
7097 0x91,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
7098 0x99,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x95,0x16,0x16,0x16,0x95,0x95,0x95,0x16,0x15,
7099 0x16,0x95,0x16,0x15,0x16,0x95,0x95,0x95,0x16,0x16,0x16,0x95,0x16,0x16,0x16,0x95,
7100 0x95,0x95,0x16,0x15,0x16,0x95,0x16,0x15,0x16,0x95,0x9D,0x95,0x16,0x16,0x16,0x95,
7101 0x16,0x16,0x16,0x95,0x95,0x95,0x16,0x15,0x16,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x15,
7102 0x16,0x16,0x95,0x95,0x95,0x16,0x16,0x15,0x95,0x16,0x16,0x15,0x95,0x95,0x95,0x95,
7103 0x95,0x95,0x95,0x15,0x16,0x16,0x95,0x9D,0x95,0x16,0x16,0x15,0x95,0x16,0x16,0x15,
7104 0x95,0x95,0x95,0x15,0x16,0x16,0x95,0x9D,0x9D,0x95,0x16,0x15,0x16,0x95,0x9D,0x9D,
7105 0x95,0x16,0x16,0x15,0x95,0x95,0x95,0x95,0x95,0x95,0x16,0x15,0x16,0x16,0x16,0x15,
7106 0x16,0x95,0x9D,0x9D,0x9D,0x90,0x93,0x01,0x96,0x98,0x92,0x98,0x01,0x98,0x95,0x94,
7107 0x98,0x01,0x01,0x92,0x96,0x99,0x98,0x01,0x91,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
7108 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,
7109 0x17,0x17,0x98,0x98,0x98,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
7110 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7111 0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
7112 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
7113 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,
7114 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
7115 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x96,0x8E,
7116 0x8E,0x96,0x95,0x94,0x92,0x8E,0x94,0x8E,0x98,0x01,0x01,0x98,0x9F,0x9F,0x9D,0x9D,
7117 0x94,0x9B,0x9D,0x9D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
7118 0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9D,0x95,0x17,0x17,0x16,0x17,0x17,0x17,0x17,0x17,
7119 0x17,0x95,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x95,0x17,0x17,0x17,0x17,
7120 0x17,0x17,0x16,0x17,0x17,0x95,0x17,0x17,0x17,0x95,0x9D,0x95,0x17,0x17,0x17,0x95,
7121 0x17,0x17,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x17,
7122 0x17,0x17,0x16,0x17,0x17,0x17,0x17,0x17,0x95,0x17,0x16,0x17,0x17,0x17,0x17,0x17,
7123 0x17,0x17,0x95,0x17,0x17,0x17,0x95,0x9D,0x95,0x17,0x16,0x17,0x95,0x17,0x17,0x17,
7124 0x17,0x17,0x16,0x17,0x17,0x17,0x95,0x9D,0x9D,0x95,0x16,0x17,0x17,0x95,0x9D,0x9D,
7125 0x95,0x17,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x95,0x16,0x17,0x17,0x95,0x17,0x17,
7126 0x17,0x17,0x95,0x9D,0x9D,0x90,0x96,0x95,0x94,0x01,0x98,0x94,0x95,0x92,0x97,0x96,
7127 0x95,0x01,0x96,0x98,0x96,0x96,0x01,0x95,0x96,0x93,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
7128 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,
7129 0x17,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x17,0x17,0x98,0x9D,0x9F,
7130 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7131 0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
7132 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
7133 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,
7134 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
7135 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x93,0x95,0x92,
7136 0x96,0x95,0x95,0x98,0x98,0x01,0x98,0x96,0x98,0x01,0x94,0x96,0x9F,0x9F,0x9D,0x9D,
7137 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
7138 0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9D,0x9D,0x95,0x17,0x18,0x17,0x18,0x17,0x18,0x17,
7139 0x95,0x9D,0x95,0x17,0x18,0x17,0x18,0x17,0x18,0x17,0x95,0x9D,0x95,0x17,0x18,0x17,
7140 0x18,0x17,0x18,0x17,0x95,0x95,0x18,0x17,0x18,0x95,0x9D,0x95,0x18,0x17,0x18,0x95,
7141 0x18,0x17,0x18,0x17,0x18,0x17,0x18,0x17,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x17,
7142 0x18,0x17,0x18,0x17,0x18,0x17,0x18,0x95,0x95,0x17,0x18,0x17,0x18,0x17,0x18,0x17,
7143 0x18,0x17,0x95,0x17,0x18,0x17,0x95,0x9D,0x95,0x17,0x18,0x17,0x95,0x95,0x18,0x17,
7144 0x18,0x17,0x18,0x17,0x18,0x95,0x9D,0x9D,0x9D,0x95,0x18,0x17,0x18,0x95,0x9D,0x9D,
7145 0x95,0x17,0x18,0x17,0x18,0x17,0x18,0x17,0x18,0x95,0x18,0x17,0x18,0x95,0x95,0x17,
7146 0x18,0x17,0x18,0x95,0x9D,0x90,0x95,0x95,0x95,0x95,0x01,0x98,0x94,0x98,0x01,0x98,
7147 0x98,0x98,0x98,0x01,0x01,0x98,0x98,0x95,0x98,0x96,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
7148 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,
7149 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
7150 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7151 0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
7152 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
7153 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x98,
7154 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
7155 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x93,0x01,0x98,
7156 0x95,0x94,0x98,0x95,0x01,0x98,0x01,0x95,0x95,0x98,0x98,0x95,0x9F,0x9F,0x9D,0x9D,
7157 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7158 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,
7159 0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,
7160 0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x9D,
7161 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,
7162 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,
7163 0x95,0x95,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,
7164 0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x9D,
7165 0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x95,
7166 0x95,0x95,0x95,0x9D,0x9D,0x90,0x95,0x01,0x95,0x98,0x96,0x01,0x98,0x98,0x98,0x96,
7167 0x95,0x98,0x98,0x95,0x95,0x98,0x95,0x98,0x93,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
7168 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,
7169 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x9F,
7170 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7171 0x98,0x17,0x17,0x98,0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
7172 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
7173 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x98,0x98,0x98,
7174 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
7175 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x01,0x98,
7176 0x93,0x8E,0x94,0x95,0x98,0x98,0x95,0x98,0x98,0x97,0x98,0x96,0x9F,0x9F,0x9D,0x9D,
7177 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7178 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7179 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7180 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7181 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7182 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7183 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7184 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7185 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7186 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x01,0x94,0x98,0x98,0x01,0x96,0x98,0x94,0x98,0x95,
7187 0x96,0x99,0x96,0x98,0x95,0x98,0x95,0x94,0x92,0x92,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
7188 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7189 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x9D,
7190 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7191 0x98,0x17,0x17,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
7192 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,
7193 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x17,0x17,0x98,
7194 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,
7195 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x95,0x96,
7196 0x95,0x01,0x98,0x98,0x95,0x01,0x94,0x96,0x96,0x94,0x93,0x96,0x9F,0x9F,0x9D,0x9D,
7197 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7198 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7199 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7200 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7201 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7202 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7203 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7204 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7205 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7206 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x99,0x98,0x98,0x98,0x98,0x98,0x01,0x98,0x96,
7207 0x98,0x98,0x96,0x98,0x98,0x98,0x95,0x95,0x01,0x92,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
7208 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7209 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x9D,0x9D,0x9A,
7210 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7211 0x9D,0x98,0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
7212 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,
7213 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x98,0x98,0x9D,
7214 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,
7215 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x90,0x96,0x01,0x96,
7216 0x95,0x95,0x96,0x98,0x01,0x93,0x96,0x95,0x96,0x96,0x98,0x96,0x99,0x95,0x94,0x95,
7217 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x94,0x94,0x94,0x94,0x94,
7218 0x94,0x94,0x94,0x94,0x94,0x94,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,
7219 0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x92,0x92,0x92,0x92,
7220 0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,
7221 0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,
7222 0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,
7223 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
7224 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
7225 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
7226 0x90,0x90,0x90,0x90,0x90,0x90,0x01,0x95,0x98,0x01,0x98,0x01,0x01,0x99,0x9A,0x96,
7227 0x98,0x01,0x96,0x94,0x95,0x92,0x92,0x95,0x94,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
7228 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7229 0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
7230 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7231 0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
7232 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,
7233 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x9D,0x9D,
7234 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9F,
7235 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9A,0x9D,0x9D,0x9D,0x9D,0x90,0x01,0x96,0x97,
7236 0x94,0x95,0x95,0x98,0x98,0x98,0x95,0x96,0x98,0x98,0x94,0x01,0x94,0x01,0x01,0x93,
7237 0x95,0x97,0x95,0x97,0x96,0x94,0x98,0x97,0x01,0x97,0x95,0x98,0x96,0x96,0x95,0x97,
7238 0x98,0x98,0x95,0x95,0x98,0x01,0x98,0x01,0x01,0x98,0x01,0x98,0x98,0x98,0x98,0x98,
7239 0x98,0x96,0x98,0x99,0x96,0x95,0x98,0x98,0x94,0x98,0x98,0x01,0x94,0x98,0x96,0x98,
7240 0x99,0x95,0x95,0x99,0x97,0x94,0x98,0x96,0x95,0x95,0x94,0x96,0x01,0x98,0x98,0x96,
7241 0x96,0x95,0x96,0x96,0x98,0x95,0x94,0x98,0x92,0x95,0x92,0x8E,0x8E,0x92,0x96,0x95,
7242 0x95,0x92,0x8E,0x92,0x95,0x01,0x95,0x95,0x96,0x98,0x96,0x95,0x95,0x96,0x95,0x98,
7243 0x98,0x98,0x98,0x99,0x98,0x99,0x99,0x98,0x98,0x96,0x98,0x96,0x94,0x94,0x94,0x94,
7244 0x98,0x93,0x94,0x95,0x01,0x94,0x95,0x94,0x96,0x96,0x93,0x96,0x95,0x96,0x95,0x96,
7245 0x98,0x98,0x01,0x94,0x98,0x98,0x94,0x92,0x95,0x98,0x98,0x98,0x98,0x95,0x99,0x98,
7246 0x93,0x98,0x98,0x98,0x01,0x98,0x98,0x98,0x9A,0x01,0x98,0x98,0x9A,0x01,0x98,0x9B,
7247 0x01,0x95,0x96,0x96,0x01,0x94,0x95,0x98,0x96,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
7248 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,
7249 0x17,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
7250 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7251 0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
7252 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,
7253 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x9D,
7254 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
7255 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x97,0x95,
7256 0x94,0x94,0x01,0x92,0x98,0x98,0x97,0x01,0x01,0x97,0x98,0x95,0x95,0x95,0x01,0x98,
7257 0x96,0x01,0x01,0x01,0x98,0x01,0x93,0x96,0x01,0x01,0x95,0x01,0x98,0x01,0x98,0x01,
7258 0x98,0x96,0x01,0x98,0x98,0x98,0x94,0x97,0x98,0x98,0x98,0x01,0x98,0x96,0x98,0x96,
7259 0x98,0x98,0x98,0x98,0x98,0x01,0x9A,0x9A,0x99,0x99,0x95,0x98,0x99,0x99,0x98,0x96,
7260 0x99,0x98,0x01,0x01,0x96,0x01,0x95,0x8E,0x93,0x95,0x01,0x8E,0x96,0x8E,0x94,0x8E,
7261 0x8E,0x95,0x8E,0x92,0x8E,0x92,0x92,0x93,0x8E,0x92,0x8E,0x92,0x96,0x94,0x93,0x8E,
7262 0x8E,0x01,0x8E,0x94,0x92,0x96,0x95,0x01,0x01,0x95,0x98,0x95,0x94,0x98,0x98,0x98,
7263 0x98,0x96,0x99,0x98,0x98,0x98,0x94,0x01,0x99,0x98,0x98,0x95,0x96,0x93,0x95,0x93,
7264 0x95,0x98,0x98,0x96,0x95,0x96,0x96,0x98,0x94,0x93,0x96,0x98,0x98,0x95,0x98,0x98,
7265 0x98,0x94,0x98,0x95,0x95,0x92,0x01,0x94,0x95,0x98,0x9A,0x01,0x98,0x99,0x01,0x98,
7266 0x95,0x98,0x98,0x98,0x98,0x01,0x98,0x01,0x98,0x99,0x98,0x95,0x94,0x99,0x01,0x98,
7267 0x01,0x92,0x94,0x93,0x95,0x98,0x93,0x8E,0x95,0x96,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
7268 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7269 0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
7270 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7271 0x9D,0x9D,0x98,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
7272 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
7273 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x98,0x98,
7274 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
7275 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x96,0x98,0x96,
7276 0x95,0x98,0x94,0x96,0x96,0x98,0x01,0x01,0x98,0x95,0x98,0x94,0x01,0x94,0x95,0x01,
7277 0x01,0x01,0x94,0x96,0x96,0x96,0x92,0x96,0x98,0x96,0x95,0x98,0x96,0x95,0x96,0x96,
7278 0x98,0x94,0x96,0x94,0x95,0x95,0x98,0x98,0x98,0x98,0x98,0x99,0x01,0x94,0x98,0x98,
7279 0x98,0x01,0x96,0x98,0x98,0x98,0x01,0x9A,0x98,0x98,0x98,0x95,0x96,0x99,0x96,0x01,
7280 0x95,0x96,0x91,0x93,0x94,0x94,0x95,0x94,0x96,0x92,0x94,0x96,0x98,0x94,0x94,0x92,
7281 0x01,0x98,0x94,0x94,0x01,0x94,0x94,0x93,0x8E,0x92,0x95,0x92,0x93,0x94,0x8E,0x01,
7282 0x95,0x95,0x94,0x94,0x94,0x01,0x94,0x01,0x98,0x93,0x96,0x96,0x93,0x98,0x96,0x95,
7283 0x98,0x98,0x98,0x99,0x9A,0x98,0x96,0x95,0x98,0x95,0x95,0x95,0x96,0x94,0x94,0x95,
7284 0x96,0x95,0x98,0x98,0x95,0x95,0x99,0x95,0x9A,0x98,0x99,0x98,0x98,0x96,0x95,0x98,
7285 0x01,0x95,0x96,0x01,0x01,0x98,0x98,0x9A,0x94,0x95,0x98,0x99,0x99,0x98,0x96,0x96,
7286 0x98,0x98,0x96,0x94,0x95,0x92,0x97,0x96,0x98,0x98,0x01,0x98,0x97,0x01,0x98,0x98,
7287 0x98,0x96,0x01,0x95,0x98,0x94,0x8E,0x95,0x98,0x94,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
7288 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7289 0x9D,0x98,0x17,0x17,0x17,0x98,0x9D,0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
7290 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7291 0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
7292 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
7293 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,
7294 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
7295 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x01,0x96,0x01,
7296 0x93,0x95,0x96,0x98,0x96,0x01,0x95,0x01,0x96,0x96,0x96,0x96,0x95,0x98,0x96,0x96,
7297 0x95,0x94,0x96,0x95,0x96,0x01,0x98,0x96,0x94,0x96,0x96,0x96,0x96,0x92,0x01,0x01,
7298 0x96,0x98,0x98,0x98,0x01,0x98,0x98,0x98,0x99,0x96,0x01,0x94,0x98,0x01,0x95,0x98,
7299 0x98,0x98,0x98,0x01,0x98,0x99,0x95,0x9A,0x99,0x01,0x98,0x96,0x96,0x96,0x95,0x93,
7300 0x01,0x94,0x94,0x92,0x98,0x92,0x98,0x96,0x96,0x96,0x96,0x94,0x98,0x95,0x01,0x98,
7301 0x98,0x95,0x96,0x93,0x92,0x96,0x8E,0x8E,0x92,0x93,0x93,0x93,0x8E,0x8E,0x92,0x95,
7302 0x98,0x01,0x01,0x98,0x94,0x95,0x98,0x98,0x98,0x98,0x98,0x01,0x99,0x01,0x98,0x97,
7303 0x96,0x96,0x98,0x98,0x98,0x98,0x97,0x98,0x94,0x96,0x98,0x94,0x98,0x96,0x96,0x99,
7304 0x98,0x01,0x01,0x95,0x98,0x95,0x96,0x94,0x99,0x01,0x9A,0x98,0x01,0x94,0x98,0x98,
7305 0x95,0x94,0x98,0x98,0x99,0x98,0x99,0x98,0x95,0x93,0x95,0x01,0x96,0x94,0x98,0x98,
7306 0x98,0x97,0x94,0x95,0x96,0x01,0x96,0x93,0x95,0x94,0x01,0x97,0x98,0x01,0x98,0x01,
7307 0x99,0x94,0x98,0x01,0x92,0x92,0x01,0x93,0x94,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
7308 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7309 0x9D,0x9D,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9F,
7310 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7311 0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
7312 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
7313 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,
7314 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
7315 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x94,0x95,0x95,
7316 0x94,0x96,0x95,0x95,0x96,0x98,0x96,0x96,0x98,0x96,0x01,0x96,0x94,0x98,0x95,0x96,
7317 0x01,0x96,0x96,0x96,0x95,0x96,0x94,0x01,0x96,0x94,0x96,0x95,0x98,0x98,0x98,0x98,
7318 0x98,0x95,0x95,0x98,0x98,0x95,0x95,0x99,0x98,0x98,0x98,0x98,0x98,0x01,0x95,0x98,
7319 0x98,0x98,0x99,0x95,0x99,0x98,0x9A,0x99,0x98,0x01,0x94,0x93,0x95,0x94,0x95,0x96,
7320 0x96,0x94,0x96,0x94,0x96,0x98,0x94,0x98,0x96,0x95,0x98,0x98,0x95,0x92,0x95,0x96,
7321 0x92,0x8E,0x8E,0x8E,0x96,0x95,0x8E,0x8E,0x8E,0x92,0x92,0x91,0x8E,0x95,0x95,0x94,
7322 0x98,0x01,0x95,0x95,0x98,0x99,0x01,0x98,0x98,0x96,0x98,0x98,0x98,0x96,0x95,0x95,
7323 0x98,0x9A,0x98,0x98,0x01,0x94,0x01,0x94,0x01,0x97,0x96,0x95,0x95,0x99,0x95,0x98,
7324 0x96,0x98,0x98,0x95,0x98,0x93,0x98,0x98,0x95,0x98,0x98,0x95,0x01,0x96,0x98,0x95,
7325 0x96,0x95,0x01,0x95,0x96,0x95,0x97,0x95,0x96,0x01,0x98,0x96,0x94,0x98,0x98,0x98,
7326 0x94,0x95,0x95,0x01,0x96,0x98,0x95,0x95,0x95,0x98,0x92,0x01,0x01,0x95,0x93,0x98,
7327 0x92,0x95,0x98,0x01,0x8E,0x95,0x94,0x94,0x95,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
7328 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7329 0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9F,
7330 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7331 0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,
7332 0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,
7333 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x98,0x98,
7334 0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x9D,0x9F,
7335 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x98,0x9D,0x9D,0x9D,0x9D,0x90,0x96,0x96,0x98,
7336 0x96,0x98,0x98,0x96,0x98,0x96,0x95,0x94,0x95,0x98,0x98,0x98,0x9F,0x9F,0x9F,0x9F,
7337 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
7338 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
7339 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
7340 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
7341 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
7342 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
7343 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
7344 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
7345 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
7346 0x9F,0x9F,0x9F,0x9F,0x9F,0x97,0x95,0x96,0x98,0x96,0x95,0x94,0x95,0x92,0x95,0x8E,
7347 0x95,0x94,0x94,0x93,0x93,0x92,0x92,0x93,0x01,0x93,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
7348 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,
7349 0x17,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,
7350 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7351 0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,
7352 0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,
7353 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,
7354 0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x98,0x17,0x17,0x17,0x17,0x98,0x9D,0x9D,0x9D,
7355 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x96,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x95,0x95,
7356 0x98,0x94,0x95,0x98,0x01,0x98,0x96,0x98,0x94,0x95,0x95,0x95,0x9F,0x9F,0x9F,0x9F,
7357 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
7358 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
7359 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
7360 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
7361 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
7362 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
7363 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
7364 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
7365 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
7366 0x9F,0x9F,0x9F,0x9F,0x9F,0x94,0x95,0x98,0x93,0x93,0x94,0x95,0x98,0x98,0x94,0x98,
7367 0x96,0x95,0x93,0x92,0x94,0x93,0x98,0x96,0x92,0x92,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
7368 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7369 0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,0x98,0x98,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9A,
7370 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7371 0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,
7372 0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,
7373 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,
7374 0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x98,0x98,0x98,0x98,0x9D,0x9D,0x9D,0x9A,
7375 0x98,0x98,0x98,0x98,0x98,0x98,0x96,0x93,0x9D,0x9D,0x9D,0x9D,0x90,0x96,0x94,0x96,
7376 0x96,0x95,0x01,0x96,0x94,0x96,0x96,0x01,0x95,0x95,0x92,0x01,0x9F,0x9F,0x9D,0x9D,
7377 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7378 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7379 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7380 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7381 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7382 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7383 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7384 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7385 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7386 0x9D,0x9D,0x9D,0x9D,0x9D,0x91,0x94,0x98,0x98,0x95,0x98,0x98,0x93,0x95,0x98,0x98,
7387 0x01,0x8E,0x8E,0x92,0x94,0x94,0x93,0x8E,0x92,0x92,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
7388 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7389 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7390 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7391 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7392 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7393 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7394 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7395 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x96,0x95,
7396 0x01,0x95,0x98,0x96,0x94,0x01,0x96,0x92,0x96,0x95,0x95,0x96,0x9F,0x9F,0x9D,0x9D,
7397 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7398 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,
7399 0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x9D,
7400 0x9D,0x9D,0x95,0x95,0x95,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x9D,
7401 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7402 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,
7403 0x95,0x9D,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x9D,0x95,0x95,0x95,
7404 0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,
7405 0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7406 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x92,0x92,0x95,0x97,0x98,0x98,0x96,0x98,0x98,
7407 0x95,0x8E,0x92,0x95,0x01,0x01,0x8E,0x8E,0x96,0x8E,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
7408 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x9D,0x9D,
7409 0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x9D,0x95,0x95,0x9D,0x9D,0x95,0x95,0x9D,
7410 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7411 0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x9D,0x9D,
7412 0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7413 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x9D,0x9D,0x95,0x95,0x9D,
7414 0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,
7415 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x01,0x95,0x92,
7416 0x92,0x96,0x96,0x95,0x95,0x96,0x94,0x95,0x96,0x96,0x95,0x96,0x9F,0x9F,0x9D,0x9D,
7417 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7418 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
7419 0x95,0x9D,0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x95,0x95,0x10,0x10,0x10,0x95,
7420 0x9D,0x95,0x10,0x10,0x10,0x95,0x10,0x10,0x10,0x95,0x9D,0x95,0x10,0x10,0x10,0x95,
7421 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,
7422 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x95,0x9D,0x95,0x10,0x10,0x10,0x10,0x10,0x10,
7423 0x10,0x95,0x95,0x10,0x10,0x10,0x95,0x9D,0x95,0x10,0x10,0x10,0x95,0x10,0x10,0x10,
7424 0x10,0x10,0x10,0x10,0x10,0x95,0x9D,0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x95,
7425 0x95,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7426 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x01,0x97,0x99,0x96,0x98,0x94,0x97,0x94,0x96,0x96,
7427 0x8E,0x8E,0x94,0x92,0x92,0x92,0x8E,0x96,0x92,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
7428 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x14,0x95,0x9D,0x9D,0x95,0x14,0x95,0x95,
7429 0x14,0x14,0x14,0x14,0x95,0x95,0x14,0x14,0x95,0x14,0x14,0x95,0x95,0x14,0x14,0x95,
7430 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7431 0x95,0x14,0x14,0x14,0x14,0x14,0x14,0x95,0x14,0x95,0x9D,0x9D,0x95,0x14,0x95,0x95,
7432 0x14,0x14,0x14,0x14,0x14,0x14,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7433 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x14,0x14,0x95,0x95,0x14,0x14,0x95,
7434 0x14,0x95,0x9D,0x9D,0x95,0x14,0x95,0x95,0x14,0x14,0x14,0x14,0x14,0x14,0x95,0x9D,
7435 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x01,0x95,
7436 0x01,0x98,0x01,0x96,0x95,0x96,0x96,0x96,0x95,0x98,0x01,0x01,0x9F,0x9F,0x9D,0x9D,
7437 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
7438 0x90,0x90,0x91,0x94,0x9F,0x9D,0x9D,0x95,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,
7439 0x10,0x95,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x95,0x10,0x11,0x10,0x95,
7440 0x9D,0x95,0x10,0x11,0x10,0x95,0x10,0x11,0x10,0x11,0x95,0x95,0x10,0x11,0x10,0x95,
7441 0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x11,
7442 0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x95,0x11,0x10,0x11,0x10,0x11,0x10,0x11,
7443 0x10,0x11,0x95,0x11,0x10,0x11,0x95,0x9D,0x95,0x11,0x10,0x11,0x95,0x11,0x10,0x11,
7444 0x10,0x11,0x10,0x11,0x10,0x11,0x95,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,
7445 0x95,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7446 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x98,0x98,0x97,0x98,0x97,0x93,0x97,0x96,0x98,
7447 0x92,0x92,0x95,0x95,0x95,0x95,0x94,0x98,0x95,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
7448 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x14,0x14,0x95,0x95,0x14,0x14,0x95,0x14,
7449 0x14,0x95,0x95,0x14,0x14,0x95,0x14,0x14,0x95,0x14,0x14,0x14,0x95,0x14,0x14,0x95,
7450 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7451 0x95,0x14,0x14,0x95,0x95,0x95,0x95,0x95,0x14,0x14,0x95,0x95,0x14,0x14,0x95,0x14,
7452 0x14,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7453 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x14,0x14,0x14,0x14,0x95,0x95,
7454 0x14,0x14,0x95,0x95,0x14,0x14,0x95,0x14,0x14,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,
7455 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x96,0x94,0x96,
7456 0x95,0x95,0x93,0x96,0x95,0x95,0x98,0x96,0x98,0x98,0x94,0x98,0x9F,0x9F,0x9D,0x9D,
7457 0x90,0x90,0x93,0x96,0x98,0x98,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
7458 0x99,0x99,0x99,0x9D,0x9F,0x9D,0x9D,0x95,0x12,0x12,0x12,0x95,0x95,0x95,0x12,0x11,
7459 0x12,0x95,0x12,0x11,0x12,0x95,0x95,0x95,0x12,0x12,0x12,0x95,0x12,0x12,0x12,0x95,
7460 0x9D,0x95,0x12,0x11,0x12,0x95,0x12,0x11,0x12,0x12,0x12,0x95,0x12,0x12,0x12,0x95,
7461 0x12,0x12,0x12,0x95,0x95,0x95,0x12,0x11,0x12,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x11,
7462 0x12,0x12,0x95,0x95,0x95,0x12,0x12,0x11,0x95,0x12,0x12,0x11,0x95,0x95,0x95,0x11,
7463 0x12,0x12,0x95,0x11,0x12,0x12,0x95,0x9D,0x95,0x12,0x12,0x11,0x95,0x12,0x12,0x11,
7464 0x95,0x95,0x95,0x11,0x12,0x12,0x95,0x11,0x12,0x12,0x95,0x95,0x95,0x12,0x12,0x11,
7465 0x95,0x12,0x12,0x11,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7466 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x96,0x98,0x01,0x94,0x98,0x97,0x94,0x98,0x95,0x95,
7467 0x94,0x95,0x94,0x95,0x95,0x96,0x95,0x95,0x01,0x95,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
7468 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x14,0x14,0x14,0x14,0x14,0x14,0x95,0x14,
7469 0x14,0x14,0x14,0x14,0x14,0x95,0x14,0x14,0x95,0x14,0x14,0x14,0x14,0x14,0x14,0x95,
7470 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7471 0x95,0x14,0x14,0x14,0x14,0x14,0x95,0x95,0x14,0x14,0x14,0x14,0x14,0x14,0x95,0x95,
7472 0x14,0x14,0x14,0x14,0x14,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7473 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x14,0x14,0x95,0x9D,0x95,
7474 0x14,0x14,0x14,0x14,0x14,0x14,0x95,0x95,0x14,0x14,0x14,0x14,0x14,0x95,0x9D,0x9D,
7475 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x94,0x96,
7476 0x95,0x98,0x96,0x94,0x96,0x95,0x94,0x96,0x94,0x96,0x98,0x98,0x9F,0x9F,0x9D,0x9D,
7477 0x90,0x93,0x96,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
7478 0x00,0x99,0x99,0x9D,0x9F,0x9D,0x9D,0x95,0x12,0x13,0x12,0x95,0x95,0x95,0x95,0x95,
7479 0x95,0x95,0x12,0x13,0x12,0x95,0x9D,0x95,0x12,0x13,0x12,0x95,0x12,0x13,0x12,0x95,
7480 0x9D,0x95,0x12,0x13,0x12,0x95,0x12,0x13,0x12,0x13,0x12,0x13,0x12,0x13,0x12,0x95,
7481 0x12,0x13,0x12,0x95,0x9D,0x95,0x12,0x13,0x12,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x13,
7482 0x12,0x13,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x13,0x12,0x13,0x95,0x9D,0x95,0x13,
7483 0x12,0x13,0x95,0x13,0x12,0x13,0x95,0x9D,0x95,0x13,0x12,0x13,0x95,0x13,0x12,0x13,
7484 0x95,0x95,0x95,0x13,0x12,0x13,0x95,0x13,0x12,0x13,0x95,0x9D,0x9D,0x95,0x95,0x95,
7485 0x95,0x13,0x12,0x13,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7486 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x97,0x95,0x92,0x96,0x97,0x98,0x98,0x98,0x98,0x95,
7487 0x93,0x96,0x96,0x95,0x98,0x98,0x98,0x98,0x98,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
7488 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x14,0x14,0x14,0x14,0x14,0x14,0x95,0x14,
7489 0x14,0x95,0x95,0x14,0x14,0x95,0x14,0x14,0x95,0x14,0x14,0x95,0x14,0x14,0x14,0x95,
7490 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7491 0x95,0x14,0x14,0x95,0x95,0x95,0x95,0x95,0x14,0x14,0x14,0x14,0x14,0x14,0x95,0x95,
7492 0x95,0x95,0x95,0x95,0x14,0x14,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7493 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x14,0x14,0x14,0x14,0x95,0x95,
7494 0x14,0x14,0x14,0x14,0x14,0x14,0x95,0x95,0x95,0x95,0x95,0x95,0x14,0x14,0x95,0x9D,
7495 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x94,0x01,0x98,
7496 0x01,0x96,0x98,0x96,0x93,0x95,0x01,0x96,0x96,0x94,0x01,0x98,0x9F,0x9F,0x9D,0x9D,
7497 0x90,0x96,0x98,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
7498 0x1F,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x95,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x13,
7499 0x95,0x95,0x13,0x13,0x13,0x95,0x9D,0x95,0x13,0x13,0x13,0x95,0x13,0x13,0x14,0x95,
7500 0x9D,0x95,0x13,0x13,0x13,0x95,0x14,0x13,0x13,0x95,0x13,0x13,0x13,0x13,0x14,0x95,
7501 0x13,0x13,0x13,0x95,0x9D,0x95,0x14,0x13,0x13,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x13,
7502 0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x95,0x95,0x13,0x13,0x13,0x95,0x9D,0x95,0x13,
7503 0x13,0x13,0x95,0x13,0x13,0x13,0x95,0x9D,0x95,0x13,0x13,0x13,0x95,0x13,0x14,0x13,
7504 0x13,0x13,0x13,0x13,0x13,0x13,0x95,0x13,0x13,0x13,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,
7505 0x95,0x13,0x13,0x13,0x13,0x13,0x14,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7506 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x97,0x94,0x98,0x97,0x94,0x92,0x95,0x94,0x94,0x95,
7507 0x98,0x96,0x95,0x93,0x98,0x01,0x01,0x98,0x94,0x01,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
7508 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x14,0x14,0x95,0x95,0x14,0x14,0x95,0x14,
7509 0x14,0x95,0x95,0x14,0x14,0x95,0x14,0x14,0x95,0x14,0x14,0x95,0x95,0x14,0x14,0x95,
7510 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7511 0x95,0x14,0x14,0x14,0x14,0x14,0x14,0x95,0x14,0x14,0x95,0x95,0x14,0x14,0x95,0x14,
7512 0x14,0x14,0x14,0x14,0x14,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7513 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x14,0x14,0x95,0x95,0x14,0x14,0x95,
7514 0x14,0x14,0x95,0x95,0x14,0x14,0x95,0x14,0x14,0x14,0x14,0x14,0x14,0x95,0x9D,0x9D,
7515 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x94,0x96,
7516 0x96,0x98,0x01,0x01,0x01,0x95,0x98,0x95,0x98,0x01,0x98,0x98,0x9F,0x9F,0x9D,0x9D,
7517 0x90,0x98,0x98,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
7518 0x1F,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x9D,0x95,0x14,0x14,0x15,0x14,0x15,0x14,0x15,
7519 0x14,0x95,0x14,0x15,0x14,0x95,0x9D,0x95,0x14,0x14,0x14,0x95,0x14,0x15,0x14,0x95,
7520 0x9D,0x95,0x14,0x15,0x14,0x95,0x14,0x15,0x14,0x95,0x95,0x15,0x14,0x15,0x14,0x95,
7521 0x14,0x14,0x14,0x95,0x9D,0x95,0x14,0x15,0x14,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,
7522 0x14,0x14,0x14,0x15,0x14,0x15,0x14,0x15,0x95,0x14,0x14,0x15,0x95,0x9D,0x95,0x15,
7523 0x14,0x14,0x95,0x15,0x14,0x15,0x95,0x9D,0x95,0x14,0x14,0x15,0x95,0x15,0x14,0x15,
7524 0x14,0x14,0x14,0x15,0x14,0x95,0x95,0x15,0x14,0x14,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,
7525 0x95,0x14,0x14,0x15,0x14,0x15,0x14,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7526 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x93,0x96,0x98,0x97,0x98,0x96,0x98,0x95,0x01,
7527 0x96,0x98,0x98,0x01,0x96,0x92,0x01,0x91,0x95,0x92,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
7528 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x9D,0x9D,0x95,0x95,0x9D,0x95,
7529 0x95,0x9D,0x9D,0x95,0x95,0x9D,0x95,0x95,0x9D,0x95,0x95,0x9D,0x9D,0x95,0x95,0x9D,
7530 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7531 0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x95,0x95,0x9D,0x9D,0x95,0x95,0x9D,0x95,
7532 0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7533 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x9D,0x9D,0x95,0x95,0x9D,
7534 0x95,0x95,0x9D,0x9D,0x95,0x95,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,
7535 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x98,0x95,
7536 0x98,0x96,0x98,0x95,0x96,0x99,0x98,0x01,0x96,0x96,0x98,0x01,0x9F,0x9F,0x9D,0x9D,
7537 0x90,0x98,0x99,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
7538 0x1F,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x15,0x15,
7539 0x15,0x95,0x15,0x15,0x15,0x95,0x9D,0x95,0x15,0x15,0x15,0x95,0x15,0x15,0x15,0x95,
7540 0x9D,0x95,0x15,0x15,0x15,0x95,0x15,0x15,0x15,0x95,0x9D,0x95,0x15,0x15,0x15,0x95,
7541 0x15,0x15,0x15,0x95,0x9D,0x95,0x15,0x15,0x15,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,
7542 0x95,0x95,0x95,0x95,0x95,0x15,0x15,0x15,0x95,0x15,0x15,0x15,0x95,0x9D,0x95,0x15,
7543 0x15,0x15,0x95,0x15,0x15,0x15,0x95,0x9D,0x95,0x15,0x15,0x15,0x95,0x15,0x15,0x15,
7544 0x15,0x15,0x15,0x95,0x95,0x9D,0x95,0x15,0x15,0x15,0x95,0x9D,0x9D,0x95,0x95,0x95,
7545 0x95,0x15,0x15,0x15,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7546 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x94,0x98,0x98,0x98,0x01,0x97,0x96,0x95,0x01,0x95,
7547 0x8E,0x96,0x98,0x96,0x95,0x92,0x96,0x95,0x92,0x01,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
7548 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7549 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7550 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7551 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7552 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7553 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7554 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7555 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x94,0x96,
7556 0x98,0x95,0x95,0x98,0x99,0x94,0x98,0x98,0x98,0x01,0x98,0x96,0x9F,0x9F,0x9D,0x9D,
7557 0x91,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
7558 0x99,0x99,0x99,0x9F,0x9F,0x9D,0x9D,0x95,0x16,0x16,0x15,0x95,0x95,0x95,0x15,0x16,
7559 0x16,0x95,0x15,0x16,0x16,0x95,0x95,0x95,0x16,0x16,0x15,0x95,0x16,0x16,0x15,0x95,
7560 0x95,0x95,0x15,0x16,0x16,0x95,0x15,0x16,0x16,0x95,0x9D,0x95,0x16,0x16,0x15,0x95,
7561 0x16,0x16,0x15,0x95,0x95,0x95,0x15,0x16,0x16,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x16,
7562 0x16,0x16,0x95,0x95,0x95,0x16,0x15,0x16,0x95,0x16,0x15,0x16,0x95,0x95,0x95,0x16,
7563 0x16,0x16,0x95,0x16,0x16,0x16,0x95,0x95,0x95,0x16,0x15,0x16,0x95,0x16,0x15,0x16,
7564 0x16,0x16,0x15,0x16,0x95,0x9D,0x95,0x16,0x16,0x16,0x95,0x95,0x95,0x16,0x15,0x16,
7565 0x95,0x16,0x15,0x16,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7566 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x95,0x96,0x95,0x94,0x98,0x95,0x95,0x94,0x94,
7567 0x8E,0x95,0x94,0x93,0x93,0x93,0x95,0x94,0x91,0x94,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
7568 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7569 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7570 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7571 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7572 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7573 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7574 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7575 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x97,0x95,
7576 0x01,0x98,0x98,0x96,0x98,0x95,0x01,0x98,0x95,0x95,0x96,0x96,0x9F,0x9F,0x9D,0x9D,
7577 0x94,0x9B,0x9D,0x9D,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
7578 0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9D,0x95,0x17,0x17,0x17,0x17,0x17,0x16,0x17,0x17,
7579 0x17,0x95,0x17,0x17,0x17,0x16,0x17,0x17,0x17,0x17,0x17,0x95,0x17,0x16,0x17,0x17,
7580 0x17,0x17,0x17,0x17,0x17,0x95,0x17,0x17,0x17,0x95,0x9D,0x95,0x17,0x16,0x17,0x95,
7581 0x17,0x17,0x17,0x17,0x17,0x16,0x17,0x17,0x17,0x95,0x9D,0x9D,0x9D,0x9D,0x95,0x17,
7582 0x17,0x17,0x17,0x17,0x17,0x16,0x17,0x17,0x95,0x17,0x17,0x17,0x17,0x16,0x17,0x17,
7583 0x17,0x17,0x95,0x17,0x17,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x95,0x16,0x17,0x17,
7584 0x95,0x17,0x17,0x17,0x17,0x95,0x95,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x17,0x17,
7585 0x95,0x17,0x17,0x17,0x17,0x16,0x17,0x17,0x17,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7586 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x96,0x96,0x95,0x98,0x93,0x95,0x95,0x93,0x93,0x95,
7587 0x8E,0x95,0x92,0x93,0x94,0x95,0x92,0x01,0x93,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
7588 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7589 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7590 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7591 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7592 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7593 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7594 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7595 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x95,0x94,0x99,
7596 0x01,0x99,0x96,0x97,0x95,0x01,0x94,0x98,0x94,0x01,0x92,0x95,0x9F,0x9F,0x9D,0x9D,
7597 0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,
7598 0x9F,0x9F,0x9F,0x9F,0x9F,0x9D,0x9D,0x9D,0x95,0x18,0x17,0x18,0x17,0x18,0x17,0x18,
7599 0x95,0x9D,0x95,0x18,0x17,0x18,0x17,0x18,0x17,0x18,0x95,0x9D,0x95,0x18,0x17,0x18,
7600 0x17,0x18,0x17,0x18,0x95,0x95,0x17,0x18,0x17,0x95,0x9D,0x95,0x17,0x18,0x17,0x95,
7601 0x17,0x18,0x17,0x18,0x17,0x18,0x17,0x18,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,
7602 0x17,0x18,0x17,0x18,0x17,0x18,0x17,0x95,0x9D,0x95,0x17,0x18,0x17,0x18,0x17,0x18,
7603 0x17,0x95,0x9D,0x95,0x17,0x18,0x17,0x18,0x17,0x18,0x17,0x95,0x95,0x18,0x17,0x18,
7604 0x95,0x95,0x17,0x18,0x17,0x18,0x95,0x95,0x17,0x18,0x17,0x18,0x17,0x18,0x17,0x95,
7605 0x95,0x18,0x17,0x18,0x17,0x18,0x17,0x18,0x17,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7606 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x94,0x98,0x95,0x95,0x92,0x01,0x93,0x95,0x98,0x95,
7607 0x94,0x93,0x95,0x93,0x94,0x96,0x94,0x96,0x98,0x96,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
7608 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7609 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7610 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7611 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7612 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7613 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7614 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7615 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x98,0x95,
7616 0x98,0x98,0x98,0x98,0x98,0x94,0x01,0x95,0x95,0x96,0x94,0x96,0x9F,0x9F,0x9D,0x9D,
7617 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7618 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,
7619 0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,
7620 0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x9D,
7621 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7622 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,
7623 0x95,0x9D,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,
7624 0x9D,0x9D,0x95,0x95,0x95,0x95,0x9D,0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,
7625 0x9D,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7626 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x93,0x92,0x98,0x94,0x95,0x95,0x92,0x98,0x97,0x94,
7627 0x93,0x93,0x93,0x93,0x93,0x98,0x94,0x98,0x98,0x98,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
7628 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7629 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7630 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7631 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7632 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7633 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7634 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7635 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x01,0x01,0x98,
7636 0x95,0x95,0x93,0x98,0x01,0x01,0x01,0x01,0x97,0x98,0x98,0x95,0x9F,0x9F,0x9D,0x9D,
7637 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7638 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7639 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7640 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7641 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7642 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7643 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7644 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7645 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7646 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x92,0x93,0x95,0x95,0x97,0x96,0x93,0x98,0x96,0x01,
7647 0x94,0x92,0x92,0x92,0x01,0x98,0x94,0x97,0x96,0x97,0x9F,0x9F,0x9D,0x9D,0x9D,0x9D,
7648 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7649 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7650 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7651 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7652 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7653 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7654 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7655 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x95,0x01,
7656 0x01,0x01,0x95,0x94,0x95,0x94,0x98,0x98,0x96,0x95,0x01,0x95,0x9F,0x9F,0x9D,0x9D,
7657 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7658 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7659 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7660 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7661 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7662 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7663 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7664 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7665 0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,0x9D,
7666 0x9D,0x9D,0x9D,0x9D,0x9D,0x90,0x98,0x94,0x95,0x92,0x01,0x97,0x01,0x92,0x98,0x95,
7667 0x95,0x95,0x95,0x98,0x95,0x98,0x98,0x98,0x98,0x92,0x96,0x96,0x96,0x95,0x95,0x95,
7668 0x95,0x95,0x95,0x95,0x94,0x94,0x94,0x94,0x94,0x94,0x94,0x94,0x94,0x93,0x93,0x93,
7669 0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,
7670 0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x91,0x91,0x91,0x91,
7671 0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,
7672 0x91,0x91,0x91,0x91,0x91,0x91,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
7673 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
7674 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
7675 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x98,0x95,0x94,
7676 0x95,0x98,0x98,0x96,0x96,0x98,0x98,0x01,0x01,0x95,0x96,0x01,0x99,0x95,0x94,0x95,
7677 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x94,0x94,0x94,0x94,0x94,
7678 0x94,0x94,0x94,0x94,0x94,0x94,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,
7679 0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x92,0x92,0x92,0x92,
7680 0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,
7681 0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,
7682 0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,
7683 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
7684 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
7685 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
7686 0x90,0x90,0x90,0x90,0x90,0x90,0x98,0x94,0x98,0x96,0x96,0x97,0x92,0x98,0x98,0x98,
7687 0x98,0x93,0x98,0x95,0x01,0x95,0x98,0x01,0x92,0x96,0x94,0x92,0x92,0x93,0x01,0x95,
7688 0x92,0x96,0x95,0x93,0x92,0x94,0x94,0x96,0x92,0x93,0x98,0x96,0x95,0x98,0x98,0x93,
7689 0x92,0x95,0x8E,0x92,0x8E,0x94,0x92,0x93,0x8E,0x8E,0x92,0x8E,0x92,0x95,0x8E,0x95,
7690 0x8E,0x8E,0x95,0x92,0x94,0x92,0x92,0x8E,0x8E,0x8E,0x8E,0x8E,0x92,0x91,0x8E,0x8E,
7691 0x8E,0x91,0x93,0x93,0x92,0x95,0x94,0x95,0x98,0x01,0x98,0x95,0x95,0x99,0x98,0x96,
7692 0x94,0x98,0x95,0x98,0x98,0x98,0x94,0x96,0x96,0x94,0x95,0x98,0x96,0x94,0x95,0x94,
7693 0x97,0x97,0x95,0x97,0x95,0x01,0x98,0x96,0x01,0x96,0x01,0x98,0x98,0x98,0x93,0x99,
7694 0x01,0x01,0x98,0x98,0x96,0x99,0x98,0x98,0x96,0x98,0x95,0x96,0x98,0x98,0x99,0x98,
7695 0x95,0x98,0x95,0x01,0x98,0x99,0x99,0x95,0x98,0x96,0x96,0x01,0x9A,0x01,0x98,0x96,
7696 0x9A,0x98,0x98,0x96,0x98,0x95,0x95,0x98,0x98,0x95,0x95,0x96,0x01,0x93,0x94,0x95,
7697 0x93,0x94,0x92,0x8E,0x8E,0x01,0x95,0x8E,0x92,0x8E,0x8E,0x96,0x8E,0x8E,0x96,0x95,
7698 0x98,0x93,0x95,0x94,0x93,0x96,0x96,0x98,0x01,0x96,0x94,0x94,0x96,0x95,0x96,0x95,
7699 0x98,0x98,0x01,0x96,0x93,0x96,0x01,0x96,0x96,0x95,0x98,0x99,0x01,0x98,0x97,0x96,
7700 0x95,0x98,0x93,0x93,0x93,0x94,0x92,0x92,0x95,0x91,0x92,0x95,0x96,0x95,0x94,0x98,
7701 0x94,0x95,0x95,0x95,0x98,0x95,0x95,0x95,0x94,0x98,0x98,0x97,0x93,0x96,0x01,0x94,
7702 0x94,0x94,0x95,0x94,0x95,0x95,0x94,0x92,0x98,0x94,0x94,0x96,0x96,0x95,0x98,0x95,
7703 0x96,0x99,0x98,0x01,0x98,0x01,0x96,0x98,0x98,0x01,0x9A,0x98,0x98,0x94,0x98,0x96,
7704 0x96,0x01,0x95,0x96,0x98,0x97,0x95,0x99,0x98,0x98,0x94,0x98,0x96,0x98,0x01,0x98,
7705 0x01,0x01,0x94,0x95,0x93,0x93,0x01,0x94,0x98,0x94,0x01,0x92,0x96,0x96,0x95,0x95,
7706 0x98,0x95,0x98,0x98,0x01,0x97,0x95,0x95,0x94,0x95,0x97,0x97,0x95,0x93,0x94,0x97,
7707 0x93,0x01,0x96,0x95,0x96,0x96,0x96,0x92,0x01,0x95,0x01,0x95,0x98,0x98,0x95,0x95,
7708 0x01,0x95,0x94,0x95,0x95,0x98,0x98,0x98,0x94,0x01,0x98,0x98,0x95,0x95,0x94,0x94,
7709 0x94,0x95,0x8E,0x93,0x92,0x93,0x92,0x95,0x95,0x94,0x95,0x95,0x98,0x95,0x98,0x92,
7710 0x94,0x94,0x94,0x93,0x95,0x96,0x01,0x95,0x92,0x95,0x8E,0x94,0x8E,0x8E,0x94,0x93,
7711 0x94,0x92,0x92,0x94,0x95,0x94,0x94,0x98,0x95,0x92,0x93,0x98,0x98,0x95,0x98,0x96,
7712 0x96,0x93,0x98,0x95,0x95,0x95,0x95,0x95,0x95,0x96,0x95,0x96,0x96,0x98,0x98,0x98,
7713 0x99,0x98,0x98,0x01,0x99,0x98,0x96,0x99,0x01,0x95,0x98,0x01,0x99,0x99,0x99,0x98,
7714 0x98,0x94,0x01,0x98,0x98,0x98,0x96,0x96,0x01,0x98,0x99,0x01,0x99,0x01,0x99,0x96,
7715 0x98,0x99,0x95,0x98,0x99,0x94,0x01,0x99,0x9A,0x9A,0x98,0x01,0x01,0x99,0x98,0x01,
7716 0x99,0x9A,0x98,0x98,0x98,0x96,0x95,0x99,0x96,0x95,0x98,0x94,0x94,0x96,0x93,0x8E,
7717 0x92,0x8E,0x01,0x8E,0x95,0x95,0x8E,0x8E,0x95,0x92,0x92,0x8E,0x92,0x98,0x95,0x95,
7718 0x95,0x95,0x95,0x96,0x98,0x96,0x98,0x98,0x95,0x95,0x98,0x98,0x01,0x98,0x98,0x95,
7719 0x95,0x98,0x98,0x96,0x01,0x96,0x98,0x96,0x98,0x98,0x98,0x98,0x98,0x01,0x95,0x94,
7720 0x95,0x95,0x94,0x91,0x93,0x94,0x01,0x94,0x92,0x94,0x95,0x95,0x95,0x94,0x92,0x95,
7721 0x98,0x01,0x01,0x96,0x96,0x95,0x01,0x98,0x98,0x98,0x96,0x96,0x96,0x93,0x98,0x95,
7722 0x95,0x93,0x97,0x98,0x94,0x98,0x97,0x98,0x93,0x01,0x96,0x98,0x98,0x99,0x01,0x98,
7723 0x98,0x98,0x99,0x9A,0x95,0x95,0x9A,0x98,0x96,0x99,0x99,0x98,0x95,0x98,0x93,0x95,
7724 0x95,0x97,0x95,0x96,0x96,0x98,0x99,0x98,0x01,0x01,0x98,0x98,0x01,0x01,0x01,0x01,
7725 0x95,0x95,0x95,0x95,0x96,0x92,0x94,0x95,0x98,0x98,0x94,0x94,0x92,0x96,0x94,0x98,
7726 0x95,0x94,0x94,0x94,0x01,0x97,0x94,0x93,0x98,0x94,0x97,0x96,0x98,0x94,0x95,0x01,
7727 0x01,0x98,0x95,0x94,0x92,0x93,0x98,0x95,0x95,0x01,0x95,0x92,0x95,0x94,0x96,0x94,
7728 0x96,0x96,0x94,0x95,0x96,0x96,0x95,0x01,0x95,0x93,0x96,0x95,0x95,0x92,0x94,0x92,
7729 0x8E,0x8E,0x8E,0x98,0x92,0x98,0x96,0x94,0x96,0x96,0x96,0x96,0x01,0x96,0x98,0x01,
7730 0x94,0x98,0x95,0x01,0x98,0x01,0x95,0x95,0x95,0x95,0x01,0x94,0x92,0x94,0x93,0x94,
7731 0x96,0x96,0x01,0x95,0x94,0x96,0x94,0x96,0x98,0x95,0x98,0x94,0x97,0x98,0x92,0x96,
7732 0x96,0x94,0x94,0x95,0x95,0x94,0x93,0x95,0x01,0x95,0x01,0x95,0x96,0x98,0x98,0x98,
7733 0x99,0x98,0x98,0x99,0x95,0x9A,0x99,0x99,0x9A,0x98,0x99,0x98,0x9A,0x98,0x01,0x98,
7734 0x96,0x98,0x94,0x94,0x98,0x95,0x98,0x96,0x99,0x98,0x9A,0x98,0x9A,0x9A,0x01,0x99,
7735 0x99,0x98,0x95,0x99,0x98,0x96,0x99,0x98,0x96,0x94,0x96,0x95,0x94,0x98,0x01,0x95,
7736 0x01,0x01,0x01,0x96,0x98,0x95,0x95,0x96,0x94,0x94,0x95,0x95,0x92,0x94,0x93,0x8E,
7737 0x93,0x94,0x95,0x92,0x98,0x96,0x93,0x8E,0x93,0x95,0x93,0x95,0x95,0x96,0x98,0x96,
7738 0x96,0x98,0x98,0x94,0x94,0x94,0x96,0x01,0x98,0x95,0x97,0x98,0x01,0x01,0x98,0x98,
7739 0x98,0x98,0x96,0x98,0x98,0x01,0x99,0x98,0x99,0x95,0x95,0x96,0x95,0x96,0x93,0x92,
7740 0x94,0x96,0x93,0x93,0x91,0x01,0x92,0x94,0x98,0x94,0x96,0x94,0x95,0x95,0x94,0x95,
7741 0x96,0x95,0x95,0x93,0x96,0x01,0x98,0x01,0x96,0x95,0x94,0x94,0x93,0x95,0x96,0x98,
7742 0x96,0x95,0x98,0x96,0x98,0x96,0x9A,0x9A,0x9A,0x9A,0x9A,0x98,0x96,0x9A,0x9A,0x98,
7743 0x98,0x98,0x96,0x98,0x9A,0x98,0x98,0x98,0x95,0x99,0x99,0x98,0x96,0x95,0x98,0x98,
7744 0x98,0x98,0x99,0x97,0x01,0x98,0x01,0x94,0x01,0x98,0x96,0x94,0x94,0x96,0x94,0x95,
7745 0x98,0x98,0x95,0x94,0x98,0x95,0x94,0x96,0x92,0x95,0x95,0x98,0x01,0x95,0x94,0x92,
7746 0x93,0x98,0x96,0x01,0x95,0x97,0x95,0x98,0x94,0x94,0x95,0x97,0x98,0x98,0x94,0x01,
7747 0x98,0x98,0x95,0x92,0x94,0x96,0x92,0x95,0x93,0x94,0x95,0x95,0x98,0x96,0x98,0x96,
7748 0x96,0x98,0x95,0x01,0x95,0x98,0x01,0x98,0x98,0x94,0x95,0x01,0x95,0x95,0x8E,0x8E,
7749 0x8E,0x95,0x95,0x95,0x98,0x98,0x01,0x96,0x96,0x95,0x93,0x94,0x95,0x98,0x93,0x93,
7750 0x93,0x98,0x95,0x96,0x98,0x95,0x94,0x95,0x95,0x95,0x98,0x95,0x96,0x92,0x96,0x01,
7751 0x94,0x92,0x95,0x98,0x98,0x95,0x98,0x01,0x01,0x91,0x95,0x01,0x95,0x95,0x01,0x96,
7752 0x98,0x95,0x94,0x01,0x92,0x94,0x98,0x98,0x94,0x96,0x94,0x94,0x01,0x01,0x98,0x98,
7753 0x98,0x98,0x95,0x95,0x94,0x98,0x98,0x98,0x01,0x95,0x98,0x98,0x01,0x96,0x93,0x97,
7754 0x95,0x95,0x94,0x97,0x94,0x98,0x01,0x95,0x98,0x95,0x92,0x94,0x98,0x98,0x94,0x95,
7755 0x96,0x96,0x92,0x95,0x95,0x01,0x96,0x96,0x96,0x96,0x96,0x01,0x94,0x01,0x93,0x95,
7756 0x95,0x96,0x98,0x94,0x95,0x94,0x95,0x93,0x95,0x96,0x96,0x01,0x98,0x98,0x96,0x01,
7757 0x95,0x98,0x99,0x99,0x98,0x98,0x01,0x98,0x01,0x99,0x99,0x98,0x98,0x96,0x98,0x95,
7758 0x98,0x01,0x95,0x98,0x98,0x96,0x98,0x01,0x96,0x98,0x96,0x98,0x96,0x98,0x98,0x98,
7759 0x98,0x99,0x99,0x98,0x98,0x98,0x98,0x98,0x97,0x95,0x95,0x93,0x92,0x96,0x95,0x96,
7760 0x94,0x98,0x98,0x93,0x95,0x93,0x96,0x92,0x92,0x95,0x95,0x95,0x94,0x93,0x92,0x93,
7761 0x93,0x95,0x95,0x95,0x96,0x93,0x93,0x95,0x94,0x98,0x93,0x01,0x94,0x01,0x96,0x95,
7762 0x99,0x96,0x98,0x99,0x01,0x99,0x96,0x98,0x01,0x01,0x98,0x98,0x96,0x95,0x98,0x99,
7763 0x9A,0x9A,0x98,0x9A,0x98,0x98,0x99,0x98,0x96,0x95,0x99,0x96,0x98,0x9A,0x98,0x9A,
7764 0x9A,0x9A,0x99,0x95,0x93,0x96,0x93,0x98,0x94,0x92,0x98,0x01,0x95,0x92,0x96,0x95,
7765 0x92,0x96,0x95,0x95,0x94,0x01,0x98,0x95,0x95,0x95,0x95,0x94,0x97,0x98,0x96,0x96,
7766 0x95,0x92,0x01,0x95,0x97,0x95,0x98,0x94,0x01,0x93,0x95,0x95,0x98,0x01,0x96,0x8E,
7767 0x95,0x95,0x95,0x93,0x01,0x95,0x98,0x98,0x95,0x01,0x96,0x93,0x95,0x94,0x98,0x98,
7768 0x01,0x01,0x98,0x98,0x95,0x95,0x98,0x98,0x98,0x95,0x96,0x95,0x8E,0x93,0x8E,0x93,
7769 0x98,0x01,0x98,0x94,0x01,0x98,0x96,0x95,0x95,0x92,0x94,0x94,0x93,0x93,0x01,0x93,
7770 0x93,0x93,0x95,0x95,0x93,0x95,0x94,0x96,0x94,0x95,0x93,0x95,0x94,0x96,0x95,0x94,
7771 0x95,0x95,0x92,0x98,0x97,0x96,0x96,0x96,0x95,0x98,0x96,0x98,0x95,0x98,0x98,0x94,
7772 0x96,0x01,0x94,0x92,0x01,0x01,0x98,0x99,0x96,0x96,0x98,0x94,0x95,0x93,0x95,0x98,
7773 0x95,0x98,0x98,0x93,0x96,0x97,0x97,0x95,0x96,0x98,0x94,0x94,0x98,0x01,0x98,0x01,
7774 0x98,0x98,0x98,0x98,0x95,0x95,0x95,0x98,0x94,0x96,0x96,0x95,0x96,0x98,0x96,0x95,
7775 0x95,0x95,0x94,0x94,0x94,0x95,0x93,0x01,0x95,0x95,0x92,0x93,0x94,0x95,0x95,0x93,
7776 0x8E,0x93,0x92,0x94,0x8E,0x8E,0x92,0x8E,0x8E,0x94,0x96,0x98,0x01,0x98,0x98,0x98,
7777 0x95,0x95,0x96,0x01,0x98,0x95,0x95,0x99,0x98,0x99,0x99,0x99,0x95,0x98,0x98,0x98,
7778 0x95,0x01,0x95,0x98,0x95,0x01,0x95,0x98,0x98,0x01,0x98,0x96,0x01,0x96,0x98,0x95,
7779 0x98,0x98,0x98,0x98,0x98,0x96,0x96,0x98,0x96,0x95,0x95,0x95,0x95,0x96,0x97,0x95,
7780 0x96,0x98,0x96,0x95,0x96,0x97,0x94,0x95,0x98,0x93,0x95,0x94,0x95,0x01,0x92,0x96,
7781 0x95,0x95,0x96,0x95,0x95,0x96,0x01,0x96,0x96,0x95,0x95,0x96,0x98,0x97,0x96,0x95,
7782 0x95,0x92,0x97,0x98,0x97,0x94,0x97,0x93,0x94,0x96,0x96,0x01,0x95,0x94,0x98,0x98,
7783 0x94,0x97,0x96,0x98,0x92,0x97,0x98,0x98,0x96,0x98,0x94,0x98,0x98,0x94,0x01,0x98,
7784 0x99,0x98,0x96,0x98,0x94,0x98,0x01,0x96,0x98,0x01,0x94,0x96,0x94,0x98,0x96,0x95,
7785 0x01,0x94,0x95,0x96,0x97,0x96,0x95,0x96,0x01,0x95,0x97,0x98,0x95,0x95,0x96,0x96,
7786 0x94,0x98,0x95,0x98,0x95,0x98,0x96,0x96,0x98,0x01,0x01,0x98,0x92,0x95,0x01,0x98,
7787 0x95,0x94,0x96,0x93,0x98,0x98,0x96,0x95,0x98,0x98,0x95,0x98,0x95,0x95,0x95,0x01,
7788 0x95,0x95,0x93,0x93,0x96,0x95,0x95,0x93,0x95,0x94,0x95,0x92,0x8E,0x94,0x98,0x95,
7789 0x96,0x94,0x98,0x96,0x95,0x95,0x95,0x94,0x92,0x95,0x01,0x92,0x98,0x93,0x92,0x95,
7790 0x01,0x93,0x92,0x94,0x92,0x93,0x94,0x92,0x95,0x92,0x94,0x94,0x95,0x93,0x95,0x96,
7791 0x95,0x94,0x95,0x92,0x97,0x94,0x95,0x01,0x01,0x94,0x98,0x01,0x01,0x98,0x95,0x98,
7792 0x01,0x98,0x95,0x95,0x01,0x98,0x01,0x96,0x98,0x94,0x97,0x01,0x01,0x95,0x96,0x98,
7793 0x98,0x95,0x96,0x96,0x96,0x94,0x01,0x96,0x94,0x95,0x98,0x92,0x94,0x96,0x96,0x98,
7794 0x17,0x17,0x17,0x17,0x98,0x95,0x96,0x96,0x93,0x01,0x93,0x93,0x01,0x96,0x95,0x94,
7795 0x95,0x93,0x95,0x95,0x96,0x96,0x95,0x91,0x96,0x93,0x92,0x92,0x94,0x95,0x91,0x94,
7796 0x92,0x93,0x8E,0x8E,0x8E,0x95,0x92,0x91,0x95,0x93,0x92,0x94,0x96,0x95,0x95,0x01,
7797 0x98,0x98,0x93,0x98,0x01,0x98,0x95,0x01,0x92,0x93,0x94,0x96,0x95,0x98,0x96,0x97,
7798 0x95,0x98,0x98,0x98,0x98,0x01,0x98,0x17,0x17,0x98,0x01,0x98,0x98,0x96,0x94,0x95,
7799 0x94,0x95,0x96,0x98,0x96,0x94,0x95,0x01,0x98,0x01,0x94,0x95,0x98,0x92,0x01,0x98,
7800 0x98,0x98,0x98,0x01,0x98,0x98,0x96,0x98,0x9A,0x95,0x99,0x98,0x95,0x97,0x97,0x95,
7801 0x98,0x95,0x98,0x98,0x95,0x95,0x98,0x92,0x98,0x94,0x95,0x95,0x96,0x96,0x94,0x96,
7802 0x98,0x92,0x96,0x95,0x01,0x98,0x01,0x98,0x92,0x92,0x98,0x01,0x98,0x98,0x01,0x96,
7803 0x92,0x94,0x95,0x95,0x95,0x98,0x95,0x96,0x96,0x95,0x93,0x01,0x01,0x94,0x98,0x96,
7804 0x01,0x98,0x99,0x98,0x98,0x98,0x01,0x98,0x01,0x96,0x9A,0x9A,0x96,0x96,0x98,0x9A,
7805 0x95,0x98,0x96,0x01,0x98,0x94,0x97,0x93,0x96,0x98,0x01,0x95,0x95,0x97,0x96,0x01,
7806 0x98,0x96,0x96,0x01,0x95,0x96,0x01,0x98,0x94,0x01,0x01,0x94,0x95,0x96,0x97,0x98,
7807 0x93,0x95,0x01,0x98,0x94,0x94,0x95,0x94,0x96,0x95,0x95,0x95,0x94,0x96,0x95,0x95,
7808 0x93,0x92,0x94,0x95,0x98,0x93,0x92,0x92,0x96,0x94,0x96,0x95,0x93,0x92,0x94,0x95,
7809 0x96,0x95,0x95,0x95,0x01,0x95,0x98,0x93,0x93,0x93,0x95,0x93,0x94,0x95,0x92,0x95,
7810 0x01,0x92,0x95,0x94,0x92,0x95,0x92,0x95,0x95,0x95,0x94,0x92,0x93,0x95,0x01,0x95,
7811 0x95,0x98,0x94,0x96,0x95,0x98,0x94,0x01,0x98,0x01,0x94,0x98,0x96,0x01,0x01,0x93,
7812 0x94,0x92,0x97,0x01,0x98,0x96,0x01,0x01,0x98,0x94,0x94,0x95,0x01,0x94,0x96,0x01,
7813 0x01,0x98,0x96,0x96,0x92,0x96,0x01,0x95,0x96,0x96,0x94,0x96,0x01,0x96,0x98,0x17,
7814 0x17,0x98,0x98,0x17,0x17,0x98,0x94,0x98,0x98,0x98,0x98,0x98,0x01,0x93,0x94,0x93,
7815 0x98,0x98,0x98,0x98,0x95,0x94,0x01,0x95,0x94,0x92,0x93,0x95,0x95,0x93,0x93,0x98,
7816 0x98,0x8E,0x93,0x94,0x98,0x98,0x94,0x95,0x98,0x98,0x98,0x98,0x98,0x01,0x94,0x98,
7817 0x98,0x93,0x01,0x01,0x98,0x98,0x94,0x94,0x98,0x98,0x98,0x98,0x95,0x96,0x01,0x98,
7818 0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x17,0x17,0x98,0x98,0x98,0x96,0x98,0x95,0x94,
7819 0x92,0x96,0x96,0x96,0x95,0x96,0x96,0x98,0x98,0x01,0x96,0x98,0x97,0x98,0x98,0x95,
7820 0x98,0x01,0x98,0x98,0x96,0x98,0x98,0x98,0x96,0x95,0x98,0x97,0x94,0x94,0x93,0x01,
7821 0x95,0x94,0x96,0x98,0x01,0x95,0x96,0x98,0x01,0x98,0x95,0x01,0x01,0x94,0x01,0x95,
7822 0x01,0x96,0x95,0x01,0x98,0x92,0x95,0x01,0x96,0x94,0x01,0x01,0x95,0x98,0x93,0x96,
7823 0x95,0x94,0x96,0x96,0x01,0x94,0x95,0x96,0x01,0x94,0x95,0x96,0x91,0x95,0x01,0x97,
7824 0x95,0x98,0x96,0x96,0x98,0x98,0x01,0x98,0x98,0x96,0x95,0x01,0x98,0x01,0x01,0x98,
7825 0x99,0x01,0x9A,0x99,0x98,0x96,0x94,0x98,0x96,0x96,0x95,0x95,0x98,0x94,0x95,0x96,
7826 0x94,0x98,0x94,0x98,0x01,0x96,0x98,0x94,0x95,0x01,0x94,0x98,0x98,0x98,0x98,0x95,
7827 0x95,0x92,0x98,0x92,0x93,0x94,0x93,0x96,0x01,0x92,0x92,0x96,0x98,0x92,0x01,0x93,
7828 0x94,0x93,0x95,0x92,0x93,0x93,0x01,0x93,0x8E,0x92,0x92,0x96,0x96,0x93,0x95,0x94,
7829 0x95,0x94,0x92,0x93,0x01,0x96,0x93,0x92,0x95,0x93,0x92,0x92,0x94,0x91,0x95,0x95,
7830 0x01,0x95,0x94,0x94,0x93,0x95,0x95,0x01,0x95,0x93,0x96,0x01,0x94,0x95,0x92,0x96,
7831 0x95,0x01,0x94,0x01,0x01,0x01,0x95,0x98,0x95,0x95,0x98,0x98,0x94,0x95,0x98,0x98,
7832 0x96,0x99,0x01,0x96,0x98,0x99,0x98,0x98,0x98,0x01,0x94,0x94,0x98,0x98,0x96,0x95,
7833 0x95,0x94,0x01,0x98,0x94,0x95,0x96,0x95,0x96,0x95,0x94,0x96,0x96,0x96,0x98,0x17,
7834 0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x92,0x92,0x98,
7835 0x17,0x17,0x17,0x17,0x98,0x95,0x93,0x92,0x96,0x95,0x94,0x98,0x96,0x96,0x98,0x17,
7836 0x17,0x98,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x98,0x98,0x98,0x17,
7837 0x17,0x98,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x98,0x96,0x98,0x17,
7838 0x17,0x17,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x17,0x17,0x98,0x95,0x95,0x01,
7839 0x01,0x94,0x95,0x96,0x96,0x95,0x98,0x98,0x97,0x98,0x96,0x95,0x95,0x98,0x95,0x95,
7840 0x96,0x98,0x92,0x98,0x96,0x01,0x94,0x94,0x92,0x96,0x94,0x98,0x94,0x98,0x95,0x01,
7841 0x01,0x95,0x01,0x98,0x01,0x98,0x01,0x98,0x94,0x94,0x98,0x95,0x96,0x01,0x96,0x01,
7842 0x95,0x94,0x01,0x94,0x95,0x95,0x95,0x98,0x96,0x01,0x94,0x98,0x92,0x01,0x95,0x01,
7843 0x92,0x96,0x98,0x95,0x01,0x98,0x01,0x95,0x98,0x96,0x96,0x96,0x01,0x98,0x01,0x98,
7844 0x01,0x97,0x94,0x98,0x01,0x96,0x01,0x95,0x99,0x01,0x98,0x9A,0x9A,0x95,0x98,0x9B,
7845 0x98,0x98,0x9A,0x98,0x9A,0x01,0x99,0x95,0x96,0x9D,0x98,0x9D,0x98,0x96,0x9B,0x98,
7846 0x01,0x95,0x9B,0x9D,0x9B,0x94,0x01,0x95,0x97,0x01,0x94,0x98,0x98,0x98,0x98,0x98,
7847 0x93,0x98,0x96,0x95,0x95,0x92,0x93,0x93,0x95,0x93,0x96,0x94,0x93,0x95,0x95,0x94,
7848 0x93,0x98,0x92,0x94,0x95,0x95,0x94,0x92,0x92,0x92,0x98,0x93,0x96,0x92,0x95,0x95,
7849 0x92,0x91,0x94,0x96,0x94,0x95,0x93,0x98,0x95,0x94,0x01,0x98,0x96,0x98,0x93,0x94,
7850 0x93,0x92,0x93,0x94,0x96,0x01,0x98,0x93,0x93,0x96,0x96,0x96,0x96,0x01,0x95,0x96,
7851 0x95,0x94,0x95,0x94,0x98,0x01,0x94,0x95,0x96,0x98,0x99,0x99,0x98,0x96,0x01,0x95,
7852 0x98,0x98,0x98,0x98,0x01,0x01,0x98,0x98,0x01,0x95,0x95,0x94,0x98,0x94,0x96,0x96,
7853 0x01,0x94,0x95,0x94,0x95,0x93,0x96,0x94,0x96,0x95,0x94,0x01,0x96,0x95,0x98,0x17,
7854 0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,
7855 0x17,0x98,0x98,0x17,0x17,0x98,0x01,0x93,0x94,0x92,0x96,0x8E,0x93,0x8E,0x98,0x17,
7856 0x17,0x17,0x17,0x17,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,
7857 0x17,0x17,0x17,0x17,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,
7858 0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x98,0x01,0x96,0x98,0x96,
7859 0x96,0x01,0x95,0x92,0x01,0x98,0x95,0x98,0x95,0x98,0x98,0x95,0x98,0x96,0x01,0x95,
7860 0x98,0x01,0x95,0x98,0x96,0x94,0x96,0x96,0x01,0x95,0x96,0x98,0x94,0x96,0x96,0x96,
7861 0x98,0x01,0x96,0x01,0x01,0x98,0x01,0x01,0x96,0x96,0x95,0x01,0x92,0x95,0x01,0x96,
7862 0x96,0x94,0x96,0x01,0x92,0x93,0x01,0x95,0x98,0x94,0x96,0x01,0x01,0x95,0x01,0x92,
7863 0x98,0x01,0x98,0x01,0x98,0x95,0x01,0x01,0x01,0x93,0x98,0x96,0x95,0x98,0x01,0x98,
7864 0x95,0x94,0x95,0x96,0x98,0x98,0x96,0x97,0x95,0x01,0x96,0x99,0x99,0x98,0x95,0x98,
7865 0x99,0x98,0x01,0x98,0x98,0x01,0x96,0x98,0x98,0x9D,0x99,0x9D,0x98,0x9B,0x9D,0x01,
7866 0x96,0x98,0x9C,0x98,0x9C,0x97,0x95,0x01,0x94,0x98,0x98,0x98,0x98,0x98,0x01,0x98,
7867 0x96,0x98,0x96,0x92,0x93,0x94,0x95,0x95,0x92,0x93,0x93,0x91,0x96,0x94,0x95,0x95,
7868 0x98,0x96,0x93,0x95,0x92,0x92,0x95,0x92,0x8E,0x92,0x93,0x94,0x98,0x95,0x95,0x93,
7869 0x93,0x92,0x96,0x93,0x96,0x95,0x92,0x92,0x94,0x92,0x95,0x96,0x95,0x94,0x92,0x94,
7870 0x96,0x01,0x01,0x95,0x95,0x94,0x96,0x94,0x93,0x95,0x98,0x94,0x98,0x01,0x01,0x95,
7871 0x95,0x95,0x96,0x96,0x01,0x99,0x96,0x99,0x96,0x95,0x96,0x99,0x99,0x95,0x94,0x94,
7872 0x01,0x98,0x96,0x96,0x98,0x96,0x01,0x95,0x98,0x96,0x96,0x98,0x93,0x98,0x01,0x96,
7873 0x96,0x95,0x96,0x91,0x01,0x96,0x01,0x96,0x96,0x95,0x96,0x95,0x01,0x94,0x98,0x17,
7874 0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,
7875 0x17,0x17,0x17,0x17,0x17,0x98,0x94,0x95,0x98,0x8E,0x92,0x91,0x92,0x93,0x98,0x17,
7876 0x17,0x98,0x17,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,
7877 0x17,0x98,0x17,0x98,0x17,0x17,0x98,0x17,0x17,0x17,0x17,0x17,0x17,0x98,0x98,0x17,
7878 0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x01,0x93,0x94,0x98,0x96,0x95,
7879 0x98,0x98,0x01,0x95,0x96,0x98,0x98,0x97,0x98,0x98,0x98,0x98,0x93,0x96,0x96,0x95,
7880 0x98,0x98,0x94,0x98,0x96,0x98,0x92,0x96,0x96,0x96,0x98,0x96,0x96,0x95,0x01,0x98,
7881 0x93,0x96,0x01,0x95,0x98,0x95,0x01,0x95,0x96,0x96,0x98,0x01,0x01,0x94,0x98,0x98,
7882 0x94,0x96,0x95,0x95,0x95,0x92,0x98,0x95,0x01,0x01,0x95,0x98,0x95,0x98,0x01,0x96,
7883 0x96,0x98,0x01,0x98,0x98,0x93,0x93,0x95,0x98,0x01,0x01,0x96,0x95,0x95,0x96,0x95,
7884 0x98,0x94,0x98,0x94,0x98,0x94,0x96,0x98,0x95,0x95,0x97,0x95,0x98,0x98,0x01,0x98,
7885 0x98,0x96,0x98,0x98,0x01,0x98,0x96,0x98,0x98,0x9D,0x98,0x9D,0x9A,0x98,0x9D,0x99,
7886 0x96,0x96,0x9D,0x96,0x9D,0x01,0x98,0x97,0x94,0x98,0x98,0x98,0x98,0x98,0x98,0x98,
7887 0x93,0x95,0x96,0x93,0x93,0x95,0x93,0x94,0x91,0x94,0x92,0x94,0x96,0x93,0x93,0x95,
7888 0x93,0x96,0x8E,0x8E,0x95,0x8F,0x93,0x94,0x91,0x92,0x94,0x95,0x92,0x93,0x93,0x93,
7889 0x92,0x95,0x94,0x92,0x96,0x94,0x96,0x95,0x95,0x94,0x93,0x01,0x95,0x92,0x95,0x93,
7890 0x92,0x95,0x94,0x95,0x94,0x95,0x93,0x95,0x98,0x98,0x01,0x98,0x97,0x98,0x98,0x93,
7891 0x98,0x95,0x98,0x96,0x95,0x99,0x99,0x01,0x95,0x98,0x98,0x98,0x96,0x96,0x94,0x95,
7892 0x96,0x98,0x95,0x94,0x98,0x98,0x94,0x98,0x95,0x96,0x98,0x98,0x95,0x94,0x01,0x95,
7893 0x96,0x01,0x01,0x96,0x96,0x94,0x96,0x96,0x95,0x98,0x93,0x95,0x94,0x92,0x98,0x17,
7894 0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,
7895 0x17,0x98,0x98,0x98,0x98,0x01,0x95,0x92,0x8E,0x01,0x92,0x95,0x96,0x95,0x98,0x17,
7896 0x17,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,
7897 0x17,0x98,0x98,0x98,0x17,0x17,0x98,0x17,0x17,0x98,0x98,0x98,0x98,0x01,0x98,0x17,
7898 0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x98,0x96,0x96,0x96,0x98,
7899 0x17,0x17,0x98,0x94,0x95,0x98,0x98,0x98,0x17,0x17,0x98,0x01,0x96,0x95,0x01,0x98,
7900 0x17,0x17,0x98,0x95,0x96,0x98,0x96,0x96,0x95,0x96,0x98,0x01,0x98,0x01,0x95,0x96,
7901 0x95,0x98,0x98,0x01,0x01,0x98,0x95,0x98,0x01,0x98,0x98,0x01,0x94,0x98,0x98,0x01,
7902 0x96,0x95,0x96,0x93,0x93,0x98,0x93,0x96,0x98,0x98,0x98,0x96,0x95,0x98,0x96,0x96,
7903 0x95,0x96,0x95,0x94,0x95,0x96,0x01,0x01,0x96,0x01,0x93,0x93,0x01,0x98,0x96,0x93,
7904 0x93,0x01,0x95,0x01,0x01,0x96,0x01,0x94,0x98,0x95,0x01,0x95,0x95,0x96,0x01,0x97,
7905 0x97,0x96,0x98,0x98,0x96,0x96,0x94,0x96,0x95,0x9C,0x98,0x9C,0x96,0x98,0x9D,0x01,
7906 0x01,0x98,0x9D,0x95,0x9D,0x01,0x01,0x96,0x95,0x95,0x95,0x95,0x01,0x95,0x98,0x98,
7907 0x95,0x92,0x93,0x95,0x95,0x92,0x93,0x93,0x92,0x95,0x96,0x93,0x95,0x92,0x95,0x95,
7908 0x96,0x92,0x92,0x91,0x94,0x01,0x94,0x96,0x95,0x93,0x93,0x93,0x92,0x95,0x93,0x92,
7909 0x91,0x95,0x96,0x94,0x91,0x98,0x95,0x96,0x92,0x93,0x93,0x95,0x94,0x95,0x96,0x94,
7910 0x94,0x92,0x95,0x01,0x96,0x98,0x98,0x94,0x95,0x95,0x01,0x97,0x94,0x97,0x98,0x95,
7911 0x98,0x01,0x98,0x93,0x99,0x96,0x95,0x95,0x98,0x01,0x01,0x96,0x92,0x96,0x96,0x96,
7912 0x95,0x92,0x96,0x95,0x93,0x93,0x96,0x96,0x96,0x95,0x95,0x93,0x96,0x96,0x98,0x96,
7913 0x01,0x94,0x96,0x95,0x96,0x96,0x96,0x95,0x92,0x96,0x92,0x95,0x95,0x95,0x94,0x98,
7914 0x17,0x17,0x17,0x17,0x98,0x95,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x98,0x95,0x98,
7915 0x17,0x17,0x17,0x17,0x17,0x98,0x8E,0x8E,0x92,0x95,0x95,0x92,0x93,0x92,0x98,0x17,
7916 0x17,0x98,0x96,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x98,0x98,0x98,0x17,
7917 0x17,0x98,0x96,0x98,0x17,0x17,0x98,0x98,0x17,0x17,0x17,0x17,0x17,0x98,0x98,0x17,
7918 0x17,0x98,0x98,0x17,0x17,0x98,0x98,0x98,0x17,0x17,0x17,0x17,0x98,0x96,0x01,0x98,
7919 0x17,0x17,0x98,0x97,0x95,0x96,0x95,0x98,0x17,0x17,0x98,0x98,0x96,0x96,0x95,0x98,
7920 0x17,0x17,0x98,0x95,0x95,0x96,0x96,0x95,0x01,0x95,0x92,0x95,0x95,0x01,0x98,0x96,
7921 0x01,0x98,0x98,0x98,0x01,0x95,0x94,0x94,0x01,0x98,0x98,0x98,0x95,0x98,0x92,0x01,
7922 0x01,0x98,0x96,0x95,0x98,0x95,0x94,0x01,0x01,0x01,0x96,0x01,0x95,0x95,0x01,0x01,
7923 0x01,0x93,0x94,0x98,0x01,0x01,0x01,0x94,0x95,0x95,0x01,0x95,0x92,0x01,0x94,0x92,
7924 0x96,0x94,0x95,0x95,0x93,0x95,0x01,0x01,0x94,0x93,0x95,0x01,0x98,0x95,0x95,0x94,
7925 0x93,0x98,0x96,0x95,0x94,0x93,0x97,0x01,0x95,0x9B,0x9D,0x9B,0x96,0x94,0x9D,0x98,
7926 0x98,0x98,0x9C,0x99,0x9C,0x98,0x99,0x9A,0x99,0x96,0x98,0x98,0x95,0x98,0x95,0x01,
7927 0x93,0x92,0x93,0x92,0x94,0x93,0x95,0x92,0x92,0x94,0x93,0x93,0x93,0x98,0x01,0x94,
7928 0x8E,0x94,0x01,0x93,0x01,0x94,0x95,0x98,0x93,0x95,0x01,0x93,0x94,0x93,0x94,0x93,
7929 0x92,0x92,0x95,0x96,0x95,0x92,0x96,0x95,0x95,0x94,0x92,0x94,0x95,0x01,0x94,0x92,
7930 0x95,0x95,0x95,0x95,0x01,0x95,0x95,0x95,0x98,0x01,0x92,0x98,0x93,0x97,0x92,0x93,
7931 0x98,0x99,0x01,0x99,0x94,0x97,0x98,0x98,0x95,0x96,0x94,0x95,0x98,0x94,0x95,0x96,
7932 0x98,0x94,0x95,0x96,0x93,0x95,0x94,0x95,0x96,0x95,0x96,0x98,0x96,0x96,0x95,0x95,
7933 0x95,0x93,0x93,0x95,0x95,0x95,0x93,0x93,0x95,0x95,0x92,0x93,0x92,0x95,0x92,0x95,
7934 0x98,0x98,0x98,0x98,0x94,0x94,0x94,0x98,0x98,0x98,0x96,0x98,0x98,0x93,0x92,0x95,
7935 0x98,0x98,0x98,0x98,0x98,0x94,0x92,0x92,0x92,0x01,0x92,0x94,0x92,0x95,0x94,0x98,
7936 0x98,0x96,0x98,0x96,0x98,0x98,0x95,0x95,0x98,0x98,0x98,0x98,0x98,0x96,0x94,0x98,
7937 0x98,0x95,0x95,0x93,0x98,0x98,0x96,0x96,0x98,0x98,0x98,0x98,0x98,0x98,0x94,0x98,
7938 0x98,0x01,0x94,0x98,0x98,0x98,0x98,0x94,0x98,0x98,0x98,0x98,0x98,0x01,0x01,0x95,
7939 0x98,0x98,0x98,0x01,0x96,0x92,0x98,0x95,0x98,0x98,0x94,0x98,0x01,0x98,0x95,0x96,
7940 0x98,0x98,0x01,0x96,0x96,0x96,0x96,0x96,0x01,0x93,0x01,0x95,0x98,0x98,0x95,0x95,
7941 0x94,0x94,0x95,0x01,0x01,0x01,0x01,0x01,0x98,0x94,0x92,0x96,0x01,0x01,0x01,0x94,
7942 0x98,0x94,0x93,0x95,0x94,0x95,0x96,0x94,0x95,0x01,0x95,0x94,0x94,0x01,0x01,0x01,
7943 0x95,0x94,0x98,0x01,0x01,0x98,0x96,0x95,0x96,0x96,0x98,0x96,0x96,0x94,0x98,0x96,
7944 0x01,0x95,0x96,0x96,0x01,0x96,0x01,0x96,0x98,0x96,0x95,0x95,0x96,0x98,0x01,0x92,
7945 0x95,0x01,0x95,0x01,0x94,0x98,0x01,0x97,0x95,0x98,0x9D,0x01,0x01,0x01,0x9D,0x98,
7946 0x9C,0x01,0x9B,0x9D,0x9B,0x96,0x9A,0x98,0x9A,0x01,0x95,0x01,0x99,0x98,0x95,0x95,
7947 0x92,0x96,0x92,0x95,0x94,0x94,0x93,0x93,0x93,0x96,0x93,0x92,0x93,0x92,0x8E,0x92,
7948 0x92,0x92,0x92,0x95,0x92,0x91,0x92,0x93,0x92,0x92,0x01,0x92,0x96,0x92,0x98,0x01,
7949 0x95,0x95,0x95,0x94,0x95,0x95,0x93,0x95,0x95,0x95,0x93,0x01,0x94,0x95,0x01,0x01,
7950 0x96,0x95,0x98,0x95,0x95,0x98,0x95,0x98,0x98,0x98,0x01,0x98,0x97,0x97,0x01,0x98,
7951 0x94,0x95,0x98,0x93,0x97,0x98,0x94,0x96,0x95,0x94,0x95,0x92,0x98,0x93,0x95,0x95,
7952 0x96,0x01,0x93,0x01,0x94,0x96,0x93,0x95,0x93,0x01,0x96,0x96,0x95,0x95,0x96,0x95,
7953 0x98,0x95,0x93,0x96,0x94,0x95,0x92,0x95,0x96,0x92,0x92,0x91,0x92,0x96,0x95,0x93,
7954 0x93,0x95,0x95,0x95,0x93,0x92,0x94,0x93,0x95,0x92,0x94,0x95,0x92,0x92,0x92,0x91,
7955 0x8E,0x92,0x92,0x8E,0x93,0x94,0x94,0x91,0x94,0x96,0x94,0x94,0x96,0x96,0x95,0x01,
7956 0x95,0x01,0x95,0x98,0x93,0x01,0x95,0x98,0x96,0x96,0x96,0x98,0x93,0x96,0x94,0x98,
7957 0x95,0x95,0x95,0x95,0x95,0x95,0x01,0x01,0x01,0x98,0x98,0x01,0x95,0x95,0x98,0x94,
7958 0x01,0x98,0x94,0x01,0x01,0x01,0x01,0x95,0x01,0x95,0x94,0x01,0x01,0x97,0x96,0x98,
7959 0x96,0x94,0x95,0x95,0x95,0x95,0x98,0x95,0x98,0x95,0x96,0x95,0x98,0x93,0x94,0x94,
7960 0x95,0x96,0x98,0x96,0x98,0x96,0x98,0x95,0x98,0x94,0x96,0x94,0x98,0x01,0x98,0x96,
7961 0x01,0x94,0x01,0x01,0x94,0x96,0x96,0x01,0x95,0x01,0x98,0x98,0x95,0x98,0x96,0x98,
7962 0x93,0x01,0x01,0x01,0x93,0x01,0x01,0x95,0x01,0x92,0x98,0x94,0x96,0x94,0x95,0x95,
7963 0x94,0x01,0x96,0x01,0x98,0x96,0x01,0x01,0x01,0x95,0x95,0x01,0x01,0x01,0x95,0x98,
7964 0x95,0x95,0x94,0x96,0x95,0x01,0x98,0x01,0x01,0x98,0x96,0x01,0x96,0x98,0x96,0x96,
7965 0x96,0x96,0x96,0x98,0x93,0x96,0x95,0x01,0x96,0x94,0x94,0x95,0x98,0x95,0x98,0x96,
7966 0x98,0x98,0x99,0x9A,0x95,0x94,0x01,0x98,0x98,0x9A,0x9A,0x98,0x98,0x01,0x96,0x96,
7967 0x95,0x95,0x93,0x96,0x92,0x92,0x96,0x8E,0x94,0x8E,0x8E,0x8E,0x94,0x8E,0x8E,0x8E,
7968 0x92,0x98,0x01,0x94,0x93,0x96,0x98,0x98,0x01,0x95,0x94,0x98,0x95,0x98,0x98,0x98,
7969 0x98,0x01,0x98,0x95,0x01,0x95,0x98,0x01,0x01,0x98,0x94,0x93,0x98,0x96,0x01,0x01,
7970 0x95,0x95,0x98,0x95,0x98,0x01,0x98,0x96,0x98,0x95,0x98,0x99,0x98,0x94,0x94,0x95,
7971 0x94,0x98,0x01,0x96,0x94,0x95,0x98,0x95,0x93,0x94,0x95,0x93,0x92,0x94,0x95,0x95,
7972 0x94,0x95,0x94,0x95,0x92,0x96,0x01,0x96,0x92,0x95,0x94,0x01,0x92,0x95,0x95,0x92,
7973 0x96,0x94,0x92,0x94,0x95,0x96,0x94,0x92,0x96,0x95,0x8E,0x8E,0x8E,0x92,0x92,0x93,
7974 0x93,0x92,0x95,0x93,0x95,0x92,0x94,0x92,0x94,0x92,0x93,0x93,0x8E,0x96,0x8E,0x92,
7975 0x8E,0x93,0x95,0x92,0x01,0x94,0x95,0x96,0x95,0x93,0x01,0x95,0x99,0x96,0x98,0x96,
7976 0x01,0x98,0x94,0x99,0x99,0x98,0x98,0x98,0x94,0x99,0x98,0x99,0x98,0x98,0x99,0x96,
7977 0x01,0x96,0x01,0x96,0x96,0x95,0x98,0x96,0x98,0x94,0x98,0x98,0x99,0x99,0x98,0x98,
7978 0x96,0x96,0x99,0x98,0x99,0x96,0x98,0x01,0x96,0x98,0x95,0x95,0x94,0x95,0x93,0x94,
7979 0x92,0x95,0x96,0x96,0x94,0x96,0x94,0x96,0x94,0x96,0x98,0x01,0x95,0x96,0x96,0x96,
7980 0x95,0x95,0x01,0x94,0x96,0x95,0x94,0x01,0x01,0x95,0x95,0x96,0x98,0x98,0x98,0x01,
7981 0x01,0x01,0x01,0x01,0x96,0x95,0x95,0x94,0x01,0x94,0x95,0x96,0x01,0x01,0x94,0x98,
7982 0x01,0x98,0x94,0x01,0x98,0x96,0x98,0x95,0x98,0x98,0x01,0x94,0x01,0x95,0x95,0x98,
7983 0x95,0x95,0x94,0x01,0x95,0x96,0x95,0x94,0x01,0x94,0x96,0x95,0x94,0x96,0x95,0x95,
7984 0x96,0x98,0x95,0x98,0x95,0x94,0x95,0x01,0x98,0x01,0x98,0x01,0x01,0x96,0x01,0x98,
7985 0x94,0x96,0x98,0x97,0x97,0x95,0x95,0x95,0x98,0x96,0x98,0x98,0x94,0x98,0x01,0x98,
7986 0x98,0x96,0x98,0x99,0x99,0x98,0x98,0x9A,0x98,0x01,0x98,0x98,0x9A,0x95,0x9A,0x95,
7987 0x8D,0x8E,0x94,0x93,0x8E,0x8E,0x94,0x8E,0x8E,0x94,0x8E,0x92,0x8D,0x8D,0x92,0x8E,
7988 0x94,0x99,0x96,0x96,0x01,0x98,0x01,0x9A,0x01,0x9A,0x01,0x98,0x98,0x01,0x99,0x9A,
7989 0x01,0x98,0x98,0x99,0x98,0x9A,0x01,0x01,0x98,0x98,0x99,0x98,0x9A,0x98,0x01,0x99,
7990 0x92,0x9A,0x9A,0x98,0x94,0x9A,0x9A,0x01,0x98,0x9A,0x01,0x9B,0x01,0x9A,0x98,0x98,
7991 0x95,0x95,0x96,0x95,0x94,0x95,0x94,0x93,0x93,0x92,0x98,0x96,0x94,0x95,0x94,0x95,
7992 0x93,0x95,0x95,0x96,0x93,0x98,0x94,0x92,0x8E,0x8E,0x8E,0x94,0x8D,0x92,0x94,0x8E,
7993 0x8D,0x8D,0x8E,0x8E,0x8E,0x8E,0x92,0x8E,0x8E,0x8D,0x8E,0x92,0x8D,0x8E,0x8E,0x8E,
7994 0x8D,0x92,0x8E,0x8E,0x92,0x92,0x8D,0x8E,0x95,0x94,0x8E,0x95,0x8D,0x01,0x8E,0x8E,
7995 0x93,0x94,0x94,0x96,0x94,0x96,0x99,0x01,0x9B,0x99,0x9A,0x9C,0x98,0x99,0x98,0x98,
7996 0x98,0x01,0x01,0x9C,0x98,0x9A,0x98,0x9C,0x98,0x01,0x98,0x99,0x9C,0x9C,0x96,0x9A,
7997 0x98,0x9C,0x98,0x9C,0x98,0x98,0x9C,0x98,0x99,0x98,0x01,0x99,0x01,0x9C,0x98,0x9C,
7998 0x98,0x9C,0x9C,0x9C,0x9C,0x98,0x98,0x98,0x98,0x99,0x8E,0x95,0x95,0x92,0x8E,0x95,
7999 0x95,0x8E,0x8E,0x94,0x96,0x01,0x94,0x01,0x95,0x94,0x96,0x96,0x96,0x98,0x94,0x01,
8000 0x98,0x95,0x01,0x96,0x98,0x94,0x95,0x98,0x95,0x95,0x96,0x94,0x96,0x96,0x93,0x01,
8001 0x96,0x96,0x8E,0x8E,0x8E,0x92,0x92,0x92,0x92,0x8E,0x8E,0x93,0x96,0x98,0x01,0x95,
8002 0x95,0x98,0x98,0x93,0x92,0x95,0x95,0x94,0x94,0x95,0x96,0x01,0x98,0x94,0x01,0x01,
8003 0x01,0x98,0x96,0x8E,0x8E,0x92,0x94,0x8E,0x8E,0x01,0x94,0x95,0x94,0x98,0x96,0x94,
8004 0x01,0x01,0x01,0x97,0x92,0x94,0x01,0x95,0x01,0x96,0x01,0x94,0x01,0x95,0x98,0x97,
8005 0x96,0x97,0x94,0x96,0x95,0x96,0x96,0x98,0x93,0x96,0x94,0x95,0x98,0x95,0x97,0x01,
8006 0x97,0x98,0x94,0x93,0x97,0x98,0x97,0x01,0x98,0x98,0x98,0x99,0x98,0x9B,0x9A,0x98};
8007#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 @@
1RGB( 0, 0, 0),RGB( 0, 0, 42),RGB( 0, 42, 0),RGB( 0, 42, 42),RGB( 42, 0, 0),
2RGB( 42, 0, 42),RGB( 42, 21, 0),RGB( 42, 42, 42),RGB( 21, 21, 21),RGB( 21, 21, 63),
3RGB( 21, 63, 21),RGB( 21, 63, 63),RGB( 63, 21, 21),RGB( 63, 21, 63),RGB( 63, 63, 21),
4RGB( 63, 63, 63),RGB( 59, 59, 59),RGB( 55, 55, 55),RGB( 52, 52, 52),RGB( 48, 48, 48),
5RGB( 45, 45, 45),RGB( 42, 42, 42),RGB( 38, 38, 38),RGB( 35, 35, 35),RGB( 31, 31, 31),
6RGB( 28, 28, 28),RGB( 25, 25, 25),RGB( 21, 21, 21),RGB( 18, 18, 18),RGB( 14, 14, 14),
7RGB( 11, 11, 11),RGB( 8, 8, 8),RGB( 63, 0, 0),RGB( 59, 0, 0),RGB( 56, 0, 0),
8RGB( 53, 0, 0),RGB( 50, 0, 0),RGB( 47, 0, 0),RGB( 44, 0, 0),RGB( 41, 0, 0),
9RGB( 38, 0, 0),RGB( 34, 0, 0),RGB( 31, 0, 0),RGB( 28, 0, 0),RGB( 25, 0, 0),
10RGB( 22, 0, 0),RGB( 19, 0, 0),RGB( 16, 0, 0),RGB( 63, 54, 54),RGB( 63, 46, 46),
11RGB( 63, 39, 39),RGB( 63, 31, 31),RGB( 63, 23, 23),RGB( 63, 16, 16),RGB( 63, 8, 8),
12RGB( 63, 0, 0),RGB( 63, 42, 23),RGB( 63, 38, 16),RGB( 63, 34, 8),RGB( 63, 30, 0),
13RGB( 57, 27, 0),RGB( 51, 24, 0),RGB( 45, 21, 0),RGB( 39, 19, 0),RGB( 63, 63, 54),
14RGB( 63, 63, 46),RGB( 63, 63, 39),RGB( 63, 63, 31),RGB( 63, 62, 23),RGB( 63, 61, 16),
15RGB( 63, 61, 8),RGB( 63, 61, 0),RGB( 57, 54, 0),RGB( 51, 49, 0),RGB( 45, 43, 0),
16RGB( 39, 39, 0),RGB( 33, 33, 0),RGB( 28, 27, 0),RGB( 22, 21, 0),RGB( 16, 16, 0),
17RGB( 52, 63, 23),RGB( 49, 63, 16),RGB( 45, 63, 8),RGB( 40, 63, 0),RGB( 36, 57, 0),
18RGB( 32, 51, 0),RGB( 29, 45, 0),RGB( 24, 39, 0),RGB( 54, 63, 54),RGB( 47, 63, 46),
19RGB( 39, 63, 39),RGB( 32, 63, 31),RGB( 24, 63, 23),RGB( 16, 63, 16),RGB( 8, 63, 8),
20RGB( 0, 63, 0),RGB( 0, 63, 0),RGB( 0, 59, 0),RGB( 0, 56, 0),RGB( 0, 53, 0),
21RGB( 1, 50, 0),RGB( 1, 47, 0),RGB( 1, 44, 0),RGB( 1, 41, 0),RGB( 1, 38, 0),
22RGB( 1, 34, 0),RGB( 1, 31, 0),RGB( 1, 28, 0),RGB( 1, 25, 0),RGB( 1, 22, 0),
23RGB( 1, 19, 0),RGB( 1, 16, 0),RGB( 54, 63, 63),RGB( 46, 63, 63),RGB( 39, 63, 63),
24RGB( 31, 63, 62),RGB( 23, 63, 63),RGB( 16, 63, 63),RGB( 8, 63, 63),RGB( 0, 63, 63),
25RGB( 0, 57, 57),RGB( 0, 51, 51),RGB( 0, 45, 45),RGB( 0, 39, 39),RGB( 0, 33, 33),
26RGB( 0, 28, 28),RGB( 0, 22, 22),RGB( 0, 16, 16),RGB( 23, 47, 63),RGB( 16, 44, 63),
27RGB( 8, 42, 63),RGB( 0, 39, 63),RGB( 0, 35, 57),RGB( 0, 31, 51),RGB( 0, 27, 45),
28RGB( 0, 23, 39),RGB( 54, 54, 63),RGB( 46, 47, 63),RGB( 39, 39, 63),RGB( 31, 32, 63),
29RGB( 23, 24, 63),RGB( 16, 16, 63),RGB( 8, 9, 63),RGB( 0, 1, 63),RGB( 0, 0, 63),
30RGB( 0, 0, 59),RGB( 0, 0, 56),RGB( 0, 0, 53),RGB( 0, 0, 50),RGB( 0, 0, 47),
31RGB( 0, 0, 44),RGB( 0, 0, 41),RGB( 0, 0, 38),RGB( 0, 0, 34),RGB( 0, 0, 31),
32RGB( 0, 0, 28),RGB( 0, 0, 25),RGB( 0, 0, 22),RGB( 0, 0, 19),RGB( 0, 0, 16),
33RGB( 10, 10, 10),RGB( 63, 56, 13),RGB( 63, 53, 9),RGB( 63, 51, 6),RGB( 63, 48, 2),
34RGB( 63, 45, 0),RGB( 0, 14, 0),RGB( 0, 10, 0),RGB( 38, 0, 57),RGB( 32, 0, 51),
35RGB( 29, 0, 45),RGB( 24, 0, 39),RGB( 20, 0, 33),RGB( 17, 0, 28),RGB( 13, 0, 22),
36RGB( 10, 0, 16),RGB( 63, 54, 63),RGB( 63, 46, 63),RGB( 63, 39, 63),RGB( 63, 31, 63),
37RGB( 63, 23, 63),RGB( 63, 16, 63),RGB( 63, 8, 63),RGB( 63, 0, 63),RGB( 56, 0, 57),
38RGB( 50, 0, 51),RGB( 45, 0, 45),RGB( 39, 0, 39),RGB( 33, 0, 33),RGB( 27, 0, 28),
39RGB( 22, 0, 22),RGB( 16, 0, 16),RGB( 63, 58, 55),RGB( 63, 56, 52),RGB( 63, 54, 49),
40RGB( 63, 53, 47),RGB( 63, 51, 44),RGB( 63, 49, 41),RGB( 63, 47, 39),RGB( 63, 46, 36),
41RGB( 63, 44, 32),RGB( 63, 41, 28),RGB( 63, 39, 24),RGB( 60, 37, 23),RGB( 58, 35, 22),
42RGB( 55, 34, 21),RGB( 52, 32, 20),RGB( 50, 31, 19),RGB( 47, 30, 18),RGB( 45, 28, 17),
43RGB( 42, 26, 16),RGB( 40, 25, 15),RGB( 39, 24, 14),RGB( 36, 23, 13),RGB( 34, 22, 12),
44RGB( 32, 20, 11),RGB( 29, 19, 10),RGB( 27, 18, 9),RGB( 23, 16, 8),RGB( 21, 15, 7),
45RGB( 18, 14, 6),RGB( 16, 12, 6),RGB( 14, 11, 5),RGB( 10, 8, 3),RGB( 24, 0, 25),
46RGB( 0, 25, 25),RGB( 0, 24, 24),RGB( 0, 0, 7),RGB( 0, 0, 11),RGB( 12, 9, 4),
47RGB( 18, 0, 18),RGB( 20, 0, 20),RGB( 0, 0, 13),RGB( 7, 7, 7),RGB( 19, 19, 19),
48RGB( 23, 23, 23),RGB( 16, 16, 16),RGB( 12, 12, 12),RGB( 13, 13, 13),RGB( 54, 61, 61),
49RGB( 46, 58, 58),RGB( 39, 55, 55),RGB( 29, 50, 50),RGB( 18, 48, 48),RGB( 8, 45, 45),
50RGB( 8, 44, 44),RGB( 0, 41, 41),RGB( 0, 38, 38),RGB( 0, 35, 35),RGB( 0, 33, 33),
51RGB( 0, 31, 31),RGB( 0, 30, 30),RGB( 0, 29, 29),RGB( 0, 28, 28),RGB( 0, 27, 27),
52RGB( 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 @@
1#ifndef _VERSION_H_
2#define _VERSION_H_
3
4#ifndef VERSIONALREADYCHOSEN // used for batch compiling
5
6#ifndef DATADIR
7#define DATADIR "/.rockbox/wolf3d/"
8#endif
9
10/* Defines used for different versions */
11
12//#define SPEAR
13//#define SPEARDEMO
14//#define UPLOAD
15#define GOODTIMES
16#define CARMACIZED
17//#define APOGEE_1_0
18//#define APOGEE_1_1
19//#define APOGEE_1_2
20
21/*
22 Wolf3d Full v1.1 Apogee (with ReadThis) - define CARMACIZED and APOGEE_1_1
23 Wolf3d Full v1.4 Apogee (with ReadThis) - define CARMACIZED
24 Wolf3d Full v1.4 GT/ID/Activision - define CARMACIZED and GOODTIMES
25 Wolf3d Shareware v1.0 - define UPLOAD and APOGEE_1_0
26 Wolf3d Shareware v1.1 - define CARMACIZED and UPLOAD and APOGEE_1_1
27 Wolf3d Shareware v1.2 - define CARMACIZED and UPLOAD and APOGEE_1_2
28 Wolf3d Shareware v1.4 - define CARMACIZED and UPLOAD
29 Spear of Destiny Full and Mission Disks - define CARMACIZED and SPEAR
30 (and GOODTIMES for no FormGen quiz)
31 Spear of Destiny Demo - define CARMACIZED and SPEAR and SPEARDEMO
32*/
33
34#endif
35
36//#define USE_FEATUREFLAGS // Enables the level feature flags (see bottom of wl_def.h)
37//#define USE_SHADING // Enables shading support (see wl_shade.cpp)
38//#define USE_DIR3DSPR // Enables directional 3d sprites (see wl_dir3dspr.cpp)
39//#define USE_FLOORCEILINGTEX // Enables floor and ceiling textures stored in the third mapplane (see wl_floorceiling.cpp)
40//#define USE_HIRES // Enables high resolution textures/sprites (128x128)
41//#define USE_PARALLAX 16 // Enables parallax sky with 16 textures per sky (see wl_parallax.cpp)
42//#define USE_CLOUDSKY // Enables cloud sky support (see wl_cloudsky.cpp)
43//#define USE_STARSKY // Enables star sky support (see wl_atmos.cpp)
44//#define USE_RAIN // Enables rain support (see wl_atmos.cpp)
45//#define USE_SNOW // Enables snow support (see wl_atmos.cpp)
46//#define FIXRAINSNOWLEAKS // Enables leaking ceilings fix (by Adam Biser, only needed if maps with rain/snow and ceilings exist)
47
48#define DEBUGKEYS // Comment this out to compile without the Tab debug keys
49#define ARTSEXTERN
50#define DEMOSEXTERN
51#define PLAYDEMOLIKEORIGINAL // When playing or recording demos, several bug fixes do not take
52 // effect to let the original demos work as in the original Wolf3D v1.4
53 // (actually better, as the second demo rarely worked)
54
55#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 @@
1// WL_ACT1.C
2
3#include "wl_def.h"
4#pragma hdrstop
5
6/*
7=============================================================================
8
9 STATICS
10
11=============================================================================
12*/
13
14
15statobj_t statobjlist[MAXSTATS];
16statobj_t *laststatobj;
17
18
19struct
20{
21 short picnum;
22 wl_stat_t type;
23 uint32_t specialFlags; // they are ORed to the statobj_t flags
24} statinfo[] =
25{
26 {SPR_STAT_0}, // puddle spr1v
27 {SPR_STAT_1,block}, // Green Barrel "
28 {SPR_STAT_2,block}, // Table/chairs "
29 {SPR_STAT_3,block,FL_FULLBRIGHT}, // Floor lamp "
30 {SPR_STAT_4,none,FL_FULLBRIGHT}, // Chandelier "
31 {SPR_STAT_5,block}, // Hanged man "
32 {SPR_STAT_6,bo_alpo}, // Bad food "
33 {SPR_STAT_7,block}, // Red pillar "
34 //
35 // NEW PAGE
36 //
37 {SPR_STAT_8,block}, // Tree spr2v
38 {SPR_STAT_9}, // Skeleton flat "
39 {SPR_STAT_10,block}, // Sink " (SOD:gibs)
40 {SPR_STAT_11,block}, // Potted plant "
41 {SPR_STAT_12,block}, // Urn "
42 {SPR_STAT_13,block}, // Bare table "
43 {SPR_STAT_14,none,FL_FULLBRIGHT}, // Ceiling light "
44 #ifndef SPEAR
45 {SPR_STAT_15}, // Kitchen stuff "
46 #else
47 {SPR_STAT_15,block}, // Gibs!
48 #endif
49 //
50 // NEW PAGE
51 //
52 {SPR_STAT_16,block}, // suit of armor spr3v
53 {SPR_STAT_17,block}, // Hanging cage "
54 {SPR_STAT_18,block}, // SkeletoninCage "
55 {SPR_STAT_19}, // Skeleton relax "
56 {SPR_STAT_20,bo_key1}, // Key 1 "
57 {SPR_STAT_21,bo_key2}, // Key 2 "
58 {SPR_STAT_22,block}, // stuff (SOD:gibs)
59 {SPR_STAT_23}, // stuff
60 //
61 // NEW PAGE
62 //
63 {SPR_STAT_24,bo_food}, // Good food spr4v
64 {SPR_STAT_25,bo_firstaid}, // First aid "
65 {SPR_STAT_26,bo_clip}, // Clip "
66 {SPR_STAT_27,bo_machinegun}, // Machine gun "
67 {SPR_STAT_28,bo_chaingun}, // Gatling gun "
68 {SPR_STAT_29,bo_cross}, // Cross "
69 {SPR_STAT_30,bo_chalice}, // Chalice "
70 {SPR_STAT_31,bo_bible}, // Bible "
71 //
72 // NEW PAGE
73 //
74 {SPR_STAT_32,bo_crown}, // crown spr5v
75 {SPR_STAT_33,bo_fullheal,FL_FULLBRIGHT},// one up "
76 {SPR_STAT_34,bo_gibs}, // gibs "
77 {SPR_STAT_35,block}, // barrel "
78 {SPR_STAT_36,block}, // well "
79 {SPR_STAT_37,block}, // Empty well "
80 {SPR_STAT_38,bo_gibs}, // Gibs 2 "
81 {SPR_STAT_39,block}, // flag "
82 //
83 // NEW PAGE
84 //
85 #ifndef SPEAR
86 {SPR_STAT_40,block}, // Call Apogee spr7v
87 #else
88 {SPR_STAT_40}, // Red light
89 #endif
90 //
91 // NEW PAGE
92 //
93 {SPR_STAT_41}, // junk "
94 {SPR_STAT_42}, // junk "
95 {SPR_STAT_43}, // junk "
96 #ifndef SPEAR
97 {SPR_STAT_44}, // pots "
98 #else
99 {SPR_STAT_44,block}, // Gibs!
100 #endif
101 {SPR_STAT_45,block}, // stove " (SOD:gibs)
102 {SPR_STAT_46,block}, // spears " (SOD:gibs)
103 {SPR_STAT_47}, // vines "
104 //
105 // NEW PAGE
106 //
107 #ifdef SPEAR
108 {SPR_STAT_48,block}, // marble pillar
109 {SPR_STAT_49,bo_25clip}, // bonus 25 clip
110 {SPR_STAT_50,block}, // truck
111 {SPR_STAT_51,bo_spear}, // SPEAR OF DESTINY!
112 #endif
113
114 {SPR_STAT_26,bo_clip2}, // Clip "
115#ifdef USE_DIR3DSPR
116 // These are just two examples showing the new way of using dir 3d sprites.
117 // You can find the allowed values in the objflag_t enum in wl_def.h.
118 {SPR_STAT_47,none,FL_DIR_VERT_MID},
119 {SPR_STAT_47,block,FL_DIR_HORIZ_MID},
120#endif
121 {-1} // terminator
122};
123
124/*
125===============
126=
127= InitStaticList
128=
129===============
130*/
131
132void InitStaticList (void)
133{
134 laststatobj = &statobjlist[0];
135}
136
137
138
139/*
140===============
141=
142= SpawnStatic
143=
144===============
145*/
146
147void SpawnStatic (int tilex, int tiley, int type)
148{
149 laststatobj->shapenum = statinfo[type].picnum;
150 laststatobj->tilex = tilex;
151 laststatobj->tiley = tiley;
152 laststatobj->visspot = &spotvis[tilex][tiley];
153
154 switch (statinfo[type].type)
155 {
156 case block:
157 actorat[tilex][tiley] = (objtype *) 64; // consider it a blocking tile
158 case none:
159 laststatobj->flags = 0;
160 break;
161
162 case bo_cross:
163 case bo_chalice:
164 case bo_bible:
165 case bo_crown:
166 case bo_fullheal:
167 if (!loadedgame)
168 gamestate.treasuretotal++;
169
170 case bo_firstaid:
171 case bo_key1:
172 case bo_key2:
173 case bo_key3:
174 case bo_key4:
175 case bo_clip:
176 case bo_25clip:
177 case bo_machinegun:
178 case bo_chaingun:
179 case bo_food:
180 case bo_alpo:
181 case bo_gibs:
182 case bo_spear:
183 laststatobj->flags = FL_BONUS;
184 laststatobj->itemnumber = statinfo[type].type;
185 break;
186 }
187
188 laststatobj->flags |= statinfo[type].specialFlags;
189
190 laststatobj++;
191
192 if (laststatobj == &statobjlist[MAXSTATS])
193 Quit ("Too many static objects!\n");
194}
195
196
197/*
198===============
199=
200= PlaceItemType
201=
202= Called during game play to drop actors' items. It finds the proper
203= item number based on the item type (bo_???). If there are no free item
204= spots, nothing is done.
205=
206===============
207*/
208
209void PlaceItemType (int itemtype, int tilex, int tiley)
210{
211 int type;
212 statobj_t *spot;
213
214 //
215 // find the item number
216 //
217 for (type=0; ; type++)
218 {
219 if (statinfo[type].picnum == -1) // end of list
220 Quit ("PlaceItemType: couldn't find type!");
221 if (statinfo[type].type == itemtype)
222 break;
223 }
224
225 //
226 // find a spot in statobjlist to put it in
227 //
228 for (spot=&statobjlist[0]; ; spot++)
229 {
230 if (spot==laststatobj)
231 {
232 if (spot == &statobjlist[MAXSTATS])
233 return; // no free spots
234 laststatobj++; // space at end
235 break;
236 }
237
238 if (spot->shapenum == -1) // -1 is a free spot
239 break;
240 }
241 //
242 // place it
243 //
244 spot->shapenum = statinfo[type].picnum;
245 spot->tilex = tilex;
246 spot->tiley = tiley;
247 spot->visspot = &spotvis[tilex][tiley];
248 spot->flags = FL_BONUS | statinfo[type].specialFlags;
249 spot->itemnumber = statinfo[type].type;
250}
251
252
253
254/*
255=============================================================================
256
257 DOORS
258
259doorobjlist[] holds most of the information for the doors
260
261doorposition[] holds the amount the door is open, ranging from 0 to 0xffff
262 this is directly accessed by AsmRefresh during rendering
263
264The number of doors is limited to 64 because a spot in tilemap holds the
265 door number in the low 6 bits, with the high bit meaning a door center
266 and bit 6 meaning a door side tile
267
268Open doors conect two areas, so sounds will travel between them and sight
269 will be checked when the player is in a connected area.
270
271Areaconnect is incremented/decremented by each door. If >0 they connect
272
273Every time a door opens or closes the areabyplayer matrix gets recalculated.
274 An area is true if it connects with the player's current spor.
275
276=============================================================================
277*/
278
279#define DOORWIDTH 0x7800
280#define OPENTICS 300
281
282doorobj_t doorobjlist[MAXDOORS],*lastdoorobj;
283short doornum;
284
285word doorposition[MAXDOORS]; // leading edge of door 0=closed
286 // 0xffff = fully open
287
288byte areaconnect[NUMAREAS][NUMAREAS];
289
290boolean areabyplayer[NUMAREAS];
291
292
293/*
294==============
295=
296= ConnectAreas
297=
298= Scans outward from playerarea, marking all connected areas
299=
300==============
301*/
302
303void RecursiveConnect (int areanumber)
304{
305 int i;
306
307 for (i=0;i<NUMAREAS;i++)
308 {
309 if (areaconnect[areanumber][i] && !areabyplayer[i])
310 {
311 areabyplayer[i] = true;
312 RecursiveConnect (i);
313 }
314 }
315}
316
317
318void ConnectAreas (void)
319{
320 memset (areabyplayer,0,sizeof(areabyplayer));
321 areabyplayer[player->areanumber] = true;
322 RecursiveConnect (player->areanumber);
323}
324
325
326void InitAreas (void)
327{
328 memset (areabyplayer,0,sizeof(areabyplayer));
329 if (player->areanumber < NUMAREAS)
330 areabyplayer[player->areanumber] = true;
331}
332
333
334
335/*
336===============
337=
338= InitDoorList
339=
340===============
341*/
342
343void InitDoorList (void)
344{
345 memset (areabyplayer,0,sizeof(areabyplayer));
346 memset (areaconnect,0,sizeof(areaconnect));
347
348 lastdoorobj = &doorobjlist[0];
349 doornum = 0;
350}
351
352
353/*
354===============
355=
356= SpawnDoor
357=
358===============
359*/
360
361void SpawnDoor (int tilex, int tiley, boolean vertical, int lock)
362{
363 word *map;
364
365 if (doornum==MAXDOORS)
366 Quit ("64+ doors on level!");
367
368 doorposition[doornum] = 0; // doors start out fully closed
369 lastdoorobj->tilex = tilex;
370 lastdoorobj->tiley = tiley;
371 lastdoorobj->vertical = vertical;
372 lastdoorobj->lock = lock;
373 lastdoorobj->action = dr_closed;
374
375 actorat[tilex][tiley] = (objtype *)(uintptr_t)(doornum | 0x80); // consider it a solid wall
376
377 //
378 // make the door tile a special tile, and mark the adjacent tiles
379 // for door sides
380 //
381 tilemap[tilex][tiley] = doornum | 0x80;
382 map = mapsegs[0] + (tiley<<mapshift) +tilex;
383 if (vertical)
384 {
385 *map = *(map-1); // set area number
386 tilemap[tilex][tiley-1] |= 0x40;
387 tilemap[tilex][tiley+1] |= 0x40;
388 }
389 else
390 {
391 *map = *(map-mapwidth); // set area number
392 tilemap[tilex-1][tiley] |= 0x40;
393 tilemap[tilex+1][tiley] |= 0x40;
394 }
395
396 doornum++;
397 lastdoorobj++;
398}
399
400//===========================================================================
401
402/*
403=====================
404=
405= OpenDoor
406=
407=====================
408*/
409
410void OpenDoor (int door)
411{
412 if (doorobjlist[door].action == dr_open)
413 doorobjlist[door].ticcount = 0; // reset open time
414 else
415 doorobjlist[door].action = dr_opening; // start it opening
416}
417
418
419/*
420=====================
421=
422= CloseDoor
423=
424=====================
425*/
426
427void CloseDoor (int door)
428{
429 int tilex,tiley,area;
430 objtype *check;
431
432 //
433 // don't close on anything solid
434 //
435 tilex = doorobjlist[door].tilex;
436 tiley = doorobjlist[door].tiley;
437
438 if (actorat[tilex][tiley])
439 return;
440
441 if (player->tilex == tilex && player->tiley == tiley)
442 return;
443
444 if (doorobjlist[door].vertical)
445 {
446 if ( player->tiley == tiley )
447 {
448 if ( ((player->x+MINDIST) >>TILESHIFT) == tilex )
449 return;
450 if ( ((player->x-MINDIST) >>TILESHIFT) == tilex )
451 return;
452 }
453 check = actorat[tilex-1][tiley];
454 if (ISPOINTER(check) && ((check->x+MINDIST) >> TILESHIFT) == tilex )
455 return;
456 check = actorat[tilex+1][tiley];
457 if (ISPOINTER(check) && ((check->x-MINDIST) >> TILESHIFT) == tilex )
458 return;
459 }
460 else if (!doorobjlist[door].vertical)
461 {
462 if (player->tilex == tilex)
463 {
464 if ( ((player->y+MINDIST) >>TILESHIFT) == tiley )
465 return;
466 if ( ((player->y-MINDIST) >>TILESHIFT) == tiley )
467 return;
468 }
469 check = actorat[tilex][tiley-1];
470 if (ISPOINTER(check) && ((check->y+MINDIST) >> TILESHIFT) == tiley )
471 return;
472 check = actorat[tilex][tiley+1];
473 if (ISPOINTER(check) && ((check->y-MINDIST) >> TILESHIFT) == tiley )
474 return;
475 }
476
477
478 //
479 // play door sound if in a connected area
480 //
481 area = *(mapsegs[0] + (doorobjlist[door].tiley<<mapshift)
482 +doorobjlist[door].tilex)-AREATILE;
483 if (areabyplayer[area])
484 {
485 PlaySoundLocTile(CLOSEDOORSND,doorobjlist[door].tilex,doorobjlist[door].tiley); // JAB
486 }
487
488 doorobjlist[door].action = dr_closing;
489 //
490 // make the door space solid
491 //
492 actorat[tilex][tiley] = (objtype *)(uintptr_t)(door | 0x80);
493}
494
495
496
497/*
498=====================
499=
500= OperateDoor
501=
502= The player wants to change the door's direction
503=
504=====================
505*/
506
507void OperateDoor (int door)
508{
509 int lock;
510
511 lock = doorobjlist[door].lock;
512 if (lock >= dr_lock1 && lock <= dr_lock4)
513 {
514 if ( ! (gamestate.keys & (1 << (lock-dr_lock1) ) ) )
515 {
516 SD_PlaySound (NOWAYSND); // locked
517 return;
518 }
519 }
520
521 switch (doorobjlist[door].action)
522 {
523 case dr_closed:
524 case dr_closing:
525 OpenDoor (door);
526 break;
527 case dr_open:
528 case dr_opening:
529 CloseDoor (door);
530 break;
531 }
532}
533
534
535//===========================================================================
536
537/*
538===============
539=
540= DoorOpen
541=
542= Close the door after three seconds
543=
544===============
545*/
546
547void DoorOpen (int door)
548{
549 if ( (doorobjlist[door].ticcount += (short) tics) >= OPENTICS)
550 CloseDoor (door);
551}
552
553
554
555/*
556===============
557=
558= DoorOpening
559=
560===============
561*/
562
563void DoorOpening (int door)
564{
565 unsigned area1,area2;
566 word *map;
567 int32_t position;
568
569 position = doorposition[door];
570 if (!position)
571 {
572 //
573 // door is just starting to open, so connect the areas
574 //
575 map = mapsegs[0] + (doorobjlist[door].tiley<<mapshift)
576 +doorobjlist[door].tilex;
577
578 if (doorobjlist[door].vertical)
579 {
580 area1 = *(map+1);
581 area2 = *(map-1);
582 }
583 else
584 {
585 area1 = *(map-mapwidth);
586 area2 = *(map+mapwidth);
587 }
588 area1 -= AREATILE;
589 area2 -= AREATILE;
590
591 if (area1 < NUMAREAS && area2 < NUMAREAS)
592 {
593 areaconnect[area1][area2]++;
594 areaconnect[area2][area1]++;
595
596 if (player->areanumber < NUMAREAS)
597 ConnectAreas ();
598
599 if (areabyplayer[area1])
600 PlaySoundLocTile(OPENDOORSND,doorobjlist[door].tilex,doorobjlist[door].tiley); // JAB
601 }
602 }
603
604 //
605 // slide the door by an adaptive amount
606 //
607 position += tics<<10;
608 if (position >= 0xffff)
609 {
610 //
611 // door is all the way open
612 //
613 position = 0xffff;
614 doorobjlist[door].ticcount = 0;
615 doorobjlist[door].action = dr_open;
616 actorat[doorobjlist[door].tilex][doorobjlist[door].tiley] = 0;
617 }
618
619 doorposition[door] = (word) position;
620}
621
622
623/*
624===============
625=
626= DoorClosing
627=
628===============
629*/
630
631void DoorClosing (int door)
632{
633 unsigned area1,area2;
634 word *map;
635 int32_t position;
636 int tilex,tiley;
637
638 tilex = doorobjlist[door].tilex;
639 tiley = doorobjlist[door].tiley;
640
641 if ( ((int)(uintptr_t)actorat[tilex][tiley] != (door | 0x80))
642 || (player->tilex == tilex && player->tiley == tiley) )
643 { // something got inside the door
644 OpenDoor (door);
645 return;
646 };
647
648 position = doorposition[door];
649
650 //
651 // slide the door by an adaptive amount
652 //
653 position -= tics<<10;
654 if (position <= 0)
655 {
656 //
657 // door is closed all the way, so disconnect the areas
658 //
659 position = 0;
660
661 doorobjlist[door].action = dr_closed;
662
663 map = mapsegs[0] + (doorobjlist[door].tiley<<mapshift) + doorobjlist[door].tilex;
664
665 if (doorobjlist[door].vertical)
666 {
667 area1 = *(map+1);
668 area2 = *(map-1);
669 }
670 else
671 {
672 area1 = *(map-mapwidth);
673 area2 = *(map+mapwidth);
674 }
675 area1 -= AREATILE;
676 area2 -= AREATILE;
677
678 if (area1 < NUMAREAS && area2 < NUMAREAS)
679 {
680 areaconnect[area1][area2]--;
681 areaconnect[area2][area1]--;
682
683 if (player->areanumber < NUMAREAS)
684 ConnectAreas ();
685 }
686 }
687
688 doorposition[door] = (word) position;
689}
690
691
692
693
694/*
695=====================
696=
697= MoveDoors
698=
699= Called from PlayLoop
700=
701=====================
702*/
703
704void MoveDoors (void)
705{
706 int door;
707
708 if (gamestate.victoryflag) // don't move door during victory sequence
709 return;
710
711 for (door = 0; door < doornum; door++)
712 {
713 switch (doorobjlist[door].action)
714 {
715 case dr_open:
716 DoorOpen (door);
717 break;
718
719 case dr_opening:
720 DoorOpening(door);
721 break;
722
723 case dr_closing:
724 DoorClosing(door);
725 break;
726 }
727 }
728}
729
730
731/*
732=============================================================================
733
734 PUSHABLE WALLS
735
736=============================================================================
737*/
738
739word pwallstate;
740word pwallpos; // amount a pushable wall has been moved (0-63)
741word pwallx,pwally;
742byte pwalldir,pwalltile;
743int dirs[4][2]={{0,-1},{1,0},{0,1},{-1,0}};
744
745/*
746===============
747=
748= PushWall
749=
750===============
751*/
752
753void PushWall (int checkx, int checky, int dir)
754{
755 int oldtile, dx, dy;
756
757 if (pwallstate)
758 return;
759
760 oldtile = tilemap[checkx][checky];
761 if (!oldtile)
762 return;
763
764 dx = dirs[dir][0];
765 dy = dirs[dir][1];
766
767 if (actorat[checkx+dx][checky+dy])
768 {
769 SD_PlaySound (NOWAYSND);
770 return;
771 }
772 actorat[checkx+dx][checky+dy] = (objtype *)(uintptr_t) (tilemap[checkx+dx][checky+dy] = oldtile);
773
774 gamestate.secretcount++;
775 pwallx = checkx;
776 pwally = checky;
777 pwalldir = dir;
778 pwallstate = 1;
779 pwallpos = 0;
780 pwalltile = tilemap[pwallx][pwally];
781 tilemap[pwallx][pwally] = 64;
782 tilemap[pwallx+dx][pwally+dy] = 64;
783 *(mapsegs[1]+(pwally<<mapshift)+pwallx) = 0; // remove P tile info
784 *(mapsegs[0]+(pwally<<mapshift)+pwallx) = *(mapsegs[0]+(player->tiley<<mapshift)+player->tilex); // set correct floorcode (BrotherTank's fix)
785
786 SD_PlaySound (PUSHWALLSND);
787}
788
789
790
791/*
792=================
793=
794= MovePWalls
795=
796=================
797*/
798
799void MovePWalls (void)
800{
801 int oldblock,oldtile;
802
803 if (!pwallstate)
804 return;
805
806 oldblock = pwallstate/128;
807
808 pwallstate += (word)tics;
809
810 if (pwallstate/128 != oldblock)
811 {
812 // block crossed into a new block
813 oldtile = pwalltile;
814
815 //
816 // the tile can now be walked into
817 //
818 tilemap[pwallx][pwally] = 0;
819 actorat[pwallx][pwally] = 0;
820 *(mapsegs[0]+(pwally<<mapshift)+pwallx) = player->areanumber+AREATILE;
821
822 int dx=dirs[pwalldir][0], dy=dirs[pwalldir][1];
823 //
824 // see if it should be pushed farther
825 //
826 if (pwallstate>=256) // only move two tiles fix
827 {
828 //
829 // the block has been pushed two tiles
830 //
831 pwallstate = 0;
832 tilemap[pwallx+dx][pwally+dy] = oldtile;
833 return;
834 }
835 else
836 {
837 int xl,yl,xh,yh;
838 xl = (player->x-PLAYERSIZE) >> TILESHIFT;
839 yl = (player->y-PLAYERSIZE) >> TILESHIFT;
840 xh = (player->x+PLAYERSIZE) >> TILESHIFT;
841 yh = (player->y+PLAYERSIZE) >> TILESHIFT;
842
843 pwallx += dx;
844 pwally += dy;
845
846 if (actorat[pwallx+dx][pwally+dy]
847 || xl<=pwallx+dx && pwallx+dx<=xh && yl<=pwally+dy && pwally+dy<=yh)
848 {
849 pwallstate = 0;
850 tilemap[pwallx][pwally] = oldtile;
851 return;
852 }
853 actorat[pwallx+dx][pwally+dy] = (objtype *)(uintptr_t) (tilemap[pwallx+dx][pwally+dy] = oldtile);
854 tilemap[pwallx+dx][pwally+dy] = 64;
855 }
856 }
857
858 pwallpos = (pwallstate/2)&63;
859}
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 @@
1// WL_ACT2.C
2
3#include <stdio.h>
4#include <math.h>
5#include "wl_def.h"
6#pragma hdrstop
7
8/*
9=============================================================================
10
11 LOCAL CONSTANTS
12
13=============================================================================
14*/
15
16#define PROJECTILESIZE 0xc000l
17
18#define BJRUNSPEED 2048
19#define BJJUMPSPEED 680
20
21
22/*
23=============================================================================
24
25 GLOBAL VARIABLES
26
27=============================================================================
28*/
29
30
31
32/*
33=============================================================================
34
35 LOCAL VARIABLES
36
37=============================================================================
38*/
39
40
41dirtype dirtable[9] = {northwest,north,northeast,west,nodir,east,
42 southwest,south,southeast};
43
44short starthitpoints[4][NUMENEMIES] =
45//
46// BABY MODE
47//
48{
49 {
50 25, // guards
51 50, // officer
52 100, // SS
53 1, // dogs
54 850, // Hans
55 850, // Schabbs
56 200, // fake hitler
57 800, // mecha hitler
58 45, // mutants
59 25, // ghosts
60 25, // ghosts
61 25, // ghosts
62 25, // ghosts
63
64 850, // Gretel
65 850, // Gift
66 850, // Fat
67 5, // en_spectre,
68 1450, // en_angel,
69 850, // en_trans,
70 1050, // en_uber,
71 950, // en_will,
72 1250 // en_death
73 },
74 //
75 // DON'T HURT ME MODE
76 //
77 {
78 25, // guards
79 50, // officer
80 100, // SS
81 1, // dogs
82 950, // Hans
83 950, // Schabbs
84 300, // fake hitler
85 950, // mecha hitler
86 55, // mutants
87 25, // ghosts
88 25, // ghosts
89 25, // ghosts
90 25, // ghosts
91
92 950, // Gretel
93 950, // Gift
94 950, // Fat
95 10, // en_spectre,
96 1550, // en_angel,
97 950, // en_trans,
98 1150, // en_uber,
99 1050, // en_will,
100 1350 // en_death
101 },
102 //
103 // BRING 'EM ON MODE
104 //
105 {
106 25, // guards
107 50, // officer
108 100, // SS
109 1, // dogs
110
111 1050, // Hans
112 1550, // Schabbs
113 400, // fake hitler
114 1050, // mecha hitler
115
116 55, // mutants
117 25, // ghosts
118 25, // ghosts
119 25, // ghosts
120 25, // ghosts
121
122 1050, // Gretel
123 1050, // Gift
124 1050, // Fat
125 15, // en_spectre,
126 1650, // en_angel,
127 1050, // en_trans,
128 1250, // en_uber,
129 1150, // en_will,
130 1450 // en_death
131 },
132 //
133 // DEATH INCARNATE MODE
134 //
135 {
136 25, // guards
137 50, // officer
138 100, // SS
139 1, // dogs
140
141 1200, // Hans
142 2400, // Schabbs
143 500, // fake hitler
144 1200, // mecha hitler
145
146 65, // mutants
147 25, // ghosts
148 25, // ghosts
149 25, // ghosts
150 25, // ghosts
151
152 1200, // Gretel
153 1200, // Gift
154 1200, // Fat
155 25, // en_spectre,
156 2000, // en_angel,
157 1200, // en_trans,
158 1400, // en_uber,
159 1300, // en_will,
160 1600 // en_death
161 }
162};
163
164void A_StartDeathCam (objtype *ob);
165
166
167void T_Path (objtype *ob);
168void T_Shoot (objtype *ob);
169void T_Bite (objtype *ob);
170void T_DogChase (objtype *ob);
171void T_Chase (objtype *ob);
172void T_Projectile (objtype *ob);
173void T_Stand (objtype *ob);
174
175void A_DeathScream (objtype *ob);
176
177extern statetype s_rocket;
178extern statetype s_smoke1;
179extern statetype s_smoke2;
180extern statetype s_smoke3;
181extern statetype s_smoke4;
182extern statetype s_boom2;
183extern statetype s_boom3;
184
185void A_Smoke (objtype *ob);
186
187statetype s_rocket = {true,SPR_ROCKET_1,3,(statefunc)T_Projectile,(statefunc)A_Smoke,&s_rocket};
188statetype s_smoke1 = {false,SPR_SMOKE_1,3,NULL,NULL,&s_smoke2};
189statetype s_smoke2 = {false,SPR_SMOKE_2,3,NULL,NULL,&s_smoke3};
190statetype s_smoke3 = {false,SPR_SMOKE_3,3,NULL,NULL,&s_smoke4};
191statetype s_smoke4 = {false,SPR_SMOKE_4,3,NULL,NULL,NULL};
192
193statetype s_boom1 = {false,SPR_BOOM_1,6,NULL,NULL,&s_boom2};
194statetype s_boom2 = {false,SPR_BOOM_2,6,NULL,NULL,&s_boom3};
195statetype s_boom3 = {false,SPR_BOOM_3,6,NULL,NULL,NULL};
196
197#ifdef SPEAR
198
199extern statetype s_hrocket;
200extern statetype s_hsmoke1;
201extern statetype s_hsmoke2;
202extern statetype s_hsmoke3;
203extern statetype s_hsmoke4;
204extern statetype s_hboom2;
205extern statetype s_hboom3;
206
207void A_Smoke (objtype *ob);
208
209statetype s_hrocket = {true,SPR_HROCKET_1,3,(statefunc)T_Projectile,(statefunc)A_Smoke,&s_hrocket};
210statetype s_hsmoke1 = {false,SPR_HSMOKE_1,3,NULL,NULL,&s_hsmoke2};
211statetype s_hsmoke2 = {false,SPR_HSMOKE_2,3,NULL,NULL,&s_hsmoke3};
212statetype s_hsmoke3 = {false,SPR_HSMOKE_3,3,NULL,NULL,&s_hsmoke4};
213statetype s_hsmoke4 = {false,SPR_HSMOKE_4,3,NULL,NULL,NULL};
214
215statetype s_hboom1 = {false,SPR_HBOOM_1,6,NULL,NULL,&s_hboom2};
216statetype s_hboom2 = {false,SPR_HBOOM_2,6,NULL,NULL,&s_hboom3};
217statetype s_hboom3 = {false,SPR_HBOOM_3,6,NULL,NULL,NULL};
218
219#endif
220
221void T_Schabb (objtype *ob);
222void T_SchabbThrow (objtype *ob);
223void T_Fake (objtype *ob);
224void T_FakeFire (objtype *ob);
225void T_Ghosts (objtype *ob);
226
227void A_Slurpie (objtype *ob);
228void A_HitlerMorph (objtype *ob);
229void A_MechaSound (objtype *ob);
230
231/*
232=================
233=
234= A_Smoke
235=
236=================
237*/
238
239void A_Smoke (objtype *ob)
240{
241 GetNewActor ();
242#ifdef SPEAR
243 if (ob->obclass == hrocketobj)
244 newobj->state = &s_hsmoke1;
245 else
246#endif
247 newobj->state = &s_smoke1;
248 newobj->ticcount = 6;
249
250 newobj->tilex = ob->tilex;
251 newobj->tiley = ob->tiley;
252 newobj->x = ob->x;
253 newobj->y = ob->y;
254 newobj->obclass = inertobj;
255 newobj->active = ac_yes;
256
257 newobj->flags = FL_NEVERMARK;
258}
259
260
261/*
262===================
263=
264= ProjectileTryMove
265=
266= returns true if move ok
267===================
268*/
269
270#define PROJSIZE 0x2000
271
272boolean ProjectileTryMove (objtype *ob)
273{
274 int xl,yl,xh,yh,x,y;
275 objtype *check;
276
277 xl = (ob->x-PROJSIZE) >> TILESHIFT;
278 yl = (ob->y-PROJSIZE) >> TILESHIFT;
279
280 xh = (ob->x+PROJSIZE) >> TILESHIFT;
281 yh = (ob->y+PROJSIZE) >> TILESHIFT;
282
283 //
284 // check for solid walls
285 //
286 for (y=yl;y<=yh;y++)
287 for (x=xl;x<=xh;x++)
288 {
289 check = actorat[x][y];
290 if (check && !ISPOINTER(check))
291 return false;
292 }
293
294 return true;
295}
296
297
298
299/*
300=================
301=
302= T_Projectile
303=
304=================
305*/
306
307void T_Projectile (objtype *ob)
308{
309 int32_t deltax,deltay;
310 int damage;
311 int32_t speed;
312
313 speed = (int32_t)ob->speed*tics;
314
315 deltax = FixedMul(speed,costable[ob->angle]);
316 deltay = -FixedMul(speed,sintable[ob->angle]);
317
318 if (deltax>0x10000l)
319 deltax = 0x10000l;
320 if (deltay>0x10000l)
321 deltay = 0x10000l;
322
323 ob->x += deltax;
324 ob->y += deltay;
325
326 deltax = LABS(ob->x - player->x);
327 deltay = LABS(ob->y - player->y);
328
329 if (!ProjectileTryMove (ob))
330 {
331#ifndef APOGEE_1_0 // actually the whole method is never reached in shareware 1.0
332 if (ob->obclass == rocketobj)
333 {
334 PlaySoundLocActor(MISSILEHITSND,ob);
335 ob->state = &s_boom1;
336 }
337#ifdef SPEAR
338 else if (ob->obclass == hrocketobj)
339 {
340 PlaySoundLocActor(MISSILEHITSND,ob);
341 ob->state = &s_hboom1;
342 }
343#endif
344 else
345#endif
346 ob->state = NULL; // mark for removal
347
348 return;
349 }
350
351 if (deltax < PROJECTILESIZE && deltay < PROJECTILESIZE)
352 { // hit the player
353 switch (ob->obclass)
354 {
355 case needleobj:
356 damage = (US_RndT() >>3) + 20;
357 break;
358 case rocketobj:
359 case hrocketobj:
360 case sparkobj:
361 damage = (US_RndT() >>3) + 30;
362 break;
363 case fireobj:
364 damage = (US_RndT() >>3);
365 break;
366 }
367
368 TakeDamage (damage,ob);
369 ob->state = NULL; // mark for removal
370 return;
371 }
372
373 ob->tilex = (short)(ob->x >> TILESHIFT);
374 ob->tiley = (short)(ob->y >> TILESHIFT);
375}
376
377
378/*
379=============================================================================
380
381GUARD
382
383=============================================================================
384*/
385
386//
387// guards
388//
389
390extern statetype s_grdstand;
391
392extern statetype s_grdpath1;
393extern statetype s_grdpath1s;
394extern statetype s_grdpath2;
395extern statetype s_grdpath3;
396extern statetype s_grdpath3s;
397extern statetype s_grdpath4;
398
399extern statetype s_grdpain;
400extern statetype s_grdpain1;
401
402extern statetype s_grdgiveup;
403
404extern statetype s_grdshoot1;
405extern statetype s_grdshoot2;
406extern statetype s_grdshoot3;
407extern statetype s_grdshoot4;
408
409extern statetype s_grdchase1;
410extern statetype s_grdchase1s;
411extern statetype s_grdchase2;
412extern statetype s_grdchase3;
413extern statetype s_grdchase3s;
414extern statetype s_grdchase4;
415
416extern statetype s_grddie1;
417extern statetype s_grddie1d;
418extern statetype s_grddie2;
419extern statetype s_grddie3;
420extern statetype s_grddie4;
421
422statetype s_grdstand = {true,SPR_GRD_S_1,0,(statefunc)T_Stand,NULL,&s_grdstand};
423
424statetype s_grdpath1 = {true,SPR_GRD_W1_1,20,(statefunc)T_Path,NULL,&s_grdpath1s};
425statetype s_grdpath1s = {true,SPR_GRD_W1_1,5,NULL,NULL,&s_grdpath2};
426statetype s_grdpath2 = {true,SPR_GRD_W2_1,15,(statefunc)T_Path,NULL,&s_grdpath3};
427statetype s_grdpath3 = {true,SPR_GRD_W3_1,20,(statefunc)T_Path,NULL,&s_grdpath3s};
428statetype s_grdpath3s = {true,SPR_GRD_W3_1,5,NULL,NULL,&s_grdpath4};
429statetype s_grdpath4 = {true,SPR_GRD_W4_1,15,(statefunc)T_Path,NULL,&s_grdpath1};
430
431statetype s_grdpain = {2,SPR_GRD_PAIN_1,10,NULL,NULL,&s_grdchase1};
432statetype s_grdpain1 = {2,SPR_GRD_PAIN_2,10,NULL,NULL,&s_grdchase1};
433
434statetype s_grdshoot1 = {false,SPR_GRD_SHOOT1,20,NULL,NULL,&s_grdshoot2};
435statetype s_grdshoot2 = {false,SPR_GRD_SHOOT2,20,NULL,(statefunc)T_Shoot,&s_grdshoot3};
436statetype s_grdshoot3 = {false,SPR_GRD_SHOOT3,20,NULL,NULL,&s_grdchase1};
437
438statetype s_grdchase1 = {true,SPR_GRD_W1_1,10,(statefunc)T_Chase,NULL,&s_grdchase1s};
439statetype s_grdchase1s = {true,SPR_GRD_W1_1,3,NULL,NULL,&s_grdchase2};
440statetype s_grdchase2 = {true,SPR_GRD_W2_1,8,(statefunc)T_Chase,NULL,&s_grdchase3};
441statetype s_grdchase3 = {true,SPR_GRD_W3_1,10,(statefunc)T_Chase,NULL,&s_grdchase3s};
442statetype s_grdchase3s = {true,SPR_GRD_W3_1,3,NULL,NULL,&s_grdchase4};
443statetype s_grdchase4 = {true,SPR_GRD_W4_1,8,(statefunc)T_Chase,NULL,&s_grdchase1};
444
445statetype s_grddie1 = {false,SPR_GRD_DIE_1,15,NULL,(statefunc)A_DeathScream,&s_grddie2};
446statetype s_grddie2 = {false,SPR_GRD_DIE_2,15,NULL,NULL,&s_grddie3};
447statetype s_grddie3 = {false,SPR_GRD_DIE_3,15,NULL,NULL,&s_grddie4};
448statetype s_grddie4 = {false,SPR_GRD_DEAD,0,NULL,NULL,&s_grddie4};
449
450
451#ifndef SPEAR
452//
453// ghosts
454//
455extern statetype s_blinkychase1;
456extern statetype s_blinkychase2;
457extern statetype s_inkychase1;
458extern statetype s_inkychase2;
459extern statetype s_pinkychase1;
460extern statetype s_pinkychase2;
461extern statetype s_clydechase1;
462extern statetype s_clydechase2;
463
464statetype s_blinkychase1 = {false,SPR_BLINKY_W1,10,(statefunc)T_Ghosts,NULL,&s_blinkychase2};
465statetype s_blinkychase2 = {false,SPR_BLINKY_W2,10,(statefunc)T_Ghosts,NULL,&s_blinkychase1};
466
467statetype s_inkychase1 = {false,SPR_INKY_W1,10,(statefunc)T_Ghosts,NULL,&s_inkychase2};
468statetype s_inkychase2 = {false,SPR_INKY_W2,10,(statefunc)T_Ghosts,NULL,&s_inkychase1};
469
470statetype s_pinkychase1 = {false,SPR_PINKY_W1,10,(statefunc)T_Ghosts,NULL,&s_pinkychase2};
471statetype s_pinkychase2 = {false,SPR_PINKY_W2,10,(statefunc)T_Ghosts,NULL,&s_pinkychase1};
472
473statetype s_clydechase1 = {false,SPR_CLYDE_W1,10,(statefunc)T_Ghosts,NULL,&s_clydechase2};
474statetype s_clydechase2 = {false,SPR_CLYDE_W2,10,(statefunc)T_Ghosts,NULL,&s_clydechase1};
475#endif
476
477//
478// dogs
479//
480
481extern statetype s_dogpath1;
482extern statetype s_dogpath1s;
483extern statetype s_dogpath2;
484extern statetype s_dogpath3;
485extern statetype s_dogpath3s;
486extern statetype s_dogpath4;
487
488extern statetype s_dogjump1;
489extern statetype s_dogjump2;
490extern statetype s_dogjump3;
491extern statetype s_dogjump4;
492extern statetype s_dogjump5;
493
494extern statetype s_dogchase1;
495extern statetype s_dogchase1s;
496extern statetype s_dogchase2;
497extern statetype s_dogchase3;
498extern statetype s_dogchase3s;
499extern statetype s_dogchase4;
500
501extern statetype s_dogdie1;
502extern statetype s_dogdie1d;
503extern statetype s_dogdie2;
504extern statetype s_dogdie3;
505extern statetype s_dogdead;
506
507statetype s_dogpath1 = {true,SPR_DOG_W1_1,20,(statefunc)T_Path,NULL,&s_dogpath1s};
508statetype s_dogpath1s = {true,SPR_DOG_W1_1,5,NULL,NULL,&s_dogpath2};
509statetype s_dogpath2 = {true,SPR_DOG_W2_1,15,(statefunc)T_Path,NULL,&s_dogpath3};
510statetype s_dogpath3 = {true,SPR_DOG_W3_1,20,(statefunc)T_Path,NULL,&s_dogpath3s};
511statetype s_dogpath3s = {true,SPR_DOG_W3_1,5,NULL,NULL,&s_dogpath4};
512statetype s_dogpath4 = {true,SPR_DOG_W4_1,15,(statefunc)T_Path,NULL,&s_dogpath1};
513
514statetype s_dogjump1 = {false,SPR_DOG_JUMP1,10,NULL,NULL,&s_dogjump2};
515statetype s_dogjump2 = {false,SPR_DOG_JUMP2,10,NULL,(statefunc)T_Bite,&s_dogjump3};
516statetype s_dogjump3 = {false,SPR_DOG_JUMP3,10,NULL,NULL,&s_dogjump4};
517statetype s_dogjump4 = {false,SPR_DOG_JUMP1,10,NULL,NULL,&s_dogjump5};
518statetype s_dogjump5 = {false,SPR_DOG_W1_1,10,NULL,NULL,&s_dogchase1};
519
520statetype s_dogchase1 = {true,SPR_DOG_W1_1,10,(statefunc)T_DogChase,NULL,&s_dogchase1s};
521statetype s_dogchase1s = {true,SPR_DOG_W1_1,3,NULL,NULL,&s_dogchase2};
522statetype s_dogchase2 = {true,SPR_DOG_W2_1,8,(statefunc)T_DogChase,NULL,&s_dogchase3};
523statetype s_dogchase3 = {true,SPR_DOG_W3_1,10,(statefunc)T_DogChase,NULL,&s_dogchase3s};
524statetype s_dogchase3s = {true,SPR_DOG_W3_1,3,NULL,NULL,&s_dogchase4};
525statetype s_dogchase4 = {true,SPR_DOG_W4_1,8,(statefunc)T_DogChase,NULL,&s_dogchase1};
526
527statetype s_dogdie1 = {false,SPR_DOG_DIE_1,15,NULL,(statefunc)A_DeathScream,&s_dogdie2};
528statetype s_dogdie2 = {false,SPR_DOG_DIE_2,15,NULL,NULL,&s_dogdie3};
529statetype s_dogdie3 = {false,SPR_DOG_DIE_3,15,NULL,NULL,&s_dogdead};
530statetype s_dogdead = {false,SPR_DOG_DEAD,15,NULL,NULL,&s_dogdead};
531
532
533//
534// officers
535//
536
537extern statetype s_ofcstand;
538
539extern statetype s_ofcpath1;
540extern statetype s_ofcpath1s;
541extern statetype s_ofcpath2;
542extern statetype s_ofcpath3;
543extern statetype s_ofcpath3s;
544extern statetype s_ofcpath4;
545
546extern statetype s_ofcpain;
547extern statetype s_ofcpain1;
548
549extern statetype s_ofcgiveup;
550
551extern statetype s_ofcshoot1;
552extern statetype s_ofcshoot2;
553extern statetype s_ofcshoot3;
554extern statetype s_ofcshoot4;
555
556extern statetype s_ofcchase1;
557extern statetype s_ofcchase1s;
558extern statetype s_ofcchase2;
559extern statetype s_ofcchase3;
560extern statetype s_ofcchase3s;
561extern statetype s_ofcchase4;
562
563extern statetype s_ofcdie1;
564extern statetype s_ofcdie2;
565extern statetype s_ofcdie3;
566extern statetype s_ofcdie4;
567extern statetype s_ofcdie5;
568
569statetype s_ofcstand = {true,SPR_OFC_S_1,0,(statefunc)T_Stand,NULL,&s_ofcstand};
570
571statetype s_ofcpath1 = {true,SPR_OFC_W1_1,20,(statefunc)T_Path,NULL,&s_ofcpath1s};
572statetype s_ofcpath1s = {true,SPR_OFC_W1_1,5,NULL,NULL,&s_ofcpath2};
573statetype s_ofcpath2 = {true,SPR_OFC_W2_1,15,(statefunc)T_Path,NULL,&s_ofcpath3};
574statetype s_ofcpath3 = {true,SPR_OFC_W3_1,20,(statefunc)T_Path,NULL,&s_ofcpath3s};
575statetype s_ofcpath3s = {true,SPR_OFC_W3_1,5,NULL,NULL,&s_ofcpath4};
576statetype s_ofcpath4 = {true,SPR_OFC_W4_1,15,(statefunc)T_Path,NULL,&s_ofcpath1};
577
578statetype s_ofcpain = {2,SPR_OFC_PAIN_1,10,NULL,NULL,&s_ofcchase1};
579statetype s_ofcpain1 = {2,SPR_OFC_PAIN_2,10,NULL,NULL,&s_ofcchase1};
580
581statetype s_ofcshoot1 = {false,SPR_OFC_SHOOT1,6,NULL,NULL,&s_ofcshoot2};
582statetype s_ofcshoot2 = {false,SPR_OFC_SHOOT2,20,NULL,(statefunc)T_Shoot,&s_ofcshoot3};
583statetype s_ofcshoot3 = {false,SPR_OFC_SHOOT3,10,NULL,NULL,&s_ofcchase1};
584
585statetype s_ofcchase1 = {true,SPR_OFC_W1_1,10,(statefunc)T_Chase,NULL,&s_ofcchase1s};
586statetype s_ofcchase1s = {true,SPR_OFC_W1_1,3,NULL,NULL,&s_ofcchase2};
587statetype s_ofcchase2 = {true,SPR_OFC_W2_1,8,(statefunc)T_Chase,NULL,&s_ofcchase3};
588statetype s_ofcchase3 = {true,SPR_OFC_W3_1,10,(statefunc)T_Chase,NULL,&s_ofcchase3s};
589statetype s_ofcchase3s = {true,SPR_OFC_W3_1,3,NULL,NULL,&s_ofcchase4};
590statetype s_ofcchase4 = {true,SPR_OFC_W4_1,8,(statefunc)T_Chase,NULL,&s_ofcchase1};
591
592statetype s_ofcdie1 = {false,SPR_OFC_DIE_1,11,NULL,(statefunc)A_DeathScream,&s_ofcdie2};
593statetype s_ofcdie2 = {false,SPR_OFC_DIE_2,11,NULL,NULL,&s_ofcdie3};
594statetype s_ofcdie3 = {false,SPR_OFC_DIE_3,11,NULL,NULL,&s_ofcdie4};
595statetype s_ofcdie4 = {false,SPR_OFC_DIE_4,11,NULL,NULL,&s_ofcdie5};
596statetype s_ofcdie5 = {false,SPR_OFC_DEAD,0,NULL,NULL,&s_ofcdie5};
597
598
599//
600// mutant
601//
602
603extern statetype s_mutstand;
604
605extern statetype s_mutpath1;
606extern statetype s_mutpath1s;
607extern statetype s_mutpath2;
608extern statetype s_mutpath3;
609extern statetype s_mutpath3s;
610extern statetype s_mutpath4;
611
612extern statetype s_mutpain;
613extern statetype s_mutpain1;
614
615extern statetype s_mutgiveup;
616
617extern statetype s_mutshoot1;
618extern statetype s_mutshoot2;
619extern statetype s_mutshoot3;
620extern statetype s_mutshoot4;
621
622extern statetype s_mutchase1;
623extern statetype s_mutchase1s;
624extern statetype s_mutchase2;
625extern statetype s_mutchase3;
626extern statetype s_mutchase3s;
627extern statetype s_mutchase4;
628
629extern statetype s_mutdie1;
630extern statetype s_mutdie2;
631extern statetype s_mutdie3;
632extern statetype s_mutdie4;
633extern statetype s_mutdie5;
634
635statetype s_mutstand = {true,SPR_MUT_S_1,0,(statefunc)T_Stand,NULL,&s_mutstand};
636
637statetype s_mutpath1 = {true,SPR_MUT_W1_1,20,(statefunc)T_Path,NULL,&s_mutpath1s};
638statetype s_mutpath1s = {true,SPR_MUT_W1_1,5,NULL,NULL,&s_mutpath2};
639statetype s_mutpath2 = {true,SPR_MUT_W2_1,15,(statefunc)T_Path,NULL,&s_mutpath3};
640statetype s_mutpath3 = {true,SPR_MUT_W3_1,20,(statefunc)T_Path,NULL,&s_mutpath3s};
641statetype s_mutpath3s = {true,SPR_MUT_W3_1,5,NULL,NULL,&s_mutpath4};
642statetype s_mutpath4 = {true,SPR_MUT_W4_1,15,(statefunc)T_Path,NULL,&s_mutpath1};
643
644statetype s_mutpain = {2,SPR_MUT_PAIN_1,10,NULL,NULL,&s_mutchase1};
645statetype s_mutpain1 = {2,SPR_MUT_PAIN_2,10,NULL,NULL,&s_mutchase1};
646
647statetype s_mutshoot1 = {false,SPR_MUT_SHOOT1,6,NULL,(statefunc)T_Shoot,&s_mutshoot2};
648statetype s_mutshoot2 = {false,SPR_MUT_SHOOT2,20,NULL,NULL,&s_mutshoot3};
649statetype s_mutshoot3 = {false,SPR_MUT_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_mutshoot4};
650statetype s_mutshoot4 = {false,SPR_MUT_SHOOT4,20,NULL,NULL,&s_mutchase1};
651
652statetype s_mutchase1 = {true,SPR_MUT_W1_1,10,(statefunc)T_Chase,NULL,&s_mutchase1s};
653statetype s_mutchase1s = {true,SPR_MUT_W1_1,3,NULL,NULL,&s_mutchase2};
654statetype s_mutchase2 = {true,SPR_MUT_W2_1,8,(statefunc)T_Chase,NULL,&s_mutchase3};
655statetype s_mutchase3 = {true,SPR_MUT_W3_1,10,(statefunc)T_Chase,NULL,&s_mutchase3s};
656statetype s_mutchase3s = {true,SPR_MUT_W3_1,3,NULL,NULL,&s_mutchase4};
657statetype s_mutchase4 = {true,SPR_MUT_W4_1,8,(statefunc)T_Chase,NULL,&s_mutchase1};
658
659statetype s_mutdie1 = {false,SPR_MUT_DIE_1,7,NULL,(statefunc)A_DeathScream,&s_mutdie2};
660statetype s_mutdie2 = {false,SPR_MUT_DIE_2,7,NULL,NULL,&s_mutdie3};
661statetype s_mutdie3 = {false,SPR_MUT_DIE_3,7,NULL,NULL,&s_mutdie4};
662statetype s_mutdie4 = {false,SPR_MUT_DIE_4,7,NULL,NULL,&s_mutdie5};
663statetype s_mutdie5 = {false,SPR_MUT_DEAD,0,NULL,NULL,&s_mutdie5};
664
665
666//
667// SS
668//
669
670extern statetype s_ssstand;
671
672extern statetype s_sspath1;
673extern statetype s_sspath1s;
674extern statetype s_sspath2;
675extern statetype s_sspath3;
676extern statetype s_sspath3s;
677extern statetype s_sspath4;
678
679extern statetype s_sspain;
680extern statetype s_sspain1;
681
682extern statetype s_ssshoot1;
683extern statetype s_ssshoot2;
684extern statetype s_ssshoot3;
685extern statetype s_ssshoot4;
686extern statetype s_ssshoot5;
687extern statetype s_ssshoot6;
688extern statetype s_ssshoot7;
689extern statetype s_ssshoot8;
690extern statetype s_ssshoot9;
691
692extern statetype s_sschase1;
693extern statetype s_sschase1s;
694extern statetype s_sschase2;
695extern statetype s_sschase3;
696extern statetype s_sschase3s;
697extern statetype s_sschase4;
698
699extern statetype s_ssdie1;
700extern statetype s_ssdie2;
701extern statetype s_ssdie3;
702extern statetype s_ssdie4;
703
704statetype s_ssstand = {true,SPR_SS_S_1,0,(statefunc)T_Stand,NULL,&s_ssstand};
705
706statetype s_sspath1 = {true,SPR_SS_W1_1,20,(statefunc)T_Path,NULL,&s_sspath1s};
707statetype s_sspath1s = {true,SPR_SS_W1_1,5,NULL,NULL,&s_sspath2};
708statetype s_sspath2 = {true,SPR_SS_W2_1,15,(statefunc)T_Path,NULL,&s_sspath3};
709statetype s_sspath3 = {true,SPR_SS_W3_1,20,(statefunc)T_Path,NULL,&s_sspath3s};
710statetype s_sspath3s = {true,SPR_SS_W3_1,5,NULL,NULL,&s_sspath4};
711statetype s_sspath4 = {true,SPR_SS_W4_1,15,(statefunc)T_Path,NULL,&s_sspath1};
712
713statetype s_sspain = {2,SPR_SS_PAIN_1,10,NULL,NULL,&s_sschase1};
714statetype s_sspain1 = {2,SPR_SS_PAIN_2,10,NULL,NULL,&s_sschase1};
715
716statetype s_ssshoot1 = {false,SPR_SS_SHOOT1,20,NULL,NULL,&s_ssshoot2};
717statetype s_ssshoot2 = {false,SPR_SS_SHOOT2,20,NULL,(statefunc)T_Shoot,&s_ssshoot3};
718statetype s_ssshoot3 = {false,SPR_SS_SHOOT3,10,NULL,NULL,&s_ssshoot4};
719statetype s_ssshoot4 = {false,SPR_SS_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_ssshoot5};
720statetype s_ssshoot5 = {false,SPR_SS_SHOOT3,10,NULL,NULL,&s_ssshoot6};
721statetype s_ssshoot6 = {false,SPR_SS_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_ssshoot7};
722statetype s_ssshoot7 = {false,SPR_SS_SHOOT3,10,NULL,NULL,&s_ssshoot8};
723statetype s_ssshoot8 = {false,SPR_SS_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_ssshoot9};
724statetype s_ssshoot9 = {false,SPR_SS_SHOOT3,10,NULL,NULL,&s_sschase1};
725
726statetype s_sschase1 = {true,SPR_SS_W1_1,10,(statefunc)T_Chase,NULL,&s_sschase1s};
727statetype s_sschase1s = {true,SPR_SS_W1_1,3,NULL,NULL,&s_sschase2};
728statetype s_sschase2 = {true,SPR_SS_W2_1,8,(statefunc)T_Chase,NULL,&s_sschase3};
729statetype s_sschase3 = {true,SPR_SS_W3_1,10,(statefunc)T_Chase,NULL,&s_sschase3s};
730statetype s_sschase3s = {true,SPR_SS_W3_1,3,NULL,NULL,&s_sschase4};
731statetype s_sschase4 = {true,SPR_SS_W4_1,8,(statefunc)T_Chase,NULL,&s_sschase1};
732
733statetype s_ssdie1 = {false,SPR_SS_DIE_1,15,NULL,(statefunc)A_DeathScream,&s_ssdie2};
734statetype s_ssdie2 = {false,SPR_SS_DIE_2,15,NULL,NULL,&s_ssdie3};
735statetype s_ssdie3 = {false,SPR_SS_DIE_3,15,NULL,NULL,&s_ssdie4};
736statetype s_ssdie4 = {false,SPR_SS_DEAD,0,NULL,NULL,&s_ssdie4};
737
738
739#ifndef SPEAR
740//
741// hans
742//
743extern statetype s_bossstand;
744
745extern statetype s_bosschase1;
746extern statetype s_bosschase1s;
747extern statetype s_bosschase2;
748extern statetype s_bosschase3;
749extern statetype s_bosschase3s;
750extern statetype s_bosschase4;
751
752extern statetype s_bossdie1;
753extern statetype s_bossdie2;
754extern statetype s_bossdie3;
755extern statetype s_bossdie4;
756
757extern statetype s_bossshoot1;
758extern statetype s_bossshoot2;
759extern statetype s_bossshoot3;
760extern statetype s_bossshoot4;
761extern statetype s_bossshoot5;
762extern statetype s_bossshoot6;
763extern statetype s_bossshoot7;
764extern statetype s_bossshoot8;
765
766
767statetype s_bossstand = {false,SPR_BOSS_W1,0,(statefunc)T_Stand,NULL,&s_bossstand};
768
769statetype s_bosschase1 = {false,SPR_BOSS_W1,10,(statefunc)T_Chase,NULL,&s_bosschase1s};
770statetype s_bosschase1s = {false,SPR_BOSS_W1,3,NULL,NULL,&s_bosschase2};
771statetype s_bosschase2 = {false,SPR_BOSS_W2,8,(statefunc)T_Chase,NULL,&s_bosschase3};
772statetype s_bosschase3 = {false,SPR_BOSS_W3,10,(statefunc)T_Chase,NULL,&s_bosschase3s};
773statetype s_bosschase3s = {false,SPR_BOSS_W3,3,NULL,NULL,&s_bosschase4};
774statetype s_bosschase4 = {false,SPR_BOSS_W4,8,(statefunc)T_Chase,NULL,&s_bosschase1};
775
776statetype s_bossdie1 = {false,SPR_BOSS_DIE1,15,NULL,(statefunc)A_DeathScream,&s_bossdie2};
777statetype s_bossdie2 = {false,SPR_BOSS_DIE2,15,NULL,NULL,&s_bossdie3};
778statetype s_bossdie3 = {false,SPR_BOSS_DIE3,15,NULL,NULL,&s_bossdie4};
779statetype s_bossdie4 = {false,SPR_BOSS_DEAD,0,NULL,NULL,&s_bossdie4};
780
781statetype s_bossshoot1 = {false,SPR_BOSS_SHOOT1,30,NULL,NULL,&s_bossshoot2};
782statetype s_bossshoot2 = {false,SPR_BOSS_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_bossshoot3};
783statetype s_bossshoot3 = {false,SPR_BOSS_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_bossshoot4};
784statetype s_bossshoot4 = {false,SPR_BOSS_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_bossshoot5};
785statetype s_bossshoot5 = {false,SPR_BOSS_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_bossshoot6};
786statetype s_bossshoot6 = {false,SPR_BOSS_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_bossshoot7};
787statetype s_bossshoot7 = {false,SPR_BOSS_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_bossshoot8};
788statetype s_bossshoot8 = {false,SPR_BOSS_SHOOT1,10,NULL,NULL,&s_bosschase1};
789
790
791//
792// gretel
793//
794extern statetype s_gretelstand;
795
796extern statetype s_gretelchase1;
797extern statetype s_gretelchase1s;
798extern statetype s_gretelchase2;
799extern statetype s_gretelchase3;
800extern statetype s_gretelchase3s;
801extern statetype s_gretelchase4;
802
803extern statetype s_greteldie1;
804extern statetype s_greteldie2;
805extern statetype s_greteldie3;
806extern statetype s_greteldie4;
807
808extern statetype s_gretelshoot1;
809extern statetype s_gretelshoot2;
810extern statetype s_gretelshoot3;
811extern statetype s_gretelshoot4;
812extern statetype s_gretelshoot5;
813extern statetype s_gretelshoot6;
814extern statetype s_gretelshoot7;
815extern statetype s_gretelshoot8;
816
817
818statetype s_gretelstand = {false,SPR_GRETEL_W1,0,(statefunc)T_Stand,NULL,&s_gretelstand};
819
820statetype s_gretelchase1 = {false,SPR_GRETEL_W1,10,(statefunc)T_Chase,NULL,&s_gretelchase1s};
821statetype s_gretelchase1s = {false,SPR_GRETEL_W1,3,NULL,NULL,&s_gretelchase2};
822statetype s_gretelchase2 = {false,SPR_GRETEL_W2,8,(statefunc)T_Chase,NULL,&s_gretelchase3};
823statetype s_gretelchase3 = {false,SPR_GRETEL_W3,10,(statefunc)T_Chase,NULL,&s_gretelchase3s};
824statetype s_gretelchase3s = {false,SPR_GRETEL_W3,3,NULL,NULL,&s_gretelchase4};
825statetype s_gretelchase4 = {false,SPR_GRETEL_W4,8,(statefunc)T_Chase,NULL,&s_gretelchase1};
826
827statetype s_greteldie1 = {false,SPR_GRETEL_DIE1,15,NULL,(statefunc)A_DeathScream,&s_greteldie2};
828statetype s_greteldie2 = {false,SPR_GRETEL_DIE2,15,NULL,NULL,&s_greteldie3};
829statetype s_greteldie3 = {false,SPR_GRETEL_DIE3,15,NULL,NULL,&s_greteldie4};
830statetype s_greteldie4 = {false,SPR_GRETEL_DEAD,0,NULL,NULL,&s_greteldie4};
831
832statetype s_gretelshoot1 = {false,SPR_GRETEL_SHOOT1,30,NULL,NULL,&s_gretelshoot2};
833statetype s_gretelshoot2 = {false,SPR_GRETEL_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_gretelshoot3};
834statetype s_gretelshoot3 = {false,SPR_GRETEL_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_gretelshoot4};
835statetype s_gretelshoot4 = {false,SPR_GRETEL_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_gretelshoot5};
836statetype s_gretelshoot5 = {false,SPR_GRETEL_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_gretelshoot6};
837statetype s_gretelshoot6 = {false,SPR_GRETEL_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_gretelshoot7};
838statetype s_gretelshoot7 = {false,SPR_GRETEL_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_gretelshoot8};
839statetype s_gretelshoot8 = {false,SPR_GRETEL_SHOOT1,10,NULL,NULL,&s_gretelchase1};
840#endif
841
842
843/*
844===============
845=
846= SpawnStand
847=
848===============
849*/
850
851void SpawnStand (enemy_t which, int tilex, int tiley, int dir)
852{
853 word *map;
854 word tile;
855
856 switch (which)
857 {
858 case en_guard:
859 SpawnNewObj (tilex,tiley,&s_grdstand);
860 newobj->speed = SPDPATROL;
861 if (!loadedgame)
862 gamestate.killtotal++;
863 break;
864
865 case en_officer:
866 SpawnNewObj (tilex,tiley,&s_ofcstand);
867 newobj->speed = SPDPATROL;
868 if (!loadedgame)
869 gamestate.killtotal++;
870 break;
871
872 case en_mutant:
873 SpawnNewObj (tilex,tiley,&s_mutstand);
874 newobj->speed = SPDPATROL;
875 if (!loadedgame)
876 gamestate.killtotal++;
877 break;
878
879 case en_ss:
880 SpawnNewObj (tilex,tiley,&s_ssstand);
881 newobj->speed = SPDPATROL;
882 if (!loadedgame)
883 gamestate.killtotal++;
884 break;
885 }
886
887
888 map = mapsegs[0]+(tiley<<mapshift)+tilex;
889 tile = *map;
890 if (tile == AMBUSHTILE)
891 {
892 tilemap[tilex][tiley] = 0;
893
894 if (*(map+1) >= AREATILE)
895 tile = *(map+1);
896 if (*(map-mapwidth) >= AREATILE)
897 tile = *(map-mapwidth);
898 if (*(map+mapwidth) >= AREATILE)
899 tile = *(map+mapwidth);
900 if ( *(map-1) >= AREATILE)
901 tile = *(map-1);
902
903 *map = tile;
904 newobj->areanumber = tile-AREATILE;
905
906 newobj->flags |= FL_AMBUSH;
907 }
908
909 newobj->obclass = (classtype)(guardobj + which);
910 newobj->hitpoints = starthitpoints[gamestate.difficulty][which];
911 newobj->dir = (dirtype)(dir * 2);
912 newobj->flags |= FL_SHOOTABLE;
913}
914
915
916
917/*
918===============
919=
920= SpawnDeadGuard
921=
922===============
923*/
924
925void SpawnDeadGuard (int tilex, int tiley)
926{
927 SpawnNewObj (tilex,tiley,&s_grddie4);
928 DEMOIF_SDL
929 {
930 newobj->flags |= FL_NONMARK; // walk through moving enemy fix
931 }
932 newobj->obclass = inertobj;
933}
934
935
936
937#ifndef SPEAR
938/*
939===============
940=
941= SpawnBoss
942=
943===============
944*/
945
946void SpawnBoss (int tilex, int tiley)
947{
948 SpawnNewObj (tilex,tiley,&s_bossstand);
949 newobj->speed = SPDPATROL;
950
951 newobj->obclass = bossobj;
952 newobj->hitpoints = starthitpoints[gamestate.difficulty][en_boss];
953 newobj->dir = nodir;
954 newobj->flags |= FL_SHOOTABLE|FL_AMBUSH;
955 if (!loadedgame)
956 gamestate.killtotal++;
957}
958
959/*
960===============
961=
962= SpawnGretel
963=
964===============
965*/
966
967void SpawnGretel (int tilex, int tiley)
968{
969 SpawnNewObj (tilex,tiley,&s_gretelstand);
970 newobj->speed = SPDPATROL;
971
972 newobj->obclass = gretelobj;
973 newobj->hitpoints = starthitpoints[gamestate.difficulty][en_gretel];
974 newobj->dir = nodir;
975 newobj->flags |= FL_SHOOTABLE|FL_AMBUSH;
976 if (!loadedgame)
977 gamestate.killtotal++;
978}
979#endif
980
981/*
982===============
983=
984= SpawnPatrol
985=
986===============
987*/
988
989void SpawnPatrol (enemy_t which, int tilex, int tiley, int dir)
990{
991 switch (which)
992 {
993 case en_guard:
994 SpawnNewObj (tilex,tiley,&s_grdpath1);
995 newobj->speed = SPDPATROL;
996 if (!loadedgame)
997 gamestate.killtotal++;
998 break;
999
1000 case en_officer:
1001 SpawnNewObj (tilex,tiley,&s_ofcpath1);
1002 newobj->speed = SPDPATROL;
1003 if (!loadedgame)
1004 gamestate.killtotal++;
1005 break;
1006
1007 case en_ss:
1008 SpawnNewObj (tilex,tiley,&s_sspath1);
1009 newobj->speed = SPDPATROL;
1010 if (!loadedgame)
1011 gamestate.killtotal++;
1012 break;
1013
1014 case en_mutant:
1015 SpawnNewObj (tilex,tiley,&s_mutpath1);
1016 newobj->speed = SPDPATROL;
1017 if (!loadedgame)
1018 gamestate.killtotal++;
1019 break;
1020
1021 case en_dog:
1022 SpawnNewObj (tilex,tiley,&s_dogpath1);
1023 newobj->speed = SPDDOG;
1024 if (!loadedgame)
1025 gamestate.killtotal++;
1026 break;
1027 }
1028
1029 newobj->obclass = (classtype)(guardobj+which);
1030 newobj->dir = (dirtype)(dir*2);
1031 newobj->hitpoints = starthitpoints[gamestate.difficulty][which];
1032 newobj->distance = TILEGLOBAL;
1033 newobj->flags |= FL_SHOOTABLE;
1034 newobj->active = ac_yes;
1035
1036 actorat[newobj->tilex][newobj->tiley] = NULL; // don't use original spot
1037
1038 switch (dir)
1039 {
1040 case 0:
1041 newobj->tilex++;
1042 break;
1043 case 1:
1044 newobj->tiley--;
1045 break;
1046 case 2:
1047 newobj->tilex--;
1048 break;
1049 case 3:
1050 newobj->tiley++;
1051 break;
1052 }
1053
1054 actorat[newobj->tilex][newobj->tiley] = newobj;
1055}
1056
1057
1058
1059/*
1060==================
1061=
1062= A_DeathScream
1063=
1064==================
1065*/
1066
1067void A_DeathScream (objtype *ob)
1068{
1069#ifndef UPLOAD
1070#ifndef SPEAR
1071 if (mapon==9 && !US_RndT())
1072#else
1073 if ((mapon==18 || mapon==19) && !US_RndT())
1074#endif
1075 {
1076 switch(ob->obclass)
1077 {
1078 case mutantobj:
1079 case guardobj:
1080 case officerobj:
1081 case ssobj:
1082 case dogobj:
1083 PlaySoundLocActor(DEATHSCREAM6SND,ob);
1084 return;
1085 }
1086 }
1087#endif
1088
1089 switch (ob->obclass)
1090 {
1091 case mutantobj:
1092 PlaySoundLocActor(AHHHGSND,ob);
1093 break;
1094
1095 case guardobj:
1096 {
1097 int sounds[9]={ DEATHSCREAM1SND,
1098 DEATHSCREAM2SND,
1099 DEATHSCREAM3SND,
1100#ifndef APOGEE_1_0
1101 DEATHSCREAM4SND,
1102 DEATHSCREAM5SND,
1103 DEATHSCREAM7SND,
1104 DEATHSCREAM8SND,
1105 DEATHSCREAM9SND
1106#endif
1107 };
1108
1109#ifndef UPLOAD
1110 PlaySoundLocActor(sounds[US_RndT()%8],ob);
1111#else
1112 PlaySoundLocActor(sounds[US_RndT()%2],ob);
1113#endif
1114 break;
1115 }
1116 case officerobj:
1117 PlaySoundLocActor(NEINSOVASSND,ob);
1118 break;
1119 case ssobj:
1120 PlaySoundLocActor(LEBENSND,ob); // JAB
1121 break;
1122 case dogobj:
1123 PlaySoundLocActor(DOGDEATHSND,ob); // JAB
1124 break;
1125#ifndef SPEAR
1126 case bossobj:
1127 SD_PlaySound(MUTTISND); // JAB
1128 break;
1129 case schabbobj:
1130 SD_PlaySound(MEINGOTTSND);
1131 break;
1132 case fakeobj:
1133 SD_PlaySound(HITLERHASND);
1134 break;
1135 case mechahitlerobj:
1136 SD_PlaySound(SCHEISTSND);
1137 break;
1138 case realhitlerobj:
1139 SD_PlaySound(EVASND);
1140 break;
1141#ifndef APOGEE_1_0
1142 case gretelobj:
1143 SD_PlaySound(MEINSND);
1144 break;
1145 case giftobj:
1146 SD_PlaySound(DONNERSND);
1147 break;
1148 case fatobj:
1149 SD_PlaySound(ROSESND);
1150 break;
1151#endif
1152#else
1153 case spectreobj:
1154 SD_PlaySound(GHOSTFADESND);
1155 break;
1156 case angelobj:
1157 SD_PlaySound(ANGELDEATHSND);
1158 break;
1159 case transobj:
1160 SD_PlaySound(TRANSDEATHSND);
1161 break;
1162 case uberobj:
1163 SD_PlaySound(UBERDEATHSND);
1164 break;
1165 case willobj:
1166 SD_PlaySound(WILHELMDEATHSND);
1167 break;
1168 case deathobj:
1169 SD_PlaySound(KNIGHTDEATHSND);
1170 break;
1171#endif
1172 }
1173}
1174
1175
1176/*
1177=============================================================================
1178
1179 SPEAR ACTORS
1180
1181=============================================================================
1182*/
1183
1184#ifdef SPEAR
1185
1186void T_Launch (objtype *ob);
1187void T_Will (objtype *ob);
1188
1189extern statetype s_angelshoot1;
1190extern statetype s_deathshoot1;
1191extern statetype s_spark1;
1192
1193//
1194// trans
1195//
1196extern statetype s_transstand;
1197
1198extern statetype s_transchase1;
1199extern statetype s_transchase1s;
1200extern statetype s_transchase2;
1201extern statetype s_transchase3;
1202extern statetype s_transchase3s;
1203extern statetype s_transchase4;
1204
1205extern statetype s_transdie0;
1206extern statetype s_transdie01;
1207extern statetype s_transdie1;
1208extern statetype s_transdie2;
1209extern statetype s_transdie3;
1210extern statetype s_transdie4;
1211
1212extern statetype s_transshoot1;
1213extern statetype s_transshoot2;
1214extern statetype s_transshoot3;
1215extern statetype s_transshoot4;
1216extern statetype s_transshoot5;
1217extern statetype s_transshoot6;
1218extern statetype s_transshoot7;
1219extern statetype s_transshoot8;
1220
1221
1222statetype s_transstand = {false,SPR_TRANS_W1,0,(statefunc)T_Stand,NULL,&s_transstand};
1223
1224statetype s_transchase1 = {false,SPR_TRANS_W1,10,(statefunc)T_Chase,NULL,&s_transchase1s};
1225statetype s_transchase1s = {false,SPR_TRANS_W1,3,NULL,NULL,&s_transchase2};
1226statetype s_transchase2 = {false,SPR_TRANS_W2,8,(statefunc)T_Chase,NULL,&s_transchase3};
1227statetype s_transchase3 = {false,SPR_TRANS_W3,10,(statefunc)T_Chase,NULL,&s_transchase3s};
1228statetype s_transchase3s = {false,SPR_TRANS_W3,3,NULL,NULL,&s_transchase4};
1229statetype s_transchase4 = {false,SPR_TRANS_W4,8,(statefunc)T_Chase,NULL,&s_transchase1};
1230
1231statetype s_transdie0 = {false,SPR_TRANS_W1,1,NULL,(statefunc)A_DeathScream,&s_transdie01};
1232statetype s_transdie01 = {false,SPR_TRANS_W1,1,NULL,NULL,&s_transdie1};
1233statetype s_transdie1 = {false,SPR_TRANS_DIE1,15,NULL,NULL,&s_transdie2};
1234statetype s_transdie2 = {false,SPR_TRANS_DIE2,15,NULL,NULL,&s_transdie3};
1235statetype s_transdie3 = {false,SPR_TRANS_DIE3,15,NULL,NULL,&s_transdie4};
1236statetype s_transdie4 = {false,SPR_TRANS_DEAD,0,NULL,NULL,&s_transdie4};
1237
1238statetype s_transshoot1 = {false,SPR_TRANS_SHOOT1,30,NULL,NULL,&s_transshoot2};
1239statetype s_transshoot2 = {false,SPR_TRANS_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_transshoot3};
1240statetype s_transshoot3 = {false,SPR_TRANS_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_transshoot4};
1241statetype s_transshoot4 = {false,SPR_TRANS_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_transshoot5};
1242statetype s_transshoot5 = {false,SPR_TRANS_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_transshoot6};
1243statetype s_transshoot6 = {false,SPR_TRANS_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_transshoot7};
1244statetype s_transshoot7 = {false,SPR_TRANS_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_transshoot8};
1245statetype s_transshoot8 = {false,SPR_TRANS_SHOOT1,10,NULL,NULL,&s_transchase1};
1246
1247
1248/*
1249===============
1250=
1251= SpawnTrans
1252=
1253===============
1254*/
1255
1256void SpawnTrans (int tilex, int tiley)
1257{
1258 // word *map;
1259 // word tile;
1260
1261 if (SoundBlasterPresent && DigiMode != sds_Off)
1262 s_transdie01.tictime = 105;
1263
1264 SpawnNewObj (tilex,tiley,&s_transstand);
1265 newobj->obclass = transobj;
1266 newobj->hitpoints = starthitpoints[gamestate.difficulty][en_trans];
1267 newobj->flags |= FL_SHOOTABLE|FL_AMBUSH;
1268 if (!loadedgame)
1269 gamestate.killtotal++;
1270}
1271
1272
1273//
1274// uber
1275//
1276void T_UShoot (objtype *ob);
1277
1278extern statetype s_uberstand;
1279
1280extern statetype s_uberchase1;
1281extern statetype s_uberchase1s;
1282extern statetype s_uberchase2;
1283extern statetype s_uberchase3;
1284extern statetype s_uberchase3s;
1285extern statetype s_uberchase4;
1286
1287extern statetype s_uberdie0;
1288extern statetype s_uberdie01;
1289extern statetype s_uberdie1;
1290extern statetype s_uberdie2;
1291extern statetype s_uberdie3;
1292extern statetype s_uberdie4;
1293extern statetype s_uberdie5;
1294
1295extern statetype s_ubershoot1;
1296extern statetype s_ubershoot2;
1297extern statetype s_ubershoot3;
1298extern statetype s_ubershoot4;
1299extern statetype s_ubershoot5;
1300extern statetype s_ubershoot6;
1301extern statetype s_ubershoot7;
1302
1303
1304statetype s_uberstand = {false,SPR_UBER_W1,0,(statefunc)T_Stand,NULL,&s_uberstand};
1305
1306statetype s_uberchase1 = {false,SPR_UBER_W1,10,(statefunc)T_Chase,NULL,&s_uberchase1s};
1307statetype s_uberchase1s = {false,SPR_UBER_W1,3,NULL,NULL,&s_uberchase2};
1308statetype s_uberchase2 = {false,SPR_UBER_W2,8,(statefunc)T_Chase,NULL,&s_uberchase3};
1309statetype s_uberchase3 = {false,SPR_UBER_W3,10,(statefunc)T_Chase,NULL,&s_uberchase3s};
1310statetype s_uberchase3s = {false,SPR_UBER_W3,3,NULL,NULL,&s_uberchase4};
1311statetype s_uberchase4 = {false,SPR_UBER_W4,8,(statefunc)T_Chase,NULL,&s_uberchase1};
1312
1313statetype s_uberdie0 = {false,SPR_UBER_W1,1,NULL,(statefunc)A_DeathScream,&s_uberdie01};
1314statetype s_uberdie01 = {false,SPR_UBER_W1,1,NULL,NULL,&s_uberdie1};
1315statetype s_uberdie1 = {false,SPR_UBER_DIE1,15,NULL,NULL,&s_uberdie2};
1316statetype s_uberdie2 = {false,SPR_UBER_DIE2,15,NULL,NULL,&s_uberdie3};
1317statetype s_uberdie3 = {false,SPR_UBER_DIE3,15,NULL,NULL,&s_uberdie4};
1318statetype s_uberdie4 = {false,SPR_UBER_DIE4,15,NULL,NULL,&s_uberdie5};
1319statetype s_uberdie5 = {false,SPR_UBER_DEAD,0,NULL,NULL,&s_uberdie5};
1320
1321statetype s_ubershoot1 = {false,SPR_UBER_SHOOT1,30,NULL,NULL,&s_ubershoot2};
1322statetype s_ubershoot2 = {false,SPR_UBER_SHOOT2,12,NULL,(statefunc)T_UShoot,&s_ubershoot3};
1323statetype s_ubershoot3 = {false,SPR_UBER_SHOOT3,12,NULL,(statefunc)T_UShoot,&s_ubershoot4};
1324statetype s_ubershoot4 = {false,SPR_UBER_SHOOT4,12,NULL,(statefunc)T_UShoot,&s_ubershoot5};
1325statetype s_ubershoot5 = {false,SPR_UBER_SHOOT3,12,NULL,(statefunc)T_UShoot,&s_ubershoot6};
1326statetype s_ubershoot6 = {false,SPR_UBER_SHOOT2,12,NULL,(statefunc)T_UShoot,&s_ubershoot7};
1327statetype s_ubershoot7 = {false,SPR_UBER_SHOOT1,12,NULL,NULL,&s_uberchase1};
1328
1329
1330/*
1331===============
1332=
1333= SpawnUber
1334=
1335===============
1336*/
1337
1338void SpawnUber (int tilex, int tiley)
1339{
1340 if (SoundBlasterPresent && DigiMode != sds_Off)
1341 s_uberdie01.tictime = 70;
1342
1343 SpawnNewObj (tilex,tiley,&s_uberstand);
1344 newobj->obclass = uberobj;
1345 newobj->hitpoints = starthitpoints[gamestate.difficulty][en_uber];
1346 newobj->flags |= FL_SHOOTABLE|FL_AMBUSH;
1347 if (!loadedgame)
1348 gamestate.killtotal++;
1349}
1350
1351
1352/*
1353===============
1354=
1355= T_UShoot
1356=
1357===============
1358*/
1359
1360void T_UShoot (objtype *ob)
1361{
1362 int dx,dy,dist;
1363
1364 T_Shoot (ob);
1365
1366 dx = abs(ob->tilex - player->tilex);
1367 dy = abs(ob->tiley - player->tiley);
1368 dist = dx>dy ? dx : dy;
1369 if (dist <= 1)
1370 TakeDamage (10,ob);
1371}
1372
1373
1374//
1375// will
1376//
1377extern statetype s_willstand;
1378
1379extern statetype s_willchase1;
1380extern statetype s_willchase1s;
1381extern statetype s_willchase2;
1382extern statetype s_willchase3;
1383extern statetype s_willchase3s;
1384extern statetype s_willchase4;
1385
1386extern statetype s_willdie1;
1387extern statetype s_willdie2;
1388extern statetype s_willdie3;
1389extern statetype s_willdie4;
1390extern statetype s_willdie5;
1391extern statetype s_willdie6;
1392
1393extern statetype s_willshoot1;
1394extern statetype s_willshoot2;
1395extern statetype s_willshoot3;
1396extern statetype s_willshoot4;
1397extern statetype s_willshoot5;
1398extern statetype s_willshoot6;
1399
1400
1401statetype s_willstand = {false,SPR_WILL_W1,0,(statefunc)T_Stand,NULL,&s_willstand};
1402
1403statetype s_willchase1 = {false,SPR_WILL_W1,10,(statefunc)T_Will,NULL,&s_willchase1s};
1404statetype s_willchase1s = {false,SPR_WILL_W1,3,NULL,NULL,&s_willchase2};
1405statetype s_willchase2 = {false,SPR_WILL_W2,8,(statefunc)T_Will,NULL,&s_willchase3};
1406statetype s_willchase3 = {false,SPR_WILL_W3,10,(statefunc)T_Will,NULL,&s_willchase3s};
1407statetype s_willchase3s = {false,SPR_WILL_W3,3,NULL,NULL,&s_willchase4};
1408statetype s_willchase4 = {false,SPR_WILL_W4,8,(statefunc)T_Will,NULL,&s_willchase1};
1409
1410statetype s_willdeathcam = {false,SPR_WILL_W1,1,NULL,NULL,&s_willdie1};
1411
1412statetype s_willdie1 = {false,SPR_WILL_W1,1,NULL,(statefunc)A_DeathScream,&s_willdie2};
1413statetype s_willdie2 = {false,SPR_WILL_W1,10,NULL,NULL,&s_willdie3};
1414statetype s_willdie3 = {false,SPR_WILL_DIE1,10,NULL,NULL,&s_willdie4};
1415statetype s_willdie4 = {false,SPR_WILL_DIE2,10,NULL,NULL,&s_willdie5};
1416statetype s_willdie5 = {false,SPR_WILL_DIE3,10,NULL,NULL,&s_willdie6};
1417statetype s_willdie6 = {false,SPR_WILL_DEAD,20,NULL,NULL,&s_willdie6};
1418
1419statetype s_willshoot1 = {false,SPR_WILL_SHOOT1,30,NULL,NULL,&s_willshoot2};
1420statetype s_willshoot2 = {false,SPR_WILL_SHOOT2,10,NULL,(statefunc)T_Launch,&s_willshoot3};
1421statetype s_willshoot3 = {false,SPR_WILL_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_willshoot4};
1422statetype s_willshoot4 = {false,SPR_WILL_SHOOT4,10,NULL,(statefunc)T_Shoot,&s_willshoot5};
1423statetype s_willshoot5 = {false,SPR_WILL_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_willshoot6};
1424statetype s_willshoot6 = {false,SPR_WILL_SHOOT4,10,NULL,(statefunc)T_Shoot,&s_willchase1};
1425
1426
1427/*
1428===============
1429=
1430= SpawnWill
1431=
1432===============
1433*/
1434
1435void SpawnWill (int tilex, int tiley)
1436{
1437 if (SoundBlasterPresent && DigiMode != sds_Off)
1438 s_willdie2.tictime = 70;
1439
1440 SpawnNewObj (tilex,tiley,&s_willstand);
1441 newobj->obclass = willobj;
1442 newobj->hitpoints = starthitpoints[gamestate.difficulty][en_will];
1443 newobj->flags |= FL_SHOOTABLE|FL_AMBUSH;
1444 if (!loadedgame)
1445 gamestate.killtotal++;
1446}
1447
1448
1449/*
1450================
1451=
1452= T_Will
1453=
1454================
1455*/
1456
1457void T_Will (objtype *ob)
1458{
1459 int32_t move;
1460 int dx,dy,dist;
1461 boolean dodge;
1462
1463 dodge = false;
1464 dx = abs(ob->tilex - player->tilex);
1465 dy = abs(ob->tiley - player->tiley);
1466 dist = dx>dy ? dx : dy;
1467
1468 if (CheckLine(ob)) // got a shot at player?
1469 {
1470 ob->hidden = false;
1471 if ( (unsigned) US_RndT() < (tics<<3) && objfreelist)
1472 {
1473 //
1474 // go into attack frame
1475 //
1476 if (ob->obclass == willobj)
1477 NewState (ob,&s_willshoot1);
1478 else if (ob->obclass == angelobj)
1479 NewState (ob,&s_angelshoot1);
1480 else
1481 NewState (ob,&s_deathshoot1);
1482 return;
1483 }
1484 dodge = true;
1485 }
1486 else
1487 ob->hidden = true;
1488
1489 if (ob->dir == nodir)
1490 {
1491 if (dodge)
1492 SelectDodgeDir (ob);
1493 else
1494 SelectChaseDir (ob);
1495 if (ob->dir == nodir)
1496 return; // object is blocked in
1497 }
1498
1499 move = ob->speed*tics;
1500
1501 while (move)
1502 {
1503 if (ob->distance < 0)
1504 {
1505 //
1506 // waiting for a door to open
1507 //
1508 OpenDoor (-ob->distance-1);
1509 if (doorobjlist[-ob->distance-1].action != dr_open)
1510 return;
1511 ob->distance = TILEGLOBAL; // go ahead, the door is now open
1512 TryWalk(ob);
1513 }
1514
1515 if (move < ob->distance)
1516 {
1517 MoveObj (ob,move);
1518 break;
1519 }
1520
1521 //
1522 // reached goal tile, so select another one
1523 //
1524
1525 //
1526 // fix position to account for round off during moving
1527 //
1528 ob->x = ((int32_t)ob->tilex<<TILESHIFT)+TILEGLOBAL/2;
1529 ob->y = ((int32_t)ob->tiley<<TILESHIFT)+TILEGLOBAL/2;
1530
1531 move -= ob->distance;
1532
1533 if (dist <4)
1534 SelectRunDir (ob);
1535 else if (dodge)
1536 SelectDodgeDir (ob);
1537 else
1538 SelectChaseDir (ob);
1539
1540 if (ob->dir == nodir)
1541 return; // object is blocked in
1542 }
1543
1544}
1545
1546
1547//
1548// death
1549//
1550extern statetype s_deathstand;
1551
1552extern statetype s_deathchase1;
1553extern statetype s_deathchase1s;
1554extern statetype s_deathchase2;
1555extern statetype s_deathchase3;
1556extern statetype s_deathchase3s;
1557extern statetype s_deathchase4;
1558
1559extern statetype s_deathdie1;
1560extern statetype s_deathdie2;
1561extern statetype s_deathdie3;
1562extern statetype s_deathdie4;
1563extern statetype s_deathdie5;
1564extern statetype s_deathdie6;
1565extern statetype s_deathdie7;
1566extern statetype s_deathdie8;
1567extern statetype s_deathdie9;
1568
1569extern statetype s_deathshoot1;
1570extern statetype s_deathshoot2;
1571extern statetype s_deathshoot3;
1572extern statetype s_deathshoot4;
1573extern statetype s_deathshoot5;
1574
1575
1576statetype s_deathstand = {false,SPR_DEATH_W1,0,(statefunc)T_Stand,NULL,&s_deathstand};
1577
1578statetype s_deathchase1 = {false,SPR_DEATH_W1,10,(statefunc)T_Will,NULL,&s_deathchase1s};
1579statetype s_deathchase1s = {false,SPR_DEATH_W1,3,NULL,NULL,&s_deathchase2};
1580statetype s_deathchase2 = {false,SPR_DEATH_W2,8,(statefunc)T_Will,NULL,&s_deathchase3};
1581statetype s_deathchase3 = {false,SPR_DEATH_W3,10,(statefunc)T_Will,NULL,&s_deathchase3s};
1582statetype s_deathchase3s = {false,SPR_DEATH_W3,3,NULL,NULL,&s_deathchase4};
1583statetype s_deathchase4 = {false,SPR_DEATH_W4,8,(statefunc)T_Will,NULL,&s_deathchase1};
1584
1585statetype s_deathdeathcam = {false,SPR_DEATH_W1,1,NULL,NULL,&s_deathdie1};
1586
1587statetype s_deathdie1 = {false,SPR_DEATH_W1,1,NULL,(statefunc)A_DeathScream,&s_deathdie2};
1588statetype s_deathdie2 = {false,SPR_DEATH_W1,10,NULL,NULL,&s_deathdie3};
1589statetype s_deathdie3 = {false,SPR_DEATH_DIE1,10,NULL,NULL,&s_deathdie4};
1590statetype s_deathdie4 = {false,SPR_DEATH_DIE2,10,NULL,NULL,&s_deathdie5};
1591statetype s_deathdie5 = {false,SPR_DEATH_DIE3,10,NULL,NULL,&s_deathdie6};
1592statetype s_deathdie6 = {false,SPR_DEATH_DIE4,10,NULL,NULL,&s_deathdie7};
1593statetype s_deathdie7 = {false,SPR_DEATH_DIE5,10,NULL,NULL,&s_deathdie8};
1594statetype s_deathdie8 = {false,SPR_DEATH_DIE6,10,NULL,NULL,&s_deathdie9};
1595statetype s_deathdie9 = {false,SPR_DEATH_DEAD,0,NULL,NULL,&s_deathdie9};
1596
1597statetype s_deathshoot1 = {false,SPR_DEATH_SHOOT1,30,NULL,NULL,&s_deathshoot2};
1598statetype s_deathshoot2 = {false,SPR_DEATH_SHOOT2,10,NULL,(statefunc)T_Launch,&s_deathshoot3};
1599statetype s_deathshoot3 = {false,SPR_DEATH_SHOOT4,10,NULL,(statefunc)T_Shoot,&s_deathshoot4};
1600statetype s_deathshoot4 = {false,SPR_DEATH_SHOOT3,10,NULL,(statefunc)T_Launch,&s_deathshoot5};
1601statetype s_deathshoot5 = {false,SPR_DEATH_SHOOT4,10,NULL,(statefunc)T_Shoot,&s_deathchase1};
1602
1603
1604/*
1605===============
1606=
1607= SpawnDeath
1608=
1609===============
1610*/
1611
1612void SpawnDeath (int tilex, int tiley)
1613{
1614 if (SoundBlasterPresent && DigiMode != sds_Off)
1615 s_deathdie2.tictime = 105;
1616
1617 SpawnNewObj (tilex,tiley,&s_deathstand);
1618 newobj->obclass = deathobj;
1619 newobj->hitpoints = starthitpoints[gamestate.difficulty][en_death];
1620 newobj->flags |= FL_SHOOTABLE|FL_AMBUSH;
1621 if (!loadedgame)
1622 gamestate.killtotal++;
1623}
1624
1625/*
1626===============
1627=
1628= T_Launch
1629=
1630===============
1631*/
1632
1633void T_Launch (objtype *ob)
1634{
1635 int32_t deltax,deltay;
1636 float angle;
1637 int iangle;
1638
1639 deltax = player->x - ob->x;
1640 deltay = ob->y - player->y;
1641 angle = (float) atan2 ((float) deltay, (float) deltax);
1642 if (angle<0)
1643 angle = (float) (M_PI*2+angle);
1644 iangle = (int) (angle/(M_PI*2)*ANGLES);
1645 if (ob->obclass == deathobj)
1646 {
1647 T_Shoot (ob);
1648 if (ob->state == &s_deathshoot2)
1649 {
1650 iangle-=4;
1651 if (iangle<0)
1652 iangle+=ANGLES;
1653 }
1654 else
1655 {
1656 iangle+=4;
1657 if (iangle>=ANGLES)
1658 iangle-=ANGLES;
1659 }
1660 }
1661
1662 GetNewActor ();
1663 newobj->state = &s_rocket;
1664 newobj->ticcount = 1;
1665
1666 newobj->tilex = ob->tilex;
1667 newobj->tiley = ob->tiley;
1668 newobj->x = ob->x;
1669 newobj->y = ob->y;
1670 newobj->obclass = rocketobj;
1671 switch(ob->obclass)
1672 {
1673 case deathobj:
1674 newobj->state = &s_hrocket;
1675 newobj->obclass = hrocketobj;
1676 PlaySoundLocActor (KNIGHTMISSILESND,newobj);
1677 break;
1678 case angelobj:
1679 newobj->state = &s_spark1;
1680 newobj->obclass = sparkobj;
1681 PlaySoundLocActor (ANGELFIRESND,newobj);
1682 break;
1683 default:
1684 PlaySoundLocActor (MISSILEFIRESND,newobj);
1685 }
1686
1687 newobj->dir = nodir;
1688 newobj->angle = iangle;
1689 newobj->speed = 0x2000l;
1690 newobj->flags = FL_NEVERMARK;
1691 newobj->active = ac_yes;
1692}
1693
1694
1695
1696//
1697// angel
1698//
1699void A_Relaunch (objtype *ob);
1700void A_Victory (objtype *ob);
1701void A_StartAttack (objtype *ob);
1702void A_Breathing (objtype *ob);
1703
1704extern statetype s_angelstand;
1705
1706extern statetype s_angelchase1;
1707extern statetype s_angelchase1s;
1708extern statetype s_angelchase2;
1709extern statetype s_angelchase3;
1710extern statetype s_angelchase3s;
1711extern statetype s_angelchase4;
1712
1713extern statetype s_angeldie1;
1714extern statetype s_angeldie11;
1715extern statetype s_angeldie2;
1716extern statetype s_angeldie3;
1717extern statetype s_angeldie4;
1718extern statetype s_angeldie5;
1719extern statetype s_angeldie6;
1720extern statetype s_angeldie7;
1721extern statetype s_angeldie8;
1722extern statetype s_angeldie9;
1723
1724extern statetype s_angelshoot1;
1725extern statetype s_angelshoot2;
1726extern statetype s_angelshoot3;
1727extern statetype s_angelshoot4;
1728extern statetype s_angelshoot5;
1729extern statetype s_angelshoot6;
1730
1731extern statetype s_angeltired;
1732extern statetype s_angeltired2;
1733extern statetype s_angeltired3;
1734extern statetype s_angeltired4;
1735extern statetype s_angeltired5;
1736extern statetype s_angeltired6;
1737extern statetype s_angeltired7;
1738
1739extern statetype s_spark1;
1740extern statetype s_spark2;
1741extern statetype s_spark3;
1742extern statetype s_spark4;
1743
1744
1745statetype s_angelstand = {false,SPR_ANGEL_W1,0,(statefunc)T_Stand,NULL,&s_angelstand};
1746
1747statetype s_angelchase1 = {false,SPR_ANGEL_W1,10,(statefunc)T_Will,NULL,&s_angelchase1s};
1748statetype s_angelchase1s = {false,SPR_ANGEL_W1,3,NULL,NULL,&s_angelchase2};
1749statetype s_angelchase2 = {false,SPR_ANGEL_W2,8,(statefunc)T_Will,NULL,&s_angelchase3};
1750statetype s_angelchase3 = {false,SPR_ANGEL_W3,10,(statefunc)T_Will,NULL,&s_angelchase3s};
1751statetype s_angelchase3s = {false,SPR_ANGEL_W3,3,NULL,NULL,&s_angelchase4};
1752statetype s_angelchase4 = {false,SPR_ANGEL_W4,8,(statefunc)T_Will,NULL,&s_angelchase1};
1753
1754statetype s_angeldie1 = {false,SPR_ANGEL_W1,1,NULL,(statefunc)A_DeathScream,&s_angeldie11};
1755statetype s_angeldie11 = {false,SPR_ANGEL_W1,1,NULL,NULL,&s_angeldie2};
1756statetype s_angeldie2 = {false,SPR_ANGEL_DIE1,10,NULL,(statefunc)A_Slurpie,&s_angeldie3};
1757statetype s_angeldie3 = {false,SPR_ANGEL_DIE2,10,NULL,NULL,&s_angeldie4};
1758statetype s_angeldie4 = {false,SPR_ANGEL_DIE3,10,NULL,NULL,&s_angeldie5};
1759statetype s_angeldie5 = {false,SPR_ANGEL_DIE4,10,NULL,NULL,&s_angeldie6};
1760statetype s_angeldie6 = {false,SPR_ANGEL_DIE5,10,NULL,NULL,&s_angeldie7};
1761statetype s_angeldie7 = {false,SPR_ANGEL_DIE6,10,NULL,NULL,&s_angeldie8};
1762statetype s_angeldie8 = {false,SPR_ANGEL_DIE7,10,NULL,NULL,&s_angeldie9};
1763statetype s_angeldie9 = {false,SPR_ANGEL_DEAD,130,NULL,(statefunc)A_Victory,&s_angeldie9};
1764
1765statetype s_angelshoot1 = {false,SPR_ANGEL_SHOOT1,10,NULL,(statefunc)A_StartAttack,&s_angelshoot2};
1766statetype s_angelshoot2 = {false,SPR_ANGEL_SHOOT2,20,NULL,(statefunc)T_Launch,&s_angelshoot3};
1767statetype s_angelshoot3 = {false,SPR_ANGEL_SHOOT1,10,NULL,(statefunc)A_Relaunch,&s_angelshoot2};
1768
1769statetype s_angeltired = {false,SPR_ANGEL_TIRED1,40,NULL,(statefunc)A_Breathing,&s_angeltired2};
1770statetype s_angeltired2 = {false,SPR_ANGEL_TIRED2,40,NULL,NULL,&s_angeltired3};
1771statetype s_angeltired3 = {false,SPR_ANGEL_TIRED1,40,NULL,(statefunc)A_Breathing,&s_angeltired4};
1772statetype s_angeltired4 = {false,SPR_ANGEL_TIRED2,40,NULL,NULL,&s_angeltired5};
1773statetype s_angeltired5 = {false,SPR_ANGEL_TIRED1,40,NULL,(statefunc)A_Breathing,&s_angeltired6};
1774statetype s_angeltired6 = {false,SPR_ANGEL_TIRED2,40,NULL,NULL,&s_angeltired7};
1775statetype s_angeltired7 = {false,SPR_ANGEL_TIRED1,40,NULL,(statefunc)A_Breathing,&s_angelchase1};
1776
1777statetype s_spark1 = {false,SPR_SPARK1,6,(statefunc)T_Projectile,NULL,&s_spark2};
1778statetype s_spark2 = {false,SPR_SPARK2,6,(statefunc)T_Projectile,NULL,&s_spark3};
1779statetype s_spark3 = {false,SPR_SPARK3,6,(statefunc)T_Projectile,NULL,&s_spark4};
1780statetype s_spark4 = {false,SPR_SPARK4,6,(statefunc)T_Projectile,NULL,&s_spark1};
1781
1782
1783void A_Slurpie (objtype *)
1784{
1785 SD_PlaySound(SLURPIESND);
1786}
1787
1788void A_Breathing (objtype *)
1789{
1790 SD_PlaySound(ANGELTIREDSND);
1791}
1792
1793/*
1794===============
1795=
1796= SpawnAngel
1797=
1798===============
1799*/
1800
1801void SpawnAngel (int tilex, int tiley)
1802{
1803 if (SoundBlasterPresent && DigiMode != sds_Off)
1804 s_angeldie11.tictime = 105;
1805
1806 SpawnNewObj (tilex,tiley,&s_angelstand);
1807 newobj->obclass = angelobj;
1808 newobj->hitpoints = starthitpoints[gamestate.difficulty][en_angel];
1809 newobj->flags |= FL_SHOOTABLE|FL_AMBUSH;
1810 if (!loadedgame)
1811 gamestate.killtotal++;
1812}
1813
1814
1815/*
1816=================
1817=
1818= A_Victory
1819=
1820=================
1821*/
1822
1823void A_Victory (objtype *)
1824{
1825 playstate = ex_victorious;
1826}
1827
1828
1829/*
1830=================
1831=
1832= A_StartAttack
1833=
1834=================
1835*/
1836
1837void A_StartAttack (objtype *ob)
1838{
1839 ob->temp1 = 0;
1840}
1841
1842
1843/*
1844=================
1845=
1846= A_Relaunch
1847=
1848=================
1849*/
1850
1851void A_Relaunch (objtype *ob)
1852{
1853 if (++ob->temp1 == 3)
1854 {
1855 NewState (ob,&s_angeltired);
1856 return;
1857 }
1858
1859 if (US_RndT()&1)
1860 {
1861 NewState (ob,&s_angelchase1);
1862 return;
1863 }
1864}
1865
1866
1867
1868
1869//
1870// spectre
1871//
1872void T_SpectreWait (objtype *ob);
1873void A_Dormant (objtype *ob);
1874
1875extern statetype s_spectrewait1;
1876extern statetype s_spectrewait2;
1877extern statetype s_spectrewait3;
1878extern statetype s_spectrewait4;
1879
1880extern statetype s_spectrechase1;
1881extern statetype s_spectrechase2;
1882extern statetype s_spectrechase3;
1883extern statetype s_spectrechase4;
1884
1885extern statetype s_spectredie1;
1886extern statetype s_spectredie2;
1887extern statetype s_spectredie3;
1888extern statetype s_spectredie4;
1889
1890extern statetype s_spectrewake;
1891
1892statetype s_spectrewait1 = {false,SPR_SPECTRE_W1,10,(statefunc)T_Stand,NULL,&s_spectrewait2};
1893statetype s_spectrewait2 = {false,SPR_SPECTRE_W2,10,(statefunc)T_Stand,NULL,&s_spectrewait3};
1894statetype s_spectrewait3 = {false,SPR_SPECTRE_W3,10,(statefunc)T_Stand,NULL,&s_spectrewait4};
1895statetype s_spectrewait4 = {false,SPR_SPECTRE_W4,10,(statefunc)T_Stand,NULL,&s_spectrewait1};
1896
1897statetype s_spectrechase1 = {false,SPR_SPECTRE_W1,10,(statefunc)T_Ghosts,NULL,&s_spectrechase2};
1898statetype s_spectrechase2 = {false,SPR_SPECTRE_W2,10,(statefunc)T_Ghosts,NULL,&s_spectrechase3};
1899statetype s_spectrechase3 = {false,SPR_SPECTRE_W3,10,(statefunc)T_Ghosts,NULL,&s_spectrechase4};
1900statetype s_spectrechase4 = {false,SPR_SPECTRE_W4,10,(statefunc)T_Ghosts,NULL,&s_spectrechase1};
1901
1902statetype s_spectredie1 = {false,SPR_SPECTRE_F1,10,NULL,NULL,&s_spectredie2};
1903statetype s_spectredie2 = {false,SPR_SPECTRE_F2,10,NULL,NULL,&s_spectredie3};
1904statetype s_spectredie3 = {false,SPR_SPECTRE_F3,10,NULL,NULL,&s_spectredie4};
1905statetype s_spectredie4 = {false,SPR_SPECTRE_F4,300,NULL,NULL,&s_spectrewake};
1906statetype s_spectrewake = {false,SPR_SPECTRE_F4,10,NULL,(statefunc)A_Dormant,&s_spectrewake};
1907
1908/*
1909===============
1910=
1911= SpawnSpectre
1912=
1913===============
1914*/
1915
1916void SpawnSpectre (int tilex, int tiley)
1917{
1918 SpawnNewObj (tilex,tiley,&s_spectrewait1);
1919 newobj->obclass = spectreobj;
1920 newobj->hitpoints = starthitpoints[gamestate.difficulty][en_spectre];
1921 newobj->flags |= FL_SHOOTABLE|FL_AMBUSH|FL_BONUS; // |FL_NEVERMARK|FL_NONMARK;
1922 if (!loadedgame)
1923 gamestate.killtotal++;
1924}
1925
1926
1927/*
1928===============
1929=
1930= A_Dormant
1931=
1932===============
1933*/
1934
1935void A_Dormant (objtype *ob)
1936{
1937 int32_t deltax,deltay;
1938 int xl,xh,yl,yh;
1939 int x,y;
1940 uintptr_t tile;
1941
1942 deltax = ob->x - player->x;
1943 if (deltax < -MINACTORDIST || deltax > MINACTORDIST)
1944 goto moveok;
1945 deltay = ob->y - player->y;
1946 if (deltay < -MINACTORDIST || deltay > MINACTORDIST)
1947 goto moveok;
1948
1949 return;
1950moveok:
1951
1952 xl = (ob->x-MINDIST) >> TILESHIFT;
1953 xh = (ob->x+MINDIST) >> TILESHIFT;
1954 yl = (ob->y-MINDIST) >> TILESHIFT;
1955 yh = (ob->y+MINDIST) >> TILESHIFT;
1956
1957 for (y=yl ; y<=yh ; y++)
1958 for (x=xl ; x<=xh ; x++)
1959 {
1960 tile = (uintptr_t)actorat[x][y];
1961 if (!tile)
1962 continue;
1963 if (!ISPOINTER(tile))
1964 return;
1965 if (((objtype *)tile)->flags&FL_SHOOTABLE)
1966 return;
1967 }
1968
1969 ob->flags |= FL_AMBUSH | FL_SHOOTABLE;
1970 ob->flags &= ~FL_ATTACKMODE;
1971 ob->flags &= ~FL_NONMARK; // stuck bugfix 1
1972 ob->dir = nodir;
1973 NewState (ob,&s_spectrewait1);
1974}
1975
1976
1977#endif
1978
1979/*
1980=============================================================================
1981
1982 SCHABBS / GIFT / FAT
1983
1984=============================================================================
1985*/
1986
1987#ifndef SPEAR
1988/*
1989===============
1990=
1991= SpawnGhosts
1992=
1993===============
1994*/
1995
1996void SpawnGhosts (int which, int tilex, int tiley)
1997{
1998 switch(which)
1999 {
2000 case en_blinky:
2001 SpawnNewObj (tilex,tiley,&s_blinkychase1);
2002 break;
2003 case en_clyde:
2004 SpawnNewObj (tilex,tiley,&s_clydechase1);
2005 break;
2006 case en_pinky:
2007 SpawnNewObj (tilex,tiley,&s_pinkychase1);
2008 break;
2009 case en_inky:
2010 SpawnNewObj (tilex,tiley,&s_inkychase1);
2011 break;
2012 }
2013
2014 newobj->obclass = ghostobj;
2015 newobj->speed = SPDDOG;
2016
2017 newobj->dir = east;
2018 newobj->flags |= FL_AMBUSH;
2019 if (!loadedgame)
2020 {
2021 gamestate.killtotal++;
2022 gamestate.killcount++;
2023 }
2024}
2025
2026
2027
2028void T_Gift (objtype *ob);
2029void T_GiftThrow (objtype *ob);
2030
2031void T_Fat (objtype *ob);
2032void T_FatThrow (objtype *ob);
2033
2034//
2035// schabb
2036//
2037extern statetype s_schabbstand;
2038
2039extern statetype s_schabbchase1;
2040extern statetype s_schabbchase1s;
2041extern statetype s_schabbchase2;
2042extern statetype s_schabbchase3;
2043extern statetype s_schabbchase3s;
2044extern statetype s_schabbchase4;
2045
2046extern statetype s_schabbdie1;
2047extern statetype s_schabbdie2;
2048extern statetype s_schabbdie3;
2049extern statetype s_schabbdie4;
2050extern statetype s_schabbdie5;
2051extern statetype s_schabbdie6;
2052
2053extern statetype s_schabbshoot1;
2054extern statetype s_schabbshoot2;
2055
2056extern statetype s_needle1;
2057extern statetype s_needle2;
2058extern statetype s_needle3;
2059extern statetype s_needle4;
2060
2061extern statetype s_schabbdeathcam;
2062
2063
2064statetype s_schabbstand = {false,SPR_SCHABB_W1,0,(statefunc)T_Stand,NULL,&s_schabbstand};
2065
2066statetype s_schabbchase1 = {false,SPR_SCHABB_W1,10,(statefunc)T_Schabb,NULL,&s_schabbchase1s};
2067statetype s_schabbchase1s = {false,SPR_SCHABB_W1,3,NULL,NULL,&s_schabbchase2};
2068statetype s_schabbchase2 = {false,SPR_SCHABB_W2,8,(statefunc)T_Schabb,NULL,&s_schabbchase3};
2069statetype s_schabbchase3 = {false,SPR_SCHABB_W3,10,(statefunc)T_Schabb,NULL,&s_schabbchase3s};
2070statetype s_schabbchase3s = {false,SPR_SCHABB_W3,3,NULL,NULL,&s_schabbchase4};
2071statetype s_schabbchase4 = {false,SPR_SCHABB_W4,8,(statefunc)T_Schabb,NULL,&s_schabbchase1};
2072
2073statetype s_schabbdeathcam = {false,SPR_SCHABB_W1,1,NULL,NULL,&s_schabbdie1};
2074
2075statetype s_schabbdie1 = {false,SPR_SCHABB_W1,10,NULL,(statefunc)A_DeathScream,&s_schabbdie2};
2076statetype s_schabbdie2 = {false,SPR_SCHABB_W1,10,NULL,NULL,&s_schabbdie3};
2077statetype s_schabbdie3 = {false,SPR_SCHABB_DIE1,10,NULL,NULL,&s_schabbdie4};
2078statetype s_schabbdie4 = {false,SPR_SCHABB_DIE2,10,NULL,NULL,&s_schabbdie5};
2079statetype s_schabbdie5 = {false,SPR_SCHABB_DIE3,10,NULL,NULL,&s_schabbdie6};
2080statetype s_schabbdie6 = {false,SPR_SCHABB_DEAD,20,NULL,(statefunc)A_StartDeathCam,&s_schabbdie6};
2081
2082statetype s_schabbshoot1 = {false,SPR_SCHABB_SHOOT1,30,NULL,NULL,&s_schabbshoot2};
2083statetype s_schabbshoot2 = {false,SPR_SCHABB_SHOOT2,10,NULL,(statefunc)T_SchabbThrow,&s_schabbchase1};
2084
2085statetype s_needle1 = {false,SPR_HYPO1,6,(statefunc)T_Projectile,NULL,&s_needle2};
2086statetype s_needle2 = {false,SPR_HYPO2,6,(statefunc)T_Projectile,NULL,&s_needle3};
2087statetype s_needle3 = {false,SPR_HYPO3,6,(statefunc)T_Projectile,NULL,&s_needle4};
2088statetype s_needle4 = {false,SPR_HYPO4,6,(statefunc)T_Projectile,NULL,&s_needle1};
2089
2090
2091//
2092// gift
2093//
2094extern statetype s_giftstand;
2095
2096extern statetype s_giftchase1;
2097extern statetype s_giftchase1s;
2098extern statetype s_giftchase2;
2099extern statetype s_giftchase3;
2100extern statetype s_giftchase3s;
2101extern statetype s_giftchase4;
2102
2103extern statetype s_giftdie1;
2104extern statetype s_giftdie2;
2105extern statetype s_giftdie3;
2106extern statetype s_giftdie4;
2107extern statetype s_giftdie5;
2108extern statetype s_giftdie6;
2109
2110extern statetype s_giftshoot1;
2111extern statetype s_giftshoot2;
2112
2113extern statetype s_needle1;
2114extern statetype s_needle2;
2115extern statetype s_needle3;
2116extern statetype s_needle4;
2117
2118extern statetype s_giftdeathcam;
2119
2120extern statetype s_boom1;
2121extern statetype s_boom2;
2122extern statetype s_boom3;
2123
2124
2125statetype s_giftstand = {false,SPR_GIFT_W1,0,(statefunc)T_Stand,NULL,&s_giftstand};
2126
2127statetype s_giftchase1 = {false,SPR_GIFT_W1,10,(statefunc)T_Gift,NULL,&s_giftchase1s};
2128statetype s_giftchase1s = {false,SPR_GIFT_W1,3,NULL,NULL,&s_giftchase2};
2129statetype s_giftchase2 = {false,SPR_GIFT_W2,8,(statefunc)T_Gift,NULL,&s_giftchase3};
2130statetype s_giftchase3 = {false,SPR_GIFT_W3,10,(statefunc)T_Gift,NULL,&s_giftchase3s};
2131statetype s_giftchase3s = {false,SPR_GIFT_W3,3,NULL,NULL,&s_giftchase4};
2132statetype s_giftchase4 = {false,SPR_GIFT_W4,8,(statefunc)T_Gift,NULL,&s_giftchase1};
2133
2134statetype s_giftdeathcam = {false,SPR_GIFT_W1,1,NULL,NULL,&s_giftdie1};
2135
2136statetype s_giftdie1 = {false,SPR_GIFT_W1,1,NULL,(statefunc)A_DeathScream,&s_giftdie2};
2137statetype s_giftdie2 = {false,SPR_GIFT_W1,10,NULL,NULL,&s_giftdie3};
2138statetype s_giftdie3 = {false,SPR_GIFT_DIE1,10,NULL,NULL,&s_giftdie4};
2139statetype s_giftdie4 = {false,SPR_GIFT_DIE2,10,NULL,NULL,&s_giftdie5};
2140statetype s_giftdie5 = {false,SPR_GIFT_DIE3,10,NULL,NULL,&s_giftdie6};
2141statetype s_giftdie6 = {false,SPR_GIFT_DEAD,20,NULL,(statefunc)A_StartDeathCam,&s_giftdie6};
2142
2143statetype s_giftshoot1 = {false,SPR_GIFT_SHOOT1,30,NULL,NULL,&s_giftshoot2};
2144statetype s_giftshoot2 = {false,SPR_GIFT_SHOOT2,10,NULL,(statefunc)T_GiftThrow,&s_giftchase1};
2145
2146
2147//
2148// fat
2149//
2150extern statetype s_fatstand;
2151
2152extern statetype s_fatchase1;
2153extern statetype s_fatchase1s;
2154extern statetype s_fatchase2;
2155extern statetype s_fatchase3;
2156extern statetype s_fatchase3s;
2157extern statetype s_fatchase4;
2158
2159extern statetype s_fatdie1;
2160extern statetype s_fatdie2;
2161extern statetype s_fatdie3;
2162extern statetype s_fatdie4;
2163extern statetype s_fatdie5;
2164extern statetype s_fatdie6;
2165
2166extern statetype s_fatshoot1;
2167extern statetype s_fatshoot2;
2168extern statetype s_fatshoot3;
2169extern statetype s_fatshoot4;
2170extern statetype s_fatshoot5;
2171extern statetype s_fatshoot6;
2172
2173extern statetype s_needle1;
2174extern statetype s_needle2;
2175extern statetype s_needle3;
2176extern statetype s_needle4;
2177
2178extern statetype s_fatdeathcam;
2179
2180
2181statetype s_fatstand = {false,SPR_FAT_W1,0,(statefunc)T_Stand,NULL,&s_fatstand};
2182
2183statetype s_fatchase1 = {false,SPR_FAT_W1,10,(statefunc)T_Fat,NULL,&s_fatchase1s};
2184statetype s_fatchase1s = {false,SPR_FAT_W1,3,NULL,NULL,&s_fatchase2};
2185statetype s_fatchase2 = {false,SPR_FAT_W2,8,(statefunc)T_Fat,NULL,&s_fatchase3};
2186statetype s_fatchase3 = {false,SPR_FAT_W3,10,(statefunc)T_Fat,NULL,&s_fatchase3s};
2187statetype s_fatchase3s = {false,SPR_FAT_W3,3,NULL,NULL,&s_fatchase4};
2188statetype s_fatchase4 = {false,SPR_FAT_W4,8,(statefunc)T_Fat,NULL,&s_fatchase1};
2189
2190statetype s_fatdeathcam = {false,SPR_FAT_W1,1,NULL,NULL,&s_fatdie1};
2191
2192statetype s_fatdie1 = {false,SPR_FAT_W1,1,NULL,(statefunc)A_DeathScream,&s_fatdie2};
2193statetype s_fatdie2 = {false,SPR_FAT_W1,10,NULL,NULL,&s_fatdie3};
2194statetype s_fatdie3 = {false,SPR_FAT_DIE1,10,NULL,NULL,&s_fatdie4};
2195statetype s_fatdie4 = {false,SPR_FAT_DIE2,10,NULL,NULL,&s_fatdie5};
2196statetype s_fatdie5 = {false,SPR_FAT_DIE3,10,NULL,NULL,&s_fatdie6};
2197statetype s_fatdie6 = {false,SPR_FAT_DEAD,20,NULL,(statefunc)A_StartDeathCam,&s_fatdie6};
2198
2199statetype s_fatshoot1 = {false,SPR_FAT_SHOOT1,30,NULL,NULL,&s_fatshoot2};
2200statetype s_fatshoot2 = {false,SPR_FAT_SHOOT2,10,NULL,(statefunc)T_GiftThrow,&s_fatshoot3};
2201statetype s_fatshoot3 = {false,SPR_FAT_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_fatshoot4};
2202statetype s_fatshoot4 = {false,SPR_FAT_SHOOT4,10,NULL,(statefunc)T_Shoot,&s_fatshoot5};
2203statetype s_fatshoot5 = {false,SPR_FAT_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_fatshoot6};
2204statetype s_fatshoot6 = {false,SPR_FAT_SHOOT4,10,NULL,(statefunc)T_Shoot,&s_fatchase1};
2205
2206
2207/*
2208===============
2209=
2210= SpawnSchabbs
2211=
2212===============
2213*/
2214
2215void SpawnSchabbs (int tilex, int tiley)
2216{
2217 if (DigiMode != sds_Off)
2218 s_schabbdie2.tictime = 140;
2219 else
2220 s_schabbdie2.tictime = 5;
2221
2222 SpawnNewObj (tilex,tiley,&s_schabbstand);
2223 newobj->speed = SPDPATROL;
2224
2225 newobj->obclass = schabbobj;
2226 newobj->hitpoints = starthitpoints[gamestate.difficulty][en_schabbs];
2227 newobj->dir = nodir;
2228 newobj->flags |= FL_SHOOTABLE|FL_AMBUSH;
2229 if (!loadedgame)
2230 gamestate.killtotal++;
2231}
2232
2233
2234/*
2235===============
2236=
2237= SpawnGift
2238=
2239===============
2240*/
2241
2242void SpawnGift (int tilex, int tiley)
2243{
2244 if (DigiMode != sds_Off)
2245 s_giftdie2.tictime = 140;
2246 else
2247 s_giftdie2.tictime = 5;
2248
2249 SpawnNewObj (tilex,tiley,&s_giftstand);
2250 newobj->speed = SPDPATROL;
2251
2252 newobj->obclass = giftobj;
2253 newobj->hitpoints = starthitpoints[gamestate.difficulty][en_gift];
2254 newobj->dir = nodir;
2255 newobj->flags |= FL_SHOOTABLE|FL_AMBUSH;
2256 if (!loadedgame)
2257 gamestate.killtotal++;
2258}
2259
2260
2261/*
2262===============
2263=
2264= SpawnFat
2265=
2266===============
2267*/
2268
2269void SpawnFat (int tilex, int tiley)
2270{
2271 if (DigiMode != sds_Off)
2272 s_fatdie2.tictime = 140;
2273 else
2274 s_fatdie2.tictime = 5;
2275
2276 SpawnNewObj (tilex,tiley,&s_fatstand);
2277 newobj->speed = SPDPATROL;
2278
2279 newobj->obclass = fatobj;
2280 newobj->hitpoints = starthitpoints[gamestate.difficulty][en_fat];
2281 newobj->dir = nodir;
2282 newobj->flags |= FL_SHOOTABLE|FL_AMBUSH;
2283 if (!loadedgame)
2284 gamestate.killtotal++;
2285}
2286
2287
2288/*
2289=================
2290=
2291= T_SchabbThrow
2292=
2293=================
2294*/
2295
2296void T_SchabbThrow (objtype *ob)
2297{
2298 int32_t deltax,deltay;
2299 float angle;
2300 int iangle;
2301
2302 deltax = player->x - ob->x;
2303 deltay = ob->y - player->y;
2304 angle = (float) atan2((float) deltay, (float) deltax);
2305 if (angle<0)
2306 angle = (float) (M_PI*2+angle);
2307 iangle = (int) (angle/(M_PI*2)*ANGLES);
2308
2309 GetNewActor ();
2310 newobj->state = &s_needle1;
2311 newobj->ticcount = 1;
2312
2313 newobj->tilex = ob->tilex;
2314 newobj->tiley = ob->tiley;
2315 newobj->x = ob->x;
2316 newobj->y = ob->y;
2317 newobj->obclass = needleobj;
2318 newobj->dir = nodir;
2319 newobj->angle = iangle;
2320 newobj->speed = 0x2000l;
2321
2322 newobj->flags = FL_NEVERMARK;
2323 newobj->active = ac_yes;
2324
2325 PlaySoundLocActor (SCHABBSTHROWSND,newobj);
2326}
2327
2328/*
2329=================
2330=
2331= T_GiftThrow
2332=
2333=================
2334*/
2335
2336void T_GiftThrow (objtype *ob)
2337{
2338 int32_t deltax,deltay;
2339 float angle;
2340 int iangle;
2341
2342 deltax = player->x - ob->x;
2343 deltay = ob->y - player->y;
2344 angle = (float) atan2((float) deltay, (float) deltax);
2345 if (angle<0)
2346 angle = (float) (M_PI*2+angle);
2347 iangle = (int) (angle/(M_PI*2)*ANGLES);
2348
2349 GetNewActor ();
2350 newobj->state = &s_rocket;
2351 newobj->ticcount = 1;
2352
2353 newobj->tilex = ob->tilex;
2354 newobj->tiley = ob->tiley;
2355 newobj->x = ob->x;
2356 newobj->y = ob->y;
2357 newobj->obclass = rocketobj;
2358 newobj->dir = nodir;
2359 newobj->angle = iangle;
2360 newobj->speed = 0x2000l;
2361 newobj->flags = FL_NEVERMARK;
2362 newobj->active = ac_yes;
2363
2364#ifndef APOGEE_1_0 // T_GiftThrow will never be called in shareware v1.0
2365 PlaySoundLocActor (MISSILEFIRESND,newobj);
2366#endif
2367}
2368
2369
2370/*
2371=================
2372=
2373= T_Schabb
2374=
2375=================
2376*/
2377
2378void T_Schabb (objtype *ob)
2379{
2380 int32_t move;
2381 int dx,dy,dist;
2382 boolean dodge;
2383
2384 dodge = false;
2385 dx = abs(ob->tilex - player->tilex);
2386 dy = abs(ob->tiley - player->tiley);
2387 dist = dx>dy ? dx : dy;
2388
2389 if (CheckLine(ob)) // got a shot at player?
2390 {
2391 ob->hidden = false;
2392 if ( (unsigned) US_RndT() < (tics<<3) && objfreelist)
2393 {
2394 //
2395 // go into attack frame
2396 //
2397 NewState (ob,&s_schabbshoot1);
2398 return;
2399 }
2400 dodge = true;
2401 }
2402 else
2403 ob->hidden = true;
2404
2405 if (ob->dir == nodir)
2406 {
2407 if (dodge)
2408 SelectDodgeDir (ob);
2409 else
2410 SelectChaseDir (ob);
2411 if (ob->dir == nodir)
2412 return; // object is blocked in
2413 }
2414
2415 move = ob->speed*tics;
2416
2417 while (move)
2418 {
2419 if (ob->distance < 0)
2420 {
2421 //
2422 // waiting for a door to open
2423 //
2424 OpenDoor (-ob->distance-1);
2425 if (doorobjlist[-ob->distance-1].action != dr_open)
2426 return;
2427 ob->distance = TILEGLOBAL; // go ahead, the door is now open
2428 TryWalk(ob);
2429 }
2430
2431 if (move < ob->distance)
2432 {
2433 MoveObj (ob,move);
2434 break;
2435 }
2436
2437 //
2438 // reached goal tile, so select another one
2439 //
2440
2441 //
2442 // fix position to account for round off during moving
2443 //
2444 ob->x = ((int32_t)ob->tilex<<TILESHIFT)+TILEGLOBAL/2;
2445 ob->y = ((int32_t)ob->tiley<<TILESHIFT)+TILEGLOBAL/2;
2446
2447 move -= ob->distance;
2448
2449 if (dist <4)
2450 SelectRunDir (ob);
2451 else if (dodge)
2452 SelectDodgeDir (ob);
2453 else
2454 SelectChaseDir (ob);
2455
2456 if (ob->dir == nodir)
2457 return; // object is blocked in
2458 }
2459}
2460
2461
2462/*
2463=================
2464=
2465= T_Gift
2466=
2467=================
2468*/
2469
2470void T_Gift (objtype *ob)
2471{
2472 int32_t move;
2473 int dx,dy,dist;
2474 boolean dodge;
2475
2476 dodge = false;
2477 dx = abs(ob->tilex - player->tilex);
2478 dy = abs(ob->tiley - player->tiley);
2479 dist = dx>dy ? dx : dy;
2480
2481 if (CheckLine(ob)) // got a shot at player?
2482 {
2483 ob->hidden = false;
2484 if ( (unsigned) US_RndT() < (tics<<3) && objfreelist)
2485 {
2486 //
2487 // go into attack frame
2488 //
2489 NewState (ob,&s_giftshoot1);
2490 return;
2491 }
2492 dodge = true;
2493 }
2494 else
2495 ob->hidden = true;
2496
2497 if (ob->dir == nodir)
2498 {
2499 if (dodge)
2500 SelectDodgeDir (ob);
2501 else
2502 SelectChaseDir (ob);
2503 if (ob->dir == nodir)
2504 return; // object is blocked in
2505 }
2506
2507 move = ob->speed*tics;
2508
2509 while (move)
2510 {
2511 if (ob->distance < 0)
2512 {
2513 //
2514 // waiting for a door to open
2515 //
2516 OpenDoor (-ob->distance-1);
2517 if (doorobjlist[-ob->distance-1].action != dr_open)
2518 return;
2519 ob->distance = TILEGLOBAL; // go ahead, the door is now open
2520 TryWalk(ob);
2521 }
2522
2523 if (move < ob->distance)
2524 {
2525 MoveObj (ob,move);
2526 break;
2527 }
2528
2529 //
2530 // reached goal tile, so select another one
2531 //
2532
2533 //
2534 // fix position to account for round off during moving
2535 //
2536 ob->x = ((int32_t)ob->tilex<<TILESHIFT)+TILEGLOBAL/2;
2537 ob->y = ((int32_t)ob->tiley<<TILESHIFT)+TILEGLOBAL/2;
2538
2539 move -= ob->distance;
2540
2541 if (dist <4)
2542 SelectRunDir (ob);
2543 else if (dodge)
2544 SelectDodgeDir (ob);
2545 else
2546 SelectChaseDir (ob);
2547
2548 if (ob->dir == nodir)
2549 return; // object is blocked in
2550 }
2551}
2552
2553
2554/*
2555=================
2556=
2557= T_Fat
2558=
2559=================
2560*/
2561
2562void T_Fat (objtype *ob)
2563{
2564 int32_t move;
2565 int dx,dy,dist;
2566 boolean dodge;
2567
2568 dodge = false;
2569 dx = abs(ob->tilex - player->tilex);
2570 dy = abs(ob->tiley - player->tiley);
2571 dist = dx>dy ? dx : dy;
2572
2573 if (CheckLine(ob)) // got a shot at player?
2574 {
2575 ob->hidden = false;
2576 if ( (unsigned) US_RndT() < (tics<<3) && objfreelist)
2577 {
2578 //
2579 // go into attack frame
2580 //
2581 NewState (ob,&s_fatshoot1);
2582 return;
2583 }
2584 dodge = true;
2585 }
2586 else
2587 ob->hidden = true;
2588
2589 if (ob->dir == nodir)
2590 {
2591 if (dodge)
2592 SelectDodgeDir (ob);
2593 else
2594 SelectChaseDir (ob);
2595 if (ob->dir == nodir)
2596 return; // object is blocked in
2597 }
2598
2599 move = ob->speed*tics;
2600
2601 while (move)
2602 {
2603 if (ob->distance < 0)
2604 {
2605 //
2606 // waiting for a door to open
2607 //
2608 OpenDoor (-ob->distance-1);
2609 if (doorobjlist[-ob->distance-1].action != dr_open)
2610 return;
2611 ob->distance = TILEGLOBAL; // go ahead, the door is now open
2612 TryWalk(ob);
2613 }
2614
2615 if (move < ob->distance)
2616 {
2617 MoveObj (ob,move);
2618 break;
2619 }
2620
2621 //
2622 // reached goal tile, so select another one
2623 //
2624
2625 //
2626 // fix position to account for round off during moving
2627 //
2628 ob->x = ((int32_t)ob->tilex<<TILESHIFT)+TILEGLOBAL/2;
2629 ob->y = ((int32_t)ob->tiley<<TILESHIFT)+TILEGLOBAL/2;
2630
2631 move -= ob->distance;
2632
2633 if (dist <4)
2634 SelectRunDir (ob);
2635 else if (dodge)
2636 SelectDodgeDir (ob);
2637 else
2638 SelectChaseDir (ob);
2639
2640 if (ob->dir == nodir)
2641 return; // object is blocked in
2642 }
2643}
2644
2645
2646/*
2647=============================================================================
2648
2649 HITLERS
2650
2651=============================================================================
2652*/
2653
2654
2655//
2656// fake
2657//
2658extern statetype s_fakestand;
2659
2660extern statetype s_fakechase1;
2661extern statetype s_fakechase1s;
2662extern statetype s_fakechase2;
2663extern statetype s_fakechase3;
2664extern statetype s_fakechase3s;
2665extern statetype s_fakechase4;
2666
2667extern statetype s_fakedie1;
2668extern statetype s_fakedie2;
2669extern statetype s_fakedie3;
2670extern statetype s_fakedie4;
2671extern statetype s_fakedie5;
2672extern statetype s_fakedie6;
2673
2674extern statetype s_fakeshoot1;
2675extern statetype s_fakeshoot2;
2676extern statetype s_fakeshoot3;
2677extern statetype s_fakeshoot4;
2678extern statetype s_fakeshoot5;
2679extern statetype s_fakeshoot6;
2680extern statetype s_fakeshoot7;
2681extern statetype s_fakeshoot8;
2682extern statetype s_fakeshoot9;
2683
2684extern statetype s_fire1;
2685extern statetype s_fire2;
2686
2687statetype s_fakestand = {false,SPR_FAKE_W1,0,(statefunc)T_Stand,NULL,&s_fakestand};
2688
2689statetype s_fakechase1 = {false,SPR_FAKE_W1,10,(statefunc)T_Fake,NULL,&s_fakechase1s};
2690statetype s_fakechase1s = {false,SPR_FAKE_W1,3,NULL,NULL,&s_fakechase2};
2691statetype s_fakechase2 = {false,SPR_FAKE_W2,8,(statefunc)T_Fake,NULL,&s_fakechase3};
2692statetype s_fakechase3 = {false,SPR_FAKE_W3,10,(statefunc)T_Fake,NULL,&s_fakechase3s};
2693statetype s_fakechase3s = {false,SPR_FAKE_W3,3,NULL,NULL,&s_fakechase4};
2694statetype s_fakechase4 = {false,SPR_FAKE_W4,8,(statefunc)T_Fake,NULL,&s_fakechase1};
2695
2696statetype s_fakedie1 = {false,SPR_FAKE_DIE1,10,NULL,(statefunc)A_DeathScream,&s_fakedie2};
2697statetype s_fakedie2 = {false,SPR_FAKE_DIE2,10,NULL,NULL,&s_fakedie3};
2698statetype s_fakedie3 = {false,SPR_FAKE_DIE3,10,NULL,NULL,&s_fakedie4};
2699statetype s_fakedie4 = {false,SPR_FAKE_DIE4,10,NULL,NULL,&s_fakedie5};
2700statetype s_fakedie5 = {false,SPR_FAKE_DIE5,10,NULL,NULL,&s_fakedie6};
2701statetype s_fakedie6 = {false,SPR_FAKE_DEAD,0,NULL,NULL,&s_fakedie6};
2702
2703statetype s_fakeshoot1 = {false,SPR_FAKE_SHOOT,8,NULL,(statefunc)T_FakeFire,&s_fakeshoot2};
2704statetype s_fakeshoot2 = {false,SPR_FAKE_SHOOT,8,NULL,(statefunc)T_FakeFire,&s_fakeshoot3};
2705statetype s_fakeshoot3 = {false,SPR_FAKE_SHOOT,8,NULL,(statefunc)T_FakeFire,&s_fakeshoot4};
2706statetype s_fakeshoot4 = {false,SPR_FAKE_SHOOT,8,NULL,(statefunc)T_FakeFire,&s_fakeshoot5};
2707statetype s_fakeshoot5 = {false,SPR_FAKE_SHOOT,8,NULL,(statefunc)T_FakeFire,&s_fakeshoot6};
2708statetype s_fakeshoot6 = {false,SPR_FAKE_SHOOT,8,NULL,(statefunc)T_FakeFire,&s_fakeshoot7};
2709statetype s_fakeshoot7 = {false,SPR_FAKE_SHOOT,8,NULL,(statefunc)T_FakeFire,&s_fakeshoot8};
2710statetype s_fakeshoot8 = {false,SPR_FAKE_SHOOT,8,NULL,(statefunc)T_FakeFire,&s_fakeshoot9};
2711statetype s_fakeshoot9 = {false,SPR_FAKE_SHOOT,8,NULL,NULL,&s_fakechase1};
2712
2713statetype s_fire1 = {false,SPR_FIRE1,6,NULL,(statefunc)T_Projectile,&s_fire2};
2714statetype s_fire2 = {false,SPR_FIRE2,6,NULL,(statefunc)T_Projectile,&s_fire1};
2715
2716//
2717// hitler
2718//
2719extern statetype s_mechachase1;
2720extern statetype s_mechachase1s;
2721extern statetype s_mechachase2;
2722extern statetype s_mechachase3;
2723extern statetype s_mechachase3s;
2724extern statetype s_mechachase4;
2725
2726extern statetype s_mechadie1;
2727extern statetype s_mechadie2;
2728extern statetype s_mechadie3;
2729extern statetype s_mechadie4;
2730
2731extern statetype s_mechashoot1;
2732extern statetype s_mechashoot2;
2733extern statetype s_mechashoot3;
2734extern statetype s_mechashoot4;
2735extern statetype s_mechashoot5;
2736extern statetype s_mechashoot6;
2737
2738
2739extern statetype s_hitlerchase1;
2740extern statetype s_hitlerchase1s;
2741extern statetype s_hitlerchase2;
2742extern statetype s_hitlerchase3;
2743extern statetype s_hitlerchase3s;
2744extern statetype s_hitlerchase4;
2745
2746extern statetype s_hitlerdie1;
2747extern statetype s_hitlerdie2;
2748extern statetype s_hitlerdie3;
2749extern statetype s_hitlerdie4;
2750extern statetype s_hitlerdie5;
2751extern statetype s_hitlerdie6;
2752extern statetype s_hitlerdie7;
2753extern statetype s_hitlerdie8;
2754extern statetype s_hitlerdie9;
2755extern statetype s_hitlerdie10;
2756
2757extern statetype s_hitlershoot1;
2758extern statetype s_hitlershoot2;
2759extern statetype s_hitlershoot3;
2760extern statetype s_hitlershoot4;
2761extern statetype s_hitlershoot5;
2762extern statetype s_hitlershoot6;
2763
2764extern statetype s_hitlerdeathcam;
2765
2766statetype s_mechastand = {false,SPR_MECHA_W1,0,(statefunc)T_Stand,NULL,&s_mechastand};
2767
2768statetype s_mechachase1 = {false,SPR_MECHA_W1,10,(statefunc)T_Chase,(statefunc)A_MechaSound,&s_mechachase1s};
2769statetype s_mechachase1s = {false,SPR_MECHA_W1,6,NULL,NULL,&s_mechachase2};
2770statetype s_mechachase2 = {false,SPR_MECHA_W2,8,(statefunc)T_Chase,NULL,&s_mechachase3};
2771statetype s_mechachase3 = {false,SPR_MECHA_W3,10,(statefunc)T_Chase,(statefunc)A_MechaSound,&s_mechachase3s};
2772statetype s_mechachase3s = {false,SPR_MECHA_W3,6,NULL,NULL,&s_mechachase4};
2773statetype s_mechachase4 = {false,SPR_MECHA_W4,8,(statefunc)T_Chase,NULL,&s_mechachase1};
2774
2775statetype s_mechadie1 = {false,SPR_MECHA_DIE1,10,NULL,(statefunc)A_DeathScream,&s_mechadie2};
2776statetype s_mechadie2 = {false,SPR_MECHA_DIE2,10,NULL,NULL,&s_mechadie3};
2777statetype s_mechadie3 = {false,SPR_MECHA_DIE3,10,NULL,(statefunc)A_HitlerMorph,&s_mechadie4};
2778statetype s_mechadie4 = {false,SPR_MECHA_DEAD,0,NULL,NULL,&s_mechadie4};
2779
2780statetype s_mechashoot1 = {false,SPR_MECHA_SHOOT1,30,NULL,NULL,&s_mechashoot2};
2781statetype s_mechashoot2 = {false,SPR_MECHA_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_mechashoot3};
2782statetype s_mechashoot3 = {false,SPR_MECHA_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_mechashoot4};
2783statetype s_mechashoot4 = {false,SPR_MECHA_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_mechashoot5};
2784statetype s_mechashoot5 = {false,SPR_MECHA_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_mechashoot6};
2785statetype s_mechashoot6 = {false,SPR_MECHA_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_mechachase1};
2786
2787
2788statetype s_hitlerchase1 = {false,SPR_HITLER_W1,6,(statefunc)T_Chase,NULL,&s_hitlerchase1s};
2789statetype s_hitlerchase1s = {false,SPR_HITLER_W1,4,NULL,NULL,&s_hitlerchase2};
2790statetype s_hitlerchase2 = {false,SPR_HITLER_W2,2,(statefunc)T_Chase,NULL,&s_hitlerchase3};
2791statetype s_hitlerchase3 = {false,SPR_HITLER_W3,6,(statefunc)T_Chase,NULL,&s_hitlerchase3s};
2792statetype s_hitlerchase3s = {false,SPR_HITLER_W3,4,NULL,NULL,&s_hitlerchase4};
2793statetype s_hitlerchase4 = {false,SPR_HITLER_W4,2,(statefunc)T_Chase,NULL,&s_hitlerchase1};
2794
2795statetype s_hitlerdeathcam = {false,SPR_HITLER_W1,10,NULL,NULL,&s_hitlerdie1};
2796
2797statetype s_hitlerdie1 = {false,SPR_HITLER_W1,1,NULL,(statefunc)A_DeathScream,&s_hitlerdie2};
2798statetype s_hitlerdie2 = {false,SPR_HITLER_W1,10,NULL,NULL,&s_hitlerdie3};
2799statetype s_hitlerdie3 = {false,SPR_HITLER_DIE1,10,NULL,(statefunc)A_Slurpie,&s_hitlerdie4};
2800statetype s_hitlerdie4 = {false,SPR_HITLER_DIE2,10,NULL,NULL,&s_hitlerdie5};
2801statetype s_hitlerdie5 = {false,SPR_HITLER_DIE3,10,NULL,NULL,&s_hitlerdie6};
2802statetype s_hitlerdie6 = {false,SPR_HITLER_DIE4,10,NULL,NULL,&s_hitlerdie7};
2803statetype s_hitlerdie7 = {false,SPR_HITLER_DIE5,10,NULL,NULL,&s_hitlerdie8};
2804statetype s_hitlerdie8 = {false,SPR_HITLER_DIE6,10,NULL,NULL,&s_hitlerdie9};
2805statetype s_hitlerdie9 = {false,SPR_HITLER_DIE7,10,NULL,NULL,&s_hitlerdie10};
2806statetype s_hitlerdie10 = {false,SPR_HITLER_DEAD,20,NULL,(statefunc)A_StartDeathCam,&s_hitlerdie10};
2807
2808statetype s_hitlershoot1 = {false,SPR_HITLER_SHOOT1,30,NULL,NULL,&s_hitlershoot2};
2809statetype s_hitlershoot2 = {false,SPR_HITLER_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_hitlershoot3};
2810statetype s_hitlershoot3 = {false,SPR_HITLER_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_hitlershoot4};
2811statetype s_hitlershoot4 = {false,SPR_HITLER_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_hitlershoot5};
2812statetype s_hitlershoot5 = {false,SPR_HITLER_SHOOT3,10,NULL,(statefunc)T_Shoot,&s_hitlershoot6};
2813statetype s_hitlershoot6 = {false,SPR_HITLER_SHOOT2,10,NULL,(statefunc)T_Shoot,&s_hitlerchase1};
2814
2815
2816
2817/*
2818===============
2819=
2820= SpawnFakeHitler
2821=
2822===============
2823*/
2824
2825void SpawnFakeHitler (int tilex, int tiley)
2826{
2827 if (DigiMode != sds_Off)
2828 s_hitlerdie2.tictime = 140;
2829 else
2830 s_hitlerdie2.tictime = 5;
2831
2832 SpawnNewObj (tilex,tiley,&s_fakestand);
2833 newobj->speed = SPDPATROL;
2834
2835 newobj->obclass = fakeobj;
2836 newobj->hitpoints = starthitpoints[gamestate.difficulty][en_fake];
2837 newobj->dir = nodir;
2838 newobj->flags |= FL_SHOOTABLE|FL_AMBUSH;
2839 if (!loadedgame)
2840 gamestate.killtotal++;
2841}
2842
2843
2844/*
2845===============
2846=
2847= SpawnHitler
2848=
2849===============
2850*/
2851
2852void SpawnHitler (int tilex, int tiley)
2853{
2854 if (DigiMode != sds_Off)
2855 s_hitlerdie2.tictime = 140;
2856 else
2857 s_hitlerdie2.tictime = 5;
2858
2859
2860 SpawnNewObj (tilex,tiley,&s_mechastand);
2861 newobj->speed = SPDPATROL;
2862
2863 newobj->obclass = mechahitlerobj;
2864 newobj->hitpoints = starthitpoints[gamestate.difficulty][en_hitler];
2865 newobj->dir = nodir;
2866 newobj->flags |= FL_SHOOTABLE|FL_AMBUSH;
2867 if (!loadedgame)
2868 gamestate.killtotal++;
2869}
2870
2871
2872/*
2873===============
2874=
2875= A_HitlerMorph
2876=
2877===============
2878*/
2879
2880void A_HitlerMorph (objtype *ob)
2881{
2882 short hitpoints[4]={500,700,800,900};
2883
2884 SpawnNewObj (ob->tilex,ob->tiley,&s_hitlerchase1);
2885 newobj->speed = SPDPATROL*5;
2886
2887 newobj->x = ob->x;
2888 newobj->y = ob->y;
2889
2890 newobj->distance = ob->distance;
2891 newobj->dir = ob->dir;
2892 newobj->flags = ob->flags | FL_SHOOTABLE;
2893 newobj->flags &= ~FL_NONMARK; // hitler stuck with nodir fix
2894
2895 newobj->obclass = realhitlerobj;
2896 newobj->hitpoints = hitpoints[gamestate.difficulty];
2897}
2898
2899
2900////////////////////////////////////////////////////////
2901//
2902// A_MechaSound
2903// A_Slurpie
2904//
2905////////////////////////////////////////////////////////
2906void A_MechaSound (objtype *ob)
2907{
2908 if (areabyplayer[ob->areanumber])
2909 PlaySoundLocActor (MECHSTEPSND,ob);
2910}
2911
2912void A_Slurpie (objtype * ob)
2913{
2914 SD_PlaySound(SLURPIESND);
2915}
2916
2917/*
2918=================
2919=
2920= T_FakeFire
2921=
2922=================
2923*/
2924
2925void T_FakeFire (objtype *ob)
2926{
2927 int32_t deltax,deltay;
2928 float angle;
2929 int iangle;
2930
2931 if (!objfreelist) // stop shooting if over MAXACTORS
2932 {
2933 NewState (ob,&s_fakechase1);
2934 return;
2935 }
2936
2937 deltax = player->x - ob->x;
2938 deltay = ob->y - player->y;
2939 angle = (float) atan2((float) deltay, (float) deltax);
2940 if (angle<0)
2941 angle = (float)(M_PI*2+angle);
2942 iangle = (int) (angle/(M_PI*2)*ANGLES);
2943
2944 GetNewActor ();
2945 newobj->state = &s_fire1;
2946 newobj->ticcount = 1;
2947
2948 newobj->tilex = ob->tilex;
2949 newobj->tiley = ob->tiley;
2950 newobj->x = ob->x;
2951 newobj->y = ob->y;
2952 newobj->dir = nodir;
2953 newobj->angle = iangle;
2954 newobj->obclass = fireobj;
2955 newobj->speed = 0x1200l;
2956 newobj->flags = FL_NEVERMARK;
2957 newobj->active = ac_yes;
2958
2959 PlaySoundLocActor (FLAMETHROWERSND,newobj);
2960}
2961
2962
2963
2964/*
2965=================
2966=
2967= T_Fake
2968=
2969=================
2970*/
2971
2972void T_Fake (objtype *ob)
2973{
2974 int32_t move;
2975
2976 if (CheckLine(ob)) // got a shot at player?
2977 {
2978 ob->hidden = false;
2979 if ( (unsigned) US_RndT() < (tics<<1) && objfreelist)
2980 {
2981 //
2982 // go into attack frame
2983 //
2984 NewState (ob,&s_fakeshoot1);
2985 return;
2986 }
2987 }
2988 else
2989 ob->hidden = true;
2990
2991 if (ob->dir == nodir)
2992 {
2993 SelectDodgeDir (ob);
2994 if (ob->dir == nodir)
2995 return; // object is blocked in
2996 }
2997
2998 move = ob->speed*tics;
2999
3000 while (move)
3001 {
3002 if (move < ob->distance)
3003 {
3004 MoveObj (ob,move);
3005 break;
3006 }
3007
3008 //
3009 // reached goal tile, so select another one
3010 //
3011
3012 //
3013 // fix position to account for round off during moving
3014 //
3015 ob->x = ((int32_t)ob->tilex<<TILESHIFT)+TILEGLOBAL/2;
3016 ob->y = ((int32_t)ob->tiley<<TILESHIFT)+TILEGLOBAL/2;
3017
3018 move -= ob->distance;
3019
3020 SelectDodgeDir (ob);
3021
3022 if (ob->dir == nodir)
3023 return; // object is blocked in
3024 }
3025}
3026
3027#endif
3028/*
3029============================================================================
3030
3031STAND
3032
3033============================================================================
3034*/
3035
3036
3037/*
3038===============
3039=
3040= T_Stand
3041=
3042===============
3043*/
3044
3045void T_Stand (objtype *ob)
3046{
3047 SightPlayer (ob);
3048}
3049
3050
3051/*
3052============================================================================
3053
3054CHASE
3055
3056============================================================================
3057*/
3058
3059/*
3060=================
3061=
3062= T_Chase
3063=
3064=================
3065*/
3066
3067void T_Chase (objtype *ob)
3068{
3069 int32_t move,target;
3070 int dx,dy,dist,chance;
3071 boolean dodge;
3072
3073 if (gamestate.victoryflag)
3074 return;
3075
3076 dodge = false;
3077 if (CheckLine(ob)) // got a shot at player?
3078 {
3079 ob->hidden = false;
3080 dx = abs(ob->tilex - player->tilex);
3081 dy = abs(ob->tiley - player->tiley);
3082 dist = dx>dy ? dx : dy;
3083
3084#ifdef PLAYDEMOLIKEORIGINAL
3085 if(DEMOCOND_ORIG)
3086 {
3087 if(!dist || (dist == 1 && ob->distance < 0x4000))
3088 chance = 300;
3089 else
3090 chance = (tics<<4)/dist;
3091 }
3092 else
3093#endif
3094 {
3095 if (dist)
3096 chance = (tics<<4)/dist;
3097 else
3098 chance = 300;
3099
3100 if (dist == 1)
3101 {
3102 target = abs(ob->x - player->x);
3103 if (target < 0x14000l)
3104 {
3105 target = abs(ob->y - player->y);
3106 if (target < 0x14000l)
3107 chance = 300;
3108 }
3109 }
3110 }
3111
3112 if ( US_RndT()<chance)
3113 {
3114 //
3115 // go into attack frame
3116 //
3117 switch (ob->obclass)
3118 {
3119 case guardobj:
3120 NewState (ob,&s_grdshoot1);
3121 break;
3122 case officerobj:
3123 NewState (ob,&s_ofcshoot1);
3124 break;
3125 case mutantobj:
3126 NewState (ob,&s_mutshoot1);
3127 break;
3128 case ssobj:
3129 NewState (ob,&s_ssshoot1);
3130 break;
3131#ifndef SPEAR
3132 case bossobj:
3133 NewState (ob,&s_bossshoot1);
3134 break;
3135 case gretelobj:
3136 NewState (ob,&s_gretelshoot1);
3137 break;
3138 case mechahitlerobj:
3139 NewState (ob,&s_mechashoot1);
3140 break;
3141 case realhitlerobj:
3142 NewState (ob,&s_hitlershoot1);
3143 break;
3144#else
3145 case angelobj:
3146 NewState (ob,&s_angelshoot1);
3147 break;
3148 case transobj:
3149 NewState (ob,&s_transshoot1);
3150 break;
3151 case uberobj:
3152 NewState (ob,&s_ubershoot1);
3153 break;
3154 case willobj:
3155 NewState (ob,&s_willshoot1);
3156 break;
3157 case deathobj:
3158 NewState (ob,&s_deathshoot1);
3159 break;
3160#endif
3161 }
3162 return;
3163 }
3164 dodge = true;
3165 }
3166 else
3167 ob->hidden = true;
3168
3169 if (ob->dir == nodir)
3170 {
3171 if (dodge)
3172 SelectDodgeDir (ob);
3173 else
3174 SelectChaseDir (ob);
3175 if (ob->dir == nodir)
3176 return; // object is blocked in
3177 }
3178
3179 move = ob->speed*tics;
3180
3181 while (move)
3182 {
3183 if (ob->distance < 0)
3184 {
3185 //
3186 // waiting for a door to open
3187 //
3188 OpenDoor (-ob->distance-1);
3189 if (doorobjlist[-ob->distance-1].action != dr_open)
3190 return;
3191 ob->distance = TILEGLOBAL; // go ahead, the door is now open
3192 DEMOIF_SDL
3193 {
3194 TryWalk(ob);
3195 }
3196 }
3197
3198 if (move < ob->distance)
3199 {
3200 MoveObj (ob,move);
3201 break;
3202 }
3203
3204 //
3205 // reached goal tile, so select another one
3206 //
3207
3208 //
3209 // fix position to account for round off during moving
3210 //
3211 ob->x = ((int32_t)ob->tilex<<TILESHIFT)+TILEGLOBAL/2;
3212 ob->y = ((int32_t)ob->tiley<<TILESHIFT)+TILEGLOBAL/2;
3213
3214 move -= ob->distance;
3215
3216 if (dodge)
3217 SelectDodgeDir (ob);
3218 else
3219 SelectChaseDir (ob);
3220
3221 if (ob->dir == nodir)
3222 return; // object is blocked in
3223 }
3224}
3225
3226
3227/*
3228=================
3229=
3230= T_Ghosts
3231=
3232=================
3233*/
3234
3235void T_Ghosts (objtype *ob)
3236{
3237 int32_t move;
3238
3239 if (ob->dir == nodir)
3240 {
3241 SelectChaseDir (ob);
3242 if (ob->dir == nodir)
3243 return; // object is blocked in
3244 }
3245
3246 move = ob->speed*tics;
3247
3248 while (move)
3249 {
3250 if (move < ob->distance)
3251 {
3252 MoveObj (ob,move);
3253 break;
3254 }
3255
3256 //
3257 // reached goal tile, so select another one
3258 //
3259
3260 //
3261 // fix position to account for round off during moving
3262 //
3263 ob->x = ((int32_t)ob->tilex<<TILESHIFT)+TILEGLOBAL/2;
3264 ob->y = ((int32_t)ob->tiley<<TILESHIFT)+TILEGLOBAL/2;
3265
3266 move -= ob->distance;
3267
3268 SelectChaseDir (ob);
3269
3270 if (ob->dir == nodir)
3271 return; // object is blocked in
3272 }
3273}
3274
3275/*
3276=================
3277=
3278= T_DogChase
3279=
3280=================
3281*/
3282
3283void T_DogChase (objtype *ob)
3284{
3285 int32_t move;
3286 int32_t dx,dy;
3287
3288
3289 if (ob->dir == nodir)
3290 {
3291 SelectDodgeDir (ob);
3292 if (ob->dir == nodir)
3293 return; // object is blocked in
3294 }
3295
3296 move = ob->speed*tics;
3297
3298 while (move)
3299 {
3300 //
3301 // check for byte range
3302 //
3303 dx = player->x - ob->x;
3304 if (dx<0)
3305 dx = -dx;
3306 dx -= move;
3307 if (dx <= MINACTORDIST)
3308 {
3309 dy = player->y - ob->y;
3310 if (dy<0)
3311 dy = -dy;
3312 dy -= move;
3313 if (dy <= MINACTORDIST)
3314 {
3315 NewState (ob,&s_dogjump1);
3316 return;
3317 }
3318 }
3319
3320 if (move < ob->distance)
3321 {
3322 MoveObj (ob,move);
3323 break;
3324 }
3325
3326 //
3327 // reached goal tile, so select another one
3328 //
3329
3330 //
3331 // fix position to account for round off during moving
3332 //
3333 ob->x = ((int32_t)ob->tilex<<TILESHIFT)+TILEGLOBAL/2;
3334 ob->y = ((int32_t)ob->tiley<<TILESHIFT)+TILEGLOBAL/2;
3335
3336 move -= ob->distance;
3337
3338 SelectDodgeDir (ob);
3339
3340 if (ob->dir == nodir)
3341 return; // object is blocked in
3342 }
3343}
3344
3345
3346
3347/*
3348============================================================================
3349
3350 PATH
3351
3352============================================================================
3353*/
3354
3355
3356/*
3357===============
3358=
3359= SelectPathDir
3360=
3361===============
3362*/
3363
3364void SelectPathDir (objtype *ob)
3365{
3366 unsigned spot;
3367
3368 spot = MAPSPOT(ob->tilex,ob->tiley,1)-ICONARROWS;
3369
3370 if (spot<8)
3371 {
3372 // new direction
3373 ob->dir = (dirtype)(spot);
3374 }
3375
3376 ob->distance = TILEGLOBAL;
3377
3378 if (!TryWalk (ob))
3379 ob->dir = nodir;
3380}
3381
3382
3383/*
3384===============
3385=
3386= T_Path
3387=
3388===============
3389*/
3390
3391void T_Path (objtype *ob)
3392{
3393 int32_t move;
3394
3395 if (SightPlayer (ob))
3396 return;
3397
3398 if (ob->dir == nodir)
3399 {
3400 SelectPathDir (ob);
3401 if (ob->dir == nodir)
3402 return; // all movement is blocked
3403 }
3404
3405
3406 move = ob->speed*tics;
3407
3408 while (move)
3409 {
3410 if (ob->distance < 0)
3411 {
3412 //
3413 // waiting for a door to open
3414 //
3415 OpenDoor (-ob->distance-1);
3416 if (doorobjlist[-ob->distance-1].action != dr_open)
3417 return;
3418 ob->distance = TILEGLOBAL; // go ahead, the door is now open
3419 DEMOIF_SDL
3420 {
3421 TryWalk(ob);
3422 }
3423 }
3424
3425 if (move < ob->distance)
3426 {
3427 MoveObj (ob,move);
3428 break;
3429 }
3430
3431 if (ob->tilex>MAPSIZE || ob->tiley>MAPSIZE)
3432 {
3433 sprintf (str, "T_Path hit a wall at %u,%u, dir %u",
3434 ob->tilex,ob->tiley,ob->dir);
3435 Quit (str);
3436 }
3437
3438 ob->x = ((int32_t)ob->tilex<<TILESHIFT)+TILEGLOBAL/2;
3439 ob->y = ((int32_t)ob->tiley<<TILESHIFT)+TILEGLOBAL/2;
3440 move -= ob->distance;
3441
3442 SelectPathDir (ob);
3443
3444 if (ob->dir == nodir)
3445 return; // all movement is blocked
3446 }
3447}
3448
3449
3450/*
3451=============================================================================
3452
3453 FIGHT
3454
3455=============================================================================
3456*/
3457
3458
3459/*
3460===============
3461=
3462= T_Shoot
3463=
3464= Try to damage the player, based on skill level and player's speed
3465=
3466===============
3467*/
3468
3469void T_Shoot (objtype *ob)
3470{
3471 int dx,dy,dist;
3472 int hitchance,damage;
3473
3474 hitchance = 128;
3475
3476 if (!areabyplayer[ob->areanumber])
3477 return;
3478
3479 if (CheckLine (ob)) // player is not behind a wall
3480 {
3481 dx = abs(ob->tilex - player->tilex);
3482 dy = abs(ob->tiley - player->tiley);
3483 dist = dx>dy ? dx:dy;
3484
3485 if (ob->obclass == ssobj || ob->obclass == bossobj)
3486 dist = dist*2/3; // ss are better shots
3487
3488 if (thrustspeed >= RUNSPEED)
3489 {
3490 if (ob->flags&FL_VISABLE)
3491 hitchance = 160-dist*16; // player can see to dodge
3492 else
3493 hitchance = 160-dist*8;
3494 }
3495 else
3496 {
3497 if (ob->flags&FL_VISABLE)
3498 hitchance = 256-dist*16; // player can see to dodge
3499 else
3500 hitchance = 256-dist*8;
3501 }
3502
3503 // see if the shot was a hit
3504
3505 if (US_RndT()<hitchance)
3506 {
3507 if (dist<2)
3508 damage = US_RndT()>>2;
3509 else if (dist<4)
3510 damage = US_RndT()>>3;
3511 else
3512 damage = US_RndT()>>4;
3513
3514 TakeDamage (damage,ob);
3515 }
3516 }
3517
3518 switch(ob->obclass)
3519 {
3520 case ssobj:
3521 PlaySoundLocActor(SSFIRESND,ob);
3522 break;
3523#ifndef SPEAR
3524#ifndef APOGEE_1_0
3525 case giftobj:
3526 case fatobj:
3527 PlaySoundLocActor(MISSILEFIRESND,ob);
3528 break;
3529#endif
3530 case mechahitlerobj:
3531 case realhitlerobj:
3532 case bossobj:
3533 PlaySoundLocActor(BOSSFIRESND,ob);
3534 break;
3535 case schabbobj:
3536 PlaySoundLocActor(SCHABBSTHROWSND,ob);
3537 break;
3538 case fakeobj:
3539 PlaySoundLocActor(FLAMETHROWERSND,ob);
3540 break;
3541#endif
3542 default:
3543 PlaySoundLocActor(NAZIFIRESND,ob);
3544 }
3545}
3546
3547
3548/*
3549===============
3550=
3551= T_Bite
3552=
3553===============
3554*/
3555
3556void T_Bite (objtype *ob)
3557{
3558 int32_t dx,dy;
3559
3560 PlaySoundLocActor(DOGATTACKSND,ob); // JAB
3561
3562 dx = player->x - ob->x;
3563 if (dx<0)
3564 dx = -dx;
3565 dx -= TILEGLOBAL;
3566 if (dx <= MINACTORDIST)
3567 {
3568 dy = player->y - ob->y;
3569 if (dy<0)
3570 dy = -dy;
3571 dy -= TILEGLOBAL;
3572 if (dy <= MINACTORDIST)
3573 {
3574 if (US_RndT()<180)
3575 {
3576 TakeDamage (US_RndT()>>4,ob);
3577 return;
3578 }
3579 }
3580 }
3581}
3582
3583
3584#ifndef SPEAR
3585/*
3586============================================================================
3587
3588 BJ VICTORY
3589
3590============================================================================
3591*/
3592
3593
3594//
3595// BJ victory
3596//
3597
3598void T_BJRun (objtype *ob);
3599void T_BJJump (objtype *ob);
3600void T_BJDone (objtype *ob);
3601void T_BJYell (objtype *ob);
3602
3603void T_DeathCam (objtype *ob);
3604
3605extern statetype s_bjrun1;
3606extern statetype s_bjrun1s;
3607extern statetype s_bjrun2;
3608extern statetype s_bjrun3;
3609extern statetype s_bjrun3s;
3610extern statetype s_bjrun4;
3611
3612extern statetype s_bjjump1;
3613extern statetype s_bjjump2;
3614extern statetype s_bjjump3;
3615extern statetype s_bjjump4;
3616
3617
3618statetype s_bjrun1 = {false,SPR_BJ_W1,12,(statefunc)T_BJRun,NULL,&s_bjrun1s};
3619statetype s_bjrun1s = {false,SPR_BJ_W1,3, NULL,NULL,&s_bjrun2};
3620statetype s_bjrun2 = {false,SPR_BJ_W2,8,(statefunc)T_BJRun,NULL,&s_bjrun3};
3621statetype s_bjrun3 = {false,SPR_BJ_W3,12,(statefunc)T_BJRun,NULL,&s_bjrun3s};
3622statetype s_bjrun3s = {false,SPR_BJ_W3,3, NULL,NULL,&s_bjrun4};
3623statetype s_bjrun4 = {false,SPR_BJ_W4,8,(statefunc)T_BJRun,NULL,&s_bjrun1};
3624
3625
3626statetype s_bjjump1 = {false,SPR_BJ_JUMP1,14,(statefunc)T_BJJump,NULL,&s_bjjump2};
3627statetype s_bjjump2 = {false,SPR_BJ_JUMP2,14,(statefunc)T_BJJump,(statefunc)T_BJYell,&s_bjjump3};
3628statetype s_bjjump3 = {false,SPR_BJ_JUMP3,14,(statefunc)T_BJJump,NULL,&s_bjjump4};
3629statetype s_bjjump4 = {false,SPR_BJ_JUMP4,300,NULL,(statefunc)T_BJDone,&s_bjjump4};
3630
3631
3632statetype s_deathcam = {false,0,0,NULL,NULL,NULL};
3633
3634
3635/*
3636===============
3637=
3638= SpawnBJVictory
3639=
3640===============
3641*/
3642
3643void SpawnBJVictory (void)
3644{
3645 SpawnNewObj (player->tilex,player->tiley+1,&s_bjrun1);
3646 newobj->x = player->x;
3647 newobj->y = player->y;
3648 newobj->obclass = bjobj;
3649 newobj->dir = north;
3650 newobj->temp1 = 6; // tiles to run forward
3651}
3652
3653
3654
3655/*
3656===============
3657=
3658= T_BJRun
3659=
3660===============
3661*/
3662
3663void T_BJRun (objtype *ob)
3664{
3665 int32_t move;
3666
3667 move = BJRUNSPEED*tics;
3668
3669 while (move)
3670 {
3671 if (move < ob->distance)
3672 {
3673 MoveObj (ob,move);
3674 break;
3675 }
3676
3677
3678 ob->x = ((int32_t)ob->tilex<<TILESHIFT)+TILEGLOBAL/2;
3679 ob->y = ((int32_t)ob->tiley<<TILESHIFT)+TILEGLOBAL/2;
3680 move -= ob->distance;
3681
3682 SelectPathDir (ob);
3683
3684 if ( !(--ob->temp1) )
3685 {
3686 NewState (ob,&s_bjjump1);
3687 return;
3688 }
3689 }
3690}
3691
3692
3693/*
3694===============
3695=
3696= T_BJJump
3697=
3698===============
3699*/
3700
3701void T_BJJump (objtype *ob)
3702{
3703 int32_t move;
3704
3705 move = BJJUMPSPEED*tics;
3706 MoveObj (ob,move);
3707}
3708
3709
3710/*
3711===============
3712=
3713= T_BJYell
3714=
3715===============
3716*/
3717
3718void T_BJYell (objtype *ob)
3719{
3720 PlaySoundLocActor(YEAHSND,ob); // JAB
3721}
3722
3723
3724/*
3725===============
3726=
3727= T_BJDone
3728=
3729===============
3730*/
3731
3732void T_BJDone (objtype * ob)
3733{
3734 playstate = ex_victorious; // exit castle tile
3735}
3736
3737
3738
3739//===========================================================================
3740
3741
3742/*
3743===============
3744=
3745= CheckPosition
3746=
3747===============
3748*/
3749
3750boolean CheckPosition (objtype *ob)
3751{
3752 int x,y,xl,yl,xh,yh;
3753 objtype *check;
3754
3755 xl = (ob->x-PLAYERSIZE) >> TILESHIFT;
3756 yl = (ob->y-PLAYERSIZE) >> TILESHIFT;
3757
3758 xh = (ob->x+PLAYERSIZE) >> TILESHIFT;
3759 yh = (ob->y+PLAYERSIZE) >> TILESHIFT;
3760
3761 //
3762 // check for solid walls
3763 //
3764 for (y=yl;y<=yh;y++)
3765 {
3766 for (x=xl;x<=xh;x++)
3767 {
3768 check = actorat[x][y];
3769 if (check && !ISPOINTER(check))
3770 return false;
3771 }
3772 }
3773
3774 return true;
3775}
3776
3777
3778/*
3779===============
3780=
3781= A_StartDeathCam
3782=
3783===============
3784*/
3785
3786void A_StartDeathCam (objtype *ob)
3787{
3788 int32_t dx,dy;
3789 float fangle;
3790 int32_t xmove,ymove;
3791 int32_t dist;
3792
3793 FinishPaletteShifts ();
3794
3795 VW_WaitVBL (100);
3796
3797 if (gamestate.victoryflag)
3798 {
3799 playstate = ex_victorious; // exit castle tile
3800 return;
3801 }
3802
3803 if(usedoublebuffering) VH_UpdateScreen();
3804
3805 gamestate.victoryflag = true;
3806 unsigned fadeheight = viewsize != 21 ? screenHeight-scaleFactor*STATUSLINES : screenHeight;
3807 VL_BarScaledCoord (0, 0, screenWidth, fadeheight, bordercol);
3808 FizzleFade(screenBuffer, 0, 0, screenWidth, fadeheight, 70, false);
3809
3810 if (bordercol != VIEWCOLOR)
3811 {
3812 CA_CacheGrChunk (STARTFONT+1);
3813 fontnumber = 1;
3814 SETFONTCOLOR(15,bordercol);
3815 PrintX = 68; PrintY = 45;
3816 US_Print (STR_SEEAGAIN);
3817 UNCACHEGRCHUNK(STARTFONT+1);
3818 }
3819 else
3820 {
3821 CacheLump(LEVELEND_LUMP_START,LEVELEND_LUMP_END);
3822#ifdef JAPAN
3823#ifndef JAPDEMO
3824 CA_CacheScreen(C_LETSSEEPIC);
3825#endif
3826#else
3827 Write(0,7,STR_SEEAGAIN);
3828#endif
3829 }
3830
3831 VW_UpdateScreen ();
3832 if(usedoublebuffering) VH_UpdateScreen();
3833
3834 IN_UserInput(300);
3835
3836 //
3837 // line angle up exactly
3838 //
3839 NewState (player,&s_deathcam);
3840
3841 player->x = gamestate.killx;
3842 player->y = gamestate.killy;
3843
3844 dx = ob->x - player->x;
3845 dy = player->y - ob->y;
3846
3847 fangle = (float) atan2((float) dy, (float) dx); // returns -pi to pi
3848 if (fangle<0)
3849 fangle = (float) (M_PI*2+fangle);
3850
3851 player->angle = (short) (fangle/(M_PI*2)*ANGLES);
3852
3853 //
3854 // try to position as close as possible without being in a wall
3855 //
3856 dist = 0x14000l;
3857 do
3858 {
3859 xmove = FixedMul(dist,costable[player->angle]);
3860 ymove = -FixedMul(dist,sintable[player->angle]);
3861
3862 player->x = ob->x - xmove;
3863 player->y = ob->y - ymove;
3864 dist += 0x1000;
3865
3866 } while (!CheckPosition (player));
3867 plux = (word)(player->x >> UNSIGNEDSHIFT); // scale to fit in unsigned
3868 pluy = (word)(player->y >> UNSIGNEDSHIFT);
3869 player->tilex = (word)(player->x >> TILESHIFT); // scale to tile values
3870 player->tiley = (word)(player->y >> TILESHIFT);
3871
3872 //
3873 // go back to the game
3874 //
3875
3876 DrawPlayBorder ();
3877
3878 fizzlein = true;
3879
3880 switch (ob->obclass)
3881 {
3882#ifndef SPEAR
3883 case schabbobj:
3884 NewState (ob,&s_schabbdeathcam);
3885 break;
3886 case realhitlerobj:
3887 NewState (ob,&s_hitlerdeathcam);
3888 break;
3889 case giftobj:
3890 NewState (ob,&s_giftdeathcam);
3891 break;
3892 case fatobj:
3893 NewState (ob,&s_fatdeathcam);
3894 break;
3895#endif
3896 }
3897}
3898
3899#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 @@
1// WL_AGENT.C
2
3#include "wl_def.h"
4#pragma hdrstop
5
6/*
7=============================================================================
8
9 LOCAL CONSTANTS
10
11=============================================================================
12*/
13
14#define MAXMOUSETURN 10
15
16
17#define MOVESCALE 150l
18#define BACKMOVESCALE 100l
19#define ANGLESCALE 20
20
21/*
22=============================================================================
23
24 GLOBAL VARIABLES
25
26=============================================================================
27*/
28
29
30
31//
32// player state info
33//
34int32_t thrustspeed;
35
36word plux,pluy; // player coordinates scaled to unsigned
37
38short anglefrac;
39
40objtype *LastAttacker;
41
42/*
43=============================================================================
44
45 LOCAL VARIABLES
46
47=============================================================================
48*/
49
50
51void T_Player (objtype *ob);
52void T_Attack (objtype *ob);
53
54statetype s_player = {false,0,0,(statefunc) T_Player,NULL,NULL};
55statetype s_attack = {false,0,0,(statefunc) T_Attack,NULL,NULL};
56
57struct atkinf
58{
59 int8_t tics,attack,frame; // attack is 1 for gun, 2 for knife
60} attackinfo[4][14] =
61{
62 { {6,0,1},{6,2,2},{6,0,3},{6,-1,4} },
63 { {6,0,1},{6,1,2},{6,0,3},{6,-1,4} },
64 { {6,0,1},{6,1,2},{6,3,3},{6,-1,4} },
65 { {6,0,1},{6,1,2},{6,4,3},{6,-1,4} },
66};
67
68//===========================================================================
69
70//----------
71
72void Attack (void);
73void Use (void);
74void Search (objtype *ob);
75void SelectWeapon (void);
76void SelectItem (void);
77
78//----------
79
80boolean TryMove (objtype *ob);
81void T_Player (objtype *ob);
82
83void ClipMove (objtype *ob, int32_t xmove, int32_t ymove);
84
85/*
86=============================================================================
87
88 CONTROL STUFF
89
90=============================================================================
91*/
92
93/*
94======================
95=
96= CheckWeaponChange
97=
98= Keys 1-4 change weapons
99=
100======================
101*/
102
103void CheckWeaponChange (void)
104{
105 int newWeapon = -1;
106
107 if (!gamestate.ammo) // must use knife with no ammo
108 return;
109
110 if(buttonstate[bt_nextweapon] && !buttonheld[bt_nextweapon])
111 {
112 newWeapon = gamestate.weapon + 1;
113 if(newWeapon > gamestate.bestweapon) newWeapon = 0;
114 }
115 else if(buttonstate[bt_prevweapon] && !buttonheld[bt_prevweapon])
116 {
117 newWeapon = gamestate.weapon - 1;
118 if(newWeapon < 0) newWeapon = gamestate.bestweapon;
119 }
120 else
121 {
122 for(int i = wp_knife; i <= gamestate.bestweapon; i++)
123 {
124 if (buttonstate[bt_readyknife + i - wp_knife])
125 {
126 newWeapon = i;
127 break;
128 }
129 }
130 }
131
132 if(newWeapon != -1)
133 {
134 gamestate.weapon = gamestate.chosenweapon = (weapontype) newWeapon;
135 DrawWeapon();
136 }
137}
138
139
140/*
141=======================
142=
143= ControlMovement
144=
145= Takes controlx,controly, and buttonstate[bt_strafe]
146=
147= Changes the player's angle and position
148=
149= There is an angle hack because when going 70 fps, the roundoff becomes
150= significant
151=
152=======================
153*/
154
155void ControlMovement (objtype *ob)
156{
157 int32_t oldx,oldy;
158 int angle;
159 int angleunits;
160
161 thrustspeed = 0;
162
163 oldx = player->x;
164 oldy = player->y;
165
166 if(buttonstate[bt_strafeleft])
167 {
168 angle = ob->angle + ANGLES/4;
169 if(angle >= ANGLES)
170 angle -= ANGLES;
171 if(buttonstate[bt_run])
172 Thrust(angle, RUNMOVE * MOVESCALE * tics);
173 else
174 Thrust(angle, BASEMOVE * MOVESCALE * tics);
175 }
176
177 if(buttonstate[bt_straferight])
178 {
179 angle = ob->angle - ANGLES/4;
180 if(angle < 0)
181 angle += ANGLES;
182 if(buttonstate[bt_run])
183 Thrust(angle, RUNMOVE * MOVESCALE * tics );
184 else
185 Thrust(angle, BASEMOVE * MOVESCALE * tics);
186 }
187
188 //
189 // side to side move
190 //
191 if (buttonstate[bt_strafe])
192 {
193 //
194 // strafing
195 //
196 //
197 if (controlx > 0)
198 {
199 angle = ob->angle - ANGLES/4;
200 if (angle < 0)
201 angle += ANGLES;
202 Thrust (angle,controlx*MOVESCALE); // move to left
203 }
204 else if (controlx < 0)
205 {
206 angle = ob->angle + ANGLES/4;
207 if (angle >= ANGLES)
208 angle -= ANGLES;
209 Thrust (angle,-controlx*MOVESCALE); // move to right
210 }
211 }
212 else
213 {
214 //
215 // not strafing
216 //
217 anglefrac += controlx;
218 angleunits = anglefrac/ANGLESCALE;
219 anglefrac -= angleunits*ANGLESCALE;
220 ob->angle -= angleunits;
221
222 if (ob->angle >= ANGLES)
223 ob->angle -= ANGLES;
224 if (ob->angle < 0)
225 ob->angle += ANGLES;
226
227 }
228
229 //
230 // forward/backwards move
231 //
232 if (controly < 0)
233 {
234 Thrust (ob->angle,-controly*MOVESCALE); // move forwards
235 }
236 else if (controly > 0)
237 {
238 angle = ob->angle + ANGLES/2;
239 if (angle >= ANGLES)
240 angle -= ANGLES;
241 Thrust (angle,controly*BACKMOVESCALE); // move backwards
242 }
243
244 if (gamestate.victoryflag) // watching the BJ actor
245 return;
246}
247
248/*
249=============================================================================
250
251 STATUS WINDOW STUFF
252
253=============================================================================
254*/
255
256
257/*
258==================
259=
260= StatusDrawPic
261=
262==================
263*/
264
265void StatusDrawPic (unsigned x, unsigned y, unsigned picnum)
266{
267 LatchDrawPicScaledCoord ((screenWidth-scaleFactor*320)/16 + scaleFactor*x,
268 screenHeight-scaleFactor*(STATUSLINES-y),picnum);
269}
270
271void StatusDrawFace(unsigned picnum)
272{
273 StatusDrawPic(17, 4, picnum);
274
275#ifdef _arch_dreamcast
276 DC_StatusDrawLCD(picnum);
277#endif
278}
279
280
281/*
282==================
283=
284= DrawFace
285=
286==================
287*/
288
289void DrawFace (void)
290{
291 if(viewsize == 21 && ingame) return;
292 if (SD_SoundPlaying() == GETGATLINGSND)
293 StatusDrawFace(GOTGATLINGPIC);
294 else if (gamestate.health)
295 {
296#ifdef SPEAR
297 if (godmode)
298 StatusDrawFace(GODMODEFACE1PIC+gamestate.faceframe);
299 else
300#endif
301 StatusDrawFace(FACE1APIC+3*((100-gamestate.health)/16)+gamestate.faceframe);
302 }
303 else
304 {
305#ifndef SPEAR
306 if (LastAttacker && LastAttacker->obclass == needleobj)
307 StatusDrawFace(MUTANTBJPIC);
308 else
309#endif
310 StatusDrawFace(FACE8APIC);
311 }
312}
313
314/*
315===============
316=
317= UpdateFace
318=
319= Calls draw face if time to change
320=
321===============
322*/
323
324int facecount = 0;
325int facetimes = 0;
326
327void UpdateFace (void)
328{
329 // don't make demo depend on sound playback
330 if(demoplayback || demorecord)
331 {
332 if(facetimes > 0)
333 {
334 facetimes--;
335 return;
336 }
337 }
338 else if(SD_SoundPlaying() == GETGATLINGSND)
339 return;
340
341 facecount += tics;
342 if (facecount > US_RndT())
343 {
344 gamestate.faceframe = (US_RndT()>>6);
345 if (gamestate.faceframe==3)
346 gamestate.faceframe = 1;
347
348 facecount = 0;
349 DrawFace ();
350 }
351}
352
353
354
355/*
356===============
357=
358= LatchNumber
359=
360= right justifies and pads with blanks
361=
362===============
363*/
364
365static void LatchNumber (int x, int y, unsigned width, int32_t number)
366{
367 unsigned length,c;
368 char str[20];
369
370 ltoa (number,str,10);
371
372 length = (unsigned) strlen (str);
373
374 while (length<width)
375 {
376 StatusDrawPic (x,y,N_BLANKPIC);
377 x++;
378 width--;
379 }
380
381 c = length <= width ? 0 : length-width;
382
383 while (c<length)
384 {
385 StatusDrawPic (x,y,str[c]-'0'+ N_0PIC);
386 x++;
387 c++;
388 }
389}
390
391
392/*
393===============
394=
395= DrawHealth
396=
397===============
398*/
399
400void DrawHealth (void)
401{
402 if(viewsize == 21 && ingame) return;
403 LatchNumber (21,16,3,gamestate.health);
404}
405
406
407/*
408===============
409=
410= TakeDamage
411=
412===============
413*/
414
415void TakeDamage (int points,objtype *attacker)
416{
417 LastAttacker = attacker;
418
419 if (gamestate.victoryflag)
420 return;
421 if (gamestate.difficulty==gd_baby)
422 points>>=2;
423
424 if (!godmode)
425 gamestate.health -= points;
426
427 if (gamestate.health<=0)
428 {
429 gamestate.health = 0;
430 playstate = ex_died;
431 killerobj = attacker;
432 }
433
434 if (godmode != 2)
435 StartDamageFlash (points);
436
437 DrawHealth ();
438 DrawFace ();
439
440 //
441 // MAKE BJ'S EYES BUG IF MAJOR DAMAGE!
442 //
443#ifdef SPEAR
444 if (points > 30 && gamestate.health!=0 && !godmode && viewsize != 21)
445 {
446 StatusDrawFace(BJOUCHPIC);
447 facecount = 0;
448 }
449#endif
450}
451
452/*
453===============
454=
455= HealSelf
456=
457===============
458*/
459
460void HealSelf (int points)
461{
462 gamestate.health += points;
463 if (gamestate.health>100)
464 gamestate.health = 100;
465
466 DrawHealth ();
467 DrawFace ();
468}
469
470
471//===========================================================================
472
473
474/*
475===============
476=
477= DrawLevel
478=
479===============
480*/
481
482void DrawLevel (void)
483{
484 if(viewsize == 21 && ingame) return;
485#ifdef SPEAR
486 if (gamestate.mapon == 20)
487 LatchNumber (2,16,2,18);
488 else
489#endif
490 LatchNumber (2,16,2,gamestate.mapon+1);
491}
492
493//===========================================================================
494
495
496/*
497===============
498=
499= DrawLives
500=
501===============
502*/
503
504void DrawLives (void)
505{
506 if(viewsize == 21 && ingame) return;
507 LatchNumber (14,16,1,gamestate.lives);
508}
509
510
511/*
512===============
513=
514= GiveExtraMan
515=
516===============
517*/
518
519void GiveExtraMan (void)
520{
521 if (gamestate.lives<9)
522 gamestate.lives++;
523 DrawLives ();
524 SD_PlaySound (BONUS1UPSND);
525}
526
527//===========================================================================
528
529/*
530===============
531=
532= DrawScore
533=
534===============
535*/
536
537void DrawScore (void)
538{
539 if(viewsize == 21 && ingame) return;
540 LatchNumber (6,16,6,gamestate.score);
541}
542
543/*
544===============
545=
546= GivePoints
547=
548===============
549*/
550
551void GivePoints (int32_t points)
552{
553 gamestate.score += points;
554 while (gamestate.score >= gamestate.nextextra)
555 {
556 gamestate.nextextra += EXTRAPOINTS;
557 GiveExtraMan ();
558 }
559 DrawScore ();
560}
561
562//===========================================================================
563
564/*
565==================
566=
567= DrawWeapon
568=
569==================
570*/
571
572void DrawWeapon (void)
573{
574 if(viewsize == 21 && ingame) return;
575 StatusDrawPic (32,8,KNIFEPIC+gamestate.weapon);
576}
577
578
579/*
580==================
581=
582= DrawKeys
583=
584==================
585*/
586
587void DrawKeys (void)
588{
589 if(viewsize == 21 && ingame) return;
590 if (gamestate.keys & 1)
591 StatusDrawPic (30,4,GOLDKEYPIC);
592 else
593 StatusDrawPic (30,4,NOKEYPIC);
594
595 if (gamestate.keys & 2)
596 StatusDrawPic (30,20,SILVERKEYPIC);
597 else
598 StatusDrawPic (30,20,NOKEYPIC);
599}
600
601/*
602==================
603=
604= GiveWeapon
605=
606==================
607*/
608
609void GiveWeapon (int weapon)
610{
611 GiveAmmo (6);
612
613 if (gamestate.bestweapon<weapon)
614 gamestate.bestweapon = gamestate.weapon
615 = gamestate.chosenweapon = (weapontype) weapon;
616
617 DrawWeapon ();
618}
619
620//===========================================================================
621
622/*
623===============
624=
625= DrawAmmo
626=
627===============
628*/
629
630void DrawAmmo (void)
631{
632 if(viewsize == 21 && ingame) return;
633 LatchNumber (27,16,2,gamestate.ammo);
634}
635
636/*
637===============
638=
639= GiveAmmo
640=
641===============
642*/
643
644void GiveAmmo (int ammo)
645{
646 if (!gamestate.ammo) // knife was out
647 {
648 if (!gamestate.attackframe)
649 {
650 gamestate.weapon = gamestate.chosenweapon;
651 DrawWeapon ();
652 }
653 }
654 gamestate.ammo += ammo;
655 if (gamestate.ammo > 99)
656 gamestate.ammo = 99;
657 DrawAmmo ();
658}
659
660//===========================================================================
661
662/*
663==================
664=
665= GiveKey
666=
667==================
668*/
669
670void GiveKey (int key)
671{
672 gamestate.keys |= (1<<key);
673 DrawKeys ();
674}
675
676
677
678/*
679=============================================================================
680
681 MOVEMENT
682
683=============================================================================
684*/
685
686
687/*
688===================
689=
690= GetBonus
691=
692===================
693*/
694void GetBonus (statobj_t *check)
695{
696 switch (check->itemnumber)
697 {
698 case bo_firstaid:
699 if (gamestate.health == 100)
700 return;
701
702 SD_PlaySound (HEALTH2SND);
703 HealSelf (25);
704 break;
705
706 case bo_key1:
707 case bo_key2:
708 case bo_key3:
709 case bo_key4:
710 GiveKey (check->itemnumber - bo_key1);
711 SD_PlaySound (GETKEYSND);
712 break;
713
714 case bo_cross:
715 SD_PlaySound (BONUS1SND);
716 GivePoints (100);
717 gamestate.treasurecount++;
718 break;
719 case bo_chalice:
720 SD_PlaySound (BONUS2SND);
721 GivePoints (500);
722 gamestate.treasurecount++;
723 break;
724 case bo_bible:
725 SD_PlaySound (BONUS3SND);
726 GivePoints (1000);
727 gamestate.treasurecount++;
728 break;
729 case bo_crown:
730 SD_PlaySound (BONUS4SND);
731 GivePoints (5000);
732 gamestate.treasurecount++;
733 break;
734
735 case bo_clip:
736 if (gamestate.ammo == 99)
737 return;
738
739 SD_PlaySound (GETAMMOSND);
740 GiveAmmo (8);
741 break;
742 case bo_clip2:
743 if (gamestate.ammo == 99)
744 return;
745
746 SD_PlaySound (GETAMMOSND);
747 GiveAmmo (4);
748 break;
749
750#ifdef SPEAR
751 case bo_25clip:
752 if (gamestate.ammo == 99)
753 return;
754
755 SD_PlaySound (GETAMMOBOXSND);
756 GiveAmmo (25);
757 break;
758#endif
759
760 case bo_machinegun:
761 SD_PlaySound (GETMACHINESND);
762 GiveWeapon (wp_machinegun);
763 break;
764 case bo_chaingun:
765 SD_PlaySound (GETGATLINGSND);
766 facetimes = 38;
767 GiveWeapon (wp_chaingun);
768
769 if(viewsize != 21)
770 StatusDrawFace (GOTGATLINGPIC);
771 facecount = 0;
772 break;
773
774 case bo_fullheal:
775 SD_PlaySound (BONUS1UPSND);
776 HealSelf (99);
777 GiveAmmo (25);
778 GiveExtraMan ();
779 gamestate.treasurecount++;
780 break;
781
782 case bo_food:
783 if (gamestate.health == 100)
784 return;
785
786 SD_PlaySound (HEALTH1SND);
787 HealSelf (10);
788 break;
789
790 case bo_alpo:
791 if (gamestate.health == 100)
792 return;
793
794 SD_PlaySound (HEALTH1SND);
795 HealSelf (4);
796 break;
797
798 case bo_gibs:
799 if (gamestate.health >10)
800 return;
801
802 SD_PlaySound (SLURPIESND);
803 HealSelf (1);
804 break;
805
806#ifdef SPEAR
807 case bo_spear:
808 spearflag = true;
809 spearx = player->x;
810 speary = player->y;
811 spearangle = player->angle;
812 playstate = ex_completed;
813#endif
814 }
815
816 StartBonusFlash ();
817 check->shapenum = -1; // remove from list
818}
819
820/*
821===================
822=
823= TryMove
824=
825= returns true if move ok
826= debug: use pointers to optimize
827===================
828*/
829
830boolean TryMove (objtype *ob)
831{
832 int xl,yl,xh,yh,x,y;
833 objtype *check;
834 int32_t deltax,deltay;
835
836 xl = (ob->x-PLAYERSIZE) >>TILESHIFT;
837 yl = (ob->y-PLAYERSIZE) >>TILESHIFT;
838
839 xh = (ob->x+PLAYERSIZE) >>TILESHIFT;
840 yh = (ob->y+PLAYERSIZE) >>TILESHIFT;
841
842#define PUSHWALLMINDIST PLAYERSIZE
843
844 //
845 // check for solid walls
846 //
847 for (y=yl;y<=yh;y++)
848 {
849 for (x=xl;x<=xh;x++)
850 {
851 check = actorat[x][y];
852 if (check && !ISPOINTER(check))
853 {
854 if(tilemap[x][y]==64 && x==pwallx && y==pwally) // back of moving pushwall?
855 {
856 switch(pwalldir)
857 {
858 case di_north:
859 if(ob->y-PUSHWALLMINDIST<=(pwally<<TILESHIFT)+((63-pwallpos)<<10))
860 return false;
861 break;
862 case di_west:
863 if(ob->x-PUSHWALLMINDIST<=(pwallx<<TILESHIFT)+((63-pwallpos)<<10))
864 return false;
865 break;
866 case di_east:
867 if(ob->x+PUSHWALLMINDIST>=(pwallx<<TILESHIFT)+(pwallpos<<10))
868 return false;
869 break;
870 case di_south:
871 if(ob->y+PUSHWALLMINDIST>=(pwally<<TILESHIFT)+(pwallpos<<10))
872 return false;
873 break;
874 }
875 }
876 else return false;
877 }
878 }
879 }
880
881 //
882 // check for actors
883 //
884 if (yl>0)
885 yl--;
886 if (yh<MAPSIZE-1)
887 yh++;
888 if (xl>0)
889 xl--;
890 if (xh<MAPSIZE-1)
891 xh++;
892
893 for (y=yl;y<=yh;y++)
894 {
895 for (x=xl;x<=xh;x++)
896 {
897 check = actorat[x][y];
898 if (ISPOINTER(check) && check != player && (check->flags & FL_SHOOTABLE) )
899 {
900 deltax = ob->x - check->x;
901 if (deltax < -MINACTORDIST || deltax > MINACTORDIST)
902 continue;
903 deltay = ob->y - check->y;
904 if (deltay < -MINACTORDIST || deltay > MINACTORDIST)
905 continue;
906
907 return false;
908 }
909 }
910 }
911
912 return true;
913}
914
915
916/*
917===================
918=
919= ClipMove
920=
921===================
922*/
923
924void ClipMove (objtype *ob, int32_t xmove, int32_t ymove)
925{
926 int32_t basex,basey;
927
928 basex = ob->x;
929 basey = ob->y;
930
931 ob->x = basex+xmove;
932 ob->y = basey+ymove;
933 if (TryMove (ob))
934 return;
935
936#ifndef REMDEBUG
937 if (noclip && ob->x > 2*TILEGLOBAL && ob->y > 2*TILEGLOBAL
938 && ob->x < (((int32_t)(mapwidth-1))<<TILESHIFT)
939 && ob->y < (((int32_t)(mapheight-1))<<TILESHIFT) )
940 return; // walk through walls
941#endif
942
943 if (!SD_SoundPlaying())
944 SD_PlaySound (HITWALLSND);
945
946 ob->x = basex+xmove;
947 ob->y = basey;
948 if (TryMove (ob))
949 return;
950
951 ob->x = basex;
952 ob->y = basey+ymove;
953 if (TryMove (ob))
954 return;
955
956 ob->x = basex;
957 ob->y = basey;
958}
959
960//==========================================================================
961
962/*
963===================
964=
965= VictoryTile
966=
967===================
968*/
969
970void VictoryTile (void)
971{
972#ifndef SPEAR
973 SpawnBJVictory ();
974#endif
975
976 gamestate.victoryflag = true;
977}
978
979/*
980===================
981=
982= Thrust
983=
984===================
985*/
986
987// For player movement in demos exactly as in the original Wolf3D v1.4 source code
988static fixed FixedByFracOrig(fixed a, fixed b)
989{
990 int sign = 0;
991 if(b == 65536) b = 65535;
992 else if(b == -65536) b = 65535, sign = 1;
993 else if(b < 0) b = (-b), sign = 1;
994
995 if(a < 0)
996 {
997 a = -a;
998 sign = !sign;
999 }
1000 fixed res = (fixed)(((int64_t) a * b) >> 16);
1001 if(sign)
1002 res = -res;
1003 return res;
1004}
1005
1006void Thrust (int angle, int32_t speed)
1007{
1008 int32_t xmove,ymove;
1009 unsigned offset;
1010
1011
1012 //
1013 // ZERO FUNNY COUNTER IF MOVED!
1014 //
1015#ifdef SPEAR
1016 if (speed)
1017 funnyticount = 0;
1018#endif
1019
1020 thrustspeed += speed;
1021 //
1022 // moving bounds speed
1023 //
1024 if (speed >= MINDIST*2)
1025 speed = MINDIST*2-1;
1026
1027 xmove = DEMOCHOOSE_ORIG_SDL(
1028 FixedByFracOrig(speed, costable[angle]),
1029 FixedMul(speed,costable[angle]));
1030 ymove = DEMOCHOOSE_ORIG_SDL(
1031 -FixedByFracOrig(speed, sintable[angle]),
1032 -FixedMul(speed,sintable[angle]));
1033
1034 ClipMove(player,xmove,ymove);
1035
1036 player->tilex = (short)(player->x >> TILESHIFT); // scale to tile values
1037 player->tiley = (short)(player->y >> TILESHIFT);
1038
1039 offset = (player->tiley<<mapshift)+player->tilex;
1040 player->areanumber = *(mapsegs[0] + offset) -AREATILE;
1041
1042 if (*(mapsegs[1] + offset) == EXITTILE)
1043 VictoryTile ();
1044}
1045
1046
1047/*
1048=============================================================================
1049
1050 ACTIONS
1051
1052=============================================================================
1053*/
1054
1055
1056/*
1057===============
1058=
1059= Cmd_Fire
1060=
1061===============
1062*/
1063
1064void Cmd_Fire (void)
1065{
1066 buttonheld[bt_attack] = true;
1067
1068 gamestate.weaponframe = 0;
1069
1070 player->state = &s_attack;
1071
1072 gamestate.attackframe = 0;
1073 gamestate.attackcount =
1074 attackinfo[gamestate.weapon][gamestate.attackframe].tics;
1075 gamestate.weaponframe =
1076 attackinfo[gamestate.weapon][gamestate.attackframe].frame;
1077}
1078
1079//===========================================================================
1080
1081/*
1082===============
1083=
1084= Cmd_Use
1085=
1086===============
1087*/
1088
1089void Cmd_Use (void)
1090{
1091 int checkx,checky,doornum,dir;
1092 boolean elevatorok;
1093
1094 //
1095 // find which cardinal direction the player is facing
1096 //
1097 if (player->angle < ANGLES/8 || player->angle > 7*ANGLES/8)
1098 {
1099 checkx = player->tilex + 1;
1100 checky = player->tiley;
1101 dir = di_east;
1102 elevatorok = true;
1103 }
1104 else if (player->angle < 3*ANGLES/8)
1105 {
1106 checkx = player->tilex;
1107 checky = player->tiley-1;
1108 dir = di_north;
1109 elevatorok = false;
1110 }
1111 else if (player->angle < 5*ANGLES/8)
1112 {
1113 checkx = player->tilex - 1;
1114 checky = player->tiley;
1115 dir = di_west;
1116 elevatorok = true;
1117 }
1118 else
1119 {
1120 checkx = player->tilex;
1121 checky = player->tiley + 1;
1122 dir = di_south;
1123 elevatorok = false;
1124 }
1125
1126 doornum = tilemap[checkx][checky];
1127 if (*(mapsegs[1]+(checky<<mapshift)+checkx) == PUSHABLETILE)
1128 {
1129 //
1130 // pushable wall
1131 //
1132
1133 buttonheld[bt_use] = true;
1134 buttonstate[bt_attack] = false;
1135
1136 PushWall (checkx,checky,dir);
1137 return;
1138 }
1139 if (!buttonheld[bt_use] && doornum == ELEVATORTILE && elevatorok)
1140 {
1141 //
1142 // use elevator
1143 //
1144 buttonheld[bt_use] = true;
1145 buttonstate[bt_attack] = false;
1146
1147 tilemap[checkx][checky]++; // flip switch
1148 if (*(mapsegs[0]+(player->tiley<<mapshift)+player->tilex) == ALTELEVATORTILE)
1149 playstate = ex_secretlevel;
1150 else
1151 playstate = ex_completed;
1152 SD_PlaySound (LEVELDONESND);
1153 SD_WaitSoundDone();
1154 }
1155 else if (!buttonheld[bt_use] && doornum & 0x80)
1156 {
1157 buttonheld[bt_use] = true;
1158 buttonstate[bt_attack] = false;
1159 OperateDoor (doornum & ~0x80);
1160 }
1161 else
1162 SD_PlaySound (DONOTHINGSND);
1163}
1164
1165/*
1166=============================================================================
1167
1168 PLAYER CONTROL
1169
1170=============================================================================
1171*/
1172
1173
1174
1175/*
1176===============
1177=
1178= SpawnPlayer
1179=
1180===============
1181*/
1182
1183void SpawnPlayer (int tilex, int tiley, int dir)
1184{
1185 player->obclass = playerobj;
1186 player->active = ac_yes;
1187 player->tilex = tilex;
1188 player->tiley = tiley;
1189 player->areanumber = (byte) *(mapsegs[0]+(player->tiley<<mapshift)+player->tilex);
1190 player->x = ((int32_t)tilex<<TILESHIFT)+TILEGLOBAL/2;
1191 player->y = ((int32_t)tiley<<TILESHIFT)+TILEGLOBAL/2;
1192 player->state = &s_player;
1193 player->angle = (1-dir)*90;
1194 if (player->angle<0)
1195 player->angle += ANGLES;
1196 player->flags = FL_NEVERMARK;
1197 Thrust (0,0); // set some variables
1198
1199 InitAreas ();
1200}
1201
1202
1203//===========================================================================
1204
1205/*
1206===============
1207=
1208= T_KnifeAttack
1209=
1210= Update player hands, and try to do damage when the proper frame is reached
1211=
1212===============
1213*/
1214
1215void KnifeAttack (objtype *ob)
1216{
1217 objtype *check,*closest;
1218 int32_t dist;
1219
1220 SD_PlaySound (ATKKNIFESND);
1221 // actually fire
1222 dist = 0x7fffffff;
1223 closest = NULL;
1224 for (check=ob->next; check; check=check->next)
1225 {
1226 if ( (check->flags & FL_SHOOTABLE) && (check->flags & FL_VISABLE)
1227 && abs(check->viewx-centerx) < shootdelta)
1228 {
1229 if (check->transx < dist)
1230 {
1231 dist = check->transx;
1232 closest = check;
1233 }
1234 }
1235 }
1236
1237 if (!closest || dist > 0x18000l)
1238 {
1239 // missed
1240 return;
1241 }
1242
1243 // hit something
1244 DamageActor (closest,US_RndT() >> 4);
1245}
1246
1247
1248
1249void GunAttack (objtype *ob)
1250{
1251 objtype *check,*closest,*oldclosest;
1252 int damage;
1253 int dx,dy,dist;
1254 int32_t viewdist;
1255
1256 switch (gamestate.weapon)
1257 {
1258 case wp_pistol:
1259 SD_PlaySound (ATKPISTOLSND);
1260 break;
1261 case wp_machinegun:
1262 SD_PlaySound (ATKMACHINEGUNSND);
1263 break;
1264 case wp_chaingun:
1265 SD_PlaySound (ATKGATLINGSND);
1266 break;
1267 }
1268
1269 madenoise = true;
1270
1271 //
1272 // find potential targets
1273 //
1274 viewdist = 0x7fffffffl;
1275 closest = NULL;
1276
1277 while (1)
1278 {
1279 oldclosest = closest;
1280
1281 for (check=ob->next ; check ; check=check->next)
1282 {
1283 if ((check->flags & FL_SHOOTABLE) && (check->flags & FL_VISABLE)
1284 && abs(check->viewx-centerx) < shootdelta)
1285 {
1286 if (check->transx < viewdist)
1287 {
1288 viewdist = check->transx;
1289 closest = check;
1290 }
1291 }
1292 }
1293
1294 if (closest == oldclosest)
1295 return; // no more targets, all missed
1296
1297 //
1298 // trace a line from player to enemey
1299 //
1300 if (CheckLine(closest))
1301 break;
1302 }
1303
1304 //
1305 // hit something
1306 //
1307 dx = ABS(closest->tilex - player->tilex);
1308 dy = ABS(closest->tiley - player->tiley);
1309 dist = dx>dy ? dx:dy;
1310 if (dist<2)
1311 damage = US_RndT() / 4;
1312 else if (dist<4)
1313 damage = US_RndT() / 6;
1314 else
1315 {
1316 if ( (US_RndT() / 12) < dist) // missed
1317 return;
1318 damage = US_RndT() / 6;
1319 }
1320 DamageActor (closest,damage);
1321}
1322
1323//===========================================================================
1324
1325/*
1326===============
1327=
1328= VictorySpin
1329=
1330===============
1331*/
1332
1333void VictorySpin (void)
1334{
1335 int32_t desty;
1336
1337 if (player->angle > 270)
1338 {
1339 player->angle -= (short)(tics * 3);
1340 if (player->angle < 270)
1341 player->angle = 270;
1342 }
1343 else if (player->angle < 270)
1344 {
1345 player->angle += (short)(tics * 3);
1346 if (player->angle > 270)
1347 player->angle = 270;
1348 }
1349
1350 desty = (((int32_t)player->tiley-5)<<TILESHIFT)-0x3000;
1351
1352 if (player->y > desty)
1353 {
1354 player->y -= tics*4096;
1355 if (player->y < desty)
1356 player->y = desty;
1357 }
1358}
1359
1360
1361//===========================================================================
1362
1363/*
1364===============
1365=
1366= T_Attack
1367=
1368===============
1369*/
1370
1371void T_Attack (objtype *ob)
1372{
1373 struct atkinf *cur;
1374
1375 UpdateFace ();
1376
1377 if (gamestate.victoryflag) // watching the BJ actor
1378 {
1379 VictorySpin ();
1380 return;
1381 }
1382
1383 if ( buttonstate[bt_use] && !buttonheld[bt_use] )
1384 buttonstate[bt_use] = false;
1385
1386 if ( buttonstate[bt_attack] && !buttonheld[bt_attack])
1387 buttonstate[bt_attack] = false;
1388
1389 ControlMovement (ob);
1390 if (gamestate.victoryflag) // watching the BJ actor
1391 return;
1392
1393 plux = (word) (player->x >> UNSIGNEDSHIFT); // scale to fit in unsigned
1394 pluy = (word) (player->y >> UNSIGNEDSHIFT);
1395 player->tilex = (short)(player->x >> TILESHIFT); // scale to tile values
1396 player->tiley = (short)(player->y >> TILESHIFT);
1397
1398 //
1399 // change frame and fire
1400 //
1401 gamestate.attackcount -= (short) tics;
1402 while (gamestate.attackcount <= 0)
1403 {
1404 cur = &attackinfo[gamestate.weapon][gamestate.attackframe];
1405 switch (cur->attack)
1406 {
1407 case -1:
1408 ob->state = &s_player;
1409 if (!gamestate.ammo)
1410 {
1411 gamestate.weapon = wp_knife;
1412 DrawWeapon ();
1413 }
1414 else
1415 {
1416 if (gamestate.weapon != gamestate.chosenweapon)
1417 {
1418 gamestate.weapon = gamestate.chosenweapon;
1419 DrawWeapon ();
1420 }
1421 }
1422 gamestate.attackframe = gamestate.weaponframe = 0;
1423 return;
1424
1425 case 4:
1426 if (!gamestate.ammo)
1427 break;
1428 if (buttonstate[bt_attack])
1429 gamestate.attackframe -= 2;
1430 case 1:
1431 if (!gamestate.ammo)
1432 { // can only happen with chain gun
1433 gamestate.attackframe++;
1434 break;
1435 }
1436 GunAttack (ob);
1437 if (!ammocheat)
1438 gamestate.ammo--;
1439 DrawAmmo ();
1440 break;
1441
1442 case 2:
1443 KnifeAttack (ob);
1444 break;
1445
1446 case 3:
1447 if (gamestate.ammo && buttonstate[bt_attack])
1448 gamestate.attackframe -= 2;
1449 break;
1450 }
1451
1452 gamestate.attackcount += cur->tics;
1453 gamestate.attackframe++;
1454 gamestate.weaponframe =
1455 attackinfo[gamestate.weapon][gamestate.attackframe].frame;
1456 }
1457}
1458
1459
1460
1461//===========================================================================
1462
1463/*
1464===============
1465=
1466= T_Player
1467=
1468===============
1469*/
1470
1471static int last_use = 0;
1472
1473void T_Player (objtype *ob)
1474{
1475 if (gamestate.victoryflag) // watching the BJ actor
1476 {
1477 VictorySpin ();
1478 return;
1479 }
1480
1481 UpdateFace ();
1482 CheckWeaponChange ();
1483
1484 // weird
1485 if( buttonstate[bt_attack] )
1486 Cmd_Use ();
1487
1488 if ( buttonstate[bt_attack] && !buttonheld[bt_attack])
1489 Cmd_Fire ();
1490
1491 ControlMovement (ob);
1492 if (gamestate.victoryflag) // watching the BJ actor
1493 return;
1494
1495 plux = (word) (player->x >> UNSIGNEDSHIFT); // scale to fit in unsigned
1496 pluy = (word) (player->y >> UNSIGNEDSHIFT);
1497 player->tilex = (short)(player->x >> TILESHIFT); // scale to tile values
1498 player->tiley = (short)(player->y >> TILESHIFT);
1499}
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 @@
1#include "version.h"
2
3#if defined(USE_STARSKY) || defined(USE_RAIN) || defined(USE_SNOW)
4
5#include "wl_def.h"
6
7#if defined(USE_RAIN) || defined(USE_SNOW)
8 uint32_t rainpos = 0;
9#endif
10
11typedef struct {
12 int32_t x, y, z;
13} point3d_t;
14
15#define MAXPOINTS 400
16point3d_t points[MAXPOINTS];
17
18byte moon[100]={
19 0, 0, 27, 18, 15, 16, 19, 29, 0, 0,
20 0, 22, 16, 15, 15, 16, 16, 18, 24, 0,
21 27, 17, 15, 17, 16, 16, 17, 17, 18, 29,
22 18, 15, 15, 15, 16, 16, 17, 17, 18, 20,
23 16, 15, 15, 16, 16, 17, 17, 18, 19, 21,
24 16, 15, 17, 20, 18, 17, 18, 18, 20, 22,
25 19, 16, 18, 19, 17, 17, 18, 19, 22, 24,
26 28, 19, 17, 17, 17, 18, 19, 21, 25, 31,
27 0, 23, 18, 19, 18, 20, 22, 24, 28, 0,
28 0, 0, 28, 21, 20, 22, 28, 30, 0, 0 };
29
30void Init3DPoints()
31{
32 int hvheight = viewheight >> 1;
33 for(int i = 0; i < MAXPOINTS; i++)
34 {
35 point3d_t *pt = &points[i];
36 pt->x = 16384 - (rand() & 32767);
37 pt->z = 16384 - (rand() & 32767);
38 float len = sqrt((float)pt->x * pt->x + (float)pt->z * pt->z);
39 int j=50;
40 do
41 {
42 pt->y = 1024 + (rand() & 8191);
43 j--;
44 }
45 while(j > 0 && (float)pt->y * 256.F / len >= hvheight);
46 }
47}
48
49#endif
50
51#ifdef USE_STARSKY
52
53void DrawStarSky(byte *vbuf, uint32_t vbufPitch)
54{
55 int hvheight = viewheight >> 1;
56 int hvwidth = viewwidth >> 1;
57
58 byte *ptr = vbuf;
59 int i;
60 for(i = 0; i < hvheight; i++, ptr += vbufPitch)
61 memset(ptr, 0, viewwidth);
62
63 for(i = 0; i < MAXPOINTS; i++)
64 {
65 point3d_t *pt = &points[i];
66 int32_t x = pt->x * viewcos + pt->z * viewsin;
67 int32_t y = pt->y << 16;
68 int32_t z = (pt->z * viewcos - pt->x * viewsin) >> 8;
69 if(z <= 0) continue;
70 int shade = z >> 18;
71 if(shade > 15) continue;
72 int32_t xx = x / z + hvwidth;
73 int32_t yy = hvheight - y / z;
74 if(xx >= 0 && xx < viewwidth && yy >= 0 && yy < hvheight)
75 vbuf[yy * vbufPitch + xx] = shade + 15;
76 }
77
78 int32_t x = 16384 * viewcos + 16384 * viewsin;
79 int32_t z = (16384 * viewcos - 16384 * viewsin) >> 8;
80 if(z <= 0) return;
81 int32_t xx = x / z + hvwidth;
82 int32_t yy = hvheight - ((hvheight - (hvheight >> 3)) << 22) / z;
83 if(xx > -10 && xx < viewwidth)
84 {
85 int stopx = 10, starty = 0, stopy = 10;
86 i = 0;
87 if(xx < 0) i = -xx;
88 if(xx > viewwidth - 11) stopx = viewwidth - xx;
89 if(yy < 0) startj = -yy;
90 if(yy > viewheight - 11) stopy = viewheight - yy;
91 for(; i < stopx; i++)
92 for(int j = starty; j < stopy; j++)
93 vbuf[(yy + j) * vbufPitch + xx + i] = moon[j * 10 + i];
94 }
95}
96
97#endif
98
99#ifdef USE_RAIN
100
101void DrawRain(byte *vbuf, uint32_t vbufPitch)
102{
103#if defined(USE_FLOORCEILINGTEX) && defined(FIXRAINSNOWLEAKS)
104 fixed dist; // distance to row projection
105 fixed tex_step; // global step per one screen pixel
106 fixed gu, gv, floorx, floory; // global texture coordinates
107#endif
108
109 fixed px = (player->y + FixedMul(0x7900, viewsin)) >> 6;
110 fixed pz = (player->x - FixedMul(0x7900, viewcos)) >> 6;
111 int32_t ax, az, x, y, z, xx, yy, height, actheight;
112 int shade;
113 int hvheight = viewheight >> 1;
114 int hvwidth = viewwidth >> 1;
115
116 rainpos -= tics * 900;
117 for(int i = 0; i < MAXPOINTS; i++)
118 {
119 point3d_t *pt = &points[i];
120 ax = pt->x + px;
121 ax = 0x1fff - (ax & 0x3fff);
122 az = pt->z + pz;
123 az = 0x1fff - (az & 0x3fff);
124 x = ax * viewcos + az * viewsin;
125 y = -(heightnumerator << 7) + ((((pt->y << 6) + rainpos) & 0x0ffff) << 11);
126 z = (az * viewcos - ax * viewsin) >> 8;
127 if(z <= 0) continue;
128 shade = z >> 17;
129 if(shade > 13) continue;
130 xx = x / z + hvwidth;
131 if(xx < 0 || xx >= viewwidth) continue;
132 actheight = y / z;
133 yy = hvheight - actheight;
134 height = (heightnumerator << 10) / z;
135 if(actheight < 0) actheight = -actheight;
136 if(actheight < (wallheight[xx] >> 3) && height < wallheight[xx]) continue;
137
138 if(xx >= 0 && xx < viewwidth && yy > 0 && yy < viewheight)
139 {
140#if defined(USE_FLOORCEILINGTEX) && defined(FIXRAINSNOWLEAKS)
141 // Find the rain's tile coordinate
142 // NOTE: This sometimes goes over the map edges.
143 dist = ((heightnumerator / ((height >> 3) + 1)) << 5);
144 gu = viewx + FixedMul(dist, viewcos);
145 gv = -viewy + FixedMul(dist, viewsin);
146 floorx = ( gu >> TILESHIFT ) & 63;
147 floory = (-(gv >> TILESHIFT) - 1) & 63;
148
149 // Is there a ceiling tile?
150 if(MAPSPOT(floorx, floory, 2) >> 8) continue;
151#endif
152
153 vbuf[yy * vbufPitch + xx] = shade+15;
154 vbuf[(yy - 1) * vbufPitch + xx] = shade+16;
155 if(yy > 2)
156 vbuf[(yy - 2) * vbufPitch + xx] = shade+17;
157 }
158 }
159}
160
161#endif
162
163#ifdef USE_SNOW
164
165void DrawSnow(byte *vbuf, uint32_t vbufPitch)
166{
167#if defined(USE_FLOORCEILINGTEX) && defined(FIXRAINSNOWLEAKS)
168 fixed dist; // distance to row projection
169 fixed tex_step; // global step per one screen pixel
170 fixed gu, gv, floorx, floory; // global texture coordinates
171#endif
172
173 fixed px = (player->y + FixedMul(0x7900, viewsin)) >> 6;
174 fixed pz = (player->x - FixedMul(0x7900, viewcos)) >> 6;
175 int32_t ax, az, x, y, z, xx, yy, height, actheight;
176 int shade;
177 int hvheight = viewheight >> 1;
178 int hvwidth = viewwidth >> 1;
179
180 rainpos -= tics * 256;
181 for(int i = 0; i < MAXPOINTS; i++)
182 {
183 point3d_t *pt = &points[i];
184 ax = pt->x + px;
185 ax = 0x1fff - (ax & 0x3fff);
186 az = pt->z + pz;
187 az = 0x1fff - (az & 0x3fff);
188 x = ax * viewcos + az * viewsin;
189 y = -(heightnumerator << 7) + ((((pt->y << 6) + rainpos) & 0x0ffff) << 11);
190 z = (az * viewcos - ax * viewsin) >> 8;
191 if(z <= 0) continue;
192 shade = z >> 17;
193 if(shade > 13) continue;
194 xx = x / z + hvwidth;
195 if(xx < 0 || xx >= viewwidth) continue;
196 actheight = y / z;
197 yy = hvheight - actheight;
198 height = (heightnumerator << 10) / z;
199 if(actheight < 0) actheight = -actheight;
200 if(actheight < (wallheight[xx] >> 3) && height < wallheight[xx]) continue;
201 if(xx > 0 && xx < viewwidth && yy > 0 && yy < viewheight)
202 {
203#if defined(USE_FLOORCEILINGTEX) && defined(FIXRAINSNOWLEAKS)
204 // Find the snow's tile coordinate
205 // NOTE: This sometimes goes over the map edges.
206 dist = ((heightnumerator / ((height >> 3) + 1)) << 5);
207 gu = viewx + FixedMul(dist, viewcos);
208 gv = -viewy + FixedMul(dist, viewsin);
209 floorx = ( gu >> TILESHIFT ) & 63;
210 floory = (-(gv >> TILESHIFT) - 1) & 63;
211
212 // Is there a ceiling tile?
213 if(MAPSPOT(floorx, floory, 2) >> 8) continue;
214#endif
215
216 if(shade < 10)
217 {
218 vbuf[yy * vbufPitch + xx] = shade+17;
219 vbuf[yy * vbufPitch + xx - 1] = shade+16;
220 vbuf[(yy - 1) * vbufPitch + xx] = shade+16;
221 vbuf[(yy - 1) * vbufPitch + xx - 1] = shade+15;
222 }
223 else
224 vbuf[yy * vbufPitch + xx] = shade+15;
225 }
226 }
227}
228
229#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 @@
1#ifndef _WL_ATMOS_H_
2#define _WL_ATMOS_H_
3
4#if defined(USE_STARSKY) || defined(USE_RAIN) || defined(USE_SNOW)
5 void Init3DPoints();
6#endif
7
8#ifdef USE_STARSKY
9 void DrawStarSky(byte *vbuf, uint32_t vbufPitch);
10#endif
11
12#ifdef USE_RAIN
13 void DrawRain(byte *vbuf, uint32_t vbufPitch);
14#endif
15
16#ifdef USE_SNOW
17 void DrawSnow(byte *vbuf, uint32_t vbufPitch);
18#endif
19
20#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 @@
1#include "version.h"
2
3#ifdef USE_CLOUDSKY
4
5#include "wl_def.h"
6#include "wl_cloudsky.h"
7
8// Each colormap defines a number of colors which should be mapped from
9// the skytable. The according colormapentry_t array defines how these colors should
10// be mapped to the wolfenstein palette. The first int of each entry defines
11// how many colors are grouped to this entry and the absolute value of the
12// second int sets the starting palette index for this pair. If this value is
13// negative the index will be decremented for every color, if it's positive
14// it will be incremented.
15//
16// Example colormap:
17// colormapentry_t colmapents_1[] = { { 6, -10 }, { 2, 40 } };
18// colormap_t colorMaps[] = {
19// { 8, colmapents_1 }
20// };
21//
22// The colormap 0 consists of 8 colors. The first color group consists of 6
23// colors and starts descending at palette index 10: 10, 9, 8, 7, 6, 5
24// The second color group consists of 2 colors and starts ascending at
25// index 40: 40, 41
26// There's no other color group because all colors of this colormap are
27// already used (6+2=8)
28//
29// Warning: Always make sure that the sum of the amount of the colors in all
30// color groups is the number of colors used for your colormap!
31
32colormapentry_t colmapents_1[] = { { 16, -31 }, { 16, 136 } };
33colormapentry_t colmapents_2[] = { { 16, -31 } };
34
35colormap_t colorMaps[] = {
36 { 32, colmapents_1 },
37 { 16, colmapents_2 }
38};
39
40const int numColorMaps = lengthof(colorMaps);
41
42// The sky definitions which can be selected as defined by GetCloudSkyDefID() in wl_def.h
43// You can use <TAB>+Z in debug mode to find out suitable values for seed and colorMapIndex
44// Each entry consists of seed, speed, angle and colorMapIndex
45cloudsky_t cloudSkys[] = {
46 { 626, 800, 20, 0 },
47 { 1234, 650, 60, 1 },
48 { 0, 700, 120, 0 },
49 { 0, 0, 0, 0 },
50 { 11243, 750, 310, 0 },
51 { 32141, 750, 87, 0 },
52 { 12124, 750, 64, 0 },
53 { 55543, 500, 240, 0 },
54 { 65535, 200, 54, 1 },
55 { 4, 1200, 290, 0 },
56};
57
58byte skyc[65536L];
59
60long cloudx = 0, cloudy = 0;
61cloudsky_t *curSky = NULL;
62
63#ifdef USE_FEATUREFLAGS
64
65// The lower left tile of every map determines the used cloud sky definition from cloudSkys.
66static int GetCloudSkyDefID()
67{
68 int skyID = ffDataBottomLeft;
69 assert(skyID >= 0 && skyID < lengthof(cloudSkys));
70 return skyID;
71}
72
73#else
74
75static int GetCloudSkyDefID()
76{
77 int skyID;
78 switch(gamestate.episode * 10 + mapon)
79 {
80 case 0: skyID = 0; break;
81 case 1: skyID = 1; break;
82 case 2: skyID = 2; break;
83 case 3: skyID = 3; break;
84 case 4: skyID = 4; break;
85 case 5: skyID = 5; break;
86 case 6: skyID = 6; break;
87 case 7: skyID = 7; break;
88 case 8: skyID = 8; break;
89 case 9: skyID = 9; break;
90 default: skyID = 9; break;
91 }
92 assert(skyID >= 0 && skyID < lengthof(cloudSkys));
93 return skyID;
94}
95
96#endif
97
98void SplitS(unsigned size,unsigned x1,unsigned y1,unsigned x2,unsigned y2)
99{
100 if(size==1) return;
101 if(!skyc[((x1+size/2)*256+y1)])
102 {
103 skyc[((x1+size/2)*256+y1)]=(byte)(((int)skyc[(x1*256+y1)]
104 +(int)skyc[((x2&0xff)*256+y1)])/2)+rand()%(size*2)-size;
105 if(!skyc[((x1+size/2)*256+y1)]) skyc[((x1+size/2)*256+y1)]=1;
106 }
107 if(!skyc[((x1+size/2)*256+(y2&0xff))])
108 {
109 skyc[((x1+size/2)*256+(y2&0xff))]=(byte)(((int)skyc[(x1*256+(y2&0xff))]
110 +(int)skyc[((x2&0xff)*256+(y2&0xff))])/2)+rand()%(size*2)-size;
111 if(!skyc[((x1+size/2)*256+(y2&0xff))])
112 skyc[((x1+size/2)*256+(y2&0xff))]=1;
113 }
114 if(!skyc[(x1*256+y1+size/2)])
115 {
116 skyc[(x1*256+y1+size/2)]=(byte)(((int)skyc[(x1*256+y1)]
117 +(int)skyc[(x1*256+(y2&0xff))])/2)+rand()%(size*2)-size;
118 if(!skyc[(x1*256+y1+size/2)]) skyc[(x1*256+y1+size/2)]=1;
119 }
120 if(!skyc[((x2&0xff)*256+y1+size/2)])
121 {
122 skyc[((x2&0xff)*256+y1+size/2)]=(byte)(((int)skyc[((x2&0xff)*256+y1)]
123 +(int)skyc[((x2&0xff)*256+(y2&0xff))])/2)+rand()%(size*2)-size;
124 if(!skyc[((x2&0xff)*256+y1+size/2)]) skyc[((x2&0xff)*256+y1+size/2)]=1;
125 }
126
127 skyc[((x1+size/2)*256+y1+size/2)]=(byte)(((int)skyc[(x1*256+y1)]
128 +(int)skyc[((x2&0xff)*256+y1)]+(int)skyc[(x1*256+(y2&0xff))]
129 +(int)skyc[((x2&0xff)*256+(y2&0xff))])/4)+rand()%(size*2)-size;
130
131 SplitS(size/2,x1,y1+size/2,x1+size/2,y2);
132 SplitS(size/2,x1+size/2,y1,x2,y1+size/2);
133 SplitS(size/2,x1+size/2,y1+size/2,x2,y2);
134 SplitS(size/2,x1,y1,x1+size/2,y1+size/2);
135}
136
137void InitSky()
138{
139 unsigned cloudskyid = GetCloudSkyDefID();
140 if(cloudskyid >= lengthof(cloudSkys))
141 Quit("Illegal cloud sky id: %u", cloudskyid);
142 curSky = &cloudSkys[cloudskyid];
143
144 memset(skyc, 0, sizeof(skyc));
145 // funny water texture if used instead of memset ;D
146 // for(int i = 0; i < 65536; i++)
147 // skyc[i] = rand() % 32 * 8;
148
149 srand(curSky->seed);
150 skyc[0] = rand() % 256;
151 SplitS(256, 0, 0, 256, 256);
152
153 // Smooth the clouds a bit
154 for(int k = 0; k < 2; k++)
155 {
156 for(int i = 0; i < 256; i++)
157 {
158 for(int j = 0; j < 256; j++)
159 {
160 int32_t val = -skyc[j * 256 + i];
161 for(int m = 0; m < 3; m++)
162 {
163 for(int n = 0; n < 3; n++)
164 {
165 val += skyc[((j + n - 1) & 0xff) * 256 + ((i + m - 1) & 0xff)];
166 }
167 }
168 skyc[j * 256 + i] = (byte)(val >> 3);
169 }
170 }
171 }
172
173 // the following commented line could be useful, if you're trying to
174 // create a new color map. This will display your current color map
175 // in one (of course repeating) stripe of the sky
176
177 // for(int i = 0; i < 256; i++)
178 // skyc[i] = skyc[i + 256] = skyc[i + 512] = i;
179
180 if(curSky->colorMapIndex >= lengthof(colorMaps))
181 Quit("Illegal colorMapIndex for cloud sky def %u: %u", cloudskyid, curSky->colorMapIndex);
182
183 colormap_t *curMap = &colorMaps[curSky->colorMapIndex];
184 int numColors = curMap->numColors;
185 byte colormap[256];
186 colormapentry_t *curEntry = curMap->entries;
187 for(int calcedCols = 0; calcedCols < numColors; curEntry++)
188 {
189 if(curEntry->startAndDir < 0)
190 {
191 for(int i = 0, ind = -curEntry->startAndDir; i < curEntry->length; i++, ind--)
192 colormap[calcedCols++] = ind;
193 }
194 else
195 {
196 for(int i = 0, ind = curEntry->startAndDir; i < curEntry->length; i++, ind++)
197 colormap[calcedCols++] = ind;
198 }
199 }
200
201 for(int i = 0; i < 256; i++)
202 {
203 for(int j = 0; j < 256; j++)
204 {
205 skyc[i * 256 + j] = colormap[skyc[i * 256 + j] * numColors / 256];
206 }
207 }
208}
209
210// Based on Textured Floor and Ceiling by DarkOne
211void DrawClouds(byte *vbuf, unsigned vbufPitch, int min_wallheight)
212{
213 // Move clouds
214 fixed moveDist = tics * curSky->speed;
215 cloudx += FixedMul(moveDist,sintable[curSky->angle]);
216 cloudy -= FixedMul(moveDist,costable[curSky->angle]);
217
218 // Draw them
219 int y0, halfheight;
220 unsigned top_offset0;
221 fixed dist; // distance to row projection
222 fixed tex_step; // global step per one screen pixel
223 fixed gu, gv, du, dv; // global texture coordinates
224 int u, v; // local texture coordinates
225
226 // ------ * prepare * --------
227 halfheight = viewheight >> 1;
228 y0 = min_wallheight >> 3; // starting y value
229 if(y0 > halfheight)
230 return; // view obscured by walls
231 if(!y0) y0 = 1; // don't let division by zero
232 top_offset0 = vbufPitch * (halfheight - y0 - 1);
233
234 // draw horizontal lines
235 for(int y = y0, top_offset = top_offset0; y < halfheight; y++, top_offset -= vbufPitch)
236 {
237 dist = (heightnumerator / y) << 8;
238 gu = viewx + FixedMul(dist, viewcos) + cloudx;
239 gv = -viewy + FixedMul(dist, viewsin) + cloudy;
240 tex_step = (dist << 8) / viewwidth / 175;
241 du = FixedMul(tex_step, viewsin);
242 dv = -FixedMul(tex_step, viewcos);
243 gu -= (viewwidth >> 1)*du;
244 gv -= (viewwidth >> 1)*dv; // starting point (leftmost)
245 for(int x = 0, top_add = top_offset; x < viewwidth; x++, top_add++)
246 {
247 if(wallheight[x] >> 3 <= y)
248 {
249 u = (gu >> 13) & 255;
250 v = (gv >> 13) & 255;
251 vbuf[top_add] = skyc[((255 - u) << 8) + 255 - v];
252 }
253 gu += du;
254 gv += dv;
255 }
256 }
257}
258
259#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 @@
1#if defined(USE_CLOUDSKY) && !defined(_WL_CLOUDSKY_H_)
2#define _WL_CLOUDSKY_H_
3
4typedef struct
5{
6 int length;
7 int startAndDir;
8} colormapentry_t;
9
10typedef struct
11{
12 int numColors;
13 colormapentry_t *entries;
14} colormap_t;
15
16typedef struct
17{
18 // The seed defines the look of the sky and every value (0-4294967295)
19 // describes an unique sky. You can play around with these inside the game
20 // when pressing <TAB>+Z in debug mode. There you'll be able to change the
21 // active seed to find out a value, which is suitable for your needs.
22 uint32_t seed;
23
24 // The speed defines how fast the clouds will move (0-65535)
25 uint32_t speed;
26
27 // The angle defines the move direction (0-359)
28 uint32_t angle;
29
30 // An index selecting the color map to be used for this sky definition.
31 // This value can also be chosen with <TAB>+Z
32 uint32_t colorMapIndex;
33} cloudsky_t;
34
35extern cloudsky_t *curSky;
36extern colormap_t colorMaps[];
37extern const int numColorMaps;
38
39void InitSky();
40void DrawClouds(byte *vbuf, unsigned vbufPitch, int min_wallheight);
41
42#ifndef USE_FEATUREFLAGS
43int GetCloudSkyDefID();
44#endif
45
46#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 @@
1// WL_DEBUG.C
2
3#include "wl_def.h"
4#pragma hdrstop
5
6#ifdef USE_CLOUDSKY
7#include "wl_cloudsky.h"
8#endif
9
10/*
11=============================================================================
12
13 LOCAL CONSTANTS
14
15=============================================================================
16*/
17
18#define VIEWTILEX (viewwidth/16)
19#define VIEWTILEY (viewheight/16)
20
21/*
22=============================================================================
23
24 GLOBAL VARIABLES
25
26=============================================================================
27*/
28
29#ifdef DEBUGKEYS
30
31int DebugKeys (void);
32
33
34// from WL_DRAW.C
35
36void ScalePost();
37void SimpleScaleShape (int xcenter, int shapenum, unsigned height);
38
39/*
40=============================================================================
41
42 LOCAL VARIABLES
43
44=============================================================================
45*/
46
47int maporgx;
48int maporgy;
49enum {mapview,tilemapview,actoratview,visview} viewtype;
50
51void ViewMap (void);
52
53//===========================================================================
54
55/*
56==================
57=
58= CountObjects
59=
60==================
61*/
62
63void CountObjects (void)
64{
65 int i,total,count,active,inactive,doors;
66 objtype *obj;
67
68 CenterWindow (17,7);
69 active = inactive = count = doors = 0;
70
71 US_Print ("Total statics :");
72 total = (int)(laststatobj-&statobjlist[0]);
73 US_PrintUnsigned (total);
74
75 char str[60];
76 sprintf(str,"\nlaststatobj=%.8X",(int32_t)(uintptr_t)laststatobj);
77 US_Print(str);
78
79 US_Print ("\nIn use statics:");
80 for (i=0;i<total;i++)
81 {
82 if (statobjlist[i].shapenum != -1)
83 count++;
84 else
85 doors++; //debug
86 }
87 US_PrintUnsigned (count);
88
89 US_Print ("\nDoors :");
90 US_PrintUnsigned (doornum);
91
92 for (obj=player->next;obj;obj=obj->next)
93 {
94 if (obj->active)
95 active++;
96 else
97 inactive++;
98 }
99
100 US_Print ("\nTotal actors :");
101 US_PrintUnsigned (active+inactive);
102
103 US_Print ("\nActive actors :");
104 US_PrintUnsigned (active);
105
106 VW_UpdateScreen();
107 IN_Ack ();
108}
109
110
111//===========================================================================
112
113/*
114===================
115=
116= PictureGrabber
117=
118===================
119*/
120void PictureGrabber (void)
121{
122 static char fname[] = "WSHOT000.BMP";
123
124 for(int i = 0; i < 1000; i++)
125 {
126 fname[7] = i % 10 + '0';
127 fname[6] = (i / 10) % 10 + '0';
128 fname[5] = i / 100 + '0';
129 int file = open(fname, O_RDONLY | O_BINARY);
130 if(file == -1) break; // file does not exist, so use that filename
131 close(file);
132 }
133
134 // overwrites WSHOT999.BMP if all wshot files exist
135
136 SDL_SaveBMP(curSurface, fname);
137
138 CenterWindow (18,2);
139 US_PrintCentered ("Screenshot taken");
140 VW_UpdateScreen();
141 IN_Ack();
142}
143
144
145//===========================================================================
146
147/*
148===================
149=
150= BasicOverhead
151=
152===================
153*/
154
155void BasicOverhead (void)
156{
157 int x, y, z, offx, offy;
158
159 z = 128/MAPSIZE; // zoom scale
160 offx = 320/2;
161 offy = (160-MAPSIZE*z)/2;
162
163#ifdef MAPBORDER
164 int temp = viewsize;
165 NewViewSize(16);
166 DrawPlayBorder();
167#endif
168
169 // right side (raw)
170
171 for(x=0;x<MAPSIZE;x++)
172 for(y=0;y<MAPSIZE;y++)
173 VWB_Bar(x*z+offx, y*z+offy,z,z,(unsigned)(uintptr_t)actorat[x][y]);
174
175 // left side (filtered)
176
177 uintptr_t tile;
178 int color;
179 offx -= 128;
180
181 for(x=0;x<MAPSIZE;x++)
182 {
183 for(y=0;y<MAPSIZE;y++)
184 {
185 tile = (uintptr_t)actorat[x][y];
186 if (ISPOINTER(tile) && ((objtype *)tile)->flags&FL_SHOOTABLE) color = 72; // enemy
187 else if (!tile || ISPOINTER(tile))
188 {
189 if (spotvis[x][y]) color = 111; // visable
190 else color = 0; // nothing
191 }
192 else if (MAPSPOT(x,y,1) == PUSHABLETILE) color = 171; // pushwall
193 else if (tile == 64) color = 158; // solid obj
194 else if (tile < 128) color = 154; // walls
195 else if (tile < 256) color = 146; // doors
196
197 VWB_Bar(x*z+offx, y*z+offy,z,z,color);
198 }
199 }
200
201 VWB_Bar(player->tilex*z+offx,player->tiley*z+offy,z,z,15); // player
202
203 // resize the border to match
204
205 VW_UpdateScreen();
206 IN_Ack();
207
208#ifdef MAPBORDER
209 NewViewSize(temp);
210 DrawPlayBorder();
211#endif
212}
213
214
215//===========================================================================
216
217/*
218================
219=
220= ShapeTest
221=
222================
223*/
224
225void ShapeTest (void)
226{
227 //TODO
228#if NOTYET
229 extern word NumDigi;
230 extern word *DigiList;
231 extern int postx;
232 extern int postwidth;
233 extern byte *postsource;
234 static char buf[10];
235
236 boolean done;
237 ScanCode scan;
238 int i,j,k,x;
239 longword l;
240 byte *addr;
241 soundnames sound;
242 // PageListStruct far *page;
243
244 CenterWindow(20,16);
245 VW_UpdateScreen();
246 for (i = 0,done = false; !done;)
247 {
248 US_ClearWindow();
249 sound = (soundnames) -1;
250
251 // page = &PMPages[i];
252 US_Print(" Page #");
253 US_PrintUnsigned(i);
254 if (i < PMSpriteStart)
255 US_Print(" (Wall)");
256 else if (i < PMSoundStart)
257 US_Print(" (Sprite)");
258 else if (i == ChunksInFile - 1)
259 US_Print(" (Sound Info)");
260 else
261 US_Print(" (Sound)");
262
263 /* US_Print("\n XMS: ");
264 if (page->xmsPage != -1)
265 US_PrintUnsigned(page->xmsPage);
266 else
267 US_Print("No");
268
269 US_Print("\n Main: ");
270 if (page->mainPage != -1)
271 US_PrintUnsigned(page->mainPage);
272 else if (page->emsPage != -1)
273 {
274 US_Print("EMS ");
275 US_PrintUnsigned(page->emsPage);
276 }
277 else
278 US_Print("No");
279
280 US_Print("\n Last hit: ");
281 US_PrintUnsigned(page->lastHit);*/
282
283 US_Print("\n Address: ");
284 addr = (byte *) PM_GetPage(i);
285 sprintf(buf,"0x%08X",(int32_t) addr);
286 US_Print(buf);
287
288 if (addr)
289 {
290 if (i < PMSpriteStart)
291 {
292 //
293 // draw the wall
294 //
295 vbuf += 32*SCREENWIDTH;
296 postx = 128;
297 postwidth = 1;
298 postsource = addr;
299 for (x=0;x<64;x++,postx++,postsource+=64)
300 {
301 wallheight[postx] = 256;
302 ScalePost ();
303 }
304 vbuf -= 32*SCREENWIDTH;
305 }
306 else if (i < PMSoundStart)
307 {
308 //
309 // draw the sprite
310 //
311 vbuf += 32*SCREENWIDTH;
312 SimpleScaleShape (160, i-PMSpriteStart, 64);
313 vbuf -= 32*SCREENWIDTH;
314 }
315 else if (i == ChunksInFile - 1)
316 {
317 US_Print("\n\n Number of sounds: ");
318 US_PrintUnsigned(NumDigi);
319 for (l = j = k = 0;j < NumDigi;j++)
320 {
321 l += DigiList[(j * 2) + 1];
322 k += (DigiList[(j * 2) + 1] + (PMPageSize - 1)) / PMPageSize;
323 }
324 US_Print("\n Total bytes: ");
325 US_PrintUnsigned(l);
326 US_Print("\n Total pages: ");
327 US_PrintUnsigned(k);
328 }
329 else
330 {
331 byte *dp = addr;
332 for (j = 0;j < NumDigi;j++)
333 {
334 k = (DigiList[(j * 2) + 1] + (PMPageSize - 1)) / PMPageSize;
335 if ((i >= PMSoundStart + DigiList[j * 2])
336 && (i < PMSoundStart + DigiList[j * 2] + k))
337 break;
338 }
339 if (j < NumDigi)
340 {
341 sound = (soundnames) j;
342 US_Print("\n Sound #");
343 US_PrintUnsigned(j);
344 US_Print("\n Segment #");
345 US_PrintUnsigned(i - PMSoundStart - DigiList[j * 2]);
346 }
347 for (j = 0;j < PageLengths[i];j += 32)
348 {
349 byte v = dp[j];
350 int v2 = (unsigned)v;
351 v2 -= 128;
352 v2 /= 4;
353 if (v2 < 0)
354 VWB_Vlin(WindowY + WindowH - 32 + v2,
355 WindowY + WindowH - 32,
356 WindowX + 8 + (j / 32),BLACK);
357 else
358 VWB_Vlin(WindowY + WindowH - 32,
359 WindowY + WindowH - 32 + v2,
360 WindowX + 8 + (j / 32),BLACK);
361 }
362 }
363 }
364
365 VW_UpdateScreen();
366
367 IN_Ack();
368 scan = LastScan;
369
370 IN_ClearKey(scan);
371 switch (scan)
372 {
373 case sc_LeftArrow:
374 if (i)
375 i--;
376 break;
377 case sc_RightArrow:
378 if (++i >= ChunksInFile)
379 i--;
380 break;
381 case sc_W: // Walls
382 i = 0;
383 break;
384 case sc_S: // Sprites
385 i = PMSpriteStart;
386 break;
387 case sc_D: // Digitized
388 i = PMSoundStart;
389 break;
390 case sc_I: // Digitized info
391 i = ChunksInFile - 1;
392 break;
393/* case sc_L: // Load all pages
394 for (j = 0;j < ChunksInFile;j++)
395 PM_GetPage(j);
396 break;*/
397 case sc_P:
398 if (sound != -1)
399 SD_PlayDigitized(sound,8,8);
400 break;
401 case sc_Escape:
402 done = true;
403 break;
404/* case sc_Enter:
405 PM_GetPage(i);
406 break;*/
407 }
408 }
409 SD_StopDigitized();
410#endif
411}
412
413
414//===========================================================================
415
416
417/*
418================
419=
420= DebugKeys
421=
422================
423*/
424
425int DebugKeys (void)
426{
427 boolean esc;
428 int level;
429
430 if (Keyboard[sc_B]) // B = border color
431 {
432 CenterWindow(20,3);
433 PrintY+=6;
434 US_Print(" Border color (0-56): ");
435 VW_UpdateScreen();
436 esc = !US_LineInput (px,py,str,NULL,true,2,0);
437 if (!esc)
438 {
439 level = atoi (str);
440 if (level>=0 && level<=99)
441 {
442 if (level<30) level += 31;
443 else
444 {
445 if (level > 56) level=31;
446 else level -= 26;
447 }
448
449 bordercol=level*4+3;
450
451 if (bordercol == VIEWCOLOR)
452 DrawStatusBorder(bordercol);
453
454 DrawPlayBorder();
455
456 return 0;
457 }
458 }
459 return 1;
460 }
461 if (Keyboard[sc_C]) // C = count objects
462 {
463 CountObjects();
464 return 1;
465 }
466 if (Keyboard[sc_D]) // D = Darkone's FPS counter
467 {
468 CenterWindow (22,2);
469 if (fpscounter)
470 US_PrintCentered ("Darkone's FPS Counter OFF");
471 else
472 US_PrintCentered ("Darkone's FPS Counter ON");
473 VW_UpdateScreen();
474 IN_Ack();
475 fpscounter ^= 1;
476 return 1;
477 }
478 if (Keyboard[sc_E]) // E = quit level
479 playstate = ex_completed;
480
481 if (Keyboard[sc_F]) // F = facing spot
482 {
483 char str[60];
484 CenterWindow (14,6);
485 US_Print ("x:"); US_PrintUnsigned (player->x);
486 US_Print (" ("); US_PrintUnsigned (player->x%65536);
487 US_Print (")\ny:"); US_PrintUnsigned (player->y);
488 US_Print (" ("); US_PrintUnsigned (player->y%65536);
489 US_Print (")\nA:"); US_PrintUnsigned (player->angle);
490 US_Print (" X:"); US_PrintUnsigned (player->tilex);
491 US_Print (" Y:"); US_PrintUnsigned (player->tiley);
492 US_Print ("\n1:"); US_PrintUnsigned (tilemap[player->tilex][player->tiley]);
493 sprintf(str," 2:%.8X",(unsigned)(uintptr_t)actorat[player->tilex][player->tiley]); US_Print(str);
494 US_Print ("\nf 1:"); US_PrintUnsigned (player->areanumber);
495 US_Print (" 2:"); US_PrintUnsigned (MAPSPOT(player->tilex,player->tiley,1));
496 US_Print (" 3:");
497 if ((unsigned)(uintptr_t)actorat[player->tilex][player->tiley] < 256)
498 US_PrintUnsigned (spotvis[player->tilex][player->tiley]);
499 else
500 US_PrintUnsigned (actorat[player->tilex][player->tiley]->flags);
501 VW_UpdateScreen();
502 IN_Ack();
503 return 1;
504 }
505
506 if (Keyboard[sc_G]) // G = god mode
507 {
508 CenterWindow (12,2);
509 if (godmode == 0)
510 US_PrintCentered ("God mode ON");
511 else if (godmode == 1)
512 US_PrintCentered ("God (no flash)");
513 else if (godmode == 2)
514 US_PrintCentered ("God mode OFF");
515
516 VW_UpdateScreen();
517 IN_Ack();
518 if (godmode != 2)
519 godmode++;
520 else
521 godmode = 0;
522 return 1;
523 }
524 if (Keyboard[sc_H]) // H = hurt self
525 {
526 IN_ClearKeysDown ();
527 TakeDamage (16,NULL);
528 }
529 else if (Keyboard[sc_I]) // I = item cheat
530 {
531 CenterWindow (12,3);
532 US_PrintCentered ("Free items!");
533 VW_UpdateScreen();
534 GivePoints (100000);
535 HealSelf (99);
536 if (gamestate.bestweapon<wp_chaingun)
537 GiveWeapon (gamestate.bestweapon+1);
538 gamestate.ammo += 50;
539 if (gamestate.ammo > 99)
540 gamestate.ammo = 99;
541 DrawAmmo ();
542 IN_Ack ();
543 return 1;
544 }
545 else if (Keyboard[sc_K]) // K = give keys
546 {
547 CenterWindow(16,3);
548 PrintY+=6;
549 US_Print(" Give Key (1-4): ");
550 VW_UpdateScreen();
551 esc = !US_LineInput (px,py,str,NULL,true,1,0);
552 if (!esc)
553 {
554 level = atoi (str);
555 if (level>0 && level<5)
556 GiveKey(level-1);
557 }
558 return 1;
559 }
560 else if (Keyboard[sc_L]) // L = level ratios
561 {
562 byte x,start,end=LRpack;
563
564 if (end == 8) // wolf3d
565 {
566 CenterWindow(17,10);
567 start = 0;
568 }
569 else // sod
570 {
571 CenterWindow(17,12);
572 start = 0; end = 10;
573 }
574again:
575 for(x=start;x<end;x++)
576 {
577 US_PrintUnsigned(x+1);
578 US_Print(" ");
579 US_PrintUnsigned(LevelRatios[x].time/60);
580 US_Print(":");
581 if (LevelRatios[x].time%60 < 10)
582 US_Print("0");
583 US_PrintUnsigned(LevelRatios[x].time%60);
584 US_Print(" ");
585 US_PrintUnsigned(LevelRatios[x].kill);
586 US_Print("% ");
587 US_PrintUnsigned(LevelRatios[x].secret);
588 US_Print("% ");
589 US_PrintUnsigned(LevelRatios[x].treasure);
590 US_Print("%\n");
591 }
592 VW_UpdateScreen();
593 IN_Ack();
594 if (end == 10 && gamestate.mapon > 9)
595 {
596 start = 10; end = 20;
597 CenterWindow(17,12);
598 goto again;
599 }
600
601 return 1;
602 }
603 else if (Keyboard[sc_N]) // N = no clip
604 {
605 noclip^=1;
606 CenterWindow (18,3);
607 if (noclip)
608 US_PrintCentered ("No clipping ON");
609 else
610 US_PrintCentered ("No clipping OFF");
611 VW_UpdateScreen();
612 IN_Ack ();
613 return 1;
614 }
615 else if (Keyboard[sc_O]) // O = basic overhead
616 {
617 BasicOverhead();
618 return 1;
619 }
620 else if(Keyboard[sc_P]) // P = Ripper's picture grabber
621 {
622 PictureGrabber();
623 return 1;
624 }
625 else if (Keyboard[sc_Q]) // Q = fast quit
626 Quit (NULL);
627 else if (Keyboard[sc_S]) // S = slow motion
628 {
629 CenterWindow(30,3);
630 PrintY+=6;
631 US_Print(" Slow Motion steps (default 14): ");
632 VW_UpdateScreen();
633 esc = !US_LineInput (px,py,str,NULL,true,2,0);
634 if (!esc)
635 {
636 level = atoi (str);
637 if (level>=0 && level<=50)
638 singlestep = level;
639 }
640 return 1;
641 }
642 else if (Keyboard[sc_T]) // T = shape test
643 {
644 ShapeTest ();
645 return 1;
646 }
647 else if (Keyboard[sc_V]) // V = extra VBLs
648 {
649 CenterWindow(30,3);
650 PrintY+=6;
651 US_Print(" Add how many extra VBLs(0-8): ");
652 VW_UpdateScreen();
653 esc = !US_LineInput (px,py,str,NULL,true,1,0);
654 if (!esc)
655 {
656 level = atoi (str);
657 if (level>=0 && level<=8)
658 extravbls = level;
659 }
660 return 1;
661 }
662 else if (Keyboard[sc_W]) // W = warp to level
663 {
664 CenterWindow(26,3);
665 PrintY+=6;
666#ifndef SPEAR
667 US_Print(" Warp to which level(1-10): ");
668#else
669 US_Print(" Warp to which level(1-21): ");
670#endif
671 VW_UpdateScreen();
672 esc = !US_LineInput (px,py,str,NULL,true,2,0);
673 if (!esc)
674 {
675 level = atoi (str);
676#ifndef SPEAR
677 if (level>0 && level<11)
678#else
679 if (level>0 && level<22)
680#endif
681 {
682 gamestate.mapon = level-1;
683 playstate = ex_warped;
684 }
685 }
686 return 1;
687 }
688 else if (Keyboard[sc_X]) // X = item cheat
689 {
690 CenterWindow (12,3);
691 US_PrintCentered ("Extra stuff!");
692 VW_UpdateScreen();
693 // DEBUG: put stuff here
694 IN_Ack ();
695 return 1;
696 }
697#ifdef USE_CLOUDSKY
698 else if(Keyboard[sc_Z])
699 {
700 char defstr[15];
701
702 CenterWindow(34,4);
703 PrintY+=6;
704 US_Print(" Recalculate sky with seek: ");
705 int seekpx = px, seekpy = py;
706 US_PrintUnsigned(curSky->seed);
707 US_Print("\n Use color map (0-");
708 US_PrintUnsigned(numColorMaps - 1);
709 US_Print("): ");
710 int mappx = px, mappy = py;
711 US_PrintUnsigned(curSky->colorMapIndex);
712 VW_UpdateScreen();
713
714 sprintf(defstr, "%u", curSky->seed);
715 esc = !US_LineInput(seekpx, seekpy, str, defstr, true, 10, 0);
716 if(esc) return 0;
717 curSky->seed = (uint32_t) atoi(str);
718
719 sprintf(defstr, "%u", curSky->colorMapIndex);
720 esc = !US_LineInput(mappx, mappy, str, defstr, true, 10, 0);
721 if(esc) return 0;
722 uint32_t newInd = (uint32_t) atoi(str);
723 if(newInd < (uint32_t) numColorMaps)
724 {
725 curSky->colorMapIndex = newInd;
726 InitSky();
727 }
728 else
729 {
730 CenterWindow (18,3);
731 US_PrintCentered ("Illegal color map!");
732 VW_UpdateScreen();
733 IN_Ack ();
734 }
735 }
736#endif
737
738 return 0;
739}
740
741
742#if 0
743/*
744===================
745=
746= OverheadRefresh
747=
748===================
749*/
750
751void OverheadRefresh (void)
752{
753 unsigned x,y,endx,endy,sx,sy;
754 unsigned tile;
755
756
757 endx = maporgx+VIEWTILEX;
758 endy = maporgy+VIEWTILEY;
759
760 for (y=maporgy;y<endy;y++)
761 {
762 for (x=maporgx;x<endx;x++)
763 {
764 sx = (x-maporgx)*16;
765 sy = (y-maporgy)*16;
766
767 switch (viewtype)
768 {
769#if 0
770 case mapview:
771 tile = *(mapsegs[0]+farmapylookup[y]+x);
772 break;
773
774 case tilemapview:
775 tile = tilemap[x][y];
776 break;
777
778 case visview:
779 tile = spotvis[x][y];
780 break;
781#endif
782 case actoratview:
783 tile = (unsigned)actorat[x][y];
784 break;
785 }
786
787 if (tile<MAXWALLTILES)
788 LatchDrawTile(sx,sy,tile);
789 else
790 {
791 LatchDrawChar(sx,sy,NUMBERCHARS+((tile&0xf000)>>12));
792 LatchDrawChar(sx+8,sy,NUMBERCHARS+((tile&0x0f00)>>8));
793 LatchDrawChar(sx,sy+8,NUMBERCHARS+((tile&0x00f0)>>4));
794 LatchDrawChar(sx+8,sy+8,NUMBERCHARS+(tile&0x000f));
795 }
796 }
797 }
798}
799#endif
800
801#if 0
802/*
803===================
804=
805= ViewMap
806=
807===================
808*/
809
810void ViewMap (void)
811{
812 boolean button0held;
813
814 viewtype = actoratview;
815 // button0held = false;
816
817
818 maporgx = player->tilex - VIEWTILEX/2;
819 if (maporgx<0)
820 maporgx = 0;
821 if (maporgx>MAPSIZE-VIEWTILEX)
822 maporgx=MAPSIZE-VIEWTILEX;
823 maporgy = player->tiley - VIEWTILEY/2;
824 if (maporgy<0)
825 maporgy = 0;
826 if (maporgy>MAPSIZE-VIEWTILEY)
827 maporgy=MAPSIZE-VIEWTILEY;
828
829 do
830 {
831 //
832 // let user pan around
833 //
834 PollControls ();
835 if (controlx < 0 && maporgx>0)
836 maporgx--;
837 if (controlx > 0 && maporgx<mapwidth-VIEWTILEX)
838 maporgx++;
839 if (controly < 0 && maporgy>0)
840 maporgy--;
841 if (controly > 0 && maporgy<mapheight-VIEWTILEY)
842 maporgy++;
843
844#if 0
845 if (c.button0 && !button0held)
846 {
847 button0held = true;
848 viewtype++;
849 if (viewtype>visview)
850 viewtype = mapview;
851 }
852 if (!c.button0)
853 button0held = false;
854#endif
855
856 OverheadRefresh ();
857
858 } while (!Keyboard[sc_Escape]);
859
860 IN_ClearKeysDown ();
861}
862#endif
863#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 @@
1#ifndef WL_DEF_H
2#define WL_DEF_H
3
4// Defines which version shall be built and configures supported extra features
5#include "version.h"
6
7#define SOUND_ENABLE
8
9#include "fixedpoint.h"
10#include <ctype.h>
11#include <stdint.h>
12#include <stdarg.h>
13#include <SDL.h>
14#include <SDL_mixer.h>
15
16#define open rb->open
17#define read(a, b, c) rb->read((a), (b), (c))
18#define write(a, b, c) rb->write((a), (b), (c))
19#define close(a) rb->close(a)
20
21#if !defined O_BINARY
22# define O_BINARY 0
23#endif
24
25#pragma pack(1)
26
27#if defined(_arch_dreamcast)
28#define YESBUTTONNAME "A"
29#define NOBUTTONNAME "B"
30#elif defined(GP2X)
31#define YESBUTTONNAME "Y"
32#define NOBUTTONNAME "B"
33#else
34#define YESBUTTONNAME "Y"
35#define NOBUTTONNAME "N"
36#endif
37
38#include "foreign.h"
39
40#ifndef SPEAR
41 #include "audiowl6.h"
42 #ifdef UPLOAD
43 #include "gfxv_apo.h"
44 #else
45 #ifdef GOODTIMES
46 #include "gfxv_wl6.h"
47 #else
48 #include "gfxv_apo.h"
49 #endif
50 #endif
51#else
52 #include "audiosod.h"
53 #include "gfxv_sod.h"
54 #include "f_spear.h"
55#endif
56
57typedef uint8_t byte;
58typedef uint16_t word;
59typedef int32_t fixed;
60typedef uint32_t longword;
61typedef int8_t boolean;
62typedef void * memptr;
63
64typedef struct
65{
66 int x,y;
67} Point;
68typedef struct
69{
70 Point ul,lr;
71} Rect;
72
73void Quit(const char *errorStr, ...);
74
75#include "id_pm.h"
76#include "id_sd.h"
77#include "id_in.h"
78#include "id_vl.h"
79#include "id_vh.h"
80#include "id_us.h"
81#include "id_ca.h"
82
83#include "wl_menu.h"
84
85#define MAPSPOT(x,y,plane) (mapsegs[plane][((y)<<mapshift)+(x)])
86
87#define SIGN(x) ((x)>0?1:-1)
88#define ABS(x) ((int)(x)>0?(x):-(x))
89#define LABS(x) ((int32_t)(x)>0?(x):-(x))
90
91#define abs(x) ABS(x)
92
93/*
94=============================================================================
95
96 GLOBAL CONSTANTS
97
98=============================================================================
99*/
100
101#define MAXTICS 10
102#define DEMOTICS 4
103
104#define MAXACTORS 150 // max number of nazis, etc / map
105#define MAXSTATS 400 // max number of lamps, bonus, etc
106#define MAXDOORS 64 // max number of sliding doors
107#define MAXWALLTILES 64 // max number of wall tiles
108
109//
110// tile constants
111//
112
113#define ICONARROWS 90
114#define PUSHABLETILE 98
115#define EXITTILE 99 // at end of castle
116#define AREATILE 107 // first of NUMAREAS floor tiles
117#define NUMAREAS 37
118#define ELEVATORTILE 21
119#define AMBUSHTILE 106
120#define ALTELEVATORTILE 107
121
122#define NUMBERCHARS 9
123
124
125//----------------
126
127#define EXTRAPOINTS 40000
128
129#define PLAYERSPEED 3000
130#define RUNSPEED 6000
131
132#define SCREENSEG 0xa000
133
134#define SCREENBWIDE 80
135
136#define HEIGHTRATIO 0.50 // also defined in id_mm.c
137
138#define BORDERCOLOR 3
139#define FLASHCOLOR 5
140#define FLASHTICS 4
141
142#ifndef SPEAR
143 #define LRpack 8 // # of levels to store in endgame
144#else
145 #define LRpack 20
146#endif
147
148#define PLAYERSIZE MINDIST // player radius
149#define MINACTORDIST 0x10000l // minimum dist from player center
150 // to any actor center
151
152#define NUMLATCHPICS 100
153
154#undef M_PI
155#define PI 3.141592657
156#define M_PI PI
157
158#define GLOBAL1 (1l<<16)
159#define TILEGLOBAL GLOBAL1
160#define PIXGLOBAL (GLOBAL1/64)
161#define TILESHIFT 16l
162#define UNSIGNEDSHIFT 8
163
164#define ANGLES 360 // must be divisable by 4
165#define ANGLEQUAD (ANGLES/4)
166#define FINEANGLES 3600
167#define ANG90 (FINEANGLES/4)
168#define ANG180 (ANG90*2)
169#define ANG270 (ANG90*3)
170#define ANG360 (ANG90*4)
171#define VANG90 (ANGLES/4)
172#define VANG180 (VANG90*2)
173#define VANG270 (VANG90*3)
174#define VANG360 (VANG90*4)
175
176#define MINDIST (0x5800l)
177
178#define mapshift 6
179#define MAPSIZE (1<<mapshift)
180#define maparea MAPSIZE*MAPSIZE
181
182#define mapheight MAPSIZE
183#define mapwidth MAPSIZE
184
185#ifdef USE_HIRES
186
187#define TEXTURESHIFT 7
188#define TEXTURESIZE (1<<TEXTURESHIFT)
189#define TEXTUREFROMFIXEDSHIFT 2
190#define TEXTUREMASK (TEXTURESIZE*(TEXTURESIZE-1))
191
192#define SPRITESCALEFACTOR 1
193
194#else
195
196#define TEXTURESHIFT 6
197#define TEXTURESIZE (1<<TEXTURESHIFT)
198#define TEXTUREFROMFIXEDSHIFT 4
199#define TEXTUREMASK (TEXTURESIZE*(TEXTURESIZE-1))
200
201#define SPRITESCALEFACTOR 2
202
203#endif
204
205#define NORTH 0
206#define EAST 1
207#define SOUTH 2
208#define WEST 3
209
210
211#define STATUSLINES 40
212
213#define SCREENSIZE (SCREENBWIDE*208)
214#define PAGE1START 0
215#define PAGE2START (SCREENSIZE)
216#define PAGE3START (SCREENSIZE*2u)
217#define FREESTART (SCREENSIZE*3u)
218
219
220#define PIXRADIUS 512
221
222#define STARTAMMO 8
223
224
225// object flag values
226
227typedef enum
228{
229 FL_SHOOTABLE = 0x00000001,
230 FL_BONUS = 0x00000002,
231 FL_NEVERMARK = 0x00000004,
232 FL_VISABLE = 0x00000008,
233 FL_ATTACKMODE = 0x00000010,
234 FL_FIRSTATTACK = 0x00000020,
235 FL_AMBUSH = 0x00000040,
236 FL_NONMARK = 0x00000080,
237 FL_FULLBRIGHT = 0x00000100,
238#ifdef USE_DIR3DSPR
239 // you can choose one of the following values in wl_act1.cpp
240 // to make a static sprite a directional 3d sprite
241 // (see example at the end of the statinfo array)
242 FL_DIR_HORIZ_MID = 0x00000200,
243 FL_DIR_HORIZ_FW = 0x00000400,
244 FL_DIR_HORIZ_BW = 0x00000600,
245 FL_DIR_VERT_MID = 0x00000a00,
246 FL_DIR_VERT_FW = 0x00000c00,
247 FL_DIR_VERT_BW = 0x00000e00,
248
249 // these values are just used to improve readability of code
250 FL_DIR_NONE = 0x00000000,
251 FL_DIR_POS_MID = 0x00000200,
252 FL_DIR_POS_FW = 0x00000400,
253 FL_DIR_POS_BW = 0x00000600,
254 FL_DIR_POS_MASK = 0x00000600,
255 FL_DIR_VERT_FLAG = 0x00000800,
256 FL_DIR_MASK = 0x00000e00,
257#endif
258 // next free bit is 0x00001000
259} objflag_t;
260
261
262//
263// sprite constants
264//
265
266enum
267{
268 SPR_DEMO,
269#ifndef APOGEE_1_0
270 SPR_DEATHCAM,
271#endif
272//
273// static sprites
274//
275 SPR_STAT_0,SPR_STAT_1,SPR_STAT_2,SPR_STAT_3,
276 SPR_STAT_4,SPR_STAT_5,SPR_STAT_6,SPR_STAT_7,
277
278 SPR_STAT_8,SPR_STAT_9,SPR_STAT_10,SPR_STAT_11,
279 SPR_STAT_12,SPR_STAT_13,SPR_STAT_14,SPR_STAT_15,
280
281 SPR_STAT_16,SPR_STAT_17,SPR_STAT_18,SPR_STAT_19,
282 SPR_STAT_20,SPR_STAT_21,SPR_STAT_22,SPR_STAT_23,
283
284 SPR_STAT_24,SPR_STAT_25,SPR_STAT_26,SPR_STAT_27,
285 SPR_STAT_28,SPR_STAT_29,SPR_STAT_30,SPR_STAT_31,
286
287 SPR_STAT_32,SPR_STAT_33,SPR_STAT_34,SPR_STAT_35,
288 SPR_STAT_36,SPR_STAT_37,SPR_STAT_38,SPR_STAT_39,
289
290 SPR_STAT_40,SPR_STAT_41,SPR_STAT_42,SPR_STAT_43,
291 SPR_STAT_44,SPR_STAT_45,SPR_STAT_46,SPR_STAT_47,
292
293#ifdef SPEAR
294 SPR_STAT_48,SPR_STAT_49,SPR_STAT_50,SPR_STAT_51,
295#endif
296
297//
298// guard
299//
300 SPR_GRD_S_1,SPR_GRD_S_2,SPR_GRD_S_3,SPR_GRD_S_4,
301 SPR_GRD_S_5,SPR_GRD_S_6,SPR_GRD_S_7,SPR_GRD_S_8,
302
303 SPR_GRD_W1_1,SPR_GRD_W1_2,SPR_GRD_W1_3,SPR_GRD_W1_4,
304 SPR_GRD_W1_5,SPR_GRD_W1_6,SPR_GRD_W1_7,SPR_GRD_W1_8,
305
306 SPR_GRD_W2_1,SPR_GRD_W2_2,SPR_GRD_W2_3,SPR_GRD_W2_4,
307 SPR_GRD_W2_5,SPR_GRD_W2_6,SPR_GRD_W2_7,SPR_GRD_W2_8,
308
309 SPR_GRD_W3_1,SPR_GRD_W3_2,SPR_GRD_W3_3,SPR_GRD_W3_4,
310 SPR_GRD_W3_5,SPR_GRD_W3_6,SPR_GRD_W3_7,SPR_GRD_W3_8,
311
312 SPR_GRD_W4_1,SPR_GRD_W4_2,SPR_GRD_W4_3,SPR_GRD_W4_4,
313 SPR_GRD_W4_5,SPR_GRD_W4_6,SPR_GRD_W4_7,SPR_GRD_W4_8,
314
315 SPR_GRD_PAIN_1,SPR_GRD_DIE_1,SPR_GRD_DIE_2,SPR_GRD_DIE_3,
316 SPR_GRD_PAIN_2,SPR_GRD_DEAD,
317
318 SPR_GRD_SHOOT1,SPR_GRD_SHOOT2,SPR_GRD_SHOOT3,
319
320//
321// dogs
322//
323 SPR_DOG_W1_1,SPR_DOG_W1_2,SPR_DOG_W1_3,SPR_DOG_W1_4,
324 SPR_DOG_W1_5,SPR_DOG_W1_6,SPR_DOG_W1_7,SPR_DOG_W1_8,
325
326 SPR_DOG_W2_1,SPR_DOG_W2_2,SPR_DOG_W2_3,SPR_DOG_W2_4,
327 SPR_DOG_W2_5,SPR_DOG_W2_6,SPR_DOG_W2_7,SPR_DOG_W2_8,
328
329 SPR_DOG_W3_1,SPR_DOG_W3_2,SPR_DOG_W3_3,SPR_DOG_W3_4,
330 SPR_DOG_W3_5,SPR_DOG_W3_6,SPR_DOG_W3_7,SPR_DOG_W3_8,
331
332 SPR_DOG_W4_1,SPR_DOG_W4_2,SPR_DOG_W4_3,SPR_DOG_W4_4,
333 SPR_DOG_W4_5,SPR_DOG_W4_6,SPR_DOG_W4_7,SPR_DOG_W4_8,
334
335 SPR_DOG_DIE_1,SPR_DOG_DIE_2,SPR_DOG_DIE_3,SPR_DOG_DEAD,
336 SPR_DOG_JUMP1,SPR_DOG_JUMP2,SPR_DOG_JUMP3,
337
338
339
340//
341// ss
342//
343 SPR_SS_S_1,SPR_SS_S_2,SPR_SS_S_3,SPR_SS_S_4,
344 SPR_SS_S_5,SPR_SS_S_6,SPR_SS_S_7,SPR_SS_S_8,
345
346 SPR_SS_W1_1,SPR_SS_W1_2,SPR_SS_W1_3,SPR_SS_W1_4,
347 SPR_SS_W1_5,SPR_SS_W1_6,SPR_SS_W1_7,SPR_SS_W1_8,
348
349 SPR_SS_W2_1,SPR_SS_W2_2,SPR_SS_W2_3,SPR_SS_W2_4,
350 SPR_SS_W2_5,SPR_SS_W2_6,SPR_SS_W2_7,SPR_SS_W2_8,
351
352 SPR_SS_W3_1,SPR_SS_W3_2,SPR_SS_W3_3,SPR_SS_W3_4,
353 SPR_SS_W3_5,SPR_SS_W3_6,SPR_SS_W3_7,SPR_SS_W3_8,
354
355 SPR_SS_W4_1,SPR_SS_W4_2,SPR_SS_W4_3,SPR_SS_W4_4,
356 SPR_SS_W4_5,SPR_SS_W4_6,SPR_SS_W4_7,SPR_SS_W4_8,
357
358 SPR_SS_PAIN_1,SPR_SS_DIE_1,SPR_SS_DIE_2,SPR_SS_DIE_3,
359 SPR_SS_PAIN_2,SPR_SS_DEAD,
360
361 SPR_SS_SHOOT1,SPR_SS_SHOOT2,SPR_SS_SHOOT3,
362
363//
364// mutant
365//
366 SPR_MUT_S_1,SPR_MUT_S_2,SPR_MUT_S_3,SPR_MUT_S_4,
367 SPR_MUT_S_5,SPR_MUT_S_6,SPR_MUT_S_7,SPR_MUT_S_8,
368
369 SPR_MUT_W1_1,SPR_MUT_W1_2,SPR_MUT_W1_3,SPR_MUT_W1_4,
370 SPR_MUT_W1_5,SPR_MUT_W1_6,SPR_MUT_W1_7,SPR_MUT_W1_8,
371
372 SPR_MUT_W2_1,SPR_MUT_W2_2,SPR_MUT_W2_3,SPR_MUT_W2_4,
373 SPR_MUT_W2_5,SPR_MUT_W2_6,SPR_MUT_W2_7,SPR_MUT_W2_8,
374
375 SPR_MUT_W3_1,SPR_MUT_W3_2,SPR_MUT_W3_3,SPR_MUT_W3_4,
376 SPR_MUT_W3_5,SPR_MUT_W3_6,SPR_MUT_W3_7,SPR_MUT_W3_8,
377
378 SPR_MUT_W4_1,SPR_MUT_W4_2,SPR_MUT_W4_3,SPR_MUT_W4_4,
379 SPR_MUT_W4_5,SPR_MUT_W4_6,SPR_MUT_W4_7,SPR_MUT_W4_8,
380
381 SPR_MUT_PAIN_1,SPR_MUT_DIE_1,SPR_MUT_DIE_2,SPR_MUT_DIE_3,
382 SPR_MUT_PAIN_2,SPR_MUT_DIE_4,SPR_MUT_DEAD,
383
384 SPR_MUT_SHOOT1,SPR_MUT_SHOOT2,SPR_MUT_SHOOT3,SPR_MUT_SHOOT4,
385
386//
387// officer
388//
389 SPR_OFC_S_1,SPR_OFC_S_2,SPR_OFC_S_3,SPR_OFC_S_4,
390 SPR_OFC_S_5,SPR_OFC_S_6,SPR_OFC_S_7,SPR_OFC_S_8,
391
392 SPR_OFC_W1_1,SPR_OFC_W1_2,SPR_OFC_W1_3,SPR_OFC_W1_4,
393 SPR_OFC_W1_5,SPR_OFC_W1_6,SPR_OFC_W1_7,SPR_OFC_W1_8,
394
395 SPR_OFC_W2_1,SPR_OFC_W2_2,SPR_OFC_W2_3,SPR_OFC_W2_4,
396 SPR_OFC_W2_5,SPR_OFC_W2_6,SPR_OFC_W2_7,SPR_OFC_W2_8,
397
398 SPR_OFC_W3_1,SPR_OFC_W3_2,SPR_OFC_W3_3,SPR_OFC_W3_4,
399 SPR_OFC_W3_5,SPR_OFC_W3_6,SPR_OFC_W3_7,SPR_OFC_W3_8,
400
401 SPR_OFC_W4_1,SPR_OFC_W4_2,SPR_OFC_W4_3,SPR_OFC_W4_4,
402 SPR_OFC_W4_5,SPR_OFC_W4_6,SPR_OFC_W4_7,SPR_OFC_W4_8,
403
404 SPR_OFC_PAIN_1,SPR_OFC_DIE_1,SPR_OFC_DIE_2,SPR_OFC_DIE_3,
405 SPR_OFC_PAIN_2,SPR_OFC_DIE_4,SPR_OFC_DEAD,
406
407 SPR_OFC_SHOOT1,SPR_OFC_SHOOT2,SPR_OFC_SHOOT3,
408
409#ifndef SPEAR
410//
411// ghosts
412//
413 SPR_BLINKY_W1,SPR_BLINKY_W2,SPR_PINKY_W1,SPR_PINKY_W2,
414 SPR_CLYDE_W1,SPR_CLYDE_W2,SPR_INKY_W1,SPR_INKY_W2,
415
416//
417// hans
418//
419 SPR_BOSS_W1,SPR_BOSS_W2,SPR_BOSS_W3,SPR_BOSS_W4,
420 SPR_BOSS_SHOOT1,SPR_BOSS_SHOOT2,SPR_BOSS_SHOOT3,SPR_BOSS_DEAD,
421
422 SPR_BOSS_DIE1,SPR_BOSS_DIE2,SPR_BOSS_DIE3,
423
424//
425// schabbs
426//
427 SPR_SCHABB_W1,SPR_SCHABB_W2,SPR_SCHABB_W3,SPR_SCHABB_W4,
428 SPR_SCHABB_SHOOT1,SPR_SCHABB_SHOOT2,
429
430 SPR_SCHABB_DIE1,SPR_SCHABB_DIE2,SPR_SCHABB_DIE3,SPR_SCHABB_DEAD,
431 SPR_HYPO1,SPR_HYPO2,SPR_HYPO3,SPR_HYPO4,
432
433//
434// fake
435//
436 SPR_FAKE_W1,SPR_FAKE_W2,SPR_FAKE_W3,SPR_FAKE_W4,
437 SPR_FAKE_SHOOT,SPR_FIRE1,SPR_FIRE2,
438
439 SPR_FAKE_DIE1,SPR_FAKE_DIE2,SPR_FAKE_DIE3,SPR_FAKE_DIE4,
440 SPR_FAKE_DIE5,SPR_FAKE_DEAD,
441
442//
443// hitler
444//
445 SPR_MECHA_W1,SPR_MECHA_W2,SPR_MECHA_W3,SPR_MECHA_W4,
446 SPR_MECHA_SHOOT1,SPR_MECHA_SHOOT2,SPR_MECHA_SHOOT3,SPR_MECHA_DEAD,
447
448 SPR_MECHA_DIE1,SPR_MECHA_DIE2,SPR_MECHA_DIE3,
449
450 SPR_HITLER_W1,SPR_HITLER_W2,SPR_HITLER_W3,SPR_HITLER_W4,
451 SPR_HITLER_SHOOT1,SPR_HITLER_SHOOT2,SPR_HITLER_SHOOT3,SPR_HITLER_DEAD,
452
453 SPR_HITLER_DIE1,SPR_HITLER_DIE2,SPR_HITLER_DIE3,SPR_HITLER_DIE4,
454 SPR_HITLER_DIE5,SPR_HITLER_DIE6,SPR_HITLER_DIE7,
455
456//
457// giftmacher
458//
459 SPR_GIFT_W1,SPR_GIFT_W2,SPR_GIFT_W3,SPR_GIFT_W4,
460 SPR_GIFT_SHOOT1,SPR_GIFT_SHOOT2,
461
462 SPR_GIFT_DIE1,SPR_GIFT_DIE2,SPR_GIFT_DIE3,SPR_GIFT_DEAD,
463#endif
464//
465// Rocket, smoke and small explosion
466//
467 SPR_ROCKET_1,SPR_ROCKET_2,SPR_ROCKET_3,SPR_ROCKET_4,
468 SPR_ROCKET_5,SPR_ROCKET_6,SPR_ROCKET_7,SPR_ROCKET_8,
469
470 SPR_SMOKE_1,SPR_SMOKE_2,SPR_SMOKE_3,SPR_SMOKE_4,
471 SPR_BOOM_1,SPR_BOOM_2,SPR_BOOM_3,
472
473//
474// Angel of Death's DeathSparks(tm)
475//
476#ifdef SPEAR
477 SPR_HROCKET_1,SPR_HROCKET_2,SPR_HROCKET_3,SPR_HROCKET_4,
478 SPR_HROCKET_5,SPR_HROCKET_6,SPR_HROCKET_7,SPR_HROCKET_8,
479
480 SPR_HSMOKE_1,SPR_HSMOKE_2,SPR_HSMOKE_3,SPR_HSMOKE_4,
481 SPR_HBOOM_1,SPR_HBOOM_2,SPR_HBOOM_3,
482
483 SPR_SPARK1,SPR_SPARK2,SPR_SPARK3,SPR_SPARK4,
484#endif
485
486#ifndef SPEAR
487//
488// gretel
489//
490 SPR_GRETEL_W1,SPR_GRETEL_W2,SPR_GRETEL_W3,SPR_GRETEL_W4,
491 SPR_GRETEL_SHOOT1,SPR_GRETEL_SHOOT2,SPR_GRETEL_SHOOT3,SPR_GRETEL_DEAD,
492
493 SPR_GRETEL_DIE1,SPR_GRETEL_DIE2,SPR_GRETEL_DIE3,
494
495//
496// fat face
497//
498 SPR_FAT_W1,SPR_FAT_W2,SPR_FAT_W3,SPR_FAT_W4,
499 SPR_FAT_SHOOT1,SPR_FAT_SHOOT2,SPR_FAT_SHOOT3,SPR_FAT_SHOOT4,
500
501 SPR_FAT_DIE1,SPR_FAT_DIE2,SPR_FAT_DIE3,SPR_FAT_DEAD,
502
503//
504// bj
505//
506#ifdef APOGEE_1_0
507 SPR_BJ_W1=360,
508#elif defined(APOGEE_1_1) && defined(UPLOAD)
509 SPR_BJ_W1=406,
510#else
511 SPR_BJ_W1,
512#endif
513 SPR_BJ_W2,SPR_BJ_W3,SPR_BJ_W4,
514 SPR_BJ_JUMP1,SPR_BJ_JUMP2,SPR_BJ_JUMP3,SPR_BJ_JUMP4,
515#else
516//
517// THESE ARE FOR 'SPEAR OF DESTINY'
518//
519
520//
521// Trans Grosse
522//
523 SPR_TRANS_W1,SPR_TRANS_W2,SPR_TRANS_W3,SPR_TRANS_W4,
524 SPR_TRANS_SHOOT1,SPR_TRANS_SHOOT2,SPR_TRANS_SHOOT3,SPR_TRANS_DEAD,
525
526 SPR_TRANS_DIE1,SPR_TRANS_DIE2,SPR_TRANS_DIE3,
527
528//
529// Wilhelm
530//
531 SPR_WILL_W1,SPR_WILL_W2,SPR_WILL_W3,SPR_WILL_W4,
532 SPR_WILL_SHOOT1,SPR_WILL_SHOOT2,SPR_WILL_SHOOT3,SPR_WILL_SHOOT4,
533
534 SPR_WILL_DIE1,SPR_WILL_DIE2,SPR_WILL_DIE3,SPR_WILL_DEAD,
535
536//
537// UberMutant
538//
539 SPR_UBER_W1,SPR_UBER_W2,SPR_UBER_W3,SPR_UBER_W4,
540 SPR_UBER_SHOOT1,SPR_UBER_SHOOT2,SPR_UBER_SHOOT3,SPR_UBER_SHOOT4,
541
542 SPR_UBER_DIE1,SPR_UBER_DIE2,SPR_UBER_DIE3,SPR_UBER_DIE4,
543 SPR_UBER_DEAD,
544
545//
546// Death Knight
547//
548 SPR_DEATH_W1,SPR_DEATH_W2,SPR_DEATH_W3,SPR_DEATH_W4,
549 SPR_DEATH_SHOOT1,SPR_DEATH_SHOOT2,SPR_DEATH_SHOOT3,SPR_DEATH_SHOOT4,
550
551 SPR_DEATH_DIE1,SPR_DEATH_DIE2,SPR_DEATH_DIE3,SPR_DEATH_DIE4,
552 SPR_DEATH_DIE5,SPR_DEATH_DIE6,SPR_DEATH_DEAD,
553
554//
555// Ghost
556//
557 SPR_SPECTRE_W1,SPR_SPECTRE_W2,SPR_SPECTRE_W3,SPR_SPECTRE_W4,
558 SPR_SPECTRE_F1,SPR_SPECTRE_F2,SPR_SPECTRE_F3,SPR_SPECTRE_F4,
559
560//
561// Angel of Death
562//
563 SPR_ANGEL_W1,SPR_ANGEL_W2,SPR_ANGEL_W3,SPR_ANGEL_W4,
564 SPR_ANGEL_SHOOT1,SPR_ANGEL_SHOOT2,SPR_ANGEL_TIRED1,SPR_ANGEL_TIRED2,
565
566 SPR_ANGEL_DIE1,SPR_ANGEL_DIE2,SPR_ANGEL_DIE3,SPR_ANGEL_DIE4,
567 SPR_ANGEL_DIE5,SPR_ANGEL_DIE6,SPR_ANGEL_DIE7,SPR_ANGEL_DEAD,
568
569#endif
570
571//
572// player attack frames
573//
574 SPR_KNIFEREADY,SPR_KNIFEATK1,SPR_KNIFEATK2,SPR_KNIFEATK3,
575 SPR_KNIFEATK4,
576
577 SPR_PISTOLREADY,SPR_PISTOLATK1,SPR_PISTOLATK2,SPR_PISTOLATK3,
578 SPR_PISTOLATK4,
579
580 SPR_MACHINEGUNREADY,SPR_MACHINEGUNATK1,SPR_MACHINEGUNATK2,MACHINEGUNATK3,
581 SPR_MACHINEGUNATK4,
582
583 SPR_CHAINREADY,SPR_CHAINATK1,SPR_CHAINATK2,SPR_CHAINATK3,
584 SPR_CHAINATK4,
585
586};
587
588
589/*
590=============================================================================
591
592 GLOBAL TYPES
593
594=============================================================================
595*/
596
597typedef enum {
598 di_north,
599 di_east,
600 di_south,
601 di_west
602} controldir_t;
603
604typedef enum {
605 dr_normal,
606 dr_lock1,
607 dr_lock2,
608 dr_lock3,
609 dr_lock4,
610 dr_elevator
611} door_t;
612
613typedef enum {
614 ac_badobject = -1,
615 ac_no,
616 ac_yes,
617 ac_allways
618} activetype;
619
620typedef enum {
621 nothing,
622 playerobj,
623 inertobj,
624 guardobj,
625 officerobj,
626 ssobj,
627 dogobj,
628 bossobj,
629 schabbobj,
630 fakeobj,
631 mechahitlerobj,
632 mutantobj,
633 needleobj,
634 fireobj,
635 bjobj,
636 ghostobj,
637 realhitlerobj,
638 gretelobj,
639 giftobj,
640 fatobj,
641 rocketobj,
642
643 spectreobj,
644 angelobj,
645 transobj,
646 uberobj,
647 willobj,
648 deathobj,
649 hrocketobj,
650 sparkobj
651} classtype;
652
653typedef enum {
654 none,
655 block,
656 bo_gibs,
657 bo_alpo,
658 bo_firstaid,
659 bo_key1,
660 bo_key2,
661 bo_key3,
662 bo_key4,
663 bo_cross,
664 bo_chalice,
665 bo_bible,
666 bo_crown,
667 bo_clip,
668 bo_clip2,
669 bo_machinegun,
670 bo_chaingun,
671 bo_food,
672 bo_fullheal,
673 bo_25clip,
674 bo_spear
675} wl_stat_t;
676
677typedef enum {
678 east,
679 northeast,
680 north,
681 northwest,
682 west,
683 southwest,
684 south,
685 southeast,
686 nodir
687} dirtype;
688
689
690#define NUMENEMIES 22
691typedef enum {
692 en_guard,
693 en_officer,
694 en_ss,
695 en_dog,
696 en_boss,
697 en_schabbs,
698 en_fake,
699 en_hitler,
700 en_mutant,
701 en_blinky,
702 en_clyde,
703 en_pinky,
704 en_inky,
705 en_gretel,
706 en_gift,
707 en_fat,
708 en_spectre,
709 en_angel,
710 en_trans,
711 en_uber,
712 en_will,
713 en_death
714} enemy_t;
715
716typedef void (* statefunc) (void *);
717
718typedef struct statestruct
719{
720 boolean rotate;
721 short shapenum; // a shapenum of -1 means get from ob->temp1
722 short tictime;
723 void (*think) (void *),(*action) (void *);
724 struct statestruct *next;
725} statetype;
726
727
728//---------------------
729//
730// trivial actor structure
731//
732//---------------------
733
734typedef struct statstruct
735{
736 byte tilex,tiley;
737 short shapenum; // if shapenum == -1 the obj has been removed
738 byte *visspot;
739 uint32_t flags;
740 byte itemnumber;
741} statobj_t;
742
743
744//---------------------
745//
746// door actor structure
747//
748//---------------------
749
750typedef enum
751{
752 dr_open,dr_closed,dr_opening,dr_closing
753} doortype;
754
755typedef struct doorstruct
756{
757 byte tilex,tiley;
758 boolean vertical;
759 byte lock;
760 doortype action;
761 short ticcount;
762} doorobj_t;
763
764
765//--------------------
766//
767// thinking actor structure
768//
769//--------------------
770
771typedef struct objstruct
772{
773 activetype active;
774 short ticcount;
775 classtype obclass;
776 statetype *state;
777
778 uint32_t flags; // FL_SHOOTABLE, etc
779
780 int32_t distance; // if negative, wait for that door to open
781 dirtype dir;
782
783 fixed x,y;
784 word tilex,tiley;
785 byte areanumber;
786
787 short viewx;
788 word viewheight;
789 fixed transx,transy; // in global coord
790
791 short angle;
792 short hitpoints;
793 int32_t speed;
794
795 short temp1,temp2,hidden;
796 struct objstruct *next,*prev;
797} objtype;
798
799enum
800{
801 bt_nobutton=-1,
802 bt_attack=0,
803 bt_strafe,
804 bt_run,
805 bt_use,
806 bt_readyknife,
807 bt_readypistol,
808 bt_readymachinegun,
809 bt_readychaingun,
810 bt_nextweapon,
811 bt_prevweapon,
812 bt_esc,
813 bt_pause,
814 bt_strafeleft,
815 bt_straferight,
816 bt_moveforward,
817 bt_movebackward,
818 bt_turnleft,
819 bt_turnright,
820 NUMBUTTONS
821};
822
823
824#define NUMWEAPONS 4
825typedef enum
826{
827 wp_knife,
828 wp_pistol,
829 wp_machinegun,
830 wp_chaingun
831} weapontype;
832
833
834enum
835{
836 gd_baby,
837 gd_easy,
838 gd_medium,
839 gd_hard
840};
841
842//---------------
843//
844// gamestate structure
845//
846//---------------
847
848typedef struct
849{
850 short difficulty;
851 short mapon;
852 int32_t oldscore,score,nextextra;
853 short lives;
854 short health;
855 short ammo;
856 short keys;
857 weapontype bestweapon,weapon,chosenweapon;
858
859 short faceframe;
860 short attackframe,attackcount,weaponframe;
861
862 short episode,secretcount,treasurecount,killcount,
863 secrettotal,treasuretotal,killtotal;
864 int32_t TimeCount;
865 int32_t killx,killy;
866 boolean victoryflag; // set during victory animations
867} gametype;
868
869
870typedef enum
871{
872 ex_stillplaying,
873 ex_completed,
874 ex_died,
875 ex_warped,
876 ex_resetgame,
877 ex_loadedgame,
878 ex_victorious,
879 ex_abort,
880 ex_demodone,
881 ex_secretlevel
882} exit_t;
883
884
885extern word *mapsegs[MAPPLANES];
886extern int mapon;
887
888/*
889=============================================================================
890
891 WL_MAIN DEFINITIONS
892
893=============================================================================
894*/
895
896extern boolean loadedgame;
897extern fixed focallength;
898extern int viewscreenx, viewscreeny;
899extern int viewwidth;
900extern int viewheight;
901extern short centerx;
902extern int32_t heightnumerator;
903extern fixed scale;
904
905extern int dirangle[9];
906
907extern int mouseadjustment;
908extern int shootdelta;
909extern unsigned screenofs;
910
911extern boolean startgame;
912extern char str[80];
913extern char configdir[256];
914extern char configname[13];
915
916//
917// Command line parameter variables
918//
919extern boolean param_debugmode;
920extern boolean param_nowait;
921extern int param_difficulty;
922extern int param_tedlevel;
923extern int param_joystickindex;
924extern int param_joystickhat;
925extern int param_samplerate;
926extern int param_audiobuffer;
927extern int param_mission;
928extern boolean param_goodtimes;
929extern boolean param_ignorenumchunks;
930
931
932void NewGame (int difficulty,int episode);
933void CalcProjection (int32_t focal);
934void NewViewSize (int width);
935boolean SetViewSize (unsigned width, unsigned height);
936boolean LoadTheGame(FILE *file,int x,int y);
937boolean SaveTheGame(FILE *file,int x,int y);
938void ShowViewSize (int width);
939void ShutdownId (void);
940
941
942/*
943=============================================================================
944
945 WL_GAME DEFINITIONS
946
947=============================================================================
948*/
949
950extern gametype gamestate;
951extern byte bordercol;
952extern SDL_Surface *latchpics[NUMLATCHPICS];
953extern char demoname[13];
954
955void SetupGameLevel (void);
956void GameLoop (void);
957void DrawPlayBorder (void);
958void DrawStatusBorder (byte color);
959void DrawPlayScreen (void);
960void DrawPlayBorderSides (void);
961void ShowActStatus();
962
963void PlayDemo (int demonumber);
964void RecordDemo (void);
965
966
967#ifdef SPEAR
968extern int32_t spearx,speary;
969extern unsigned spearangle;
970extern boolean spearflag;
971#endif
972
973
974#define ClearMemory SD_StopDigitized
975
976
977// JAB
978#define PlaySoundLocTile(s,tx,ty) PlaySoundLocGlobal(s,(((int32_t)(tx) << TILESHIFT) + (1L << (TILESHIFT - 1))),(((int32_t)ty << TILESHIFT) + (1L << (TILESHIFT - 1))))
979#define PlaySoundLocActor(s,ob) PlaySoundLocGlobal(s,(ob)->x,(ob)->y)
980void PlaySoundLocGlobal(word s,fixed gx,fixed gy);
981void UpdateSoundLoc(void);
982
983
984/*
985=============================================================================
986
987 WL_PLAY DEFINITIONS
988
989=============================================================================
990*/
991
992#define BASEMOVE 35
993#define RUNMOVE 70
994#define BASETURN 35
995#define RUNTURN 70
996
997#define JOYSCALE 2
998
999extern byte tilemap[MAPSIZE][MAPSIZE]; // wall values only
1000extern byte spotvis[MAPSIZE][MAPSIZE];
1001extern objtype *actorat[MAPSIZE][MAPSIZE];
1002
1003extern objtype *player;
1004
1005extern unsigned tics;
1006extern int viewsize;
1007
1008extern int lastgamemusicoffset;
1009
1010//
1011// current user input
1012//
1013extern int controlx,controly; // range from -100 to 100
1014extern boolean buttonstate[NUMBUTTONS];
1015extern objtype objlist[MAXACTORS];
1016extern boolean buttonheld[NUMBUTTONS];
1017extern exit_t playstate;
1018extern boolean madenoise;
1019extern statobj_t statobjlist[MAXSTATS];
1020extern statobj_t *laststatobj;
1021extern objtype *newobj,*killerobj;
1022extern doorobj_t doorobjlist[MAXDOORS];
1023extern doorobj_t *lastdoorobj;
1024extern int godmode;
1025
1026extern boolean demorecord,demoplayback;
1027extern int8_t *demoptr, *lastdemoptr;
1028extern memptr demobuffer;
1029
1030//
1031// control info
1032//
1033extern boolean mouseenabled,joystickenabled;
1034extern int dirscan[4];
1035extern int buttonscan[NUMBUTTONS];
1036extern int buttonmouse[4];
1037extern int buttonjoy[32];
1038
1039void InitActorList (void);
1040void GetNewActor (void);
1041void PlayLoop (void);
1042
1043void CenterWindow(word w,word h);
1044
1045void InitRedShifts (void);
1046void FinishPaletteShifts (void);
1047
1048void RemoveObj (objtype *gone);
1049void PollControls (void);
1050int StopMusic(void);
1051void StartMusic(void);
1052void ContinueMusic(int offs);
1053void StartDamageFlash (int damage);
1054void StartBonusFlash (void);
1055
1056#ifdef SPEAR
1057extern int32_t funnyticount; // FOR FUNNY BJ FACE
1058#endif
1059
1060extern objtype *objfreelist; // *obj,*player,*lastobj,
1061
1062extern boolean noclip,ammocheat;
1063extern int singlestep, extravbls;
1064
1065/*
1066=============================================================================
1067
1068 WL_INTER
1069
1070=============================================================================
1071*/
1072
1073void IntroScreen (void);
1074void PG13(void);
1075void DrawHighScores(void);
1076void CheckHighScore (int32_t score,word other);
1077void Victory (void);
1078void LevelCompleted (void);
1079void ClearSplitVWB (void);
1080
1081void PreloadGraphics(void);
1082
1083
1084/*
1085=============================================================================
1086
1087 WL_DEBUG
1088
1089=============================================================================
1090*/
1091
1092int DebugKeys (void);
1093
1094/*
1095=============================================================================
1096
1097 WL_DRAW DEFINITIONS
1098
1099=============================================================================
1100*/
1101
1102//
1103// math tables
1104//
1105extern short *pixelangle;
1106extern int32_t finetangent[FINEANGLES/4];
1107extern fixed sintable[];
1108extern fixed *costable;
1109extern int *wallheight;
1110extern word horizwall[],vertwall[];
1111extern int32_t lasttimecount;
1112extern int32_t frameon;
1113
1114extern unsigned screenloc[3];
1115
1116extern boolean fizzlein, fpscounter;
1117
1118extern fixed viewx,viewy; // the focal point
1119extern fixed viewsin,viewcos;
1120
1121void ThreeDRefresh (void);
1122void CalcTics (void);
1123
1124typedef struct
1125{
1126 word leftpix,rightpix;
1127 word dataofs[64];
1128// table data after dataofs[rightpix-leftpix+1]
1129} t_compshape;
1130
1131/*
1132=============================================================================
1133
1134 WL_STATE DEFINITIONS
1135
1136=============================================================================
1137*/
1138#define TURNTICS 10
1139#define SPDPATROL 512
1140#define SPDDOG 1500
1141
1142
1143void InitHitRect (objtype *ob, unsigned radius);
1144void SpawnNewObj (unsigned tilex, unsigned tiley, statetype *state);
1145void NewState (objtype *ob, statetype *state);
1146
1147boolean TryWalk (objtype *ob);
1148void SelectChaseDir (objtype *ob);
1149void SelectDodgeDir (objtype *ob);
1150void SelectRunDir (objtype *ob);
1151void MoveObj (objtype *ob, int32_t move);
1152boolean SightPlayer (objtype *ob);
1153
1154void KillActor (objtype *ob);
1155void DamageActor (objtype *ob, unsigned damage);
1156
1157boolean CheckLine (objtype *ob);
1158boolean CheckSight (objtype *ob);
1159
1160/*
1161=============================================================================
1162
1163 WL_AGENT DEFINITIONS
1164
1165=============================================================================
1166*/
1167
1168extern short anglefrac;
1169extern int facecount, facetimes;
1170extern word plux,pluy; // player coordinates scaled to unsigned
1171extern int32_t thrustspeed;
1172extern objtype *LastAttacker;
1173
1174void Thrust (int angle, int32_t speed);
1175void SpawnPlayer (int tilex, int tiley, int dir);
1176void TakeDamage (int points,objtype *attacker);
1177void GivePoints (int32_t points);
1178void GetBonus (statobj_t *check);
1179void GiveWeapon (int weapon);
1180void GiveAmmo (int ammo);
1181void GiveKey (int key);
1182
1183//
1184// player state info
1185//
1186
1187void StatusDrawFace(unsigned picnum);
1188void DrawFace (void);
1189void DrawHealth (void);
1190void HealSelf (int points);
1191void DrawLevel (void);
1192void DrawLives (void);
1193void GiveExtraMan (void);
1194void DrawScore (void);
1195void DrawWeapon (void);
1196void DrawKeys (void);
1197void DrawAmmo (void);
1198
1199
1200/*
1201=============================================================================
1202
1203 WL_ACT1 DEFINITIONS
1204
1205=============================================================================
1206*/
1207
1208extern doorobj_t doorobjlist[MAXDOORS];
1209extern doorobj_t *lastdoorobj;
1210extern short doornum;
1211
1212extern word doorposition[MAXDOORS];
1213
1214extern byte areaconnect[NUMAREAS][NUMAREAS];
1215
1216extern boolean areabyplayer[NUMAREAS];
1217
1218extern word pwallstate;
1219extern word pwallpos; // amount a pushable wall has been moved (0-63)
1220extern word pwallx,pwally;
1221extern byte pwalldir,pwalltile;
1222
1223
1224void InitDoorList (void);
1225void InitStaticList (void);
1226void SpawnStatic (int tilex, int tiley, int type);
1227void SpawnDoor (int tilex, int tiley, boolean vertical, int lock);
1228void MoveDoors (void);
1229void MovePWalls (void);
1230void OpenDoor (int door);
1231void PlaceItemType (int itemtype, int tilex, int tiley);
1232void PushWall (int checkx, int checky, int dir);
1233void OperateDoor (int door);
1234void InitAreas (void);
1235
1236/*
1237=============================================================================
1238
1239 WL_ACT2 DEFINITIONS
1240
1241=============================================================================
1242*/
1243
1244#define s_nakedbody s_static10
1245
1246extern statetype s_grddie1;
1247extern statetype s_dogdie1;
1248extern statetype s_ofcdie1;
1249extern statetype s_mutdie1;
1250extern statetype s_ssdie1;
1251extern statetype s_bossdie1;
1252extern statetype s_schabbdie1;
1253extern statetype s_fakedie1;
1254extern statetype s_mechadie1;
1255extern statetype s_hitlerdie1;
1256extern statetype s_greteldie1;
1257extern statetype s_giftdie1;
1258extern statetype s_fatdie1;
1259
1260extern statetype s_spectredie1;
1261extern statetype s_angeldie1;
1262extern statetype s_transdie0;
1263extern statetype s_uberdie0;
1264extern statetype s_willdie1;
1265extern statetype s_deathdie1;
1266
1267
1268extern statetype s_grdchase1;
1269extern statetype s_dogchase1;
1270extern statetype s_ofcchase1;
1271extern statetype s_sschase1;
1272extern statetype s_mutchase1;
1273extern statetype s_bosschase1;
1274extern statetype s_schabbchase1;
1275extern statetype s_fakechase1;
1276extern statetype s_mechachase1;
1277extern statetype s_gretelchase1;
1278extern statetype s_giftchase1;
1279extern statetype s_fatchase1;
1280
1281extern statetype s_spectrechase1;
1282extern statetype s_angelchase1;
1283extern statetype s_transchase1;
1284extern statetype s_uberchase1;
1285extern statetype s_willchase1;
1286extern statetype s_deathchase1;
1287
1288extern statetype s_blinkychase1;
1289extern statetype s_hitlerchase1;
1290
1291extern statetype s_grdpain;
1292extern statetype s_grdpain1;
1293extern statetype s_ofcpain;
1294extern statetype s_ofcpain1;
1295extern statetype s_sspain;
1296extern statetype s_sspain1;
1297extern statetype s_mutpain;
1298extern statetype s_mutpain1;
1299
1300extern statetype s_deathcam;
1301
1302extern statetype s_schabbdeathcam2;
1303extern statetype s_hitlerdeathcam2;
1304extern statetype s_giftdeathcam2;
1305extern statetype s_fatdeathcam2;
1306
1307void SpawnStand (enemy_t which, int tilex, int tiley, int dir);
1308void SpawnPatrol (enemy_t which, int tilex, int tiley, int dir);
1309void KillActor (objtype *ob);
1310
1311void SpawnDeadGuard (int tilex, int tiley);
1312void SpawnBoss (int tilex, int tiley);
1313void SpawnGretel (int tilex, int tiley);
1314void SpawnTrans (int tilex, int tiley);
1315void SpawnUber (int tilex, int tiley);
1316void SpawnWill (int tilex, int tiley);
1317void SpawnDeath (int tilex, int tiley);
1318void SpawnAngel (int tilex, int tiley);
1319void SpawnSpectre (int tilex, int tiley);
1320void SpawnGhosts (int which, int tilex, int tiley);
1321void SpawnSchabbs (int tilex, int tiley);
1322void SpawnGift (int tilex, int tiley);
1323void SpawnFat (int tilex, int tiley);
1324void SpawnFakeHitler (int tilex, int tiley);
1325void SpawnHitler (int tilex, int tiley);
1326
1327void A_DeathScream (objtype *ob);
1328void SpawnBJVictory (void);
1329
1330/*
1331=============================================================================
1332
1333 WL_TEXT DEFINITIONS
1334
1335=============================================================================
1336*/
1337
1338extern char helpfilename[],endfilename[];
1339
1340extern void HelpScreens(void);
1341extern void EndText(void);
1342
1343
1344/*
1345=============================================================================
1346
1347 GP2X DEFINITIONS
1348
1349=============================================================================
1350*/
1351
1352#if defined(GP2X)
1353
1354#if defined(GP2X_940)
1355void GP2X_MemoryInit(void);
1356void GP2X_Shutdown(void);
1357#endif
1358void GP2X_ButtonDown(int button);
1359void GP2X_ButtonUp(int button);
1360
1361#endif
1362
1363
1364/*
1365=============================================================================
1366
1367 MISC DEFINITIONS
1368
1369=============================================================================
1370*/
1371
1372static fixed FixedMul(fixed a, fixed b)
1373{
1374 return (fixed)(((int64_t)a * b + 0x8000) >> 16);
1375}
1376
1377#ifdef PLAYDEMOLIKEORIGINAL
1378 #define DEMOCHOOSE_ORIG_SDL(orig, sdl) ((demorecord || demoplayback) ? (orig) : (sdl))
1379 #define DEMOCOND_ORIG (demorecord || demoplayback)
1380 #define DEMOIF_SDL if(DEMOCOND_SDL)
1381#else
1382 #define DEMOCHOOSE_ORIG_SDL(orig, sdl) (sdl)
1383 #define DEMOCOND_ORIG false
1384 #define DEMOIF_SDL
1385#endif
1386#define DEMOCOND_SDL (!DEMOCOND_ORIG)
1387
1388#define GetTicks() ((SDL_GetTicks()*7)/100)
1389
1390#define ISPOINTER(x) ((((uintptr_t)(x)) & ~0xffff) != 0)
1391
1392#define CHECKMALLOCRESULT(x) if(!(x)) Quit("Out of memory at %s:%i", __FILE__, __LINE__)
1393
1394#ifdef _WIN32
1395 #define strcasecmp stricmp
1396 #define strncasecmp strnicmp
1397 #define snprintf _snprintf
1398#else
1399 static char* itoa(int value, char* string, int radix)
1400 {
1401 sprintf(string, "%d", value);
1402 return string;
1403 }
1404
1405 static char* ltoa(long value, char* string, int radix)
1406 {
1407 sprintf(string, "%ld", value);
1408 return string;
1409 }
1410#endif
1411
1412#define lengthof(x) (sizeof(x) / sizeof(*(x)))
1413#define endof(x) ((x) + lengthof(x))
1414
1415static word READWORD(byte **ptr)
1416{
1417 word val = (*ptr)[0] | (*ptr)[1] << 8;
1418 *ptr += 2;
1419 return val;
1420}
1421
1422static longword READLONGWORD(byte **ptr)
1423{
1424 longword val = (*ptr)[0] | (*ptr)[1] << 8 | (*ptr)[2] << 16 | (*ptr)[3] << 24;
1425 *ptr += 4;
1426 return val;
1427}
1428
1429
1430/*
1431=============================================================================
1432
1433 FEATURE DEFINITIONS
1434
1435=============================================================================
1436*/
1437
1438#ifdef USE_FEATUREFLAGS
1439 // The currently available feature flags
1440 #define FF_STARSKY 0x0001
1441 #define FF_PARALLAXSKY 0x0002
1442 #define FF_CLOUDSKY 0x0004
1443 #define FF_RAIN 0x0010
1444 #define FF_SNOW 0x0020
1445
1446 // The ffData... variables contain the 16-bit values of the according corners of the current level.
1447 // The corners are overwritten with adjacent tiles after initialization in SetupGameLevel
1448 // to avoid interpretation as e.g. doors.
1449 extern int ffDataTopLeft, ffDataTopRight, ffDataBottomLeft, ffDataBottomRight;
1450
1451 /*************************************************************
1452 * Current usage of ffData... variables:
1453 * ffDataTopLeft: lower 8-bit: ShadeDefID
1454 * ffDataTopRight: FeatureFlags
1455 * ffDataBottomLeft: CloudSkyDefID or ParallaxStartTexture
1456 * ffDataBottomRight: unused
1457 *************************************************************/
1458
1459 // The feature flags are stored as a wall in the upper right corner of each level
1460 static word GetFeatureFlags()
1461 {
1462 return ffDataTopRight;
1463 }
1464
1465#endif
1466
1467#ifdef USE_FLOORCEILINGTEX
1468 void DrawFloorAndCeiling(byte *vbuf, unsigned vbufPitch, int min_wallheight);
1469#endif
1470
1471#ifdef USE_PARALLAX
1472 void DrawParallax(byte *vbuf, unsigned vbufPitch);
1473#endif
1474
1475#ifdef USE_DIR3DSPR
1476 void Scale3DShape(byte *vbuf, unsigned vbufPitch, statobj_t *ob);
1477#endif
1478
1479#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 @@
1#include "version.h"
2
3#ifdef USE_DIR3DSPR
4#include "wl_def.h"
5#include "wl_shade.h"
6
7// Define directional 3d sprites in wl_act1.cpp (there are two examples)
8// Make sure you have according entries in ScanInfoPlane in wl_game.cpp.
9
10
11void Scale3DShaper(int x1, int x2, int shapenum, uint32_t flags, fixed ny1, fixed ny2,
12 fixed nx1, fixed nx2, byte *vbuf, unsigned vbufPitch)
13{
14 t_compshape *shape;
15 unsigned scale1,starty,endy;
16 word *cmdptr;
17 byte *line;
18 byte *vmem;
19 int dx,len,i,newstart,ycnt,pixheight,screndy,upperedge,scrstarty;
20 unsigned j;
21 fixed height,dheight,height1,height2;
22 int xpos[TEXTURESIZE+1];
23 int slinex;
24 fixed dxx=(ny2-ny1)<<8,dzz=(nx2-nx1)<<8;
25 fixed dxa=0,dza=0;
26 byte col;
27
28 shape = (t_compshape *) PM_GetSprite(shapenum);
29
30 len=shape->rightpix-shape->leftpix+1;
31 if(!len) return;
32
33 ny1+=dxx>>9;
34 nx1+=dzz>>9;
35
36 dxa=-(dxx>>1),dza=-(dzz>>1);
37 dxx>>=TEXTURESHIFT,dzz>>=TEXTURESHIFT;
38 dxa+=shape->leftpix*dxx,dza+=shape->leftpix*dzz;
39
40 xpos[0]=(int)((ny1+(dxa>>8))*scale/(nx1+(dza>>8))+centerx);
41 height1 = heightnumerator/((nx1+(dza>>8))>>8);
42 height=(((fixed)height1)<<12)+2048;
43
44 for(i=1;i<=len;i++)
45 {
46 dxa+=dxx,dza+=dzz;
47 xpos[i]=(int)((ny1+(dxa>>8))*scale/(nx1+(dza>>8))+centerx);
48 if(xpos[i-1]>viewwidth) break;
49 }
50 len=i-1;
51 dx = xpos[len] - xpos[0];
52 if(!dx) return;
53
54 height2 = heightnumerator/((nx1+(dza>>8))>>8);
55 dheight=(((fixed)height2-(fixed)height1)<<12)/(fixed)dx;
56
57 cmdptr = (word *) shape->dataofs;
58
59 i=0;
60 if(x2>viewwidth) x2=viewwidth;
61
62 for(i=0;i<len;i++)
63 {
64 for(slinex=xpos[i];slinex<xpos[i+1] && slinex<x2;slinex++)
65 {
66 height+=dheight;
67 if(slinex<0) continue;
68
69 scale1=(unsigned)(height>>15);
70
71 if(wallheight[slinex]<(height>>12) && scale1 /*&& scale1<=maxscale*/)
72 {
73#ifdef USE_SHADING
74 byte *curshades;
75 if(flags & FL_FULLBRIGHT)
76 curshades = shadetable[0];
77 else
78 curshades = shadetable[GetShade(scale1<<3)];
79#endif
80
81 pixheight=scale1*SPRITESCALEFACTOR;
82 upperedge=viewheight/2-scale1;
83
84 line=(byte *)shape + cmdptr[i];
85
86 while((endy = READWORD(&line)) != 0)
87 {
88 endy >>= 1;
89 newstart = READWORD(&line);
90 starty = READWORD(&line) >> 1;
91 j=starty;
92 ycnt=j*pixheight;
93 screndy=(ycnt>>6)+upperedge;
94 if(screndy<0) vmem=vbuf+slinex;
95 else vmem=vbuf+screndy*vbufPitch+slinex;
96 for(;j<endy;j++)
97 {
98 scrstarty=screndy;
99 ycnt+=pixheight;
100 screndy=(ycnt>>6)+upperedge;
101 if(scrstarty!=screndy && screndy>0)
102 {
103#ifdef USE_SHADING
104 col=curshades[((byte *)shape)[newstart+j]];
105#else
106 col=((byte *)shape)[newstart+j];
107#endif
108 if(scrstarty<0) scrstarty=0;
109 if(screndy>viewheight) screndy=viewheight,j=endy;
110
111 while(scrstarty<screndy)
112 {
113 *vmem=col;
114 vmem+=vbufPitch;
115 scrstarty++;
116 }
117 }
118 }
119 }
120 }
121 }
122 }
123}
124
125void Scale3DShape(byte *vbuf, unsigned vbufPitch, statobj_t *ob)
126{
127 fixed nx1,nx2,ny1,ny2;
128 int viewx1,viewx2;
129 fixed diradd;
130 fixed playx = viewx;
131 fixed playy = viewy;
132
133 //
134 // the following values for "diradd" aren't optimized yet
135 // if you have problems with sprites being visible through wall edges
136 // where they shouldn't, you can try to adjust these values and SIZEADD
137 //
138
139#define SIZEADD 1024
140
141 switch(ob->flags & FL_DIR_POS_MASK)
142 {
143 case FL_DIR_POS_FW: diradd=0x7ff0+0x8000; break;
144 case FL_DIR_POS_BW: diradd=-0x7ff0+0x8000; break;
145 case FL_DIR_POS_MID: diradd=0x8000; break;
146 default:
147 Quit("Unknown directional 3d sprite position (shapenum = %i)", ob->shapenum);
148 }
149
150 if(ob->flags & FL_DIR_VERT_FLAG) // vertical dir 3d sprite
151 {
152 fixed gy1,gy2,gx,gyt1,gyt2,gxt;
153 //
154 // translate point to view centered coordinates
155 //
156 gy1 = (((long)ob->tiley) << TILESHIFT)+0x8000-playy-0x8000L-SIZEADD;
157 gy2 = gy1+0x10000L+2*SIZEADD;
158 gx = (((long)ob->tilex) << TILESHIFT)+diradd-playx;
159
160 //
161 // calculate newx
162 //
163 gxt = FixedMul(gx,viewcos);
164 gyt1 = FixedMul(gy1,viewsin);
165 gyt2 = FixedMul(gy2,viewsin);
166 nx1 = gxt-gyt1;
167 nx2 = gxt-gyt2;
168
169 //
170 // calculate newy
171 //
172 gxt = FixedMul(gx,viewsin);
173 gyt1 = FixedMul(gy1,viewcos);
174 gyt2 = FixedMul(gy2,viewcos);
175 ny1 = gyt1+gxt;
176 ny2 = gyt2+gxt;
177 }
178 else // horizontal dir 3d sprite
179 {
180 fixed gx1,gx2,gy,gxt1,gxt2,gyt;
181 //
182 // translate point to view centered coordinates
183 //
184 gx1 = (((long)ob->tilex) << TILESHIFT)+0x8000-playx-0x8000L-SIZEADD;
185 gx2 = gx1+0x10000L+2*SIZEADD;
186 gy = (((long)ob->tiley) << TILESHIFT)+diradd-playy;
187
188 //
189 // calculate newx
190 //
191 gxt1 = FixedMul(gx1,viewcos);
192 gxt2 = FixedMul(gx2,viewcos);
193 gyt = FixedMul(gy,viewsin);
194 nx1 = gxt1-gyt;
195 nx2 = gxt2-gyt;
196
197 //
198 // calculate newy
199 //
200 gxt1 = FixedMul(gx1,viewsin);
201 gxt2 = FixedMul(gx2,viewsin);
202 gyt = FixedMul(gy,viewcos);
203 ny1 = gyt+gxt1;
204 ny2 = gyt+gxt2;
205 }
206
207 if(nx1 < 0 || nx2 < 0) return; // TODO: Clip on viewplane
208
209 //
210 // calculate perspective ratio
211 //
212 if(nx1>=0 && nx1<=1792) nx1=1792;
213 if(nx1<0 && nx1>=-1792) nx1=-1792;
214 if(nx2>=0 && nx2<=1792) nx2=1792;
215 if(nx2<0 && nx2>=-1792) nx2=-1792;
216
217 viewx1=(int)(centerx+ny1*scale/nx1);
218 viewx2=(int)(centerx+ny2*scale/nx2);
219
220 if(viewx2 < viewx1)
221 {
222 Scale3DShaper(viewx2,viewx1,ob->shapenum,ob->flags,ny2,ny1,nx2,nx1,vbuf,vbufPitch);
223 }
224 else
225 {
226 Scale3DShaper(viewx1,viewx2,ob->shapenum,ob->flags,ny1,ny2,nx1,nx2,vbuf,vbufPitch);
227 }
228}
229
230#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 @@
1// WL_DRAW.C
2
3#include "wl_def.h"
4#pragma hdrstop
5
6#include "wl_cloudsky.h"
7#include "wl_atmos.h"
8#include "wl_shade.h"
9
10/*
11=============================================================================
12
13 LOCAL CONSTANTS
14
15=============================================================================
16*/
17
18// the door is the last picture before the sprites
19#define DOORWALL (PMSpriteStart-8)
20
21#define ACTORSIZE 0x4000
22
23/*
24=============================================================================
25
26 GLOBAL VARIABLES
27
28=============================================================================
29*/
30
31static byte *vbuf = NULL;
32unsigned vbufPitch = 0;
33
34int32_t lasttimecount;
35int32_t frameon;
36boolean fpscounter;
37
38int fps_frames=0, fps_time=0, fps=0;
39
40int *wallheight;
41int min_wallheight;
42
43//
44// math tables
45//
46short *pixelangle;
47int32_t finetangent[FINEANGLES/4];
48fixed sintable[ANGLES+ANGLES/4];
49fixed *costable = sintable+(ANGLES/4);
50
51//
52// refresh variables
53//
54fixed viewx,viewy; // the focal point
55short viewangle;
56fixed viewsin,viewcos;
57
58void TransformActor (objtype *ob);
59void BuildTables (void);
60void ClearScreen (void);
61int CalcRotate (objtype *ob);
62void DrawScaleds (void);
63void CalcTics (void);
64void ThreeDRefresh (void);
65
66
67
68//
69// wall optimization variables
70//
71int lastside; // true for vertical
72int32_t lastintercept;
73int lasttilehit;
74int lasttexture;
75
76//
77// ray tracing variables
78//
79short focaltx,focalty,viewtx,viewty;
80longword xpartialup,xpartialdown,ypartialup,ypartialdown;
81
82short midangle,angle;
83
84word tilehit;
85int pixx;
86
87short xtile,ytile;
88short xtilestep,ytilestep;
89int32_t xintercept,yintercept;
90word xstep,ystep;
91word xspot,yspot;
92int texdelta;
93
94word horizwall[MAXWALLTILES],vertwall[MAXWALLTILES];
95
96
97/*
98============================================================================
99
100 3 - D DEFINITIONS
101
102============================================================================
103*/
104
105/*
106========================
107=
108= TransformActor
109=
110= Takes paramaters:
111= gx,gy : globalx/globaly of point
112=
113= globals:
114= viewx,viewy : point of view
115= viewcos,viewsin : sin/cos of viewangle
116= scale : conversion from global value to screen value
117=
118= sets:
119= screenx,transx,transy,screenheight: projected edge location and size
120=
121========================
122*/
123
124
125//
126// transform actor
127//
128void TransformActor (objtype *ob)
129{
130 fixed gx,gy,gxt,gyt,nx,ny;
131
132//
133// translate point to view centered coordinates
134//
135 gx = ob->x-viewx;
136 gy = ob->y-viewy;
137
138//
139// calculate newx
140//
141 gxt = FixedMul(gx,viewcos);
142 gyt = FixedMul(gy,viewsin);
143 nx = gxt-gyt-ACTORSIZE; // fudge the shape forward a bit, because
144 // the midpoint could put parts of the shape
145 // into an adjacent wall
146
147//
148// calculate newy
149//
150 gxt = FixedMul(gx,viewsin);
151 gyt = FixedMul(gy,viewcos);
152 ny = gyt+gxt;
153
154//
155// calculate perspective ratio
156//
157 ob->transx = nx;
158 ob->transy = ny;
159
160 if (nx<MINDIST) // too close, don't overflow the divide
161 {
162 ob->viewheight = 0;
163 return;
164 }
165
166 ob->viewx = (word)(centerx + ny*scale/nx);
167
168//
169// calculate height (heightnumerator/(nx>>8))
170//
171 ob->viewheight = (word)(heightnumerator/(nx>>8));
172}
173
174//==========================================================================
175
176/*
177========================
178=
179= TransformTile
180=
181= Takes paramaters:
182= tx,ty : tile the object is centered in
183=
184= globals:
185= viewx,viewy : point of view
186= viewcos,viewsin : sin/cos of viewangle
187= scale : conversion from global value to screen value
188=
189= sets:
190= screenx,transx,transy,screenheight: projected edge location and size
191=
192= Returns true if the tile is withing getting distance
193=
194========================
195*/
196
197boolean TransformTile (int tx, int ty, short *dispx, short *dispheight)
198{
199 fixed gx,gy,gxt,gyt,nx,ny;
200
201//
202// translate point to view centered coordinates
203//
204 gx = ((int32_t)tx<<TILESHIFT)+0x8000-viewx;
205 gy = ((int32_t)ty<<TILESHIFT)+0x8000-viewy;
206
207//
208// calculate newx
209//
210 gxt = FixedMul(gx,viewcos);
211 gyt = FixedMul(gy,viewsin);
212 nx = gxt-gyt-0x2000; // 0x2000 is size of object
213
214//
215// calculate newy
216//
217 gxt = FixedMul(gx,viewsin);
218 gyt = FixedMul(gy,viewcos);
219 ny = gyt+gxt;
220
221
222//
223// calculate height / perspective ratio
224//
225 if (nx<MINDIST) // too close, don't overflow the divide
226 *dispheight = 0;
227 else
228 {
229 *dispx = (short)(centerx + ny*scale/nx);
230 *dispheight = (short)(heightnumerator/(nx>>8));
231 }
232
233//
234// see if it should be grabbed
235//
236 if (nx<TILEGLOBAL && ny>-TILEGLOBAL/2 && ny<TILEGLOBAL/2)
237 return true;
238 else
239 return false;
240}
241
242//==========================================================================
243
244/*
245====================
246=
247= CalcHeight
248=
249= Calculates the height of xintercept,yintercept from viewx,viewy
250=
251====================
252*/
253
254int CalcHeight()
255{
256 fixed z = FixedMul(xintercept - viewx, viewcos)
257 - FixedMul(yintercept - viewy, viewsin);
258 if(z < MINDIST) z = MINDIST;
259 int height = heightnumerator / (z >> 8);
260 if(height < min_wallheight) min_wallheight = height;
261 return height;
262}
263
264//==========================================================================
265
266/*
267===================
268=
269= ScalePost
270=
271===================
272*/
273
274byte *postsource;
275int postx;
276int postwidth;
277
278void ScalePost()
279{
280 int ywcount, yoffs, yw, yd, yendoffs;
281 byte col;
282
283#ifdef USE_SHADING
284 byte *curshades = shadetable[GetShade(wallheight[postx])];
285#endif
286
287 ywcount = yd = wallheight[postx] >> 3;
288 if(yd <= 0) yd = 100;
289
290 yoffs = (viewheight / 2 - ywcount) * vbufPitch;
291 if(yoffs < 0) yoffs = 0;
292 yoffs += postx;
293
294 yendoffs = viewheight / 2 + ywcount - 1;
295 yw=TEXTURESIZE-1;
296
297 while(yendoffs >= viewheight)
298 {
299 ywcount -= TEXTURESIZE/2;
300 while(ywcount <= 0)
301 {
302 ywcount += yd;
303 yw--;
304 }
305 yendoffs--;
306 }
307 if(yw < 0) return;
308
309#ifdef USE_SHADING
310 col = curshades[postsource[yw]];
311#else
312 col = postsource[yw];
313#endif
314 yendoffs = yendoffs * vbufPitch + postx;
315 while(yoffs <= yendoffs)
316 {
317 vbuf[yendoffs] = col;
318 ywcount -= TEXTURESIZE/2;
319 if(ywcount <= 0)
320 {
321 do
322 {
323 ywcount += yd;
324 yw--;
325 }
326 while(ywcount <= 0);
327 if(yw < 0) break;
328#ifdef USE_SHADING
329 col = curshades[postsource[yw]];
330#else
331 col = postsource[yw];
332#endif
333 }
334 yendoffs -= vbufPitch;
335 }
336}
337
338void GlobalScalePost(byte *vidbuf, unsigned pitch)
339{
340 vbuf = vidbuf;
341 vbufPitch = pitch;
342 ScalePost();
343}
344
345/*
346====================
347=
348= HitVertWall
349=
350= tilehit bit 7 is 0, because it's not a door tile
351= if bit 6 is 1 and the adjacent tile is a door tile, use door side pic
352=
353====================
354*/
355
356void HitVertWall (void)
357{
358 int wallpic;
359 int texture;
360
361 texture = ((yintercept+texdelta)>>TEXTUREFROMFIXEDSHIFT)&TEXTUREMASK;
362 if (xtilestep == -1)
363 {
364 texture = TEXTUREMASK-texture;
365 xintercept += TILEGLOBAL;
366 }
367
368 if(lastside==1 && lastintercept==xtile && lasttilehit==tilehit && !(lasttilehit & 0x40))
369 {
370 if((pixx&3) && texture == lasttexture)
371 {
372 ScalePost();
373 postx = pixx;
374 wallheight[pixx] = wallheight[pixx-1];
375 return;
376 }
377 ScalePost();
378 wallheight[pixx] = CalcHeight();
379 postsource+=texture-lasttexture;
380 postwidth=1;
381 postx=pixx;
382 lasttexture=texture;
383 return;
384 }
385
386 if(lastside!=-1) ScalePost();
387
388 lastside=1;
389 lastintercept=xtile;
390 lasttilehit=tilehit;
391 lasttexture=texture;
392 wallheight[pixx] = CalcHeight();
393 postx = pixx;
394 postwidth = 1;
395
396 if (tilehit & 0x40)
397 { // check for adjacent doors
398 ytile = (short)(yintercept>>TILESHIFT);
399 if ( tilemap[xtile-xtilestep][ytile]&0x80 )
400 wallpic = DOORWALL+3;
401 else
402 wallpic = vertwall[tilehit & ~0x40];
403 }
404 else
405 wallpic = vertwall[tilehit];
406
407 postsource = PM_GetTexture(wallpic) + texture;
408}
409
410
411/*
412====================
413=
414= HitHorizWall
415=
416= tilehit bit 7 is 0, because it's not a door tile
417= if bit 6 is 1 and the adjacent tile is a door tile, use door side pic
418=
419====================
420*/
421
422void HitHorizWall (void)
423{
424 int wallpic;
425 int texture;
426
427 texture = ((xintercept+texdelta)>>TEXTUREFROMFIXEDSHIFT)&TEXTUREMASK;
428 if (ytilestep == -1)
429 yintercept += TILEGLOBAL;
430 else
431 texture = TEXTUREMASK-texture;
432
433 if(lastside==0 && lastintercept==ytile && lasttilehit==tilehit && !(lasttilehit & 0x40))
434 {
435 if((pixx&3) && texture == lasttexture)
436 {
437 ScalePost();
438 postx=pixx;
439 wallheight[pixx] = wallheight[pixx-1];
440 return;
441 }
442 ScalePost();
443 wallheight[pixx] = CalcHeight();
444 postsource+=texture-lasttexture;
445 postwidth=1;
446 postx=pixx;
447 lasttexture=texture;
448 return;
449 }
450
451 if(lastside!=-1) ScalePost();
452
453 lastside=0;
454 lastintercept=ytile;
455 lasttilehit=tilehit;
456 lasttexture=texture;
457 wallheight[pixx] = CalcHeight();
458 postx = pixx;
459 postwidth = 1;
460
461 if (tilehit & 0x40)
462 { // check for adjacent doors
463 xtile = (short)(xintercept>>TILESHIFT);
464 if ( tilemap[xtile][ytile-ytilestep]&0x80)
465 wallpic = DOORWALL+2;
466 else
467 wallpic = horizwall[tilehit & ~0x40];
468 }
469 else
470 wallpic = horizwall[tilehit];
471
472 postsource = PM_GetTexture(wallpic) + texture;
473}
474
475//==========================================================================
476
477/*
478====================
479=
480= HitHorizDoor
481=
482====================
483*/
484
485void HitHorizDoor (void)
486{
487 int doorpage;
488 int doornum;
489 int texture;
490
491 doornum = tilehit&0x7f;
492 texture = ((xintercept-doorposition[doornum])>>TEXTUREFROMFIXEDSHIFT)&TEXTUREMASK;
493
494 if(lasttilehit==tilehit)
495 {
496 if((pixx&3) && texture == lasttexture)
497 {
498 ScalePost();
499 postx=pixx;
500 wallheight[pixx] = wallheight[pixx-1];
501 return;
502 }
503 ScalePost();
504 wallheight[pixx] = CalcHeight();
505 postsource+=texture-lasttexture;
506 postwidth=1;
507 postx=pixx;
508 lasttexture=texture;
509 return;
510 }
511
512 if(lastside!=-1) ScalePost();
513
514 lastside=2;
515 lasttilehit=tilehit;
516 lasttexture=texture;
517 wallheight[pixx] = CalcHeight();
518 postx = pixx;
519 postwidth = 1;
520
521 switch(doorobjlist[doornum].lock)
522 {
523 case dr_normal:
524 doorpage = DOORWALL;
525 break;
526 case dr_lock1:
527 case dr_lock2:
528 case dr_lock3:
529 case dr_lock4:
530 doorpage = DOORWALL+6;
531 break;
532 case dr_elevator:
533 doorpage = DOORWALL+4;
534 break;
535 }
536
537 postsource = PM_GetTexture(doorpage) + texture;
538}
539
540//==========================================================================
541
542/*
543====================
544=
545= HitVertDoor
546=
547====================
548*/
549
550void HitVertDoor (void)
551{
552 int doorpage;
553 int doornum;
554 int texture;
555
556 doornum = tilehit&0x7f;
557 texture = ((yintercept-doorposition[doornum])>>TEXTUREFROMFIXEDSHIFT)&TEXTUREMASK;
558
559 if(lasttilehit==tilehit)
560 {
561 if((pixx&3) && texture == lasttexture)
562 {
563 ScalePost();
564 postx=pixx;
565 wallheight[pixx] = wallheight[pixx-1];
566 return;
567 }
568 ScalePost();
569 wallheight[pixx] = CalcHeight();
570 postsource+=texture-lasttexture;
571 postwidth=1;
572 postx=pixx;
573 lasttexture=texture;
574 return;
575 }
576
577 if(lastside!=-1) ScalePost();
578
579 lastside=2;
580 lasttilehit=tilehit;
581 lasttexture=texture;
582 wallheight[pixx] = CalcHeight();
583 postx = pixx;
584 postwidth = 1;
585
586 switch(doorobjlist[doornum].lock)
587 {
588 case dr_normal:
589 doorpage = DOORWALL+1;
590 break;
591 case dr_lock1:
592 case dr_lock2:
593 case dr_lock3:
594 case dr_lock4:
595 doorpage = DOORWALL+7;
596 break;
597 case dr_elevator:
598 doorpage = DOORWALL+5;
599 break;
600 }
601
602 postsource = PM_GetTexture(doorpage) + texture;
603}
604
605//==========================================================================
606
607#define HitHorizBorder HitHorizWall
608#define HitVertBorder HitVertWall
609
610//==========================================================================
611
612byte vgaCeiling[]=
613{
614#ifndef SPEAR
615 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0xbf,
616 0x4e,0x4e,0x4e,0x1d,0x8d,0x4e,0x1d,0x2d,0x1d,0x8d,
617 0x1d,0x1d,0x1d,0x1d,0x1d,0x2d,0xdd,0x1d,0x1d,0x98,
618
619 0x1d,0x9d,0x2d,0xdd,0xdd,0x9d,0x2d,0x4d,0x1d,0xdd,
620 0x7d,0x1d,0x2d,0x2d,0xdd,0xd7,0x1d,0x1d,0x1d,0x2d,
621 0x1d,0x1d,0x1d,0x1d,0xdd,0xdd,0x7d,0xdd,0xdd,0xdd
622#else
623 0x6f,0x4f,0x1d,0xde,0xdf,0x2e,0x7f,0x9e,0xae,0x7f,
624 0x1d,0xde,0xdf,0xde,0xdf,0xde,0xe1,0xdc,0x2e,0x1d,0xdc
625#endif
626};
627
628/*
629=====================
630=
631= VGAClearScreen
632=
633=====================
634*/
635
636void VGAClearScreen (void)
637{
638 byte ceiling=vgaCeiling[gamestate.episode*10+mapon];
639
640 int y;
641 byte *ptr = vbuf;
642#ifdef USE_SHADING
643 for(y = 0; y < viewheight / 2; y++, ptr += vbufPitch)
644 memset(ptr, shadetable[GetShade((viewheight / 2 - y) << 3)][ceiling], viewwidth);
645 for(; y < viewheight; y++, ptr += vbufPitch)
646 memset(ptr, shadetable[GetShade((y - viewheight / 2) << 3)][0x19], viewwidth);
647#else
648 for(y = 0; y < viewheight / 2; y++, ptr += vbufPitch)
649 memset(ptr, ceiling, viewwidth);
650 for(; y < viewheight; y++, ptr += vbufPitch)
651 memset(ptr, 0x19, viewwidth);
652#endif
653}
654
655//==========================================================================
656
657/*
658=====================
659=
660= CalcRotate
661=
662=====================
663*/
664
665int CalcRotate (objtype *ob)
666{
667 int angle, viewangle;
668
669 // this isn't exactly correct, as it should vary by a trig value,
670 // but it is close enough with only eight rotations
671
672 viewangle = player->angle + (centerx - ob->viewx)/8;
673
674 if (ob->obclass == rocketobj || ob->obclass == hrocketobj)
675 angle = (viewangle-180) - ob->angle;
676 else
677 angle = (viewangle-180) - dirangle[ob->dir];
678
679 angle+=ANGLES/16;
680 while (angle>=ANGLES)
681 angle-=ANGLES;
682 while (angle<0)
683 angle+=ANGLES;
684
685 if (ob->state->rotate == 2) // 2 rotation pain frame
686 return 0; // pain with shooting frame bugfix
687
688 return angle/(ANGLES/8);
689}
690
691void ScaleShape (int xcenter, int shapenum, unsigned height, uint32_t flags)
692{
693 t_compshape *shape;
694 unsigned scale,pixheight;
695 unsigned starty,endy;
696 word *cmdptr;
697 byte *cline;
698 byte *line;
699 byte *vmem;
700 int actx,i,upperedge;
701 short newstart;
702 int scrstarty,screndy,lpix,rpix,pixcnt,ycnt;
703 unsigned j;
704 byte col;
705
706#ifdef USE_SHADING
707 byte *curshades;
708 if(flags & FL_FULLBRIGHT)
709 curshades = shadetable[0];
710 else
711 curshades = shadetable[GetShade(height)];
712#endif
713
714 shape = (t_compshape *) PM_GetSprite(shapenum);
715
716 scale=height>>3; // low three bits are fractional
717 if(!scale) return; // too close or far away
718
719 pixheight=scale*SPRITESCALEFACTOR;
720 actx=xcenter-scale;
721 upperedge=viewheight/2-scale;
722
723 cmdptr=(word *) shape->dataofs;
724
725 for(i=shape->leftpix,pixcnt=i*pixheight,rpix=(pixcnt>>6)+actx;i<=shape->rightpix;i++,cmdptr++)
726 {
727 lpix=rpix;
728 if(lpix>=viewwidth) break;
729 pixcnt+=pixheight;
730 rpix=(pixcnt>>6)+actx;
731 if(lpix!=rpix && rpix>0)
732 {
733 if(lpix<0) lpix=0;
734 if(rpix>viewwidth) rpix=viewwidth,i=shape->rightpix+1;
735 cline=(byte *)shape + *cmdptr;
736 while(lpix<rpix)
737 {
738 if(wallheight[lpix]<=(int)height)
739 {
740 line=cline;
741 while((endy = READWORD(&line)) != 0)
742 {
743 endy >>= 1;
744 newstart = READWORD(&line);
745 starty = READWORD(&line) >> 1;
746 j=starty;
747 ycnt=j*pixheight;
748 screndy=(ycnt>>6)+upperedge;
749 if(screndy<0) vmem=vbuf+lpix;
750 else vmem=vbuf+screndy*vbufPitch+lpix;
751 for(;j<endy;j++)
752 {
753 scrstarty=screndy;
754 ycnt+=pixheight;
755 screndy=(ycnt>>6)+upperedge;
756 if(scrstarty!=screndy && screndy>0)
757 {
758#ifdef USE_SHADING
759 col=curshades[((byte *)shape)[newstart+j]];
760#else
761 col=((byte *)shape)[newstart+j];
762#endif
763 if(scrstarty<0) scrstarty=0;
764 if(screndy>viewheight) screndy=viewheight,j=endy;
765
766 while(scrstarty<screndy)
767 {
768 *vmem=col;
769 vmem+=vbufPitch;
770 scrstarty++;
771 }
772 }
773 }
774 }
775 }
776 lpix++;
777 }
778 }
779 }
780}
781
782void SimpleScaleShape (int xcenter, int shapenum, unsigned height)
783{
784 t_compshape *shape;
785 unsigned scale,pixheight;
786 unsigned starty,endy;
787 word *cmdptr;
788 byte *cline;
789 byte *line;
790 int actx,i,upperedge;
791 short newstart;
792 int scrstarty,screndy,lpix,rpix,pixcnt,ycnt;
793 unsigned j;
794 byte col;
795 byte *vmem;
796
797 shape = (t_compshape *) PM_GetSprite(shapenum);
798
799 scale=height>>1;
800 pixheight=scale*SPRITESCALEFACTOR;
801 actx=xcenter-scale;
802 upperedge=viewheight/2-scale;
803
804 cmdptr=shape->dataofs;
805
806 for(i=shape->leftpix,pixcnt=i*pixheight,rpix=(pixcnt>>6)+actx;i<=shape->rightpix;i++,cmdptr++)
807 {
808 lpix=rpix;
809 if(lpix>=viewwidth) break;
810 pixcnt+=pixheight;
811 rpix=(pixcnt>>6)+actx;
812 if(lpix!=rpix && rpix>0)
813 {
814 if(lpix<0) lpix=0;
815 if(rpix>viewwidth) rpix=viewwidth,i=shape->rightpix+1;
816 cline = (byte *)shape + *cmdptr;
817 while(lpix<rpix)
818 {
819 line=cline;
820 while((endy = READWORD(&line)) != 0)
821 {
822 endy >>= 1;
823 newstart = READWORD(&line);
824 starty = READWORD(&line) >> 1;
825 j=starty;
826 ycnt=j*pixheight;
827 screndy=(ycnt>>6)+upperedge;
828 if(screndy<0) vmem=vbuf+lpix;
829 else vmem=vbuf+screndy*vbufPitch+lpix;
830 for(;j<endy;j++)
831 {
832 scrstarty=screndy;
833 ycnt+=pixheight;
834 screndy=(ycnt>>6)+upperedge;
835 if(scrstarty!=screndy && screndy>0)
836 {
837 col=((byte *)shape)[newstart+j];
838 if(scrstarty<0) scrstarty=0;
839 if(screndy>viewheight) screndy=viewheight,j=endy;
840
841 while(scrstarty<screndy)
842 {
843 *vmem=col;
844 vmem+=vbufPitch;
845 scrstarty++;
846 }
847 }
848 }
849 }
850 lpix++;
851 }
852 }
853 }
854}
855
856/*
857=====================
858=
859= DrawScaleds
860=
861= Draws all objects that are visable
862=
863=====================
864*/
865
866#define MAXVISABLE 250
867
868typedef struct
869{
870 short viewx,
871 viewheight,
872 shapenum;
873 short flags; // this must be changed to uint32_t, when you
874 // you need more than 16-flags for drawing
875#ifdef USE_DIR3DSPR
876 statobj_t *transsprite;
877#endif
878} visobj_t;
879
880visobj_t vislist[MAXVISABLE];
881visobj_t *visptr,*visstep,*farthest;
882
883void DrawScaleds (void)
884{
885 int i,least,numvisable,height;
886 byte *tilespot,*visspot;
887 unsigned spotloc;
888
889 statobj_t *statptr;
890 objtype *obj;
891
892 visptr = &vislist[0];
893
894//
895// place static objects
896//
897 for (statptr = &statobjlist[0] ; statptr !=laststatobj ; statptr++)
898 {
899 if ((visptr->shapenum = statptr->shapenum) == -1)
900 continue; // object has been deleted
901
902 if (!*statptr->visspot)
903 continue; // not visable
904
905 if (TransformTile (statptr->tilex,statptr->tiley,
906 &visptr->viewx,&visptr->viewheight) && statptr->flags & FL_BONUS)
907 {
908 GetBonus (statptr);
909 if(statptr->shapenum == -1)
910 continue; // object has been taken
911 }
912
913 if (!visptr->viewheight)
914 continue; // to close to the object
915
916#ifdef USE_DIR3DSPR
917 if(statptr->flags & FL_DIR_MASK)
918 visptr->transsprite=statptr;
919 else
920 visptr->transsprite=NULL;
921#endif
922
923 if (visptr < &vislist[MAXVISABLE-1]) // don't let it overflow
924 {
925 visptr->flags = (short) statptr->flags;
926 visptr++;
927 }
928 }
929
930//
931// place active objects
932//
933 for (obj = player->next;obj;obj=obj->next)
934 {
935 if ((visptr->shapenum = obj->state->shapenum)==0)
936 continue; // no shape
937
938 spotloc = (obj->tilex<<mapshift)+obj->tiley; // optimize: keep in struct?
939 visspot = &spotvis[0][0]+spotloc;
940 tilespot = &tilemap[0][0]+spotloc;
941
942 //
943 // could be in any of the nine surrounding tiles
944 //
945 if (*visspot
946 || ( *(visspot-1) && !*(tilespot-1) )
947 || ( *(visspot+1) && !*(tilespot+1) )
948 || ( *(visspot-65) && !*(tilespot-65) )
949 || ( *(visspot-64) && !*(tilespot-64) )
950 || ( *(visspot-63) && !*(tilespot-63) )
951 || ( *(visspot+65) && !*(tilespot+65) )
952 || ( *(visspot+64) && !*(tilespot+64) )
953 || ( *(visspot+63) && !*(tilespot+63) ) )
954 {
955 obj->active = ac_yes;
956 TransformActor (obj);
957 if (!obj->viewheight)
958 continue; // too close or far away
959
960 visptr->viewx = obj->viewx;
961 visptr->viewheight = obj->viewheight;
962 if (visptr->shapenum == -1)
963 visptr->shapenum = obj->temp1; // special shape
964
965 if (obj->state->rotate)
966 visptr->shapenum += CalcRotate (obj);
967
968 if (visptr < &vislist[MAXVISABLE-1]) // don't let it overflow
969 {
970 visptr->flags = (short) obj->flags;
971#ifdef USE_DIR3DSPR
972 visptr->transsprite = NULL;
973#endif
974 visptr++;
975 }
976 obj->flags |= FL_VISABLE;
977 }
978 else
979 obj->flags &= ~FL_VISABLE;
980 }
981
982//
983// draw from back to front
984//
985 numvisable = (int) (visptr-&vislist[0]);
986
987 if (!numvisable)
988 return; // no visable objects
989
990 for (i = 0; i<numvisable; i++)
991 {
992 least = 32000;
993 for (visstep=&vislist[0] ; visstep<visptr ; visstep++)
994 {
995 height = visstep->viewheight;
996 if (height < least)
997 {
998 least = height;
999 farthest = visstep;
1000 }
1001 }
1002 //
1003 // draw farthest
1004 //
1005#ifdef USE_DIR3DSPR
1006 if(farthest->transsprite)
1007 Scale3DShape(vbuf, vbufPitch, farthest->transsprite);
1008 else
1009#endif
1010 ScaleShape(farthest->viewx, farthest->shapenum, farthest->viewheight, farthest->flags);
1011
1012 farthest->viewheight = 32000;
1013 }
1014}
1015
1016//==========================================================================
1017
1018/*
1019==============
1020=
1021= DrawPlayerWeapon
1022=
1023= Draw the player's hands
1024=
1025==============
1026*/
1027
1028int weaponscale[NUMWEAPONS] = {SPR_KNIFEREADY, SPR_PISTOLREADY,
1029 SPR_MACHINEGUNREADY, SPR_CHAINREADY};
1030
1031void DrawPlayerWeapon (void)
1032{
1033 int shapenum;
1034
1035#ifndef SPEAR
1036 if (gamestate.victoryflag)
1037 {
1038#ifndef APOGEE_1_0
1039 if (player->state == &s_deathcam && (GetTimeCount()&32) )
1040 SimpleScaleShape(viewwidth/2,SPR_DEATHCAM,viewheight+1);
1041#endif
1042 return;
1043 }
1044#endif
1045
1046 if (gamestate.weapon != -1)
1047 {
1048 shapenum = weaponscale[gamestate.weapon]+gamestate.weaponframe;
1049 SimpleScaleShape(viewwidth/2,shapenum,viewheight+1);
1050 }
1051
1052 if (demorecord || demoplayback)
1053 SimpleScaleShape(viewwidth/2,SPR_DEMO,viewheight+1);
1054}
1055
1056
1057//==========================================================================
1058
1059
1060/*
1061=====================
1062=
1063= CalcTics
1064=
1065=====================
1066*/
1067
1068void CalcTics (void)
1069{
1070//
1071// calculate tics since last refresh for adaptive timing
1072//
1073 if (lasttimecount > (int32_t) GetTimeCount())
1074 lasttimecount = GetTimeCount(); // if the game was paused a LONG time
1075
1076 uint32_t curtime = SDL_GetTicks();
1077 tics = (curtime * 7) / 100 - lasttimecount;
1078 if(!tics)
1079 {
1080 // wait until end of current tic
1081 SDL_Delay(((lasttimecount + 1) * 100) / 7 - curtime);
1082 tics = 1;
1083 }
1084
1085 lasttimecount += tics;
1086
1087 if (tics>MAXTICS)
1088 tics = MAXTICS;
1089}
1090
1091
1092//==========================================================================
1093
1094void AsmRefresh()
1095{
1096 int32_t xstep,ystep;
1097 longword xpartial,ypartial;
1098 boolean playerInPushwallBackTile = tilemap[focaltx][focalty] == 64;
1099
1100 for(pixx=0;pixx<viewwidth;pixx++)
1101 {
1102 short angl=midangle+pixelangle[pixx];
1103 if(angl<0) angl+=FINEANGLES;
1104 if(angl>=3600) angl-=FINEANGLES;
1105 if(angl<900)
1106 {
1107 xtilestep=1;
1108 ytilestep=-1;
1109 xstep=finetangent[900-1-angl];
1110 ystep=-finetangent[angl];
1111 xpartial=xpartialup;
1112 ypartial=ypartialdown;
1113 }
1114 else if(angl<1800)
1115 {
1116 xtilestep=-1;
1117 ytilestep=-1;
1118 xstep=-finetangent[angl-900];
1119 ystep=-finetangent[1800-1-angl];
1120 xpartial=xpartialdown;
1121 ypartial=ypartialdown;
1122 }
1123 else if(angl<2700)
1124 {
1125 xtilestep=-1;
1126 ytilestep=1;
1127 xstep=-finetangent[2700-1-angl];
1128 ystep=finetangent[angl-1800];
1129 xpartial=xpartialdown;
1130 ypartial=ypartialup;
1131 }
1132 else if(angl<3600)
1133 {
1134 xtilestep=1;
1135 ytilestep=1;
1136 xstep=finetangent[angl-2700];
1137 ystep=finetangent[3600-1-angl];
1138 xpartial=xpartialup;
1139 ypartial=ypartialup;
1140 }
1141 yintercept=FixedMul(ystep,xpartial)+viewy;
1142 xtile=focaltx+xtilestep;
1143 xspot=(word)((xtile<<mapshift)+((uint32_t)yintercept>>16));
1144 xintercept=FixedMul(xstep,ypartial)+viewx;
1145 ytile=focalty+ytilestep;
1146 yspot=(word)((((uint32_t)xintercept>>16)<<mapshift)+ytile);
1147 texdelta=0;
1148
1149 // Special treatment when player is in back tile of pushwall
1150 if(playerInPushwallBackTile)
1151 {
1152 if( pwalldir == di_east && xtilestep == 1
1153 || pwalldir == di_west && xtilestep == -1)
1154 {
1155 int32_t yintbuf = yintercept - ((ystep * (64 - pwallpos)) >> 6);
1156 if((yintbuf >> 16) == focalty) // ray hits pushwall back?
1157 {
1158 if(pwalldir == di_east)
1159 xintercept = (focaltx << TILESHIFT) + (pwallpos << 10);
1160 else
1161 xintercept = (focaltx << TILESHIFT) - TILEGLOBAL + ((64 - pwallpos) << 10);
1162 yintercept = yintbuf;
1163 ytile = (short) (yintercept >> TILESHIFT);
1164 tilehit = pwalltile;
1165 HitVertWall();
1166 continue;
1167 }
1168 }
1169 else if(pwalldir == di_south && ytilestep == 1
1170 || pwalldir == di_north && ytilestep == -1)
1171 {
1172 int32_t xintbuf = xintercept - ((xstep * (64 - pwallpos)) >> 6);
1173 if((xintbuf >> 16) == focaltx) // ray hits pushwall back?
1174 {
1175 xintercept = xintbuf;
1176 if(pwalldir == di_south)
1177 yintercept = (focalty << TILESHIFT) + (pwallpos << 10);
1178 else
1179 yintercept = (focalty << TILESHIFT) - TILEGLOBAL + ((64 - pwallpos) << 10);
1180 xtile = (short) (xintercept >> TILESHIFT);
1181 tilehit = pwalltile;
1182 HitHorizWall();
1183 continue;
1184 }
1185 }
1186 }
1187
1188 do
1189 {
1190 if(ytilestep==-1 && (yintercept>>16)<=ytile) goto horizentry;
1191 if(ytilestep==1 && (yintercept>>16)>=ytile) goto horizentry;
1192vertentry:
1193 if((uint32_t)yintercept>mapheight*65536-1 || (word)xtile>=mapwidth)
1194 {
1195 if(xtile<0) xintercept=0, xtile=0;
1196 else if(xtile>=mapwidth) xintercept=mapwidth<<TILESHIFT, xtile=mapwidth-1;
1197 else xtile=(short) (xintercept >> TILESHIFT);
1198 if(yintercept<0) yintercept=0, ytile=0;
1199 else if(yintercept>=(mapheight<<TILESHIFT)) yintercept=mapheight<<TILESHIFT, ytile=mapheight-1;
1200 yspot=0xffff;
1201 tilehit=0;
1202 HitHorizBorder();
1203 break;
1204 }
1205 if(xspot>=maparea) break;
1206 tilehit=((byte *)tilemap)[xspot];
1207 if(tilehit)
1208 {
1209 if(tilehit&0x80)
1210 {
1211 int32_t yintbuf=yintercept+(ystep>>1);
1212 if((yintbuf>>16)!=(yintercept>>16))
1213 goto passvert;
1214 if((word)yintbuf<doorposition[tilehit&0x7f])
1215 goto passvert;
1216 yintercept=yintbuf;
1217 xintercept=(xtile<<TILESHIFT)|0x8000;
1218 ytile = (short) (yintercept >> TILESHIFT);
1219 HitVertDoor();
1220 }
1221 else
1222 {
1223 if(tilehit==64)
1224 {
1225 if(pwalldir==di_west || pwalldir==di_east)
1226 {
1227 int32_t yintbuf;
1228 int pwallposnorm;
1229 int pwallposinv;
1230 if(pwalldir==di_west)
1231 {
1232 pwallposnorm = 64-pwallpos;
1233 pwallposinv = pwallpos;
1234 }
1235 else
1236 {
1237 pwallposnorm = pwallpos;
1238 pwallposinv = 64-pwallpos;
1239 }
1240 if(pwalldir == di_east && xtile==pwallx && ((uint32_t)yintercept>>16)==pwally
1241 || pwalldir == di_west && !(xtile==pwallx && ((uint32_t)yintercept>>16)==pwally))
1242 {
1243 yintbuf=yintercept+((ystep*pwallposnorm)>>6);
1244 if((yintbuf>>16)!=(yintercept>>16))
1245 goto passvert;
1246
1247 xintercept=(xtile<<TILESHIFT)+TILEGLOBAL-(pwallposinv<<10);
1248 yintercept=yintbuf;
1249 ytile = (short) (yintercept >> TILESHIFT);
1250 tilehit=pwalltile;
1251 HitVertWall();
1252 }
1253 else
1254 {
1255 yintbuf=yintercept+((ystep*pwallposinv)>>6);
1256 if((yintbuf>>16)!=(yintercept>>16))
1257 goto passvert;
1258
1259 xintercept=(xtile<<TILESHIFT)-(pwallposinv<<10);
1260 yintercept=yintbuf;
1261 ytile = (short) (yintercept >> TILESHIFT);
1262 tilehit=pwalltile;
1263 HitVertWall();
1264 }
1265 }
1266 else
1267 {
1268 int pwallposi = pwallpos;
1269 if(pwalldir==di_north) pwallposi = 64-pwallpos;
1270 if(pwalldir==di_south && (word)yintercept<(pwallposi<<10)
1271 || pwalldir==di_north && (word)yintercept>(pwallposi<<10))
1272 {
1273 if(((uint32_t)yintercept>>16)==pwally && xtile==pwallx)
1274 {
1275 if(pwalldir==di_south && (int32_t)((word)yintercept)+ystep<(pwallposi<<10)
1276 || pwalldir==di_north && (int32_t)((word)yintercept)+ystep>(pwallposi<<10))
1277 goto passvert;
1278
1279 if(pwalldir==di_south)
1280 yintercept=(yintercept&0xffff0000)+(pwallposi<<10);
1281 else
1282 yintercept=(yintercept&0xffff0000)-TILEGLOBAL+(pwallposi<<10);
1283 xintercept=xintercept-((xstep*(64-pwallpos))>>6);
1284 xtile = (short) (xintercept >> TILESHIFT);
1285 tilehit=pwalltile;
1286 HitHorizWall();
1287 }
1288 else
1289 {
1290 texdelta = -(pwallposi<<10);
1291 xintercept=xtile<<TILESHIFT;
1292 ytile = (short) (yintercept >> TILESHIFT);
1293 tilehit=pwalltile;
1294 HitVertWall();
1295 }
1296 }
1297 else
1298 {
1299 if(((uint32_t)yintercept>>16)==pwally && xtile==pwallx)
1300 {
1301 texdelta = -(pwallposi<<10);
1302 xintercept=xtile<<TILESHIFT;
1303 ytile = (short) (yintercept >> TILESHIFT);
1304 tilehit=pwalltile;
1305 HitVertWall();
1306 }
1307 else
1308 {
1309 if(pwalldir==di_south && (int32_t)((word)yintercept)+ystep>(pwallposi<<10)
1310 || pwalldir==di_north && (int32_t)((word)yintercept)+ystep<(pwallposi<<10))
1311 goto passvert;
1312
1313 if(pwalldir==di_south)
1314 yintercept=(yintercept&0xffff0000)-((64-pwallpos)<<10);
1315 else
1316 yintercept=(yintercept&0xffff0000)+((64-pwallpos)<<10);
1317 xintercept=xintercept-((xstep*pwallpos)>>6);
1318 xtile = (short) (xintercept >> TILESHIFT);
1319 tilehit=pwalltile;
1320 HitHorizWall();
1321 }
1322 }
1323 }
1324 }
1325 else
1326 {
1327 xintercept=xtile<<TILESHIFT;
1328 ytile = (short) (yintercept >> TILESHIFT);
1329 HitVertWall();
1330 }
1331 }
1332 break;
1333 }
1334passvert:
1335 *((byte *)spotvis+xspot)=1;
1336 xtile+=xtilestep;
1337 yintercept+=ystep;
1338 xspot=(word)((xtile<<mapshift)+((uint32_t)yintercept>>16));
1339 }
1340 while(1);
1341 continue;
1342
1343 do
1344 {
1345 if(xtilestep==-1 && (xintercept>>16)<=xtile) goto vertentry;
1346 if(xtilestep==1 && (xintercept>>16)>=xtile) goto vertentry;
1347horizentry:
1348 if((uint32_t)xintercept>mapwidth*65536-1 || (word)ytile>=mapheight)
1349 {
1350 if(ytile<0) yintercept=0, ytile=0;
1351 else if(ytile>=mapheight) yintercept=mapheight<<TILESHIFT, ytile=mapheight-1;
1352 else ytile=(short) (yintercept >> TILESHIFT);
1353 if(xintercept<0) xintercept=0, xtile=0;
1354 else if(xintercept>=(mapwidth<<TILESHIFT)) xintercept=mapwidth<<TILESHIFT, xtile=mapwidth-1;
1355 xspot=0xffff;
1356 tilehit=0;
1357 HitVertBorder();
1358 break;
1359 }
1360 if(yspot>=maparea) break;
1361 tilehit=((byte *)tilemap)[yspot];
1362 if(tilehit)
1363 {
1364 if(tilehit&0x80)
1365 {
1366 int32_t xintbuf=xintercept+(xstep>>1);
1367 if((xintbuf>>16)!=(xintercept>>16))
1368 goto passhoriz;
1369 if((word)xintbuf<doorposition[tilehit&0x7f])
1370 goto passhoriz;
1371 xintercept=xintbuf;
1372 yintercept=(ytile<<TILESHIFT)+0x8000;
1373 xtile = (short) (xintercept >> TILESHIFT);
1374 HitHorizDoor();
1375 }
1376 else
1377 {
1378 if(tilehit==64)
1379 {
1380 if(pwalldir==di_north || pwalldir==di_south)
1381 {
1382 int32_t xintbuf;
1383 int pwallposnorm;
1384 int pwallposinv;
1385 if(pwalldir==di_north)
1386 {
1387 pwallposnorm = 64-pwallpos;
1388 pwallposinv = pwallpos;
1389 }
1390 else
1391 {
1392 pwallposnorm = pwallpos;
1393 pwallposinv = 64-pwallpos;
1394 }
1395 if(pwalldir == di_south && ytile==pwally && ((uint32_t)xintercept>>16)==pwallx
1396 || pwalldir == di_north && !(ytile==pwally && ((uint32_t)xintercept>>16)==pwallx))
1397 {
1398 xintbuf=xintercept+((xstep*pwallposnorm)>>6);
1399 if((xintbuf>>16)!=(xintercept>>16))
1400 goto passhoriz;
1401
1402 yintercept=(ytile<<TILESHIFT)+TILEGLOBAL-(pwallposinv<<10);
1403 xintercept=xintbuf;
1404 xtile = (short) (xintercept >> TILESHIFT);
1405 tilehit=pwalltile;
1406 HitHorizWall();
1407 }
1408 else
1409 {
1410 xintbuf=xintercept+((xstep*pwallposinv)>>6);
1411 if((xintbuf>>16)!=(xintercept>>16))
1412 goto passhoriz;
1413
1414 yintercept=(ytile<<TILESHIFT)-(pwallposinv<<10);
1415 xintercept=xintbuf;
1416 xtile = (short) (xintercept >> TILESHIFT);
1417 tilehit=pwalltile;
1418 HitHorizWall();
1419 }
1420 }
1421 else
1422 {
1423 int pwallposi = pwallpos;
1424 if(pwalldir==di_west) pwallposi = 64-pwallpos;
1425 if(pwalldir==di_east && (word)xintercept<(pwallposi<<10)
1426 || pwalldir==di_west && (word)xintercept>(pwallposi<<10))
1427 {
1428 if(((uint32_t)xintercept>>16)==pwallx && ytile==pwally)
1429 {
1430 if(pwalldir==di_east && (int32_t)((word)xintercept)+xstep<(pwallposi<<10)
1431 || pwalldir==di_west && (int32_t)((word)xintercept)+xstep>(pwallposi<<10))
1432 goto passhoriz;
1433
1434 if(pwalldir==di_east)
1435 xintercept=(xintercept&0xffff0000)+(pwallposi<<10);
1436 else
1437 xintercept=(xintercept&0xffff0000)-TILEGLOBAL+(pwallposi<<10);
1438 yintercept=yintercept-((ystep*(64-pwallpos))>>6);
1439 ytile = (short) (yintercept >> TILESHIFT);
1440 tilehit=pwalltile;
1441 HitVertWall();
1442 }
1443 else
1444 {
1445 texdelta = -(pwallposi<<10);
1446 yintercept=ytile<<TILESHIFT;
1447 xtile = (short) (xintercept >> TILESHIFT);
1448 tilehit=pwalltile;
1449 HitHorizWall();
1450 }
1451 }
1452 else
1453 {
1454 if(((uint32_t)xintercept>>16)==pwallx && ytile==pwally)
1455 {
1456 texdelta = -(pwallposi<<10);
1457 yintercept=ytile<<TILESHIFT;
1458 xtile = (short) (xintercept >> TILESHIFT);
1459 tilehit=pwalltile;
1460 HitHorizWall();
1461 }
1462 else
1463 {
1464 if(pwalldir==di_east && (int32_t)((word)xintercept)+xstep>(pwallposi<<10)
1465 || pwalldir==di_west && (int32_t)((word)xintercept)+xstep<(pwallposi<<10))
1466 goto passhoriz;
1467
1468 if(pwalldir==di_east)
1469 xintercept=(xintercept&0xffff0000)-((64-pwallpos)<<10);
1470 else
1471 xintercept=(xintercept&0xffff0000)+((64-pwallpos)<<10);
1472 yintercept=yintercept-((ystep*pwallpos)>>6);
1473 ytile = (short) (yintercept >> TILESHIFT);
1474 tilehit=pwalltile;
1475 HitVertWall();
1476 }
1477 }
1478 }
1479 }
1480 else
1481 {
1482 yintercept=ytile<<TILESHIFT;
1483 xtile = (short) (xintercept >> TILESHIFT);
1484 HitHorizWall();
1485 }
1486 }
1487 break;
1488 }
1489passhoriz:
1490 *((byte *)spotvis+yspot)=1;
1491 ytile+=ytilestep;
1492 xintercept+=xstep;
1493 yspot=(word)((((uint32_t)xintercept>>16)<<mapshift)+ytile);
1494 }
1495 while(1);
1496 }
1497}
1498
1499/*
1500====================
1501=
1502= WallRefresh
1503=
1504====================
1505*/
1506
1507void WallRefresh (void)
1508{
1509 xpartialdown = viewx&(TILEGLOBAL-1);
1510 xpartialup = TILEGLOBAL-xpartialdown;
1511 ypartialdown = viewy&(TILEGLOBAL-1);
1512 ypartialup = TILEGLOBAL-ypartialdown;
1513
1514 min_wallheight = viewheight;
1515 lastside = -1; // the first pixel is on a new wall
1516 AsmRefresh ();
1517 ScalePost (); // no more optimization on last post
1518}
1519
1520void CalcViewVariables()
1521{
1522 viewangle = player->angle;
1523 midangle = viewangle*(FINEANGLES/ANGLES);
1524 viewsin = sintable[viewangle];
1525 viewcos = costable[viewangle];
1526 viewx = player->x - FixedMul(focallength,viewcos);
1527 viewy = player->y + FixedMul(focallength,viewsin);
1528
1529 focaltx = (short)(viewx>>TILESHIFT);
1530 focalty = (short)(viewy>>TILESHIFT);
1531
1532 viewtx = (short)(player->x >> TILESHIFT);
1533 viewty = (short)(player->y >> TILESHIFT);
1534}
1535
1536//==========================================================================
1537
1538/*
1539========================
1540=
1541= ThreeDRefresh
1542=
1543========================
1544*/
1545
1546void ThreeDRefresh (void)
1547{
1548//
1549// clear out the traced array
1550//
1551 memset(spotvis,0,maparea);
1552 spotvis[player->tilex][player->tiley] = 1; // Detect all sprites over player fix
1553
1554 vbuf = VL_LockSurface(screenBuffer);
1555 vbuf+=screenofs;
1556 vbufPitch = bufferPitch;
1557
1558 CalcViewVariables();
1559
1560//
1561// follow the walls from there to the right, drawing as we go
1562//
1563 VGAClearScreen ();
1564#if defined(USE_FEATUREFLAGS) && defined(USE_STARSKY)
1565 if(GetFeatureFlags() & FF_STARSKY)
1566 DrawStarSky(vbuf, vbufPitch);
1567#endif
1568
1569 WallRefresh ();
1570
1571#if defined(USE_FEATUREFLAGS) && defined(USE_PARALLAX)
1572 if(GetFeatureFlags() & FF_PARALLAXSKY)
1573 DrawParallax(vbuf, vbufPitch);
1574#endif
1575#if defined(USE_FEATUREFLAGS) && defined(USE_CLOUDSKY)
1576 if(GetFeatureFlags() & FF_CLOUDSKY)
1577 DrawClouds(vbuf, vbufPitch, min_wallheight);
1578#endif
1579#ifdef USE_FLOORCEILINGTEX
1580 DrawFloorAndCeiling(vbuf, vbufPitch, min_wallheight);
1581#endif
1582
1583//
1584// draw all the scaled images
1585//
1586 DrawScaleds(); // draw scaled stuff
1587
1588#if defined(USE_FEATUREFLAGS) && defined(USE_RAIN)
1589 if(GetFeatureFlags() & FF_RAIN)
1590 DrawRain(vbuf, vbufPitch);
1591#endif
1592#if defined(USE_FEATUREFLAGS) && defined(USE_SNOW)
1593 if(GetFeatureFlags() & FF_SNOW)
1594 DrawSnow(vbuf, vbufPitch);
1595#endif
1596
1597 DrawPlayerWeapon (); // draw player's hands
1598
1599 if(Keyboard[sc_Tab] && viewsize == 21 && gamestate.weapon != -1)
1600 ShowActStatus();
1601
1602 VL_UnlockSurface(screenBuffer);
1603 vbuf = NULL;
1604
1605//
1606// show screen and time last cycle
1607//
1608
1609 if (fizzlein)
1610 {
1611 FizzleFade(screenBuffer, 0, 0, screenWidth, screenHeight, 20, false);
1612 fizzlein = false;
1613
1614 lasttimecount = GetTimeCount(); // don't make a big tic count
1615 }
1616 else
1617 {
1618#ifndef REMDEBUG
1619 if (fpscounter)
1620 {
1621 fontnumber = 0;
1622 SETFONTCOLOR(7,127);
1623 PrintX=4; PrintY=1;
1624 VWB_Bar(0,0,50,10,bordercol);
1625 US_PrintSigned(fps);
1626 US_Print(" fps");
1627 }
1628#endif
1629 SDL_BlitSurface(screenBuffer, NULL, screen, NULL);
1630 SDL_Flip(screen);
1631 }
1632
1633#ifndef REMDEBUG
1634 if (fpscounter)
1635 {
1636 fps_frames++;
1637 fps_time+=tics;
1638
1639 if(fps_time>35)
1640 {
1641 fps_time-=35;
1642 fps=fps_frames<<1;
1643 fps_frames=0;
1644 }
1645 }
1646#endif
1647}
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 @@
1#include "version.h"
2
3#ifdef USE_FLOORCEILINGTEX
4
5#include "wl_def.h"
6#include "wl_shade.h"
7
8// Textured Floor and Ceiling by DarkOne
9// With multi-textured floors and ceilings stored in lower and upper bytes of
10// according tile in third mapplane, respectively.
11void DrawFloorAndCeiling(byte *vbuf, unsigned vbufPitch, int min_wallheight)
12{
13 fixed dist; // distance to row projection
14 fixed tex_step; // global step per one screen pixel
15 fixed gu, gv, du, dv; // global texture coordinates
16 int u, v; // local texture coordinates
17 byte *toptex, *bottex;
18 unsigned lasttoptex = 0xffffffff, lastbottex = 0xffffffff;
19
20 int halfheight = viewheight >> 1;
21 int y0 = min_wallheight >> 3; // starting y value
22 if(y0 > halfheight)
23 return; // view obscured by walls
24 if(!y0) y0 = 1; // don't let division by zero
25 unsigned bot_offset0 = vbufPitch * (halfheight + y0);
26 unsigned top_offset0 = vbufPitch * (halfheight - y0 - 1);
27
28 // draw horizontal lines
29 for(int y = y0, bot_offset = bot_offset0, top_offset = top_offset0;
30 y < halfheight; y++, bot_offset += vbufPitch, top_offset -= vbufPitch)
31 {
32 dist = (heightnumerator / (y + 1)) << 5;
33 gu = viewx + FixedMul(dist, viewcos);
34 gv = -viewy + FixedMul(dist, viewsin);
35 tex_step = (dist << 8) / viewwidth / 175;
36 du = FixedMul(tex_step, viewsin);
37 dv = -FixedMul(tex_step, viewcos);
38 gu -= (viewwidth >> 1) * du;
39 gv -= (viewwidth >> 1) * dv; // starting point (leftmost)
40#ifdef USE_SHADING
41 byte *curshades = shadetable[GetShade(y << 3)];
42#endif
43 for(int x = 0, bot_add = bot_offset, top_add = top_offset;
44 x < viewwidth; x++, bot_add++, top_add++)
45 {
46 if(wallheight[x] >> 3 <= y)
47 {
48 int curx = (gu >> TILESHIFT) & (MAPSIZE - 1);
49 int cury = (-(gv >> TILESHIFT) - 1) & (MAPSIZE - 1);
50 unsigned curtex = MAPSPOT(curx, cury, 2);
51 if(curtex)
52 {
53 unsigned curtoptex = curtex >> 8;
54 if (curtoptex != lasttoptex)
55 {
56 lasttoptex = curtoptex;
57 toptex = PM_GetTexture(curtoptex);
58 }
59 unsigned curbottex = curtex & 0xff;
60 if (curbottex != lastbottex)
61 {
62 lastbottex = curbottex;
63 bottex = PM_GetTexture(curbottex);
64 }
65 u = (gu >> (TILESHIFT - TEXTURESHIFT)) & (TEXTURESIZE - 1);
66 v = (gv >> (TILESHIFT - TEXTURESHIFT)) & (TEXTURESIZE - 1);
67 unsigned texoffs = (u << TEXTURESHIFT) + (TEXTURESIZE - 1) - v;
68#ifdef USE_SHADING
69 if(curtoptex)
70 vbuf[top_add] = curshades[toptex[texoffs]];
71 if(curbottex)
72 vbuf[bot_add] = curshades[bottex[texoffs]];
73#else
74 if(curtoptex)
75 vbuf[top_add] = toptex[texoffs];
76 if(curbottex)
77 vbuf[bot_add] = bottex[texoffs];
78#endif
79 }
80 }
81 gu += du;
82 gv += dv;
83 }
84 }
85}
86
87#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 @@
1// WL_GAME.C
2
3#include "wl_def.h"
4#pragma hdrstop
5
6
7/*
8=============================================================================
9
10 LOCAL CONSTANTS
11
12=============================================================================
13*/
14
15
16/*
17=============================================================================
18
19 GLOBAL VARIABLES
20
21=============================================================================
22*/
23
24boolean ingame,fizzlein;
25gametype gamestate;
26byte bordercol=VIEWCOLOR; // color of the Change View/Ingame border
27
28#ifdef SPEAR
29int32_t spearx,speary;
30unsigned spearangle;
31boolean spearflag;
32#endif
33
34#ifdef USE_FEATUREFLAGS
35int ffDataTopLeft, ffDataTopRight, ffDataBottomLeft, ffDataBottomRight;
36#endif
37
38//
39// ELEVATOR BACK MAPS - REMEMBER (-1)!!
40//
41int ElevatorBackTo[]={1,1,7,3,5,3};
42
43void SetupGameLevel (void);
44void DrawPlayScreen (void);
45void LoadLatchMem (void);
46void GameLoop (void);
47
48/*
49=============================================================================
50
51 LOCAL VARIABLES
52
53=============================================================================
54*/
55
56
57
58//===========================================================================
59//===========================================================================
60
61
62/*
63==========================
64=
65= SetSoundLoc - Given the location of an object (in terms of global
66= coordinates, held in globalsoundx and globalsoundy), munges the values
67= for an approximate distance from the left and right ear, and puts
68= those values into leftchannel and rightchannel.
69=
70= JAB
71=
72==========================
73*/
74
75int leftchannel, rightchannel;
76#define ATABLEMAX 15
77byte righttable[ATABLEMAX][ATABLEMAX * 2] = {
78{ 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},
79{ 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},
80{ 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},
81{ 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},
82{ 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},
83{ 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},
84{ 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},
85{ 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},
86{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8},
87{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8},
88{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8},
89{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8},
90{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8},
91{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8},
92{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8}
93};
94byte lefttable[ATABLEMAX][ATABLEMAX * 2] = {
95{ 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},
96{ 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},
97{ 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},
98{ 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},
99{ 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},
100{ 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},
101{ 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},
102{ 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},
103{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8},
104{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8},
105{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8},
106{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8},
107{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8},
108{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8},
109{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8}
110};
111
112void
113SetSoundLoc(fixed gx,fixed gy)
114{
115 fixed xt,yt;
116 int x,y;
117
118//
119// translate point to view centered coordinates
120//
121 gx -= viewx;
122 gy -= viewy;
123
124//
125// calculate newx
126//
127 xt = FixedMul(gx,viewcos);
128 yt = FixedMul(gy,viewsin);
129 x = (xt - yt) >> TILESHIFT;
130
131//
132// calculate newy
133//
134 xt = FixedMul(gx,viewsin);
135 yt = FixedMul(gy,viewcos);
136 y = (yt + xt) >> TILESHIFT;
137
138 if (y >= ATABLEMAX)
139 y = ATABLEMAX - 1;
140 else if (y <= -ATABLEMAX)
141 y = -ATABLEMAX;
142 if (x < 0)
143 x = -x;
144 if (x >= ATABLEMAX)
145 x = ATABLEMAX - 1;
146 leftchannel = lefttable[x][y + ATABLEMAX];
147 rightchannel = righttable[x][y + ATABLEMAX];
148
149#if 0
150 CenterWindow(8,1);
151 US_PrintSigned(leftchannel);
152 US_Print(",");
153 US_PrintSigned(rightchannel);
154 VW_UpdateScreen();
155#endif
156}
157
158/*
159==========================
160=
161= SetSoundLocGlobal - Sets up globalsoundx & globalsoundy and then calls
162= UpdateSoundLoc() to transform that into relative channel volumes. Those
163= values are then passed to the Sound Manager so that they'll be used for
164= the next sound played (if possible).
165=
166= JAB
167=
168==========================
169*/
170void PlaySoundLocGlobal(word s,fixed gx,fixed gy)
171{
172 SetSoundLoc(gx, gy);
173 SD_PositionSound(leftchannel, rightchannel);
174
175 int channel = SD_PlaySound((soundnames) s);
176 if(channel)
177 {
178 channelSoundPos[channel - 1].globalsoundx = gx;
179 channelSoundPos[channel - 1].globalsoundy = gy;
180 channelSoundPos[channel - 1].valid = 1;
181 }
182}
183
184void UpdateSoundLoc(void)
185{
186/* if (SoundPositioned)
187 {
188 SetSoundLoc(globalsoundx,globalsoundy);
189 SD_SetPosition(leftchannel,rightchannel);
190 }*/
191
192 for(int i = 0; i < MIX_CHANNELS; i++)
193 {
194 if(channelSoundPos[i].valid)
195 {
196 SetSoundLoc(channelSoundPos[i].globalsoundx,
197 channelSoundPos[i].globalsoundy);
198 SD_SetPosition(i, leftchannel, rightchannel);
199 }
200 }
201}
202
203/*
204** JAB End
205*/
206
207/*
208==========================
209=
210= ScanInfoPlane
211=
212= Spawn all actors and mark down special places
213=
214==========================
215*/
216
217static void ScanInfoPlane(void)
218{
219 unsigned x,y;
220 int tile;
221 word *start;
222
223 start = mapsegs[1];
224 for (y=0;y<mapheight;y++)
225 {
226 for (x=0;x<mapwidth;x++)
227 {
228 tile = *start++;
229 if (!tile)
230 continue;
231
232 switch (tile)
233 {
234 case 19:
235 case 20:
236 case 21:
237 case 22:
238 SpawnPlayer(x,y,NORTH+tile-19);
239 break;
240
241 case 23:
242 case 24:
243 case 25:
244 case 26:
245 case 27:
246 case 28:
247 case 29:
248 case 30:
249
250 case 31:
251 case 32:
252 case 33:
253 case 34:
254 case 35:
255 case 36:
256 case 37:
257 case 38:
258
259 case 39:
260 case 40:
261 case 41:
262 case 42:
263 case 43:
264 case 44:
265 case 45:
266 case 46:
267
268 case 47:
269 case 48:
270 case 49:
271 case 50:
272 case 51:
273 case 52:
274 case 53:
275 case 54:
276
277 case 55:
278 case 56:
279 case 57:
280 case 58:
281 case 59:
282 case 60:
283 case 61:
284 case 62:
285
286 case 63:
287 case 64:
288 case 65:
289 case 66:
290 case 67:
291 case 68:
292 case 69:
293 case 70:
294 case 71:
295 case 72:
296#ifdef SPEAR
297 case 73: // TRUCK AND SPEAR!
298 case 74:
299#elif defined(USE_DIR3DSPR) // just for the example
300 case 73:
301#endif
302 SpawnStatic(x,y,tile-23);
303 break;
304
305//
306// P wall
307//
308 case 98:
309 if (!loadedgame)
310 gamestate.secrettotal++;
311 break;
312
313//
314// guard
315//
316 case 180:
317 case 181:
318 case 182:
319 case 183:
320 if (gamestate.difficulty<gd_hard)
321 break;
322 tile -= 36;
323 case 144:
324 case 145:
325 case 146:
326 case 147:
327 if (gamestate.difficulty<gd_medium)
328 break;
329 tile -= 36;
330 case 108:
331 case 109:
332 case 110:
333 case 111:
334 SpawnStand(en_guard,x,y,tile-108);
335 break;
336
337
338 case 184:
339 case 185:
340 case 186:
341 case 187:
342 if (gamestate.difficulty<gd_hard)
343 break;
344 tile -= 36;
345 case 148:
346 case 149:
347 case 150:
348 case 151:
349 if (gamestate.difficulty<gd_medium)
350 break;
351 tile -= 36;
352 case 112:
353 case 113:
354 case 114:
355 case 115:
356 SpawnPatrol(en_guard,x,y,tile-112);
357 break;
358
359 case 124:
360 SpawnDeadGuard (x,y);
361 break;
362//
363// officer
364//
365 case 188:
366 case 189:
367 case 190:
368 case 191:
369 if (gamestate.difficulty<gd_hard)
370 break;
371 tile -= 36;
372 case 152:
373 case 153:
374 case 154:
375 case 155:
376 if (gamestate.difficulty<gd_medium)
377 break;
378 tile -= 36;
379 case 116:
380 case 117:
381 case 118:
382 case 119:
383 SpawnStand(en_officer,x,y,tile-116);
384 break;
385
386
387 case 192:
388 case 193:
389 case 194:
390 case 195:
391 if (gamestate.difficulty<gd_hard)
392 break;
393 tile -= 36;
394 case 156:
395 case 157:
396 case 158:
397 case 159:
398 if (gamestate.difficulty<gd_medium)
399 break;
400 tile -= 36;
401 case 120:
402 case 121:
403 case 122:
404 case 123:
405 SpawnPatrol(en_officer,x,y,tile-120);
406 break;
407
408
409//
410// ss
411//
412 case 198:
413 case 199:
414 case 200:
415 case 201:
416 if (gamestate.difficulty<gd_hard)
417 break;
418 tile -= 36;
419 case 162:
420 case 163:
421 case 164:
422 case 165:
423 if (gamestate.difficulty<gd_medium)
424 break;
425 tile -= 36;
426 case 126:
427 case 127:
428 case 128:
429 case 129:
430 SpawnStand(en_ss,x,y,tile-126);
431 break;
432
433
434 case 202:
435 case 203:
436 case 204:
437 case 205:
438 if (gamestate.difficulty<gd_hard)
439 break;
440 tile -= 36;
441 case 166:
442 case 167:
443 case 168:
444 case 169:
445 if (gamestate.difficulty<gd_medium)
446 break;
447 tile -= 36;
448 case 130:
449 case 131:
450 case 132:
451 case 133:
452 SpawnPatrol(en_ss,x,y,tile-130);
453 break;
454
455//
456// dogs
457//
458 case 206:
459 case 207:
460 case 208:
461 case 209:
462 if (gamestate.difficulty<gd_hard)
463 break;
464 tile -= 36;
465 case 170:
466 case 171:
467 case 172:
468 case 173:
469 if (gamestate.difficulty<gd_medium)
470 break;
471 tile -= 36;
472 case 134:
473 case 135:
474 case 136:
475 case 137:
476 SpawnStand(en_dog,x,y,tile-134);
477 break;
478
479
480 case 210:
481 case 211:
482 case 212:
483 case 213:
484 if (gamestate.difficulty<gd_hard)
485 break;
486 tile -= 36;
487 case 174:
488 case 175:
489 case 176:
490 case 177:
491 if (gamestate.difficulty<gd_medium)
492 break;
493 tile -= 36;
494 case 138:
495 case 139:
496 case 140:
497 case 141:
498 SpawnPatrol(en_dog,x,y,tile-138);
499 break;
500
501//
502// boss
503//
504#ifndef SPEAR
505 case 214:
506 SpawnBoss (x,y);
507 break;
508 case 197:
509 SpawnGretel (x,y);
510 break;
511 case 215:
512 SpawnGift (x,y);
513 break;
514 case 179:
515 SpawnFat (x,y);
516 break;
517 case 196:
518 SpawnSchabbs (x,y);
519 break;
520 case 160:
521 SpawnFakeHitler (x,y);
522 break;
523 case 178:
524 SpawnHitler (x,y);
525 break;
526#else
527 case 106:
528 SpawnSpectre (x,y);
529 break;
530 case 107:
531 SpawnAngel (x,y);
532 break;
533 case 125:
534 SpawnTrans (x,y);
535 break;
536 case 142:
537 SpawnUber (x,y);
538 break;
539 case 143:
540 SpawnWill (x,y);
541 break;
542 case 161:
543 SpawnDeath (x,y);
544 break;
545
546#endif
547
548//
549// mutants
550//
551 case 252:
552 case 253:
553 case 254:
554 case 255:
555 if (gamestate.difficulty<gd_hard)
556 break;
557 tile -= 18;
558 case 234:
559 case 235:
560 case 236:
561 case 237:
562 if (gamestate.difficulty<gd_medium)
563 break;
564 tile -= 18;
565 case 216:
566 case 217:
567 case 218:
568 case 219:
569 SpawnStand(en_mutant,x,y,tile-216);
570 break;
571
572 case 256:
573 case 257:
574 case 258:
575 case 259:
576 if (gamestate.difficulty<gd_hard)
577 break;
578 tile -= 18;
579 case 238:
580 case 239:
581 case 240:
582 case 241:
583 if (gamestate.difficulty<gd_medium)
584 break;
585 tile -= 18;
586 case 220:
587 case 221:
588 case 222:
589 case 223:
590 SpawnPatrol(en_mutant,x,y,tile-220);
591 break;
592
593//
594// ghosts
595//
596#ifndef SPEAR
597 case 224:
598 SpawnGhosts (en_blinky,x,y);
599 break;
600 case 225:
601 SpawnGhosts (en_clyde,x,y);
602 break;
603 case 226:
604 SpawnGhosts (en_pinky,x,y);
605 break;
606 case 227:
607 SpawnGhosts (en_inky,x,y);
608 break;
609#endif
610 }
611 }
612 }
613}
614
615//==========================================================================
616
617/*
618==================
619=
620= SetupGameLevel
621=
622==================
623*/
624
625void SetupGameLevel (void)
626{
627 int x,y;
628 word *map;
629 word tile;
630
631
632 if (!loadedgame)
633 {
634 gamestate.TimeCount
635 = gamestate.secrettotal
636 = gamestate.killtotal
637 = gamestate.treasuretotal
638 = gamestate.secretcount
639 = gamestate.killcount
640 = gamestate.treasurecount
641 = pwallstate = pwallpos = facetimes = 0;
642 LastAttacker = NULL;
643 killerobj = NULL;
644 }
645
646 if (demoplayback || demorecord)
647 US_InitRndT (false);
648 else
649 US_InitRndT (true);
650
651//
652// load the level
653//
654 CA_CacheMap (gamestate.mapon+10*gamestate.episode);
655 mapon-=gamestate.episode*10;
656
657#ifdef USE_FEATUREFLAGS
658 // Temporary definition to make things clearer
659 #define MXX MAPSIZE - 1
660
661 // Read feature flags data from map corners and overwrite corners with adjacent tiles
662 ffDataTopLeft = MAPSPOT(0, 0, 0); MAPSPOT(0, 0, 0) = MAPSPOT(1, 0, 0);
663 ffDataTopRight = MAPSPOT(MXX, 0, 0); MAPSPOT(MXX, 0, 0) = MAPSPOT(MXX, 1, 0);
664 ffDataBottomRight = MAPSPOT(MXX, MXX, 0); MAPSPOT(MXX, MXX, 0) = MAPSPOT(MXX - 1, MXX, 0);
665 ffDataBottomLeft = MAPSPOT(0, MXX, 0); MAPSPOT(0, MXX, 0) = MAPSPOT(0, MXX - 1, 0);
666
667 #undef MXX
668#endif
669
670//
671// copy the wall data to a data segment array
672//
673 memset (tilemap,0,sizeof(tilemap));
674 memset (actorat,0,sizeof(actorat));
675 map = mapsegs[0];
676 for (y=0;y<mapheight;y++)
677 {
678 for (x=0;x<mapwidth;x++)
679 {
680 tile = *map++;
681 if (tile<AREATILE)
682 {
683 // solid wall
684 tilemap[x][y] = (byte) tile;
685 actorat[x][y] = (objtype *)(uintptr_t) tile;
686 }
687 else
688 {
689 // area floor
690 tilemap[x][y] = 0;
691 actorat[x][y] = 0;
692 }
693 }
694 }
695
696//
697// spawn doors
698//
699 InitActorList (); // start spawning things with a clean slate
700 InitDoorList ();
701 InitStaticList ();
702
703 map = mapsegs[0];
704 for (y=0;y<mapheight;y++)
705 {
706 for (x=0;x<mapwidth;x++)
707 {
708 tile = *map++;
709 if (tile >= 90 && tile <= 101)
710 {
711 // door
712 switch (tile)
713 {
714 case 90:
715 case 92:
716 case 94:
717 case 96:
718 case 98:
719 case 100:
720 SpawnDoor (x,y,1,(tile-90)/2);
721 break;
722 case 91:
723 case 93:
724 case 95:
725 case 97:
726 case 99:
727 case 101:
728 SpawnDoor (x,y,0,(tile-91)/2);
729 break;
730 }
731 }
732 }
733 }
734
735//
736// spawn actors
737//
738 ScanInfoPlane ();
739
740
741//
742// take out the ambush markers
743//
744 map = mapsegs[0];
745 for (y=0;y<mapheight;y++)
746 {
747 for (x=0;x<mapwidth;x++)
748 {
749 tile = *map++;
750 if (tile == AMBUSHTILE)
751 {
752 tilemap[x][y] = 0;
753 if ( (unsigned)(uintptr_t)actorat[x][y] == AMBUSHTILE)
754 actorat[x][y] = NULL;
755
756 if (*map >= AREATILE)
757 tile = *map;
758 if (*(map-1-mapwidth) >= AREATILE)
759 tile = *(map-1-mapwidth);
760 if (*(map-1+mapwidth) >= AREATILE)
761 tile = *(map-1+mapwidth);
762 if ( *(map-2) >= AREATILE)
763 tile = *(map-2);
764
765 *(map-1) = tile;
766 }
767 }
768 }
769
770
771//
772// have the caching manager load and purge stuff to make sure all marks
773// are in memory
774//
775 CA_LoadAllSounds ();
776}
777
778
779//==========================================================================
780
781
782/*
783===================
784=
785= DrawPlayBorderSides
786=
787= To fix window overwrites
788=
789===================
790*/
791void DrawPlayBorderSides(void)
792{
793 if(viewsize == 21) return;
794
795 const int sw = screenWidth;
796 const int sh = screenHeight;
797 const int vw = viewwidth;
798 const int vh = viewheight;
799 const int px = scaleFactor; // size of one "pixel"
800
801 const int h = sh - px * STATUSLINES;
802 const int xl = sw / 2 - vw / 2;
803 const int yl = (h - vh) / 2;
804
805 if(xl != 0)
806 {
807 VWB_BarScaledCoord(0, 0, xl - px, h, bordercol); // left side
808 VWB_BarScaledCoord(xl + vw + px, 0, xl - px * 2, h, bordercol); // right side
809 }
810
811 if(yl != 0)
812 {
813 VWB_BarScaledCoord(0, 0, sw, yl - px, bordercol); // upper side
814 VWB_BarScaledCoord(0, yl + vh + px, sw, yl - px, bordercol); // lower side
815 }
816
817 if(xl != 0)
818 {
819 // Paint game view border lines
820 VWB_BarScaledCoord(xl - px, yl - px, vw + px, px, 0); // upper border
821 VWB_BarScaledCoord(xl, yl + vh, vw + px, px, bordercol - 2); // lower border
822 VWB_BarScaledCoord(xl - px, yl - px, px, vh + px, 0); // left border
823 VWB_BarScaledCoord(xl + vw, yl - px, px, vh + px * 2, bordercol - 2); // right border
824 VWB_BarScaledCoord(xl - px, yl + vh, px, px, bordercol - 3); // lower left highlight
825 }
826 else
827 {
828 // Just paint a lower border line
829 VWB_BarScaledCoord(0, yl+vh, vw, px, bordercol-2); // lower border
830 }
831}
832
833
834/*
835===================
836=
837= DrawStatusBorder
838=
839===================
840*/
841
842void DrawStatusBorder (byte color)
843{
844 int statusborderw = (screenWidth-scaleFactor*320)/2;
845
846 VWB_BarScaledCoord (0,0,screenWidth,screenHeight-scaleFactor*(STATUSLINES-3),color);
847 VWB_BarScaledCoord (0,screenHeight-scaleFactor*(STATUSLINES-3),
848 statusborderw+scaleFactor*8,scaleFactor*(STATUSLINES-4),color);
849 VWB_BarScaledCoord (0,screenHeight-scaleFactor*2,screenWidth,scaleFactor*2,color);
850 VWB_BarScaledCoord (screenWidth-statusborderw-scaleFactor*8, screenHeight-scaleFactor*(STATUSLINES-3),
851 statusborderw+scaleFactor*8,scaleFactor*(STATUSLINES-4),color);
852
853 VWB_BarScaledCoord (statusborderw+scaleFactor*9, screenHeight-scaleFactor*3,
854 scaleFactor*97, scaleFactor*1, color-1);
855 VWB_BarScaledCoord (statusborderw+scaleFactor*106, screenHeight-scaleFactor*3,
856 scaleFactor*161, scaleFactor*1, color-2);
857 VWB_BarScaledCoord (statusborderw+scaleFactor*267, screenHeight-scaleFactor*3,
858 scaleFactor*44, scaleFactor*1, color-3);
859 VWB_BarScaledCoord (screenWidth-statusborderw-scaleFactor*9, screenHeight-scaleFactor*(STATUSLINES-4),
860 scaleFactor*1, scaleFactor*20, color-2);
861 VWB_BarScaledCoord (screenWidth-statusborderw-scaleFactor*9, screenHeight-scaleFactor*(STATUSLINES/2-4),
862 scaleFactor*1, scaleFactor*14, color-3);
863}
864
865
866/*
867===================
868=
869= DrawPlayBorder
870=
871===================
872*/
873
874void DrawPlayBorder (void)
875{
876 const int px = scaleFactor; // size of one "pixel"
877
878 if (bordercol != VIEWCOLOR)
879 DrawStatusBorder(bordercol);
880 else
881 {
882 const int statusborderw = (screenWidth-px*320)/2;
883 VWB_BarScaledCoord (0, screenHeight-px*STATUSLINES,
884 statusborderw+px*8, px*STATUSLINES, bordercol);
885 VWB_BarScaledCoord (screenWidth-statusborderw-px*8, screenHeight-px*STATUSLINES,
886 statusborderw+px*8, px*STATUSLINES, bordercol);
887 }
888
889 if((unsigned) viewheight == screenHeight) return;
890
891 VWB_BarScaledCoord (0,0,screenWidth,screenHeight-px*STATUSLINES,bordercol);
892
893 const int xl = screenWidth/2-viewwidth/2;
894 const int yl = (screenHeight-px*STATUSLINES-viewheight)/2;
895 VWB_BarScaledCoord (xl,yl,viewwidth,viewheight,0);
896
897 if(xl != 0)
898 {
899 // Paint game view border lines
900 VWB_BarScaledCoord(xl-px, yl-px, viewwidth+px, px, 0); // upper border
901 VWB_BarScaledCoord(xl, yl+viewheight, viewwidth+px, px, bordercol-2); // lower border
902 VWB_BarScaledCoord(xl-px, yl-px, px, viewheight+px, 0); // left border
903 VWB_BarScaledCoord(xl+viewwidth, yl-px, px, viewheight+2*px, bordercol-2); // right border
904 VWB_BarScaledCoord(xl-px, yl+viewheight, px, px, bordercol-3); // lower left highlight
905 }
906 else
907 {
908 // Just paint a lower border line
909 VWB_BarScaledCoord(0, yl+viewheight, viewwidth, px, bordercol-2); // lower border
910 }
911}
912
913
914/*
915===================
916=
917= DrawPlayScreen
918=
919===================
920*/
921
922void DrawPlayScreen (void)
923{
924 VWB_DrawPicScaledCoord ((screenWidth-scaleFactor*320)/2,screenHeight-scaleFactor*STATUSLINES,STATUSBARPIC);
925 DrawPlayBorder ();
926
927 DrawFace ();
928 DrawHealth ();
929 DrawLives ();
930 DrawLevel ();
931 DrawAmmo ();
932 DrawKeys ();
933 DrawWeapon ();
934 DrawScore ();
935}
936
937// Uses LatchDrawPic instead of StatusDrawPic
938void LatchNumberHERE (int x, int y, unsigned width, int32_t number)
939{
940 unsigned length,c;
941 char str[20];
942
943 ltoa (number,str,10);
944
945 length = (unsigned) strlen (str);
946
947 while (length<width)
948 {
949 LatchDrawPic (x,y,N_BLANKPIC);
950 x++;
951 width--;
952 }
953
954 c = length <= width ? 0 : length-width;
955
956 while (c<length)
957 {
958 LatchDrawPic (x,y,str[c]-'0'+ N_0PIC);
959 x++;
960 c++;
961 }
962}
963
964void ShowActStatus()
965{
966 // Draw status bar without borders
967 byte *source = grsegs[STATUSBARPIC];
968 int picnum = STATUSBARPIC - STARTPICS;
969 int width = pictable[picnum].width;
970 int height = pictable[picnum].height;
971 int destx = (screenWidth-scaleFactor*320)/2 + 9 * scaleFactor;
972 int desty = screenHeight - (height - 4) * scaleFactor;
973 VL_MemToScreenScaledCoord_ex(source, width, height, 9, 4, destx, desty, width - 18, height - 7);
974
975 ingame = false;
976 DrawFace ();
977 DrawHealth ();
978 DrawLives ();
979 DrawLevel ();
980 DrawAmmo ();
981 DrawKeys ();
982 DrawWeapon ();
983 DrawScore ();
984 ingame = true;
985}
986
987
988//==========================================================================
989
990/*
991==================
992=
993= StartDemoRecord
994=
995==================
996*/
997
998char demoname[13] = "DEMO?.";
999
1000#ifndef REMDEBUG
1001#define MAXDEMOSIZE 8192
1002
1003void StartDemoRecord (int levelnumber)
1004{
1005 demobuffer=malloc(MAXDEMOSIZE);
1006 CHECKMALLOCRESULT(demobuffer);
1007 demoptr = (int8_t *) demobuffer;
1008 lastdemoptr = demoptr+MAXDEMOSIZE;
1009
1010 *demoptr = levelnumber;
1011 demoptr += 4; // leave space for length
1012 demorecord = true;
1013}
1014
1015
1016/*
1017==================
1018=
1019= FinishDemoRecord
1020=
1021==================
1022*/
1023
1024void FinishDemoRecord (void)
1025{
1026 int32_t length,level;
1027
1028 demorecord = false;
1029
1030 length = (int32_t) (demoptr - (int8_t *)demobuffer);
1031
1032 demoptr = ((int8_t *)demobuffer)+1;
1033 demoptr[0] = (int8_t) length;
1034 demoptr[1] = (int8_t) (length >> 8);
1035 demoptr[2] = 0;
1036
1037 VW_FadeIn();
1038 CenterWindow(24,3);
1039 PrintY+=6;
1040 fontnumber=0;
1041 SETFONTCOLOR(0,15);
1042 US_Print(" Demo number (0-9): ");
1043 VW_UpdateScreen();
1044
1045 if (US_LineInput (px,py,str,NULL,true,1,0))
1046 {
1047 level = atoi (str);
1048 if (level>=0 && level<=9)
1049 {
1050 demoname[4] = (char)('0'+level);
1051 CA_WriteFile (demoname,demobuffer,length);
1052 }
1053 }
1054
1055 free(demobuffer);
1056}
1057
1058//==========================================================================
1059
1060/*
1061==================
1062=
1063= RecordDemo
1064=
1065= Fades the screen out, then starts a demo. Exits with the screen faded
1066=
1067==================
1068*/
1069
1070void RecordDemo (void)
1071{
1072 int level,esc,maps;
1073
1074 CenterWindow(26,3);
1075 PrintY+=6;
1076 CA_CacheGrChunk(STARTFONT);
1077 fontnumber=0;
1078 SETFONTCOLOR(0,15);
1079#ifndef SPEAR
1080#ifdef UPLOAD
1081 US_Print(" Demo which level(1-10): "); maps = 10;
1082#else
1083 US_Print(" Demo which level(1-60): "); maps = 60;
1084#endif
1085#else
1086 US_Print(" Demo which level(1-21): "); maps = 21;
1087#endif
1088 VW_UpdateScreen();
1089 VW_FadeIn ();
1090 esc = !US_LineInput (px,py,str,NULL,true,2,0);
1091 if (esc)
1092 return;
1093
1094 level = atoi (str);
1095 level--;
1096
1097 if (level >= maps || level < 0)
1098 return;
1099
1100 VW_FadeOut ();
1101
1102#ifndef SPEAR
1103 NewGame (gd_hard,level/10);
1104 gamestate.mapon = level%10;
1105#else
1106 NewGame (gd_hard,0);
1107 gamestate.mapon = level;
1108#endif
1109
1110 StartDemoRecord (level);
1111
1112 DrawPlayScreen ();
1113 VW_FadeIn ();
1114
1115 startgame = false;
1116 demorecord = true;
1117
1118 SetupGameLevel ();
1119 StartMusic ();
1120
1121 if(usedoublebuffering) VH_UpdateScreen();
1122 fizzlein = true;
1123
1124 PlayLoop ();
1125
1126 demoplayback = false;
1127
1128 StopMusic ();
1129 VW_FadeOut ();
1130 ClearMemory ();
1131
1132 FinishDemoRecord ();
1133}
1134#else
1135void FinishDemoRecord (void) {return;}
1136void RecordDemo (void) {return;}
1137#endif
1138
1139
1140
1141//==========================================================================
1142
1143/*
1144==================
1145=
1146= PlayDemo
1147=
1148= Fades the screen out, then starts a demo. Exits with the screen unfaded
1149=
1150==================
1151*/
1152
1153void PlayDemo (int demonumber)
1154{
1155 int length;
1156#ifdef DEMOSEXTERN
1157// debug: load chunk
1158#ifndef SPEARDEMO
1159 int dems[4]={T_DEMO0,T_DEMO1,T_DEMO2,T_DEMO3};
1160#else
1161 int dems[1]={T_DEMO0};
1162#endif
1163
1164 CA_CacheGrChunk(dems[demonumber]);
1165 demoptr = (int8_t *) grsegs[dems[demonumber]];
1166#else
1167 demoname[4] = '0'+demonumber;
1168 CA_LoadFile (demoname,&demobuffer);
1169 demoptr = (int8_t *)demobuffer;
1170#endif
1171
1172 NewGame (1,0);
1173 gamestate.mapon = *demoptr++;
1174 LOGF("%d", gamestate.mapon);
1175 gamestate.difficulty = gd_hard;
1176 /* FIXME POSSIBLE BUG */
1177 length = READWORD((uint8_t **)&demoptr);
1178 LOGF("%d", length);
1179 // TODO: Seems like the original demo format supports 16 MB demos
1180 // But T_DEM00 and T_DEM01 of Wolf have a 0xd8 as third length size...
1181 demoptr++;
1182 lastdemoptr = demoptr-4+length;
1183
1184 VW_FadeOut ();
1185
1186 SETFONTCOLOR(0,15);
1187 DrawPlayScreen ();
1188
1189 startgame = false;
1190 demoplayback = true;
1191
1192 SetupGameLevel ();
1193 StartMusic ();
1194
1195 PlayLoop ();
1196
1197#ifdef DEMOSEXTERN
1198 UNCACHEGRCHUNK(dems[demonumber]);
1199#else
1200 MM_FreePtr (&demobuffer);
1201#endif
1202
1203 demoplayback = false;
1204
1205 StopMusic ();
1206 ClearMemory ();
1207}
1208
1209//==========================================================================
1210
1211/*
1212==================
1213=
1214= Died
1215=
1216==================
1217*/
1218
1219#define DEATHROTATE 2
1220
1221void Died (void)
1222{
1223 float fangle;
1224 int32_t dx,dy;
1225 int iangle,curangle,clockwise,counter,change;
1226
1227 if (screenfaded)
1228 {
1229 ThreeDRefresh ();
1230 VW_FadeIn ();
1231 }
1232
1233 gamestate.weapon = (weapontype) -1; // take away weapon
1234 SD_PlaySound (PLAYERDEATHSND);
1235
1236 //
1237 // swing around to face attacker
1238 //
1239 if(killerobj)
1240 {
1241 dx = killerobj->x - player->x;
1242 dy = player->y - killerobj->y;
1243
1244 fangle = (float) atan2((float) dy, (float) dx); // returns -pi to pi
1245 if (fangle<0)
1246 fangle = (float) (M_PI*2+fangle);
1247
1248 iangle = (int) (fangle/(M_PI*2)*ANGLES);
1249 }
1250 else
1251 {
1252 iangle = player->angle + ANGLES / 2;
1253 if(iangle >= ANGLES) iangle -= ANGLES;
1254 }
1255
1256 if (player->angle > iangle)
1257 {
1258 counter = player->angle - iangle;
1259 clockwise = ANGLES-player->angle + iangle;
1260 }
1261 else
1262 {
1263 clockwise = iangle - player->angle;
1264 counter = player->angle + ANGLES-iangle;
1265 }
1266
1267 curangle = player->angle;
1268
1269 if (clockwise<counter)
1270 {
1271 //
1272 // rotate clockwise
1273 //
1274 if (curangle>iangle)
1275 curangle -= ANGLES;
1276 do
1277 {
1278 change = tics*DEATHROTATE;
1279 if (curangle + change > iangle)
1280 change = iangle-curangle;
1281
1282 curangle += change;
1283 player->angle += change;
1284 if (player->angle >= ANGLES)
1285 player->angle -= ANGLES;
1286
1287 ThreeDRefresh ();
1288 CalcTics ();
1289 } while (curangle != iangle);
1290 }
1291 else
1292 {
1293 //
1294 // rotate counterclockwise
1295 //
1296 if (curangle<iangle)
1297 curangle += ANGLES;
1298 do
1299 {
1300 change = -(int)tics*DEATHROTATE;
1301 if (curangle + change < iangle)
1302 change = iangle-curangle;
1303
1304 curangle += change;
1305 player->angle += change;
1306 if (player->angle < 0)
1307 player->angle += ANGLES;
1308
1309 ThreeDRefresh ();
1310 CalcTics ();
1311 } while (curangle != iangle);
1312 }
1313
1314 //
1315 // fade to red
1316 //
1317 FinishPaletteShifts ();
1318
1319 if(usedoublebuffering) VH_UpdateScreen();
1320
1321 VL_BarScaledCoord (viewscreenx,viewscreeny,viewwidth,viewheight,4);
1322
1323 IN_ClearKeysDown ();
1324
1325 FizzleFade(screenBuffer,viewscreenx,viewscreeny,viewwidth,viewheight,70,false);
1326
1327 IN_UserInput(100);
1328 SD_WaitSoundDone ();
1329 ClearMemory();
1330
1331 gamestate.lives--;
1332
1333 if (gamestate.lives > -1)
1334 {
1335 gamestate.health = 100;
1336 gamestate.weapon = gamestate.bestweapon
1337 = gamestate.chosenweapon = wp_pistol;
1338 gamestate.ammo = STARTAMMO;
1339 gamestate.keys = 0;
1340 pwallstate = pwallpos = 0;
1341 gamestate.attackframe = gamestate.attackcount =
1342 gamestate.weaponframe = 0;
1343
1344 if(viewsize != 21)
1345 {
1346 DrawKeys ();
1347 DrawWeapon ();
1348 DrawAmmo ();
1349 DrawHealth ();
1350 DrawFace ();
1351 DrawLives ();
1352 }
1353 }
1354}
1355
1356//==========================================================================
1357
1358/*
1359===================
1360=
1361= GameLoop
1362=
1363===================
1364*/
1365
1366void GameLoop (void)
1367{
1368 boolean died;
1369#ifdef MYPROFILE
1370 clock_t start,end;
1371#endif
1372
1373restartgame:
1374 ClearMemory ();
1375 SETFONTCOLOR(0,15);
1376 VW_FadeOut();
1377 DrawPlayScreen ();
1378 died = false;
1379 do
1380 {
1381 if (!loadedgame)
1382 gamestate.score = gamestate.oldscore;
1383 if(!died || viewsize != 21) DrawScore();
1384
1385 startgame = false;
1386 if (!loadedgame)
1387 SetupGameLevel ();
1388
1389#ifdef SPEAR
1390 if (gamestate.mapon == 20) // give them the key allways
1391 {
1392 gamestate.keys |= 1;
1393 DrawKeys ();
1394 }
1395#endif
1396
1397 ingame = true;
1398 if(loadedgame)
1399 {
1400 ContinueMusic(lastgamemusicoffset);
1401 loadedgame = false;
1402 }
1403 else StartMusic ();
1404
1405 if (!died)
1406 PreloadGraphics (); // TODO: Let this do something useful!
1407 else
1408 {
1409 died = false;
1410 fizzlein = true;
1411 }
1412
1413 DrawLevel ();
1414
1415#ifdef SPEAR
1416startplayloop:
1417#endif
1418 PlayLoop ();
1419
1420#ifdef SPEAR
1421 if (spearflag)
1422 {
1423 SD_StopSound();
1424 SD_PlaySound(GETSPEARSND);
1425 if (DigiMode != sds_Off)
1426 {
1427 Delay(150);
1428 }
1429 else
1430 SD_WaitSoundDone();
1431
1432 ClearMemory ();
1433 gamestate.oldscore = gamestate.score;
1434 gamestate.mapon = 20;
1435 SetupGameLevel ();
1436 StartMusic ();
1437 player->x = spearx;
1438 player->y = speary;
1439 player->angle = (short)spearangle;
1440 spearflag = false;
1441 Thrust (0,0);
1442 goto startplayloop;
1443 }
1444#endif
1445
1446 StopMusic ();
1447 ingame = false;
1448
1449 if (demorecord && playstate != ex_warped)
1450 FinishDemoRecord ();
1451
1452 if (startgame || loadedgame)
1453 goto restartgame;
1454
1455 switch (playstate)
1456 {
1457 case ex_completed:
1458 case ex_secretlevel:
1459 if(viewsize == 21) DrawPlayScreen();
1460 gamestate.keys = 0;
1461 DrawKeys ();
1462 VW_FadeOut ();
1463
1464 ClearMemory ();
1465
1466 LevelCompleted (); // do the intermission
1467 if(viewsize == 21) DrawPlayScreen();
1468
1469#ifdef SPEARDEMO
1470 if (gamestate.mapon == 1)
1471 {
1472 died = true; // don't "get psyched!"
1473
1474 VW_FadeOut ();
1475
1476 ClearMemory ();
1477
1478 CheckHighScore (gamestate.score,gamestate.mapon+1);
1479#ifndef JAPAN
1480 strcpy(MainMenu[viewscores].string,STR_VS);
1481#endif
1482 MainMenu[viewscores].routine = CP_ViewScores;
1483 return;
1484 }
1485#endif
1486
1487#ifdef JAPDEMO
1488 if (gamestate.mapon == 3)
1489 {
1490 died = true; // don't "get psyched!"
1491
1492 VW_FadeOut ();
1493
1494 ClearMemory ();
1495
1496 CheckHighScore (gamestate.score,gamestate.mapon+1);
1497#ifndef JAPAN
1498 strcpy(MainMenu[viewscores].string,STR_VS);
1499#endif
1500 MainMenu[viewscores].routine = CP_ViewScores;
1501 return;
1502 }
1503#endif
1504
1505 gamestate.oldscore = gamestate.score;
1506
1507#ifndef SPEAR
1508 //
1509 // COMING BACK FROM SECRET LEVEL
1510 //
1511 if (gamestate.mapon == 9)
1512 gamestate.mapon = ElevatorBackTo[gamestate.episode]; // back from secret
1513 else
1514 //
1515 // GOING TO SECRET LEVEL
1516 //
1517 if (playstate == ex_secretlevel)
1518 gamestate.mapon = 9;
1519#else
1520
1521#define FROMSECRET1 3
1522#define FROMSECRET2 11
1523
1524 //
1525 // GOING TO SECRET LEVEL
1526 //
1527 if (playstate == ex_secretlevel)
1528 switch(gamestate.mapon)
1529 {
1530 case FROMSECRET1: gamestate.mapon = 18; break;
1531 case FROMSECRET2: gamestate.mapon = 19; break;
1532 }
1533 else
1534 //
1535 // COMING BACK FROM SECRET LEVEL
1536 //
1537 if (gamestate.mapon == 18 || gamestate.mapon == 19)
1538 switch(gamestate.mapon)
1539 {
1540 case 18: gamestate.mapon = FROMSECRET1+1; break;
1541 case 19: gamestate.mapon = FROMSECRET2+1; break;
1542 }
1543#endif
1544 else
1545 //
1546 // GOING TO NEXT LEVEL
1547 //
1548 gamestate.mapon++;
1549 break;
1550
1551 case ex_died:
1552 Died ();
1553 died = true; // don't "get psyched!"
1554
1555 if (gamestate.lives > -1)
1556 break; // more lives left
1557
1558 VW_FadeOut ();
1559 if(screenHeight % 200 != 0)
1560 VL_ClearScreen(0);
1561
1562#ifdef _arch_dreamcast
1563 DC_StatusClearLCD();
1564#endif
1565
1566 ClearMemory ();
1567
1568 CheckHighScore (gamestate.score,gamestate.mapon+1);
1569#ifndef JAPAN
1570 strcpy(MainMenu[viewscores].string,STR_VS);
1571#endif
1572 MainMenu[viewscores].routine = CP_ViewScores;
1573 return;
1574
1575 case ex_victorious:
1576 if(viewsize == 21) DrawPlayScreen();
1577#ifndef SPEAR
1578 VW_FadeOut ();
1579#else
1580 VL_FadeOut (0,255,0,17,17,300);
1581#endif
1582 ClearMemory ();
1583
1584 Victory ();
1585
1586 ClearMemory ();
1587
1588 CheckHighScore (gamestate.score,gamestate.mapon+1);
1589#ifndef JAPAN
1590 strcpy(MainMenu[viewscores].string,STR_VS);
1591#endif
1592 MainMenu[viewscores].routine = CP_ViewScores;
1593 return;
1594
1595 default:
1596 if(viewsize == 21) DrawPlayScreen();
1597 ClearMemory ();
1598 break;
1599 }
1600 } while (1);
1601}
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 @@
1// WL_INTER.C
2
3#include "wl_def.h"
4#pragma hdrstop
5
6LRstruct LevelRatios[LRpack];
7int32_t lastBreathTime = 0;
8
9void Write (int x, int y, const char *string);
10
11//==========================================================================
12
13/*
14==================
15=
16= CLearSplitVWB
17=
18==================
19*/
20
21void
22ClearSplitVWB (void)
23{
24 WindowX = 0;
25 WindowY = 0;
26 WindowW = 320;
27 WindowH = 160;
28}
29
30
31//==========================================================================
32
33#ifdef SPEAR
34#ifndef SPEARDEMO
35////////////////////////////////////////////////////////
36//
37// End of Spear of Destiny
38//
39////////////////////////////////////////////////////////
40
41void
42EndScreen (int palette, int screen)
43{
44 SDL_Color pal[256];
45 CA_CacheScreen (screen);
46 VW_UpdateScreen ();
47 CA_CacheGrChunk (palette);
48 VL_ConvertPalette(grsegs[palette], pal, 256);
49 VL_FadeIn (0, 255, pal, 30);
50 UNCACHEGRCHUNK (palette);
51 IN_ClearKeysDown ();
52 IN_Ack ();
53 VW_FadeOut ();
54}
55
56
57void
58EndSpear (void)
59{
60 SDL_Color pal[256];
61
62 EndScreen (END1PALETTE, ENDSCREEN11PIC);
63
64 CA_CacheScreen (ENDSCREEN3PIC);
65 VW_UpdateScreen ();
66 CA_CacheGrChunk (END3PALETTE);
67 VL_ConvertPalette(grsegs[END3PALETTE], pal, 256);
68 VL_FadeIn (0, 255, pal, 30);
69 UNCACHEGRCHUNK (END3PALETTE);
70 fontnumber = 0;
71 fontcolor = 0xd0;
72 WindowX = 0;
73 WindowW = 320;
74 PrintX = 0;
75 PrintY = 180;
76 US_CPrint (STR_ENDGAME1 "\n");
77 US_CPrint (STR_ENDGAME2);
78 VW_UpdateScreen ();
79 IN_UserInput(700);
80
81 PrintX = 0;
82 PrintY = 180;
83 VWB_Bar (0, 180, 320, 20, 0);
84 US_CPrint (STR_ENDGAME3 "\n");
85 US_CPrint (STR_ENDGAME4);
86 VW_UpdateScreen ();
87 IN_UserInput(700);
88
89 VW_FadeOut ();
90
91 EndScreen (END4PALETTE, ENDSCREEN4PIC);
92 EndScreen (END5PALETTE, ENDSCREEN5PIC);
93 EndScreen (END6PALETTE, ENDSCREEN6PIC);
94 EndScreen (END7PALETTE, ENDSCREEN7PIC);
95 EndScreen (END8PALETTE, ENDSCREEN8PIC);
96 EndScreen (END9PALETTE, ENDSCREEN9PIC);
97
98 EndScreen (END2PALETTE, ENDSCREEN12PIC);
99
100 MainMenu[savegame].active = 0;
101}
102#endif
103#endif
104
105//==========================================================================
106
107/*
108==================
109=
110= Victory
111=
112==================
113*/
114
115void
116Victory (void)
117{
118#ifndef SPEARDEMO
119 int32_t sec;
120 int i, min, kr, sr, tr, x;
121 char tempstr[8];
122
123#define RATIOX 6
124#define RATIOY 14
125#define TIMEX 14
126#define TIMEY 8
127
128
129#ifdef SPEAR
130 StartCPMusic (XTHEEND_MUS);
131
132 CA_CacheGrChunk (BJCOLLAPSE1PIC);
133 CA_CacheGrChunk (BJCOLLAPSE2PIC);
134 CA_CacheGrChunk (BJCOLLAPSE3PIC);
135 CA_CacheGrChunk (BJCOLLAPSE4PIC);
136
137 VWB_Bar (0, 0, 320, 200, VIEWCOLOR);
138 VWB_DrawPic (124, 44, BJCOLLAPSE1PIC);
139 VW_UpdateScreen ();
140 VW_FadeIn ();
141 VW_WaitVBL (2 * 70);
142 VWB_DrawPic (124, 44, BJCOLLAPSE2PIC);
143 VW_UpdateScreen ();
144 VW_WaitVBL (105);
145 VWB_DrawPic (124, 44, BJCOLLAPSE3PIC);
146 VW_UpdateScreen ();
147 VW_WaitVBL (105);
148 VWB_DrawPic (124, 44, BJCOLLAPSE4PIC);
149 VW_UpdateScreen ();
150 VW_WaitVBL (3 * 70);
151
152 UNCACHEGRCHUNK (BJCOLLAPSE1PIC);
153 UNCACHEGRCHUNK (BJCOLLAPSE2PIC);
154 UNCACHEGRCHUNK (BJCOLLAPSE3PIC);
155 UNCACHEGRCHUNK (BJCOLLAPSE4PIC);
156 VL_FadeOut (0, 255, 0, 17, 17, 5);
157#endif
158
159 StartCPMusic (URAHERO_MUS);
160 ClearSplitVWB ();
161 CacheLump (LEVELEND_LUMP_START, LEVELEND_LUMP_END);
162 CA_CacheGrChunk (STARTFONT);
163
164#ifndef SPEAR
165 CA_CacheGrChunk (C_TIMECODEPIC);
166#endif
167
168 VWB_Bar (0, 0, 320, screenHeight / scaleFactor - STATUSLINES + 1, VIEWCOLOR);
169 if (bordercol != VIEWCOLOR)
170 DrawStatusBorder (VIEWCOLOR);
171
172#ifdef JAPAN
173#ifndef JAPDEMO
174 CA_CacheGrChunk (C_ENDRATIOSPIC);
175 VWB_DrawPic (0, 0, C_ENDRATIOSPIC);
176 UNCACHEGRCHUNK (C_ENDRATIOSPIC);
177#endif
178#else
179 Write (18, 2, STR_YOUWIN);
180
181 Write (TIMEX, TIMEY - 2, STR_TOTALTIME);
182
183 Write (12, RATIOY - 2, "averages");
184
185#ifdef SPANISH
186 Write (RATIOX + 2, RATIOY, STR_RATKILL);
187 Write (RATIOX + 2, RATIOY + 2, STR_RATSECRET);
188 Write (RATIOX + 2, RATIOY + 4, STR_RATTREASURE);
189#else
190 Write (RATIOX + 8, RATIOY, STR_RATKILL);
191 Write (RATIOX + 4, RATIOY + 2, STR_RATSECRET);
192 Write (RATIOX, RATIOY + 4, STR_RATTREASURE);
193#endif
194
195#endif
196
197#ifndef JAPDEMO
198 VWB_DrawPic (8, 4, L_BJWINSPIC);
199#endif
200
201
202 for (kr = sr = tr = sec = i = 0; i < LRpack; i++)
203 {
204 sec += LevelRatios[i].time;
205 kr += LevelRatios[i].kill;
206 sr += LevelRatios[i].secret;
207 tr += LevelRatios[i].treasure;
208 }
209
210#ifndef SPEAR
211 kr /= LRpack;
212 sr /= LRpack;
213 tr /= LRpack;
214#else
215 kr /= 14;
216 sr /= 14;
217 tr /= 14;
218#endif
219
220 min = sec / 60;
221 sec %= 60;
222
223 if (min > 99)
224 min = sec = 99;
225
226 i = TIMEX * 8 + 1;
227 VWB_DrawPic (i, TIMEY * 8, L_NUM0PIC + (min / 10));
228 i += 2 * 8;
229 VWB_DrawPic (i, TIMEY * 8, L_NUM0PIC + (min % 10));
230 i += 2 * 8;
231 Write (i / 8, TIMEY, ":");
232 i += 1 * 8;
233 VWB_DrawPic (i, TIMEY * 8, L_NUM0PIC + (sec / 10));
234 i += 2 * 8;
235 VWB_DrawPic (i, TIMEY * 8, L_NUM0PIC + (sec % 10));
236 VW_UpdateScreen ();
237
238 itoa (kr, tempstr, 10);
239 x = RATIOX + 24 - (int) strlen(tempstr) * 2;
240 Write (x, RATIOY, tempstr);
241
242 itoa (sr, tempstr, 10);
243 x = RATIOX + 24 - (int) strlen(tempstr) * 2;
244 Write (x, RATIOY + 2, tempstr);
245
246 itoa (tr, tempstr, 10);
247 x = RATIOX + 24 - (int) strlen(tempstr) * 2;
248 Write (x, RATIOY + 4, tempstr);
249
250#ifndef SPANISH
251#ifndef UPLOAD
252#ifndef SPEAR
253 //
254 // TOTAL TIME VERIFICATION CODE
255 //
256 if (gamestate.difficulty >= gd_medium)
257 {
258 VWB_DrawPic (30 * 8, TIMEY * 8, C_TIMECODEPIC);
259 fontnumber = 0;
260 fontcolor = READHCOLOR;
261 PrintX = 30 * 8 - 3;
262 PrintY = TIMEY * 8 + 8;
263 PrintX += 4;
264 tempstr[0] = (((min / 10) ^ (min % 10)) ^ 0xa) + 'A';
265 tempstr[1] = (int) ((((sec / 10) ^ (sec % 10)) ^ 0xa) + 'A');
266 tempstr[2] = (tempstr[0] ^ tempstr[1]) + 'A';
267 tempstr[3] = 0;
268 US_Print (tempstr);
269 }
270#endif
271#endif
272#endif
273
274 fontnumber = 1;
275
276 VW_UpdateScreen ();
277 VW_FadeIn ();
278
279 IN_Ack ();
280
281 VW_FadeOut ();
282 if(screenHeight % 200 != 0)
283 VL_ClearScreen(0);
284
285#ifndef SPEAR
286 UNCACHEGRCHUNK (C_TIMECODEPIC);
287#endif
288 UnCacheLump (LEVELEND_LUMP_START, LEVELEND_LUMP_END);
289
290#ifndef SPEAR
291 EndText ();
292#else
293 EndSpear ();
294#endif
295
296#endif // SPEARDEMO
297}
298
299
300//==========================================================================
301
302#ifndef JAPAN
303/*
304==================
305=
306= PG13
307=
308==================
309*/
310
311void
312PG13 (void)
313{
314 VW_FadeOut ();
315 VWB_Bar (0, 0, 320, 200, 0x82); // background
316
317 CA_CacheGrChunk (PG13PIC);
318 VWB_DrawPic (216, 110, PG13PIC);
319 VW_UpdateScreen ();
320
321 UNCACHEGRCHUNK (PG13PIC);
322
323 VW_FadeIn ();
324 IN_UserInput (TickBase * 7);
325
326 VW_FadeOut ();
327}
328#endif
329
330
331//==========================================================================
332
333void
334Write (int x, int y, const char *string)
335{
336 static const int alpha[] = { L_NUM0PIC, L_NUM1PIC, L_NUM2PIC, L_NUM3PIC, L_NUM4PIC, L_NUM5PIC,
337 L_NUM6PIC, L_NUM7PIC, L_NUM8PIC, L_NUM9PIC, L_COLONPIC, 0, 0, 0, 0, 0, 0, L_APIC, L_BPIC,
338 L_CPIC, L_DPIC, L_EPIC, L_FPIC, L_GPIC, L_HPIC, L_IPIC, L_JPIC, L_KPIC,
339 L_LPIC, L_MPIC, L_NPIC, L_OPIC, L_PPIC, L_QPIC, L_RPIC, L_SPIC, L_TPIC,
340 L_UPIC, L_VPIC, L_WPIC, L_XPIC, L_YPIC, L_ZPIC
341 };
342
343 int i, ox, nx, ny, len = (int) strlen(string);
344 char ch;
345
346 ox = nx = x * 8;
347 ny = y * 8;
348 for (i = 0; i < len; i++)
349 {
350 if (string[i] == '\n')
351 {
352 nx = ox;
353 ny += 16;
354 }
355 else
356 {
357 ch = string[i];
358 if (ch >= 'a')
359 ch -= ('a' - 'A');
360 ch -= '0';
361
362 switch (string[i])
363 {
364 case '!':
365 VWB_DrawPic (nx, ny, L_EXPOINTPIC);
366 nx += 8;
367 continue;
368
369#ifndef APOGEE_1_0
370 case '\'':
371 VWB_DrawPic (nx, ny, L_APOSTROPHEPIC);
372 nx += 8;
373 continue;
374#endif
375
376 case ' ':
377 break;
378
379 case 0x3a: // ':'
380 VWB_DrawPic (nx, ny, L_COLONPIC);
381 nx += 8;
382 continue;
383
384 case '%':
385 VWB_DrawPic (nx, ny, L_PERCENTPIC);
386 break;
387
388 default:
389 VWB_DrawPic (nx, ny, alpha[ch]);
390 }
391 nx += 16;
392 }
393 }
394}
395
396
397//
398// Breathe Mr. BJ!!!
399//
400void
401BJ_Breathe (void)
402{
403 static int which = 0, max = 10;
404 int pics[2] = { L_GUYPIC, L_GUY2PIC };
405
406 SDL_Delay(5);
407
408 if ((int32_t) GetTimeCount () - lastBreathTime > max)
409 {
410 which ^= 1;
411 VWB_DrawPic (0, 16, pics[which]);
412 VW_UpdateScreen ();
413 lastBreathTime = GetTimeCount();
414 max = 35;
415 }
416}
417
418
419
420/*
421==================
422=
423= LevelCompleted
424=
425= Entered with the screen faded out
426= Still in split screen mode with the status bar
427=
428= Exit with the screen faded out
429=
430==================
431*/
432
433void
434LevelCompleted (void)
435{
436#define VBLWAIT 30
437#define PAR_AMOUNT 500
438#define PERCENT100AMT 10000
439 typedef struct
440 {
441 float time;
442 char timestr[6];
443 } times;
444
445 int x, i, min, sec, ratio, kr, sr, tr;
446 char tempstr[10];
447 int32_t bonus, timeleft = 0;
448 times parTimes[] = {
449#ifndef SPEAR
450 //
451 // Episode One Par Times
452 //
453 {1.5, "01:30"},
454 {2, "02:00"},
455 {2, "02:00"},
456 {3.5, "03:30"},
457 {3, "03:00"},
458 {3, "03:00"},
459 {2.5, "02:30"},
460 {2.5, "02:30"},
461 {0, "??:??"}, // Boss level
462 {0, "??:??"}, // Secret level
463
464 //
465 // Episode Two Par Times
466 //
467 {1.5, "01:30"},
468 {3.5, "03:30"},
469 {3, "03:00"},
470 {2, "02:00"},
471 {4, "04:00"},
472 {6, "06:00"},
473 {1, "01:00"},
474 {3, "03:00"},
475 {0, "??:??"},
476 {0, "??:??"},
477
478 //
479 // Episode Three Par Times
480 //
481 {1.5, "01:30"},
482 {1.5, "01:30"},
483 {2.5, "02:30"},
484 {2.5, "02:30"},
485 {3.5, "03:30"},
486 {2.5, "02:30"},
487 {2, "02:00"},
488 {6, "06:00"},
489 {0, "??:??"},
490 {0, "??:??"},
491
492 //
493 // Episode Four Par Times
494 //
495 {2, "02:00"},
496 {2, "02:00"},
497 {1.5, "01:30"},
498 {1, "01:00"},
499 {4.5, "04:30"},
500 {3.5, "03:30"},
501 {2, "02:00"},
502 {4.5, "04:30"},
503 {0, "??:??"},
504 {0, "??:??"},
505
506 //
507 // Episode Five Par Times
508 //
509 {2.5, "02:30"},
510 {1.5, "01:30"},
511 {2.5, "02:30"},
512 {2.5, "02:30"},
513 {4, "04:00"},
514 {3, "03:00"},
515 {4.5, "04:30"},
516 {3.5, "03:30"},
517 {0, "??:??"},
518 {0, "??:??"},
519
520 //
521 // Episode Six Par Times
522 //
523 {6.5, "06:30"},
524 {4, "04:00"},
525 {4.5, "04:30"},
526 {6, "06:00"},
527 {5, "05:00"},
528 {5.5, "05:30"},
529 {5.5, "05:30"},
530 {8.5, "08:30"},
531 {0, "??:??"},
532 {0, "??:??"}
533#else
534 //
535 // SPEAR OF DESTINY TIMES
536 //
537 {1.5, "01:30"},
538 {3.5, "03:30"},
539 {2.75, "02:45"},
540 {3.5, "03:30"},
541 {0, "??:??"}, // Boss 1
542 {4.5, "04:30"},
543 {3.25, "03:15"},
544 {2.75, "02:45"},
545 {4.75, "04:45"},
546 {0, "??:??"}, // Boss 2
547 {6.5, "06:30"},
548 {4.5, "04:30"},
549 {2.75, "02:45"},
550 {4.5, "04:30"},
551 {6, "06:00"},
552 {0, "??:??"}, // Boss 3
553 {6, "06:00"},
554 {0, "??:??"}, // Boss 4
555 {0, "??:??"}, // Secret level 1
556 {0, "??:??"}, // Secret level 2
557#endif
558 };
559
560 CacheLump (LEVELEND_LUMP_START, LEVELEND_LUMP_END);
561 ClearSplitVWB (); // set up for double buffering in split screen
562 VWB_Bar (0, 0, 320, screenHeight / scaleFactor - STATUSLINES + 1, VIEWCOLOR);
563
564 if (bordercol != VIEWCOLOR)
565 DrawStatusBorder (VIEWCOLOR);
566
567 StartCPMusic (ENDLEVEL_MUS);
568
569//
570// do the intermission
571//
572 IN_ClearKeysDown ();
573 IN_StartAck ();
574
575#ifdef JAPAN
576 CA_CacheGrChunk (C_INTERMISSIONPIC);
577 VWB_DrawPic (0, 0, C_INTERMISSIONPIC);
578 UNCACHEGRCHUNK (C_INTERMISSIONPIC);
579#endif
580 VWB_DrawPic (0, 16, L_GUYPIC);
581
582#ifndef SPEAR
583 if (mapon < 8)
584#else
585 if (mapon != 4 && mapon != 9 && mapon != 15 && mapon < 17)
586#endif
587 {
588#ifndef JAPAN
589#ifdef SPANISH
590 Write (14, 2, "piso\ncompletado");
591#else
592 Write (14, 2, "floor\ncompleted");
593#endif
594
595 Write (14, 7, STR_BONUS " 0");
596 Write (16, 10, STR_TIME);
597 Write (16, 12, STR_PAR);
598
599#ifdef SPANISH
600 Write (11, 14, STR_RAT2KILL);
601 Write (11, 16, STR_RAT2SECRET);
602 Write (11, 18, STR_RAT2TREASURE);
603#else
604 Write (9, 14, STR_RAT2KILL);
605 Write (5, 16, STR_RAT2SECRET);
606 Write (1, 18, STR_RAT2TREASURE);
607#endif
608
609 Write (26, 2, itoa (gamestate.mapon + 1, tempstr, 10));
610#endif
611
612#ifdef SPANISH
613 Write (30, 12, parTimes[gamestate.episode * 10 + mapon].timestr);
614#else
615 Write (26, 12, parTimes[gamestate.episode * 10 + mapon].timestr);
616#endif
617
618 //
619 // PRINT TIME
620 //
621 sec = gamestate.TimeCount / 70;
622
623 if (sec > 99 * 60) // 99 minutes max
624 sec = 99 * 60;
625
626 if (gamestate.TimeCount < parTimes[gamestate.episode * 10 + mapon].time * 4200)
627 timeleft = (int32_t) ((parTimes[gamestate.episode * 10 + mapon].time * 4200) / 70 - sec);
628
629 min = sec / 60;
630 sec %= 60;
631
632#ifdef SPANISH
633 i = 30 * 8;
634#else
635 i = 26 * 8;
636#endif
637 VWB_DrawPic (i, 10 * 8, L_NUM0PIC + (min / 10));
638 i += 2 * 8;
639 VWB_DrawPic (i, 10 * 8, L_NUM0PIC + (min % 10));
640 i += 2 * 8;
641 Write (i / 8, 10, ":");
642 i += 1 * 8;
643 VWB_DrawPic (i, 10 * 8, L_NUM0PIC + (sec / 10));
644 i += 2 * 8;
645 VWB_DrawPic (i, 10 * 8, L_NUM0PIC + (sec % 10));
646
647 VW_UpdateScreen ();
648 VW_FadeIn ();
649
650
651 //
652 // FIGURE RATIOS OUT BEFOREHAND
653 //
654 kr = sr = tr = 0;
655 if (gamestate.killtotal)
656 kr = (gamestate.killcount * 100) / gamestate.killtotal;
657 if (gamestate.secrettotal)
658 sr = (gamestate.secretcount * 100) / gamestate.secrettotal;
659 if (gamestate.treasuretotal)
660 tr = (gamestate.treasurecount * 100) / gamestate.treasuretotal;
661
662
663 //
664 // PRINT TIME BONUS
665 //
666 bonus = timeleft * PAR_AMOUNT;
667 if (bonus)
668 {
669 for (i = 0; i <= timeleft; i++)
670 {
671 ltoa ((int32_t) i * PAR_AMOUNT, tempstr, 10);
672 x = 36 - (int) strlen(tempstr) * 2;
673 Write (x, 7, tempstr);
674 if (!(i % (PAR_AMOUNT / 10)))
675 SD_PlaySound (ENDBONUS1SND);
676 if(!usedoublebuffering || !(i % (PAR_AMOUNT / 50))) VW_UpdateScreen ();
677 while(SD_SoundPlaying ())
678 BJ_Breathe ();
679 if (IN_CheckAck ())
680 goto done;
681 }
682
683 VW_UpdateScreen ();
684
685 SD_PlaySound (ENDBONUS2SND);
686 while (SD_SoundPlaying ())
687 BJ_Breathe ();
688 }
689
690
691#ifdef SPANISH
692#define RATIOXX 33
693#else
694#define RATIOXX 37
695#endif
696 //
697 // KILL RATIO
698 //
699 ratio = kr;
700 for (i = 0; i <= ratio; i++)
701 {
702 itoa (i, tempstr, 10);
703 x = RATIOXX - (int) strlen(tempstr) * 2;
704 Write (x, 14, tempstr);
705 if (!(i % 10))
706 SD_PlaySound (ENDBONUS1SND);
707 if(!usedoublebuffering || !(i & 1)) VW_UpdateScreen ();
708 while (SD_SoundPlaying ())
709 BJ_Breathe ();
710
711 if (IN_CheckAck ())
712 goto done;
713 }
714 if (ratio >= 100)
715 {
716 VW_WaitVBL (VBLWAIT);
717 SD_StopSound ();
718 bonus += PERCENT100AMT;
719 ltoa (bonus, tempstr, 10);
720 x = (RATIOXX - 1) - (int) strlen(tempstr) * 2;
721 Write (x, 7, tempstr);
722 VW_UpdateScreen ();
723 SD_PlaySound (PERCENT100SND);
724 }
725 else if (!ratio)
726 {
727 VW_WaitVBL (VBLWAIT);
728 SD_StopSound ();
729 SD_PlaySound (NOBONUSSND);
730 }
731 else
732 SD_PlaySound (ENDBONUS2SND);
733
734 VW_UpdateScreen ();
735 while (SD_SoundPlaying ())
736 BJ_Breathe ();
737
738 //
739 // SECRET RATIO
740 //
741 ratio = sr;
742 for (i = 0; i <= ratio; i++)
743 {
744 itoa (i, tempstr, 10);
745 x = RATIOXX - (int) strlen(tempstr) * 2;
746 Write (x, 16, tempstr);
747 if (!(i % 10))
748 SD_PlaySound (ENDBONUS1SND);
749 if(!usedoublebuffering || !(i & 1)) VW_UpdateScreen ();
750 while (SD_SoundPlaying ())
751 BJ_Breathe ();
752
753 if (IN_CheckAck ())
754 goto done;
755 }
756 if (ratio >= 100)
757 {
758 VW_WaitVBL (VBLWAIT);
759 SD_StopSound ();
760 bonus += PERCENT100AMT;
761 ltoa (bonus, tempstr, 10);
762 x = (RATIOXX - 1) - (int) strlen(tempstr) * 2;
763 Write (x, 7, tempstr);
764 VW_UpdateScreen ();
765 SD_PlaySound (PERCENT100SND);
766 }
767 else if (!ratio)
768 {
769 VW_WaitVBL (VBLWAIT);
770 SD_StopSound ();
771 SD_PlaySound (NOBONUSSND);
772 }
773 else
774 SD_PlaySound (ENDBONUS2SND);
775 VW_UpdateScreen ();
776 while (SD_SoundPlaying ())
777 BJ_Breathe ();
778
779 //
780 // TREASURE RATIO
781 //
782 ratio = tr;
783 for (i = 0; i <= ratio; i++)
784 {
785 itoa (i, tempstr, 10);
786 x = RATIOXX - (int) strlen(tempstr) * 2;
787 Write (x, 18, tempstr);
788 if (!(i % 10))
789 SD_PlaySound (ENDBONUS1SND);
790 if(!usedoublebuffering || !(i & 1)) VW_UpdateScreen ();
791 while (SD_SoundPlaying ())
792 BJ_Breathe ();
793 if (IN_CheckAck ())
794 goto done;
795 }
796 if (ratio >= 100)
797 {
798 VW_WaitVBL (VBLWAIT);
799 SD_StopSound ();
800 bonus += PERCENT100AMT;
801 ltoa (bonus, tempstr, 10);
802 x = (RATIOXX - 1) - (int) strlen(tempstr) * 2;
803 Write (x, 7, tempstr);
804 VW_UpdateScreen ();
805 SD_PlaySound (PERCENT100SND);
806 }
807 else if (!ratio)
808 {
809 VW_WaitVBL (VBLWAIT);
810 SD_StopSound ();
811 SD_PlaySound (NOBONUSSND);
812 }
813 else
814 SD_PlaySound (ENDBONUS2SND);
815 VW_UpdateScreen ();
816 while (SD_SoundPlaying ())
817 BJ_Breathe ();
818
819
820 //
821 // JUMP STRAIGHT HERE IF KEY PRESSED
822 //
823done: itoa (kr, tempstr, 10);
824 x = RATIOXX - (int) strlen(tempstr) * 2;
825 Write (x, 14, tempstr);
826
827 itoa (sr, tempstr, 10);
828 x = RATIOXX - (int) strlen(tempstr) * 2;
829 Write (x, 16, tempstr);
830
831 itoa (tr, tempstr, 10);
832 x = RATIOXX - (int) strlen(tempstr) * 2;
833 Write (x, 18, tempstr);
834
835 bonus = (int32_t) timeleft *PAR_AMOUNT +
836 (PERCENT100AMT * (kr >= 100)) +
837 (PERCENT100AMT * (sr >= 100)) + (PERCENT100AMT * (tr >= 100));
838
839 GivePoints (bonus);
840 ltoa (bonus, tempstr, 10);
841 x = 36 - (int) strlen(tempstr) * 2;
842 Write (x, 7, tempstr);
843
844 //
845 // SAVE RATIO INFORMATION FOR ENDGAME
846 //
847 LevelRatios[mapon].kill = kr;
848 LevelRatios[mapon].secret = sr;
849 LevelRatios[mapon].treasure = tr;
850 LevelRatios[mapon].time = min * 60 + sec;
851 }
852 else
853 {
854#ifdef SPEAR
855#ifndef SPEARDEMO
856 switch (mapon)
857 {
858 case 4:
859 Write (14, 4, " trans\n" " grosse\n" STR_DEFEATED);
860 break;
861 case 9:
862 Write (14, 4, "barnacle\n" "wilhelm\n" STR_DEFEATED);
863 break;
864 case 15:
865 Write (14, 4, "ubermutant\n" STR_DEFEATED);
866 break;
867 case 17:
868 Write (14, 4, " death\n" " knight\n" STR_DEFEATED);
869 break;
870 case 18:
871 Write (13, 4, "secret tunnel\n" " area\n" " completed!");
872 break;
873 case 19:
874 Write (13, 4, "secret castle\n" " area\n" " completed!");
875 break;
876 }
877#endif
878#else
879 Write (14, 4, "secret floor\n completed!");
880#endif
881
882 Write (10, 16, "15000 bonus!");
883
884 VW_UpdateScreen ();
885 VW_FadeIn ();
886
887 GivePoints (15000);
888 }
889
890
891 DrawScore ();
892 VW_UpdateScreen ();
893
894 lastBreathTime = GetTimeCount();
895 IN_StartAck ();
896 while (!IN_CheckAck ())
897 BJ_Breathe ();
898
899//
900// done
901//
902#ifdef SPEARDEMO
903 if (gamestate.mapon == 1)
904 {
905 SD_PlaySound (BONUS1UPSND);
906
907 CA_CacheGrChunk (STARTFONT + 1);
908 Message ("This concludes your demo\n"
909 "of Spear of Destiny! Now,\n" "go to your local software\n" "store and buy it!");
910 UNCACHEGRCHUNK (STARTFONT + 1);
911
912 IN_ClearKeysDown ();
913 IN_Ack ();
914 }
915#endif
916
917#ifdef JAPDEMO
918 if (gamestate.mapon == 3)
919 {
920 SD_PlaySound (BONUS1UPSND);
921
922 CA_CacheGrChunk (STARTFONT + 1);
923 Message ("This concludes your demo\n"
924 "of Wolfenstein 3-D! Now,\n" "go to your local software\n" "store and buy it!");
925 UNCACHEGRCHUNK (STARTFONT + 1);
926
927 IN_ClearKeysDown ();
928 IN_Ack ();
929 }
930#endif
931
932 VW_FadeOut ();
933 DrawPlayBorder();
934
935 UnCacheLump (LEVELEND_LUMP_START, LEVELEND_LUMP_END);
936}
937
938
939
940//==========================================================================
941
942
943/*
944=================
945=
946= PreloadGraphics
947=
948= Fill the cache up
949=
950=================
951*/
952
953boolean
954PreloadUpdate (unsigned current, unsigned total)
955{
956 unsigned w = WindowW - scaleFactor * 10;
957
958 VWB_BarScaledCoord (WindowX + scaleFactor * 5, WindowY + WindowH - scaleFactor * 3,
959 w, scaleFactor * 2, BLACK);
960 w = ((int32_t) w * current) / total;
961 if (w)
962 {
963 VWB_BarScaledCoord (WindowX + scaleFactor * 5, WindowY + WindowH - scaleFactor * 3,
964 w, scaleFactor * 2, 0x37); //SECONDCOLOR);
965 VWB_BarScaledCoord (WindowX + scaleFactor * 5, WindowY + WindowH - scaleFactor * 3,
966 w - scaleFactor * 1, scaleFactor * 1, 0x32);
967
968 }
969 VW_UpdateScreen ();
970// if (LastScan == sc_Escape)
971// {
972// IN_ClearKeysDown();
973// return(true);
974// }
975// else
976 return (false);
977}
978
979void
980PreloadGraphics (void)
981{
982 DrawLevel ();
983 ClearSplitVWB (); // set up for double buffering in split screen
984
985 VWB_BarScaledCoord (0, 0, screenWidth, screenHeight - scaleFactor * (STATUSLINES - 1), bordercol);
986 LatchDrawPicScaledCoord ((screenWidth-scaleFactor*224)/16,
987 (screenHeight-scaleFactor*(STATUSLINES+48))/2, GETPSYCHEDPIC);
988
989 WindowX = (screenWidth - scaleFactor*224)/2;
990 WindowY = (screenHeight - scaleFactor*(STATUSLINES+48))/2;
991 WindowW = scaleFactor * 28 * 8;
992 WindowH = scaleFactor * 48;
993
994 VW_UpdateScreen ();
995 VW_FadeIn ();
996
997// PM_Preload (PreloadUpdate);
998 PreloadUpdate (10, 10);
999 IN_UserInput (70);
1000 VW_FadeOut ();
1001
1002 DrawPlayBorder ();
1003 VW_UpdateScreen ();
1004}
1005
1006
1007//==========================================================================
1008
1009/*
1010==================
1011=
1012= DrawHighScores
1013=
1014==================
1015*/
1016
1017void
1018DrawHighScores (void)
1019{
1020 char buffer[16];
1021#ifndef SPEAR
1022 char *str;
1023#ifndef UPLOAD
1024 char buffer1[5];
1025#endif
1026#endif
1027 word i, w, h;
1028 HighScore *s;
1029
1030#ifndef SPEAR
1031 CA_CacheGrChunk (HIGHSCORESPIC);
1032 CA_CacheGrChunk (STARTFONT);
1033#ifndef APOGEE_1_0
1034 CA_CacheGrChunk (C_LEVELPIC);
1035 CA_CacheGrChunk (C_SCOREPIC);
1036 CA_CacheGrChunk (C_NAMEPIC);
1037#else
1038 CA_CacheGrChunk (C_CODEPIC);
1039#endif
1040
1041 ClearMScreen ();
1042 DrawStripes (10);
1043
1044 VWB_DrawPic (48, 0, HIGHSCORESPIC);
1045 UNCACHEGRCHUNK (HIGHSCORESPIC);
1046
1047#ifndef APOGEE_1_0
1048 VWB_DrawPic (4 * 8, 68, C_NAMEPIC);
1049 VWB_DrawPic (20 * 8, 68, C_LEVELPIC);
1050 VWB_DrawPic (28 * 8, 68, C_SCOREPIC);
1051#else
1052 VWB_DrawPic(35*8,68,C_CODEPIC);
1053#endif
1054 fontnumber = 0;
1055
1056#else
1057 CacheLump (BACKDROP_LUMP_START, BACKDROP_LUMP_END);
1058 ClearMScreen ();
1059 DrawStripes (10);
1060 UnCacheLump (BACKDROP_LUMP_START, BACKDROP_LUMP_END);
1061
1062 CacheLump (HIGHSCORES_LUMP_START, HIGHSCORES_LUMP_END);
1063 CA_CacheGrChunk (STARTFONT + 1);
1064 VWB_DrawPic (0, 0, HIGHSCORESPIC);
1065
1066 fontnumber = 1;
1067#endif
1068
1069
1070#ifndef SPEAR
1071 SETFONTCOLOR (15, 0x29);
1072#else
1073 SETFONTCOLOR (HIGHLIGHT, 0x29);
1074#endif
1075
1076 for (i = 0, s = Scores; i < MaxScores; i++, s++)
1077 {
1078 PrintY = 76 + (16 * i);
1079
1080 //
1081 // name
1082 //
1083#ifndef SPEAR
1084 PrintX = 4 * 8;
1085#else
1086 PrintX = 16;
1087#endif
1088 US_Print (s->name);
1089
1090 //
1091 // level
1092 //
1093 itoa (s->completed, buffer, 10);
1094#ifndef SPEAR
1095 for (str = buffer; *str; str++)
1096 *str = *str + (129 - '0'); // Used fixed-width numbers (129...)
1097 USL_MeasureString (buffer, &w, &h);
1098 PrintX = (22 * 8) - w;
1099#else
1100 USL_MeasureString (buffer, &w, &h);
1101 PrintX = 194 - w;
1102#endif
1103
1104#ifndef UPLOAD
1105#ifndef SPEAR
1106 PrintX -= 6;
1107 itoa (s->episode + 1, buffer1, 10);
1108 US_Print ("E");
1109 US_Print (buffer1);
1110 US_Print ("/L");
1111#endif
1112#endif
1113
1114#ifdef SPEAR
1115 if (s->completed == 21)
1116 VWB_DrawPic (PrintX + 8, PrintY - 1, C_WONSPEARPIC);
1117 else
1118#endif
1119 US_Print (buffer);
1120
1121 //
1122 // score
1123 //
1124 itoa (s->score, buffer, 10);
1125#ifndef SPEAR
1126 for (str = buffer; *str; str++)
1127 *str = *str + (129 - '0'); // Used fixed-width numbers (129...)
1128 USL_MeasureString (buffer, &w, &h);
1129 PrintX = (34 * 8) - 8 - w;
1130#else
1131 USL_MeasureString (buffer, &w, &h);
1132 PrintX = 292 - w;
1133#endif
1134 US_Print (buffer);
1135
1136#ifdef APOGEE_1_0
1137//#ifndef UPLOAD
1138#ifndef SPEAR
1139 //
1140 // verification #
1141 //
1142 if (!i)
1143 {
1144 char temp = (((s->score >> 28) & 0xf) ^ ((s->score >> 24) & 0xf)) + 'A';
1145 char temp1 = (((s->score >> 20) & 0xf) ^ ((s->score >> 16) & 0xf)) + 'A';
1146 char temp2 = (((s->score >> 12) & 0xf) ^ ((s->score >> 8) & 0xf)) + 'A';
1147 char temp3 = (((s->score >> 4) & 0xf) ^ ((s->score >> 0) & 0xf)) + 'A';
1148
1149 SETFONTCOLOR (0x49, 0x29);
1150 PrintX = 35 * 8;
1151 buffer[0] = temp;
1152 buffer[1] = temp1;
1153 buffer[2] = temp2;
1154 buffer[3] = temp3;
1155 buffer[4] = 0;
1156 US_Print (buffer);
1157 SETFONTCOLOR (15, 0x29);
1158 }
1159#endif
1160//#endif
1161#endif
1162 }
1163
1164 VW_UpdateScreen ();
1165
1166#ifdef SPEAR
1167 UnCacheLump (HIGHSCORES_LUMP_START, HIGHSCORES_LUMP_END);
1168 fontnumber = 0;
1169#endif
1170}
1171
1172//===========================================================================
1173
1174
1175/*
1176=======================
1177=
1178= CheckHighScore
1179=
1180=======================
1181*/
1182
1183void
1184CheckHighScore (int32_t score, word other)
1185{
1186 word i, j;
1187 int n;
1188 HighScore myscore;
1189
1190 strcpy (myscore.name, "");
1191 myscore.score = score;
1192 myscore.episode = gamestate.episode;
1193 myscore.completed = other;
1194
1195 for (i = 0, n = -1; i < MaxScores; i++)
1196 {
1197 if ((myscore.score > Scores[i].score)
1198 || ((myscore.score == Scores[i].score) && (myscore.completed > Scores[i].completed)))
1199 {
1200 for (j = MaxScores; --j > i;)
1201 Scores[j] = Scores[j - 1];
1202 Scores[i] = myscore;
1203 n = i;
1204 break;
1205 }
1206 }
1207
1208#ifdef SPEAR
1209 StartCPMusic (XAWARD_MUS);
1210#else
1211 StartCPMusic (ROSTER_MUS);
1212#endif
1213 DrawHighScores ();
1214
1215 VW_FadeIn ();
1216
1217 if (n != -1)
1218 {
1219 //
1220 // got a high score
1221 //
1222 PrintY = 76 + (16 * n);
1223#ifndef SPEAR
1224 PrintX = 4 * 8;
1225 backcolor = BORDCOLOR;
1226 fontcolor = 15;
1227 US_LineInput (PrintX, PrintY, Scores[n].name, 0, true, MaxHighName, 100);
1228#else
1229 PrintX = 16;
1230 fontnumber = 1;
1231 VWB_Bar (PrintX - 2, PrintY - 2, 145, 15, 0x9c);
1232 VW_UpdateScreen ();
1233 backcolor = 0x9c;
1234 fontcolor = 15;
1235 US_LineInput (PrintX, PrintY, Scores[n].name, 0, true, MaxHighName, 130);
1236#endif
1237 }
1238 else
1239 {
1240 IN_ClearKeysDown ();
1241 IN_UserInput (500);
1242 }
1243
1244}
1245
1246
1247#ifndef UPLOAD
1248#ifndef SPEAR
1249#ifndef JAPAN
1250////////////////////////////////////////////////////////
1251//
1252// NON-SHAREWARE NOTICE
1253//
1254////////////////////////////////////////////////////////
1255void
1256NonShareware (void)
1257{
1258 VW_FadeOut ();
1259
1260 ClearMScreen ();
1261 DrawStripes (10);
1262
1263 CA_CacheGrChunk (STARTFONT + 1);
1264 fontnumber = 1;
1265
1266 SETFONTCOLOR (READHCOLOR, BKGDCOLOR);
1267 PrintX = 110;
1268 PrintY = 15;
1269
1270#ifdef SPANISH
1271 US_Print ("Atencion");
1272#else
1273 US_Print ("Attention");
1274#endif
1275
1276 SETFONTCOLOR (HIGHLIGHT, BKGDCOLOR);
1277 WindowX = PrintX = 40;
1278 PrintY = 60;
1279#ifdef SPANISH
1280 US_Print ("Este juego NO es gratis y\n");
1281 US_Print ("NO es Shareware; favor de\n");
1282 US_Print ("no distribuirlo.\n\n");
1283#else
1284 US_Print ("This game is NOT shareware.\n");
1285 US_Print ("Please do not distribute it.\n");
1286 US_Print ("Thanks.\n\n");
1287#endif
1288 US_Print (" Id Software\n");
1289
1290 VW_UpdateScreen ();
1291 VW_FadeIn ();
1292 IN_Ack ();
1293}
1294#endif
1295#endif
1296#endif
1297
1298#ifdef SPEAR
1299#ifndef GOODTIMES
1300#ifndef SPEARDEMO
1301////////////////////////////////////////////////////////
1302//
1303// COPY PROTECTION FOR FormGen
1304//
1305////////////////////////////////////////////////////////
1306char CopyProFailedStrs[][100] = {
1307 STR_COPY1,
1308 STR_COPY2,
1309
1310 STR_COPY3,
1311 STR_COPY4,
1312
1313 STR_COPY5,
1314 STR_COPY6,
1315
1316 STR_COPY7,
1317 STR_COPY8,
1318
1319 STR_COPY9,
1320 "",
1321
1322 STR_COPY10,
1323 STR_COPY11,
1324
1325 STR_COPY12,
1326 "",
1327
1328 STR_COPY13,
1329 "",
1330
1331 STR_COPY14,
1332 ""
1333};
1334
1335char BackDoorStrs[5][16] = {
1336 "a spoon?",
1337 "bite me!",
1338 "joshua",
1339 "pelt",
1340 "snoops"
1341};
1342
1343char GoodBoyStrs[10][40] = {
1344 "...is the CORRECT ANSWER!",
1345 "",
1346
1347 "Consider yourself bitten, sir.",
1348 "",
1349
1350 "Greetings Professor Falken, would you",
1351 "like to play Spear of Destiny?",
1352
1353 "Do you have any gold spray paint?",
1354 "",
1355
1356 "I wish I had a 21\" monitor...",
1357 ""
1358};
1359
1360char bossstrs[4][24] = {
1361 "DEATH KNIGHT",
1362 "BARNACLE WILHELM",
1363 "UBERMUTANTUBER MUTANT",
1364 "TRANS GROSSE"
1365};
1366
1367char WordStr[5][20] = {
1368 "New Game",
1369 "Sound...F4",
1370 "Control...F6",
1371 "Change View...F5",
1372 "Quit...F10"
1373};
1374
1375char WordCorrect[5][2] = { "3", "4", "4", "5", "5" };
1376
1377char MemberStr[10][40] = {
1378 STR_COPY15,
1379 "",
1380
1381 STR_COPY16,
1382 "",
1383
1384 STR_COPY17,
1385 STR_COPY18,
1386
1387 STR_COPY19,
1388 STR_COPY20,
1389
1390 STR_COPY21,
1391 STR_COPY22
1392};
1393
1394char MemberCorrect[5][24] = {
1395 "adrian carmack",
1396 "john carmackjohn romero",
1397 "tom hall",
1398 "jay wilbur",
1399 "kevin cloud"
1400};
1401
1402char DosMessages[9][80] = {
1403 STR_NOPE1,
1404 STR_NOPE2,
1405 STR_NOPE3,
1406 STR_NOPE4,
1407 STR_NOPE5,
1408 STR_NOPE6,
1409 STR_NOPE7,
1410 STR_NOPE8,
1411 STR_NOPE9
1412};
1413
1414char MiscTitle[4][20] = {
1415 "BLOOD TEST",
1416 "STRAIGHT-LACED",
1417 "QUITE SHAPELY",
1418 "I AM WHAT I AMMO"
1419};
1420
1421char MiscStr[12][40] = {
1422 STR_MISC1,
1423 STR_MISC2,
1424 "",
1425
1426 STR_MISC3,
1427 STR_MISC4,
1428 "",
1429
1430 STR_MISC5,
1431 STR_MISC6,
1432 "",
1433
1434 STR_MISC7,
1435 STR_MISC8,
1436 STR_MISC9
1437};
1438
1439char MiscCorrect[4][5] = { "ss", "8", STR_STAR, "45" };
1440
1441
1442int
1443BackDoor (char *s)
1444{
1445 for (int i = 0; i < 5; i++)
1446 {
1447 if (!strcasecmp (s, BackDoorStrs[i]))
1448 {
1449 SETFONTCOLOR (14, 15);
1450 fontnumber = 0;
1451 PrintY = 175;
1452 VWB_DrawPic (0, 20 * 8, COPYPROTBOXPIC);
1453 US_CPrint (GoodBoyStrs[i * 2]);
1454 US_CPrint (GoodBoyStrs[i * 2 + 1]);
1455 VW_UpdateScreen ();
1456 return 1;
1457 }
1458 }
1459
1460 return 0;
1461}
1462
1463
1464void
1465CopyProtection (void)
1466{
1467#define TYPEBOX_Y 177
1468#define TYPEBOX_BKGD 0x9c
1469#define PRINTCOLOR HIGHLIGHT
1470
1471 unsigned i;
1472 int match, whichboss, bossnum, attempt, whichline;
1473 int enemypicked[4] = { 0, 0, 0, 0 };
1474 int bosses[4] = { BOSSPIC1PIC, BOSSPIC2PIC, BOSSPIC3PIC, BOSSPIC4PIC };
1475 int whichpicked[4] = { 0, 0, 0, 0 };
1476 int whichone, quiztype, whichmem, whichword;
1477 int memberpicked[5] = { 0, 0, 0, 0, 0 };
1478 int wordpicked[5] = { 0, 0, 0, 0, 0 };
1479
1480 char inputbuffer[20];
1481 char message[80];
1482
1483 enum
1484 {
1485 debriefing,
1486 checkmanual,
1487 staffquiz,
1488 miscquiz,
1489
1490 totaltypes
1491 };
1492
1493
1494
1495 attempt = 0;
1496 VW_FadeOut ();
1497 CA_CacheGrChunk (C_BACKDROPPIC);
1498 CacheLump (COPYPROT_LUMP_START, COPYPROT_LUMP_END);
1499 CA_CacheGrChunk (STARTFONT + 1);
1500 CA_LoadAllSounds ();
1501 StartCPMusic (COPYPRO_MUS);
1502 US_InitRndT (true);
1503
1504 while (attempt < 3)
1505 {
1506 fontnumber = 1;
1507 SETFONTCOLOR (PRINTCOLOR - 2, 15);
1508 VWB_DrawPic (0, 0, C_BACKDROPPIC);
1509 VWB_DrawPic (0, 0, COPYPROTTOPPIC);
1510 VWB_DrawPic (0, 20 * 8, COPYPROTBOXPIC);
1511 WindowX = WindowY = 0;
1512 WindowW = 320;
1513 WindowH = 200;
1514 PrintY = 65;
1515
1516 quiztype = US_RndT () % totaltypes;
1517 switch (quiztype)
1518 {
1519 //
1520 // BOSSES QUIZ
1521 //
1522 case debriefing:
1523 {
1524 PrintX = 0;
1525 US_Print (STR_DEBRIEF);
1526 SETFONTCOLOR (PRINTCOLOR, 15);
1527
1528 while (enemypicked[whichboss = US_RndT () & 3]);
1529 enemypicked[whichboss] = 1;
1530 bossnum = bosses[whichboss];
1531 VWB_DrawPic (128, 60, bossnum);
1532 fontnumber = 0;
1533 PrintY = 130;
1534 US_CPrint (STR_ENEMY1 "\n");
1535 US_CPrint (STR_ENEMY2 "\n\n");
1536
1537 VW_UpdateScreen ();
1538 VW_FadeIn ();
1539
1540 PrintX = 100;
1541 fontcolor = 15;
1542 backcolor = TYPEBOX_BKGD;
1543 inputbuffer[0] = 0;
1544 PrintY = TYPEBOX_Y;
1545 fontnumber = 1;
1546 US_LineInput (PrintX, PrintY, inputbuffer, 0, true, 20, 100);
1547
1548 match = 0;
1549 size_t inputlen = strlen(inputbuffer);
1550 if(inputlen > 3)
1551 {
1552 size_t bosslen = strlen(bossstrs[whichboss]);
1553 for (i = 0; i < bosslen; i++)
1554 {
1555 if (!strncasecmp (inputbuffer, bossstrs[whichboss] + i, inputlen))
1556 {
1557 match = 1;
1558 break;
1559 }
1560 }
1561 }
1562
1563 match += BackDoor (inputbuffer);
1564 break;
1565 }
1566
1567 //
1568 // MANUAL CHECK
1569 //
1570 case checkmanual:
1571 {
1572 while (wordpicked[whichword = US_RndT () % 5]);
1573 wordpicked[whichword] = 1;
1574 US_CPrint (STR_CHECKMAN);
1575 SETFONTCOLOR (PRINTCOLOR, 15);
1576 PrintY += 25;
1577 US_CPrint (STR_MAN1);
1578 US_CPrint (STR_MAN2);
1579 sprintf(message, STR_MAN3 " \"%s\" " STR_MAN4, WordStr[whichword]);
1580 US_CPrint (message);
1581 VW_UpdateScreen ();
1582 VW_FadeIn ();
1583
1584 PrintX = 146;
1585 fontcolor = 15;
1586 backcolor = TYPEBOX_BKGD;
1587 inputbuffer[0] = 0;
1588 PrintY = TYPEBOX_Y;
1589 US_LineInput (PrintX, PrintY, inputbuffer, 0, true, 6, 100);
1590
1591 match = 1 - (strcasecmp (inputbuffer, WordCorrect[whichword]) != 0);
1592 match += BackDoor (inputbuffer);
1593 break;
1594 }
1595
1596 //
1597 // STAFF QUIZ
1598 //
1599 case staffquiz:
1600 {
1601 while (memberpicked[whichmem = US_RndT () % 5]);
1602 memberpicked[whichmem] = 1;
1603 US_CPrint (STR_ID1);
1604 SETFONTCOLOR (PRINTCOLOR, 15);
1605 PrintY += 25;
1606 US_CPrint (MemberStr[whichmem * 2]);
1607 US_CPrint (MemberStr[whichmem * 2 + 1]);
1608 VW_UpdateScreen ();
1609 VW_FadeIn ();
1610
1611 PrintX = 100;
1612 fontcolor = 15;
1613 backcolor = TYPEBOX_BKGD;
1614 inputbuffer[0] = 0;
1615 PrintY = TYPEBOX_Y;
1616 US_LineInput (PrintX, PrintY, inputbuffer, 0, true, 20, 120);
1617
1618 match = 0;
1619 size_t inputlen = strlen(inputbuffer);
1620 if(inputlen > 2)
1621 {
1622 size_t memberlen = strlen(MemberCorrect[whichmem]);
1623 for (i = 0; i < memberlen; i++)
1624 {
1625 if (!strncasecmp (inputbuffer, MemberCorrect[whichmem] + i, inputlen))
1626 {
1627 match = 1;
1628 break;
1629 }
1630 }
1631 }
1632
1633 match += BackDoor (inputbuffer);
1634 break;
1635 }
1636
1637 //
1638 // MISCELLANEOUS QUESTIONS
1639 //
1640 case miscquiz:
1641 {
1642 while (whichpicked[whichone = US_RndT () & 3]);
1643 whichpicked[whichone] = 1;
1644 US_CPrint (MiscTitle[whichone]);
1645 SETFONTCOLOR (PRINTCOLOR, 15);
1646 PrintY += 25;
1647 US_CPrint (MiscStr[whichone * 3]);
1648 US_CPrint (MiscStr[whichone * 3 + 1]);
1649 US_CPrint (MiscStr[whichone * 3 + 2]);
1650 VW_UpdateScreen ();
1651 VW_FadeIn ();
1652
1653 PrintX = 146;
1654 fontcolor = 15;
1655 backcolor = TYPEBOX_BKGD;
1656 inputbuffer[0] = 0;
1657 PrintY = TYPEBOX_Y;
1658 US_LineInput (PrintX, PrintY, inputbuffer, 0, true, 6, 100);
1659
1660 match = 1 - (strcasecmp (inputbuffer, MiscCorrect[whichone]) != 0);
1661 match += BackDoor (inputbuffer);
1662 break;
1663 }
1664 }
1665
1666 //
1667 // IF NO MATCH, WE'VE GOT A (MINOR) PROBLEM!
1668 //
1669
1670 if (!match)
1671 {
1672 whichline = 2 * (US_RndT () % 9);
1673 SETFONTCOLOR (14, 15);
1674 fontnumber = 0;
1675 PrintY = 175;
1676 VWB_DrawPic (0, 20 * 8, COPYPROTBOXPIC);
1677 US_CPrint (CopyProFailedStrs[whichline]);
1678 US_CPrint (CopyProFailedStrs[whichline + 1]);
1679
1680 VW_UpdateScreen ();
1681 SD_PlaySound (NOWAYSND);
1682 IN_UserInput (TickBase * 6);
1683 VW_FadeOut ();
1684 attempt++;
1685 }
1686 else
1687 {
1688 int start;
1689
1690 SD_PlaySound (BONUS1UPSND);
1691 SD_WaitSoundDone ();
1692 UNCACHEGRCHUNK (STARTFONT + 1);
1693 UNCACHEGRCHUNK (C_BACKDROPPIC);
1694 UnCacheLump (COPYPROT_LUMP_START, COPYPROT_LUMP_END);
1695
1696 switch (SoundMode)
1697 {
1698 case sdm_Off:
1699 return;
1700 case sdm_PC:
1701 start = STARTPCSOUNDS;
1702 break;
1703 case sdm_AdLib:
1704 start = STARTADLIBSOUNDS;
1705 }
1706
1707/* for (i=0;i<NUMSOUNDS;i++,start++)
1708 MM_FreePtr ((memptr *)&audiosegs[start]); */
1709 return;
1710 }
1711 }
1712
1713 ClearMemory ();
1714 ShutdownId ();
1715
1716 printf ("%s\n", DosMessages[US_RndT () % 9]);
1717 exit (1);
1718}
1719
1720#endif // SPEARDEMO
1721#endif // GOODTIMES
1722#endif // SPEAR
1723//===========================================================================
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 @@
1// WL_MAIN.C
2
3#include "wl_def.h"
4#pragma hdrstop
5#include "wl_atmos.h"
6#include <SDL_syswm.h>
7
8
9/*
10=============================================================================
11
12 WOLFENSTEIN 3-D
13
14 An Id Software production
15
16 by John Carmack
17
18=============================================================================
19*/
20
21extern byte signon[];
22
23/*
24=============================================================================
25
26 LOCAL CONSTANTS
27
28=============================================================================
29*/
30
31
32#define FOCALLENGTH (0x5700l) // in global coordinates
33#define VIEWGLOBAL 0x10000 // globals visable flush to wall
34
35#define VIEWWIDTH 256 // size of view window
36#define VIEWHEIGHT 144
37
38/*
39=============================================================================
40
41 GLOBAL VARIABLES
42
43=============================================================================
44*/
45
46char str[80];
47int dirangle[9] = {0,ANGLES/8,2*ANGLES/8,3*ANGLES/8,4*ANGLES/8,
48 5*ANGLES/8,6*ANGLES/8,7*ANGLES/8,ANGLES};
49
50//
51// proejection variables
52//
53fixed focallength;
54unsigned screenofs;
55int viewscreenx, viewscreeny;
56int viewwidth;
57int viewheight;
58short centerx;
59int shootdelta; // pixels away from centerx a target can be
60fixed scale;
61int32_t heightnumerator;
62
63
64void Quit (const char *error,...);
65
66boolean startgame;
67boolean loadedgame;
68int mouseadjustment;
69
70char configdir[256] = "";
71char configname[13] = "config.";
72
73//
74// Command line parameter variables
75//
76boolean param_debugmode = false;
77boolean param_nowait = false;
78int param_difficulty = 1; // default is "normal"
79int param_tedlevel = -1; // default is not to start a level
80int param_joystickindex = 0;
81
82#if defined(_arch_dreamcast)
83int param_joystickhat = 0;
84int param_samplerate = 11025; // higher samplerates result in "out of memory"
85int param_audiobuffer = 4096 / (44100 / param_samplerate);
86#elif defined(GP2X_940)
87int param_joystickhat = -1;
88int param_samplerate = 11025; // higher samplerates result in "out of memory"
89int param_audiobuffer = 128;
90#else
91int param_joystickhat = -1;
92int param_samplerate = RB_SAMPR;
93int param_audiobuffer = 2048 / (44100 / RB_SAMPR);
94#endif
95
96int param_mission = 0;
97boolean param_goodtimes = false;
98boolean param_ignorenumchunks = false;
99
100/*
101=============================================================================
102
103 LOCAL VARIABLES
104
105=============================================================================
106*/
107
108
109/*
110====================
111=
112= ReadConfig
113=
114====================
115*/
116
117void ReadConfig(void)
118{
119 SDMode sd;
120 SMMode sm;
121 SDSMode sds;
122
123 char configpath[300];
124
125#ifdef _arch_dreamcast
126 DC_LoadFromVMU(configname);
127#endif
128
129 if(configdir[0])
130 snprintf(configpath, sizeof(configpath), "%s/%s", configdir, configname);
131 else
132 strcpy(configpath, configname);
133
134 const int file = open(configpath, O_RDONLY | O_BINARY);
135 if (file >= 0)
136 {
137 //
138 // valid config file
139 //
140 word tmp;
141 read(file,&tmp,sizeof(tmp));
142 if(tmp!=0xfefa)
143 {
144 close(file);
145 goto noconfig;
146 }
147 read(file,Scores,sizeof(HighScore) * MaxScores);
148
149 read(file,&sd,sizeof(sd));
150 read(file,&sm,sizeof(sm));
151 read(file,&sds,sizeof(sds));
152
153 read(file,&mouseenabled,sizeof(mouseenabled));
154 read(file,&joystickenabled,sizeof(joystickenabled));
155 boolean dummyJoypadEnabled;
156 read(file,&dummyJoypadEnabled,sizeof(dummyJoypadEnabled));
157 boolean dummyJoystickProgressive;
158 read(file,&dummyJoystickProgressive,sizeof(dummyJoystickProgressive));
159 int dummyJoystickPort = 0;
160 read(file,&dummyJoystickPort,sizeof(dummyJoystickPort));
161
162 read(file,dirscan,sizeof(dirscan));
163 read(file,buttonscan,sizeof(buttonscan));
164 read(file,buttonmouse,sizeof(buttonmouse));
165 read(file,buttonjoy,sizeof(buttonjoy));
166
167 read(file,&viewsize,sizeof(viewsize));
168 read(file,&mouseadjustment,sizeof(mouseadjustment));
169
170 close(file);
171
172 /* hack to always enable sound */
173 sd = sdm_AdLib;
174 sm = smm_AdLib;
175
176 sds = sds_SoundBlaster;
177
178 // make sure values are correct
179
180 if(mouseenabled) mouseenabled=true;
181 if(joystickenabled) joystickenabled=true;
182
183 if (!MousePresent)
184 mouseenabled = false;
185 if (!IN_JoyPresent())
186 joystickenabled = false;
187
188 if(mouseadjustment<0) mouseadjustment=0;
189 else if(mouseadjustment>9) mouseadjustment=9;
190
191 if(viewsize<4) viewsize=4;
192 else if(viewsize>21) viewsize=21;
193
194 MainMenu[6].active=1;
195 MainItems.curpos=0;
196 }
197 else
198 {
199 //
200 // no config file, so select by hardware
201 //
202noconfig:
203 // always -FW19
204 sd = sdm_AdLib;
205 sm = smm_AdLib;
206
207 sds = sds_SoundBlaster;
208
209 if (MousePresent)
210 mouseenabled = true;
211
212 if (IN_JoyPresent())
213 joystickenabled = true;
214
215 viewsize = 19; // start with a good size
216 mouseadjustment=5;
217 }
218
219 SD_SetMusicMode (sm);
220 SD_SetSoundMode (sd);
221 SD_SetDigiDevice (sds);
222}
223
224/*
225====================
226=
227= WriteConfig
228=
229====================
230*/
231
232void WriteConfig(void)
233{
234 char configpath[300];
235
236#ifdef _arch_dreamcast
237 fs_unlink(configname);
238#endif
239
240 if(configdir[0])
241 snprintf(configpath, sizeof(configpath), "%s/%s", configdir, configname);
242 else
243 strcpy(configpath, configname);
244
245 const int file = open(configpath, O_CREAT | O_WRONLY | O_BINARY, 0644);
246 if (file != -1)
247 {
248 word tmp=0xfefa;
249 write(file,&tmp,sizeof(tmp));
250 write(file,Scores,sizeof(HighScore) * MaxScores);
251
252 write(file,&SoundMode,sizeof(SoundMode));
253 write(file,&MusicMode,sizeof(MusicMode));
254 write(file,&DigiMode,sizeof(DigiMode));
255
256 write(file,&mouseenabled,sizeof(mouseenabled));
257 write(file,&joystickenabled,sizeof(joystickenabled));
258 boolean dummyJoypadEnabled = false;
259 write(file,&dummyJoypadEnabled,sizeof(dummyJoypadEnabled));
260 boolean dummyJoystickProgressive = false;
261 write(file,&dummyJoystickProgressive,sizeof(dummyJoystickProgressive));
262 int dummyJoystickPort = 0;
263 write(file,&dummyJoystickPort,sizeof(dummyJoystickPort));
264
265 write(file,dirscan,sizeof(dirscan));
266 write(file,buttonscan,sizeof(buttonscan));
267 write(file,buttonmouse,sizeof(buttonmouse));
268 write(file,buttonjoy,sizeof(buttonjoy));
269
270 write(file,&viewsize,sizeof(viewsize));
271 write(file,&mouseadjustment,sizeof(mouseadjustment));
272
273 close(file);
274 }
275#ifdef _arch_dreamcast
276 DC_SaveToVMU(configname, NULL);
277#endif
278}
279
280
281//===========================================================================
282
283/*
284=====================
285=
286= NewGame
287=
288= Set up new game to start from the beginning
289=
290=====================
291*/
292
293void NewGame (int difficulty,int episode)
294{
295 memset (&gamestate,0,sizeof(gamestate));
296 gamestate.difficulty = difficulty;
297 gamestate.weapon = gamestate.bestweapon
298 = gamestate.chosenweapon = wp_pistol;
299 gamestate.health = 100;
300 gamestate.ammo = STARTAMMO;
301 gamestate.lives = 3;
302 gamestate.nextextra = EXTRAPOINTS;
303 gamestate.episode=episode;
304
305 startgame = true;
306}
307
308//===========================================================================
309
310void DiskFlopAnim(int x,int y)
311{
312 static int8_t which=0;
313 if (!x && !y)
314 return;
315 VWB_DrawPic(x,y,C_DISKLOADING1PIC+which);
316 VW_UpdateScreen();
317 which^=1;
318}
319
320
321int32_t DoChecksum(byte *source,unsigned size,int32_t checksum)
322{
323 unsigned i;
324
325 for (i=0;i<size-1;i++)
326 checksum += source[i]^source[i+1];
327
328 return checksum;
329}
330
331
332/*
333==================
334=
335= SaveTheGame
336=
337==================
338*/
339
340extern statetype s_grdstand;
341extern statetype s_player;
342
343boolean SaveTheGame(FILE *file,int x,int y)
344{
345// struct diskfree_t dfree;
346// int32_t avail,size,checksum;
347 int checksum;
348 objtype *ob;
349 objtype nullobj;
350 statobj_t nullstat;
351
352/* if (_dos_getdiskfree(0,&dfree))
353 Quit("Error in _dos_getdiskfree call");
354
355 avail = (int32_t)dfree.avail_clusters *
356 dfree.bytes_per_sector *
357 dfree.sectors_per_cluster;
358
359 size = 0;
360 for (ob = player; ob ; ob=ob->next)
361 size += sizeof(*ob);
362 size += sizeof(nullobj);
363
364 size += sizeof(gamestate) +
365 sizeof(LRstruct)*LRpack +
366 sizeof(tilemap) +
367 sizeof(actorat) +
368 sizeof(laststatobj) +
369 sizeof(statobjlist) +
370 sizeof(doorposition) +
371 sizeof(pwallstate) +
372 sizeof(pwalltile) +
373 sizeof(pwallx) +
374 sizeof(pwally) +
375 sizeof(pwalldir) +
376 sizeof(pwallpos);
377
378 if (avail < size)
379 {
380 Message(STR_NOSPACE1"\n"STR_NOSPACE2);
381 return false;
382 }*/
383
384 checksum = 0;
385
386 DiskFlopAnim(x,y);
387 fwrite(&gamestate,sizeof(gamestate),1,file);
388 checksum = DoChecksum((byte *)&gamestate,sizeof(gamestate),checksum);
389
390 DiskFlopAnim(x,y);
391 fwrite(&LevelRatios[0],sizeof(LRstruct)*LRpack,1,file);
392 checksum = DoChecksum((byte *)&LevelRatios[0],sizeof(LRstruct)*LRpack,checksum);
393
394 DiskFlopAnim(x,y);
395 fwrite(tilemap,sizeof(tilemap),1,file);
396 checksum = DoChecksum((byte *)tilemap,sizeof(tilemap),checksum);
397 DiskFlopAnim(x,y);
398
399 int i;
400 for(i=0;i<MAPSIZE;i++)
401 {
402 for(int j=0;j<MAPSIZE;j++)
403 {
404 word actnum;
405 objtype *objptr=actorat[i][j];
406 if(ISPOINTER(objptr))
407 actnum=0x8000 | (word)(objptr-objlist);
408 else
409 actnum=(word)(uintptr_t)objptr;
410 fwrite(&actnum,sizeof(actnum),1,file);
411 checksum = DoChecksum((byte *)&actnum,sizeof(actnum),checksum);
412 }
413 }
414
415 fwrite (areaconnect,sizeof(areaconnect),1,file);
416 fwrite (areabyplayer,sizeof(areabyplayer),1,file);
417
418 // player object needs special treatment as it's in WL_AGENT.CPP and not in
419 // WL_ACT2.CPP which could cause problems for the relative addressing
420
421 ob = player;
422 DiskFlopAnim(x,y);
423 memcpy(&nullobj,ob,sizeof(nullobj));
424 nullobj.state=(statetype *) ((uintptr_t)nullobj.state-(uintptr_t)&s_player);
425 fwrite(&nullobj,sizeof(nullobj),1,file);
426 ob = ob->next;
427
428 DiskFlopAnim(x,y);
429 for (; ob ; ob=ob->next)
430 {
431 memcpy(&nullobj,ob,sizeof(nullobj));
432 nullobj.state=(statetype *) ((uintptr_t)nullobj.state-(uintptr_t)&s_grdstand);
433 fwrite(&nullobj,sizeof(nullobj),1,file);
434 }
435 nullobj.active = ac_badobject; // end of file marker
436 DiskFlopAnim(x,y);
437 fwrite(&nullobj,sizeof(nullobj),1,file);
438
439 DiskFlopAnim(x,y);
440 word laststatobjnum=(word) (laststatobj-statobjlist);
441 fwrite(&laststatobjnum,sizeof(laststatobjnum),1,file);
442 checksum = DoChecksum((byte *)&laststatobjnum,sizeof(laststatobjnum),checksum);
443
444 DiskFlopAnim(x,y);
445 for(i=0;i<MAXSTATS;i++)
446 {
447 memcpy(&nullstat,statobjlist+i,sizeof(nullstat));
448 nullstat.visspot=(byte *) ((uintptr_t) nullstat.visspot-(uintptr_t)spotvis);
449 fwrite(&nullstat,sizeof(nullstat),1,file);
450 checksum = DoChecksum((byte *)&nullstat,sizeof(nullstat),checksum);
451 }
452
453 DiskFlopAnim(x,y);
454 fwrite (doorposition,sizeof(doorposition),1,file);
455 checksum = DoChecksum((byte *)doorposition,sizeof(doorposition),checksum);
456 DiskFlopAnim(x,y);
457 fwrite (doorobjlist,sizeof(doorobjlist),1,file);
458 checksum = DoChecksum((byte *)doorobjlist,sizeof(doorobjlist),checksum);
459
460 DiskFlopAnim(x,y);
461 fwrite (&pwallstate,sizeof(pwallstate),1,file);
462 checksum = DoChecksum((byte *)&pwallstate,sizeof(pwallstate),checksum);
463 fwrite (&pwalltile,sizeof(pwalltile),1,file);
464 checksum = DoChecksum((byte *)&pwalltile,sizeof(pwalltile),checksum);
465 fwrite (&pwallx,sizeof(pwallx),1,file);
466 checksum = DoChecksum((byte *)&pwallx,sizeof(pwallx),checksum);
467 fwrite (&pwally,sizeof(pwally),1,file);
468 checksum = DoChecksum((byte *)&pwally,sizeof(pwally),checksum);
469 fwrite (&pwalldir,sizeof(pwalldir),1,file);
470 checksum = DoChecksum((byte *)&pwalldir,sizeof(pwalldir),checksum);
471 fwrite (&pwallpos,sizeof(pwallpos),1,file);
472 checksum = DoChecksum((byte *)&pwallpos,sizeof(pwallpos),checksum);
473
474 //
475 // WRITE OUT CHECKSUM
476 //
477 fwrite (&checksum,sizeof(checksum),1,file);
478
479 fwrite (&lastgamemusicoffset,sizeof(lastgamemusicoffset),1,file);
480
481 return(true);
482}
483
484//===========================================================================
485
486/*
487==================
488=
489= LoadTheGame
490=
491==================
492*/
493
494boolean LoadTheGame(FILE *file,int x,int y)
495{
496 int32_t checksum,oldchecksum;
497 objtype nullobj;
498 statobj_t nullstat;
499
500 checksum = 0;
501
502 DiskFlopAnim(x,y);
503 fread (&gamestate,sizeof(gamestate),1,file);
504 checksum = DoChecksum((byte *)&gamestate,sizeof(gamestate),checksum);
505
506 DiskFlopAnim(x,y);
507 fread (&LevelRatios[0],sizeof(LRstruct)*LRpack,1,file);
508 checksum = DoChecksum((byte *)&LevelRatios[0],sizeof(LRstruct)*LRpack,checksum);
509
510 DiskFlopAnim(x,y);
511 SetupGameLevel ();
512
513 DiskFlopAnim(x,y);
514 fread (tilemap,sizeof(tilemap),1,file);
515 checksum = DoChecksum((byte *)tilemap,sizeof(tilemap),checksum);
516
517 DiskFlopAnim(x,y);
518
519 int actnum=0, i;
520 for(i=0;i<MAPSIZE;i++)
521 {
522 for(int j=0;j<MAPSIZE;j++)
523 {
524 fread (&actnum,sizeof(word),1,file);
525 checksum = DoChecksum((byte *) &actnum,sizeof(word),checksum);
526 if(actnum&0x8000)
527 actorat[i][j]=objlist+(actnum&0x7fff);
528 else
529 actorat[i][j]=(objtype *)(uintptr_t) actnum;
530 }
531 }
532
533 fread (areaconnect,sizeof(areaconnect),1,file);
534 fread (areabyplayer,sizeof(areabyplayer),1,file);
535
536 InitActorList ();
537 DiskFlopAnim(x,y);
538 fread (player,sizeof(*player),1,file);
539 player->state=(statetype *) ((uintptr_t)player->state+(uintptr_t)&s_player);
540
541 while (1)
542 {
543 DiskFlopAnim(x,y);
544 fread (&nullobj,sizeof(nullobj),1,file);
545 if (nullobj.active == ac_badobject)
546 break;
547 GetNewActor ();
548 nullobj.state=(statetype *) ((uintptr_t)nullobj.state+(uintptr_t)&s_grdstand);
549 // don't copy over the links
550 memcpy (newobj,&nullobj,sizeof(nullobj)-8);
551 }
552
553 DiskFlopAnim(x,y);
554 word laststatobjnum;
555 fread (&laststatobjnum,sizeof(laststatobjnum),1,file);
556 laststatobj=statobjlist+laststatobjnum;
557 checksum = DoChecksum((byte *)&laststatobjnum,sizeof(laststatobjnum),checksum);
558
559 DiskFlopAnim(x,y);
560 for(i=0;i<MAXSTATS;i++)
561 {
562 fread(&nullstat,sizeof(nullstat),1,file);
563 checksum = DoChecksum((byte *)&nullstat,sizeof(nullstat),checksum);
564 nullstat.visspot=(byte *) ((uintptr_t)nullstat.visspot+(uintptr_t)spotvis);
565 memcpy(statobjlist+i,&nullstat,sizeof(nullstat));
566 }
567
568 DiskFlopAnim(x,y);
569 fread (doorposition,sizeof(doorposition),1,file);
570 checksum = DoChecksum((byte *)doorposition,sizeof(doorposition),checksum);
571 DiskFlopAnim(x,y);
572 fread (doorobjlist,sizeof(doorobjlist),1,file);
573 checksum = DoChecksum((byte *)doorobjlist,sizeof(doorobjlist),checksum);
574
575 DiskFlopAnim(x,y);
576 fread (&pwallstate,sizeof(pwallstate),1,file);
577 checksum = DoChecksum((byte *)&pwallstate,sizeof(pwallstate),checksum);
578 fread (&pwalltile,sizeof(pwalltile),1,file);
579 checksum = DoChecksum((byte *)&pwalltile,sizeof(pwalltile),checksum);
580 fread (&pwallx,sizeof(pwallx),1,file);
581 checksum = DoChecksum((byte *)&pwallx,sizeof(pwallx),checksum);
582 fread (&pwally,sizeof(pwally),1,file);
583 checksum = DoChecksum((byte *)&pwally,sizeof(pwally),checksum);
584 fread (&pwalldir,sizeof(pwalldir),1,file);
585 checksum = DoChecksum((byte *)&pwalldir,sizeof(pwalldir),checksum);
586 fread (&pwallpos,sizeof(pwallpos),1,file);
587 checksum = DoChecksum((byte *)&pwallpos,sizeof(pwallpos),checksum);
588
589 if (gamestate.secretcount) // assign valid floorcodes under moved pushwalls
590 {
591 word *map, *obj; word tile, sprite;
592 map = mapsegs[0]; obj = mapsegs[1];
593 for (y=0;y<mapheight;y++)
594 for (x=0;x<mapwidth;x++)
595 {
596 tile = *map++; sprite = *obj++;
597 if (sprite == PUSHABLETILE && !tilemap[x][y]
598 && (tile < AREATILE || tile >= (AREATILE+NUMMAPS)))
599 {
600 if (*map >= AREATILE)
601 tile = *map;
602 if (*(map-1-mapwidth) >= AREATILE)
603 tile = *(map-1-mapwidth);
604 if (*(map-1+mapwidth) >= AREATILE)
605 tile = *(map-1+mapwidth);
606 if ( *(map-2) >= AREATILE)
607 tile = *(map-2);
608
609 *(map-1) = tile; *(obj-1) = 0;
610 }
611 }
612 }
613
614 Thrust(0,0); // set player->areanumber to the floortile you're standing on
615
616 fread (&oldchecksum,sizeof(oldchecksum),1,file);
617
618 fread (&lastgamemusicoffset,sizeof(lastgamemusicoffset),1,file);
619 if(lastgamemusicoffset<0) lastgamemusicoffset=0;
620
621
622 if (oldchecksum != checksum)
623 {
624 Message(STR_SAVECHT1"\n"
625 STR_SAVECHT2"\n"
626 STR_SAVECHT3"\n"
627 STR_SAVECHT4);
628
629 IN_ClearKeysDown();
630 IN_Ack();
631
632 gamestate.oldscore = gamestate.score = 0;
633 gamestate.lives = 1;
634 gamestate.weapon =
635 gamestate.chosenweapon =
636 gamestate.bestweapon = wp_pistol;
637 gamestate.ammo = 8;
638 }
639
640 return true;
641}
642
643//===========================================================================
644
645/*
646==========================
647=
648= ShutdownId
649=
650= Shuts down all ID_?? managers
651=
652==========================
653*/
654
655void ShutdownId (void)
656{
657 US_Shutdown (); // This line is completely useless...
658 SD_Shutdown ();
659 PM_Shutdown ();
660 IN_Shutdown ();
661 VW_Shutdown ();
662 CA_Shutdown ();
663#if defined(GP2X_940)
664 GP2X_Shutdown();
665#endif
666}
667
668
669//===========================================================================
670
671/*
672==================
673=
674= BuildTables
675=
676= Calculates:
677=
678= scale projection constant
679= sintable/costable overlapping fractional tables
680=
681==================
682*/
683
684const float radtoint = (float)(FINEANGLES/2/PI);
685
686void BuildTables (void)
687{
688 //
689 // calculate fine tangents
690 //
691
692 int i;
693 for(i=0;i<FINEANGLES/8;i++)
694 {
695 double tang=tan((i+0.5)/radtoint);
696 finetangent[i]=(int32_t)(tang*GLOBAL1);
697 finetangent[FINEANGLES/4-1-i]=(int32_t)((1/tang)*GLOBAL1);
698 }
699
700 //
701 // costable overlays sintable with a quarter phase shift
702 // ANGLES is assumed to be divisable by four
703 //
704
705 float angle=0;
706 float anglestep=(float)(PI/2/ANGLEQUAD);
707 for(i=0; i<ANGLEQUAD; i++)
708 {
709 fixed value=(int32_t)(GLOBAL1*sin(angle));
710 sintable[i]=sintable[i+ANGLES]=sintable[ANGLES/2-i]=value;
711 sintable[ANGLES-i]=sintable[ANGLES/2+i]=-value;
712 angle+=anglestep;
713 }
714 sintable[ANGLEQUAD] = 65536;
715 sintable[3*ANGLEQUAD] = -65536;
716
717#if defined(USE_STARSKY) || defined(USE_RAIN) || defined(USE_SNOW)
718 Init3DPoints();
719#endif
720}
721
722//===========================================================================
723
724
725/*
726====================
727=
728= CalcProjection
729=
730= Uses focallength
731=
732====================
733*/
734
735void CalcProjection (int32_t focal)
736{
737 int i;
738 int intang;
739 float angle;
740 double tang;
741 int halfview;
742 double facedist;
743
744 focallength = focal;
745 facedist = focal+MINDIST;
746 halfview = viewwidth/2; // half view in pixels
747
748 //
749 // calculate scale value for vertical height calculations
750 // and sprite x calculations
751 //
752 scale = (fixed) (halfview*facedist/(VIEWGLOBAL/2));
753
754 //
755 // divide heightnumerator by a posts distance to get the posts height for
756 // the heightbuffer. The pixel height is height>>2
757 //
758 heightnumerator = (TILEGLOBAL*scale)>>6;
759
760 //
761 // calculate the angle offset from view angle of each pixel's ray
762 //
763
764 for (i=0;i<halfview;i++)
765 {
766 // start 1/2 pixel over, so viewangle bisects two middle pixels
767 tang = (int32_t)i*VIEWGLOBAL/viewwidth/facedist;
768 angle = (float) atan(tang);
769 intang = (int) (angle*radtoint);
770 pixelangle[halfview-1-i] = intang;
771 pixelangle[halfview+i] = -intang;
772 }
773}
774
775
776
777//===========================================================================
778
779/*
780===================
781=
782= SetupWalls
783=
784= Map tile values to scaled pics
785=
786===================
787*/
788
789void SetupWalls (void)
790{
791 int i;
792
793 horizwall[0]=0;
794 vertwall[0]=0;
795
796 for (i=1;i<MAXWALLTILES;i++)
797 {
798 horizwall[i]=(i-1)*2;
799 vertwall[i]=(i-1)*2+1;
800 }
801}
802
803//===========================================================================
804
805/*
806==========================
807=
808= SignonScreen
809=
810==========================
811*/
812
813void SignonScreen (void) // VGA version
814{
815 VL_SetVGAPlaneMode ();
816
817 VL_MungePic (signon,320,200);
818 VL_MemToScreen (signon,320,200,0,0);
819}
820
821
822/*
823==========================
824=
825= FinishSignon
826=
827==========================
828*/
829
830void FinishSignon (void)
831{
832#ifndef SPEAR
833 VW_Bar (0,189,300,11,VL_GetPixel(0,0));
834 WindowX = 0;
835 WindowW = 320;
836 PrintY = 190;
837
838 #ifndef JAPAN
839 SETFONTCOLOR(14,4);
840
841 #ifdef SPANISH
842 US_CPrint ("Oprima una tecla");
843 #else
844 US_CPrint ("Press a key");
845 #endif
846
847 #endif
848
849 VH_UpdateScreen();
850
851 if (!param_nowait)
852 IN_Ack ();
853
854 #ifndef JAPAN
855 VW_Bar (0,189,300,11,VL_GetPixel(0,0));
856
857 PrintY = 190;
858 SETFONTCOLOR(10,4);
859
860 #ifdef SPANISH
861 US_CPrint ("pensando...");
862 #else
863 US_CPrint ("Working...");
864 #endif
865
866 VH_UpdateScreen();
867 #endif
868
869 SETFONTCOLOR(0,15);
870#else
871 VH_UpdateScreen();
872
873 if (!param_nowait)
874 VW_WaitVBL(3*70);
875#endif
876}
877
878//===========================================================================
879
880/*
881=====================
882=
883= InitDigiMap
884=
885=====================
886*/
887
888// channel mapping:
889// -1: any non reserved channel
890// 0: player weapons
891// 1: boss weapons
892
893static int wolfdigimap[] =
894 {
895 // These first sounds are in the upload version
896#ifndef SPEAR
897 HALTSND, 0, -1,
898 DOGBARKSND, 1, -1,
899 CLOSEDOORSND, 2, -1,
900 OPENDOORSND, 3, -1,
901 ATKMACHINEGUNSND, 4, 0,
902 ATKPISTOLSND, 5, 0,
903 ATKGATLINGSND, 6, 0,
904 SCHUTZADSND, 7, -1,
905 GUTENTAGSND, 8, -1,
906 MUTTISND, 9, -1,
907 BOSSFIRESND, 10, 1,
908 SSFIRESND, 11, -1,
909 DEATHSCREAM1SND, 12, -1,
910 DEATHSCREAM2SND, 13, -1,
911 DEATHSCREAM3SND, 13, -1,
912 TAKEDAMAGESND, 14, -1,
913 PUSHWALLSND, 15, -1,
914
915 LEBENSND, 20, -1,
916 NAZIFIRESND, 21, -1,
917 SLURPIESND, 22, -1,
918
919 YEAHSND, 32, -1,
920
921#ifndef UPLOAD
922 // These are in all other episodes
923 DOGDEATHSND, 16, -1,
924 AHHHGSND, 17, -1,
925 DIESND, 18, -1,
926 EVASND, 19, -1,
927
928 TOT_HUNDSND, 23, -1,
929 MEINGOTTSND, 24, -1,
930 SCHABBSHASND, 25, -1,
931 HITLERHASND, 26, -1,
932 SPIONSND, 27, -1,
933 NEINSOVASSND, 28, -1,
934 DOGATTACKSND, 29, -1,
935 LEVELDONESND, 30, -1,
936 MECHSTEPSND, 31, -1,
937
938 SCHEISTSND, 33, -1,
939 DEATHSCREAM4SND, 34, -1, // AIIEEE
940 DEATHSCREAM5SND, 35, -1, // DEE-DEE
941 DONNERSND, 36, -1, // EPISODE 4 BOSS DIE
942 EINESND, 37, -1, // EPISODE 4 BOSS SIGHTING
943 ERLAUBENSND, 38, -1, // EPISODE 6 BOSS SIGHTING
944 DEATHSCREAM6SND, 39, -1, // FART
945 DEATHSCREAM7SND, 40, -1, // GASP
946 DEATHSCREAM8SND, 41, -1, // GUH-BOY!
947 DEATHSCREAM9SND, 42, -1, // AH GEEZ!
948 KEINSND, 43, -1, // EPISODE 5 BOSS SIGHTING
949 MEINSND, 44, -1, // EPISODE 6 BOSS DIE
950 ROSESND, 45, -1, // EPISODE 5 BOSS DIE
951
952#endif
953#else
954//
955// SPEAR OF DESTINY DIGISOUNDS
956//
957 HALTSND, 0, -1,
958 CLOSEDOORSND, 2, -1,
959 OPENDOORSND, 3, -1,
960 ATKMACHINEGUNSND, 4, 0,
961 ATKPISTOLSND, 5, 0,
962 ATKGATLINGSND, 6, 0,
963 SCHUTZADSND, 7, -1,
964 BOSSFIRESND, 8, 1,
965 SSFIRESND, 9, -1,
966 DEATHSCREAM1SND, 10, -1,
967 DEATHSCREAM2SND, 11, -1,
968 TAKEDAMAGESND, 12, -1,
969 PUSHWALLSND, 13, -1,
970 AHHHGSND, 15, -1,
971 LEBENSND, 16, -1,
972 NAZIFIRESND, 17, -1,
973 SLURPIESND, 18, -1,
974 LEVELDONESND, 22, -1,
975 DEATHSCREAM4SND, 23, -1, // AIIEEE
976 DEATHSCREAM3SND, 23, -1, // DOUBLY-MAPPED!!!
977 DEATHSCREAM5SND, 24, -1, // DEE-DEE
978 DEATHSCREAM6SND, 25, -1, // FART
979 DEATHSCREAM7SND, 26, -1, // GASP
980 DEATHSCREAM8SND, 27, -1, // GUH-BOY!
981 DEATHSCREAM9SND, 28, -1, // AH GEEZ!
982 GETGATLINGSND, 38, -1, // Got Gat replacement
983
984#ifndef SPEARDEMO
985 DOGBARKSND, 1, -1,
986 DOGDEATHSND, 14, -1,
987 SPIONSND, 19, -1,
988 NEINSOVASSND, 20, -1,
989 DOGATTACKSND, 21, -1,
990 TRANSSIGHTSND, 29, -1, // Trans Sight
991 TRANSDEATHSND, 30, -1, // Trans Death
992 WILHELMSIGHTSND, 31, -1, // Wilhelm Sight
993 WILHELMDEATHSND, 32, -1, // Wilhelm Death
994 UBERDEATHSND, 33, -1, // Uber Death
995 KNIGHTSIGHTSND, 34, -1, // Death Knight Sight
996 KNIGHTDEATHSND, 35, -1, // Death Knight Death
997 ANGELSIGHTSND, 36, -1, // Angel Sight
998 ANGELDEATHSND, 37, -1, // Angel Death
999 GETSPEARSND, 39, -1, // Got Spear replacement
1000#endif
1001#endif
1002 LASTSOUND
1003 };
1004
1005
1006void InitDigiMap (void)
1007{
1008 int *map;
1009
1010 int i = 0;
1011 for (map = wolfdigimap; *map != LASTSOUND; map += 3)
1012 {
1013 rb->splashf(0, "Preparing sounds (%d/%d)", ++i, ARRAYLEN(wolfdigimap)/3);
1014 DigiMap[map[0]] = map[1];
1015 DigiChannel[map[1]] = map[2];
1016 SD_PrepareSound(map[1]);
1017 rb->yield();
1018 }
1019}
1020
1021#ifndef SPEAR
1022CP_iteminfo MusicItems={CTL_X,CTL_Y,6,0,32};
1023CP_itemtype MusicMenu[]=
1024 {
1025 {1,"Get Them!",0},
1026 {1,"Searching",0},
1027 {1,"P.O.W.",0},
1028 {1,"Suspense",0},
1029 {1,"War March",0},
1030 {1,"Around The Corner!",0},
1031
1032 {1,"Nazi Anthem",0},
1033 {1,"Lurking...",0},
1034 {1,"Going After Hitler",0},
1035 {1,"Pounding Headache",0},
1036 {1,"Into the Dungeons",0},
1037 {1,"Ultimate Conquest",0},
1038
1039 {1,"Kill the S.O.B.",0},
1040 {1,"The Nazi Rap",0},
1041 {1,"Twelfth Hour",0},
1042 {1,"Zero Hour",0},
1043 {1,"Ultimate Conquest",0},
1044 {1,"Wolfpack",0}
1045 };
1046#else
1047CP_iteminfo MusicItems={CTL_X,CTL_Y-20,9,0,32};
1048CP_itemtype MusicMenu[]=
1049 {
1050 {1,"Funky Colonel Bill",0},
1051 {1,"Death To The Nazis",0},
1052 {1,"Tiptoeing Around",0},
1053 {1,"Is This THE END?",0},
1054 {1,"Evil Incarnate",0},
1055 {1,"Jazzin' Them Nazis",0},
1056 {1,"Puttin' It To The Enemy",0},
1057 {1,"The SS Gonna Get You",0},
1058 {1,"Towering Above",0}
1059 };
1060#endif
1061
1062#ifndef SPEARDEMO
1063void DoJukebox(void)
1064{
1065 int which,lastsong=-1;
1066 unsigned start;
1067 unsigned songs[]=
1068 {
1069#ifndef SPEAR
1070 GETTHEM_MUS,
1071 SEARCHN_MUS,
1072 POW_MUS,
1073 SUSPENSE_MUS,
1074 WARMARCH_MUS,
1075 CORNER_MUS,
1076
1077 NAZI_OMI_MUS,
1078 PREGNANT_MUS,
1079 GOINGAFT_MUS,
1080 HEADACHE_MUS,
1081 DUNGEON_MUS,
1082 ULTIMATE_MUS,
1083
1084 INTROCW3_MUS,
1085 NAZI_RAP_MUS,
1086 TWELFTH_MUS,
1087 ZEROHOUR_MUS,
1088 ULTIMATE_MUS,
1089 PACMAN_MUS
1090#else
1091 XFUNKIE_MUS, // 0
1092 XDEATH_MUS, // 2
1093 XTIPTOE_MUS, // 4
1094 XTHEEND_MUS, // 7
1095 XEVIL_MUS, // 17
1096 XJAZNAZI_MUS, // 18
1097 XPUTIT_MUS, // 21
1098 XGETYOU_MUS, // 22
1099 XTOWER2_MUS // 23
1100#endif
1101 };
1102
1103 IN_ClearKeysDown();
1104 if (!AdLibPresent && !SoundBlasterPresent)
1105 return;
1106
1107 MenuFadeOut();
1108
1109#ifndef SPEAR
1110#ifndef UPLOAD
1111 start = ((SDL_GetTicks()/10)%3)*6;
1112#else
1113 start = 0;
1114#endif
1115#else
1116 start = 0;
1117#endif
1118
1119 CA_CacheGrChunk (STARTFONT+1);
1120#ifdef SPEAR
1121 CacheLump (BACKDROP_LUMP_START,BACKDROP_LUMP_END);
1122#else
1123 CacheLump (CONTROLS_LUMP_START,CONTROLS_LUMP_END);
1124#endif
1125 CA_LoadAllSounds ();
1126
1127 fontnumber=1;
1128 ClearMScreen ();
1129 VWB_DrawPic(112,184,C_MOUSELBACKPIC);
1130 DrawStripes (10);
1131 SETFONTCOLOR (TEXTCOLOR,BKGDCOLOR);
1132
1133#ifndef SPEAR
1134 DrawWindow (CTL_X-2,CTL_Y-6,280,13*7,BKGDCOLOR);
1135#else
1136 DrawWindow (CTL_X-2,CTL_Y-26,280,13*10,BKGDCOLOR);
1137#endif
1138
1139 DrawMenu (&MusicItems,&MusicMenu[start]);
1140
1141 SETFONTCOLOR (READHCOLOR,BKGDCOLOR);
1142 PrintY=15;
1143 WindowX = 0;
1144 WindowY = 320;
1145 US_CPrint ("Robert's Jukebox");
1146
1147 SETFONTCOLOR (TEXTCOLOR,BKGDCOLOR);
1148 VW_UpdateScreen();
1149 MenuFadeIn();
1150
1151 do
1152 {
1153 which = HandleMenu(&MusicItems,&MusicMenu[start],NULL);
1154 if (which>=0)
1155 {
1156 if (lastsong >= 0)
1157 MusicMenu[start+lastsong].active = 1;
1158
1159 StartCPMusic(songs[start + which]);
1160 MusicMenu[start+which].active = 2;
1161 DrawMenu (&MusicItems,&MusicMenu[start]);
1162 VW_UpdateScreen();
1163 lastsong = which;
1164 }
1165 } while(which>=0);
1166
1167 MenuFadeOut();
1168 IN_ClearKeysDown();
1169#ifdef SPEAR
1170 UnCacheLump (BACKDROP_LUMP_START,BACKDROP_LUMP_END);
1171#else
1172 UnCacheLump (CONTROLS_LUMP_START,CONTROLS_LUMP_END);
1173#endif
1174}
1175#endif
1176
1177/*
1178==========================
1179=
1180= InitGame
1181=
1182= Load a few things right away
1183=
1184==========================
1185*/
1186
1187static void InitGame()
1188{
1189#ifndef SPEARDEMO
1190 boolean didjukebox=false;
1191#endif
1192
1193 // initialize SDL
1194#if defined _WIN32
1195 putenv("SDL_VIDEODRIVER=directx");
1196#endif
1197 if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0)
1198 {
1199 printf("Unable to init SDL: %s\n", SDL_GetError());
1200 exit(1);
1201 }
1202
1203 atexit(SDL_Quit);
1204
1205 int numJoysticks = SDL_NumJoysticks();
1206 if(param_joystickindex && (param_joystickindex < -1 || param_joystickindex >= numJoysticks))
1207 {
1208 if(!numJoysticks)
1209 printf("No joysticks are available to SDL!\n");
1210 else
1211 printf("The joystick index must be between -1 and %i!\n", numJoysticks - 1);
1212 exit(1);
1213 }
1214
1215#if defined(GP2X_940)
1216 GP2X_MemoryInit();
1217#endif
1218
1219 SignonScreen ();
1220
1221#if defined _WIN32
1222 if(!fullscreen)
1223 {
1224 struct SDL_SysWMinfo wmInfo;
1225 SDL_VERSION(&wmInfo.version);
1226
1227 if(SDL_GetWMInfo(&wmInfo) != -1)
1228 {
1229 HWND hwndSDL = wmInfo.window;
1230 DWORD style = GetWindowLong(hwndSDL, GWL_STYLE) & ~WS_SYSMENU;
1231 SetWindowLong(hwndSDL, GWL_STYLE, style);
1232 SetWindowPos(hwndSDL, NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
1233 }
1234 }
1235#endif
1236
1237 VH_Startup ();
1238 IN_Startup ();
1239 PM_Startup ();
1240 SD_Startup ();
1241 CA_Startup ();
1242 US_Startup ();
1243
1244 // TODO: Will any memory checking be needed someday??
1245#ifdef NOTYET
1246#ifndef SPEAR
1247 if (mminfo.mainmem < 235000L)
1248#else
1249 if (mminfo.mainmem < 257000L && !MS_CheckParm("debugmode"))
1250#endif
1251 {
1252 byte *screen;
1253
1254 CA_CacheGrChunk (ERRORSCREEN);
1255 screen = grsegs[ERRORSCREEN];
1256 ShutdownId();
1257/* memcpy((byte *)0xb8000,screen+7+7*160,17*160);
1258 gotoxy (1,23);*/
1259 exit(1);
1260 }
1261#endif
1262
1263//
1264// build some tables
1265//
1266 InitDigiMap ();
1267
1268 rb->splash(0, "Reading configuration...");
1269
1270 ReadConfig();
1271
1272 rb->splash(0, "Reading saved games...");
1273
1274 SetupSaveGames();
1275
1276//
1277// HOLDING DOWN 'M' KEY? (Fire for rockbox)
1278//
1279#ifndef SPEARDEMO
1280 if (Keyboard[sc_Control])
1281 {
1282 DoJukebox();
1283 didjukebox=true;
1284 }
1285 else
1286#endif
1287
1288//
1289// draw intro screen stuff
1290//
1291 IntroScreen ();
1292
1293#ifdef _arch_dreamcast
1294 //TODO: VMU Selection Screen
1295#endif
1296
1297//
1298// load in and lock down some basic chunks
1299//
1300
1301 rb->splash(0, "Loading...");
1302
1303 CA_CacheGrChunk(STARTFONT);
1304 CA_CacheGrChunk(STATUSBARPIC);
1305
1306 LoadLatchMem ();
1307 BuildTables (); // trig tables
1308 SetupWalls ();
1309
1310 rb->splash(0, "Loading (50%)...");
1311
1312 NewViewSize (viewsize);
1313
1314//
1315// initialize variables
1316//
1317 InitRedShifts ();
1318#ifndef SPEARDEMO
1319 if(!didjukebox)
1320#endif
1321 FinishSignon();
1322
1323#ifdef NOTYET
1324 vdisp = (byte *) (0xa0000+PAGE1START);
1325 vbuf = (byte *) (0xa0000+PAGE2START);
1326#endif
1327}
1328
1329//===========================================================================
1330
1331/*
1332==========================
1333=
1334= SetViewSize
1335=
1336==========================
1337*/
1338
1339boolean SetViewSize (unsigned width, unsigned height)
1340{
1341 viewwidth = width&~15; // must be divisable by 16
1342 viewheight = height&~1; // must be even
1343 centerx = viewwidth/2-1;
1344 shootdelta = viewwidth/10;
1345 if((unsigned) viewheight == screenHeight)
1346 viewscreenx = viewscreeny = screenofs = 0;
1347 else
1348 {
1349 viewscreenx = (screenWidth-viewwidth) / 2;
1350 viewscreeny = (screenHeight-scaleFactor*STATUSLINES-viewheight)/2;
1351 screenofs = viewscreeny*screenWidth+viewscreenx;
1352 }
1353
1354//
1355// calculate trace angles and projection constants
1356//
1357 CalcProjection (FOCALLENGTH);
1358
1359 return true;
1360}
1361
1362
1363void ShowViewSize (int width)
1364{
1365 int oldwidth,oldheight;
1366
1367 oldwidth = viewwidth;
1368 oldheight = viewheight;
1369
1370 if(width == 21)
1371 {
1372 viewwidth = screenWidth;
1373 viewheight = screenHeight;
1374 VWB_BarScaledCoord (0, 0, screenWidth, screenHeight, 0);
1375 }
1376 else if(width == 20)
1377 {
1378 viewwidth = screenWidth;
1379 viewheight = screenHeight - scaleFactor*STATUSLINES;
1380 DrawPlayBorder ();
1381 }
1382 else
1383 {
1384 viewwidth = width*16*screenWidth/320;
1385 viewheight = (int) (width*16*HEIGHTRATIO*screenHeight/200);
1386 DrawPlayBorder ();
1387 }
1388
1389 viewwidth = oldwidth;
1390 viewheight = oldheight;
1391}
1392
1393
1394void NewViewSize (int width)
1395{
1396 viewsize = width;
1397 if(viewsize == 21)
1398 SetViewSize(screenWidth, screenHeight);
1399 else if(viewsize == 20)
1400 SetViewSize(screenWidth, screenHeight - scaleFactor * STATUSLINES);
1401 else
1402 SetViewSize(width*16*screenWidth/320, (unsigned) (width*16*HEIGHTRATIO*screenHeight/200));
1403}
1404
1405
1406
1407//===========================================================================
1408
1409/*
1410==========================
1411=
1412= Quit
1413=
1414==========================
1415*/
1416
1417void Quit (const char *errorStr, ...)
1418{
1419#ifdef NOTYET
1420 byte *screen;
1421#endif
1422 char error[256];
1423 if(errorStr != NULL)
1424 {
1425 va_list vlist;
1426 va_start(vlist, errorStr);
1427 vsprintf(error, errorStr, vlist);
1428 va_end(vlist);
1429 rb->splashf(HZ * 4, "FATAL: %s", error);
1430 }
1431 else error[0] = 0;
1432
1433 if (!pictable) // don't try to display the red box before it's loaded
1434 {
1435 ShutdownId();
1436 if (error && *error)
1437 {
1438#ifdef NOTYET
1439 SetTextCursor(0,0);
1440#endif
1441 puts(error);
1442#ifdef NOTYET
1443 SetTextCursor(0,2);
1444#endif
1445 VW_WaitVBL(100);
1446 }
1447 exit(1);
1448 }
1449
1450 if (!error || !*error)
1451 {
1452#ifdef NOTYET
1453 #ifndef JAPAN
1454 CA_CacheGrChunk (ORDERSCREEN);
1455 screen = grsegs[ORDERSCREEN];
1456 #endif
1457#endif
1458 WriteConfig ();
1459 }
1460#ifdef NOTYET
1461 else
1462 {
1463 CA_CacheGrChunk (ERRORSCREEN);
1464 screen = grsegs[ERRORSCREEN];
1465 }
1466#endif
1467
1468 ShutdownId ();
1469
1470 if (error && *error)
1471 {
1472#ifdef NOTYET
1473 memcpy((byte *)0xb8000,screen+7,7*160);
1474 SetTextCursor(9,3);
1475#endif
1476 puts(error);
1477#ifdef NOTYET
1478 SetTextCursor(0,7);
1479#endif
1480 VW_WaitVBL(200);
1481 exit(1);
1482 }
1483 else
1484 if (!error || !(*error))
1485 {
1486#ifdef NOTYET
1487 #ifndef JAPAN
1488 memcpy((byte *)0xb8000,screen+7,24*160); // 24 for SPEAR/UPLOAD compatibility
1489 #endif
1490 SetTextCursor(0,23);
1491#endif
1492 }
1493
1494 exit(0);
1495}
1496
1497//===========================================================================
1498
1499
1500
1501/*
1502=====================
1503=
1504= DemoLoop
1505=
1506=====================
1507*/
1508
1509
1510static void DemoLoop()
1511{
1512 int LastDemo = 0;
1513
1514//
1515// check for launch from ted
1516//
1517 if (param_tedlevel != -1)
1518 {
1519 param_nowait = true;
1520 EnableEndGameMenuItem();
1521 NewGame(param_difficulty,0);
1522
1523#ifndef SPEAR
1524 gamestate.episode = param_tedlevel/10;
1525 gamestate.mapon = param_tedlevel%10;
1526#else
1527 gamestate.episode = 0;
1528 gamestate.mapon = param_tedlevel;
1529#endif
1530 GameLoop();
1531 Quit (NULL);
1532 }
1533
1534
1535//
1536// main game cycle
1537//
1538
1539#ifndef DEMOTEST
1540
1541 #ifndef UPLOAD
1542
1543 #ifndef GOODTIMES
1544 #ifndef SPEAR
1545 #ifndef JAPAN
1546 if (!param_nowait)
1547 NonShareware();
1548 #endif
1549 #else
1550 #ifndef GOODTIMES
1551 #ifndef SPEARDEMO
1552 extern void CopyProtection(void);
1553 if(!param_goodtimes)
1554 CopyProtection();
1555 #endif
1556 #endif
1557 #endif
1558 #endif
1559 #endif
1560
1561 StartCPMusic(INTROSONG);
1562
1563#ifndef JAPAN
1564 if (!param_nowait)
1565 PG13 ();
1566#endif
1567
1568#endif
1569
1570 while (1)
1571 {
1572 while (!param_nowait)
1573 {
1574//
1575// title page
1576//
1577#ifndef DEMOTEST
1578
1579#ifdef SPEAR
1580 SDL_Color pal[256];
1581 CA_CacheGrChunk (TITLEPALETTE);
1582 VL_ConvertPalette(grsegs[TITLEPALETTE], pal, 256);
1583
1584 CA_CacheGrChunk (TITLE1PIC);
1585 VWB_DrawPic (0,0,TITLE1PIC);
1586 UNCACHEGRCHUNK (TITLE1PIC);
1587
1588 CA_CacheGrChunk (TITLE2PIC);
1589 VWB_DrawPic (0,80,TITLE2PIC);
1590 UNCACHEGRCHUNK (TITLE2PIC);
1591 VW_UpdateScreen ();
1592 VL_FadeIn(0,255,pal,30);
1593
1594 UNCACHEGRCHUNK (TITLEPALETTE);
1595#else
1596 CA_CacheScreen (TITLEPIC);
1597 VW_UpdateScreen ();
1598 VW_FadeIn();
1599#endif
1600 if (IN_UserInput(TickBase*15))
1601 break;
1602 VW_FadeOut();
1603//
1604// credits page
1605//
1606 CA_CacheScreen (CREDITSPIC);
1607 VW_UpdateScreen();
1608 VW_FadeIn ();
1609 if (IN_UserInput(TickBase*10))
1610 break;
1611 VW_FadeOut ();
1612//
1613// high scores
1614//
1615 DrawHighScores ();
1616 VW_UpdateScreen ();
1617 VW_FadeIn ();
1618
1619 if (IN_UserInput(TickBase*10))
1620 break;
1621#endif
1622//
1623// demo
1624//
1625
1626 #ifndef SPEARDEMO
1627 PlayDemo (LastDemo++%4);
1628 #else
1629 PlayDemo (0);
1630 #endif
1631
1632 if (playstate == ex_abort)
1633 break;
1634 VW_FadeOut();
1635 if(screenHeight % 200 != 0)
1636 VL_ClearScreen(0);
1637 StartCPMusic(INTROSONG);
1638 }
1639
1640 VW_FadeOut ();
1641
1642#ifdef DEBUGKEYS
1643 if (Keyboard[sc_Tab] && param_debugmode)
1644 RecordDemo ();
1645 else
1646 US_ControlPanel (0);
1647#else
1648 US_ControlPanel (0);
1649#endif
1650
1651 if (startgame || loadedgame)
1652 {
1653 GameLoop ();
1654 if(!param_nowait)
1655 {
1656 VW_FadeOut();
1657 StartCPMusic(INTROSONG);
1658 }
1659 }
1660 }
1661}
1662
1663
1664//===========================================================================
1665
1666#define IFARG(str) if(!strcmp(arg, (str)))
1667
1668void CheckParameters(int argc, char *argv[])
1669{
1670 bool hasError = false, showHelp = false;
1671 bool sampleRateGiven = false, audioBufferGiven = false;
1672 int defaultSampleRate = param_samplerate;
1673
1674 for(int i = 1; i < argc; i++)
1675 {
1676 char *arg = argv[i];
1677#ifndef SPEAR
1678 IFARG("--goobers")
1679#else
1680 IFARG("--debugmode")
1681#endif
1682 param_debugmode = true;
1683 else IFARG("--baby")
1684 param_difficulty = 0;
1685 else IFARG("--easy")
1686 param_difficulty = 1;
1687 else IFARG("--normal")
1688 param_difficulty = 2;
1689 else IFARG("--hard")
1690 param_difficulty = 3;
1691 else IFARG("--nowait")
1692 param_nowait = true;
1693 else IFARG("--tedlevel")
1694 {
1695 if(++i >= argc)
1696 {
1697 printf("The tedlevel option is missing the level argument!\n");
1698 hasError = true;
1699 }
1700 else param_tedlevel = atoi(argv[i]);
1701 }
1702 else IFARG("--windowed")
1703 fullscreen = false;
1704 else IFARG("--windowed-mouse")
1705 {
1706 fullscreen = false;
1707 forcegrabmouse = true;
1708 }
1709 else IFARG("--res")
1710 {
1711 if(i + 2 >= argc)
1712 {
1713 printf("The res option needs the width and/or the height argument!\n");
1714 hasError = true;
1715 }
1716 else
1717 {
1718 screenWidth = atoi(argv[++i]);
1719 screenHeight = atoi(argv[++i]);
1720 unsigned factor = screenWidth / 320;
1721 if(screenWidth % 320 || screenHeight != 200 * factor && screenHeight != 240 * factor)
1722 printf("Screen size must be a multiple of 320x200 or 320x240!\n"), hasError = true;
1723 }
1724 }
1725 else IFARG("--resf")
1726 {
1727 if(i + 2 >= argc)
1728 {
1729 printf("The resf option needs the width and/or the height argument!\n");
1730 hasError = true;
1731 }
1732 else
1733 {
1734 screenWidth = atoi(argv[++i]);
1735 screenHeight = atoi(argv[++i]);
1736 if(screenWidth < 320)
1737 printf("Screen width must be at least 320!\n"), hasError = true;
1738 if(screenHeight < 200)
1739 printf("Screen height must be at least 200!\n"), hasError = true;
1740 }
1741 }
1742 else IFARG("--bits")
1743 {
1744 if(++i >= argc)
1745 {
1746 printf("The bits option is missing the color depth argument!\n");
1747 hasError = true;
1748 }
1749 else
1750 {
1751 screenBits = atoi(argv[i]);
1752 switch(screenBits)
1753 {
1754 case 8:
1755 case 16:
1756 case 24:
1757 case 32:
1758 break;
1759
1760 default:
1761 printf("Screen color depth must be 8, 16, 24, or 32!\n");
1762 hasError = true;
1763 break;
1764 }
1765 }
1766 }
1767 else IFARG("--nodblbuf")
1768 usedoublebuffering = false;
1769 else IFARG("--extravbls")
1770 {
1771 if(++i >= argc)
1772 {
1773 printf("The extravbls option is missing the vbls argument!\n");
1774 hasError = true;
1775 }
1776 else
1777 {
1778 extravbls = atoi(argv[i]);
1779 if(extravbls < 0)
1780 {
1781 printf("Extravbls must be positive!\n");
1782 hasError = true;
1783 }
1784 }
1785 }
1786 else IFARG("--joystick")
1787 {
1788 if(++i >= argc)
1789 {
1790 printf("The joystick option is missing the index argument!\n");
1791 hasError = true;
1792 }
1793 else param_joystickindex = atoi(argv[i]); // index is checked in InitGame
1794 }
1795 else IFARG("--joystickhat")
1796 {
1797 if(++i >= argc)
1798 {
1799 printf("The joystickhat option is missing the index argument!\n");
1800 hasError = true;
1801 }
1802 else param_joystickhat = atoi(argv[i]);
1803 }
1804 else IFARG("--samplerate")
1805 {
1806 if(++i >= argc)
1807 {
1808 printf("The samplerate option is missing the rate argument!\n");
1809 hasError = true;
1810 }
1811 else param_samplerate = atoi(argv[i]);
1812 sampleRateGiven = true;
1813 }
1814 else IFARG("--audiobuffer")
1815 {
1816 if(++i >= argc)
1817 {
1818 printf("The audiobuffer option is missing the size argument!\n");
1819 hasError = true;
1820 }
1821 else param_audiobuffer = atoi(argv[i]);
1822 audioBufferGiven = true;
1823 }
1824 else IFARG("--mission")
1825 {
1826 if(++i >= argc)
1827 {
1828 printf("The mission option is missing the mission argument!\n");
1829 hasError = true;
1830 }
1831 else
1832 {
1833 param_mission = atoi(argv[i]);
1834 if(param_mission < 0 || param_mission > 3)
1835 {
1836 printf("The mission option must be between 0 and 3!\n");
1837 hasError = true;
1838 }
1839 }
1840 }
1841 else IFARG("--configdir")
1842 {
1843 if(++i >= argc)
1844 {
1845 printf("The configdir option is missing the dir argument!\n");
1846 hasError = true;
1847 }
1848 else
1849 {
1850 size_t len = strlen(argv[i]);
1851 if(len + 2 > sizeof(configdir))
1852 {
1853 printf("The config directory is too long!\n");
1854 hasError = true;
1855 }
1856 else
1857 {
1858 strcpy(configdir, argv[i]);
1859 if(argv[i][len] != '/' && argv[i][len] != '\\')
1860 strcat(configdir, "/");
1861 }
1862 }
1863 }
1864 else IFARG("--goodtimes")
1865 param_goodtimes = true;
1866 else IFARG("--ignorenumchunks")
1867 param_ignorenumchunks = true;
1868 else IFARG("--help")
1869 showHelp = true;
1870 else hasError = true;
1871 }
1872 if(hasError || showHelp)
1873 {
1874 if(hasError) printf("\n");
1875 printf(
1876 "Wolf4SDL v1.7 ($Revision: 256 $)\n"
1877 "Ported by Chaos-Software (http://www.chaos-software.de.vu)\n"
1878 "Original Wolfenstein 3D by id Software\n\n"
1879 "Usage: Wolf4SDL [options]\n"
1880 "Options:\n"
1881 " --help This help page\n"
1882 " --tedlevel <level> Starts the game in the given level\n"
1883 " --baby Sets the difficulty to baby for tedlevel\n"
1884 " --easy Sets the difficulty to easy for tedlevel\n"
1885 " --normal Sets the difficulty to normal for tedlevel\n"
1886 " --hard Sets the difficulty to hard for tedlevel\n"
1887 " --nowait Skips intro screens\n"
1888 " --windowed[-mouse] Starts the game in a window [and grabs mouse]\n"
1889 " --res <width> <height> Sets the screen resolution\n"
1890 " (must be multiple of 320x200 or 320x240)\n"
1891 " --resf <w> <h> Sets any screen resolution >= 320x200\n"
1892 " (which may result in graphic errors)\n"
1893 " --bits <b> Sets the screen color depth\n"
1894 " (use this when you have palette/fading problems\n"
1895 " allowed: 8, 16, 24, 32, default: \"best\" depth)\n"
1896 " --nodblbuf Don't use SDL's double buffering\n"
1897 " --extravbls <vbls> Sets a delay after each frame, which may help to\n"
1898 " reduce flickering (unit is currently 8 ms, default: 0)\n"
1899 " --joystick <index> Use the index-th joystick if available\n"
1900 " (-1 to disable joystick, default: 0)\n"
1901 " --joystickhat <index> Enables movement with the given coolie hat\n"
1902 " --samplerate <rate> Sets the sound sample rate (given in Hz, default: %i)\n"
1903 " --audiobuffer <size> Sets the size of the audio buffer (-> sound latency)\n"
1904 " (given in bytes, default: 2048 / (44100 / samplerate))\n"
1905 " --ignorenumchunks Ignores the number of chunks in VGAHEAD.*\n"
1906 " (may be useful for some broken mods)\n"
1907 " --configdir <dir> Directory where config file and save games are stored\n"
1908#if defined(_arch_dreamcast) || defined(_WIN32)
1909 " (default: current directory)\n"
1910#else
1911 " (default: $HOME/.wolf4sdl)\n"
1912#endif
1913#if defined(SPEAR) && !defined(SPEARDEMO)
1914 " --mission <mission> Mission number to play (0-3)\n"
1915 " (default: 0 -> .sod, 1-3 -> .sd*)\n"
1916 " --goodtimes Disable copy protection quiz\n"
1917#endif
1918 , defaultSampleRate
1919 );
1920 exit(1);
1921 }
1922
1923 if(sampleRateGiven && !audioBufferGiven)
1924 param_audiobuffer = 2048 / (44100 / param_samplerate);
1925}
1926
1927/*
1928==========================
1929=
1930= main
1931=
1932==========================
1933*/
1934
1935#define main my_main
1936
1937int main (int argc, char *argv[])
1938{
1939#if defined(_arch_dreamcast)
1940 DC_Init();
1941#else
1942 CheckParameters(argc, argv);
1943#endif
1944
1945 CheckForEpisodes();
1946
1947 InitGame();
1948
1949 DemoLoop();
1950
1951 Quit("Demo loop exited???");
1952 return 1;
1953}
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 @@
1////////////////////////////////////////////////////////////////////
2//
3// WL_MENU.C
4// by John Romero (C) 1992 Id Software, Inc.
5//
6////////////////////////////////////////////////////////////////////
7
8#include "wl_def.h"
9#pragma hdrstop
10
11extern int lastgamemusicoffset;
12extern int numEpisodesMissing;
13
14//
15// PRIVATE PROTOTYPES
16//
17int CP_ReadThis (int);
18
19#ifdef SPEAR
20#define STARTITEM newgame
21
22#else
23#ifdef GOODTIMES
24#define STARTITEM newgame
25
26#else
27#define STARTITEM readthis
28#endif
29#endif
30
31// ENDSTRx constants are defined in foreign.h
32char endStrings[9][80] = {
33 ENDSTR1,
34 ENDSTR2,
35 ENDSTR3,
36 ENDSTR4,
37 ENDSTR5,
38 ENDSTR6,
39 ENDSTR7,
40 ENDSTR8,
41 ENDSTR9
42};
43
44CP_itemtype MainMenu[] = {
45#ifdef JAPAN
46 {1, "", CP_NewGame},
47 {1, "", CP_Sound},
48 {1, "", CP_Control},
49 {1, "", CP_LoadGame},
50 {0, "", CP_SaveGame},
51 {1, "", CP_ChangeView},
52 {2, "", CP_ReadThis},
53 {1, "", CP_ViewScores},
54 {1, "", 0},
55 {1, "", 0}
56#else
57
58 {1, STR_NG, CP_NewGame},
59 {1, STR_SD, CP_Sound},
60 {1, STR_CL, CP_Control},
61 {1, STR_LG, CP_LoadGame},
62 {0, STR_SG, CP_SaveGame},
63 {1, STR_CV, CP_ChangeView},
64
65#ifndef GOODTIMES
66#ifndef SPEAR
67
68#ifdef SPANISH
69 {2, "Ve esto!", CP_ReadThis},
70#else
71 {2, "Read This!", CP_ReadThis},
72#endif
73
74#endif
75#endif
76
77 {1, STR_VS, CP_ViewScores},
78 {1, STR_BD, 0},
79 {1, STR_QT, 0}
80#endif
81};
82
83CP_itemtype SndMenu[] = {
84#ifdef JAPAN
85 {1, "", 0},
86 {1, "", 0},
87 {1, "", 0},
88 {0, "", 0},
89 {0, "", 0},
90 {1, "", 0},
91 {1, "", 0},
92 {1, "", 0},
93 {0, "", 0},
94 {0, "", 0},
95 {1, "", 0},
96 {1, "", 0},
97#else
98 {1, STR_NONE, 0},
99 {0, STR_PC, 0},
100 {1, STR_ALSB, 0},
101 {0, "", 0},
102 {0, "", 0},
103 {1, STR_NONE, 0},
104 {0, STR_DISNEY, 0},
105 {1, STR_SB, 0},
106 {0, "", 0},
107 {0, "", 0},
108 {1, STR_NONE, 0},
109 {1, STR_ALSB, 0}
110#endif
111};
112
113enum { CTL_MOUSEENABLE, CTL_MOUSESENS, CTL_JOYENABLE, CTL_CUSTOMIZE };
114
115CP_itemtype CtlMenu[] = {
116#ifdef JAPAN
117 {0, "", 0},
118 {0, "", MouseSensitivity},
119 {0, "", 0},
120 {1, "", CustomControls}
121#else
122 {0, STR_MOUSEEN, 0},
123 {0, STR_SENS, MouseSensitivity},
124 {0, STR_JOYEN, 0},
125 {1, STR_CUSTOM, CustomControls}
126#endif
127};
128
129#ifndef SPEAR
130CP_itemtype NewEmenu[] = {
131#ifdef JAPAN
132#ifdef JAPDEMO
133 {1, "", 0},
134 {0, "", 0},
135 {0, "", 0},
136 {0, "", 0},
137 {0, "", 0},
138 {0, "", 0},
139 {0, "", 0},
140 {0, "", 0},
141 {0, "", 0},
142 {0, "", 0},
143 {0, "", 0},
144 {0, "", 0},
145#else
146 {1, "", 0},
147 {0, "", 0},
148 {1, "", 0},
149 {0, "", 0},
150 {1, "", 0},
151 {0, "", 0},
152 {1, "", 0},
153 {0, "", 0},
154 {1, "", 0},
155 {0, "", 0},
156 {1, "", 0},
157 {0, "", 0}
158#endif
159#else
160#ifdef SPANISH
161 {1, "Episodio 1\n" "Fuga desde Wolfenstein", 0},
162 {0, "", 0},
163 {3, "Episodio 2\n" "Operacion Eisenfaust", 0},
164 {0, "", 0},
165 {3, "Episodio 3\n" "Muere, Fuhrer, Muere!", 0},
166 {0, "", 0},
167 {3, "Episodio 4\n" "Un Negro Secreto", 0},
168 {0, "", 0},
169 {3, "Episodio 5\n" "Huellas del Loco", 0},
170 {0, "", 0},
171 {3, "Episodio 6\n" "Confrontacion", 0}
172#else
173 {1, "Episode 1\n" "Escape from Wolfenstein", 0},
174 {0, "", 0},
175 {3, "Episode 2\n" "Operation: Eisenfaust", 0},
176 {0, "", 0},
177 {3, "Episode 3\n" "Die, Fuhrer, Die!", 0},
178 {0, "", 0},
179 {3, "Episode 4\n" "A Dark Secret", 0},
180 {0, "", 0},
181 {3, "Episode 5\n" "Trail of the Madman", 0},
182 {0, "", 0},
183 {3, "Episode 6\n" "Confrontation", 0}
184#endif
185#endif
186};
187#endif
188
189
190CP_itemtype NewMenu[] = {
191#ifdef JAPAN
192 {1, "", 0},
193 {1, "", 0},
194 {1, "", 0},
195 {1, "", 0}
196#else
197 {1, STR_DADDY, 0},
198 {1, STR_HURTME, 0},
199 {1, STR_BRINGEM, 0},
200 {1, STR_DEATH, 0}
201#endif
202};
203
204CP_itemtype LSMenu[] = {
205 {1, "", 0},
206 {1, "", 0},
207 {1, "", 0},
208 {1, "", 0},
209 {1, "", 0},
210 {1, "", 0},
211 {1, "", 0},
212 {1, "", 0},
213 {1, "", 0},
214 {1, "", 0}
215};
216
217CP_itemtype CusMenu[] = {
218 {1, "", 0},
219 {0, "", 0},
220 {0, "", 0},
221 {1, "", 0},
222 {0, "", 0},
223 {0, "", 0},
224 {1, "", 0},
225 {0, "", 0},
226 {1, "", 0}
227};
228
229// CP_iteminfo struct format: short x, y, amount, curpos, indent;
230CP_iteminfo MainItems = { MENU_X, MENU_Y, lengthof(MainMenu), STARTITEM, 24 },
231 SndItems = { SM_X, SM_Y1, lengthof(SndMenu), 0, 52 },
232 LSItems = { LSM_X, LSM_Y, lengthof(LSMenu), 0, 24 },
233 CtlItems = { CTL_X, CTL_Y, lengthof(CtlMenu), -1, 56 },
234 CusItems = { 8, CST_Y + 13 * 2, lengthof(CusMenu), -1, 0},
235#ifndef SPEAR
236 NewEitems = { NE_X, NE_Y, lengthof(NewEmenu), 0, 88 },
237#endif
238 NewItems = { NM_X, NM_Y, lengthof(NewMenu), 2, 24 };
239
240int color_hlite[] = {
241 DEACTIVE,
242 HIGHLIGHT,
243 READHCOLOR,
244 0x67
245};
246
247int color_norml[] = {
248 DEACTIVE,
249 TEXTCOLOR,
250 READCOLOR,
251 0x6b
252};
253
254int EpisodeSelect[6] = { 1 };
255
256
257static int SaveGamesAvail[10];
258static int StartGame;
259static int SoundStatus = 1;
260static int pickquick;
261static char SaveGameNames[10][32];
262static char SaveName[13] = "savegam?.";
263
264
265////////////////////////////////////////////////////////////////////
266//
267// INPUT MANAGER SCANCODE TABLES
268//
269////////////////////////////////////////////////////////////////////
270
271#if 0
272static const char *ScanNames[] = // Scan code names with single chars
273{
274 "?", "?", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "+", "?", "?",
275 "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "[", "]", "|", "?", "A", "S",
276 "D", "F", "G", "H", "J", "K", "L", ";", "\"", "?", "?", "?", "Z", "X", "C", "V",
277 "B", "N", "M", ",", ".", "/", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?",
278 "?", "?", "?", "?", "?", "?", "?", "?", "\xf", "?", "-", "\x15", "5", "\x11", "+", "?",
279 "\x13", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?",
280 "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?",
281 "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?"
282}; // DEBUG - consolidate these
283static ScanCode ExtScanCodes[] = // Scan codes with >1 char names
284{
285 1, 0xe, 0xf, 0x1d, 0x2a, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e,
286 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x57, 0x59, 0x46, 0x1c, 0x36,
287 0x37, 0x38, 0x47, 0x49, 0x4f, 0x51, 0x52, 0x53, 0x45, 0x48,
288 0x50, 0x4b, 0x4d, 0x00
289};
290static const char *ExtScanNames[] = // Names corresponding to ExtScanCodes
291{
292 "Esc", "BkSp", "Tab", "Ctrl", "LShft", "Space", "CapsLk", "F1", "F2", "F3", "F4",
293 "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", "ScrlLk", "Enter", "RShft",
294 "PrtSc", "Alt", "Home", "PgUp", "End", "PgDn", "Ins", "Del", "NumLk", "Up",
295 "Down", "Left", "Right", ""
296};
297
298/*#pragma warning 737 9
299static byte
300 *ScanNames[] = // Scan code names with single chars
301 {
302 "?","?","1","2","3","4","5","6","7","8","9","0","-","+","?","?",
303 "Q","W","E","R","T","Y","U","I","O","P","[","]","|","?","A","S",
304 "D","F","G","H","J","K","L",";","\"","?","?","?","Z","X","C","V",
305 "B","N","M",",",".","/","?","?","?","?","?","?","?","?","?","?",
306 "?","?","?","?","?","?","?","?","\xf","?","-","\x15","5","\x11","+","?",
307 "\x13","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?",
308 "?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?",
309 "?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?"
310 }; // DEBUG - consolidate these
311static byte ExtScanCodes[] = // Scan codes with >1 char names
312 {
313 1,0xe,0xf,0x1d,0x2a,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,
314 0x3f,0x40,0x41,0x42,0x43,0x44,0x57,0x59,0x46,0x1c,0x36,
315 0x37,0x38,0x47,0x49,0x4f,0x51,0x52,0x53,0x45,0x48,
316 0x50,0x4b,0x4d,0x00
317 };
318static byte *ExtScanNames[] = // Names corresponding to ExtScanCodes
319 {
320 "Esc","BkSp","Tab","Ctrl","LShft","Space","CapsLk","F1","F2","F3","F4",
321 "F5","F6","F7","F8","F9","F10","F11","F12","ScrlLk","Enter","RShft",
322 "PrtSc","Alt","Home","PgUp","End","PgDn","Ins","Del","NumLk","Up",
323 "Down","Left","Right",""
324 };*/
325
326#else
327static const char* const ScanNames[SDLK_LAST] =
328 {
329 "?","?","?","?","?","?","?","?", // 0
330 "BkSp","Tab","?","?","?","Return","?","?", // 8
331 "?","?","?","Pause","?","?","?","?", // 16
332 "?","?","?","Esc","?","?","?","?", // 24
333 "Space","!","\"","#","$","?","&","'", // 32
334 "(",")","*","+",",","-",".","/", // 40
335 "0","1","2","3","4","5","6","7", // 48
336 "8","9",":",";","<","=",">","?", // 56
337 "@","A","B","C","D","E","F","G", // 64
338 "H","I","J","K","L","M","N","O", // 72
339 "P","Q","R","S","T","U","V","W", // 80
340 "X","Y","Z","[","\\","]","^","_", // 88
341 "`","a","b","c","d","e","f","h", // 96
342 "h","i","j","k","l","m","n","o", // 104
343 "p","q","r","s","t","u","v","w", // 112
344 "x","y","z","{","|","}","~","?", // 120
345 "?","?","?","?","?","?","?","?", // 128
346 "?","?","?","?","?","?","?","?", // 136
347 "?","?","?","?","?","?","?","?", // 144
348 "?","?","?","?","?","?","?","?", // 152
349 "?","?","?","?","?","?","?","?", // 160
350 "?","?","?","?","?","?","?","?", // 168
351 "?","?","?","?","?","?","?","?", // 176
352 "?","?","?","?","?","?","?","?", // 184
353 "?","?","?","?","?","?","?","?", // 192
354 "?","?","?","?","?","?","?","?", // 200
355 "?","?","?","?","?","?","?","?", // 208
356 "?","?","?","?","?","?","?","?", // 216
357 "?","?","?","?","?","?","?","?", // 224
358 "?","?","?","?","?","?","?","?", // 232
359 "?","?","?","?","?","?","?","?", // 240
360 "?","?","?","?","?","?","?","?", // 248
361 "?","?","?","?","?","?","?","?", // 256
362 "?","?","?","?","?","?","?","Enter", // 264
363 "?","Up","Down","Right","Left","Ins","Home","End", // 272
364 "PgUp","PgDn","F1","F2","F3","F4","F5","F6", // 280
365 "F7","F8","F9","F10","F11","F12","?","?", // 288
366 "?","?","?","?","NumLk","CapsLk","ScrlLk","RShft", // 296
367 "Shift","RCtrl","Ctrl","RAlt","Alt","?","?","?", // 304
368 "?","?","?","?","PrtSc","?","?","?", // 312
369 "?","?" // 320
370 };
371
372#endif
373
374////////////////////////////////////////////////////////////////////
375//
376// Wolfenstein Control Panel! Ta Da!
377//
378////////////////////////////////////////////////////////////////////
379void
380US_ControlPanel (ScanCode scancode)
381{
382 int which;
383
384#ifdef _arch_dreamcast
385 DC_StatusClearLCD();
386#endif
387
388 if (ingame)
389 {
390 if (CP_CheckQuick (scancode))
391 return;
392 lastgamemusicoffset = StartCPMusic (MENUSONG);
393 }
394 else
395 StartCPMusic (MENUSONG);
396 SetupControlPanel ();
397
398 //
399 // F-KEYS FROM WITHIN GAME
400 //
401 switch (scancode)
402 {
403 case sc_F1:
404#ifdef SPEAR
405 BossKey ();
406#else
407#ifdef GOODTIMES
408 BossKey ();
409#else
410 HelpScreens ();
411#endif
412#endif
413 goto finishup;
414
415 case sc_F2:
416 CP_SaveGame (0);
417 goto finishup;
418
419 case sc_F3:
420 CP_LoadGame (0);
421 goto finishup;
422
423 case sc_F4:
424 CP_Sound (0);
425 goto finishup;
426
427 case sc_F5:
428 CP_ChangeView (0);
429 goto finishup;
430
431 case sc_F6:
432 CP_Control (0);
433 goto finishup;
434
435 finishup:
436 CleanupControlPanel ();
437#ifdef SPEAR
438 UnCacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
439#endif
440 return;
441 }
442
443#ifdef SPEAR
444 CacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
445#endif
446
447 DrawMainMenu ();
448 MenuFadeIn ();
449 StartGame = 0;
450
451 //
452 // MAIN MENU LOOP
453 //
454 do
455 {
456 which = HandleMenu (&MainItems, &MainMenu[0], NULL);
457
458#ifdef SPEAR
459#ifndef SPEARDEMO
460 IN_ProcessEvents();
461
462 //
463 // EASTER EGG FOR SPEAR OF DESTINY!
464 //
465 if (Keyboard[sc_I] && Keyboard[sc_D])
466 {
467 VW_FadeOut ();
468 StartCPMusic (XJAZNAZI_MUS);
469 UnCacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
470 UnCacheLump (BACKDROP_LUMP_START, BACKDROP_LUMP_END);
471 ClearMemory ();
472
473
474 CA_CacheGrChunk (IDGUYS1PIC);
475 VWB_DrawPic (0, 0, IDGUYS1PIC);
476 UNCACHEGRCHUNK (IDGUYS1PIC);
477
478 CA_CacheGrChunk (IDGUYS2PIC);
479 VWB_DrawPic (0, 80, IDGUYS2PIC);
480 UNCACHEGRCHUNK (IDGUYS2PIC);
481
482 VW_UpdateScreen ();
483
484 SDL_Color pal[256];
485 CA_CacheGrChunk (IDGUYSPALETTE);
486 VL_ConvertPalette(grsegs[IDGUYSPALETTE], pal, 256);
487 VL_FadeIn (0, 255, pal, 30);
488 UNCACHEGRCHUNK (IDGUYSPALETTE);
489
490 while (Keyboard[sc_I] || Keyboard[sc_D])
491 IN_WaitAndProcessEvents();
492 IN_ClearKeysDown ();
493 IN_Ack ();
494
495 VW_FadeOut ();
496
497 CacheLump (BACKDROP_LUMP_START, BACKDROP_LUMP_END);
498 CacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
499 DrawMainMenu ();
500 StartCPMusic (MENUSONG);
501 MenuFadeIn ();
502 }
503#endif
504#endif
505
506 switch (which)
507 {
508 case viewscores:
509 if (MainMenu[viewscores].routine == NULL)
510 {
511 if (CP_EndGame (0))
512 StartGame = 1;
513 }
514 else
515 {
516 DrawMainMenu();
517 MenuFadeIn ();
518 }
519 break;
520
521 case backtodemo:
522 StartGame = 1;
523 if (!ingame)
524 StartCPMusic (INTROSONG);
525 VL_FadeOut (0, 255, 0, 0, 0, 10);
526 break;
527
528 case -1:
529 case quit:
530 CP_Quit (0);
531 break;
532
533 default:
534 if (!StartGame)
535 {
536 DrawMainMenu ();
537 MenuFadeIn ();
538 }
539 }
540
541 //
542 // "EXIT OPTIONS" OR "NEW GAME" EXITS
543 //
544 }
545 while (!StartGame);
546
547 //
548 // DEALLOCATE EVERYTHING
549 //
550 CleanupControlPanel ();
551
552 //
553 // CHANGE MAINMENU ITEM
554 //
555 if (startgame || loadedgame)
556 EnableEndGameMenuItem();
557
558 // RETURN/START GAME EXECUTION
559
560#ifdef SPEAR
561 UnCacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
562#endif
563}
564
565void EnableEndGameMenuItem()
566{
567 MainMenu[viewscores].routine = NULL;
568#ifndef JAPAN
569 strcpy (MainMenu[viewscores].string, STR_EG);
570#endif
571}
572
573////////////////////////
574//
575// DRAW MAIN MENU SCREEN
576//
577void
578DrawMainMenu (void)
579{
580#ifdef JAPAN
581 CA_CacheScreen (S_OPTIONSPIC);
582#else
583 ClearMScreen ();
584
585 VWB_DrawPic (112, 184, C_MOUSELBACKPIC);
586 DrawStripes (10);
587 VWB_DrawPic (84, 0, C_OPTIONSPIC);
588
589#ifdef SPANISH
590 DrawWindow (MENU_X - 8, MENU_Y - 3, MENU_W + 8, MENU_H, BKGDCOLOR);
591#else
592 DrawWindow (MENU_X - 8, MENU_Y - 3, MENU_W, MENU_H, BKGDCOLOR);
593#endif
594#endif
595
596 //
597 // CHANGE "GAME" AND "DEMO"
598 //
599 if (ingame)
600 {
601#ifndef JAPAN
602
603#ifdef SPANISH
604 strcpy (&MainMenu[backtodemo].string, STR_GAME);
605#else
606 strcpy (&MainMenu[backtodemo].string[8], STR_GAME);
607#endif
608
609#else
610 CA_CacheGrChunk (C_MRETGAMEPIC);
611 VWB_DrawPic (12 * 8, 20 * 8, C_MRETGAMEPIC);
612 UNCACHEGRCHUNK (C_MRETGAMEPIC);
613 CA_CacheGrChunk (C_MENDGAMEPIC);
614 VWB_DrawPic (12 * 8, 18 * 8, C_MENDGAMEPIC);
615 UNCACHEGRCHUNK (C_MENDGAMEPIC);
616#endif
617 MainMenu[backtodemo].active = 2;
618 }
619 else
620 {
621#ifndef JAPAN
622#ifdef SPANISH
623 strcpy (&MainMenu[backtodemo].string, STR_BD);
624#else
625 strcpy (&MainMenu[backtodemo].string[8], STR_DEMO);
626#endif
627#else
628 CA_CacheGrChunk (C_MRETDEMOPIC);
629 VWB_DrawPic (12 * 8, 20 * 8, C_MRETDEMOPIC);
630 UNCACHEGRCHUNK (C_MRETDEMOPIC);
631 CA_CacheGrChunk (C_MSCORESPIC);
632 VWB_DrawPic (12 * 8, 18 * 8, C_MSCORESPIC);
633 UNCACHEGRCHUNK (C_MSCORESPIC);
634#endif
635 MainMenu[backtodemo].active = 1;
636 }
637
638 DrawMenu (&MainItems, &MainMenu[0]);
639 VW_UpdateScreen ();
640}
641
642#ifndef GOODTIMES
643#ifndef SPEAR
644////////////////////////////////////////////////////////////////////
645//
646// READ THIS!
647//
648////////////////////////////////////////////////////////////////////
649int
650CP_ReadThis (int)
651{
652 StartCPMusic (CORNER_MUS);
653 HelpScreens ();
654 StartCPMusic (MENUSONG);
655 return true;
656}
657#endif
658#endif
659
660
661#ifdef GOODTIMES
662////////////////////////////////////////////////////////////////////
663//
664// BOSS KEY
665//
666////////////////////////////////////////////////////////////////////
667void
668BossKey (void)
669{
670#ifdef NOTYET
671 byte palette1[256][3];
672 SD_MusicOff ();
673/* _AX = 3;
674 geninterrupt(0x10); */
675 _asm
676 {
677 mov eax, 3 int 0x10}
678 puts ("C>");
679 SetTextCursor (2, 0);
680// while (!Keyboard[sc_Escape])
681 IN_Ack ();
682 IN_ClearKeysDown ();
683
684 SD_MusicOn ();
685 VL_SetVGAPlaneMode ();
686 for (int i = 0; i < 768; i++)
687 palette1[0][i] = 0;
688
689 VL_SetPalette (&palette1[0][0]);
690 LoadLatchMem ();
691#endif
692}
693#else
694#ifdef SPEAR
695void
696BossKey (void)
697{
698#ifdef NOTYET
699 byte palette1[256][3];
700 SD_MusicOff ();
701/* _AX = 3;
702 geninterrupt(0x10); */
703 _asm
704 {
705 mov eax, 3 int 0x10}
706 puts ("C>");
707 SetTextCursor (2, 0);
708// while (!Keyboard[sc_Escape])
709 IN_Ack ();
710 IN_ClearKeysDown ();
711
712 SD_MusicOn ();
713 VL_SetVGAPlaneMode ();
714 for (int i = 0; i < 768; i++)
715 palette1[0][i] = 0;
716
717 VL_SetPalette (&palette1[0][0]);
718 LoadLatchMem ();
719#endif
720}
721#endif
722#endif
723
724
725////////////////////////////////////////////////////////////////////
726//
727// CHECK QUICK-KEYS & QUIT (WHILE IN A GAME)
728//
729////////////////////////////////////////////////////////////////////
730int
731CP_CheckQuick (ScanCode scancode)
732{
733 switch (scancode)
734 {
735 //
736 // END GAME
737 //
738 case sc_F7:
739 CA_CacheGrChunk (STARTFONT + 1);
740
741 WindowH = 160;
742#ifdef JAPAN
743 if (GetYorN (7, 8, C_JAPQUITPIC))
744#else
745 if (Confirm (ENDGAMESTR))
746#endif
747 {
748 playstate = ex_died;
749 killerobj = NULL;
750 pickquick = gamestate.lives = 0;
751 }
752
753 WindowH = 200;
754 fontnumber = 0;
755 MainMenu[savegame].active = 0;
756 return 1;
757
758 //
759 // QUICKSAVE
760 //
761 case sc_F8:
762 if (SaveGamesAvail[LSItems.curpos] && pickquick)
763 {
764 CA_CacheGrChunk (STARTFONT + 1);
765 fontnumber = 1;
766 Message (STR_SAVING "...");
767 CP_SaveGame (1);
768 fontnumber = 0;
769 }
770 else
771 {
772#ifndef SPEAR
773 CA_CacheGrChunk (STARTFONT + 1);
774 CA_CacheGrChunk (C_CURSOR1PIC);
775 CA_CacheGrChunk (C_CURSOR2PIC);
776 CA_CacheGrChunk (C_DISKLOADING1PIC);
777 CA_CacheGrChunk (C_DISKLOADING2PIC);
778 CA_CacheGrChunk (C_SAVEGAMEPIC);
779 CA_CacheGrChunk (C_MOUSELBACKPIC);
780#else
781 CacheLump (BACKDROP_LUMP_START, BACKDROP_LUMP_END);
782 CA_CacheGrChunk (C_CURSOR1PIC);
783#endif
784
785 VW_FadeOut ();
786 if(screenHeight % 200 != 0)
787 VL_ClearScreen(0);
788
789 lastgamemusicoffset = StartCPMusic (MENUSONG);
790 pickquick = CP_SaveGame (0);
791
792 SETFONTCOLOR (0, 15);
793 IN_ClearKeysDown ();
794 VW_FadeOut();
795 if(viewsize != 21)
796 DrawPlayScreen ();
797
798 if (!startgame && !loadedgame)
799 ContinueMusic (lastgamemusicoffset);
800
801 if (loadedgame)
802 playstate = ex_abort;
803 lasttimecount = GetTimeCount ();
804
805 if (MousePresent && IN_IsInputGrabbed())
806 IN_CenterMouse(); // Clear accumulated mouse movement
807
808#ifndef SPEAR
809 UNCACHEGRCHUNK (C_CURSOR1PIC);
810 UNCACHEGRCHUNK (C_CURSOR2PIC);
811 UNCACHEGRCHUNK (C_DISKLOADING1PIC);
812 UNCACHEGRCHUNK (C_DISKLOADING2PIC);
813 UNCACHEGRCHUNK (C_SAVEGAMEPIC);
814 UNCACHEGRCHUNK (C_MOUSELBACKPIC);
815#else
816 UnCacheLump (BACKDROP_LUMP_START, BACKDROP_LUMP_END);
817#endif
818 }
819 return 1;
820
821 //
822 // QUICKLOAD
823 //
824 case sc_F9:
825 if (SaveGamesAvail[LSItems.curpos] && pickquick)
826 {
827 char string[100] = STR_LGC;
828
829
830 CA_CacheGrChunk (STARTFONT + 1);
831 fontnumber = 1;
832
833 strcat (string, SaveGameNames[LSItems.curpos]);
834 strcat (string, "\"?");
835
836 if (Confirm (string))
837 CP_LoadGame (1);
838
839 fontnumber = 0;
840 }
841 else
842 {
843#ifndef SPEAR
844 CA_CacheGrChunk (STARTFONT + 1);
845 CA_CacheGrChunk (C_CURSOR1PIC);
846 CA_CacheGrChunk (C_CURSOR2PIC);
847 CA_CacheGrChunk (C_DISKLOADING1PIC);
848 CA_CacheGrChunk (C_DISKLOADING2PIC);
849 CA_CacheGrChunk (C_LOADGAMEPIC);
850 CA_CacheGrChunk (C_MOUSELBACKPIC);
851#else
852 CA_CacheGrChunk (C_CURSOR1PIC);
853 CacheLump (BACKDROP_LUMP_START, BACKDROP_LUMP_END);
854#endif
855
856 VW_FadeOut ();
857 if(screenHeight % 200 != 0)
858 VL_ClearScreen(0);
859
860 lastgamemusicoffset = StartCPMusic (MENUSONG);
861 pickquick = CP_LoadGame (0); // loads lastgamemusicoffs
862
863 SETFONTCOLOR (0, 15);
864 IN_ClearKeysDown ();
865 VW_FadeOut();
866 if(viewsize != 21)
867 DrawPlayScreen ();
868
869 if (!startgame && !loadedgame)
870 ContinueMusic (lastgamemusicoffset);
871
872 if (loadedgame)
873 playstate = ex_abort;
874
875 lasttimecount = GetTimeCount ();
876
877 if (MousePresent && IN_IsInputGrabbed())
878 IN_CenterMouse(); // Clear accumulated mouse movement
879
880#ifndef SPEAR
881 UNCACHEGRCHUNK (C_CURSOR1PIC);
882 UNCACHEGRCHUNK (C_CURSOR2PIC);
883 UNCACHEGRCHUNK (C_DISKLOADING1PIC);
884 UNCACHEGRCHUNK (C_DISKLOADING2PIC);
885 UNCACHEGRCHUNK (C_LOADGAMEPIC);
886 UNCACHEGRCHUNK (C_MOUSELBACKPIC);
887#else
888 UnCacheLump (BACKDROP_LUMP_START, BACKDROP_LUMP_END);
889#endif
890 }
891 return 1;
892
893 //
894 // QUIT
895 //
896 case sc_F10:
897 CA_CacheGrChunk (STARTFONT + 1);
898
899 WindowX = WindowY = 0;
900 WindowW = 320;
901 WindowH = 160;
902#ifdef JAPAN
903 if (GetYorN (7, 8, C_QUITMSGPIC))
904#else
905#ifdef SPANISH
906 if (Confirm (ENDGAMESTR))
907#else
908 if (Confirm (endStrings[US_RndT () & 0x7 + (US_RndT () & 1)]))
909#endif
910#endif
911 {
912 VW_UpdateScreen ();
913 SD_MusicOff ();
914 SD_StopSound ();
915 MenuFadeOut ();
916
917 Quit (NULL);
918 }
919
920 DrawPlayBorder ();
921 WindowH = 200;
922 fontnumber = 0;
923 return 1;
924 }
925
926 return 0;
927}
928
929
930////////////////////////////////////////////////////////////////////
931//
932// END THE CURRENT GAME
933//
934////////////////////////////////////////////////////////////////////
935int
936CP_EndGame (int a)
937{
938 int res;
939#ifdef JAPAN
940 res = GetYorN (7, 8, C_JAPQUITPIC);
941#else
942 res = Confirm (ENDGAMESTR);
943#endif
944 DrawMainMenu();
945 if(!res) return 0;
946
947 pickquick = gamestate.lives = 0;
948 playstate = ex_died;
949 killerobj = NULL;
950
951 MainMenu[savegame].active = 0;
952 MainMenu[viewscores].routine = CP_ViewScores;
953#ifndef JAPAN
954 strcpy (MainMenu[viewscores].string, STR_VS);
955#endif
956
957 return 1;
958}
959
960
961////////////////////////////////////////////////////////////////////
962//
963// VIEW THE HIGH SCORES
964//
965////////////////////////////////////////////////////////////////////
966int
967CP_ViewScores (int a)
968{
969 fontnumber = 0;
970
971#ifdef SPEAR
972 UnCacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
973 StartCPMusic (XAWARD_MUS);
974#else
975 StartCPMusic (ROSTER_MUS);
976#endif
977
978 DrawHighScores ();
979 VW_UpdateScreen ();
980 MenuFadeIn ();
981 fontnumber = 1;
982
983 IN_Ack ();
984
985 StartCPMusic (MENUSONG);
986 MenuFadeOut ();
987
988#ifdef SPEAR
989 CacheLump (BACKDROP_LUMP_START, BACKDROP_LUMP_END);
990 CacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
991#endif
992 return 0;
993}
994
995
996////////////////////////////////////////////////////////////////////
997//
998// START A NEW GAME
999//
1000////////////////////////////////////////////////////////////////////
1001int
1002CP_NewGame (int a)
1003{
1004 int which, episode;
1005
1006#ifdef SPEAR
1007 UnCacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
1008#endif
1009
1010
1011#ifndef SPEAR
1012 firstpart:
1013
1014 DrawNewEpisode ();
1015 do
1016 {
1017 which = HandleMenu (&NewEitems, &NewEmenu[0], NULL);
1018 switch (which)
1019 {
1020 case -1:
1021 MenuFadeOut ();
1022 return 0;
1023
1024 default:
1025 if (!EpisodeSelect[which / 2])
1026 {
1027 SD_PlaySound (NOWAYSND);
1028 Message ("Please select \"Read This!\"\n"
1029 "from the Options menu to\n"
1030 "find out how to order this\n" "episode from Apogee.");
1031 IN_ClearKeysDown ();
1032 IN_Ack ();
1033 DrawNewEpisode ();
1034 which = 0;
1035 }
1036 else
1037 {
1038 episode = which / 2;
1039 which = 1;
1040 }
1041 break;
1042 }
1043
1044 }
1045 while (!which);
1046
1047 ShootSnd ();
1048
1049 //
1050 // ALREADY IN A GAME?
1051 //
1052 if (ingame)
1053#ifdef JAPAN
1054 if (!GetYorN (7, 8, C_JAPNEWGAMEPIC))
1055#else
1056 if (!Confirm (CURGAME))
1057#endif
1058 {
1059 MenuFadeOut ();
1060 return 0;
1061 }
1062
1063 MenuFadeOut ();
1064
1065#else
1066 episode = 0;
1067
1068 //
1069 // ALREADY IN A GAME?
1070 //
1071 CacheLump (NEWGAME_LUMP_START, NEWGAME_LUMP_END);
1072 DrawNewGame ();
1073 if (ingame)
1074 if (!Confirm (CURGAME))
1075 {
1076 MenuFadeOut ();
1077 UnCacheLump (NEWGAME_LUMP_START, NEWGAME_LUMP_END);
1078 CacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
1079 return 0;
1080 }
1081
1082#endif
1083
1084 DrawNewGame ();
1085 which = HandleMenu (&NewItems, &NewMenu[0], DrawNewGameDiff);
1086 if (which < 0)
1087 {
1088 MenuFadeOut ();
1089#ifndef SPEAR
1090 goto firstpart;
1091#else
1092 UnCacheLump (NEWGAME_LUMP_START, NEWGAME_LUMP_END);
1093 CacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
1094 return 0;
1095#endif
1096 }
1097
1098 ShootSnd ();
1099 NewGame (which, episode);
1100 StartGame = 1;
1101 MenuFadeOut ();
1102
1103 //
1104 // CHANGE "READ THIS!" TO NORMAL COLOR
1105 //
1106#ifndef SPEAR
1107#ifndef GOODTIMES
1108 MainMenu[readthis].active = 1;
1109#endif
1110#endif
1111
1112 pickquick = 0;
1113
1114#ifdef SPEAR
1115 UnCacheLump (NEWGAME_LUMP_START, NEWGAME_LUMP_END);
1116 CacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
1117#endif
1118
1119 return 0;
1120}
1121
1122
1123#ifndef SPEAR
1124/////////////////////
1125//
1126// DRAW NEW EPISODE MENU
1127//
1128void
1129DrawNewEpisode (void)
1130{
1131 int i;
1132
1133#ifdef JAPAN
1134 CA_CacheScreen (S_EPISODEPIC);
1135#else
1136 ClearMScreen ();
1137 VWB_DrawPic (112, 184, C_MOUSELBACKPIC);
1138
1139 DrawWindow (NE_X - 4, NE_Y - 4, NE_W + 8, NE_H + 8, BKGDCOLOR);
1140 SETFONTCOLOR (READHCOLOR, BKGDCOLOR);
1141 PrintY = 2;
1142 WindowX = 0;
1143#ifdef SPANISH
1144 US_CPrint ("Cual episodio jugar?");
1145#else
1146 US_CPrint ("Which episode to play?");
1147#endif
1148#endif
1149
1150 SETFONTCOLOR (TEXTCOLOR, BKGDCOLOR);
1151 DrawMenu (&NewEitems, &NewEmenu[0]);
1152
1153 for (i = 0; i < 6; i++)
1154 VWB_DrawPic (NE_X + 32, NE_Y + i * 26, C_EPISODE1PIC + i);
1155
1156 VW_UpdateScreen ();
1157 MenuFadeIn ();
1158 WaitKeyUp ();
1159}
1160#endif
1161
1162/////////////////////
1163//
1164// DRAW NEW GAME MENU
1165//
1166void
1167DrawNewGame (void)
1168{
1169#ifdef JAPAN
1170 CA_CacheScreen (S_SKILLPIC);
1171#else
1172 ClearMScreen ();
1173 VWB_DrawPic (112, 184, C_MOUSELBACKPIC);
1174
1175 SETFONTCOLOR (READHCOLOR, BKGDCOLOR);
1176 PrintX = NM_X + 20;
1177 PrintY = NM_Y - 32;
1178
1179#ifndef SPEAR
1180#ifdef SPANISH
1181 US_Print ("Eres macho?");
1182#else
1183 US_Print ("How tough are you?");
1184#endif
1185#else
1186 VWB_DrawPic (PrintX, PrintY, C_HOWTOUGHPIC);
1187#endif
1188
1189 DrawWindow (NM_X - 5, NM_Y - 10, NM_W, NM_H, BKGDCOLOR);
1190#endif
1191
1192 DrawMenu (&NewItems, &NewMenu[0]);
1193 DrawNewGameDiff (NewItems.curpos);
1194 VW_UpdateScreen ();
1195 MenuFadeIn ();
1196 WaitKeyUp ();
1197}
1198
1199
1200////////////////////////
1201//
1202// DRAW NEW GAME GRAPHIC
1203//
1204void
1205DrawNewGameDiff (int w)
1206{
1207 VWB_DrawPic (NM_X + 185, NM_Y + 7, w + C_BABYMODEPIC);
1208}
1209
1210
1211////////////////////////////////////////////////////////////////////
1212//
1213// HANDLE SOUND MENU
1214//
1215////////////////////////////////////////////////////////////////////
1216int
1217CP_Sound (int a)
1218{
1219 int which;
1220
1221
1222#ifdef SPEAR
1223 UnCacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
1224 CacheLump (SOUND_LUMP_START, SOUND_LUMP_END);
1225#endif
1226
1227 DrawSoundMenu ();
1228 MenuFadeIn ();
1229 WaitKeyUp ();
1230
1231 do
1232 {
1233 which = HandleMenu (&SndItems, &SndMenu[0], NULL);
1234 //
1235 // HANDLE MENU CHOICES
1236 //
1237 switch (which)
1238 {
1239 //
1240 // SOUND EFFECTS
1241 //
1242 case 0:
1243 if (SoundMode != sdm_Off)
1244 {
1245 SD_WaitSoundDone ();
1246 SD_SetSoundMode (sdm_Off);
1247 DrawSoundMenu ();
1248 }
1249 break;
1250 case 1:
1251 if (SoundMode != sdm_PC)
1252 {
1253 SD_WaitSoundDone ();
1254 SD_SetSoundMode (sdm_PC);
1255 CA_LoadAllSounds ();
1256 DrawSoundMenu ();
1257 ShootSnd ();
1258 }
1259 break;
1260 case 2:
1261 if (SoundMode != sdm_AdLib)
1262 {
1263 SD_WaitSoundDone ();
1264 SD_SetSoundMode (sdm_AdLib);
1265 CA_LoadAllSounds ();
1266 DrawSoundMenu ();
1267 ShootSnd ();
1268 }
1269 break;
1270
1271 //
1272 // DIGITIZED SOUND
1273 //
1274 case 5:
1275 if (DigiMode != sds_Off)
1276 {
1277 SD_SetDigiDevice (sds_Off);
1278 DrawSoundMenu ();
1279 }
1280 break;
1281 case 6:
1282/* if (DigiMode != sds_SoundSource)
1283 {
1284 SD_SetDigiDevice (sds_SoundSource);
1285 DrawSoundMenu ();
1286 ShootSnd ();
1287 }*/
1288 break;
1289 case 7:
1290 if (DigiMode != sds_SoundBlaster)
1291 {
1292 SD_SetDigiDevice (sds_SoundBlaster);
1293 DrawSoundMenu ();
1294 ShootSnd ();
1295 }
1296 break;
1297
1298 //
1299 // MUSIC
1300 //
1301 case 10:
1302 if (MusicMode != smm_Off)
1303 {
1304 SD_SetMusicMode (smm_Off);
1305 DrawSoundMenu ();
1306 ShootSnd ();
1307 }
1308 break;
1309 case 11:
1310 if (MusicMode != smm_AdLib)
1311 {
1312 SD_SetMusicMode (smm_AdLib);
1313 DrawSoundMenu ();
1314 ShootSnd ();
1315 StartCPMusic (MENUSONG);
1316 }
1317 break;
1318 }
1319 }
1320 while (which >= 0);
1321
1322 MenuFadeOut ();
1323
1324#ifdef SPEAR
1325 UnCacheLump (SOUND_LUMP_START, SOUND_LUMP_END);
1326 CacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
1327#endif
1328 return 0;
1329}
1330
1331
1332//////////////////////
1333//
1334// DRAW THE SOUND MENU
1335//
1336void
1337DrawSoundMenu (void)
1338{
1339 int i, on;
1340
1341
1342#ifdef JAPAN
1343 CA_CacheScreen (S_SOUNDPIC);
1344#else
1345 //
1346 // DRAW SOUND MENU
1347 //
1348 ClearMScreen ();
1349 VWB_DrawPic (112, 184, C_MOUSELBACKPIC);
1350
1351 DrawWindow (SM_X - 8, SM_Y1 - 3, SM_W, SM_H1, BKGDCOLOR);
1352 DrawWindow (SM_X - 8, SM_Y2 - 3, SM_W, SM_H2, BKGDCOLOR);
1353 DrawWindow (SM_X - 8, SM_Y3 - 3, SM_W, SM_H3, BKGDCOLOR);
1354#endif
1355
1356 //
1357 // IF NO ADLIB, NON-CHOOSENESS!
1358 //
1359 if (!AdLibPresent && !SoundBlasterPresent)
1360 {
1361 SndMenu[2].active = SndMenu[10].active = SndMenu[11].active = 0;
1362 }
1363
1364 if (!SoundBlasterPresent)
1365 SndMenu[7].active = 0;
1366
1367 if (!SoundBlasterPresent)
1368 SndMenu[5].active = 0;
1369
1370 DrawMenu (&SndItems, &SndMenu[0]);
1371#ifndef JAPAN
1372 VWB_DrawPic (100, SM_Y1 - 20, C_FXTITLEPIC);
1373 VWB_DrawPic (100, SM_Y2 - 20, C_DIGITITLEPIC);
1374 VWB_DrawPic (100, SM_Y3 - 20, C_MUSICTITLEPIC);
1375#endif
1376
1377 for (i = 0; i < SndItems.amount; i++)
1378#ifdef JAPAN
1379 if (i != 3 && i != 4 && i != 8 && i != 9)
1380#else
1381 if (SndMenu[i].string[0])
1382#endif
1383 {
1384 //
1385 // DRAW SELECTED/NOT SELECTED GRAPHIC BUTTONS
1386 //
1387 on = 0;
1388 switch (i)
1389 {
1390 //
1391 // SOUND EFFECTS
1392 //
1393 case 0:
1394 if (SoundMode == sdm_Off)
1395 on = 1;
1396 break;
1397 case 1:
1398 if (SoundMode == sdm_PC)
1399 on = 1;
1400 break;
1401 case 2:
1402 if (SoundMode == sdm_AdLib)
1403 on = 1;
1404 break;
1405
1406 //
1407 // DIGITIZED SOUND
1408 //
1409 case 5:
1410 if (DigiMode == sds_Off)
1411 on = 1;
1412 break;
1413 case 6:
1414// if (DigiMode == sds_SoundSource)
1415// on = 1;
1416 break;
1417 case 7:
1418 if (DigiMode == sds_SoundBlaster)
1419 on = 1;
1420 break;
1421
1422 //
1423 // MUSIC
1424 //
1425 case 10:
1426 if (MusicMode == smm_Off)
1427 on = 1;
1428 break;
1429 case 11:
1430 if (MusicMode == smm_AdLib)
1431 on = 1;
1432 break;
1433 }
1434
1435 if (on)
1436 VWB_DrawPic (SM_X + 24, SM_Y1 + i * 13 + 2, C_SELECTEDPIC);
1437 else
1438 VWB_DrawPic (SM_X + 24, SM_Y1 + i * 13 + 2, C_NOTSELECTEDPIC);
1439 }
1440
1441 DrawMenuGun (&SndItems);
1442 VW_UpdateScreen ();
1443}
1444
1445
1446//
1447// DRAW LOAD/SAVE IN PROGRESS
1448//
1449void
1450DrawLSAction (int which)
1451{
1452#define LSA_X 96
1453#define LSA_Y 80
1454#define LSA_W 130
1455#define LSA_H 42
1456
1457 DrawWindow (LSA_X, LSA_Y, LSA_W, LSA_H, TEXTCOLOR);
1458 DrawOutline (LSA_X, LSA_Y, LSA_W, LSA_H, 0, HIGHLIGHT);
1459 VWB_DrawPic (LSA_X + 8, LSA_Y + 5, C_DISKLOADING1PIC);
1460
1461 fontnumber = 1;
1462 SETFONTCOLOR (0, TEXTCOLOR);
1463 PrintX = LSA_X + 46;
1464 PrintY = LSA_Y + 13;
1465
1466 if (!which)
1467 US_Print (STR_LOADING "...");
1468 else
1469 US_Print (STR_SAVING "...");
1470
1471 VW_UpdateScreen ();
1472}
1473
1474
1475////////////////////////////////////////////////////////////////////
1476//
1477// LOAD SAVED GAMES
1478//
1479////////////////////////////////////////////////////////////////////
1480int
1481CP_LoadGame (int quick)
1482{
1483 FILE *file;
1484 int which, exit = 0;
1485 char name[13];
1486 char loadpath[300];
1487
1488 strcpy (name, SaveName);
1489
1490 //
1491 // QUICKLOAD?
1492 //
1493 if (quick)
1494 {
1495 which = LSItems.curpos;
1496
1497 if (SaveGamesAvail[which])
1498 {
1499 name[7] = which + '0';
1500
1501#ifdef _arch_dreamcast
1502 DC_LoadFromVMU(name);
1503#endif
1504
1505 if(configdir[0])
1506 snprintf(loadpath, sizeof(loadpath), "%s/%s", configdir, name);
1507 else
1508 strcpy(loadpath, name);
1509
1510 file = fopen (loadpath, "rb");
1511 fseek (file, 32, SEEK_SET);
1512 loadedgame = true;
1513 LoadTheGame (file, 0, 0);
1514 loadedgame = false;
1515 fclose (file);
1516
1517 DrawFace ();
1518 DrawHealth ();
1519 DrawLives ();
1520 DrawLevel ();
1521 DrawAmmo ();
1522 DrawKeys ();
1523 DrawWeapon ();
1524 DrawScore ();
1525 ContinueMusic (lastgamemusicoffset);
1526 return 1;
1527 }
1528 }
1529
1530
1531#ifdef SPEAR
1532 UnCacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
1533 CacheLump (LOADSAVE_LUMP_START, LOADSAVE_LUMP_END);
1534#endif
1535
1536 DrawLoadSaveScreen (0);
1537
1538 do
1539 {
1540 which = HandleMenu (&LSItems, &LSMenu[0], TrackWhichGame);
1541 if (which >= 0 && SaveGamesAvail[which])
1542 {
1543 ShootSnd ();
1544 name[7] = which + '0';
1545
1546#ifdef _arch_dreamcast
1547 DC_LoadFromVMU(name);
1548#endif
1549
1550 if(configdir[0])
1551 snprintf(loadpath, sizeof(loadpath), "%s/%s", configdir, name);
1552 else
1553 strcpy(loadpath, name);
1554
1555 file = fopen (loadpath, "rb");
1556 fseek (file, 32, SEEK_SET);
1557
1558 DrawLSAction (0);
1559 loadedgame = true;
1560
1561 LoadTheGame (file, LSA_X + 8, LSA_Y + 5);
1562 fclose (file);
1563
1564 StartGame = 1;
1565 ShootSnd ();
1566 //
1567 // CHANGE "READ THIS!" TO NORMAL COLOR
1568 //
1569
1570#ifndef SPEAR
1571#ifndef GOODTIMES
1572 MainMenu[readthis].active = 1;
1573#endif
1574#endif
1575
1576 exit = 1;
1577 break;
1578 }
1579
1580 }
1581 while (which >= 0);
1582
1583 MenuFadeOut ();
1584
1585#ifdef SPEAR
1586 UnCacheLump (LOADSAVE_LUMP_START, LOADSAVE_LUMP_END);
1587 CacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
1588#endif
1589
1590 return exit;
1591}
1592
1593
1594///////////////////////////////////
1595//
1596// HIGHLIGHT CURRENT SELECTED ENTRY
1597//
1598void
1599TrackWhichGame (int w)
1600{
1601 static int lastgameon = 0;
1602
1603 PrintLSEntry (lastgameon, TEXTCOLOR);
1604 PrintLSEntry (w, HIGHLIGHT);
1605
1606 lastgameon = w;
1607}
1608
1609
1610////////////////////////////
1611//
1612// DRAW THE LOAD/SAVE SCREEN
1613//
1614void
1615DrawLoadSaveScreen (int loadsave)
1616{
1617#define DISKX 100
1618#define DISKY 0
1619
1620 int i;
1621
1622
1623 ClearMScreen ();
1624 fontnumber = 1;
1625 VWB_DrawPic (112, 184, C_MOUSELBACKPIC);
1626 DrawWindow (LSM_X - 10, LSM_Y - 5, LSM_W, LSM_H, BKGDCOLOR);
1627 DrawStripes (10);
1628
1629 if (!loadsave)
1630 VWB_DrawPic (60, 0, C_LOADGAMEPIC);
1631 else
1632 VWB_DrawPic (60, 0, C_SAVEGAMEPIC);
1633
1634 for (i = 0; i < 10; i++)
1635 PrintLSEntry (i, TEXTCOLOR);
1636
1637 DrawMenu (&LSItems, &LSMenu[0]);
1638 VW_UpdateScreen ();
1639 MenuFadeIn ();
1640 WaitKeyUp ();
1641}
1642
1643
1644///////////////////////////////////////////
1645//
1646// PRINT LOAD/SAVE GAME ENTRY W/BOX OUTLINE
1647//
1648void
1649PrintLSEntry (int w, int color)
1650{
1651 SETFONTCOLOR (color, BKGDCOLOR);
1652 DrawOutline (LSM_X + LSItems.indent, LSM_Y + w * 13, LSM_W - LSItems.indent - 15, 11, color,
1653 color);
1654 PrintX = LSM_X + LSItems.indent + 2;
1655 PrintY = LSM_Y + w * 13 + 1;
1656 fontnumber = 0;
1657
1658 if (SaveGamesAvail[w])
1659 US_Print (SaveGameNames[w]);
1660 else
1661 US_Print (" - " STR_EMPTY " -");
1662
1663 fontnumber = 1;
1664}
1665
1666
1667////////////////////////////////////////////////////////////////////
1668//
1669// SAVE CURRENT GAME
1670//
1671////////////////////////////////////////////////////////////////////
1672int
1673CP_SaveGame (int quick)
1674{
1675 int which, exit = 0;
1676 FILE *file;
1677 char name[13];
1678 char savepath[300];
1679 char input[32];
1680
1681 strcpy (name, SaveName);
1682
1683 //
1684 // QUICKSAVE?
1685 //
1686 if (quick)
1687 {
1688 which = LSItems.curpos;
1689
1690 if (SaveGamesAvail[which])
1691 {
1692 name[7] = which + '0';
1693
1694 if(configdir[0])
1695 snprintf(savepath, sizeof(savepath), "%s/%s", configdir, name);
1696 else
1697 strcpy(savepath, name);
1698
1699 unlink (savepath);
1700 file = fopen (savepath, "wb");
1701
1702 strcpy (input, &SaveGameNames[which][0]);
1703
1704 fwrite (input, 1, 32, file);
1705 fseek (file, 32, SEEK_SET);
1706 SaveTheGame (file, 0, 0);
1707 fclose (file);
1708
1709#ifdef _arch_dreamcast
1710 DC_SaveToVMU(name, input);
1711#endif
1712
1713 return 1;
1714 }
1715 }
1716
1717
1718#ifdef SPEAR
1719 UnCacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
1720 CacheLump (LOADSAVE_LUMP_START, LOADSAVE_LUMP_END);
1721#endif
1722
1723 DrawLoadSaveScreen (1);
1724
1725 do
1726 {
1727 which = HandleMenu (&LSItems, &LSMenu[0], TrackWhichGame);
1728 if (which >= 0)
1729 {
1730 //
1731 // OVERWRITE EXISTING SAVEGAME?
1732 //
1733 if (SaveGamesAvail[which])
1734 {
1735#ifdef JAPAN
1736 if (!GetYorN (7, 8, C_JAPSAVEOVERPIC))
1737#else
1738 if (!Confirm (GAMESVD))
1739#endif
1740 {
1741 DrawLoadSaveScreen (1);
1742 continue;
1743 }
1744 else
1745 {
1746 DrawLoadSaveScreen (1);
1747 PrintLSEntry (which, HIGHLIGHT);
1748 VW_UpdateScreen ();
1749 }
1750 }
1751
1752 ShootSnd ();
1753
1754 strcpy (input, &SaveGameNames[which][0]);
1755 name[7] = which + '0';
1756
1757 fontnumber = 0;
1758 if (!SaveGamesAvail[which])
1759 VWB_Bar (LSM_X + LSItems.indent + 1, LSM_Y + which * 13 + 1,
1760 LSM_W - LSItems.indent - 16, 10, BKGDCOLOR);
1761 VW_UpdateScreen ();
1762
1763 if (US_LineInput
1764 (LSM_X + LSItems.indent + 2, LSM_Y + which * 13 + 1, input, input, true, 31,
1765 LSM_W - LSItems.indent - 30))
1766 {
1767 SaveGamesAvail[which] = 1;
1768 strcpy (&SaveGameNames[which][0], input);
1769
1770 if(configdir[0])
1771 snprintf(savepath, sizeof(savepath), "%s/%s", configdir, name);
1772 else
1773 strcpy(savepath, name);
1774
1775 unlink (savepath);
1776 file = fopen (savepath, "wb");
1777 fwrite (input, 32, 1, file);
1778 fseek (file, 32, SEEK_SET);
1779
1780 DrawLSAction (1);
1781 SaveTheGame (file, LSA_X + 8, LSA_Y + 5);
1782
1783 fclose (file);
1784
1785#ifdef _arch_dreamcast
1786 DC_SaveToVMU(name, input);
1787#endif
1788
1789 ShootSnd ();
1790 exit = 1;
1791 }
1792 else
1793 {
1794 VWB_Bar (LSM_X + LSItems.indent + 1, LSM_Y + which * 13 + 1,
1795 LSM_W - LSItems.indent - 16, 10, BKGDCOLOR);
1796 PrintLSEntry (which, HIGHLIGHT);
1797 VW_UpdateScreen ();
1798 SD_PlaySound (ESCPRESSEDSND);
1799 continue;
1800 }
1801
1802 fontnumber = 1;
1803 break;
1804 }
1805
1806 }
1807 while (which >= 0);
1808
1809 MenuFadeOut ();
1810
1811#ifdef SPEAR
1812 UnCacheLump (LOADSAVE_LUMP_START, LOADSAVE_LUMP_END);
1813 CacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
1814#endif
1815
1816 return exit;
1817}
1818
1819////////////////////////////////////////////////////////////////////
1820//
1821// DEFINE CONTROLS
1822//
1823////////////////////////////////////////////////////////////////////
1824int
1825CP_Control (int a)
1826{
1827 int which;
1828
1829#ifdef SPEAR
1830 UnCacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
1831 CacheLump (CONTROL_LUMP_START, CONTROL_LUMP_END);
1832#endif
1833
1834 DrawCtlScreen ();
1835 MenuFadeIn ();
1836 WaitKeyUp ();
1837
1838 do
1839 {
1840 which = HandleMenu (&CtlItems, CtlMenu, NULL);
1841 switch (which)
1842 {
1843 case CTL_MOUSEENABLE:
1844 mouseenabled ^= 1;
1845 if(IN_IsInputGrabbed())
1846 IN_CenterMouse();
1847 DrawCtlScreen ();
1848 CusItems.curpos = -1;
1849 ShootSnd ();
1850 break;
1851
1852 case CTL_JOYENABLE:
1853 joystickenabled ^= 1;
1854 DrawCtlScreen ();
1855 CusItems.curpos = -1;
1856 ShootSnd ();
1857 break;
1858
1859 case CTL_MOUSESENS:
1860 case CTL_CUSTOMIZE:
1861 DrawCtlScreen ();
1862 MenuFadeIn ();
1863 WaitKeyUp ();
1864 break;
1865 }
1866 }
1867 while (which >= 0);
1868
1869 MenuFadeOut ();
1870
1871#ifdef SPEAR
1872 UnCacheLump (CONTROL_LUMP_START, CONTROL_LUMP_END);
1873 CacheLump (OPTIONS_LUMP_START, OPTIONS_LUMP_END);
1874#endif
1875 return 0;
1876}
1877
1878
1879////////////////////////////////
1880//
1881// DRAW MOUSE SENSITIVITY SCREEN
1882//
1883void
1884DrawMouseSens (void)
1885{
1886#ifdef JAPAN
1887 CA_CacheScreen (S_MOUSESENSPIC);
1888#else
1889 ClearMScreen ();
1890 VWB_DrawPic (112, 184, C_MOUSELBACKPIC);
1891#ifdef SPANISH
1892 DrawWindow (10, 80, 300, 43, BKGDCOLOR);
1893#else
1894 DrawWindow (10, 80, 300, 30, BKGDCOLOR);
1895#endif
1896
1897 WindowX = 0;
1898 WindowW = 320;
1899 PrintY = 82;
1900 SETFONTCOLOR (READCOLOR, BKGDCOLOR);
1901 US_CPrint (STR_MOUSEADJ);
1902
1903 SETFONTCOLOR (TEXTCOLOR, BKGDCOLOR);
1904#ifdef SPANISH
1905 PrintX = 14;
1906 PrintY = 95 + 13;
1907 US_Print (STR_SLOW);
1908 PrintX = 252;
1909 US_Print (STR_FAST);
1910#else
1911 PrintX = 14;
1912 PrintY = 95;
1913 US_Print (STR_SLOW);
1914 PrintX = 269;
1915 US_Print (STR_FAST);
1916#endif
1917#endif
1918
1919 VWB_Bar (60, 97, 200, 10, TEXTCOLOR);
1920 DrawOutline (60, 97, 200, 10, 0, HIGHLIGHT);
1921 DrawOutline (60 + 20 * mouseadjustment, 97, 20, 10, 0, READCOLOR);
1922 VWB_Bar (61 + 20 * mouseadjustment, 98, 19, 9, READHCOLOR);
1923
1924 VW_UpdateScreen ();
1925 MenuFadeIn ();
1926}
1927
1928
1929///////////////////////////
1930//
1931// ADJUST MOUSE SENSITIVITY
1932//
1933int
1934MouseSensitivity (int a)
1935{
1936 ControlInfo ci;
1937 int exit = 0, oldMA;
1938
1939
1940 oldMA = mouseadjustment;
1941 DrawMouseSens ();
1942 do
1943 {
1944 SDL_Delay(5);
1945 ReadAnyControl (&ci);
1946 switch (ci.dir)
1947 {
1948 case dir_North:
1949 case dir_West:
1950 if (mouseadjustment)
1951 {
1952 mouseadjustment--;
1953 VWB_Bar (60, 97, 200, 10, TEXTCOLOR);
1954 DrawOutline (60, 97, 200, 10, 0, HIGHLIGHT);
1955 DrawOutline (60 + 20 * mouseadjustment, 97, 20, 10, 0, READCOLOR);
1956 VWB_Bar (61 + 20 * mouseadjustment, 98, 19, 9, READHCOLOR);
1957 VW_UpdateScreen ();
1958 SD_PlaySound (MOVEGUN1SND);
1959 TicDelay(20);
1960 }
1961 break;
1962
1963 case dir_South:
1964 case dir_East:
1965 if (mouseadjustment < 9)
1966 {
1967 mouseadjustment++;
1968 VWB_Bar (60, 97, 200, 10, TEXTCOLOR);
1969 DrawOutline (60, 97, 200, 10, 0, HIGHLIGHT);
1970 DrawOutline (60 + 20 * mouseadjustment, 97, 20, 10, 0, READCOLOR);
1971 VWB_Bar (61 + 20 * mouseadjustment, 98, 19, 9, READHCOLOR);
1972 VW_UpdateScreen ();
1973 SD_PlaySound (MOVEGUN1SND);
1974 TicDelay(20);
1975 }
1976 break;
1977 }
1978
1979 if (ci.button0 || Keyboard[sc_Space] || Keyboard[sc_Enter])
1980 exit = 1;
1981 else if (ci.button1 || Keyboard[sc_Escape])
1982 exit = 2;
1983
1984 }
1985 while (!exit);
1986
1987 if (exit == 2)
1988 {
1989 mouseadjustment = oldMA;
1990 SD_PlaySound (ESCPRESSEDSND);
1991 }
1992 else
1993 SD_PlaySound (SHOOTSND);
1994
1995 WaitKeyUp ();
1996 MenuFadeOut ();
1997
1998 return 0;
1999}
2000
2001
2002///////////////////////////
2003//
2004// DRAW CONTROL MENU SCREEN
2005//
2006void
2007DrawCtlScreen (void)
2008{
2009 int i, x, y;
2010
2011#ifdef JAPAN
2012 CA_CacheScreen (S_CONTROLPIC);
2013#else
2014 ClearMScreen ();
2015 DrawStripes (10);
2016 VWB_DrawPic (80, 0, C_CONTROLPIC);
2017 VWB_DrawPic (112, 184, C_MOUSELBACKPIC);
2018 DrawWindow (CTL_X - 8, CTL_Y - 5, CTL_W, CTL_H, BKGDCOLOR);
2019#endif
2020 WindowX = 0;
2021 WindowW = 320;
2022 SETFONTCOLOR (TEXTCOLOR, BKGDCOLOR);
2023
2024 if (IN_JoyPresent())
2025 CtlMenu[CTL_JOYENABLE].active = 1;
2026
2027 if (MousePresent)
2028 {
2029 CtlMenu[CTL_MOUSESENS].active = CtlMenu[CTL_MOUSEENABLE].active = 1;
2030 }
2031
2032 CtlMenu[CTL_MOUSESENS].active = mouseenabled;
2033
2034
2035 DrawMenu (&CtlItems, CtlMenu);
2036
2037
2038 x = CTL_X + CtlItems.indent - 24;
2039 y = CTL_Y + 3;
2040 if (mouseenabled)
2041 VWB_DrawPic (x, y, C_SELECTEDPIC);
2042 else
2043 VWB_DrawPic (x, y, C_NOTSELECTEDPIC);
2044
2045 y = CTL_Y + 29;
2046 if (joystickenabled)
2047 VWB_DrawPic (x, y, C_SELECTEDPIC);
2048 else
2049 VWB_DrawPic (x, y, C_NOTSELECTEDPIC);
2050
2051 //
2052 // PICK FIRST AVAILABLE SPOT
2053 //
2054 if (CtlItems.curpos < 0 || !CtlMenu[CtlItems.curpos].active)
2055 {
2056 for (i = 0; i < CtlItems.amount; i++)
2057 {
2058 if (CtlMenu[i].active)
2059 {
2060 CtlItems.curpos = i;
2061 break;
2062 }
2063 }
2064 }
2065
2066 DrawMenuGun (&CtlItems);
2067 VW_UpdateScreen ();
2068}
2069
2070
2071////////////////////////////////////////////////////////////////////
2072//
2073// CUSTOMIZE CONTROLS
2074//
2075////////////////////////////////////////////////////////////////////
2076enum
2077{ FIRE, STRAFE, RUN, OPEN };
2078char mbarray[4][3] = { "b0", "b1", "b2", "b3" };
2079int8_t order[4] = { RUN, OPEN, FIRE, STRAFE };
2080
2081
2082int
2083CustomControls (int a)
2084{
2085 int which;
2086
2087 DrawCustomScreen ();
2088 do
2089 {
2090 which = HandleMenu (&CusItems, &CusMenu[0], FixupCustom);
2091 switch (which)
2092 {
2093 case 0:
2094 DefineMouseBtns ();
2095 DrawCustMouse (1);
2096 break;
2097 case 3:
2098 DefineJoyBtns ();
2099 DrawCustJoy (0);
2100 break;
2101 case 6:
2102 DefineKeyBtns ();
2103 DrawCustKeybd (0);
2104 break;
2105 case 8:
2106 DefineKeyMove ();
2107 DrawCustKeys (0);
2108 }
2109 }
2110 while (which >= 0);
2111
2112 MenuFadeOut ();
2113
2114 return 0;
2115}
2116
2117
2118////////////////////////
2119//
2120// DEFINE THE MOUSE BUTTONS
2121//
2122void
2123DefineMouseBtns (void)
2124{
2125 CustomCtrls mouseallowed = { 0, 1, 1, 1 };
2126 EnterCtrlData (2, &mouseallowed, DrawCustMouse, PrintCustMouse, MOUSE);
2127}
2128
2129
2130////////////////////////
2131//
2132// DEFINE THE JOYSTICK BUTTONS
2133//
2134void
2135DefineJoyBtns (void)
2136{
2137 CustomCtrls joyallowed = { 1, 1, 1, 1 };
2138 EnterCtrlData (5, &joyallowed, DrawCustJoy, PrintCustJoy, JOYSTICK);
2139}
2140
2141
2142////////////////////////
2143//
2144// DEFINE THE KEYBOARD BUTTONS
2145//
2146void
2147DefineKeyBtns (void)
2148{
2149 CustomCtrls keyallowed = { 1, 1, 1, 1 };
2150 EnterCtrlData (8, &keyallowed, DrawCustKeybd, PrintCustKeybd, KEYBOARDBTNS);
2151}
2152
2153
2154////////////////////////
2155//
2156// DEFINE THE KEYBOARD BUTTONS
2157//
2158void
2159DefineKeyMove (void)
2160{
2161 CustomCtrls keyallowed = { 1, 1, 1, 1 };
2162 EnterCtrlData (10, &keyallowed, DrawCustKeys, PrintCustKeys, KEYBOARDMOVE);
2163}
2164
2165
2166////////////////////////
2167//
2168// ENTER CONTROL DATA FOR ANY TYPE OF CONTROL
2169//
2170enum
2171{ FWRD, RIGHT, BKWD, LEFT };
2172int moveorder[4] = { LEFT, RIGHT, FWRD, BKWD };
2173
2174void
2175EnterCtrlData (int index, CustomCtrls * cust, void (*DrawRtn) (int), void (*PrintRtn) (int),
2176 int type)
2177{
2178 int j, exit, tick, redraw, which, x, picked, lastFlashTime;
2179 ControlInfo ci;
2180
2181
2182 ShootSnd ();
2183 PrintY = CST_Y + 13 * index;
2184 IN_ClearKeysDown ();
2185 exit = 0;
2186 redraw = 1;
2187 //
2188 // FIND FIRST SPOT IN ALLOWED ARRAY
2189 //
2190 for (j = 0; j < 4; j++)
2191 if (cust->allowed[j])
2192 {
2193 which = j;
2194 break;
2195 }
2196
2197 do
2198 {
2199 if (redraw)
2200 {
2201 x = CST_START + CST_SPC * which;
2202 DrawWindow (5, PrintY - 1, 310, 13, BKGDCOLOR);
2203
2204 DrawRtn (1);
2205 DrawWindow (x - 2, PrintY, CST_SPC, 11, TEXTCOLOR);
2206 DrawOutline (x - 2, PrintY, CST_SPC, 11, 0, HIGHLIGHT);
2207 SETFONTCOLOR (0, TEXTCOLOR);
2208 PrintRtn (which);
2209 PrintX = x;
2210 SETFONTCOLOR (TEXTCOLOR, BKGDCOLOR);
2211 VW_UpdateScreen ();
2212 WaitKeyUp ();
2213 redraw = 0;
2214 }
2215
2216 SDL_Delay(5);
2217 ReadAnyControl (&ci);
2218
2219 if (type == MOUSE || type == JOYSTICK)
2220 if (IN_KeyDown (sc_Enter) || IN_KeyDown (sc_Control) || IN_KeyDown (sc_Alt))
2221 {
2222 IN_ClearKeysDown ();
2223 ci.button0 = ci.button1 = false;
2224 }
2225
2226 //
2227 // CHANGE BUTTON VALUE?
2228 //
2229 if ((type != KEYBOARDBTNS && type != KEYBOARDMOVE) && (ci.button0 | ci.button1 | ci.button2 | ci.button3) ||
2230 ((type == KEYBOARDBTNS || type == KEYBOARDMOVE) && LastScan == sc_Enter))
2231 {
2232 lastFlashTime = GetTimeCount();
2233 tick = picked = 0;
2234 SETFONTCOLOR (0, TEXTCOLOR);
2235
2236 if (type == KEYBOARDBTNS || type == KEYBOARDMOVE)
2237 IN_ClearKeysDown ();
2238
2239 while(1)
2240 {
2241 int button, result = 0;
2242
2243 //
2244 // FLASH CURSOR
2245 //
2246 if (GetTimeCount() - lastFlashTime > 10)
2247 {
2248 switch (tick)
2249 {
2250 case 0:
2251 VWB_Bar (x, PrintY + 1, CST_SPC - 2, 10, TEXTCOLOR);
2252 break;
2253 case 1:
2254 PrintX = x;
2255 US_Print ("?");
2256 SD_PlaySound (HITWALLSND);
2257 }
2258 tick ^= 1;
2259 lastFlashTime = GetTimeCount();
2260 VW_UpdateScreen ();
2261 }
2262 else SDL_Delay(5);
2263
2264 //
2265 // WHICH TYPE OF INPUT DO WE PROCESS?
2266 //
2267 switch (type)
2268 {
2269 case MOUSE:
2270 button = IN_MouseButtons();
2271 switch (button)
2272 {
2273 case 1:
2274 result = 1;
2275 break;
2276 case 2:
2277 result = 2;
2278 break;
2279 case 4:
2280 result = 3;
2281 break;
2282 }
2283
2284 if (result)
2285 {
2286 for (int z = 0; z < 4; z++)
2287 if (order[which] == buttonmouse[z])
2288 {
2289 buttonmouse[z] = bt_nobutton;
2290 break;
2291 }
2292
2293 buttonmouse[result - 1] = order[which];
2294 picked = 1;
2295 SD_PlaySound (SHOOTDOORSND);
2296 }
2297 break;
2298
2299 case JOYSTICK:
2300 if (ci.button0)
2301 result = 1;
2302 else if (ci.button1)
2303 result = 2;
2304 else if (ci.button2)
2305 result = 3;
2306 else if (ci.button3)
2307 result = 4;
2308
2309 if (result)
2310 {
2311 for (int z = 0; z < 4; z++)
2312 {
2313 if (order[which] == buttonjoy[z])
2314 {
2315 buttonjoy[z] = bt_nobutton;
2316 break;
2317 }
2318 }
2319
2320 buttonjoy[result - 1] = order[which];
2321 picked = 1;
2322 SD_PlaySound (SHOOTDOORSND);
2323 }
2324 break;
2325
2326 case KEYBOARDBTNS:
2327 if (LastScan && LastScan != sc_Escape)
2328 {
2329 buttonscan[order[which]] = LastScan;
2330 picked = 1;
2331 ShootSnd ();
2332 IN_ClearKeysDown ();
2333 }
2334 break;
2335
2336 case KEYBOARDMOVE:
2337 if (LastScan && LastScan != sc_Escape)
2338 {
2339 dirscan[moveorder[which]] = LastScan;
2340 picked = 1;
2341 ShootSnd ();
2342 IN_ClearKeysDown ();
2343 }
2344 break;
2345 }
2346
2347 //
2348 // EXIT INPUT?
2349 //
2350 if (IN_KeyDown (sc_Escape) || type != JOYSTICK && ci.button1)
2351 {
2352 picked = 1;
2353 SD_PlaySound (ESCPRESSEDSND);
2354 }
2355
2356 if(picked) break;
2357
2358 ReadAnyControl (&ci);
2359 }
2360
2361 SETFONTCOLOR (TEXTCOLOR, BKGDCOLOR);
2362 redraw = 1;
2363 WaitKeyUp ();
2364 continue;
2365 }
2366
2367 if (ci.button1 || IN_KeyDown (sc_Escape))
2368 exit = 1;
2369
2370 //
2371 // MOVE TO ANOTHER SPOT?
2372 //
2373 switch (ci.dir)
2374 {
2375 case dir_West:
2376 do
2377 {
2378 which--;
2379 if (which < 0)
2380 which = 3;
2381 }
2382 while (!cust->allowed[which]);
2383 redraw = 1;
2384 SD_PlaySound (MOVEGUN1SND);
2385 while (ReadAnyControl (&ci), ci.dir != dir_None) SDL_Delay(5);
2386 IN_ClearKeysDown ();
2387 break;
2388
2389 case dir_East:
2390 do
2391 {
2392 which++;
2393 if (which > 3)
2394 which = 0;
2395 }
2396 while (!cust->allowed[which]);
2397 redraw = 1;
2398 SD_PlaySound (MOVEGUN1SND);
2399 while (ReadAnyControl (&ci), ci.dir != dir_None) SDL_Delay(5);
2400 IN_ClearKeysDown ();
2401 break;
2402 case dir_North:
2403 case dir_South:
2404 exit = 1;
2405 }
2406 }
2407 while (!exit);
2408
2409 SD_PlaySound (ESCPRESSEDSND);
2410 WaitKeyUp ();
2411 DrawWindow (5, PrintY - 1, 310, 13, BKGDCOLOR);
2412}
2413
2414
2415////////////////////////
2416//
2417// FIXUP GUN CURSOR OVERDRAW SHIT
2418//
2419void
2420FixupCustom (int w)
2421{
2422 static int lastwhich = -1;
2423 int y = CST_Y + 26 + w * 13;
2424
2425
2426 VWB_Hlin (7, 32, y - 1, DEACTIVE);
2427 VWB_Hlin (7, 32, y + 12, BORD2COLOR);
2428#ifndef SPEAR
2429 VWB_Hlin (7, 32, y - 2, BORDCOLOR);
2430 VWB_Hlin (7, 32, y + 13, BORDCOLOR);
2431#else
2432 VWB_Hlin (7, 32, y - 2, BORD2COLOR);
2433 VWB_Hlin (7, 32, y + 13, BORD2COLOR);
2434#endif
2435
2436 switch (w)
2437 {
2438 case 0:
2439 DrawCustMouse (1);
2440 break;
2441 case 3:
2442 DrawCustJoy (1);
2443 break;
2444 case 6:
2445 DrawCustKeybd (1);
2446 break;
2447 case 8:
2448 DrawCustKeys (1);
2449 }
2450
2451
2452 if (lastwhich >= 0)
2453 {
2454 y = CST_Y + 26 + lastwhich * 13;
2455 VWB_Hlin (7, 32, y - 1, DEACTIVE);
2456 VWB_Hlin (7, 32, y + 12, BORD2COLOR);
2457#ifndef SPEAR
2458 VWB_Hlin (7, 32, y - 2, BORDCOLOR);
2459 VWB_Hlin (7, 32, y + 13, BORDCOLOR);
2460#else
2461 VWB_Hlin (7, 32, y - 2, BORD2COLOR);
2462 VWB_Hlin (7, 32, y + 13, BORD2COLOR);
2463#endif
2464
2465 if (lastwhich != w)
2466 switch (lastwhich)
2467 {
2468 case 0:
2469 DrawCustMouse (0);
2470 break;
2471 case 3:
2472 DrawCustJoy (0);
2473 break;
2474 case 6:
2475 DrawCustKeybd (0);
2476 break;
2477 case 8:
2478 DrawCustKeys (0);
2479 }
2480 }
2481
2482 lastwhich = w;
2483}
2484
2485
2486////////////////////////
2487//
2488// DRAW CUSTOMIZE SCREEN
2489//
2490void
2491DrawCustomScreen (void)
2492{
2493 int i;
2494
2495
2496#ifdef JAPAN
2497 CA_CacheScreen (S_CUSTOMPIC);
2498 fontnumber = 1;
2499
2500 PrintX = CST_START;
2501 PrintY = CST_Y + 26;
2502 DrawCustMouse (0);
2503
2504 PrintX = CST_START;
2505 US_Print ("\n\n\n");
2506 DrawCustJoy (0);
2507
2508 PrintX = CST_START;
2509 US_Print ("\n\n\n");
2510 DrawCustKeybd (0);
2511
2512 PrintX = CST_START;
2513 US_Print ("\n\n\n");
2514 DrawCustKeys (0);
2515#else
2516 ClearMScreen ();
2517 WindowX = 0;
2518 WindowW = 320;
2519 VWB_DrawPic (112, 184, C_MOUSELBACKPIC);
2520 DrawStripes (10);
2521 VWB_DrawPic (80, 0, C_CUSTOMIZEPIC);
2522
2523 //
2524 // MOUSE
2525 //
2526 SETFONTCOLOR (READCOLOR, BKGDCOLOR);
2527 WindowX = 0;
2528 WindowW = 320;
2529
2530#ifndef SPEAR
2531 PrintY = CST_Y;
2532 US_CPrint ("Mouse\n");
2533#else
2534 PrintY = CST_Y + 13;
2535 VWB_DrawPic (128, 48, C_MOUSEPIC);
2536#endif
2537
2538 SETFONTCOLOR (TEXTCOLOR, BKGDCOLOR);
2539#ifdef SPANISH
2540 PrintX = CST_START - 16;
2541 US_Print (STR_CRUN);
2542 PrintX = CST_START - 16 + CST_SPC * 1;
2543 US_Print (STR_COPEN);
2544 PrintX = CST_START - 16 + CST_SPC * 2;
2545 US_Print (STR_CFIRE);
2546 PrintX = CST_START - 16 + CST_SPC * 3;
2547 US_Print (STR_CSTRAFE "\n");
2548#else
2549 PrintX = CST_START;
2550 US_Print (STR_CRUN);
2551 PrintX = CST_START + CST_SPC * 1;
2552 US_Print (STR_COPEN);
2553 PrintX = CST_START + CST_SPC * 2;
2554 US_Print (STR_CFIRE);
2555 PrintX = CST_START + CST_SPC * 3;
2556 US_Print (STR_CSTRAFE "\n");
2557#endif
2558
2559 DrawWindow (5, PrintY - 1, 310, 13, BKGDCOLOR);
2560 DrawCustMouse (0);
2561 US_Print ("\n");
2562
2563
2564 //
2565 // JOYSTICK/PAD
2566 //
2567#ifndef SPEAR
2568 SETFONTCOLOR (READCOLOR, BKGDCOLOR);
2569 US_CPrint ("Joystick/Gravis GamePad\n");
2570#else
2571 PrintY += 13;
2572 VWB_DrawPic (40, 88, C_JOYSTICKPIC);
2573#endif
2574
2575#ifdef SPEAR
2576 VWB_DrawPic (112, 120, C_KEYBOARDPIC);
2577#endif
2578
2579 SETFONTCOLOR (TEXTCOLOR, BKGDCOLOR);
2580#ifdef SPANISH
2581 PrintX = CST_START - 16;
2582 US_Print (STR_CRUN);
2583 PrintX = CST_START - 16 + CST_SPC * 1;
2584 US_Print (STR_COPEN);
2585 PrintX = CST_START - 16 + CST_SPC * 2;
2586 US_Print (STR_CFIRE);
2587 PrintX = CST_START - 16 + CST_SPC * 3;
2588 US_Print (STR_CSTRAFE "\n");
2589#else
2590 PrintX = CST_START;
2591 US_Print (STR_CRUN);
2592 PrintX = CST_START + CST_SPC * 1;
2593 US_Print (STR_COPEN);
2594 PrintX = CST_START + CST_SPC * 2;
2595 US_Print (STR_CFIRE);
2596 PrintX = CST_START + CST_SPC * 3;
2597 US_Print (STR_CSTRAFE "\n");
2598#endif
2599 DrawWindow (5, PrintY - 1, 310, 13, BKGDCOLOR);
2600 DrawCustJoy (0);
2601 US_Print ("\n");
2602
2603
2604 //
2605 // KEYBOARD
2606 //
2607#ifndef SPEAR
2608 SETFONTCOLOR (READCOLOR, BKGDCOLOR);
2609 US_CPrint ("Keyboard\n");
2610#else
2611 PrintY += 13;
2612#endif
2613 SETFONTCOLOR (TEXTCOLOR, BKGDCOLOR);
2614#ifdef SPANISH
2615 PrintX = CST_START - 16;
2616 US_Print (STR_CRUN);
2617 PrintX = CST_START - 16 + CST_SPC * 1;
2618 US_Print (STR_COPEN);
2619 PrintX = CST_START - 16 + CST_SPC * 2;
2620 US_Print (STR_CFIRE);
2621 PrintX = CST_START - 16 + CST_SPC * 3;
2622 US_Print (STR_CSTRAFE "\n");
2623#else
2624 PrintX = CST_START;
2625 US_Print (STR_CRUN);
2626 PrintX = CST_START + CST_SPC * 1;
2627 US_Print (STR_COPEN);
2628 PrintX = CST_START + CST_SPC * 2;
2629 US_Print (STR_CFIRE);
2630 PrintX = CST_START + CST_SPC * 3;
2631 US_Print (STR_CSTRAFE "\n");
2632#endif
2633 DrawWindow (5, PrintY - 1, 310, 13, BKGDCOLOR);
2634 DrawCustKeybd (0);
2635 US_Print ("\n");
2636
2637
2638 //
2639 // KEYBOARD MOVE KEYS
2640 //
2641 SETFONTCOLOR (TEXTCOLOR, BKGDCOLOR);
2642#ifdef SPANISH
2643 PrintX = 4;
2644 US_Print (STR_LEFT);
2645 US_Print ("/");
2646 US_Print (STR_RIGHT);
2647 US_Print ("/");
2648 US_Print (STR_FRWD);
2649 US_Print ("/");
2650 US_Print (STR_BKWD "\n");
2651#else
2652 PrintX = CST_START;
2653 US_Print (STR_LEFT);
2654 PrintX = CST_START + CST_SPC * 1;
2655 US_Print (STR_RIGHT);
2656 PrintX = CST_START + CST_SPC * 2;
2657 US_Print (STR_FRWD);
2658 PrintX = CST_START + CST_SPC * 3;
2659 US_Print (STR_BKWD "\n");
2660#endif
2661 DrawWindow (5, PrintY - 1, 310, 13, BKGDCOLOR);
2662 DrawCustKeys (0);
2663#endif
2664 //
2665 // PICK STARTING POINT IN MENU
2666 //
2667 if (CusItems.curpos < 0)
2668 for (i = 0; i < CusItems.amount; i++)
2669 if (CusMenu[i].active)
2670 {
2671 CusItems.curpos = i;
2672 break;
2673 }
2674
2675
2676 VW_UpdateScreen ();
2677 MenuFadeIn ();
2678}
2679
2680
2681void
2682PrintCustMouse (int i)
2683{
2684 int j;
2685
2686 for (j = 0; j < 4; j++)
2687 if (order[i] == buttonmouse[j])
2688 {
2689 PrintX = CST_START + CST_SPC * i;
2690 US_Print (mbarray[j]);
2691 break;
2692 }
2693}
2694
2695void
2696DrawCustMouse (int hilight)
2697{
2698 int i, color;
2699
2700
2701 color = TEXTCOLOR;
2702 if (hilight)
2703 color = HIGHLIGHT;
2704 SETFONTCOLOR (color, BKGDCOLOR);
2705
2706 if (!mouseenabled)
2707 {
2708 SETFONTCOLOR (DEACTIVE, BKGDCOLOR);
2709 CusMenu[0].active = 0;
2710 }
2711 else
2712 CusMenu[0].active = 1;
2713
2714 PrintY = CST_Y + 13 * 2;
2715 for (i = 0; i < 4; i++)
2716 PrintCustMouse (i);
2717}
2718
2719void
2720PrintCustJoy (int i)
2721{
2722 for (int j = 0; j < 4; j++)
2723 {
2724 if (order[i] == buttonjoy[j])
2725 {
2726 PrintX = CST_START + CST_SPC * i;
2727 US_Print (mbarray[j]);
2728 break;
2729 }
2730 }
2731}
2732
2733void
2734DrawCustJoy (int hilight)
2735{
2736 int i, color;
2737
2738 color = TEXTCOLOR;
2739 if (hilight)
2740 color = HIGHLIGHT;
2741 SETFONTCOLOR (color, BKGDCOLOR);
2742
2743 if (!joystickenabled)
2744 {
2745 SETFONTCOLOR (DEACTIVE, BKGDCOLOR);
2746 CusMenu[3].active = 0;
2747 }
2748 else
2749 CusMenu[3].active = 1;
2750
2751 PrintY = CST_Y + 13 * 5;
2752 for (i = 0; i < 4; i++)
2753 PrintCustJoy (i);
2754}
2755
2756
2757void
2758PrintCustKeybd (int i)
2759{
2760 PrintX = CST_START + CST_SPC * i;
2761 US_Print ((const char *) IN_GetScanName (buttonscan[order[i]]));
2762}
2763
2764void
2765DrawCustKeybd (int hilight)
2766{
2767 int i, color;
2768
2769
2770 color = TEXTCOLOR;
2771 if (hilight)
2772 color = HIGHLIGHT;
2773 SETFONTCOLOR (color, BKGDCOLOR);
2774
2775 PrintY = CST_Y + 13 * 8;
2776 for (i = 0; i < 4; i++)
2777 PrintCustKeybd (i);
2778}
2779
2780void
2781PrintCustKeys (int i)
2782{
2783 PrintX = CST_START + CST_SPC * i;
2784 US_Print ((const char *) IN_GetScanName (dirscan[moveorder[i]]));
2785}
2786
2787void
2788DrawCustKeys (int hilight)
2789{
2790 int i, color;
2791
2792
2793 color = TEXTCOLOR;
2794 if (hilight)
2795 color = HIGHLIGHT;
2796 SETFONTCOLOR (color, BKGDCOLOR);
2797
2798 PrintY = CST_Y + 13 * 10;
2799 for (i = 0; i < 4; i++)
2800 PrintCustKeys (i);
2801}
2802
2803
2804////////////////////////////////////////////////////////////////////
2805//
2806// CHANGE SCREEN VIEWING SIZE
2807//
2808////////////////////////////////////////////////////////////////////
2809int
2810CP_ChangeView (int a)
2811{
2812 int exit = 0, oldview, newview;
2813 ControlInfo ci;
2814
2815 WindowX = WindowY = 0;
2816 WindowW = 320;
2817 WindowH = 200;
2818 newview = oldview = viewsize;
2819 DrawChangeView (oldview);
2820 MenuFadeIn ();
2821
2822 do
2823 {
2824 CheckPause ();
2825 SDL_Delay(5);
2826 ReadAnyControl (&ci);
2827 switch (ci.dir)
2828 {
2829 case dir_South:
2830 case dir_West:
2831 newview--;
2832 if (newview < 4)
2833 newview = 4;
2834 if(newview >= 19) DrawChangeView(newview);
2835 else ShowViewSize (newview);
2836 VW_UpdateScreen ();
2837 SD_PlaySound (HITWALLSND);
2838 TicDelay (10);
2839 break;
2840
2841 case dir_North:
2842 case dir_East:
2843 newview++;
2844 if (newview >= 21)
2845 {
2846 newview = 21;
2847 DrawChangeView(newview);
2848 }
2849 else ShowViewSize (newview);
2850 VW_UpdateScreen ();
2851 SD_PlaySound (HITWALLSND);
2852 TicDelay (10);
2853 break;
2854 }
2855
2856 if (ci.button0 || Keyboard[sc_Enter])
2857 exit = 1;
2858 else if (ci.button1 || Keyboard[sc_Escape])
2859 {
2860 SD_PlaySound (ESCPRESSEDSND);
2861 MenuFadeOut ();
2862 if(screenHeight % 200 != 0)
2863 VL_ClearScreen(0);
2864 return 0;
2865 }
2866 }
2867 while (!exit);
2868
2869 if (oldview != newview)
2870 {
2871 SD_PlaySound (SHOOTSND);
2872 Message (STR_THINK "...");
2873 NewViewSize (newview);
2874 }
2875
2876 ShootSnd ();
2877 MenuFadeOut ();
2878 if(screenHeight % 200 != 0)
2879 VL_ClearScreen(0);
2880
2881 return 0;
2882}
2883
2884
2885/////////////////////////////
2886//
2887// DRAW THE CHANGEVIEW SCREEN
2888//
2889void
2890DrawChangeView (int view)
2891{
2892 int rescaledHeight = screenHeight / scaleFactor;
2893 if(view != 21) VWB_Bar (0, rescaledHeight - 40, 320, 40, bordercol);
2894
2895#ifdef JAPAN
2896 CA_CacheScreen (S_CHANGEPIC);
2897
2898 ShowViewSize (view);
2899#else
2900 ShowViewSize (view);
2901
2902 PrintY = (screenHeight / scaleFactor) - 39;
2903 WindowX = 0;
2904 WindowY = 320; // TODO: Check this!
2905 SETFONTCOLOR (HIGHLIGHT, BKGDCOLOR);
2906
2907 US_CPrint (STR_SIZE1 "\n");
2908 US_CPrint (STR_SIZE2 "\n");
2909 US_CPrint (STR_SIZE3);
2910#endif
2911 VW_UpdateScreen ();
2912}
2913
2914
2915////////////////////////////////////////////////////////////////////
2916//
2917// QUIT THIS INFERNAL GAME!
2918//
2919////////////////////////////////////////////////////////////////////
2920int
2921CP_Quit (int a)
2922{
2923#ifdef JAPAN
2924 if (GetYorN (7, 11, C_QUITMSGPIC))
2925#else
2926
2927#ifdef SPANISH
2928 if (Confirm (ENDGAMESTR))
2929#else
2930 if (Confirm (endStrings[US_RndT () & 0x7 + (US_RndT () & 1)]))
2931#endif
2932
2933#endif
2934 {
2935 VW_UpdateScreen ();
2936 SD_MusicOff ();
2937 SD_StopSound ();
2938 MenuFadeOut ();
2939 Quit (NULL);
2940 }
2941
2942 DrawMainMenu ();
2943 return 0;
2944}
2945
2946
2947////////////////////////////////////////////////////////////////////
2948//
2949// HANDLE INTRO SCREEN (SYSTEM CONFIG)
2950//
2951////////////////////////////////////////////////////////////////////
2952void
2953IntroScreen (void)
2954{
2955#ifdef SPEAR
2956
2957#define MAINCOLOR 0x4f
2958#define EMSCOLOR 0x4f
2959#define XMSCOLOR 0x4f
2960
2961#else
2962
2963#define MAINCOLOR 0x6c
2964#define EMSCOLOR 0x6c // 0x4f
2965#define XMSCOLOR 0x6c // 0x7f
2966
2967#endif
2968#define FILLCOLOR 14
2969
2970// long memory;
2971// long emshere,xmshere;
2972 int i;
2973/* int ems[10]={100,200,300,400,500,600,700,800,900,1000},
2974 xms[10]={100,200,300,400,500,600,700,800,900,1000};
2975 int main[10]={32,64,96,128,160,192,224,256,288,320};*/
2976
2977
2978 //
2979 // DRAW MAIN MEMORY
2980 //
2981#ifdef ABCAUS
2982 memory = (1023l + mminfo.nearheap + mminfo.farheap) / 1024l;
2983 for (i = 0; i < 10; i++)
2984 if (memory >= main[i])
2985 VWB_Bar (49, 163 - 8 * i, 6, 5, MAINCOLOR - i);
2986
2987 //
2988 // DRAW EMS MEMORY
2989 //
2990 if (EMSPresent)
2991 {
2992 emshere = 4l * EMSPagesAvail;
2993 for (i = 0; i < 10; i++)
2994 if (emshere >= ems[i])
2995 VWB_Bar (89, 163 - 8 * i, 6, 5, EMSCOLOR - i);
2996 }
2997
2998 //
2999 // DRAW XMS MEMORY
3000 //
3001 if (XMSPresent)
3002 {
3003 xmshere = 4l * XMSPagesAvail;
3004 for (i = 0; i < 10; i++)
3005 if (xmshere >= xms[i])
3006 VWB_Bar (129, 163 - 8 * i, 6, 5, XMSCOLOR - i);
3007 }
3008#else
3009 for (i = 0; i < 10; i++)
3010 VWB_Bar (49, 163 - 8 * i, 6, 5, MAINCOLOR - i);
3011 for (i = 0; i < 10; i++)
3012 VWB_Bar (89, 163 - 8 * i, 6, 5, EMSCOLOR - i);
3013 for (i = 0; i < 10; i++)
3014 VWB_Bar (129, 163 - 8 * i, 6, 5, XMSCOLOR - i);
3015#endif
3016
3017
3018 //
3019 // FILL BOXES
3020 //
3021 if (MousePresent)
3022 VWB_Bar (164, 82, 12, 2, FILLCOLOR);
3023
3024 if (IN_JoyPresent())
3025 VWB_Bar (164, 105, 12, 2, FILLCOLOR);
3026
3027 if (AdLibPresent && !SoundBlasterPresent)
3028 VWB_Bar (164, 128, 12, 2, FILLCOLOR);
3029
3030 if (SoundBlasterPresent)
3031 VWB_Bar (164, 151, 12, 2, FILLCOLOR);
3032
3033// if (SoundSourcePresent)
3034// VWB_Bar (164, 174, 12, 2, FILLCOLOR);
3035}
3036
3037
3038////////////////////////////////////////////////////////////////////
3039////////////////////////////////////////////////////////////////////
3040//
3041// SUPPORT ROUTINES
3042//
3043////////////////////////////////////////////////////////////////////
3044////////////////////////////////////////////////////////////////////
3045
3046////////////////////////////////////////////////////////////////////
3047//
3048// Clear Menu screens to dark red
3049//
3050////////////////////////////////////////////////////////////////////
3051void
3052ClearMScreen (void)
3053{
3054#ifndef SPEAR
3055 VWB_Bar (0, 0, 320, 200, BORDCOLOR);
3056#else
3057 VWB_DrawPic (0, 0, C_BACKDROPPIC);
3058#endif
3059}
3060
3061
3062////////////////////////////////////////////////////////////////////
3063//
3064// Un/Cache a LUMP of graphics
3065//
3066////////////////////////////////////////////////////////////////////
3067void
3068CacheLump (int lumpstart, int lumpend)
3069{
3070 int i;
3071
3072 for (i = lumpstart; i <= lumpend; i++)
3073 CA_CacheGrChunk (i);
3074}
3075
3076
3077void
3078UnCacheLump (int lumpstart, int lumpend)
3079{
3080 int i;
3081
3082 for (i = lumpstart; i <= lumpend; i++)
3083 if (grsegs[i])
3084 UNCACHEGRCHUNK (i);
3085}
3086
3087
3088////////////////////////////////////////////////////////////////////
3089//
3090// Draw a window for a menu
3091//
3092////////////////////////////////////////////////////////////////////
3093void
3094DrawWindow (int x, int y, int w, int h, int wcolor)
3095{
3096 VWB_Bar (x, y, w, h, wcolor);
3097 DrawOutline (x, y, w, h, BORD2COLOR, DEACTIVE);
3098}
3099
3100
3101void
3102DrawOutline (int x, int y, int w, int h, int color1, int color2)
3103{
3104 VWB_Hlin (x, x + w, y, color2);
3105 VWB_Vlin (y, y + h, x, color2);
3106 VWB_Hlin (x, x + w, y + h, color1);
3107 VWB_Vlin (y, y + h, x + w, color1);
3108}
3109
3110
3111////////////////////////////////////////////////////////////////////
3112//
3113// Setup Control Panel stuff - graphics, etc.
3114//
3115////////////////////////////////////////////////////////////////////
3116void
3117SetupControlPanel (void)
3118{
3119 //
3120 // CACHE GRAPHICS & SOUNDS
3121 //
3122 CA_CacheGrChunk (STARTFONT + 1);
3123#ifndef SPEAR
3124 CacheLump (CONTROLS_LUMP_START, CONTROLS_LUMP_END);
3125#else
3126 CacheLump (BACKDROP_LUMP_START, BACKDROP_LUMP_END);
3127#endif
3128
3129 SETFONTCOLOR (TEXTCOLOR, BKGDCOLOR);
3130 fontnumber = 1;
3131 WindowH = 200;
3132 if(screenHeight % 200 != 0)
3133 VL_ClearScreen(0);
3134
3135 if (!ingame)
3136 CA_LoadAllSounds ();
3137 else
3138 MainMenu[savegame].active = 1;
3139
3140 //
3141 // CENTER MOUSE
3142 //
3143 if(IN_IsInputGrabbed())
3144 IN_CenterMouse();
3145}
3146
3147////////////////////////////////////////////////////////////////////
3148//
3149// SEE WHICH SAVE GAME FILES ARE AVAILABLE & READ STRING IN
3150//
3151////////////////////////////////////////////////////////////////////
3152void SetupSaveGames()
3153{
3154 char name[13];
3155 char savepath[300];
3156
3157 strcpy(name, SaveName);
3158 for(int i = 0; i < 10; i++)
3159 {
3160 name[7] = '0' + i;
3161#ifdef _arch_dreamcast
3162 // Try to unpack file
3163 if(DC_LoadFromVMU(name))
3164 {
3165#endif
3166 if(configdir[0])
3167 snprintf(savepath, sizeof(savepath), "%s/%s", configdir, name);
3168 else
3169 strcpy(savepath, name);
3170
3171 const int handle = open(savepath, O_RDONLY | O_BINARY);
3172 if(handle >= 0)
3173 {
3174 char temp[32];
3175
3176 SaveGamesAvail[i] = 1;
3177 read(handle, temp, 32);
3178 close(handle);
3179 strcpy(&SaveGameNames[i][0], temp);
3180 }
3181#ifdef _arch_dreamcast
3182 // Remove unpacked version of file
3183 fs_unlink(name);
3184 }
3185#endif
3186 }
3187}
3188
3189////////////////////////////////////////////////////////////////////
3190//
3191// Clean up all the Control Panel stuff
3192//
3193////////////////////////////////////////////////////////////////////
3194void
3195CleanupControlPanel (void)
3196{
3197#ifndef SPEAR
3198 UnCacheLump (CONTROLS_LUMP_START, CONTROLS_LUMP_END);
3199#else
3200 UnCacheLump (BACKDROP_LUMP_START, BACKDROP_LUMP_END);
3201#endif
3202
3203 fontnumber = 0;
3204}
3205
3206
3207////////////////////////////////////////////////////////////////////
3208//
3209// Handle moving gun around a menu
3210//
3211////////////////////////////////////////////////////////////////////
3212int
3213HandleMenu (CP_iteminfo * item_i, CP_itemtype * items, void (*routine) (int w))
3214{
3215 char key;
3216 static int redrawitem = 1, lastitem = -1;
3217 int i, x, y, basey, exit, which, shape;
3218 int32_t lastBlinkTime, timer;
3219 ControlInfo ci;
3220
3221
3222 which = item_i->curpos;
3223 x = item_i->x & -8;
3224 basey = item_i->y - 2;
3225 y = basey + which * 13;
3226
3227 VWB_DrawPic (x, y, C_CURSOR1PIC);
3228 SetTextColor (items + which, 1);
3229 if (redrawitem)
3230 {
3231 PrintX = item_i->x + item_i->indent;
3232 PrintY = item_i->y + which * 13;
3233 US_Print ((items + which)->string);
3234 }
3235 //
3236 // CALL CUSTOM ROUTINE IF IT IS NEEDED
3237 //
3238 if (routine)
3239 routine (which);
3240 VW_UpdateScreen ();
3241
3242 shape = C_CURSOR1PIC;
3243 timer = 8;
3244 exit = 0;
3245 lastBlinkTime = GetTimeCount ();
3246 IN_ClearKeysDown ();
3247
3248
3249 do
3250 {
3251 //
3252 // CHANGE GUN SHAPE
3253 //
3254 if ((int32_t)GetTimeCount () - lastBlinkTime > timer)
3255 {
3256 lastBlinkTime = GetTimeCount ();
3257 if (shape == C_CURSOR1PIC)
3258 {
3259 shape = C_CURSOR2PIC;
3260 timer = 8;
3261 }
3262 else
3263 {
3264 shape = C_CURSOR1PIC;
3265 timer = 70;
3266 }
3267 VWB_DrawPic (x, y, shape);
3268 if (routine)
3269 routine (which);
3270 VW_UpdateScreen ();
3271 }
3272 else SDL_Delay(5);
3273
3274 CheckPause ();
3275
3276 //
3277 // SEE IF ANY KEYS ARE PRESSED FOR INITIAL CHAR FINDING
3278 //
3279 key = LastASCII;
3280 if (key)
3281 {
3282 int ok = 0;
3283
3284 if (key >= 'a')
3285 key -= 'a' - 'A';
3286
3287 for (i = which + 1; i < item_i->amount; i++)
3288 if ((items + i)->active && (items + i)->string[0] == key)
3289 {
3290 EraseGun (item_i, items, x, y, which);
3291 which = i;
3292 DrawGun (item_i, items, x, &y, which, basey, routine);
3293 ok = 1;
3294 IN_ClearKeysDown ();
3295 break;
3296 }
3297
3298 //
3299 // DIDN'T FIND A MATCH FIRST TIME THRU. CHECK AGAIN.
3300 //
3301 if (!ok)
3302 {
3303 for (i = 0; i < which; i++)
3304 if ((items + i)->active && (items + i)->string[0] == key)
3305 {
3306 EraseGun (item_i, items, x, y, which);
3307 which = i;
3308 DrawGun (item_i, items, x, &y, which, basey, routine);
3309 IN_ClearKeysDown ();
3310 break;
3311 }
3312 }
3313 }
3314
3315 //
3316 // GET INPUT
3317 //
3318 ReadAnyControl (&ci);
3319 switch (ci.dir)
3320 {
3321 ////////////////////////////////////////////////
3322 //
3323 // MOVE UP
3324 //
3325 case dir_North:
3326
3327 EraseGun (item_i, items, x, y, which);
3328
3329 //
3330 // ANIMATE HALF-STEP
3331 //
3332 if (which && (items + which - 1)->active)
3333 {
3334 y -= 6;
3335 DrawHalfStep (x, y);
3336 }
3337
3338 //
3339 // MOVE TO NEXT AVAILABLE SPOT
3340 //
3341 do
3342 {
3343 if (!which)
3344 which = item_i->amount - 1;
3345 else
3346 which--;
3347 }
3348 while (!(items + which)->active);
3349
3350 DrawGun (item_i, items, x, &y, which, basey, routine);
3351 //
3352 // WAIT FOR BUTTON-UP OR DELAY NEXT MOVE
3353 //
3354 TicDelay (20);
3355 break;
3356
3357 ////////////////////////////////////////////////
3358 //
3359 // MOVE DOWN
3360 //
3361 case dir_South:
3362
3363 EraseGun (item_i, items, x, y, which);
3364 //
3365 // ANIMATE HALF-STEP
3366 //
3367 if (which != item_i->amount - 1 && (items + which + 1)->active)
3368 {
3369 y += 6;
3370 DrawHalfStep (x, y);
3371 }
3372
3373 do
3374 {
3375 if (which == item_i->amount - 1)
3376 which = 0;
3377 else
3378 which++;
3379 }
3380 while (!(items + which)->active);
3381
3382 DrawGun (item_i, items, x, &y, which, basey, routine);
3383
3384 //
3385 // WAIT FOR BUTTON-UP OR DELAY NEXT MOVE
3386 //
3387 TicDelay (20);
3388 break;
3389 }
3390
3391 if (ci.button0 || Keyboard[sc_Space] || Keyboard[sc_Enter])
3392 exit = 1;
3393
3394 if (ci.button1 && !Keyboard[sc_Alt] || Keyboard[sc_Escape])
3395 exit = 2;
3396
3397 }
3398 while (!exit);
3399
3400
3401 IN_ClearKeysDown ();
3402
3403 //
3404 // ERASE EVERYTHING
3405 //
3406 if (lastitem != which)
3407 {
3408 VWB_Bar (x - 1, y, 25, 16, BKGDCOLOR);
3409 PrintX = item_i->x + item_i->indent;
3410 PrintY = item_i->y + which * 13;
3411 US_Print ((items + which)->string);
3412 redrawitem = 1;
3413 }
3414 else
3415 redrawitem = 0;
3416
3417 if (routine)
3418 routine (which);
3419 VW_UpdateScreen ();
3420
3421 item_i->curpos = which;
3422
3423 lastitem = which;
3424 switch (exit)
3425 {
3426 case 1:
3427 //
3428 // CALL THE ROUTINE
3429 //
3430 if ((items + which)->routine != NULL)
3431 {
3432 ShootSnd ();
3433 MenuFadeOut ();
3434 (items + which)->routine (0);
3435 }
3436 return which;
3437
3438 case 2:
3439 SD_PlaySound (ESCPRESSEDSND);
3440 return -1;
3441 }
3442
3443 return 0; // JUST TO SHUT UP THE ERROR MESSAGES!
3444}
3445
3446
3447//
3448// ERASE GUN & DE-HIGHLIGHT STRING
3449//
3450void
3451EraseGun (CP_iteminfo * item_i, CP_itemtype * items, int x, int y, int which)
3452{
3453 VWB_Bar (x - 1, y, 25, 16, BKGDCOLOR);
3454 SetTextColor (items + which, 0);
3455
3456 PrintX = item_i->x + item_i->indent;
3457 PrintY = item_i->y + which * 13;
3458 US_Print ((items + which)->string);
3459 VW_UpdateScreen ();
3460}
3461
3462
3463//
3464// DRAW HALF STEP OF GUN TO NEXT POSITION
3465//
3466void
3467DrawHalfStep (int x, int y)
3468{
3469 VWB_DrawPic (x, y, C_CURSOR1PIC);
3470 VW_UpdateScreen ();
3471 SD_PlaySound (MOVEGUN1SND);
3472 SDL_Delay (8 * 100 / 7);
3473}
3474
3475
3476//
3477// DRAW GUN AT NEW POSITION
3478//
3479void
3480DrawGun (CP_iteminfo * item_i, CP_itemtype * items, int x, int *y, int which, int basey,
3481 void (*routine) (int w))
3482{
3483 VWB_Bar (x - 1, *y, 25, 16, BKGDCOLOR);
3484 *y = basey + which * 13;
3485 VWB_DrawPic (x, *y, C_CURSOR1PIC);
3486 SetTextColor (items + which, 1);
3487
3488 PrintX = item_i->x + item_i->indent;
3489 PrintY = item_i->y + which * 13;
3490 US_Print ((items + which)->string);
3491
3492 //
3493 // CALL CUSTOM ROUTINE IF IT IS NEEDED
3494 //
3495 if (routine)
3496 routine (which);
3497 VW_UpdateScreen ();
3498 SD_PlaySound (MOVEGUN2SND);
3499}
3500
3501////////////////////////////////////////////////////////////////////
3502//
3503// DELAY FOR AN AMOUNT OF TICS OR UNTIL CONTROLS ARE INACTIVE
3504//
3505////////////////////////////////////////////////////////////////////
3506void
3507TicDelay (int count)
3508{
3509 ControlInfo ci;
3510
3511 int32_t startTime = GetTimeCount ();
3512 do
3513 {
3514 SDL_Delay(5);
3515 ReadAnyControl (&ci);
3516 }
3517 while ((int32_t) GetTimeCount () - startTime < count && ci.dir != dir_None);
3518}
3519
3520
3521////////////////////////////////////////////////////////////////////
3522//
3523// Draw a menu
3524//
3525////////////////////////////////////////////////////////////////////
3526void
3527DrawMenu (CP_iteminfo * item_i, CP_itemtype * items)
3528{
3529 int i, which = item_i->curpos;
3530
3531
3532 WindowX = PrintX = item_i->x + item_i->indent;
3533 WindowY = PrintY = item_i->y;
3534 WindowW = 320;
3535 WindowH = 200;
3536
3537 for (i = 0; i < item_i->amount; i++)
3538 {
3539 SetTextColor (items + i, which == i);
3540
3541 PrintY = item_i->y + i * 13;
3542 if ((items + i)->active)
3543 US_Print ((items + i)->string);
3544 else
3545 {
3546 SETFONTCOLOR (DEACTIVE, BKGDCOLOR);
3547 US_Print ((items + i)->string);
3548 SETFONTCOLOR (TEXTCOLOR, BKGDCOLOR);
3549 }
3550
3551 US_Print ("\n");
3552 }
3553}
3554
3555
3556////////////////////////////////////////////////////////////////////
3557//
3558// SET TEXT COLOR (HIGHLIGHT OR NO)
3559//
3560////////////////////////////////////////////////////////////////////
3561void
3562SetTextColor (CP_itemtype * items, int hlight)
3563{
3564 if (hlight)
3565 {
3566 SETFONTCOLOR (color_hlite[items->active], BKGDCOLOR);
3567 }
3568 else
3569 {
3570 SETFONTCOLOR (color_norml[items->active], BKGDCOLOR);
3571 }
3572}
3573
3574
3575////////////////////////////////////////////////////////////////////
3576//
3577// WAIT FOR CTRLKEY-UP OR BUTTON-UP
3578//
3579////////////////////////////////////////////////////////////////////
3580void
3581WaitKeyUp (void)
3582{
3583 ControlInfo ci;
3584 while (ReadAnyControl (&ci), ci.button0 |
3585 ci.button1 |
3586 ci.button2 | ci.button3 | Keyboard[sc_Space] | Keyboard[sc_Enter] | Keyboard[sc_Escape])
3587 {
3588 IN_WaitAndProcessEvents();
3589 }
3590}
3591
3592
3593////////////////////////////////////////////////////////////////////
3594//
3595// READ KEYBOARD, JOYSTICK AND MOUSE FOR INPUT
3596//
3597////////////////////////////////////////////////////////////////////
3598void
3599ReadAnyControl (ControlInfo * ci)
3600{
3601 int mouseactive = 0;
3602
3603 IN_ReadControl (0, ci);
3604#if 0
3605 if (mouseenabled && IN_IsInputGrabbed())
3606 {
3607 int mousex, mousey, buttons;
3608 buttons = SDL_GetMouseState(&mousex, &mousey);
3609 int middlePressed = buttons & SDL_BUTTON(SDL_BUTTON_MIDDLE);
3610 int rightPressed = buttons & SDL_BUTTON(SDL_BUTTON_RIGHT);
3611 buttons &= ~(SDL_BUTTON(SDL_BUTTON_MIDDLE) | SDL_BUTTON(SDL_BUTTON_RIGHT));
3612 if(middlePressed) buttons |= 1 << 2;
3613 if(rightPressed) buttons |= 1 << 1;
3614
3615 if(mousey - CENTERY < -SENSITIVE)
3616 {
3617 ci->dir = dir_North;
3618 mouseactive = 1;
3619 }
3620 else if(mousey - CENTERY > SENSITIVE)
3621 {
3622 ci->dir = dir_South;
3623 mouseactive = 1;
3624 }
3625
3626 if(mousex - CENTERX < -SENSITIVE)
3627 {
3628 ci->dir = dir_West;
3629 mouseactive = 1;
3630 }
3631 else if(mousex - CENTERX > SENSITIVE)
3632 {
3633 ci->dir = dir_East;
3634 mouseactive = 1;
3635 }
3636
3637 if(mouseactive)
3638 IN_CenterMouse();
3639
3640 if (buttons)
3641 {
3642 ci->button0 = buttons & 1;
3643 ci->button1 = buttons & 2;
3644 ci->button2 = buttons & 4;
3645 ci->button3 = false;
3646 mouseactive = 1;
3647 }
3648 }
3649
3650 if (joystickenabled && !mouseactive)
3651 {
3652 int jx, jy, jb;
3653
3654 IN_GetJoyDelta (&jx, &jy);
3655 if (jy < -SENSITIVE)
3656 ci->dir = dir_North;
3657 else if (jy > SENSITIVE)
3658 ci->dir = dir_South;
3659
3660 if (jx < -SENSITIVE)
3661 ci->dir = dir_West;
3662 else if (jx > SENSITIVE)
3663 ci->dir = dir_East;
3664
3665 jb = IN_JoyButtons ();
3666 if (jb)
3667 {
3668 ci->button0 = jb & 1;
3669 ci->button1 = jb & 2;
3670 ci->button2 = jb & 4;
3671 ci->button3 = jb & 8;
3672 }
3673 }
3674#endif
3675}
3676
3677
3678////////////////////////////////////////////////////////////////////
3679//
3680// DRAW DIALOG AND CONFIRM YES OR NO TO QUESTION
3681//
3682////////////////////////////////////////////////////////////////////
3683int
3684Confirm (const char *string)
3685{
3686 int xit = 0, x, y, tick = 0, lastBlinkTime;
3687 int whichsnd[2] = { ESCPRESSEDSND, SHOOTSND };
3688 ControlInfo ci;
3689
3690 Message (string);
3691 IN_ClearKeysDown ();
3692 WaitKeyUp ();
3693
3694 //
3695 // BLINK CURSOR
3696 //
3697 x = PrintX;
3698 y = PrintY;
3699 lastBlinkTime = GetTimeCount();
3700
3701 do
3702 {
3703 ReadAnyControl(&ci);
3704
3705 if (GetTimeCount() - lastBlinkTime >= 10)
3706 {
3707 switch (tick)
3708 {
3709 case 0:
3710 VWB_Bar (x, y, 8, 13, TEXTCOLOR);
3711 break;
3712 case 1:
3713 PrintX = x;
3714 PrintY = y;
3715 US_Print ("_");
3716 }
3717 VW_UpdateScreen ();
3718 tick ^= 1;
3719 lastBlinkTime = GetTimeCount();
3720 }
3721 else SDL_Delay(5);
3722
3723#ifdef SPANISH
3724 }
3725 while (!Keyboard[sc_S] && !Keyboard[sc_N] && !Keyboard[sc_Escape]);
3726#else
3727 }
3728 while (!Keyboard[sc_Return] && !Keyboard[sc_Y] && !Keyboard[sc_N] && !Keyboard[sc_Escape] && !ci.button0 && !ci.button1);
3729#endif
3730
3731#ifdef SPANISH
3732 if (Keyboard[sc_S] || ci.button0)
3733 {
3734 xit = 1;
3735 ShootSnd ();
3736 }
3737#else
3738 if (Keyboard[sc_Y] || Keyboard[sc_Return] || ci.button0)
3739 {
3740 xit = 1;
3741 ShootSnd ();
3742 }
3743#endif
3744
3745 IN_ClearKeysDown ();
3746 WaitKeyUp ();
3747
3748 SD_PlaySound ((soundnames) whichsnd[xit]);
3749
3750 return xit;
3751}
3752
3753#ifdef JAPAN
3754////////////////////////////////////////////////////////////////////
3755//
3756// DRAW MESSAGE & GET Y OR N
3757//
3758////////////////////////////////////////////////////////////////////
3759int
3760GetYorN (int x, int y, int pic)
3761{
3762 int xit = 0, whichsnd[2] = { ESCPRESSEDSND, SHOOTSND };
3763
3764
3765 CA_CacheGrChunk (pic);
3766 VWB_DrawPic (x * 8, y * 8, pic);
3767 UNCACHEGRCHUNK (pic);
3768 VW_UpdateScreen ();
3769 IN_ClearKeysDown ();
3770
3771 do
3772 {
3773 IN_WaitAndProcessEvents();
3774#ifndef SPEAR
3775 if (Keyboard[sc_Tab] && Keyboard[sc_P] && param_debugmode)
3776 PicturePause ();
3777#endif
3778
3779#ifdef SPANISH
3780 }
3781 while (!Keyboard[sc_S] && !Keyboard[sc_N] && !Keyboard[sc_Escape]);
3782#else
3783 }
3784 while (!Keyboard[sc_Y] && !Keyboard[sc_N] && !Keyboard[sc_Escape]);
3785#endif
3786
3787#ifdef SPANISH
3788 if (Keyboard[sc_S])
3789 {
3790 xit = 1;
3791 ShootSnd ();
3792 }
3793
3794 while (Keyboard[sc_S] || Keyboard[sc_N] || Keyboard[sc_Escape])
3795 IN_WaitAndProcessEvents();
3796
3797#else
3798
3799 if (Keyboard[sc_Y])
3800 {
3801 xit = 1;
3802 ShootSnd ();
3803 }
3804
3805 while (Keyboard[sc_Y] || Keyboard[sc_N] || Keyboard[sc_Escape])
3806 IN_WaitAndProcessEvents();
3807#endif
3808
3809 IN_ClearKeysDown ();
3810 SD_PlaySound (whichsnd[xit]);
3811 return xit;
3812}
3813#endif
3814
3815
3816////////////////////////////////////////////////////////////////////
3817//
3818// PRINT A MESSAGE IN A WINDOW
3819//
3820////////////////////////////////////////////////////////////////////
3821void
3822Message (const char *string)
3823{
3824 int h = 0, w = 0, mw = 0, i, len = (int) strlen(string);
3825 fontstruct *font;
3826
3827
3828 CA_CacheGrChunk (STARTFONT + 1);
3829 fontnumber = 1;
3830 font = (fontstruct *) grsegs[STARTFONT + fontnumber];
3831 h = font->height;
3832 for (i = 0; i < len; i++)
3833 {
3834 if (string[i] == '\n')
3835 {
3836 if (w > mw)
3837 mw = w;
3838 w = 0;
3839 h += font->height;
3840 }
3841 else
3842 w += font->width[string[i]];
3843 }
3844
3845 if (w + 10 > mw)
3846 mw = w + 10;
3847
3848 PrintY = (WindowH / 2) - h / 2;
3849 PrintX = WindowX = 160 - mw / 2;
3850
3851 DrawWindow (WindowX - 5, PrintY - 5, mw + 10, h + 10, TEXTCOLOR);
3852 DrawOutline (WindowX - 5, PrintY - 5, mw + 10, h + 10, 0, HIGHLIGHT);
3853 SETFONTCOLOR (0, TEXTCOLOR);
3854 US_Print (string);
3855 VW_UpdateScreen ();
3856}
3857
3858////////////////////////////////////////////////////////////////////
3859//
3860// THIS MAY BE FIXED A LITTLE LATER...
3861//
3862////////////////////////////////////////////////////////////////////
3863static int lastmusic;
3864
3865int
3866StartCPMusic (int song)
3867{
3868 int lastoffs;
3869
3870 lastmusic = song;
3871 lastoffs = SD_MusicOff ();
3872 UNCACHEAUDIOCHUNK (STARTMUSIC + lastmusic);
3873
3874 SD_StartMusic(STARTMUSIC + song);
3875 return lastoffs;
3876}
3877
3878void
3879FreeMusic (void)
3880{
3881 UNCACHEAUDIOCHUNK (STARTMUSIC + lastmusic);
3882}
3883
3884
3885///////////////////////////////////////////////////////////////////////////
3886//
3887// IN_GetScanName() - Returns a string containing the name of the
3888// specified scan code
3889//
3890///////////////////////////////////////////////////////////////////////////
3891const char *
3892IN_GetScanName (ScanCode scan)
3893{
3894/* const char **p;
3895 ScanCode *s;
3896
3897 for (s = ExtScanCodes, p = ExtScanNames; *s; p++, s++)
3898 if (*s == scan)
3899 return (*p);*/
3900
3901 return (ScanNames[scan]);
3902}
3903
3904
3905///////////////////////////////////////////////////////////////////////////
3906//
3907// CHECK FOR PAUSE KEY (FOR MUSIC ONLY)
3908//
3909///////////////////////////////////////////////////////////////////////////
3910void
3911CheckPause (void)
3912{
3913 if (Paused)
3914 {
3915 switch (SoundStatus)
3916 {
3917 case 0:
3918 SD_MusicOn ();
3919 break;
3920 case 1:
3921 SD_MusicOff ();
3922 break;
3923 }
3924
3925 SoundStatus ^= 1;
3926 VW_WaitVBL (3);
3927 IN_ClearKeysDown ();
3928 Paused = false;
3929 }
3930}
3931
3932
3933///////////////////////////////////////////////////////////////////////////
3934//
3935// DRAW GUN CURSOR AT CORRECT POSITION IN MENU
3936//
3937///////////////////////////////////////////////////////////////////////////
3938void
3939DrawMenuGun (CP_iteminfo * iteminfo)
3940{
3941 int x, y;
3942
3943
3944 x = iteminfo->x;
3945 y = iteminfo->y + iteminfo->curpos * 13 - 2;
3946 VWB_DrawPic (x, y, C_CURSOR1PIC);
3947}
3948
3949
3950///////////////////////////////////////////////////////////////////////////
3951//
3952// DRAW SCREEN TITLE STRIPES
3953//
3954///////////////////////////////////////////////////////////////////////////
3955void
3956DrawStripes (int y)
3957{
3958#ifndef SPEAR
3959 VWB_Bar (0, y, 320, 24, 0);
3960 VWB_Hlin (0, 319, y + 22, STRIPE);
3961#else
3962 VWB_Bar (0, y, 320, 22, 0);
3963 VWB_Hlin (0, 319, y + 23, 0);
3964#endif
3965}
3966
3967void
3968ShootSnd (void)
3969{
3970 SD_PlaySound (SHOOTSND);
3971}
3972
3973
3974///////////////////////////////////////////////////////////////////////////
3975//
3976// CHECK FOR EPISODES
3977//
3978///////////////////////////////////////////////////////////////////////////
3979
3980#define stat my_stat
3981void *my_stat(const char *path, int *buf)
3982{
3983 if(rb->file_exists(path))
3984 return NULL;
3985 else
3986 return 1;
3987}
3988
3989void
3990CheckForEpisodes (void)
3991{
3992 int statbuf;
3993
3994 // On Linux like systems, the configdir defaults to $HOME/.wolf4sdl
3995#if !defined(_WIN32) && !defined(_arch_dreamcast)
3996 if(configdir[0] == 0)
3997 {
3998 // Set config location to home directory for multi-user support
3999 char *homedir = "/";
4000 if(homedir == NULL)
4001 {
4002 Quit("Your $HOME directory is not defined. You must set this before playing.");
4003 }
4004 #define WOLFDIR "/.wolf4sdl"
4005 if(strlen(homedir) + sizeof(WOLFDIR) > sizeof(configdir))
4006 {
4007 Quit("Your $HOME directory path is too long. It cannot be used for saving games.");
4008 }
4009 snprintf(configdir, sizeof(configdir), "%s" WOLFDIR, homedir);
4010 }
4011#endif
4012
4013 if(configdir[0] != 0)
4014 {
4015 // Ensure config directory exists and create if necessary
4016 if(stat(configdir, &statbuf) != 0)
4017 {
4018#ifdef _WIN32
4019 if(_mkdir(configdir) != 0)
4020#else
4021 if(mkdir(configdir) != 0)
4022#endif
4023 {
4024 Quit("The configuration directory \"%s\" could not be created.", configdir);
4025 }
4026 }
4027 }
4028
4029//
4030// JAPANESE VERSION
4031//
4032#ifdef JAPAN
4033#ifdef JAPDEMO
4034 if(!stat(DATADIR "vswap.wj1", &statbuf))
4035 {
4036 strcpy (extension, "wj1");
4037 numEpisodesMissing = 5;
4038#else
4039 if(!stat(DATADIR "vswap.wj6", &statbuf))
4040 {
4041 strcpy (extension, "wj6");
4042#endif
4043 strcat (configname, extension);
4044 strcat (SaveName, extension);
4045 strcat (demoname, extension);
4046 EpisodeSelect[1] =
4047 EpisodeSelect[2] = EpisodeSelect[3] = EpisodeSelect[4] = EpisodeSelect[5] = 1;
4048 }
4049 else
4050 Quit ("NO JAPANESE WOLFENSTEIN 3-D DATA FILES to be found!");
4051#else
4052
4053//
4054// ENGLISH
4055//
4056#ifdef UPLOAD
4057 if(!stat(DATADIR "vswap.wl1", &statbuf))
4058 {
4059 strcpy (extension, "wl1");
4060 numEpisodesMissing = 5;
4061 }
4062 else
4063 Quit ("NO WOLFENSTEIN 3-D DATA FILES to be found! %s", DATADIR"vswap.wl1");
4064#else
4065#ifndef SPEAR
4066 if(!stat(DATADIR "vswap.wl6", &statbuf))
4067 {
4068 strcpy (extension, "wl6");
4069 NewEmenu[2].active =
4070 NewEmenu[4].active =
4071 NewEmenu[6].active =
4072 NewEmenu[8].active =
4073 NewEmenu[10].active =
4074 EpisodeSelect[1] =
4075 EpisodeSelect[2] = EpisodeSelect[3] = EpisodeSelect[4] = EpisodeSelect[5] = 1;
4076 }
4077 else
4078 {
4079 if(!stat(DATADIR "vswap.wl3", &statbuf))
4080 {
4081 strcpy (extension, "wl3");
4082 numEpisodesMissing = 3;
4083 NewEmenu[2].active = NewEmenu[4].active = EpisodeSelect[1] = EpisodeSelect[2] = 1;
4084 }
4085 else
4086 {
4087 if(!stat(DATADIR "vswap.wl1", &statbuf))
4088 {
4089 strcpy (extension, "wl1");
4090 numEpisodesMissing = 5;
4091 }
4092 else
4093 Quit ("NO WOLFENSTEIN 3-D DATA FILES to be found!"DATADIR"vswap.wl[6,3,1]");
4094 }
4095 }
4096#endif
4097#endif
4098
4099
4100#ifdef SPEAR
4101#ifndef SPEARDEMO
4102 if(param_mission == 0)
4103 {
4104 if(!stat(DATADIR "vswap.sod", &statbuf))
4105 strcpy (extension, "sod");
4106 else
4107 Quit ("NO SPEAR OF DESTINY DATA FILES TO BE FOUND!");
4108 }
4109 else if(param_mission == 1)
4110 {
4111 if(!stat(DATADIR "vswap.sd1", &statbuf))
4112 strcpy (extension, "sd1");
4113 else
4114 Quit ("NO SPEAR OF DESTINY DATA FILES TO BE FOUND!");
4115 }
4116 else if(param_mission == 2)
4117 {
4118 if(!stat(DATADIR "vswap.sd2", &statbuf))
4119 strcpy (extension, "sd2");
4120 else
4121 Quit ("NO SPEAR OF DESTINY DATA FILES TO BE FOUND!");
4122 }
4123 else if(param_mission == 3)
4124 {
4125 if(!stat(DATADIR "vswap.sd3", &statbuf))
4126 strcpy (extension, "sd3");
4127 else
4128 Quit ("NO SPEAR OF DESTINY DATA FILES TO BE FOUND!");
4129 }
4130 else
4131 Quit ("UNSUPPORTED MISSION!");
4132 strcpy (graphext, "sod");
4133 strcpy (audioext, "sod");
4134#else
4135 if(!stat(DATADIR "vswap.sdm", &statbuf))
4136 {
4137 strcpy (extension, "sdm");
4138 }
4139 else
4140 Quit ("NO SPEAR OF DESTINY DEMO DATA FILES TO BE FOUND!");
4141 strcpy (graphext, "sdm");
4142 strcpy (audioext, "sdm");
4143#endif
4144#else
4145 strcpy (graphext, extension);
4146 strcpy (audioext, extension);
4147#endif
4148
4149 strcat (configname, extension);
4150 strcat (SaveName, extension);
4151 strcat (demoname, extension);
4152
4153#ifndef SPEAR
4154#ifndef GOODTIMES
4155 strcat (helpfilename, extension);
4156#endif
4157 strcat (endfilename, extension);
4158#endif
4159#endif
4160}
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 @@
1//
2// WL_MENU.H
3//
4#ifdef SPEAR
5
6#define BORDCOLOR 0x99
7#define BORD2COLOR 0x93
8#define DEACTIVE 0x9b
9#define BKGDCOLOR 0x9d
10//#define STRIPE 0x9c
11
12#define MenuFadeOut() VL_FadeOut(0,255,0,0,51,10)
13
14#else
15
16#define BORDCOLOR 0x29
17#define BORD2COLOR 0x23
18#define DEACTIVE 0x2b
19#define BKGDCOLOR 0x2d
20#define STRIPE 0x2c
21
22#define MenuFadeOut() VL_FadeOut(0,255,43,0,0,10)
23
24#endif
25
26#define READCOLOR 0x4a
27#define READHCOLOR 0x47
28#define VIEWCOLOR 0x7f
29#define TEXTCOLOR 0x17
30#define HIGHLIGHT 0x13
31#define MenuFadeIn() VL_FadeIn(0,255,gamepal,10)
32
33
34#define MENUSONG WONDERIN_MUS
35
36#ifndef SPEAR
37#define INTROSONG NAZI_NOR_MUS
38#else
39#define INTROSONG XTOWER2_MUS
40#endif
41
42#define SENSITIVE 60
43#define CENTERX ((int) screenWidth / 2)
44#define CENTERY ((int) screenHeight / 2)
45
46#define MENU_X 76
47#define MENU_Y 55
48#define MENU_W 178
49#ifndef SPEAR
50#ifndef GOODTIMES
51#define MENU_H 13*10+6
52#else
53#define MENU_H 13*9+6
54#endif
55#else
56#define MENU_H 13*9+6
57#endif
58
59#define SM_X 48
60#define SM_W 250
61
62#define SM_Y1 20
63#define SM_H1 4*13-7
64#define SM_Y2 SM_Y1+5*13
65#define SM_H2 4*13-7
66#define SM_Y3 SM_Y2+5*13
67#define SM_H3 3*13-7
68
69#define CTL_X 24
70#define CTL_Y 86
71#define CTL_W 284
72#define CTL_H 60
73
74#define LSM_X 85
75#define LSM_Y 55
76#define LSM_W 175
77#define LSM_H 10*13+10
78
79#define NM_X 50
80#define NM_Y 100
81#define NM_W 225
82#define NM_H 13*4+15
83
84#define NE_X 10
85#define NE_Y 23
86#define NE_W 320-NE_X*2
87#define NE_H 200-NE_Y*2
88
89#define CST_X 20
90#define CST_Y 48
91#define CST_START 60
92#define CST_SPC 60
93
94
95//
96// TYPEDEFS
97//
98typedef struct {
99 short x,y,amount,curpos,indent;
100 } CP_iteminfo;
101
102typedef struct {
103 short active;
104 char string[36];
105 int (* routine)(int temp1);
106 } CP_itemtype;
107
108typedef struct {
109 short allowed[4];
110 } CustomCtrls;
111
112extern CP_itemtype MainMenu[];
113extern CP_iteminfo MainItems;
114
115//
116// FUNCTION PROTOTYPES
117//
118
119void US_ControlPanel(ScanCode);
120
121void EnableEndGameMenuItem();
122
123void SetupControlPanel(void);
124void SetupSaveGames();
125void CleanupControlPanel(void);
126
127void DrawMenu(CP_iteminfo *item_i,CP_itemtype *items);
128int HandleMenu(CP_iteminfo *item_i,
129 CP_itemtype *items,
130 void (*routine)(int w));
131void ClearMScreen(void);
132void DrawWindow(int x,int y,int w,int h,int wcolor);
133void DrawOutline(int x,int y,int w,int h,int color1,int color2);
134void WaitKeyUp(void);
135void ReadAnyControl(ControlInfo *ci);
136void TicDelay(int count);
137void CacheLump(int lumpstart,int lumpend);
138void UnCacheLump(int lumpstart,int lumpend);
139int StartCPMusic(int song);
140int Confirm(const char *string);
141void Message(const char *string);
142void CheckPause(void);
143void ShootSnd(void);
144void CheckSecretMissions(void);
145void BossKey(void);
146
147void DrawGun(CP_iteminfo *item_i,CP_itemtype *items,int x,int *y,int which,int basey,void (*routine)(int w));
148void DrawHalfStep(int x,int y);
149void EraseGun(CP_iteminfo *item_i,CP_itemtype *items,int x,int y,int which);
150void SetTextColor(CP_itemtype *items,int hlight);
151void DrawMenuGun(CP_iteminfo *iteminfo);
152void DrawStripes(int y);
153
154void DefineMouseBtns(void);
155void DefineJoyBtns(void);
156void DefineKeyBtns(void);
157void DefineKeyMove(void);
158void EnterCtrlData(int index,CustomCtrls *cust,void (*DrawRtn)(int),void (*PrintRtn)(int),int type);
159
160void DrawMainMenu(void);
161void DrawSoundMenu(void);
162void DrawLoadSaveScreen(int loadsave);
163void DrawNewEpisode(void);
164void DrawNewGame(void);
165void DrawChangeView(int view);
166void DrawMouseSens(void);
167void DrawCtlScreen(void);
168void DrawCustomScreen(void);
169void DrawLSAction(int which);
170void DrawCustMouse(int hilight);
171void DrawCustJoy(int hilight);
172void DrawCustKeybd(int hilight);
173void DrawCustKeys(int hilight);
174void PrintCustMouse(int i);
175void PrintCustJoy(int i);
176void PrintCustKeybd(int i);
177void PrintCustKeys(int i);
178
179void PrintLSEntry(int w,int color);
180void TrackWhichGame(int w);
181void DrawNewGameDiff(int w);
182void FixupCustom(int w);
183
184int CP_NewGame(int);
185int CP_Sound(int);
186int CP_LoadGame(int quick);
187int CP_SaveGame(int quick);
188int CP_Control(int);
189int CP_ChangeView(int);
190int CP_ExitOptions(int);
191int CP_Quit(int);
192int CP_ViewScores(int);
193int CP_EndGame(int);
194int CP_CheckQuick(ScanCode scancode);
195int CustomControls(int);
196int MouseSensitivity(int);
197
198void CheckForEpisodes(void);
199
200void FreeMusic(void);
201
202
203enum {MOUSE,JOYSTICK,KEYBOARDBTNS,KEYBOARDMOVE}; // FOR INPUT TYPES
204
205enum menuitems
206{
207 newgame,
208 soundmenu,
209 control,
210 loadgame,
211 savegame,
212 changeview,
213
214#ifndef GOODTIMES
215#ifndef SPEAR
216 readthis,
217#endif
218#endif
219
220 viewscores,
221 backtodemo,
222 quit
223};
224
225//
226// WL_INTER
227//
228typedef struct {
229 int kill,secret,treasure;
230 int32_t time;
231 } LRstruct;
232
233extern LRstruct LevelRatios[];
234
235void Write (int x,int y,const char *string);
236void NonShareware(void);
237int 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 @@
1#include "version.h"
2
3#ifdef USE_PARALLAX
4
5#include "wl_def.h"
6
7#ifdef USE_FEATUREFLAGS
8
9// The lower left tile of every map determines the start texture of the parallax sky.
10static int GetParallaxStartTexture()
11{
12 int startTex = ffDataBottomLeft;
13 assert(startTex >= 0 && startTex < PMSpriteStart);
14 return startTex;
15}
16
17#else
18
19static int GetParallaxStartTexture()
20{
21 int startTex;
22 switch(gamestate.episode * 10 + mapon)
23 {
24 case 0: startTex = 20; break;
25 default: startTex = 0; break;
26 }
27 assert(startTex >= 0 && startTex < PMSpriteStart);
28 return startTex;
29}
30
31#endif
32
33void DrawParallax(byte *vbuf, unsigned vbufPitch)
34{
35 int startpage = GetParallaxStartTexture();
36 int midangle = player->angle * (FINEANGLES / ANGLES);
37 int skyheight = viewheight >> 1;
38 int curtex = -1;
39 byte *skytex;
40
41 startpage += USE_PARALLAX - 1;
42
43 for(int x = 0; x < viewwidth; x++)
44 {
45 int curang = pixelangle[x] + midangle;
46 if(curang < 0) curang += FINEANGLES;
47 else if(curang >= FINEANGLES) curang -= FINEANGLES;
48 int xtex = curang * USE_PARALLAX * TEXTURESIZE / FINEANGLES;
49 int newtex = xtex >> TEXTURESHIFT;
50 if(newtex != curtex)
51 {
52 curtex = newtex;
53 skytex = PM_GetTexture(startpage - curtex);
54 }
55 int texoffs = TEXTUREMASK - ((xtex & (TEXTURESIZE - 1)) << TEXTURESHIFT);
56 int yend = skyheight - (wallheight[x] >> 3);
57 if(yend <= 0) continue;
58
59 for(int y = 0, offs = x; y < yend; y++, offs += vbufPitch)
60 vbuf[offs] = skytex[texoffs + (y * TEXTURESIZE) / skyheight];
61 }
62}
63
64#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 @@
1// WL_PLAY.C
2
3#include "wl_def.h"
4#pragma hdrstop
5
6#include "wl_cloudsky.h"
7#include "wl_shade.h"
8
9/*
10=============================================================================
11
12 LOCAL CONSTANTS
13
14=============================================================================
15*/
16
17#define sc_Question 0x35
18
19/*
20=============================================================================
21
22 GLOBAL VARIABLES
23
24=============================================================================
25*/
26
27boolean madenoise; // true when shooting or screaming
28
29exit_t playstate;
30
31static musicnames lastmusicchunk = (musicnames) 0;
32
33static int DebugOk;
34
35objtype objlist[MAXACTORS];
36objtype *newobj, *obj, *player, *lastobj, *objfreelist, *killerobj;
37
38boolean noclip, ammocheat;
39int godmode, singlestep, extravbls = 0;
40
41byte tilemap[MAPSIZE][MAPSIZE]; // wall values only
42byte spotvis[MAPSIZE][MAPSIZE];
43objtype *actorat[MAPSIZE][MAPSIZE];
44
45//
46// replacing refresh manager
47//
48unsigned tics;
49
50//
51// control info
52//
53boolean mouseenabled, joystickenabled;
54int dirscan[4] = { sc_UpArrow, sc_RightArrow, sc_DownArrow, sc_LeftArrow };
55
56int buttonscan[NUMBUTTONS] = { sc_Return, sc_Alt, sc_LShift, sc_UpArrow, sc_1, sc_2, sc_3, sc_4,
57 sc_DownArrow, 0, 0, 0, sc_A, sc_D };
58int buttonmouse[4] = { bt_attack, bt_strafe, bt_use, bt_nobutton };
59int buttonjoy[32] = {
60#ifdef _arch_dreamcast
61 bt_attack, bt_strafe, bt_use, bt_run, bt_esc, bt_prevweapon, bt_nobutton, bt_nextweapon,
62 bt_pause, bt_strafeleft, bt_straferight, bt_nobutton, bt_nobutton, bt_nobutton, bt_nobutton, bt_nobutton,
63#else
64 bt_attack, bt_strafe, bt_use, bt_run, bt_strafeleft, bt_straferight, bt_esc, bt_pause,
65 bt_prevweapon, bt_nextweapon, bt_nobutton, bt_nobutton, bt_nobutton, bt_nobutton, bt_nobutton, bt_nobutton,
66#endif
67 bt_nobutton, bt_nobutton, bt_nobutton, bt_nobutton, bt_nobutton, bt_nobutton, bt_nobutton, bt_nobutton,
68 bt_nobutton, bt_nobutton, bt_nobutton, bt_nobutton, bt_nobutton, bt_nobutton, bt_nobutton, bt_nobutton
69};
70
71int viewsize;
72
73boolean buttonheld[NUMBUTTONS];
74
75boolean demorecord, demoplayback;
76int8_t *demoptr, *lastdemoptr;
77memptr demobuffer;
78
79//
80// current user input
81//
82int controlx, controly; // range from -100 to 100 per tic
83boolean buttonstate[NUMBUTTONS];
84
85int lastgamemusicoffset = 0;
86
87
88//===========================================================================
89
90
91void CenterWindow (word w, word h);
92void InitObjList (void);
93void RemoveObj (objtype * gone);
94void PollControls (void);
95int StopMusic (void);
96void StartMusic (void);
97void ContinueMusic (int offs);
98void PlayLoop (void);
99
100/*
101=============================================================================
102
103 LOCAL VARIABLES
104
105=============================================================================
106*/
107
108
109objtype dummyobj;
110
111//
112// LIST OF SONGS FOR EACH VERSION
113//
114int songs[] = {
115#ifndef SPEAR
116 //
117 // Episode One
118 //
119 GETTHEM_MUS,
120 SEARCHN_MUS,
121 POW_MUS,
122 SUSPENSE_MUS,
123 GETTHEM_MUS,
124 SEARCHN_MUS,
125 POW_MUS,
126 SUSPENSE_MUS,
127
128 WARMARCH_MUS, // Boss level
129 CORNER_MUS, // Secret level
130
131 //
132 // Episode Two
133 //
134 NAZI_OMI_MUS,
135 PREGNANT_MUS,
136 GOINGAFT_MUS,
137 HEADACHE_MUS,
138 NAZI_OMI_MUS,
139 PREGNANT_MUS,
140 HEADACHE_MUS,
141 GOINGAFT_MUS,
142
143 WARMARCH_MUS, // Boss level
144 DUNGEON_MUS, // Secret level
145
146 //
147 // Episode Three
148 //
149 INTROCW3_MUS,
150 NAZI_RAP_MUS,
151 TWELFTH_MUS,
152 ZEROHOUR_MUS,
153 INTROCW3_MUS,
154 NAZI_RAP_MUS,
155 TWELFTH_MUS,
156 ZEROHOUR_MUS,
157
158 ULTIMATE_MUS, // Boss level
159 PACMAN_MUS, // Secret level
160
161 //
162 // Episode Four
163 //
164 GETTHEM_MUS,
165 SEARCHN_MUS,
166 POW_MUS,
167 SUSPENSE_MUS,
168 GETTHEM_MUS,
169 SEARCHN_MUS,
170 POW_MUS,
171 SUSPENSE_MUS,
172
173 WARMARCH_MUS, // Boss level
174 CORNER_MUS, // Secret level
175
176 //
177 // Episode Five
178 //
179 NAZI_OMI_MUS,
180 PREGNANT_MUS,
181 GOINGAFT_MUS,
182 HEADACHE_MUS,
183 NAZI_OMI_MUS,
184 PREGNANT_MUS,
185 HEADACHE_MUS,
186 GOINGAFT_MUS,
187
188 WARMARCH_MUS, // Boss level
189 DUNGEON_MUS, // Secret level
190
191 //
192 // Episode Six
193 //
194 INTROCW3_MUS,
195 NAZI_RAP_MUS,
196 TWELFTH_MUS,
197 ZEROHOUR_MUS,
198 INTROCW3_MUS,
199 NAZI_RAP_MUS,
200 TWELFTH_MUS,
201 ZEROHOUR_MUS,
202
203 ULTIMATE_MUS, // Boss level
204 FUNKYOU_MUS // Secret level
205#else
206
207 //////////////////////////////////////////////////////////////
208 //
209 // SPEAR OF DESTINY TRACKS
210 //
211 //////////////////////////////////////////////////////////////
212 XTIPTOE_MUS,
213 XFUNKIE_MUS,
214 XDEATH_MUS,
215 XGETYOU_MUS, // DON'T KNOW
216 ULTIMATE_MUS, // Trans Gr”sse
217
218 DUNGEON_MUS,
219 GOINGAFT_MUS,
220 POW_MUS,
221 TWELFTH_MUS,
222 ULTIMATE_MUS, // Barnacle Wilhelm BOSS
223
224 NAZI_OMI_MUS,
225 GETTHEM_MUS,
226 SUSPENSE_MUS,
227 SEARCHN_MUS,
228 ZEROHOUR_MUS,
229 ULTIMATE_MUS, // Super Mutant BOSS
230
231 XPUTIT_MUS,
232 ULTIMATE_MUS, // Death Knight BOSS
233
234 XJAZNAZI_MUS, // Secret level
235 XFUNKIE_MUS, // Secret level (DON'T KNOW)
236
237 XEVIL_MUS // Angel of Death BOSS
238#endif
239};
240
241
242/*
243=============================================================================
244
245 USER CONTROL
246
247=============================================================================
248*/
249
250/*
251===================
252=
253= PollKeyboardButtons
254=
255===================
256*/
257
258void PollKeyboardButtons (void)
259{
260 int i;
261
262 //LOGF("button state: ");
263 for (i = 0; i < NUMBUTTONS; i++)
264 {
265 if (Keyboard[buttonscan[i]])
266 {
267 buttonstate[i] = true;
268 LOGF("enabling bit %d in buttonstate");
269 }
270 //LOGF("%d ", buttonstate[i]);
271 }
272 //LOGF("\n");
273}
274
275
276/*
277===================
278=
279= PollMouseButtons
280=
281===================
282*/
283
284void PollMouseButtons (void)
285{
286 int buttons = IN_MouseButtons ();
287
288 if (buttons & 1)
289 buttonstate[buttonmouse[0]] = true;
290 if (buttons & 2)
291 buttonstate[buttonmouse[1]] = true;
292 if (buttons & 4)
293 buttonstate[buttonmouse[2]] = true;
294}
295
296
297
298/*
299===================
300=
301= PollJoystickButtons
302=
303===================
304*/
305
306void PollJoystickButtons (void)
307{
308 int buttons = IN_JoyButtons();
309
310 for(int i = 0, val = 1; i < JoyNumButtons; i++, val <<= 1)
311 {
312 if(buttons & val)
313 buttonstate[buttonjoy[i]] = true;
314 }
315}
316
317
318/*
319===================
320=
321= PollKeyboardMove
322=
323===================
324*/
325
326void PollKeyboardMove (void)
327{
328 int delta = buttonstate[bt_run] ? RUNMOVE * tics : BASEMOVE * tics;
329
330 if (Keyboard[dirscan[di_north]])
331 controly -= delta;
332 if (Keyboard[dirscan[di_south]])
333 controly += delta;
334 if (Keyboard[dirscan[di_west]])
335 controlx -= delta;
336 if (Keyboard[dirscan[di_east]])
337 controlx += delta;
338}
339
340
341/*
342===================
343=
344= PollMouseMove
345=
346===================
347*/
348
349void PollMouseMove (void)
350{
351 int mousexmove, mouseymove;
352
353 SDL_GetMouseState(&mousexmove, &mouseymove);
354 if(IN_IsInputGrabbed())
355 IN_CenterMouse();
356
357 mousexmove -= screenWidth / 2;
358 mouseymove -= screenHeight / 2;
359
360 controlx += mousexmove * 10 / (13 - mouseadjustment);
361 controly += mouseymove * 20 / (13 - mouseadjustment);
362}
363
364
365/*
366===================
367=
368= PollJoystickMove
369=
370===================
371*/
372
373void PollJoystickMove (void)
374{
375 int joyx, joyy;
376
377 IN_GetJoyDelta (&joyx, &joyy);
378
379 int delta = buttonstate[bt_run] ? RUNMOVE * tics : BASEMOVE * tics;
380
381 if (joyx > 64 || buttonstate[bt_turnright])
382 controlx += delta;
383 else if (joyx < -64 || buttonstate[bt_turnleft])
384 controlx -= delta;
385 if (joyy > 64 || buttonstate[bt_movebackward])
386 controly += delta;
387 else if (joyy < -64 || buttonstate[bt_moveforward])
388 controly -= delta;
389}
390
391/*
392===================
393=
394= PollControls
395=
396= Gets user or demo input, call once each frame
397=
398= controlx set between -100 and 100 per tic
399= controly
400= buttonheld[] the state of the buttons LAST frame
401= buttonstate[] the state of the buttons THIS frame
402=
403===================
404*/
405
406void PollControls (void)
407{
408 int max, min, i;
409 byte buttonbits;
410
411 IN_ProcessEvents();
412
413//
414// get timing info for last frame
415//
416 if (demoplayback || demorecord) // demo recording and playback needs to be constant
417 {
418 // wait up to DEMOTICS Wolf tics
419 uint32_t curtime = SDL_GetTicks();
420 lasttimecount += DEMOTICS;
421 int32_t timediff = (lasttimecount * 100) / 7 - curtime;
422 if(timediff > 0)
423 SDL_Delay(timediff);
424
425 if(timediff < -2 * DEMOTICS) // more than 2-times DEMOTICS behind?
426 lasttimecount = (curtime * 7) / 100; // yes, set to current timecount
427
428 tics = DEMOTICS;
429 }
430 else
431 CalcTics ();
432
433 controlx = 0;
434 controly = 0;
435 memcpy (buttonheld, buttonstate, sizeof (buttonstate));
436 memset (buttonstate, 0, sizeof (buttonstate));
437
438 if (demoplayback)
439 {
440 //
441 // read commands from demo buffer
442 //
443 buttonbits = *demoptr++;
444 for (i = 0; i < NUMBUTTONS; i++)
445 {
446 buttonstate[i] = buttonbits & 1;
447 buttonbits >>= 1;
448 }
449
450 controlx = *demoptr++;
451 controly = *demoptr++;
452 LOGF("%d %d %d", buttonbits, controlx, controly);
453
454 if (demoptr == lastdemoptr)
455 playstate = ex_completed; // demo is done
456
457 controlx *= (int) tics;
458 controly *= (int) tics;
459
460 return;
461 }
462
463
464//
465// get button states
466//
467 PollKeyboardButtons ();
468
469// if (mouseenabled && IN_IsInputGrabbed())
470// PollMouseButtons ();
471
472 if (joystickenabled)
473 PollJoystickButtons ();
474
475//
476// get movements
477//
478 PollKeyboardMove ();
479
480// if (mouseenabled && IN_IsInputGrabbed())
481// PollMouseMove ();
482
483 if (joystickenabled)
484 PollJoystickMove ();
485
486//
487// bound movement to a maximum
488//
489 max = 100 * tics;
490 min = -max;
491 if (controlx > max)
492 controlx = max;
493 else if (controlx < min)
494 controlx = min;
495
496 if (controly > max)
497 controly = max;
498 else if (controly < min)
499 controly = min;
500
501 if (demorecord)
502 {
503 //
504 // save info out to demo buffer
505 //
506 controlx /= (int) tics;
507 controly /= (int) tics;
508
509 buttonbits = 0;
510
511 // TODO: Support 32-bit buttonbits
512 for (i = NUMBUTTONS - 1; i >= 0; i--)
513 {
514 buttonbits <<= 1;
515 if (buttonstate[i])
516 buttonbits |= 1;
517 }
518
519 *demoptr++ = buttonbits;
520 *demoptr++ = controlx;
521 *demoptr++ = controly;
522
523 if (demoptr >= lastdemoptr - 8)
524 playstate = ex_completed;
525 else
526 {
527 controlx *= (int) tics;
528 controly *= (int) tics;
529 }
530 }
531}
532
533
534
535//==========================================================================
536
537
538
539///////////////////////////////////////////////////////////////////////////
540//
541// CenterWindow() - Generates a window of a given width & height in the
542// middle of the screen
543//
544///////////////////////////////////////////////////////////////////////////
545#define MAXX 320
546#define MAXY 160
547
548void CenterWindow (word w, word h)
549{
550 US_DrawWindow (((MAXX / 8) - w) / 2, ((MAXY / 8) - h) / 2, w, h);
551}
552
553//===========================================================================
554
555
556/*
557=====================
558=
559= CheckKeys
560=
561=====================
562*/
563
564void CheckKeys (void)
565{
566 ScanCode scan;
567
568
569 if (screenfaded || demoplayback) // don't do anything with a faded screen
570 return;
571
572 scan = LastScan;
573
574
575#ifdef SPEAR
576 //
577 // SECRET CHEAT CODE: TAB-G-F10
578 //
579 if (Keyboard[sc_Tab] && Keyboard[sc_G] && Keyboard[sc_F10])
580 {
581 WindowH = 160;
582 if (godmode)
583 {
584 Message ("God mode OFF");
585 SD_PlaySound (NOBONUSSND);
586 }
587 else
588 {
589 Message ("God mode ON");
590 SD_PlaySound (ENDBONUS2SND);
591 }
592
593 IN_Ack ();
594 godmode ^= 1;
595 DrawPlayBorderSides ();
596 IN_ClearKeysDown ();
597 return;
598 }
599#endif
600
601
602 //
603 // SECRET CHEAT CODE: 'MLI'
604 //
605 if (Keyboard[sc_M] && Keyboard[sc_L] && Keyboard[sc_I])
606 {
607 gamestate.health = 100;
608 gamestate.ammo = 99;
609 gamestate.keys = 3;
610 gamestate.score = 0;
611 gamestate.TimeCount += 42000L;
612 GiveWeapon (wp_chaingun);
613 DrawWeapon ();
614 DrawHealth ();
615 DrawKeys ();
616 DrawAmmo ();
617 DrawScore ();
618
619 ClearMemory ();
620 CA_CacheGrChunk (STARTFONT + 1);
621 ClearSplitVWB ();
622
623 Message (STR_CHEATER1 "\n"
624 STR_CHEATER2 "\n\n" STR_CHEATER3 "\n" STR_CHEATER4 "\n" STR_CHEATER5);
625
626 UNCACHEGRCHUNK (STARTFONT + 1);
627 IN_ClearKeysDown ();
628 IN_Ack ();
629
630 if (viewsize < 17)
631 DrawPlayBorder ();
632 }
633
634 //
635 // OPEN UP DEBUG KEYS
636 //
637#ifdef DEBUGKEYS
638 if (Keyboard[sc_BackSpace] && Keyboard[sc_LShift] && Keyboard[sc_Alt] && param_debugmode)
639 {
640 ClearMemory ();
641 CA_CacheGrChunk (STARTFONT + 1);
642 ClearSplitVWB ();
643
644 Message ("Debugging keys are\nnow available!");
645 UNCACHEGRCHUNK (STARTFONT + 1);
646 IN_ClearKeysDown ();
647 IN_Ack ();
648
649 DrawPlayBorderSides ();
650 DebugOk = 1;
651 }
652#endif
653
654 //
655 // TRYING THE KEEN CHEAT CODE!
656 //
657 if (Keyboard[sc_B] && Keyboard[sc_A] && Keyboard[sc_T])
658 {
659 ClearMemory ();
660 CA_CacheGrChunk (STARTFONT + 1);
661 ClearSplitVWB ();
662
663 Message ("Commander Keen is also\n"
664 "available from Apogee, but\n"
665 "then, you already know\n" "that - right, Cheatmeister?!");
666
667 UNCACHEGRCHUNK (STARTFONT + 1);
668 IN_ClearKeysDown ();
669 IN_Ack ();
670
671 if (viewsize < 18)
672 DrawPlayBorder ();
673 }
674
675//
676// pause key weirdness can't be checked as a scan code
677//
678 if(buttonstate[bt_pause]) Paused = true;
679 if(Paused)
680 {
681 int lastoffs = StopMusic();
682 LatchDrawPic (20 - 4, 80 - 2 * 8, PAUSEDPIC);
683 VH_UpdateScreen();
684 IN_Ack ();
685 Paused = false;
686 ContinueMusic(lastoffs);
687 if (MousePresent && IN_IsInputGrabbed())
688 IN_CenterMouse(); // Clear accumulated mouse movement
689 lasttimecount = GetTimeCount();
690 return;
691 }
692
693//
694// F1-F7/ESC to enter control panel
695//
696 if (
697#ifndef DEBCHECK
698 scan == sc_F10 ||
699#endif
700 scan == sc_F9 || scan == sc_F7 || scan == sc_F8) // pop up quit dialog
701 {
702 short oldmapon = gamestate.mapon;
703 short oldepisode = gamestate.episode;
704 ClearMemory ();
705 ClearSplitVWB ();
706 US_ControlPanel (scan);
707
708 DrawPlayBorderSides ();
709
710 SETFONTCOLOR (0, 15);
711 IN_ClearKeysDown ();
712 return;
713 }
714
715 if ((scan >= sc_F1 && scan <= sc_F9) || scan == sc_Escape || buttonstate[bt_esc])
716 {
717 int lastoffs = StopMusic ();
718 ClearMemory ();
719 VW_FadeOut ();
720
721 US_ControlPanel (buttonstate[bt_esc] ? sc_Escape : scan);
722
723 SETFONTCOLOR (0, 15);
724 IN_ClearKeysDown ();
725 VW_FadeOut();
726 if(viewsize != 21)
727 DrawPlayScreen ();
728 if (!startgame && !loadedgame)
729 ContinueMusic (lastoffs);
730 if (loadedgame)
731 playstate = ex_abort;
732 lasttimecount = GetTimeCount();
733 if (MousePresent && IN_IsInputGrabbed())
734 IN_CenterMouse(); // Clear accumulated mouse movement
735 return;
736 }
737
738//
739// TAB-? debug keys
740//
741#ifdef DEBUGKEYS
742 if (Keyboard[sc_Tab] && DebugOk)
743 {
744 CA_CacheGrChunk (STARTFONT);
745 fontnumber = 0;
746 SETFONTCOLOR (0, 15);
747 if (DebugKeys () && viewsize < 20)
748 DrawPlayBorder (); // dont let the blue borders flash
749
750 if (MousePresent && IN_IsInputGrabbed())
751 IN_CenterMouse(); // Clear accumulated mouse movement
752
753 lasttimecount = GetTimeCount();
754 return;
755 }
756#endif
757}
758
759
760//===========================================================================
761
762/*
763#############################################################################
764
765 The objlist data structure
766
767#############################################################################
768
769objlist containt structures for every actor currently playing. The structure
770is accessed as a linked list starting at *player, ending when ob->next ==
771NULL. GetNewObj inserts a new object at the end of the list, meaning that
772if an actor spawn another actor, the new one WILL get to think and react the
773same frame. RemoveObj unlinks the given object and returns it to the free
774list, but does not damage the objects ->next pointer, so if the current object
775removes itself, a linked list following loop can still safely get to the
776next element.
777
778<backwardly linked free list>
779
780#############################################################################
781*/
782
783
784/*
785=========================
786=
787= InitActorList
788=
789= Call to clear out the actor object lists returning them all to the free
790= list. Allocates a special spot for the player.
791=
792=========================
793*/
794
795int objcount;
796
797void InitActorList (void)
798{
799 int i;
800
801//
802// init the actor lists
803//
804 for (i = 0; i < MAXACTORS; i++)
805 {
806 objlist[i].prev = &objlist[i + 1];
807 objlist[i].next = NULL;
808 }
809
810 objlist[MAXACTORS - 1].prev = NULL;
811
812 objfreelist = &objlist[0];
813 lastobj = NULL;
814
815 objcount = 0;
816
817//
818// give the player the first free spots
819//
820 GetNewActor ();
821 player = newobj;
822
823}
824
825//===========================================================================
826
827/*
828=========================
829=
830= GetNewActor
831=
832= Sets the global variable new to point to a free spot in objlist.
833= The free spot is inserted at the end of the liked list
834=
835= When the object list is full, the caller can either have it bomb out ot
836= return a dummy object pointer that will never get used
837=
838=========================
839*/
840
841void GetNewActor (void)
842{
843 if (!objfreelist)
844 Quit ("GetNewActor: No free spots in objlist!");
845
846 newobj = objfreelist;
847 objfreelist = newobj->prev;
848 memset (newobj, 0, sizeof (*newobj));
849
850 if (lastobj)
851 lastobj->next = newobj;
852 newobj->prev = lastobj; // new->next is allready NULL from memset
853
854 newobj->active = ac_no;
855 lastobj = newobj;
856
857 objcount++;
858}
859
860//===========================================================================
861
862/*
863=========================
864=
865= RemoveObj
866=
867= Add the given object back into the free list, and unlink it from it's
868= neighbors
869=
870=========================
871*/
872
873void RemoveObj (objtype * gone)
874{
875 if (gone == player)
876 Quit ("RemoveObj: Tried to remove the player!");
877
878 gone->state = NULL;
879
880//
881// fix the next object's back link
882//
883 if (gone == lastobj)
884 lastobj = (objtype *) gone->prev;
885 else
886 gone->next->prev = gone->prev;
887
888//
889// fix the previous object's forward link
890//
891 gone->prev->next = gone->next;
892
893//
894// add it back in to the free list
895//
896 gone->prev = objfreelist;
897 objfreelist = gone;
898
899 objcount--;
900}
901
902/*
903=============================================================================
904
905 MUSIC STUFF
906
907=============================================================================
908*/
909
910
911/*
912=================
913=
914= StopMusic
915=
916=================
917*/
918int StopMusic (void)
919{
920 int lastoffs = SD_MusicOff ();
921
922 UNCACHEAUDIOCHUNK (STARTMUSIC + lastmusicchunk);
923
924 return lastoffs;
925}
926
927//==========================================================================
928
929
930/*
931=================
932=
933= StartMusic
934=
935=================
936*/
937
938void StartMusic ()
939{
940 SD_MusicOff ();
941 lastmusicchunk = (musicnames) songs[gamestate.mapon + gamestate.episode * 10];
942 SD_StartMusic(STARTMUSIC + lastmusicchunk);
943}
944
945void ContinueMusic (int offs)
946{
947 SD_MusicOff ();
948 lastmusicchunk = (musicnames) songs[gamestate.mapon + gamestate.episode * 10];
949 SD_ContinueMusic(STARTMUSIC + lastmusicchunk, offs);
950}
951
952/*
953=============================================================================
954
955 PALETTE SHIFTING STUFF
956
957=============================================================================
958*/
959
960#define NUMREDSHIFTS 6
961#define REDSTEPS 8
962
963#define NUMWHITESHIFTS 3
964#define WHITESTEPS 20
965#define WHITETICS 6
966
967
968SDL_Color redshifts[NUMREDSHIFTS][256];
969SDL_Color whiteshifts[NUMWHITESHIFTS][256];
970
971int damagecount, bonuscount;
972boolean palshifted;
973
974/*
975=====================
976=
977= InitRedShifts
978=
979=====================
980*/
981
982void InitRedShifts (void)
983{
984 SDL_Color *workptr, *baseptr;
985 int i, j, delta;
986
987
988//
989// fade through intermediate frames
990//
991 for (i = 1; i <= NUMREDSHIFTS; i++)
992 {
993 workptr = redshifts[i - 1];
994 baseptr = gamepal;
995
996 for (j = 0; j <= 255; j++)
997 {
998 delta = 256 - baseptr->r;
999 workptr->r = baseptr->r + delta * i / REDSTEPS;
1000 delta = -baseptr->g;
1001 workptr->g = baseptr->g + delta * i / REDSTEPS;
1002 delta = -baseptr->b;
1003 workptr->b = baseptr->b + delta * i / REDSTEPS;
1004 baseptr++;
1005 workptr++;
1006 }
1007 rb->yield();
1008 }
1009
1010 for (i = 1; i <= NUMWHITESHIFTS; i++)
1011 {
1012 workptr = whiteshifts[i - 1];
1013 baseptr = gamepal;
1014
1015 for (j = 0; j <= 255; j++)
1016 {
1017 delta = 256 - baseptr->r;
1018 workptr->r = baseptr->r + delta * i / WHITESTEPS;
1019 delta = 248 - baseptr->g;
1020 workptr->g = baseptr->g + delta * i / WHITESTEPS;
1021 delta = 0-baseptr->b;
1022 workptr->b = baseptr->b + delta * i / WHITESTEPS;
1023 baseptr++;
1024 workptr++;
1025 }
1026 rb->yield();
1027 }
1028}
1029
1030
1031/*
1032=====================
1033=
1034= ClearPaletteShifts
1035=
1036=====================
1037*/
1038
1039void ClearPaletteShifts (void)
1040{
1041 bonuscount = damagecount = 0;
1042 palshifted = false;
1043}
1044
1045
1046/*
1047=====================
1048=
1049= StartBonusFlash
1050=
1051=====================
1052*/
1053
1054void StartBonusFlash (void)
1055{
1056 bonuscount = NUMWHITESHIFTS * WHITETICS; // white shift palette
1057}
1058
1059
1060/*
1061=====================
1062=
1063= StartDamageFlash
1064=
1065=====================
1066*/
1067
1068void StartDamageFlash (int damage)
1069{
1070 damagecount += damage;
1071}
1072
1073
1074/*
1075=====================
1076=
1077= UpdatePaletteShifts
1078=
1079=====================
1080*/
1081
1082void UpdatePaletteShifts (void)
1083{
1084 int red, white;
1085
1086 if (bonuscount)
1087 {
1088 white = bonuscount / WHITETICS + 1;
1089 if (white > NUMWHITESHIFTS)
1090 white = NUMWHITESHIFTS;
1091 bonuscount -= tics;
1092 if (bonuscount < 0)
1093 bonuscount = 0;
1094 }
1095 else
1096 white = 0;
1097
1098
1099 if (damagecount)
1100 {
1101 red = damagecount / 10 + 1;
1102 if (red > NUMREDSHIFTS)
1103 red = NUMREDSHIFTS;
1104
1105 damagecount -= tics;
1106 if (damagecount < 0)
1107 damagecount = 0;
1108 }
1109 else
1110 red = 0;
1111
1112 if (red)
1113 {
1114 VL_SetPalette (redshifts[red - 1], false);
1115 palshifted = true;
1116 }
1117 else if (white)
1118 {
1119 VL_SetPalette (whiteshifts[white - 1], false);
1120 palshifted = true;
1121 }
1122 else if (palshifted)
1123 {
1124 VL_SetPalette (gamepal, false); // back to normal
1125 palshifted = false;
1126 }
1127}
1128
1129
1130/*
1131=====================
1132=
1133= FinishPaletteShifts
1134=
1135= Resets palette to normal if needed
1136=
1137=====================
1138*/
1139
1140void FinishPaletteShifts (void)
1141{
1142 if (palshifted)
1143 {
1144 palshifted = 0;
1145 VL_SetPalette (gamepal, true);
1146 }
1147}
1148
1149
1150/*
1151=============================================================================
1152
1153 CORE PLAYLOOP
1154
1155=============================================================================
1156*/
1157
1158
1159/*
1160=====================
1161=
1162= DoActor
1163=
1164=====================
1165*/
1166
1167void DoActor (objtype * ob)
1168{
1169 void (*think) (objtype *);
1170
1171 if (!ob->active && !areabyplayer[ob->areanumber])
1172 return;
1173
1174 if (!(ob->flags & (FL_NONMARK | FL_NEVERMARK)))
1175 actorat[ob->tilex][ob->tiley] = NULL;
1176
1177//
1178// non transitional object
1179//
1180
1181 if (!ob->ticcount)
1182 {
1183 think = (void (*)(objtype *)) ob->state->think;
1184 if (think)
1185 {
1186 think (ob);
1187 if (!ob->state)
1188 {
1189 RemoveObj (ob);
1190 return;
1191 }
1192 }
1193
1194 if (ob->flags & FL_NEVERMARK)
1195 return;
1196
1197 if ((ob->flags & FL_NONMARK) && actorat[ob->tilex][ob->tiley])
1198 return;
1199
1200 actorat[ob->tilex][ob->tiley] = ob;
1201 return;
1202 }
1203
1204//
1205// transitional object
1206//
1207 ob->ticcount -= (short) tics;
1208 while (ob->ticcount <= 0)
1209 {
1210 think = (void (*)(objtype *)) ob->state->action; // end of state action
1211 if (think)
1212 {
1213 think (ob);
1214 if (!ob->state)
1215 {
1216 RemoveObj (ob);
1217 return;
1218 }
1219 }
1220
1221 ob->state = ob->state->next;
1222
1223 if (!ob->state)
1224 {
1225 RemoveObj (ob);
1226 return;
1227 }
1228
1229 if (!ob->state->tictime)
1230 {
1231 ob->ticcount = 0;
1232 goto think;
1233 }
1234
1235 ob->ticcount += ob->state->tictime;
1236 }
1237
1238think:
1239 //
1240 // think
1241 //
1242 think = (void (*)(objtype *)) ob->state->think;
1243 if (think)
1244 {
1245 think (ob);
1246 if (!ob->state)
1247 {
1248 RemoveObj (ob);
1249 return;
1250 }
1251 }
1252
1253 if (ob->flags & FL_NEVERMARK)
1254 return;
1255
1256 if ((ob->flags & FL_NONMARK) && actorat[ob->tilex][ob->tiley])
1257 return;
1258
1259 actorat[ob->tilex][ob->tiley] = ob;
1260}
1261
1262//==========================================================================
1263
1264
1265/*
1266===================
1267=
1268= PlayLoop
1269=
1270===================
1271*/
1272int32_t funnyticount;
1273
1274
1275void PlayLoop (void)
1276{
1277#if defined(USE_FEATUREFLAGS) && defined(USE_CLOUDSKY)
1278 if(GetFeatureFlags() & FF_CLOUDSKY)
1279 InitSky();
1280#endif
1281
1282#ifdef USE_SHADING
1283 InitLevelShadeTable();
1284#endif
1285
1286 playstate = ex_stillplaying;
1287 lasttimecount = GetTimeCount();
1288 frameon = 0;
1289 anglefrac = 0;
1290 facecount = 0;
1291 funnyticount = 0;
1292 memset (buttonstate, 0, sizeof (buttonstate));
1293 ClearPaletteShifts ();
1294
1295 if (MousePresent && IN_IsInputGrabbed())
1296 IN_CenterMouse(); // Clear accumulated mouse movement
1297
1298 if (demoplayback)
1299 IN_StartAck ();
1300
1301 do
1302 {
1303 PollControls ();
1304
1305//
1306// actor thinking
1307//
1308 madenoise = false;
1309
1310 MoveDoors ();
1311 MovePWalls ();
1312
1313 for (obj = player; obj; obj = obj->next)
1314 DoActor (obj);
1315
1316 UpdatePaletteShifts ();
1317
1318 ThreeDRefresh ();
1319
1320 //
1321 // MAKE FUNNY FACE IF BJ DOESN'T MOVE FOR AWHILE
1322 //
1323#ifdef SPEAR
1324 funnyticount += tics;
1325 if (funnyticount > 30l * 70)
1326 {
1327 funnyticount = 0;
1328 if(viewsize != 21)
1329 StatusDrawFace(BJWAITING1PIC + (US_RndT () & 1));
1330 facecount = 0;
1331 }
1332#endif
1333
1334 gamestate.TimeCount += tics;
1335
1336 UpdateSoundLoc (); // JAB
1337 if (screenfaded)
1338 VW_FadeIn ();
1339
1340 CheckKeys ();
1341
1342//
1343// debug aids
1344//
1345 if (singlestep)
1346 {
1347 VW_WaitVBL (singlestep);
1348 lasttimecount = GetTimeCount();
1349 }
1350 if (extravbls)
1351 VW_WaitVBL (extravbls);
1352
1353 if (demoplayback)
1354 {
1355 if (IN_CheckAck ())
1356 {
1357 IN_ClearKeysDown ();
1358 playstate = ex_abort;
1359 }
1360 }
1361 }
1362 while (!playstate && !startgame);
1363
1364 if (playstate != ex_died)
1365 FinishPaletteShifts ();
1366}
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 @@
1#include "version.h"
2
3#ifdef USE_SHADING
4#include "wl_def.h"
5#include "wl_shade.h"
6
7typedef struct {
8 uint8_t destRed, destGreen, destBlue; // values between 0 and 255
9 uint8_t fogStrength;
10} shadedef_t;
11
12shadedef_t shadeDefs[] = {
13 { 0, 0, 0, LSHADE_NOSHADING },
14 { 0, 0, 0, LSHADE_NORMAL },
15 { 0, 0, 0, LSHADE_FOG },
16 { 40, 40, 40, LSHADE_NORMAL },
17 { 60, 60, 60, LSHADE_FOG }
18};
19
20uint8_t shadetable[SHADE_COUNT][256];
21int LSHADE_flag;
22
23#ifdef USE_FEATUREFLAGS
24
25// The lower 8-bit of the upper left tile of every map determine
26// the used shading definition of shadeDefs.
27static int GetShadeDefID()
28{
29 int shadeID = ffDataTopLeft & 0x00ff;
30 assert(shadeID >= 0 && shadeID < lengthof(shadeDefs));
31 return shadeID;
32}
33
34#else
35
36static int GetShadeDefID()
37{
38 int shadeID;
39 switch(gamestate.episode * 10 + mapon)
40 {
41 case 0: shadeID = 4; break;
42 case 1:
43 case 2:
44 case 6: shadeID = 1; break;
45 case 3: shadeID = 0; break;
46 case 5: shadeID = 2; break;
47 default: shadeID = 3; break;
48 }
49 assert(shadeID >= 0 && shadeID < lengthof(shadeDefs));
50 return shadeID;
51}
52
53#endif
54
55
56// Returns the palette index of the nearest matching color of the
57// given RGB color in given palette
58byte GetColor(byte red, byte green, byte blue, SDL_Color *palette)
59{
60 byte mincol = 0;
61 double mindist = 200000.F, curdist, DRed, DGreen, DBlue;
62
63 SDL_Color *palPtr = palette;
64
65 for(int col = 0; col < 256; col++, palPtr++)
66 {
67 DRed = (double) (red - palPtr->r);
68 DGreen = (double) (green - palPtr->g);
69 DBlue = (double) (blue - palPtr->b);
70 curdist = DRed * DRed + DGreen * DGreen + DBlue * DBlue;
71 if(curdist < mindist)
72 {
73 mindist = curdist;
74 mincol = (byte) col;
75 }
76 }
77 return mincol;
78}
79
80// Fade all colors in 32 steps down to the destination-RGB
81// (use gray for fogging, black for standard shading)
82void GenerateShadeTable(byte destRed, byte destGreen, byte destBlue,
83 SDL_Color *palette, int fog)
84{
85 double curRed, curGreen, curBlue, redStep, greenStep, blueStep;
86 SDL_Color *palPtr = palette;
87
88 // Set the fog-flag
89 LSHADE_flag=fog;
90
91 // Color loop
92 for(int i = 0; i < 256; i++, palPtr++)
93 {
94 // Get original palette color
95 curRed = palPtr->r;
96 curGreen = palPtr->g;
97 curBlue = palPtr->b;
98
99 // Calculate increment per step
100 redStep = ((double) destRed - curRed) / (SHADE_COUNT + 8);
101 greenStep = ((double) destGreen - curGreen) / (SHADE_COUNT + 8);
102 blueStep = ((double) destBlue - curBlue) / (SHADE_COUNT + 8);
103
104 // Calc color for each shade of the current color
105 for (int shade = 0; shade < SHADE_COUNT; shade++)
106 {
107 shadetable[shade][i] = GetColor((byte) curRed, (byte) curGreen, (byte) curBlue, palette);
108
109 // Inc to next shade
110 curRed += redStep;
111 curGreen += greenStep;
112 curBlue += blueStep;
113 }
114 }
115}
116
117void NoShading()
118{
119 for(int shade = 0; shade < SHADE_COUNT; shade++)
120 for(int i = 0; i < 256; i++)
121 shadetable[shade][i] = i;
122}
123
124void InitLevelShadeTable()
125{
126 shadedef_t *shadeDef = &shadeDefs[GetShadeDefID()];
127 if(shadeDef->fogStrength == LSHADE_NOSHADING)
128 NoShading();
129 else
130 GenerateShadeTable(shadeDef->destRed, shadeDef->destGreen, shadeDef->destBlue, gamepal, shadeDef->fogStrength);
131}
132
133int GetShade(int scale)
134{
135 int shade = (scale >> 1) / (((viewwidth * 3) >> 8) + 1 + LSHADE_flag); // TODO: reconsider this...
136 if(shade > 32) shade = 32;
137 else if(shade < 1) shade = 1;
138 shade = 32 - shade;
139
140 return shade;
141}
142
143#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 @@
1#if defined(USE_SHADING) && !defined(_WL_SHADE_H_)
2#define _WL_SHADE_H_
3
4#define SHADE_COUNT 32
5
6#define LSHADE_NOSHADING 0xff
7#define LSHADE_NORMAL 0
8#define LSHADE_FOG 5
9
10extern uint8_t shadetable[SHADE_COUNT][256];
11
12void InitLevelShadeTable();
13int GetShade(int scale);
14
15#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 @@
1// WL_STATE.C
2
3#include "wl_def.h"
4#pragma hdrstop
5
6/*
7=============================================================================
8
9 LOCAL CONSTANTS
10
11=============================================================================
12*/
13
14
15/*
16=============================================================================
17
18 GLOBAL VARIABLES
19
20=============================================================================
21*/
22
23
24static const dirtype opposite[9] =
25 {west,southwest,south,southeast,east,northeast,north,northwest,nodir};
26
27static const dirtype diagonal[9][9] =
28{
29 /* east */ {nodir,nodir,northeast,nodir,nodir,nodir,southeast,nodir,nodir},
30 {nodir,nodir,nodir,nodir,nodir,nodir,nodir,nodir,nodir},
31 /* north */ {northeast,nodir,nodir,nodir,northwest,nodir,nodir,nodir,nodir},
32 {nodir,nodir,nodir,nodir,nodir,nodir,nodir,nodir,nodir},
33 /* west */ {nodir,nodir,northwest,nodir,nodir,nodir,southwest,nodir,nodir},
34 {nodir,nodir,nodir,nodir,nodir,nodir,nodir,nodir,nodir},
35 /* south */ {southeast,nodir,nodir,nodir,southwest,nodir,nodir,nodir,nodir},
36 {nodir,nodir,nodir,nodir,nodir,nodir,nodir,nodir,nodir},
37 {nodir,nodir,nodir,nodir,nodir,nodir,nodir,nodir,nodir}
38};
39
40
41
42void SpawnNewObj (unsigned tilex, unsigned tiley, statetype *state);
43void NewState (objtype *ob, statetype *state);
44
45boolean TryWalk (objtype *ob);
46void MoveObj (objtype *ob, int32_t move);
47
48void KillActor (objtype *ob);
49void DamageActor (objtype *ob, unsigned damage);
50
51boolean CheckLine (objtype *ob);
52void FirstSighting (objtype *ob);
53boolean CheckSight (objtype *ob);
54
55/*
56=============================================================================
57
58 LOCAL VARIABLES
59
60=============================================================================
61*/
62
63
64
65//===========================================================================
66
67
68/*
69===================
70=
71= SpawnNewObj
72=
73= Spaws a new actor at the given TILE coordinates, with the given state, and
74= the given size in GLOBAL units.
75=
76= newobj = a pointer to an initialized new actor
77=
78===================
79*/
80
81void SpawnNewObj (unsigned tilex, unsigned tiley, statetype *state)
82{
83 GetNewActor ();
84 newobj->state = state;
85 if (state->tictime)
86 newobj->ticcount = DEMOCHOOSE_ORIG_SDL(
87 US_RndT () % state->tictime,
88 US_RndT () % state->tictime + 1); // Chris' moonwalk bugfix ;D
89 else
90 newobj->ticcount = 0;
91
92 newobj->tilex = (short) tilex;
93 newobj->tiley = (short) tiley;
94 newobj->x = ((int32_t)tilex<<TILESHIFT)+TILEGLOBAL/2;
95 newobj->y = ((int32_t)tiley<<TILESHIFT)+TILEGLOBAL/2;
96 newobj->dir = nodir;
97
98 actorat[tilex][tiley] = newobj;
99 newobj->areanumber =
100 *(mapsegs[0] + (newobj->tiley<<mapshift)+newobj->tilex) - AREATILE;
101}
102
103
104
105/*
106===================
107=
108= NewState
109=
110= Changes ob to a new state, setting ticcount to the max for that state
111=
112===================
113*/
114
115void NewState (objtype *ob, statetype *state)
116{
117 ob->state = state;
118 ob->ticcount = state->tictime;
119}
120
121
122
123/*
124=============================================================================
125
126 ENEMY TILE WORLD MOVEMENT CODE
127
128=============================================================================
129*/
130
131
132/*
133==================================
134=
135= TryWalk
136=
137= Attempts to move ob in its current (ob->dir) direction.
138=
139= If blocked by either a wall or an actor returns FALSE
140=
141= If move is either clear or blocked only by a door, returns TRUE and sets
142=
143= ob->tilex = new destination
144= ob->tiley
145= ob->areanumber = the floor tile number (0-(NUMAREAS-1)) of destination
146= ob->distance = TILEGLOBAl, or -doornumber if a door is blocking the way
147=
148= If a door is in the way, an OpenDoor call is made to start it opening.
149= The actor code should wait until
150= doorobjlist[-ob->distance].action = dr_open, meaning the door has been
151= fully opened
152=
153==================================
154*/
155
156#define CHECKDIAG(x,y) \
157{ \
158 temp=(uintptr_t)actorat[x][y]; \
159 if (temp) \
160 { \
161 if (temp<256) \
162 return false; \
163 if (((objtype *)temp)->flags&FL_SHOOTABLE) \
164 return false; \
165 } \
166}
167
168#ifdef PLAYDEMOLIKEORIGINAL
169 #define DOORCHECK \
170 if(DEMOCOND_ORIG) \
171 doornum = temp&63; \
172 else \
173 { \
174 doornum = (int) temp & 127; \
175 OpenDoor(doornum); \
176 ob->distance = -doornum - 1; \
177 return true; \
178 }
179#else
180 #define DOORCHECK \
181 doornum = (int) temp & 127; \
182 OpenDoor(doornum); \
183 ob->distance = -doornum - 1; \
184 return true;
185#endif
186
187#define CHECKSIDE(x,y) \
188{ \
189 temp=(uintptr_t)actorat[x][y]; \
190 if (temp) \
191 { \
192 if (temp<128) \
193 return false; \
194 if (temp<256) \
195 { \
196 DOORCHECK \
197 } \
198 else if (((objtype *)temp)->flags&FL_SHOOTABLE) \
199 return false; \
200 } \
201}
202
203
204boolean TryWalk (objtype *ob)
205{
206 int doornum = -1;
207 uintptr_t temp;
208
209 if (ob->obclass == inertobj)
210 {
211 switch (ob->dir)
212 {
213 case north:
214 ob->tiley--;
215 break;
216
217 case northeast:
218 ob->tilex++;
219 ob->tiley--;
220 break;
221
222 case east:
223 ob->tilex++;
224 break;
225
226 case southeast:
227 ob->tilex++;
228 ob->tiley++;
229 break;
230
231 case south:
232 ob->tiley++;
233 break;
234
235 case southwest:
236 ob->tilex--;
237 ob->tiley++;
238 break;
239
240 case west:
241 ob->tilex--;
242 break;
243
244 case northwest:
245 ob->tilex--;
246 ob->tiley--;
247 break;
248 }
249 }
250 else
251 {
252 switch (ob->dir)
253 {
254 case north:
255 if (ob->obclass == dogobj || ob->obclass == fakeobj
256 || ob->obclass == ghostobj || ob->obclass == spectreobj)
257 {
258 CHECKDIAG(ob->tilex,ob->tiley-1);
259 }
260 else
261 {
262 CHECKSIDE(ob->tilex,ob->tiley-1);
263 }
264 ob->tiley--;
265 break;
266
267 case northeast:
268 CHECKDIAG(ob->tilex+1,ob->tiley-1);
269 CHECKDIAG(ob->tilex+1,ob->tiley);
270 CHECKDIAG(ob->tilex,ob->tiley-1);
271 ob->tilex++;
272 ob->tiley--;
273 break;
274
275 case east:
276 if (ob->obclass == dogobj || ob->obclass == fakeobj
277 || ob->obclass == ghostobj || ob->obclass == spectreobj)
278 {
279 CHECKDIAG(ob->tilex+1,ob->tiley);
280 }
281 else
282 {
283 CHECKSIDE(ob->tilex+1,ob->tiley);
284 }
285 ob->tilex++;
286 break;
287
288 case southeast:
289 CHECKDIAG(ob->tilex+1,ob->tiley+1);
290 CHECKDIAG(ob->tilex+1,ob->tiley);
291 CHECKDIAG(ob->tilex,ob->tiley+1);
292 ob->tilex++;
293 ob->tiley++;
294 break;
295
296 case south:
297 if (ob->obclass == dogobj || ob->obclass == fakeobj
298 || ob->obclass == ghostobj || ob->obclass == spectreobj)
299 {
300 CHECKDIAG(ob->tilex,ob->tiley+1);
301 }
302 else
303 {
304 CHECKSIDE(ob->tilex,ob->tiley+1);
305 }
306 ob->tiley++;
307 break;
308
309 case southwest:
310 CHECKDIAG(ob->tilex-1,ob->tiley+1);
311 CHECKDIAG(ob->tilex-1,ob->tiley);
312 CHECKDIAG(ob->tilex,ob->tiley+1);
313 ob->tilex--;
314 ob->tiley++;
315 break;
316
317 case west:
318 if (ob->obclass == dogobj || ob->obclass == fakeobj
319 || ob->obclass == ghostobj || ob->obclass == spectreobj)
320 {
321 CHECKDIAG(ob->tilex-1,ob->tiley);
322 }
323 else
324 {
325 CHECKSIDE(ob->tilex-1,ob->tiley);
326 }
327 ob->tilex--;
328 break;
329
330 case northwest:
331 CHECKDIAG(ob->tilex-1,ob->tiley-1);
332 CHECKDIAG(ob->tilex-1,ob->tiley);
333 CHECKDIAG(ob->tilex,ob->tiley-1);
334 ob->tilex--;
335 ob->tiley--;
336 break;
337
338 case nodir:
339 return false;
340
341 default:
342 Quit ("Walk: Bad dir");
343 }
344 }
345
346#ifdef PLAYDEMOLIKEORIGINAL
347 if (DEMOCOND_ORIG && doornum != -1)
348 {
349 OpenDoor(doornum);
350 ob->distance = -doornum-1;
351 return true;
352 }
353#endif
354
355 ob->areanumber =
356 *(mapsegs[0] + (ob->tiley<<mapshift)+ob->tilex) - AREATILE;
357
358 ob->distance = TILEGLOBAL;
359 return true;
360}
361
362
363/*
364==================================
365=
366= SelectDodgeDir
367=
368= Attempts to choose and initiate a movement for ob that sends it towards
369= the player while dodging
370=
371= If there is no possible move (ob is totally surrounded)
372=
373= ob->dir = nodir
374=
375= Otherwise
376=
377= ob->dir = new direction to follow
378= ob->distance = TILEGLOBAL or -doornumber
379= ob->tilex = new destination
380= ob->tiley
381= ob->areanumber = the floor tile number (0-(NUMAREAS-1)) of destination
382=
383==================================
384*/
385
386void SelectDodgeDir (objtype *ob)
387{
388 int deltax,deltay,i;
389 unsigned absdx,absdy;
390 dirtype dirtry[5];
391 dirtype turnaround,tdir;
392
393 if (ob->flags & FL_FIRSTATTACK)
394 {
395 //
396 // turning around is only ok the very first time after noticing the
397 // player
398 //
399 turnaround = nodir;
400 ob->flags &= ~FL_FIRSTATTACK;
401 }
402 else
403 turnaround=opposite[ob->dir];
404
405 deltax = player->tilex - ob->tilex;
406 deltay = player->tiley - ob->tiley;
407
408 //
409 // arange 5 direction choices in order of preference
410 // the four cardinal directions plus the diagonal straight towards
411 // the player
412 //
413
414 if (deltax>0)
415 {
416 dirtry[1]= east;
417 dirtry[3]= west;
418 }
419 else
420 {
421 dirtry[1]= west;
422 dirtry[3]= east;
423 }
424
425 if (deltay>0)
426 {
427 dirtry[2]= south;
428 dirtry[4]= north;
429 }
430 else
431 {
432 dirtry[2]= north;
433 dirtry[4]= south;
434 }
435
436 //
437 // randomize a bit for dodging
438 //
439 absdx = abs(deltax);
440 absdy = abs(deltay);
441
442 if (absdx > absdy)
443 {
444 tdir = dirtry[1];
445 dirtry[1] = dirtry[2];
446 dirtry[2] = tdir;
447 tdir = dirtry[3];
448 dirtry[3] = dirtry[4];
449 dirtry[4] = tdir;
450 }
451
452 if (US_RndT() < 128)
453 {
454 tdir = dirtry[1];
455 dirtry[1] = dirtry[2];
456 dirtry[2] = tdir;
457 tdir = dirtry[3];
458 dirtry[3] = dirtry[4];
459 dirtry[4] = tdir;
460 }
461
462 dirtry[0] = diagonal [ dirtry[1] ] [ dirtry[2] ];
463
464 //
465 // try the directions util one works
466 //
467 for (i=0;i<5;i++)
468 {
469 if ( dirtry[i] == nodir || dirtry[i] == turnaround)
470 continue;
471
472 ob->dir = dirtry[i];
473 if (TryWalk(ob))
474 return;
475 }
476
477 //
478 // turn around only as a last resort
479 //
480 if (turnaround != nodir)
481 {
482 ob->dir = turnaround;
483
484 if (TryWalk(ob))
485 return;
486 }
487
488 ob->dir = nodir;
489}
490
491
492/*
493============================
494=
495= SelectChaseDir
496=
497= As SelectDodgeDir, but doesn't try to dodge
498=
499============================
500*/
501
502void SelectChaseDir (objtype *ob)
503{
504 int deltax,deltay;
505 dirtype d[3];
506 dirtype tdir, olddir, turnaround;
507
508
509 olddir=ob->dir;
510 turnaround=opposite[olddir];
511
512 deltax=player->tilex - ob->tilex;
513 deltay=player->tiley - ob->tiley;
514
515 d[1]=nodir;
516 d[2]=nodir;
517
518 if (deltax>0)
519 d[1]= east;
520 else if (deltax<0)
521 d[1]= west;
522 if (deltay>0)
523 d[2]=south;
524 else if (deltay<0)
525 d[2]=north;
526
527 if (abs(deltay)>abs(deltax))
528 {
529 tdir=d[1];
530 d[1]=d[2];
531 d[2]=tdir;
532 }
533
534 if (d[1]==turnaround)
535 d[1]=nodir;
536 if (d[2]==turnaround)
537 d[2]=nodir;
538
539
540 if (d[1]!=nodir)
541 {
542 ob->dir=d[1];
543 if (TryWalk(ob))
544 return; /*either moved forward or attacked*/
545 }
546
547 if (d[2]!=nodir)
548 {
549 ob->dir=d[2];
550 if (TryWalk(ob))
551 return;
552 }
553
554 /* there is no direct path to the player, so pick another direction */
555
556 if (olddir!=nodir)
557 {
558 ob->dir=olddir;
559 if (TryWalk(ob))
560 return;
561 }
562
563 if (US_RndT()>128) /*randomly determine direction of search*/
564 {
565 for (tdir=north; tdir<=west; tdir=(dirtype)(tdir+1))
566 {
567 if (tdir!=turnaround)
568 {
569 ob->dir=tdir;
570 if ( TryWalk(ob) )
571 return;
572 }
573 }
574 }
575 else
576 {
577 for (tdir=west; tdir>=north; tdir=(dirtype)(tdir-1))
578 {
579 if (tdir!=turnaround)
580 {
581 ob->dir=tdir;
582 if ( TryWalk(ob) )
583 return;
584 }
585 }
586 }
587
588 if (turnaround != nodir)
589 {
590 ob->dir=turnaround;
591 if (ob->dir != nodir)
592 {
593 if ( TryWalk(ob) )
594 return;
595 }
596 }
597
598 ob->dir = nodir; // can't move
599}
600
601
602/*
603============================
604=
605= SelectRunDir
606=
607= Run Away from player
608=
609============================
610*/
611
612void SelectRunDir (objtype *ob)
613{
614 int deltax,deltay;
615 dirtype d[3];
616 dirtype tdir;
617
618
619 deltax=player->tilex - ob->tilex;
620 deltay=player->tiley - ob->tiley;
621
622 if (deltax<0)
623 d[1]= east;
624 else
625 d[1]= west;
626 if (deltay<0)
627 d[2]=south;
628 else
629 d[2]=north;
630
631 if (abs(deltay)>abs(deltax))
632 {
633 tdir=d[1];
634 d[1]=d[2];
635 d[2]=tdir;
636 }
637
638 ob->dir=d[1];
639 if (TryWalk(ob))
640 return; /*either moved forward or attacked*/
641
642 ob->dir=d[2];
643 if (TryWalk(ob))
644 return;
645
646 /* there is no direct path to the player, so pick another direction */
647
648 if (US_RndT()>128) /*randomly determine direction of search*/
649 {
650 for (tdir=north; tdir<=west; tdir=(dirtype)(tdir+1))
651 {
652 ob->dir=tdir;
653 if ( TryWalk(ob) )
654 return;
655 }
656 }
657 else
658 {
659 for (tdir=west; tdir>=north; tdir=(dirtype)(tdir-1))
660 {
661 ob->dir=tdir;
662 if ( TryWalk(ob) )
663 return;
664 }
665 }
666
667 ob->dir = nodir; // can't move
668}
669
670
671/*
672=================
673=
674= MoveObj
675=
676= Moves ob be move global units in ob->dir direction
677= Actors are not allowed to move inside the player
678= Does NOT check to see if the move is tile map valid
679=
680= ob->x = adjusted for new position
681= ob->y
682=
683=================
684*/
685
686void MoveObj (objtype *ob, int32_t move)
687{
688 int32_t deltax,deltay;
689
690 switch (ob->dir)
691 {
692 case north:
693 ob->y -= move;
694 break;
695 case northeast:
696 ob->x += move;
697 ob->y -= move;
698 break;
699 case east:
700 ob->x += move;
701 break;
702 case southeast:
703 ob->x += move;
704 ob->y += move;
705 break;
706 case south:
707 ob->y += move;
708 break;
709 case southwest:
710 ob->x -= move;
711 ob->y += move;
712 break;
713 case west:
714 ob->x -= move;
715 break;
716 case northwest:
717 ob->x -= move;
718 ob->y -= move;
719 break;
720
721 case nodir:
722 return;
723
724 default:
725 Quit ("MoveObj: bad dir!");
726 }
727
728 //
729 // check to make sure it's not on top of player
730 //
731 if (areabyplayer[ob->areanumber])
732 {
733 deltax = ob->x - player->x;
734 if (deltax < -MINACTORDIST || deltax > MINACTORDIST)
735 goto moveok;
736 deltay = ob->y - player->y;
737 if (deltay < -MINACTORDIST || deltay > MINACTORDIST)
738 goto moveok;
739
740 if (ob->hidden) // move closer until he meets CheckLine
741 goto moveok;
742
743 if (ob->obclass == ghostobj || ob->obclass == spectreobj)
744 TakeDamage (tics*2,ob);
745
746 //
747 // back up
748 //
749 switch (ob->dir)
750 {
751 case north:
752 ob->y += move;
753 break;
754 case northeast:
755 ob->x -= move;
756 ob->y += move;
757 break;
758 case east:
759 ob->x -= move;
760 break;
761 case southeast:
762 ob->x -= move;
763 ob->y -= move;
764 break;
765 case south:
766 ob->y -= move;
767 break;
768 case southwest:
769 ob->x += move;
770 ob->y -= move;
771 break;
772 case west:
773 ob->x += move;
774 break;
775 case northwest:
776 ob->x += move;
777 ob->y += move;
778 break;
779
780 case nodir:
781 return;
782 }
783 return;
784 }
785moveok:
786 ob->distance -=move;
787}
788
789/*
790=============================================================================
791
792 STUFF
793
794=============================================================================
795*/
796
797/*
798===============
799=
800= DropItem
801=
802= Tries to drop a bonus item somewhere in the tiles surrounding the
803= given tilex/tiley
804=
805===============
806*/
807
808void DropItem (wl_stat_t itemtype, int tilex, int tiley)
809{
810 int x,y,xl,xh,yl,yh;
811
812 //
813 // find a free spot to put it in
814 //
815 if (!actorat[tilex][tiley])
816 {
817 PlaceItemType (itemtype, tilex,tiley);
818 return;
819 }
820
821 xl = tilex-1;
822 xh = tilex+1;
823 yl = tiley-1;
824 yh = tiley+1;
825
826 for (x=xl ; x<= xh ; x++)
827 {
828 for (y=yl ; y<= yh ; y++)
829 {
830 if (!actorat[x][y])
831 {
832 PlaceItemType (itemtype, x,y);
833 return;
834 }
835 }
836 }
837}
838
839
840
841/*
842===============
843=
844= KillActor
845=
846===============
847*/
848
849void KillActor (objtype *ob)
850{
851 int tilex,tiley;
852
853 tilex = ob->tilex = (word)(ob->x >> TILESHIFT); // drop item on center
854 tiley = ob->tiley = (word)(ob->y >> TILESHIFT);
855
856 switch (ob->obclass)
857 {
858 case guardobj:
859 GivePoints (100);
860 NewState (ob,&s_grddie1);
861 PlaceItemType (bo_clip2,tilex,tiley);
862 break;
863
864 case officerobj:
865 GivePoints (400);
866 NewState (ob,&s_ofcdie1);
867 PlaceItemType (bo_clip2,tilex,tiley);
868 break;
869
870 case mutantobj:
871 GivePoints (700);
872 NewState (ob,&s_mutdie1);
873 PlaceItemType (bo_clip2,tilex,tiley);
874 break;
875
876 case ssobj:
877 GivePoints (500);
878 NewState (ob,&s_ssdie1);
879 if (gamestate.bestweapon < wp_machinegun)
880 PlaceItemType (bo_machinegun,tilex,tiley);
881 else
882 PlaceItemType (bo_clip2,tilex,tiley);
883 break;
884
885 case dogobj:
886 GivePoints (200);
887 NewState (ob,&s_dogdie1);
888 break;
889
890#ifndef SPEAR
891 case bossobj:
892 GivePoints (5000);
893 NewState (ob,&s_bossdie1);
894 PlaceItemType (bo_key1,tilex,tiley);
895 break;
896
897 case gretelobj:
898 GivePoints (5000);
899 NewState (ob,&s_greteldie1);
900 PlaceItemType (bo_key1,tilex,tiley);
901 break;
902
903 case giftobj:
904 GivePoints (5000);
905 gamestate.killx = player->x;
906 gamestate.killy = player->y;
907 NewState (ob,&s_giftdie1);
908 break;
909
910 case fatobj:
911 GivePoints (5000);
912 gamestate.killx = player->x;
913 gamestate.killy = player->y;
914 NewState (ob,&s_fatdie1);
915 break;
916
917 case schabbobj:
918 GivePoints (5000);
919 gamestate.killx = player->x;
920 gamestate.killy = player->y;
921 NewState (ob,&s_schabbdie1);
922 break;
923 case fakeobj:
924 GivePoints (2000);
925 NewState (ob,&s_fakedie1);
926 break;
927
928 case mechahitlerobj:
929 GivePoints (5000);
930 NewState (ob,&s_mechadie1);
931 break;
932 case realhitlerobj:
933 GivePoints (5000);
934 gamestate.killx = player->x;
935 gamestate.killy = player->y;
936 NewState (ob,&s_hitlerdie1);
937 break;
938#else
939 case spectreobj:
940 if (ob->flags&FL_BONUS)
941 {
942 GivePoints (200); // Get points once for each
943 ob->flags &= ~FL_BONUS;
944 }
945 NewState (ob,&s_spectredie1);
946 break;
947
948 case angelobj:
949 GivePoints (5000);
950 NewState (ob,&s_angeldie1);
951 break;
952
953 case transobj:
954 GivePoints (5000);
955 NewState (ob,&s_transdie0);
956 PlaceItemType (bo_key1,tilex,tiley);
957 break;
958
959 case uberobj:
960 GivePoints (5000);
961 NewState (ob,&s_uberdie0);
962 PlaceItemType (bo_key1,tilex,tiley);
963 break;
964
965 case willobj:
966 GivePoints (5000);
967 NewState (ob,&s_willdie1);
968 PlaceItemType (bo_key1,tilex,tiley);
969 break;
970
971 case deathobj:
972 GivePoints (5000);
973 NewState (ob,&s_deathdie1);
974 PlaceItemType (bo_key1,tilex,tiley);
975 break;
976#endif
977 }
978
979 gamestate.killcount++;
980 ob->flags &= ~FL_SHOOTABLE;
981 actorat[ob->tilex][ob->tiley] = NULL;
982 ob->flags |= FL_NONMARK;
983}
984
985
986
987/*
988===================
989=
990= DamageActor
991=
992= Called when the player succesfully hits an enemy.
993=
994= Does damage points to enemy ob, either putting it into a stun frame or
995= killing it.
996=
997===================
998*/
999
1000void DamageActor (objtype *ob, unsigned damage)
1001{
1002 madenoise = true;
1003
1004 //
1005 // do double damage if shooting a non attack mode actor
1006 //
1007 if ( !(ob->flags & FL_ATTACKMODE) )
1008 damage <<= 1;
1009
1010 ob->hitpoints -= (short)damage;
1011
1012 if (ob->hitpoints<=0)
1013 KillActor (ob);
1014 else
1015 {
1016 if (! (ob->flags & FL_ATTACKMODE) )
1017 FirstSighting (ob); // put into combat mode
1018
1019 switch (ob->obclass) // dogs only have one hit point
1020 {
1021 case guardobj:
1022 if (ob->hitpoints&1)
1023 NewState (ob,&s_grdpain);
1024 else
1025 NewState (ob,&s_grdpain1);
1026 break;
1027
1028 case officerobj:
1029 if (ob->hitpoints&1)
1030 NewState (ob,&s_ofcpain);
1031 else
1032 NewState (ob,&s_ofcpain1);
1033 break;
1034
1035 case mutantobj:
1036 if (ob->hitpoints&1)
1037 NewState (ob,&s_mutpain);
1038 else
1039 NewState (ob,&s_mutpain1);
1040 break;
1041
1042 case ssobj:
1043 if (ob->hitpoints&1)
1044 NewState (ob,&s_sspain);
1045 else
1046 NewState (ob,&s_sspain1);
1047
1048 break;
1049 }
1050 }
1051}
1052
1053/*
1054=============================================================================
1055
1056 CHECKSIGHT
1057
1058=============================================================================
1059*/
1060
1061
1062/*
1063=====================
1064=
1065= CheckLine
1066=
1067= Returns true if a straight line between the player and ob is unobstructed
1068=
1069=====================
1070*/
1071
1072boolean CheckLine (objtype *ob)
1073{
1074 int x1,y1,xt1,yt1,x2,y2,xt2,yt2;
1075 int x,y;
1076 int xdist,ydist,xstep,ystep;
1077 int partial,delta;
1078 int32_t ltemp;
1079 int xfrac,yfrac,deltafrac;
1080 unsigned value,intercept;
1081
1082 x1 = ob->x >> UNSIGNEDSHIFT; // 1/256 tile precision
1083 y1 = ob->y >> UNSIGNEDSHIFT;
1084 xt1 = x1 >> 8;
1085 yt1 = y1 >> 8;
1086
1087 x2 = plux;
1088 y2 = pluy;
1089 xt2 = player->tilex;
1090 yt2 = player->tiley;
1091
1092 xdist = abs(xt2-xt1);
1093
1094 if (xdist > 0)
1095 {
1096 if (xt2 > xt1)
1097 {
1098 partial = 256-(x1&0xff);
1099 xstep = 1;
1100 }
1101 else
1102 {
1103 partial = x1&0xff;
1104 xstep = -1;
1105 }
1106
1107 deltafrac = abs(x2-x1);
1108 delta = y2-y1;
1109 ltemp = ((int32_t)delta<<8)/deltafrac;
1110 if (ltemp > 0x7fffl)
1111 ystep = 0x7fff;
1112 else if (ltemp < -0x7fffl)
1113 ystep = -0x7fff;
1114 else
1115 ystep = ltemp;
1116 yfrac = y1 + (((int32_t)ystep*partial) >>8);
1117
1118 x = xt1+xstep;
1119 xt2 += xstep;
1120 do
1121 {
1122 y = yfrac>>8;
1123 yfrac += ystep;
1124
1125 value = (unsigned)tilemap[x][y];
1126 x += xstep;
1127
1128 if (!value)
1129 continue;
1130
1131 if (value<128 || value>256)
1132 return false;
1133
1134 //
1135 // see if the door is open enough
1136 //
1137 value &= ~0x80;
1138 intercept = yfrac-ystep/2;
1139
1140 if (intercept>doorposition[value])
1141 return false;
1142
1143 } while (x != xt2);
1144 }
1145
1146 ydist = abs(yt2-yt1);
1147
1148 if (ydist > 0)
1149 {
1150 if (yt2 > yt1)
1151 {
1152 partial = 256-(y1&0xff);
1153 ystep = 1;
1154 }
1155 else
1156 {
1157 partial = y1&0xff;
1158 ystep = -1;
1159 }
1160
1161 deltafrac = abs(y2-y1);
1162 delta = x2-x1;
1163 ltemp = ((int32_t)delta<<8)/deltafrac;
1164 if (ltemp > 0x7fffl)
1165 xstep = 0x7fff;
1166 else if (ltemp < -0x7fffl)
1167 xstep = -0x7fff;
1168 else
1169 xstep = ltemp;
1170 xfrac = x1 + (((int32_t)xstep*partial) >>8);
1171
1172 y = yt1 + ystep;
1173 yt2 += ystep;
1174 do
1175 {
1176 x = xfrac>>8;
1177 xfrac += xstep;
1178
1179 value = (unsigned)tilemap[x][y];
1180 y += ystep;
1181
1182 if (!value)
1183 continue;
1184
1185 if (value<128 || value>256)
1186 return false;
1187
1188 //
1189 // see if the door is open enough
1190 //
1191 value &= ~0x80;
1192 intercept = xfrac-xstep/2;
1193
1194 if (intercept>doorposition[value])
1195 return false;
1196 } while (y != yt2);
1197 }
1198
1199 return true;
1200}
1201
1202
1203/*
1204================
1205=
1206= CheckSight
1207=
1208= Checks a straight line between player and current object
1209=
1210= If the sight is ok, check alertness and angle to see if they notice
1211=
1212= returns true if the player has been spoted
1213=
1214================
1215*/
1216
1217#define MINSIGHT 0x18000l
1218
1219boolean CheckSight (objtype *ob)
1220{
1221 int32_t deltax,deltay;
1222
1223 //
1224 // don't bother tracing a line if the area isn't connected to the player's
1225 //
1226 if (!areabyplayer[ob->areanumber])
1227 return false;
1228
1229 //
1230 // if the player is real close, sight is automatic
1231 //
1232 deltax = player->x - ob->x;
1233 deltay = player->y - ob->y;
1234
1235 if (deltax > -MINSIGHT && deltax < MINSIGHT
1236 && deltay > -MINSIGHT && deltay < MINSIGHT)
1237 return true;
1238
1239 //
1240 // see if they are looking in the right direction
1241 //
1242 switch (ob->dir)
1243 {
1244 case north:
1245 if (deltay > 0)
1246 return false;
1247 break;
1248
1249 case east:
1250 if (deltax < 0)
1251 return false;
1252 break;
1253
1254 case south:
1255 if (deltay < 0)
1256 return false;
1257 break;
1258
1259 case west:
1260 if (deltax > 0)
1261 return false;
1262 break;
1263
1264 // check diagonal moving guards fix
1265
1266 case northwest:
1267 if (DEMOCOND_SDL && deltay > -deltax)
1268 return false;
1269 break;
1270
1271 case northeast:
1272 if (DEMOCOND_SDL && deltay > deltax)
1273 return false;
1274 break;
1275
1276 case southwest:
1277 if (DEMOCOND_SDL && deltax > deltay)
1278 return false;
1279 break;
1280
1281 case southeast:
1282 if (DEMOCOND_SDL && -deltax > deltay)
1283 return false;
1284 break;
1285 }
1286
1287 //
1288 // trace a line to check for blocking tiles (corners)
1289 //
1290 return CheckLine (ob);
1291}
1292
1293
1294/*
1295===============
1296=
1297= FirstSighting
1298=
1299= Puts an actor into attack mode and possibly reverses the direction
1300= if the player is behind it
1301=
1302===============
1303*/
1304
1305void FirstSighting (objtype *ob)
1306{
1307 //
1308 // react to the player
1309 //
1310 switch (ob->obclass)
1311 {
1312 case guardobj:
1313 PlaySoundLocActor(HALTSND,ob);
1314 NewState (ob,&s_grdchase1);
1315 ob->speed *= 3; // go faster when chasing player
1316 break;
1317
1318 case officerobj:
1319 PlaySoundLocActor(SPIONSND,ob);
1320 NewState (ob,&s_ofcchase1);
1321 ob->speed *= 5; // go faster when chasing player
1322 break;
1323
1324 case mutantobj:
1325 NewState (ob,&s_mutchase1);
1326 ob->speed *= 3; // go faster when chasing player
1327 break;
1328
1329 case ssobj:
1330 PlaySoundLocActor(SCHUTZADSND,ob);
1331 NewState (ob,&s_sschase1);
1332 ob->speed *= 4; // go faster when chasing player
1333 break;
1334
1335 case dogobj:
1336 PlaySoundLocActor(DOGBARKSND,ob);
1337 NewState (ob,&s_dogchase1);
1338 ob->speed *= 2; // go faster when chasing player
1339 break;
1340
1341#ifndef SPEAR
1342 case bossobj:
1343 SD_PlaySound(GUTENTAGSND);
1344 NewState (ob,&s_bosschase1);
1345 ob->speed = SPDPATROL*3; // go faster when chasing player
1346 break;
1347
1348#ifndef APOGEE_1_0
1349 case gretelobj:
1350 SD_PlaySound(KEINSND);
1351 NewState (ob,&s_gretelchase1);
1352 ob->speed *= 3; // go faster when chasing player
1353 break;
1354
1355 case giftobj:
1356 SD_PlaySound(EINESND);
1357 NewState (ob,&s_giftchase1);
1358 ob->speed *= 3; // go faster when chasing player
1359 break;
1360
1361 case fatobj:
1362 SD_PlaySound(ERLAUBENSND);
1363 NewState (ob,&s_fatchase1);
1364 ob->speed *= 3; // go faster when chasing player
1365 break;
1366#endif
1367
1368 case schabbobj:
1369 SD_PlaySound(SCHABBSHASND);
1370 NewState (ob,&s_schabbchase1);
1371 ob->speed *= 3; // go faster when chasing player
1372 break;
1373
1374 case fakeobj:
1375 SD_PlaySound(TOT_HUNDSND);
1376 NewState (ob,&s_fakechase1);
1377 ob->speed *= 3; // go faster when chasing player
1378 break;
1379
1380 case mechahitlerobj:
1381 SD_PlaySound(DIESND);
1382 NewState (ob,&s_mechachase1);
1383 ob->speed *= 3; // go faster when chasing player
1384 break;
1385
1386 case realhitlerobj:
1387 SD_PlaySound(DIESND);
1388 NewState (ob,&s_hitlerchase1);
1389 ob->speed *= 5; // go faster when chasing player
1390 break;
1391
1392 case ghostobj:
1393 NewState (ob,&s_blinkychase1);
1394 ob->speed *= 2; // go faster when chasing player
1395 break;
1396#else
1397 case spectreobj:
1398 SD_PlaySound(GHOSTSIGHTSND);
1399 NewState (ob,&s_spectrechase1);
1400 ob->speed = 800; // go faster when chasing player
1401 break;
1402
1403 case angelobj:
1404 SD_PlaySound(ANGELSIGHTSND);
1405 NewState (ob,&s_angelchase1);
1406 ob->speed = 1536; // go faster when chasing player
1407 break;
1408
1409 case transobj:
1410 SD_PlaySound(TRANSSIGHTSND);
1411 NewState (ob,&s_transchase1);
1412 ob->speed = 1536; // go faster when chasing player
1413 break;
1414
1415 case uberobj:
1416 NewState (ob,&s_uberchase1);
1417 ob->speed = 3000; // go faster when chasing player
1418 break;
1419
1420 case willobj:
1421 SD_PlaySound(WILHELMSIGHTSND);
1422 NewState (ob,&s_willchase1);
1423 ob->speed = 2048; // go faster when chasing player
1424 break;
1425
1426 case deathobj:
1427 SD_PlaySound(KNIGHTSIGHTSND);
1428 NewState (ob,&s_deathchase1);
1429 ob->speed = 2048; // go faster when chasing player
1430 break;
1431#endif
1432 }
1433
1434 if (ob->distance < 0)
1435 ob->distance = 0; // ignore the door opening command
1436
1437 ob->flags |= FL_ATTACKMODE|FL_FIRSTATTACK;
1438}
1439
1440
1441
1442/*
1443===============
1444=
1445= SightPlayer
1446=
1447= Called by actors that ARE NOT chasing the player. If the player
1448= is detected (by sight, noise, or proximity), the actor is put into
1449= it's combat frame and true is returned.
1450=
1451= Incorporates a random reaction delay
1452=
1453===============
1454*/
1455
1456boolean SightPlayer (objtype *ob)
1457{
1458 if (ob->flags & FL_ATTACKMODE)
1459 Quit ("An actor in ATTACKMODE called SightPlayer!");
1460
1461 if (ob->temp2)
1462 {
1463 //
1464 // count down reaction time
1465 //
1466 ob->temp2 -= (short) tics;
1467 if (ob->temp2 > 0)
1468 return false;
1469 ob->temp2 = 0; // time to react
1470 }
1471 else
1472 {
1473 if (!areabyplayer[ob->areanumber])
1474 return false;
1475
1476 if (ob->flags & FL_AMBUSH)
1477 {
1478 if (!CheckSight (ob))
1479 return false;
1480 ob->flags &= ~FL_AMBUSH;
1481 }
1482 else
1483 {
1484 if (!madenoise && !CheckSight (ob))
1485 return false;
1486 }
1487
1488
1489 switch (ob->obclass)
1490 {
1491 case guardobj:
1492 ob->temp2 = 1+US_RndT()/4;
1493 break;
1494 case officerobj:
1495 ob->temp2 = 2;
1496 break;
1497 case mutantobj:
1498 ob->temp2 = 1+US_RndT()/6;
1499 break;
1500 case ssobj:
1501 ob->temp2 = 1+US_RndT()/6;
1502 break;
1503 case dogobj:
1504 ob->temp2 = 1+US_RndT()/8;
1505 break;
1506
1507 case bossobj:
1508 case schabbobj:
1509 case fakeobj:
1510 case mechahitlerobj:
1511 case realhitlerobj:
1512 case gretelobj:
1513 case giftobj:
1514 case fatobj:
1515 case spectreobj:
1516 case angelobj:
1517 case transobj:
1518 case uberobj:
1519 case willobj:
1520 case deathobj:
1521 ob->temp2 = 1;
1522 break;
1523 }
1524 return false;
1525 }
1526
1527 FirstSighting (ob);
1528
1529 return true;
1530}
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 @@
1// WL_TEXT.C
2
3#include "wl_def.h"
4#pragma hdrstop
5
6/*
7=============================================================================
8
9TEXT FORMATTING COMMANDS
10------------------------
11^C<hex digit> Change text color
12^E[enter] End of layout (all pages)
13^G<y>,<x>,<pic>[enter] Draw a graphic and push margins
14^P[enter] start new page, must be the first chars in a layout
15^L<x>,<y>[ENTER] Locate to a specific spot, x in pixels, y in lines
16
17=============================================================================
18*/
19
20/*
21=============================================================================
22
23 LOCAL CONSTANTS
24
25=============================================================================
26*/
27
28#ifndef SPEAR
29
30#define BACKCOLOR 0x11
31
32
33#define WORDLIMIT 80
34#define FONTHEIGHT 10
35#define TOPMARGIN 16
36#define BOTTOMMARGIN 32
37#define LEFTMARGIN 16
38#define RIGHTMARGIN 16
39#define PICMARGIN 8
40#define TEXTROWS ((200-TOPMARGIN-BOTTOMMARGIN)/FONTHEIGHT)
41#define SPACEWIDTH 7
42#define SCREENPIXWIDTH 320
43#define SCREENMID (SCREENPIXWIDTH/2)
44
45/*
46=============================================================================
47
48 LOCAL VARIABLES
49
50=============================================================================
51*/
52
53static int pagenum;
54static int numpages;
55
56static unsigned leftmargin[TEXTROWS];
57static unsigned rightmargin[TEXTROWS];
58static char* text;
59static unsigned rowon;
60
61static int picx;
62static int picy;
63static int picnum;
64static int picdelay;
65static boolean layoutdone;
66
67//===========================================================================
68
69#ifndef JAPAN
70/*
71=====================
72=
73= RipToEOL
74=
75=====================
76*/
77
78void RipToEOL (void)
79{
80 while (*text++ != '\n') // scan to end of line
81 ;
82}
83
84
85/*
86=====================
87=
88= ParseNumber
89=
90=====================
91*/
92
93int ParseNumber (void)
94{
95 char ch;
96 char num[80];
97 char *numptr;
98
99 //
100 // scan until a number is found
101 //
102 ch = *text;
103 while (ch < '0' || ch >'9')
104 ch = *++text;
105
106 //
107 // copy the number out
108 //
109 numptr = num;
110 do
111 {
112 *numptr++ = ch;
113 ch = *++text;
114 } while (ch >= '0' && ch <= '9');
115 *numptr = 0;
116
117 return atoi (num);
118}
119
120
121
122/*
123=====================
124=
125= ParsePicCommand
126=
127= Call with text pointing just after a ^P
128= Upon exit text points to the start of next line
129=
130=====================
131*/
132
133void ParsePicCommand (void)
134{
135 picy=ParseNumber();
136 picx=ParseNumber();
137 picnum=ParseNumber();
138 RipToEOL ();
139}
140
141
142void ParseTimedCommand (void)
143{
144 picy=ParseNumber();
145 picx=ParseNumber();
146 picnum=ParseNumber();
147 picdelay=ParseNumber();
148 RipToEOL ();
149}
150
151
152/*
153=====================
154=
155= TimedPicCommand
156=
157= Call with text pointing just after a ^P
158= Upon exit text points to the start of next line
159=
160=====================
161*/
162
163void TimedPicCommand (void)
164{
165 ParseTimedCommand ();
166
167 //
168 // update the screen, and wait for time delay
169 //
170 VW_UpdateScreen ();
171
172 //
173 // wait for time
174 //
175 Delay(picdelay);
176
177 //
178 // draw pic
179 //
180 VWB_DrawPic (picx&~7,picy,picnum);
181}
182
183
184/*
185=====================
186=
187= HandleCommand
188=
189=====================
190*/
191
192void HandleCommand (void)
193{
194 int i,margin,top,bottom;
195 int picwidth,picheight,picmid;
196
197 switch (toupper(*++text))
198 {
199 case 'B':
200 picy=ParseNumber();
201 picx=ParseNumber();
202 picwidth=ParseNumber();
203 picheight=ParseNumber();
204 VWB_Bar(picx,picy,picwidth,picheight,BACKCOLOR);
205 RipToEOL();
206 break;
207 case ';': // comment
208 RipToEOL();
209 break;
210 case 'P': // ^P is start of next page, ^E is end of file
211 case 'E':
212 layoutdone = true;
213 text--; // back up to the '^'
214 break;
215
216 case 'C': // ^c<hex digit> changes text color
217 i = toupper(*++text);
218 if (i>='0' && i<='9')
219 fontcolor = i-'0';
220 else if (i>='A' && i<='F')
221 fontcolor = i-'A'+10;
222
223 fontcolor *= 16;
224 i = toupper(*++text);
225 if (i>='0' && i<='9')
226 fontcolor += i-'0';
227 else if (i>='A' && i<='F')
228 fontcolor += i-'A'+10;
229 text++;
230 break;
231
232 case '>':
233 px = 160;
234 text++;
235 break;
236
237 case 'L':
238 py=ParseNumber();
239 rowon = (py-TOPMARGIN)/FONTHEIGHT;
240 py = TOPMARGIN+rowon*FONTHEIGHT;
241 px=ParseNumber();
242 while (*text++ != '\n') // scan to end of line
243 ;
244 break;
245
246 case 'T': // ^Tyyy,xxx,ppp,ttt waits ttt tics, then draws pic
247 TimedPicCommand ();
248 break;
249
250 case 'G': // ^Gyyy,xxx,ppp draws graphic
251 ParsePicCommand ();
252 VWB_DrawPic (picx&~7,picy,picnum);
253 picwidth = pictable[picnum-STARTPICS].width;
254 picheight = pictable[picnum-STARTPICS].height;
255 //
256 // adjust margins
257 //
258 picmid = picx + picwidth/2;
259 if (picmid > SCREENMID)
260 margin = picx-PICMARGIN; // new right margin
261 else
262 margin = picx+picwidth+PICMARGIN; // new left margin
263
264 top = (picy-TOPMARGIN)/FONTHEIGHT;
265 if (top<0)
266 top = 0;
267 bottom = (picy+picheight-TOPMARGIN)/FONTHEIGHT;
268 if (bottom>=TEXTROWS)
269 bottom = TEXTROWS-1;
270
271 for (i=top;i<=bottom;i++)
272 if (picmid > SCREENMID)
273 rightmargin[i] = margin;
274 else
275 leftmargin[i] = margin;
276
277 //
278 // adjust this line if needed
279 //
280 if (px < (int) leftmargin[rowon])
281 px = leftmargin[rowon];
282 break;
283 }
284}
285
286
287/*
288=====================
289=
290= NewLine
291=
292=====================
293*/
294
295void NewLine (void)
296{
297 char ch;
298
299 if (++rowon == TEXTROWS)
300 {
301 //
302 // overflowed the page, so skip until next page break
303 //
304 layoutdone = true;
305 do
306 {
307 if (*text == '^')
308 {
309 ch = toupper(*(text+1));
310 if (ch == 'E' || ch == 'P')
311 {
312 layoutdone = true;
313 return;
314 }
315 }
316 text++;
317 } while (1);
318 }
319 px = leftmargin[rowon];
320 py+= FONTHEIGHT;
321}
322
323
324
325/*
326=====================
327=
328= HandleCtrls
329=
330=====================
331*/
332
333void HandleCtrls (void)
334{
335 char ch;
336
337 ch = *text++; // get the character and advance
338
339 if (ch == '\n')
340 {
341 NewLine ();
342 return;
343 }
344}
345
346
347/*
348=====================
349=
350= HandleWord
351=
352=====================
353*/
354
355void HandleWord (void)
356{
357 char wword[WORDLIMIT];
358 int wordindex;
359 word wwidth,wheight,newpos;
360
361
362 //
363 // copy the next word into [word]
364 //
365 wword[0] = *text++;
366 wordindex = 1;
367 while (*text>32)
368 {
369 wword[wordindex] = *text++;
370 if (++wordindex == WORDLIMIT)
371 Quit ("PageLayout: Word limit exceeded");
372 }
373 wword[wordindex] = 0; // stick a null at end for C
374
375 //
376 // see if it fits on this line
377 //
378 VW_MeasurePropString (wword,&wwidth,&wheight);
379
380 while (px+wwidth > (int) rightmargin[rowon])
381 {
382 NewLine ();
383 if (layoutdone)
384 return; // overflowed page
385 }
386
387 //
388 // print it
389 //
390 newpos = px+wwidth;
391 VWB_DrawPropString (wword);
392 px = newpos;
393
394 //
395 // suck up any extra spaces
396 //
397 while (*text == ' ')
398 {
399 px += SPACEWIDTH;
400 text++;
401 }
402}
403
404/*
405=====================
406=
407= PageLayout
408=
409= Clears the screen, draws the pics on the page, and word wraps the text.
410= Returns a pointer to the terminating command
411=
412=====================
413*/
414
415void PageLayout (boolean shownumber)
416{
417 int i,oldfontcolor;
418 char ch;
419
420 oldfontcolor = fontcolor;
421
422 fontcolor = 0;
423
424 //
425 // clear the screen
426 //
427 VWB_Bar (0,0,320,200,BACKCOLOR);
428 VWB_DrawPic (0,0,H_TOPWINDOWPIC);
429 VWB_DrawPic (0,8,H_LEFTWINDOWPIC);
430 VWB_DrawPic (312,8,H_RIGHTWINDOWPIC);
431 VWB_DrawPic (8,176,H_BOTTOMINFOPIC);
432
433
434 for (i=0; i<TEXTROWS; i++)
435 {
436 leftmargin[i] = LEFTMARGIN;
437 rightmargin[i] = SCREENPIXWIDTH-RIGHTMARGIN;
438 }
439
440 px = LEFTMARGIN;
441 py = TOPMARGIN;
442 rowon = 0;
443 layoutdone = false;
444
445 //
446 // make sure we are starting layout text (^P first command)
447 //
448 while (*text <= 32)
449 text++;
450
451 if (*text != '^' || toupper(*++text) != 'P')
452 Quit ("PageLayout: Text not headed with ^P");
453
454 while (*text++ != '\n')
455 ;
456
457
458 //
459 // process text stream
460 //
461 do
462 {
463 ch = *text;
464
465 if (ch == '^')
466 HandleCommand ();
467 else
468 if (ch == 9)
469 {
470 px = (px+8)&0xf8;
471 text++;
472 }
473 else if (ch <= 32)
474 HandleCtrls ();
475 else
476 HandleWord ();
477
478 } while (!layoutdone);
479
480 pagenum++;
481
482 if (shownumber)
483 {
484#ifdef SPANISH
485 sprintf(str, "Hoja %d de %d", pagenum, numpages);
486 px = 208;
487#else
488 sprintf(str, "pg %d of %d", pagenum, numpages);
489 px = 213;
490#endif
491 py = 183;
492 fontcolor = 0x4f; //12^BACKCOLOR;
493
494 VWB_DrawPropString (str);
495 }
496
497 fontcolor = oldfontcolor;
498}
499
500//===========================================================================
501
502/*
503=====================
504=
505= BackPage
506=
507= Scans for a previous ^P
508=
509=====================
510*/
511
512void BackPage (void)
513{
514 pagenum--;
515 do
516 {
517 text--;
518 if (*text == '^' && toupper(*(text+1)) == 'P')
519 return;
520 } while (1);
521}
522
523
524//===========================================================================
525
526
527/*
528=====================
529=
530= CacheLayoutGraphics
531=
532= Scans an entire layout file (until a ^E) marking all graphics used, and
533= counting pages, then caches the graphics in
534=
535=====================
536*/
537void CacheLayoutGraphics (void)
538{
539 char *bombpoint, *textstart;
540 char ch;
541
542 textstart = text;
543 bombpoint = text+30000;
544 numpages = pagenum = 0;
545
546 do
547 {
548 if (*text == '^')
549 {
550 ch = toupper(*++text);
551 if (ch == 'P') // start of a page
552 numpages++;
553 if (ch == 'E') // end of file, so load graphics and return
554 {
555#ifndef SPEAR
556 CA_CacheGrChunk(H_TOPWINDOWPIC);
557 CA_CacheGrChunk(H_LEFTWINDOWPIC);
558 CA_CacheGrChunk(H_RIGHTWINDOWPIC);
559 CA_CacheGrChunk(H_BOTTOMINFOPIC);
560#endif
561 // CA_CacheMarks ();
562 text = textstart;
563 return;
564 }
565 if (ch == 'G') // draw graphic command, so mark graphics
566 {
567 ParsePicCommand ();
568 CA_CacheGrChunk (picnum);
569 }
570 if (ch == 'T') // timed draw graphic command, so mark graphics
571 {
572 ParseTimedCommand ();
573 CA_CacheGrChunk (picnum);
574 }
575 }
576 else
577 text++;
578
579 } while (text<bombpoint);
580
581 Quit ("CacheLayoutGraphics: No ^E to terminate file!");
582}
583#endif
584
585
586/*
587=====================
588=
589= ShowArticle
590=
591=====================
592*/
593
594#ifdef JAPAN
595void ShowArticle (int which)
596#else
597void ShowArticle (char *article)
598#endif
599{
600#ifdef JAPAN
601 int snames[10] = {
602 H_HELP1PIC,
603 H_HELP2PIC,
604 H_HELP3PIC,
605 H_HELP4PIC,
606 H_HELP5PIC,
607 H_HELP6PIC,
608 H_HELP7PIC,
609 H_HELP8PIC,
610 H_HELP9PIC,
611 H_HELP10PIC};
612 int enames[14] = {
613 0,0,
614#ifndef JAPDEMO
615 C_ENDGAME1APIC,
616 C_ENDGAME1BPIC,
617 C_ENDGAME2APIC,
618 C_ENDGAME2BPIC,
619 C_ENDGAME3APIC,
620 C_ENDGAME3BPIC,
621 C_ENDGAME4APIC,
622 C_ENDGAME4BPIC,
623 C_ENDGAME5APIC,
624 C_ENDGAME5BPIC,
625 C_ENDGAME6APIC,
626 C_ENDGAME6BPIC
627#endif
628 };
629#endif
630 unsigned oldfontnumber;
631 boolean newpage,firstpage;
632 ControlInfo ci;
633
634#ifdef JAPAN
635 pagenum = 1;
636 if (!which)
637 numpages = 10;
638 else
639 numpages = 2;
640#else
641 text = article;
642 oldfontnumber = fontnumber;
643 fontnumber = 0;
644 CA_CacheGrChunk(STARTFONT);
645 VWB_Bar (0,0,320,200,BACKCOLOR);
646 CacheLayoutGraphics ();
647#endif
648
649 newpage = true;
650 firstpage = true;
651
652 do
653 {
654 if (newpage)
655 {
656 newpage = false;
657#ifdef JAPAN
658 if (!which)
659 CA_CacheScreen(snames[pagenum - 1]);
660 else
661 CA_CacheScreen(enames[which*2 + pagenum - 1]);
662#else
663 PageLayout (true);
664#endif
665 VW_UpdateScreen ();
666 if (firstpage)
667 {
668 VL_FadeIn(0,255,gamepal,10);
669 firstpage = false;
670 }
671 }
672 SDL_Delay(5);
673
674 LastScan = 0;
675 ReadAnyControl(&ci);
676 Direction dir = ci.dir;
677 switch(dir)
678 {
679 case dir_North:
680 case dir_South:
681 break;
682
683 default:
684 if(ci.button0) dir = dir_South;
685 switch(LastScan)
686 {
687 case sc_UpArrow:
688 case sc_PgUp:
689 case sc_LeftArrow:
690 dir = dir_North;
691 break;
692
693 case sc_Enter:
694 case sc_DownArrow:
695 case sc_PgDn:
696 case sc_RightArrow:
697 dir = dir_South;
698 break;
699 }
700 break;
701 }
702
703 switch(dir)
704 {
705 case dir_North:
706 case dir_West:
707 if (pagenum>1)
708 {
709#ifndef JAPAN
710 BackPage ();
711 BackPage ();
712#else
713 pagenum--;
714#endif
715 newpage = true;
716 }
717 TicDelay(20);
718 break;
719
720 case dir_South:
721 case dir_East:
722 if (pagenum<numpages)
723 {
724 newpage = true;
725#ifdef JAPAN
726 pagenum++;
727#endif
728 }
729 TicDelay(20);
730 break;
731 }
732 } while (LastScan != sc_Escape && !ci.button1);
733
734 IN_ClearKeysDown ();
735 fontnumber = oldfontnumber;
736}
737
738
739//===========================================================================
740
741#ifndef JAPAN
742#ifdef ARTSEXTERN
743int endextern = T_ENDART1;
744#ifndef SPEAR
745int helpextern = T_HELPART;
746#endif
747#endif
748char helpfilename[13] = "HELPART.",
749 endfilename[13] = "ENDART1.";
750#endif
751
752/*
753=================
754=
755= HelpScreens
756=
757=================
758*/
759#ifndef SPEAR
760void HelpScreens (void)
761{
762 int artnum;
763 char *text;
764#ifndef ARTSEXTERN
765 memptr layout;
766#endif
767
768
769 // CA_UpLevel ();
770 // MM_SortMem ();
771#ifdef JAPAN
772 ShowArticle (0);
773 VW_FadeOut();
774 FreeMusic ();
775 CA_DownLevel ();
776 MM_SortMem ();
777#else
778
779#ifdef ARTSEXTERN
780 artnum = helpextern;
781 CA_CacheGrChunk (artnum);
782 text = (char *)grsegs[artnum];
783#else
784 CA_LoadFile (helpfilename,&layout);
785 text = (char *)layout;
786#endif
787
788 ShowArticle (text);
789
790#ifdef ARTSEXTERN
791 UNCACHEGRCHUNK(artnum);
792#else
793 free(layout);
794#endif
795
796 VW_FadeOut();
797
798 FreeMusic ();
799#endif
800}
801#endif
802
803//
804// END ARTICLES
805//
806void EndText (void)
807{
808 int artnum;
809 char *text;
810#ifndef ARTSEXTERN
811 memptr layout;
812#endif
813
814 ClearMemory ();
815
816#ifdef JAPAN
817 ShowArticle(gamestate.episode + 1);
818
819 VW_FadeOut();
820
821 SETFONTCOLOR(0,15);
822 IN_ClearKeysDown();
823 if (MousePresent && IN_IsInputGrabbed())
824 IN_CenterMouse(); // Clear accumulated mouse movement
825
826 FreeMusic ();
827#else
828
829
830
831#ifdef ARTSEXTERN
832 artnum = endextern+gamestate.episode;
833 CA_CacheGrChunk (artnum);
834 text = (char *)grsegs[artnum];
835#else
836 endfilename[6] = '1'+gamestate.episode;
837 CA_LoadFile (endfilename,&layout);
838 text = (char *)layout;
839#endif
840
841 ShowArticle (text);
842
843#ifdef ARTSEXTERN
844 UNCACHEGRCHUNK(artnum);
845#else
846 free(layout);
847#endif
848
849
850 VW_FadeOut();
851 SETFONTCOLOR(0,15);
852 IN_ClearKeysDown();
853 if (MousePresent && IN_IsInputGrabbed())
854 IN_CenterMouse(); // Clear accumulated mouse movement
855
856 FreeMusic ();
857#endif
858}
859#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 @@
1RGB( 0, 0, 0),RGB( 0, 0, 42),RGB( 0, 42, 0),RGB( 0, 42, 42),RGB( 42, 0, 0),
2RGB( 42, 0, 42),RGB( 42, 21, 0),RGB( 42, 42, 42),RGB( 21, 21, 21),RGB( 21, 21, 63),
3RGB( 21, 63, 21),RGB( 21, 63, 63),RGB( 63, 21, 21),RGB( 63, 21, 63),RGB( 63, 63, 21),
4RGB( 63, 63, 63),RGB( 59, 59, 59),RGB( 55, 55, 55),RGB( 52, 52, 52),RGB( 48, 48, 48),
5RGB( 45, 45, 45),RGB( 42, 42, 42),RGB( 38, 38, 38),RGB( 35, 35, 35),RGB( 31, 31, 31),
6RGB( 28, 28, 28),RGB( 25, 25, 25),RGB( 21, 21, 21),RGB( 18, 18, 18),RGB( 14, 14, 14),
7RGB( 11, 11, 11),RGB( 8, 8, 8),RGB( 63, 0, 0),RGB( 59, 0, 0),RGB( 56, 0, 0),
8RGB( 53, 0, 0),RGB( 50, 0, 0),RGB( 47, 0, 0),RGB( 44, 0, 0),RGB( 41, 0, 0),
9RGB( 38, 0, 0),RGB( 34, 0, 0),RGB( 31, 0, 0),RGB( 28, 0, 0),RGB( 25, 0, 0),
10RGB( 22, 0, 0),RGB( 19, 0, 0),RGB( 16, 0, 0),RGB( 63, 54, 54),RGB( 63, 46, 46),
11RGB( 63, 39, 39),RGB( 63, 31, 31),RGB( 63, 23, 23),RGB( 63, 16, 16),RGB( 63, 8, 8),
12RGB( 63, 0, 0),RGB( 63, 42, 23),RGB( 63, 38, 16),RGB( 63, 34, 8),RGB( 63, 30, 0),
13RGB( 57, 27, 0),RGB( 51, 24, 0),RGB( 45, 21, 0),RGB( 39, 19, 0),RGB( 63, 63, 54),
14RGB( 63, 63, 46),RGB( 63, 63, 39),RGB( 63, 63, 31),RGB( 63, 62, 23),RGB( 63, 61, 16),
15RGB( 63, 61, 8),RGB( 63, 61, 0),RGB( 57, 54, 0),RGB( 51, 49, 0),RGB( 45, 43, 0),
16RGB( 39, 39, 0),RGB( 33, 33, 0),RGB( 28, 27, 0),RGB( 22, 21, 0),RGB( 16, 16, 0),
17RGB( 52, 63, 23),RGB( 49, 63, 16),RGB( 45, 63, 8),RGB( 40, 63, 0),RGB( 36, 57, 0),
18RGB( 32, 51, 0),RGB( 29, 45, 0),RGB( 24, 39, 0),RGB( 54, 63, 54),RGB( 47, 63, 46),
19RGB( 39, 63, 39),RGB( 32, 63, 31),RGB( 24, 63, 23),RGB( 16, 63, 16),RGB( 8, 63, 8),
20RGB( 0, 63, 0),RGB( 0, 63, 0),RGB( 0, 59, 0),RGB( 0, 56, 0),RGB( 0, 53, 0),
21RGB( 1, 50, 0),RGB( 1, 47, 0),RGB( 1, 44, 0),RGB( 1, 41, 0),RGB( 1, 38, 0),
22RGB( 1, 34, 0),RGB( 1, 31, 0),RGB( 1, 28, 0),RGB( 1, 25, 0),RGB( 1, 22, 0),
23RGB( 1, 19, 0),RGB( 1, 16, 0),RGB( 54, 63, 63),RGB( 46, 63, 63),RGB( 39, 63, 63),
24RGB( 31, 63, 62),RGB( 23, 63, 63),RGB( 16, 63, 63),RGB( 8, 63, 63),RGB( 0, 63, 63),
25RGB( 0, 57, 57),RGB( 0, 51, 51),RGB( 0, 45, 45),RGB( 0, 39, 39),RGB( 0, 33, 33),
26RGB( 0, 28, 28),RGB( 0, 22, 22),RGB( 0, 16, 16),RGB( 23, 47, 63),RGB( 16, 44, 63),
27RGB( 8, 42, 63),RGB( 0, 39, 63),RGB( 0, 35, 57),RGB( 0, 31, 51),RGB( 0, 27, 45),
28RGB( 0, 23, 39),RGB( 54, 54, 63),RGB( 46, 47, 63),RGB( 39, 39, 63),RGB( 31, 32, 63),
29RGB( 23, 24, 63),RGB( 16, 16, 63),RGB( 8, 9, 63),RGB( 0, 1, 63),RGB( 0, 0, 63),
30RGB( 0, 0, 59),RGB( 0, 0, 56),RGB( 0, 0, 53),RGB( 0, 0, 50),RGB( 0, 0, 47),
31RGB( 0, 0, 44),RGB( 0, 0, 41),RGB( 0, 0, 38),RGB( 0, 0, 34),RGB( 0, 0, 31),
32RGB( 0, 0, 28),RGB( 0, 0, 25),RGB( 0, 0, 22),RGB( 0, 0, 19),RGB( 0, 0, 16),
33RGB( 10, 10, 10),RGB( 63, 56, 13),RGB( 63, 53, 9),RGB( 63, 51, 6),RGB( 63, 48, 2),
34RGB( 63, 45, 0),RGB( 45, 8, 63),RGB( 42, 0, 63),RGB( 38, 0, 57),RGB( 32, 0, 51),
35RGB( 29, 0, 45),RGB( 24, 0, 39),RGB( 20, 0, 33),RGB( 17, 0, 28),RGB( 13, 0, 22),
36RGB( 10, 0, 16),RGB( 63, 54, 63),RGB( 63, 46, 63),RGB( 63, 39, 63),RGB( 63, 31, 63),
37RGB( 63, 23, 63),RGB( 63, 16, 63),RGB( 63, 8, 63),RGB( 63, 0, 63),RGB( 56, 0, 57),
38RGB( 50, 0, 51),RGB( 45, 0, 45),RGB( 39, 0, 39),RGB( 33, 0, 33),RGB( 27, 0, 28),
39RGB( 22, 0, 22),RGB( 16, 0, 16),RGB( 63, 58, 55),RGB( 63, 56, 52),RGB( 63, 54, 49),
40RGB( 63, 53, 47),RGB( 63, 51, 44),RGB( 63, 49, 41),RGB( 63, 47, 39),RGB( 63, 46, 36),
41RGB( 63, 44, 32),RGB( 63, 41, 28),RGB( 63, 39, 24),RGB( 60, 37, 23),RGB( 58, 35, 22),
42RGB( 55, 34, 21),RGB( 52, 32, 20),RGB( 50, 31, 19),RGB( 47, 30, 18),RGB( 45, 28, 17),
43RGB( 42, 26, 16),RGB( 40, 25, 15),RGB( 39, 24, 14),RGB( 36, 23, 13),RGB( 34, 22, 12),
44RGB( 32, 20, 11),RGB( 29, 19, 10),RGB( 27, 18, 9),RGB( 23, 16, 8),RGB( 21, 15, 7),
45RGB( 18, 14, 6),RGB( 16, 12, 6),RGB( 14, 11, 5),RGB( 10, 8, 3),RGB( 24, 0, 25),
46RGB( 0, 25, 25),RGB( 0, 24, 24),RGB( 0, 0, 7),RGB( 0, 0, 11),RGB( 12, 9, 4),
47RGB( 18, 0, 18),RGB( 20, 0, 20),RGB( 0, 0, 13),RGB( 7, 7, 7),RGB( 19, 19, 19),
48RGB( 23, 23, 23),RGB( 16, 16, 16),RGB( 12, 12, 12),RGB( 13, 13, 13),RGB( 54, 61, 61),
49RGB( 46, 58, 58),RGB( 39, 55, 55),RGB( 29, 50, 50),RGB( 18, 48, 48),RGB( 8, 45, 45),
50RGB( 8, 44, 44),RGB( 0, 41, 41),RGB( 0, 38, 38),RGB( 0, 35, 35),RGB( 0, 33, 33),
51RGB( 0, 31, 31),RGB( 0, 30, 30),RGB( 0, 29, 29),RGB( 0, 28, 28),RGB( 0, 27, 27),
52RGB( 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
12 12
13SDL_SRC := $(call preprocess, $(SDL_SRCDIR)/SOURCES) 13SDL_SRC := $(call preprocess, $(SDL_SRCDIR)/SOURCES)
14DUKE3D_SRC := $(call preprocess, $(SDL_SRCDIR)/SOURCES.duke) 14DUKE3D_SRC := $(call preprocess, $(SDL_SRCDIR)/SOURCES.duke)
15WOLF3D_SRC := $(call preprocess, $(SDL_SRCDIR)/SOURCES.wolf)
15 16
16SDL_OBJ := $(call c2obj, $(SDL_SRC)) 17SDL_OBJ := $(call c2obj, $(SDL_SRC))
17DUKE3D_OBJ = $(call c2obj, $(DUKE3D_SRC)) 18DUKE3D_OBJ = $(call c2obj, $(DUKE3D_SRC))
19WOLF3D_OBJ = $(call c2obj, $(WOLF3D_SRC))
18 20
19# add source files to OTHER_SRC to get automatic dependencies 21# add source files to OTHER_SRC to get automatic dependencies
20OTHER_SRC += $(SDL_SRC) $(DUKE3D_SRC) 22OTHER_SRC += $(SDL_SRC) $(DUKE3D_SRC) $(WOLF3D_SRC)
21OTHER_INC += -I$(SDL_SRCDIR)/include 23OTHER_INC += -I$(SDL_SRCDIR)/include
22 24
23# include comes first because of possible system SDL headers taking 25# include comes first because of possible system SDL headers taking
@@ -31,14 +33,18 @@ endif
31 33
32ifndef APP_TYPE 34ifndef APP_TYPE
33 ### no target has a big enough plugin buffer 35 ### no target has a big enough plugin buffer
34 ROCKS += $(SDL_OBJDIR)/duke3d.ovl 36 ROCKS += $(SDL_OBJDIR)/duke3d.ovl $(SDL_OBJDIR)/wolf3d.ovl
35 DUKE3D_OUTLDS = $(SDL_OBJDIR)/duke3d.link 37 DUKE3D_OUTLDS = $(SDL_OBJDIR)/duke3d.link
38 WOLF3D_OUTLDS = $(SDL_OBJDIR)/wolf3d.link
36 SDL_OVLFLAGS = -T$(DUKE3D_OUTLDS) -Wl,--gc-sections -Wl,-Map,$(basename $@).map 39 SDL_OVLFLAGS = -T$(DUKE3D_OUTLDS) -Wl,--gc-sections -Wl,-Map,$(basename $@).map
37else 40else
38 ### simulator 41 ### simulator
39 ROCKS += $(SDL_OBJDIR)/duke3d.rock 42 ROCKS += $(SDL_OBJDIR)/duke3d.rock
43 ROCKS += $(SDL_OBJDIR)/wolf3d.rock
40endif 44endif
41 45
46# Duke3D
47
42$(SDL_OBJDIR)/duke3d.rock: $(SDL_OBJ) $(DUKE3D_OBJ) $(TLSFLIB) 48$(SDL_OBJDIR)/duke3d.rock: $(SDL_OBJ) $(DUKE3D_OBJ) $(TLSFLIB)
43 49
44$(SDL_OBJDIR)/duke3d.refmap: $(SDL_OBJ) $(DUKE3D_OBJ) $(TLSFLIB) 50$(SDL_OBJDIR)/duke3d.refmap: $(SDL_OBJ) $(DUKE3D_OBJ) $(TLSFLIB)
@@ -54,6 +60,25 @@ $(SDL_OBJDIR)/duke3d.ovl: $(SDL_OBJ) $(DUKE3D_OBJ) $(TLSFLIB) $(DUKE3D_OUTLDS)
54 -lgcc $(SDL_OVLFLAGS) 60 -lgcc $(SDL_OVLFLAGS)
55 $(call PRINTS,LD $(@F))$(call objcopy,$(basename $@).elf,$@) 61 $(call PRINTS,LD $(@F))$(call objcopy,$(basename $@).elf,$@)
56 62
63# Wolf3D
64
65$(SDL_OBJDIR)/wolf3d.rock: $(SDL_OBJ) $(WOLF3D_OBJ) $(TLSFLIB)
66
67$(SDL_OBJDIR)/wolf3d.refmap: $(SDL_OBJ) $(WOLF3D_OBJ) $(TLSFLIB)
68
69$(WOLF3D_OUTLDS): $(PLUGIN_LDS) $(SDL_OBJDIR)/wolf3d.refmap
70 $(call PRINTS,PP $(@F))$(call preprocess2file,$<,$@,-DOVERLAY_OFFSET=$(shell \
71 $(TOOLSDIR)/ovl_offset.pl $(SDL_OBJDIR)/wolf3d.refmap))
72
73$(SDL_OBJDIR)/wolf3d.ovl: $(SDL_OBJ) $(WOLF3D_OBJ) $(TLSFLIB) $(WOLF3D_OUTLDS)
74 $(SILENT)$(CC) $(PLUGINFLAGS) -o $(basename $@).elf \
75 $(filter %.o, $^) \
76 $(filter %.a, $+) \
77 -lgcc $(SDL_OVLFLAGS)
78 $(call PRINTS,LD $(@F))$(call objcopy,$(basename $@).elf,$@)
79
80# common
81
57$(SDL_OBJDIR)/%.o: $(SDL_SRCDIR)/%.c $(SDL_SRCDIR)/sdl.make $(BUILDDIR)/sysfont.h 82$(SDL_OBJDIR)/%.o: $(SDL_SRCDIR)/%.c $(SDL_SRCDIR)/sdl.make $(BUILDDIR)/sysfont.h
58 $(SILENT)mkdir -p $(dir $@) 83 $(SILENT)mkdir -p $(dir $@)
59 $(call PRINTS,CC $(subst $(ROOTDIR)/,,$<))$(CC) -I$(dir $<) $(SDLFLAGS) -c $< -o $@ 84 $(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, ...)
21 va_start(ap, fmt); 21 va_start(ap, fmt);
22 char buf[80]; 22 char buf[80];
23 vsnprintf(buf, 80, fmt, ap); 23 vsnprintf(buf, 80, fmt, ap);
24 printf("%s", buf);
24 rb->splash(HZ * 2, buf); 25 rb->splash(HZ * 2, buf);
25 va_end(ap); 26 va_end(ap);
26 27
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 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2017 Franklin Wei
11 *
12 * Duke3D stub loader.
13 *
14 * This program is free software; you can redistribute it and/or
15 * modify it under the terms of the GNU General Public License
16 * as published by the Free Software Foundation; either version 2
17 * of the License, or (at your option) any later version.
18 *
19 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
20 * KIND, either express or implied.
21 *
22 ****************************************************************************/
23#include "plugin.h"
24
25#include "lib/overlay.h"
26
27/* this is the plugin entry point */
28enum plugin_status plugin_start(const void* parameter)
29{
30 return run_overlay(parameter, PLUGIN_GAMES_DIR "/wolf3d.ovl", "Wolf3D");
31}
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)
708The Fabother World team (Fabien Sanglard and others) 708The Fabother World team (Fabien Sanglard and others)
709The sgt-puzzles team (Simon Tatham and others) 709The sgt-puzzles team (Simon Tatham and others)
710The Chocolate Duke Nukem 3D team 710The Chocolate Duke Nukem 3D team
711The Wolfenstein 3D team
712The 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%
105\opt{lcd_non-mono}{\nopt{iriverh10_5gb,ipodmini1g,c200,c200v2,mpiohd200,clipzip,samsungyh820}{ 105\opt{lcd_non-mono}{\nopt{iriverh10_5gb,ipodmini1g,c200,c200v2,mpiohd200,clipzip,samsungyh820}{
106 \input{plugins/superdom.tex}}} 106 \input{plugins/superdom.tex}}}
107 107
108\opt{lcd_color}{\nopt{lowmem,iaudiox5,iriverh300}{\input{plugins/wolf3d.tex}}}
109
108\opt{lcd_bitmap}{\input{plugins/wormlet.tex}} 110\opt{lcd_bitmap}{\input{plugins/wormlet.tex}}
109 111
110\opt{lcd_bitmap}{\input{plugins/xobox.tex}} 112\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 @@
1\subsection{Wolf3D}
2
3This is a port of Wolfenstein 3-D, derived from Wolf4SDL.
4
5\subsubsection{Installation}
6Copy the original data files (e.g. *.WL6) into the
7\fname{/.rockbox/wolf3d/} directory. Sound should work by default.