aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Bridle <ben@derelict.engineering>2025-09-19 13:17:14 +1200
committerBen Bridle <ben@derelict.engineering>2025-09-19 13:32:32 +1200
commitbb1aa5958d1b67707dcf0f6b08bfaf0b408bd46e (patch)
treeb26d07ed58aaf7a5230fc3e28c103d616abfa9b8
parent9612c307f00c4313d73fe0c3a86c05c8d8cd514e (diff)
downloadbedrock-nds-bb1aa5958d1b67707dcf0f6b08bfaf0b408bd46e.zip
Massive rewrite
This commit rewrites the emulator halfway from scratch to make it easier to change and maintain in the future. The emulator core was rewritten to adhere to the released Bedrock specification (earlier versions implemented an older prototype specification, which is no longer relevant). This commit also adds proper support for running multiple concurrent Bedrock instances. This was previously supported in a limited manner for the on-screen keyboard, but now works for any regular program as well, with switching being performed by pressing the L or R bumper buttons. This is disabled by default, as programs will still need to be baked into the emulator and hand-loaded.
-rw-r--r--.gitignore2
-rw-r--r--Makefile11
-rw-r--r--README.md1
-rw-r--r--arm7/source/main.c4
-rw-r--r--arm9/include/alphabet-snake.br.inc71
-rw-r--r--arm9/include/clock.br.inc25
-rw-r--r--arm9/include/cobalt-demo.br.inc2981
-rw-r--r--arm9/include/keyboard.br.inc174
-rw-r--r--arm9/include/system-info.br.inc308
-rw-r--r--arm9/source/bang.c61
-rw-r--r--arm9/source/bang.h52
-rw-r--r--arm9/source/config.h22
-rw-r--r--arm9/source/core.c851
-rw-r--r--arm9/source/core.h104
-rw-r--r--arm9/source/debug.c24
-rw-r--r--arm9/source/debug.h7
-rw-r--r--arm9/source/dev.c213
-rw-r--r--arm9/source/dev.h49
-rw-r--r--arm9/source/devices/clock.c101
-rw-r--r--arm9/source/devices/clock.h36
-rw-r--r--arm9/source/devices/file.c422
-rw-r--r--arm9/source/devices/file.h77
-rw-r--r--arm9/source/devices/input.c93
-rw-r--r--arm9/source/devices/input.h33
-rw-r--r--arm9/source/devices/local.c11
-rw-r--r--arm9/source/devices/local.h8
-rw-r--r--arm9/source/devices/math.c143
-rw-r--r--arm9/source/devices/math.h40
-rw-r--r--arm9/source/devices/memory.c231
-rw-r--r--arm9/source/devices/memory.h60
-rw-r--r--arm9/source/devices/screen.c421
-rw-r--r--arm9/source/devices/screen.h100
-rw-r--r--arm9/source/devices/stream.c40
-rw-r--r--arm9/source/devices/stream.h33
-rw-r--r--arm9/source/devices/system.c37
-rw-r--r--arm9/source/devices/system.h15
-rw-r--r--arm9/source/main.c168
-rw-r--r--arm9/source/main.h11
-rw-r--r--arm9/source/types/circbuf.c10
-rw-r--r--arm9/source/types/circbuf.h18
-rw-r--r--arm9/source/types/pathbuf.c111
-rw-r--r--arm9/source/types/pathbuf.h24
-rw-r--r--arm9/source/types/readbuf.c14
-rw-r--r--arm9/source/types/readbuf.h13
-rw-r--r--arm9/source/types/wakequeue.c30
-rw-r--r--arm9/source/types/wakequeue.h13
-rw-r--r--icon.bmpbin0 -> 274 bytes
47 files changed, 5675 insertions, 1598 deletions
diff --git a/.gitignore b/.gitignore
index 86687ae..3907c54 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,4 @@
/build/
/etc/
-/arm9/include/
*.nds
/libnds/
-/include \ No newline at end of file
diff --git a/Makefile b/Makefile
index 0885ee6..e65026c 100644
--- a/Makefile
+++ b/Makefile
@@ -1,8 +1,9 @@
-BLOCKSDS ?= /opt/blocksds/core
+BLOCKSDS ?= /opt/blocksds/core
-NAME := cobalt
-GAME_TITLE := Cobalt
-GAME_SUBTITLE := Pixel painting studio
-GAME_AUTHOR := https://derelict.engineering
+NAME := bedrock
+GAME_TITLE := bedrock-nds
+GAME_SUBTITLE := Bedrock emulator
+GAME_AUTHOR := https://benbridle.com
+GAME_ICON := icon.bmp
include $(BLOCKSDS)/sys/default_makefiles/rom_arm9arm7/Makefile
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..6a4a6d3
--- /dev/null
+++ b/README.md
@@ -0,0 +1 @@
+Built using BlocksDS version 1.8.0. There's an error about the `fake_heap_start` symbol that appears at version 1.8.1 that prevents the library from being built.
diff --git a/arm7/source/main.c b/arm7/source/main.c
index 78fd061..46e9298 100644
--- a/arm7/source/main.c
+++ b/arm7/source/main.c
@@ -13,10 +13,10 @@ int main(void) {
fifoInit(); // Initialise FIFO system
installSoundFIFO(); // Install FIFO handler for sound
installSystemFIFO(); // Install FIFO handler for sleep mode
- initClockIRQTimer(0); // Read RTC then update seconds with timer 0
+ initClockIRQTimer(0); // Read RTC then update seconds using timer 0
// TODO: Consider writing a custom system FIFO handler to deal with
- // the white screen flash when resuming from sleep.
+ // the white screen flash that occurs when resuming from sleep.
// Start sending input data to ARM9 on vblank.
irqSet(IRQ_VBLANK, vblank_handler);
diff --git a/arm9/include/alphabet-snake.br.inc b/arm9/include/alphabet-snake.br.inc
new file mode 100644
index 0000000..892a548
--- /dev/null
+++ b/arm9/include/alphabet-snake.br.inc
@@ -0,0 +1,71 @@
+0xE8, 0x00, 0x18, 0x42, 0x45, 0x44, 0x52, 0x4F, 0x43, 0x4B, 0x03, 0x28, 0x03, 0x37, 0x03, 0x42,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x02, 0x35, 0x6F, 0x58, 0x61, 0x1F, 0x05,
+0x6F, 0x58, 0x61, 0x2F, 0x90, 0x6F, 0x58, 0x61, 0x3F, 0xE2, 0x6F, 0x58, 0x61, 0x40, 0xD3, 0x6F,
+0x58, 0x61, 0x52, 0xAF, 0x6F, 0x58, 0x61, 0x68, 0x79, 0x6F, 0x58, 0x61, 0x7F, 0x7A, 0x6F, 0x58,
+0x61, 0x87, 0x25, 0x6F, 0x58, 0x61, 0xFF, 0x00, 0x2F, 0x84, 0x2F, 0x82, 0x21, 0x00, 0x2E, 0x02,
+0x36, 0x04, 0x2B, 0x00, 0x70, 0x2E, 0x02, 0x36, 0x08, 0x2B, 0x00, 0x77, 0x2E, 0x02, 0x36, 0x03,
+0x2B, 0x00, 0xBA, 0x61, 0x00, 0x02, 0x6F, 0x38, 0x61, 0x1C, 0x80, 0x6F, 0x00, 0x28, 0x00, 0x4E,
+0x6E, 0x40, 0x6E, 0x42, 0x28, 0x00, 0xA2, 0x2E, 0x82, 0x1F, 0x29, 0x04, 0x6A, 0x2E, 0x84, 0x36,
+0x04, 0x2B, 0x00, 0x8C, 0x61, 0xFF, 0x00, 0x2F, 0x84, 0x2F, 0x82, 0x88, 0x2E, 0x84, 0x35, 0x03,
+0x29, 0x04, 0x6A, 0x6E, 0x86, 0x6E, 0x86, 0x21, 0x00, 0x2F, 0x84, 0x21, 0xFF, 0x2F, 0x82, 0x28,
+0x00, 0xA2, 0xC1, 0xC1, 0x25, 0x00, 0x78, 0x02, 0x70, 0x03, 0x59, 0xC3, 0xCD, 0x70, 0x00, 0x02,
+0xC1, 0xCD, 0x12, 0x04, 0x34, 0x44, 0x1E, 0x28, 0x00, 0xBA, 0x21, 0x20, 0x2F, 0x5E, 0x21, 0x44,
+0x13, 0x25, 0x00, 0x78, 0x02, 0x70, 0x03, 0x59, 0x44, 0x4C, 0x6F, 0x50, 0x70, 0x00, 0x02, 0x4C,
+0x6F, 0x52, 0x25, 0x00, 0x78, 0x03, 0x70, 0x01, 0x08, 0x44, 0x4C, 0x6F, 0x5C, 0x70, 0x00, 0x02,
+0x44, 0x4C, 0x6F, 0x5C, 0x70, 0x00, 0x02, 0x44, 0x4C, 0x6F, 0x5C, 0x70, 0x00, 0x02, 0x4C, 0x6F,
+0x5C, 0x6E, 0x36, 0x79, 0x03, 0x06, 0x02, 0x05, 0x11, 0x3E, 0x07, 0x12, 0x2F, 0x5A, 0x21, 0x18,
+0x2F, 0x5E, 0x04, 0x2A, 0x00, 0xC0, 0x02, 0x88, 0x60, 0x90, 0x90, 0x90, 0x60, 0x00, 0x00, 0x00,
+0x40, 0xC0, 0x40, 0x40, 0xE0, 0x00, 0x00, 0x00, 0x60, 0x90, 0x20, 0x40, 0xF0, 0x00, 0x00, 0x00,
+0x60, 0x90, 0x20, 0x90, 0x60, 0x00, 0x00, 0x00, 0x20, 0x60, 0xA0, 0xF0, 0x20, 0x00, 0x00, 0x00,
+0xF0, 0x80, 0xF0, 0x10, 0xE0, 0x00, 0x00, 0x00, 0x60, 0x80, 0xE0, 0x90, 0x60, 0x00, 0x00, 0x00,
+0xF0, 0x10, 0x20, 0x40, 0x40, 0x00, 0x00, 0x00, 0x60, 0x90, 0x60, 0x90, 0x60, 0x00, 0x00, 0x00,
+0x60, 0x90, 0x70, 0x10, 0x60, 0x00, 0x00, 0x00, 0x60, 0x90, 0x90, 0xF0, 0x90, 0x00, 0x00, 0x00,
+0xE0, 0x90, 0xE0, 0x90, 0xF0, 0x00, 0x00, 0x00, 0x60, 0x90, 0x80, 0x90, 0x60, 0x00, 0x00, 0x00,
+0xE0, 0x90, 0x90, 0x90, 0xE0, 0x00, 0x00, 0x00, 0xF0, 0x80, 0xE0, 0x80, 0xF0, 0x00, 0x00, 0x00,
+0xF0, 0x80, 0xE0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x70, 0x80, 0xB0, 0x90, 0x70, 0x00, 0x00, 0x00,
+0x90, 0x90, 0xF0, 0x90, 0x90, 0x00, 0x00, 0x00, 0xE0, 0x40, 0x40, 0x40, 0xE0, 0x00, 0x00, 0x00,
+0x70, 0x10, 0x10, 0x90, 0x60, 0x00, 0x00, 0x00, 0x90, 0xA0, 0xC0, 0xA0, 0x90, 0x00, 0x00, 0x00,
+0x80, 0x80, 0x80, 0x80, 0xF0, 0x00, 0x00, 0x00, 0x88, 0xD8, 0xA8, 0x88, 0x88, 0x00, 0x00, 0x00,
+0x90, 0xD0, 0xB0, 0x90, 0x90, 0x00, 0x00, 0x00, 0x60, 0x90, 0x90, 0x90, 0x60, 0x00, 0x00, 0x00,
+0xE0, 0x90, 0x90, 0xE0, 0x80, 0x00, 0x00, 0x00, 0x60, 0x90, 0x90, 0xB0, 0x70, 0x00, 0x00, 0x00,
+0xE0, 0x90, 0x90, 0xE0, 0x90, 0x00, 0x00, 0x00, 0x70, 0x80, 0x60, 0x10, 0xE0, 0x00, 0x00, 0x00,
+0xF8, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x90, 0x90, 0x90, 0x90, 0x60, 0x00, 0x00, 0x00,
+0x88, 0x88, 0x50, 0x50, 0x20, 0x00, 0x00, 0x00, 0x88, 0x88, 0xA8, 0xA8, 0x50, 0x00, 0x00, 0x00,
+0x90, 0x90, 0x60, 0x90, 0x90, 0x00, 0x00, 0x00, 0x88, 0x88, 0x50, 0x20, 0x20, 0x00, 0x00, 0x00,
+0xF0, 0x10, 0x60, 0x80, 0xF0, 0x00, 0x00, 0x00, 0xC0, 0x80, 0x80, 0x80, 0xC0, 0x00, 0x00, 0x00,
+0x80, 0x80, 0x40, 0x20, 0x20, 0x00, 0x00, 0x00, 0xC0, 0x40, 0x40, 0x40, 0xC0, 0x00, 0x00, 0x00,
+0x40, 0xE0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00,
+0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x90, 0x90, 0x70, 0x00, 0x00, 0x00,
+0x80, 0xE0, 0x90, 0x90, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x60, 0x80, 0x80, 0x60, 0x00, 0x00, 0x00,
+0x10, 0x70, 0x90, 0x90, 0x70, 0x00, 0x00, 0x00, 0x00, 0x60, 0xF0, 0x80, 0x70, 0x00, 0x00, 0x00,
+0x20, 0x40, 0xE0, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x70, 0x90, 0x70, 0x10, 0xE0, 0x00, 0x00,
+0x80, 0xE0, 0x90, 0x90, 0x90, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00,
+0x40, 0x00, 0x40, 0x40, 0x40, 0x80, 0x00, 0x00, 0x80, 0x80, 0xE0, 0xE0, 0x90, 0x00, 0x00, 0x00,
+0x80, 0x80, 0x80, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x50, 0xA8, 0xA8, 0x88, 0x00, 0x00, 0x00,
+0x00, 0xE0, 0x90, 0x90, 0x90, 0x00, 0x00, 0x00, 0x00, 0x60, 0x90, 0x90, 0x60, 0x00, 0x00, 0x00,
+0x00, 0xE0, 0x90, 0x90, 0xE0, 0x80, 0x00, 0x00, 0x00, 0x70, 0x90, 0x90, 0x70, 0x18, 0x00, 0x00,
+0x00, 0xA0, 0xD0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x60, 0xE0, 0x10, 0xE0, 0x00, 0x00, 0x00,
+0x40, 0xE0, 0x40, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x90, 0x90, 0x90, 0x70, 0x00, 0x00, 0x00,
+0x00, 0x90, 0x90, 0x50, 0x60, 0x00, 0x00, 0x00, 0x00, 0x88, 0xA8, 0xA8, 0x50, 0x00, 0x00, 0x00,
+0x00, 0x90, 0x60, 0x20, 0x90, 0x00, 0x00, 0x00, 0x00, 0x90, 0x90, 0x70, 0x10, 0xE0, 0x00, 0x00,
+0x00, 0xF0, 0x20, 0x40, 0xF0, 0x00, 0x00, 0x00, 0x41, 0x6C, 0x70, 0x68, 0x61, 0x62, 0x65, 0x74,
+0x20, 0x73, 0x6E, 0x61, 0x6B, 0x65, 0x00, 0x42, 0x65, 0x6E, 0x20, 0x42, 0x72, 0x69, 0x64, 0x6C,
+0x65, 0x00, 0x4D, 0x6F, 0x75, 0x73, 0x65, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x73, 0x63, 0x72, 0x65,
+0x65, 0x6E, 0x20, 0x64, 0x65, 0x6D, 0x6F, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x41, 0x0A, 0x88,
diff --git a/arm9/include/clock.br.inc b/arm9/include/clock.br.inc
new file mode 100644
index 0000000..512e3e1
--- /dev/null
+++ b/arm9/include/clock.br.inc
@@ -0,0 +1,25 @@
+0xE8, 0x00, 0x18, 0x42, 0x45, 0x44, 0x52, 0x4F, 0x43, 0x4B, 0x01, 0x53, 0x01, 0x63, 0x01, 0x6E,
+0x01, 0x85, 0x01, 0x87, 0x00, 0x00, 0x00, 0x00, 0x61, 0x7F, 0xFF, 0x6F, 0x5C, 0x61, 0x7F, 0x3F,
+0x6F, 0x5C, 0x61, 0x00, 0x00, 0x6F, 0x5C, 0x61, 0x00, 0x00, 0x6F, 0x5C, 0x61, 0x00, 0x00, 0x6F,
+0x58, 0x61, 0x12, 0xF7, 0x6F, 0x58, 0x61, 0x20, 0x10, 0x6F, 0x58, 0x61, 0x00, 0x68, 0x6F, 0x54,
+0x61, 0x00, 0x24, 0x6F, 0x56, 0x61, 0x00, 0x0A, 0x6F, 0x22, 0x6E, 0x54, 0x79, 0x01, 0x71, 0x00,
+0x32, 0x6F, 0x50, 0x6E, 0x56, 0x79, 0x01, 0x71, 0x00, 0x10, 0x6F, 0x52, 0x21, 0x20, 0x2F, 0x5E,
+0x2E, 0x33, 0x29, 0x00, 0x8B, 0x21, 0x09, 0x2F, 0x5F, 0x2E, 0x34, 0x29, 0x00, 0x8B, 0x61, 0xB4,
+0x4A, 0x29, 0x00, 0x97, 0x61, 0x47, 0x83, 0x29, 0x00, 0x97, 0x21, 0x3C, 0x2E, 0x35, 0x11, 0x21,
+0x00, 0x6F, 0x38, 0x61, 0x14, 0x00, 0x6F, 0x00, 0x28, 0x00, 0x4A, 0x2F, 0x21, 0x2E, 0x2D, 0x29,
+0x00, 0xA9, 0x2E, 0x2F, 0x28, 0x00, 0xA9, 0x2F, 0x5F, 0x2F, 0x5F, 0x61, 0x03, 0x02, 0x6F, 0x5E,
+0x21, 0x42, 0x2F, 0x5F, 0x21, 0x61, 0x2F, 0x5E, 0x88, 0x26, 0x00, 0x70, 0x01, 0x49, 0x0C, 0x29,
+0x01, 0x40, 0x21, 0x05, 0x2F, 0x5F, 0x61, 0x18, 0x07, 0x6F, 0x5E, 0x61, 0x19, 0x89, 0x6F, 0x5E,
+0x29, 0x01, 0x40, 0x21, 0x42, 0x2F, 0x5F, 0x61, 0x1C, 0x81, 0x6F, 0x5E, 0x21, 0x46, 0x2F, 0x5F,
+0x61, 0x1D, 0xC6, 0x6F, 0x5E, 0x29, 0x01, 0x40, 0x21, 0x0C, 0x2F, 0x5F, 0x61, 0x1E, 0x81, 0x6F,
+0x5E, 0x21, 0x46, 0x2F, 0x5F, 0x61, 0x1F, 0x89, 0x6F, 0x5E, 0x29, 0x01, 0x40, 0x21, 0x42, 0x2F,
+0x5F, 0x61, 0x1A, 0x06, 0x6F, 0x5E, 0x21, 0x44, 0x2F, 0x5F, 0x61, 0x19, 0x89, 0x6F, 0x5E, 0x29,
+0x01, 0x40, 0x21, 0x42, 0x2F, 0x5F, 0x61, 0x1C, 0x81, 0x6F, 0x5E, 0x21, 0x46, 0x2F, 0x5F, 0x61,
+0x1D, 0xC6, 0x6F, 0x5E, 0x29, 0x01, 0x40, 0x21, 0x0C, 0x2F, 0x5F, 0x61, 0x1E, 0x81, 0x6F, 0x5E,
+0x21, 0x46, 0x2F, 0x5F, 0x61, 0x1F, 0x89, 0x6F, 0x5E, 0x29, 0x01, 0x40, 0x21, 0x42, 0x2F, 0x5F,
+0x61, 0x1A, 0x07, 0x6F, 0x5E, 0x61, 0x1B, 0x0E, 0x6F, 0x5E, 0x21, 0xD8, 0x2F, 0x5F, 0x02, 0x88,
+0x39, 0x01, 0x04, 0x3E, 0x01, 0x12, 0x2F, 0x5A, 0x88, 0x10, 0xB6, 0x44, 0x24, 0xA2, 0x28, 0x08,
+0xB4, 0x00, 0x20, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x77, 0x61, 0x76, 0x65, 0x20, 0x63, 0x6C, 0x6F,
+0x63, 0x6B, 0x00, 0x42, 0x65, 0x6E, 0x20, 0x42, 0x72, 0x69, 0x64, 0x6C, 0x65, 0x00, 0x4D, 0x69,
+0x6E, 0x69, 0x6D, 0x61, 0x6C, 0x20, 0x64, 0x69, 0x67, 0x69, 0x74, 0x61, 0x6C, 0x20, 0x63, 0x6C,
+0x6F, 0x63, 0x6B, 0x2E, 0x00, 0x00, 0x00, 0x02, 0xF7,
diff --git a/arm9/include/cobalt-demo.br.inc b/arm9/include/cobalt-demo.br.inc
new file mode 100644
index 0000000..6ce198c
--- /dev/null
+++ b/arm9/include/cobalt-demo.br.inc
@@ -0,0 +1,2981 @@
+0xE8, 0x00, 0x18, 0x42, 0x45, 0x44, 0x52, 0x4F, 0x43, 0x4B, 0x01, 0xE5, 0x01, 0xF2, 0x01, 0xFD,
+0x02, 0x13, 0x02, 0x15, 0x02, 0x17, 0x00, 0x00, 0x61, 0xFF, 0xFF, 0x6F, 0x10, 0x29, 0x00, 0x23,
+0x28, 0x3F, 0xAB, 0xA9, 0x00, 0x32, 0x62, 0x65, 0x64, 0x72, 0x6F, 0x63, 0x6B, 0x2D, 0x6E, 0x64,
+0x73, 0x00, 0x29, 0xB7, 0x7C, 0x29, 0xB8, 0xF5, 0x21, 0x00, 0x04, 0x2D, 0x00, 0xAA, 0x04, 0x2D,
+0x00, 0xAB, 0x2D, 0x00, 0xAC, 0x88, 0x21, 0xFF, 0x2F, 0x4A, 0x88, 0x3E, 0x01, 0x35, 0x00, 0x81,
+0x61, 0x00, 0x03, 0x61, 0x00, 0x01, 0x03, 0x29, 0xB7, 0x70, 0x38, 0x01, 0x70, 0x00, 0x91, 0x4C,
+0x7E, 0x0F, 0xFF, 0x7C, 0x70, 0x00, 0x6F, 0x58, 0x61, 0x00, 0x09, 0x61, 0x00, 0x08, 0x01, 0x29,
+0xB7, 0x70, 0x38, 0x01, 0x70, 0x00, 0x91, 0x4C, 0x7E, 0x0F, 0xFF, 0x7C, 0x50, 0x00, 0x6F, 0x58,
+0x88, 0xC0, 0x00, 0x00, 0x00, 0xB0, 0x00, 0xA0, 0x00, 0x10, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x21, 0x00, 0x2D, 0xC6, 0x83, 0x61, 0x00, 0xAF, 0x61, 0x00, 0xD1, 0x29, 0xB7, 0x22, 0x61,
+0x01, 0x0A, 0x61, 0xC5, 0x83, 0x61, 0x00, 0xC0, 0x29, 0xB6, 0xB1, 0x61, 0x00, 0xFA, 0x61, 0x00,
+0x91, 0x61, 0x00, 0x10, 0x29, 0xB6, 0xB1, 0x28, 0x14, 0x07, 0x02, 0x68, 0x1F, 0xFF, 0x20, 0x9F,
+0x3F, 0x80, 0x42, 0x22, 0x5F, 0xFF, 0x6E, 0x44, 0x7F, 0x80, 0x80, 0x22, 0x92, 0x32, 0xA2, 0x62,
+0xB6, 0xA4, 0xC3, 0x68, 0xD8, 0xDF, 0xEF, 0x68, 0xFF, 0xD2, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03,
+0x02, 0x00, 0x07, 0x03, 0x06, 0x05, 0x02, 0x04, 0x00, 0x00, 0x01, 0x04, 0x07, 0x01, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x01, 0x00, 0x07, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x38, 0x7C, 0x7C, 0x7C, 0x38,
+0x00, 0x00, 0x10, 0x38, 0x7C, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x38, 0x7C, 0xFE, 0xFE, 0xFE, 0x7C,
+0x38, 0x00, 0x7C, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x7C, 0x00, 0x00, 0x0C, 0x18, 0x30, 0x60, 0xC0,
+0x00, 0x00, 0x28, 0x00, 0x40, 0x10, 0x00, 0x02, 0xA0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x44, 0xAA, 0x00, 0xAA, 0x44,
+0xAA, 0x00, 0x88, 0x11, 0x22, 0x44, 0x88, 0x11, 0x22, 0x44, 0x22, 0x11, 0x88, 0x44, 0x22, 0x11,
+0x88, 0x44, 0x00, 0x55, 0x00, 0x55, 0x00, 0x55, 0x00, 0x55, 0x00, 0x44, 0x00, 0x11, 0x00, 0x44,
+0x00, 0x11, 0x47, 0xA6, 0x01, 0xD2, 0xCE, 0x3B, 0x15, 0xC1, 0x29, 0x04, 0x9C, 0x45, 0x6C, 0x00,
+0xBD, 0x56, 0x81, 0x44, 0x6C, 0x00, 0xBF, 0x56, 0x81, 0x6D, 0x00, 0xBF, 0x6D, 0x00, 0xBD, 0x41,
+0x1E, 0x1F, 0x28, 0xB8, 0xF5, 0x43, 0x6F, 0x62, 0x61, 0x6C, 0x74, 0x2F, 0x32, 0x2E, 0x30, 0x2E,
+0x32, 0x00, 0x42, 0x65, 0x6E, 0x20, 0x42, 0x72, 0x69, 0x64, 0x6C, 0x65, 0x00, 0x50, 0x69, 0x78,
+0x65, 0x6C, 0x20, 0x70, 0x61, 0x69, 0x6E, 0x74, 0x69, 0x6E, 0x67, 0x20, 0x73, 0x74, 0x75, 0x64,
+0x69, 0x6F, 0x00, 0x20, 0x9F, 0x1F, 0xFF, 0xE0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x10, 0x28, 0x38, 0x38, 0x38, 0x38, 0x0F, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00,
+0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x38, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x01,
+0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x06, 0x80, 0x80, 0xE0, 0xFF, 0xFD,
+0x75, 0x55, 0xAA, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x0F, 0xFF, 0x42,
+0x24, 0x42, 0xFF, 0x42, 0x24, 0x00, 0x00, 0x00, 0x03, 0x28, 0x68, 0xE8, 0x68, 0x28, 0x00, 0x00,
+0x00, 0x33, 0xE7, 0xC3, 0xA5, 0x00, 0x00, 0xA5, 0xC3, 0xE7, 0x23, 0xD8, 0x20, 0x20, 0x20, 0x20,
+0x20, 0x20, 0xD8, 0x06, 0x18, 0x74, 0xCA, 0xC5, 0xA1, 0x92, 0x0C, 0x00, 0x20, 0x60, 0xE0, 0x60,
+0x20, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x61, 0x02, 0xB0, 0x61,
+0x02, 0xB4, 0x2E, 0x97, 0x29, 0xB7, 0x70, 0x09, 0x29, 0xAD, 0x82, 0x21, 0x18, 0x2F, 0x5E, 0x88,
+0x61, 0x02, 0xD6, 0x88, 0x61, 0x02, 0xDE, 0x21, 0x00, 0x2F, 0x97, 0x2E, 0x91, 0x1F, 0x29, 0xB8,
+0xF5, 0x42, 0x61, 0x02, 0xE6, 0x61, 0x02, 0xEE, 0x29, 0x02, 0xF6, 0x29, 0xB7, 0x70, 0x21, 0x00,
+0x2F, 0x95, 0x45, 0x6F, 0x9A, 0x88, 0xC0, 0xFC, 0xFC, 0xFC, 0xF8, 0x00, 0x00, 0x00, 0x30, 0x48,
+0x78, 0x68, 0x78, 0x00, 0x00, 0x00, 0xF0, 0xA8, 0xD8, 0xA8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x2E, 0x95, 0x29, 0xB8, 0xF3, 0x02, 0x64, 0x00,
+0x00, 0x6F, 0x98, 0x6F, 0x9A, 0x61, 0x00, 0x10, 0x61, 0x00, 0x00, 0xA1, 0xFF, 0x6E, 0x92, 0x7E,
+0xF0, 0x00, 0x45, 0x70, 0x00, 0x81, 0x4C, 0x56, 0x81, 0x9E, 0x70, 0x00, 0x02, 0x57, 0x2A, 0x03,
+0x0D, 0x42, 0x42, 0x01, 0x88, 0x21, 0x08, 0x13, 0x25, 0x00, 0x78, 0x03, 0x44, 0x70, 0xC5, 0xC3,
+0x46, 0x70, 0xC6, 0x43, 0x29, 0xAE, 0x03, 0x04, 0x2A, 0x03, 0x27, 0x02, 0x88, 0x61, 0x04, 0x06,
+0x2C, 0x00, 0xB4, 0x29, 0xB7, 0x76, 0x21, 0x00, 0x2C, 0xC5, 0x9A, 0x70, 0xC5, 0x9B, 0x0C, 0x30,
+0x08, 0x2C, 0x00, 0xB3, 0x2C, 0x00, 0xB1, 0x1E, 0x29, 0xB7, 0x76, 0x88, 0x6C, 0x00, 0xA1, 0x70,
+0x80, 0x00, 0x6E, 0x54, 0x70, 0x7F, 0xE0, 0x45, 0x45, 0x54, 0x29, 0xB7, 0x70, 0x6C, 0x00, 0xA5,
+0x2C, 0x00, 0xB0, 0x58, 0x66, 0x80, 0x20, 0x51, 0x45, 0x45, 0x55, 0x29, 0xB7, 0x70, 0x70, 0x80,
+0x00, 0x6D, 0x00, 0xA1, 0x6C, 0x00, 0xA3, 0x70, 0x80, 0x00, 0x6E, 0x56, 0x70, 0x7F, 0xE0, 0x45,
+0x45, 0x54, 0x29, 0xB7, 0x70, 0x6C, 0x00, 0xA7, 0x2C, 0x00, 0xB0, 0x58, 0x66, 0x80, 0x20, 0x51,
+0x45, 0x45, 0x55, 0x29, 0xB7, 0x70, 0x70, 0x80, 0x00, 0x6D, 0x00, 0xA3, 0x88, 0x6E, 0x54, 0x79,
+0x01, 0x6C, 0x00, 0xA5, 0x79, 0x01, 0x51, 0x6D, 0x00, 0xA1, 0x6E, 0x56, 0x79, 0x01, 0x6C, 0x00,
+0xA7, 0x79, 0x01, 0x51, 0x6D, 0x00, 0xA3, 0x88, 0x6C, 0xBA, 0x5F, 0x6C, 0xBA, 0x61, 0x51, 0x6C,
+0x00, 0xA1, 0x50, 0x6D, 0x00, 0xA1, 0x6C, 0xBA, 0x63, 0x6C, 0xBA, 0x65, 0x51, 0x6C, 0x00, 0xA3,
+0x50, 0x6D, 0x00, 0xA3, 0x29, 0x03, 0x5C, 0x21, 0x83, 0x28, 0x2D, 0xE8, 0x04, 0x36, 0x02, 0x2B,
+0x03, 0xF8, 0x36, 0x03, 0x2B, 0xB0, 0x1A, 0x88, 0x21, 0xA0, 0x2F, 0x5E, 0x29, 0x03, 0xC8, 0x2C,
+0x00, 0xAA, 0x2B, 0x2D, 0xB7, 0x88, 0x81, 0x6E, 0x40, 0x6E, 0x42, 0x61, 0x04, 0x61, 0x61, 0x04,
+0x27, 0x01, 0x34, 0x80, 0x29, 0xB7, 0x70, 0x08, 0x6E, 0x40, 0x6E, 0x42, 0x28, 0x04, 0x27, 0x6E,
+0x54, 0x79, 0x01, 0x6E, 0x56, 0x79, 0x01, 0x6D, 0x04, 0x46, 0x6D, 0x04, 0x3B, 0x61, 0x00, 0xB0,
+0x61, 0x03, 0x01, 0x29, 0xB8, 0x8A, 0x6C, 0x00, 0xA1, 0x44, 0x71, 0x00, 0x00, 0x50, 0x6D, 0x00,
+0xA1, 0x6C, 0x00, 0xA3, 0x44, 0x71, 0x00, 0x00, 0x50, 0x6D, 0x00, 0xA3, 0x29, 0xB0, 0x1A, 0x28,
+0x0B, 0x1B, 0x6E, 0x40, 0x6E, 0x42, 0x28, 0x04, 0x61, 0x6E, 0x54, 0x79, 0x01, 0x6E, 0x56, 0x79,
+0x01, 0x6D, 0x04, 0x88, 0x6D, 0x04, 0x75, 0x61, 0x00, 0xB0, 0x61, 0x03, 0xFF, 0x29, 0xB8, 0x8A,
+0x6C, 0x00, 0xA1, 0x44, 0x71, 0x00, 0x00, 0x44, 0x7E, 0x80, 0x00, 0x46, 0x79, 0x01, 0x5C, 0x51,
+0x6D, 0x00, 0xA1, 0x6C, 0x00, 0xA3, 0x44, 0x71, 0x00, 0x00, 0x44, 0x7E, 0x80, 0x00, 0x46, 0x79,
+0x01, 0x5C, 0x51, 0x6D, 0x00, 0xA3, 0x29, 0xB0, 0x1A, 0x28, 0x0B, 0x1B, 0x29, 0x04, 0xA8, 0x46,
+0x71, 0x00, 0x03, 0x46, 0x71, 0x00, 0x03, 0x88, 0x6E, 0x40, 0x6E, 0x42, 0x46, 0x6C, 0x00, 0xA1,
+0x51, 0x29, 0x04, 0xBD, 0x46, 0x6C, 0x00, 0xA3, 0x51, 0x29, 0x04, 0xBD, 0x88, 0x44, 0x74, 0x80,
+0x00, 0x83, 0x2A, 0x04, 0xC7, 0x5F, 0x52, 0x2C, 0x00, 0xB0, 0x59, 0x01, 0x2A, 0x04, 0xD1, 0x5F,
+0x52, 0x88, 0x61, 0x04, 0xD8, 0x28, 0xB1, 0xD2, 0x29, 0x03, 0x25, 0x61, 0x04, 0xE4, 0x61, 0x00,
+0x00, 0x28, 0xB1, 0x34, 0x6E, 0x54, 0x44, 0x71, 0x00, 0x6F, 0x6D, 0x06, 0x74, 0x44, 0x71, 0x00,
+0x60, 0x6D, 0x06, 0x7C, 0x44, 0x71, 0x00, 0x51, 0x6D, 0x06, 0x84, 0x44, 0x71, 0x00, 0x3E, 0x6D,
+0x06, 0x8C, 0x44, 0x71, 0x00, 0x2F, 0x6D, 0x06, 0x94, 0x44, 0x71, 0x00, 0x1C, 0x6D, 0x06, 0x9C,
+0x44, 0x71, 0x00, 0x10, 0x6D, 0x06, 0xA4, 0x44, 0x71, 0x00, 0x20, 0x6D, 0x06, 0xAC, 0x71, 0x00,
+0x27, 0x44, 0x6D, 0x06, 0xB4, 0x71, 0x00, 0x0C, 0x44, 0x6D, 0x06, 0xBC, 0x71, 0x00, 0x0C, 0x44,
+0x6D, 0x06, 0xC4, 0x71, 0x00, 0x0C, 0x44, 0x6D, 0x06, 0xCC, 0x71, 0x00, 0x1F, 0x6D, 0x06, 0xD4,
+0x6E, 0x56, 0x44, 0x71, 0x00, 0x10, 0x44, 0x6D, 0x06, 0xA6, 0x44, 0x6D, 0x06, 0xAE, 0x44, 0x6D,
+0x06, 0xB6, 0x44, 0x6D, 0x06, 0xBE, 0x44, 0x6D, 0x06, 0xC6, 0x44, 0x6D, 0x06, 0xCE, 0x53, 0x6D,
+0x06, 0xD6, 0x79, 0x01, 0x6C, 0x06, 0x72, 0x79, 0x01, 0x51, 0x05, 0x34, 0x80, 0x04, 0x5E, 0x44,
+0x6D, 0x06, 0x66, 0x6D, 0x06, 0x6E, 0x61, 0x00, 0x1B, 0x61, 0x00, 0x05, 0x2C, 0x0E, 0x3A, 0x29,
+0xB7, 0x70, 0x6D, 0x06, 0x68, 0x61, 0x00, 0x07, 0x61, 0x00, 0xB6, 0x2C, 0x0E, 0x3A, 0x29, 0xB7,
+0x70, 0x6D, 0x06, 0x6A, 0x61, 0x00, 0x00, 0x61, 0xFF, 0xEA, 0x2C, 0x0E, 0x3A, 0x29, 0xB7, 0x70,
+0x6D, 0x06, 0x6C, 0x61, 0x00, 0x0C, 0x61, 0x00, 0x00, 0x2C, 0x00, 0xB1, 0x29, 0xB7, 0x70, 0x44,
+0x6D, 0x06, 0xC0, 0x44, 0x6D, 0x06, 0xC8, 0x6D, 0x06, 0xD0, 0x61, 0x00, 0x1C, 0x61, 0x00, 0x00,
+0x2C, 0x00, 0xB3, 0x2C, 0x00, 0xB1, 0x1E, 0x29, 0xB7, 0x70, 0x6D, 0x06, 0xD8, 0x61, 0x06, 0xE4,
+0x6D, 0xBB, 0xFF, 0x61, 0x06, 0x21, 0x29, 0xB5, 0xF7, 0x61, 0x06, 0x42, 0x29, 0xB6, 0x1B, 0x61,
+0x03, 0xEC, 0x6D, 0xBB, 0x33, 0x61, 0x0D, 0x03, 0x6D, 0xBB, 0x35, 0x61, 0x04, 0x06, 0x6D, 0xBB,
+0x95, 0x61, 0x0C, 0xAA, 0x6D, 0xBA, 0xF1, 0x61, 0x0C, 0x9C, 0x6D, 0xBA, 0xEF, 0x61, 0x0D, 0xAA,
+0x6D, 0xBB, 0xFB, 0x61, 0x14, 0x49, 0x6D, 0xBC, 0x43, 0x61, 0x0E, 0x3B, 0x6D, 0xBC, 0x45, 0x61,
+0x0E, 0x3B, 0x6D, 0xBC, 0x47, 0x61, 0xB1, 0xE8, 0x6D, 0xBC, 0x6B, 0x61, 0x06, 0x63, 0x28, 0xB6,
+0x48, 0x10, 0x07, 0xC9, 0x07, 0xFB, 0x08, 0x3C, 0x08, 0x62, 0x08, 0x7B, 0x08, 0xA1, 0x08, 0xCA,
+0x08, 0xF3, 0x09, 0x45, 0x09, 0x64, 0x09, 0x85, 0x09, 0xDD, 0x09, 0xEE, 0x0A, 0x03, 0x0A, 0x44,
+0x0A, 0x94, 0x10, 0x0C, 0xC0, 0x0C, 0xCF, 0x0D, 0x09, 0x0D, 0x0F, 0x0D, 0x15, 0x0D, 0x1B, 0x0D,
+0x21, 0x0D, 0x27, 0x0D, 0x3F, 0x0D, 0x45, 0x0D, 0x47, 0x0D, 0x56, 0x0D, 0x5C, 0x0D, 0x6B, 0x0D,
+0x7A, 0x0D, 0xA0, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x1B, 0x00, 0xBC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x0F, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x0F, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x1C, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00,
+0x7F, 0xFF, 0x7F, 0xFF, 0x29, 0x2D, 0xB7, 0x6C, 0x06, 0x6C, 0x53, 0x6F, 0x50, 0x6C, 0x06, 0x6E,
+0x6F, 0x52, 0x6C, 0x06, 0x70, 0x52, 0x6C, 0x06, 0x72, 0x21, 0x01, 0x29, 0xAE, 0xE8, 0x2C, 0x00,
+0xAF, 0x1F, 0x2A, 0x07, 0x22, 0xA9, 0x07, 0x10, 0x38, 0x7C, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x00,
+0x29, 0xAD, 0x82, 0x64, 0x00, 0x02, 0x6F, 0x50, 0x6F, 0x52, 0x21, 0x03, 0x2F, 0x5A, 0x21, 0x18,
+0x2F, 0x5E, 0x6C, 0x06, 0x74, 0x6F, 0x50, 0x61, 0x00, 0x03, 0x6F, 0x52, 0x61, 0x00, 0x2E, 0x29,
+0x07, 0xB1, 0x21, 0x0F, 0x2F, 0x5F, 0x29, 0x07, 0xC1, 0x21, 0x0F, 0x2F, 0x5F, 0x29, 0x07, 0xC1,
+0x6C, 0x06, 0x8C, 0x6F, 0x50, 0x61, 0x00, 0x1F, 0x29, 0x07, 0xB1, 0x21, 0x0F, 0x2F, 0x5F, 0x29,
+0x07, 0xC1, 0x6C, 0x06, 0x9C, 0x6F, 0x50, 0x61, 0x00, 0x19, 0x29, 0x07, 0xB1, 0x6C, 0x06, 0xB4,
+0x6F, 0x50, 0x6C, 0x06, 0xB6, 0x6F, 0x52, 0x61, 0x00, 0x14, 0x61, 0x00, 0x0D, 0x21, 0x01, 0x29,
+0xAE, 0xE8, 0x6C, 0x06, 0xA4, 0x6F, 0x50, 0x61, 0x00, 0x0D, 0x29, 0x07, 0xB9, 0x2C, 0x00, 0xB1,
+0x29, 0xB8, 0xF5, 0x6C, 0x06, 0xB4, 0x71, 0x00, 0x24, 0x6F, 0x50, 0x61, 0x00, 0x38, 0x61, 0x00,
+0x0D, 0x21, 0x01, 0x29, 0xAE, 0xE8, 0x2C, 0x00, 0xB3, 0x29, 0xB8, 0xF5, 0x6C, 0x06, 0xD4, 0x6F,
+0x50, 0x6C, 0x06, 0xD6, 0x6F, 0x52, 0x6C, 0x06, 0xD8, 0x61, 0x00, 0x0F, 0x21, 0x01, 0x28, 0xAE,
+0xE8, 0x61, 0x00, 0x0E, 0x21, 0x01, 0x28, 0xAD, 0x00, 0x61, 0x00, 0x0D, 0x21, 0x01, 0x28, 0xAD,
+0x00, 0x61, 0x00, 0x0D, 0x21, 0x01, 0x28, 0xAD, 0xEF, 0x6C, 0x06, 0x64, 0x6C, 0x06, 0x68, 0x79,
+0x01, 0x50, 0x53, 0x6F, 0x50, 0x6C, 0x06, 0x66, 0x6C, 0x06, 0x6A, 0x79, 0x01, 0x50, 0x71, 0x00,
+0x02, 0x6F, 0x52, 0x61, 0x02, 0x8C, 0x61, 0x02, 0x94, 0x2C, 0x0E, 0x3A, 0x29, 0xB7, 0x70, 0x29,
+0xAD, 0x82, 0x3E, 0x02, 0x2F, 0x5A, 0x21, 0x18, 0x2F, 0x5E, 0x88, 0x2D, 0x08, 0x05, 0x2C, 0x0E,
+0x3A, 0x29, 0xB8, 0xF5, 0x21, 0x00, 0x04, 0x1F, 0x2C, 0x00, 0xA9, 0x1C, 0x2D, 0x00, 0xA9, 0x6C,
+0x06, 0x6C, 0x70, 0x00, 0x02, 0x6F, 0x50, 0x6C, 0x06, 0x6E, 0x6C, 0x06, 0x6A, 0x50, 0x6F, 0x52,
+0x04, 0x2C, 0x00, 0xA9, 0x29, 0x33, 0x38, 0x21, 0x00, 0x05, 0x2D, 0x08, 0x28, 0x05, 0x81, 0x1D,
+0x61, 0x0B, 0xC2, 0x61, 0xB0, 0x1A, 0x01, 0x29, 0xB7, 0x70, 0x0A, 0x88, 0x2C, 0x00, 0xB0, 0x35,
+0x00, 0x06, 0x05, 0x1E, 0x06, 0x04, 0x21, 0x02, 0x29, 0x0B, 0x05, 0x61, 0x00, 0x0E, 0xA9, 0x08,
+0x59, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x6C, 0x06, 0x74, 0x29, 0x0A, 0xCE, 0x28,
+0x0A, 0x9C, 0x21, 0xFF, 0x61, 0x00, 0x0E, 0xA9, 0x08, 0x72, 0xE7, 0xC3, 0xA5, 0x00, 0x00, 0xA5,
+0xC3, 0xE7, 0x6C, 0x06, 0x7C, 0x29, 0x0A, 0xCE, 0x28, 0x0A, 0x9C, 0x2C, 0x00, 0xB0, 0x34, 0x03,
+0x06, 0x05, 0x1E, 0x06, 0x04, 0x21, 0x04, 0x29, 0x0B, 0x05, 0x61, 0x00, 0x0E, 0xA9, 0x08, 0x98,
+0x18, 0x18, 0x18, 0xFF, 0xFF, 0x18, 0x18, 0x18, 0x6C, 0x06, 0x84, 0x29, 0x0A, 0xCE, 0x28, 0x0A,
+0x9C, 0x6C, 0x00, 0xCD, 0x6C, 0x00, 0xCF, 0x56, 0x1F, 0x06, 0x05, 0x1E, 0x06, 0x04, 0x21, 0x05,
+0x29, 0x0B, 0x05, 0x61, 0x00, 0x0E, 0xA9, 0x08, 0xC1, 0x20, 0x60, 0xFC, 0x62, 0x21, 0x01, 0x01,
+0x02, 0x6C, 0x06, 0x8C, 0x29, 0x0A, 0xCE, 0x28, 0x0A, 0xA5, 0x6C, 0x00, 0xCB, 0x6C, 0x00, 0xCF,
+0x56, 0x1F, 0x06, 0x05, 0x1E, 0x06, 0x04, 0x21, 0x06, 0x29, 0x0B, 0x05, 0x61, 0x00, 0x0E, 0xA9,
+0x08, 0xEA, 0x04, 0x06, 0x3F, 0x46, 0x84, 0x80, 0x80, 0x40, 0x6C, 0x06, 0x94, 0x29, 0x0A, 0xCE,
+0x28, 0x0A, 0xA5, 0x21, 0xFF, 0x61, 0x00, 0x17, 0xA9, 0x09, 0x03, 0xCA, 0xC3, 0xFF, 0xFF, 0x81,
+0xBD, 0x81, 0xFF, 0x6C, 0x06, 0x9C, 0x29, 0x0A, 0xCE, 0x21, 0x0A, 0x2F, 0x5F, 0xA9, 0x09, 0x18,
+0x00, 0x3C, 0x7E, 0x7E, 0x7E, 0x7E, 0x3C, 0x00, 0xA9, 0x09, 0x23, 0x00, 0x3C, 0x42, 0x42, 0x42,
+0x42, 0x3C, 0x00, 0x2C, 0x00, 0xC3, 0x29, 0xB7, 0x70, 0xA9, 0x09, 0x34, 0x00, 0x66, 0x3C, 0x18,
+0x18, 0x3C, 0x66, 0x00, 0x2C, 0x00, 0xC4, 0x1F, 0x29, 0xB7, 0x70, 0x29, 0xAD, 0x82, 0x21, 0x18,
+0x2F, 0x5E, 0x28, 0x0A, 0xAE, 0x21, 0xFF, 0x61, 0x00, 0x0B, 0xA9, 0x09, 0x55, 0xFE, 0x00, 0xFE,
+0x00, 0xFE, 0x00, 0xFE, 0x00, 0x6C, 0x06, 0xA4, 0x29, 0x0A, 0xD9, 0x61, 0x00, 0x0B, 0x6C, 0x06,
+0xA4, 0x28, 0x0A, 0xBD, 0x02, 0x88, 0x21, 0xFF, 0x61, 0x00, 0x0B, 0xA9, 0x09, 0x76, 0x18, 0x70,
+0xE0, 0x70, 0x18, 0x00, 0x00, 0x00, 0x6C, 0x06, 0xAC, 0x29, 0x0A, 0xD9, 0x61, 0x00, 0x0B, 0x6C,
+0x06, 0xAC, 0x28, 0x0A, 0xBD, 0x6C, 0x06, 0xB4, 0x70, 0x00, 0x08, 0x6F, 0x50, 0x6C, 0x06, 0xB6,
+0x52, 0x6F, 0x52, 0x81, 0x64, 0x00, 0x0B, 0x03, 0x2C, 0x00, 0xB1, 0x1C, 0x3E, 0x02, 0x29, 0xAE,
+0xE8, 0xA9, 0x09, 0xAC, 0x18, 0x70, 0xE0, 0x70, 0x18, 0x00, 0x00, 0x00, 0x29, 0xAD, 0x82, 0x61,
+0x01, 0x43, 0x2F, 0x5F, 0x2F, 0x5F, 0x21, 0x01, 0x2F, 0x5A, 0x61, 0x18, 0x01, 0x6F, 0x5E, 0x61,
+0x19, 0x88, 0x6F, 0x5E, 0x01, 0x3E, 0x02, 0x2F, 0x5A, 0x61, 0x02, 0x94, 0x61, 0x02, 0x8C, 0x2C,
+0x00, 0xB1, 0x29, 0xB7, 0x70, 0x29, 0xAD, 0x82, 0x21, 0x18, 0x2F, 0x5E, 0x88, 0xA9, 0x09, 0xE8,
+0x00, 0x04, 0xFE, 0x04, 0x00, 0x20, 0xFE, 0x20, 0x6C, 0x06, 0xBC, 0x28, 0x0A, 0x15, 0x2C, 0x00,
+0xB2, 0x1C, 0xA9, 0x09, 0xFD, 0x00, 0xFE, 0x86, 0x8A, 0x96, 0xAA, 0xD6, 0xFE, 0x6C, 0x06, 0xC4,
+0x28, 0x0A, 0x15, 0x2C, 0x00, 0xB3, 0x1C, 0xA9, 0x0A, 0x12, 0x04, 0x0E, 0x17, 0x2A, 0x54, 0xB8,
+0x90, 0xE0, 0x6C, 0x06, 0xCC, 0x52, 0x6F, 0x50, 0x2C, 0x00, 0xB1, 0x2A, 0x0A, 0x21, 0x42, 0x02,
+0x88, 0x29, 0xAD, 0x82, 0x21, 0x01, 0x2F, 0x5A, 0x6C, 0x06, 0xB6, 0x52, 0x6F, 0x52, 0x81, 0x64,
+0x00, 0x0B, 0x01, 0x3E, 0x02, 0x29, 0xAE, 0xE8, 0x61, 0x02, 0x41, 0x2F, 0x5F, 0x2F, 0x5F, 0x21,
+0x18, 0x2F, 0x5E, 0x88, 0x02, 0x2C, 0x00, 0xB1, 0x2C, 0x00, 0xB3, 0x1E, 0x29, 0xB8, 0xF5, 0x6C,
+0x06, 0xD4, 0x52, 0x6F, 0x50, 0x6C, 0x06, 0xD6, 0x52, 0x6F, 0x52, 0x2C, 0x00, 0xB4, 0x04, 0x21,
+0x04, 0x29, 0x0A, 0x67, 0x1F, 0x21, 0x06, 0x05, 0x81, 0x64, 0x00, 0x0D, 0x01, 0x3E, 0x01, 0x52,
+0x29, 0xAE, 0xE8, 0x61, 0x02, 0x42, 0x2F, 0x5F, 0x2F, 0x5F, 0x81, 0x64, 0x00, 0x09, 0x01, 0x29,
+0xAE, 0xE8, 0x81, 0x64, 0x00, 0x09, 0x01, 0x3E, 0x01, 0x29, 0xAD, 0x00, 0x61, 0x0B, 0xC2, 0x2F,
+0x5F, 0x2F, 0x5F, 0x88, 0x29, 0xB8, 0xF3, 0x21, 0xA0, 0x2F, 0x5E, 0x88, 0x61, 0x00, 0x2C, 0x6C,
+0x06, 0x74, 0x28, 0x0A, 0xB4, 0x61, 0x00, 0x1D, 0x6C, 0x06, 0x8C, 0x28, 0x0A, 0xB4, 0x61, 0x00,
+0x17, 0x6C, 0x06, 0x9C, 0x66, 0x00, 0x0C, 0x61, 0x00, 0x04, 0x28, 0x0A, 0xC4, 0x66, 0x00, 0x0B,
+0x6C, 0x06, 0xAE, 0x52, 0x6F, 0x52, 0x52, 0x6F, 0x50, 0x21, 0x01, 0x28, 0xAF, 0x1B, 0x61, 0x00,
+0x04, 0x61, 0x00, 0x0C, 0x21, 0x03, 0x28, 0x0A, 0xE2, 0x6C, 0x06, 0xAE, 0x52, 0x61, 0x00, 0x0B,
+0x21, 0x02, 0x81, 0xC1, 0x6F, 0x52, 0x52, 0x6F, 0x50, 0x29, 0xAD, 0x82, 0x46, 0x41, 0x46, 0x81,
+0x3E, 0x02, 0x29, 0xAD, 0xA2, 0x41, 0x27, 0x42, 0x2F, 0x5F, 0x2F, 0x5F, 0x3E, 0x01, 0x2F, 0x5A,
+0x21, 0x18, 0x2F, 0x5E, 0x88, 0x81, 0x81, 0x61, 0xB1, 0xDF, 0x61, 0xB1, 0xD6, 0x01, 0x29, 0xB7,
+0x70, 0x21, 0x00, 0x01, 0x78, 0x01, 0x70, 0xBC, 0x4D, 0x4D, 0x88, 0x2E, 0x48, 0x29, 0xB8, 0xF5,
+0x2E, 0x48, 0x61, 0x0B, 0x9D, 0x61, 0x0B, 0x5E, 0x21, 0x00, 0x2C, 0xC5, 0x9A, 0x70, 0xC5, 0x93,
+0x0C, 0x36, 0x03, 0x29, 0xB7, 0x70, 0x0B, 0x2E, 0x49, 0x3E, 0x80, 0x36, 0x00, 0x2E, 0x48, 0x1E,
+0x29, 0xB8, 0xF5, 0x61, 0x02, 0x83, 0x61, 0xB1, 0xD6, 0x21, 0x00, 0x2C, 0xC5, 0x9A, 0x70, 0xC5,
+0x93, 0x0C, 0x36, 0x03, 0x29, 0xB7, 0x70, 0x21, 0x01, 0x2F, 0x5A, 0x28, 0xB5, 0x95, 0x6C, 0x00,
+0xB5, 0x6C, 0x00, 0xB7, 0x29, 0x22, 0xCB, 0x29, 0xB8, 0xF5, 0x21, 0x01, 0x29, 0x03, 0x3D, 0x2E,
+0x49, 0x3E, 0x80, 0x29, 0xB7, 0x76, 0x2F, 0x5A, 0x29, 0x2F, 0xBC, 0x29, 0xAD, 0x82, 0x21, 0x00,
+0x21, 0x00, 0x2C, 0xC5, 0x9A, 0x70, 0xC5, 0xA3, 0x0C, 0x78, 0x03, 0x70, 0xC6, 0x43, 0x6C, 0x00,
+0xB5, 0x71, 0x00, 0x03, 0x6C, 0x00, 0xB7, 0x71, 0x00, 0x03, 0x28, 0x3A, 0x38, 0x6C, 0x00, 0xB5,
+0x6C, 0x00, 0xB7, 0x29, 0x22, 0xCB, 0x2E, 0x49, 0x36, 0x00, 0x1E, 0x29, 0xB8, 0xF5, 0x29, 0x03,
+0x3D, 0x2F, 0x5A, 0x29, 0x2F, 0xBC, 0x29, 0xAD, 0x82, 0x6C, 0x00, 0xB5, 0x6C, 0x00, 0xB7, 0x28,
+0x3B, 0xA7, 0x6C, 0x06, 0x6E, 0x6F, 0x52, 0x61, 0x1C, 0x4C, 0x2F, 0x5F, 0x2F, 0x5F, 0x61, 0x07,
+0x00, 0x61, 0x81, 0xC1, 0x2F, 0x5F, 0x2F, 0x5F, 0x61, 0x00, 0x2C, 0x61, 0x00, 0x0F, 0x21, 0x04,
+0x29, 0xAD, 0x00, 0x61, 0x01, 0x41, 0x2F, 0x5F, 0x2F, 0x5F, 0x61, 0x00, 0x2A, 0x61, 0x00, 0x0D,
+0x21, 0x01, 0x29, 0xAE, 0xE8, 0x61, 0x00, 0x2A, 0x61, 0x00, 0x0D, 0x21, 0x04, 0x29, 0xAF, 0x1B,
+0x61, 0x83, 0x45, 0x2F, 0x5F, 0x2F, 0x5F, 0x61, 0x6E, 0x60, 0x61, 0x26, 0x20, 0x29, 0xAD, 0xC7,
+0x61, 0x00, 0x41, 0x6F, 0x5A, 0x21, 0x38, 0x2F, 0x5E, 0x61, 0x05, 0xC3, 0x2F, 0x5F, 0x2F, 0x5F,
+0x83, 0x61, 0x0A, 0x00, 0x21, 0x00, 0x01, 0x45, 0x45, 0x70, 0xC5, 0x9B, 0x0C, 0x29, 0x31, 0xB2,
+0x2F, 0x5F, 0x45, 0x45, 0x70, 0xC5, 0xA3, 0x0C, 0x29, 0x31, 0x8E, 0x2F, 0x5F, 0x70, 0xC5, 0xAB,
+0x0C, 0x29, 0x31, 0x7A, 0x12, 0x21, 0x41, 0x2F, 0x5F, 0x2F, 0x5F, 0xA9, 0x0C, 0x56, 0x00, 0xFE,
+0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x29, 0xAD, 0x82, 0x21, 0x18, 0x2F, 0x5E, 0x61, 0x88, 0x80,
+0x29, 0xAD, 0xD7, 0x25, 0x00, 0x70, 0xC5, 0xB3, 0x29, 0x0C, 0x85, 0x21, 0x44, 0x2F, 0x5F, 0x25,
+0x00, 0x70, 0xC5, 0xBB, 0x29, 0x0C, 0x85, 0x61, 0xA1, 0x53, 0x2F, 0x5F, 0x2F, 0x5F, 0x12, 0x17,
+0x2A, 0x0B, 0xD1, 0x42, 0x88, 0x0C, 0x12, 0x39, 0x01, 0x21, 0x06, 0x44, 0x14, 0x29, 0xB7, 0x76,
+0x04, 0x2F, 0x5F, 0x21, 0x18, 0x2F, 0x5E, 0x3D, 0x80, 0x2F, 0x5F, 0x88, 0x81, 0x61, 0x53, 0x06,
+0x61, 0x52, 0xE2, 0x01, 0x34, 0x80, 0x29, 0xB7, 0x70, 0x08, 0x81, 0x61, 0xC5, 0x9A, 0x21, 0x06,
+0x01, 0x29, 0xB8, 0x8A, 0x21, 0xA0, 0x2F, 0x5E, 0x29, 0x0B, 0x1B, 0x21, 0x00, 0x28, 0x07, 0xFB,
+0x36, 0x01, 0x29, 0xB8, 0xF5, 0x2C, 0x0E, 0x3A, 0x1F, 0x2D, 0x0E, 0x3A, 0x28, 0xB0, 0x16, 0x04,
+0x36, 0x00, 0x2B, 0x0C, 0xDB, 0x36, 0x01, 0x2B, 0x0C, 0xE7, 0x88, 0x61, 0x00, 0xA9, 0x29, 0x0C,
+0xF6, 0x29, 0xB7, 0xF9, 0x28, 0xB1, 0x8C, 0x61, 0xC5, 0x9A, 0x29, 0x0C, 0xF6, 0x61, 0x0E, 0x41,
+0x29, 0xB8, 0x58, 0x28, 0xB1, 0x8C, 0x21, 0x06, 0x61, 0x00, 0x19, 0x6C, 0x06, 0x6E, 0x6C, 0x06,
+0x6A, 0x50, 0x88, 0x36, 0x01, 0x2A, 0x0E, 0x3B, 0x88, 0x36, 0x01, 0x2A, 0x04, 0x59, 0x88, 0x36,
+0x01, 0x2A, 0x12, 0x6C, 0x88, 0x36, 0x01, 0x2A, 0x04, 0x1F, 0x88, 0x36, 0x01, 0x2A, 0x52, 0xE2,
+0x88, 0x36, 0x01, 0x2A, 0x53, 0x06, 0x88, 0x36, 0x01, 0x29, 0xB8, 0xF5, 0xA9, 0x0D, 0x35, 0x29,
+0x51, 0xF9, 0x28, 0xB1, 0x8C, 0x61, 0x16, 0x5A, 0x2C, 0x00, 0xC5, 0x29, 0xB7, 0x70, 0x08, 0x36,
+0x01, 0x2A, 0x14, 0x49, 0x88, 0x02, 0x88, 0x36, 0x01, 0x29, 0xB8, 0xF5, 0x2C, 0x00, 0xB1, 0x1F,
+0x2D, 0x00, 0xB1, 0x28, 0xB0, 0x16, 0x36, 0x01, 0x2A, 0x2B, 0x25, 0x88, 0x36, 0x01, 0x29, 0xB8,
+0xF5, 0x2C, 0x00, 0xB2, 0x1F, 0x2D, 0x00, 0xB2, 0x28, 0xB0, 0x16, 0x36, 0x01, 0x29, 0xB8, 0xF5,
+0x2C, 0x00, 0xB3, 0x1F, 0x2D, 0x00, 0xB3, 0x28, 0xB0, 0x16, 0x36, 0x01, 0x29, 0xB8, 0xF5, 0x2C,
+0x00, 0xB4, 0x6E, 0x40, 0x6C, 0x06, 0xD4, 0x51, 0x74, 0x00, 0x0E, 0x04, 0x2D, 0x00, 0xB4, 0x1D,
+0x2A, 0xB1, 0x8C, 0x61, 0x2B, 0x44, 0x61, 0x2B, 0x25, 0x2C, 0x00, 0xB4, 0x29, 0xB7, 0x70, 0x08,
+0x21, 0xA0, 0x2F, 0x5E, 0x29, 0x1F, 0xBE, 0x28, 0x0B, 0x1B, 0x04, 0x36, 0x5B, 0x2B, 0x0E, 0x0A,
+0x04, 0x36, 0x5D, 0x2B, 0x0E, 0x05, 0x04, 0x36, 0x2D, 0x2B, 0x04, 0x52, 0x04, 0x36, 0x5F, 0x2B,
+0x04, 0x52, 0x04, 0x36, 0x2B, 0x2B, 0x04, 0x18, 0x04, 0x36, 0x3D, 0x2B, 0x04, 0x18, 0x04, 0x36,
+0x7A, 0x2B, 0x52, 0xE2, 0x04, 0x36, 0x5A, 0x2B, 0x53, 0x06, 0x04, 0x36, 0x79, 0x2B, 0x53, 0x06,
+0x04, 0x36, 0x20, 0x2B, 0x12, 0x6C, 0x04, 0x36, 0x73, 0x2B, 0x0E, 0x21, 0x04, 0x36, 0x2F, 0x2B,
+0x0E, 0x30, 0x31, 0x31, 0x04, 0x34, 0x07, 0x2A, 0x0D, 0xFC, 0x02, 0x88, 0x2D, 0xC5, 0x9A, 0x29,
+0xB0, 0x1A, 0x28, 0x0B, 0x1B, 0x21, 0x01, 0x28, 0x0E, 0x0C, 0x21, 0xFF, 0x81, 0x21, 0x00, 0x2C,
+0xC5, 0x9A, 0x70, 0xC5, 0xA3, 0x21, 0x07, 0x01, 0x29, 0xB8, 0x8A, 0x29, 0xB0, 0x1A, 0x28, 0x0B,
+0x1B, 0x2C, 0x00, 0xC5, 0x1F, 0x2A, 0x16, 0x5A, 0x29, 0x51, 0xF9, 0x21, 0x00, 0x28, 0x08, 0xF3,
+0x2C, 0x00, 0xB1, 0x1F, 0x2D, 0x00, 0xB1, 0x28, 0xB0, 0x16, 0xFF, 0x61, 0x0E, 0x41, 0x28, 0xB1,
+0xD2, 0x61, 0x0E, 0x4A, 0x61, 0x00, 0x09, 0x28, 0xB1, 0x34, 0x6E, 0x54, 0x79, 0x01, 0x6C, 0x0F,
+0xB4, 0x79, 0x01, 0x51, 0x44, 0x6D, 0x0F, 0x60, 0x44, 0x6D, 0x0F, 0xB0, 0x70, 0x00, 0x33, 0x44,
+0x6D, 0x0F, 0x68, 0x44, 0x6D, 0x0F, 0x70, 0x44, 0x6D, 0x0F, 0x78, 0x44, 0x6D, 0x0F, 0x80, 0x44,
+0x6D, 0x0F, 0x88, 0x44, 0x6D, 0x0F, 0x90, 0x70, 0x00, 0x4A, 0x6D, 0x0F, 0x98, 0x6E, 0x56, 0x79,
+0x01, 0x44, 0x6C, 0x0F, 0xA6, 0x79, 0x01, 0x51, 0x05, 0x34, 0x80, 0x04, 0x5E, 0x6D, 0x0F, 0xA2,
+0x6C, 0x0F, 0xB6, 0x79, 0x01, 0x51, 0x44, 0x6D, 0x0F, 0x62, 0x44, 0x6D, 0x0F, 0xB2, 0x70, 0x00,
+0x1C, 0x44, 0x6D, 0x0F, 0x6A, 0x70, 0x00, 0x11, 0x44, 0x6D, 0x0F, 0x72, 0x70, 0x00, 0x11, 0x44,
+0x6D, 0x0F, 0x7A, 0x70, 0x00, 0x11, 0x44, 0x6D, 0x0F, 0x82, 0x70, 0x00, 0x12, 0x44, 0x6D, 0x0F,
+0x8A, 0x70, 0x00, 0x0D, 0x44, 0x6D, 0x0F, 0x92, 0x70, 0x00, 0x1A, 0x6D, 0x0F, 0x9A, 0x61, 0x0F,
+0x10, 0x6D, 0xBC, 0x4B, 0x61, 0x0F, 0xB8, 0x6D, 0xBB, 0xFF, 0x61, 0x0F, 0x17, 0x29, 0xB5, 0xF7,
+0x61, 0x0F, 0x2A, 0x29, 0xB5, 0xFD, 0x61, 0x0F, 0x3B, 0x29, 0xB6, 0x03, 0x61, 0x0F, 0x4C, 0x29,
+0xB6, 0x1B, 0x61, 0x11, 0xA2, 0x6D, 0xBB, 0x35, 0x61, 0x04, 0xD2, 0x6D, 0xBC, 0x43, 0x61, 0x04,
+0xD2, 0x6D, 0xBC, 0x45, 0x61, 0x04, 0xD2, 0x6D, 0xBC, 0x47, 0x61, 0x0F, 0x5F, 0x28, 0xB6, 0x48,
+0x2C, 0xBA, 0x4D, 0x2D, 0x0E, 0x45, 0x88, 0x09, 0x10, 0xA2, 0x10, 0xB9, 0x10, 0xC5, 0x10, 0xD1,
+0x10, 0xDD, 0x10, 0xE9, 0x10, 0xF5, 0x11, 0x01, 0x11, 0x07, 0x08, 0x00, 0x00, 0x11, 0x35, 0x11,
+0x49, 0x11, 0x58, 0x11, 0x67, 0x11, 0x76, 0x11, 0x85, 0x11, 0x94, 0x08, 0x04, 0xD2, 0x00, 0x00,
+0x18, 0xB7, 0x35, 0x5B, 0x35, 0x61, 0x00, 0x00, 0x00, 0x00, 0x11, 0x9A, 0x09, 0x11, 0xA2, 0x11,
+0xA8, 0x11, 0xC9, 0x11, 0xD2, 0x11, 0xDB, 0x12, 0x09, 0x12, 0x0F, 0x12, 0x34, 0x12, 0x3C, 0x0B,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x11,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x11,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x0D,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0xBC, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x7F, 0xFF,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0x00, 0x98, 0x21, 0x22, 0x2F, 0x5E, 0x6C, 0x0F, 0xB0, 0x6F,
+0x50, 0x6C, 0x0F, 0xB2, 0x6F, 0x52, 0x6C, 0x0F, 0xB4, 0x6C, 0x0F, 0xB6, 0x29, 0xA1, 0xCD, 0x6C,
+0x0F, 0x68, 0x71, 0x00, 0x04, 0x6F, 0x50, 0x6C, 0x0F, 0x6A, 0x70, 0x00, 0x05, 0x6F, 0x52, 0xA9,
+0x0F, 0xE8, 0x4D, 0x6F, 0x64, 0x65, 0x3A, 0x00, 0x29, 0x10, 0x9C, 0x6C, 0x0F, 0x72, 0x70, 0x00,
+0x05, 0x6F, 0x52, 0xA9, 0x0F, 0xFE, 0x43, 0x6F, 0x6C, 0x6F, 0x75, 0x72, 0x3A, 0x00, 0x29, 0x10,
+0x9C, 0x6C, 0x0F, 0x7A, 0x70, 0x00, 0x05, 0x6F, 0x52, 0xA9, 0x10, 0x13, 0x53, 0x68, 0x61, 0x70,
+0x65, 0x3A, 0x00, 0x29, 0x10, 0x9C, 0x6C, 0x0F, 0x82, 0x70, 0x00, 0x05, 0x6F, 0x52, 0xA9, 0x10,
+0x2A, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6E, 0x3A, 0x00, 0x29, 0x10, 0x9C, 0x6C, 0x0F, 0x8A,
+0x70, 0x00, 0x02, 0x6F, 0x52, 0xA9, 0x10, 0x41, 0x53, 0x70, 0x61, 0x63, 0x69, 0x6E, 0x67, 0x3A,
+0x00, 0x29, 0x10, 0x9C, 0x6C, 0x0F, 0x92, 0x70, 0x00, 0x02, 0x6F, 0x52, 0xA9, 0x10, 0x58, 0x53,
+0x63, 0x61, 0x74, 0x74, 0x65, 0x72, 0x3A, 0x00, 0x29, 0x10, 0x9C, 0x6C, 0x0F, 0xB0, 0x6F, 0x50,
+0x6C, 0x0F, 0x9A, 0x71, 0x00, 0x05, 0x6F, 0x52, 0x6C, 0x0F, 0xB4, 0x21, 0x01, 0x29, 0xAE, 0xD4,
+0x6C, 0x0F, 0x98, 0x71, 0x00, 0x56, 0x6F, 0x50, 0x6C, 0x0F, 0x9A, 0x70, 0x00, 0x02, 0x6F, 0x52,
+0xA9, 0x10, 0x96, 0x46, 0x69, 0x6E, 0x65, 0x20, 0x62, 0x72, 0x75, 0x73, 0x68, 0x20, 0x73, 0x74,
+0x72, 0x6F, 0x6B, 0x65, 0x73, 0x00, 0x61, 0x3C, 0x38, 0x28, 0xAC, 0xBA, 0x61, 0x3C, 0x38, 0x28,
+0xAC, 0xAF, 0x6C, 0x0F, 0x64, 0xA9, 0x10, 0xB6, 0x54, 0x6F, 0x6F, 0x6C, 0x20, 0x73, 0x65, 0x74,
+0x74, 0x69, 0x6E, 0x67, 0x73, 0x00, 0x28, 0xA2, 0x8B, 0x21, 0x00, 0x2C, 0xC5, 0x9A, 0x70, 0xC5,
+0x93, 0x0C, 0x28, 0x30, 0xFC, 0x21, 0x00, 0x2C, 0xC5, 0x9A, 0x70, 0xC5, 0x9B, 0x0C, 0x28, 0x31,
+0x27, 0x21, 0x00, 0x2C, 0xC5, 0x9A, 0x70, 0xC5, 0xA3, 0x0C, 0x28, 0x31, 0x33, 0x21, 0x00, 0x2C,
+0xC5, 0x9A, 0x70, 0xC5, 0xAB, 0x0C, 0x28, 0x31, 0x2D, 0x21, 0x00, 0x2C, 0xC5, 0x9A, 0x70, 0xC5,
+0xB3, 0x0C, 0x28, 0x32, 0x30, 0x21, 0x00, 0x2C, 0xC5, 0x9A, 0x70, 0xC5, 0xBB, 0x0C, 0x28, 0x32,
+0x30, 0x2C, 0x00, 0xAD, 0x28, 0xA3, 0x00, 0x6C, 0x0F, 0xA0, 0x6F, 0x50, 0x6C, 0x0F, 0xA2, 0x6F,
+0x52, 0x21, 0x81, 0x2F, 0x5F, 0x6C, 0x0F, 0xA4, 0x52, 0x6C, 0x0F, 0xA6, 0x21, 0x01, 0x29, 0xAE,
+0xE8, 0x61, 0x03, 0x47, 0x2F, 0x5F, 0x2F, 0x5F, 0x04, 0x1F, 0x2C, 0x00, 0xA9, 0x1C, 0x04, 0x2D,
+0x00, 0xA9, 0x28, 0x33, 0x38, 0x81, 0x21, 0x00, 0x2C, 0xC5, 0x9A, 0x70, 0xC5, 0x93, 0x21, 0x03,
+0x01, 0x29, 0xB8, 0x6A, 0x21, 0x00, 0x28, 0x11, 0x07, 0x81, 0x21, 0x00, 0x2C, 0xC5, 0x9A, 0x70,
+0xC5, 0x9B, 0x21, 0x07, 0x01, 0x28, 0xB8, 0x6A, 0x81, 0x21, 0x00, 0x2C, 0xC5, 0x9A, 0x70, 0xC5,
+0xA3, 0x21, 0x07, 0x01, 0x28, 0xB8, 0x6A, 0x81, 0x21, 0x00, 0x2C, 0xC5, 0x9A, 0x70, 0xC5, 0xAB,
+0x21, 0x07, 0x01, 0x28, 0xB8, 0x6A, 0x81, 0x21, 0x00, 0x2C, 0xC5, 0x9A, 0x70, 0xC5, 0xB3, 0x21,
+0x0F, 0x01, 0x28, 0xB8, 0x6A, 0x81, 0x21, 0x00, 0x2C, 0xC5, 0x9A, 0x70, 0xC5, 0xBB, 0x21, 0x0F,
+0x01, 0x28, 0xB8, 0x6A, 0x34, 0x80, 0x2D, 0x00, 0xAD, 0x88, 0x2C, 0x00, 0xAD, 0x1F, 0x2D, 0x00,
+0xAD, 0x88, 0x36, 0x01, 0x2A, 0x04, 0xD2, 0x88, 0x36, 0x01, 0x29, 0xB8, 0xF5, 0x21, 0x00, 0x2C,
+0xC5, 0x9A, 0x70, 0xC5, 0x93, 0x21, 0x03, 0x61, 0x00, 0x1A, 0x6C, 0x0F, 0x68, 0x52, 0x29, 0xB7,
+0xF3, 0x29, 0xB1, 0x8C, 0x21, 0x00, 0x28, 0x11, 0x07, 0x61, 0xC5, 0x9B, 0x61, 0x18, 0xBD, 0x28,
+0x11, 0xE4, 0x61, 0xC5, 0xA3, 0x61, 0x35, 0x67, 0x28, 0x11, 0xE4, 0x61, 0xC5, 0xAB, 0x61, 0x35,
+0x6F, 0x28, 0x11, 0xE4, 0x6D, 0x12, 0x01, 0x6D, 0x11, 0xF5, 0x36, 0x01, 0x29, 0xB8, 0xF5, 0x21,
+0x00, 0x2C, 0xC5, 0x9A, 0x70, 0x00, 0x00, 0x21, 0x07, 0x61, 0x00, 0x0D, 0x6C, 0x0F, 0x70, 0x52,
+0x61, 0x00, 0x00, 0x29, 0xB8, 0x4D, 0x28, 0xB1, 0x8C, 0x61, 0xC5, 0xB3, 0x28, 0x12, 0x15, 0x61,
+0xC5, 0xBB, 0x28, 0x12, 0x15, 0x6D, 0x12, 0x23, 0x36, 0x02, 0x29, 0xB8, 0xF5, 0x21, 0x00, 0x2C,
+0xC5, 0x9A, 0x70, 0x00, 0x00, 0x21, 0x0F, 0x61, 0x00, 0x06, 0x6C, 0x0F, 0x88, 0x52, 0x29, 0xB7,
+0xF3, 0x28, 0xB1, 0x92, 0x36, 0x01, 0x2B, 0x11, 0x9A, 0x28, 0xB1, 0x8C, 0x04, 0x36, 0x00, 0x2B,
+0x12, 0x48, 0x36, 0x01, 0x2B, 0x12, 0x52, 0x88, 0x61, 0x00, 0xA9, 0x29, 0x12, 0x5E, 0x2A, 0xB1,
+0x8C, 0x88, 0x61, 0xC5, 0x9A, 0x29, 0x12, 0x5E, 0x2A, 0xB0, 0x22, 0x28, 0x04, 0xD2, 0x21, 0x06,
+0x61, 0x00, 0x19, 0x6C, 0x0F, 0xA2, 0x70, 0x00, 0x07, 0x28, 0xB7, 0xE1, 0x61, 0x12, 0x72, 0x28,
+0xB1, 0xD2, 0x21, 0x00, 0x2D, 0x12, 0xD1, 0x61, 0x12, 0x80, 0x61, 0x00, 0x00, 0x28, 0xB1, 0x34,
+0x61, 0x2D, 0xB7, 0x6D, 0xBB, 0xFF, 0x61, 0x12, 0xAD, 0x6D, 0xBA, 0xF3, 0x61, 0x02, 0x71, 0x6D,
+0xBC, 0x4D, 0x61, 0x04, 0xD2, 0x6D, 0xBC, 0x43, 0x61, 0x12, 0xC7, 0x6D, 0xBB, 0xFB, 0x61, 0x12,
+0xA4, 0x28, 0xB6, 0x48, 0x01, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x7F, 0xFF, 0x04, 0x36, 0x01,
+0x2B, 0x12, 0xCB, 0x04, 0x36, 0x02, 0x2C, 0x12, 0xD1, 0x1E, 0x2B, 0x03, 0xF8, 0x36, 0x03, 0x2C,
+0x12, 0xD1, 0x1E, 0x2B, 0x04, 0xD2, 0x88, 0x02, 0x28, 0x04, 0xD2, 0x21, 0xFF, 0x2D, 0x12, 0xD1,
+0x88, 0x00, 0x21, 0x00, 0x2D, 0x00, 0xC2, 0x21, 0x00, 0x2D, 0x00, 0xC5, 0x2E, 0x90, 0x2E, 0x95,
+0x1F, 0x1E, 0x29, 0xB8, 0xF5, 0x21, 0x00, 0x2D, 0x00, 0xC1, 0x21, 0xFF, 0x2D, 0x00, 0xC2, 0x64,
+0x00, 0x00, 0x6F, 0x98, 0x6F, 0x9A, 0x21, 0x92, 0x61, 0xC5, 0x83, 0x61, 0x00, 0xC0, 0x29, 0xB6,
+0x99, 0x61, 0x00, 0x81, 0x44, 0x70, 0x00, 0x0C, 0x46, 0x61, 0xC5, 0x83, 0x45, 0x51, 0x6D, 0x13,
+0x15, 0x44, 0x4C, 0x45, 0x70, 0x00, 0x00, 0x4C, 0x7E, 0xF0, 0x00, 0x56, 0x2C, 0x00, 0xC2, 0x1E,
+0x2D, 0x00, 0xC2, 0x70, 0x00, 0x02, 0x57, 0x2A, 0x13, 0x11, 0x0C, 0x3E, 0xF0, 0x81, 0x70, 0x00,
+0x02, 0x0C, 0x39, 0x04, 0x01, 0x1C, 0x2D, 0x00, 0xC1, 0x2C, 0x00, 0xC2, 0x2C, 0x00, 0xC1, 0x36,
+0x00, 0x1E, 0x29, 0xB8, 0xF5, 0x6E, 0x92, 0x44, 0x6D, 0x00, 0xA5, 0x6E, 0x92, 0x44, 0x6D, 0x00,
+0xA7, 0x29, 0x14, 0x34, 0x79, 0x01, 0x64, 0x00, 0x00, 0x6F, 0x12, 0x6F, 0x14, 0x28, 0x13, 0x6A,
+0x6E, 0x92, 0x3A, 0x04, 0x06, 0x3A, 0x04, 0x6F, 0x16, 0x53, 0x44, 0x6A, 0x13, 0x60, 0x42, 0x21,
+0x00, 0x2F, 0x94, 0x21, 0x94, 0x61, 0xC6, 0x83, 0x29, 0xAF, 0xF5, 0x29, 0x13, 0x8B, 0x21, 0xFF,
+0x2D, 0x00, 0xC3, 0x21, 0xFF, 0x2D, 0x00, 0xC5, 0x28, 0x14, 0x07, 0x2C, 0xC5, 0xA2, 0x2C, 0xC5,
+0xAA, 0x2C, 0xC5, 0xB2, 0x1C, 0x1C, 0x29, 0xB8, 0xF5, 0x2C, 0xC5, 0xA2, 0x2C, 0xC5, 0xAA, 0x79,
+0x04, 0x61, 0x00, 0x91, 0x70, 0x00, 0x0C, 0x4D, 0x2C, 0xC5, 0xAA, 0x2C, 0xC5, 0xB2, 0x61, 0x00,
+0x91, 0x70, 0x00, 0x08, 0x4D, 0x88, 0x61, 0x00, 0x91, 0x70, 0x00, 0x0C, 0x4C, 0x78, 0x04, 0x81,
+0x2D, 0xC5, 0xA2, 0x61, 0x00, 0x91, 0x70, 0x00, 0x08, 0x4C, 0x2D, 0xC5, 0xB2, 0x3E, 0x0F, 0x01,
+0x1C, 0x2D, 0xC5, 0xAA, 0x88, 0x64, 0x00, 0x00, 0x6F, 0x12, 0x6F, 0x14, 0xC3, 0x4C, 0x44, 0x6D,
+0x00, 0xA5, 0xF0, 0x00, 0x02, 0x43, 0x4C, 0x44, 0x6D, 0x00, 0xA7, 0xF0, 0x00, 0x02, 0x29, 0x14,
+0x34, 0x43, 0x50, 0x41, 0x44, 0x4C, 0x3A, 0x04, 0x06, 0x3A, 0x04, 0x6F, 0x16, 0x70, 0x00, 0x02,
+0x57, 0x2A, 0x13, 0xF4, 0x42, 0x42, 0x88, 0x61, 0x00, 0x08, 0x53, 0x44, 0x78, 0x01, 0x70, 0x00,
+0x91, 0x4C, 0x7E, 0x0F, 0xFF, 0x45, 0x78, 0x0C, 0x5C, 0x6F, 0x58, 0x44, 0x78, 0x01, 0x70, 0xC5,
+0x83, 0x4C, 0x7E, 0x0F, 0xFF, 0x45, 0x70, 0x00, 0x08, 0x78, 0x0C, 0x5C, 0x6F, 0x58, 0x44, 0x6A,
+0x14, 0x0A, 0x42, 0x88, 0x6F, 0x22, 0x70, 0x00, 0x03, 0x79, 0x02, 0x78, 0x01, 0x6F, 0x20, 0x6E,
+0x2A, 0x6E, 0x28, 0x76, 0x00, 0x00, 0x04, 0x5E, 0x88, 0x61, 0x14, 0x4F, 0x28, 0xB1, 0xD2, 0x61,
+0x14, 0x58, 0x61, 0x01, 0x06, 0x28, 0xB1, 0x34, 0x6E, 0x54, 0x79, 0x01, 0x6C, 0x15, 0x42, 0x79,
+0x01, 0x51, 0x44, 0x6D, 0x15, 0x06, 0x44, 0x6D, 0x15, 0x3E, 0x70, 0x00, 0x06, 0x44, 0x6D, 0x15,
+0x0E, 0x44, 0x6D, 0x15, 0x16, 0x44, 0x6D, 0x15, 0x1E, 0x44, 0x6D, 0x15, 0x26, 0x6D, 0x15, 0x2E,
+0x6E, 0x56, 0x79, 0x01, 0x6C, 0x15, 0x44, 0x79, 0x01, 0x51, 0x44, 0x6D, 0x15, 0x08, 0x44, 0x6D,
+0x15, 0x40, 0x70, 0x00, 0x13, 0x44, 0x6D, 0x15, 0x10, 0x70, 0x00, 0x0E, 0x44, 0x6D, 0x15, 0x18,
+0x70, 0x00, 0x0E, 0x44, 0x6D, 0x15, 0x20, 0x70, 0x00, 0x12, 0x44, 0x6D, 0x15, 0x28, 0x70, 0x00,
+0x0E, 0x6D, 0x15, 0x30, 0x61, 0x15, 0x4E, 0x6D, 0xBB, 0xFF, 0x61, 0x14, 0xD8, 0x29, 0xB5, 0xF7,
+0x61, 0x14, 0xE5, 0x29, 0xB6, 0x03, 0x61, 0x14, 0xF2, 0x29, 0xB6, 0x1B, 0x61, 0x16, 0x15, 0x6D,
+0xBC, 0x43, 0x61, 0x15, 0x05, 0x28, 0xB6, 0x48, 0x06, 0x15, 0x64, 0x15, 0x7C, 0x15, 0x9D, 0x15,
+0xBE, 0x15, 0xDE, 0x15, 0xFD, 0x06, 0x16, 0x15, 0x16, 0x18, 0x16, 0x1B, 0x16, 0x1E, 0x16, 0x21,
+0x16, 0x24, 0x09, 0x16, 0x25, 0x16, 0x2B, 0x16, 0x31, 0x16, 0x37, 0x16, 0x3D, 0x16, 0x43, 0x16,
+0x49, 0x00, 0x00, 0x16, 0x4F, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x0F, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x67, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x00, 0x0C, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x67, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x00, 0x0C, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x67, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x75, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x7F, 0xFF, 0x29, 0x2D,
+0xB7, 0x6C, 0x15, 0x3E, 0x6F, 0x50, 0x6C, 0x15, 0x40, 0x6F, 0x52, 0x6C, 0x15, 0x42, 0x6C, 0x15,
+0x44, 0x28, 0xA1, 0xCD, 0x6C, 0x15, 0x06, 0x6F, 0x50, 0x6C, 0x15, 0x08, 0x6F, 0x52, 0x6C, 0x15,
+0x0A, 0xA9, 0x15, 0x79, 0x4D, 0x65, 0x6E, 0x75, 0x00, 0x28, 0xA2, 0x8B, 0x6C, 0x15, 0x0E, 0x6F,
+0x50, 0x6C, 0x15, 0x10, 0x6F, 0x52, 0x6C, 0x15, 0x12, 0xA9, 0x15, 0x9A, 0x54, 0x6F, 0x6F, 0x6C,
+0x20, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6E, 0x67, 0x73, 0x00, 0x28, 0xA1, 0x33, 0x6C, 0x15, 0x16,
+0x6F, 0x50, 0x6C, 0x15, 0x18, 0x6F, 0x52, 0x6C, 0x15, 0x1A, 0xA9, 0x15, 0xBB, 0x53, 0x61, 0x76,
+0x65, 0x20, 0x69, 0x6D, 0x61, 0x67, 0x65, 0x2E, 0x2E, 0x2E, 0x00, 0x28, 0xA1, 0x33, 0x6C, 0x15,
+0x1E, 0x6F, 0x50, 0x6C, 0x15, 0x20, 0x6F, 0x52, 0x6C, 0x15, 0x22, 0xA9, 0x15, 0xDB, 0x45, 0x78,
+0x70, 0x6F, 0x72, 0x74, 0x20, 0x69, 0x6D, 0x61, 0x67, 0x65, 0x00, 0x28, 0xA1, 0x33, 0x6C, 0x15,
+0x26, 0x6F, 0x50, 0x6C, 0x15, 0x28, 0x6F, 0x52, 0x6C, 0x15, 0x2A, 0xA9, 0x15, 0xFA, 0x43, 0x6C,
+0x6F, 0x73, 0x65, 0x20, 0x69, 0x6D, 0x61, 0x67, 0x65, 0x00, 0x28, 0xA1, 0x27, 0x6C, 0x15, 0x2E,
+0x6F, 0x50, 0x6C, 0x15, 0x30, 0x6F, 0x52, 0x6C, 0x15, 0x32, 0xA9, 0x16, 0x12, 0x51, 0x75, 0x69,
+0x74, 0x00, 0x28, 0xA1, 0x27, 0x28, 0x04, 0xD2, 0x28, 0x0E, 0x3B, 0x28, 0x16, 0x5A, 0x28, 0x48,
+0xE6, 0x28, 0x3F, 0xA0, 0x00, 0x36, 0x01, 0x2A, 0x16, 0x15, 0x88, 0x36, 0x01, 0x2A, 0x16, 0x18,
+0x88, 0x36, 0x01, 0x2A, 0x16, 0x1B, 0x88, 0x36, 0x01, 0x2A, 0x16, 0x1E, 0x88, 0x36, 0x01, 0x2A,
+0x16, 0x21, 0x88, 0x36, 0x01, 0x2A, 0x16, 0x24, 0x88, 0x36, 0x01, 0x2A, 0x96, 0x0B, 0x88, 0x21,
+0x00, 0x2D, 0xBA, 0x4D, 0x36, 0x01, 0x2A, 0x04, 0xD2, 0x88, 0x61, 0x16, 0x60, 0x28, 0xB1, 0xD2,
+0x29, 0x18, 0x92, 0x61, 0x16, 0x6C, 0x61, 0x01, 0x04, 0x28, 0xB1, 0x34, 0x6E, 0x54, 0x79, 0x01,
+0x44, 0x6C, 0x17, 0x25, 0x79, 0x01, 0x51, 0x6D, 0x17, 0x21, 0x44, 0x6C, 0x17, 0x2D, 0x79, 0x01,
+0x51, 0x53, 0x44, 0x6D, 0x17, 0x29, 0x6D, 0x17, 0x31, 0x6C, 0x17, 0x3D, 0x79, 0x01, 0x51, 0x6D,
+0x17, 0x39, 0x6E, 0x56, 0x79, 0x01, 0x6C, 0x17, 0x41, 0x79, 0x01, 0x51, 0x44, 0x6D, 0x17, 0x23,
+0x44, 0x70, 0x00, 0x1B, 0x6D, 0x17, 0x2B, 0x44, 0x70, 0x00, 0x27, 0x6D, 0x17, 0x33, 0x70, 0x00,
+0x3E, 0x6D, 0x17, 0x3B, 0x61, 0x17, 0x43, 0x6D, 0xBB, 0xFF, 0x61, 0x16, 0xF0, 0x29, 0xB5, 0xF7,
+0x61, 0x16, 0xF9, 0x29, 0xB5, 0xFD, 0x61, 0x17, 0x09, 0x29, 0xB6, 0x09, 0x61, 0x17, 0x00, 0x29,
+0xB6, 0x03, 0x61, 0x17, 0x10, 0x29, 0xB6, 0x1B, 0x61, 0x17, 0x19, 0x29, 0xB6, 0x21, 0x61, 0x18,
+0x2C, 0x6D, 0xBC, 0x43, 0x61, 0x00, 0x4B, 0x6D, 0xBB, 0xFD, 0x61, 0x17, 0x20, 0x28, 0xB6, 0x48,
+0x04, 0x17, 0x5A, 0x17, 0x78, 0x17, 0x97, 0x17, 0xAD, 0x03, 0x00, 0x00, 0x18, 0x1D, 0x18, 0x23,
+0x04, 0x18, 0x2C, 0x18, 0x2F, 0x18, 0x2F, 0x18, 0x34, 0x03, 0x00, 0x00, 0x18, 0x4C, 0x18, 0x52,
+0x04, 0x18, 0x5A, 0x18, 0x60, 0x18, 0x6B, 0x18, 0x8C, 0x03, 0x00, 0x00, 0x02, 0x7A, 0x02, 0x7A,
+0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00,
+0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
+0x0C, 0x00, 0x52, 0x21, 0x22, 0x2F, 0x5E, 0x6C, 0x17, 0x21, 0x6F, 0x50, 0x6C, 0x17, 0x23, 0x6F,
+0x52, 0x6C, 0x17, 0x25, 0x6C, 0x17, 0x41, 0x28, 0xA1, 0xCD, 0x6C, 0x17, 0x21, 0x6F, 0x50, 0x6C,
+0x17, 0x23, 0x6F, 0x52, 0x6C, 0x17, 0x25, 0xA9, 0x17, 0x75, 0x53, 0x61, 0x76, 0x65, 0x20, 0x69,
+0x6D, 0x61, 0x67, 0x65, 0x00, 0x28, 0xA2, 0x8B, 0x6C, 0x17, 0x29, 0x6F, 0x50, 0x6C, 0x17, 0x2B,
+0x6F, 0x52, 0x6C, 0x17, 0x2D, 0x61, 0xBD, 0x8D, 0x61, 0xAB, 0x7C, 0x61, 0xAB, 0x9C, 0x2C, 0xAB,
+0x78, 0x29, 0xB7, 0x70, 0x28, 0xA3, 0xF8, 0x6C, 0x17, 0x31, 0x6F, 0x50, 0x6C, 0x17, 0x33, 0x6F,
+0x52, 0x6C, 0x17, 0x35, 0x61, 0xBE, 0x8D, 0x61, 0xAB, 0x8C, 0x28, 0xA3, 0xF8, 0x6C, 0x17, 0x39,
+0x6F, 0x50, 0x6C, 0x17, 0x3B, 0x6F, 0x52, 0x6C, 0x17, 0x3D, 0x2C, 0xAB, 0x7B, 0x2A, 0x17, 0xE4,
+0x2C, 0xAB, 0x7A, 0x2A, 0x18, 0x00, 0xA9, 0x17, 0xD3, 0x53, 0x41, 0x56, 0x45, 0x20, 0x4F, 0x56,
+0x45, 0x52, 0x00, 0xA9, 0x17, 0xDB, 0x53, 0x41, 0x56, 0x45, 0x00, 0x2C, 0xAB, 0x79, 0x29, 0xB7,
+0x70, 0x28, 0xA1, 0x27, 0xA9, 0x17, 0xFD, 0x46, 0x69, 0x6C, 0x65, 0x20, 0x70, 0x61, 0x74, 0x68,
+0x20, 0x69, 0x73, 0x20, 0x74, 0x6F, 0x6F, 0x20, 0x6C, 0x6F, 0x6E, 0x67, 0x00, 0x28, 0xA0, 0xCD,
+0xA9, 0x18, 0x1A, 0x43, 0x61, 0x6E, 0x27, 0x74, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69,
+0x74, 0x65, 0x20, 0x66, 0x6F, 0x6C, 0x64, 0x65, 0x72, 0x00, 0x28, 0xA0, 0xCD, 0x29, 0xAA, 0xEC,
+0x28, 0x18, 0x26, 0x29, 0xAA, 0xF2, 0x29, 0xB2, 0xA1, 0x28, 0xB1, 0x92, 0x28, 0x04, 0xD2, 0x21,
+0xFF, 0x2F, 0x4A, 0x88, 0x2C, 0xAB, 0x7A, 0x29, 0xB8, 0xF3, 0x61, 0xBF, 0x8D, 0x61, 0xC6, 0x83,
+0x61, 0x01, 0x00, 0x29, 0xB6, 0xB1, 0x29, 0x51, 0xF9, 0x28, 0x04, 0xD2, 0x29, 0xAA, 0xF8, 0x28,
+0x18, 0x55, 0x29, 0xAA, 0xFE, 0x21, 0x00, 0x28, 0x17, 0xAD, 0x36, 0x01, 0x2A, 0x18, 0x2C, 0x88,
+0x36, 0x01, 0x29, 0xB8, 0xF5, 0x61, 0xBD, 0x8D, 0x28, 0x18, 0x73, 0x36, 0x01, 0x29, 0xB8, 0xF5,
+0x61, 0xBE, 0x8D, 0x21, 0xA0, 0x2F, 0x5E, 0xC1, 0x6C, 0xBA, 0x5F, 0x6C, 0x17, 0x29, 0x6C, 0x17,
+0x2D, 0x41, 0x29, 0xA5, 0x08, 0x21, 0xFF, 0x2F, 0x4A, 0x28, 0xB1, 0x92, 0x36, 0x01, 0x2A, 0x18,
+0x34, 0x88, 0x61, 0x18, 0xB1, 0x61, 0x18, 0x9F, 0x2C, 0x00, 0xC5, 0x29, 0xB7, 0x70, 0x08, 0xA9,
+0x18, 0xAE, 0x55, 0x6E, 0x74, 0x69, 0x74, 0x6C, 0x65, 0x64, 0x2E, 0x63, 0x6F, 0x00, 0x28, 0xAA,
+0x9B, 0x61, 0xC6, 0x83, 0x28, 0xAA, 0xB9, 0x61, 0x18, 0xBD, 0x28, 0xB1, 0xD2, 0x61, 0x18, 0xC6,
+0x61, 0x01, 0x07, 0x28, 0xB1, 0x34, 0x61, 0x19, 0x85, 0x6D, 0xBB, 0xFF, 0x61, 0x18, 0xFC, 0x29,
+0xB5, 0xF7, 0x61, 0x19, 0x0B, 0x29, 0xB5, 0xFD, 0x61, 0x19, 0x1A, 0x29, 0xB6, 0x03, 0x61, 0x19,
+0x29, 0x29, 0xB6, 0x1B, 0x61, 0x1B, 0xBC, 0x6D, 0xBB, 0x33, 0x61, 0x1B, 0x5C, 0x6D, 0xBB, 0x35,
+0x61, 0x1B, 0x1C, 0x6D, 0xBC, 0x43, 0x61, 0x19, 0x3C, 0x28, 0xB6, 0x48, 0x07, 0x19, 0xDC, 0x19,
+0xFC, 0x1A, 0x3A, 0x1A, 0x4A, 0x1A, 0x5C, 0x1A, 0x8C, 0x1A, 0xAD, 0x07, 0x00, 0x00, 0x1A, 0xEB,
+0x1A, 0xFD, 0x1B, 0x03, 0x1B, 0x09, 0x00, 0x00, 0x1B, 0x18, 0x07, 0x1B, 0x1C, 0x1B, 0x1F, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x22, 0x1B, 0x52, 0x09, 0x1B, 0x5C, 0x1B, 0x62, 0x1B, 0x81,
+0x1B, 0x87, 0x1B, 0x8D, 0x1B, 0xB0, 0x1B, 0xB6, 0x00, 0x00, 0x1B, 0xBC, 0x09, 0x00, 0x08, 0x00,
+0x08, 0x00, 0x72, 0x00, 0x0F, 0x00, 0x0B, 0x00, 0x1A, 0x00, 0x6A, 0x00, 0x0F, 0x00, 0x0B, 0x00,
+0x41, 0x00, 0x6A, 0x00, 0x0A, 0x00, 0x0B, 0x00, 0x55, 0x00, 0x6A, 0x00, 0x0A, 0x00, 0x0B, 0x00,
+0x69, 0x00, 0x6A, 0x00, 0x0A, 0x00, 0x0C, 0x00, 0x78, 0x00, 0x68, 0x00, 0x0C, 0x00, 0x0C, 0x00,
+0x98, 0x00, 0x68, 0x00, 0x0D, 0x00, 0x08, 0x00, 0x08, 0x00, 0x72, 0x00, 0xA3, 0x00, 0x00, 0x00,
+0x00, 0x7F, 0xFF, 0x7F, 0xFF, 0x61, 0x2D, 0xB7, 0x61, 0x19, 0xAB, 0x2C, 0x1C, 0x4D, 0x29, 0xB7,
+0x70, 0x09, 0x6C, 0x19, 0x75, 0x6F, 0x50, 0x6C, 0x19, 0x77, 0x6F, 0x52, 0x6C, 0x19, 0x79, 0x6C,
+0x19, 0x7B, 0x29, 0xA1, 0xCD, 0x29, 0x1B, 0xC7, 0x28, 0x1A, 0x12, 0x21, 0x00, 0x2C, 0xC5, 0x9A,
+0x70, 0xC5, 0x9B, 0x0C, 0x30, 0x08, 0x3C, 0x20, 0x2F, 0x5E, 0x6E, 0x54, 0x71, 0x00, 0x18, 0x6F,
+0x50, 0x61, 0x00, 0x1A, 0x6F, 0x52, 0xA1, 0x08, 0x93, 0x64, 0x00, 0x10, 0x03, 0x30, 0x08, 0x29,
+0xAD, 0xA2, 0x21, 0x50, 0x2F, 0x5F, 0x84, 0xAA, 0x19, 0xC8, 0x82, 0x88, 0x6C, 0x19, 0x75, 0x6F,
+0x50, 0x6C, 0x19, 0x77, 0x6F, 0x52, 0x6C, 0x19, 0x79, 0xA9, 0x19, 0xF9, 0x45, 0x64, 0x69, 0x74,
+0x20, 0x70, 0x61, 0x6C, 0x65, 0x74, 0x74, 0x65, 0x00, 0x28, 0xA2, 0x8B, 0x6C, 0x19, 0x45, 0x6F,
+0x50, 0x6C, 0x19, 0x47, 0x6F, 0x52, 0x21, 0x00, 0x2C, 0xC5, 0x9A, 0x70, 0xC5, 0x9B, 0x0C, 0x28,
+0x31, 0x27, 0x29, 0x1C, 0x16, 0x61, 0x00, 0x0B, 0x6F, 0x50, 0x61, 0x00, 0x2B, 0x6F, 0x52, 0x61,
+0x00, 0x68, 0x61, 0x00, 0x05, 0x21, 0x00, 0x29, 0xAD, 0xA2, 0x21, 0x01, 0x2F, 0x5A, 0x61, 0x00,
+0x68, 0x61, 0x1C, 0x4E, 0x61, 0x3C, 0x38, 0x28, 0xAD, 0x63, 0x2C, 0x1C, 0x4A, 0xA9, 0x1A, 0x44,
+0x52, 0x65, 0x64, 0x00, 0x6C, 0x19, 0x4F, 0x28, 0x1A, 0x6A, 0x2C, 0x1C, 0x4B, 0xA9, 0x1A, 0x56,
+0x47, 0x72, 0x65, 0x65, 0x6E, 0x00, 0x6C, 0x19, 0x57, 0x28, 0x1A, 0x6A, 0x2C, 0x1C, 0x4C, 0xA9,
+0x1A, 0x67, 0x42, 0x6C, 0x75, 0x65, 0x00, 0x6C, 0x19, 0x5F, 0x6F, 0x52, 0x6C, 0x19, 0x4D, 0x6F,
+0x50, 0x21, 0x01, 0x2F, 0x5A, 0x61, 0x02, 0xC6, 0x2F, 0x5F, 0x2F, 0x5F, 0x61, 0x3C, 0x38, 0x29,
+0xAC, 0xA7, 0x61, 0x82, 0x46, 0x2F, 0x5F, 0x2F, 0x5F, 0x28, 0x32, 0x2A, 0x6C, 0x19, 0x65, 0x6F,
+0x50, 0x6C, 0x19, 0x67, 0x6F, 0x52, 0x6C, 0x19, 0x69, 0xA9, 0x1A, 0xAA, 0x52, 0x61, 0x6E, 0x64,
+0x6F, 0x6D, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x75, 0x72, 0x00, 0x28, 0xA1, 0x72, 0x6C, 0x19, 0x6D,
+0x6F, 0x50, 0x6C, 0x19, 0x6F, 0x6F, 0x52, 0x2C, 0x1C, 0x4D, 0x6C, 0x19, 0x71, 0xA9, 0x1A, 0xC7,
+0x43, 0x6F, 0x6C, 0x6F, 0x75, 0x72, 0x00, 0xA9, 0x1A, 0xD0, 0x49, 0x6D, 0x61, 0x67, 0x65, 0x00,
+0x29, 0xA6, 0x38, 0x61, 0x02, 0xC6, 0x2F, 0x5F, 0x2F, 0x5F, 0xA9, 0x1A, 0xE5, 0x50, 0x72, 0x65,
+0x76, 0x69, 0x65, 0x77, 0x00, 0x61, 0x3C, 0x38, 0x28, 0xAC, 0xBA, 0x81, 0x21, 0x00, 0x2C, 0xC5,
+0x9A, 0x70, 0xC5, 0x9B, 0x21, 0x07, 0x01, 0x29, 0xB8, 0x8A, 0x28, 0x1C, 0x37, 0x61, 0x1C, 0x4A,
+0x28, 0x1B, 0x0C, 0x61, 0x1C, 0x4B, 0x28, 0x1B, 0x0C, 0x61, 0x1C, 0x4C, 0x07, 0x26, 0x0F, 0x29,
+0xB8, 0x8A, 0x29, 0x1B, 0xEE, 0x28, 0x1A, 0x12, 0x02, 0x28, 0x1B, 0x52, 0x28, 0x0E, 0x3B, 0x28,
+0x26, 0xB9, 0x29, 0xA7, 0x3A, 0x29, 0xA6, 0xF2, 0x3E, 0x0F, 0x2D, 0x1C, 0x4A, 0x29, 0xA6, 0xF2,
+0x3E, 0x0F, 0x2D, 0x1C, 0x4B, 0x29, 0xA6, 0xF2, 0x3E, 0x0F, 0x2D, 0x1C, 0x4C, 0x29, 0x1B, 0xEE,
+0x29, 0x1A, 0x12, 0x21, 0x00, 0x29, 0x1A, 0x3A, 0x21, 0x00, 0x29, 0x1A, 0x4A, 0x21, 0x00, 0x28,
+0x1A, 0x5C, 0x2C, 0x1C, 0x4D, 0x1F, 0x2D, 0x1C, 0x4D, 0x28, 0xB0, 0x1A, 0x36, 0x01, 0x2A, 0x1B,
+0x1C, 0x88, 0x36, 0x01, 0x29, 0xB8, 0xF5, 0x21, 0x00, 0x2C, 0xC5, 0x9A, 0x70, 0xC5, 0x9B, 0x21,
+0x07, 0x61, 0x00, 0x0D, 0x6C, 0x19, 0x45, 0x52, 0x61, 0x26, 0xBF, 0x29, 0xB8, 0x4D, 0x28, 0x1C,
+0x37, 0x61, 0x1C, 0x4A, 0x28, 0x1B, 0x90, 0x61, 0x1C, 0x4B, 0x28, 0x1B, 0x90, 0x61, 0x1C, 0x4C,
+0x6D, 0x1B, 0x99, 0x36, 0x02, 0x29, 0xB8, 0xF5, 0x61, 0x00, 0x00, 0x21, 0x0F, 0x61, 0x00, 0x06,
+0x6C, 0x19, 0x4D, 0x52, 0x29, 0xB7, 0xF3, 0x29, 0x1B, 0xEE, 0x29, 0xB1, 0x92, 0x28, 0x1A, 0x12,
+0x36, 0x01, 0x2A, 0x1B, 0x22, 0x88, 0x36, 0x01, 0x2A, 0x1B, 0x52, 0x88, 0x2C, 0x1C, 0x4D, 0x2A,
+0x1B, 0xC4, 0x02, 0x88, 0x28, 0x03, 0xEC, 0x21, 0x00, 0x21, 0x00, 0x2C, 0xC5, 0x9A, 0x70, 0xC5,
+0x9B, 0x0C, 0x78, 0x01, 0x70, 0xC5, 0x83, 0x4C, 0x44, 0x79, 0x04, 0x39, 0x04, 0x46, 0x06, 0x79,
+0x04, 0x39, 0x04, 0x2D, 0x1C, 0x4C, 0x2D, 0x1C, 0x4B, 0x2D, 0x1C, 0x4A, 0x02, 0x88, 0x21, 0x00,
+0x2C, 0xC5, 0x9A, 0x70, 0xC5, 0x9B, 0x0C, 0x25, 0x00, 0x78, 0x01, 0x70, 0xC5, 0x83, 0xC1, 0x30,
+0x08, 0x38, 0x04, 0x2C, 0x1C, 0x4A, 0x1C, 0x2C, 0x1C, 0x4B, 0x38, 0x04, 0x2C, 0x1C, 0x4C, 0x1C,
+0x44, 0x6F, 0x58, 0x41, 0x4D, 0x88, 0x72, 0x1C, 0x4E, 0x2C, 0x1C, 0x4A, 0x29, 0x1C, 0x2D, 0x2C,
+0x1C, 0x4B, 0x29, 0x1C, 0x2D, 0x2C, 0x1C, 0x4C, 0x29, 0x1C, 0x2D, 0x42, 0x88, 0x29, 0xB7, 0xA4,
+0x04, 0x45, 0x4D, 0x70, 0x00, 0x02, 0x88, 0x29, 0x1B, 0xC7, 0x29, 0x1A, 0x12, 0x61, 0xB0, 0x22,
+0x61, 0xB0, 0x1A, 0x2C, 0x1C, 0x4D, 0x29, 0xB7, 0x70, 0x08, 0x00, 0x00, 0x00, 0x00, 0x23, 0x30,
+0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x03, 0x02, 0x04, 0x06, 0x06, 0x08, 0x06, 0x02, 0x04, 0x04,
+0x05, 0x06, 0x03, 0x05, 0x02, 0x04, 0x06, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+0x02, 0x03, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x04,
+0x06, 0x06, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+0x06, 0x04, 0x06, 0x04, 0x06, 0x06, 0x04, 0x05, 0x05, 0x05, 0x05, 0x05, 0x03, 0x05, 0x05, 0x02,
+0x03, 0x05, 0x03, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x03, 0x05, 0x05, 0x06, 0x05, 0x05,
+0x05, 0x04, 0x02, 0x04, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
+0x80, 0x80, 0x80, 0x00, 0x80, 0x00, 0xA0, 0xA0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x50,
+0xF8, 0x50, 0xF8, 0x50, 0x50, 0x00, 0x20, 0x70, 0xA0, 0x70, 0x28, 0x70, 0x20, 0x00, 0xC2, 0xC4,
+0x08, 0x10, 0x20, 0x46, 0x86, 0x00, 0x60, 0x80, 0x80, 0x40, 0xA8, 0x90, 0x68, 0x00, 0x80, 0x80,
+0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x40, 0x80, 0x80, 0x80, 0x40, 0x20, 0x00, 0x80, 0x40,
+0x20, 0x20, 0x20, 0x40, 0x80, 0x00, 0x90, 0x60, 0xF0, 0x60, 0x90, 0x00, 0x00, 0x00, 0x00, 0x20,
+0x20, 0xF8, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x00, 0x00,
+0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x20, 0x20,
+0x40, 0x40, 0x40, 0x80, 0x80, 0x00, 0x70, 0x88, 0x98, 0xA8, 0xC8, 0x88, 0x70, 0x00, 0x40, 0xC0,
+0x40, 0x40, 0x40, 0x40, 0xE0, 0x00, 0x70, 0x88, 0x08, 0x30, 0x40, 0x80, 0xF8, 0x00, 0x70, 0x88,
+0x08, 0x30, 0x08, 0x88, 0x70, 0x00, 0x30, 0x50, 0x90, 0x90, 0xF8, 0x10, 0x10, 0x00, 0xF8, 0x80,
+0xF0, 0x08, 0x08, 0x88, 0x70, 0x00, 0x30, 0x40, 0x80, 0xF0, 0x88, 0x88, 0x70, 0x00, 0xF8, 0x08,
+0x10, 0x10, 0x20, 0x20, 0x40, 0x00, 0x70, 0x88, 0x88, 0x70, 0x88, 0x88, 0x70, 0x00, 0x70, 0x88,
+0x88, 0x78, 0x08, 0x10, 0x60, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
+0x40, 0x00, 0x00, 0x00, 0x40, 0x80, 0x10, 0x20, 0x40, 0x80, 0x40, 0x20, 0x10, 0x00, 0x00, 0x00,
+0xF0, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x20, 0x40, 0x80, 0x00, 0x70, 0x88,
+0x08, 0x10, 0x20, 0x00, 0x20, 0x00, 0x70, 0x88, 0xB8, 0xD8, 0xB8, 0x80, 0x70, 0x00, 0x70, 0x88,
+0x88, 0x88, 0xF8, 0x88, 0x88, 0x00, 0xF0, 0x88, 0x88, 0xF0, 0x88, 0x88, 0xF0, 0x00, 0x70, 0x88,
+0x80, 0x80, 0x80, 0x88, 0x70, 0x00, 0xF0, 0x88, 0x88, 0x88, 0x88, 0x88, 0xF0, 0x00, 0xF8, 0x80,
+0x80, 0xF0, 0x80, 0x80, 0xF8, 0x00, 0xF8, 0x80, 0x80, 0xF0, 0x80, 0x80, 0x80, 0x00, 0x70, 0x88,
+0x80, 0x98, 0x88, 0x88, 0x70, 0x00, 0x88, 0x88, 0x88, 0xF8, 0x88, 0x88, 0x88, 0x00, 0xE0, 0x40,
+0x40, 0x40, 0x40, 0x40, 0xE0, 0x00, 0x38, 0x08, 0x08, 0x08, 0x08, 0x88, 0x70, 0x00, 0x88, 0x88,
+0x90, 0xE0, 0x90, 0x88, 0x88, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xF0, 0x00, 0x88, 0xD8,
+0xA8, 0xA8, 0x88, 0x88, 0x88, 0x00, 0x88, 0xC8, 0xA8, 0x98, 0x88, 0x88, 0x88, 0x00, 0x70, 0x88,
+0x88, 0x88, 0x88, 0x88, 0x70, 0x00, 0xF0, 0x88, 0x88, 0x88, 0xF0, 0x80, 0x80, 0x00, 0x70, 0x88,
+0x88, 0x88, 0xA8, 0x90, 0x68, 0x00, 0xF0, 0x88, 0x88, 0xF0, 0x88, 0x88, 0x88, 0x00, 0x70, 0x88,
+0x80, 0x70, 0x08, 0x88, 0x70, 0x00, 0xF8, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x88, 0x88,
+0x88, 0x88, 0x88, 0x88, 0x70, 0x00, 0x88, 0x88, 0x88, 0x88, 0x50, 0x50, 0x20, 0x00, 0x88, 0x88,
+0x88, 0xA8, 0xA8, 0xA8, 0x50, 0x00, 0x88, 0x88, 0x50, 0x20, 0x50, 0x88, 0x88, 0x00, 0x88, 0x88,
+0x88, 0x50, 0x20, 0x20, 0x20, 0x00, 0xF8, 0x08, 0x10, 0x20, 0x40, 0x80, 0xF8, 0x00, 0xE0, 0x80,
+0x80, 0x80, 0x80, 0x80, 0xE0, 0x00, 0x80, 0x40, 0x40, 0x20, 0x10, 0x10, 0x08, 0x00, 0xE0, 0x20,
+0x20, 0x20, 0x20, 0x20, 0xE0, 0x00, 0x20, 0x50, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x80, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x70, 0x90, 0x90, 0x90, 0x70, 0x00, 0x80, 0x80, 0xE0, 0x90, 0x90, 0x90, 0xE0, 0x00, 0x00, 0x00,
+0x60, 0x90, 0x80, 0x90, 0x60, 0x00, 0x10, 0x10, 0x70, 0x90, 0x90, 0x90, 0x70, 0x00, 0x00, 0x00,
+0x60, 0x90, 0xF0, 0x80, 0x70, 0x00, 0x40, 0x80, 0xC0, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00,
+0x70, 0x90, 0x90, 0x70, 0x10, 0x60, 0x80, 0x80, 0xE0, 0x90, 0x90, 0x90, 0x90, 0x00, 0x80, 0x00,
+0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x40, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80,
+0x90, 0xA0, 0xE0, 0x90, 0x90, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0x00, 0x00, 0x00,
+0xF0, 0xA8, 0xA8, 0xA8, 0xA8, 0x00, 0x00, 0x00, 0xE0, 0x90, 0x90, 0x90, 0x90, 0x00, 0x00, 0x00,
+0x60, 0x90, 0x90, 0x90, 0x60, 0x00, 0x00, 0x00, 0xE0, 0x90, 0x90, 0xE0, 0x80, 0x80, 0x00, 0x00,
+0x70, 0x90, 0x90, 0x70, 0x10, 0x10, 0x00, 0x00, 0xB0, 0xC0, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00,
+0x70, 0x80, 0x60, 0x10, 0xE0, 0x00, 0x80, 0x80, 0xC0, 0x80, 0x80, 0x80, 0x40, 0x00, 0x00, 0x00,
+0x90, 0x90, 0x90, 0x90, 0x70, 0x00, 0x00, 0x00, 0x90, 0x90, 0x90, 0x50, 0x20, 0x00, 0x00, 0x00,
+0x88, 0x88, 0xA8, 0xA8, 0x50, 0x00, 0x00, 0x00, 0x90, 0x90, 0x60, 0x90, 0x90, 0x00, 0x00, 0x00,
+0x90, 0x90, 0x90, 0x70, 0x10, 0x60, 0x00, 0x00, 0xF0, 0x10, 0x60, 0x80, 0xF0, 0x00, 0x20, 0x40,
+0x40, 0x80, 0x40, 0x40, 0x20, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x40,
+0x40, 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x62, 0x92, 0x8C, 0x00, 0x00, 0x00, 0xF8, 0x88,
+0x88, 0x88, 0x88, 0x88, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x00, 0x29, 0x04,
+0xA8, 0x6D, 0x00, 0xB7, 0x6D, 0x00, 0xB5, 0x29, 0x2F, 0xBC, 0x29, 0xAD, 0x82, 0x29, 0x03, 0x3D,
+0x2F, 0x5A, 0x21, 0x00, 0x21, 0x00, 0x2C, 0xC5, 0x9A, 0x70, 0xC5, 0x93, 0x0C, 0x78, 0x01, 0xC1,
+0x04, 0x36, 0x01, 0x04, 0x2B, 0x20, 0x07, 0x43, 0x70, 0x20, 0x25, 0x4C, 0x0B, 0x04, 0x36, 0x02,
+0x04, 0x2B, 0x20, 0x16, 0x43, 0x70, 0x20, 0x2D, 0x4C, 0x0B, 0x36, 0x03, 0x04, 0x41, 0x70, 0x20,
+0x35, 0x4C, 0x0B, 0x2B, 0x20, 0x17, 0x88, 0x29, 0x04, 0x9C, 0x6D, 0x00, 0xBB, 0x6D, 0x00, 0xB9,
+0x29, 0xA7, 0x3A, 0x28, 0x53, 0x2A, 0x88, 0x2C, 0x00, 0xC3, 0x2C, 0x00, 0xC6, 0x1F, 0x1E, 0x2D,
+0x00, 0xC3, 0x28, 0x53, 0x5F, 0x20, 0x3D, 0x21, 0x6F, 0x21, 0x6F, 0x20, 0x49, 0x20, 0x78, 0x20,
+0x9D, 0x20, 0xA6, 0xB6, 0x98, 0x21, 0x01, 0x21, 0x10, 0x21, 0x19, 0xB6, 0x98, 0x29, 0x21, 0xA2,
+0x6C, 0x00, 0xB9, 0x6C, 0x00, 0xBB, 0x28, 0x22, 0x4E, 0x2C, 0x00, 0xB1, 0x2C, 0x00, 0xB3, 0x1E,
+0x29, 0xB8, 0xF3, 0x6C, 0x00, 0xB5, 0x6C, 0x00, 0xB7, 0x29, 0x22, 0xF4, 0x3E, 0x07, 0x21, 0x00,
+0x2C, 0xC5, 0x9A, 0x70, 0xC5, 0x9B, 0x0C, 0x16, 0x1F, 0x29, 0xB8, 0xF5, 0x6C, 0x00, 0xB5, 0x6C,
+0x00, 0xB7, 0x29, 0x23, 0x0E, 0x28, 0xB0, 0x1A, 0x29, 0x01, 0xCA, 0x2C, 0x00, 0xAD, 0x2B, 0x21,
+0x54, 0x6C, 0x00, 0xB9, 0x6C, 0x00, 0xBB, 0x6C, 0x00, 0xBD, 0x6C, 0x00, 0xBF, 0x29, 0x39, 0x93,
+0x6C, 0x00, 0xBD, 0x6D, 0x00, 0xB9, 0x6C, 0x00, 0xBF, 0x6D, 0x00, 0xBB, 0x88, 0x29, 0x3A, 0x2D,
+0x61, 0x39, 0x93, 0x28, 0x20, 0xEF, 0x2C, 0x00, 0xAB, 0x2A, 0x20, 0xEC, 0x29, 0x04, 0x9C, 0x46,
+0x6C, 0x00, 0xB9, 0x29, 0xB9, 0x07, 0x45, 0x51, 0x52, 0x2C, 0x00, 0xB0, 0x58, 0x46, 0x70, 0x00,
+0x03, 0x2C, 0x00, 0xB0, 0x58, 0x6C, 0x00, 0xA1, 0x50, 0x6F, 0x50, 0x46, 0x6C, 0x00, 0xBB, 0x29,
+0xB9, 0x07, 0x45, 0x51, 0x52, 0x2C, 0x00, 0xB0, 0x58, 0x46, 0x70, 0x00, 0x03, 0x2C, 0x00, 0xB0,
+0x58, 0x6C, 0x00, 0xA3, 0x50, 0x6F, 0x52, 0x21, 0x83, 0x28, 0xAD, 0x38, 0x61, 0x9A, 0xF4, 0x29,
+0xA7, 0x4B, 0x29, 0x22, 0xAF, 0xC1, 0x6C, 0x00, 0xB9, 0x6C, 0x00, 0xBB, 0x29, 0x04, 0x9C, 0x41,
+0x08, 0x6C, 0x00, 0xB9, 0x6C, 0x00, 0xBB, 0x29, 0x04, 0x9C, 0x29, 0x39, 0x93, 0x28, 0x21, 0x31,
+0x29, 0x3A, 0x2D, 0x61, 0x39, 0x93, 0x28, 0x21, 0x1C, 0x61, 0x9A, 0xF4, 0xC1, 0x29, 0xA7, 0x4B,
+0x29, 0x22, 0xAF, 0x29, 0x21, 0xA2, 0x6C, 0x00, 0xB9, 0x6C, 0x00, 0xBB, 0x29, 0x04, 0x9C, 0x41,
+0x09, 0x61, 0xB0, 0x1A, 0x61, 0x2F, 0xE7, 0x2C, 0x00, 0xB1, 0x2C, 0x00, 0xB3, 0x1F, 0x1E, 0x2C,
+0x00, 0xB1, 0x2C, 0x00, 0xB2, 0x1E, 0x1F, 0x2C, 0x00, 0xB3, 0x1E, 0x2C, 0x00, 0xB4, 0x1E, 0x1C,
+0x29, 0xB7, 0x70, 0x08, 0x6C, 0x00, 0xB9, 0x6C, 0x00, 0xBD, 0x51, 0x29, 0xBA, 0x39, 0x6C, 0x00,
+0xBB, 0x6C, 0x00, 0xBF, 0x51, 0x29, 0xBA, 0x39, 0x50, 0x75, 0x00, 0x01, 0x28, 0xB8, 0xF5, 0x2C,
+0x00, 0xB0, 0x2A, 0x21, 0x84, 0x61, 0x3B, 0xA7, 0x6D, 0x22, 0x49, 0x61, 0x3A, 0xA1, 0x6D, 0x22,
+0x60, 0x28, 0x21, 0xC3, 0x61, 0x3B, 0xA7, 0x6D, 0x22, 0x49, 0x61, 0x3A, 0x38, 0x6D, 0x22, 0x60,
+0x28, 0x21, 0xC3, 0x61, 0x3C, 0x07, 0x6D, 0x22, 0x49, 0x61, 0x3B, 0x6A, 0x6D, 0x22, 0x60, 0x28,
+0x21, 0xC3, 0x2C, 0x00, 0xB0, 0x2A, 0x21, 0xB7, 0x61, 0x3B, 0x9D, 0x6D, 0x22, 0x49, 0x61, 0x3B,
+0x21, 0x6D, 0x22, 0x60, 0x28, 0x21, 0xC3, 0x61, 0x3B, 0x9D, 0x6D, 0x22, 0x49, 0x61, 0x3A, 0xB5,
+0x6D, 0x22, 0x60, 0x21, 0x00, 0x21, 0x00, 0x2C, 0xC5, 0x9A, 0x70, 0xC5, 0xAB, 0x0C, 0x78, 0x03,
+0x70, 0xC6, 0x03, 0x44, 0x6D, 0x22, 0x74, 0x6D, 0x22, 0xBF, 0x21, 0x00, 0x21, 0x00, 0x2C, 0xC5,
+0x9A, 0x70, 0xC5, 0xA3, 0x0C, 0x78, 0x03, 0x70, 0xC5, 0xC3, 0x6D, 0x22, 0x7B, 0x21, 0x00, 0x2C,
+0xC5, 0x9A, 0x70, 0xC5, 0x9B, 0x0C, 0x2D, 0x3C, 0x2B, 0x61, 0x3B, 0xF8, 0x61, 0x3B, 0xE6, 0x2C,
+0x00, 0xB1, 0x2C, 0x00, 0xB3, 0x1E, 0x29, 0xB7, 0x70, 0x09, 0x21, 0x00, 0x2C, 0xC5, 0x9A, 0x70,
+0xC5, 0xBB, 0x0C, 0x2D, 0x22, 0xA4, 0x21, 0x00, 0x2C, 0xC5, 0x9A, 0x70, 0xC5, 0xBB, 0x0C, 0x2D,
+0x22, 0x4F, 0x6C, 0x22, 0x74, 0x44, 0x4C, 0x46, 0x70, 0x00, 0x02, 0x44, 0x4C, 0x46, 0x70, 0x00,
+0x02, 0x44, 0x4C, 0x46, 0x70, 0x00, 0x02, 0x4C, 0x5E, 0x5E, 0x5E, 0x1E, 0x36, 0xFF, 0x1F, 0x2D,
+0x22, 0x5A, 0x88, 0x45, 0x45, 0x29, 0x22, 0xBB, 0x2A, 0x00, 0x00, 0x42, 0x42, 0x88, 0x21, 0x00,
+0x2B, 0x22, 0x9E, 0x61, 0x22, 0x62, 0x61, 0x22, 0x98, 0x21, 0x00, 0x29, 0xB7, 0x70, 0x09, 0x28,
+0x00, 0x00, 0x45, 0x2D, 0x22, 0x78, 0x02, 0xE1, 0x00, 0x08, 0xE1, 0x00, 0x00, 0x44, 0x43, 0x50,
+0x7E, 0x00, 0x07, 0x70, 0x00, 0x00, 0x0C, 0x3A, 0x00, 0x43, 0x70, 0x00, 0x00, 0x0C, 0x1E, 0x43,
+0x70, 0x22, 0x90, 0x0D, 0xD2, 0xD7, 0xAA, 0x22, 0x6D, 0xC2, 0xC2, 0x67, 0x22, 0x90, 0x47, 0x88,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x22, 0x7B, 0x47, 0x47, 0x88, 0x70, 0x00,
+0x00, 0x46, 0x61, 0x00, 0x00, 0x29, 0xA7, 0x0B, 0x44, 0x6D, 0x22, 0x9F, 0x50, 0x46, 0x88, 0x21,
+0x00, 0x2C, 0x22, 0xA4, 0x29, 0xA7, 0x0B, 0x6D, 0x22, 0x9F, 0x88, 0x7E, 0x00, 0x07, 0x70, 0x00,
+0x00, 0x0C, 0x07, 0x02, 0x27, 0x80, 0x3E, 0x07, 0x19, 0x1E, 0x88, 0x6C, 0x00, 0xA7, 0x54, 0x81,
+0x6C, 0x00, 0xA5, 0x54, 0x01, 0x1E, 0x88, 0x6F, 0x20, 0x6C, 0x00, 0xA5, 0x70, 0x00, 0x03, 0x7E,
+0xFF, 0xFC, 0x79, 0x01, 0x6F, 0x22, 0x83, 0x79, 0x01, 0x3D, 0x01, 0x6E, 0x2A, 0x50, 0x01, 0x3E,
+0x01, 0x38, 0x02, 0x88, 0x45, 0x45, 0x29, 0x22, 0xCB, 0x2A, 0x23, 0x01, 0x42, 0x42, 0x21, 0xFF,
+0x88, 0x29, 0x22, 0xD7, 0x81, 0x6F, 0x14, 0x2E, 0x16, 0x01, 0x1B, 0x3E, 0x0F, 0x88, 0x61, 0x26,
+0xA6, 0x61, 0x26, 0xB9, 0x29, 0xB7, 0x22, 0x29, 0x53, 0xB6, 0x21, 0x00, 0x21, 0x00, 0x2C, 0xC5,
+0x9A, 0x70, 0xC5, 0xB3, 0x0C, 0x52, 0xC3, 0x44, 0x6D, 0x23, 0xFD, 0x44, 0x6D, 0x23, 0xF7, 0x6F,
+0x22, 0x45, 0x6F, 0x20, 0x6E, 0x2E, 0x44, 0x43, 0x51, 0x6D, 0x23, 0xF1, 0x43, 0x50, 0x6C, 0x00,
+0xA5, 0x53, 0x44, 0x6F, 0x20, 0x6E, 0x2E, 0x51, 0x50, 0x6D, 0x23, 0xEE, 0x44, 0x6F, 0x20, 0x6E,
+0x2E, 0x44, 0x43, 0x51, 0x6D, 0x23, 0xEB, 0x41, 0x50, 0x6C, 0x00, 0xA7, 0x53, 0x44, 0x6F, 0x20,
+0x6E, 0x2E, 0x51, 0x50, 0x6D, 0x23, 0xE8, 0x45, 0x6D, 0x26, 0xA6, 0x44, 0x6D, 0x26, 0xA8, 0x29,
+0x22, 0xF4, 0x04, 0x3E, 0x07, 0x2D, 0x26, 0xA4, 0x1F, 0x29, 0xB8, 0xF5, 0x29, 0x30, 0x8E, 0x29,
+0x3B, 0xF8, 0x21, 0x08, 0x2D, 0x3B, 0xD9, 0x21, 0x00, 0x29, 0x26, 0x64, 0x1F, 0x2A, 0x23, 0x96,
+0x29, 0x26, 0x40, 0x28, 0x23, 0x87, 0x6C, 0x26, 0xA6, 0x6C, 0x26, 0xA8, 0x53, 0x45, 0x53, 0x6D,
+0x26, 0xA6, 0x44, 0x6D, 0x26, 0xA8, 0x29, 0x26, 0x25, 0x36, 0x01, 0x81, 0x45, 0x52, 0x6D, 0x26,
+0xA6, 0x29, 0x26, 0x25, 0x36, 0x01, 0x81, 0x46, 0x6D, 0x26, 0xA6, 0x44, 0x53, 0x6D, 0x26, 0xA8,
+0x29, 0x26, 0x25, 0x36, 0x01, 0x81, 0x52, 0x6D, 0x26, 0xA8, 0x29, 0x26, 0x25, 0x36, 0x01, 0x81,
+0xDE, 0x9E, 0x01, 0x1F, 0x2A, 0x23, 0xE1, 0x6C, 0x26, 0xA6, 0x52, 0x6C, 0x26, 0xA8, 0x29, 0x3B,
+0xC0, 0x28, 0x24, 0x6D, 0x29, 0x21, 0x93, 0x61, 0x00, 0x00, 0x61, 0x00, 0x00, 0xE1, 0x00, 0x00,
+0xE1, 0x00, 0x00, 0x28, 0x23, 0xFF, 0x70, 0x00, 0x00, 0x28, 0x23, 0xFF, 0xF0, 0x00, 0x00, 0x43,
+0x71, 0x00, 0x03, 0x45, 0x71, 0x00, 0x03, 0x29, 0x22, 0x4E, 0xD7, 0xAA, 0x23, 0xFC, 0xC2, 0xEC,
+0x23, 0xF1, 0x57, 0x2A, 0x23, 0xF6, 0x42, 0x42, 0xC2, 0xC2, 0x28, 0x53, 0xD4, 0x2C, 0xBA, 0x6A,
+0x3C, 0x04, 0x04, 0x2D, 0xBA, 0x6A, 0x2D, 0xBA, 0x69, 0x21, 0x00, 0x2D, 0x00, 0xC6, 0x28, 0x53,
+0xD4, 0x29, 0x26, 0x1C, 0x29, 0x26, 0x40, 0x28, 0x24, 0x6D, 0x29, 0x26, 0x40, 0x21, 0x01, 0x29,
+0x26, 0x64, 0x1F, 0x2A, 0x24, 0x6D, 0x2C, 0x26, 0xB7, 0x2C, 0x26, 0xB8, 0x1F, 0x1E, 0x21, 0x00,
+0x29, 0x26, 0x64, 0x21, 0x03, 0x29, 0x26, 0x64, 0x1C, 0x1E, 0x2C, 0x26, 0xB8, 0x1C, 0x2D, 0x26,
+0xB8, 0x2C, 0x26, 0xAA, 0x12, 0x3E, 0x03, 0x2D, 0x26, 0xAA, 0x29, 0x26, 0x40, 0x2E, 0x4C, 0x3E,
+0x04, 0x2A, 0x24, 0x1D, 0x29, 0x26, 0x25, 0x04, 0x36, 0x04, 0x2A, 0x24, 0xA0, 0x2C, 0x26, 0xAA,
+0x12, 0x3E, 0x03, 0x2D, 0x26, 0xAA, 0x21, 0x00, 0x29, 0x26, 0x64, 0x2A, 0x24, 0x7D, 0x2C, 0x26,
+0xAA, 0x13, 0x3E, 0x03, 0x2D, 0x26, 0xAA, 0x21, 0x00, 0x29, 0x26, 0x64, 0x1F, 0x2A, 0x24, 0x8E,
+0x13, 0x38, 0x01, 0x26, 0x00, 0x70, 0x24, 0xAA, 0x4C, 0x08, 0x24, 0xB2, 0x24, 0xE7, 0x26, 0x0E,
+0x26, 0x16, 0x2C, 0x26, 0xB7, 0x2A, 0x24, 0xCF, 0x2C, 0x26, 0xB8, 0x2A, 0x24, 0xD7, 0x21, 0x03,
+0x29, 0x26, 0x72, 0x21, 0x02, 0x29, 0x26, 0x72, 0x1E, 0x2A, 0x24, 0xDF, 0x28, 0x24, 0x3A, 0x21,
+0xFF, 0x2D, 0x26, 0xB8, 0x28, 0x24, 0x3A, 0x21, 0xFF, 0x2D, 0x26, 0xB0, 0x28, 0x24, 0x3A, 0x21,
+0x00, 0x2D, 0x26, 0xB0, 0x28, 0x24, 0x31, 0x21, 0x02, 0x29, 0x26, 0x64, 0x1F, 0x2A, 0x25, 0x25,
+0x2C, 0x26, 0xB0, 0x1F, 0x2A, 0x25, 0x36, 0x2C, 0x26, 0xB6, 0x1F, 0x2A, 0x25, 0x5F, 0x6C, 0x26,
+0xA6, 0x6C, 0x26, 0xAB, 0x56, 0x6C, 0x26, 0xA8, 0x6C, 0x26, 0xAD, 0x56, 0x1E, 0x2A, 0x25, 0xC2,
+0x6C, 0x26, 0xA6, 0x6C, 0x26, 0xB1, 0x56, 0x6C, 0x26, 0xA8, 0x6C, 0x26, 0xB3, 0x56, 0x1E, 0x2A,
+0x25, 0xEE, 0x28, 0x24, 0x3A, 0x21, 0x03, 0x29, 0x26, 0x72, 0x1F, 0x2A, 0x24, 0x3A, 0x21, 0x00,
+0x2D, 0x26, 0xB0, 0x28, 0x24, 0x31, 0x6C, 0x26, 0xA6, 0x6D, 0x26, 0xAB, 0x6C, 0x26, 0xA8, 0x6D,
+0x26, 0xAD, 0x2C, 0x26, 0xAA, 0x2D, 0x26, 0xAF, 0x21, 0xFF, 0x2D, 0x26, 0xB0, 0x21, 0x00, 0x2D,
+0x26, 0xB6, 0x21, 0x00, 0x2D, 0x26, 0xB8, 0x21, 0x00, 0x2D, 0x26, 0xB7, 0x28, 0x24, 0x3A, 0x6C,
+0x26, 0xA6, 0x6C, 0x26, 0xAB, 0x56, 0x6C, 0x26, 0xA8, 0x6C, 0x26, 0xAD, 0x56, 0x1E, 0x2A, 0x25,
+0x7A, 0x2C, 0x26, 0xB8, 0x2A, 0x25, 0xA8, 0x28, 0x24, 0x3A, 0x2C, 0x26, 0xAA, 0x2C, 0x26, 0xAF,
+0x16, 0x1F, 0x2A, 0x25, 0x95, 0x21, 0x00, 0x2D, 0x26, 0xB0, 0x2C, 0x26, 0xAA, 0x3D, 0x02, 0x2D,
+0x26, 0xAA, 0x28, 0x24, 0x31, 0x21, 0xFF, 0x2D, 0x26, 0xB7, 0x21, 0x00, 0x2D, 0x26, 0xB8, 0x2C,
+0x26, 0xAF, 0x2D, 0x26, 0xAA, 0x28, 0x24, 0x3A, 0x6C, 0x26, 0xA6, 0x6D, 0x26, 0xB1, 0x6C, 0x26,
+0xA8, 0x6D, 0x26, 0xB3, 0x2C, 0x26, 0xAA, 0x2D, 0x26, 0xB5, 0x21, 0xFF, 0x2D, 0x26, 0xB6, 0x28,
+0x24, 0x3A, 0x6C, 0x26, 0xB1, 0x6D, 0x26, 0xA6, 0x6C, 0x26, 0xB3, 0x6D, 0x26, 0xA8, 0x2C, 0x26,
+0xB5, 0x2D, 0x26, 0xAA, 0x21, 0x00, 0x2D, 0x26, 0xB0, 0x21, 0x00, 0x2D, 0x26, 0xB6, 0x21, 0x00,
+0x2D, 0x26, 0xB7, 0x2C, 0x26, 0xAA, 0x3D, 0x02, 0x2D, 0x26, 0xAA, 0x28, 0x24, 0x31, 0x6C, 0x26,
+0xA6, 0x6D, 0x26, 0xAB, 0x6C, 0x26, 0xA8, 0x6D, 0x26, 0xAD, 0x2C, 0x26, 0xB5, 0x2D, 0x26, 0xAF,
+0x2C, 0x26, 0xB5, 0x2D, 0x26, 0xAA, 0x21, 0x00, 0x2D, 0x26, 0xB6, 0x28, 0x24, 0x3A, 0x21, 0x00,
+0x2D, 0x26, 0xB0, 0x28, 0x24, 0x31, 0x29, 0x26, 0x1C, 0x28, 0x23, 0xE4, 0x6C, 0x26, 0xA6, 0x6C,
+0x26, 0xA8, 0x28, 0x3B, 0xC0, 0x21, 0x04, 0x21, 0x00, 0x29, 0x26, 0x64, 0x21, 0x02, 0x29, 0x26,
+0x64, 0x21, 0x03, 0x29, 0x26, 0x64, 0x21, 0x01, 0x29, 0x26, 0x64, 0x10, 0x10, 0x10, 0x10, 0x88,
+0x21, 0x00, 0x2C, 0x26, 0xAA, 0x44, 0x13, 0x3E, 0x03, 0x78, 0x01, 0x70, 0x26, 0x6A, 0x4C, 0x6C,
+0x26, 0xA8, 0x50, 0x6D, 0x26, 0xA8, 0x78, 0x01, 0x70, 0x26, 0x6A, 0x4C, 0x6C, 0x26, 0xA6, 0x50,
+0x6D, 0x26, 0xA6, 0x88, 0xE1, 0x26, 0x6A, 0x28, 0x26, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+0xFF, 0xFF, 0xE1, 0x26, 0x78, 0x28, 0x26, 0x80, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF,
+0x2C, 0x26, 0xAA, 0x10, 0x3E, 0x03, 0x26, 0x00, 0x44, 0x13, 0x3E, 0x03, 0x78, 0x01, 0x43, 0x50,
+0x4C, 0x6C, 0x26, 0xA8, 0x50, 0x46, 0x78, 0x01, 0x41, 0x50, 0x4C, 0x6C, 0x26, 0xA6, 0x50, 0x46,
+0x29, 0x22, 0xF4, 0x36, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x26, 0xBF, 0x28, 0xB1, 0xD2, 0xA9,
+0x26, 0xCA, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x61, 0x2A, 0x4D, 0x61, 0x00, 0x08,
+0x29, 0xB6, 0xB1, 0x61, 0x26, 0xDC, 0x61, 0x01, 0x0A, 0x28, 0xB1, 0x34, 0x6E, 0x54, 0x79, 0x01,
+0x44, 0x6C, 0x27, 0xE6, 0x79, 0x01, 0x51, 0x6D, 0x27, 0xE2, 0x44, 0x6C, 0x27, 0xEE, 0x79, 0x01,
+0x51, 0x44, 0x6D, 0x27, 0xEA, 0x44, 0x6D, 0x27, 0xF2, 0x44, 0x6D, 0x27, 0xFA, 0x44, 0x6D, 0x28,
+0x02, 0x44, 0x6D, 0x28, 0x0A, 0x44, 0x6D, 0x28, 0x12, 0x44, 0x6D, 0x28, 0x1A, 0x6D, 0x28, 0x22,
+0x6C, 0x28, 0x2E, 0x79, 0x01, 0x51, 0x6D, 0x28, 0x2A, 0x6E, 0x56, 0x79, 0x01, 0x6C, 0x28, 0x32,
+0x79, 0x01, 0x51, 0x44, 0x6D, 0x27, 0xE4, 0x70, 0x00, 0x14, 0x44, 0x6D, 0x27, 0xEC, 0x70, 0x00,
+0x10, 0x44, 0x6D, 0x27, 0xF4, 0x70, 0x00, 0x10, 0x44, 0x6D, 0x27, 0xFC, 0x70, 0x00, 0x10, 0x44,
+0x6D, 0x28, 0x04, 0x70, 0x00, 0x10, 0x44, 0x6D, 0x28, 0x0C, 0x70, 0x00, 0x10, 0x44, 0x6D, 0x28,
+0x14, 0x70, 0x00, 0x10, 0x44, 0x6D, 0x28, 0x1C, 0x70, 0x00, 0x10, 0x44, 0x6D, 0x28, 0x24, 0x70,
+0x00, 0x15, 0x6D, 0x28, 0x2C, 0x61, 0x28, 0x34, 0x6D, 0xBB, 0xFF, 0x61, 0x27, 0x8F, 0x29, 0xB5,
+0xF7, 0x61, 0x27, 0xA4, 0x29, 0xB5, 0xFD, 0x61, 0x27, 0xB7, 0x29, 0xB6, 0x03, 0x61, 0x27, 0xCC,
+0x29, 0xB6, 0x1B, 0x61, 0x29, 0xB2, 0x6D, 0xBC, 0x43, 0x61, 0x27, 0xE1, 0x28, 0xB6, 0x48, 0x0A,
+0x28, 0xCB, 0x28, 0xEE, 0x28, 0xF3, 0x28, 0xF8, 0x28, 0xFD, 0x29, 0x02, 0x29, 0x07, 0x29, 0x0C,
+0x29, 0x11, 0x29, 0x40, 0x09, 0x00, 0x00, 0x29, 0x7A, 0x29, 0x7F, 0x29, 0x84, 0x29, 0x89, 0x29,
+0x8E, 0x29, 0x93, 0x29, 0x98, 0x29, 0x9D, 0x0A, 0x29, 0xB2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0xB5, 0x0A, 0x29, 0xD5, 0x29,
+0xDB, 0x29, 0xE0, 0x29, 0xE5, 0x29, 0xEA, 0x29, 0xEF, 0x29, 0xF4, 0x29, 0xF9, 0x29, 0xFE, 0x2A,
+0x20, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6A,
+0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6A,
+0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6A,
+0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6A,
+0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70,
+0x00, 0x0D, 0x00, 0xAB, 0x21, 0x22, 0x2F, 0x5E, 0x6C, 0x27, 0xE2, 0x6F, 0x50, 0x6C, 0x27, 0xE4,
+0x6F, 0x52, 0x6C, 0x27, 0xE6, 0x6C, 0x28, 0x32, 0x29, 0xA1, 0xCD, 0xA9, 0x28, 0x56, 0x80, 0x40,
+0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x29, 0xAD, 0x82, 0x21, 0x01, 0x2F, 0x5A, 0x6C, 0x27, 0xEA,
+0x71, 0x00, 0x18, 0x6F, 0x50, 0x6C, 0x27, 0xEC, 0x6F, 0x52, 0x61, 0x00, 0x0F, 0x61, 0x00, 0x7F,
+0x21, 0x01, 0x29, 0xAE, 0xE8, 0x61, 0x12, 0x45, 0x2F, 0x5F, 0x2F, 0x5F, 0x29, 0x28, 0xBD, 0x61,
+0x8F, 0xD2, 0x2F, 0x5F, 0x2F, 0x5F, 0x21, 0x08, 0x13, 0x25, 0x00, 0x29, 0x31, 0xB2, 0x21, 0xD0,
+0x2F, 0x5F, 0x04, 0x2A, 0x28, 0x88, 0x02, 0x6C, 0x27, 0xEA, 0x6C, 0x27, 0xEE, 0x50, 0x70, 0x00,
+0x09, 0x6F, 0x50, 0x6C, 0x27, 0xEC, 0x6F, 0x52, 0x61, 0x00, 0x0F, 0x61, 0x00, 0x7F, 0x21, 0x01,
+0x29, 0xAE, 0xE8, 0x61, 0x86, 0x45, 0x2F, 0x5F, 0x2F, 0x5F, 0x28, 0x28, 0xBD, 0x21, 0x08, 0x61,
+0x18, 0x50, 0x6F, 0x5E, 0x13, 0x04, 0x2A, 0x28, 0xBF, 0x02, 0x88, 0x6C, 0x27, 0xE2, 0x6F, 0x50,
+0x6C, 0x27, 0xE4, 0x6F, 0x52, 0x6C, 0x27, 0xE6, 0xA9, 0x28, 0xEB, 0x52, 0x65, 0x6F, 0x72, 0x64,
+0x65, 0x72, 0x20, 0x70, 0x61, 0x6C, 0x65, 0x74, 0x74, 0x65, 0x00, 0x28, 0xA2, 0x8B, 0x21, 0x00,
+0x28, 0x29, 0x13, 0x21, 0x01, 0x28, 0x29, 0x13, 0x21, 0x02, 0x28, 0x29, 0x13, 0x21, 0x03, 0x28,
+0x29, 0x13, 0x21, 0x04, 0x28, 0x29, 0x13, 0x21, 0x05, 0x28, 0x29, 0x13, 0x21, 0x06, 0x28, 0x29,
+0x13, 0x21, 0x07, 0x26, 0x00, 0x44, 0x78, 0x03, 0x70, 0x27, 0xEC, 0x4C, 0x6F, 0x52, 0x6C, 0x27,
+0xEA, 0x6F, 0x50, 0x70, 0x2A, 0x4D, 0x0C, 0x83, 0x29, 0x31, 0x27, 0x01, 0x6E, 0x50, 0x6C, 0x27,
+0xEE, 0x50, 0x70, 0x00, 0x0C, 0x6F, 0x50, 0x26, 0x00, 0x21, 0x43, 0x2F, 0x5F, 0x28, 0x31, 0xB2,
+0x6C, 0x28, 0x2A, 0x6F, 0x50, 0x6C, 0x28, 0x2C, 0x6F, 0x52, 0x6C, 0x28, 0x2E, 0x2C, 0x2A, 0x5D,
+0x2A, 0x29, 0x61, 0xA9, 0x29, 0x5E, 0x43, 0x4F, 0x4E, 0x46, 0x49, 0x52, 0x4D, 0x00, 0x28, 0xA1,
+0x27, 0xA9, 0x29, 0x77, 0x43, 0x6F, 0x6C, 0x6F, 0x75, 0x72, 0x20, 0x69, 0x73, 0x20, 0x72, 0x65,
+0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x00, 0x28, 0xA0, 0xCD, 0x21, 0x00, 0x28, 0x29, 0x9F, 0x21,
+0x01, 0x28, 0x29, 0x9F, 0x21, 0x02, 0x28, 0x29, 0x9F, 0x21, 0x03, 0x28, 0x29, 0x9F, 0x21, 0x04,
+0x28, 0x29, 0x9F, 0x21, 0x05, 0x28, 0x29, 0x9F, 0x21, 0x06, 0x28, 0x29, 0x9F, 0x21, 0x07, 0x06,
+0x81, 0x26, 0x00, 0x70, 0x2A, 0x4D, 0x21, 0x07, 0x01, 0x29, 0xB8, 0x8A, 0x29, 0x2A, 0x26, 0x28,
+0xB1, 0x92, 0x28, 0x18, 0xB7, 0x2C, 0x2A, 0x5D, 0x29, 0xB8, 0xF3, 0x29, 0x2A, 0x5E, 0x29, 0x2A,
+0x75, 0x29, 0x2A, 0xA2, 0x29, 0x2A, 0xCA, 0x29, 0x2A, 0xE5, 0x29, 0x53, 0x85, 0x21, 0x00, 0x2D,
+0x00, 0xC3, 0x28, 0x18, 0xB7, 0x36, 0x01, 0x2A, 0x29, 0xB2, 0x88, 0x21, 0x00, 0x28, 0x2A, 0x00,
+0x21, 0x01, 0x28, 0x2A, 0x00, 0x21, 0x02, 0x28, 0x2A, 0x00, 0x21, 0x03, 0x28, 0x2A, 0x00, 0x21,
+0x04, 0x28, 0x2A, 0x00, 0x21, 0x05, 0x28, 0x2A, 0x00, 0x21, 0x06, 0x28, 0x2A, 0x00, 0x21, 0x07,
+0x2D, 0x2A, 0x0A, 0x36, 0x01, 0x29, 0xB8, 0xF5, 0x61, 0x00, 0x00, 0x70, 0x2A, 0x4D, 0x21, 0x07,
+0x61, 0x00, 0x0D, 0x6C, 0x27, 0xEA, 0x52, 0x29, 0xB7, 0xF3, 0x29, 0x2A, 0x26, 0x28, 0xB1, 0x92,
+0x36, 0x01, 0x2A, 0x29, 0xB5, 0x88, 0x21, 0xFF, 0xA1, 0x08, 0x93, 0x61, 0x80, 0x00, 0x03, 0x70,
+0x2A, 0x4D, 0x0C, 0x19, 0x1D, 0x84, 0xAA, 0x2A, 0x2A, 0x82, 0x35, 0x00, 0x2C, 0x2A, 0x5D, 0x05,
+0x2D, 0x2A, 0x5D, 0x16, 0x1F, 0x29, 0xB8, 0xF5, 0x21, 0x00, 0x28, 0x29, 0x40, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x08,
+0x00, 0x04, 0x25, 0x00, 0x70, 0x2A, 0x4D, 0x0C, 0x26, 0x00, 0x70, 0x2A, 0x55, 0x0D, 0x12, 0x17,
+0x2A, 0x2A, 0x61, 0x42, 0x88, 0x21, 0x00, 0x04, 0x3E, 0x77, 0x04, 0x79, 0x04, 0x39, 0x04, 0x81,
+0x26, 0x00, 0x70, 0x2A, 0x55, 0x0C, 0x38, 0x04, 0x01, 0x26, 0x00, 0x70, 0x2A, 0x55, 0x0C, 0x1C,
+0x05, 0x3E, 0x88, 0x1C, 0x05, 0x26, 0x00, 0x70, 0xC4, 0x83, 0x0D, 0x12, 0x04, 0x2A, 0x2A, 0x77,
+0x02, 0x88, 0x61, 0x00, 0xA5, 0x61, 0x00, 0xA7, 0x29, 0x14, 0x34, 0x64, 0x00, 0x00, 0x6F, 0x14,
+0x6F, 0x1C, 0x6E, 0x12, 0x6F, 0x1A, 0x28, 0x2A, 0xC4, 0x21, 0x00, 0x2E, 0x16, 0x70, 0xC4, 0x83,
+0x0C, 0x2F, 0x1E, 0x53, 0x44, 0x6A, 0x2A, 0xB9, 0x42, 0x88, 0x61, 0xC5, 0x9B, 0x44, 0x70, 0x00,
+0x07, 0x46, 0x44, 0x0C, 0x26, 0x00, 0x70, 0x2A, 0x55, 0x0C, 0x81, 0xC3, 0x8D, 0x52, 0x57, 0x2A,
+0x2A, 0xD2, 0x42, 0x42, 0x88, 0x61, 0xC5, 0x83, 0x61, 0x2B, 0x15, 0x61, 0x00, 0x10, 0x29, 0xB6,
+0xB1, 0x61, 0x00, 0x08, 0x61, 0x00, 0x00, 0x44, 0x70, 0x2A, 0x4D, 0x0C, 0x38, 0x01, 0x26, 0x00,
+0x70, 0x2B, 0x15, 0x4C, 0x45, 0x38, 0x01, 0x70, 0xC5, 0x83, 0x4D, 0x52, 0x57, 0x2A, 0x2A, 0xF7,
+0x42, 0x42, 0x28, 0x14, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x06, 0x2D, 0x2D, 0xB4, 0xA9, 0x2B, 0x3B, 0x53, 0x6B, 0x65,
+0x74, 0x63, 0x68, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x75, 0x72, 0x00, 0x6D, 0x2D, 0xB5, 0x61, 0x2B,
+0x5E, 0x28, 0xB1, 0xD2, 0x21, 0x04, 0x2D, 0x2D, 0xB4, 0xA9, 0x2B, 0x55, 0x42, 0x61, 0x63, 0x6B,
+0x64, 0x72, 0x6F, 0x70, 0x00, 0x6D, 0x2D, 0xB5, 0x61, 0x2B, 0x5E, 0x28, 0xB1, 0xD2, 0x61, 0x2B,
+0x67, 0x61, 0x01, 0x07, 0x28, 0xB1, 0x34, 0x61, 0x2C, 0x06, 0x6D, 0xBB, 0xFF, 0x61, 0x2B, 0x9D,
+0x29, 0xB5, 0xF7, 0x61, 0x2B, 0xA8, 0x29, 0xB5, 0xFD, 0x61, 0x2B, 0xB3, 0x29, 0xB6, 0x03, 0x61,
+0x2B, 0xBE, 0x29, 0xB6, 0x1B, 0x61, 0x2D, 0x5D, 0x6D, 0xBB, 0x33, 0x61, 0x2D, 0x25, 0x6D, 0xBB,
+0x35, 0x61, 0x2D, 0x18, 0x6D, 0xBC, 0x43, 0x61, 0x2B, 0xCD, 0x28, 0xB6, 0x48, 0x05, 0x2C, 0x59,
+0x2C, 0x6C, 0x2C, 0x7C, 0x2C, 0x8E, 0x2C, 0xBE, 0x05, 0x00, 0x00, 0x2C, 0xFC, 0x2D, 0x02, 0x2D,
+0x08, 0x2D, 0x14, 0x05, 0x2D, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x1B, 0x07, 0x2D,
+0x25, 0x2D, 0x2B, 0x2D, 0x31, 0x2D, 0x37, 0x2D, 0x57, 0x00, 0x00, 0x2D, 0x5D, 0x09, 0x00, 0x08,
+0x00, 0x08, 0x00, 0x72, 0x00, 0x0F, 0x00, 0x0B, 0x00, 0x38, 0x00, 0x6A, 0x00, 0x0A, 0x00, 0x0B,
+0x00, 0x4C, 0x00, 0x6A, 0x00, 0x0A, 0x00, 0x0B, 0x00, 0x60, 0x00, 0x6A, 0x00, 0x0A, 0x00, 0x0C,
+0x00, 0x80, 0x00, 0x68, 0x00, 0x0D, 0x00, 0x08, 0x00, 0x08, 0x00, 0x72, 0x00, 0x8B, 0x00, 0x00,
+0x00, 0x00, 0x7F, 0xFF, 0x7F, 0xFF, 0x61, 0x2D, 0xB7, 0xA9, 0x2C, 0x14, 0x2C, 0x2D, 0xB4, 0x3C,
+0x20, 0x2F, 0x5E, 0x88, 0x2C, 0x2D, 0xB3, 0x29, 0xB7, 0x70, 0x09, 0x6C, 0x2B, 0xF6, 0x6F, 0x50,
+0x6C, 0x2B, 0xF8, 0x6F, 0x52, 0x6C, 0x2B, 0xFA, 0x6C, 0x2B, 0xFC, 0x29, 0xA1, 0xCD, 0x29, 0x2D,
+0x68, 0x61, 0x03, 0x52, 0x2F, 0x5F, 0x2F, 0x5F, 0x6C, 0x2B, 0xDA, 0x61, 0x00, 0x0D, 0x21, 0x01,
+0x29, 0xAD, 0x00, 0x61, 0x01, 0x41, 0x2F, 0x5F, 0x2F, 0x5F, 0x6C, 0x2B, 0xDA, 0x71, 0x00, 0x02,
+0x61, 0x00, 0x0B, 0x2C, 0x2D, 0xB4, 0x28, 0xAD, 0xA2, 0x6C, 0x2B, 0xF6, 0x6F, 0x50, 0x6C, 0x2B,
+0xF8, 0x6F, 0x52, 0x6C, 0x2B, 0xFA, 0x6C, 0x2D, 0xB5, 0x28, 0xA2, 0x8B, 0x2C, 0x2D, 0xB0, 0xA9,
+0x2C, 0x76, 0x52, 0x65, 0x64, 0x00, 0x6C, 0x2B, 0xD8, 0x28, 0x2C, 0x9C, 0x2C, 0x2D, 0xB1, 0xA9,
+0x2C, 0x88, 0x47, 0x72, 0x65, 0x65, 0x6E, 0x00, 0x6C, 0x2B, 0xE0, 0x28, 0x2C, 0x9C, 0x2C, 0x2D,
+0xB2, 0xA9, 0x2C, 0x99, 0x42, 0x6C, 0x75, 0x65, 0x00, 0x6C, 0x2B, 0xE8, 0x6F, 0x52, 0x6C, 0x2B,
+0xD6, 0x6F, 0x50, 0x21, 0x01, 0x2F, 0x5A, 0x61, 0x02, 0xC6, 0x2F, 0x5F, 0x2F, 0x5F, 0x61, 0x3C,
+0x38, 0x29, 0xAC, 0xA7, 0x61, 0x82, 0x46, 0x2F, 0x5F, 0x2F, 0x5F, 0x28, 0x32, 0x2A, 0x6C, 0x2B,
+0xEE, 0x6F, 0x50, 0x6C, 0x2B, 0xF0, 0x6F, 0x52, 0x2C, 0x2D, 0xB3, 0x6C, 0x2B, 0xF2, 0xA9, 0x2C,
+0xD8, 0x43, 0x6F, 0x6C, 0x6F, 0x75, 0x72, 0x00, 0xA9, 0x2C, 0xE1, 0x49, 0x6D, 0x61, 0x67, 0x65,
+0x00, 0x29, 0xA6, 0x38, 0x61, 0x02, 0xC6, 0x2F, 0x5F, 0x2F, 0x5F, 0xA9, 0x2C, 0xF6, 0x50, 0x72,
+0x65, 0x76, 0x69, 0x65, 0x77, 0x00, 0x61, 0x3C, 0x38, 0x28, 0xAC, 0xBA, 0x61, 0x2D, 0xB0, 0x28,
+0x2D, 0x0B, 0x61, 0x2D, 0xB1, 0x28, 0x2D, 0x0B, 0x61, 0x2D, 0xB2, 0x07, 0x26, 0x0F, 0x29, 0xB8,
+0x8A, 0x28, 0x2D, 0x89, 0x02, 0x28, 0x2D, 0x1B, 0x28, 0x04, 0xD2, 0x2C, 0x2D, 0xB3, 0x1F, 0x2D,
+0x2D, 0xB3, 0x28, 0xB0, 0x1A, 0x36, 0x01, 0x2A, 0x2D, 0x18, 0x88, 0x61, 0x2D, 0xB0, 0x28, 0x2D,
+0x3A, 0x61, 0x2D, 0xB1, 0x28, 0x2D, 0x3A, 0x61, 0x2D, 0xB2, 0x6D, 0x2D, 0x43, 0x36, 0x02, 0x29,
+0xB8, 0xF5, 0x61, 0x00, 0x00, 0x21, 0x0F, 0x61, 0x00, 0x06, 0x6C, 0x2B, 0xD6, 0x52, 0x29, 0xB7,
+0xF3, 0x29, 0x2D, 0x89, 0x28, 0xB1, 0x92, 0x36, 0x01, 0x2A, 0x2D, 0x1B, 0x88, 0x2C, 0x2D, 0xB3,
+0x2A, 0x2D, 0x65, 0x02, 0x88, 0x28, 0x03, 0xEC, 0x21, 0x00, 0x2C, 0x2D, 0xB4, 0x78, 0x01, 0x70,
+0x00, 0x91, 0x4C, 0x44, 0x79, 0x04, 0x39, 0x04, 0x46, 0x06, 0x79, 0x04, 0x39, 0x04, 0x2D, 0x2D,
+0xB2, 0x2D, 0x2D, 0xB1, 0x2D, 0x2D, 0xB0, 0x02, 0x88, 0x2C, 0x2D, 0xB4, 0x25, 0x00, 0x78, 0x01,
+0x70, 0x00, 0x91, 0xC1, 0x38, 0x04, 0x2C, 0x2D, 0xB0, 0x1C, 0x2C, 0x2D, 0xB1, 0x38, 0x04, 0x2C,
+0x2D, 0xB2, 0x1C, 0x44, 0x6F, 0x58, 0x41, 0x4D, 0x21, 0x00, 0x2D, 0x00, 0xC3, 0x28, 0x13, 0xB6,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x24, 0x2F, 0x5E, 0x29, 0x03, 0x5C, 0x29, 0x2E,
+0x0D, 0x6C, 0x00, 0xA1, 0x6C, 0x00, 0xA5, 0x2C, 0x00, 0xB0, 0x58, 0x50, 0x6F, 0x50, 0x6C, 0x00,
+0xA3, 0x6F, 0x52, 0x61, 0x00, 0x04, 0x2C, 0x00, 0xB0, 0x58, 0x6C, 0x00, 0xA7, 0x2C, 0x00, 0xB0,
+0x58, 0x21, 0x04, 0x29, 0xAD, 0xA2, 0x21, 0x01, 0x6C, 0x00, 0xA1, 0x53, 0x6F, 0x50, 0x6C, 0x00,
+0xA3, 0x53, 0x6F, 0x52, 0x81, 0x6C, 0x00, 0xA5, 0x2C, 0x00, 0xB0, 0x58, 0x70, 0x00, 0x02, 0x6C,
+0x00, 0xA7, 0x2C, 0x00, 0xB0, 0x58, 0x70, 0x00, 0x02, 0x01, 0x28, 0xAD, 0x38, 0x61, 0x00, 0x00,
+0x61, 0x00, 0x00, 0x6E, 0x54, 0x6E, 0x56, 0x47, 0x46, 0x6C, 0x00, 0xA3, 0x29, 0x2F, 0x17, 0xC1,
+0xC1, 0xC6, 0x6C, 0x00, 0xA1, 0x29, 0x2F, 0x17, 0x45, 0x6C, 0x00, 0xA5, 0x54, 0xC5, 0x41, 0x6C,
+0x00, 0xA7, 0x54, 0x45, 0x75, 0x00, 0x00, 0x43, 0x75, 0x00, 0x00, 0x5E, 0x76, 0xFF, 0xFF, 0x2A,
+0x2E, 0x47, 0x42, 0x42, 0xC2, 0xC2, 0x88, 0x45, 0x6C, 0x00, 0xA5, 0x46, 0x51, 0x45, 0x45, 0x54,
+0x29, 0xB7, 0x70, 0x6C, 0x00, 0xA7, 0xC5, 0x41, 0x51, 0x41, 0x45, 0x45, 0x54, 0x29, 0xB7, 0x70,
+0xC1, 0x53, 0x45, 0x50, 0x7E, 0xFF, 0xFC, 0x79, 0x02, 0x52, 0x46, 0x7E, 0xFF, 0xFC, 0x79, 0x02,
+0x46, 0x45, 0x51, 0x45, 0x78, 0x02, 0x2C, 0x00, 0xB0, 0x58, 0x6C, 0x00, 0xA1, 0x50, 0x44, 0x6D,
+0x2F, 0x05, 0x6F, 0x50, 0xC5, 0x41, 0x2C, 0x00, 0xB0, 0x58, 0x6C, 0x00, 0xA3, 0x50, 0x6F, 0x52,
+0x61, 0x2F, 0xB3, 0x61, 0x2F, 0x8F, 0x2C, 0x00, 0xB2, 0x29, 0xB7, 0x70, 0x61, 0x2F, 0xAC, 0x2C,
+0x00, 0xB1, 0x29, 0xB7, 0x70, 0x6D, 0x2E, 0xF9, 0x61, 0x2F, 0x4B, 0x61, 0x2F, 0x73, 0x2C, 0x00,
+0xB0, 0x29, 0xB7, 0x70, 0x6D, 0x2E, 0xFC, 0x61, 0x00, 0x00, 0x6F, 0x14, 0x21, 0x01, 0x2C, 0x00,
+0xB0, 0x18, 0x04, 0x2D, 0x2F, 0x5A, 0x04, 0x2D, 0x2F, 0x61, 0x04, 0x2D, 0x2F, 0x68, 0x04, 0x2D,
+0x2F, 0x6F, 0x3C, 0x40, 0x2D, 0x2F, 0x0A, 0x29, 0x2F, 0xBC, 0x29, 0xAD, 0x82, 0x6C, 0x00, 0xA5,
+0x70, 0x00, 0x03, 0x79, 0x02, 0x6F, 0x22, 0xC5, 0xD0, 0xC6, 0xC4, 0xEF, 0x20, 0x45, 0x6E, 0x2A,
+0x50, 0x78, 0x01, 0x6F, 0x14, 0x44, 0x6E, 0x16, 0x29, 0x00, 0x00, 0x29, 0x00, 0x00, 0x53, 0x44,
+0x6A, 0x2E, 0xF6, 0x42, 0x61, 0x00, 0x00, 0x6F, 0x50, 0x21, 0x00, 0x2F, 0x5F, 0xD2, 0xD7, 0xAA,
+0x2E, 0xEA, 0x42, 0x42, 0xC2, 0xC2, 0x88, 0xC1, 0x45, 0x43, 0x29, 0xB8, 0xF9, 0x2A, 0x2F, 0x33,
+0x46, 0x41, 0x51, 0x44, 0x2C, 0x00, 0xB0, 0x59, 0x47, 0x47, 0x50, 0x2C, 0x00, 0xB0, 0x59, 0x45,
+0x51, 0x52, 0x88, 0x50, 0x66, 0x00, 0x00, 0x41, 0x51, 0x44, 0x74, 0x80, 0x00, 0x2A, 0x2F, 0x45,
+0x42, 0x61, 0x00, 0x00, 0x88, 0x2C, 0x00, 0xB0, 0x59, 0x52, 0x88, 0x44, 0x79, 0x04, 0x39, 0x04,
+0x46, 0x06, 0x79, 0x04, 0x39, 0x04, 0x2F, 0x5A, 0x61, 0x18, 0x00, 0x6F, 0x5E, 0x2F, 0x5A, 0x61,
+0x18, 0x00, 0x6F, 0x5E, 0x2F, 0x5A, 0x61, 0x18, 0x00, 0x6F, 0x5E, 0x2F, 0x5A, 0x61, 0x18, 0x00,
+0x6F, 0x5E, 0x88, 0x44, 0x79, 0x04, 0x39, 0x04, 0x46, 0x06, 0x79, 0x04, 0x39, 0x04, 0x21, 0x01,
+0x6F, 0x5E, 0x21, 0x01, 0x6F, 0x5E, 0x21, 0x01, 0x6F, 0x5E, 0x21, 0x01, 0x6F, 0x5E, 0x88, 0x44,
+0x7E, 0x88, 0x88, 0x44, 0x44, 0x79, 0x03, 0x51, 0x50, 0x46, 0x7E, 0x77, 0x77, 0x45, 0x5F, 0x5E,
+0x45, 0x5F, 0x7E, 0x88, 0x88, 0x50, 0x67, 0x66, 0x66, 0x5E, 0x5C, 0x88, 0x7E, 0x77, 0x77, 0x70,
+0x88, 0x88, 0x88, 0x7E, 0x88, 0x88, 0x79, 0x02, 0x7C, 0x44, 0x44, 0x88, 0x21, 0x00, 0x2C, 0x00,
+0xB0, 0x78, 0x03, 0x70, 0x2F, 0xC7, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0,
+0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x6C, 0x00, 0xA1, 0x53, 0x6E, 0x54, 0x54, 0x2B, 0x30,
+0x28, 0x6C, 0x00, 0xA3, 0x53, 0x6E, 0x56, 0x54, 0x2B, 0x30, 0x3D, 0x6C, 0x00, 0xA1, 0x6C, 0x00,
+0xA5, 0x2C, 0x00, 0xB0, 0x58, 0x50, 0x6E, 0x54, 0x54, 0x2B, 0x30, 0x52, 0x6C, 0x00, 0xA3, 0x6C,
+0x00, 0xA7, 0x2C, 0x00, 0xB0, 0x58, 0x50, 0x6E, 0x56, 0x54, 0x2B, 0x30, 0x70, 0x21, 0x01, 0x29,
+0x2D, 0xE8, 0x29, 0x06, 0xE7, 0x28, 0xB0, 0x22, 0x61, 0x00, 0x00, 0x6F, 0x50, 0x61, 0x00, 0x00,
+0x6F, 0x52, 0x6C, 0x00, 0xA1, 0x53, 0x6E, 0x56, 0x21, 0x04, 0x28, 0xAD, 0xA2, 0x61, 0x00, 0x00,
+0x6F, 0x50, 0x61, 0x00, 0x00, 0x6F, 0x52, 0x6E, 0x54, 0x6C, 0x00, 0xA3, 0x53, 0x21, 0x04, 0x28,
+0xAD, 0xA2, 0x6C, 0x00, 0xA1, 0x6C, 0x00, 0xA5, 0x2C, 0x00, 0xB0, 0x58, 0x50, 0xC3, 0x6F, 0x50,
+0x61, 0x00, 0x00, 0x6F, 0x52, 0x6E, 0x54, 0x41, 0x51, 0x6E, 0x56, 0x21, 0x04, 0x28, 0xAD, 0xA2,
+0x6C, 0x00, 0xA3, 0x6C, 0x00, 0xA7, 0x2C, 0x00, 0xB0, 0x58, 0x50, 0xC3, 0x61, 0x00, 0x00, 0x6F,
+0x50, 0x6F, 0x52, 0x6E, 0x54, 0x6E, 0x56, 0x41, 0x51, 0x21, 0x04, 0x28, 0xAD, 0xA2, 0x6E, 0x54,
+0x79, 0x01, 0x71, 0x00, 0x39, 0x6F, 0x50, 0x6E, 0x56, 0x79, 0x01, 0x71, 0x00, 0x08, 0x6F, 0x52,
+0x61, 0x00, 0x72, 0x61, 0x00, 0x0F, 0x21, 0x01, 0x29, 0xAD, 0x00, 0x61, 0x01, 0x41, 0x2F, 0x5F,
+0x2F, 0x5F, 0x61, 0x00, 0x70, 0x61, 0x00, 0x0D, 0x21, 0x02, 0x29, 0xAD, 0xA2, 0x61, 0x05, 0x43,
+0x2F, 0x5F, 0x2F, 0x5F, 0xA9, 0x30, 0xCF, 0xF8, 0x88, 0x70, 0x20, 0x70, 0xF8, 0xF8, 0x00, 0x29,
+0xAD, 0x82, 0x21, 0x01, 0x2F, 0x5A, 0x61, 0x18, 0x0A, 0x6F, 0x5E, 0xA9, 0x30, 0xF6, 0x57, 0x6F,
+0x72, 0x6B, 0x69, 0x6E, 0x67, 0x2C, 0x20, 0x70, 0x6C, 0x65, 0x61, 0x73, 0x65, 0x20, 0x77, 0x61,
+0x69, 0x74, 0x2E, 0x2E, 0x2E, 0x00, 0x61, 0x1C, 0x56, 0x28, 0xAC, 0xBA, 0x04, 0x2D, 0x31, 0x13,
+0x29, 0x31, 0xCE, 0xEE, 0x50, 0xEE, 0x52, 0x61, 0x02, 0x42, 0x2F, 0x5F, 0x2F, 0x5F, 0xE1, 0x04,
+0x00, 0x03, 0x36, 0x00, 0x03, 0x29, 0x31, 0x64, 0x21, 0x1A, 0x2F, 0x5F, 0x92, 0x97, 0xAA, 0x31,
+0x11, 0xC2, 0xEF, 0x52, 0xEF, 0x50, 0x88, 0x61, 0x31, 0xB2, 0x28, 0x31, 0x36, 0x61, 0x31, 0x7A,
+0x28, 0x31, 0x36, 0x61, 0x31, 0x8E, 0x6D, 0x31, 0x53, 0x04, 0x2D, 0x31, 0x50, 0x29, 0x31, 0xE0,
+0xEE, 0x50, 0xEE, 0x52, 0x61, 0x03, 0x43, 0x2F, 0x5F, 0x2F, 0x5F, 0xE1, 0x08, 0x00, 0x03, 0x36,
+0x00, 0x03, 0x29, 0x00, 0x00, 0x21, 0x0D, 0x2F, 0x5F, 0x92, 0x97, 0xAA, 0x31, 0x4E, 0xC2, 0xEF,
+0x52, 0xEF, 0x50, 0x88, 0x06, 0x3E, 0x01, 0x2F, 0x5A, 0x26, 0x00, 0x78, 0x04, 0x44, 0x78, 0x01,
+0x50, 0x70, 0x34, 0x9B, 0x61, 0x03, 0x02, 0x28, 0xAC, 0x64, 0x05, 0x81, 0x61, 0xC6, 0x03, 0x61,
+0x32, 0x15, 0x29, 0x31, 0x94, 0x64, 0x00, 0x09, 0x01, 0x3E, 0x01, 0x28, 0xAD, 0x00, 0x61, 0xC5,
+0xC3, 0x61, 0xAD, 0x82, 0xC1, 0x07, 0x26, 0x00, 0x78, 0x03, 0x50, 0x41, 0x09, 0x3E, 0x01, 0x2F,
+0x5A, 0x61, 0x01, 0x41, 0x2F, 0x5F, 0x2F, 0x5F, 0x61, 0x18, 0x81, 0x6F, 0x5E, 0x21, 0xC1, 0x2F,
+0x5F, 0x88, 0x21, 0x01, 0x2F, 0x5F, 0xC1, 0x64, 0x00, 0x07, 0x52, 0x01, 0x30, 0x08, 0x29, 0xAD,
+0xA2, 0x21, 0x81, 0x2F, 0x5F, 0x64, 0x00, 0x09, 0x01, 0x3E, 0x01, 0x28, 0xAD, 0x00, 0x26, 0x00,
+0x78, 0x01, 0x44, 0x78, 0x02, 0x44, 0x78, 0x01, 0x50, 0x50, 0x66, 0x00, 0x1A, 0x28, 0x31, 0xED,
+0x26, 0x00, 0x44, 0x78, 0x02, 0x44, 0x78, 0x01, 0x50, 0x50, 0x66, 0x00, 0x0D, 0x61, 0x00, 0x6A,
+0x61, 0x00, 0x0F, 0x21, 0x01, 0x29, 0xAE, 0xE8, 0xEE, 0x50, 0x43, 0x50, 0x52, 0x6F, 0x50, 0x07,
+0x61, 0x00, 0x0D, 0x07, 0x1F, 0x30, 0x03, 0x21, 0x41, 0x2F, 0x5F, 0x29, 0xAE, 0xE8, 0x21, 0xC1,
+0x2F, 0x5F, 0xEF, 0x50, 0x88, 0x44, 0x70, 0x00, 0x08, 0x46, 0x44, 0x4C, 0x3E, 0xFE, 0x6F, 0x5C,
+0x70, 0x00, 0x02, 0x57, 0x2A, 0x32, 0x1A, 0x42, 0x42, 0x88, 0x61, 0x32, 0xD8, 0x28, 0x32, 0x33,
+0x61, 0x32, 0x78, 0x6D, 0x32, 0x54, 0x44, 0x61, 0x10, 0x06, 0x21, 0x07, 0x29, 0xA3, 0x50, 0x6E,
+0x50, 0xC3, 0x70, 0x00, 0x61, 0x6F, 0x50, 0x21, 0x42, 0x2F, 0x5F, 0x26, 0x00, 0x44, 0x78, 0x01,
+0x50, 0x78, 0x01, 0x70, 0x00, 0x00, 0x44, 0x4C, 0x6F, 0x5C, 0x70, 0x00, 0x02, 0x44, 0x4C, 0x6F,
+0x5C, 0x70, 0x00, 0x02, 0x4C, 0x6F, 0x5C, 0x24, 0x00, 0x6F, 0x5C, 0x1F, 0x30, 0x03, 0x2F, 0x5A,
+0x61, 0x18, 0xC2, 0x6F, 0x5E, 0xEF, 0x50, 0x88, 0x10, 0x30, 0x10, 0x10, 0x10, 0x38, 0x38, 0x44,
+0x08, 0x10, 0x20, 0x7C, 0x38, 0x44, 0x18, 0x04, 0x44, 0x38, 0x18, 0x28, 0x48, 0x48, 0x7C, 0x08,
+0x7C, 0x40, 0x78, 0x04, 0x44, 0x38, 0x38, 0x40, 0x78, 0x44, 0x44, 0x38, 0x7C, 0x04, 0x08, 0x10,
+0x10, 0x10, 0x38, 0x44, 0x38, 0x44, 0x44, 0x38, 0x38, 0x44, 0x44, 0x3C, 0x04, 0x38, 0x4E, 0xD1,
+0x51, 0x51, 0x51, 0xEE, 0x44, 0xCC, 0x44, 0x44, 0x44, 0xEE, 0x4E, 0xD1, 0x42, 0x44, 0x48, 0xDF,
+0x4E, 0xD1, 0x46, 0x41, 0x51, 0xEE, 0x46, 0xCA, 0x52, 0x52, 0x5F, 0xE2, 0x5F, 0xD0, 0x5E, 0x41,
+0x51, 0xEE, 0x4E, 0xD0, 0x5E, 0x51, 0x51, 0xEE, 0x38, 0x44, 0x44, 0x44, 0x44, 0x38, 0x10, 0x30,
+0x10, 0x10, 0x10, 0x38, 0x38, 0x44, 0x08, 0x10, 0x20, 0x7C, 0x38, 0x44, 0x18, 0x04, 0x44, 0x38,
+0x18, 0x28, 0x48, 0x48, 0x7C, 0x08, 0x7C, 0x40, 0x78, 0x04, 0x44, 0x38, 0x38, 0x40, 0x78, 0x44,
+0x44, 0x38, 0x7C, 0x04, 0x08, 0x10, 0x10, 0x10, 0x38, 0x44, 0x38, 0x44, 0x44, 0x38, 0x38, 0x44,
+0x44, 0x3C, 0x04, 0x38, 0x38, 0x44, 0x44, 0x7C, 0x44, 0x44, 0x78, 0x44, 0x78, 0x44, 0x44, 0x78,
+0x38, 0x44, 0x40, 0x40, 0x44, 0x38, 0x78, 0x44, 0x44, 0x44, 0x44, 0x78, 0x7C, 0x40, 0x78, 0x40,
+0x40, 0x7C, 0x7C, 0x40, 0x78, 0x40, 0x40, 0x40, 0x2D, 0x33, 0x4E, 0x2C, 0xC5, 0x9A, 0x2D, 0x33,
+0x54, 0x02, 0x61, 0x07, 0x00, 0x83, 0x21, 0x13, 0x21, 0x12, 0x21, 0x10, 0x03, 0x36, 0x00, 0x29,
+0xB7, 0x76, 0x03, 0x36, 0x00, 0x29, 0xB7, 0x76, 0x2F, 0x5A, 0x61, 0x00, 0x00, 0x01, 0x70, 0xC5,
+0x93, 0x0C, 0x78, 0x03, 0x44, 0x78, 0x03, 0x50, 0x70, 0x33, 0x7B, 0x24, 0x03, 0x29, 0xAC, 0x64,
+0x21, 0x5A, 0x2F, 0x5F, 0x12, 0x17, 0x2A, 0x33, 0x45, 0x42, 0x88, 0x1F, 0x7F, 0x7F, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xD7, 0xC7, 0xC7, 0xC7, 0xC7, 0xF0, 0xFC, 0xFC, 0xFE, 0xFE,
+0xFE, 0xFE, 0xFE, 0xFF, 0xFE, 0xFE, 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xC7, 0x00, 0x00, 0xFF, 0x00,
+0x00, 0x00, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFC, 0xF9, 0x7F,
+0x7F, 0x1F, 0x00, 0x02, 0x8A, 0xAA, 0x55, 0xFF, 0xFF, 0xFF, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0xFC,
+0xFC, 0xF0, 0x00, 0x1F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFE, 0xFD, 0xFA, 0xF0, 0xFC, 0xFC, 0x9E, 0x1E, 0x5E, 0x3E, 0x5E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFE, 0xFC, 0xF8, 0xF4, 0xE1, 0xC3, 0x87, 0x0F, 0x1F, 0x3F, 0x7F, 0x3E, 0x5E, 0x3E, 0x5E, 0x3E,
+0x5E, 0x3E, 0x5E, 0xF4, 0xEF, 0xE0, 0xFF, 0x7F, 0x7F, 0x1F, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF,
+0xFF, 0xFF, 0x00, 0x3E, 0x5E, 0x1E, 0xFE, 0xFC, 0xFC, 0xF0, 0x00, 0x1F, 0x7F, 0x7F, 0xF7, 0xF7,
+0xC1, 0xF7, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xF0, 0xFC, 0xFC, 0xDE, 0xDE,
+0x06, 0xDE, 0x5E, 0xFC, 0xFD, 0xFC, 0xFD, 0xFC, 0xFD, 0xFC, 0xF4, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
+0x55, 0xAA, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x5E, 0xF7, 0xC1, 0xF7, 0xF7, 0x7F,
+0x7F, 0x1F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xDE, 0x06, 0xDE, 0xDE, 0xFC,
+0xFC, 0xF0, 0x00, 0x1F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7,
+0xA0, 0x50, 0xAC, 0xF0, 0xFC, 0xFC, 0xFE, 0xFE, 0xFE, 0x3E, 0x1E, 0xFD, 0xFA, 0xF5, 0xEB, 0xEF,
+0xF7, 0xFB, 0xFD, 0x7E, 0xFF, 0xFB, 0xFE, 0xED, 0xDB, 0xB7, 0x6F, 0x0E, 0x0E, 0x4E, 0xCE, 0xCE,
+0xCE, 0xDE, 0xDE, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0x7F, 0x1F, 0x00, 0xDF, 0x3F, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0x00, 0xDE, 0xFE, 0xFE, 0xFE, 0xFC, 0xFC, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02,
+0x04, 0x18, 0xE0, 0x00, 0x07, 0x70, 0x8C, 0x22, 0x41, 0x41, 0x41, 0x00, 0x00, 0xC0, 0x20, 0x11,
+0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x1C, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x01, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x03, 0x3C, 0xC0, 0x00, 0x00, 0x02, 0x07, 0x72, 0x80,
+0x00, 0x00, 0x00, 0xE0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x2A, 0x35, 0x2A,
+0x35, 0x2A, 0x35, 0x00, 0xFF, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0x00, 0xFC, 0xAC, 0x54, 0xAC,
+0x54, 0xAC, 0x54, 0x2A, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0xFF, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xAC, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x06, 0x05, 0x24, 0x04, 0x14, 0xC0, 0xA0, 0x50, 0x28, 0x08,
+0x90, 0x60, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x3E, 0xFF, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x35, 0x67, 0x28, 0xB1,
+0xD2, 0x61, 0x35, 0x6F, 0x28, 0xB1, 0xD2, 0x21, 0x00, 0x2D, 0x39, 0x2C, 0x28, 0x35, 0x74, 0x21,
+0xFF, 0x2D, 0x39, 0x2C, 0x29, 0x38, 0xFF, 0x21, 0x00, 0x2D, 0x39, 0x2F, 0x61, 0x35, 0x85, 0x61,
+0x01, 0x05, 0x28, 0xB1, 0x34, 0x61, 0x36, 0x16, 0x6D, 0xBB, 0xFF, 0x61, 0x35, 0xB5, 0x29, 0xB5,
+0xF7, 0x61, 0x35, 0xC0, 0x29, 0xB5, 0xFD, 0x61, 0x35, 0xC7, 0x29, 0xB6, 0x03, 0x61, 0x35, 0xD2,
+0x29, 0xB6, 0x1B, 0x61, 0x38, 0x34, 0x6D, 0xBB, 0x35, 0x61, 0x37, 0xD6, 0x6D, 0xBC, 0x43, 0x61,
+0x35, 0xDD, 0x28, 0xB6, 0x48, 0x05, 0x36, 0x5B, 0x36, 0x8F, 0x36, 0xAA, 0x37, 0x34, 0x37, 0x6A,
+0x03, 0x00, 0x00, 0x37, 0xA2, 0x37, 0xB2, 0x05, 0x37, 0xD6, 0x00, 0x00, 0x37, 0xD9, 0x37, 0xF0,
+0x37, 0xF6, 0x05, 0x38, 0x34, 0x38, 0x3A, 0x38, 0x54, 0x38, 0xB0, 0x38, 0xB6, 0x07, 0x00, 0x08,
+0x00, 0x08, 0x00, 0x72, 0x00, 0x0F, 0x00, 0x0B, 0x00, 0x1A, 0x00, 0x6A, 0x00, 0x0F, 0x00, 0x10,
+0x00, 0x2F, 0x00, 0x60, 0x00, 0x60, 0x00, 0x0C, 0x00, 0x96, 0x00, 0x68, 0x00, 0x0C, 0x00, 0x0C,
+0x00, 0xA5, 0x00, 0x68, 0x00, 0x0C, 0x00, 0x08, 0x00, 0x08, 0x00, 0x72, 0x00, 0xAF, 0x00, 0x00,
+0x00, 0x00, 0x7F, 0xFF, 0x7F, 0xFF, 0x61, 0x36, 0x49, 0x61, 0x36, 0x56, 0x2C, 0x39, 0x2C, 0x29,
+0xB7, 0x70, 0x09, 0x6C, 0x36, 0x06, 0x6F, 0x50, 0x6C, 0x36, 0x08, 0x6F, 0x52, 0x6C, 0x36, 0x0A,
+0x6C, 0x36, 0x0C, 0x29, 0xA1, 0xCD, 0x6C, 0x35, 0xEE, 0x71, 0x00, 0x03, 0x6F, 0x50, 0x6C, 0x35,
+0xF0, 0x71, 0x00, 0x03, 0x6F, 0x52, 0x28, 0x39, 0x31, 0x21, 0x02, 0x2F, 0x5A, 0x6C, 0x39, 0x2D,
+0x29, 0xAD, 0x82, 0x28, 0xAE, 0xBC, 0x21, 0x22, 0x2F, 0x5E, 0x88, 0x6C, 0x36, 0x06, 0x6F, 0x50,
+0x6C, 0x36, 0x08, 0x6F, 0x52, 0x6C, 0x36, 0x0A, 0xA9, 0x36, 0x78, 0x45, 0x64, 0x69, 0x74, 0x20,
+0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6E, 0x00, 0xA9, 0x36, 0x86, 0x45, 0x64, 0x69, 0x74, 0x20,
+0x73, 0x68, 0x61, 0x70, 0x65, 0x00, 0x2C, 0x39, 0x2C, 0x29, 0xB7, 0x70, 0x28, 0xA2, 0x8B, 0x6C,
+0x35, 0xE6, 0x6F, 0x50, 0x6C, 0x35, 0xE8, 0x6F, 0x52, 0x29, 0x39, 0x18, 0x0C, 0x61, 0x31, 0x2D,
+0x61, 0x31, 0x33, 0x2C, 0x39, 0x2C, 0x29, 0xB7, 0x70, 0x08, 0x81, 0x61, 0x37, 0xBC, 0x61, 0xB1,
+0x01, 0x01, 0x04, 0x2D, 0x36, 0xEE, 0x29, 0xB7, 0x70, 0x6D, 0xBA, 0xF1, 0xA9, 0x36, 0xCF, 0x00,
+0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xC0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x29,
+0xAD, 0x7C, 0x6C, 0x35, 0xF0, 0x6F, 0x52, 0x6C, 0x35, 0xEE, 0x6F, 0x50, 0xEC, 0x39, 0x2F, 0x86,
+0x6C, 0x39, 0x2D, 0xA1, 0x00, 0x44, 0x0C, 0xA1, 0x00, 0x3A, 0x01, 0xD7, 0x9F, 0xBE, 0x00, 0x83,
+0xBE, 0x01, 0x61, 0x03, 0x13, 0x61, 0x01, 0x33, 0x03, 0x29, 0xB7, 0x70, 0x61, 0x01, 0x11, 0x61,
+0x01, 0x00, 0x01, 0x29, 0xB7, 0x70, 0x01, 0x29, 0xB7, 0x70, 0x6F, 0x5A, 0x64, 0x00, 0x0B, 0x29,
+0xAC, 0x34, 0x21, 0x0C, 0x2F, 0x5F, 0x92, 0x84, 0xB4, 0x08, 0xAA, 0x36, 0xE9, 0x82, 0x6C, 0x35,
+0xEE, 0x6F, 0x50, 0x02, 0x52, 0x21, 0x4C, 0x2F, 0x5F, 0x92, 0x84, 0xB4, 0x08, 0xAA, 0x36, 0xE5,
+0x42, 0xC2, 0x82, 0x88, 0x6C, 0x35, 0xF6, 0x6F, 0x50, 0x6C, 0x35, 0xF8, 0x6F, 0x52, 0x6C, 0x35,
+0xFA, 0xA9, 0x37, 0x52, 0x43, 0x6C, 0x65, 0x61, 0x72, 0x20, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72,
+0x6E, 0x00, 0xA9, 0x37, 0x61, 0x43, 0x6C, 0x65, 0x61, 0x72, 0x20, 0x73, 0x68, 0x61, 0x70, 0x65,
+0x00, 0x2C, 0x39, 0x2C, 0x29, 0xB7, 0x70, 0x28, 0xA1, 0x72, 0x6C, 0x35, 0xFE, 0x6F, 0x50, 0x6C,
+0x36, 0x00, 0x6F, 0x52, 0x6C, 0x36, 0x02, 0xA9, 0x37, 0x89, 0x52, 0x61, 0x6E, 0x64, 0x6F, 0x6D,
+0x20, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6E, 0x00, 0xA9, 0x37, 0x99, 0x52, 0x61, 0x6E, 0x64,
+0x6F, 0x6D, 0x20, 0x73, 0x68, 0x61, 0x70, 0x65, 0x00, 0x2C, 0x39, 0x2C, 0x29, 0xB7, 0x70, 0x28,
+0xA1, 0x72, 0x81, 0x29, 0x39, 0x18, 0x21, 0x07, 0x01, 0x29, 0xB8, 0x8A, 0x29, 0x38, 0xFF, 0x28,
+0xB0, 0x1A, 0x81, 0x61, 0x39, 0x2F, 0x21, 0x07, 0x01, 0x28, 0xB8, 0x6A, 0x81, 0x61, 0x39, 0x30,
+0x21, 0x07, 0x01, 0x29, 0xB8, 0x74, 0x2A, 0xB1, 0x92, 0x61, 0xB1, 0xC9, 0x61, 0xB1, 0xC4, 0x2C,
+0x39, 0x30, 0x29, 0xB7, 0x70, 0x08, 0x28, 0x0E, 0x3B, 0x21, 0x00, 0x2C, 0x39, 0x30, 0x6C, 0x39,
+0x2D, 0x50, 0xC3, 0x0C, 0x21, 0x80, 0x2C, 0x39, 0x2F, 0x19, 0x1D, 0x41, 0x0D, 0x28, 0xB0, 0x1A,
+0x61, 0x38, 0x21, 0x28, 0x38, 0x05, 0x61, 0x38, 0x25, 0x61, 0x38, 0x29, 0x2C, 0x39, 0x2C, 0x29,
+0xB7, 0x70, 0x29, 0xA7, 0x3A, 0xC1, 0x6C, 0x39, 0x2D, 0x61, 0x00, 0x08, 0x41, 0x29, 0xB7, 0x0C,
+0x6C, 0x39, 0x2D, 0x70, 0x00, 0x07, 0xC3, 0x0C, 0x2C, 0x39, 0x2C, 0x1E, 0x41, 0x0D, 0x28, 0xB0,
+0x1A, 0x61, 0x00, 0x00, 0x88, 0x29, 0xA6, 0xF7, 0x88, 0x29, 0xA6, 0xF7, 0x29, 0xA6, 0xF7, 0x5E,
+0x7E, 0xFE, 0xFE, 0x88, 0x36, 0x01, 0x2A, 0x37, 0xD6, 0x88, 0x36, 0x01, 0x29, 0xB8, 0xF5, 0x29,
+0x39, 0x18, 0x21, 0x07, 0x61, 0x00, 0x0D, 0x6C, 0x35, 0xE6, 0x52, 0x29, 0xB7, 0xF3, 0x29, 0x38,
+0xFF, 0x28, 0xB0, 0x1A, 0x61, 0x39, 0x2F, 0x21, 0x07, 0x61, 0x00, 0x0C, 0x6C, 0x35, 0xEE, 0x29,
+0xB7, 0xDC, 0x61, 0x39, 0x30, 0x21, 0x07, 0x61, 0x00, 0x0C, 0x6C, 0x35, 0xF0, 0x29, 0xB7, 0xE1,
+0x1C, 0x2D, 0x38, 0x8B, 0x21, 0x00, 0x2D, 0x38, 0x8D, 0x04, 0x36, 0x01, 0x2B, 0x38, 0x9E, 0x04,
+0x36, 0x02, 0x2B, 0x38, 0xA6, 0x36, 0x03, 0x2B, 0xB0, 0x1A, 0x21, 0x00, 0x3C, 0x00, 0x29, 0xB8,
+0xF5, 0x61, 0xB0, 0x1A, 0x61, 0xB1, 0x8C, 0x2C, 0x00, 0xAC, 0x29, 0xB7, 0x70, 0x08, 0x29, 0x38,
+0xBC, 0x1F, 0x2D, 0x39, 0x2B, 0x88, 0x2C, 0x39, 0x2B, 0x29, 0x38, 0xD0, 0x2D, 0x38, 0x8D, 0x88,
+0x36, 0x01, 0x2A, 0x37, 0xF0, 0x88, 0x36, 0x01, 0x2A, 0x37, 0xF6, 0x88, 0x21, 0x00, 0x2C, 0x39,
+0x30, 0x6C, 0x39, 0x2D, 0x50, 0x0C, 0x21, 0x80, 0x2C, 0x39, 0x2F, 0x19, 0x1E, 0x35, 0x00, 0x88,
+0x81, 0xA9, 0x38, 0xD6, 0x1C, 0x88, 0xA9, 0x38, 0xDC, 0x1F, 0x1E, 0x88, 0x01, 0x29, 0xB7, 0x70,
+0x6D, 0x38, 0xF6, 0x21, 0x00, 0x2C, 0x39, 0x30, 0x6C, 0x39, 0x2D, 0x50, 0x44, 0x0C, 0x04, 0x21,
+0x80, 0x2C, 0x39, 0x2F, 0x19, 0x29, 0x00, 0x00, 0x17, 0x81, 0x46, 0x0D, 0x02, 0x01, 0x88, 0x29,
+0x39, 0x18, 0x0C, 0x26, 0x00, 0x78, 0x03, 0x61, 0xC6, 0x03, 0x61, 0xC5, 0xC3, 0x2C, 0x39, 0x2C,
+0x29, 0xB7, 0x70, 0x50, 0x6D, 0x39, 0x2D, 0x88, 0x61, 0xC5, 0xAB, 0x61, 0xC5, 0xA3, 0x2C, 0x39,
+0x2C, 0x29, 0xB7, 0x70, 0x21, 0x00, 0x2C, 0xC5, 0x9A, 0x50, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xEE, 0x52, 0x61, 0x01, 0x00, 0x6F, 0x5A, 0x61, 0xC8, 0x00, 0x61, 0x34, 0x88, 0x29, 0xAD,
+0xC7, 0x64, 0x00, 0x65, 0x21, 0x02, 0x29, 0xAD, 0xA2, 0x64, 0x00, 0x65, 0x21, 0x01, 0x29, 0xAD,
+0x38, 0x64, 0x00, 0x65, 0x29, 0xAC, 0x34, 0x6E, 0x50, 0x70, 0x00, 0x65, 0x6F, 0x50, 0x21, 0x43,
+0x2F, 0x5F, 0x61, 0x00, 0x61, 0x21, 0x01, 0x29, 0xAC, 0xEF, 0x61, 0x41, 0x82, 0x2F, 0x5F, 0x2F,
+0x5F, 0x61, 0x01, 0x01, 0x6F, 0x5E, 0x61, 0x01, 0xC1, 0x6F, 0x5E, 0x61, 0x01, 0x42, 0x6F, 0x5E,
+0x21, 0x81, 0x2F, 0x5F, 0x61, 0x00, 0x61, 0x21, 0x01, 0x29, 0xAC, 0xD6, 0x21, 0x83, 0x2F, 0x5F,
+0xEF, 0x52, 0x88, 0x21, 0x00, 0x21, 0x00, 0x2C, 0xC5, 0x9A, 0x70, 0xC5, 0xB3, 0x0C, 0x6D, 0x39,
+0xDF, 0x47, 0x46, 0x44, 0x6D, 0x39, 0xEC, 0x29, 0x3A, 0x25, 0x2D, 0x3A, 0x04, 0x29, 0x3A, 0x20,
+0x5F, 0x52, 0x6D, 0x3A, 0x10, 0x47, 0x47, 0x44, 0x6D, 0x39, 0xE7, 0x29, 0x3A, 0x25, 0x2D, 0x3A,
+0x13, 0x29, 0x3A, 0x20, 0x6D, 0x3A, 0x01, 0x46, 0xE1, 0x00, 0x00, 0xEC, 0x3A, 0x01, 0xEC, 0x3A,
+0x10, 0xD0, 0xC6, 0xC4, 0xEA, 0x39, 0xDC, 0x45, 0x45, 0x29, 0x22, 0x4E, 0xD2, 0xC4, 0xF5, 0x00,
+0x00, 0x9F, 0x84, 0xDE, 0xC6, 0x45, 0x76, 0x00, 0x00, 0x04, 0x45, 0x76, 0x00, 0x00, 0x1E, 0x1E,
+0x2A, 0x3A, 0x18, 0x43, 0x78, 0x01, 0x44, 0x6C, 0x3A, 0x01, 0x29, 0xB8, 0xF8, 0x2A, 0x3A, 0x06,
+0xF0, 0x00, 0x00, 0x46, 0x00, 0x46, 0x6C, 0x3A, 0x10, 0x29, 0xB8, 0xF9, 0x2A, 0x3A, 0x15, 0xF0,
+0x00, 0x00, 0x46, 0x00, 0x46, 0x28, 0x39, 0xD2, 0x42, 0x42, 0xC2, 0xD3, 0xED, 0x39, 0xC9, 0x88,
+0x45, 0x51, 0x28, 0xBA, 0x39, 0x45, 0x45, 0x29, 0xB8, 0xF9, 0x30, 0x53, 0x88, 0x24, 0x00, 0x6D,
+0x39, 0xC9, 0x88, 0x21, 0x18, 0x28, 0x3A, 0x3A, 0x21, 0x98, 0x2D, 0x3A, 0x89, 0x2C, 0x00, 0xB0,
+0x58, 0x6C, 0x00, 0xA3, 0x50, 0x6F, 0x52, 0x2C, 0x00, 0xB0, 0x58, 0x6C, 0x00, 0xA1, 0x50, 0xC3,
+0x6F, 0x50, 0x24, 0x01, 0x2C, 0x00, 0xB0, 0x58, 0x2D, 0x3A, 0x6E, 0x3C, 0x40, 0x2D, 0x3A, 0x79,
+0x44, 0x70, 0x00, 0x08, 0x46, 0x44, 0x0C, 0x04, 0x3E, 0x80, 0x2B, 0x3A, 0x88, 0x21, 0x00, 0x2F,
+0x5F, 0x38, 0x01, 0x04, 0x2A, 0x3A, 0x67, 0x02, 0x21, 0x00, 0x2F, 0x5F, 0x43, 0x6F, 0x50, 0x52,
+0x57, 0x2A, 0x3A, 0x65, 0x42, 0x42, 0xC2, 0x88, 0x21, 0x00, 0x2F, 0x5E, 0x88, 0x6C, 0x00, 0xA3,
+0x50, 0x6F, 0x52, 0x6C, 0x00, 0xA1, 0x50, 0x6F, 0x50, 0x29, 0xAD, 0x82, 0x21, 0x18, 0x2F, 0x5E,
+0x88, 0x6C, 0x00, 0xA3, 0x50, 0x6F, 0x52, 0x6C, 0x00, 0xA1, 0x50, 0x6F, 0x50, 0x29, 0xAD, 0x82,
+0x21, 0x98, 0x2F, 0x5E, 0x88, 0x45, 0x2C, 0x00, 0xB0, 0x58, 0x6C, 0x00, 0xA1, 0x50, 0x44, 0x6D,
+0x3B, 0x04, 0x6F, 0x50, 0x44, 0x2C, 0x00, 0xB0, 0x58, 0x6C, 0x00, 0xA3, 0x50, 0x6F, 0x52, 0x24,
+0x01, 0x2C, 0x00, 0xB0, 0x58, 0x2D, 0x3A, 0xF0, 0x3C, 0x40, 0x2D, 0x3B, 0x09, 0x6D, 0x3B, 0x1C,
+0xC1, 0x44, 0x70, 0x00, 0x08, 0x46, 0x44, 0x0C, 0xC4, 0x04, 0x3E, 0x80, 0x2B, 0x3B, 0x15, 0x21,
+0x00, 0x2F, 0x5F, 0x38, 0x01, 0xD2, 0x04, 0x2A, 0x3A, 0xE9, 0x02, 0xC2, 0x6C, 0x3B, 0x1C, 0x52,
+0x6D, 0x3B, 0x1C, 0x61, 0x00, 0x00, 0x6F, 0x50, 0x21, 0x00, 0x2F, 0x5F, 0x52, 0x57, 0x2A, 0x3A,
+0xE6, 0xC2, 0x42, 0x42, 0x88, 0x21, 0x18, 0x2F, 0x5E, 0xC5, 0x41, 0x61, 0x00, 0x00, 0x28, 0x3B,
+0xC0, 0x45, 0x6C, 0x00, 0xA1, 0x50, 0x6F, 0x50, 0x44, 0x6C, 0x00, 0xA3, 0x50, 0x6F, 0x52, 0x6D,
+0x3B, 0x65, 0xC1, 0x44, 0x29, 0xAD, 0x82, 0x21, 0x18, 0x2F, 0x5E, 0x44, 0x70, 0x00, 0x08, 0x46,
+0x44, 0x0C, 0xC4, 0x04, 0x3E, 0x80, 0x2B, 0x3B, 0x62, 0x38, 0x01, 0xD2, 0x04, 0x2A, 0x3B, 0x43,
+0x02, 0xC2, 0x6C, 0x3B, 0x65, 0x52, 0x6D, 0x3B, 0x65, 0x52, 0x57, 0x2A, 0x3B, 0x40, 0xC2, 0x42,
+0x42, 0x88, 0xC5, 0x41, 0x61, 0x00, 0x00, 0x28, 0x3B, 0xC0, 0x6D, 0x3B, 0x98, 0xC1, 0x44, 0x70,
+0x00, 0x08, 0x46, 0x44, 0x0C, 0xC4, 0x04, 0x3E, 0x80, 0x2B, 0x3B, 0x95, 0x38, 0x01, 0xD2, 0x04,
+0x2A, 0x3B, 0x76, 0x02, 0xC2, 0x6C, 0x3B, 0x98, 0x52, 0x6D, 0x3B, 0x98, 0x52, 0x57, 0x2A, 0x3B,
+0x73, 0xC2, 0x42, 0x42, 0x88, 0xC5, 0x41, 0x61, 0x00, 0x00, 0x28, 0x3C, 0x07, 0x45, 0x45, 0x29,
+0x3B, 0xC0, 0xA1, 0x18, 0x28, 0x3B, 0xA9, 0xA1, 0x98, 0x2C, 0x00, 0xB0, 0x58, 0x6C, 0x00, 0xA3,
+0x50, 0x6F, 0x52, 0x2C, 0x00, 0xB0, 0x58, 0x6C, 0x00, 0xA1, 0x50, 0x6F, 0x50, 0xAF, 0x5E, 0x88,
+0x45, 0x45, 0x29, 0x22, 0xCB, 0x2A, 0x3B, 0xCB, 0x42, 0x42, 0x88, 0x29, 0x22, 0xD7, 0x81, 0x44,
+0x6F, 0x14, 0xAE, 0x16, 0x85, 0x9B, 0xBE, 0x00, 0xBC, 0x00, 0x86, 0x9A, 0x6F, 0x14, 0xAF, 0x16,
+0x21, 0xFF, 0x2D, 0x00, 0xC6, 0x88, 0x21, 0xF8, 0x2D, 0x3B, 0xD7, 0x21, 0x00, 0x2C, 0xC5, 0x9A,
+0x70, 0xC5, 0x9B, 0x0C, 0x2D, 0x3B, 0xD9, 0x88, 0x21, 0xF7, 0x2D, 0x3B, 0xD7, 0x2C, 0x00, 0xB4,
+0x1F, 0x3E, 0x08, 0x2D, 0x3B, 0xD9, 0x88, 0x45, 0x45, 0x29, 0x22, 0xCB, 0x2A, 0x3C, 0x12, 0x42,
+0x42, 0x88, 0x29, 0x22, 0xD7, 0x81, 0x44, 0x6F, 0x14, 0xAE, 0x16, 0x43, 0x06, 0x1B, 0x3E, 0x08,
+0x2A, 0x3C, 0x26, 0x42, 0xC2, 0x88, 0x85, 0x9B, 0xBE, 0xF8, 0xBC, 0x00, 0x86, 0x9A, 0x6F, 0x14,
+0xAF, 0x16, 0x21, 0xFF, 0x2D, 0x00, 0xC6, 0x88, 0x03, 0x02, 0x04, 0x06, 0x04, 0x06, 0x05, 0x02,
+0x03, 0x03, 0x05, 0x06, 0x03, 0x05, 0x02, 0x04, 0x05, 0x04, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
+0x05, 0x05, 0x02, 0x03, 0x04, 0x05, 0x04, 0x05, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
+0x05, 0x04, 0x05, 0x05, 0x05, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x06, 0x05, 0x06, 0x06,
+0x05, 0x06, 0x05, 0x03, 0x04, 0x03, 0x04, 0x05, 0x03, 0x05, 0x05, 0x04, 0x05, 0x05, 0x04, 0x05,
+0x05, 0x02, 0x03, 0x05, 0x03, 0x06, 0x05, 0x05, 0x05, 0x06, 0x05, 0x05, 0x04, 0x05, 0x05, 0x06,
+0x05, 0x05, 0x05, 0x04, 0x02, 0x04, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x80, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0xA0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0xF8, 0x50, 0xF8, 0x50, 0x00, 0x00, 0x00, 0x40, 0xE0, 0xC0, 0x60, 0xE0, 0x40, 0x00, 0x00,
+0xC8, 0xD0, 0x20, 0x58, 0x98, 0x00, 0x00, 0x00, 0x00, 0x20, 0x70, 0xA0, 0x70, 0x00, 0x00, 0x00,
+0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x80, 0x80, 0x40, 0x00, 0x00, 0x00,
+0x80, 0x40, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x90, 0x60, 0x60, 0x90, 0x00, 0x00, 0x00, 0x00,
+0x20, 0x20, 0xF8, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+0x20, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x60, 0x90, 0x90, 0x90, 0x60, 0x00, 0x00, 0x00,
+0x40, 0xC0, 0x40, 0x40, 0xE0, 0x00, 0x00, 0x00, 0x60, 0x90, 0x20, 0x40, 0xF0, 0x00, 0x00, 0x00,
+0x60, 0x90, 0x20, 0x90, 0x60, 0x00, 0x00, 0x00, 0x20, 0x60, 0xA0, 0xF0, 0x20, 0x00, 0x00, 0x00,
+0xF0, 0x80, 0xF0, 0x10, 0xE0, 0x00, 0x00, 0x00, 0x60, 0x80, 0xE0, 0x90, 0x60, 0x00, 0x00, 0x00,
+0xF0, 0x10, 0x20, 0x40, 0x40, 0x00, 0x00, 0x00, 0x60, 0x90, 0x60, 0x90, 0x60, 0x00, 0x00, 0x00,
+0x60, 0x90, 0x70, 0x10, 0x60, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+0x00, 0x40, 0x00, 0x40, 0x80, 0x00, 0x00, 0x00, 0x20, 0x40, 0x80, 0x40, 0x20, 0x00, 0x00, 0x00,
+0x00, 0xF0, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
+0x60, 0x90, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x70, 0x88, 0xB8, 0xA8, 0x70, 0x00, 0x00, 0x00,
+0x60, 0x90, 0x90, 0xF0, 0x90, 0x00, 0x00, 0x00, 0xE0, 0x90, 0xE0, 0x90, 0xF0, 0x00, 0x00, 0x00,
+0x60, 0x90, 0x80, 0x90, 0x60, 0x00, 0x00, 0x00, 0xE0, 0x90, 0x90, 0x90, 0xE0, 0x00, 0x00, 0x00,
+0xF0, 0x80, 0xE0, 0x80, 0xF0, 0x00, 0x00, 0x00, 0xF0, 0x80, 0xE0, 0x80, 0x80, 0x00, 0x00, 0x00,
+0x70, 0x80, 0xB0, 0x90, 0x70, 0x00, 0x00, 0x00, 0x90, 0x90, 0xF0, 0x90, 0x90, 0x00, 0x00, 0x00,
+0xE0, 0x40, 0x40, 0x40, 0xE0, 0x00, 0x00, 0x00, 0x70, 0x10, 0x10, 0x90, 0x60, 0x00, 0x00, 0x00,
+0x90, 0xA0, 0xC0, 0xA0, 0x90, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0xF0, 0x00, 0x00, 0x00,
+0x88, 0xD8, 0xA8, 0x88, 0x88, 0x00, 0x00, 0x00, 0x90, 0xD0, 0xB0, 0x90, 0x90, 0x00, 0x00, 0x00,
+0x60, 0x90, 0x90, 0x90, 0x60, 0x00, 0x00, 0x00, 0xE0, 0x90, 0x90, 0xE0, 0x80, 0x00, 0x00, 0x00,
+0x60, 0x90, 0x90, 0xB0, 0x70, 0x00, 0x00, 0x00, 0xE0, 0x90, 0x90, 0xE0, 0x90, 0x00, 0x00, 0x00,
+0x70, 0x80, 0x60, 0x10, 0xE0, 0x00, 0x00, 0x00, 0xF8, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00,
+0x90, 0x90, 0x90, 0x90, 0x60, 0x00, 0x00, 0x00, 0x88, 0x88, 0x50, 0x50, 0x20, 0x00, 0x00, 0x00,
+0x88, 0x88, 0xA8, 0xA8, 0x50, 0x00, 0x00, 0x00, 0x90, 0x90, 0x60, 0x90, 0x90, 0x00, 0x00, 0x00,
+0x88, 0x88, 0x50, 0x20, 0x20, 0x00, 0x00, 0x00, 0xF0, 0x10, 0x60, 0x80, 0xF0, 0x00, 0x00, 0x00,
+0xC0, 0x80, 0x80, 0x80, 0xC0, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x20, 0x20, 0x00, 0x00, 0x00,
+0xC0, 0x40, 0x40, 0x40, 0xC0, 0x00, 0x00, 0x00, 0x40, 0xE0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x70, 0x90, 0x90, 0x70, 0x00, 0x00, 0x00, 0x80, 0xE0, 0x90, 0x90, 0xE0, 0x00, 0x00, 0x00,
+0x00, 0x60, 0x80, 0x80, 0x60, 0x00, 0x00, 0x00, 0x10, 0x70, 0x90, 0x90, 0x70, 0x00, 0x00, 0x00,
+0x00, 0x60, 0xF0, 0x80, 0x70, 0x00, 0x00, 0x00, 0x20, 0x40, 0xE0, 0x40, 0x40, 0x00, 0x00, 0x00,
+0x00, 0x70, 0x90, 0x70, 0x10, 0xE0, 0x00, 0x00, 0x80, 0xE0, 0x90, 0x90, 0x90, 0x00, 0x00, 0x00,
+0x80, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x40, 0x40, 0x80, 0x00, 0x00,
+0x80, 0x80, 0xE0, 0xE0, 0x90, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x00, 0x00, 0x00,
+0x00, 0x50, 0xA8, 0xA8, 0x88, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x90, 0x90, 0x90, 0x00, 0x00, 0x00,
+0x00, 0x60, 0x90, 0x90, 0x60, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x90, 0x90, 0xE0, 0x80, 0x00, 0x00,
+0x00, 0x70, 0x90, 0x90, 0x70, 0x18, 0x00, 0x00, 0x00, 0xA0, 0xD0, 0x80, 0x80, 0x00, 0x00, 0x00,
+0x00, 0x60, 0xE0, 0x10, 0xE0, 0x00, 0x00, 0x00, 0x40, 0xE0, 0x40, 0x40, 0x20, 0x00, 0x00, 0x00,
+0x00, 0x90, 0x90, 0x90, 0x70, 0x00, 0x00, 0x00, 0x00, 0x90, 0x90, 0x50, 0x60, 0x00, 0x00, 0x00,
+0x00, 0x88, 0xA8, 0xA8, 0x50, 0x00, 0x00, 0x00, 0x00, 0x90, 0x60, 0x20, 0x90, 0x00, 0x00, 0x00,
+0x00, 0x90, 0x90, 0x70, 0x10, 0xE0, 0x00, 0x00, 0x00, 0xF0, 0x20, 0x40, 0xF0, 0x00, 0x00, 0x00,
+0x60, 0x40, 0xC0, 0x40, 0x60, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00,
+0xC0, 0x40, 0x60, 0x40, 0xC0, 0x00, 0x00, 0x00, 0x40, 0xA8, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xF0, 0x90, 0x90, 0x90, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x00, 0x00, 0x00,
+0x21, 0x00, 0x2D, 0x3F, 0xC7, 0x61, 0x3F, 0xAB, 0x28, 0xB1, 0xD2, 0x29, 0x00, 0xD1, 0x61, 0x00,
+0x91, 0x61, 0xC5, 0x83, 0x61, 0x00, 0x08, 0x29, 0xB6, 0xB1, 0x29, 0x14, 0x07, 0x61, 0x55, 0x07,
+0x29, 0x13, 0xD5, 0x61, 0x3F, 0xCC, 0x61, 0x00, 0x03, 0x28, 0xB1, 0x34, 0x6E, 0x54, 0x79, 0x01,
+0x6C, 0x40, 0x37, 0x79, 0x01, 0x51, 0x44, 0x6D, 0x40, 0x33, 0x44, 0x6D, 0x40, 0x3B, 0x6D, 0x40,
+0x43, 0x6E, 0x56, 0x79, 0x01, 0x70, 0x00, 0x02, 0x44, 0x6D, 0x40, 0x35, 0x70, 0x00, 0x0E, 0x44,
+0x6D, 0x40, 0x3D, 0x70, 0x00, 0x0E, 0x6D, 0x40, 0x45, 0x61, 0x40, 0x4B, 0x6D, 0xBC, 0x4B, 0x61,
+0x40, 0x52, 0x6D, 0xBB, 0xFF, 0x61, 0x40, 0x1D, 0x29, 0xB5, 0xF7, 0x61, 0x40, 0x24, 0x29, 0xB6,
+0x03, 0x61, 0x40, 0x2B, 0x29, 0xB6, 0x1B, 0x61, 0x40, 0x32, 0x28, 0xB6, 0x48, 0x03, 0x40, 0xE3,
+0x41, 0x00, 0x41, 0x32, 0x03, 0x41, 0x4A, 0x41, 0x4D, 0x41, 0x5A, 0x03, 0x41, 0x5B, 0x41, 0x61,
+0x41, 0x67, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x65, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x0C, 0x2C, 0xBA, 0x4D, 0x2D, 0x3F,
+0xC7, 0x88, 0x29, 0x03, 0xAD, 0x21, 0x22, 0x2F, 0x5E, 0x29, 0x2E, 0x0D, 0x2C, 0x00, 0xAE, 0x2B,
+0x40, 0xA1, 0x6E, 0x54, 0x79, 0x01, 0x70, 0x00, 0x40, 0x6F, 0x50, 0x6E, 0x56, 0x79, 0x01, 0x71,
+0x00, 0x15, 0x6F, 0x52, 0x21, 0x00, 0x2F, 0x5A, 0x29, 0x40, 0x86, 0x61, 0x81, 0xC1, 0x2F, 0x5F,
+0x2F, 0x5F, 0x21, 0x01, 0x2F, 0x5A, 0xA9, 0x40, 0x92, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E,
+0x20, 0x00, 0x61, 0x3C, 0x38, 0x29, 0xAC, 0xAF, 0x61, 0x01, 0xEC, 0x61, 0x3C, 0x38, 0x28, 0xAC,
+0xA7, 0x6E, 0x54, 0x79, 0x01, 0x71, 0x00, 0x2B, 0x6F, 0x50, 0x6E, 0x56, 0x79, 0x01, 0x71, 0x00,
+0x07, 0x6F, 0x52, 0x61, 0x00, 0x56, 0x61, 0x00, 0x07, 0x21, 0x00, 0x29, 0xAD, 0xA2, 0x21, 0x01,
+0x2F, 0x5A, 0x21, 0x41, 0x2F, 0x5F, 0x61, 0x00, 0x56, 0xA9, 0x40, 0xDD, 0x2D, 0x2D, 0x44, 0x45,
+0x4D, 0x4F, 0x20, 0x52, 0x45, 0x4C, 0x45, 0x41, 0x53, 0x45, 0x2D, 0x2D, 0x00, 0x61, 0x3C, 0x38,
+0x28, 0xAD, 0x63, 0x6C, 0x40, 0x33, 0x6F, 0x50, 0x6C, 0x40, 0x35, 0x6F, 0x52, 0x6C, 0x40, 0x37,
+0xA9, 0x40, 0xFD, 0x4E, 0x65, 0x77, 0x20, 0x69, 0x6D, 0x61, 0x67, 0x65, 0x00, 0x28, 0xA1, 0x33,
+0x6C, 0x40, 0x3B, 0x6F, 0x50, 0x6C, 0x40, 0x3D, 0x6F, 0x52, 0x6C, 0x40, 0x3F, 0xA9, 0x41, 0x1B,
+0x41, 0x62, 0x6F, 0x75, 0x74, 0x20, 0x64, 0x65, 0x6D, 0x6F, 0x00, 0xA9, 0x41, 0x29, 0x4F, 0x70,
+0x65, 0x6E, 0x20, 0x69, 0x6D, 0x61, 0x67, 0x65, 0x00, 0x2C, 0x00, 0xAE, 0x29, 0xB7, 0x70, 0x28,
+0xA1, 0x33, 0x6C, 0x40, 0x43, 0x6F, 0x50, 0x6C, 0x40, 0x45, 0x6F, 0x52, 0x6C, 0x40, 0x47, 0xA9,
+0x41, 0x47, 0x51, 0x75, 0x69, 0x74, 0x00, 0x28, 0xA1, 0x33, 0x28, 0x41, 0x6D, 0x61, 0x98, 0xE6,
+0x61, 0x4F, 0xB1, 0x2C, 0x00, 0xAE, 0x29, 0xB7, 0x70, 0x08, 0x00, 0x36, 0x01, 0x2A, 0x41, 0x4A,
+0x88, 0x36, 0x01, 0x2A, 0x41, 0x4D, 0x88, 0x36, 0x01, 0x2A, 0x41, 0x5A, 0x88, 0x61, 0x41, 0x73,
+0x28, 0xB1, 0xD2, 0x29, 0x45, 0x42, 0x61, 0x41, 0x7F, 0x61, 0x01, 0x04, 0x28, 0xB1, 0x34, 0x6E,
+0x54, 0x79, 0x01, 0x6C, 0x42, 0x7E, 0x79, 0x01, 0x51, 0x44, 0x6D, 0x42, 0x7A, 0x44, 0x70, 0x00,
+0x4C, 0x6D, 0x42, 0x82, 0x44, 0x70, 0x00, 0x40, 0x6D, 0x42, 0x9A, 0x44, 0x70, 0x00, 0x6B, 0x6D,
+0x42, 0xA2, 0x44, 0x70, 0x00, 0x4C, 0x6D, 0x42, 0x8A, 0x44, 0x70, 0x00, 0x40, 0x6D, 0x42, 0xAA,
+0x70, 0x00, 0x6B, 0x6D, 0x42, 0xB2, 0x6E, 0x54, 0x79, 0x01, 0x6C, 0x42, 0x96, 0x79, 0x01, 0x51,
+0x6D, 0x42, 0x92, 0x6E, 0x56, 0x79, 0x01, 0x6C, 0x42, 0xC2, 0x79, 0x01, 0x51, 0x44, 0x6D, 0x42,
+0x7C, 0x44, 0x70, 0x00, 0x1B, 0x6D, 0x42, 0x84, 0x44, 0x70, 0x00, 0x1B, 0x6D, 0x42, 0x9C, 0x44,
+0x70, 0x00, 0x1B, 0x6D, 0x42, 0xA4, 0x44, 0x70, 0x00, 0x27, 0x6D, 0x42, 0x8C, 0x44, 0x70, 0x00,
+0x27, 0x6D, 0x42, 0xAC, 0x44, 0x70, 0x00, 0x27, 0x6D, 0x42, 0xB4, 0x70, 0x00, 0x3E, 0x6D, 0x42,
+0x94, 0x61, 0x42, 0xC4, 0x6D, 0xBB, 0xFF, 0x61, 0x42, 0x37, 0x29, 0xB5, 0xF7, 0x61, 0x42, 0x48,
+0x29, 0xB5, 0xFD, 0x61, 0x42, 0x58, 0x29, 0xB6, 0x09, 0x61, 0x42, 0x4F, 0x29, 0xB6, 0x03, 0x61,
+0x42, 0x5F, 0x29, 0xB6, 0x1B, 0x61, 0x42, 0x72, 0x29, 0xB6, 0x21, 0x61, 0x44, 0x05, 0x6D, 0xBC,
+0x43, 0x61, 0x42, 0x79, 0x28, 0xB6, 0x48, 0x08, 0x43, 0x10, 0x43, 0x2D, 0x43, 0x4B, 0x43, 0x69,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x43, 0xEE, 0x43, 0xF4, 0x04,
+0x44, 0x05, 0x44, 0x08, 0x44, 0x08, 0x44, 0x0D, 0x03, 0x00, 0x00, 0x44, 0x2E, 0x44, 0x37, 0x09,
+0x44, 0x40, 0x44, 0x46, 0x44, 0x6F, 0x44, 0xBD, 0x44, 0xC3, 0x44, 0xCE, 0x44, 0xD9, 0x44, 0xE4,
+0x45, 0x0C, 0x03, 0x00, 0x00, 0x02, 0x5F, 0x02, 0x5F, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94,
+0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F,
+0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C,
+0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C,
+0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF,
+0x7F, 0xFF, 0x00, 0x52, 0x21, 0x22, 0x2F, 0x5E, 0x6C, 0x42, 0x7A, 0x6F, 0x50, 0x6C, 0x42, 0x7C,
+0x6F, 0x52, 0x6C, 0x42, 0x7E, 0x6C, 0x42, 0xC2, 0x29, 0xA1, 0xCD, 0x6C, 0x42, 0x9A, 0x71, 0x00,
+0x08, 0x6F, 0x50, 0x6C, 0x42, 0x9C, 0x70, 0x00, 0x03, 0x6F, 0x52, 0xA9, 0x42, 0xF5, 0x57, 0x69,
+0x64, 0x74, 0x68, 0x3A, 0x00, 0x61, 0x3C, 0x38, 0x29, 0xAC, 0xAF, 0x21, 0x4C, 0x2F, 0x5F, 0xA9,
+0x43, 0x0A, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x00, 0x61, 0x3C, 0x38, 0x28, 0xAC, 0xAF,
+0x6C, 0x42, 0x7A, 0x6F, 0x50, 0x6C, 0x42, 0x7C, 0x6F, 0x52, 0x6C, 0x42, 0x7E, 0xA9, 0x43, 0x2A,
+0x4E, 0x65, 0x77, 0x20, 0x69, 0x6D, 0x61, 0x67, 0x65, 0x00, 0x28, 0xA2, 0x8B, 0x29, 0x45, 0x12,
+0x6C, 0x42, 0x9A, 0x6F, 0x50, 0x6C, 0x42, 0x9C, 0x6F, 0x52, 0x6C, 0x42, 0x86, 0x6C, 0x42, 0x9E,
+0x50, 0x6C, 0x42, 0xA6, 0x50, 0x6C, 0x45, 0x7D, 0x28, 0xA6, 0xAB, 0x29, 0x45, 0x12, 0x6C, 0x42,
+0xAA, 0x6F, 0x50, 0x6C, 0x42, 0xAC, 0x6F, 0x52, 0x6C, 0x42, 0x8E, 0x6C, 0x42, 0xAE, 0x50, 0x6C,
+0x42, 0xB6, 0x50, 0x6C, 0x45, 0x7F, 0x28, 0xA6, 0xAB, 0x6C, 0x42, 0x92, 0x6F, 0x50, 0x6C, 0x42,
+0x94, 0x6F, 0x52, 0x6C, 0x42, 0x96, 0x6C, 0x45, 0x7D, 0x76, 0x00, 0x00, 0x2A, 0x43, 0x9E, 0x6C,
+0x45, 0x7F, 0x76, 0x00, 0x00, 0x2A, 0x43, 0xB9, 0x6C, 0x45, 0x81, 0x76, 0x00, 0x00, 0x2A, 0x43,
+0xD5, 0xA9, 0x43, 0x9B, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x00, 0x28, 0xA1, 0x27, 0xA9, 0x43,
+0xB6, 0x57, 0x69, 0x64, 0x74, 0x68, 0x20, 0x63, 0x61, 0x6E, 0x6E, 0x6F, 0x74, 0x20, 0x62, 0x65,
+0x20, 0x7A, 0x65, 0x72, 0x6F, 0x00, 0x28, 0xA0, 0xCD, 0xA9, 0x43, 0xD2, 0x48, 0x65, 0x69, 0x67,
+0x68, 0x74, 0x20, 0x63, 0x61, 0x6E, 0x6E, 0x6F, 0x74, 0x20, 0x62, 0x65, 0x20, 0x7A, 0x65, 0x72,
+0x6F, 0x00, 0x28, 0xA0, 0xCD, 0xA9, 0x43, 0xEB, 0x49, 0x6D, 0x61, 0x67, 0x65, 0x20, 0x69, 0x73,
+0x20, 0x74, 0x6F, 0x6F, 0x20, 0x6C, 0x61, 0x72, 0x67, 0x65, 0x00, 0x28, 0xA0, 0xCD, 0x61, 0x45,
+0x7D, 0x28, 0x43, 0xF7, 0x61, 0x45, 0x7F, 0x07, 0x04, 0x35, 0x7F, 0x06, 0x66, 0x7F, 0xFF, 0x29,
+0xB8, 0x96, 0x28, 0x45, 0x4F, 0x28, 0x3F, 0xA5, 0x21, 0xFF, 0x2F, 0x4A, 0x88, 0x2C, 0x45, 0x85,
+0x29, 0xB8, 0xF3, 0x29, 0x00, 0xD1, 0x6C, 0x45, 0x7D, 0x6D, 0x00, 0xA5, 0x6C, 0x45, 0x7F, 0x6D,
+0x00, 0xA7, 0x29, 0x52, 0x99, 0x29, 0x52, 0xB9, 0x29, 0x03, 0xAD, 0x28, 0x04, 0xD2, 0x61, 0x45,
+0x7D, 0x29, 0xB7, 0xFF, 0x28, 0x45, 0x4F, 0x61, 0x45, 0x7F, 0x29, 0xB7, 0xFF, 0x28, 0x45, 0x4F,
+0x36, 0x01, 0x2A, 0x44, 0x05, 0x88, 0x04, 0x36, 0x01, 0xA9, 0x44, 0x52, 0x6C, 0x45, 0x7D, 0x28,
+0x44, 0x98, 0x0B, 0x04, 0x36, 0x02, 0xA9, 0x44, 0x5F, 0x61, 0x45, 0x7D, 0x28, 0x44, 0xA4, 0x0B,
+0x36, 0x03, 0xA9, 0x44, 0x6B, 0x6C, 0x45, 0x7D, 0x28, 0x44, 0xB6, 0x0B, 0x28, 0x45, 0x1B, 0x04,
+0x36, 0x01, 0xA9, 0x44, 0x7B, 0x6C, 0x45, 0x7F, 0x28, 0x44, 0x98, 0x0B, 0x04, 0x36, 0x02, 0xA9,
+0x44, 0x88, 0x61, 0x45, 0x7F, 0x28, 0x44, 0xA4, 0x0B, 0x36, 0x03, 0xA9, 0x44, 0x94, 0x6C, 0x45,
+0x7F, 0x28, 0x44, 0xB6, 0x0B, 0x28, 0x45, 0x1B, 0x44, 0x6D, 0x44, 0xB7, 0x6E, 0x40, 0x46, 0x51,
+0x6D, 0x45, 0x83, 0x88, 0x61, 0x7F, 0xFF, 0x61, 0x00, 0x01, 0x6C, 0x45, 0x83, 0x29, 0xB8, 0xE7,
+0x29, 0xB1, 0x92, 0x28, 0x45, 0x4F, 0x76, 0x00, 0x00, 0x2A, 0x00, 0x46, 0x88, 0x36, 0x01, 0x2A,
+0x44, 0x0D, 0x88, 0x21, 0x01, 0x61, 0x45, 0x7D, 0x61, 0xFF, 0xFF, 0x28, 0x44, 0xEC, 0x21, 0x01,
+0x61, 0x45, 0x7D, 0x61, 0x00, 0x01, 0x28, 0x44, 0xEC, 0x21, 0x02, 0x61, 0x45, 0x7F, 0x61, 0xFF,
+0xFF, 0x28, 0x44, 0xEC, 0x21, 0x02, 0x61, 0x45, 0x7F, 0x61, 0x00, 0x01, 0x29, 0x45, 0x1B, 0x6D,
+0x45, 0x04, 0x6D, 0x44, 0xFE, 0x2D, 0xBA, 0x4D, 0x36, 0x01, 0x29, 0xB8, 0xF5, 0x61, 0x00, 0x00,
+0x61, 0x7F, 0xFF, 0x61, 0x00, 0x00, 0x29, 0xB8, 0xBA, 0x28, 0xB1, 0x92, 0x02, 0x21, 0xA0, 0x2F,
+0x5E, 0x88, 0x04, 0x2A, 0x45, 0x1B, 0x21, 0xA0, 0x2F, 0x5E, 0x88, 0x21, 0xA0, 0x2F, 0x5E, 0x6E,
+0x54, 0x79, 0x01, 0x6C, 0x45, 0x7D, 0x79, 0x01, 0x51, 0x6F, 0x50, 0x6E, 0x56, 0x79, 0x01, 0x6C,
+0x45, 0x7F, 0x79, 0x01, 0x51, 0x6F, 0x52, 0x6C, 0x45, 0x7D, 0x6C, 0x45, 0x7F, 0x21, 0x83, 0x28,
+0xAD, 0x38, 0x6C, 0x45, 0x7D, 0x6C, 0x45, 0x7F, 0x29, 0x14, 0x34, 0x6D, 0x45, 0x81, 0x88, 0x29,
+0x45, 0x42, 0x6C, 0x45, 0x7D, 0x76, 0x00, 0x00, 0x3E, 0x80, 0x6C, 0x45, 0x7F, 0x76, 0x00, 0x00,
+0x3E, 0x40, 0x6C, 0x45, 0x81, 0x76, 0x00, 0x00, 0x3E, 0x20, 0x1C, 0x1C, 0x2C, 0x45, 0x85, 0x05,
+0x2D, 0x45, 0x85, 0x16, 0x1F, 0x29, 0xB8, 0xF5, 0x21, 0x00, 0x28, 0x43, 0x69, 0x00, 0xC8, 0x00,
+0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x05, 0x06, 0x08, 0x08, 0x07, 0x08, 0x04, 0x05, 0x05,
+0x08, 0x07, 0x04, 0x05, 0x03, 0x07, 0x07, 0x05, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+0x03, 0x04, 0x06, 0x05, 0x06, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x06, 0x06, 0x07, 0x07, 0x03,
+0x07, 0x07, 0x06, 0x08, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x08, 0x07, 0x07,
+0x07, 0x05, 0x07, 0x05, 0x07, 0x07, 0x04, 0x07, 0x07, 0x06, 0x07, 0x07, 0x04, 0x07, 0x07, 0x03,
+0x04, 0x07, 0x03, 0x08, 0x07, 0x07, 0x07, 0x07, 0x06, 0x07, 0x04, 0x07, 0x07, 0x08, 0x07, 0x07,
+0x07, 0x05, 0x02, 0x05, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xF0,
+0xF0, 0x60, 0x60, 0x00, 0x60, 0x00, 0xD8, 0xD8, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x6C,
+0xFE, 0x6C, 0xFE, 0x6C, 0x6C, 0x00, 0x10, 0x7C, 0xE0, 0x7C, 0x0E, 0x7C, 0x10, 0x00, 0xC4, 0xCC,
+0x18, 0x30, 0x60, 0xCC, 0x8C, 0x00, 0x70, 0xC8, 0xC0, 0x70, 0xDA, 0xCC, 0x76, 0x00, 0x60, 0x60,
+0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xC0, 0xC0, 0xC0, 0x60, 0x30, 0x00, 0xC0, 0x60,
+0x30, 0x30, 0x30, 0x60, 0xC0, 0x00, 0x6C, 0x38, 0xFE, 0x38, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x30,
+0x30, 0xFC, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0xC0, 0x00, 0x00,
+0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x0C, 0x18,
+0x18, 0x30, 0x30, 0x60, 0x60, 0xC0, 0x78, 0xCC, 0xDC, 0xFC, 0xEC, 0xCC, 0x78, 0x00, 0x60, 0xE0,
+0x60, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x78, 0xCC, 0x0C, 0x38, 0x60, 0xC0, 0xFC, 0x00, 0x78, 0xCC,
+0x0C, 0x38, 0x0C, 0xCC, 0x78, 0x00, 0x18, 0x38, 0x78, 0xD8, 0xFC, 0x18, 0x18, 0x00, 0xFC, 0xC0,
+0xF8, 0x0C, 0x0C, 0xCC, 0x78, 0x00, 0x38, 0x60, 0xC0, 0xF8, 0xCC, 0xCC, 0x78, 0x00, 0xFC, 0x0C,
+0x0C, 0x18, 0x18, 0x30, 0x30, 0x00, 0x78, 0xCC, 0xCC, 0x78, 0xCC, 0xCC, 0x78, 0x00, 0x78, 0xCC,
+0xCC, 0x7C, 0x0C, 0x18, 0x70, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x60,
+0x60, 0x00, 0x00, 0x60, 0x60, 0xC0, 0x18, 0x30, 0x60, 0xC0, 0x60, 0x30, 0x18, 0x00, 0x00, 0x00,
+0xF0, 0x00, 0xF0, 0x00, 0x00, 0x00, 0xC0, 0x60, 0x30, 0x18, 0x30, 0x60, 0xC0, 0x00, 0x78, 0x8C,
+0x1C, 0x38, 0x30, 0x00, 0x30, 0x00, 0x78, 0xCC, 0xDC, 0xD4, 0xDC, 0xC0, 0x78, 0x00, 0x78, 0xCC,
+0xCC, 0xCC, 0xFC, 0xCC, 0xCC, 0x00, 0xF8, 0xCC, 0xCC, 0xF8, 0xCC, 0xCC, 0xF8, 0x00, 0x78, 0xCC,
+0xC0, 0xC0, 0xC0, 0xCC, 0x78, 0x00, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0xF8, 0xC0,
+0xC0, 0xF0, 0xC0, 0xC0, 0xF8, 0x00, 0xF8, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xC0, 0x00, 0x78, 0xCC,
+0xC0, 0xDC, 0xCC, 0xCC, 0x78, 0x00, 0xCC, 0xCC, 0xCC, 0xFC, 0xCC, 0xCC, 0xCC, 0x00, 0xC0, 0xC0,
+0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0x78, 0x00, 0xCC, 0xCC,
+0xD8, 0xF0, 0xD8, 0xCC, 0xCC, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xF8, 0x00, 0xC6, 0xEE,
+0xFE, 0xD6, 0xC6, 0xC6, 0xC6, 0x00, 0xCC, 0xCC, 0xEC, 0xFC, 0xDC, 0xCC, 0xCC, 0x00, 0x78, 0xCC,
+0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0xF8, 0xCC, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0x00, 0x78, 0xCC,
+0xCC, 0xCC, 0xDC, 0xD8, 0x6C, 0x00, 0xF8, 0xCC, 0xCC, 0xF8, 0xCC, 0xCC, 0xCC, 0x00, 0x78, 0xCC,
+0xC0, 0x78, 0x0C, 0xCC, 0x78, 0x00, 0xFC, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0xCC, 0xCC,
+0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x00, 0xC6, 0xC6,
+0xC6, 0xD6, 0xD6, 0xFE, 0x6C, 0x00, 0xCC, 0xCC, 0x78, 0x30, 0x78, 0xCC, 0xCC, 0x00, 0xCC, 0xCC,
+0xCC, 0x78, 0x30, 0x30, 0x30, 0x00, 0xFC, 0x1C, 0x38, 0x30, 0x70, 0xE0, 0xFC, 0x00, 0xF0, 0xC0,
+0xC0, 0xC0, 0xC0, 0xC0, 0xF0, 0x00, 0xC0, 0x60, 0x60, 0x30, 0x30, 0x18, 0x18, 0x0C, 0xF0, 0x30,
+0x30, 0x30, 0x30, 0x30, 0xF0, 0x00, 0x30, 0x78, 0xCC, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x80, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x7C, 0xCC, 0xCC, 0xCC, 0x74, 0x00, 0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0x00, 0x00,
+0x70, 0xC8, 0xC0, 0xC8, 0x70, 0x00, 0x0C, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, 0x00, 0x00,
+0x78, 0xCC, 0xFC, 0xC0, 0x78, 0x00, 0x60, 0xC0, 0xC0, 0xE0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00,
+0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x78, 0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0xC0, 0x00,
+0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x60, 0x00, 0x60, 0x60, 0x60, 0x60, 0x60, 0xC0, 0xC0, 0xC0,
+0xCC, 0xD8, 0xF0, 0xD8, 0xCC, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x60, 0x00, 0x00, 0x00,
+0xFC, 0xD6, 0xD6, 0xD6, 0xC6, 0x00, 0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x00,
+0x78, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0x00, 0x00,
+0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x0C, 0x00, 0x00, 0xD8, 0xE0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00,
+0x7C, 0xC0, 0x78, 0x0C, 0xF8, 0x00, 0xC0, 0xC0, 0xE0, 0xC0, 0xC0, 0xC0, 0x60, 0x00, 0x00, 0x00,
+0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x00, 0x00, 0x00,
+0xC6, 0xD6, 0xD6, 0xD6, 0x7C, 0x00, 0x00, 0x00, 0xCC, 0x78, 0x30, 0x78, 0xCC, 0x00, 0x00, 0x00,
+0xCC, 0xCC, 0xCC, 0x7C, 0x0C, 0x78, 0x00, 0x00, 0xFC, 0x18, 0x30, 0x60, 0xFC, 0x00, 0x30, 0x60,
+0x60, 0xC0, 0x60, 0x60, 0x30, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0xC0, 0x60,
+0x60, 0x30, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x62, 0xD6, 0x8C, 0x00, 0x00, 0x00, 0xFC, 0x84,
+0x84, 0x84, 0x84, 0x84, 0xFC, 0x00, 0x61, 0x48, 0xEC, 0x28, 0xB1, 0xD2, 0x29, 0x4C, 0x4E, 0x61,
+0x48, 0xF8, 0x61, 0x01, 0x05, 0x28, 0xB1, 0x34, 0x6E, 0x54, 0x79, 0x01, 0x6C, 0x49, 0xE8, 0x79,
+0x01, 0x51, 0x44, 0x6D, 0x49, 0xC0, 0x44, 0x70, 0x00, 0x09, 0x44, 0x6D, 0x49, 0xC8, 0x6D, 0x49,
+0xD0, 0x70, 0x00, 0x24, 0x6D, 0x49, 0xD8, 0x6E, 0x54, 0x79, 0x01, 0x6C, 0x49, 0xE4, 0x79, 0x01,
+0x51, 0x6D, 0x49, 0xE0, 0x6E, 0x56, 0x79, 0x01, 0x6C, 0x49, 0xEA, 0x79, 0x01, 0x51, 0x44, 0x6D,
+0x49, 0xC2, 0x70, 0x00, 0x4B, 0x44, 0x6D, 0x49, 0xCA, 0x70, 0x00, 0x0D, 0x44, 0x6D, 0x49, 0xD2,
+0x70, 0x00, 0x12, 0x44, 0x6D, 0x49, 0xDA, 0x70, 0x00, 0x10, 0x6D, 0x49, 0xE2, 0x61, 0x49, 0xEC,
+0x6D, 0xBB, 0xFF, 0x61, 0x49, 0x89, 0x29, 0xB5, 0xF7, 0x61, 0x49, 0x94, 0x29, 0xB5, 0xFD, 0x61,
+0x49, 0x9B, 0x29, 0xB6, 0x09, 0x61, 0x49, 0xA2, 0x29, 0xB6, 0x03, 0x61, 0x49, 0xAD, 0x29, 0xB6,
+0x1B, 0x61, 0x49, 0xB8, 0x29, 0xB6, 0x21, 0x61, 0x04, 0xD2, 0x6D, 0xBC, 0x43, 0x61, 0x00, 0x4B,
+0x6D, 0xBB, 0xFD, 0x61, 0x49, 0xBF, 0x28, 0xB6, 0x48, 0x05, 0x4B, 0x1C, 0x4B, 0x32, 0x4B, 0x47,
+0x4B, 0x53, 0x4B, 0x59, 0x03, 0x00, 0x00, 0x4B, 0xCD, 0x4B, 0xD3, 0x03, 0x00, 0x00, 0x4B, 0xDC,
+0x4B, 0xE2, 0x05, 0x04, 0xD2, 0x4B, 0xEA, 0x4B, 0xEA, 0x4B, 0xEF, 0x4B, 0xF7, 0x05, 0x4C, 0x0B,
+0x4C, 0x11, 0x4C, 0x1C, 0x4C, 0x3D, 0x4C, 0x48, 0x03, 0x00, 0x00, 0x02, 0x7A, 0x02, 0x7A, 0x05,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xB4, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x0C,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x08,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x0C, 0x00, 0xB4, 0x00, 0x8C, 0x21, 0x22, 0x2F, 0x5E,
+0x6C, 0x49, 0xC0, 0x6F, 0x50, 0x6C, 0x49, 0xC2, 0x6F, 0x52, 0x6C, 0x49, 0xC4, 0x6C, 0x49, 0xEA,
+0x29, 0xA1, 0xCD, 0x61, 0x09, 0x54, 0x2F, 0x5F, 0x2F, 0x5F, 0x61, 0x00, 0xA0, 0x61, 0x00, 0x26,
+0x21, 0x01, 0x29, 0xAD, 0x00, 0x61, 0x0B, 0x44, 0x2F, 0x5F, 0x2F, 0x5F, 0x61, 0x4A, 0x9E, 0x61,
+0x3C, 0x38, 0x29, 0xAC, 0xA7, 0x21, 0x48, 0x2F, 0x5F, 0x61, 0x4A, 0xBF, 0x61, 0x3C, 0x38, 0x29,
+0xAC, 0xA7, 0x21, 0x48, 0x2F, 0x5F, 0x61, 0x4A, 0xE1, 0x61, 0x3C, 0x38, 0x29, 0xAC, 0xA7, 0x21,
+0x48, 0x2F, 0x5F, 0x61, 0x4B, 0x00, 0x61, 0x3C, 0x38, 0x29, 0xAC, 0xA7, 0x6C, 0x49, 0xC8, 0x52,
+0x6F, 0x50, 0x6C, 0x49, 0xCA, 0x71, 0x00, 0x07, 0x6F, 0x52, 0xA9, 0x4A, 0x6A, 0x44, 0x65, 0x73,
+0x74, 0x69, 0x6E, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x3A, 0x00, 0x61, 0x3C, 0x38, 0x29, 0xAC, 0xA7,
+0x6C, 0x49, 0xD8, 0x70, 0x00, 0x0C, 0x6F, 0x50, 0x6C, 0x49, 0xDA, 0x70, 0x00, 0x02, 0x6F, 0x52,
+0xA9, 0x4A, 0x98, 0x49, 0x6E, 0x63, 0x6C, 0x75, 0x64, 0x65, 0x20, 0x73, 0x6B, 0x65, 0x74, 0x63,
+0x68, 0x20, 0x6C, 0x61, 0x79, 0x65, 0x72, 0x00, 0x61, 0x3C, 0x38, 0x28, 0xAC, 0xBA, 0x54, 0x68,
+0x69, 0x73, 0x20, 0x74, 0x6F, 0x6F, 0x6C, 0x20, 0x77, 0x69, 0x6C, 0x6C, 0x20, 0x65, 0x78, 0x70,
+0x6F, 0x72, 0x74, 0x20, 0x79, 0x6F, 0x75, 0x72, 0x20, 0x69, 0x6D, 0x61, 0x67, 0x65, 0x00, 0x61,
+0x73, 0x20, 0x61, 0x20, 0x73, 0x74, 0x61, 0x6E, 0x64, 0x61, 0x72, 0x64, 0x20, 0x47, 0x49, 0x46,
+0x20, 0x66, 0x69, 0x6C, 0x65, 0x20, 0x73, 0x6F, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x74,
+0x00, 0x63, 0x61, 0x6E, 0x20, 0x62, 0x65, 0x20, 0x76, 0x69, 0x65, 0x77, 0x65, 0x64, 0x20, 0x61,
+0x6E, 0x64, 0x20, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x20, 0x75, 0x73, 0x69, 0x6E, 0x67, 0x00,
+0x70, 0x72, 0x6F, 0x67, 0x72, 0x61, 0x6D, 0x73, 0x20, 0x6F, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74,
+0x68, 0x61, 0x6E, 0x20, 0x43, 0x6F, 0x62, 0x61, 0x6C, 0x74, 0x2E, 0x00, 0x6C, 0x49, 0xC4, 0xA9,
+0x4B, 0x2F, 0x45, 0x78, 0x70, 0x6F, 0x72, 0x74, 0x20, 0x69, 0x6D, 0x61, 0x67, 0x65, 0x00, 0x28,
+0xA2, 0x8B, 0x6C, 0x49, 0xCC, 0x61, 0xBD, 0x8D, 0x61, 0xAB, 0x7C, 0x61, 0xAB, 0x9C, 0x2C, 0xAB,
+0x78, 0x29, 0xB7, 0x70, 0x28, 0xA3, 0xF8, 0x6C, 0x49, 0xD4, 0x61, 0xBE, 0x8D, 0x61, 0xAB, 0x8C,
+0x28, 0xA3, 0xF8, 0x2C, 0x4C, 0xB2, 0x28, 0xA1, 0x75, 0x6C, 0x49, 0xE0, 0x6F, 0x50, 0x6C, 0x49,
+0xE2, 0x6F, 0x52, 0x6C, 0x49, 0xE4, 0x2C, 0xAB, 0x7B, 0x2A, 0x4B, 0x94, 0x2C, 0xAB, 0x7A, 0x2A,
+0x4B, 0xB0, 0xA9, 0x4B, 0x81, 0x45, 0x58, 0x50, 0x4F, 0x52, 0x54, 0x20, 0x4F, 0x56, 0x45, 0x52,
+0x00, 0xA9, 0x4B, 0x8B, 0x45, 0x58, 0x50, 0x4F, 0x52, 0x54, 0x00, 0x2C, 0xAB, 0x79, 0x29, 0xB7,
+0x70, 0x28, 0xA1, 0x27, 0xA9, 0x4B, 0xAD, 0x46, 0x69, 0x6C, 0x65, 0x20, 0x70, 0x61, 0x74, 0x68,
+0x20, 0x69, 0x73, 0x20, 0x74, 0x6F, 0x6F, 0x20, 0x6C, 0x6F, 0x6E, 0x67, 0x00, 0x28, 0xA0, 0xCD,
+0xA9, 0x4B, 0xCA, 0x43, 0x61, 0x6E, 0x27, 0x74, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69,
+0x74, 0x65, 0x20, 0x66, 0x6F, 0x6C, 0x64, 0x65, 0x72, 0x00, 0x28, 0xA0, 0xCD, 0x29, 0xAA, 0xEC,
+0x28, 0x4B, 0xD6, 0x29, 0xAA, 0xF2, 0x29, 0xB2, 0xA1, 0x28, 0xB1, 0x92, 0x29, 0xAA, 0xF8, 0x28,
+0x4B, 0xE5, 0x29, 0xAA, 0xFE, 0x21, 0x00, 0x28, 0x4B, 0x59, 0x21, 0xFF, 0x2F, 0x4A, 0x88, 0x2C,
+0x4C, 0xB2, 0x1F, 0x2D, 0x4C, 0xB2, 0x88, 0x2C, 0xAB, 0x7A, 0x29, 0xB8, 0xF3, 0x61, 0xBF, 0x8D,
+0x2C, 0x4C, 0xB2, 0x21, 0x00, 0x29, 0x4C, 0xB3, 0x28, 0x04, 0xD2, 0x36, 0x01, 0x2A, 0x04, 0xD2,
+0x88, 0x36, 0x01, 0x29, 0xB8, 0xF5, 0x61, 0xBD, 0x8D, 0x28, 0x4C, 0x24, 0x36, 0x01, 0x29, 0xB8,
+0xF5, 0x61, 0xBE, 0x8D, 0x21, 0xA0, 0x2F, 0x5E, 0xC1, 0x6C, 0xBA, 0x5F, 0x6C, 0x49, 0xC8, 0x6C,
+0x49, 0xCC, 0x41, 0x29, 0xA5, 0x08, 0x21, 0xFF, 0x2F, 0x4A, 0x28, 0xB1, 0x92, 0x36, 0x01, 0x29,
+0xB8, 0xF5, 0x29, 0x4B, 0xEF, 0x28, 0xB1, 0x8C, 0x36, 0x01, 0x2A, 0x4B, 0xF7, 0x88, 0x61, 0x4C,
+0x6E, 0x61, 0x4C, 0x5B, 0x2C, 0x00, 0xC5, 0x29, 0xB7, 0x70, 0x08, 0xA9, 0x4C, 0x6B, 0x55, 0x6E,
+0x74, 0x69, 0x74, 0x6C, 0x65, 0x64, 0x2E, 0x67, 0x69, 0x66, 0x00, 0x28, 0xAA, 0x9B, 0x61, 0xC6,
+0x83, 0x29, 0xAA, 0xB9, 0x61, 0xBF, 0x8D, 0x44, 0x29, 0xAF, 0x26, 0x61, 0x00, 0xFC, 0x45, 0x45,
+0x54, 0x29, 0xB7, 0x70, 0x45, 0x50, 0x45, 0x21, 0x2E, 0x29, 0xAF, 0x73, 0x47, 0x21, 0x2F, 0x29,
+0xAF, 0x73, 0x45, 0x54, 0x81, 0x45, 0x01, 0x29, 0xB7, 0x70, 0x45, 0x45, 0x54, 0x29, 0xB7, 0x70,
+0xA9, 0x4C, 0xA8, 0x2E, 0x67, 0x69, 0x66, 0x00, 0x46, 0x29, 0xB6, 0xE7, 0x61, 0xBF, 0x8D, 0x28,
+0xAA, 0xB9, 0x00, 0xC1, 0x61, 0x4E, 0x29, 0x61, 0x4E, 0x33, 0x01, 0x29, 0xB7, 0x70, 0x61, 0x4E,
+0x3E, 0x03, 0x29, 0xB7, 0x70, 0x6D, 0x4D, 0xC8, 0x29, 0xA7, 0x5E, 0x61, 0xB3, 0xB2, 0x03, 0x29,
+0xB7, 0x76, 0x2D, 0x4D, 0x36, 0x61, 0x04, 0x03, 0x03, 0x29, 0xB7, 0x76, 0x2D, 0x4D, 0x97, 0x61,
+0x12, 0x0A, 0x03, 0x29, 0xB7, 0x76, 0x2D, 0x4E, 0xB0, 0x61, 0x10, 0x08, 0x03, 0x29, 0xB7, 0x76,
+0x2D, 0x4F, 0xA0, 0x61, 0x11, 0x09, 0x03, 0x29, 0xB7, 0x76, 0x2D, 0x4E, 0x01, 0x61, 0xED, 0xF5,
+0x03, 0x29, 0xB7, 0x76, 0x2D, 0x4E, 0xA8, 0x03, 0x2D, 0x4E, 0x97, 0x01, 0x36, 0x00, 0x2D, 0x4D,
+0x54, 0x2E, 0x90, 0x2E, 0x95, 0x1F, 0x1E, 0x29, 0xB8, 0xF5, 0x61, 0x47, 0x49, 0x6F, 0x92, 0x61,
+0x46, 0x38, 0x6F, 0x92, 0x61, 0x37, 0x61, 0x6F, 0x92, 0x6C, 0x00, 0xA5, 0x06, 0x6F, 0x92, 0x6C,
+0x00, 0xA7, 0x06, 0x6F, 0x92, 0x21, 0x00, 0x2F, 0x92, 0x24, 0x00, 0x6F, 0x92, 0x61, 0xC5, 0x83,
+0x44, 0x70, 0x00, 0x10, 0x46, 0x44, 0x4C, 0x29, 0x4E, 0x42, 0x70, 0x00, 0x02, 0x57, 0x2A, 0x4D,
+0x45, 0x42, 0x42, 0x21, 0x00, 0x2A, 0x4D, 0x7B, 0x61, 0x00, 0x91, 0x70, 0x00, 0x0C, 0x4C, 0x29,
+0x4E, 0x42, 0x61, 0x00, 0x91, 0x70, 0x00, 0x08, 0x4C, 0x29, 0x4E, 0x42, 0x21, 0x06, 0x24, 0x00,
+0x04, 0x2F, 0x92, 0x6F, 0x92, 0x13, 0x04, 0x2A, 0x4D, 0x6E, 0x02, 0x21, 0x2C, 0x2F, 0x92, 0x64,
+0x00, 0x00, 0x6F, 0x92, 0x6F, 0x92, 0x6C, 0x00, 0xA5, 0x06, 0x6F, 0x92, 0x6C, 0x00, 0xA7, 0x06,
+0x6F, 0x92, 0x21, 0x00, 0x2F, 0x92, 0x21, 0x00, 0x2F, 0x92, 0x61, 0x00, 0x00, 0x6D, 0xC2, 0x8D,
+0x29, 0x4F, 0x8B, 0x2C, 0x4D, 0x97, 0x12, 0x2D, 0xC4, 0x81, 0x21, 0xFF, 0x2D, 0x4E, 0x52, 0x29,
+0x4F, 0x9F, 0x61, 0x00, 0x00, 0x6F, 0x14, 0x6C, 0x00, 0xA7, 0x6C, 0x00, 0xA5, 0x7E, 0xFF, 0xFC,
+0x79, 0x02, 0x28, 0x4D, 0xE2, 0x6E, 0x16, 0x29, 0x00, 0x00, 0x44, 0x79, 0x04, 0x39, 0x04, 0x46,
+0x06, 0x79, 0x04, 0x39, 0x04, 0x29, 0x4E, 0x51, 0x29, 0x4E, 0x51, 0x29, 0x4E, 0x51, 0x29, 0x4E,
+0x51, 0x53, 0x44, 0x6A, 0x4D, 0xC5, 0x42, 0x6C, 0x00, 0xA5, 0x7E, 0x00, 0x03, 0x78, 0x01, 0x70,
+0x4E, 0xED, 0x4C, 0x09, 0x53, 0x44, 0x6A, 0x4D, 0xBA, 0x42, 0x2C, 0xC4, 0x82, 0x29, 0x4F, 0x36,
+0x21, 0x00, 0x29, 0x4F, 0x36, 0x29, 0x4F, 0x70, 0x61, 0x00, 0x3B, 0x6F, 0x92, 0x6E, 0x98, 0x6F,
+0x9C, 0x6E, 0x9A, 0x6F, 0x9E, 0x6C, 0xC2, 0x90, 0x6F, 0x98, 0x6C, 0xC2, 0x92, 0x6F, 0x9A, 0x2C,
+0xC2, 0x8F, 0x2F, 0x92, 0x21, 0x00, 0x2F, 0x90, 0x88, 0x5F, 0x79, 0x03, 0x7E, 0x11, 0x11, 0x7C,
+0x88, 0x88, 0x88, 0x44, 0x7E, 0x88, 0x88, 0x44, 0x79, 0x03, 0x51, 0x5F, 0x5E, 0x88, 0x7E, 0x77,
+0x77, 0x88, 0x06, 0x38, 0x04, 0x2F, 0x92, 0x04, 0x3E, 0xF0, 0x2F, 0x92, 0x38, 0x04, 0x2F, 0x92,
+0x88, 0x21, 0x00, 0x2A, 0x4E, 0x8D, 0xAC, 0xC4, 0x82, 0x81, 0x21, 0x00, 0x2C, 0xC2, 0x94, 0x28,
+0x4E, 0x70, 0x53, 0x44, 0x78, 0x01, 0x70, 0xC2, 0x94, 0x52, 0x4C, 0x43, 0x56, 0x2A, 0x4E, 0xAF,
+0x44, 0x6A, 0x4E, 0x62, 0x42, 0x85, 0x01, 0x29, 0x4F, 0x36, 0x64, 0xC2, 0x94, 0x0C, 0x04, 0x12,
+0x45, 0x0D, 0x26, 0x00, 0x78, 0x01, 0x52, 0x50, 0x43, 0x46, 0x4D, 0x01, 0x82, 0x2D, 0xC4, 0x82,
+0x61, 0x4E, 0xD5, 0x61, 0x4E, 0xB7, 0x21, 0x00, 0x29, 0xB7, 0x70, 0x09, 0x2D, 0xC4, 0x81, 0x21,
+0x00, 0x2D, 0x4E, 0x52, 0x2C, 0xC2, 0x94, 0x35, 0x00, 0x29, 0xB8, 0xF5, 0x28, 0x4F, 0x9F, 0x30,
+0x00, 0x2D, 0xC4, 0x82, 0x02, 0xC2, 0x88, 0x21, 0x04, 0xAC, 0xC2, 0x94, 0x03, 0x35, 0x76, 0x3E,
+0x01, 0x10, 0x03, 0x35, 0x36, 0x3E, 0x01, 0x10, 0x03, 0x35, 0x16, 0x3E, 0x01, 0x10, 0x01, 0x35,
+0x06, 0x3E, 0x01, 0x10, 0x88, 0x21, 0x05, 0xAC, 0xC2, 0x94, 0x03, 0x35, 0x6E, 0x3E, 0x01, 0x10,
+0x03, 0x35, 0x2E, 0x3E, 0x01, 0x10, 0x01, 0x35, 0x0E, 0x3E, 0x01, 0x10, 0x88, 0x4E, 0xF5, 0x4E,
+0xF6, 0x4F, 0x09, 0x4F, 0x1E, 0x88, 0x6E, 0x16, 0x44, 0x79, 0x04, 0x39, 0x04, 0x46, 0x06, 0x79,
+0x04, 0x39, 0x04, 0x29, 0x4E, 0x51, 0x02, 0x42, 0x88, 0x6E, 0x16, 0x44, 0x79, 0x04, 0x39, 0x04,
+0x46, 0x06, 0x79, 0x04, 0x39, 0x04, 0x29, 0x4E, 0x51, 0x29, 0x4E, 0x51, 0x42, 0x88, 0x6E, 0x16,
+0x44, 0x79, 0x04, 0x39, 0x04, 0x46, 0x06, 0x79, 0x04, 0x39, 0x04, 0x29, 0x4E, 0x51, 0x29, 0x4E,
+0x51, 0x29, 0x4E, 0x51, 0x02, 0x88, 0x2C, 0xC2, 0x8F, 0x36, 0xFF, 0x2B, 0x4F, 0x8B, 0xAC, 0xC4,
+0x81, 0x2C, 0xC2, 0x8E, 0x83, 0x44, 0x18, 0x2C, 0xC2, 0x8D, 0x1C, 0x90, 0x03, 0x35, 0x07, 0x2A,
+0x4F, 0x5A, 0x2D, 0xC2, 0x8D, 0x42, 0xAD, 0xC2, 0x8E, 0x88, 0x2F, 0x92, 0x2C, 0xC2, 0x8F, 0x12,
+0x2D, 0xC2, 0x8F, 0x26, 0x08, 0x11, 0x19, 0x2D, 0xC2, 0x8D, 0xB1, 0x08, 0xAD, 0xC2, 0x8E, 0x88,
+0x2C, 0xC2, 0x8E, 0x29, 0xB8, 0xF5, 0x2C, 0xC2, 0x8F, 0x36, 0xFF, 0x2B, 0x4F, 0x8B, 0x2C, 0xC2,
+0x8D, 0x2F, 0x92, 0x2C, 0xC2, 0x8F, 0x12, 0x2D, 0xC2, 0x8F, 0x88, 0x6E, 0x98, 0x6D, 0xC2, 0x90,
+0x6E, 0x9A, 0x6D, 0xC2, 0x92, 0x21, 0xFF, 0x2F, 0x92, 0x21, 0x00, 0x2D, 0xC2, 0x8F, 0x88, 0x21,
+0x00, 0x29, 0x4F, 0x36, 0x21, 0x00, 0x2D, 0xC2, 0x94, 0x2C, 0x4D, 0x97, 0x12, 0x2D, 0xC4, 0x81,
+0x88, 0x29, 0xA9, 0xB9, 0x61, 0x4F, 0xBA, 0x28, 0xB1, 0xD2, 0x61, 0x4F, 0xC3, 0x61, 0x01, 0x02,
+0x28, 0xB1, 0x34, 0x6E, 0x54, 0x79, 0x01, 0x6C, 0x50, 0x68, 0x79, 0x01, 0x51, 0x44, 0x6D, 0x50,
+0x64, 0x44, 0x70, 0x00, 0x01, 0x6D, 0x50, 0x74, 0x44, 0x70, 0x00, 0x4C, 0x6D, 0x50, 0x6C, 0x70,
+0x00, 0xD6, 0x6D, 0x50, 0x7C, 0x6E, 0x56, 0x79, 0x01, 0x6C, 0x50, 0x84, 0x79, 0x01, 0x51, 0x44,
+0x6D, 0x50, 0x66, 0x70, 0x00, 0x13, 0x44, 0x6D, 0x50, 0x76, 0x44, 0x6D, 0x50, 0x6E, 0x6D, 0x50,
+0x7E, 0x61, 0x50, 0x86, 0x6D, 0xBB, 0xFF, 0x61, 0x50, 0x37, 0x29, 0xB5, 0xF7, 0x61, 0x50, 0x40,
+0x29, 0xB5, 0xFD, 0x61, 0x50, 0x45, 0x29, 0xB6, 0x03, 0x61, 0x50, 0x4A, 0x29, 0xB6, 0x1B, 0x61,
+0x50, 0x53, 0x29, 0xB6, 0x15, 0x61, 0x50, 0x5C, 0x29, 0xB6, 0x21, 0x61, 0x51, 0x82, 0x6D, 0xBC,
+0x43, 0x61, 0x50, 0x63, 0x28, 0xB6, 0x48, 0x04, 0x50, 0xB5, 0x50, 0xD5, 0x51, 0x07, 0x51, 0x3C,
+0x02, 0x00, 0x00, 0x51, 0x58, 0x02, 0x51, 0x82, 0x51, 0xD1, 0x04, 0x51, 0x85, 0x51, 0x8B, 0x51,
+0x9A, 0x51, 0xA0, 0x04, 0x00, 0x00, 0x51, 0xC6, 0x00, 0x00, 0x51, 0xC6, 0x03, 0x00, 0x00, 0x00,
+0x00, 0x02, 0x68, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDF, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x89, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x09, 0x00, 0x8D, 0x00, 0xA6, 0x21, 0x22, 0x2F, 0x5E, 0x6C, 0x50, 0x64, 0x6F, 0x50, 0x6C,
+0x50, 0x66, 0x6F, 0x52, 0x6C, 0x50, 0x68, 0x6C, 0x50, 0x84, 0x29, 0xA1, 0xCD, 0x6C, 0x50, 0x74,
+0x6C, 0x50, 0x78, 0x50, 0x6F, 0x50, 0x6C, 0x50, 0x76, 0x53, 0x6F, 0x52, 0x6C, 0x50, 0x7A, 0x52,
+0x21, 0x01, 0x28, 0xAD, 0xEF, 0x6C, 0x50, 0x64, 0x6F, 0x50, 0x6C, 0x50, 0x66, 0x6F, 0x52, 0x6C,
+0x50, 0x68, 0xA9, 0x50, 0xD0, 0x4F, 0x70, 0x65, 0x6E, 0x20, 0x69, 0x6D, 0x61, 0x67, 0x65, 0x00,
+0x28, 0xA2, 0x8B, 0x21, 0x00, 0x04, 0x2D, 0x50, 0xD4, 0x83, 0x61, 0x51, 0x66, 0x61, 0xB1, 0x01,
+0x01, 0x29, 0xB7, 0x70, 0x6D, 0xBA, 0xF1, 0x6C, 0x50, 0x6C, 0x6F, 0x50, 0x6C, 0x50, 0x6E, 0x6F,
+0x52, 0x6C, 0x50, 0x70, 0x6C, 0x50, 0x72, 0x21, 0x00, 0x29, 0xAD, 0xA2, 0x6C, 0x50, 0x70, 0x61,
+0x02, 0x9C, 0x28, 0xA5, 0x48, 0x21, 0x00, 0x04, 0x2D, 0x51, 0x06, 0x6C, 0x50, 0x74, 0x6F, 0x50,
+0x6C, 0x50, 0x76, 0x6F, 0x52, 0x6C, 0x50, 0x78, 0x6C, 0x50, 0x7A, 0x21, 0x00, 0x29, 0xAD, 0xA2,
+0x2D, 0x51, 0x2A, 0x2C, 0xAA, 0x69, 0x29, 0xB8, 0xF5, 0x21, 0x00, 0x29, 0xA9, 0x53, 0x6C, 0x50,
+0x78, 0x61, 0x02, 0x9C, 0x29, 0xA5, 0x48, 0x28, 0xA9, 0x73, 0x21, 0x00, 0x04, 0x2D, 0x51, 0x3B,
+0x6C, 0x50, 0x7C, 0x6F, 0x50, 0x6C, 0x50, 0x7E, 0x6F, 0x52, 0x61, 0x00, 0x05, 0x6C, 0x50, 0x82,
+0x21, 0x00, 0x29, 0xAD, 0xA2, 0x28, 0xA5, 0xFE, 0x81, 0x61, 0x51, 0xD1, 0x61, 0x51, 0xED, 0x01,
+0x34, 0x80, 0x29, 0xB7, 0x70, 0x08, 0x04, 0x2D, 0x51, 0x77, 0x35, 0x7F, 0x29, 0xA7, 0xEC, 0x76,
+0x00, 0x00, 0x1E, 0x2A, 0xB1, 0xC4, 0x21, 0x00, 0x29, 0xA7, 0x6E, 0x29, 0x50, 0xD3, 0x29, 0x51,
+0x3A, 0x88, 0x28, 0x3F, 0xA5, 0x36, 0x01, 0x2A, 0x51, 0x82, 0x88, 0x6C, 0x50, 0x6E, 0x29, 0xAA,
+0x47, 0x2B, 0x50, 0xD3, 0x36, 0x01, 0x2A, 0x51, 0xD1, 0x88, 0x36, 0x01, 0x2A, 0x51, 0xED, 0x88,
+0x04, 0x36, 0x01, 0x2B, 0x51, 0xAC, 0x36, 0x02, 0x2B, 0x51, 0xB7, 0x88, 0x6C, 0xAA, 0x72, 0x6C,
+0xBA, 0x63, 0x51, 0x6D, 0x51, 0xBB, 0x88, 0x6C, 0xBA, 0x63, 0x70, 0x00, 0x00, 0x29, 0xA8, 0xAB,
+0x29, 0x50, 0xD3, 0x28, 0x51, 0x3A, 0x04, 0x10, 0x29, 0xA8, 0x2D, 0x29, 0x50, 0xD3, 0x28, 0x51,
+0x3A, 0x6E, 0x9C, 0x6E, 0x9E, 0x5C, 0x1C, 0x29, 0xB8, 0xF5, 0xA9, 0x51, 0xE3, 0x29, 0xA9, 0x23,
+0x28, 0x51, 0xF0, 0x61, 0x9C, 0xDC, 0x29, 0xA8, 0x02, 0x29, 0xB7, 0x70, 0x08, 0x29, 0xA9, 0x0B,
+0x29, 0x50, 0xD3, 0x29, 0x51, 0x05, 0x28, 0x51, 0x3A, 0x21, 0xFF, 0x2D, 0x00, 0xC4, 0x21, 0x00,
+0x2D, 0x00, 0xC5, 0x61, 0xC6, 0x83, 0x29, 0xA7, 0x5E, 0x2E, 0x90, 0x2E, 0x95, 0x1F, 0x1E, 0x29,
+0xB8, 0xF5, 0x64, 0x00, 0x00, 0x6F, 0x98, 0x6F, 0x9A, 0x61, 0x00, 0x00, 0x6F, 0x14, 0x61, 0x00,
+0x10, 0x61, 0x00, 0x00, 0x44, 0x70, 0x00, 0x81, 0x4C, 0xC1, 0x44, 0x70, 0xC5, 0x83, 0x44, 0x4C,
+0xC1, 0xFE, 0x0F, 0xFF, 0xDC, 0xC1, 0xCD, 0x70, 0x00, 0x02, 0x57, 0x2A, 0x52, 0x24, 0x42, 0x42,
+0x61, 0xC6, 0x43, 0x61, 0xC5, 0x83, 0x44, 0x4C, 0x6F, 0x92, 0x70, 0x00, 0x02, 0x57, 0x2A, 0x52,
+0x46, 0x42, 0x42, 0x6C, 0x00, 0xA5, 0x6F, 0x92, 0x6C, 0x00, 0xA7, 0x6F, 0x92, 0x6C, 0x00, 0xA5,
+0x70, 0x00, 0x03, 0x79, 0x02, 0x6F, 0x20, 0x6C, 0x00, 0xA7, 0x6F, 0x22, 0x6E, 0x2A, 0x6E, 0x16,
+0x3A, 0x04, 0x06, 0x3A, 0x04, 0x6F, 0x92, 0x53, 0x44, 0x6A, 0x52, 0x6E, 0x42, 0x6E, 0x98, 0x6F,
+0x9C, 0x6E, 0x9A, 0x6F, 0x9E, 0x21, 0x00, 0x2F, 0x90, 0x21, 0x00, 0x2D, 0x00, 0xC4, 0x21, 0xFF,
+0x2D, 0x00, 0xC3, 0x21, 0xFF, 0x2D, 0x00, 0xC5, 0x88, 0x6C, 0x00, 0xA5, 0x6C, 0x00, 0xA7, 0x29,
+0x14, 0x34, 0x53, 0x79, 0x08, 0x52, 0x44, 0x6D, 0x00, 0xC7, 0x6F, 0x22, 0x6E, 0x10, 0x6F, 0x20,
+0x6E, 0x2C, 0x29, 0xBA, 0x43, 0x6D, 0x00, 0xC9, 0x88, 0x29, 0x52, 0xDA, 0x21, 0x80, 0x24, 0x00,
+0x6F, 0x16, 0x13, 0x04, 0x2A, 0x52, 0xBE, 0x02, 0x61, 0x00, 0x00, 0x6F, 0x1A, 0x61, 0x00, 0x01,
+0x6F, 0x12, 0x6C, 0x00, 0xC7, 0x29, 0xBA, 0x43, 0x6F, 0x18, 0x64, 0x00, 0x00, 0x6F, 0x12, 0x6F,
+0x14, 0x88, 0x21, 0x00, 0x2D, 0x00, 0xC3, 0x6C, 0x00, 0xCF, 0x44, 0x53, 0x29, 0x53, 0xA0, 0x45,
+0x6C, 0x00, 0xCD, 0x56, 0x04, 0x1F, 0x2C, 0x00, 0xAF, 0x1E, 0x2B, 0x54, 0x5B, 0x29, 0xB7, 0x70,
+0x29, 0x53, 0x90, 0x28, 0xB0, 0x1A, 0x21, 0x00, 0x2D, 0x00, 0xC3, 0x6C, 0x00, 0xCF, 0x44, 0x52,
+0x29, 0x53, 0xA0, 0x45, 0x6C, 0x00, 0xCB, 0x56, 0x04, 0x1F, 0x2C, 0x00, 0xAF, 0x1E, 0x2B, 0x54,
+0x54, 0x29, 0xB7, 0x70, 0x29, 0x53, 0x90, 0x28, 0xB0, 0x1A, 0x6E, 0x12, 0x6F, 0x1A, 0x6C, 0x00,
+0xCF, 0x52, 0x29, 0x53, 0xA0, 0x44, 0x29, 0x53, 0x90, 0x6D, 0x00, 0xCB, 0x6C, 0x00, 0xCD, 0x44,
+0x6C, 0x00, 0xCB, 0x56, 0x04, 0x7E, 0x00, 0x01, 0x50, 0x29, 0x53, 0xA0, 0x6D, 0x00, 0xCD, 0x6C,
+0x00, 0xC7, 0x6F, 0x18, 0x21, 0x00, 0x2D, 0x00, 0xC3, 0x21, 0x00, 0x2D, 0x00, 0xC6, 0x88, 0x2C,
+0x00, 0xAF, 0x2C, 0x00, 0xC6, 0x1E, 0x2B, 0x54, 0x0B, 0x2C, 0x00, 0xC6, 0x21, 0x00, 0x2D, 0x00,
+0xC6, 0x29, 0xB8, 0xF3, 0x6C, 0x00, 0xCF, 0x53, 0x29, 0x53, 0xA0, 0x44, 0x29, 0x53, 0x90, 0x6D,
+0x00, 0xCB, 0x28, 0xB0, 0x1A, 0x6C, 0x00, 0xCF, 0x44, 0x6D, 0x00, 0xCB, 0x6D, 0x00, 0xCD, 0x88,
+0x44, 0x6D, 0x00, 0xCF, 0x6F, 0x20, 0x6C, 0x00, 0xC7, 0x6F, 0x22, 0x6E, 0x2A, 0x6F, 0x12, 0x88,
+0x6C, 0x00, 0xC9, 0x45, 0x74, 0x80, 0x00, 0x29, 0xB7, 0x70, 0x66, 0x00, 0x00, 0x44, 0x6C, 0x00,
+0xC9, 0x55, 0x29, 0xB7, 0x70, 0x88, 0x64, 0x00, 0x00, 0x6F, 0x14, 0x6F, 0x1C, 0x6E, 0x12, 0x6F,
+0x1A, 0x6C, 0x00, 0xC7, 0x78, 0x07, 0x6E, 0x16, 0x7E, 0x77, 0x77, 0x6F, 0x1E, 0x53, 0x44, 0x6A,
+0x53, 0xC6, 0x42, 0x88, 0x6C, 0x00, 0xCF, 0x53, 0x29, 0x53, 0xA0, 0x6F, 0x20, 0x6C, 0x00, 0xC7,
+0xC3, 0xF8, 0x08, 0x6F, 0x22, 0x6E, 0x2A, 0x6F, 0x1A, 0x64, 0x00, 0x00, 0xC3, 0x6F, 0x14, 0x6F,
+0x1C, 0x6E, 0x1E, 0x7E, 0x88, 0x88, 0x6E, 0x16, 0x7E, 0x77, 0x77, 0x5C, 0xC4, 0xEF, 0x14, 0x6F,
+0x16, 0xF0, 0x00, 0x02, 0xD7, 0xAA, 0x53, 0xF1, 0xC2, 0xC2, 0x88, 0x29, 0x54, 0x62, 0x52, 0x29,
+0x54, 0x94, 0x61, 0x54, 0x4A, 0x61, 0x54, 0x8E, 0x29, 0xB6, 0xF2, 0xA9, 0x54, 0x23, 0x2E, 0x67,
+0x69, 0x66, 0x00, 0x46, 0x29, 0xB6, 0xE7, 0x61, 0x54, 0x39, 0x29, 0xAA, 0x9B, 0x61, 0xBF, 0x8D,
+0x2C, 0x00, 0xB1, 0x2C, 0x00, 0xB2, 0x28, 0x4C, 0xB3, 0x63, 0x6F, 0x62, 0x61, 0x6C, 0x74, 0x5F,
+0x72, 0x65, 0x63, 0x6F, 0x72, 0x64, 0x69, 0x6E, 0x67, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x29, 0x54, 0x62, 0x52, 0x28, 0x54, 0x94, 0x29, 0x54, 0x62, 0x53, 0x28,
+0x54, 0x94, 0x61, 0x54, 0x8E, 0x61, 0x54, 0x93, 0x21, 0x30, 0x29, 0xB7, 0x42, 0x29, 0x54, 0xB8,
+0x21, 0x92, 0x6E, 0x9E, 0x61, 0x00, 0x05, 0x45, 0x45, 0x54, 0x29, 0xB7, 0x70, 0x61, 0x00, 0x05,
+0x45, 0x51, 0x70, 0x54, 0x8E, 0x29, 0xAF, 0x33, 0x61, 0x54, 0x8E, 0x28, 0x54, 0xE1, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x29, 0x54, 0xB8, 0x2E, 0x90, 0x2A, 0x54, 0x9E, 0x42, 0x88, 0x29, 0xB7,
+0xAF, 0x21, 0x92, 0x29, 0xAF, 0x7C, 0x6E, 0x9A, 0x53, 0x6F, 0x9A, 0x6E, 0x98, 0x6F, 0x9C, 0x6E,
+0x9A, 0x6F, 0x9E, 0x21, 0x00, 0x2F, 0x90, 0x88, 0xA9, 0x54, 0xD8, 0x63, 0x6F, 0x62, 0x61, 0x6C,
+0x74, 0x5F, 0x72, 0x65, 0x63, 0x6F, 0x72, 0x64, 0x69, 0x6E, 0x67, 0x2F, 0x6E, 0x65, 0x78, 0x74,
+0x5F, 0x69, 0x64, 0x2E, 0x74, 0x78, 0x74, 0x00, 0x29, 0xAA, 0x9B, 0x61, 0xBF, 0x8D, 0x28, 0xA7,
+0x5E, 0x61, 0x00, 0x00, 0x6F, 0x20, 0x61, 0x00, 0x0A, 0x6F, 0x22, 0x28, 0x54, 0xFC, 0x31, 0x30,
+0x04, 0x34, 0x0A, 0x1E, 0x26, 0x00, 0x6E, 0x2A, 0x50, 0x6F, 0x20, 0x52, 0x44, 0x0C, 0x04, 0x2A,
+0x54, 0xEE, 0x02, 0x42, 0x6E, 0x20, 0x88, 0x00, 0xD0, 0x00, 0xA0, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x02, 0x02, 0x10, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x11,
+0x10, 0x01, 0x01, 0x10, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x01, 0x00, 0x11, 0x11, 0x11, 0x01, 0x11, 0x11, 0x10, 0x02, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x10, 0x10, 0x11, 0x11, 0x10, 0x11, 0x11,
+0x11, 0x11, 0x11, 0x10, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x00,
+0x11, 0x01, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x02, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x20, 0x00, 0x11, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x10, 0x10,
+0x22, 0x22, 0x22, 0x22, 0x00, 0x01, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+0x11, 0x11, 0x11, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x21, 0x11, 0x11, 0x02, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x01, 0x11, 0x11, 0x02, 0x22, 0x22, 0x01, 0x11, 0x11, 0x11, 0x11,
+0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x11, 0x11, 0x11, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x11, 0x11, 0x11,
+0x00, 0x22, 0x20, 0x01, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00,
+0x00, 0x00, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x20, 0x11, 0x11, 0x11, 0x10, 0x02,
+0x22, 0x22, 0x22, 0x22, 0x20, 0x11, 0x11, 0x11, 0x00, 0x22, 0x00, 0x11, 0x11, 0x11, 0x11, 0x11,
+0x11, 0x11, 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x21, 0x00, 0x11, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x00, 0x01, 0x11, 0x11, 0x11, 0x10, 0x02, 0x22, 0x22, 0x22, 0x22, 0x01, 0x11, 0x11, 0x11,
+0x00, 0x22, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x10, 0x11, 0x11, 0x10, 0x00, 0x00, 0x00,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x02, 0x00, 0x11, 0x01, 0x00,
+0x11, 0x11, 0x11, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x02, 0x11, 0x11, 0x11, 0x11, 0x10, 0x00,
+0x22, 0x22, 0x22, 0x22, 0x01, 0x11, 0x11, 0x10, 0x02, 0x22, 0x20, 0x11, 0x11, 0x10, 0x00, 0x00,
+0x00, 0x00, 0x01, 0x11, 0x10, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x20, 0x11, 0x00, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x11, 0x10, 0x10, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x21, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x22, 0x22, 0x22, 0x21, 0x11, 0x11, 0x11, 0x10,
+0x02, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x00, 0x02, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+0x11, 0x11, 0x10, 0x10, 0x22, 0x22, 0x22, 0x22, 0x20, 0x11, 0x11, 0x11, 0x01, 0x11, 0x11, 0x00,
+0x22, 0x22, 0x22, 0x22, 0x11, 0x11, 0x11, 0x10, 0x02, 0x22, 0x22, 0x20, 0x00, 0x00, 0x22, 0x22,
+0x22, 0x01, 0x11, 0x11, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x00, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x02, 0x22, 0x22, 0x21,
+0x11, 0x11, 0x11, 0x10, 0x01, 0x11, 0x10, 0x00, 0x22, 0x22, 0x22, 0x20, 0x01, 0x11, 0x11, 0x00,
+0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x11, 0x11, 0x00, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x21, 0x00,
+0x12, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+0x11, 0x11, 0x11, 0x00, 0x02, 0x22, 0x22, 0x22, 0x20, 0x11, 0x11, 0x00, 0x01, 0x11, 0x10, 0x00,
+0x22, 0x22, 0x22, 0x22, 0x01, 0x11, 0x11, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x21, 0x11, 0x11, 0x11, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x20, 0x20, 0x11, 0x11, 0x11, 0x22, 0x22, 0x22, 0x22, 0x22, 0x11, 0x11,
+0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x11, 0x11, 0x01, 0x00, 0x22, 0x22, 0x22,
+0x11, 0x11, 0x11, 0x00, 0x01, 0x11, 0x11, 0x00, 0x22, 0x22, 0x22, 0x20, 0x11, 0x11, 0x11, 0x00,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x11, 0x11, 0x10, 0x00, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x01, 0x01, 0x11, 0x11,
+0x11, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x11, 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00,
+0x21, 0x11, 0x11, 0x11, 0x00, 0x22, 0x22, 0x22, 0x11, 0x11, 0x10, 0x00, 0x00, 0x11, 0x11, 0x00,
+0x22, 0x22, 0x21, 0x11, 0x11, 0x11, 0x10, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x02, 0x01, 0x11, 0x10, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x01, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x10, 0x11, 0x11, 0x11, 0x11, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x11,
+0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x21, 0x11, 0x11, 0x00, 0x00, 0x22, 0x22, 0x20,
+0x11, 0x11, 0x00, 0x00, 0x21, 0x11, 0x11, 0x00, 0x22, 0x22, 0x22, 0x20, 0x11, 0x11, 0x10, 0x02,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x11, 0x11, 0x10, 0x02, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x11, 0x11,
+0x11, 0x12, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x21, 0x11, 0x11, 0x11, 0x11,
+0x11, 0x10, 0x22, 0x22, 0x22, 0x22, 0x21, 0x11, 0x11, 0x10, 0x00, 0x00, 0x22, 0x22, 0x22, 0x21,
+0x11, 0x11, 0x11, 0x00, 0x00, 0x22, 0x22, 0x01, 0x11, 0x11, 0x00, 0x02, 0x21, 0x11, 0x10, 0x00,
+0x22, 0x22, 0x20, 0x01, 0x11, 0x11, 0x10, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x21, 0x11, 0x11, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x12, 0x01, 0x11, 0x11, 0x11, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x21, 0x11, 0x11, 0x11, 0x11, 0x10, 0x11, 0x11, 0x10, 0x22, 0x22, 0x22, 0x21, 0x11, 0x11,
+0x11, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x10, 0x01, 0x11, 0x10, 0x00, 0x02, 0x22, 0x11, 0x11,
+0x11, 0x10, 0x00, 0x22, 0x21, 0x11, 0x10, 0x00, 0x22, 0x22, 0x20, 0x11, 0x11, 0x11, 0x00, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x11, 0x11, 0x11, 0x00, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x10, 0x11, 0x11,
+0x11, 0x11, 0x10, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x11, 0x11, 0x11, 0x00, 0x01,
+0x11, 0x11, 0x02, 0x22, 0x22, 0x20, 0x20, 0x11, 0x11, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x10,
+0x11, 0x11, 0x10, 0x00, 0x22, 0x22, 0x20, 0x11, 0x11, 0x10, 0x02, 0x22, 0x01, 0x11, 0x11, 0x00,
+0x22, 0x22, 0x20, 0x11, 0x11, 0x11, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x11, 0x11, 0x11, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x01, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x21, 0x11, 0x11, 0x11, 0x10, 0x00, 0x01, 0x11, 0x11, 0x02, 0x22, 0x22, 0x22, 0x01, 0x11,
+0x10, 0x00, 0x02, 0x22, 0x22, 0x22, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x22, 0x22, 0x21, 0x11,
+0x11, 0x00, 0x02, 0x22, 0x21, 0x11, 0x11, 0x00, 0x22, 0x22, 0x01, 0x11, 0x11, 0x11, 0x00, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x01, 0x11, 0x11, 0x00, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x11, 0x01, 0x11, 0x11, 0x11,
+0x11, 0x11, 0x11, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x11, 0x11, 0x11, 0x00, 0x00, 0x01,
+0x11, 0x11, 0x02, 0x22, 0x22, 0x00, 0x01, 0x11, 0x10, 0x00, 0x22, 0x22, 0x22, 0x11, 0x11, 0x11,
+0x11, 0x10, 0x00, 0x02, 0x22, 0x22, 0x21, 0x11, 0x11, 0x00, 0x22, 0x22, 0x21, 0x11, 0x11, 0x00,
+0x22, 0x22, 0x11, 0x11, 0x11, 0x10, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x11, 0x11, 0x10, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x21, 0x10, 0x11, 0x11, 0x11, 0x10, 0x11, 0x11, 0x11, 0x12, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x20, 0x11, 0x11, 0x11, 0x00, 0x00, 0x21, 0x11, 0x11, 0x00, 0x22, 0x22, 0x21, 0x11, 0x11,
+0x00, 0x02, 0x22, 0x21, 0x11, 0x21, 0x01, 0x11, 0x11, 0x00, 0x00, 0x22, 0x22, 0x22, 0x11, 0x11,
+0x10, 0x00, 0x22, 0x22, 0x01, 0x11, 0x10, 0x00, 0x22, 0x22, 0x01, 0x11, 0x11, 0x10, 0x02, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x01, 0x11, 0x10, 0x00, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x11, 0x11, 0x11, 0x00,
+0x01, 0x01, 0x11, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x11, 0x11, 0x10, 0x00, 0x22, 0x01,
+0x11, 0x11, 0x00, 0x22, 0x22, 0x01, 0x11, 0x11, 0x00, 0x02, 0x22, 0x22, 0x01, 0x11, 0x11, 0x11,
+0x00, 0x00, 0x02, 0x22, 0x22, 0x11, 0x11, 0x11, 0x10, 0x00, 0x22, 0x22, 0x21, 0x11, 0x10, 0x00,
+0x22, 0x22, 0x01, 0x11, 0x11, 0x10, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21,
+0x11, 0x11, 0x10, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x10, 0x11, 0x11, 0x10, 0x00, 0x00, 0x11, 0x11, 0x00, 0x22, 0x22, 0x22, 0x22,
+0x21, 0x11, 0x11, 0x11, 0x00, 0x00, 0x22, 0x01, 0x11, 0x11, 0x00, 0x22, 0x22, 0x01, 0x11, 0x11,
+0x00, 0x02, 0x22, 0x20, 0x01, 0x11, 0x11, 0x10, 0x00, 0x00, 0x22, 0x22, 0x11, 0x11, 0x11, 0x11,
+0x00, 0x02, 0x22, 0x22, 0x01, 0x11, 0x10, 0x00, 0x22, 0x20, 0x01, 0x11, 0x11, 0x00, 0x02, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x11, 0x11, 0x11, 0x10, 0x02, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x11, 0x11, 0x11, 0x00, 0x00,
+0x01, 0x01, 0x10, 0x00, 0x22, 0x22, 0x22, 0x22, 0x12, 0x11, 0x11, 0x11, 0x00, 0x02, 0x22, 0x01,
+0x11, 0x11, 0x00, 0x22, 0x20, 0x11, 0x11, 0x10, 0x00, 0x22, 0x20, 0x11, 0x11, 0x11, 0x11, 0x00,
+0x00, 0x02, 0x22, 0x22, 0x22, 0x01, 0x11, 0x11, 0x00, 0x22, 0x22, 0x22, 0x01, 0x11, 0x10, 0x00,
+0x22, 0x22, 0x01, 0x11, 0x11, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x01,
+0x11, 0x11, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x11, 0x11, 0x11, 0x10, 0x00, 0x22, 0x00, 0x11, 0x00, 0x02, 0x22, 0x22, 0x22, 0x02,
+0x20, 0x11, 0x11, 0x10, 0x00, 0x22, 0x11, 0x11, 0x11, 0x10, 0x00, 0x22, 0x01, 0x11, 0x11, 0x00,
+0x00, 0x22, 0x01, 0x11, 0x11, 0x11, 0x00, 0x00, 0x02, 0x22, 0x22, 0x22, 0x20, 0x11, 0x11, 0x10,
+0x00, 0x22, 0x22, 0x22, 0x21, 0x11, 0x10, 0x02, 0x22, 0x01, 0x11, 0x11, 0x11, 0x00, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x11, 0x11, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x11, 0x11, 0x11, 0x11, 0x00, 0x02, 0x22,
+0x20, 0x00, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x01, 0x11, 0x11, 0x00, 0x00, 0x22, 0x21, 0x01,
+0x11, 0x10, 0x02, 0x22, 0x01, 0x11, 0x11, 0x00, 0x02, 0x11, 0x11, 0x11, 0x11, 0x10, 0x00, 0x00,
+0x22, 0x22, 0x22, 0x22, 0x20, 0x01, 0x11, 0x10, 0x02, 0x22, 0x22, 0x22, 0x01, 0x11, 0x10, 0x02,
+0x22, 0x21, 0x11, 0x11, 0x10, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x11,
+0x11, 0x11, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x20, 0x11, 0x11, 0x11, 0x00, 0x02, 0x22, 0x22, 0x00, 0x00, 0x22, 0x22, 0x22, 0x20, 0x22,
+0x01, 0x11, 0x11, 0x00, 0x02, 0x22, 0x20, 0x11, 0x11, 0x10, 0x02, 0x11, 0x11, 0x11, 0x10, 0x00,
+0x10, 0x11, 0x11, 0x11, 0x00, 0x00, 0x10, 0x11, 0x22, 0x02, 0x22, 0x22, 0x01, 0x11, 0x11, 0x00,
+0x02, 0x22, 0x22, 0x22, 0x11, 0x11, 0x10, 0x02, 0x21, 0x11, 0x11, 0x11, 0x10, 0x02, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x11, 0x11, 0x11, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x11, 0x11, 0x11, 0x10, 0x00, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x11, 0x11, 0x10, 0x00, 0x22, 0x22, 0x20, 0x11,
+0x11, 0x10, 0x02, 0x00, 0x11, 0x11, 0x01, 0x00, 0x11, 0x11, 0x10, 0x00, 0x01, 0x11, 0x11, 0x11,
+0x01, 0x22, 0x22, 0x22, 0x11, 0x11, 0x11, 0x00, 0x02, 0x22, 0x22, 0x22, 0x11, 0x11, 0x10, 0x02,
+0x20, 0x01, 0x11, 0x11, 0x10, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x11,
+0x11, 0x10, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x21, 0x11, 0x11, 0x11, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x01,
+0x11, 0x11, 0x00, 0x00, 0x22, 0x22, 0x21, 0x11, 0x11, 0x00, 0x02, 0x21, 0x11, 0x11, 0x11, 0x11,
+0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x22, 0x22, 0x01, 0x11, 0x11, 0x00,
+0x22, 0x22, 0x22, 0x22, 0x11, 0x11, 0x10, 0x02, 0x22, 0x00, 0x11, 0x11, 0x00, 0x02, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x11, 0x11, 0x10, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x11, 0x11, 0x11, 0x00, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x11, 0x01, 0x11, 0x00, 0x02, 0x22, 0x22, 0x10, 0x11,
+0x11, 0x00, 0x02, 0x21, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+0x11, 0x10, 0x22, 0x21, 0x11, 0x11, 0x10, 0x02, 0x22, 0x22, 0x22, 0x22, 0x01, 0x11, 0x10, 0x02,
+0x20, 0x11, 0x11, 0x11, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x02, 0x22, 0x01, 0x11,
+0x11, 0x10, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x11, 0x11, 0x11, 0x10, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x02, 0x11, 0x11,
+0x11, 0x10, 0x00, 0x22, 0x22, 0x22, 0x01, 0x11, 0x11, 0x00, 0x22, 0x10, 0x11, 0x11, 0x11, 0x11,
+0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x22, 0x01, 0x11, 0x11, 0x10, 0x00,
+0x00, 0x00, 0x12, 0x22, 0x01, 0x11, 0x10, 0x02, 0x00, 0x11, 0x11, 0x11, 0x00, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x11, 0x22, 0x21, 0x11, 0x11, 0x11, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x11, 0x11, 0x11, 0x00, 0x02, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x01, 0x11, 0x11, 0x00, 0x02, 0x22, 0x22, 0x21, 0x11, 0x11,
+0x10, 0x00, 0x22, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+0x11, 0x00, 0x20, 0x01, 0x11, 0x11, 0x10, 0x01, 0x11, 0x11, 0x10, 0x22, 0x11, 0x11, 0x10, 0x02,
+0x00, 0x11, 0x11, 0x10, 0x02, 0x22, 0x22, 0x22, 0x20, 0x02, 0x11, 0x11, 0x10, 0x20, 0x21, 0x11,
+0x11, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x21,
+0x11, 0x11, 0x11, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x01, 0x11,
+0x11, 0x00, 0x02, 0x22, 0x22, 0x11, 0x11, 0x11, 0x10, 0x00, 0x01, 0x11, 0x11, 0x11, 0x11, 0x11,
+0x11, 0x11, 0x11, 0x10, 0x00, 0x00, 0x11, 0x11, 0x11, 0x00, 0x20, 0x11, 0x11, 0x11, 0x11, 0x11,
+0x11, 0x11, 0x11, 0x02, 0x01, 0x11, 0x10, 0x02, 0x01, 0x11, 0x11, 0x10, 0x02, 0x22, 0x22, 0x22,
+0x22, 0x10, 0x11, 0x11, 0x10, 0x22, 0x11, 0x11, 0x11, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x01, 0x11, 0x11, 0x10, 0x00, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x11, 0x11, 0x10, 0x00, 0x22, 0x22, 0x22, 0x21, 0x11, 0x11,
+0x00, 0x02, 0x21, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x02, 0x01, 0x11, 0x11,
+0x10, 0x00, 0x01, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x01, 0x02, 0x01, 0x11, 0x10, 0x01,
+0x11, 0x11, 0x11, 0x10, 0x02, 0x22, 0x22, 0x20, 0x10, 0x11, 0x11, 0x11, 0x10, 0x02, 0x01, 0x11,
+0x11, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x11,
+0x11, 0x11, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x11, 0x11,
+0x10, 0x00, 0x22, 0x22, 0x22, 0x00, 0x11, 0x11, 0x00, 0x01, 0x11, 0x11, 0x11, 0x11, 0x10, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x20, 0x01, 0x11, 0x10, 0x00, 0x02, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+0x11, 0x11, 0x00, 0x02, 0x01, 0x11, 0x10, 0x02, 0x01, 0x11, 0x11, 0x00, 0x22, 0x22, 0x00, 0x11,
+0x11, 0x11, 0x11, 0x11, 0x00, 0x02, 0x01, 0x11, 0x11, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x11, 0x11, 0x11, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x11, 0x11, 0x00, 0x02, 0x22, 0x22, 0x22, 0x01, 0x11, 0x11,
+0x00, 0x22, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x20, 0x11, 0x11, 0x11, 0x10,
+0x00, 0x00, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x00, 0x00, 0x02, 0x11, 0x11, 0x10, 0x02,
+0x01, 0x11, 0x11, 0x00, 0x22, 0x00, 0x11, 0x11, 0x11, 0x11, 0x10, 0x10, 0x00, 0x02, 0x11, 0x11,
+0x10, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x11, 0x11,
+0x11, 0x10, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x11, 0x11, 0x10,
+0x00, 0x22, 0x22, 0x22, 0x20, 0x11, 0x11, 0x10, 0x02, 0x21, 0x01, 0x11, 0x10, 0x00, 0x00, 0x00,
+0x22, 0x22, 0x22, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x20, 0x11, 0x11, 0x11, 0x11, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x22, 0x01, 0x11, 0x10, 0x00, 0x11, 0x11, 0x10, 0x00, 0x01, 0x11, 0x11, 0x11,
+0x11, 0x11, 0x00, 0x00, 0x00, 0x22, 0x11, 0x11, 0x10, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x21, 0x11, 0x11, 0x11, 0x11, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x21, 0x01, 0x11, 0x10, 0x00, 0x22, 0x22, 0x22, 0x20, 0x01, 0x11, 0x10,
+0x02, 0x21, 0x11, 0x11, 0x10, 0x00, 0x02, 0x22, 0x22, 0x22, 0x21, 0x11, 0x11, 0x11, 0x10, 0x00,
+0x00, 0x01, 0x01, 0x11, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00, 0x02, 0x22, 0x11, 0x11, 0x10, 0x02,
+0x11, 0x11, 0x10, 0x01, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x02, 0x21, 0x11, 0x11,
+0x10, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x11, 0x11,
+0x11, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x11, 0x11, 0x11, 0x00,
+0x02, 0x22, 0x22, 0x22, 0x01, 0x11, 0x11, 0x00, 0x22, 0x11, 0x11, 0x11, 0x00, 0x22, 0x22, 0x22,
+0x22, 0x20, 0x00, 0x11, 0x11, 0x11, 0x00, 0x00, 0x02, 0x01, 0x11, 0x11, 0x11, 0x10, 0x00, 0x00,
+0x00, 0x02, 0x22, 0x22, 0x11, 0x11, 0x10, 0x00, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10,
+0x01, 0x00, 0x00, 0x02, 0x22, 0x10, 0x11, 0x11, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x01, 0x11, 0x11, 0x10, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x00, 0x02, 0x22, 0x21, 0x11, 0x11, 0x00, 0x02, 0x22, 0x22, 0x22, 0x11, 0x11, 0x11, 0x00,
+0x22, 0x01, 0x11, 0x11, 0x00, 0x22, 0x22, 0x22, 0x22, 0x11, 0x11, 0x11, 0x11, 0x10, 0x00, 0x00,
+0x22, 0x10, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x01, 0x11, 0x10, 0x11,
+0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x22, 0x22, 0x21, 0x10, 0x11,
+0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x10, 0x11, 0x11,
+0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x10, 0x10, 0x10, 0x22, 0x01, 0x11, 0x10, 0x00,
+0x22, 0x22, 0x22, 0x10, 0x11, 0x11, 0x10, 0x00, 0x20, 0x11, 0x11, 0x11, 0x00, 0x22, 0x22, 0x21,
+0x11, 0x11, 0x11, 0x11, 0x10, 0x00, 0x00, 0x22, 0x01, 0x11, 0x11, 0x11, 0x00, 0x00, 0x02, 0x22,
+0x22, 0x22, 0x22, 0x20, 0x11, 0x11, 0x11, 0x01, 0x11, 0x11, 0x11, 0x11, 0x10, 0x11, 0x10, 0x00,
+0x00, 0x00, 0x22, 0x22, 0x22, 0x20, 0x01, 0x10, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x20, 0x21, 0x11, 0x11, 0x11, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00,
+0x11, 0x11, 0x10, 0x20, 0x01, 0x11, 0x10, 0x00, 0x22, 0x22, 0x20, 0x01, 0x11, 0x11, 0x00, 0x02,
+0x11, 0x11, 0x11, 0x10, 0x02, 0x22, 0x22, 0x20, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x02, 0x22,
+0x01, 0x11, 0x11, 0x10, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x11, 0x11, 0x10, 0x00,
+0x11, 0x11, 0x01, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00,
+0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x11, 0x11, 0x10,
+0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x01, 0x11, 0x11, 0x10, 0x01, 0x11, 0x11, 0x00, 0x02,
+0x22, 0x22, 0x01, 0x11, 0x11, 0x11, 0x00, 0x02, 0x21, 0x01, 0x11, 0x10, 0x02, 0x21, 0x11, 0x11,
+0x11, 0x11, 0x11, 0x00, 0x00, 0x02, 0x22, 0x22, 0x21, 0x11, 0x11, 0x10, 0x00, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x20, 0x11, 0x11, 0x00, 0x00, 0x11, 0x11, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x01, 0x11, 0x11, 0x10, 0x00, 0x22, 0x22, 0x22, 0x22, 0x02, 0x01, 0x11,
+0x11, 0x11, 0x01, 0x10, 0x11, 0x11, 0x00, 0x02, 0x22, 0x22, 0x11, 0x01, 0x11, 0x10, 0x00, 0x22,
+0x00, 0x11, 0x11, 0x00, 0x02, 0x22, 0x01, 0x11, 0x11, 0x11, 0x10, 0x00, 0x00, 0x22, 0x22, 0x20,
+0x01, 0x11, 0x11, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x00, 0x10, 0x00, 0x11,
+0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x11, 0x11, 0x11, 0x11, 0x10,
+0x02, 0x22, 0x22, 0x22, 0x20, 0x11, 0x01, 0x11, 0x11, 0x10, 0x00, 0x21, 0x11, 0x11, 0x00, 0x22,
+0x22, 0x11, 0x10, 0x11, 0x11, 0x00, 0x00, 0x22, 0x11, 0x11, 0x11, 0x00, 0x22, 0x01, 0x11, 0x11,
+0x11, 0x11, 0x00, 0x00, 0x02, 0x22, 0x22, 0x11, 0x11, 0x11, 0x10, 0x00, 0x02, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x20, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x11, 0x21, 0x01, 0x11, 0x11, 0x00, 0x02, 0x22, 0x22, 0x20, 0x00, 0x11, 0x11, 0x11,
+0x11, 0x00, 0x02, 0x01, 0x01, 0x11, 0x00, 0x21, 0x10, 0x11, 0x11, 0x11, 0x10, 0x00, 0x02, 0x11,
+0x11, 0x11, 0x10, 0x00, 0x10, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x02, 0x22, 0x22, 0x11, 0x11,
+0x11, 0x11, 0x10, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x02, 0x22,
+0x20, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x20, 0x11, 0x11, 0x10, 0x00,
+0x22, 0x22, 0x20, 0x20, 0x11, 0x01, 0x11, 0x11, 0x10, 0x00, 0x22, 0x00, 0x11, 0x11, 0x00, 0x00,
+0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x11, 0x22, 0x01, 0x10, 0x00, 0x01, 0x11, 0x11, 0x11, 0x11,
+0x00, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x01, 0x11, 0x11, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x20, 0x11, 0x11, 0x10, 0x02, 0x22, 0x20, 0x00, 0x11, 0x11, 0x11, 0x11, 0x10,
+0x00, 0x02, 0x22, 0x01, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x00, 0x02, 0x22, 0x22,
+0x20, 0x00, 0x01, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x11,
+0x11, 0x10, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x01, 0x11, 0x11, 0x10, 0x02,
+0x22, 0x01, 0x11, 0x11, 0x11, 0x11, 0x10, 0x00, 0x00, 0x22, 0x22, 0x20, 0x11, 0x11, 0x11, 0x11,
+0x11, 0x11, 0x10, 0x00, 0x00, 0x22, 0x22, 0x22, 0x21, 0x01, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
+0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x01, 0x11, 0x11, 0x10, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x01, 0x11, 0x11, 0x00, 0x00, 0x01, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
+0x22, 0x22, 0x22, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x00, 0x00, 0x02, 0x22, 0x22, 0x00,
+0x21, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x11, 0x11,
+0x11, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x11, 0x11, 0x11, 0x00, 0x11,
+0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x00, 0x11, 0x11, 0x10,
+0x00, 0x00, 0x00, 0x02, 0x22, 0x22, 0x22, 0x10, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x01, 0x11, 0x10, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x20, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x02, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x22, 0x22, 0x00, 0x01, 0x11,
+0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x01,
+0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+0x11, 0x11, 0x11, 0x00, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x20, 0x00,
+0x00, 0x02, 0x22, 0x22, 0x00, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x11, 0x01, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x02, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x10, 0x11, 0x11, 0x11,
+0x11, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20,
+0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x21, 0x01, 0x11, 0x11, 0x11, 0x11,
+0x11, 0x00, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x21, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x20, 0x10, 0x11, 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00,
+0x00, 0x00, 0x02, 0x22, 0x22, 0x20, 0x02, 0x20, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x11, 0x11, 0x11, 0x10, 0x00,
+0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x02, 0x01, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x02, 0x22, 0x22, 0x22, 0x20, 0x20, 0x00,
+0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x21, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x02, 0x20, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00,
+0x22, 0x22, 0x22, 0x22, 0x00, 0x20, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x02, 0x02, 0x02, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x02,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x10,
+0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x20, 0x02, 0x00, 0x00, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x20, 0x00, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x10, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x22, 0x22,
+0x22, 0x22, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x02, 0x20, 0x02, 0x22, 0x02, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x11, 0x11, 0x11,
+0x11, 0x11, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x22, 0x00, 0x20, 0x02, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x20, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x02,
+0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x02, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x11, 0x11,
+0x00, 0x00, 0x02, 0x22, 0x20, 0x20, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x02, 0x22, 0x02, 0x02, 0x02, 0x22, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x02, 0x22, 0x20, 0x00, 0x00, 0x00, 0x20,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,
+0x22, 0x20, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x22, 0x00, 0x20, 0x00,
+0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x22,
+0x22, 0x22, 0x22, 0x21, 0x11, 0x11, 0x01, 0x00, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00,
+0x02, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x01, 0x11, 0x00, 0x10, 0x10, 0x01,
+0x01, 0x11, 0x01, 0x00, 0x00, 0x00, 0x11, 0x10, 0x00, 0x11, 0x00, 0x10, 0x10, 0x01, 0x01, 0x11,
+0x11, 0x01, 0x00, 0x10, 0x01, 0x10, 0x00, 0x00, 0x01, 0x11, 0x01, 0x11, 0x11, 0x00, 0x10, 0x11,
+0x00, 0x01, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x11, 0x00, 0x00, 0x00, 0x33, 0x32, 0x22, 0x32, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x00, 0x01, 0x00, 0x10, 0x10, 0x10, 0x10, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x10, 0x01,
+0x01, 0x00, 0x10, 0x10, 0x11, 0x01, 0x00, 0x10, 0x01, 0x01, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00,
+0x10, 0x00, 0x00, 0x10, 0x01, 0x00, 0x10, 0x10, 0x10, 0x01, 0x01, 0x00, 0x10, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0x00, 0x22, 0x22, 0x22, 0x21, 0x00, 0x20, 0x00, 0x23, 0x11, 0x11, 0x11,
+0x33, 0x22, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x01, 0x01, 0x00, 0x10, 0x01, 0x00,
+0x01, 0x10, 0x01, 0x00, 0x00, 0x00, 0x10, 0x10, 0x01, 0x01, 0x10, 0x10, 0x10, 0x11, 0x00, 0x10,
+0x01, 0x01, 0x01, 0x10, 0x10, 0x11, 0x00, 0x00, 0x01, 0x10, 0x00, 0x10, 0x01, 0x00, 0x10, 0x10,
+0x01, 0x01, 0x01, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x20, 0x02, 0x02, 0x22, 0x22, 0x22, 0x22,
+0x10, 0x22, 0x00, 0x32, 0x31, 0x31, 0x31, 0x33, 0x33, 0x11, 0x32, 0x00, 0x02, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x32, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00,
+0x00, 0x00, 0x01, 0x10, 0x00, 0x10, 0x01, 0x10, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x11, 0x00,
+0x01, 0x10, 0x10, 0x10, 0x10, 0x11, 0x00, 0x10, 0x01, 0x01, 0x01, 0x10, 0x10, 0x01, 0x00, 0x00,
+0x00, 0x01, 0x00, 0x10, 0x01, 0x00, 0x10, 0x10, 0x01, 0x01, 0x01, 0x00, 0x10, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x02, 0x20, 0x02, 0x21, 0x11, 0x13, 0x33, 0x31,
+0x13, 0x33, 0x33, 0x30, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x23, 0x23,
+0x23, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x10, 0x01,
+0x00, 0x11, 0x00, 0x11, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x10, 0x10, 0x10, 0x01, 0x00, 0x10,
+0x01, 0x01, 0x00, 0x10, 0x01, 0x10, 0x00, 0x00, 0x11, 0x10, 0x00, 0x10, 0x00, 0x11, 0x10, 0x11,
+0x10, 0x01, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x20, 0x02, 0x22, 0x22, 0x22, 0x22, 0x20, 0x10,
+0x02, 0x00, 0x22, 0x31, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x00, 0x22, 0x02, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x32, 0x22, 0x22, 0x32, 0x22, 0x20, 0x02, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x02,
+0x02, 0x22, 0x22, 0x22, 0x22, 0x20, 0x00, 0x10, 0x20, 0x03, 0x21, 0x13, 0x13, 0x31, 0x33, 0x33,
+0x33, 0x33, 0x31, 0x32, 0x30, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x12, 0x32,
+0x22, 0x32, 0x32, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x02, 0x00, 0x02, 0x00, 0x00, 0x01, 0x02,
+0x00, 0x02, 0x11, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x31, 0x30, 0x00, 0x02, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x33, 0x23, 0x23, 0x23, 0x22, 0x22, 0x32, 0x20, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x00, 0x31, 0x33, 0x13, 0x33, 0x33, 0x33, 0x33,
+0x33, 0x33, 0x33, 0x33, 0x33, 0x00, 0x20, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x23, 0x13, 0x23, 0x32,
+0x23, 0x33, 0x22, 0x30, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x02,
+0x00, 0x21, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x13, 0x00, 0x02, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x33, 0x32, 0x23, 0x23, 0x33, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x02, 0x31, 0x33, 0x13, 0x33, 0x33, 0x33, 0x33,
+0x33, 0x33, 0x33, 0x33, 0x33, 0x30, 0x02, 0x20, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x13, 0x33, 0x33, 0x23,
+0x23, 0x33, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
+0x02, 0x31, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x30, 0x02, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x23, 0x33, 0x33, 0x23, 0x22, 0x22, 0x20, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x03, 0x13, 0x31, 0x33, 0x33, 0x33, 0x33, 0x33,
+0x33, 0x33, 0x33, 0x33, 0x33, 0x30, 0x20, 0x22, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x12, 0x32, 0x33, 0x33, 0x33,
+0x03, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
+0x03, 0x13, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x30, 0x00, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x33, 0x32, 0x23, 0x33, 0x33, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x01, 0x13, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33,
+0x33, 0x33, 0x33, 0x33, 0x33, 0x30, 0x02, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x23, 0x13, 0x33, 0x33, 0x33, 0x30, 0x30,
+0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
+0x01, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x30, 0x00, 0x02,
+0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x31, 0x32, 0x33, 0x23, 0x03, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x22,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x20, 0x03, 0x13, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33,
+0x33, 0x33, 0x33, 0x33, 0x33, 0x30, 0x22, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x23, 0x12, 0x33, 0x33, 0x23, 0x03, 0x33, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x22, 0x20, 0x10, 0x00,
+0x02, 0x13, 0x31, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x32, 0x30, 0x00, 0x22,
+0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x21, 0x32, 0x33, 0x33, 0x03, 0x33, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x02, 0x02, 0x02, 0x20, 0x10, 0x20, 0x00, 0x13, 0x31, 0x33, 0x33, 0x33, 0x33, 0x33,
+0x33, 0x33, 0x33, 0x33, 0x33, 0x00, 0x20, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x33, 0x33, 0x33, 0x33, 0x03, 0x33, 0x33, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x22, 0x00, 0x01, 0x02,
+0x00, 0x31, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x23, 0x00, 0x20, 0x02,
+0x20, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x23,
+0x13, 0x23, 0x33, 0x33, 0x33, 0x33, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x03, 0x13, 0x13, 0x33, 0x33, 0x33, 0x33,
+0x33, 0x33, 0x33, 0x32, 0x30, 0x02, 0x00, 0x22, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x13, 0x23, 0x33, 0x33, 0x33, 0x33, 0x33, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12,
+0x00, 0x02, 0x11, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x32, 0x31, 0x30, 0x00, 0x02, 0x02,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x23, 0x32,
+0x33, 0x33, 0x33, 0x23, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x00, 0x31, 0x13, 0x13, 0x33, 0x33, 0x33,
+0x33, 0x33, 0x33, 0x23, 0x00, 0x20, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x33, 0x23, 0x33, 0x32, 0x32, 0x33, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x02, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+0x02, 0x00, 0x03, 0x31, 0x33, 0x13, 0x33, 0x33, 0x33, 0x32, 0x21, 0x30, 0x02, 0x00, 0x20, 0x20,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x23, 0x33, 0x33,
+0x23, 0x23, 0x33, 0x33, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x00, 0x33, 0x11, 0x33, 0x11, 0x33,
+0x33, 0x31, 0x33, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x21, 0x02, 0x33, 0x23, 0x33, 0x33, 0x23, 0x03, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x01, 0x00, 0x20, 0x00, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x00, 0x02, 0x20, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x33, 0x31, 0x23, 0x33,
+0x33, 0x33, 0x32, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x11, 0x00, 0x00, 0x00, 0x33, 0x33, 0x33,
+0x33, 0x00, 0x02, 0x20, 0x02, 0x22, 0x20, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x21, 0x31, 0x30, 0x02, 0x32, 0x33, 0x33, 0x30, 0x30, 0x20, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+0x22, 0x22, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x20, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x13, 0x33, 0x33, 0x31, 0x23,
+0x33, 0x32, 0x30, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x22, 0x22, 0x21, 0x11, 0x11, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x20, 0x02, 0x20, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x21, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x23, 0x33, 0x22, 0x02, 0x00, 0x20, 0x00,
+0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+0x02, 0x02, 0x22, 0x22, 0x22, 0x22, 0x20, 0x20, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x13, 0x11, 0x31, 0x33, 0x33, 0x03,
+0x03, 0x32, 0x30, 0x22, 0x22, 0x22, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x20, 0x02, 0x20, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x21, 0x11, 0x11, 0x31, 0x33, 0x30, 0x33, 0x03, 0x23, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x13, 0x11, 0x13, 0x13, 0x33, 0x03, 0x33,
+0x10, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x20, 0x11, 0x11, 0x11, 0x13, 0x31, 0x33, 0x30, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x02, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x10, 0x01, 0x11, 0x13, 0x31, 0x13, 0x33, 0x00,
+0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20,
+0x00, 0x10, 0x11, 0x11, 0x11, 0x31, 0x30, 0x30, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x10, 0x01, 0x01, 0x11, 0x13, 0x13, 0x03, 0x02,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x20, 0x00, 0x10, 0x11, 0x11, 0x30, 0x30, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x02, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x02, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x00, 0x00, 0x01, 0x11, 0x03, 0x02, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x10, 0x00, 0x00, 0x00, 0x11, 0x10, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20,
+0x22, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x03, 0x01, 0x00, 0x03, 0x02, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x20, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x10,
+0x00, 0x30, 0x22, 0x10, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x02, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x00, 0x00, 0x02, 0x22, 0x01, 0x02, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x22, 0x02, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x00,
+0x30, 0x22, 0x22, 0x22, 0x22, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x20,
+0x02, 0x22, 0x22, 0x22, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x00, 0x03, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x20, 0x02, 0x02, 0x00, 0x22, 0x22, 0x22, 0x20, 0x20, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x10, 0x00, 0x00,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x02, 0x10, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x20, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x02, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x02, 0x20, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x20, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x02, 0x22, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x22, 0x20, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x20, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x02, 0x22,
+0x22, 0x00, 0x00, 0x00, 0x00, 0x20, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+0x02, 0x22, 0x22, 0x00, 0x20, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x22, 0x02, 0x22, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x00, 0x02, 0x00, 0x00, 0x00, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x20, 0x00, 0x00, 0x00, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x20, 0x00, 0x00, 0x02, 0x22,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x02, 0x20, 0x00, 0x20, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x20, 0x00, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x02, 0x00, 0x22, 0x22, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00,
+0x00, 0x20, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x02, 0x02, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x22, 0x22, 0x22, 0x20, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x02, 0x02, 0x00, 0x20, 0x00, 0x02, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x22, 0x22, 0x22, 0x22, 0x02, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x02, 0x20,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00,
+0x22, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x20, 0x22, 0x02, 0x02, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x12, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x12, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x12, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x21, 0x22, 0x22, 0x12, 0x22, 0x22, 0x22, 0x22, 0x21, 0x22, 0x22, 0x12, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x21, 0x02, 0x22, 0x22, 0x22, 0x22, 0x20, 0x22, 0x22, 0x20, 0x00, 0x00,
+0x00, 0x00, 0x20, 0x02, 0x10, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x10, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x02, 0x22, 0x10, 0x22,
+0x22, 0x22, 0x22, 0x21, 0x02, 0x22, 0x10, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x11, 0x02, 0x11, 0x22,
+0x21, 0x12, 0x12, 0x21, 0x11, 0x21, 0x11, 0x02, 0x01, 0x10, 0x02, 0x11, 0x10, 0x22, 0x22, 0x11,
+0x12, 0x11, 0x12, 0x22, 0x11, 0x10, 0x22, 0x22, 0x11, 0x12, 0x21, 0x12, 0x21, 0x12, 0x21, 0x12,
+0x21, 0x11, 0x12, 0x21, 0x11, 0x22, 0x10, 0x22, 0x11, 0x22, 0x21, 0x11, 0x02, 0x22, 0x11, 0x12,
+0x21, 0x22, 0x12, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x12, 0x01, 0x01, 0x11, 0x12, 0x11, 0x00, 0x10, 0x12, 0x01, 0x01, 0x00, 0x12,
+0x11, 0x11, 0x21, 0x20, 0x10, 0x22, 0x21, 0x20, 0x10, 0x10, 0x01, 0x21, 0x20, 0x10, 0x22, 0x21,
+0x20, 0x10, 0x11, 0x00, 0x11, 0x00, 0x11, 0x11, 0x21, 0x01, 0x01, 0x21, 0x00, 0x12, 0x10, 0x21,
+0x11, 0x12, 0x12, 0x01, 0x02, 0x22, 0x10, 0x01, 0x21, 0x02, 0x10, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x10, 0x21, 0x01, 0x00, 0x00,
+0x20, 0x12, 0x10, 0x21, 0x11, 0x01, 0x02, 0x10, 0x10, 0x00, 0x01, 0x02, 0x10, 0x22, 0x21, 0x02,
+0x10, 0x10, 0x21, 0x01, 0x02, 0x10, 0x22, 0x21, 0x02, 0x10, 0x20, 0x12, 0x20, 0x12, 0x10, 0x00,
+0x01, 0x01, 0x01, 0x01, 0x02, 0x10, 0x10, 0x21, 0x00, 0x00, 0x10, 0x21, 0x02, 0x22, 0x10, 0x21,
+0x02, 0x11, 0x10, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x21, 0x11, 0x02, 0x11, 0x22, 0x11, 0x20, 0x10, 0x22, 0x01, 0x01, 0x02, 0x10,
+0x21, 0x12, 0x22, 0x11, 0x10, 0x22, 0x22, 0x11, 0x10, 0x10, 0x21, 0x02, 0x11, 0x10, 0x22, 0x22,
+0x11, 0x10, 0x11, 0x20, 0x11, 0x20, 0x21, 0x12, 0x21, 0x02, 0x01, 0x01, 0x11, 0x20, 0x21, 0x22,
+0x11, 0x22, 0x21, 0x11, 0x02, 0x22, 0x11, 0x12, 0x02, 0x20, 0x10, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x02, 0x20, 0x02,
+0x20, 0x02, 0x20, 0x11, 0x12, 0x02, 0x02, 0x20, 0x22, 0x00, 0x22, 0x20, 0x00, 0x22, 0x22, 0x20,
+0x00, 0x20, 0x22, 0x02, 0x20, 0x00, 0x22, 0x22, 0x20, 0x00, 0x20, 0x02, 0x20, 0x02, 0x22, 0x00,
+0x22, 0x02, 0x22, 0x02, 0x00, 0x02, 0x22, 0x02, 0x20, 0x02, 0x22, 0x00, 0x02, 0x22, 0x20, 0x00,
+0x21, 0x11, 0x20, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x00, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x11, 0x11, 0x12, 0x21, 0x11, 0x11, 0x11,
+0x21, 0x11, 0x11, 0x11, 0x22, 0x11, 0x11, 0x11, 0x12, 0x11, 0x22, 0x22, 0x22, 0x11, 0x22, 0x11,
+0x11, 0x11, 0x22, 0x11, 0x11, 0x11, 0x11, 0x22, 0x22, 0x22, 0x21, 0x11, 0x11, 0x11, 0x21, 0x11,
+0x12, 0x22, 0x11, 0x22, 0x11, 0x11, 0x11, 0x22, 0x11, 0x21, 0x11, 0x12, 0x22, 0x11, 0x21, 0x11,
+0x11, 0x11, 0x21, 0x11, 0x11, 0x11, 0x21, 0x11, 0x11, 0x11, 0x22, 0x11, 0x21, 0x11, 0x12, 0x22,
+0x11, 0x22, 0x11, 0x11, 0x11, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x21, 0x11, 0x11, 0x11, 0x21, 0x11, 0x11, 0x11, 0x01, 0x11, 0x11, 0x11, 0x12, 0x11, 0x11, 0x11,
+0x10, 0x11, 0x02, 0x22, 0x22, 0x11, 0x01, 0x11, 0x11, 0x11, 0x12, 0x11, 0x11, 0x11, 0x11, 0x02,
+0x22, 0x22, 0x21, 0x11, 0x11, 0x11, 0x01, 0x11, 0x10, 0x22, 0x11, 0x01, 0x11, 0x11, 0x11, 0x12,
+0x11, 0x01, 0x11, 0x10, 0x22, 0x11, 0x01, 0x11, 0x11, 0x11, 0x01, 0x11, 0x11, 0x11, 0x01, 0x11,
+0x11, 0x11, 0x12, 0x11, 0x01, 0x11, 0x10, 0x22, 0x11, 0x01, 0x11, 0x11, 0x11, 0x12, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x10, 0x00, 0x11, 0x01, 0x10, 0x00, 0x00,
+0x01, 0x10, 0x00, 0x01, 0x10, 0x11, 0x00, 0x00, 0x00, 0x11, 0x02, 0x22, 0x22, 0x11, 0x01, 0x10,
+0x00, 0x01, 0x10, 0x20, 0x01, 0x10, 0x00, 0x02, 0x22, 0x22, 0x21, 0x10, 0x00, 0x00, 0x01, 0x11,
+0x11, 0x22, 0x11, 0x01, 0x10, 0x00, 0x01, 0x10, 0x11, 0x01, 0x11, 0x11, 0x22, 0x11, 0x01, 0x10,
+0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x01, 0x10, 0x00, 0x01, 0x10, 0x11, 0x01, 0x11, 0x11, 0x22,
+0x11, 0x01, 0x10, 0x00, 0x01, 0x10, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x21, 0x10, 0x22, 0x11, 0x01, 0x10, 0x22, 0x22, 0x21, 0x10, 0x22, 0x21, 0x10, 0x11, 0x02, 0x22,
+0x22, 0x11, 0x02, 0x22, 0x22, 0x11, 0x01, 0x10, 0x22, 0x22, 0x00, 0x22, 0x21, 0x10, 0x22, 0x22,
+0x22, 0x22, 0x21, 0x10, 0x22, 0x22, 0x21, 0x10, 0x11, 0x02, 0x11, 0x01, 0x10, 0x22, 0x22, 0x00,
+0x11, 0x01, 0x10, 0x11, 0x02, 0x11, 0x01, 0x10, 0x22, 0x22, 0x21, 0x10, 0x22, 0x22, 0x21, 0x10,
+0x22, 0x21, 0x10, 0x11, 0x01, 0x10, 0x11, 0x02, 0x11, 0x01, 0x10, 0x22, 0x22, 0x00, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x10, 0x22, 0x11, 0x01, 0x11, 0x11, 0x12,
+0x21, 0x10, 0x22, 0x21, 0x10, 0x11, 0x11, 0x11, 0x22, 0x11, 0x02, 0x22, 0x22, 0x11, 0x01, 0x10,
+0x22, 0x22, 0x22, 0x22, 0x21, 0x10, 0x22, 0x22, 0x22, 0x22, 0x21, 0x11, 0x11, 0x12, 0x21, 0x10,
+0x11, 0x02, 0x11, 0x01, 0x10, 0x21, 0x11, 0x12, 0x11, 0x01, 0x10, 0x11, 0x02, 0x11, 0x01, 0x11,
+0x11, 0x12, 0x21, 0x11, 0x11, 0x12, 0x21, 0x10, 0x22, 0x21, 0x10, 0x11, 0x01, 0x10, 0x11, 0x02,
+0x11, 0x01, 0x10, 0x21, 0x11, 0x12, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x21, 0x10, 0x22, 0x11, 0x01, 0x11, 0x11, 0x10, 0x21, 0x11, 0x11, 0x11, 0x00, 0x11, 0x11, 0x11,
+0x02, 0x11, 0x02, 0x22, 0x22, 0x11, 0x01, 0x10, 0x22, 0x22, 0x22, 0x22, 0x21, 0x10, 0x22, 0x22,
+0x22, 0x22, 0x21, 0x11, 0x11, 0x10, 0x21, 0x10, 0x21, 0x12, 0x11, 0x01, 0x10, 0x21, 0x11, 0x10,
+0x11, 0x01, 0x10, 0x21, 0x12, 0x11, 0x01, 0x11, 0x11, 0x10, 0x21, 0x11, 0x11, 0x10, 0x21, 0x11,
+0x11, 0x11, 0x00, 0x11, 0x01, 0x10, 0x21, 0x12, 0x11, 0x01, 0x10, 0x21, 0x11, 0x10, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x10, 0x22, 0x11, 0x01, 0x10, 0x00, 0x00,
+0x21, 0x11, 0x11, 0x11, 0x02, 0x11, 0x00, 0x00, 0x02, 0x11, 0x02, 0x22, 0x22, 0x11, 0x01, 0x10,
+0x22, 0x22, 0x22, 0x22, 0x21, 0x10, 0x22, 0x22, 0x22, 0x22, 0x21, 0x10, 0x00, 0x00, 0x21, 0x10,
+0x21, 0x10, 0x11, 0x01, 0x10, 0x22, 0x01, 0x10, 0x11, 0x01, 0x10, 0x21, 0x10, 0x11, 0x01, 0x10,
+0x00, 0x00, 0x21, 0x10, 0x00, 0x00, 0x21, 0x11, 0x11, 0x11, 0x02, 0x11, 0x01, 0x10, 0x21, 0x10,
+0x11, 0x01, 0x10, 0x22, 0x01, 0x10, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x21, 0x10, 0x22, 0x11, 0x01, 0x10, 0x22, 0x22, 0x21, 0x10, 0x00, 0x11, 0x12, 0x11, 0x02, 0x22,
+0x22, 0x11, 0x02, 0x22, 0x22, 0x11, 0x01, 0x10, 0x22, 0x21, 0x12, 0x22, 0x21, 0x10, 0x22, 0x22,
+0x22, 0x22, 0x21, 0x10, 0x22, 0x22, 0x21, 0x10, 0x21, 0x11, 0x11, 0x01, 0x10, 0x22, 0x21, 0x10,
+0x11, 0x01, 0x10, 0x21, 0x11, 0x11, 0x01, 0x10, 0x22, 0x22, 0x21, 0x10, 0x22, 0x22, 0x21, 0x10,
+0x00, 0x11, 0x12, 0x11, 0x01, 0x10, 0x21, 0x11, 0x11, 0x01, 0x10, 0x22, 0x21, 0x10, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x11, 0x11, 0x11, 0x01, 0x11, 0x11, 0x11,
+0x21, 0x10, 0x22, 0x21, 0x10, 0x11, 0x11, 0x11, 0x12, 0x11, 0x11, 0x11, 0x12, 0x11, 0x01, 0x11,
+0x11, 0x11, 0x10, 0x22, 0x21, 0x10, 0x22, 0x22, 0x22, 0x22, 0x21, 0x11, 0x11, 0x11, 0x21, 0x10,
+0x22, 0x11, 0x11, 0x01, 0x11, 0x11, 0x11, 0x10, 0x11, 0x01, 0x10, 0x22, 0x11, 0x11, 0x01, 0x11,
+0x11, 0x11, 0x21, 0x11, 0x11, 0x11, 0x21, 0x10, 0x22, 0x21, 0x10, 0x11, 0x01, 0x10, 0x22, 0x11,
+0x11, 0x01, 0x11, 0x11, 0x11, 0x10, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x21, 0x11, 0x11, 0x10, 0x01, 0x11, 0x11, 0x11, 0x01, 0x10, 0x22, 0x21, 0x10, 0x11, 0x11, 0x11,
+0x10, 0x11, 0x11, 0x11, 0x10, 0x11, 0x02, 0x11, 0x11, 0x11, 0x00, 0x22, 0x21, 0x10, 0x22, 0x22,
+0x22, 0x22, 0x21, 0x11, 0x11, 0x11, 0x01, 0x10, 0x22, 0x11, 0x11, 0x02, 0x11, 0x11, 0x11, 0x00,
+0x11, 0x01, 0x10, 0x22, 0x11, 0x11, 0x01, 0x11, 0x11, 0x11, 0x01, 0x11, 0x11, 0x11, 0x01, 0x10,
+0x22, 0x21, 0x10, 0x11, 0x01, 0x10, 0x22, 0x11, 0x11, 0x02, 0x11, 0x11, 0x11, 0x00, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00,
+0x02, 0x00, 0x22, 0x22, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x02, 0x20,
+0x00, 0x00, 0x02, 0x22, 0x22, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x02, 0x00,
+0x22, 0x20, 0x00, 0x02, 0x20, 0x00, 0x00, 0x02, 0x20, 0x02, 0x00, 0x22, 0x20, 0x00, 0x02, 0x00,
+0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x22, 0x22, 0x00, 0x20, 0x02, 0x00, 0x22, 0x20,
+0x00, 0x02, 0x20, 0x00, 0x00, 0x02, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x61, 0x96, 0x11, 0x28, 0xB1,
+0xD2, 0x61, 0x96, 0x1A, 0x61, 0x01, 0x04, 0x28, 0xB1, 0x34, 0x6E, 0x54, 0x79, 0x01, 0x6C, 0x96,
+0xB8, 0x79, 0x01, 0x51, 0x44, 0x6D, 0x96, 0x98, 0x70, 0x00, 0x12, 0x44, 0x6D, 0x96, 0xA0, 0x44,
+0x6D, 0x96, 0xA8, 0x6D, 0x96, 0xB0, 0x6E, 0x56, 0x79, 0x01, 0x6C, 0x96, 0xBA, 0x79, 0x01, 0x51,
+0x44, 0x6D, 0x96, 0x9A, 0x70, 0x00, 0x14, 0x44, 0x6D, 0x96, 0xA2, 0x70, 0x00, 0x0D, 0x44, 0x6D,
+0x96, 0xAA, 0x70, 0x00, 0x0D, 0x6D, 0x96, 0xB2, 0x61, 0x96, 0xBC, 0x6D, 0xBB, 0xFF, 0x61, 0x96,
+0x7C, 0x29, 0xB5, 0xF7, 0x61, 0x96, 0x85, 0x29, 0xB6, 0x03, 0x61, 0x96, 0x8E, 0x29, 0xB6, 0x1B,
+0x61, 0x98, 0xA4, 0x6D, 0xBC, 0x43, 0x61, 0x96, 0x97, 0x28, 0xB6, 0x48, 0x04, 0x97, 0xE5, 0x97,
+0xFD, 0x98, 0x33, 0x98, 0x6C, 0x04, 0x98, 0xA4, 0x98, 0xA7, 0x98, 0xAF, 0x98, 0xB7, 0x04, 0x98,
+0xBF, 0x98, 0xC5, 0x98, 0xD0, 0x98, 0xDB, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x0F,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x08,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x08, 0x00, 0xA0, 0x00, 0x7A, 0x21, 0x22, 0x2F, 0x5E,
+0x6C, 0x96, 0x98, 0x6F, 0x50, 0x6C, 0x96, 0x9A, 0x6F, 0x52, 0x6C, 0x96, 0x9C, 0x6C, 0x96, 0xBA,
+0x29, 0xA1, 0xCD, 0x6C, 0x96, 0x98, 0x6F, 0x50, 0x6C, 0x96, 0xB2, 0x70, 0x00, 0x0E, 0x6F, 0x52,
+0x6C, 0x96, 0xB8, 0x21, 0x01, 0x29, 0xAE, 0xD4, 0x6C, 0x96, 0xB0, 0x6F, 0x50, 0x6C, 0x96, 0xB2,
+0x70, 0x00, 0x16, 0x6F, 0x52, 0xA9, 0x97, 0x09, 0x50, 0x61, 0x67, 0x65, 0x73, 0x20, 0x61, 0x6C,
+0x6C, 0x6F, 0x63, 0x61, 0x74, 0x65, 0x64, 0x3A, 0x00, 0x61, 0x3C, 0x38, 0x29, 0xAC, 0xBA, 0x6C,
+0x96, 0xA0, 0x70, 0x00, 0x7C, 0x6F, 0x50, 0x21, 0xC2, 0x2F, 0x5F, 0x6E, 0x10, 0x29, 0xB7, 0xAF,
+0x61, 0x1C, 0x56, 0x29, 0xAC, 0xAF, 0x6C, 0x96, 0xA0, 0x6F, 0x50, 0x21, 0x4F, 0x2F, 0x5F, 0xA9,
+0x97, 0x43, 0x53, 0x6C, 0x6F, 0x74, 0x73, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6C, 0x61, 0x62, 0x6C,
+0x65, 0x3A, 0x00, 0x61, 0x3C, 0x38, 0x29, 0xAC, 0xBA, 0x6C, 0x96, 0xA0, 0x70, 0x00, 0x7C, 0x6F,
+0x50, 0x21, 0xC2, 0x2F, 0x5F, 0x6C, 0x00, 0xC9, 0x52, 0x29, 0xB7, 0xAF, 0x61, 0x1C, 0x56, 0x29,
+0xAC, 0xAF, 0x6C, 0x96, 0xA0, 0x6F, 0x50, 0x21, 0x4F, 0x2F, 0x5F, 0xA9, 0x97, 0x82, 0x49, 0x6D,
+0x61, 0x67, 0x65, 0x20, 0x73, 0x69, 0x7A, 0x65, 0x20, 0x28, 0x62, 0x79, 0x74, 0x65, 0x73, 0x29,
+0x3A, 0x00, 0x61, 0x3C, 0x38, 0x29, 0xAC, 0xBA, 0x6C, 0x96, 0xA0, 0x70, 0x00, 0x7C, 0x6F, 0x50,
+0x21, 0xC2, 0x2F, 0x5F, 0x6C, 0x00, 0xA5, 0x6C, 0x00, 0xA7, 0x29, 0x14, 0x34, 0x29, 0xB7, 0xAF,
+0x61, 0x1C, 0x56, 0x29, 0xAC, 0xAF, 0x6C, 0x96, 0xA0, 0x6F, 0x50, 0x21, 0x4F, 0x2F, 0x5F, 0xA9,
+0x97, 0xC6, 0x49, 0x6D, 0x61, 0x67, 0x65, 0x20, 0x73, 0x69, 0x7A, 0x65, 0x20, 0x28, 0x70, 0x61,
+0x67, 0x65, 0x73, 0x29, 0x3A, 0x00, 0x61, 0x3C, 0x38, 0x29, 0xAC, 0xBA, 0x6C, 0x96, 0xA0, 0x70,
+0x00, 0x7C, 0x6F, 0x50, 0x21, 0xC2, 0x2F, 0x5F, 0x6C, 0x00, 0xC7, 0x29, 0xB7, 0xAF, 0x61, 0x1C,
+0x56, 0x29, 0xAC, 0xAF, 0x88, 0x6C, 0x96, 0x9C, 0xA9, 0x97, 0xFA, 0x44, 0x65, 0x76, 0x65, 0x6C,
+0x6F, 0x70, 0x65, 0x72, 0x20, 0x69, 0x6E, 0x66, 0x6F, 0x00, 0x28, 0xA2, 0x8B, 0x21, 0x01, 0x2F,
+0x5A, 0x21, 0x42, 0x2F, 0x5F, 0xA9, 0x98, 0x1C, 0x4C, 0x69, 0x76, 0x65, 0x20, 0x63, 0x61, 0x6E,
+0x76, 0x61, 0x73, 0x20, 0x70, 0x61, 0x6E, 0x6E, 0x69, 0x6E, 0x67, 0x00, 0x61, 0x3C, 0x38, 0x29,
+0xAC, 0xA7, 0x21, 0xC2, 0x2F, 0x5F, 0x6E, 0x50, 0x70, 0x00, 0x6C, 0x6F, 0x50, 0x2C, 0x00, 0xAA,
+0x28, 0xA3, 0x00, 0x21, 0x01, 0x2F, 0x5A, 0x21, 0x42, 0x2F, 0x5F, 0xA9, 0x98, 0x55, 0x4C, 0x69,
+0x76, 0x65, 0x20, 0x72, 0x65, 0x63, 0x74, 0x61, 0x6E, 0x67, 0x6C, 0x65, 0x20, 0x70, 0x72, 0x65,
+0x76, 0x69, 0x65, 0x77, 0x00, 0x61, 0x3C, 0x38, 0x29, 0xAC, 0xA7, 0x21, 0xC2, 0x2F, 0x5F, 0x6E,
+0x50, 0x70, 0x00, 0x6C, 0x6F, 0x50, 0x2C, 0x00, 0xAB, 0x28, 0xA3, 0x00, 0x21, 0x01, 0x2F, 0x5A,
+0x21, 0x42, 0x2F, 0x5F, 0xA9, 0x98, 0x8D, 0x52, 0x65, 0x63, 0x6F, 0x72, 0x64, 0x20, 0x63, 0x61,
+0x6E, 0x76, 0x61, 0x73, 0x20, 0x63, 0x68, 0x61, 0x6E, 0x67, 0x65, 0x73, 0x00, 0x61, 0x3C, 0x38,
+0x29, 0xAC, 0xA7, 0x21, 0xC2, 0x2F, 0x5F, 0x6E, 0x50, 0x70, 0x00, 0x6C, 0x6F, 0x50, 0x2C, 0x00,
+0xAF, 0x28, 0xA3, 0x00, 0x28, 0x04, 0xD2, 0x2C, 0x00, 0xAA, 0x1F, 0x2D, 0x00, 0xAA, 0x88, 0x2C,
+0x00, 0xAB, 0x1F, 0x2D, 0x00, 0xAB, 0x88, 0x2C, 0x00, 0xAF, 0x1F, 0x2D, 0x00, 0xAF, 0x88, 0x36,
+0x01, 0x2A, 0x98, 0xA4, 0x88, 0x36, 0x01, 0x29, 0xB8, 0xF5, 0x29, 0x98, 0xA7, 0x28, 0xB1, 0x8C,
+0x36, 0x01, 0x29, 0xB8, 0xF5, 0x29, 0x98, 0xAF, 0x28, 0xB1, 0x8C, 0x36, 0x01, 0x29, 0xB8, 0xF5,
+0x29, 0x98, 0xB7, 0x28, 0xB1, 0x8C, 0x61, 0x98, 0xEC, 0x28, 0xB1, 0xD2, 0x61, 0x98, 0xF5, 0x61,
+0x01, 0x01, 0x28, 0xB1, 0x34, 0x6E, 0x54, 0x79, 0x01, 0x6C, 0x99, 0x45, 0x79, 0x01, 0x51, 0x6D,
+0x99, 0x3D, 0x6E, 0x56, 0x79, 0x01, 0x6C, 0x99, 0x47, 0x79, 0x01, 0x51, 0x6D, 0x99, 0x3F, 0x61,
+0x99, 0x49, 0x6D, 0xBB, 0xFF, 0x61, 0x99, 0x33, 0x29, 0xB5, 0xF7, 0x61, 0x99, 0x36, 0x29, 0xB6,
+0x03, 0x61, 0x99, 0x39, 0x29, 0xB6, 0x1B, 0x61, 0x9A, 0xEB, 0x6D, 0xBC, 0x43, 0x61, 0x99, 0x3C,
+0x28, 0xB6, 0x48, 0x01, 0x9A, 0xD7, 0x01, 0x9A, 0xEB, 0x01, 0x9A, 0xEE, 0x01, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xC8, 0x00, 0x0F, 0x00, 0xC8, 0x00, 0x78, 0x21, 0x22, 0x2F, 0x5E, 0x6C, 0x99, 0x3D,
+0x6F, 0x50, 0x6C, 0x99, 0x3F, 0x6F, 0x52, 0x6C, 0x99, 0x41, 0x6C, 0x99, 0x47, 0x29, 0xA1, 0xCD,
+0x61, 0x10, 0x5C, 0x2F, 0x5F, 0x2F, 0x5F, 0x61, 0x99, 0xD4, 0x61, 0x3C, 0x38, 0x29, 0xAC, 0xA7,
+0x21, 0x48, 0x2F, 0x5F, 0x61, 0x99, 0xFC, 0x61, 0x3C, 0x38, 0x29, 0xAC, 0xA7, 0x21, 0x48, 0x2F,
+0x5F, 0x61, 0x9A, 0x25, 0x61, 0x3C, 0x38, 0x29, 0xAC, 0xA7, 0x21, 0x48, 0x2F, 0x5F, 0x61, 0x9A,
+0x4C, 0x61, 0x3C, 0x38, 0x29, 0xAC, 0xA7, 0x21, 0x50, 0x2F, 0x5F, 0x61, 0x9A, 0x64, 0x61, 0x3C,
+0x38, 0x29, 0xAC, 0xA7, 0x21, 0x48, 0x2F, 0x5F, 0x61, 0x9A, 0x8B, 0x61, 0x3C, 0x38, 0x29, 0xAC,
+0xA7, 0x21, 0x52, 0x2F, 0x5F, 0x21, 0x05, 0x2F, 0x5F, 0x61, 0x9A, 0xB1, 0x61, 0x3C, 0x38, 0x29,
+0xAC, 0xA7, 0x61, 0x82, 0xC3, 0x2F, 0x5F, 0x2F, 0x5F, 0x61, 0x00, 0x9D, 0x61, 0x00, 0x0B, 0x21,
+0x01, 0x28, 0xAD, 0x38, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20,
+0x64, 0x65, 0x6D, 0x6F, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x20, 0x6F, 0x66, 0x20,
+0x43, 0x6F, 0x62, 0x61, 0x6C, 0x74, 0x2E, 0x20, 0x54, 0x68, 0x65, 0x00, 0x66, 0x75, 0x6C, 0x6C,
+0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x20, 0x69, 0x6E, 0x63, 0x6C, 0x75, 0x64, 0x65,
+0x73, 0x20, 0x61, 0x20, 0x66, 0x69, 0x6C, 0x65, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x73, 0x65, 0x72,
+0x20, 0x66, 0x6F, 0x72, 0x00, 0x6F, 0x70, 0x65, 0x6E, 0x69, 0x6E, 0x67, 0x20, 0x73, 0x61, 0x76,
+0x65, 0x64, 0x20, 0x69, 0x6D, 0x61, 0x67, 0x65, 0x73, 0x2C, 0x20, 0x62, 0x75, 0x74, 0x20, 0x69,
+0x73, 0x20, 0x6F, 0x74, 0x68, 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, 0x00, 0x69, 0x64, 0x65, 0x6E,
+0x74, 0x69, 0x63, 0x61, 0x6C, 0x20, 0x74, 0x6F, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x64, 0x65,
+0x6D, 0x6F, 0x2E, 0x00, 0x54, 0x68, 0x65, 0x20, 0x66, 0x75, 0x6C, 0x6C, 0x20, 0x76, 0x65, 0x72,
+0x73, 0x69, 0x6F, 0x6E, 0x20, 0x63, 0x61, 0x6E, 0x20, 0x62, 0x65, 0x20, 0x70, 0x75, 0x72, 0x63,
+0x68, 0x61, 0x73, 0x65, 0x64, 0x20, 0x66, 0x6F, 0x72, 0x20, 0x00, 0x57, 0x69, 0x6E, 0x64, 0x6F,
+0x77, 0x73, 0x2C, 0x20, 0x4C, 0x69, 0x6E, 0x75, 0x78, 0x2C, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x4E,
+0x69, 0x6E, 0x74, 0x65, 0x6E, 0x64, 0x6F, 0x20, 0x44, 0x53, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x3A,
+0x00, 0x20, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3A, 0x2F, 0x2F, 0x64, 0x65, 0x72, 0x65, 0x6C, 0x69,
+0x63, 0x74, 0x2E, 0x65, 0x6E, 0x67, 0x69, 0x6E, 0x65, 0x65, 0x72, 0x69, 0x6E, 0x67, 0x2F, 0x63,
+0x6F, 0x62, 0x61, 0x6C, 0x74, 0x00, 0x88, 0x6C, 0x99, 0x41, 0xA9, 0x9A, 0xE8, 0x41, 0x62, 0x6F,
+0x75, 0x74, 0x20, 0x64, 0x65, 0x6D, 0x6F, 0x00, 0x28, 0xA2, 0x8B, 0x28, 0x3F, 0xA0, 0x36, 0x01,
+0x2A, 0x9A, 0xEB, 0x88, 0x21, 0x00, 0x21, 0x00, 0x2C, 0xC5, 0x9A, 0x70, 0xC5, 0xA3, 0x0C, 0x78,
+0x03, 0x70, 0xC5, 0xA3, 0x44, 0x4C, 0x46, 0x70, 0x00, 0x02, 0x44, 0x4C, 0x46, 0x70, 0x00, 0x02,
+0x44, 0x4C, 0x46, 0x70, 0x00, 0x02, 0x4C, 0x5C, 0x5C, 0x5C, 0x1C, 0x2A, 0x9B, 0x23, 0x42, 0x42,
+0x42, 0x42, 0x88, 0x47, 0x45, 0x45, 0x51, 0x29, 0xBA, 0x39, 0x6D, 0x9B, 0x43, 0xC1, 0xC1, 0x45,
+0x45, 0x51, 0x29, 0xBA, 0x39, 0x6D, 0x9B, 0x3D, 0x41, 0x41, 0x47, 0x47, 0x61, 0x00, 0x00, 0x75,
+0x00, 0x10, 0x61, 0x00, 0x00, 0x75, 0x00, 0x10, 0x1E, 0x21, 0x00, 0x2C, 0xC5, 0x9A, 0x70, 0xC5,
+0xB3, 0x0C, 0x21, 0x00, 0x2C, 0xC5, 0x9A, 0x70, 0xC5, 0xBB, 0x0C, 0x76, 0x00, 0x00, 0x1E, 0x02,
+0x21, 0x00, 0x21, 0x00, 0x2C, 0xC5, 0x9A, 0x70, 0xC5, 0xB3, 0x0C, 0x52, 0xC3, 0x6F, 0x22, 0x47,
+0x43, 0x29, 0x9B, 0xB6, 0x6D, 0x9B, 0x8E, 0x6D, 0x9B, 0xA6, 0xC3, 0xC6, 0x6D, 0x9B, 0x95, 0x46,
+0x41, 0x29, 0x9B, 0xB6, 0x6D, 0x9B, 0x9E, 0x6D, 0x9B, 0xA2, 0x6D, 0x9B, 0x91, 0xF0, 0x00, 0x00,
+0x61, 0x00, 0x00, 0x43, 0x71, 0x00, 0x00, 0x29, 0xA7, 0x4E, 0x29, 0x22, 0xAF, 0x70, 0x00, 0x00,
+0x44, 0x70, 0x00, 0x00, 0x43, 0x70, 0x00, 0x00, 0x29, 0x22, 0x4E, 0x44, 0x6A, 0x9B, 0x9D, 0x42,
+0xC4, 0xEA, 0x9B, 0x8D, 0xC2, 0x88, 0x5F, 0x52, 0xC1, 0x45, 0x51, 0xC3, 0xF4, 0x80, 0x00, 0x84,
+0xAA, 0x9B, 0xC9, 0x46, 0x5F, 0x52, 0x46, 0x5F, 0x52, 0x44, 0x6F, 0x20, 0x6E, 0x2E, 0x51, 0xC1,
+0x6E, 0x2E, 0x50, 0x41, 0xAA, 0x9B, 0xDF, 0x46, 0x5F, 0x52, 0x46, 0x5F, 0x52, 0xDF, 0xD2, 0x43,
+0x51, 0x46, 0x41, 0x88, 0x47, 0x29, 0xB9, 0x07, 0x6D, 0x9C, 0x99, 0x6D, 0x9C, 0x96, 0x29, 0xB9,
+0x07, 0x6D, 0x9C, 0x93, 0x6D, 0x9C, 0x90, 0x21, 0x00, 0x21, 0x00, 0x2C, 0xC5, 0x9A, 0x70, 0xC5,
+0xA3, 0x0C, 0x78, 0x03, 0x70, 0xC5, 0xC3, 0x44, 0x4C, 0x46, 0x70, 0x00, 0x02, 0x44, 0x4C, 0x46,
+0x70, 0x00, 0x02, 0x44, 0x4C, 0x46, 0x70, 0x00, 0x02, 0x4C, 0x5C, 0x47, 0x5C, 0x1C, 0x07, 0x1C,
+0x76, 0x10, 0x00, 0x2A, 0x9C, 0x8F, 0x6C, 0x9C, 0x90, 0x6C, 0x9C, 0x93, 0x6C, 0x9C, 0x96, 0x44,
+0x70, 0x00, 0x09, 0x29, 0x9C, 0xB3, 0x6C, 0x9C, 0x90, 0x6C, 0x9C, 0x93, 0x6C, 0x9C, 0x99, 0x44,
+0x71, 0x00, 0x07, 0x46, 0x29, 0x9C, 0xB3, 0x6C, 0x9C, 0x90, 0x44, 0x70, 0x00, 0x09, 0x6C, 0x9C,
+0x96, 0x70, 0x00, 0x08, 0x6C, 0x9C, 0x99, 0x71, 0x00, 0x08, 0x29, 0x9C, 0xB3, 0x6C, 0x9C, 0x93,
+0x44, 0x71, 0x00, 0x07, 0x46, 0x6C, 0x9C, 0x96, 0x70, 0x00, 0x08, 0x6C, 0x9C, 0x99, 0x71, 0x00,
+0x08, 0x29, 0x9C, 0xB3, 0x6C, 0x9C, 0x90, 0x70, 0x00, 0x07, 0x6C, 0x9C, 0x93, 0x71, 0x00, 0x07,
+0x6C, 0x9C, 0x96, 0x70, 0x00, 0x07, 0x6C, 0x9C, 0x99, 0x71, 0x00, 0x07, 0x28, 0x9C, 0x9B, 0x61,
+0x00, 0x00, 0x61, 0x00, 0x00, 0x61, 0x00, 0x00, 0x61, 0x00, 0x00, 0xC1, 0xC1, 0xC1, 0x70, 0x00,
+0x03, 0x41, 0x70, 0x00, 0x03, 0x41, 0x70, 0x00, 0x03, 0x41, 0x70, 0x00, 0x03, 0x61, 0x22, 0x43,
+0x28, 0x9C, 0xB6, 0x61, 0x22, 0x4E, 0x6D, 0x9C, 0xCD, 0xC1, 0xC1, 0x46, 0x6D, 0x9C, 0xC4, 0x28,
+0x9C, 0xC3, 0xD2, 0x61, 0x00, 0x00, 0x28, 0x9C, 0xCA, 0x52, 0x44, 0x43, 0x29, 0x00, 0x00, 0x57,
+0x2A, 0x9C, 0xC9, 0x42, 0xD7, 0xAA, 0x9C, 0xC2, 0x42, 0xC2, 0xC2, 0x88, 0x61, 0x9C, 0xE2, 0x28,
+0xB1, 0xD2, 0x29, 0xA9, 0x80, 0x29, 0x00, 0xD1, 0x29, 0x12, 0xD2, 0x29, 0xA9, 0x96, 0x61, 0x9C,
+0xF7, 0x61, 0x00, 0x01, 0x28, 0xB1, 0x34, 0x29, 0xA7, 0xF6, 0x6E, 0x54, 0x79, 0x01, 0x6C, 0x9D,
+0xB8, 0x79, 0x01, 0x51, 0x44, 0x6D, 0x9D, 0xB4, 0x44, 0x70, 0x00, 0x01, 0x6D, 0x9D, 0xBC, 0x44,
+0x70, 0x00, 0x55, 0x6D, 0x9D, 0xC4, 0x70, 0x00, 0x55, 0x6D, 0x9D, 0xAC, 0x6E, 0x56, 0x79, 0x01,
+0x6C, 0x9D, 0xCC, 0x79, 0x01, 0x51, 0x44, 0x6D, 0x9D, 0xB6, 0x44, 0x70, 0x00, 0x13, 0x6D, 0x9D,
+0xBE, 0x44, 0x70, 0x00, 0x2C, 0x6D, 0x9D, 0xC6, 0x70, 0x00, 0x8E, 0x6D, 0x9D, 0xAE, 0x61, 0x9D,
+0xCE, 0x6D, 0xBB, 0xFF, 0x61, 0x9D, 0x8A, 0x29, 0xB5, 0xF7, 0x61, 0x9D, 0x93, 0x29, 0xB5, 0xFD,
+0x61, 0x9D, 0x96, 0x29, 0xB6, 0x03, 0x61, 0x9D, 0x99, 0x29, 0xB6, 0x1B, 0x61, 0x9F, 0xC0, 0x6D,
+0xBB, 0x33, 0x61, 0x9D, 0xA2, 0x29, 0xB6, 0x21, 0x61, 0x4F, 0xB4, 0x6D, 0xBC, 0x43, 0x61, 0x9F,
+0x96, 0x6D, 0xBA, 0xF1, 0x61, 0x9D, 0xAB, 0x29, 0xB6, 0x48, 0x29, 0xA0, 0x90, 0x61, 0x04, 0x03,
+0x2C, 0x00, 0xC2, 0x29, 0xB7, 0x76, 0x2D, 0xBA, 0x4F, 0x88, 0x04, 0x9F, 0x5A, 0x9E, 0xA7, 0x9E,
+0xC5, 0x9F, 0x44, 0x01, 0x9F, 0x90, 0x01, 0x9F, 0xA2, 0x04, 0xA0, 0x8A, 0x9F, 0xB4, 0x9F, 0xBA,
+0x9F, 0xC0, 0x04, 0x00, 0x00, 0x00, 0x00, 0x02, 0x68, 0x02, 0x71, 0x04, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x80, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDF, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x4A, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x50, 0x00, 0xA6, 0x21, 0x22,
+0x2F, 0x5E, 0x6C, 0x9D, 0xB4, 0x6F, 0x50, 0x6C, 0x9D, 0xB6, 0x6F, 0x52, 0x6C, 0x9D, 0xB8, 0x6C,
+0x9D, 0xCC, 0x29, 0xA1, 0xCD, 0x6C, 0x9D, 0xBC, 0x6C, 0x9D, 0xC0, 0x50, 0x6F, 0x50, 0x6C, 0x9D,
+0xBE, 0x53, 0x6F, 0x52, 0x6C, 0x9D, 0xC2, 0x52, 0x21, 0x01, 0x29, 0xAD, 0xEF, 0x6C, 0x9D, 0xC8,
+0x79, 0x01, 0x21, 0xFF, 0x2F, 0x96, 0x21, 0x96, 0x61, 0x1C, 0x56, 0x29, 0xAF, 0x4F, 0x79, 0x01,
+0x51, 0x05, 0x34, 0x80, 0x04, 0x5E, 0x6C, 0x9D, 0xC4, 0x50, 0x6F, 0x50, 0x6C, 0x9D, 0xB6, 0x70,
+0x00, 0x17, 0x6F, 0x52, 0x21, 0xFF, 0x2F, 0x96, 0x6C, 0x9D, 0xC8, 0x21, 0x96, 0x61, 0x1C, 0x56,
+0xA9, 0x9E, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x00, 0x29, 0xAE, 0x7A, 0x2C, 0x00,
+0xC2, 0x29, 0xB8, 0xF5, 0x61, 0xA0, 0xB9, 0x6C, 0x00, 0xA5, 0x29, 0xB7, 0xAF, 0x29, 0xB6, 0xF2,
+0x21, 0x78, 0x29, 0xB7, 0x07, 0x6C, 0x00, 0xA7, 0x29, 0xB7, 0xAF, 0x29, 0xB6, 0xF2, 0x21, 0x00,
+0x29, 0xB7, 0x03, 0x6C, 0x9D, 0xC4, 0x6F, 0x50, 0x6C, 0x9D, 0xB6, 0x70, 0x00, 0x21, 0x6F, 0x52,
+0x6C, 0x9D, 0xC8, 0x61, 0xA0, 0xB9, 0x61, 0x3C, 0x38, 0x29, 0xAD, 0x63, 0x6C, 0x9D, 0xC4, 0x6F,
+0x50, 0x6C, 0x9D, 0xC6, 0x6C, 0x9D, 0xCA, 0x50, 0x70, 0x00, 0x03, 0x6F, 0x52, 0xE1, 0x10, 0x08,
+0x61, 0x00, 0x10, 0x61, 0x00, 0x08, 0x03, 0x29, 0xAD, 0xA2, 0x21, 0x10, 0x2F, 0x5F, 0x92, 0x97,
+0xAA, 0x9E, 0x90, 0xC2, 0x28, 0x9E, 0xE3, 0x6C, 0x9D, 0xB4, 0x6F, 0x50, 0x6C, 0x9D, 0xB6, 0x6F,
+0x52, 0x6C, 0x9D, 0xB8, 0xA9, 0x9E, 0xC2, 0x4F, 0x70, 0x65, 0x6E, 0x20, 0x69, 0x6D, 0x61, 0x67,
+0x65, 0x00, 0x28, 0xA2, 0x8B, 0x6C, 0x9D, 0xBC, 0x6F, 0x50, 0x6C, 0x9D, 0xBE, 0x6F, 0x52, 0x6C,
+0x9D, 0xC0, 0x6C, 0x9D, 0xC2, 0x21, 0x00, 0x29, 0xAD, 0xA2, 0x6C, 0x9D, 0xC0, 0x61, 0x02, 0x9C,
+0x28, 0xA5, 0x48, 0x2C, 0x00, 0xC2, 0x29, 0xB8, 0xF5, 0x6C, 0x9D, 0xC4, 0x6F, 0x50, 0x6C, 0x9D,
+0xC6, 0x6F, 0x52, 0x6C, 0x9D, 0xC8, 0x6C, 0x9D, 0xCA, 0x21, 0x04, 0x29, 0xAD, 0xA2, 0x6C, 0x9D,
+0xC4, 0x52, 0x6C, 0x9D, 0xC6, 0x52, 0x6C, 0x9D, 0xC8, 0x71, 0x00, 0x02, 0x6C, 0x9D, 0xCA, 0x71,
+0x00, 0x02, 0x29, 0x2E, 0x17, 0x6C, 0x9D, 0xC6, 0x6F, 0x52, 0x6C, 0x9D, 0xC4, 0x71, 0x00, 0x03,
+0x6F, 0x50, 0x61, 0x00, 0x04, 0x6C, 0x9D, 0xCA, 0x21, 0x00, 0x29, 0xAD, 0xA2, 0x6C, 0x9D, 0xC4,
+0x6C, 0x9D, 0xC8, 0x50, 0x53, 0x6F, 0x50, 0x61, 0x00, 0x04, 0x6C, 0x9D, 0xCA, 0x21, 0x00, 0x29,
+0xAD, 0xA2, 0x21, 0x00, 0x02, 0x6C, 0x9D, 0xC4, 0x6F, 0x50, 0x6C, 0x9D, 0xC6, 0x6F, 0x52, 0x6C,
+0x9D, 0xC8, 0x6C, 0x9D, 0xCA, 0x21, 0x01, 0x28, 0xAD, 0x00, 0x6C, 0x9D, 0xAC, 0x6F, 0x50, 0x6C,
+0x9D, 0xAE, 0x6F, 0x52, 0x6C, 0x9D, 0xB0, 0x2C, 0x00, 0xC2, 0x2A, 0x9F, 0x85, 0xA9, 0x9F, 0x82,
+0x4E, 0x6F, 0x74, 0x20, 0x61, 0x20, 0x43, 0x6F, 0x62, 0x61, 0x6C, 0x74, 0x20, 0x66, 0x69, 0x6C,
+0x65, 0x00, 0x28, 0xA0, 0xCD, 0xA9, 0x9F, 0x8D, 0x4F, 0x50, 0x45, 0x4E, 0x00, 0x28, 0xA1, 0x27,
+0x35, 0x7F, 0x2A, 0x4F, 0xB4, 0x88, 0x61, 0x02, 0xF6, 0x29, 0xA7, 0x99, 0x28, 0x9C, 0xDC, 0x28,
+0x3F, 0xA5, 0x2C, 0x00, 0xC2, 0x2C, 0x00, 0xC1, 0x36, 0x00, 0x1E, 0x29, 0xB8, 0xF5, 0x29, 0x52,
+0x99, 0x28, 0x04, 0xD2, 0x36, 0x01, 0x2A, 0x9F, 0x9F, 0x88, 0x36, 0x01, 0x2A, 0x4F, 0xB4, 0x88,
+0x04, 0x36, 0x01, 0x2B, 0x9F, 0xD2, 0x04, 0x36, 0x02, 0x2B, 0x9F, 0xEB, 0x36, 0x03, 0x2B, 0xA0,
+0x83, 0x88, 0x6C, 0xBA, 0x5F, 0x6D, 0xA0, 0xC5, 0x6C, 0xBA, 0x63, 0x6D, 0xA0, 0xC7, 0x6C, 0x00,
+0xA1, 0x6D, 0xA0, 0xC9, 0x6C, 0x00, 0xA3, 0x6D, 0xA0, 0xCB, 0x88, 0x2C, 0x00, 0xC2, 0x29, 0xB8,
+0xF5, 0x6C, 0x00, 0xA5, 0x6C, 0x9D, 0xC8, 0x71, 0x00, 0x02, 0x55, 0x2B, 0xA0, 0x1D, 0x6C, 0x00,
+0xA7, 0x6C, 0x9D, 0xCA, 0x71, 0x00, 0x02, 0x55, 0x2B, 0xA0, 0x50, 0x21, 0xA0, 0x2F, 0x5E, 0x21,
+0x83, 0x29, 0x2D, 0xE8, 0x2C, 0x00, 0xAA, 0x29, 0xB8, 0xF5, 0x28, 0x9E, 0xE3, 0x6C, 0xBA, 0x5F,
+0x6C, 0xA0, 0xC5, 0x51, 0x6C, 0xA0, 0xC9, 0x50, 0x6C, 0x9D, 0xC4, 0x52, 0x45, 0x45, 0x29, 0xB8,
+0xF9, 0x29, 0xB7, 0x70, 0x6C, 0x00, 0xA5, 0x50, 0x6C, 0x9D, 0xC4, 0x6C, 0x9D, 0xC8, 0x50, 0x53,
+0x45, 0x45, 0x29, 0xB8, 0xF8, 0x29, 0xB7, 0x70, 0x6C, 0x00, 0xA5, 0x51, 0x6D, 0x00, 0xA1, 0x88,
+0x6C, 0xBA, 0x63, 0x6C, 0xA0, 0xC7, 0x51, 0x6C, 0xA0, 0xCB, 0x50, 0x6C, 0x9D, 0xC6, 0x52, 0x45,
+0x45, 0x29, 0xB8, 0xF9, 0x29, 0xB7, 0x70, 0x6C, 0x00, 0xA7, 0x50, 0x6C, 0x9D, 0xC6, 0x6C, 0x9D,
+0xCA, 0x50, 0x53, 0x45, 0x45, 0x29, 0xB8, 0xF8, 0x29, 0xB7, 0x70, 0x6C, 0x00, 0xA7, 0x51, 0x6D,
+0x00, 0xA3, 0x88, 0x21, 0xA0, 0x2F, 0x5E, 0x28, 0x9E, 0xE3, 0x36, 0x01, 0x2A, 0x9F, 0xA2, 0x88,
+0x6C, 0x00, 0xA5, 0x79, 0x01, 0x6C, 0x9D, 0xC8, 0x79, 0x01, 0x51, 0x5F, 0x52, 0x6C, 0x9D, 0xC4,
+0x50, 0x6D, 0x00, 0xA1, 0x6C, 0x00, 0xA7, 0x79, 0x01, 0x6C, 0x9D, 0xCA, 0x79, 0x01, 0x51, 0x5F,
+0x52, 0x6C, 0x9D, 0xC6, 0x50, 0x6D, 0x00, 0xA3, 0x88, 0x31, 0x32, 0x33, 0x34, 0x35, 0x78, 0x31,
+0x32, 0x33, 0x34, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0x07, 0x26,
+0x01, 0x1F, 0x30, 0x03, 0xC1, 0x53, 0x44, 0x41, 0x29, 0xA1, 0x54, 0x21, 0x03, 0x2F, 0x5A, 0x61,
+0x06, 0x41, 0x2F, 0x5F, 0x2F, 0x5F, 0x61, 0xA1, 0x07, 0x24, 0x02, 0x29, 0xAC, 0x64, 0x61, 0x04,
+0x42, 0x2F, 0x5F, 0x2F, 0x5F, 0x71, 0x00, 0x0A, 0x41, 0x61, 0x3C, 0x38, 0x29, 0xAD, 0x63, 0x61,
+0x8A, 0xC3, 0x2F, 0x5F, 0x2F, 0x5F, 0x88, 0x08, 0x1C, 0x14, 0x36, 0x36, 0x77, 0x7F, 0xF7, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0x07, 0x04, 0x3E, 0x02, 0x12, 0x06, 0x30, 0x02,
+0x28, 0xA1, 0x3A, 0xC1, 0x07, 0x1F, 0x30, 0x03, 0x21, 0x01, 0x04, 0x2F, 0x5A, 0xC1, 0x53, 0x44,
+0x41, 0x29, 0xA1, 0x54, 0x21, 0x42, 0x2F, 0x5F, 0x41, 0x61, 0x45, 0x86, 0x29, 0xAD, 0x63, 0x21,
+0xC2, 0x2F, 0x5F, 0x88, 0xC1, 0x61, 0x01, 0x41, 0x2F, 0x5F, 0x2F, 0x5F, 0x44, 0x61, 0x00, 0x0B,
+0x01, 0x29, 0xAE, 0xE8, 0x61, 0x81, 0xC1, 0x2F, 0x5F, 0x2F, 0x5F, 0x61, 0x00, 0x0B, 0x01, 0x28,
+0xAE, 0xE8, 0x28, 0xA1, 0x33, 0x27, 0x01, 0x1F, 0x30, 0x03, 0x6F, 0x5A, 0x26, 0x00, 0x3E, 0x03,
+0x38, 0x04, 0x70, 0xA1, 0x8D, 0x29, 0xAD, 0x7C, 0x21, 0x38, 0x2F, 0x5E, 0x88, 0x00, 0x7E, 0x7E,
+0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x00, 0x7E, 0x7E,
+0x42, 0x7E, 0x7E, 0x7E, 0x00, 0x7E, 0xFF, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0x7E, 0x00, 0x38, 0x92,
+0x46, 0x46, 0x12, 0x38, 0x04, 0x7E, 0xFF, 0x7D, 0xBB, 0xFF, 0xEF, 0xD7, 0x7A, 0x00, 0x7E, 0x7C,
+0x79, 0x32, 0x86, 0x4E, 0x10, 0x7E, 0xFF, 0xFF, 0xFE, 0xFD, 0x7B, 0xB7, 0x6E, 0x46, 0x71, 0x00,
+0x02, 0x46, 0x71, 0x00, 0x02, 0x61, 0x01, 0x41, 0x2F, 0x5F, 0x2F, 0x5F, 0x45, 0x71, 0x00, 0x02,
+0x45, 0x71, 0x00, 0x02, 0x21, 0x00, 0x29, 0xAD, 0xA2, 0x61, 0x81, 0xC1, 0x2F, 0x5F, 0x2F, 0x5F,
+0x61, 0x16, 0x48, 0x29, 0xAD, 0xD7, 0x21, 0x01, 0x2F, 0x5A, 0x45, 0x45, 0x29, 0xAE, 0x55, 0x45,
+0x71, 0x00, 0x08, 0x21, 0x01, 0x21, 0x04, 0x2F, 0x5F, 0x29, 0xAC, 0xDF, 0x21, 0x81, 0x2F, 0x5F,
+0x21, 0x42, 0x2F, 0x5F, 0x61, 0x19, 0x06, 0x6F, 0x5E, 0x61, 0x00, 0x02, 0x45, 0x71, 0x00, 0x06,
+0x21, 0x01, 0x21, 0x43, 0x2F, 0x5F, 0x29, 0xAD, 0xA2, 0x21, 0xC3, 0x2F, 0x5F, 0x44, 0x71, 0x00,
+0x05, 0x21, 0x01, 0x21, 0x81, 0x2F, 0x5F, 0x29, 0xAC, 0xEF, 0x61, 0x41, 0x82, 0x2F, 0x5F, 0x2F,
+0x5F, 0x61, 0x00, 0x04, 0x44, 0x21, 0x01, 0x29, 0xAD, 0xA2, 0x61, 0x00, 0x42, 0x6F, 0x5E, 0x46,
+0x71, 0x00, 0x06, 0x44, 0x21, 0x01, 0x21, 0x82, 0x2F, 0x5F, 0x29, 0xAC, 0xD6, 0x21, 0x03, 0x2F,
+0x5F, 0x61, 0x00, 0x02, 0x21, 0x01, 0x21, 0x41, 0x2F, 0x5F, 0x29, 0xAD, 0xA2, 0x21, 0x83, 0x2F,
+0x5F, 0x21, 0xC6, 0x2F, 0x5F, 0x61, 0x1A, 0x41, 0x6F, 0x5E, 0x71, 0x00, 0x08, 0x21, 0x01, 0x21,
+0x82, 0x2F, 0x5F, 0x29, 0xAC, 0xE6, 0x21, 0xC4, 0x2F, 0x5F, 0x88, 0x6D, 0xA2, 0xCA, 0x07, 0x1F,
+0x30, 0x03, 0x81, 0x71, 0x00, 0x04, 0x44, 0x61, 0x00, 0x0D, 0x01, 0x61, 0x01, 0x41, 0x2F, 0x5F,
+0x2F, 0x5F, 0x29, 0xAD, 0xA2, 0x21, 0x4D, 0x2F, 0x5F, 0x44, 0x21, 0x01, 0x29, 0xAE, 0xD4, 0x21,
+0x01, 0x2F, 0x5A, 0x61, 0xA2, 0xF8, 0x29, 0xAD, 0x82, 0x61, 0x04, 0xCA, 0x2F, 0x5F, 0x2F, 0x5F,
+0x21, 0x18, 0x2F, 0x5E, 0x21, 0x84, 0x2F, 0x5F, 0x44, 0x61, 0x00, 0x00, 0x61, 0x45, 0x86, 0x29,
+0xAD, 0x63, 0x61, 0x81, 0xC4, 0x2F, 0x5F, 0x2F, 0x5F, 0x21, 0x01, 0x2F, 0x5A, 0x61, 0x16, 0x48,
+0x29, 0xAD, 0xD7, 0x21, 0x18, 0x2F, 0x5E, 0x6E, 0x50, 0x46, 0x45, 0x50, 0x71, 0x00, 0x06, 0x6F,
+0x50, 0x21, 0x19, 0x2F, 0x5E, 0x6F, 0x50, 0x88, 0x10, 0x30, 0x7E, 0xFE, 0x7E, 0x30, 0x10, 0x00,
+0x27, 0x01, 0x1F, 0x30, 0x03, 0x6F, 0x5A, 0x2A, 0xA3, 0x21, 0x61, 0xA3, 0x38, 0x29, 0xAD, 0x7C,
+0x61, 0x30, 0x08, 0x6F, 0x5E, 0x61, 0xA3, 0x48, 0x29, 0xAD, 0x82, 0x61, 0x11, 0x88, 0x6F, 0x5E,
+0x88, 0x61, 0xA3, 0x48, 0x29, 0xAD, 0x82, 0x61, 0x10, 0x08, 0x6F, 0x5E, 0x61, 0xA3, 0x38, 0x29,
+0xAD, 0x7C, 0x61, 0x30, 0x88, 0x6F, 0x5E, 0x88, 0x00, 0x3C, 0x7E, 0x7E, 0x7E, 0x7E, 0x3C, 0x00,
+0x3C, 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x3C, 0x00, 0x7F, 0xFE, 0xFE, 0xFE, 0xFE, 0x7F, 0x00,
+0x26, 0x00, 0x70, 0x00, 0x09, 0x6D, 0xA3, 0x71, 0x04, 0x2D, 0xA3, 0xB1, 0x26, 0x00, 0x6F, 0x22,
+0x04, 0x2D, 0xA3, 0xAD, 0x13, 0x26, 0x00, 0x6F, 0x20, 0x06, 0x1F, 0x30, 0x03, 0x81, 0x6E, 0x2A,
+0x70, 0x00, 0x00, 0x61, 0x00, 0x0A, 0x45, 0x45, 0x21, 0x01, 0x29, 0xAD, 0xA2, 0x61, 0xC8, 0x00,
+0x29, 0xAD, 0xD7, 0x21, 0x00, 0x2F, 0x5A, 0x29, 0xAE, 0x55, 0x61, 0x03, 0x44, 0x2F, 0x5F, 0x2F,
+0x5F, 0x6E, 0x2A, 0x70, 0x00, 0x03, 0x61, 0x00, 0x02, 0x03, 0x29, 0xAD, 0xA2, 0x61, 0x01, 0xC1,
+0x2F, 0x5F, 0x2F, 0x5F, 0x6E, 0x50, 0x61, 0x80, 0x08, 0x29, 0xAD, 0xD7, 0x61, 0x00, 0x00, 0x61,
+0x18, 0x00, 0x6F, 0x5E, 0x12, 0x17, 0x2A, 0xA3, 0xAF, 0x42, 0x6F, 0x50, 0x61, 0x84, 0xC3, 0x2F,
+0x5F, 0x2F, 0x5F, 0x26, 0x00, 0x6F, 0x20, 0x01, 0x2F, 0x5B, 0x6E, 0x50, 0x44, 0x70, 0x00, 0x02,
+0x6E, 0x2A, 0x50, 0x6F, 0x50, 0xA9, 0xA3, 0xE8, 0x00, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70,
+0x70, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0x29, 0xAD, 0x7C, 0x61, 0x38, 0x42, 0x6F, 0x5E,
+0x61, 0x3A, 0xC2, 0x6F, 0x5E, 0x6F, 0x50, 0x88, 0xC1, 0x44, 0x6D, 0xA4, 0x43, 0x52, 0x6D, 0xA4,
+0x4F, 0x07, 0x04, 0x2D, 0xA4, 0x6C, 0x1F, 0x30, 0x03, 0x81, 0x44, 0x61, 0x00, 0x0B, 0x01, 0x29,
+0xAE, 0xE8, 0x41, 0x44, 0x29, 0xAD, 0x82, 0xEE, 0x50, 0x21, 0x01, 0x2F, 0x5A, 0x21, 0x42, 0x2F,
+0x5F, 0x45, 0x43, 0x50, 0x71, 0x00, 0x0B, 0x6F, 0x50, 0x61, 0x18, 0x08, 0x6F, 0x5E, 0x70, 0x00,
+0x08, 0x29, 0xAD, 0x82, 0x21, 0x18, 0x2F, 0x5E, 0x41, 0x70, 0x00, 0x04, 0x46, 0x71, 0x00, 0x10,
+0x45, 0x45, 0x61, 0x00, 0x00, 0x61, 0x1C, 0x56, 0x29, 0xA4, 0x7C, 0xC3, 0x6F, 0x50, 0x61, 0x00,
+0x00, 0x61, 0x1C, 0x56, 0x29, 0xA4, 0xB9, 0x6C, 0xA4, 0x4F, 0x21, 0x00, 0x6C, 0xA4, 0x43, 0x0C,
+0x61, 0x1C, 0x56, 0x29, 0xAF, 0xB1, 0x41, 0x50, 0x53, 0x6F, 0x50, 0x21, 0x00, 0x29, 0xB8, 0xF5,
+0x21, 0xC1, 0x2F, 0x5F, 0x61, 0x00, 0x09, 0x21, 0x07, 0x28, 0xAD, 0xEF, 0x45, 0x52, 0x45, 0x29,
+0xAF, 0x8D, 0xC1, 0xC1, 0xC3, 0x52, 0x21, 0x00, 0x41, 0x0C, 0x41, 0x29, 0xAF, 0xB1, 0xC1, 0xC5,
+0x41, 0x45, 0x54, 0x2A, 0xA4, 0xB0, 0x43, 0x45, 0x79, 0x01, 0x54, 0x2A, 0xA4, 0xB0, 0xC5, 0xC5,
+0xD1, 0x41, 0x45, 0x79, 0x01, 0x54, 0x2A, 0xA4, 0xB4, 0x79, 0x01, 0x50, 0x41, 0x51, 0xC2, 0x88,
+0x42, 0xC2, 0xC2, 0x88, 0x50, 0xC2, 0x41, 0x51, 0x88, 0x6D, 0xA4, 0xD7, 0xC1, 0x45, 0x50, 0x6D,
+0xA4, 0xF2, 0x70, 0x80, 0x00, 0x6D, 0xA4, 0xE8, 0x41, 0x28, 0xA4, 0xF9, 0x04, 0x6C, 0xA4, 0xD7,
+0x29, 0xB0, 0x07, 0x26, 0x00, 0xC1, 0x61, 0x00, 0x00, 0x61, 0xA5, 0x02, 0x61, 0xA5, 0x02, 0x61,
+0xAE, 0x37, 0x6E, 0x50, 0x70, 0x80, 0x00, 0x74, 0x00, 0x00, 0x29, 0xB7, 0x70, 0x6E, 0x50, 0x41,
+0x50, 0x75, 0x00, 0x00, 0x29, 0xB7, 0x70, 0x09, 0x52, 0x44, 0x0C, 0x04, 0x2A, 0xA4, 0xCC, 0x02,
+0x42, 0x88, 0x29, 0xB0, 0x07, 0x2F, 0x5F, 0x88, 0xC1, 0xC1, 0x70, 0x00, 0x04, 0x41, 0x71, 0x00,
+0x10, 0x43, 0x61, 0x1C, 0x56, 0x29, 0xA4, 0x7C, 0x51, 0x05, 0x34, 0x80, 0x04, 0x5E, 0x6D, 0xA5,
+0x3A, 0x43, 0x52, 0xE1, 0x00, 0x00, 0x28, 0xA5, 0x36, 0x44, 0x0C, 0x61, 0x1C, 0x56, 0x29, 0xB0,
+0x07, 0x26, 0x00, 0xC1, 0xD0, 0x52, 0x44, 0x0C, 0x43, 0x74, 0x00, 0x00, 0x1E, 0x2A, 0xA5, 0x29,
+0xC2, 0x43, 0x52, 0x51, 0x41, 0x0D, 0x02, 0x88, 0x6D, 0xA5, 0x93, 0x6D, 0xA5, 0xF1, 0x2D, 0xA5,
+0xF7, 0x29, 0xA7, 0xEC, 0x6D, 0xA5, 0x86, 0x6E, 0x50, 0x6D, 0xA5, 0xB7, 0x21, 0x01, 0x2F, 0x5A,
+0x2E, 0x95, 0x29, 0xB8, 0xF5, 0x6E, 0x9E, 0x76, 0x00, 0x00, 0x2A, 0xA5, 0xC7, 0x29, 0xA8, 0x08,
+0x44, 0x6C, 0xAA, 0x6E, 0x50, 0x6E, 0x9E, 0x45, 0x45, 0x54, 0x29, 0xB7, 0x70, 0x46, 0x28, 0xA5,
+0xC0, 0x44, 0x6F, 0x9A, 0x44, 0x76, 0x00, 0x00, 0x2B, 0xA5, 0xF0, 0x61, 0x03, 0x41, 0x2F, 0x5F,
+0x2F, 0x5F, 0x29, 0x00, 0x00, 0x21, 0x08, 0x2F, 0x5F, 0x21, 0xFF, 0x2F, 0x96, 0x6C, 0xA5, 0xF1,
+0x71, 0x00, 0x0B, 0x21, 0x96, 0x61, 0x3C, 0x38, 0xA9, 0xA5, 0xB3, 0x00, 0x00, 0x00, 0x00, 0xA8,
+0x00, 0x00, 0x00, 0x29, 0xAE, 0x7A, 0x61, 0x00, 0x00, 0x6F, 0x50, 0x21, 0x46, 0x2F, 0x5F, 0x52,
+0x57, 0x2A, 0xA5, 0x81, 0x42, 0x42, 0x88, 0x6E, 0x52, 0x6C, 0xAA, 0x6E, 0x44, 0x78, 0x01, 0x50,
+0x50, 0x6F, 0x52, 0x6C, 0xA5, 0xF1, 0xA9, 0xA5, 0xEA, 0x28, 0x20, 0x45, 0x6D, 0x70, 0x74, 0x79,
+0x20, 0x66, 0x6F, 0x6C, 0x64, 0x65, 0x72, 0x20, 0x29, 0x00, 0x61, 0x3C, 0x38, 0x28, 0xAD, 0x63,
+0x61, 0x00, 0x00, 0x61, 0x00, 0x07, 0x21, 0x00, 0x1F, 0x30, 0x03, 0x28, 0xAD, 0xA2, 0x1F, 0x30,
+0x03, 0x2D, 0xA6, 0x1A, 0x6C, 0xAA, 0x70, 0x1C, 0x29, 0xB8, 0xF5, 0x6C, 0xAA, 0x72, 0x6E, 0x52,
+0x50, 0x6F, 0x52, 0x61, 0x00, 0x05, 0x6C, 0xAA, 0x70, 0x21, 0x00, 0x29, 0xAE, 0xE8, 0x6C, 0xAA,
+0x70, 0x79, 0x01, 0x53, 0x6E, 0x52, 0x50, 0x6F, 0x52, 0x61, 0x70, 0x70, 0x29, 0xAD, 0xD7, 0x21,
+0x01, 0x2F, 0x5A, 0x21, 0x18, 0x2F, 0x5E, 0x88, 0x6D, 0xA6, 0x91, 0x6D, 0xA6, 0x67, 0x44, 0x53,
+0x79, 0x01, 0x47, 0x27, 0x00, 0x1F, 0x30, 0x03, 0x07, 0x2A, 0xA6, 0x4D, 0x06, 0x81, 0x81, 0x6E,
+0x50, 0x46, 0x21, 0x01, 0x2F, 0x5A, 0x61, 0x01, 0x41, 0x2F, 0x5F, 0x2F, 0x5F, 0x44, 0x61, 0x00,
+0x0B, 0x01, 0x29, 0xAD, 0xA2, 0x44, 0x61, 0x00, 0x00, 0x61, 0x45, 0x86, 0x21, 0x42, 0x2F, 0x5F,
+0x29, 0xAD, 0x63, 0x21, 0xC2, 0x2F, 0x5F, 0x45, 0x45, 0x50, 0x6F, 0x50, 0x61, 0x00, 0x0B, 0x21,
+0x01, 0x29, 0xAD, 0xEF, 0x21, 0x01, 0x2F, 0x5F, 0x44, 0x61, 0x00, 0x0B, 0x01, 0x29, 0xAD, 0xA2,
+0x61, 0x00, 0x00, 0x61, 0x45, 0x86, 0x21, 0x42, 0x2F, 0x5F, 0x29, 0xAD, 0x63, 0x21, 0xC3, 0x2F,
+0x5F, 0x6F, 0x50, 0x61, 0x00, 0x0D, 0x21, 0x01, 0x28, 0xAD, 0x00, 0xC1, 0x07, 0x1F, 0x30, 0x03,
+0x81, 0x44, 0x61, 0x00, 0x0B, 0x01, 0x29, 0xAE, 0xE8, 0x44, 0x41, 0x21, 0x01, 0x2F, 0x5A, 0x21,
+0x42, 0x2F, 0x5F, 0x29, 0xB7, 0xAF, 0x61, 0x1C, 0x56, 0x29, 0xAD, 0x63, 0x61, 0xA6, 0xEA, 0x29,
+0xAD, 0x82, 0xEE, 0x50, 0x21, 0x41, 0x2F, 0x5F, 0x21, 0x18, 0x2F, 0x5E, 0x43, 0x50, 0x71, 0x00,
+0x08, 0x6F, 0x50, 0x21, 0x19, 0x2F, 0x5E, 0xEF, 0x50, 0x88, 0x04, 0x0C, 0x1C, 0x0C, 0x04, 0x00,
+0x00, 0x00, 0x29, 0xA6, 0xF7, 0x02, 0x88, 0x61, 0x00, 0x01, 0x44, 0x78, 0x07, 0x5D, 0x44, 0x79,
+0x09, 0x5D, 0x44, 0x78, 0x08, 0x5D, 0x44, 0x6D, 0xA6, 0xF8, 0x88, 0x44, 0x78, 0x01, 0x29, 0xA7,
+0x14, 0x46, 0x51, 0x88, 0x81, 0x21, 0x00, 0x28, 0xA7, 0x23, 0xB1, 0x10, 0x29, 0xA6, 0xF7, 0x29,
+0xB9, 0x23, 0x10, 0x03, 0x35, 0x0F, 0x2A, 0xA7, 0x1A, 0x61, 0xFF, 0xFF, 0x21, 0x10, 0x01, 0x11,
+0x59, 0x29, 0xA6, 0xF7, 0x5E, 0x29, 0xB9, 0x23, 0x10, 0x88, 0x6C, 0xA6, 0xF8, 0x6E, 0x36, 0x5D,
+0x7C, 0x00, 0x01, 0x44, 0x6D, 0xA6, 0xF8, 0x6D, 0xA7, 0x4F, 0x88, 0x61, 0x00, 0x00, 0x70, 0x00,
+0x01, 0x6D, 0xA6, 0xF8, 0x88, 0x21, 0x00, 0x2F, 0x90, 0x21, 0x91, 0x28, 0xAF, 0x7C, 0x44, 0x29,
+0xA7, 0x55, 0x21, 0x90, 0x28, 0xAF, 0x7C, 0x21, 0xFF, 0x28, 0xA7, 0x6E, 0x21, 0x01, 0x04, 0x35,
+0x7F, 0x06, 0x6C, 0xAA, 0x68, 0x78, 0x01, 0x70, 0xC0, 0x8D, 0x44, 0x4C, 0x47, 0x50, 0x05, 0x34,
+0x80, 0x04, 0x5E, 0x6E, 0x9E, 0x53, 0x05, 0x34, 0x80, 0x04, 0x5E, 0x45, 0x45, 0x54, 0x29, 0xB7,
+0x70, 0x46, 0x4D, 0x29, 0xA9, 0xA0, 0x28, 0xA8, 0x4C, 0x6D, 0xA7, 0xCA, 0x81, 0x61, 0x00, 0x01,
+0x61, 0xFF, 0xFF, 0x01, 0x34, 0x80, 0x29, 0xB7, 0x70, 0x6D, 0xA7, 0xD3, 0x6C, 0xAA, 0x68, 0x78,
+0x01, 0x70, 0xC0, 0x8D, 0x4C, 0x44, 0x6D, 0xAA, 0x6C, 0x28, 0xA7, 0xD2, 0x44, 0x6C, 0xAA, 0x68,
+0x78, 0x01, 0x70, 0xC0, 0x8D, 0x4D, 0x29, 0xA9, 0x80, 0x29, 0x00, 0x00, 0x29, 0xA9, 0x96, 0x2A,
+0xA7, 0xE0, 0x70, 0x00, 0x00, 0x44, 0x6E, 0x9E, 0x54, 0x2A, 0xA7, 0xBC, 0x42, 0x6C, 0xAA, 0x6C,
+0x6C, 0xAA, 0x68, 0x78, 0x01, 0x70, 0xC0, 0x8D, 0x4D, 0x28, 0xA8, 0x4C, 0x6C, 0xAA, 0x68, 0x78,
+0x01, 0x70, 0xC0, 0x8D, 0x4C, 0x88, 0x6C, 0xAA, 0x68, 0x78, 0x01, 0x70, 0xC0, 0x8D, 0x4C, 0x6F,
+0x9A, 0x88, 0x29, 0xA7, 0xF6, 0x2E, 0x97, 0x88, 0x6C, 0xAA, 0x68, 0x78, 0x01, 0x70, 0xC1, 0x0D,
+0x4C, 0x88, 0xC1, 0x6C, 0xAA, 0x68, 0x78, 0x01, 0x70, 0xC1, 0x0D, 0x6E, 0x9E, 0x6C, 0xAA, 0x6E,
+0x51, 0x05, 0x34, 0x80, 0x04, 0x5E, 0x41, 0x29, 0xB8, 0xC0, 0x28, 0xA8, 0xE5, 0x81, 0x6C, 0xAA,
+0x68, 0x78, 0x01, 0x70, 0xC1, 0x0D, 0x6E, 0x9E, 0x6C, 0xAA, 0x6E, 0x51, 0x05, 0x34, 0x80, 0x04,
+0x5E, 0x01, 0x04, 0x35, 0x7F, 0x06, 0x29, 0xB8, 0xBA, 0x28, 0xA8, 0xE5, 0x29, 0xA7, 0xEC, 0x44,
+0x29, 0xA8, 0x08, 0x51, 0x6C, 0xAA, 0x6E, 0x44, 0x79, 0x02, 0xC3, 0x51, 0x53, 0x45, 0x45, 0x54,
+0x29, 0xB7, 0x70, 0x41, 0x45, 0x45, 0x55, 0x29, 0xB7, 0x70, 0x51, 0x05, 0x34, 0x80, 0x04, 0x5E,
+0x28, 0xA8, 0x12, 0x6C, 0xAA, 0x6E, 0x6F, 0x20, 0x6C, 0xAA, 0x76, 0x6F, 0x22, 0x6E, 0x2A, 0xC3,
+0x6F, 0x22, 0x6E, 0x2A, 0x6F, 0x20, 0x6E, 0x9E, 0x6F, 0x22, 0x6E, 0x2C, 0x3C, 0x01, 0x61, 0x00,
+0x07, 0x45, 0x45, 0x55, 0x29, 0xB7, 0x70, 0x6E, 0x9E, 0x6C, 0xAA, 0x6E, 0x55, 0x2E, 0x95, 0x1E,
+0x04, 0x5E, 0xC3, 0x6D, 0xAA, 0x70, 0xD1, 0xED, 0xAA, 0x74, 0x88, 0x05, 0x34, 0x80, 0x04, 0x5E,
+0x6C, 0xAA, 0x74, 0x45, 0x45, 0x54, 0x29, 0xB7, 0x70, 0x6D, 0xAA, 0x72, 0x6C, 0xAA, 0x70, 0x1C,
+0x29, 0xB8, 0xF5, 0x6E, 0x9E, 0x6C, 0xAA, 0x6E, 0x51, 0x6F, 0x20, 0x6C, 0xAA, 0x72, 0x6F, 0x22,
+0x6E, 0x2A, 0x6F, 0x20, 0x6C, 0xAA, 0x74, 0x6F, 0x22, 0x6E, 0x2C, 0x6C, 0xAA, 0x68, 0x78, 0x01,
+0x70, 0xC1, 0x0D, 0x4D, 0x88, 0x29, 0xA8, 0x73, 0x6C, 0xAA, 0x70, 0x1C, 0x29, 0xB8, 0xF5, 0x6C,
+0xAA, 0x74, 0x6F, 0x20, 0x29, 0xA8, 0x08, 0x6F, 0x22, 0x6E, 0x2A, 0x6F, 0x20, 0x6E, 0x9E, 0x6C,
+0xAA, 0x6E, 0x51, 0x6F, 0x22, 0x6E, 0x2C, 0x6D, 0xAA, 0x72, 0x88, 0x21, 0x00, 0x2F, 0x95, 0x2E,
+0x91, 0x1F, 0x29, 0xB8, 0xF5, 0x2C, 0xAA, 0x69, 0x13, 0x04, 0x34, 0x80, 0x1E, 0x2D, 0xAA, 0x69,
+0x28, 0xA8, 0xE5, 0x2E, 0x95, 0x6E, 0x9E, 0x1C, 0x1E, 0x2C, 0xAA, 0x69, 0x2C, 0xAA, 0x6A, 0x14,
+0x1E, 0x29, 0xB8, 0xF5, 0x6C, 0xAA, 0x68, 0x78, 0x01, 0x70, 0xC0, 0x8D, 0x4C, 0x6F, 0x9A, 0x21,
+0x00, 0x2F, 0x97, 0x2E, 0x91, 0x1F, 0x29, 0xB8, 0xF5, 0x2C, 0xAA, 0x69, 0x12, 0x2D, 0xAA, 0x69,
+0x28, 0xA8, 0xE5, 0x21, 0x00, 0x2F, 0x94, 0x21, 0x94, 0x61, 0xC1, 0x8D, 0x29, 0xAF, 0xF5, 0x21,
+0x00, 0x2F, 0x95, 0x2C, 0xAA, 0x69, 0x04, 0x2D, 0xAA, 0x6B, 0x13, 0x04, 0x34, 0x80, 0x1E, 0x2D,
+0xAA, 0x69, 0x88, 0x61, 0xC1, 0x8D, 0x29, 0xAA, 0x89, 0x2C, 0xAA, 0x6B, 0x2D, 0xAA, 0x69, 0x88,
+0x6C, 0xAA, 0x68, 0x78, 0x01, 0x70, 0xC0, 0x8D, 0x4C, 0x6F, 0x9A, 0x21, 0x00, 0x2F, 0x97, 0x2E,
+0x91, 0x1F, 0x2D, 0xA9, 0x97, 0x88, 0x21, 0x00, 0x29, 0xB8, 0xF5, 0x21, 0x00, 0x2F, 0x95, 0x88,
+0x6C, 0xAA, 0x68, 0x52, 0x78, 0x01, 0x44, 0x70, 0xC0, 0x8D, 0x61, 0xC1, 0x0D, 0x29, 0xB7, 0x22,
+0x70, 0xC1, 0x0D, 0x61, 0xC1, 0x8D, 0x28, 0xB7, 0x22, 0x61, 0xC0, 0x8D, 0x61, 0xC1, 0x8D, 0x29,
+0xB7, 0x22, 0x24, 0x00, 0x2F, 0x90, 0x2F, 0x95, 0x29, 0xAA, 0x78, 0x2D, 0xAA, 0x69, 0x24, 0x00,
+0x2F, 0x90, 0x2F, 0x95, 0x29, 0xA9, 0xE0, 0x24, 0x00, 0x2F, 0x90, 0x2F, 0x95, 0x28, 0xA8, 0x73,
+0x2C, 0xAA, 0x69, 0x28, 0xAA, 0x14, 0x21, 0xFF, 0x2F, 0x94, 0x21, 0x94, 0x61, 0xC1, 0x8D, 0x29,
+0xAF, 0xF5, 0x13, 0x21, 0x00, 0x2F, 0x95, 0x6E, 0x9E, 0x28, 0xAA, 0x0F, 0x53, 0x44, 0x6F, 0x9A,
+0x21, 0xFF, 0x2F, 0x96, 0x21, 0x96, 0x61, 0xC1, 0x8D, 0x29, 0xAF, 0xDA, 0x2A, 0xAA, 0x1A, 0x44,
+0x6A, 0xA9, 0xFC, 0x42, 0x04, 0x2A, 0xA9, 0xE6, 0x02, 0x88, 0xC1, 0x25, 0x00, 0x78, 0x01, 0x43,
+0x46, 0xC3, 0x70, 0xC0, 0x8D, 0x4D, 0x41, 0x41, 0x6C, 0xAA, 0x6E, 0x79, 0x01, 0x51, 0x05, 0x34,
+0x80, 0x04, 0x5E, 0x6E, 0x9E, 0x6C, 0xAA, 0x6F, 0x51, 0x45, 0x45, 0x54, 0x29, 0xB7, 0x70, 0x46,
+0x70, 0xC1, 0x0D, 0x4D, 0x28, 0xAA, 0x14, 0xC1, 0x6C, 0xAA, 0x68, 0x78, 0x01, 0x70, 0xC0, 0x8D,
+0x6E, 0x9E, 0x53, 0x61, 0x00, 0x07, 0x41, 0x29, 0xA8, 0x08, 0x44, 0x78, 0x03, 0x46, 0x51, 0x51,
+0x29, 0xB8, 0xD5, 0x04, 0x2B, 0xA9, 0xA0, 0x88, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x14,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x21, 0x00, 0x28, 0xAA, 0x7E, 0x12, 0x21, 0x00,
+0x2F, 0x95, 0x2E, 0x91, 0x1F, 0x2A, 0xAA, 0x7D, 0x88, 0x21, 0x00, 0x2F, 0x90, 0x21, 0x90, 0x28,
+0xAF, 0x7C, 0x61, 0xBD, 0x8D, 0x61, 0xBF, 0x8D, 0x28, 0xB7, 0x22, 0x24, 0x00, 0x2F, 0x90, 0x2F,
+0x95, 0x29, 0xAA, 0x92, 0x21, 0x00, 0x2F, 0x94, 0x21, 0x94, 0x72, 0xBD, 0x8D, 0x29, 0xAF, 0xF5,
+0x72, 0xBE, 0x8D, 0x29, 0xB6, 0xE7, 0x28, 0xAA, 0xDD, 0x29, 0xAA, 0x92, 0x44, 0x21, 0x2F, 0x29,
+0xAF, 0x73, 0x44, 0x6A, 0xAA, 0xC9, 0x42, 0x42, 0x88, 0x45, 0x45, 0x46, 0x51, 0xC1, 0x46, 0x72,
+0xBD, 0x8D, 0x41, 0x29, 0xB6, 0xB1, 0x52, 0x72, 0xBE, 0x8D, 0x29, 0xB6, 0xE7, 0x61, 0xBD, 0x8D,
+0x29, 0xAC, 0x0D, 0x61, 0xBE, 0x8D, 0x29, 0xAC, 0x0D, 0x28, 0xAB, 0x04, 0x61, 0xBD, 0x8D, 0x28,
+0xAC, 0x16, 0x61, 0xBE, 0x8D, 0x28, 0xAC, 0x16, 0x61, 0xBD, 0x8D, 0x28, 0xAB, 0x01, 0x61, 0xBE,
+0x8D, 0x29, 0xAB, 0xAC, 0x72, 0xBD, 0x8D, 0x44, 0x21, 0x90, 0x29, 0xAF, 0x7C, 0x0C, 0x36, 0x00,
+0x2E, 0x90, 0x1C, 0x2D, 0xAB, 0x78, 0x29, 0xAB, 0x2C, 0x61, 0xBF, 0x8D, 0x21, 0x90, 0x29, 0xAF,
+0x7C, 0x2E, 0x90, 0x2D, 0xAB, 0x79, 0x2E, 0x95, 0x2D, 0xAB, 0x7A, 0x88, 0x61, 0xBF, 0x8D, 0x61,
+0xC0, 0x8D, 0x29, 0xB7, 0x22, 0x21, 0x00, 0x2C, 0xBD, 0x8D, 0x21, 0x00, 0x2C, 0xBE, 0x8D, 0x50,
+0x75, 0x00, 0xFD, 0x04, 0x2D, 0xAB, 0x7B, 0x29, 0xB8, 0xF3, 0x61, 0xBF, 0x8D, 0x72, 0xBD, 0x8D,
+0x0C, 0x36, 0x2F, 0x1F, 0x2B, 0xAB, 0x73, 0x72, 0xBD, 0x8D, 0x29, 0xB6, 0xF2, 0x44, 0x53, 0x0C,
+0x36, 0x2F, 0x1F, 0x2B, 0xAB, 0x73, 0x72, 0xBE, 0x8D, 0x29, 0xB6, 0xF2, 0x21, 0x00, 0x29, 0xB7,
+0x07, 0x42, 0x88, 0x21, 0x2F, 0x28, 0xB7, 0x07, 0x00, 0x00, 0x00, 0x00, 0x70, 0x8F, 0x81, 0xBF,
+0xA0, 0xC1, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x3E, 0x25, 0x27, 0x21,
+0x21, 0x21, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x2A, 0x1C, 0x77,
+0x1C, 0x2A, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x35, 0x1F,
+0x05, 0x34, 0x7F, 0x1E, 0x2A, 0xAB, 0xBE, 0x36, 0x08, 0x2A, 0xAB, 0xED, 0x42, 0x88, 0x81, 0x44,
+0x52, 0x29, 0xAF, 0x26, 0x74, 0x00, 0xFE, 0x2A, 0xAB, 0xCD, 0x82, 0x42, 0x88, 0x44, 0x0C, 0x26,
+0x00, 0x45, 0x52, 0x50, 0x44, 0x52, 0x45, 0x29, 0xAF, 0x26, 0x52, 0x29, 0xB6, 0xCA, 0x44, 0x0C,
+0x26, 0x00, 0x52, 0x45, 0x50, 0xC1, 0x8D, 0xC3, 0x8C, 0x92, 0xC1, 0x8D, 0x88, 0x44, 0x0C, 0x35,
+0x00, 0x2A, 0xAB, 0xF6, 0x42, 0x88, 0x44, 0x0C, 0x26, 0x00, 0x45, 0x52, 0x50, 0x44, 0x53, 0x45,
+0x29, 0xAF, 0x26, 0x52, 0x29, 0xB6, 0xB1, 0xC3, 0x8C, 0x93, 0xC1, 0x8D, 0x88, 0xC3, 0x52, 0x29,
+0xAF, 0x26, 0x41, 0x0D, 0x02, 0x88, 0xC1, 0x04, 0x35, 0x7F, 0x06, 0x43, 0x0C, 0x26, 0x00, 0x50,
+0x05, 0x34, 0x80, 0x04, 0x5E, 0x43, 0x52, 0x29, 0xAF, 0x26, 0x45, 0x45, 0x54, 0x29, 0xB7, 0x70,
+0x41, 0x0D, 0x02, 0x88, 0xEE, 0x50, 0xEE, 0x52, 0x61, 0x38, 0xC8, 0x6F, 0x5E, 0x6E, 0x52, 0x50,
+0x6F, 0x52, 0x61, 0x3A, 0x88, 0x6F, 0x5E, 0x6E, 0x50, 0x50, 0x6F, 0x50, 0x21, 0x3B, 0x2F, 0x5E,
+0xEF, 0x52, 0x21, 0x39, 0x2F, 0x5E, 0xEF, 0x50, 0x88, 0x61, 0xAD, 0x7C, 0x61, 0x00, 0x10, 0x21,
+0x38, 0x28, 0xAC, 0x6C, 0x61, 0xAD, 0x82, 0x61, 0x00, 0x08, 0x21, 0x18, 0xEE, 0x52, 0xEE, 0x50,
+0x2D, 0xAC, 0x88, 0x6D, 0xAC, 0x8D, 0x6D, 0xAC, 0x85, 0x2D, 0xAC, 0x80, 0x2D, 0xAC, 0x82, 0xA1,
+0x00, 0xA1, 0x00, 0x44, 0x29, 0x00, 0x00, 0x61, 0x00, 0x08, 0x6F, 0x5E, 0x70, 0x00, 0x00, 0x93,
+0x84, 0xAA, 0xAC, 0x83, 0xC5, 0xEF, 0x50, 0x82, 0x21, 0x48, 0x2F, 0x5F, 0x93, 0x84, 0xAA, 0xAC,
+0x81, 0x82, 0xC2, 0xEF, 0x52, 0x42, 0x88, 0xEE, 0x50, 0x29, 0xAC, 0xBA, 0xEF, 0x50, 0x88, 0x45,
+0x45, 0x29, 0xAF, 0x8D, 0x6E, 0x50, 0x46, 0x51, 0x6F, 0x50, 0x61, 0xAE, 0x37, 0x6D, 0xAC, 0xCA,
+0x6D, 0xAC, 0xC7, 0x28, 0xAC, 0xCD, 0x61, 0x00, 0x00, 0x29, 0x00, 0x00, 0x52, 0x44, 0x0C, 0x04,
+0x2A, 0xAC, 0xC6, 0x02, 0x42, 0x88, 0x81, 0x53, 0x5F, 0x52, 0x21, 0x50, 0x28, 0xAC, 0xF3, 0x81,
+0x53, 0x21, 0x50, 0x28, 0xAC, 0xF3, 0x81, 0x53, 0x5F, 0x52, 0x21, 0x52, 0x28, 0xAC, 0xF3, 0x81,
+0x53, 0x21, 0x52, 0x84, 0xAF, 0x5E, 0x83, 0x4E, 0x50, 0x01, 0x4F, 0xBC, 0x40, 0xAF, 0x5E, 0x88,
+0x81, 0x71, 0x00, 0x02, 0x46, 0x71, 0x00, 0x02, 0x45, 0x45, 0x21, 0x01, 0x2F, 0x5F, 0x03, 0x29,
+0xAC, 0xDF, 0x61, 0x01, 0x41, 0x2F, 0x5F, 0x2F, 0x5F, 0x03, 0x29, 0xAC, 0xEF, 0x61, 0x41, 0x81,
+0x2F, 0x5F, 0x2F, 0x5F, 0x03, 0x29, 0xAC, 0xD6, 0x61, 0x81, 0xC1, 0x2F, 0x5F, 0x2F, 0x5F, 0x01,
+0x29, 0xAC, 0xE6, 0x21, 0xC1, 0x2F, 0x5F, 0x88, 0x04, 0x2F, 0x5E, 0x3C, 0x40, 0x2D, 0xAD, 0x5F,
+0xEE, 0x52, 0xC1, 0xC5, 0xD3, 0xD0, 0xEF, 0x52, 0x29, 0xAD, 0x5E, 0xEE, 0x50, 0xC1, 0xC5, 0xD3,
+0xD0, 0xEF, 0x50, 0x29, 0xAD, 0x5E, 0xC6, 0xEF, 0x52, 0x29, 0xAD, 0x5E, 0xEF, 0x50, 0x21, 0x00,
+0x2F, 0x5E, 0x88, 0x47, 0xEE, 0x50, 0x79, 0x01, 0xC1, 0xC5, 0xD0, 0x45, 0x45, 0x29, 0xAF, 0x8D,
+0x79, 0x01, 0xC1, 0xD1, 0xEF, 0x50, 0x29, 0xAC, 0xA7, 0xEF, 0x50, 0x88, 0x61, 0x00, 0x10, 0x28,
+0xAD, 0x85, 0x61, 0x00, 0x08, 0x45, 0x50, 0x46, 0x44, 0x4C, 0x6F, 0x5C, 0x70, 0x00, 0x02, 0x57,
+0x2A, 0xAD, 0x88, 0x42, 0x42, 0x88, 0x21, 0x70, 0x2D, 0xAD, 0xBF, 0x2F, 0x5A, 0x21, 0x00, 0x28,
+0xAD, 0xA7, 0x21, 0x60, 0x2D, 0xAD, 0xBF, 0x04, 0x2F, 0x5E, 0xEE, 0x52, 0xEE, 0x50, 0x81, 0x6E,
+0x52, 0x50, 0x53, 0x6F, 0x52, 0x6E, 0x50, 0x50, 0x53, 0x6F, 0x50, 0x01, 0x3E, 0x0F, 0x3C, 0x00,
+0x2F, 0x5E, 0xEF, 0x50, 0xEF, 0x52, 0x88, 0x46, 0x29, 0xAD, 0xD7, 0x28, 0xAD, 0xD7, 0x44, 0x4C,
+0x29, 0xAD, 0xD7, 0x70, 0x00, 0x02, 0x4C, 0x05, 0x3E, 0xF0, 0x07, 0x38, 0x04, 0x6F, 0x5C, 0x04,
+0x3E, 0xF0, 0x06, 0x38, 0x04, 0x6F, 0x5C, 0x64, 0x00, 0x00, 0x6F, 0x5C, 0x6F, 0x5C, 0x88, 0x04,
+0x2F, 0x5E, 0x81, 0x6E, 0x52, 0x46, 0x45, 0x53, 0x50, 0x6F, 0x52, 0x01, 0x3C, 0x40, 0x2F, 0x5E,
+0x6F, 0x52, 0x88, 0x45, 0x45, 0x61, 0x00, 0x08, 0x29, 0xB6, 0xB1, 0x45, 0x51, 0x6D, 0xAE, 0x2C,
+0x52, 0x44, 0x70, 0x00, 0x06, 0x46, 0xC3, 0xD3, 0x8C, 0xC3, 0xD2, 0x8C, 0x44, 0x0C, 0x04, 0x39,
+0x01, 0x05, 0x38, 0x01, 0x41, 0x5E, 0x1E, 0x1F, 0x1E, 0x81, 0xC3, 0xF0, 0x00, 0x00, 0x8D, 0x52,
+0x57, 0x2A, 0xAE, 0x16, 0x42, 0x42, 0x88, 0x07, 0x31, 0x20, 0x21, 0x5F, 0x44, 0x14, 0x29, 0xB7,
+0x76, 0x26, 0x00, 0x45, 0x45, 0x78, 0x03, 0x50, 0x70, 0x00, 0x60, 0x29, 0xAD, 0x82, 0x50, 0x0C,
+0x26, 0x18, 0x6F, 0x5E, 0x88, 0xEE, 0x50, 0xEE, 0x52, 0x61, 0x18, 0xC8, 0x6F, 0x5E, 0x6E, 0x52,
+0x50, 0x6F, 0x52, 0x61, 0x1A, 0x88, 0x6F, 0x5E, 0x6E, 0x50, 0x50, 0x6F, 0x50, 0x21, 0x1B, 0x2F,
+0x5E, 0xEF, 0x52, 0x21, 0x19, 0x2F, 0x5E, 0xEF, 0x50, 0x88, 0x6D, 0xAE, 0xB2, 0x6D, 0xAE, 0xA1,
+0x2D, 0xAE, 0xA7, 0x71, 0x00, 0x06, 0x6D, 0xAE, 0x9A, 0x24, 0x00, 0x28, 0xAE, 0xA6, 0x03, 0x6C,
+0xAE, 0xA1, 0x29, 0xB0, 0x07, 0x26, 0x00, 0x50, 0x44, 0x75, 0x00, 0x00, 0x2A, 0xAE, 0xAF, 0x01,
+0x61, 0x00, 0x00, 0x29, 0xAE, 0x37, 0xAE, 0x00, 0x84, 0xAA, 0xAE, 0x8E, 0x42, 0x82, 0x88, 0x42,
+0x82, 0x61, 0x00, 0x00, 0x29, 0xAD, 0x82, 0x21, 0x18, 0x2F, 0x5E, 0x88, 0x64, 0x00, 0x00, 0x6F,
+0x50, 0x6F, 0x52, 0x21, 0x00, 0x2F, 0x5E, 0x6E, 0x54, 0x6F, 0x50, 0x6E, 0x56, 0x6F, 0x52, 0x21,
+0x70, 0x2F, 0x5E, 0x88, 0x04, 0x2F, 0x5E, 0x81, 0x6E, 0x50, 0x46, 0x45, 0x53, 0x50, 0x6F, 0x50,
+0x01, 0x3C, 0x40, 0x2F, 0x5E, 0x6F, 0x50, 0x88, 0xEE, 0x50, 0x81, 0x46, 0x71, 0x00, 0x02, 0x46,
+0x71, 0x00, 0x02, 0x21, 0x41, 0x2F, 0x5F, 0x44, 0x03, 0x29, 0xAC, 0xEF, 0x45, 0x52, 0x6E, 0x50,
+0x50, 0x6F, 0x50, 0x44, 0x03, 0x29, 0xAC, 0xE6, 0x21, 0xC1, 0x2F, 0x5F, 0x70, 0x00, 0x02, 0x01,
+0xD2, 0xEF, 0x50, 0x29, 0xAD, 0xA2, 0x21, 0x81, 0x2F, 0x5F, 0x88, 0x61, 0x80, 0x00, 0x29, 0xAD,
+0xD7, 0x2F, 0x5A, 0x28, 0xAE, 0x55, 0x44, 0x28, 0xAF, 0x2B, 0x52, 0x44, 0x0C, 0x2A, 0xAF, 0x2A,
+0x46, 0x51, 0x88, 0xC1, 0x07, 0x2D, 0xAF, 0x3C, 0x28, 0xAF, 0x48, 0x2E, 0x00, 0x04, 0x43, 0x0D,
+0x2A, 0xAF, 0x46, 0x42, 0xC2, 0x88, 0xD2, 0x53, 0x44, 0x6A, 0xAF, 0x3B, 0x42, 0xC2, 0x88, 0x6D,
+0xAF, 0x64, 0x2D, 0xAF, 0x6B, 0x24, 0x00, 0x28, 0xAF, 0x68, 0x31, 0x20, 0x21, 0x5F, 0x44, 0x14,
+0x29, 0xB7, 0x76, 0x70, 0x00, 0x00, 0x0C, 0x50, 0x24, 0x00, 0x2E, 0x00, 0x04, 0x2A, 0xAF, 0x5A,
+0x02, 0x42, 0x88, 0x81, 0x44, 0x29, 0xAF, 0x26, 0x01, 0x28, 0xB7, 0x55, 0x2D, 0xAF, 0x87, 0x28,
+0xAF, 0x83, 0x52, 0x44, 0x0C, 0x04, 0x2F, 0x00, 0x2A, 0xAF, 0x82, 0x42, 0x88, 0x6D, 0xAF, 0xA0,
+0xC1, 0x24, 0x00, 0x28, 0xAF, 0xA5, 0x31, 0x20, 0x21, 0x5F, 0x44, 0x14, 0x29, 0xB7, 0x76, 0x70,
+0x00, 0x00, 0x0C, 0x50, 0xD2, 0x24, 0x00, 0x43, 0x0C, 0x04, 0x2A, 0xAF, 0x96, 0xC2, 0x02, 0x42,
+0x88, 0x6D, 0xAF, 0xCC, 0x45, 0x29, 0xAF, 0x26, 0x45, 0x45, 0x54, 0x29, 0xB7, 0x70, 0x45, 0x50,
+0xC1, 0xC1, 0x24, 0x00, 0x28, 0xAF, 0xD3, 0x21, 0x00, 0x43, 0x0C, 0x61, 0x00, 0x00, 0x29, 0xB0,
+0x07, 0x50, 0xD2, 0xD7, 0xAA, 0xAF, 0xC7, 0xC2, 0xC2, 0x88, 0x07, 0x2D, 0xAF, 0xE1, 0x44, 0x0C,
+0x2E, 0x00, 0x17, 0x2A, 0xAF, 0xF0, 0x81, 0x02, 0x52, 0xAA, 0xAF, 0xDE, 0x42, 0x21, 0xFF, 0x88,
+0x42, 0x42, 0x21, 0x00, 0x88, 0x07, 0x2D, 0xAF, 0xFE, 0x28, 0xAF, 0xFD, 0x52, 0x2E, 0x00, 0x04,
+0x45, 0x0D, 0x2A, 0xAF, 0xFC, 0x42, 0x88, 0x07, 0x31, 0x20, 0x21, 0x5F, 0x44, 0x14, 0x29, 0xB7,
+0x76, 0x26, 0x00, 0x50, 0x0C, 0x88, 0x6C, 0xBC, 0x49, 0x09, 0x21, 0xA0, 0x2F, 0x5E, 0x6C, 0xBB,
+0xFF, 0x09, 0x2C, 0xBA, 0x4F, 0x2C, 0xBA, 0x4E, 0x44, 0x15, 0x29, 0xB7, 0x76, 0x21, 0x00, 0x28,
+0xB0, 0x37, 0x04, 0x29, 0xB0, 0x3D, 0x12, 0x17, 0x2A, 0xB0, 0x32, 0x42, 0x88, 0x04, 0x1F, 0x2A,
+0xB0, 0x44, 0x02, 0x88, 0x25, 0x00, 0x78, 0x03, 0x70, 0xBC, 0x8D, 0x44, 0x4C, 0x6F, 0x50, 0x70,
+0x00, 0x02, 0x4C, 0x6F, 0x52, 0x04, 0x2C, 0xBA, 0x4D, 0x05, 0x16, 0x05, 0x2C, 0xBA, 0x4B, 0x16,
+0x07, 0x2C, 0xBA, 0x4E, 0x14, 0x29, 0xB7, 0x76, 0x27, 0x00, 0x78, 0x01, 0x70, 0xBA, 0x6F, 0x4C,
+0x08, 0x61, 0xBA, 0xAF, 0x28, 0xB0, 0x80, 0x61, 0xBC, 0x01, 0x28, 0xB0, 0x80, 0x61, 0xBB, 0xBB,
+0x07, 0x83, 0x26, 0x00, 0x38, 0x01, 0x50, 0x4C, 0x09, 0x01, 0x28, 0xB0, 0x3D, 0x61, 0xBA, 0xF3,
+0x2C, 0xBA, 0x4B, 0x1F, 0x2A, 0xB0, 0x9A, 0x42, 0x02, 0x88, 0x21, 0x00, 0x2C, 0xBA, 0x4B, 0x38,
+0x01, 0x50, 0x4C, 0x08, 0x21, 0xFF, 0x2B, 0xB1, 0x0B, 0x24, 0xFF, 0x6D, 0xBA, 0x4A, 0x21, 0xA0,
+0x2F, 0x5E, 0x61, 0xBC, 0x8D, 0x61, 0xBD, 0x8D, 0x61, 0xFF, 0xFF, 0x29, 0xB7, 0x2E, 0x61, 0xBC,
+0x4D, 0x61, 0xBC, 0x8D, 0x61, 0xB1, 0xDF, 0x29, 0xB7, 0x2E, 0x61, 0xBA, 0x6F, 0x61, 0xBB, 0xFF,
+0x61, 0xB6, 0x97, 0x29, 0xB7, 0x2E, 0x61, 0xBB, 0xFF, 0x61, 0xBC, 0x4D, 0x61, 0xB6, 0x98, 0x29,
+0xB7, 0x2E, 0x61, 0xB0, 0xFB, 0x6D, 0xBA, 0xEF, 0x61, 0xB1, 0x01, 0x6D, 0xBA, 0xF1, 0x61, 0xB1,
+0xC9, 0x6D, 0xBC, 0x45, 0x61, 0xB1, 0xC4, 0x6D, 0xBC, 0x47, 0x88, 0x2C, 0xBA, 0x4D, 0x28, 0xB0,
+0x71, 0x2C, 0xBA, 0x4D, 0x10, 0x2D, 0xBA, 0x4D, 0x28, 0xB1, 0x7A, 0x6E, 0x40, 0x6D, 0xBA, 0x5F,
+0x6E, 0x42, 0x6D, 0xBA, 0x63, 0x6E, 0x54, 0x6D, 0xBA, 0x5B, 0x6E, 0x56, 0x6D, 0xBA, 0x5D, 0x61,
+0x00, 0x40, 0x6F, 0x3A, 0x21, 0x00, 0x2D, 0xB0, 0xA5, 0x2E, 0x4C, 0x2D, 0xBA, 0x6A, 0x2E, 0x49,
+0x2D, 0xBA, 0x68, 0x88, 0x29, 0xB0, 0xA4, 0x05, 0x2D, 0xBA, 0x4C, 0x6D, 0xBA, 0x4D, 0x44, 0x6D,
+0xBC, 0x49, 0x09, 0x29, 0xB0, 0x1A, 0x2E, 0x02, 0x04, 0x36, 0x05, 0x2B, 0xB1, 0xF1, 0x04, 0x36,
+0x04, 0x2B, 0xB2, 0xA9, 0x36, 0x03, 0x2B, 0xB2, 0x0F, 0x29, 0xB1, 0x64, 0x61, 0x1C, 0x00, 0x6F,
+0x00, 0x28, 0xB1, 0x46, 0x6C, 0xBA, 0x50, 0x76, 0x00, 0x00, 0x41, 0x0A, 0x6C, 0xBC, 0x4B, 0x09,
+0x6C, 0xBA, 0x50, 0x61, 0x00, 0x00, 0x6D, 0xBA, 0x50, 0x08, 0x6C, 0xBA, 0x4D, 0x13, 0x06, 0x04,
+0x34, 0x80, 0x1E, 0x44, 0x14, 0x29, 0xB7, 0x76, 0x2D, 0xBA, 0x4D, 0x88, 0x2C, 0xBA, 0x4B, 0x28,
+0xB0, 0x3D, 0x2C, 0xBA, 0x4D, 0x28, 0xB0, 0x3D, 0x6C, 0xBA, 0x4A, 0x17, 0x2A, 0xB1, 0xA1, 0x42,
+0x88, 0x06, 0x2C, 0xBA, 0x4C, 0x05, 0x16, 0x1C, 0x29, 0xB0, 0x3D, 0x2C, 0xBA, 0x4D, 0x05, 0x16,
+0x1C, 0x28, 0xB0, 0x3D, 0x6C, 0xBA, 0x4C, 0x17, 0x2A, 0xB1, 0xBD, 0x42, 0x88, 0x06, 0x29, 0xB0,
+0x3D, 0x28, 0xB0, 0x3D, 0x21, 0xFF, 0x28, 0xB1, 0xCB, 0x21, 0x01, 0x64, 0xB1, 0x01, 0x6D, 0xBA,
+0xF1, 0x08, 0x6D, 0xBA, 0x50, 0x88, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xE0, 0x10, 0x00, 0x20,
+0x20, 0x20, 0x20, 0xB8, 0x7C, 0x7C, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x6E, 0x54, 0x6C, 0xBA, 0x5B, 0x5D, 0x6E, 0x56, 0x6C, 0xBA, 0x5D, 0x5D, 0x6E, 0x54, 0x6D,
+0xBA, 0x5B, 0x6E, 0x56, 0x6D, 0xBA, 0x5D, 0x5C, 0x1C, 0x2A, 0xB0, 0x16, 0x28, 0xB0, 0x1A, 0x6E,
+0x3A, 0x76, 0x00, 0x00, 0x2B, 0xB2, 0x28, 0x6E, 0x3C, 0x76, 0x00, 0x00, 0x2B, 0xB2, 0x38, 0x6E,
+0x3E, 0x76, 0x00, 0x00, 0x2B, 0xB2, 0x56, 0x88, 0x61, 0x00, 0x40, 0x6F, 0x3A, 0x21, 0x00, 0x12,
+0x04, 0x2D, 0xB2, 0x2E, 0x6C, 0xBB, 0xFD, 0x08, 0x21, 0x00, 0x29, 0xB8, 0xF5, 0x61, 0x00, 0x00,
+0x6F, 0x3C, 0x2E, 0x4C, 0x3E, 0xF0, 0x29, 0xB4, 0x64, 0x29, 0xB1, 0x7A, 0x29, 0xB1, 0xB4, 0x2C,
+0xBA, 0x4D, 0x2D, 0xBA, 0x4C, 0x88, 0x21, 0x00, 0x29, 0xB8, 0xF5, 0x61, 0x00, 0x10, 0x6F, 0x3E,
+0x6C, 0xB2, 0x3E, 0x71, 0x00, 0x02, 0x05, 0x34, 0x80, 0x04, 0x5E, 0x61, 0x00, 0x08, 0x45, 0x45,
+0x55, 0x29, 0xB7, 0x70, 0x6D, 0xB2, 0x3E, 0x88, 0x61, 0x00, 0x60, 0x6F, 0x3C, 0x61, 0x00, 0x10,
+0x6F, 0x3E, 0x61, 0x00, 0x30, 0x6D, 0xB2, 0x3E, 0x24, 0xFF, 0x2D, 0xB2, 0x39, 0x2D, 0xB2, 0x57,
+0x88, 0x64, 0x00, 0x00, 0x6F, 0x3C, 0x6F, 0x3E, 0x24, 0x00, 0x2D, 0xB2, 0x39, 0x2D, 0xB2, 0x57,
+0x88, 0x21, 0xFF, 0x2D, 0xB2, 0x2E, 0x28, 0xB2, 0x28, 0x2E, 0x48, 0x04, 0x2D, 0xBA, 0x6B, 0x2E,
+0x49, 0x1E, 0x2D, 0xBA, 0x67, 0x6E, 0x40, 0x6D, 0xBA, 0x5F, 0x6E, 0x42, 0x6D, 0xBA, 0x63, 0x6E,
+0x44, 0x6D, 0xBA, 0x57, 0x6E, 0x46, 0x6D, 0xBA, 0x59, 0x2E, 0x4C, 0x2D, 0xBA, 0x69, 0x29, 0xB5,
+0xD3, 0x29, 0xB3, 0x6E, 0x6C, 0xBA, 0x6B, 0x1F, 0x1E, 0x2B, 0xB3, 0x5F, 0x6C, 0xBA, 0x57, 0x6B,
+0xB3, 0x87, 0x6C, 0xBA, 0x59, 0x6B, 0xB3, 0x97, 0x6C, 0xBA, 0x67, 0x1D, 0x2B, 0xB3, 0xA7, 0x6C,
+0xBA, 0x5F, 0x6C, 0xBA, 0x61, 0x56, 0x1F, 0x6C, 0xBA, 0x63, 0x6C, 0xBA, 0x65, 0x56, 0x1F, 0x6C,
+0xBA, 0x6B, 0x1D, 0x1C, 0x1C, 0x2C, 0xBA, 0x6B, 0x1E, 0x2B, 0xB4, 0x14, 0x6C, 0xBA, 0x69, 0x1D,
+0x2B, 0xB4, 0x4C, 0x2C, 0xBA, 0x4B, 0x21, 0xFF, 0x2C, 0xBA, 0x6B, 0x29, 0xB7, 0x76, 0x2D, 0xBA,
+0x4B, 0x29, 0xB1, 0x7A, 0x6C, 0xBA, 0x50, 0x1C, 0x2A, 0xB3, 0x31, 0x29, 0xB1, 0xB4, 0x29, 0xB1,
+0x98, 0x29, 0xB4, 0xDD, 0x6C, 0xBA, 0x5F, 0x6D, 0xBA, 0x61, 0x6C, 0xBA, 0x63, 0x6D, 0xBA, 0x65,
+0x2C, 0xBA, 0x6B, 0x2D, 0xBA, 0x6C, 0x2C, 0xBA, 0x67, 0x2D, 0xBA, 0x68, 0x2C, 0xBA, 0x69, 0x2D,
+0xBA, 0x6A, 0x2C, 0xBA, 0x4D, 0x2D, 0xBA, 0x4C, 0x2C, 0xBA, 0x4B, 0x2D, 0xBA, 0x4A, 0x88, 0x6C,
+0xBA, 0x5F, 0x6D, 0xBA, 0x61, 0x6C, 0xBA, 0x63, 0x6D, 0xBA, 0x65, 0x28, 0xB5, 0x1B, 0x28, 0xB3,
+0x7F, 0x04, 0x6C, 0xBB, 0xFB, 0x09, 0x2C, 0xBA, 0x4D, 0x29, 0xB0, 0x7D, 0x29, 0xB2, 0xA1, 0x2E,
+0x4A, 0x04, 0x2A, 0xB3, 0x71, 0x02, 0x88, 0x6C, 0xBA, 0x57, 0x06, 0x02, 0x04, 0x6C, 0xBB, 0xB7,
+0x09, 0x61, 0xBB, 0x37, 0x28, 0xB0, 0x90, 0x6C, 0xBA, 0x59, 0x06, 0x02, 0x04, 0x6C, 0xBB, 0xB9,
+0x09, 0x61, 0xBB, 0x77, 0x28, 0xB0, 0x90, 0x6C, 0xBA, 0x67, 0x1F, 0x1E, 0x04, 0x3E, 0x80, 0x2C,
+0xBA, 0x4B, 0x34, 0xFF, 0x1E, 0x2B, 0xB3, 0xDB, 0x04, 0x3E, 0x20, 0x2B, 0xB3, 0xF0, 0x3E, 0x40,
+0x2B, 0xB4, 0x02, 0x6C, 0xBA, 0x67, 0x06, 0x1F, 0x1E, 0x04, 0x3E, 0x80, 0x2B, 0xB3, 0xE8, 0x04,
+0x3E, 0x20, 0x2B, 0xB3, 0xFC, 0x3E, 0x40, 0x2B, 0xB4, 0x0E, 0x88, 0x29, 0xB2, 0xA1, 0x21, 0x01,
+0x29, 0xB0, 0x8D, 0x21, 0x02, 0x28, 0xB0, 0x8D, 0x21, 0x03, 0x29, 0xB0, 0x8D, 0x28, 0xB5, 0x1B,
+0x21, 0x01, 0x6C, 0xBB, 0x33, 0x09, 0x21, 0x02, 0x6C, 0xBB, 0x33, 0x08, 0x21, 0x03, 0x6C, 0xBB,
+0x33, 0x08, 0x21, 0x01, 0x6C, 0xBB, 0x35, 0x09, 0x21, 0x02, 0x6C, 0xBB, 0x35, 0x08, 0x21, 0x03,
+0x6C, 0xBB, 0x35, 0x08, 0x2C, 0xBA, 0x67, 0x3E, 0x20, 0x2A, 0xB4, 0x40, 0x2C, 0xBA, 0x67, 0x3E,
+0x40, 0x2A, 0xB4, 0x46, 0x61, 0xB4, 0x3B, 0x61, 0xB4, 0x33, 0x2C, 0xBA, 0x67, 0x3E, 0x80, 0x29,
+0xB7, 0x70, 0x08, 0x29, 0xB5, 0x1B, 0x21, 0x00, 0x28, 0xB0, 0x8D, 0x21, 0x02, 0x28, 0xB0, 0x8D,
+0x21, 0x02, 0x6C, 0xBB, 0x33, 0x08, 0x21, 0x02, 0x6C, 0xBB, 0x35, 0x08, 0x61, 0xB2, 0x78, 0x61,
+0xB2, 0x91, 0x2C, 0xBA, 0x69, 0x3E, 0xF0, 0x29, 0xB7, 0x70, 0x09, 0x6C, 0xBA, 0x69, 0x1F, 0x1E,
+0x04, 0x2B, 0xB2, 0xA1, 0x04, 0x21, 0x80, 0x61, 0xB4, 0xB3, 0x29, 0xB4, 0xAB, 0x04, 0x21, 0x40,
+0x61, 0xB4, 0xB9, 0x29, 0xB4, 0xAB, 0x04, 0x21, 0x20, 0x61, 0xB4, 0xBF, 0x29, 0xB4, 0xAB, 0x04,
+0x21, 0x10, 0x61, 0xB4, 0xC5, 0x29, 0xB4, 0xAB, 0x04, 0x21, 0x08, 0x61, 0xB4, 0xCB, 0x29, 0xB4,
+0xAB, 0x04, 0x21, 0x04, 0x61, 0xB4, 0xD1, 0x29, 0xB4, 0xAB, 0x04, 0x21, 0x02, 0x61, 0xB4, 0xD5,
+0x29, 0xB4, 0xAB, 0x21, 0x01, 0x61, 0xB4, 0xD9, 0x28, 0xB4, 0xAB, 0x46, 0x1E, 0x2A, 0xB4, 0xB2,
+0x42, 0x41, 0x08, 0x21, 0xFF, 0x6C, 0xBA, 0xF1, 0x08, 0x21, 0x01, 0x6C, 0xBA, 0xF1, 0x08, 0x21,
+0xFF, 0x6C, 0xBA, 0xEF, 0x08, 0x21, 0x01, 0x6C, 0xBA, 0xEF, 0x08, 0x2C, 0xBA, 0x4D, 0x28, 0xB0,
+0x77, 0x6C, 0xBC, 0x43, 0x08, 0x6C, 0xBC, 0x45, 0x08, 0x6C, 0xBC, 0x47, 0x08, 0x2E, 0x48, 0x29,
+0xB8, 0xF5, 0x2C, 0xBA, 0x4B, 0x04, 0x34, 0xFF, 0x27, 0x00, 0x78, 0x01, 0x44, 0x70, 0xBA, 0xF3,
+0x4C, 0x76, 0xB6, 0x97, 0x1F, 0x07, 0x07, 0x45, 0x1E, 0x2E, 0x49, 0x3E, 0x80, 0x35, 0x00, 0x1E,
+0x3E, 0x02, 0x12, 0x2F, 0x5A, 0x70, 0xBC, 0x4D, 0x4C, 0x46, 0x66, 0xB1, 0xD6, 0x1E, 0x29, 0xB7,
+0x70, 0x65, 0xB1, 0xE8, 0x1C, 0x29, 0xB7, 0x70, 0x28, 0xB5, 0x95, 0x29, 0xB5, 0x30, 0x04, 0x2D,
+0xBA, 0x4B, 0x04, 0x2C, 0xBA, 0x4E, 0x14, 0x2A, 0xB5, 0x2C, 0x02, 0x88, 0x2D, 0xBA, 0x4D, 0x88,
+0x2C, 0xBA, 0x4F, 0x21, 0x00, 0x28, 0xB5, 0x40, 0x04, 0x29, 0xB5, 0x4B, 0x2A, 0xB5, 0x48, 0x12,
+0x17, 0x2A, 0xB5, 0x38, 0x42, 0x21, 0xFF, 0x88, 0x06, 0x02, 0x88, 0x26, 0x00, 0x78, 0x03, 0x70,
+0xBC, 0x8D, 0x44, 0x4C, 0x70, 0x80, 0x00, 0x6E, 0x40, 0x70, 0x80, 0x00, 0x55, 0x2A, 0xB5, 0x91,
+0x70, 0x00, 0x02, 0x44, 0x4C, 0x70, 0x80, 0x00, 0x6E, 0x42, 0x70, 0x80, 0x00, 0x55, 0x2A, 0xB5,
+0x91, 0x70, 0x00, 0x02, 0x44, 0x4C, 0x70, 0x80, 0x00, 0x6E, 0x40, 0x70, 0x80, 0x00, 0x54, 0x2A,
+0xB5, 0x91, 0x70, 0x00, 0x02, 0x4C, 0x70, 0x80, 0x00, 0x6E, 0x42, 0x70, 0x80, 0x00, 0x54, 0x1F,
+0x88, 0x42, 0x21, 0x00, 0x88, 0x44, 0x76, 0xB1, 0xE8, 0x2A, 0xB5, 0xCC, 0x44, 0x0C, 0x04, 0x79,
+0x04, 0x39, 0x04, 0xC1, 0x52, 0x29, 0xAD, 0x82, 0x6C, 0xBA, 0x63, 0x21, 0x00, 0x01, 0x51, 0x44,
+0x6D, 0xBA, 0x55, 0x6F, 0x52, 0x6C, 0xBA, 0x5F, 0x21, 0x00, 0x01, 0x51, 0x44, 0x6D, 0xBA, 0x53,
+0x6F, 0x50, 0x21, 0x98, 0x2F, 0x5E, 0x21, 0xFF, 0x2D, 0xBA, 0x52, 0x88, 0x42, 0x21, 0x00, 0x2D,
+0xBA, 0x52, 0x88, 0x2C, 0xBA, 0x52, 0x29, 0xB8, 0xF5, 0x21, 0x00, 0x2F, 0x5A, 0x72, 0xB1, 0xE8,
+0x29, 0xAD, 0x82, 0x6C, 0xBA, 0x53, 0x6F, 0x50, 0x6C, 0xBA, 0x55, 0x6F, 0x52, 0x21, 0x90, 0x2F,
+0x5E, 0x21, 0x00, 0x2D, 0xBA, 0x52, 0x88, 0x61, 0xBA, 0x6F, 0x28, 0xB6, 0x24, 0x61, 0xBA, 0xAF,
+0x28, 0xB6, 0x24, 0x61, 0xBC, 0x01, 0x28, 0xB6, 0x24, 0x61, 0xBB, 0xBB, 0x28, 0xB6, 0x24, 0x61,
+0xBB, 0x37, 0x28, 0xB6, 0x24, 0x61, 0xBB, 0x77, 0x28, 0xB6, 0x24, 0x61, 0xBA, 0xF3, 0x28, 0xB6,
+0x24, 0x61, 0xBC, 0x4D, 0x45, 0x51, 0x53, 0x6D, 0xB6, 0x3A, 0x44, 0x0C, 0x81, 0x52, 0x44, 0x4C,
+0x44, 0x6A, 0xB6, 0x38, 0x42, 0x28, 0xB6, 0x3D, 0x45, 0x70, 0x00, 0x00, 0x4D, 0x70, 0x00, 0x02,
+0x93, 0x84, 0xAA, 0xB6, 0x2E, 0x42, 0x82, 0x88, 0x44, 0x0C, 0x25, 0x00, 0x78, 0x03, 0xC1, 0x2D,
+0xBA, 0x4F, 0x52, 0xF0, 0xBC, 0x8D, 0xE1, 0xBC, 0x8D, 0x44, 0x4C, 0x44, 0x43, 0x4D, 0x53, 0x46,
+0x70, 0x00, 0x02, 0xF0, 0x00, 0x02, 0x44, 0x4C, 0x44, 0x43, 0x4D, 0x53, 0x46, 0x70, 0x00, 0x02,
+0xF0, 0x00, 0x02, 0xC1, 0x46, 0x41, 0x44, 0x4C, 0x47, 0x50, 0x43, 0x4D, 0x70, 0x00, 0x02, 0xF0,
+0x00, 0x02, 0x44, 0x4C, 0x47, 0x50, 0x43, 0x4D, 0x70, 0x00, 0x02, 0xF0, 0x00, 0x02, 0xD7, 0xAA,
+0xB6, 0x59, 0x42, 0xC2, 0xC2, 0x88, 0x42, 0x02, 0x88, 0x46, 0xC1, 0x07, 0x2D, 0xB6, 0xA6, 0x43,
+0x50, 0x41, 0x28, 0xB6, 0xAA, 0xAE, 0x00, 0xC3, 0x8D, 0x52, 0x57, 0x2A, 0xB6, 0xA5, 0x42, 0x42,
+0x88, 0xC1, 0x45, 0x51, 0x6D, 0xB6, 0xBE, 0x28, 0xB6, 0xC3, 0xC3, 0x8C, 0xC3, 0xF0, 0x00, 0x00,
+0x8D, 0x52, 0xD3, 0xC4, 0xEA, 0xB6, 0xBA, 0x42, 0xC2, 0x88, 0xC1, 0x45, 0x51, 0x6D, 0xB6, 0xDC,
+0x41, 0x45, 0x50, 0x28, 0xB6, 0xE0, 0x53, 0x44, 0x0C, 0x81, 0x44, 0x70, 0x00, 0x00, 0xC1, 0x8D,
+0x57, 0x2A, 0xB6, 0xD6, 0x42, 0x42, 0x88, 0x46, 0x29, 0xB6, 0xF2, 0x21, 0x00, 0x29, 0xB7, 0x07,
+0x42, 0x88, 0xC1, 0x28, 0xB6, 0xFA, 0xC3, 0x8D, 0x52, 0xD2, 0xC4, 0x8C, 0x84, 0xAA, 0xB6, 0xF6,
+0x82, 0xC2, 0x88, 0x81, 0xC1, 0x8D, 0x88, 0x81, 0xC3, 0x8D, 0x52, 0x88, 0xC1, 0x45, 0x50, 0x41,
+0x6D, 0xB7, 0x17, 0x71, 0x00, 0x02, 0x29, 0x00, 0x00, 0x45, 0x4D, 0x57, 0x2A, 0xB7, 0x13, 0x42,
+0x42, 0x88, 0x45, 0x45, 0x46, 0x51, 0x7E, 0x00, 0x01, 0x2A, 0xB7, 0x42, 0x21, 0x00, 0x6D, 0xB7,
+0x38, 0x28, 0xB7, 0x3B, 0x71, 0x00, 0x02, 0x65, 0x00, 0x00, 0x4D, 0x57, 0x2A, 0xB7, 0x34, 0x42,
+0x42, 0x88, 0x2D, 0xB7, 0x4B, 0x28, 0xB7, 0x4E, 0x53, 0x65, 0x00, 0x00, 0x0D, 0x02, 0x57, 0x2A,
+0xB7, 0x48, 0x42, 0x42, 0x88, 0x81, 0x45, 0x50, 0x01, 0x2D, 0xB7, 0x63, 0x28, 0xB7, 0x67, 0x53,
+0x44, 0x0C, 0x36, 0x00, 0x2A, 0xB7, 0x6D, 0x57, 0x2A, 0xB7, 0x5F, 0x5D, 0x88, 0x46, 0x42, 0x88,
+0x2A, 0xB7, 0x74, 0x46, 0x42, 0x88, 0x2A, 0xB7, 0x7A, 0x06, 0x02, 0x88, 0x21, 0x00, 0x2F, 0x08,
+0x44, 0x0C, 0x2E, 0x08, 0x44, 0x76, 0x00, 0x2F, 0x2A, 0xB7, 0x95, 0x16, 0x81, 0x52, 0xAA, 0xB7,
+0x80, 0x42, 0x21, 0x00, 0x88, 0x42, 0x42, 0x21, 0xFF, 0x88, 0x04, 0x3E, 0x0F, 0x06, 0x39, 0x04,
+0x29, 0xB7, 0xA4, 0x06, 0x04, 0x35, 0x09, 0x3E, 0x07, 0x30, 0x30, 0x10, 0x88, 0x26, 0x00, 0x44,
+0x6A, 0xB7, 0xBB, 0x42, 0xA1, 0x30, 0x63, 0xB7, 0xDA, 0x8D, 0x88, 0x61, 0x00, 0x0A, 0x6F, 0x22,
+0x66, 0xB7, 0xDA, 0x6F, 0x20, 0xC3, 0x2E, 0x2F, 0x30, 0x30, 0x41, 0x0D, 0x53, 0x6E, 0x2C, 0x44,
+0x6A, 0xB7, 0xC3, 0x42, 0x52, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x40, 0x28, 0xB7,
+0xE3, 0x6E, 0x42, 0x46, 0x51, 0x05, 0x34, 0x80, 0x04, 0x5E, 0x6F, 0x20, 0x6F, 0x22, 0x2E, 0x2D,
+0x28, 0xB8, 0x77, 0x29, 0xB7, 0xDC, 0x28, 0xB8, 0xF5, 0x29, 0xB7, 0xE1, 0x28, 0xB8, 0xF5, 0x2E,
+0x4B, 0x36, 0x00, 0x2A, 0xB8, 0x09, 0x42, 0x02, 0x88, 0x07, 0x04, 0x35, 0x2F, 0x05, 0x34, 0x3A,
+0x1E, 0x2A, 0xB8, 0x1B, 0x36, 0x08, 0x2A, 0xB8, 0x3C, 0x42, 0x88, 0x31, 0x30, 0x04, 0x35, 0x09,
+0x45, 0x4C, 0x75, 0x0C, 0xCB, 0x1C, 0x2A, 0xB8, 0x4A, 0x81, 0x44, 0x4C, 0x6F, 0x20, 0x61, 0x00,
+0x0A, 0x6F, 0x22, 0x21, 0x00, 0x01, 0x6E, 0x2A, 0x50, 0x46, 0x4D, 0x88, 0x44, 0x4C, 0x6F, 0x20,
+0x61, 0x00, 0x0A, 0x6F, 0x22, 0x6E, 0x2C, 0x46, 0x4D, 0x88, 0x02, 0x42, 0x88, 0x6D, 0xB8, 0x65,
+0x29, 0xB7, 0xDC, 0x1F, 0x2A, 0xB8, 0x63, 0x88, 0x6D, 0xB8, 0x65, 0x29, 0xB7, 0xE1, 0x1F, 0x2A,
+0xB8, 0x63, 0x88, 0xC2, 0x61, 0x00, 0x00, 0x28, 0xB1, 0xD2, 0x29, 0xB8, 0x74, 0x02, 0x88, 0x29,
+0xB8, 0x77, 0x02, 0x88, 0x45, 0x0C, 0x10, 0x04, 0x34, 0x80, 0x1E, 0x44, 0x14, 0x29, 0xB7, 0x76,
+0x81, 0x44, 0x0C, 0x03, 0x46, 0x0D, 0x01, 0x16, 0x1F, 0x88, 0x29, 0xB8, 0x74, 0x28, 0xB8, 0xF5,
+0x29, 0xB8, 0x77, 0x28, 0xB8, 0xF5, 0x29, 0xB8, 0xA0, 0x02, 0x88, 0x29, 0xB8, 0xA5, 0x02, 0x88,
+0xC1, 0x45, 0x4C, 0x41, 0x50, 0x05, 0x34, 0x80, 0x04, 0x5E, 0x45, 0x45, 0x54, 0x29, 0xB7, 0x70,
+0xC1, 0x44, 0x4C, 0x43, 0x47, 0x4D, 0x41, 0x56, 0x1F, 0x88, 0x29, 0xB8, 0xA0, 0x28, 0xB8, 0xF5,
+0x29, 0xB8, 0xA5, 0x28, 0xB8, 0xF5, 0x29, 0xB8, 0xD0, 0x02, 0x88, 0x29, 0xB8, 0xD5, 0x02, 0x88,
+0x6E, 0x40, 0x28, 0xB8, 0xD7, 0x6E, 0x42, 0x46, 0x51, 0x05, 0x34, 0x80, 0x04, 0x5E, 0x6F, 0x20,
+0x6F, 0x22, 0x6E, 0x2C, 0x28, 0xB8, 0xA5, 0x29, 0xB8, 0xD0, 0x28, 0xB8, 0xF5, 0x29, 0xB8, 0xD5,
+0x28, 0xB8, 0xF5, 0x36, 0x00, 0x41, 0x0A, 0x88, 0x46, 0x70, 0x80, 0x00, 0x46, 0x70, 0x80, 0x00,
+0x55, 0x88, 0x21, 0x54, 0x28, 0xB9, 0x09, 0x21, 0x55, 0x2D, 0xB9, 0x15, 0x70, 0x80, 0x00, 0x46,
+0x70, 0x80, 0x00, 0x45, 0x45, 0x00, 0x2A, 0xB9, 0x1A, 0x46, 0x70, 0x80, 0x00, 0x46, 0x70, 0x80,
+0x00, 0x88, 0x5F, 0x26, 0x00, 0x70, 0xB9, 0x39, 0x0C, 0x27, 0x00, 0x70, 0xB9, 0x39, 0x0C, 0x10,
+0x88, 0x1F, 0x26, 0x00, 0x70, 0xB9, 0x39, 0x0C, 0x88, 0x00, 0x01, 0x01, 0x02, 0x01, 0x02, 0x02,
+0x03, 0x01, 0x02, 0x02, 0x03, 0x02, 0x03, 0x03, 0x04, 0x01, 0x02, 0x02, 0x03, 0x02, 0x03, 0x03,
+0x04, 0x02, 0x03, 0x03, 0x04, 0x03, 0x04, 0x04, 0x05, 0x01, 0x02, 0x02, 0x03, 0x02, 0x03, 0x03,
+0x04, 0x02, 0x03, 0x03, 0x04, 0x03, 0x04, 0x04, 0x05, 0x02, 0x03, 0x03, 0x04, 0x03, 0x04, 0x04,
+0x05, 0x03, 0x04, 0x04, 0x05, 0x04, 0x05, 0x05, 0x06, 0x01, 0x02, 0x02, 0x03, 0x02, 0x03, 0x03,
+0x04, 0x02, 0x03, 0x03, 0x04, 0x03, 0x04, 0x04, 0x05, 0x02, 0x03, 0x03, 0x04, 0x03, 0x04, 0x04,
+0x05, 0x03, 0x04, 0x04, 0x05, 0x04, 0x05, 0x05, 0x06, 0x02, 0x03, 0x03, 0x04, 0x03, 0x04, 0x04,
+0x05, 0x03, 0x04, 0x04, 0x05, 0x04, 0x05, 0x05, 0x06, 0x03, 0x04, 0x04, 0x05, 0x04, 0x05, 0x05,
+0x06, 0x04, 0x05, 0x05, 0x06, 0x05, 0x06, 0x06, 0x07, 0x01, 0x02, 0x02, 0x03, 0x02, 0x03, 0x03,
+0x04, 0x02, 0x03, 0x03, 0x04, 0x03, 0x04, 0x04, 0x05, 0x02, 0x03, 0x03, 0x04, 0x03, 0x04, 0x04,
+0x05, 0x03, 0x04, 0x04, 0x05, 0x04, 0x05, 0x05, 0x06, 0x02, 0x03, 0x03, 0x04, 0x03, 0x04, 0x04,
+0x05, 0x03, 0x04, 0x04, 0x05, 0x04, 0x05, 0x05, 0x06, 0x03, 0x04, 0x04, 0x05, 0x04, 0x05, 0x05,
+0x06, 0x04, 0x05, 0x05, 0x06, 0x05, 0x06, 0x06, 0x07, 0x02, 0x03, 0x03, 0x04, 0x03, 0x04, 0x04,
+0x05, 0x03, 0x04, 0x04, 0x05, 0x04, 0x05, 0x05, 0x06, 0x03, 0x04, 0x04, 0x05, 0x04, 0x05, 0x05,
+0x06, 0x04, 0x05, 0x05, 0x06, 0x05, 0x06, 0x06, 0x07, 0x03, 0x04, 0x04, 0x05, 0x04, 0x05, 0x05,
+0x06, 0x04, 0x05, 0x05, 0x06, 0x05, 0x06, 0x06, 0x07, 0x04, 0x05, 0x05, 0x06, 0x05, 0x06, 0x06,
+0x07, 0x05, 0x06, 0x06, 0x07, 0x06, 0x07, 0x07, 0x08, 0x44, 0x74, 0x80, 0x00, 0x2A, 0xBA, 0x42,
+0x5F, 0x52, 0x88, 0x44, 0x6A, 0xBA, 0x48, 0x88, 0x53, 0x88,
diff --git a/arm9/include/keyboard.br.inc b/arm9/include/keyboard.br.inc
new file mode 100644
index 0000000..91ef276
--- /dev/null
+++ b/arm9/include/keyboard.br.inc
@@ -0,0 +1,174 @@
+0xE8, 0x00, 0x18, 0x42, 0x45, 0x44, 0x52, 0x4F, 0x43, 0x4B, 0x00, 0x44, 0x00, 0x53, 0x00, 0x5E,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x02, 0x68, 0x6F, 0x58, 0x61, 0x1F, 0xFF,
+0x6F, 0x58, 0x61, 0x20, 0x9F, 0x6F, 0x58, 0x61, 0x3F, 0x80, 0x6F, 0x58, 0x29, 0x01, 0x37, 0x2E,
+0x02, 0x04, 0x36, 0x04, 0x2B, 0x00, 0x71, 0x36, 0x05, 0x2B, 0x01, 0x37, 0x61, 0x0C, 0x00, 0x6F,
+0x00, 0x28, 0x00, 0x2F, 0x4B, 0x65, 0x79, 0x62, 0x6F, 0x61, 0x72, 0x64, 0x2F, 0x31, 0x2E, 0x30,
+0x2E, 0x30, 0x00, 0x42, 0x65, 0x6E, 0x20, 0x42, 0x72, 0x69, 0x64, 0x6C, 0x65, 0x00, 0x4F, 0x6E,
+0x2D, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6E, 0x20, 0x6B, 0x65, 0x79, 0x62, 0x6F, 0x61, 0x72, 0x64,
+0x00, 0x21, 0xA0, 0x2F, 0x5E, 0x6E, 0x40, 0x6D, 0x01, 0x56, 0x6E, 0x42, 0x6D, 0x01, 0x58, 0x2E,
+0x49, 0x2D, 0x01, 0x5E, 0x29, 0x00, 0x9A, 0x2E, 0x4C, 0x3E, 0x04, 0x2B, 0x00, 0x94, 0x2E, 0x48,
+0x2B, 0x01, 0x0E, 0x88, 0x88, 0x21, 0x00, 0x2F, 0x86, 0x88, 0x6C, 0x01, 0x5A, 0x6C, 0x01, 0x56,
+0x56, 0x6C, 0x01, 0x5C, 0x6C, 0x01, 0x58, 0x56, 0x1E, 0x1F, 0x2B, 0x00, 0xD9, 0x6C, 0x01, 0x5E,
+0x16, 0x1F, 0x2B, 0x00, 0xE0, 0x6C, 0x01, 0x4E, 0x6C, 0x01, 0x50, 0x56, 0x1F, 0x2B, 0x00, 0xFE,
+0x6C, 0x01, 0x4E, 0x6D, 0x01, 0x50, 0x6C, 0x01, 0x56, 0x6D, 0x01, 0x5A, 0x6C, 0x01, 0x58, 0x6D,
+0x01, 0x5C, 0x2C, 0x01, 0x5E, 0x2D, 0x01, 0x5F, 0x88, 0x29, 0x03, 0x04, 0x6D, 0x01, 0x4E, 0x88,
+0x6C, 0x01, 0x5E, 0x1F, 0x1E, 0x3E, 0x80, 0x2B, 0x00, 0xED, 0x28, 0x01, 0x06, 0x6C, 0x01, 0x4E,
+0x44, 0x6A, 0x00, 0xF6, 0x42, 0x88, 0xC3, 0x0C, 0x41, 0x70, 0x00, 0x03, 0x4C, 0x08, 0x21, 0x00,
+0x6C, 0x01, 0x50, 0x29, 0x01, 0xBE, 0x21, 0xFF, 0x6C, 0x01, 0x4E, 0x28, 0x01, 0xBE, 0xA9, 0x01,
+0x19, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xE0, 0x10, 0x00, 0x29, 0x0A, 0x08, 0x6C, 0x01, 0x56, 0x6F,
+0x50, 0x6C, 0x01, 0x58, 0x6F, 0x52, 0x2C, 0x01, 0x5E, 0x3E, 0x80, 0x35, 0x00, 0x3E, 0x02, 0x12,
+0x2F, 0x5A, 0x21, 0x98, 0x2F, 0x5E, 0x88, 0x6E, 0x54, 0x79, 0x01, 0x71, 0x00, 0x80, 0x6D, 0x01,
+0x52, 0x6E, 0x56, 0x79, 0x01, 0x71, 0x00, 0x60, 0x6D, 0x01, 0x54, 0x28, 0x01, 0x7A, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xC1, 0x28, 0x01, 0x70, 0x44, 0x43, 0x09, 0x2A, 0x01, 0x76, 0x42, 0x70, 0x00, 0x02,
+0x44, 0x4C, 0x44, 0x6A, 0x01, 0x66, 0xC2, 0x46, 0x42, 0x88, 0x21, 0x20, 0x2F, 0x5E, 0x61, 0x03,
+0x63, 0x61, 0x01, 0x89, 0x29, 0x01, 0x62, 0x42, 0x88, 0x44, 0x4C, 0x6C, 0x01, 0x52, 0x50, 0x6F,
+0x50, 0x70, 0x00, 0x02, 0x44, 0x4C, 0x6C, 0x01, 0x54, 0x50, 0x6F, 0x52, 0x70, 0x00, 0x02, 0x61,
+0x01, 0xA9, 0x29, 0x01, 0x62, 0x42, 0x21, 0x00, 0x88, 0xC3, 0x44, 0x6C, 0x01, 0x4E, 0x56, 0x41,
+0x29, 0x02, 0x13, 0x52, 0x4C, 0x6E, 0x50, 0x50, 0x52, 0x6F, 0x50, 0x21, 0x00, 0x88, 0x44, 0x6A,
+0x01, 0xC5, 0x42, 0x02, 0x88, 0x44, 0x6D, 0x01, 0xFE, 0x61, 0x03, 0x63, 0x28, 0x01, 0xF1, 0x44,
+0x4C, 0x6C, 0x01, 0x52, 0x50, 0x6F, 0x50, 0x70, 0x00, 0x02, 0x44, 0x4C, 0x6C, 0x01, 0x54, 0x50,
+0x6F, 0x52, 0x70, 0x00, 0x02, 0x61, 0x01, 0xFC, 0x29, 0x01, 0x62, 0x6A, 0x01, 0xF8, 0x70, 0x00,
+0x02, 0x44, 0x4C, 0x44, 0x6A, 0x01, 0xCF, 0x42, 0x42, 0x28, 0x02, 0x13, 0x44, 0x76, 0x00, 0x00,
+0x1F, 0x2A, 0x02, 0x08, 0x42, 0x21, 0xFF, 0x88, 0x52, 0x4C, 0x6E, 0x50, 0x50, 0x52, 0x6F, 0x50,
+0x21, 0x00, 0x88, 0x44, 0x6A, 0x02, 0x1A, 0x42, 0x02, 0x88, 0xC3, 0x07, 0x41, 0x76, 0x05, 0xAC,
+0x2C, 0x01, 0x61, 0x1E, 0x1C, 0x81, 0x21, 0x02, 0x21, 0x03, 0x2C, 0x01, 0x5E, 0x29, 0x0A, 0xC8,
+0x21, 0x02, 0x01, 0x29, 0x0A, 0xC8, 0x81, 0x44, 0x52, 0x4C, 0x44, 0x61, 0x00, 0x0F, 0x01, 0x29,
+0x0A, 0x3A, 0x44, 0x61, 0x00, 0x0F, 0x21, 0x01, 0x29, 0x09, 0x57, 0x21, 0x01, 0x2F, 0x5A, 0x21,
+0x44, 0x2F, 0x5F, 0x45, 0x76, 0x05, 0xAC, 0x2A, 0x02, 0xBB, 0x45, 0x76, 0x05, 0xB1, 0x2A, 0x02,
+0xD6, 0x45, 0x76, 0x05, 0x9D, 0x2A, 0x02, 0x85, 0x45, 0x76, 0x05, 0xA7, 0x2A, 0x02, 0xA0, 0x45,
+0x0C, 0x2D, 0x02, 0x77, 0xA9, 0x02, 0x79, 0x00, 0x00, 0x61, 0x05, 0xF7, 0x29, 0x09, 0xBA, 0x21,
+0xC4, 0x2F, 0x5F, 0x42, 0x88, 0xA9, 0x02, 0x90, 0xC3, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0xC3, 0x00,
+0x29, 0x0A, 0x08, 0x42, 0x21, 0x04, 0x2F, 0x5F, 0x61, 0x18, 0x84, 0x6F, 0x5E, 0x28, 0x02, 0x7F,
+0xA9, 0x02, 0xAB, 0x03, 0x03, 0x23, 0x5F, 0x81, 0x7F, 0x20, 0x00, 0x29, 0x0A, 0x08, 0x42, 0x21,
+0x08, 0x2F, 0x5F, 0x61, 0x18, 0x88, 0x6F, 0x5E, 0x28, 0x02, 0x7F, 0xA9, 0x02, 0xC6, 0x10, 0x38,
+0x7C, 0xFE, 0x38, 0x38, 0x00, 0x38, 0x29, 0x0A, 0x08, 0x42, 0x21, 0x0B, 0x2F, 0x5F, 0x61, 0x18,
+0x8B, 0x6F, 0x5E, 0x28, 0x02, 0x7F, 0xA9, 0x02, 0xE1, 0x1F, 0x39, 0x7C, 0xFE, 0x7C, 0x39, 0x1F,
+0x00, 0x29, 0x0A, 0x08, 0x42, 0x21, 0x07, 0x2F, 0x5F, 0x61, 0x18, 0x08, 0x6F, 0x5E, 0xA9, 0x02,
+0xF9, 0xF8, 0x98, 0x38, 0x78, 0x38, 0x98, 0xF8, 0x00, 0x29, 0x0A, 0x08, 0x61, 0x18, 0x8F, 0x6F,
+0x5E, 0x28, 0x02, 0x7F, 0x61, 0x03, 0x63, 0x61, 0x03, 0x1C, 0x29, 0x01, 0x62, 0x44, 0x6A, 0x03,
+0x12, 0x88, 0x70, 0x00, 0x04, 0x61, 0x03, 0x44, 0x29, 0x01, 0x62, 0x88, 0x44, 0x4C, 0x6C, 0x01,
+0x52, 0x50, 0x6D, 0x03, 0x61, 0x70, 0x00, 0x02, 0x44, 0x4C, 0x6C, 0x01, 0x54, 0x50, 0x6C, 0x01,
+0x58, 0x55, 0x81, 0x4C, 0x6C, 0x01, 0x54, 0x50, 0x70, 0x00, 0x0F, 0x6C, 0x01, 0x58, 0x54, 0x81,
+0x41, 0x1C, 0x1F, 0x88, 0x6C, 0x03, 0x61, 0x6C, 0x01, 0x56, 0x55, 0x81, 0x52, 0x4C, 0x6C, 0x03,
+0x61, 0x50, 0x52, 0x44, 0x6D, 0x03, 0x61, 0x53, 0x6C, 0x01, 0x56, 0x54, 0x81, 0x41, 0x1C, 0x1F,
+0x88, 0x00, 0x00, 0x03, 0x77, 0x03, 0x7F, 0x03, 0x99, 0x03, 0xB3, 0x03, 0xCD, 0x03, 0xE7, 0x04,
+0x01, 0x04, 0x19, 0x04, 0x31, 0x00, 0x00, 0x00, 0xE2, 0x00, 0x0A, 0x05, 0x9D, 0x00, 0x00, 0x00,
+0x0D, 0x00, 0x26, 0x05, 0x57, 0x05, 0x5C, 0x05, 0x2F, 0x05, 0x34, 0x05, 0x39, 0x05, 0x3E, 0x05,
+0x43, 0x05, 0x48, 0x05, 0x4D, 0x05, 0x52, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x36, 0x05, 0x25, 0x05,
+0x2A, 0x05, 0x61, 0x05, 0x66, 0x05, 0x6B, 0x05, 0x70, 0x05, 0x89, 0x05, 0x8E, 0x05, 0x7F, 0x05,
+0x84, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x56, 0x04, 0xF3, 0x04, 0xF8, 0x04, 0xFD, 0x05, 0x02, 0x05,
+0x07, 0x05, 0x0C, 0x05, 0x11, 0x05, 0x16, 0x05, 0x1B, 0x05, 0x20, 0x00, 0x00, 0x00, 0x0D, 0x00,
+0x66, 0x04, 0xC1, 0x04, 0xC6, 0x04, 0xCB, 0x04, 0xD0, 0x04, 0xD5, 0x04, 0xDA, 0x04, 0xDF, 0x04,
+0xE4, 0x04, 0xE9, 0x04, 0xEE, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x76, 0x04, 0x8F, 0x04, 0xAD, 0x04,
+0x53, 0x04, 0x94, 0x04, 0x9E, 0x04, 0xB7, 0x04, 0xA3, 0x04, 0x67, 0x04, 0x85, 0x04, 0x8A, 0x00,
+0x00, 0x00, 0x18, 0x00, 0x86, 0x04, 0x3F, 0x04, 0x99, 0x04, 0x4E, 0x04, 0x58, 0x04, 0x5D, 0x04,
+0x62, 0x04, 0x6C, 0x04, 0x71, 0x04, 0x76, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x96, 0x04, 0xBC, 0x04,
+0xB2, 0x04, 0x49, 0x04, 0xA8, 0x04, 0x44, 0x04, 0x80, 0x04, 0x7B, 0x05, 0x93, 0x05, 0x98, 0x00,
+0x00, 0x00, 0x24, 0x00, 0xA6, 0x05, 0xAC, 0x05, 0xA2, 0x05, 0xB1, 0x05, 0xA7, 0x00, 0x00, 0x61,
+0x00, 0x16, 0x05, 0xB6, 0x62, 0x00, 0x16, 0x05, 0xB6, 0x63, 0x00, 0x16, 0x05, 0xB6, 0x64, 0x00,
+0x16, 0x05, 0xB6, 0x65, 0x00, 0x16, 0x05, 0xB6, 0x66, 0x00, 0x16, 0x05, 0xB6, 0x67, 0x00, 0x16,
+0x05, 0xB6, 0x68, 0x00, 0x16, 0x05, 0xB6, 0x69, 0x00, 0x16, 0x05, 0xB6, 0x6A, 0x00, 0x16, 0x05,
+0xB6, 0x6B, 0x00, 0x16, 0x05, 0xB6, 0x6C, 0x00, 0x16, 0x05, 0xB6, 0x6D, 0x00, 0x16, 0x05, 0xB6,
+0x6E, 0x00, 0x16, 0x05, 0xB6, 0x6F, 0x00, 0x16, 0x05, 0xB6, 0x70, 0x00, 0x16, 0x05, 0xB6, 0x71,
+0x00, 0x16, 0x05, 0xB6, 0x72, 0x00, 0x16, 0x05, 0xB6, 0x73, 0x00, 0x16, 0x05, 0xB6, 0x74, 0x00,
+0x16, 0x05, 0xB6, 0x75, 0x00, 0x16, 0x05, 0xB6, 0x76, 0x00, 0x16, 0x05, 0xB6, 0x77, 0x00, 0x16,
+0x05, 0xB6, 0x78, 0x00, 0x16, 0x05, 0xB6, 0x79, 0x00, 0x16, 0x05, 0xB6, 0x7A, 0x00, 0x16, 0x05,
+0xB6, 0x31, 0x00, 0x16, 0x05, 0xB6, 0x32, 0x00, 0x16, 0x05, 0xB6, 0x33, 0x00, 0x16, 0x05, 0xB6,
+0x34, 0x00, 0x16, 0x05, 0xB6, 0x35, 0x00, 0x16, 0x05, 0xB6, 0x36, 0x00, 0x16, 0x05, 0xB6, 0x37,
+0x00, 0x16, 0x05, 0xB6, 0x38, 0x00, 0x16, 0x05, 0xB6, 0x39, 0x00, 0x16, 0x05, 0xB6, 0x30, 0x00,
+0x16, 0x05, 0xB6, 0x21, 0x00, 0x16, 0x05, 0xB6, 0x40, 0x00, 0x16, 0x05, 0xB6, 0x23, 0x00, 0x16,
+0x05, 0xB6, 0x24, 0x00, 0x16, 0x05, 0xB6, 0x25, 0x00, 0x16, 0x05, 0xB6, 0x5E, 0x00, 0x16, 0x05,
+0xB6, 0x26, 0x00, 0x16, 0x05, 0xB6, 0x2A, 0x00, 0x16, 0x05, 0xB6, 0x28, 0x00, 0x16, 0x05, 0xB6,
+0x29, 0x00, 0x16, 0x05, 0xB6, 0x60, 0x00, 0x16, 0x05, 0xB6, 0x2D, 0x00, 0x16, 0x05, 0xB6, 0x2B,
+0x00, 0x16, 0x05, 0xB6, 0x7B, 0x00, 0x16, 0x05, 0xB6, 0x7D, 0x00, 0x16, 0x05, 0xB6, 0x7C, 0x00,
+0x16, 0x05, 0xB6, 0x3C, 0x00, 0x16, 0x05, 0xB6, 0x3E, 0x00, 0x16, 0x05, 0xB6, 0x3F, 0x00, 0x16,
+0x05, 0xB6, 0x3A, 0x00, 0x16, 0x05, 0xB6, 0x7E, 0x00, 0x16, 0x05, 0xB6, 0x5F, 0x00, 0x16, 0x05,
+0xB6, 0x3D, 0x00, 0x16, 0x05, 0xB6, 0x5B, 0x00, 0x16, 0x05, 0xB6, 0x5D, 0x00, 0x16, 0x05, 0xB6,
+0x5C, 0x00, 0x16, 0x05, 0xB6, 0x2C, 0x00, 0x16, 0x05, 0xB6, 0x2E, 0x00, 0x16, 0x05, 0xB6, 0x2F,
+0x00, 0x16, 0x05, 0xB6, 0x3B, 0x00, 0x16, 0x05, 0xB6, 0x27, 0x00, 0x16, 0x05, 0xB6, 0x22, 0x00,
+0x16, 0x05, 0xB6, 0x2C, 0x00, 0x11, 0x05, 0xB6, 0x2E, 0x00, 0x11, 0x05, 0xB6, 0x00, 0x00, 0x10,
+0x05, 0xB6, 0x20, 0x00, 0x60, 0x05, 0xB6, 0x0A, 0x00, 0x1A, 0x05, 0xB6, 0xFF, 0x00, 0x1D, 0x05,
+0xC6, 0x08, 0x00, 0x1D, 0x05, 0xB6, 0x83, 0x61, 0x86, 0x83, 0x01, 0x29, 0x0A, 0xC8, 0x0F, 0x2C,
+0x01, 0x60, 0x2A, 0x05, 0xD1, 0x88, 0x02, 0x2C, 0x01, 0x61, 0x2C, 0x01, 0x60, 0x1D, 0x2D, 0x01,
+0x61, 0x2C, 0x01, 0x61, 0x1F, 0x29, 0x0A, 0xCF, 0x2C, 0x01, 0x60, 0x1F, 0x2D, 0x01, 0x60, 0x61,
+0x04, 0xC1, 0x61, 0x04, 0x3F, 0xC3, 0x8C, 0xBD, 0x20, 0xC3, 0x8D, 0x70, 0x00, 0x05, 0x57, 0x2A,
+0x05, 0xE5, 0x42, 0x42, 0x28, 0x01, 0x7A, 0x04, 0x05, 0x06, 0x08, 0x08, 0x07, 0x08, 0x04, 0x05,
+0x05, 0x08, 0x07, 0x04, 0x05, 0x03, 0x07, 0x07, 0x05, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+0x07, 0x03, 0x04, 0x06, 0x05, 0x06, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x06, 0x06, 0x07, 0x07,
+0x03, 0x07, 0x07, 0x06, 0x08, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x08, 0x07,
+0x07, 0x07, 0x05, 0x07, 0x05, 0x07, 0x07, 0x04, 0x07, 0x07, 0x06, 0x07, 0x07, 0x04, 0x07, 0x07,
+0x03, 0x04, 0x07, 0x04, 0x08, 0x07, 0x07, 0x07, 0x07, 0x06, 0x07, 0x04, 0x07, 0x07, 0x08, 0x07,
+0x07, 0x07, 0x05, 0x02, 0x05, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0xFF, 0x00, 0x60,
+0xF0, 0xF0, 0x60, 0x60, 0x00, 0x60, 0x00, 0xD8, 0xD8, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C,
+0x6C, 0xFE, 0x6C, 0xFE, 0x6C, 0x6C, 0x00, 0x10, 0x7C, 0xE0, 0x7C, 0x0E, 0x7C, 0x10, 0x00, 0xC4,
+0xCC, 0x18, 0x30, 0x60, 0xCC, 0x8C, 0x00, 0x70, 0xC8, 0xC0, 0x70, 0xDA, 0xCC, 0x76, 0x00, 0x60,
+0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xC0, 0xC0, 0xC0, 0x60, 0x30, 0x00, 0xC0,
+0x60, 0x30, 0x30, 0x30, 0x60, 0xC0, 0x00, 0x00, 0x6C, 0x38, 0xFE, 0x38, 0x6C, 0x00, 0x00, 0x00,
+0x30, 0x30, 0xFC, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0xC0, 0x00,
+0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x0C,
+0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0xC0, 0x78, 0xCC, 0xDC, 0xFC, 0xEC, 0xCC, 0x78, 0x00, 0x60,
+0xE0, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x78, 0xCC, 0x0C, 0x38, 0x60, 0xC0, 0xFC, 0x00, 0x78,
+0xCC, 0x0C, 0x38, 0x0C, 0xCC, 0x78, 0x00, 0x18, 0x38, 0x78, 0xD8, 0xFC, 0x18, 0x18, 0x00, 0xFC,
+0xC0, 0xF8, 0x0C, 0x0C, 0xCC, 0x78, 0x00, 0x38, 0x60, 0xC0, 0xF8, 0xCC, 0xCC, 0x78, 0x00, 0xFC,
+0x0C, 0x0C, 0x18, 0x18, 0x30, 0x30, 0x00, 0x78, 0xCC, 0xCC, 0x78, 0xCC, 0xCC, 0x78, 0x00, 0x78,
+0xCC, 0xCC, 0x7C, 0x0C, 0x18, 0x70, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00,
+0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0xC0, 0x18, 0x30, 0x60, 0xC0, 0x60, 0x30, 0x18, 0x00, 0x00,
+0x00, 0xF0, 0x00, 0xF0, 0x00, 0x00, 0x00, 0xC0, 0x60, 0x30, 0x18, 0x30, 0x60, 0xC0, 0x00, 0x78,
+0x8C, 0x1C, 0x38, 0x30, 0x00, 0x30, 0x00, 0x78, 0xCC, 0xDC, 0xD4, 0xDC, 0xC0, 0x78, 0x00, 0x78,
+0xCC, 0xCC, 0xCC, 0xFC, 0xCC, 0xCC, 0x00, 0xF8, 0xCC, 0xCC, 0xF8, 0xCC, 0xCC, 0xF8, 0x00, 0x78,
+0xCC, 0xC0, 0xC0, 0xC0, 0xCC, 0x78, 0x00, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0xF8,
+0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xF8, 0x00, 0xF8, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xC0, 0x00, 0x78,
+0xCC, 0xC0, 0xDC, 0xCC, 0xCC, 0x78, 0x00, 0xCC, 0xCC, 0xCC, 0xFC, 0xCC, 0xCC, 0xCC, 0x00, 0xC0,
+0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0x78, 0x00, 0xCC,
+0xCC, 0xD8, 0xF0, 0xD8, 0xCC, 0xCC, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xF8, 0x00, 0xC6,
+0xEE, 0xFE, 0xD6, 0xC6, 0xC6, 0xC6, 0x00, 0xCC, 0xCC, 0xEC, 0xFC, 0xDC, 0xCC, 0xCC, 0x00, 0x78,
+0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0xF8, 0xCC, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0x00, 0x78,
+0xCC, 0xCC, 0xCC, 0xDC, 0xD8, 0x6C, 0x00, 0xF8, 0xCC, 0xCC, 0xF8, 0xCC, 0xCC, 0xCC, 0x00, 0x78,
+0xCC, 0xC0, 0x78, 0x0C, 0xCC, 0x78, 0x00, 0xFC, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0xCC,
+0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x00, 0xC6,
+0xC6, 0xC6, 0xD6, 0xD6, 0xFE, 0x6C, 0x00, 0xCC, 0xCC, 0x78, 0x30, 0x78, 0xCC, 0xCC, 0x00, 0xCC,
+0xCC, 0xCC, 0x78, 0x30, 0x30, 0x30, 0x00, 0xFC, 0x1C, 0x38, 0x30, 0x70, 0xE0, 0xFC, 0x00, 0xF0,
+0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xF0, 0x00, 0xC0, 0x60, 0x60, 0x30, 0x30, 0x18, 0x18, 0x0C, 0xF0,
+0x30, 0x30, 0x30, 0x30, 0x30, 0xF0, 0x00, 0x30, 0x78, 0xCC, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x80, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x7C, 0xCC, 0xCC, 0xCC, 0x74, 0x00, 0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0x00,
+0x00, 0x70, 0xC8, 0xC0, 0xC8, 0x70, 0x00, 0x0C, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, 0x00,
+0x00, 0x78, 0xCC, 0xFC, 0xC0, 0x78, 0x00, 0x60, 0xC0, 0xC0, 0xE0, 0xC0, 0xC0, 0xC0, 0x00, 0x00,
+0x00, 0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x78, 0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0xC0,
+0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x60, 0x00, 0x60, 0x60, 0x60, 0x60, 0x60, 0xC0, 0xC0,
+0xC0, 0xCC, 0xD8, 0xF0, 0xD8, 0xCC, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x60, 0x00, 0x00,
+0x00, 0xFC, 0xD6, 0xD6, 0xD6, 0xC6, 0x00, 0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x00,
+0x00, 0x78, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0x00,
+0x00, 0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x0C, 0x00, 0x00, 0xD8, 0xE0, 0xC0, 0xC0, 0xC0, 0x00, 0x00,
+0x00, 0x7C, 0xC0, 0x78, 0x0C, 0xF8, 0x00, 0xC0, 0xC0, 0xE0, 0xC0, 0xC0, 0xC0, 0x60, 0x00, 0x00,
+0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x00, 0x00,
+0x00, 0xC6, 0xD6, 0xD6, 0xD6, 0x7C, 0x00, 0x00, 0x00, 0xCC, 0x78, 0x30, 0x78, 0xCC, 0x00, 0x00,
+0x00, 0xCC, 0xCC, 0xCC, 0x7C, 0x0C, 0x78, 0x00, 0x00, 0xFC, 0x18, 0x30, 0x60, 0xFC, 0x00, 0x30,
+0x60, 0x60, 0xC0, 0x60, 0x60, 0x30, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0xC0,
+0x60, 0x60, 0x30, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x62, 0xD6, 0x8C, 0x00, 0x00, 0x00, 0xFC,
+0x84, 0x84, 0x84, 0x84, 0x84, 0xFC, 0x00, 0x81, 0x71, 0x00, 0x02, 0x46, 0x71, 0x00, 0x02, 0x45,
+0x45, 0x21, 0x01, 0x2F, 0x5F, 0x03, 0x29, 0x09, 0x98, 0x61, 0x01, 0x41, 0x2F, 0x5F, 0x2F, 0x5F,
+0x03, 0x29, 0x09, 0xA8, 0x61, 0x41, 0x81, 0x2F, 0x5F, 0x2F, 0x5F, 0x03, 0x29, 0x09, 0x8F, 0x61,
+0x81, 0xC1, 0x2F, 0x5F, 0x2F, 0x5F, 0x01, 0x29, 0x09, 0x9F, 0x21, 0xC1, 0x2F, 0x5F, 0x88, 0x81,
+0x53, 0x5F, 0x52, 0x21, 0x50, 0x28, 0x09, 0xAC, 0x81, 0x53, 0x21, 0x50, 0x28, 0x09, 0xAC, 0x81,
+0x53, 0x5F, 0x52, 0x21, 0x52, 0x28, 0x09, 0xAC, 0x81, 0x53, 0x21, 0x52, 0x84, 0xAF, 0x5E, 0x04,
+0x81, 0x4E, 0x50, 0x01, 0x4F, 0xBC, 0x40, 0xAF, 0x5E, 0x88, 0x47, 0xEE, 0x50, 0x79, 0x01, 0xC1,
+0xC5, 0xD0, 0x45, 0x45, 0x29, 0x0A, 0x9E, 0x79, 0x01, 0xC1, 0xD1, 0xEF, 0x50, 0x29, 0x09, 0xD3,
+0xEF, 0x50, 0x88, 0xEE, 0x50, 0x29, 0x09, 0xE6, 0xEF, 0x50, 0x88, 0x45, 0x45, 0x29, 0x0A, 0x9E,
+0x6E, 0x50, 0x46, 0x51, 0x6F, 0x50, 0x61, 0x0A, 0x1C, 0x6D, 0x09, 0xF6, 0x6D, 0x09, 0xF3, 0x28,
+0x09, 0xF9, 0x61, 0x00, 0x00, 0x29, 0x00, 0x00, 0x52, 0x44, 0x0C, 0x04, 0x2A, 0x09, 0xF2, 0x02,
+0x42, 0x88, 0x61, 0x00, 0x10, 0x28, 0x0A, 0x0B, 0x61, 0x00, 0x08, 0x45, 0x50, 0x46, 0x44, 0x4C,
+0x6F, 0x5C, 0x70, 0x00, 0x02, 0x57, 0x2A, 0x0A, 0x0E, 0x42, 0x42, 0x88, 0x07, 0x31, 0x20, 0x21,
+0x5F, 0x44, 0x14, 0x29, 0x0A, 0xC8, 0x26, 0x00, 0x45, 0x45, 0x78, 0x03, 0x50, 0x70, 0x00, 0x60,
+0x29, 0x0A, 0x08, 0x50, 0x0C, 0x26, 0x18, 0x6F, 0x5E, 0x88, 0xEE, 0x50, 0x81, 0x46, 0x71, 0x00,
+0x02, 0x46, 0x71, 0x00, 0x02, 0x21, 0x41, 0x2F, 0x5F, 0x44, 0x03, 0x29, 0x09, 0xA8, 0x45, 0x52,
+0x6E, 0x50, 0x50, 0x6F, 0x50, 0x44, 0x03, 0x29, 0x09, 0x9F, 0x21, 0xC1, 0x2F, 0x5F, 0x70, 0x00,
+0x02, 0x01, 0xD2, 0xEF, 0x50, 0x29, 0x0A, 0x79, 0x21, 0x81, 0x2F, 0x5F, 0x88, 0x21, 0x70, 0x2D,
+0x0A, 0x96, 0x2F, 0x5A, 0x21, 0x00, 0x28, 0x0A, 0x7E, 0x21, 0x60, 0x2D, 0x0A, 0x96, 0x04, 0x2F,
+0x5E, 0xEE, 0x52, 0xEE, 0x50, 0x81, 0x6E, 0x52, 0x50, 0x53, 0x6F, 0x52, 0x6E, 0x50, 0x50, 0x53,
+0x6F, 0x50, 0x01, 0x3E, 0x0F, 0x3C, 0x00, 0x2F, 0x5E, 0xEF, 0x50, 0xEF, 0x52, 0x88, 0x6D, 0x0A,
+0xB1, 0xC1, 0x24, 0x00, 0x28, 0x0A, 0xB6, 0x31, 0x20, 0x21, 0x5F, 0x44, 0x14, 0x29, 0x0A, 0xC8,
+0x70, 0x00, 0x00, 0x0C, 0x50, 0xD2, 0x24, 0x00, 0x43, 0x0C, 0x04, 0x2A, 0x0A, 0xA7, 0xC2, 0x02,
+0x42, 0x88, 0x2A, 0x0A, 0xC6, 0x46, 0x42, 0x88, 0x2A, 0x0A, 0xCC, 0x06, 0x02, 0x88, 0x1F, 0x41,
+0x0A, 0x88, 0x46, 0x70, 0x80, 0x00, 0x46, 0x70, 0x80, 0x00, 0x55, 0x88,
diff --git a/arm9/include/system-info.br.inc b/arm9/include/system-info.br.inc
new file mode 100644
index 0000000..bb64237
--- /dev/null
+++ b/arm9/include/system-info.br.inc
@@ -0,0 +1,308 @@
+0xE8, 0x00, 0x18, 0x42, 0x45, 0x44, 0x52, 0x4F, 0x43, 0x4B, 0x03, 0x19, 0x03, 0x2C, 0x03, 0x37,
+0x03, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x0F, 0xFC, 0x6F, 0x58, 0x61, 0x11, 0x33,
+0x6F, 0x58, 0x61, 0x21, 0x33, 0x6F, 0x58, 0x61, 0x34, 0x77, 0x6F, 0x58, 0x61, 0x03, 0x9B, 0x21,
+0x20, 0x21, 0x08, 0x21, 0x2F, 0x29, 0x02, 0x2A, 0x61, 0x03, 0xBC, 0x21, 0x20, 0x21, 0x08, 0x21,
+0x00, 0x29, 0x02, 0x2A, 0x61, 0x03, 0xDD, 0x29, 0x01, 0xFE, 0x61, 0x03, 0xFE, 0x29, 0x01, 0xFE,
+0x61, 0x04, 0x1F, 0x29, 0x01, 0xFE, 0x61, 0x04, 0x40, 0x29, 0x01, 0xFE, 0x64, 0x04, 0xB3, 0x21,
+0x20, 0x21, 0x04, 0x21, 0x00, 0x29, 0x02, 0x2A, 0x61, 0x05, 0xBB, 0x29, 0x02, 0x52, 0x6D, 0x05,
+0x4F, 0x64, 0x04, 0xD4, 0x21, 0x20, 0x21, 0x05, 0x21, 0x00, 0x29, 0x02, 0x2A, 0x61, 0x05, 0xC4,
+0x29, 0x02, 0x52, 0x6D, 0x05, 0x51, 0x64, 0x04, 0xF5, 0x21, 0x20, 0x21, 0x06, 0x21, 0x00, 0x29,
+0x02, 0x2A, 0x61, 0x05, 0xCD, 0x29, 0x02, 0x52, 0x6D, 0x05, 0x53, 0x64, 0x05, 0x16, 0x21, 0x20,
+0x21, 0x07, 0x21, 0x00, 0x29, 0x02, 0x2A, 0x61, 0x05, 0xD6, 0x29, 0x02, 0x52, 0x6D, 0x05, 0x55,
+0x6E, 0x54, 0x79, 0x01, 0x6D, 0x03, 0x15, 0x6E, 0x56, 0x79, 0x01, 0x6D, 0x03, 0x17, 0x21, 0x22,
+0x2F, 0x5E, 0x6C, 0x03, 0x15, 0x71, 0x00, 0x70, 0x6F, 0x50, 0x6C, 0x03, 0x17, 0x71, 0x00, 0x48,
+0x6F, 0x52, 0x61, 0x00, 0xA0, 0x61, 0x00, 0x90, 0x29, 0x02, 0x07, 0x6C, 0x03, 0x15, 0x70, 0x00,
+0x38, 0x6F, 0x50, 0x61, 0x00, 0x38, 0x61, 0x00, 0x90, 0x29, 0x02, 0x07, 0x6C, 0x03, 0x15, 0x71,
+0x00, 0x6A, 0x6F, 0x50, 0x6C, 0x03, 0x17, 0x71, 0x00, 0x42, 0x6F, 0x52, 0x21, 0x03, 0x2F, 0x5A,
+0x61, 0x03, 0x53, 0x61, 0x03, 0x03, 0x29, 0x10, 0x12, 0x21, 0x5C, 0x2F, 0x5F, 0x61, 0x00, 0x90,
+0x21, 0x03, 0x29, 0x11, 0x18, 0x6C, 0x03, 0x15, 0x71, 0x00, 0x48, 0x6F, 0x50, 0x6C, 0x03, 0x17,
+0x71, 0x00, 0x3F, 0x6F, 0x52, 0x21, 0x01, 0x2F, 0x5A, 0x61, 0x03, 0x9B, 0x61, 0x05, 0x57, 0x29,
+0x02, 0x52, 0x61, 0x05, 0xE7, 0x29, 0x10, 0x55, 0x21, 0x4B, 0x2F, 0x5F, 0x61, 0x05, 0x61, 0x61,
+0x09, 0x47, 0x29, 0x10, 0x68, 0x61, 0x03, 0xBC, 0x61, 0x05, 0x6A, 0x29, 0x02, 0x52, 0x61, 0x09,
+0x47, 0x29, 0x10, 0x55, 0x6C, 0x03, 0x15, 0x71, 0x00, 0x5C, 0x6F, 0x50, 0x6C, 0x03, 0x17, 0x71,
+0x00, 0x1C, 0x6F, 0x52, 0x61, 0x05, 0x6F, 0x61, 0x0C, 0xA7, 0x29, 0x10, 0x55, 0x21, 0x4B, 0x2F,
+0x5F, 0x61, 0x05, 0x78, 0x61, 0x0C, 0xA7, 0x29, 0x10, 0x55, 0x21, 0x4B, 0x2F, 0x5F, 0x61, 0x05,
+0x88, 0x61, 0x0C, 0xA7, 0x29, 0x10, 0x55, 0x21, 0xD7, 0x2F, 0x5F, 0x6C, 0x03, 0x15, 0x70, 0x00,
+0x10, 0x6F, 0x50, 0x6E, 0x0A, 0x29, 0x02, 0x5A, 0x29, 0x02, 0x6F, 0x2E, 0x0C, 0x29, 0x02, 0x66,
+0x29, 0x02, 0x6F, 0x2E, 0x0D, 0x29, 0x02, 0x66, 0x29, 0x02, 0x6F, 0x6C, 0x03, 0x15, 0x71, 0x00,
+0x62, 0x6F, 0x50, 0x6C, 0x03, 0x17, 0x70, 0x00, 0x0C, 0x6F, 0x52, 0x61, 0x05, 0xA0, 0x61, 0x0C,
+0xA7, 0x29, 0x10, 0x55, 0x61, 0x08, 0x4B, 0x2F, 0x5F, 0x2F, 0x5F, 0x61, 0x03, 0xDD, 0x29, 0x02,
+0x83, 0x61, 0x03, 0xFE, 0x29, 0x02, 0x89, 0x61, 0x04, 0x1F, 0x29, 0x02, 0x89, 0x61, 0x04, 0x40,
+0x29, 0x02, 0x89, 0x6C, 0x03, 0x15, 0x70, 0x00, 0x40, 0x6F, 0x50, 0x6C, 0x03, 0x17, 0x71, 0x00,
+0x42, 0x6F, 0x52, 0x29, 0x02, 0xAE, 0x61, 0x04, 0x00, 0x6F, 0x00, 0x28, 0x00, 0xB0, 0x21, 0x20,
+0x21, 0x09, 0x21, 0x0A, 0x28, 0x02, 0x2A, 0x45, 0x45, 0x21, 0x00, 0x29, 0x10, 0xD5, 0x61, 0x82,
+0xC2, 0x2F, 0x5F, 0x2F, 0x5F, 0x46, 0x70, 0x00, 0x04, 0x46, 0x70, 0x00, 0x04, 0x21, 0x03, 0x29,
+0x10, 0x84, 0x61, 0x02, 0x42, 0x2F, 0x5F, 0x2F, 0x5F, 0x88, 0x2D, 0x02, 0x39, 0x2D, 0x02, 0x36,
+0x26, 0x00, 0x45, 0x50, 0x46, 0x2E, 0x00, 0x04, 0x36, 0x00, 0x05, 0x36, 0x00, 0x1C, 0x2A, 0x02,
+0x4B, 0x81, 0xC3, 0x8D, 0x52, 0x57, 0x2A, 0x02, 0x35, 0x21, 0x00, 0x21, 0x00, 0x46, 0x0D, 0x02,
+0x42, 0x88, 0x45, 0x0C, 0x2A, 0x02, 0x58, 0x46, 0x42, 0x88, 0x44, 0x6A, 0x02, 0x63, 0x42, 0x61,
+0x05, 0x97, 0x88, 0x28, 0x11, 0x5E, 0x04, 0x36, 0x00, 0x3E, 0x01, 0x06, 0x28, 0x11, 0x5E, 0x61,
+0x09, 0x47, 0x29, 0x10, 0x5D, 0x61, 0x05, 0x9D, 0x61, 0x09, 0x47, 0x29, 0x10, 0x55, 0x21, 0x4B,
+0x2F, 0x5F, 0x88, 0x61, 0x05, 0xB1, 0x29, 0x02, 0x52, 0x44, 0x0C, 0x2A, 0x02, 0x90, 0x42, 0x88,
+0xEE, 0x50, 0x61, 0x05, 0xDF, 0x29, 0x10, 0xB5, 0x21, 0x88, 0x2F, 0x5F, 0x61, 0x18, 0x08, 0x6F,
+0x5E, 0x61, 0x09, 0x47, 0x29, 0x10, 0x68, 0xEF, 0x50, 0x21, 0x4B, 0x2F, 0x5F, 0x88, 0x61, 0x00,
+0x00, 0x44, 0x78, 0x01, 0x70, 0x05, 0x37, 0x4C, 0x45, 0x66, 0x80, 0x00, 0x1C, 0x59, 0x29, 0x02,
+0xD5, 0x52, 0x44, 0x7E, 0x00, 0x13, 0x76, 0x00, 0x00, 0x2B, 0x03, 0x04, 0x44, 0x74, 0x00, 0x10,
+0x2A, 0x02, 0xB1, 0x42, 0x88, 0x6E, 0x0E, 0x5E, 0x75, 0x00, 0x00, 0x04, 0x2B, 0x02, 0xF0, 0x1F,
+0x3E, 0x02, 0x12, 0x2F, 0x5A, 0x61, 0x0C, 0xA7, 0x29, 0x10, 0x55, 0x21, 0x47, 0x2F, 0x5F, 0x88,
+0x21, 0x84, 0x2F, 0x5F, 0x61, 0x00, 0x02, 0x61, 0x00, 0x06, 0x21, 0x01, 0x29, 0x10, 0xD5, 0x21,
+0x04, 0x2F, 0x5F, 0x88, 0x21, 0x42, 0x2F, 0x5F, 0x61, 0x00, 0x20, 0x21, 0x03, 0x29, 0x11, 0x18,
+0x21, 0x45, 0x2F, 0x5F, 0x88, 0x00, 0x00, 0x00, 0x00, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x20,
+0x69, 0x6E, 0x66, 0x6F, 0x72, 0x6D, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x00, 0x42, 0x65, 0x6E, 0x20,
+0x42, 0x72, 0x69, 0x64, 0x6C, 0x65, 0x00, 0x44, 0x69, 0x73, 0x70, 0x6C, 0x61, 0x79, 0x20, 0x73,
+0x79, 0x73, 0x74, 0x65, 0x6D, 0x20, 0x69, 0x6E, 0x66, 0x6F, 0x72, 0x6D, 0x61, 0x74, 0x69, 0x6F,
+0x6E, 0x2E, 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x7F, 0x00, 0xFF, 0xE3, 0xC1, 0xC1,
+0x41, 0x22, 0xFF, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0xFE, 0x7F, 0x7F, 0x7F, 0x01, 0x00,
+0x7F, 0x7F, 0x7F, 0xC3, 0x81, 0x21, 0xE1, 0x23, 0xE3, 0xC3, 0xC3, 0xFE, 0xFE, 0xFE, 0x00, 0x00,
+0xFE, 0xFE, 0xFE, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x00, 0xC7, 0x87, 0x87, 0x84, 0x81,
+0xC3, 0xFF, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x00, 0x4D, 0x65, 0x6D, 0x6F, 0x72, 0x79, 0x00, 0x4D,
+0x61, 0x74, 0x68, 0x00, 0x43, 0x6C, 0x6F, 0x63, 0x6B, 0x00, 0x49, 0x6E, 0x70, 0x75, 0x74, 0x00,
+0x53, 0x63, 0x72, 0x65, 0x65, 0x6E, 0x00, 0x54, 0x6F, 0x6E, 0x65, 0x00, 0x53, 0x61, 0x6D, 0x70,
+0x6C, 0x65, 0x72, 0x00, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6D, 0x00, 0x46, 0x69, 0x6C, 0x65, 0x00,
+0x43, 0x6C, 0x69, 0x70, 0x62, 0x6F, 0x61, 0x72, 0x64, 0x00, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74,
+0x72, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x61, 0x04, 0x68, 0x04, 0x6F, 0x04, 0x74, 0x04,
+0x7A, 0x04, 0x80, 0x04, 0x87, 0x04, 0x8C, 0x04, 0x94, 0x04, 0x9B, 0x04, 0xA0, 0x04, 0xAA, 0x04,
+0xB3, 0x04, 0xD4, 0x04, 0xF5, 0x05, 0x16, 0x28, 0x6E, 0x6F, 0x20, 0x6E, 0x61, 0x6D, 0x65, 0x29,
+0x00, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x20, 0x00, 0x7A, 0x65, 0x72, 0x6F, 0x00, 0x4D,
+0x65, 0x6D, 0x6F, 0x72, 0x79, 0x3A, 0x20, 0x00, 0x57, 0x6F, 0x72, 0x6B, 0x69, 0x6E, 0x67, 0x20,
+0x73, 0x74, 0x61, 0x63, 0x6B, 0x3A, 0x20, 0x00, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x20, 0x73,
+0x74, 0x61, 0x63, 0x6B, 0x3A, 0x20, 0x00, 0x36, 0x35, 0x35, 0x33, 0x36, 0x00, 0x20, 0x42, 0x00,
+0x49, 0x6D, 0x70, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x3A, 0x20,
+0x00, 0x41, 0x6E, 0x6F, 0x6E, 0x79, 0x6D, 0x6F, 0x75, 0x73, 0x00, 0x43, 0x75, 0x73, 0x74, 0x6F,
+0x6D, 0x20, 0x31, 0x00, 0x43, 0x75, 0x73, 0x74, 0x6F, 0x6D, 0x20, 0x32, 0x00, 0x43, 0x75, 0x73,
+0x74, 0x6F, 0x6D, 0x20, 0x33, 0x00, 0x43, 0x75, 0x73, 0x74, 0x6F, 0x6D, 0x20, 0x34, 0x00, 0x00,
+0x00, 0x60, 0xF0, 0xF0, 0x60, 0x00, 0x00, 0x05, 0x05, 0x06, 0x08, 0x08, 0x07, 0x08, 0x04, 0x05,
+0x05, 0x08, 0x07, 0x04, 0x05, 0x03, 0x07, 0x07, 0x05, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+0x07, 0x03, 0x04, 0x06, 0x05, 0x06, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x06, 0x06, 0x07, 0x07,
+0x03, 0x07, 0x07, 0x06, 0x08, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x08, 0x07,
+0x07, 0x07, 0x05, 0x07, 0x05, 0x07, 0x07, 0x04, 0x07, 0x07, 0x06, 0x07, 0x07, 0x04, 0x07, 0x07,
+0x03, 0x04, 0x07, 0x04, 0x08, 0x07, 0x07, 0x07, 0x07, 0x06, 0x07, 0x04, 0x07, 0x07, 0x08, 0x07,
+0x07, 0x07, 0x05, 0x02, 0x05, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
+0xF0, 0xF0, 0x60, 0x60, 0x00, 0x60, 0x00, 0xD8, 0xD8, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C,
+0x6C, 0xFE, 0x6C, 0xFE, 0x6C, 0x6C, 0x00, 0x10, 0x7C, 0xE0, 0x7C, 0x0E, 0x7C, 0x10, 0x00, 0xC4,
+0xCC, 0x18, 0x30, 0x60, 0xCC, 0x8C, 0x00, 0x70, 0xC8, 0xC0, 0x70, 0xDA, 0xCC, 0x76, 0x00, 0x60,
+0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xC0, 0xC0, 0xC0, 0x60, 0x30, 0x00, 0xC0,
+0x60, 0x30, 0x30, 0x30, 0x60, 0xC0, 0x00, 0x6C, 0x38, 0xFE, 0x38, 0x6C, 0x00, 0x00, 0x00, 0x00,
+0x30, 0x30, 0xFC, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0xC0, 0x00,
+0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x0C,
+0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0xC0, 0x78, 0xCC, 0xDC, 0xFC, 0xEC, 0xCC, 0x78, 0x00, 0x60,
+0xE0, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x78, 0xCC, 0x0C, 0x38, 0x60, 0xC0, 0xFC, 0x00, 0x78,
+0xCC, 0x0C, 0x38, 0x0C, 0xCC, 0x78, 0x00, 0x18, 0x38, 0x78, 0xD8, 0xFC, 0x18, 0x18, 0x00, 0xFC,
+0xC0, 0xF8, 0x0C, 0x0C, 0xCC, 0x78, 0x00, 0x38, 0x60, 0xC0, 0xF8, 0xCC, 0xCC, 0x78, 0x00, 0xFC,
+0x0C, 0x0C, 0x18, 0x18, 0x30, 0x30, 0x00, 0x78, 0xCC, 0xCC, 0x78, 0xCC, 0xCC, 0x78, 0x00, 0x78,
+0xCC, 0xCC, 0x7C, 0x0C, 0x18, 0x70, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00,
+0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0xC0, 0x18, 0x30, 0x60, 0xC0, 0x60, 0x30, 0x18, 0x00, 0x00,
+0x00, 0xF0, 0x00, 0xF0, 0x00, 0x00, 0x00, 0xC0, 0x60, 0x30, 0x18, 0x30, 0x60, 0xC0, 0x00, 0x78,
+0x8C, 0x1C, 0x38, 0x30, 0x00, 0x30, 0x00, 0x78, 0xCC, 0xDC, 0xD4, 0xDC, 0xC0, 0x78, 0x00, 0x78,
+0xCC, 0xCC, 0xCC, 0xFC, 0xCC, 0xCC, 0x00, 0xF8, 0xCC, 0xCC, 0xF8, 0xCC, 0xCC, 0xF8, 0x00, 0x78,
+0xCC, 0xC0, 0xC0, 0xC0, 0xCC, 0x78, 0x00, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0xF8,
+0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xF8, 0x00, 0xF8, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xC0, 0x00, 0x78,
+0xCC, 0xC0, 0xDC, 0xCC, 0xCC, 0x78, 0x00, 0xCC, 0xCC, 0xCC, 0xFC, 0xCC, 0xCC, 0xCC, 0x00, 0xC0,
+0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0x78, 0x00, 0xCC,
+0xCC, 0xD8, 0xF0, 0xD8, 0xCC, 0xCC, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xF8, 0x00, 0xC6,
+0xEE, 0xFE, 0xD6, 0xC6, 0xC6, 0xC6, 0x00, 0xCC, 0xCC, 0xEC, 0xFC, 0xDC, 0xCC, 0xCC, 0x00, 0x78,
+0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0xF8, 0xCC, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0x00, 0x78,
+0xCC, 0xCC, 0xCC, 0xDC, 0xD8, 0x6C, 0x00, 0xF8, 0xCC, 0xCC, 0xF8, 0xCC, 0xCC, 0xCC, 0x00, 0x78,
+0xCC, 0xC0, 0x78, 0x0C, 0xCC, 0x78, 0x00, 0xFC, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0xCC,
+0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x00, 0xC6,
+0xC6, 0xC6, 0xD6, 0xD6, 0xFE, 0x6C, 0x00, 0xCC, 0xCC, 0x78, 0x30, 0x78, 0xCC, 0xCC, 0x00, 0xCC,
+0xCC, 0xCC, 0x78, 0x30, 0x30, 0x30, 0x00, 0xFC, 0x1C, 0x38, 0x30, 0x70, 0xE0, 0xFC, 0x00, 0xF0,
+0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xF0, 0x00, 0xC0, 0x60, 0x60, 0x30, 0x30, 0x18, 0x18, 0x0C, 0xF0,
+0x30, 0x30, 0x30, 0x30, 0x30, 0xF0, 0x00, 0x30, 0x78, 0xCC, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x80, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x7C, 0xCC, 0xCC, 0xCC, 0x74, 0x00, 0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0x00,
+0x00, 0x70, 0xC8, 0xC0, 0xC8, 0x70, 0x00, 0x0C, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, 0x00,
+0x00, 0x78, 0xCC, 0xFC, 0xC0, 0x78, 0x00, 0x60, 0xC0, 0xC0, 0xE0, 0xC0, 0xC0, 0xC0, 0x00, 0x00,
+0x00, 0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x78, 0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0xC0,
+0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x60, 0x00, 0x60, 0x60, 0x60, 0x60, 0x60, 0xC0, 0xC0,
+0xC0, 0xCC, 0xD8, 0xF0, 0xD8, 0xCC, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x60, 0x00, 0x00,
+0x00, 0xFC, 0xD6, 0xD6, 0xD6, 0xC6, 0x00, 0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x00,
+0x00, 0x78, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0x00,
+0x00, 0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x0C, 0x00, 0x00, 0xD8, 0xE0, 0xC0, 0xC0, 0xC0, 0x00, 0x00,
+0x00, 0x7C, 0xC0, 0x78, 0x0C, 0xF8, 0x00, 0xC0, 0xC0, 0xE0, 0xC0, 0xC0, 0xC0, 0x60, 0x00, 0x00,
+0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x00, 0x00,
+0x00, 0xC6, 0xD6, 0xD6, 0xD6, 0x7C, 0x00, 0x00, 0x00, 0xCC, 0x78, 0x30, 0x78, 0xCC, 0x00, 0x00,
+0x00, 0xCC, 0xCC, 0xCC, 0x7C, 0x0C, 0x78, 0x00, 0x00, 0xFC, 0x18, 0x30, 0x60, 0xFC, 0x00, 0x30,
+0x60, 0x60, 0xC0, 0x60, 0x60, 0x30, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0xC0,
+0x60, 0x60, 0x30, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x62, 0xD6, 0x8C, 0x00, 0x00, 0x00, 0xFC,
+0x84, 0x84, 0x84, 0x84, 0x84, 0xFC, 0x00, 0x04, 0x02, 0x04, 0x06, 0x06, 0x08, 0x06, 0x02, 0x04,
+0x04, 0x05, 0x06, 0x03, 0x05, 0x02, 0x04, 0x06, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+0x06, 0x02, 0x03, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+0x04, 0x06, 0x06, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+0x06, 0x06, 0x04, 0x06, 0x04, 0x06, 0x06, 0x04, 0x05, 0x05, 0x05, 0x05, 0x05, 0x03, 0x05, 0x05,
+0x02, 0x03, 0x05, 0x03, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x03, 0x05, 0x05, 0x06, 0x05,
+0x05, 0x05, 0x04, 0x02, 0x04, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x00, 0xA0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50,
+0x50, 0xF8, 0x50, 0xF8, 0x50, 0x50, 0x00, 0x20, 0x70, 0xA0, 0x70, 0x28, 0x70, 0x20, 0x00, 0xC2,
+0xC4, 0x08, 0x10, 0x20, 0x46, 0x86, 0x00, 0x60, 0x80, 0x80, 0x40, 0xA8, 0x90, 0x68, 0x00, 0x80,
+0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x40, 0x80, 0x80, 0x80, 0x40, 0x20, 0x00, 0x80,
+0x40, 0x20, 0x20, 0x20, 0x40, 0x80, 0x00, 0x90, 0x60, 0xF0, 0x60, 0x90, 0x00, 0x00, 0x00, 0x00,
+0x20, 0x20, 0xF8, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x00,
+0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x20,
+0x20, 0x40, 0x40, 0x40, 0x80, 0x80, 0x00, 0x70, 0x88, 0x98, 0xA8, 0xC8, 0x88, 0x70, 0x00, 0x40,
+0xC0, 0x40, 0x40, 0x40, 0x40, 0xE0, 0x00, 0x70, 0x88, 0x08, 0x30, 0x40, 0x80, 0xF8, 0x00, 0x70,
+0x88, 0x08, 0x30, 0x08, 0x88, 0x70, 0x00, 0x30, 0x50, 0x90, 0x90, 0xF8, 0x10, 0x10, 0x00, 0xF8,
+0x80, 0xF0, 0x08, 0x08, 0x88, 0x70, 0x00, 0x30, 0x40, 0x80, 0xF0, 0x88, 0x88, 0x70, 0x00, 0xF8,
+0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x00, 0x70, 0x88, 0x88, 0x70, 0x88, 0x88, 0x70, 0x00, 0x70,
+0x88, 0x88, 0x78, 0x08, 0x10, 0x60, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x80, 0x10, 0x20, 0x40, 0x80, 0x40, 0x20, 0x10, 0x00, 0x00,
+0x00, 0xF0, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x20, 0x40, 0x80, 0x00, 0x70,
+0x88, 0x08, 0x10, 0x20, 0x00, 0x20, 0x00, 0x70, 0x88, 0xB8, 0xD8, 0xB8, 0x80, 0x70, 0x00, 0x70,
+0x88, 0x88, 0x88, 0xF8, 0x88, 0x88, 0x00, 0xF0, 0x88, 0x88, 0xF0, 0x88, 0x88, 0xF0, 0x00, 0x70,
+0x88, 0x80, 0x80, 0x80, 0x88, 0x70, 0x00, 0xF0, 0x88, 0x88, 0x88, 0x88, 0x88, 0xF0, 0x00, 0xF8,
+0x80, 0x80, 0xF0, 0x80, 0x80, 0xF8, 0x00, 0xF8, 0x80, 0x80, 0xF0, 0x80, 0x80, 0x80, 0x00, 0x70,
+0x88, 0x80, 0x98, 0x88, 0x88, 0x70, 0x00, 0x88, 0x88, 0x88, 0xF8, 0x88, 0x88, 0x88, 0x00, 0xE0,
+0x40, 0x40, 0x40, 0x40, 0x40, 0xE0, 0x00, 0x38, 0x08, 0x08, 0x08, 0x08, 0x88, 0x70, 0x00, 0x88,
+0x88, 0x90, 0xE0, 0x90, 0x88, 0x88, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xF0, 0x00, 0x88,
+0xD8, 0xA8, 0xA8, 0x88, 0x88, 0x88, 0x00, 0x88, 0xC8, 0xA8, 0x98, 0x88, 0x88, 0x88, 0x00, 0x70,
+0x88, 0x88, 0x88, 0x88, 0x88, 0x70, 0x00, 0xF0, 0x88, 0x88, 0x88, 0xF0, 0x80, 0x80, 0x00, 0x70,
+0x88, 0x88, 0x88, 0xA8, 0x90, 0x68, 0x00, 0xF0, 0x88, 0x88, 0xF0, 0x88, 0x88, 0x88, 0x00, 0x70,
+0x88, 0x80, 0x70, 0x08, 0x88, 0x70, 0x00, 0xF8, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x88,
+0x88, 0x88, 0x88, 0x88, 0x88, 0x70, 0x00, 0x88, 0x88, 0x88, 0x88, 0x50, 0x50, 0x20, 0x00, 0x88,
+0x88, 0x88, 0xA8, 0xA8, 0xA8, 0x50, 0x00, 0x88, 0x88, 0x50, 0x20, 0x50, 0x88, 0x88, 0x00, 0x88,
+0x88, 0x88, 0x50, 0x20, 0x20, 0x20, 0x00, 0xF8, 0x08, 0x10, 0x20, 0x40, 0x80, 0xF8, 0x00, 0xE0,
+0x80, 0x80, 0x80, 0x80, 0x80, 0xE0, 0x00, 0x80, 0x40, 0x40, 0x20, 0x10, 0x10, 0x08, 0x00, 0xE0,
+0x20, 0x20, 0x20, 0x20, 0x20, 0xE0, 0x00, 0x20, 0x50, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x80, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x70, 0x90, 0x90, 0x90, 0x70, 0x00, 0x80, 0x80, 0xE0, 0x90, 0x90, 0x90, 0xE0, 0x00, 0x00,
+0x00, 0x60, 0x90, 0x80, 0x90, 0x60, 0x00, 0x10, 0x10, 0x70, 0x90, 0x90, 0x90, 0x70, 0x00, 0x00,
+0x00, 0x60, 0x90, 0xF0, 0x80, 0x70, 0x00, 0x40, 0x80, 0xC0, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
+0x00, 0x70, 0x90, 0x90, 0x70, 0x10, 0x60, 0x80, 0x80, 0xE0, 0x90, 0x90, 0x90, 0x90, 0x00, 0x80,
+0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x40, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80,
+0x80, 0x90, 0xA0, 0xE0, 0x90, 0x90, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0x00, 0x00,
+0x00, 0xF0, 0xA8, 0xA8, 0xA8, 0xA8, 0x00, 0x00, 0x00, 0xE0, 0x90, 0x90, 0x90, 0x90, 0x00, 0x00,
+0x00, 0x60, 0x90, 0x90, 0x90, 0x60, 0x00, 0x00, 0x00, 0xE0, 0x90, 0x90, 0xE0, 0x80, 0x80, 0x00,
+0x00, 0x70, 0x90, 0x90, 0x70, 0x10, 0x10, 0x00, 0x00, 0xB0, 0xC0, 0x80, 0x80, 0x80, 0x00, 0x00,
+0x00, 0x70, 0x80, 0x60, 0x10, 0xE0, 0x00, 0x80, 0x80, 0xC0, 0x80, 0x80, 0x80, 0x40, 0x00, 0x00,
+0x00, 0x90, 0x90, 0x90, 0x90, 0x70, 0x00, 0x00, 0x00, 0x90, 0x90, 0x90, 0x50, 0x20, 0x00, 0x00,
+0x00, 0x88, 0x88, 0xA8, 0xA8, 0x50, 0x00, 0x00, 0x00, 0x90, 0x90, 0x60, 0x90, 0x90, 0x00, 0x00,
+0x00, 0x90, 0x90, 0x90, 0x70, 0x10, 0x60, 0x00, 0x00, 0xF0, 0x10, 0x60, 0x80, 0xF0, 0x00, 0x20,
+0x40, 0x40, 0x80, 0x40, 0x40, 0x20, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80,
+0x40, 0x40, 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x62, 0x92, 0x8C, 0x00, 0x00, 0x00, 0xF8,
+0x88, 0x88, 0x88, 0x88, 0x88, 0xF8, 0x00, 0x04, 0x02, 0x04, 0x06, 0x06, 0x06, 0x05, 0x02, 0x03,
+0x03, 0x05, 0x06, 0x03, 0x05, 0x02, 0x04, 0x05, 0x04, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
+0x05, 0x02, 0x03, 0x04, 0x05, 0x04, 0x05, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
+0x04, 0x05, 0x05, 0x05, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x06, 0x05, 0x06, 0x06, 0x05,
+0x06, 0x05, 0x03, 0x04, 0x03, 0x04, 0x05, 0x03, 0x05, 0x05, 0x04, 0x05, 0x05, 0x04, 0x05, 0x05,
+0x02, 0x03, 0x05, 0x03, 0x06, 0x05, 0x05, 0x05, 0x06, 0x05, 0x05, 0x04, 0x05, 0x05, 0x06, 0x05,
+0x05, 0x05, 0x04, 0x02, 0x04, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0xA0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50,
+0xF8, 0x50, 0xF8, 0x50, 0x00, 0x00, 0x00, 0x20, 0x70, 0xA0, 0x70, 0x28, 0x70, 0x20, 0x00, 0xC8,
+0xD0, 0x20, 0x58, 0x98, 0x00, 0x00, 0x00, 0x00, 0x20, 0x70, 0xA0, 0x70, 0x00, 0x00, 0x00, 0x80,
+0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x80, 0x80, 0x40, 0x00, 0x00, 0x00, 0x80,
+0x40, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x90, 0x60, 0x60, 0x90, 0x00, 0x00, 0x00, 0x00, 0x20,
+0x20, 0xF8, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x20,
+0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x60, 0x90, 0x90, 0x90, 0x60, 0x00, 0x00, 0x00, 0x40,
+0xC0, 0x40, 0x40, 0xE0, 0x00, 0x00, 0x00, 0x60, 0x90, 0x20, 0x40, 0xF0, 0x00, 0x00, 0x00, 0x60,
+0x90, 0x20, 0x90, 0x60, 0x00, 0x00, 0x00, 0x20, 0x60, 0xA0, 0xF0, 0x20, 0x00, 0x00, 0x00, 0xF0,
+0x80, 0xF0, 0x10, 0xE0, 0x00, 0x00, 0x00, 0x60, 0x80, 0xE0, 0x90, 0x60, 0x00, 0x00, 0x00, 0xF0,
+0x10, 0x20, 0x40, 0x40, 0x00, 0x00, 0x00, 0x60, 0x90, 0x60, 0x90, 0x60, 0x00, 0x00, 0x00, 0x60,
+0x90, 0x70, 0x10, 0x60, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
+0x40, 0x00, 0x40, 0x80, 0x00, 0x00, 0x00, 0x20, 0x40, 0x80, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00,
+0xF0, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x60,
+0x90, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x70, 0x88, 0xB8, 0xA8, 0x70, 0x00, 0x00, 0x00, 0x60,
+0x90, 0x90, 0xF0, 0x90, 0x00, 0x00, 0x00, 0xE0, 0x90, 0xE0, 0x90, 0xF0, 0x00, 0x00, 0x00, 0x60,
+0x90, 0x80, 0x90, 0x60, 0x00, 0x00, 0x00, 0xE0, 0x90, 0x90, 0x90, 0xE0, 0x00, 0x00, 0x00, 0xF0,
+0x80, 0xE0, 0x80, 0xF0, 0x00, 0x00, 0x00, 0xF0, 0x80, 0xE0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x70,
+0x80, 0xB0, 0x90, 0x70, 0x00, 0x00, 0x00, 0x90, 0x90, 0xF0, 0x90, 0x90, 0x00, 0x00, 0x00, 0xE0,
+0x40, 0x40, 0x40, 0xE0, 0x00, 0x00, 0x00, 0x70, 0x10, 0x10, 0x90, 0x60, 0x00, 0x00, 0x00, 0x90,
+0xA0, 0xC0, 0xA0, 0x90, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0xF0, 0x00, 0x00, 0x00, 0x88,
+0xD8, 0xA8, 0x88, 0x88, 0x00, 0x00, 0x00, 0x90, 0xD0, 0xB0, 0x90, 0x90, 0x00, 0x00, 0x00, 0x60,
+0x90, 0x90, 0x90, 0x60, 0x00, 0x00, 0x00, 0xE0, 0x90, 0x90, 0xE0, 0x80, 0x00, 0x00, 0x00, 0x60,
+0x90, 0x90, 0xB0, 0x70, 0x00, 0x00, 0x00, 0xE0, 0x90, 0x90, 0xE0, 0x90, 0x00, 0x00, 0x00, 0x70,
+0x80, 0x60, 0x10, 0xE0, 0x00, 0x00, 0x00, 0xF8, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x90,
+0x90, 0x90, 0x90, 0x60, 0x00, 0x00, 0x00, 0x88, 0x88, 0x50, 0x50, 0x20, 0x00, 0x00, 0x00, 0x88,
+0x88, 0xA8, 0xA8, 0x50, 0x00, 0x00, 0x00, 0x90, 0x90, 0x60, 0x90, 0x90, 0x00, 0x00, 0x00, 0x88,
+0x88, 0x50, 0x20, 0x20, 0x00, 0x00, 0x00, 0xF0, 0x10, 0x60, 0x80, 0xF0, 0x00, 0x00, 0x00, 0xC0,
+0x80, 0x80, 0x80, 0xC0, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x20, 0x20, 0x00, 0x00, 0x00, 0xC0,
+0x40, 0x40, 0x40, 0xC0, 0x00, 0x00, 0x00, 0x40, 0xE0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x70, 0x90, 0x90, 0x70, 0x00, 0x00, 0x00, 0x80, 0xE0, 0x90, 0x90, 0xE0, 0x00, 0x00, 0x00, 0x00,
+0x60, 0x80, 0x80, 0x60, 0x00, 0x00, 0x00, 0x10, 0x70, 0x90, 0x90, 0x70, 0x00, 0x00, 0x00, 0x00,
+0x60, 0xF0, 0x80, 0x70, 0x00, 0x00, 0x00, 0x20, 0x40, 0xE0, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00,
+0x70, 0x90, 0x70, 0x10, 0xE0, 0x00, 0x00, 0x80, 0xE0, 0x90, 0x90, 0x90, 0x00, 0x00, 0x00, 0x80,
+0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x40, 0x40, 0x80, 0x00, 0x00, 0x80,
+0x80, 0xE0, 0xE0, 0x90, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00,
+0x50, 0xA8, 0xA8, 0x88, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x90, 0x90, 0x90, 0x00, 0x00, 0x00, 0x00,
+0x60, 0x90, 0x90, 0x60, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x90, 0x90, 0xE0, 0x80, 0x00, 0x00, 0x00,
+0x70, 0x90, 0x90, 0x70, 0x18, 0x00, 0x00, 0x00, 0xA0, 0xD0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
+0x60, 0xE0, 0x10, 0xE0, 0x00, 0x00, 0x00, 0x40, 0xE0, 0x40, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00,
+0x90, 0x90, 0x90, 0x70, 0x00, 0x00, 0x00, 0x00, 0x90, 0x90, 0x50, 0x60, 0x00, 0x00, 0x00, 0x00,
+0x88, 0xA8, 0xA8, 0x50, 0x00, 0x00, 0x00, 0x00, 0x90, 0x60, 0x20, 0x90, 0x00, 0x00, 0x00, 0x00,
+0x90, 0x90, 0x70, 0x10, 0xE0, 0x00, 0x00, 0x00, 0xF0, 0x20, 0x40, 0xF0, 0x00, 0x00, 0x00, 0x60,
+0x40, 0xC0, 0x40, 0x60, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0xC0,
+0x40, 0x60, 0x40, 0xC0, 0x00, 0x00, 0x00, 0x40, 0xA8, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0,
+0x90, 0x90, 0x90, 0xF0, 0x00, 0x00, 0x00, 0x61, 0x10, 0xAF, 0x61, 0x00, 0x10, 0x21, 0x38, 0x28,
+0x10, 0x1A, 0x61, 0x10, 0xB5, 0x61, 0x00, 0x08, 0x21, 0x18, 0xEE, 0x52, 0xEE, 0x50, 0x2D, 0x10,
+0x36, 0x6D, 0x10, 0x3B, 0x6D, 0x10, 0x33, 0x2D, 0x10, 0x2E, 0x2D, 0x10, 0x30, 0xA1, 0x00, 0xA1,
+0x00, 0x44, 0x29, 0x00, 0x00, 0x61, 0x00, 0x08, 0x6F, 0x5E, 0x70, 0x00, 0x00, 0x93, 0x84, 0xAA,
+0x10, 0x31, 0xC5, 0xEF, 0x50, 0x82, 0x21, 0x48, 0x2F, 0x5F, 0x93, 0x84, 0xAA, 0x10, 0x2F, 0x82,
+0xC2, 0xEF, 0x52, 0x42, 0x88, 0xEE, 0x50, 0x29, 0x10, 0x68, 0xEF, 0x50, 0x88, 0x45, 0x45, 0x29,
+0x11, 0x2C, 0x6E, 0x50, 0x46, 0x51, 0x6F, 0x50, 0x61, 0x10, 0xFA, 0x6D, 0x10, 0x78, 0x6D, 0x10,
+0x75, 0x28, 0x10, 0x7B, 0x61, 0x00, 0x00, 0x29, 0x00, 0x00, 0x52, 0x44, 0x0C, 0x04, 0x2A, 0x10,
+0x74, 0x02, 0x42, 0x88, 0x04, 0x2F, 0x5E, 0x3C, 0x40, 0x2D, 0x10, 0xAB, 0xEE, 0x52, 0xC1, 0xC5,
+0xD3, 0xD0, 0xEF, 0x52, 0x29, 0x10, 0xAA, 0xEE, 0x50, 0xC1, 0xC5, 0xD3, 0xD0, 0xEF, 0x50, 0x29,
+0x10, 0xAA, 0xC6, 0xEF, 0x52, 0x29, 0x10, 0xAA, 0xEF, 0x50, 0x21, 0x00, 0x2F, 0x5E, 0x88, 0x61,
+0x00, 0x10, 0x28, 0x10, 0xB8, 0x61, 0x00, 0x08, 0x45, 0x50, 0x46, 0x44, 0x4C, 0x6F, 0x5C, 0x70,
+0x00, 0x02, 0x57, 0x2A, 0x10, 0xBB, 0x42, 0x42, 0x88, 0x21, 0x70, 0x2D, 0x10, 0xF2, 0x2F, 0x5A,
+0x21, 0x00, 0x28, 0x10, 0xDA, 0x21, 0x60, 0x2D, 0x10, 0xF2, 0x04, 0x2F, 0x5E, 0xEE, 0x52, 0xEE,
+0x50, 0x81, 0x6E, 0x52, 0x50, 0x53, 0x6F, 0x52, 0x6E, 0x50, 0x50, 0x53, 0x6F, 0x50, 0x01, 0x3E,
+0x0F, 0x3C, 0x00, 0x2F, 0x5E, 0xEF, 0x50, 0xEF, 0x52, 0x88, 0x07, 0x31, 0x20, 0x21, 0x5F, 0x44,
+0x14, 0x29, 0x11, 0x56, 0x26, 0x00, 0x45, 0x45, 0x78, 0x03, 0x50, 0x70, 0x00, 0x60, 0x29, 0x10,
+0xB5, 0x50, 0x0C, 0x26, 0x18, 0x6F, 0x5E, 0x88, 0x04, 0x2F, 0x5E, 0x81, 0x6E, 0x50, 0x46, 0x45,
+0x53, 0x50, 0x6F, 0x50, 0x01, 0x3C, 0x40, 0x2F, 0x5E, 0x6F, 0x50, 0x88, 0x6D, 0x11, 0x3F, 0xC1,
+0x24, 0x00, 0x28, 0x11, 0x44, 0x31, 0x20, 0x21, 0x5F, 0x44, 0x14, 0x29, 0x11, 0x56, 0x70, 0x00,
+0x00, 0x0C, 0x50, 0xD2, 0x24, 0x00, 0x43, 0x0C, 0x04, 0x2A, 0x11, 0x35, 0xC2, 0x02, 0x42, 0x88,
+0x2A, 0x11, 0x54, 0x46, 0x42, 0x88, 0x2A, 0x11, 0x5A, 0x06, 0x02, 0x88, 0x26, 0x00, 0x44, 0x6A,
+0x11, 0x6A, 0x42, 0xA1, 0x30, 0xE3, 0x11, 0xCD, 0x8D, 0x88, 0x61, 0x11, 0xC9, 0x61, 0x11, 0xCE,
+0x29, 0x11, 0xCF, 0x44, 0x29, 0x12, 0x0C, 0x04, 0x2D, 0x11, 0x7E, 0x58, 0xE1, 0x10, 0x00, 0x7A,
+0x01, 0x04, 0x3E, 0x01, 0xE1, 0x11, 0xC9, 0xE1, 0x11, 0xCE, 0xD3, 0xC4, 0x8C, 0x84, 0xB5, 0x04,
+0xBE, 0x03, 0x90, 0xB8, 0x01, 0x81, 0x90, 0x84, 0xBE, 0x0F, 0xC5, 0x8D, 0x01, 0x39, 0x04, 0xD7,
+0xAA, 0x11, 0x8A, 0xC2, 0xC2, 0x02, 0x92, 0x97, 0xAA, 0x11, 0x7F, 0xC2, 0x42, 0x61, 0x11, 0xC9,
+0x61, 0x11, 0xCE, 0x53, 0xC3, 0x8C, 0xBC, 0x30, 0xC3, 0x8D, 0x57, 0x2A, 0x11, 0xB3, 0x42, 0x53,
+0x52, 0x44, 0x0C, 0x36, 0x30, 0x2A, 0x11, 0xC0, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45,
+0x45, 0x46, 0x51, 0x7E, 0x00, 0x01, 0x2A, 0x11, 0xEF, 0x21, 0x00, 0x6D, 0x11, 0xE5, 0x28, 0x11,
+0xE8, 0x71, 0x00, 0x02, 0x65, 0x00, 0x00, 0x4D, 0x57, 0x2A, 0x11, 0xE1, 0x42, 0x42, 0x88, 0x2D,
+0x11, 0xF8, 0x28, 0x11, 0xFB, 0x53, 0x65, 0x00, 0x00, 0x0D, 0x02, 0x57, 0x2A, 0x11, 0xF5, 0x42,
+0x42, 0x88, 0x46, 0x70, 0x80, 0x00, 0x46, 0x70, 0x80, 0x00, 0x55, 0x88, 0x44, 0x79, 0x01, 0x5C,
+0x44, 0x79, 0x02, 0x5C, 0x44, 0x79, 0x04, 0x5C, 0x44, 0x79, 0x08, 0x5C, 0x28, 0x12, 0x1F, 0x5F,
+0x26, 0x00, 0x70, 0x12, 0x36, 0x0C, 0x27, 0x00, 0x70, 0x12, 0x36, 0x0C, 0x10, 0x88, 0x1F, 0x26,
+0x00, 0x70, 0x12, 0x36, 0x0C, 0x88, 0x00, 0x01, 0x01, 0x02, 0x01, 0x02, 0x02, 0x03, 0x01, 0x02,
+0x02, 0x03, 0x02, 0x03, 0x03, 0x04, 0x01, 0x02, 0x02, 0x03, 0x02, 0x03, 0x03, 0x04, 0x02, 0x03,
+0x03, 0x04, 0x03, 0x04, 0x04, 0x05, 0x01, 0x02, 0x02, 0x03, 0x02, 0x03, 0x03, 0x04, 0x02, 0x03,
+0x03, 0x04, 0x03, 0x04, 0x04, 0x05, 0x02, 0x03, 0x03, 0x04, 0x03, 0x04, 0x04, 0x05, 0x03, 0x04,
+0x04, 0x05, 0x04, 0x05, 0x05, 0x06, 0x01, 0x02, 0x02, 0x03, 0x02, 0x03, 0x03, 0x04, 0x02, 0x03,
+0x03, 0x04, 0x03, 0x04, 0x04, 0x05, 0x02, 0x03, 0x03, 0x04, 0x03, 0x04, 0x04, 0x05, 0x03, 0x04,
+0x04, 0x05, 0x04, 0x05, 0x05, 0x06, 0x02, 0x03, 0x03, 0x04, 0x03, 0x04, 0x04, 0x05, 0x03, 0x04,
+0x04, 0x05, 0x04, 0x05, 0x05, 0x06, 0x03, 0x04, 0x04, 0x05, 0x04, 0x05, 0x05, 0x06, 0x04, 0x05,
+0x05, 0x06, 0x05, 0x06, 0x06, 0x07, 0x01, 0x02, 0x02, 0x03, 0x02, 0x03, 0x03, 0x04, 0x02, 0x03,
+0x03, 0x04, 0x03, 0x04, 0x04, 0x05, 0x02, 0x03, 0x03, 0x04, 0x03, 0x04, 0x04, 0x05, 0x03, 0x04,
+0x04, 0x05, 0x04, 0x05, 0x05, 0x06, 0x02, 0x03, 0x03, 0x04, 0x03, 0x04, 0x04, 0x05, 0x03, 0x04,
+0x04, 0x05, 0x04, 0x05, 0x05, 0x06, 0x03, 0x04, 0x04, 0x05, 0x04, 0x05, 0x05, 0x06, 0x04, 0x05,
+0x05, 0x06, 0x05, 0x06, 0x06, 0x07, 0x02, 0x03, 0x03, 0x04, 0x03, 0x04, 0x04, 0x05, 0x03, 0x04,
+0x04, 0x05, 0x04, 0x05, 0x05, 0x06, 0x03, 0x04, 0x04, 0x05, 0x04, 0x05, 0x05, 0x06, 0x04, 0x05,
+0x05, 0x06, 0x05, 0x06, 0x06, 0x07, 0x03, 0x04, 0x04, 0x05, 0x04, 0x05, 0x05, 0x06, 0x04, 0x05,
+0x05, 0x06, 0x05, 0x06, 0x06, 0x07, 0x04, 0x05, 0x05, 0x06, 0x05, 0x06, 0x06, 0x07, 0x05, 0x06,
+0x06, 0x07, 0x06, 0x07, 0x07, 0x08,
diff --git a/arm9/source/bang.c b/arm9/source/bang.c
index 8686dd3..6065267 100644
--- a/arm9/source/bang.c
+++ b/arm9/source/bang.c
@@ -1,51 +1,26 @@
-#include <nds.h>
#include "bang.h"
-static const u8 rev_lookup[] = {
- 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
- 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
- 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
- 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
- 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
- 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
- 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
- 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
- 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
- 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
- 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
- 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
- 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
- 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
- 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
- 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
- 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
- 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
- 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
- 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
- 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
- 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
- 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
- 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
- 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
- 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
- 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
- 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
- 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
- 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
- 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
- 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff,
-};
-u8 rev(u8 x) {
- return rev_lookup[x];
+// Left-rotate a byte.
+u8 ROL1(u8 v, u8 d) {
+ d %= 8;
+ return v << d | v >> (8-d);
}
-u8 shc(u8 x, u8 y) {
- y = (u8)(RIGHT(y) - LEFT(y)) % 8;
- return ((x >> y | (x << (8-y))));
+// Left-rotate a double.
+u16 ROLD(u16 v, u8 d) {
+ d %= 16;
+ return v << d | v >> (16-d);
}
-u16 shcd(u16 x, u8 y) {
- y = (u16)(RIGHT(y) - LEFT(y)) % 16;
- return ((x >> y | (x << (16-y))));
+// Right-rotate a byte.
+u8 ROR1(u8 v, u8 d) {
+ d %= 8;
+ return v << (8-d) | v >> d;
+}
+
+// Right-rotate a double.
+u16 RORD(u16 v, u8 d) {
+ d %= 16;
+ return v << (16-d) | v >> d;
}
diff --git a/arm9/source/bang.h b/arm9/source/bang.h
index 110e243..b85e9cd 100644
--- a/arm9/source/bang.h
+++ b/arm9/source/bang.h
@@ -1,31 +1,39 @@
#ifndef BANG_H_
#define BANG_H_
- #define SET_HIGH(v,high) v = high << 8 | (v & 0x00ff)
- #define SET_LOW(v,low) v = (v & 0xff00) | low
- #define HIGH(v) (u8)((v) >> 8)
- #define LOW(v) (u8)((v) )
+ #include <nds.h>
- #define SET_H_HIGH(v,high) v = high << 24 | (v & 0x00ffffff)
- #define SET_H_LOW(v,low) v = low << 16 | (v & 0xff00ffff)
- #define SET_L_HIGH(v,high) v = high << 8 | (v & 0xffff00ff)
- #define SET_L_LOW(v,low) v = low | (v & 0xffffff00)
- #define H_HIGH(v) (u8)((v) >> 24)
- #define H_LOW(v) (u8)((v) >> 16)
- #define L_HIGH(v) (u8)((v) >> 8)
- #define L_LOW(v) (u8)((v) )
- #define LEFT(x) ((x) >> 4)
- #define RIGHT(x) ((x) & 0xf)
-
- #define SHF(x,y) (x >> RIGHT(y) << LEFT(y))
- #define TAL(x) __builtin_popcount(x)
-
- #define TEST(x,m) ((x & m) == m)
+ // Read and write individual bytes from a 32-bit value.
+ #define SETHH(v,h) v = h << 24 | (v & 0x00ffffff)
+ #define SETHL(v,l) v = l << 16 | (v & 0xff00ffff)
+ #define SETLH(v,h) v = h << 8 | (v & 0xffff00ff)
+ #define SETLL(v,l) v = l | (v & 0xffffff00)
+ #define GETHH(v) (u8)((v) >> 24)
+ #define GETHL(v) (u8)((v) >> 16)
+ #define GETLH(v) (u8)((v) >> 8)
+ #define GETLL(v) (u8)((v) )
+ // Aliases for use on 16-bit values.
+ #define SETH(v,h) SETLH(v,h)
+ #define SETL(v,l) SETLL(v,l)
+ #define GETH(v) GETLH(v)
+ #define GETL(v) GETLL(v)
+ // Test if all bits of a mask are set in a value.
+ #define TEST(v,m) ((v & m) == m)
+ // Convert a C-style boolean to a Bedrock-style boolean.
#define BOOL(v) ((u8)-(v))
+ // Merge two bytes together as a double.
#define DOUBLE(h,l) ((u16)(h) << 8 | (u16)(l))
+ // Extract the high and low bytes of a double.
+ #define HIGH(v) (u8)(v >> 8)
+ #define LOW(v) (u8)(v)
+ // Find the highest or lowest value of a pair.
+ #define MAX(x,y) (x>y ? x : y)
+ #define MIN(x,y) (x<y ? x : y)
- u8 rev(u8 x);
- u8 shc(u8 x, u8 y);
- u16 shcd(u16 x, u8 y);
+ // Functions.
+ u8 ROL1(u8 v, u8 d);
+ u16 ROLD(u16 v, u8 d);
+ u8 ROR1(u8 v, u8 d);
+ u16 RORD(u16 v, u8 d);
#endif
diff --git a/arm9/source/config.h b/arm9/source/config.h
new file mode 100644
index 0000000..ae27fba
--- /dev/null
+++ b/arm9/source/config.h
@@ -0,0 +1,22 @@
+
+#ifndef CONFIG_H_
+ #define CONFIG_H_
+
+ #include "bang.h"
+
+
+ // Allow the user to switch between instances with the L and R buttons.
+ #define SWITCH_BETWEEN_INSTANCES false
+
+ // The number of Bedrock instances to initialise. This will determine
+ // the maximum number of programs that can run simultaneously (including
+ // the keyboard program). Should be at least 2.
+ #define NUM_INSTANCES 2
+
+ // Number of instances reserved for user programs.
+ #define USER_INSTANCES (NUM_INSTANCES-1)
+
+ // Index of the keyboard instance, which will display on the bottom
+ // screen when the main instance is on the top screen.
+ #define KEY_INSTANCE (NUM_INSTANCES-1)
+#endif
diff --git a/arm9/source/core.c b/arm9/source/core.c
index 26c7bb0..21587b4 100644
--- a/arm9/source/core.c
+++ b/arm9/source/core.c
@@ -1,528 +1,419 @@
-#include <nds.h>
-#include "bang.h"
#include "core.h"
-#include "debug.h"
-void reset_br(Bedrock *br) {
- // TODO
+// Reset a Bedrock instance.
+void br_reset(Bedrock *br) {
+ br->ip = 0;
+ br->wst.p = 0;
+ br->rst.p = 0;
+ dev_reset(&br->dev);
}
-// Load a program into an instance.
-void start_br(Bedrock *br, u8 program[], int size) {
- reset_br(br);
- memcpy(&br->prg.mem, program, size);
- br->alive = TRUE;
- br->awake = TRUE;
- // br->scr.nds = &scr_main;
+// Load a new program into a Bedrock instance.
+void br_load(Bedrock *br, u8 bytecode[], int length) {
+ br_reset(br);
+ memcpy(&br->mem, bytecode, MIN(length, 65536));
+ br->alive = true;
+ br->awake = true;
}
-void run_br(Bedrock *br) {
- if (br->awake) {
- switch (evaluate(br, 65535)) {
- case SIG_HALT: br->alive = FALSE; black_screen(br->scr.nds); br = NULL; return;
- case SIG_SLEEP: br->awake = FALSE; return;
- case SIG_DB1: debug_stacks(br); return;
- case SIG_DB4: debug_assert(br); return;
- default: return;
- }
- }
-}
-
-void rouse_br(Bedrock *br) {
- if (TEST(br->sys.sleep, 0x8000)) { // SYSTEM
- br->awake = TRUE;
- br->sys.wake = 0x0;
- return;
- }
- if (TEST(br->sys.sleep, 0x0400)) { // SCREEN
- if (br->scr.wake) {
- br->scr.wake = FALSE;
- br->awake = TRUE;
- br->sys.wake = 0x5;
+// Attempt to wake a Bedrock instance.
+// TODO: Redo this.
+void br_rouse(Bedrock *br) {
+ if (TEST(br->dev.system.sleep, 0x0400)) { // SCREEN
+ if (br->dev.screen.wake) {
+ br->dev.screen.wake = false;
+ br->dev.system.wake = 0x5;
+ br->awake = true;
return;
}
}
- if (TEST(br->sys.sleep, 0x0800)) { // INPUT
- if (br->inp.wake) {
- br->inp.wake = FALSE;
- br->awake = TRUE;
- br->sys.wake = 0x4;
+ if (TEST(br->dev.system.sleep, 0x0800)) { // INPUT
+ if (br->dev.input.wake) {
+ br->dev.input.wake = false;
+ br->dev.system.wake = 0x4;
+ br->awake = true;
return;
}
}
- if (TEST(br->sys.sleep, 0x1000)) { // CLOCK
- if (check_timers(&br->clk)) {
- br->awake = TRUE;
- br->sys.wake = 0x3;
+ if (TEST(br->dev.system.sleep, 0x1000)) { // CLOCK
+ if (clock_check_timers(&br->dev.clock)) {
+ br->dev.system.wake = 0x3;
+ br->awake = true;
return;
}
}
-}
-
-u8 dev_read(Bedrock *br, u8 port) {
- switch(port) {
-// SYSTEM DEVICE
- // TODO: name and author
- case 0x00: return rb_read(&br->sys.name);
- case 0x01: return rb_read(&br->sys.authors);
- case 0x02: return 0x00; // program memory size
- case 0x03: return 0x00; // program memory size
- case 0x04: return 0x00; // working stack size
- case 0x05: return 0x00; // return stack size
- case 0x06: return devices_high();
- case 0x07: return devices_low();
- case 0x0A: return br->sys.wake;
-// MEMORY DEVICE
- case 0x10: return mem_read1(&br->mem);
- case 0x11: return mem_read1(&br->mem);
- case 0x12: return HIGH(br->mem.offset1);
- case 0x13: return LOW(br->mem.offset1);
- case 0x14: return br->mem.page1;
- case 0x15: return br->mem.byte1;
- case 0x16: return HIGH(br->mem.count);
- case 0x17: return LOW(br->mem.count);
- case 0x18: return mem_read2(&br->mem);
- case 0x19: return mem_read2(&br->mem);
- case 0x1A: return HIGH(br->mem.offset2);
- case 0x1B: return LOW(br->mem.offset2);
- case 0x1C: return br->mem.page2;
- case 0x1D: return br->mem.byte2;
-// MATH DEVICE
- case 0x20: return HIGH(br->math.op1);
- case 0x21: return LOW(br->math.op1);
- case 0x22: return HIGH(br->math.op2);
- case 0x23: return LOW(br->math.op2);
- case 0x24: return HIGH(get_sqrt(&br->math));
- case 0x25: return LOW(get_sqrt(&br->math));
- case 0x26: return HIGH(get_atan(&br->math));
- case 0x27: return LOW(get_atan(&br->math));
- case 0x28: return H_HIGH(get_prod(&br->math));
- case 0x29: return H_LOW(get_prod(&br->math));
- case 0x2A: return L_HIGH(get_prod(&br->math));
- case 0x2B: return L_LOW(get_prod(&br->math));
- case 0x2C: return HIGH(get_quot(&br->math));
- case 0x2D: return LOW(get_quot(&br->math));
- case 0x2E: return HIGH( get_rem(&br->math));
- case 0x2F: return LOW( get_rem(&br->math));
-// CLOCK DEVICE
- case 0x30: return YEAR(get_datetime());
- case 0x31: return MONTH(get_datetime());
- case 0x32: return DAY(get_datetime());
- case 0x33: return HOUR(get_datetime());
- case 0x34: return MINUTE(get_datetime());
- case 0x35: return SECOND(get_datetime());
- case 0x36: return HIGH(get_uptime()-br->clk.start);
- case 0x37: return LOW(get_uptime()-br->clk.start);
- case 0x38: return get_timer_high(&br->clk.t1);
- case 0x39: return get_timer_low( &br->clk.t1);
- case 0x3A: return get_timer_high(&br->clk.t2);
- case 0x3B: return get_timer_low( &br->clk.t2);
- case 0x3C: return get_timer_high(&br->clk.t3);
- case 0x3D: return get_timer_low( &br->clk.t3);
- case 0x3E: return get_timer_high(&br->clk.t4);
- case 0x3F: return get_timer_low( &br->clk.t4);
-// INPUT DEVICE
- case 0x40: return BOOL(br->inp.pointer);
- case 0x41: return br->inp.pointer << 7;
- case 0x44: return HIGH(br->inp.x);
- case 0x45: return LOW(br->inp.x);
- case 0x46: return HIGH(br->inp.y);
- case 0x47: return LOW(br->inp.y);
- case 0x48: return BOOL(is_keyboard_open());
- case 0x49: return cb_read_byte(&br->inp.keybuffer);
- case 0x4A: return br->inp.navigation;
- case 0x4C: return br->inp.gamepad;
-// SCREEN DEVICE
- case 0x50: return HIGH(PIXELS_WIDTH);
- case 0x51: return LOW(PIXELS_WIDTH);
- case 0x52: return HIGH(PIXELS_HEIGHT);
- case 0x53: return LOW(PIXELS_HEIGHT);
- case 0x54: return HIGH(br->scr.x);
- case 0x55: return LOW(br->scr.x);
- case 0x56: return HIGH(br->scr.y);
- case 0x57: return LOW(br->scr.y);
-// FILE DEVICE
- case 0xA0: return BOOL(br->fs.open);
- case 0xA1: return BOOL(br->fs.success);
- case 0xA2: return pb_read(&br->fs.path);
- case 0xA3: return BOOL(br->fs.is_dir);
- case 0xA4: return fs_read_byte(&br->fs);
- case 0xA5: return fs_read_byte(&br->fs);
- case 0xA6: return pb_read(&br->fs.child_path);
- case 0xA7: return BOOL(br->fs.child_is_dir);
- case 0xA8: return H_HIGH(br->fs.pointer);
- case 0xA9: return H_LOW(br->fs.pointer);
- case 0xAA: return L_HIGH(br->fs.pointer);
- case 0xAB: return L_LOW(br->fs.pointer);
- case 0xAC: return H_HIGH(br->fs.length);
- case 0xAD: return H_LOW(br->fs.length);
- case 0xAE: return L_HIGH(br->fs.length);
- case 0xAF: return L_LOW(br->fs.length);
-
- default: return 0;
- }
-}
-
-Signal dev_write(Bedrock *br, u8 port, u8 v) {
- switch(port) {
-// SYSTEM DEVICE
- case 0x00: rb_reset(&br->sys.name); return 0;
- case 0x01: rb_reset(&br->sys.authors); return 0;
- case 0x08: SET_HIGH(br->sys.sleep,v); return 0;
- case 0x09: SET_LOW(br->sys.sleep,v); return SIG_SLEEP;
-// MEMORY DEVICE
- case 0x10: mem_write1(&br->mem,v); return 0;
- case 0x11: mem_write1(&br->mem,v); return 0;
- case 0x12: SET_HIGH(br->mem.offset1,v); mem_load_cache1(&br->mem); return 0;
- case 0x13: SET_LOW(br->mem.offset1,v); mem_load_cache1(&br->mem); return 0;
- case 0x14: br->mem.page1=v; mem_get_page1(&br->mem); return 0;
- case 0x15: br->mem.byte1=v; return 0;
- case 0x16: SET_HIGH(br->mem.count_write,v); return 0;
- case 0x17: SET_LOW(br->mem.count_write,v); mem_allocate(&br->mem); return 0;
- case 0x18: mem_write2(&br->mem,v); return 0;
- case 0x19: mem_write2(&br->mem,v); return 0;
- case 0x1A: SET_HIGH(br->mem.offset2,v); mem_load_cache2(&br->mem); return 0;
- case 0x1B: SET_LOW(br->mem.offset2,v); mem_load_cache2(&br->mem); return 0;
- case 0x1C: br->mem.page2=v; mem_get_page2(&br->mem); return 0;
- case 0x1D: br->mem.byte2=v; return 0;
- case 0x1E: SET_HIGH(br->mem.copy_write,v); return 0;
- case 0x1F: SET_LOW(br->mem.copy_write,v); mem_do_copy(&br->mem); return 0;
-// MATH DEVICE
- case 0x20: set_op1_high(&br->math,v); return 0;
- case 0x21: set_op1_low( &br->math,v); return 0;
- case 0x22: set_op2_high(&br->math,v); return 0;
- case 0x23: set_op2_low( &br->math,v); return 0;
-// CLOCK DEVICE
- // TODO: Set time and date
- case 0x38: set_timer_high(&br->clk.t1,v); return 0;
- case 0x39: set_timer_low( &br->clk.t1,v); return 0;
- case 0x3A: set_timer_high(&br->clk.t2,v); return 0;
- case 0x3B: set_timer_low( &br->clk.t2,v); return 0;
- case 0x3C: set_timer_high(&br->clk.t3,v); return 0;
- case 0x3D: set_timer_low( &br->clk.t3,v); return 0;
- case 0x3E: set_timer_high(&br->clk.t4,v); return 0;
- case 0x3F: set_timer_low( &br->clk.t4,v); return 0;
-// INPUT DEVICE
- case 0x48: v ? open_keyboard() : close_keyboard(); return 0;
- case 0x49: cb_clear(&br->inp.keybuffer); return 0;
-// SCREEN DEVICE
- case 0x54: SET_HIGH(br->scr.x,v); return 0;
- case 0x55: SET_LOW( br->scr.x,v); return 0;
- case 0x56: SET_HIGH(br->scr.y,v); return 0;
- case 0x57: SET_LOW( br->scr.y,v); return 0;
- case 0x58: set_palette_high(&br->scr,v); return 0;
- case 0x59: set_palette_low( &br->scr,v); return 0;
- case 0x5A: SET_HIGH(br->scr.colours,v); return 0;
- case 0x5B: SET_LOW( br->scr.colours,v); return 0;
- case 0x5C: push_sprite(&br->scr.sprite,v); return 0;
- case 0x5D: push_sprite(&br->scr.sprite,v); return 0;
- case 0x5E: draw_dispatch(&br->scr,v); return 0;
- case 0x5F: move_cursor(&br->scr,v); return 0;
-// LOCAL DEVICE
- case 0x86: std_write(v); return 0;
- case 0x87: std_write(v); return 0;
-// FILE DEVICE
- case 0xA0: fs_push_entry(&br->fs,v); return 0;
- case 0xA1: fs_push_action(&br->fs,v); return 0;
- case 0xA2: pb_reset(&br->fs.path,v); return 0;
- case 0xA3: fs_ascend(&br->fs); return 0;
- case 0xA4: fs_write_byte(&br->fs,v); return 0;
- case 0xA5: fs_write_byte(&br->fs,v); return 0;
- case 0xA6: pb_reset(&br->fs.child_path,v); return 0;
- case 0xA7: fs_descend(&br->fs); return 0;
- case 0xA8: SET_H_HIGH(br->fs.pointer_write,v); return 0;
- case 0xA9: SET_H_LOW(br->fs.pointer_write,v); return 0;
- case 0xAA: SET_L_HIGH(br->fs.pointer_write,v); return 0;
- case 0xAB: SET_L_LOW(br->fs.pointer_write,v); fs_seek(&br->fs); return 0;
- case 0xAC: SET_H_HIGH(br->fs.length_write,v); return 0;
- case 0xAD: SET_H_LOW(br->fs.length_write,v); return 0;
- case 0xAE: SET_L_HIGH(br->fs.length_write,v); return 0;
- case 0xAF: SET_L_LOW(br->fs.length_write,v); fs_resize(&br->fs); return 0;
-
- default: return SIG_NONE;
+ // System device is always chosen last.
+ if (TEST(br->dev.system.sleep, 0x8000)) { // SYSTEM
+ br->dev.system.wake = 0x0;
+ br->awake = true;
+ return;
}
}
-Signal dev_write_16(Bedrock *br, u8 port, u8 high, u8 low) {
- Signal s1 = dev_write(br, port, high);
- Signal s2 = dev_write(br, port+1, low);
- if (s1) { return s1; } else { return s2; }
+// Write a double to a device bus.
+Signal dev_write_double(DeviceBus *d, u8 port, u8 h, u8 l) {
+ Signal s1 = dev_write(d, port, h);
+ Signal s2 = dev_write(d, port+1, l);
+ return s1 ? s1 : s2;
}
-Signal evaluate(Bedrock *br, u16 count) {
+// Evaluate a Bedrock instance until a signal is emitted.
+Signal br_eval(Bedrock *br, int count) {
#define SIGNAL(s) if (s) { return s; } else { continue; };
- register u8 a, b, c, d, e, f;
- register u16 x, y;
+ // Helpers.
+ #define WST br->wst
+ #define RST br->rst
+ #define MEM br->mem
+ #define IP br->ip
+ #define WSTV(i) WST.mem[WST.p+(i)]
+ #define RSTV(i) RST.mem[RST.p+(i)]
+ // Push values to a stack.
+ #define WPSH1(x) WST.mem[WST.p++] = (x);
+ #define RPSH1(x) RST.mem[RST.p++] = (x);
+ #define WPSH2(x,y) WPSH1(x); WPSH1(y);
+ #define RPSH2(x,y) RPSH1(x); RPSH1(y);
+ #define WPSHD(d) WPSH1(HIGH((d))); WPSH1(LOW((d)));
+ #define RPSHD(d) RPSH1(HIGH((d))); RPSH1(LOW((d)));
+ #define WPSHB(b) WPSH1(BOOL(b));
+ #define RPSHB(b) RPSH1(BOOL(b));
+ // Pop values from a stack.
+ #define WPOP1(x) (x) = WST.mem[--WST.p];
+ #define RPOP1(x) (x) = RST.mem[--RST.p];
+ #define WPOP2(x,y) WPOP1(y); WPOP1(x);
+ #define RPOP2(x,y) RPOP1(y); RPOP1(x);
+ #define WPOPD(d) d = DOUBLE(WSTV(-2), WSTV(-1)); WST.p-=2;
+ #define RPOPD(d) d = DOUBLE(RSTV(-2), RSTV(-1)); RST.p-=2;
+ // Pop values without affecting the stack pointer.
+ #define WGET1(x) x = WSTV(-1);
+ #define RGET1(x) x = RSTV(-1);
+ #define WGET2(x,y) x = WSTV(-2); y = WSTV(-1);
+ #define RGET2(x,y) x = RSTV(-2); y = RSTV(-1);
+ #define WGETD(x) x = DOUBLE(WSTV(-2), WSTV(-1));
+ #define RGETD(x) x = DOUBLE(RSTV(-2), RSTV(-1));
+ // Read the next value in memory.
+ #define MPOP1(x) (x) = MEM[IP++];
+ #define MPOP2(x,y) MPOP1(x); MPOP1(y);
+ #define MPOPD(d) d = DOUBLE(MEM[IP], MEM[IP+1]); IP+=2;
+ // Read from a device port.
+ #define DGET1(p) dev_read(&br->dev, p)
+ #define DSET2(p,h,l) dev_write_double(&br->dev, p, h, l)
+
+ register u16 u, v, w, x, y, z;
register Signal sig;
- for (u16 i=0; i < count; i++) {
- switch (MLIT) {
+ while (count--) {
+ MPOP1(x);
+ switch (x) {
/* HLT */ case 0x00: return SIG_HALT;
-/* JMP */ case 0x01: WPOP2(a,b); PC=DOUBLE(a,b); continue;
-/* JCN */ case 0x02: WPOP2(b,c); WPOP1(a); if(a) PC=DOUBLE(b,c); continue;
-/* JCK */ case 0x03: WPOP2(b,c); WGET1(a); if(a) PC=DOUBLE(b,c); continue;
-/* LDA */ case 0x04: WPOP2(a,b); x=DOUBLE(a,b); WPSH1(MEM[x]); continue;
-/* STA */ case 0x05: WPOPD(x); WPOP1(a); MEM[x]=a; continue;
-/* LDD */ case 0x06: WPOP1(a); WPSH1(dev_read(br,a)); continue;
-/* STD */ case 0x07: WPOP1(b); WPOP1(a); sig=dev_write(br,b,a); SIGNAL(sig);
-/* PSH */ case 0x08: RPOP1(a); WPSH1(a); continue;
-/* POP */ case 0x09: WST.p-=1; continue;
-/* CPY */ case 0x0A: RGET1(a); WPSH1(a); continue;
-/* SPL */ case 0x0B: WPOP1(a); WPSH2(LEFT(a),RIGHT(a)); continue;
-/* DUP */ case 0x0C: WGET1(a); WPSH1(a); continue;
-/* OVR */ case 0x0D: WPOP1(b); WGET1(a); WPSH1(b); WPSH1(a); continue;
-/* SWP */ case 0x0E: WPOP1(b); WPOP1(a); WPSH1(b); WPSH1(a); continue;
-/* ROT */ case 0x0F: WPOP1(c); WPOP1(b); WPOP1(a); WPSH1(b); WPSH1(c); WPSH1(a); continue;
-/* ADD */ case 0x10: WPOP1(b); WSTV(-1)+=b; continue;
-/* SUB */ case 0x11: WPOP1(b); WSTV(-1)-=b; continue;
+/* PSH */ case 0x01: RPOP1(x); WPSH1(x); continue;
+/* POP */ case 0x02: WST.p-=1; continue;
+/* CPY */ case 0x03: RGET1(x); WPSH1(x); continue;
+/* DUP */ case 0x04: WGET1(x); WPSH1(x); continue;
+/* OVR */ case 0x05: WPOP1(y); WGET1(x); WPSH1(y); WPSH1(x); continue;
+/* SWP */ case 0x06: WPOP1(y); WPOP1(x); WPSH1(y); WPSH1(x); continue;
+/* ROT */ case 0x07: WPOP1(z); WPOP1(y); WPOP1(x); WPSH1(y); WPSH1(z); WPSH1(x); continue;
+/* JMP */ case 0x08: WPOPD(x); IP=x; continue;
+/* JMS */ case 0x09: WPOPD(x); RPSHD(IP); IP=x; continue;
+/* JCN */ case 0x0A: WPOPD(y); WPOP1(x); if(x) IP=y; continue;
+/* JCS */ case 0x0B: WPOPD(y); WPOP1(x); if(x) { RPSHD(IP); IP=y; } continue;
+/* LDA */ case 0x0C: WPOPD(x); WPSH1(MEM[x]); continue;
+/* STA */ case 0x0D: WPOPD(y); WPOP1(x); MEM[y]=x; continue;
+/* LDD */ case 0x0E: WPOP1(x); WPSH1(dev_read(&br->dev,x)); continue;
+/* STD */ case 0x0F: WPOP1(y); WPOP1(x); sig=dev_write(&br->dev,y,x); SIGNAL(sig);
+/* ADD */ case 0x10: WPOP1(x); WSTV(-1)+=x; continue;
+/* SUB */ case 0x11: WPOP1(x); WSTV(-1)-=x; continue;
/* INC */ case 0x12: WSTV(-1)+=1; continue;
/* DEC */ case 0x13: WSTV(-1)-=1; continue;
-/* LTH */ case 0x14: WPOP1(b); WPOP1(a); WPSH1(BOOL(a<b)); continue;
-/* GTH */ case 0x15: WPOP1(b); WPOP1(a); WPSH1(BOOL(a>b)); continue;
-/* EQU */ case 0x16: WPOP1(b); WPOP1(a); WPSH1(BOOL(a==b)); continue;
-/* NQK */ case 0x17: b=WSTV(-1); a=WSTV(-2); WPSH1(BOOL(a!=b)); continue;
-/* IOR */ case 0x18: WPOP1(b); WSTV(-1)|=b; continue;
-/* XOR */ case 0x19: WPOP1(b); WSTV(-1)^=b; continue;
-/* AND */ case 0x1A: WPOP1(b); WSTV(-1)&=b; continue;
-/* NOT */ case 0x1B: WSTV(-1)=~WSTV(-1); continue;
-/* SHF */ case 0x1C: WPOP1(b); WPOP1(a); x=SHF(a,b); WPSH1(x); continue;
-/* SHC */ case 0x1D: WPOP1(b); WPOP1(a); x=shc(a,b); WPSH1(x); continue;
-/* TAL */ case 0x1E: WSTV(-1)=TAL(WSTV(-1)); continue;
-/* REV */ case 0x1F: WSTV(-1)=rev(WSTV(-1)); continue;
+/* LTH */ case 0x14: WPOP1(y); WPOP1(x); WPSHB(x<y); continue;
+/* GTH */ case 0x15: WPOP1(y); WPOP1(x); WPSHB(x>y); continue;
+/* EQU */ case 0x16: WPOP1(y); WPOP1(x); WPSHB(x==y); continue;
+/* NQK */ case 0x17: y=WSTV(-1); x=WSTV(-2); WPSHB(x!=y); continue;
+/* SHL */ case 0x18: WPOP1(y); WPOP1(x); WPSH1(x<<y); continue;
+/* SHR */ case 0x19: WPOP1(y); WPOP1(x); WPSH1(x>>y); continue;
+/* ROL */ case 0x1A: WPOP1(y); WPOP1(x); WPSH1(ROL1(x,y)); continue;
+/* ROR */ case 0x1B: WPOP1(y); WPOP1(x); WPSH1(ROR1(x,y)); continue;
+/* IOR */ case 0x1C: WPOP1(x); WSTV(-1)|=x; continue;
+/* XOR */ case 0x1D: WPOP1(x); WSTV(-1)^=x; continue;
+/* AND */ case 0x1E: WPOP1(x); WSTV(-1)&=x; continue;
+/* NOT */ case 0x1F: WSTV(-1)=~WSTV(-1); continue;
/* NOP */ case 0x20: continue;
-/* JMS */ case 0x21: WPOP2(a,b); RPSHD(PC); PC=DOUBLE(a,b); continue;
-/* JCS */ case 0x22: WPOP2(b,c); WPOP1(a); if(a) {RPSHD(PC); PC=DOUBLE(b,c);} continue;
-/* JCK* */ case 0x23: WPOP2(c,d); WGETD(x); if(x) {PC=DOUBLE(c,d);} continue;
-/* LDA* */ case 0x24: WPOP2(a,b); x=DOUBLE(a,b); WPSH1(MEM[x]); WPSH1(MEM[x+1]); continue;
-/* STA* */ case 0x25: WPOPD(x); WPOP2(a,b); MEM[x]=a; MEM[x+1]=b; continue;
-/* LDD* */ case 0x26: WPOP1(a); WPSH1(dev_read(br,a)); WPSH1(dev_read(br,a+1)); continue;
-/* STD* */ case 0x27: WPOP1(c); WPOP2(a,b); sig=dev_write_16(br,c,a,b); SIGNAL(sig);
-/* PSH* */ case 0x28: RPOP2(a,b); WPSH2(a,b); continue;
-/* POP* */ case 0x29: WST.p-=2; continue;
-/* CPY* */ case 0x2A: RGET2(a,b); WPSH2(a,b); continue;
-/* SPL* */ case 0x2B: WPOP2(a,b); WPSH2(LEFT(a),RIGHT(a)); WPSH2(LEFT(b),RIGHT(b)); continue;
-/* DUP* */ case 0x2C: WGET2(a,b); WPSH2(a,b); continue;
-/* OVR* */ case 0x2D: WPOP2(c,d); WGET2(a,b); WPSH2(c,d); WPSH2(a,b); continue;
-/* SWP* */ case 0x2E: WPOP2(c,d); WPOP2(a,b); WPSH2(c,d); WPSH2(a,b); continue;
-/* ROT* */ case 0x2F: WPOP2(e,f); WPOP2(c,d); WPOP2(a,b); WPSH2(c,d); WPSH2(e,f); WPSH2(a,b); continue;
-/* ADD* */ case 0x30: WPOPD(y); WPOPD(x); WPSHD(x+y); continue;
-/* SUB* */ case 0x31: WPOPD(y); WPOPD(x); WPSHD(x-y); continue;
-/* INC* */ case 0x32: WPOPD(x); WPSHD(x+1); continue;
-/* DEC* */ case 0x33: WPOPD(x); WPSHD(x-1); continue;
-/* LTH* */ case 0x34: WPOPD(y); WPOPD(x); WPSH1(BOOL(x<y)); continue;
-/* GTH* */ case 0x35: WPOPD(y); WPOPD(x); WPSH1(BOOL(x>y)); continue;
-/* EQU* */ case 0x36: WPOP2(c,d); WPOP2(a,b); WPSH1(BOOL(a==c && b==d)); continue;
-/* NQK* */ case 0x37: d=WSTV(-1); c=WSTV(-2); b=WSTV(-3); a=WSTV(-4); WPSH1(BOOL(a!=c || b!=d)); continue;
-/* IOR* */ case 0x38: WPOP2(c,d); WSTV(-1)|=d; WSTV(-2)|=c; continue;
-/* XOR* */ case 0x39: WPOP2(c,d); WSTV(-1)^=d; WSTV(-2)^=c; continue;
-/* AND* */ case 0x3A: WPOP2(c,d); WSTV(-1)&=d; WSTV(-2)&=c; continue;
-/* NOT* */ case 0x3B: WSTV(-1)=~WSTV(-1); WSTV(-2)=~WSTV(-2); continue;
-/* SHF* */ case 0x3C: WPOP1(c); WPOPD(x); x=SHF(x,c); WPSHD(x); continue;
-/* SHC* */ case 0x3D: WPOP1(c); WPOPD(x); x=shcd(x,c); WPSHD(x); continue;
-/* TAL* */ case 0x3E: WPOP2(a,b); WPSH1(TAL(a)+TAL(b)); continue;
-/* REV* */ case 0x3F: WPOP2(a,b); WPSH1(rev(b)); WPSH1(rev(a)); continue;
+/* PSH: */ case 0x21: MPOP1(x); WPSH1(x); continue;
+/* POP: */ case 0x22: IP+=1; continue;
+/* CPY: */ case 0x23: MPOP1(x); RPSH1(x); WPSH1(x); continue;
+/* DUP: */ case 0x24: MPOP1(x); WPSH1(x); WPSH1(x); continue;
+/* OVR: */ case 0x25: MPOP1(y); WGET1(x); WPSH1(y); WPSH1(x); continue;
+/* SWP: */ case 0x26: MPOP1(y); WPOP1(x); WPSH1(y); WPSH1(x); continue;
+/* ROT: */ case 0x27: MPOP1(z); WPOP1(y); WPOP1(x); WPSH1(y); WPSH1(z); WPSH1(x); continue;
+/* JMP: */ case 0x28: MPOPD(x); IP=x; continue;
+/* JMS: */ case 0x29: MPOPD(x); RPSHD(IP); IP=x; continue;
+/* JCN: */ case 0x2A: MPOPD(y); WPOP1(x); if(x) IP=y; continue;
+/* JCS: */ case 0x2B: MPOPD(y); WPOP1(x); if(x) { RPSHD(IP); IP=y; } continue;
+/* LDA: */ case 0x2C: MPOPD(x); WPSH1(MEM[x]); continue;
+/* STA: */ case 0x2D: MPOPD(y); WPOP1(x); MEM[y]=x; continue;
+/* LDD: */ case 0x2E: MPOP1(x); WPSH1(dev_read(&br->dev,x)); continue;
+/* STD: */ case 0x2F: MPOP1(y); WPOP1(x); sig=dev_write(&br->dev,y,x); SIGNAL(sig);
+/* ADD: */ case 0x30: MPOP1(x); WSTV(-1)+=x; continue;
+/* SUB: */ case 0x31: MPOP1(x); WSTV(-1)-=x; continue;
+/* INC: */ case 0x32: MPOP1(x); WPSH1(x+1); continue;
+/* DEC: */ case 0x33: MPOP1(x); WPSH1(x-1); continue;
+/* LTH: */ case 0x34: MPOP1(y); WPOP1(x); WPSHB(x<y); continue;
+/* GTH: */ case 0x35: MPOP1(y); WPOP1(x); WPSHB(x>y); continue;
+/* EQU: */ case 0x36: MPOP1(y); WPOP1(x); WPSHB(x==y); continue;
+/* NQK: */ case 0x37: MPOP1(y); WGET1(x); WPSH1(y); WPSHB(x!=y); continue;
+/* SHL: */ case 0x38: MPOP1(y); WPOP1(x); WPSH1(x<<y); continue;
+/* SHR: */ case 0x39: MPOP1(y); WPOP1(x); WPSH1(x>>y); continue;
+/* ROL: */ case 0x3A: MPOP1(y); WPOP1(x); WPSH1(ROL1(x,y)); continue;
+/* ROR: */ case 0x3B: MPOP1(y); WPOP1(x); WPSH1(ROR1(x,y)); continue;
+/* IOR: */ case 0x3C: MPOP1(x); WSTV(-1)|=x; continue;
+/* XOR: */ case 0x3D: MPOP1(x); WSTV(-1)^=x; continue;
+/* AND: */ case 0x3E: MPOP1(x); WSTV(-1)&=x; continue;
+/* NOT: */ case 0x3F: MPOP1(x); WPSH1(~x); continue;
/* DB1 */ case 0x40: return SIG_DB1;
-/* JMP: */ case 0x41: MLIT2(a,b); PC=DOUBLE(a,b); continue;
-/* JCN: */ case 0x42: MLIT2(b,c); WPOP1(a); if(a) PC=DOUBLE(b,c); continue;
-/* JCK: */ case 0x43: MLIT2(b,c); WGET1(a); if(a) PC=DOUBLE(b,c); continue;
-/* LDA: */ case 0x44: MLIT2(a,b); x=DOUBLE(a,b); WPSH1(MEM[x]); continue;
-/* STA: */ case 0x45: MLITD(x); WPOP1(a); MEM[x]=a; continue;
-/* LDD: */ case 0x46: MLIT1(a); WPSH1(dev_read(br,a)); continue;
-/* STD: */ case 0x47: MLIT1(b); WPOP1(a); sig=dev_write(br,b,a); SIGNAL(sig);
-/* PSH: */ case 0x48: MLIT1(a); WPSH1(a); continue;
-/* POP: */ case 0x49: PC+=1; continue;
-/* CPY: */ case 0x4A: MLIT1(a); RPSH1(a); WPSH1(a); continue;
-/* SPL: */ case 0x4B: MLIT1(a); WPSH2(LEFT(a),RIGHT(a)); continue;
-/* DUP: */ case 0x4C: MLIT1(a); WPSH1(a); WPSH1(a); continue;
-/* OVR: */ case 0x4D: MLIT1(b); WGET1(a); WPSH1(b); WPSH1(a); continue;
-/* SWP: */ case 0x4E: MLIT1(b); WPOP1(a); WPSH1(b); WPSH1(a); continue;
-/* ROT: */ case 0x4F: MLIT1(c); WPOP1(b); WPOP1(a); WPSH1(b); WPSH1(c); WPSH1(a); continue;
-/* ADD: */ case 0x50: MLIT1(b); WSTV(-1)+=b; continue;
-/* SUB: */ case 0x51: MLIT1(b); WSTV(-1)-=b; continue;
-/* INC: */ case 0x52: MLIT1(a); WPSH1(a+1); continue;
-/* DEC: */ case 0x53: MLIT1(a); WPSH1(a-1); continue;
-/* LTH: */ case 0x54: MLIT1(b); WPOP1(a); WPSH1(BOOL(a<b)); continue;
-/* GTH: */ case 0x55: MLIT1(b); WPOP1(a); WPSH1(BOOL(a>b)); continue;
-/* EQU: */ case 0x56: MLIT1(b); WPOP1(a); WPSH1(BOOL(a==b)); continue;
-/* NQK: */ case 0x57: MLIT1(b); WGET1(a); WPSH1(b); WPSH1(BOOL(a!=b)); continue;
-/* IOR: */ case 0x58: MLIT1(b); WSTV(-1)|=b; continue;
-/* XOR: */ case 0x59: MLIT1(b); WSTV(-1)^=b; continue;
-/* AND: */ case 0x5A: MLIT1(b); WSTV(-1)&=b; continue;
-/* NOT: */ case 0x5B: MLIT1(a); WPSH1(~a); continue;
-/* SHF: */ case 0x5C: MLIT1(b); WPOP1(a); x=SHF(a,b); WPSH1(x); continue;
-/* SHC: */ case 0x5D: MLIT1(b); WPOP1(a); x=shc(a,b); WPSH1(x); continue;
-/* TAL: */ case 0x5E: MLIT1(a); WPSH1(TAL(a)); continue;
-/* REV: */ case 0x5F: MLIT1(a); WPSH1(rev(a)); continue;
+/* PSH* */ case 0x41: RPOP2(x,y); WPSH2(x,y); continue;
+/* POP* */ case 0x42: WST.p-=2; continue;
+/* CPY* */ case 0x43: RGET2(x,y); WPSH2(x,y); continue;
+/* DUP* */ case 0x44: WGET2(x,y); WPSH2(x,y); continue;
+/* OVR* */ case 0x45: WPOP2(y,z); WGET2(w,x); WPSH2(y,z); WPSH2(w,x); continue;
+/* SWP* */ case 0x46: WPOP2(y,z); WPOP2(w,x); WPSH2(y,z); WPSH2(w,x); continue;
+/* ROT* */ case 0x47: WPOP2(y,z); WPOP2(w,x); WPOP2(u,v); WPSH2(w,x); WPSH2(y,z); WPSH2(u,v); continue;
+/* JMP* */ case 0x48: WPOPD(x); IP=x; continue;
+/* JMS* */ case 0x49: WPOPD(x); RPSHD(IP); IP=x; continue;
+/* JCN* */ case 0x4A: WPOPD(y); WPOPD(x); if(x) IP=y; continue;
+/* JCS* */ case 0x4B: WPOPD(y); WPOPD(x); if(x) { RPSHD(IP); IP=y; } continue;
+/* LDA* */ case 0x4C: WPOPD(x); WPSH2(MEM[x], MEM[x+1]); continue;
+/* STA* */ case 0x4D: WPOPD(z); WPOP2(x,y); MEM[z]=x; MEM[z+1]=y; continue;
+/* LDD* */ case 0x4E: WPOP1(x); WPSH1(DGET1(x)); WPSH1(DGET1(x+1)); continue;
+/* STD* */ case 0x4F: WPOP1(z); WPOP2(x,y); sig=DSET2(z,x,y); SIGNAL(sig);
+/* ADD* */ case 0x50: WPOPD(y); WPOPD(x); WPSHD(x+y); continue;
+/* SUB* */ case 0x51: WPOPD(y); WPOPD(x); WPSHD(x-y); continue;
+/* INC* */ case 0x52: WPOPD(x); WPSHD(x+1); continue;
+/* DEC* */ case 0x53: WPOPD(x); WPSHD(x-1); continue;
+/* LTH* */ case 0x54: WPOPD(y); WPOPD(x); WPSHB(x<y); continue;
+/* GTH* */ case 0x55: WPOPD(y); WPOPD(x); WPSHB(x>y); continue;
+/* EQU* */ case 0x56: WPOP2(y,z); WPOP2(w,x); WPSHB(w==y && x==z); continue;
+/* NQK* */ case 0x57: z=WSTV(-1); y=WSTV(-2); x=WSTV(-3); w=WSTV(-4); WPSHB(w!=y || x!=z); continue;
+/* SHL* */ case 0x58: WPOP1(y); WPOPD(x); WPSHD(x<<y); continue;
+/* SHR* */ case 0x59: WPOP1(y); WPOPD(x); WPSHD(x>>y); continue;
+/* ROL* */ case 0x5A: WPOP1(y); WPOPD(x); WPSHD(ROLD(x,y)); continue;
+/* ROR* */ case 0x5B: WPOP1(y); WPOPD(x); WPSHD(RORD(x,y)); continue;
+/* IOR* */ case 0x5C: WPOP2(x,y); WSTV(-1)|=y; WSTV(-2)|=x; continue;
+/* XOR* */ case 0x5D: WPOP2(x,y); WSTV(-1)^=y; WSTV(-2)^=x; continue;
+/* AND* */ case 0x5E: WPOP2(x,y); WSTV(-1)&=y; WSTV(-2)&=x; continue;
+/* NOT* */ case 0x5F: WSTV(-1)=~WSTV(-1); WSTV(-2)=~WSTV(-2); continue;
/* DB2 */ case 0x60: return SIG_DB2;
-/* JMS: */ case 0x61: MLIT2(a,b); RPSHD(PC); PC=DOUBLE(a,b); continue;
-/* JCS: */ case 0x62: MLIT2(b,c); WPOP1(a); if(a) {RPSHD(PC); PC=DOUBLE(b,c);} continue;
-/* JCK:* */ case 0x63: MLIT2(c,d); WGETD(x); if(x) {PC=DOUBLE(c,d);} continue;
-/* LDA:* */ case 0x64: MLIT2(a,b); x=DOUBLE(a,b); WPSH1(MEM[x]); WPSH1(MEM[x+1]); continue;
-/* STA:* */ case 0x65: MLITD(x); WPOP2(a,b); MEM[x]=a; MEM[x+1]=b; continue;
-/* LDD:* */ case 0x66: MLIT1(a); WPSH1(dev_read(br,a)); WPSH1(dev_read(br,a+1)); continue;
-/* STD:* */ case 0x67: MLIT1(c); WPOP2(a,b); sig=dev_write_16(br,c,a,b); SIGNAL(sig);
-/* PSH:* */ case 0x68: MLIT2(a,b); WPSH2(a,b); continue;
-/* POP:* */ case 0x69: PC+=2; continue;
-/* CPY:* */ case 0x6A: MLIT2(a,b); RPSH2(a,b); WPSH2(a,b); continue;
-/* SPL:* */ case 0x6B: MLIT2(a,b); WPSH2(LEFT(a),RIGHT(a)); WPSH2(LEFT(b),RIGHT(b)); continue;
-/* DUP:* */ case 0x6C: MLIT2(a,b); WPSH2(a,b); WPSH2(a,b); continue;
-/* OVR:* */ case 0x6D: MLIT2(c,d); WGET2(a,b); WPSH2(c,d); WPSH2(a,b); continue;
-/* SWP:* */ case 0x6E: MLIT2(c,d); WPOP2(a,b); WPSH2(c,d); WPSH2(a,b); continue;
-/* ROT:* */ case 0x6F: MLIT2(e,f); WPOP2(c,d); WPOP2(a,b); WPSH2(c,d); WPSH2(e,f); WPSH2(a,b); continue;
-/* ADD:* */ case 0x70: MLITD(y); WPOPD(x); WPSHD(x+y); continue;
-/* SUB:* */ case 0x71: MLITD(y); WPOPD(x); WPSHD(x-y); continue;
-/* INC:* */ case 0x72: MLITD(x); WPSHD(x+1); continue;
-/* DEC:* */ case 0x73: MLITD(x); WPSHD(x-1); continue;
-/* LTH:* */ case 0x74: MLITD(y); WPOPD(x); WPSH1(BOOL(x<y)); continue;
-/* GTH:* */ case 0x75: MLITD(y); WPOPD(x); WPSH1(BOOL(x>y)); continue;
-/* EQU:* */ case 0x76: MLIT2(c,d); WPOP2(a,b); WPSH1(BOOL(a==c && b==d)); continue;
-/* NQK:* */ case 0x77: MLIT2(c,d); WGET2(a,b); WPSH2(c,d); WPSH1(BOOL(a!=c || b!=d)); continue;
-/* IOR:* */ case 0x78: MLIT2(c,d); WSTV(-1)|=d; WSTV(-2)|=c; continue;
-/* XOR:* */ case 0x79: MLIT2(c,d); WSTV(-1)^=d; WSTV(-2)^=c; continue;
-/* AND:* */ case 0x7A: MLIT2(c,d); WSTV(-1)&=d; WSTV(-2)&=c; continue;
-/* NOT:* */ case 0x7B: MLIT2(a,b); WPSH2(~a,~b); continue;
-/* SHF:* */ case 0x7C: MLIT1(c); WPOPD(x); x=SHF(x,c); WPSHD(x); continue;
-/* SHC:* */ case 0x7D: MLIT1(c); WPOPD(x); x=shcd(x,c); WPSHD(x); continue;
-/* TAL:* */ case 0x7E: MLIT2(a,b); WPSH1(TAL(a)+TAL(b)); continue;
-/* REV:* */ case 0x7F: MLIT2(a,b); WPSH1(rev(b)); WPSH1(rev(a)); continue;
+/* PSH*: */ case 0x61: MPOP2(x,y); WPSH2(x,y); continue;
+/* POP*: */ case 0x62: IP+=2; continue;
+/* CPY*: */ case 0x63: MPOP2(x,y); RPSH2(x,y); WPSH2(x,y); continue;
+/* DUP*: */ case 0x64: MPOP2(x,y); WPSH2(x,y); WPSH2(x,y); continue;
+/* OVR*: */ case 0x65: MPOP2(y,z); WGET2(w,x); WPSH2(y,z); WPSH2(w,x); continue;
+/* SWP*: */ case 0x66: MPOP2(y,z); WPOP2(w,x); WPSH2(y,z); WPSH2(w,x); continue;
+/* ROT*: */ case 0x67: MPOP2(y,z); WPOP2(w,x); WPOP2(u,v); WPSH2(w,x); WPSH2(y,z); WPSH2(u,v); continue;
+/* JMP*: */ case 0x68: MPOPD(x); IP=x; continue;
+/* JMS*: */ case 0x69: MPOPD(x); RPSHD(IP); IP=x; continue;
+/* JCN*: */ case 0x6A: MPOPD(y); WPOPD(x); if(x) IP=y; continue;
+/* JCS*: */ case 0x6B: MPOPD(y); WPOPD(x); if(x) { RPSHD(IP); IP=y; } continue;
+/* LDA*: */ case 0x6C: MPOPD(x); WPSH2(MEM[x], MEM[x+1]); continue;
+/* STA*: */ case 0x6D: MPOPD(z); WPOP2(x,y); MEM[z]=x; MEM[z+1]=y; continue;
+/* LDD*: */ case 0x6E: MPOP1(x); WPSH1(DGET1(x)); WPSH1(DGET1(x+1)); continue;
+/* STD*: */ case 0x6F: MPOP1(z); WPOP2(x,y); sig=DSET2(z,x,y); SIGNAL(sig);
+/* ADD*: */ case 0x70: MPOPD(y); WPOPD(x); WPSHD(x+y); continue;
+/* SUB*: */ case 0x71: MPOPD(y); WPOPD(x); WPSHD(x-y); continue;
+/* INC*: */ case 0x72: MPOPD(x); WPSHD(x+1); continue;
+/* DEC*: */ case 0x73: MPOPD(x); WPSHD(x-1); continue;
+/* LTH*: */ case 0x74: MPOPD(y); WPOPD(x); WPSHB(x<y); continue;
+/* GTH*: */ case 0x75: MPOPD(y); WPOPD(x); WPSHB(x>y); continue;
+/* EQU*: */ case 0x76: MPOP2(y,z); WPOP2(w,x); WPSHB(w==y && x==z); continue;
+/* NQK*: */ case 0x77: MPOP2(y,z); WGET2(w,x); WPSH2(y,z); WPSHB(w!=y || x!=z); continue;
+/* SHL*: */ case 0x78: MPOP1(y); WPOPD(x); WPSHD(x<<y); continue;
+/* SHR*: */ case 0x79: MPOP1(y); WPOPD(x); WPSHD(x>>y); continue;
+/* ROL*: */ case 0x7A: MPOP1(y); WPOPD(x); WPSHD(ROLD(x,y)); continue;
+/* ROR*: */ case 0x7B: MPOP1(y); WPOPD(x); WPSHD(RORD(x,y)); continue;
+/* IOR*: */ case 0x7C: MPOP2(x,y); WSTV(-1)|=y; WSTV(-2)|=x; continue;
+/* XOR*: */ case 0x7D: MPOP2(x,y); WSTV(-1)^=y; WSTV(-2)^=x; continue;
+/* AND*: */ case 0x7E: MPOP2(x,y); WSTV(-1)&=y; WSTV(-2)&=x; continue;
+/* NOT*: */ case 0x7F: MPOP2(x,y); WPSH2(~x,~y); continue;
/* DB3 */ case 0x80: return SIG_DB3;
-/* JMPr */ case 0x81: RPOP2(a,b); PC=DOUBLE(a,b); continue;
-/* JCNr */ case 0x82: RPOP2(b,c); RPOP1(a); if(a) PC=DOUBLE(b,c); continue;
-/* JCKr */ case 0x83: RPOP2(b,c); RGET1(a); if(a) PC=DOUBLE(b,c); continue;
-/* LDAr */ case 0x84: RPOP2(a,b); x=DOUBLE(a,b); RPSH1(MEM[x]); continue;
-/* STAr */ case 0x85: RPOPD(x); RPOP1(a); MEM[x]=a; continue;
-/* LDDr */ case 0x86: RPOP1(a); RPSH1(dev_read(br,a)); continue;
-/* STDr */ case 0x87: RPOP1(b); RPOP1(a); sig=dev_write(br,b,a); SIGNAL(sig);
-/* PSHr */ case 0x88: WPOP1(a); RPSH1(a); continue;
-/* POPr */ case 0x89: RST.p-=1; continue;
-/* CPYr */ case 0x8A: WGET1(a); RPSH1(a); continue;
-/* SPLr */ case 0x8B: RPOP1(a); RPSH2(LEFT(a),RIGHT(a)); continue;
-/* DUPr */ case 0x8C: RGET1(a); RPSH1(a); continue;
-/* OVRr */ case 0x8D: RPOP1(b); RGET1(a); RPSH1(b); RPSH1(a); continue;
-/* SWPr */ case 0x8E: RPOP1(b); RPOP1(a); RPSH1(b); RPSH1(a); continue;
-/* ROTr */ case 0x8F: RPOP1(c); RPOP1(b); RPOP1(a); RPSH1(b); RPSH1(c); RPSH1(a); continue;
-/* ADDr */ case 0x90: RPOP1(b); RSTV(-1)+=b; continue;
-/* SUBr */ case 0x91: RPOP1(b); RSTV(-1)-=b; continue;
+/* PSHr */ case 0x81: WPOP1(x); RPSH1(x); continue;
+/* POPr */ case 0x82: RST.p-=1; continue;
+/* CPYr */ case 0x83: WGET1(x); RPSH1(x); continue;
+/* DUPr */ case 0x84: RGET1(x); RPSH1(x); continue;
+/* OVRr */ case 0x85: RPOP1(y); RGET1(x); RPSH1(y); RPSH1(x); continue;
+/* SWPr */ case 0x86: RPOP1(y); RPOP1(x); RPSH1(y); RPSH1(x); continue;
+/* ROTr */ case 0x87: RPOP1(z); RPOP1(y); RPOP1(x); RPSH1(y); RPSH1(z); RPSH1(x); continue;
+/* JMPr */ case 0x88: RPOPD(x); IP=x; continue;
+/* JMSr */ case 0x89: RPOPD(x); WPSHD(IP); IP=x; continue;
+/* JCNr */ case 0x8A: RPOPD(y); RPOP1(x); if(x) IP=y; continue;
+/* JCSr */ case 0x8B: RPOPD(y); RPOP1(x); if(x) { WPSHD(IP); IP=y; } continue;
+/* LDAr */ case 0x8C: RPOPD(x); RPSH1(MEM[x]); continue;
+/* STAr */ case 0x8D: RPOPD(y); RPOP1(x); MEM[y]=x; continue;
+/* LDDr */ case 0x8E: RPOP1(x); RPSH1(dev_read(&br->dev,x)); continue;
+/* STDr */ case 0x8F: RPOP1(y); RPOP1(x); sig=dev_write(&br->dev,y,x); SIGNAL(sig);
+/* ADDr */ case 0x90: RPOP1(x); RSTV(-1)+=x; continue;
+/* SUBr */ case 0x91: RPOP1(x); RSTV(-1)-=x; continue;
/* INCr */ case 0x92: RSTV(-1)+=1; continue;
/* DECr */ case 0x93: RSTV(-1)-=1; continue;
-/* LTHr */ case 0x94: RPOP1(b); RPOP1(a); RPSH1(BOOL(a<b)); continue;
-/* GTHr */ case 0x95: RPOP1(b); RPOP1(a); RPSH1(BOOL(a>b)); continue;
-/* EQUr */ case 0x96: RPOP1(b); RPOP1(a); RPSH1(BOOL(a==b)); continue;
-/* NQKr */ case 0x97: b=RSTV(-1); a=RSTV(-2); RPSH1(BOOL(a!=b)); continue;
-/* IORr */ case 0x98: RPOP1(b); RSTV(-1)|=b; continue;
-/* XORr */ case 0x99: RPOP1(b); RSTV(-1)^=b; continue;
-/* ANDr */ case 0x9A: RPOP1(b); RSTV(-1)&=b; continue;
-/* NOTr */ case 0x9B: RSTV(-1)=~RSTV(-1); continue;
-/* SHFr */ case 0x9C: RPOP1(b); RPOP1(a); x=SHF(a,b); RPSH1(x); continue;
-/* SHCr */ case 0x9D: RPOP1(b); RPOP1(a); x=shc(a,b); RPSH1(x); continue;
-/* TALr */ case 0x9E: RSTV(-1)=TAL(RSTV(-1)); continue;
-/* REVr */ case 0x9F: RSTV(-1)=rev(RSTV(-1)); continue;
+/* LTHr */ case 0x94: RPOP1(y); RPOP1(x); RPSHB(x<y); continue;
+/* GTHr */ case 0x95: RPOP1(y); RPOP1(x); RPSHB(x>y); continue;
+/* EQUr */ case 0x96: RPOP1(y); RPOP1(x); RPSHB(x==y); continue;
+/* NQKr */ case 0x97: y=RSTV(-1); x=RSTV(-2); RPSHB(x!=y); continue;
+/* SHLr */ case 0x98: RPOP1(y); RPOP1(x); RPSH1(x<<y); continue;
+/* SHRr */ case 0x99: RPOP1(y); RPOP1(x); RPSH1(x>>y); continue;
+/* ROLr */ case 0x9A: RPOP1(y); RPOP1(x); RPSH1(ROL1(x,y)); continue;
+/* RORr */ case 0x9B: RPOP1(y); RPOP1(x); RPSH1(ROR1(x,y)); continue;
+/* IORr */ case 0x9C: RPOP1(x); RSTV(-1)|=x; continue;
+/* XORr */ case 0x9D: RPOP1(x); RSTV(-1)^=x; continue;
+/* ANDr */ case 0x9E: RPOP1(x); RSTV(-1)&=x; continue;
+/* NOTr */ case 0x9F: RSTV(-1)=~RSTV(-1); continue;
/* DB4 */ case 0xA0: return SIG_DB4;
-/* JMSr */ case 0xA1: RPOP2(a,b); WPSHD(PC); PC=DOUBLE(a,b); continue;
-/* JCSr */ case 0xA2: RPOP2(b,c); RPOP1(a); if(a) {WPSHD(PC); PC=DOUBLE(b,c);} continue;
-/* JCKr* */ case 0xA3: RPOP2(c,d); RGETD(x); if(x) {PC=DOUBLE(c,d);} continue;
-/* LDAr* */ case 0xA4: RPOP2(a,b); x=DOUBLE(a,b); RPSH1(MEM[x]); RPSH1(MEM[x+1]); continue;
-/* STAr* */ case 0xA5: RPOPD(x); RPOP2(a,b); MEM[x]=a; MEM[x+1]=b; continue;
-/* LDDr* */ case 0xA6: RPOP1(a); RPSH1(dev_read(br,a)); RPSH1(dev_read(br,a+1)); continue;
-/* STDr* */ case 0xA7: RPOP1(c); RPOP2(a,b); sig=dev_write_16(br,c,a,b); SIGNAL(sig);
-/* PSHr* */ case 0xA8: WPOP2(a,b); RPSH2(a,b); continue;
-/* POPr* */ case 0xA9: RST.p-=2; continue;
-/* CPYr* */ case 0xAA: WGET2(a,b); RPSH2(a,b); continue;
-/* SPLr* */ case 0xAB: RPOP2(a,b); RPSH2(LEFT(a),RIGHT(a)); RPSH2(LEFT(b),RIGHT(b)); continue;
-/* DUPr* */ case 0xAC: RGET2(a,b); RPSH2(a,b); continue;
-/* OVRr* */ case 0xAD: RPOP2(c,d); RGET2(a,b); RPSH2(c,d); RPSH2(a,b); continue;
-/* SWPr* */ case 0xAE: RPOP2(c,d); RPOP2(a,b); RPSH2(c,d); RPSH2(a,b); continue;
-/* ROTr* */ case 0xAF: RPOP2(e,f); RPOP2(c,d); RPOP2(a,b); RPSH2(c,d); RPSH2(e,f); RPSH2(a,b); continue;
-/* ADDr* */ case 0xB0: RPOPD(y); RPOPD(x); RPSHD(x+y); continue;
-/* SUBr* */ case 0xB1: RPOPD(y); RPOPD(x); RPSHD(x-y); continue;
-/* INCr* */ case 0xB2: RPOPD(x); RPSHD(x+1); continue;
-/* DECr* */ case 0xB3: RPOPD(x); RPSHD(x-1); continue;
-/* LTHr* */ case 0xB4: RPOPD(y); RPOPD(x); RPSH1(BOOL(x<y)); continue;
-/* GTHr* */ case 0xB5: RPOPD(y); RPOPD(x); RPSH1(BOOL(x>y)); continue;
-/* EQUr* */ case 0xB6: RPOP2(c,d); RPOP2(a,b); RPSH1(BOOL(a==c && b==d)); continue;
-/* NQKr* */ case 0xB7: d=RSTV(-1); c=RSTV(-2); b=RSTV(-3); a=RSTV(-4); RPSH1(BOOL(a!=c || b!=d)); continue;
-/* IORr* */ case 0xB8: RPOP2(c,d); RSTV(-1)|=d; RSTV(-2)|=c; continue;
-/* XORr* */ case 0xB9: RPOP2(c,d); RSTV(-1)^=d; RSTV(-2)^=c; continue;
-/* ANDr* */ case 0xBA: RPOP2(c,d); RSTV(-1)&=d; RSTV(-2)&=c; continue;
-/* NOTr* */ case 0xBB: RSTV(-1)=~RSTV(-1); RSTV(-2)=~RSTV(-2); continue;
-/* SHFr* */ case 0xBC: RPOP1(c); RPOPD(x); x=SHF(x,c); RPSHD(x); continue;
-/* SHCr* */ case 0xBD: RPOP1(c); RPOPD(x); x=shcd(x,c); RPSHD(x); continue;
-/* TALr* */ case 0xBE: RPOP2(a,b); RPSH1(TAL(a)+TAL(b)); continue;
-/* REVr* */ case 0xBF: RPOP2(a,b); RPSH1(rev(b)); RPSH1(rev(a)); continue;
+/* PSHr: */ case 0xA1: MPOP1(x); RPSH1(x); continue;
+/* POPr: */ case 0xA2: IP+=1; continue;
+/* CPYr: */ case 0xA3: MPOP1(x); WPSH1(x); RPSH1(x); continue;
+/* DUPr: */ case 0xA4: MPOP1(x); RPSH1(x); RPSH1(x); continue;
+/* OVRr: */ case 0xA5: MPOP1(y); RGET1(x); RPSH1(y); RPSH1(x); continue;
+/* SWPr: */ case 0xA6: MPOP1(y); RPOP1(x); RPSH1(y); RPSH1(x); continue;
+/* ROTr: */ case 0xA7: MPOP1(z); RPOP1(y); RPOP1(x); RPSH1(y); RPSH1(z); RPSH1(x); continue;
+/* JMPr: */ case 0xA8: MPOPD(x); IP=x; continue;
+/* JMSr: */ case 0xA9: MPOPD(x); WPSHD(IP); IP=x; continue;
+/* JCNr: */ case 0xAA: MPOPD(y); RPOP1(x); if(x) IP=y; continue;
+/* JCSr: */ case 0xAB: MPOPD(y); RPOP1(x); if(x) { WPSHD(IP); IP=y; } continue;
+/* LDAr: */ case 0xAC: MPOPD(x); RPSH1(MEM[x]); continue;
+/* STAr: */ case 0xAD: MPOPD(y); RPOP1(x); MEM[y]=x; continue;
+/* LDDr: */ case 0xAE: MPOP1(x); RPSH1(dev_read(&br->dev,x)); continue;
+/* STDr: */ case 0xAF: MPOP1(y); RPOP1(x); sig=dev_write(&br->dev,y,x); SIGNAL(sig);
+/* ADDr: */ case 0xB0: MPOP1(x); RSTV(-1)+=x; continue;
+/* SUBr: */ case 0xB1: MPOP1(x); RSTV(-1)-=x; continue;
+/* INCr: */ case 0xB2: MPOP1(x); RPSH1(x+1); continue;
+/* DECr: */ case 0xB3: MPOP1(x); RPSH1(x-1); continue;
+/* LTHr: */ case 0xB4: MPOP1(y); RPOP1(x); RPSHB(x<y); continue;
+/* GTHr: */ case 0xB5: MPOP1(y); RPOP1(x); RPSHB(x>y); continue;
+/* EQUr: */ case 0xB6: MPOP1(y); RPOP1(x); RPSHB(x==y); continue;
+/* NQKr: */ case 0xB7: MPOP1(y); RGET1(x); RPSH1(y); RPSHB(x!=y); continue;
+/* SHLr: */ case 0xB8: MPOP1(y); RPOP1(x); RPSH1(x<<y); continue;
+/* SHRr: */ case 0xB9: MPOP1(y); RPOP1(x); RPSH1(x>>y); continue;
+/* ROLr: */ case 0xBA: MPOP1(y); RPOP1(x); RPSH1(ROL1(x,y)); continue;
+/* RORr: */ case 0xBB: MPOP1(y); RPOP1(x); RPSH1(ROR1(x,y)); continue;
+/* IORr: */ case 0xBC: MPOP1(x); RSTV(-1)|=x; continue;
+/* XORr: */ case 0xBD: MPOP1(x); RSTV(-1)^=x; continue;
+/* ANDr: */ case 0xBE: MPOP1(x); RSTV(-1)&=x; continue;
+/* NOTr: */ case 0xBF: MPOP1(x); RPSH1(~x); continue;
/* DB5 */ case 0xC0: return SIG_DB5;
-/* JMPr: */ case 0xC1: MLIT2(a,b); PC=DOUBLE(a,b); continue;
-/* JCNr: */ case 0xC2: MLIT2(b,c); RPOP1(a); if(a) PC=DOUBLE(b,c); continue;
-/* JCKr: */ case 0xC3: MLIT2(b,c); RGET1(a); if(a) PC=DOUBLE(b,c); continue;
-/* LDAr: */ case 0xC4: MLIT2(a,b); x=DOUBLE(a,b); RPSH1(MEM[x]); continue;
-/* STAr: */ case 0xC5: MLITD(x); RPOP1(a); MEM[x]=a; continue;
-/* LDDr: */ case 0xC6: MLIT1(a); RPSH1(dev_read(br,a)); continue;
-/* STDr: */ case 0xC7: MLIT1(b); RPOP1(a); sig=dev_write(br,b,a); SIGNAL(sig);
-/* PSHr: */ case 0xC8: MLIT1(a); RPSH1(a); continue;
-/* POPr: */ case 0xC9: PC+=1; continue;
-/* CPYr: */ case 0xCA: MLIT1(a); WPSH1(a); RPSH1(a); continue;
-/* SPLr: */ case 0xCB: MLIT1(a); RPSH2(LEFT(a),RIGHT(a)); continue;
-/* DUPr: */ case 0xCC: MLIT1(a); RPSH1(a); RPSH1(a); continue;
-/* OVRr: */ case 0xCD: MLIT1(b); RGET1(a); RPSH1(b); RPSH1(a); continue;
-/* SWPr: */ case 0xCE: MLIT1(b); RPOP1(a); RPSH1(b); RPSH1(a); continue;
-/* ROTr: */ case 0xCF: MLIT1(c); RPOP1(b); RPOP1(a); RPSH1(b); RPSH1(c); RPSH1(a); continue;
-/* ADDr: */ case 0xD0: MLIT1(b); RSTV(-1)+=b; continue;
-/* SUBr: */ case 0xD1: MLIT1(b); RSTV(-1)-=b; continue;
-/* INCr: */ case 0xD2: MLIT1(a); RPSH1(a+1); continue;
-/* DECr: */ case 0xD3: MLIT1(a); RPSH1(a-1); continue;
-/* LTHr: */ case 0xD4: MLIT1(b); RPOP1(a); RPSH1(BOOL(a<b)); continue;
-/* GTHr: */ case 0xD5: MLIT1(b); RPOP1(a); RPSH1(BOOL(a>b)); continue;
-/* EQUr: */ case 0xD6: MLIT1(b); RPOP1(a); RPSH1(BOOL(a==b)); continue;
-/* NQKr: */ case 0xD7: MLIT1(b); RGET1(a); RPSH1(b); RPSH1(BOOL(a!=b)); continue;
-/* IORr: */ case 0xD8: MLIT1(b); RSTV(-1)|=b; continue;
-/* XORr: */ case 0xD9: MLIT1(b); RSTV(-1)^=b; continue;
-/* ANDr: */ case 0xDA: MLIT1(b); RSTV(-1)&=b; continue;
-/* NOTr: */ case 0xDB: MLIT1(a); RPSH1(~a); continue;
-/* SHFr: */ case 0xDC: MLIT1(b); RPOP1(a); x=SHF(a,b); RPSH1(x); continue;
-/* SHCr: */ case 0xDD: MLIT1(b); RPOP1(a); x=shc(a,b); RPSH1(x); continue;
-/* TALr: */ case 0xDE: MLIT1(a); RPSH1(TAL(a)); continue;
-/* REVr: */ case 0xDF: MLIT1(a); RPSH1(rev(a)); continue;
+/* PSHr* */ case 0xC1: WPOP2(x,y); RPSH2(x,y); continue;
+/* POPr* */ case 0xC2: RST.p-=2; continue;
+/* CPYr* */ case 0xC3: WGET2(x,y); RPSH2(x,y); continue;
+/* DUPr* */ case 0xC4: RGET2(x,y); RPSH2(x,y); continue;
+/* OVRr* */ case 0xC5: RPOP2(y,z); RGET2(w,x); RPSH2(y,z); RPSH2(w,x); continue;
+/* SWPr* */ case 0xC6: RPOP2(y,z); RPOP2(w,x); RPSH2(y,z); RPSH2(w,x); continue;
+/* ROTr* */ case 0xC7: RPOP2(y,z); RPOP2(w,x); RPOP2(u,v); RPSH2(w,x); RPSH2(y,z); RPSH2(u,v); continue;
+/* JMPr* */ case 0xC8: RPOPD(x); IP=x; continue;
+/* JMSr* */ case 0xC9: RPOPD(x); WPSHD(IP); IP=x; continue;
+/* JCNr* */ case 0xCA: RPOPD(y); RPOPD(x); if(x) IP=y; continue;
+/* JCSr* */ case 0xCB: RPOPD(y); RPOPD(x); if(x) { WPSHD(IP); IP=y; } continue;
+/* LDAr* */ case 0xCC: RPOPD(x); RPSH2(MEM[x], MEM[x+1]); continue;
+/* STAr* */ case 0xCD: RPOPD(z); RPOP2(x,y); MEM[z]=x; MEM[z+1]=y; continue;
+/* LDDr* */ case 0xCE: RPOP1(x); RPSH1(DGET1(x)); RPSH1(DGET1(x+1)); continue;
+/* STDr* */ case 0xCF: RPOP1(z); RPOP2(x,y); sig=DSET2(z,x,y); SIGNAL(sig);
+/* ADDr* */ case 0xD0: RPOPD(y); RPOPD(x); RPSHD(x+y); continue;
+/* SUBr* */ case 0xD1: RPOPD(y); RPOPD(x); RPSHD(x-y); continue;
+/* INCr* */ case 0xD2: RPOPD(x); RPSHD(x+1); continue;
+/* DECr* */ case 0xD3: RPOPD(x); RPSHD(x-1); continue;
+/* LTHr* */ case 0xD4: RPOPD(y); RPOPD(x); RPSHB(x<y); continue;
+/* GTHr* */ case 0xD5: RPOPD(y); RPOPD(x); RPSHB(x>y); continue;
+/* EQUr* */ case 0xD6: RPOP2(y,z); RPOP2(w,x); RPSHB(w==y && x==z); continue;
+/* NQKr* */ case 0xD7: z=RSTV(-1); y=RSTV(-2); x=RSTV(-3); w=RSTV(-4); RPSHB(w!=y || x!=z); continue;
+/* SHLr* */ case 0xD8: RPOP1(y); RPOPD(x); RPSHD(x<<y); continue;
+/* SHRr* */ case 0xD9: RPOP1(y); RPOPD(x); RPSHD(x>>y); continue;
+/* ROLr* */ case 0xDA: RPOP1(y); RPOPD(x); RPSHD(ROLD(x,y)); continue;
+/* RORr* */ case 0xDB: RPOP1(y); RPOPD(x); RPSHD(RORD(x,y)); continue;
+/* IORr* */ case 0xDC: RPOP2(x,y); RSTV(-1)|=y; RSTV(-2)|=x; continue;
+/* XORr* */ case 0xDD: RPOP2(x,y); RSTV(-1)^=y; RSTV(-2)^=x; continue;
+/* ANDr* */ case 0xDE: RPOP2(x,y); RSTV(-1)&=y; RSTV(-2)&=x; continue;
+/* NOTr* */ case 0xDF: RSTV(-1)=~RSTV(-1); RSTV(-2)=~RSTV(-2); continue;
/* DB6 */ case 0xE0: return SIG_DB6;
-/* JMSr */ case 0xE1: MLIT2(a,b); WPSHD(PC); PC=DOUBLE(a,b); continue;
-/* JCSr */ case 0xE2: MLIT2(b,c); RPOP1(a); if(a) {WPSHD(PC); PC=DOUBLE(b,c);} continue;
-/* JCKr* */ case 0xE3: MLIT2(c,d); RGETD(x); if(x) {PC=DOUBLE(c,d);} continue;
-/* LDAr* */ case 0xE4: MLIT2(a,b); x=DOUBLE(a,b); RPSH1(MEM[x]); RPSH1(MEM[x+1]); continue;
-/* STAr* */ case 0xE5: MLITD(x); RPOP2(a,b); MEM[x]=a; MEM[x+1]=b; continue;
-/* LDDr* */ case 0xE6: MLIT1(a); RPSH1(dev_read(br,a)); RPSH1(dev_read(br,a+1)); continue;
-/* STDr* */ case 0xE7: MLIT1(c); RPOP2(a,b); sig=dev_write_16(br,c,a,b); SIGNAL(sig);
-/* PSHr* */ case 0xE8: MLIT2(a,b); RPSH2(a,b); continue;
-/* POPr* */ case 0xE9: PC+=2; continue;
-/* CPYr* */ case 0xEA: MLIT2(a,b); WPSH2(a,b); RPSH2(a,b); continue;
-/* SPLr* */ case 0xEB: MLIT2(a,b); RPSH2(LEFT(a),RIGHT(a)); RPSH2(LEFT(b),RIGHT(b)); continue;
-/* DUPr* */ case 0xEC: MLIT2(a,b); RPSH2(a,b); RPSH2(a,b); continue;
-/* OVRr* */ case 0xED: MLIT2(c,d); RGET2(a,b); RPSH2(c,d); RPSH2(a,b); continue;
-/* SWPr* */ case 0xEE: MLIT2(c,d); RPOP2(a,b); RPSH2(c,d); RPSH2(a,b); continue;
-/* ROTr* */ case 0xEF: MLIT2(e,f); RPOP2(c,d); RPOP2(a,b); RPSH2(c,d); RPSH2(e,f); RPSH2(a,b); continue;
-/* ADDr* */ case 0xF0: MLITD(y); RPOPD(x); RPSHD(x+y); continue;
-/* SUBr* */ case 0xF1: MLITD(y); RPOPD(x); RPSHD(x-y); continue;
-/* INCr* */ case 0xF2: MLITD(x); RPSHD(x+1); continue;
-/* DECr* */ case 0xF3: MLITD(x); RPSHD(x-1); continue;
-/* LTHr* */ case 0xF4: MLITD(y); RPOPD(x); RPSH1(BOOL(x<y)); continue;
-/* GTHr* */ case 0xF5: MLITD(y); RPOPD(x); RPSH1(BOOL(x>y)); continue;
-/* EQUr* */ case 0xF6: MLIT2(c,d); RPOP2(a,b); RPSH1(BOOL(a==c && b==d)); continue;
-/* NQKr* */ case 0xF7: MLIT2(c,d); RGET2(a,b); RPSH2(c,d); RPSH1(BOOL(a!=c || b!=d)); continue;
-/* IORr* */ case 0xF8: MLIT2(c,d); RSTV(-1)|=d; RSTV(-2)|=c; continue;
-/* XORr* */ case 0xF9: MLIT2(c,d); RSTV(-1)^=d; RSTV(-2)^=c; continue;
-/* ANDr* */ case 0xFA: MLIT2(c,d); RSTV(-1)&=d; RSTV(-2)&=c; continue;
-/* NOTr* */ case 0xFB: MLIT2(a,b); RPSH2(~a,~b); continue;
-/* SHFr* */ case 0xFC: MLIT1(c); RPOPD(x); x=SHF(x,c); RPSHD(x); continue;
-/* SHCr* */ case 0xFD: MLIT1(c); RPOPD(x); x=shcd(x,c); RPSHD(x); continue;
-/* TALr* */ case 0xFE: MLIT2(a,b); RPSH1(TAL(a)+TAL(b)); continue;
-/* REVr* */ case 0xFF: MLIT2(a,b); RPSH1(rev(b)); RPSH1(rev(a)); continue;
+/* PSHr*: */ case 0xE1: MPOP2(x,y); RPSH2(x,y); continue;
+/* POPr*: */ case 0xE2: IP+=2; continue;
+/* CPYr*: */ case 0xE3: MPOP2(x,y); WPSH2(x,y); RPSH2(x,y); continue;
+/* DUPr*: */ case 0xE4: MPOP2(x,y); RPSH2(x,y); RPSH2(x,y); continue;
+/* OVRr*: */ case 0xE5: MPOP2(y,z); RGET2(w,x); RPSH2(y,z); RPSH2(w,x); continue;
+/* SWPr*: */ case 0xE6: MPOP2(y,z); RPOP2(w,x); RPSH2(y,z); RPSH2(w,x); continue;
+/* ROTr*: */ case 0xE7: MPOP2(y,z); RPOP2(w,x); RPOP2(u,v); RPSH2(w,x); RPSH2(y,z); RPSH2(u,v); continue;
+/* JMPr*: */ case 0xE8: MPOPD(x); IP=x; continue;
+/* JMSr*: */ case 0xE9: MPOPD(x); WPSHD(IP); IP=x; continue;
+/* JCNr*: */ case 0xEA: MPOPD(y); RPOPD(x); if(x) IP=y; continue;
+/* JCSr*: */ case 0xEB: MPOPD(y); RPOPD(x); if(x) { WPSHD(IP); IP=y; } continue;
+/* LDAr*: */ case 0xEC: MPOPD(x); RPSH2(MEM[x], MEM[x+1]); continue;
+/* STAr*: */ case 0xED: MPOPD(z); RPOP2(x,y); MEM[z]=x; MEM[z+1]=y; continue;
+/* LDDr*: */ case 0xEE: MPOP1(x); RPSH1(DGET1(x)); RPSH1(DGET1(x+1)); continue;
+/* STDr*: */ case 0xEF: MPOP1(z); RPOP2(x,y); sig=DSET2(z,x,y); SIGNAL(sig);
+/* ADDr*: */ case 0xF0: MPOPD(y); RPOPD(x); RPSHD(x+y); continue;
+/* SUBr*: */ case 0xF1: MPOPD(y); RPOPD(x); RPSHD(x-y); continue;
+/* INCr*: */ case 0xF2: MPOPD(x); RPSHD(x+1); continue;
+/* DECr*: */ case 0xF3: MPOPD(x); RPSHD(x-1); continue;
+/* LTHr*: */ case 0xF4: MPOPD(y); RPOPD(x); RPSHB(x<y); continue;
+/* GTHr*: */ case 0xF5: MPOPD(y); RPOPD(x); RPSHB(x>y); continue;
+/* EQUr*: */ case 0xF6: MPOP2(y,z); RPOP2(w,x); RPSHB(w==y && x==z); continue;
+/* NQKr*: */ case 0xF7: MPOP2(y,z); RGET2(w,x); RPSH2(y,z); RPSHB(w!=y || x!=z); continue;
+/* SHLr*: */ case 0xF8: MPOP1(y); RPOPD(x); RPSHD(x<<y); continue;
+/* SHRr*: */ case 0xF9: MPOP1(y); RPOPD(x); RPSHD(x>>y); continue;
+/* ROLr*: */ case 0xFA: MPOP1(y); RPOPD(x); RPSHD(ROLD(x,y)); continue;
+/* RORr*: */ case 0xFB: MPOP1(y); RPOPD(x); RPSHD(RORD(x,y)); continue;
+/* IORr*: */ case 0xFC: MPOP2(x,y); RSTV(-1)|=y; RSTV(-2)|=x; continue;
+/* XORr*: */ case 0xFD: MPOP2(x,y); RSTV(-1)^=y; RSTV(-2)^=x; continue;
+/* ANDr*: */ case 0xFE: MPOP2(x,y); RSTV(-1)&=y; RSTV(-2)&=x; continue;
+/* NOTr*: */ case 0xFF: MPOP2(x,y); RPSH2(~x,~y); continue;
}
}
return SIG_NONE;
}
+
+// Print a stack to the debug console.
+void debug_print_stack(Stack *stack) {
+ for (int i=0; i<stack->p; i++) {
+ printf("%02x ", stack->mem[i]);
+ }
+}
+
+// Print the state of a Bedrock instance to the debug console.
+void debug_print_state(Bedrock *br) {
+ printf("\nP:0x%04x", br->ip);
+ printf("\nW:"); debug_print_stack(&br->wst);
+ printf("\nR:"); debug_print_stack(&br->rst);
+ printf("\n");
+}
+
+// Print the state of a Bedrock instance to the debug console.
+void debug_print_brief(Bedrock *br) {
+ printf("[%02X %02X]", br->wst.p, br->rst.p);
+}
+
+// Assert the state of a Bedrock instance, print to the debug console..
+void debug_print_assert(Bedrock *br) {
+ if (br->wst.mem[0] == 0xff && br->wst.p == 1 && br->rst.p == 0) {
+ printf(".");
+ } else {
+ printf("X");
+ }
+}
+
+// Run a Bedrock instance for a number of cycles.
+void br_run(Bedrock *br) {
+ if (br->alive && br->awake) {
+ switch (br_eval(br, 50000)) {
+ case SIG_HALT: br->alive = false;
+ ndsscreen_clear(br->dev.screen.nds); return;
+ case SIG_SLEEP: br->awake = false; return;
+ case SIG_DB1: debug_print_state(br); return;
+ case SIG_DB2: debug_print_brief(br); return;
+ case SIG_DB4: debug_print_assert(br); return;
+ default: return;
+ }
+ }
+}
diff --git a/arm9/source/core.h b/arm9/source/core.h
index 765be3b..2eccc0a 100644
--- a/arm9/source/core.h
+++ b/arm9/source/core.h
@@ -1,99 +1,27 @@
-#include <nds.h>
-#include "main.h"
-
#ifndef CORE_H_
#define CORE_H_
- #include "devices/system.h"
- #include "devices/memory.h"
- #include "devices/math.h"
- #include "devices/clock.h"
- #include "devices/input.h"
- #include "devices/screen.h"
- #include "devices/local.h"
- #include "devices/file.h"
-
- #define WST br->wst
- #define RST br->rst
- #define MEM br->prg.mem
- #define PC br->prg.p
-
- #define WSTV(i) WST.mem[WST.p+(i)]
- #define RSTV(i) RST.mem[RST.p+(i)]
-
- #define MLIT MEM[PC++]
- #define MLIT1(x) x = MLIT;
- #define MLIT2(x,y) x = MLIT; y = MLIT;
- #define MLITD(d) d = (u16)(MEM[PC] << 8) | (u16)(MEM[PC+1]); PC+=2;
-
- #define WPSH WST.mem[WST.p++]
- #define RPSH RST.mem[RST.p++]
- #define WPSH1(x) WPSH = (x);
- #define RPSH1(x) RPSH = (x);
- #define WPSH2(x,y) WPSH1(x); WPSH1(y);
- #define RPSH2(x,y) RPSH1(x); RPSH1(y);
- #define WPSHD(d) WPSH1(HIGH((d))); WPSH1(LOW((d)));
- #define RPSHD(d) RPSH1(HIGH((d))); RPSH1(LOW((d)));
-
- #define WPOP WST.mem[--WST.p]
- #define RPOP RST.mem[--RST.p]
- #define WPOP1(x) x = WPOP;
- #define RPOP1(x) x = RPOP;
- #define WPOP2(x,y) WPOP1(y); WPOP1(x);
- #define RPOP2(x,y) RPOP1(y); RPOP1(x);
- #define WPOPD(d) d = (u16)(WSTV(-2) << 8) | (u16)(WSTV(-1)); WST.p-=2;
- #define RPOPD(d) d = (u16)(RSTV(-2) << 8) | (u16)(RSTV(-1)); RST.p-=2;
+ #include "bang.h"
+ #include "dev.h"
- #define WGET1(x) x = WSTV(-1);
- #define RGET1(x) x = RSTV(-1);
- #define WGET2(x,y) x = WSTV(-2); y = WSTV(-1);
- #define RGET2(x,y) x = RSTV(-2); y = RSTV(-1);
- #define WGETD(x) x = DOUBLE(WSTV(-2),WSTV(-1));
- #define RGETD(x) x = DOUBLE(RSTV(-2),RSTV(-1));
-
- typedef enum {
- SIG_NONE,
- SIG_HALT,
- SIG_SLEEP,
- SIG_DB1,
- SIG_DB2,
- SIG_DB3,
- SIG_DB4,
- SIG_DB5,
- SIG_DB6,
- } Signal;
-
- typedef struct {
- u8 mem [65536];
- u16 p;
- } ProgramMemory;
typedef struct {
- u8 mem[256]; // stack memory
- u8 p; // stack pointer
- } StackMemory;
+ u8 mem[256];
+ u8 p;
+ } Stack;
typedef struct {
- bool alive; // true when program is loaded
- bool awake; // true when program is not asleep
- ProgramMemory prg; // program memory
- StackMemory wst, rst; // working and return stacks
-
- SystemDevice sys;
- MemoryDevice mem;
- MathDevice math;
- ClockDevice clk;
- InputDevice inp;
- ScreenDevice scr;
- FileDevice fs;
+ bool alive; // True when program is not halted
+ bool awake; // True when program is not asleep
+ u8 mem[65536]; // Program memory
+ u16 ip; // Instruction pointer
+ Stack wst, rst; // Working and return stacks
+ DeviceBus dev; // Device bus
} Bedrock;
- void reset_br(Bedrock *br);
- void start_br(Bedrock *br, u8 program[], int size);
- void run_br(Bedrock *br);
- void rouse_br(Bedrock *br);
- u8 dev_read(Bedrock *br, u8 port);
- Signal dev_write(Bedrock *br, u8 port, u8 val);
- Signal evaluate( Bedrock *br, u16 count);
-
+ // Methods.
+ void br_reset(Bedrock *br);
+ void br_load(Bedrock *br, u8 program[], int size);
+ void br_rouse(Bedrock *br);
+ void br_run(Bedrock *br);
#endif
diff --git a/arm9/source/debug.c b/arm9/source/debug.c
deleted file mode 100644
index eae5192..0000000
--- a/arm9/source/debug.c
+++ /dev/null
@@ -1,24 +0,0 @@
-#include <nds.h>
-#include "core.h"
-
-void debug_stacks(Bedrock *br) {
- u8 i;
- printf("\nP:0x%04x I:0x%02x", PC, MEM[PC]);
- printf("\nW:");
- for (i=0; i<WST.p; i++) {
- printf("%02x ", WST.mem[i]);
- }
- printf("\nR:");
- for (i=0; i<RST.p; i++) {
- printf("%02x ", RST.mem[i]);
- }
- printf("\n");
-}
-
-void debug_assert(Bedrock *br) {
- if (WST.mem[0] == 0xff && WST.p == 1 && RST.p == 0) {
- printf(".");
- } else {
- printf("X");
- }
-}
diff --git a/arm9/source/debug.h b/arm9/source/debug.h
deleted file mode 100644
index 36bfca3..0000000
--- a/arm9/source/debug.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef DEBUG_H_
- #define DEBUG_H_
-
- void debug_stacks(Bedrock *br);
- void debug_assert(Bedrock *br);
-
-#endif
diff --git a/arm9/source/dev.c b/arm9/source/dev.c
new file mode 100644
index 0000000..1b9a1dc
--- /dev/null
+++ b/arm9/source/dev.c
@@ -0,0 +1,213 @@
+#include "dev.h"
+
+
+// Reset every device on a device bus.
+void dev_reset(DeviceBus *d) {
+ system_reset(&d->system);
+ memory_reset(&d->memory);
+ math_reset(&d->math);
+ clock_reset(&d->clock);
+ input_reset(&d->input);
+ screen_reset(&d->screen);
+ stream_reset(&d->stream);
+ fs_reset(&d->file);
+}
+
+// Read a byte from a device bus.
+u8 dev_read(DeviceBus *d, u8 port) {
+ switch(port) {
+ // SYSTEM DEVICE
+ case 0x02: return d->system.wake;
+ case 0x08: return readbuf_read(&d->system.name);
+ case 0x09: return readbuf_read(&d->system.authors);
+ case 0x0E: return GETH(connected_devices());
+ case 0x0F: return GETL(connected_devices());
+ // MEMORY DEVICE
+ case 0x10: return GETH(d->memory.allocated);
+ case 0x11: return GETL(d->memory.allocated);
+ case 0x12: return GETH(d->memory.head1.offset);
+ case 0x13: return GETL(d->memory.head1.offset);
+ case 0x14: return d->memory.head1.page;
+ case 0x15: return d->memory.head1.byte;
+ case 0x16:
+ case 0x17: return memory_read(&d->memory.head1);
+ case 0x1A: return GETH(d->memory.head2.offset);
+ case 0x1B: return GETL(d->memory.head2.offset);
+ case 0x1C: return d->memory.head2.page;
+ case 0x1D: return d->memory.head2.byte;
+ case 0x1E:
+ case 0x1F: return memory_read(&d->memory.head2);
+ // MATH DEVICE
+ case 0x20: return GETH(math_get_x(&d->math));
+ case 0x21: return GETL(math_get_x(&d->math));
+ case 0x22: return GETH(math_get_y(&d->math));
+ case 0x23: return GETL(math_get_y(&d->math));
+ case 0x24: return GETH(math_get_r(&d->math));
+ case 0x25: return GETL(math_get_r(&d->math));
+ case 0x26: return GETH(math_get_t(&d->math));
+ case 0x27: return GETL(math_get_t(&d->math));
+ case 0x28: return GETHH(math_get_prod(&d->math));
+ case 0x29: return GETHL(math_get_prod(&d->math));
+ case 0x2A: return GETLH(math_get_prod(&d->math));
+ case 0x2B: return GETLL(math_get_prod(&d->math));
+ case 0x2C: return GETH(math_get_quot(&d->math));
+ case 0x2D: return GETL(math_get_quot(&d->math));
+ case 0x2E: return GETH(math_get_rem(&d->math));
+ case 0x2F: return GETL(math_get_rem(&d->math));
+ // CLOCK DEVICE
+ case 0x30: return YEAR(get_datetime());
+ case 0x31: return MONTH(get_datetime());
+ case 0x32: return DAY(get_datetime());
+ case 0x33: return HOUR(get_datetime());
+ case 0x34: return MINUTE(get_datetime());
+ case 0x35: return SECOND(get_datetime());
+ case 0x36: clock_uptime_read(&d->clock);
+ return GETH(d->clock.uptime);
+ case 0x37: return GETL(d->clock.uptime);
+ case 0x38: timer_read(&d->clock.t1);
+ return GETH(d->clock.t1.read);
+ case 0x39: return GETL(d->clock.t1.read);
+ case 0x3A: timer_read(&d->clock.t2);
+ return GETH(d->clock.t2.read);
+ case 0x3B: return GETL(d->clock.t2.read);
+ case 0x3C: timer_read(&d->clock.t3);
+ return GETH(d->clock.t3.read);
+ case 0x3D: return GETL(d->clock.t3.read);
+ case 0x3E: timer_read(&d->clock.t4);
+ return GETH(d->clock.t4.read);
+ case 0x3F: return GETL(d->clock.t4.read);
+ // INPUT DEVICE
+ case 0x40: input_read_x(&d->input);
+ return GETH(d->input.x_read);
+ case 0x41: return GETL(d->input.x_read);
+ case 0x42: input_read_y(&d->input);
+ return GETH(d->input.y_read);
+ case 0x43: return GETL(d->input.y_read);
+ case 0x48: return BOOL(d->input.pointer);
+ case 0x49: return d->input.pointer << 7;
+ case 0x4A: return circbuf_read(&d->input.keybuffer);
+ case 0x4C: return d->input.gamepad;
+ // SCREEN DEVICE
+ case 0x50: return GETH(d->screen.x);
+ case 0x51: return GETL(d->screen.x);
+ case 0x52: return GETH(d->screen.y);
+ case 0x53: return GETL(d->screen.y);
+ case 0x54: return GETH(PIXELS_WIDTH);
+ case 0x55: return GETL(PIXELS_WIDTH);
+ case 0x56: return GETH(PIXELS_HEIGHT);
+ case 0x57: return GETL(PIXELS_HEIGHT);
+ // FILE DEVICE
+ case 0x90: return BOOL(fs_get_open(&d->file));
+ case 0x91: return BOOL(fs_get_error(&d->file));
+ case 0x92:
+ case 0x93: return fs_read_byte(&d->file);
+ case 0x94: return pathbuf_read(&d->file.path);
+ case 0x95: return BOOL(fs_get_type(&d->file));
+ case 0x96: return pathbuf_read(&d->file.child_path);
+ case 0x97: return BOOL(fs_get_child_type(&d->file));
+ case 0x98: return GETHH(d->file.address);
+ case 0x99: return GETHL(d->file.address);
+ case 0x9A: return GETLH(d->file.address);
+ case 0x9B: return GETLL(d->file.address);
+ case 0x9C: fs_calculate_length(&d->file); return GETHH(d->file.length);
+ case 0x9D: fs_calculate_length(&d->file); return GETHL(d->file.length);
+ case 0x9E: fs_calculate_length(&d->file); return GETLH(d->file.length);
+ case 0x9F: fs_calculate_length(&d->file); return GETLL(d->file.length);
+ // DEFAULT
+ default: return 0;
+ }
+}
+
+// Write a byte to a device bus.
+Signal dev_write(DeviceBus *d, u8 port, u8 v) {
+ switch(port) {
+ // SYSTEM DEVICE
+ case 0x00: SETH(d->system.sleep, v); break;
+ case 0x01: SETL(d->system.sleep, v); return SIG_SLEEP;
+ case 0x03: if (v) { return SIG_FORK; } else { return SIG_RESET; }
+ case 0x08: readbuf_set_pointer(&d->system.name); break;
+ case 0x09: readbuf_set_pointer(&d->system.authors); break;
+ // MEMORY DEVICE
+ case 0x10: SETH(d->memory.count, v); break;
+ case 0x11: SETL(d->memory.count, v); memory_allocate(&d->memory); break;
+ case 0x12: SETH(d->memory.head1.offset, v);
+ memory_refresh_cache(&d->memory, &d->memory.head1); break;
+ case 0x13: SETL(d->memory.head1.offset, v);
+ memory_refresh_cache(&d->memory, &d->memory.head1); break;
+ case 0x14: d->memory.head1.page = v;
+ memory_refresh_page(&d->memory.head1); break;
+ case 0x15: d->memory.head1.byte = v; break;
+ case 0x16:
+ case 0x17: memory_write(&d->memory.head1, v); break;
+ case 0x18: SETH(d->memory.copy, v); break;
+ case 0x19: SETL(d->memory.copy, v); memory_copy(&d->memory); break;
+ case 0x1A: SETH(d->memory.head2.offset, v);
+ memory_refresh_cache(&d->memory, &d->memory.head2); break;
+ case 0x1B: SETL(d->memory.head2.offset, v);
+ memory_refresh_cache(&d->memory, &d->memory.head2); break;
+ case 0x1C: d->memory.head2.page = v;
+ memory_refresh_page(&d->memory.head2); break;
+ case 0x1D: d->memory.head2.byte = v; break;
+ case 0x1E:
+ case 0x1F: memory_write(&d->memory.head2, v); break;
+ // MATH DEVICE
+ case 0x20: math_clear_cartesian(&d->math); SETH(d->math.x, v); break;
+ case 0x21: math_clear_cartesian(&d->math); SETL(d->math.x, v); break;
+ case 0x22: math_clear_cartesian(&d->math); SETH(d->math.y, v); break;
+ case 0x23: math_clear_cartesian(&d->math); SETL(d->math.y, v); break;
+ case 0x24: math_clear_polar(&d->math); SETH(d->math.r, v); break;
+ case 0x25: math_clear_polar(&d->math); SETL(d->math.r, v); break;
+ case 0x26: math_clear_polar(&d->math); SETH(d->math.t, v); break;
+ case 0x27: math_clear_polar(&d->math); SETL(d->math.t, v); break;
+ // CLOCK DEVICE
+ case 0x38: SETH(d->clock.t1.write, v); break;
+ case 0x39: SETL(d->clock.t1.write, v); timer_write(&d->clock.t1); break;
+ case 0x3A: SETH(d->clock.t2.write, v); break;
+ case 0x3B: SETL(d->clock.t2.write, v); timer_write(&d->clock.t2); break;
+ case 0x3C: SETH(d->clock.t3.write, v); break;
+ case 0x3D: SETL(d->clock.t3.write, v); timer_write(&d->clock.t3); break;
+ case 0x3E: SETH(d->clock.t4.write, v); break;
+ case 0x3F: SETL(d->clock.t4.write, v); timer_write(&d->clock.t4); break;
+ // INPUT DEVICE
+ case 0x4A: circbuf_clear(&d->input.keybuffer);
+ v ? open_keyboard() : close_keyboard(); break;
+ // SCREEN DEVICE
+ case 0x50: SETH(d->screen.x, v); break;
+ case 0x51: SETL(d->screen.x, v); break;
+ case 0x52: SETH(d->screen.y, v); break;
+ case 0x53: SETL(d->screen.y, v); break;
+ case 0x58: SETH(d->screen.colour, v); break;
+ case 0x59: SETL(d->screen.colour, v);
+ screen_commit_colour(&d->screen); break;
+ case 0x5A: SETH(d->screen.selected, v); break;
+ case 0x5B: SETL(d->screen.selected, v); break;
+ case 0x5C:
+ case 0x5D: spritebuf_push(&d->screen.sprite, v); break;
+ case 0x5E: screen_draw(&d->screen, v); break;
+ case 0x5F: screen_move_cursor(&d->screen, v); break;
+ // STREAM DEVICE
+ case 0x83: stream_end(&d->stream); break;
+ case 0x86:
+ case 0x87: stream_write(&d->stream, v); break;
+ // FILE DEVICE
+ case 0x90: fs_push_open(&d->file, v); break;
+ case 0x91: fs_push_action(&d->file, v); break;
+ case 0x92:
+ case 0x93: fs_write_byte(&d->file, v); break;
+ case 0x94: pathbuf_set_pointer(&d->file.path, v); break;
+ case 0x95: fs_ascend(&d->file); break;
+ case 0x96: pathbuf_set_pointer(&d->file.child_path, v); break;
+ case 0x97: fs_descend(&d->file); break;
+ case 0x98: SETHH(d->file.address_write, v); break;
+ case 0x99: SETHL(d->file.address_write, v); break;
+ case 0x9A: SETLH(d->file.address_write, v); break;
+ case 0x9B: SETLL(d->file.address_write, v); fs_seek(&d->file); break;
+ case 0x9C: SETHH(d->file.length_write, v); break;
+ case 0x9D: SETHL(d->file.length_write, v); break;
+ case 0x9E: SETLH(d->file.length_write, v); break;
+ case 0x9F: SETLL(d->file.length_write, v); fs_resize(&d->file); break;
+ // DEFAULT
+ default: break;
+ }
+ return SIG_NONE;
+}
diff --git a/arm9/source/dev.h b/arm9/source/dev.h
new file mode 100644
index 0000000..272baea
--- /dev/null
+++ b/arm9/source/dev.h
@@ -0,0 +1,49 @@
+#ifndef DEV_H_
+ #define DEV_H_
+
+ #include "devices/system.h"
+ #include "devices/memory.h"
+ #include "devices/math.h"
+ #include "devices/clock.h"
+ #include "devices/input.h"
+ #include "devices/screen.h"
+ #include "devices/stream.h"
+ #include "devices/file.h"
+
+
+ // Signals that can be emitted by a device.
+ typedef enum {
+ SIG_NONE = 0,
+ SIG_HALT,
+ SIG_DB1,
+ SIG_DB2,
+ SIG_DB3,
+ SIG_DB4,
+ SIG_DB5,
+ SIG_DB6,
+ SIG_SLEEP,
+ SIG_RESET,
+ SIG_FORK,
+ } Signal;
+
+ // Bedrock device bus.
+ typedef struct {
+ SystemDevice system;
+ MemoryDevice memory;
+ MathDevice math;
+ ClockDevice clock;
+ InputDevice input;
+ ScreenDevice screen;
+ StreamDevice stream;
+ FileDevice file;
+ } DeviceBus;
+
+ // Methods.
+ void dev_reset(DeviceBus *d);
+ u8 dev_read(DeviceBus *d, u8 port);
+ Signal dev_write(DeviceBus *d, u8 port, u8 v);
+
+ // Duplicate declarations from main.
+ void open_keyboard(void);
+ void close_keyboard(void);
+#endif
diff --git a/arm9/source/devices/clock.c b/arm9/source/devices/clock.c
index 6ecee1d..c05ba2b 100644
--- a/arm9/source/devices/clock.c
+++ b/arm9/source/devices/clock.c
@@ -1,55 +1,84 @@
-#include <nds.h>
-#include <time.h>
#include "clock.h"
-#include "../bang.h"
-// Uptime is the number of 1/256th second ticks since the emulator began.
+
+/*
+TODO: Add functions to set the system time and date.
+*/
+
+
+// ------ UPTIME AND DATETIME --------------------------------------------------
+
+// Uptime is the number of 1/256th second ticks elapsed since the emulator began.
static u32 uptime;
-u32 get_uptime(void) { return uptime; }
+
+// Increment the local uptime value.
void uptime_handler(void) { uptime++; }
-// Check if any timer has expired.
-bool check_timers(ClockDevice *clk) {
- bool output = FALSE;
- if (clk->t1.end && clk->t1.end <= uptime) { clk->t1.end = 0; output = TRUE; }
- if (clk->t2.end && clk->t2.end <= uptime) { clk->t2.end = 0; output = TRUE; }
- if (clk->t3.end && clk->t3.end <= uptime) { clk->t3.end = 0; output = TRUE; }
- if (clk->t4.end && clk->t4.end <= uptime) { clk->t4.end = 0; output = TRUE; }
- return output;
+// Configure timer 0 to increment the local uptime value every tick.
+void init_nds_clock(void) {
+ // Start a 256Hz timer to increment the uptime value.
+ timerStart(0, ClockDivider_1024, TIMER_FREQ_1024(256), uptime_handler);
}
-u8 get_timer_high(ClockTimer *t) {
- if (t->end > uptime) {
- t->read = t->end - uptime;
- } else {
- t->end = 0; t->read = 0;
- }
- return HIGH(t->read);
+// Return the current time and date.
+struct tm* get_datetime(void) {
+ time_t timestamp = time(NULL);
+ struct tm* datetime = localtime(&timestamp);
+ return datetime;
}
-u8 get_timer_low(ClockTimer *t) {
- return LOW(t->read);
+
+// ------ TIMERS ---------------------------------------------------------------
+
+// Reset a clock timer.
+void timer_reset(ClockTimer *timer) {
+ timer->end = 0;
+ timer->read = 0;
+ timer->write = 0;
}
-void set_timer_high(ClockTimer *t, u8 high) {
- SET_HIGH(t->write, high);
+// Update the cached read value of a timer.
+void timer_read(ClockTimer *timer) {
+ if (timer->end > uptime) {
+ timer->read = timer->end - uptime;
+ } else {
+ timer->read = 0;
+ timer->end = 0;
+ }
}
-void set_timer_low(ClockTimer *t, u8 low) {
- SET_LOW(t->write, low);
- if (t->write) {
- t->end = uptime + t->write;
+
+// Update the value of a timer using the cached write value.
+void timer_write(ClockTimer *timer) {
+ if (timer->write) {
+ timer->end = uptime + timer->write;
} else {
- t->end = 0;
+ timer->end = 0;
}
}
-void init_clock(void) {
- // Start a 256Hz timer to increment the uptime value.
- timerStart(0, ClockDivider_1024, TIMER_FREQ_1024(256), uptime_handler);
+
+// ------ CLOCK ----------------------------------------------------------------
+
+// Reset the clock device.
+void clock_reset(ClockDevice *clock) {
+ clock->start = uptime;
+ timer_reset(&clock->t1);
+ timer_reset(&clock->t2);
+ timer_reset(&clock->t3);
+ timer_reset(&clock->t4);
}
-struct tm* get_datetime(void) {
- time_t timestamp = time(NULL);
- struct tm* datetime = localtime(&timestamp);
- return datetime;
+// Update the cached uptime value.
+void clock_uptime_read(ClockDevice *clock) {
+ clock->uptime = uptime - clock->start;
+}
+
+// Return true if any timer has expired.
+bool clock_check_timers(ClockDevice *clock) {
+ bool output = false;
+ if (clock->t1.end && clock->t1.end <= uptime) { clock->t1.end = 0; output = true; }
+ if (clock->t2.end && clock->t2.end <= uptime) { clock->t2.end = 0; output = true; }
+ if (clock->t3.end && clock->t3.end <= uptime) { clock->t3.end = 0; output = true; }
+ if (clock->t4.end && clock->t4.end <= uptime) { clock->t4.end = 0; output = true; }
+ return output;
}
diff --git a/arm9/source/devices/clock.h b/arm9/source/devices/clock.h
index 04c4d5d..4dc4b41 100644
--- a/arm9/source/devices/clock.h
+++ b/arm9/source/devices/clock.h
@@ -1,18 +1,24 @@
-#include <time.h>
-
#ifndef CLOCK_H_
#define CLOCK_H_
+ #include <time.h>
+ #include "../bang.h"
+
+
+ // A 16-bit countdown timer.
typedef struct {
- u32 end; // real end time
- u16 read, write; // read write caches
+ u32 end; // End time as an uptime value, zero if inactive
+ u16 read, write; // Read write caches for remaining duration
} ClockTimer;
+ // Bedrock clock device.
typedef struct {
- ClockTimer t1, t2, t3, t4; // timers
- u32 start; // uptime offset
+ ClockTimer t1, t2, t3, t4; // Timers
+ u16 uptime; // Read cache for uptime
+ u32 start; // Uptime offset
} ClockDevice;
+ // Extract fields from a tm struct.
#define YEAR(tm) (tm->tm_year - 100)
#define MONTH(tm) (tm->tm_mon)
#define DAY(tm) (tm->tm_mday - 1)
@@ -20,16 +26,16 @@
#define MINUTE(tm) (tm->tm_min)
#define SECOND(tm) (tm->tm_sec)
- u32 get_uptime(void);
- void uptime_handler(void);
- void init_clock(void);
+ // Functions.
+ void init_nds_clock(void);
struct tm* get_datetime(void);
- bool check_timers(ClockDevice *clk);
-
- u8 get_timer_high(ClockTimer *t);
- u8 get_timer_low( ClockTimer *t);
- void set_timer_high(ClockTimer *t, u8 high);
- void set_timer_low( ClockTimer *t, u8 low);
+ // Timer methods.
+ void timer_read(ClockTimer *timer);
+ void timer_write(ClockTimer *timer);
+ // Clock methods.
+ void clock_reset(ClockDevice *clock);
+ void clock_uptime_read(ClockDevice *clock);
+ bool clock_check_timers(ClockDevice *clock);
#endif
diff --git a/arm9/source/devices/file.c b/arm9/source/devices/file.c
index dcc987d..546ca0c 100644
--- a/arm9/source/devices/file.c
+++ b/arm9/source/devices/file.c
@@ -1,279 +1,323 @@
-#include "nds.h"
-#include "fat.h"
#include "file.h"
-#include <sys/stat.h>
+
+/*
+TODO: I believe that multiple open files are supported, but I'm not so sure
+about multiple open directories. I'm not sure what the limit is for maximum
+open files or directories, or whether it's possible to accidentally exceed
+this limit with multiple Bedrock instances.
+
+TODO: I need to thoroughly test every function of the device on hardware.
+There's a lot that I'm not sure about.
+*/
+
+
+// True if the filesystem is available.
static bool FS_ENABLE = false;
-static u8 buffer[255];
+
+// Scratch buffer for manipulating paths when ascending and descending.
+static u8 scratch[256];
-void init_filesystem() {
+// Attempt to initialise the filesystem.
+void init_nds_filesystem(void) {
FS_ENABLE = fatInitDefault();
}
-bool filesystem_enabled() {
+// Return whether the filesystem is available.
+bool nds_filesystem_enabled() {
return FS_ENABLE;
}
-bool is_valid_path(u8 *path) {
- // Prevent non-absolute paths from being opened.
- if (path[0] != '/') {
- return false;
- }
- // Remove trailing slash if any, without removing leading slash.
- for (int i=2; i<255; i++) {
- if (path[i] == 0) {
- if (path[i-1] == '/') {
- path[i-1] = 0;
- }
- break;
- }
- }
- // Prevent paths with relative components from being opened.
- for (int i=0; i<255; i++) {
- if (path[i] == '/') {
- if (path[i+1]=='.') {
- // Check for '.' components.
- if (path[i+2]=='/' || path[i+2]==0) {
- return false;
- }
- // Check for '..' components.
- if (path[i+2]=='.' && (path[i+3]=='/' || path[i+3]==0)) {
- return false;
- }
- }
- } else if (path[i] == 0) {
- break;
- }
+// Rewind the seek position of the current directory.
+void fs_rewind_dir(FileDevice *fs) {
+ if (fs->dir) {
+ rewinddir(fs->dir);
+ fs->dir_i = 0;
}
- return true;
}
+// Reset the current entry to its original state.
+void fs_reset_entry(FileDevice *fs) {
+ if (fs->file) fseek(fs->file, 0, SEEK_SET);
+ fs_rewind_dir(fs);
+ fs->child = NULL;
+ pathbuf_clear(&fs->child_path);
+ fs->address = 0;
+ fs->length = 0;
+ fs->length_cached = false;
+}
+
+// Close the current entry, if any. Don't clear the open and action buffers,
+// they'll be needed for opening a file or performing an action after this
+// method returns. They'll need to be cleared manually.
void fs_close(FileDevice *fs) {
- fclose(fs->file);
- fs->file = NULL;
- closedir(fs->dir);
- fs->dir = NULL;
- fs->open = false;
- fs->success = false;
- fs->is_dir = false;
- fs->child_is_dir = false;
- pb_clear(&fs->path);
- pb_clear(&fs->child_path);
- fs->pointer = 0;
+ if (fs->file) {
+ fclose(fs->file);
+ fs->file = NULL;
+ }
+ if (fs->dir) {
+ closedir(fs->dir);
+ fs->dir = NULL;
+ fs->dir_i = 0;
+ fs->is_root = false;
+ fs->child = NULL;
+ }
+ // Clear variables and buffers.
+ pathbuf_clear(&fs->path);
+ pathbuf_clear(&fs->child_path);
+ fs->address = 0;
fs->length = 0;
- fs->child = NULL;
- fs->dir_i = 0;
- fs->at_root = false;
+ fs->length_cached = false;
}
+// Clear the open and action buffers.
void fs_clear(FileDevice *fs) {
- pb_clear(&fs->entry);
- pb_clear(&fs->action);
+ pathbuf_clear(&fs->open);
+ pathbuf_clear(&fs->action);
}
-void fs_open_entry(FileDevice* fs, u8 *path) {
- fs->success = false;
- if (!is_valid_path(path)) return;
+// Reset a file device.
+void fs_reset(FileDevice *fs) {
+ fs_close(fs);
+ fs_clear(fs);
+ fs->address_write = 0;
+ fs->length_write = 0;
+ fs->error = false;
+}
+
+// Calculate the length of the current entry.
+void fs_calculate_length(FileDevice *fs) {
+ if (fs->length_cached) return;
+ if (fs->dir) {
+ // Find directory length by reading directory entries until null is
+ // returned. If the current directory is not the root directory,
+ // decrease the length by two to ignore the . and .. dirs.
+ fs_rewind_dir(fs);
+ for (fs->length=0; readdir(fs->dir); fs->length++);
+ if (!fs->is_root) fs->length -= 2;
+ fs_rewind_dir(fs);
+ } else if (fs->file) {
+ // Find file length by seeking to the end of the file.
+ fseek(fs->file, 0, SEEK_END);
+ fs->length = ftell(fs->file);
+ // Restore previous seek position.
+ fseek(fs->file, fs->address, SEEK_SET);
+ }
+ fs->length_cached = true;
+}
+
+// Returns true if an entry is open.
+bool fs_get_open(FileDevice *fs) {
+ return fs->file || fs->dir;
+}
+
+// Returns true if the error flag is set, then clears the error flag.
+bool fs_get_error(FileDevice *fs) {
+ if (fs->error) {
+ fs->error = false;
+ return true;
+ } else {
+ return false;
+ }
+}
+
+// Returns true if a directory is open.
+bool fs_get_type(FileDevice *fs) {
+ return fs->dir;
+}
+
+// Returns true if a child is selected and that child is a directory.
+bool fs_get_child_type(FileDevice *fs) {
+ return fs->child && fs->child->d_type == DT_DIR;
+}
+// Attempt to open the given path as a filesystem entry, keeping the original
+// entry open on failure. Path must be valid.
+void fs_open_entry(FileDevice* fs, u8 *path) {
+ // Attempt to open the path as a directory.
DIR *tmpdir = opendir((char*) path);
if (tmpdir) {
fs_close(fs);
fs->dir = tmpdir;
- fs->open = true;
- fs->success = true;
- fs->is_dir = true;
fs->dir_i = 0;
- // Find length of directory
- while ((fs->child = readdir(fs->dir))) {
- fs->dir_i++;
- };
- // If this is not the root directory, reduce len by 2 for . and .. dirs.
- if (path[1] == 0) { fs->at_root = true; } else { fs->dir_i -= 2; }
- fs->length = fs->dir_i;
- fs_select_child(fs, 0);
- pb_populate(&fs->path, path);
+ pathbuf_populate(&fs->path, path);
+ if (pathbuf_is_root(&fs->path)) fs->is_root = true;
return;
}
-
- // MEMORY LEAK HERE ONLY
- // for (int i=0; i<500; i++) {
- // fs->tmpfile = fopen((char*) path, "r+");
- // fclose(fs->tmpfile);
- // }
- // END OF MEMORY LEAK CODE
-
- // FILE CODE MUST COME AFTER DIR CODE TO AVOID MEMORY LEAK
+ // Attempt to open the path as a file. Moving this to before the
+ // directory check will cause a memory leak. Specifically, the memory
+ // leak is caused when opening and closing a file many thousands of times.
FILE *tmpfile = fopen((char*) path, "r+");
if (tmpfile) {
fs_close(fs);
fs->file = tmpfile;
- fs->open = true;
- fs->success = true;
- fs->is_dir = false;
- // TODO: Only read length when we need to. Keep a bool around.
- // fseek(fs->file, 0, SEEK_END);
- // fs->length = ftell(fs->file);
- // rewind(fs->file);
- pb_populate(&fs->path, path);
+ pathbuf_populate(&fs->path, path);
return;
}
+ // Could not open entry.
+ fs->error = true;
}
-void fs_select_child(FileDevice *fs, u32 pointer) {
- // Increment past the . and .. directories.
- if (!fs->at_root) {
- pointer += 2;
- }
- fs->pointer = pointer;
- rewinddir(fs->dir);
-
- for (fs->dir_i=0; fs->dir_i<pointer+1; fs->dir_i++) {
+// Select the nth child of the current directory. Directory must be open.
+void fs_select_child(FileDevice *fs, u32 n) {
+ fs->address = n;
+ // Ignore the . and .. entries.
+ if (!fs->is_root) n += 2;
+ // Iterate to the nth child.
+ for (fs_rewind_dir(fs); fs->dir_i<=n; fs->dir_i++) {
fs->child = readdir(fs->dir);
};
if (fs->child) {
- pb_populate(&fs->child_path, (u8*) &fs->child->d_name);
- fs->child_is_dir = fs->child->d_type == DT_DIR;
+ pathbuf_populate(&fs->child_path, (u8*) &fs->child->d_name);
} else {
- pb_clear(&fs->child_path);
- fs->child_is_dir = false;
+ pathbuf_clear(&fs->child_path);
+ fs->error = true;
}
}
-void fs_push_entry(FileDevice *fs, u8 byte) {
- if (pb_push_byte(&fs->entry, byte)) {
+// Push a byte to the open port.
+void fs_push_open(FileDevice *fs, u8 byte) {
+ if (pathbuf_push(&fs->open, byte)) {
fs_close(fs);
- if (fs->entry.mem[0] != 0) {
- fs->success = false;
- if (pb_is_terminated(&fs->entry)) {
- fs_open_entry(fs, fs->entry.mem);
+ if (!pathbuf_is_empty(&fs->open)) {
+ if (pathbuf_is_valid(&fs->open)) {
+ fs_open_entry(fs, (u8*) &fs->open.mem);
+ } else {
+ fs->error = true;
}
}
fs_clear(fs);
}
}
+// Push a byte to the action port.
void fs_push_action(FileDevice *fs, u8 byte) {
- if (pb_push_byte(&fs->action, byte)) {
- fs->success = false;
- bool action = fs->action.mem[0] != 0;
- if (fs->open) {
- if (action) {
- if (!pb_is_terminated(&fs->action)) return;
- if (!is_valid_path(fs->action.mem)) return;
- fs->success = rename((char*) fs->path.mem, (char*) fs->action.mem);
+ if (pathbuf_push(&fs->action, byte)) {
+ bool is_entry = !pathbuf_is_empty(&fs->path);
+ bool is_action = !pathbuf_is_empty(&fs->action);
+ if (is_entry) {
+ if (is_action) {
+ if (!pathbuf_is_valid(&fs->action)) return;
+ // Move open entry to action path.
+ if (rename((char*) &fs->path.mem, (char*) &fs->action.mem)) {
+ fs->error = true;
+ };
} else {
- // TODO: DELETE
+ // TODO: Delete the open entry. The remove() function will
+ // delete a file or an empty directory, so we will need to
+ // create a function that can recursively delete all entries
+ // within a directory.
+ }
+ } else {
+ if (is_action) {
+ if (!pathbuf_is_valid(&fs->action)) return;
+ // Create all parent directories.
+ for (u8 *p=&fs->action.mem[1]; *p; p++) {
+ // Temporarily null out each path separator to get the
+ // path of each parent directory.
+ if (*p == '/') {
+ *p = 0; mkdir((char*) &fs->action.mem, 0777); *p = '/';
+ }
+ }
+ // Create a new file at action path.
+ FILE *tmpfile = fopen((char*) &fs->action.mem, "w");
+ if (!tmpfile) fs->error = true;
+ fclose(tmpfile);
}
- } else if (action) {
- if (!pb_is_terminated(&fs->action)) return;
- if (!is_valid_path(fs->action.mem)) return;
- create_parents(fs->action.mem);
- FILE *tmpfile = fopen((char*) fs->action.mem, "w");
- fs->success = tmpfile != NULL;
- fclose(tmpfile);
}
fs_close(fs);
fs_clear(fs);
}
}
-// Recursively create parent directories.
-void create_parents(u8 *path) {
- // Iterate over characters left-to-right.
- for (u8 *p=path+1; *p; p++) {
- if (*p == '/') {
- *p = 0;
- mkdir((char*) path, 0777);
- *p = '/';
- }
- }
- return;
-}
-
-
+// Read a byte from the file head.
u8 fs_read_byte(FileDevice *fs) {
+ // TODO: Check that this returns 0 if fs->file is NULL. Look into
+ // setting fs->error on error.
+ fs->address++;
return fgetc(fs->file);
}
+// Write a byte to the file head.
void fs_write_byte(FileDevice *fs, u8 byte) {
+ // TODO: Look into setting fs->error on error.
+ fs->address++;
fputc(byte, fs->file);
}
+// Attempt to ascend to the parent directory.
void fs_ascend(FileDevice *fs) {
- fs->success = false;
- if (fs->open) {
+ if (!pathbuf_is_empty(&fs->path)) {
// Don't ascend if we're already at the root.
- if (fs->path.mem[1] == 0) {
+ if (fs->is_root) {
+ fs_reset_entry(fs);
+ fs->error = true;
return;
}
- // Path is guaranteed to have no trailing slash.
- memcpy(&buffer, &fs->path.mem[0], 255);
- u8 slash_i = 0;
- for (int i=0; i<255; i++) {
- if (buffer[i] == '/') {
- slash_i = i;
- } else if (buffer[i] == 0) {
- // Trim to leave the slash
- buffer[slash_i+1] = 0;
- break;
- }
+ // Find and null the final slash in the path to get the path of the
+ // parent directory. Path is guaranteed not to have a trailing slash.
+ // If the final slash is at index 0, we need to null past the slash
+ // instead, getting the root directory.
+ memcpy(&scratch, &fs->path.mem, 256);
+ u8 slash_i = 1;
+ for (int i=1; i<256; i++) {
+ if (scratch[i] == '/') slash_i = i;
+ if (scratch[i] == 0 ) break;
}
- fs_open_entry(fs, &buffer[0]);
+ scratch[slash_i] = 0;
+ fs_open_entry(fs, (u8*) &scratch);
+ fs_reset_entry(fs);
} else {
+ // Open the default directory if no entry is open.
fs_open_entry(fs, (u8*) "/");
+ fs_reset_entry(fs);
}
}
+// Attempt to descend to the selected child entry.
void fs_descend(FileDevice *fs) {
- fs->success = false;
- if (!(fs->open && fs->is_dir && fs->child)) {
- return;
- }
- memcpy(&buffer, &fs->path.mem[0], 255);
- // Find location of terminating null in buffer.
- int start = 0;
- for (int i=0; i<255; i++) {
- start = i;
- if (buffer[i] == 0) break;
- }
- // Find length of child name.
- int len = 0;
- for (int i=0; i<255; i++) {
- len = i;
- if (fs->child->d_name[i] == 0) break;
- }
- // Check that buffer has capacity for child name.
- if (start+len > 255) {
- fs->success = false;
- return;
- }
- // Add a slash if not at root.
- if (start != 1) {
- buffer[start] = '/';
- start++;
- }
- // Copy child name into buffer.
- for (int i=0; i<len; i++) {
- buffer[start+i] = fs->child->d_name[i];
+ if (fs->child) {
+ memcpy(&scratch, &fs->path.mem, 256);
+ // Find length of current path.
+ int path_len = 0;
+ while (scratch[path_len]) path_len++;
+ // Find length of child name.
+ int name_len = 0;
+ while (fs->child->d_name[name_len]) name_len++;
+ // Test that buffer has capacity for child name.
+ if (path_len+1+name_len > 255) {
+ fs_reset_entry(fs);
+ fs->error = true;
+ return;
+ }
+ // Append a slash to the path if not at root.
+ if (path_len != 1) scratch[path_len++] = '/';
+ // Copy child name into buffer.
+ for (int i=0; i<name_len; i++) {
+ scratch[path_len+i] = fs->child->d_name[i];
+ }
+ fs_open_entry(fs, (u8*) &scratch);
+ fs_reset_entry(fs);
+ } else {
+ fs->error = true;
}
- fs_open_entry(fs, &buffer[0]);
}
+// Seek within the current entry.
void fs_seek(FileDevice *fs) {
- if (fs->open) {
- if (fs->is_dir) {
- fs_select_child(fs, fs->pointer_write);
- } else {
- fseek(fs->file, fs->pointer_write, SEEK_SET);
- fs->pointer = ftell(fs->file);
- }
+ if (fs->dir) {
+ fs_select_child(fs, fs->address_write);
+ } else if (fs->file) {
+ fseek(fs->file, fs->address_write, SEEK_SET);
+ fs->address = ftell(fs->file);
}
}
+// Resize the current entry.
void fs_resize(FileDevice *fs) {
- if (fs->open && !fs->is_dir) {
+ if (fs->file) {
// truncate(fs->file);
- // TODO
+ // TODO: Figure out how to resize a file.
}
}
diff --git a/arm9/source/devices/file.h b/arm9/source/devices/file.h
index f295e89..3f27bda 100644
--- a/arm9/source/devices/file.h
+++ b/arm9/source/devices/file.h
@@ -1,55 +1,54 @@
-#include <dirent.h>
-#include "../types/pathbuf.h"
-
-// #include <stdio.h>
-// #include <dirent.h>
-// #include <string.h>
-// #include <sys/stat.h>
-
#ifndef FILE_H_
#define FILE_H_
- typedef struct {
- bool open; // true if an entry is open
- bool success; // true if the previous operation was successful
- bool is_dir; // true if the open entry is a directory
- bool child_is_dir; // true if the selected child is a directory
- PathBuf entry; // write buffer for entry port
- PathBuf action; // write buffer for action port
- PathBuf path; // path of the open entry
- PathBuf child_path; // path of the selected child
- u32 pointer; // pointer in the open entry, whether dir or file
- u32 length; // length of the open entry, whether dir or file
- u32 pointer_write; // write cache for pointer
- u32 length_write; // write cache for length
+ #include <dirent.h>
+ #include <sys/stat.h>
+ #include "fat.h"
+ #include "nds.h"
+ #include "../bang.h"
+ #include "../types/pathbuf.h"
- DIR *dir; // structure pointing to current directory
- FILE *file; // opaque ID referencing the open file
- FILE *tmpfile; // to open file and keep existing file open
- struct dirent *child; // currently-selected directory child information
- u32 dir_i; // index of next child to read from dir
- bool at_root; // current entry is the root directory
- } FileDevice;
+ // Bedrock file device.
+ typedef struct {
+ FILE *file; // Opaque ID referencing current file (if any)
+ // See ANSI C89 Standard, page 126
+ DIR *dir; // Structure referencing current directory (if any)
+ // See 'libnds/libs/libnds/include/sys/dirent.h:41'
+ u32 dir_i; // Index of next child to be read from current directory
+ bool is_root; // True if the current directory is the root directory.
+ struct dirent *child; // Information about selected child (file or dir)
+ // See 'libnds/libs/libnds/include/sys/dirent.h:17'
- void init_filesystem();
- bool filesystem_enabled();
+ PathBuf open; // Write buffer for open port
+ PathBuf action; // Write buffer for action port
+ PathBuf path; // Path of current entry
+ PathBuf child_path; // Path of selected child
+ u32 address; // Address into current entry (file or dir)
+ u32 length; // Length of current entry (file or dir)
+ bool length_cached; // True if length has been calculated.
+ u32 address_write; // Write cache for address
+ u32 length_write; // Write cache for length
+ bool error; // True if error occurred since last read
+ } FileDevice;
- void create_parents(u8 *path);
+ // Functions.
+ void init_nds_filesystem();
+ bool nds_filesystem_enabled();
- void fs_push_entry(FileDevice *fs, u8 byte);
+ // Methods.
+ void fs_reset(FileDevice *fs);
+ void fs_calculate_length(FileDevice *fs);
+ bool fs_get_open(FileDevice *fs);
+ bool fs_get_error(FileDevice *fs);
+ bool fs_get_type(FileDevice *fs);
+ bool fs_get_child_type(FileDevice *fs);
+ void fs_push_open(FileDevice *fs, u8 byte);
void fs_push_action(FileDevice *fs, u8 byte);
- bool fs_push_byte(PathBuf *buf, u8 byte);
-
u8 fs_read_byte(FileDevice *fs);
void fs_write_byte(FileDevice *fs, u8 byte);
-
void fs_ascend(FileDevice *fs);
void fs_descend(FileDevice *fs);
-
void fs_seek(FileDevice *fs);
void fs_resize(FileDevice *fs);
-
- void fs_select_child(FileDevice *fs, u32 pointer);
-
#endif
diff --git a/arm9/source/devices/input.c b/arm9/source/devices/input.c
index e5ac5be..401f053 100644
--- a/arm9/source/devices/input.c
+++ b/arm9/source/devices/input.c
@@ -1,14 +1,40 @@
-#include <nds.h>
-#include "../bang.h"
#include "input.h"
+#include "../config.h"
-void inp_receive_byte(InputDevice *inp, u8 byte) {
- cb_write_byte(&inp->keybuffer, byte);
- inp->wake = true;
+
+// Reset an input device.
+void input_reset(InputDevice *input) {
+ input->pointer = false;
+ input->keyboard = false;
+ input->x = 0;
+ input->y = 0;
+ input->x_read = 0;
+ input->y_read = 0;
+ circbuf_clear(&input->keybuffer);
+ input->gamepad = 0;
+ input->wake = false;
+}
+
+// Update the cached read value for the pointer x coordinate.
+void input_read_x(InputDevice *input) {
+ input->x_read = input->x;
+}
+
+// Update the cached read value for the pointer y coordinate.
+void input_read_y(InputDevice *input) {
+ input->y_read = input->y;
}
-// Read gamepad state into an input device.
-void inp_read_gamepad(InputDevice *inp) {
+// Receive a byte from a keyboard.
+// TODO: Make this function Unicode-aware by receiving a u32 instead of
+// a u8, so that the keybuffer can be checked for capacity before pushing.
+void input_receive_key(InputDevice *input, u8 byte) {
+ circbuf_write(&input->keybuffer, byte);
+ input->wake = true;
+}
+
+// Read the current gamepad state.
+void input_update_gamepad(InputDevice *input) {
u32 held = keysHeld();
u8 gamepad = (
TEST(held, KEY_UP) << 7
@@ -20,45 +46,34 @@ void inp_read_gamepad(InputDevice *inp) {
| TEST(held, KEY_X) << 1
| TEST(held, KEY_Y) << 0
);
- if (gamepad != inp->gamepad) {
- inp->wake = TRUE;
- inp->gamepad = gamepad;
+ // If the L and R bumper keys aren't being used to switch between
+ // instances, map them to be alternate X and Y keys.
+ if (!SWITCH_BETWEEN_INSTANCES) {
+ gamepad |= TEST(held, KEY_L) << 1;
+ gamepad |= TEST(held, KEY_R) << 0;
}
-}
-
-// Read navigation state into an input device.
-void inp_read_navigation(InputDevice *inp) {
- u32 held = keysHeld();
- u8 navigation = (
- TEST(held, KEY_UP) << 7
- | TEST(held, KEY_DOWN) << 6
- | TEST(held, KEY_LEFT) << 5
- | TEST(held, KEY_RIGHT) << 4
- | TEST(held, KEY_A) << 3
- | TEST(held, KEY_B) << 2
- | TEST(held, KEY_R) << 1
- | TEST(held, KEY_L) << 0
- );
- if (navigation != inp->navigation) {
- inp->wake = TRUE;
- inp->navigation = navigation;
+ if (gamepad != input->gamepad) {
+ input->wake = true;
+ input->gamepad = gamepad;
}
}
-// Read touchscreen state into an input device.
-void inp_read_touch(InputDevice *inp) {
+// Read the current touchscreen state.
+void input_update_touch(InputDevice *input) {
+ // Test if pointer is active.
bool pointer = TEST(keysHeld(), KEY_TOUCH);
- if (pointer != inp->pointer) {
- inp->wake = TRUE;
- inp->pointer = pointer;
+ if (pointer != input->pointer) {
+ input->wake = true;
+ input->pointer = pointer;
}
+ // Update pointer position.
if (pointer) {
- touchPosition pos;
- touchRead(&pos);
- if (pos.px != inp->x || pos.py != inp->y) {
- inp->wake = TRUE;
- inp->x = pos.px;
- inp->y = pos.py;
+ touchPosition position;
+ touchRead(&position);
+ if (position.px != input->x || position.py != input->y) {
+ input->wake = true;
+ input->x = position.px;
+ input->y = position.py;
}
}
}
diff --git a/arm9/source/devices/input.h b/arm9/source/devices/input.h
index 4f91ed5..6df947b 100644
--- a/arm9/source/devices/input.h
+++ b/arm9/source/devices/input.h
@@ -1,21 +1,26 @@
-#include <nds.h>
-#include "../types/circbuf.h"
-
#ifndef INPUT_H_
#define INPUT_H_
+ #include "../bang.h"
+ #include "../types/circbuf.h"
+
+
+ // Bedrock input device.
typedef struct {
- bool pointer; // pointer active
- bool keyboard; // keyboard active
- CircBuf keybuffer; // queued keypresses
- u16 x,y; // pointer position
- u8 navigation; // navigation state
- u8 gamepad; // gamepad state
- bool wake; // wake flag
+ bool pointer; // Pointer active
+ bool keyboard; // Keyboard active
+ u16 x, y; // Pointer position
+ u16 x_read, y_read; // Read caches for pointer position
+ CircBuf keybuffer; // Queued keypresses
+ u8 gamepad; // Gamepad state
+ bool wake; // Wake flag
} InputDevice;
- void inp_receive_byte(InputDevice *inp, u8 byte);
- void inp_read_gamepad(InputDevice *inp);
- void inp_read_navigation(InputDevice *inp);
- void inp_read_touch(InputDevice *inp);
+ // Methods.
+ void input_reset(InputDevice *input);
+ void input_read_x(InputDevice *input);
+ void input_read_y(InputDevice *input);
+ void input_receive_key(InputDevice *input, u8 byte);
+ void input_update_gamepad(InputDevice *input);
+ void input_update_touch(InputDevice *input);
#endif
diff --git a/arm9/source/devices/local.c b/arm9/source/devices/local.c
deleted file mode 100644
index e13a1f8..0000000
--- a/arm9/source/devices/local.c
+++ /dev/null
@@ -1,11 +0,0 @@
-#include "../main.h"
-#include "local.h"
-
-void std_write(u8 byte) {
- if (byte) {
- receive_keyboard_byte(byte);
- } else {
- close_keyboard();
-
- }
-}
diff --git a/arm9/source/devices/local.h b/arm9/source/devices/local.h
deleted file mode 100644
index 979f5ce..0000000
--- a/arm9/source/devices/local.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#include <nds.h>
-
-#ifndef LOCAL_H_
- #define LOCAL_H_
-
- void std_write(u8 byte);
-
-#endif
diff --git a/arm9/source/devices/math.c b/arm9/source/devices/math.c
index bb592e0..33aeb63 100644
--- a/arm9/source/devices/math.c
+++ b/arm9/source/devices/math.c
@@ -1,66 +1,119 @@
-#include <nds.h>
-#include <math.h>
#include "math.h"
-#include "../bang.h"
-#define CLEAR \
- math->sqrt_rc = FALSE;\
- math->atan_rc = FALSE;\
- math->prod_rc = FALSE;\
- math->quot_rc = FALSE;\
- math->rem_rc = FALSE;
-void set_op1_high(MathDevice *math, u8 high) { SET_HIGH(math->op1, high); CLEAR; }
-void set_op1_low( MathDevice *math, u8 low) { SET_LOW(math->op1, low); CLEAR; }
-void set_op2_high(MathDevice *math, u8 high) { SET_HIGH(math->op2, high); CLEAR; }
-void set_op2_low( MathDevice *math, u8 low) { SET_LOW(math->op2, low); CLEAR; }
+// Angle conversion constants.
+const double fromRadians = 10430.378350470453; // 65536 / 2Ï€
+const double toRadians = 0.00009587379924285257; // 2Ï€ / 65536
-u16 get_sqrt(MathDevice *math) {
- if (!math->sqrt_rc) {
- u32 input = math->op1 << 16 | math->op2;
- math->sqrt = sqrt32(input);
- math->sqrt_rc = TRUE;
+
+// Reset the math device.
+void math_reset(MathDevice *math) {
+ math->x = 0;
+ math->y = 0;
+ math->r = 0;
+ math->t = 0;
+ math_clear_cartesian(math);
+ math_clear_polar(math);
+}
+
+// Clear all values calculated from cartesian coordinates.
+void math_clear_cartesian(MathDevice *math) {
+ math->r_cached = false;
+ math->t_cached = false;
+ math->prod_cached = false;
+ math->quot_cached = false;
+ math->rem_cached = false;
+}
+
+// Clear all values calculated from polar coordinates.
+void math_clear_polar(MathDevice *math) {
+ math->x_cached = false;
+ math->y_cached = false;
+}
+
+// Calculate the x coordinate of the polar point.
+s16 math_get_x(MathDevice *math) {
+ if (!math->x_cached) {
+ double x = cos(math->t * toRadians) * math->r;
+ if (-32768.0 <= x && x <= 32768.0) {
+ math->x_read = x;
+ } else {
+ math->x_read = 0;
+ }
+ math->x_cached = true;
+ }
+ return math->x_read;
+}
+
+// Calculate the y coordinate of the polar point.
+s16 math_get_y(MathDevice *math) {
+ if (!math->y_cached) {
+ double y = sin(math->t * toRadians) * math->r;
+ if (-32768.0 <= y && y <= 32767.0) {
+ math->y_read = y;
+ } else {
+ math->y_read = 0;
+ }
+ math->y_cached = true;
+ }
+ return math->y_read;
+}
+
+// Calculate the r coordinate of the cartesian point.
+u16 math_get_r(MathDevice *math) {
+ if (!math->r_cached) {
+ u32 x2 = math->x * math->x;
+ u32 y2 = math->y * math->y;
+ math->r_read = sqrt32(x2 + y2);
+ math->r_cached = true;
}
- return math->sqrt;
+ return math->r_read;
}
-u16 get_atan(MathDevice *math) {
- if (!math->atan_rc) {
- if (math->op1 || math->op2) {
- double op1 = (s16) math->op1;
- double op2 = (s16) math->op2;
- const double scale = 10430.378350470453; // PI * 32768
- math->atan = (s32) (atan2(op1, op2) * scale);
+// Calculate the t coordinate of the cartesian point.
+u16 math_get_t(MathDevice *math) {
+ if (!math->t_cached) {
+ if (math->x || math->y) {
+ math->t_read = atan2(math->y, math->x) * fromRadians;
+ } else {
+ math->t_read = 0;
}
- math->atan_rc = TRUE;
+ math->t_cached = true;
}
- return math->atan;
+ return math->t_read;
}
-u32 get_prod(MathDevice *math) {
- if (!math->prod_rc) {
- math->prod = math->op1 * math->op2;
- math->prod_rc = TRUE;
+// Calculate the product of x by y.
+u32 math_get_prod(MathDevice *math) {
+ if (!math->prod_cached) {
+ math->prod_read = (u16)math->x * (u16)math->y;
+ math->prod_cached = true;
}
- return math->prod;
+ return math->prod_read;
}
-u16 get_quot(MathDevice *math) {
- if (!math->quot_rc) {
- if (math->op2) {
- math->quot = div32(math->op1, math->op2);
+// Calculate the quotient of x by y.
+u16 math_get_quot(MathDevice *math) {
+ if (!math->quot_cached) {
+ if (math->y) {
+ math->quot_read = div32((u16)math->x, (u16)math->y);
+ } else {
+ math->quot_read = 0;
}
- math->quot_rc = TRUE;
+ math->quot_cached = true;
}
- return math->quot;
+ return math->quot_read;
}
-u16 get_rem(MathDevice *math) {
- if (!math->rem_rc) {
- if (math->op2) {
- math->rem = mod32(math->op1, math->op2);
+// Calculate the remainder of x by y.
+u16 math_get_rem(MathDevice *math) {
+ if (!math->rem_cached) {
+ if (math->y) {
+ math->rem_read = mod32((u16)math->x, (u16)math->y);
+ } else {
+ math->rem_read = 0;
}
- math->rem_rc = TRUE;
+ math->rem_cached = true;
}
- return math->rem;
+ return math->rem_read;
}
diff --git a/arm9/source/devices/math.h b/arm9/source/devices/math.h
index ae52a10..6b173b6 100644
--- a/arm9/source/devices/math.h
+++ b/arm9/source/devices/math.h
@@ -1,19 +1,33 @@
#ifndef MATH_H_
#define MATH_H_
+ #include <math.h>
+ #include "../bang.h"
+
+
+ // Bedrock math device.
typedef struct {
- u16 op1, op2;
- u16 sqrt, atan; u32 prod; u16 quot, rem; // read
- bool sqrt_rc, atan_rc, prod_rc, quot_rc, rem_rc; // read cached
- } MathDevice ;
+ s16 x, y; // Cartesian write
+ u16 r, t; // Polar write
+ s16 x_read, y_read; // Cartesian read
+ bool x_cached, y_cached; // Cartesian cached
+ u16 r_read, t_read; // Polar read
+ bool r_cached, t_cached; // Polar cached
+ u32 prod_read; // Multiplication read
+ bool prod_cached; // Multiplication cached
+ u16 quot_read, rem_read; // Division read
+ bool quot_cached, rem_cached; // Division cached
+ } MathDevice;
- void set_op1_high(MathDevice *math, u8 high);
- void set_op1_low(MathDevice *math, u8 low);
- void set_op2_high(MathDevice *math, u8 high);
- void set_op2_low(MathDevice *math, u8 low);
- u16 get_sqrt(MathDevice *math);
- u16 get_atan(MathDevice *math);
- u32 get_prod(MathDevice *math);
- u16 get_quot(MathDevice *math);
- u16 get_rem(MathDevice *math);
+ // Methods.
+ void math_reset(MathDevice *math);
+ void math_clear_cartesian(MathDevice *math);
+ void math_clear_polar(MathDevice *math);
+ s16 math_get_x(MathDevice *math);
+ s16 math_get_y(MathDevice *math);
+ u16 math_get_r(MathDevice *math);
+ u16 math_get_t(MathDevice *math);
+ u32 math_get_prod(MathDevice *math);
+ u16 math_get_quot(MathDevice *math);
+ u16 math_get_rem(MathDevice *math);
#endif
diff --git a/arm9/source/devices/memory.c b/arm9/source/devices/memory.c
index 915aec2..c9e86d7 100644
--- a/arm9/source/devices/memory.c
+++ b/arm9/source/devices/memory.c
@@ -1,143 +1,158 @@
-#include "nds.h"
#include "memory.h"
-static u8 heap[HEAP_SIZE][256]; // the page heap.
-static u8 unallocated[256]; // page to use for all unallocated reads and writes.
-static u8 heap_index[HEAP_SIZE];
-u8 mem_read1(MemoryDevice *mem) {
- u8 output = mem->point1[mem->byte1++];
- if (mem->byte1 == 0) {
- mem->page1++;
- mem_get_page1(mem);
- }
- return output;
+/*
+The 'heap' array is the global pool of memory from which pages are allocated
+and deallocated, used by every Bedrock instance. The 'heap_index' array tracks
+the owner of each page of memory: the value of each entry is the ID of the
+instance that owns / has allocated the corresponding page in the heap. An ID
+of zero indicates that the page is free / hasn't been allocated yet.
+
+If multiple instances are repeatedly allocating and deallocating pages, it's
+expected that the allocations will become very fragmented, with pages owned
+by each instance interleaving with one another. To find the heap address that
+corresponds with an allocated page address, the heap will need to be traversed,
+which makes random access very expensive. To mitigate this, the heap address
+of every page accessible from the current offset value (which determines the
+base page to address from) is cached in an array of 256 pointers, and the
+pointer corresponding with the current page is further cached as a pointer.
+
+The 'unallocated' array acts as a sort of null page, with every access of an
+unallocated page being routed instead to that page. This allows the read and
+write methods to omit a test to check whether a page is allocated or not;
+effectively, every page is always allocated. This is allowed because the
+Bedrock specification says that an unallocated read or write causes undefined
+behaviour, allowing us to optimise away the test.
+
+TODO: If one instance allocates memory, then a second instance allocates memory,
+then the first instance deallocates, then the second instance allocates some
+more, the pages allocated to the second instance will be out of order, but the
+code so far assumes that all pages are in the correct order (with gaps or not).
+There needs to be either a page reordering pass (time expensive) or an array to
+track the allocation order of pages for each instance (space expensive). The
+former approach would be the best, because it's unlikely that this would be a
+frequent occurrence. I'll need to shuffle pages around using memcpy and the null
+page. Only touch the pages of the current instance, to avoid having to recalculate
+the page caches of every instance. We can determine if pages will need to be
+shuffled / defragmented by checking if an unallocated page is traversed before
+the final allocated page is found.
+*/
+
+
+// Size of the heap in pages. The value was chosen by steadily increasing it
+// until the emulator refused to compile, and then easing back a bit.
+#define MAX_PAGES (12000)
+
+// The heap.
+static u8 heap[MAX_PAGES][256]; // the page heap.
+
+// Null page to use for unallocated reads and writes.
+static u8 unallocated[256];
+
+// Map heap pages to instances. An ID of zero represents an unallocated page.
+static u8 heap_index[MAX_PAGES];
+
+
+// Reset a read-write head on the memory device.
+void memory_head_reset(MemoryHead *head) {
+ head->offset = 0;
+ head->byte = 0;
+ head->point = (u8*) &unallocated;
+ head->page = 0;
+ for (int i=0; i<256; i++) head->cache[i] = (u8*) &unallocated;
}
-u8 mem_read2(MemoryDevice *mem) {
- u8 output = mem->point2[mem->byte2++];
- if (mem->byte2 == 0) {
- mem->page2++;
- mem_get_page2(mem);
- }
- return output;
+// Reset the memory device.
+void memory_reset(MemoryDevice *mem) {
+ mem->count = 0;
+ mem->copy = 0;
+ memory_allocate(mem);
+ memory_head_reset(&mem->head1);
+ memory_head_reset(&mem->head2);
}
-void mem_write1(MemoryDevice *mem, u8 value) {
- mem->point1[mem->byte1++] = value;
- if (mem->byte1 == 0) {
- mem->page1++;
- mem_get_page1(mem);
+// Read a byte from a memory head.
+u8 memory_read(MemoryHead *head) {
+ u8 output = head->point[head->byte++];
+ if (head->byte == 0) {
+ head->page++;
+ memory_refresh_page(head);
}
+ return output;
}
-void mem_write2(MemoryDevice *mem, u8 value) {
- mem->point2[mem->byte2++] = value;
- if (mem->byte2 == 0) {
- mem->page2++;
- mem_get_page2(mem);
+// Write a byte to a memory head.
+void memory_write(MemoryHead *head, u8 value) {
+ head->point[head->byte++] = value;
+ if (head->byte == 0) {
+ head->page++;
+ memory_refresh_page(head);
}
}
-
-void mem_load_cache1(MemoryDevice *mem) {
- // Set all cached pointers to unallocated.
- for (int i=0; i<256; i++) {
- mem->cache1[i] = (u8*) &unallocated;
- }
- // Iterate over all heap pages, gather our ones.
- int count = 0;
- int cached = 0;
- for (int i=0; i<HEAP_SIZE; i++) {
- if (heap_index[i] == mem->id) {
- if (count >= mem->offset1) {
- mem->cache1[cached] = (u8*) &heap[i];
- cached++;
- }
- count++;
- if (cached == 256) break;
- }
- }
+void memory_refresh_page(MemoryHead *head) {
+ head->point = head->cache[head->page];
}
-void mem_load_cache2(MemoryDevice *mem) {
- // Set all cached pointers to unallocated.
- for (int i=0; i<256; i++) {
- mem->cache2[i] = (u8*) &unallocated;
- }
- // Iterate over all heap pages, gather our ones.
- int count = 0;
- int cached = 0;
- for (int i=0; i<HEAP_SIZE; i++) {
- if (heap_index[i] == mem->id) {
- if (count >= mem->offset2) {
- mem->cache2[cached] = (u8*) &heap[i];
- cached++;
+// Recalculate the pointers stored in the page cache.
+void memory_refresh_cache(MemoryDevice *mem, MemoryHead *head) {
+ // Point every page in the cache to the unallocated page.
+ for (int i=0; i<256; i++) head->cache[i] = (u8*) &unallocated;
+ // Iterate over every page in the heap, gather all pages allocated to
+ // this instance that belong to the current offset.
+ int n = 0;
+ int cache_i = 0;
+ for (int heap_i=0; heap_i<MAX_PAGES; heap_i++) {
+ if (heap_index[heap_i] == mem->id) {
+ if (n++ >= head->offset) {
+ head->cache[cache_i++] = (u8*) &heap[heap_i];
+ if (cache_i == 256) break;
}
- count++;
- if (cached == 256) break;
}
}
}
-// Fetch the page1 pointer from cache1.
-void mem_get_page1(MemoryDevice *mem) {
- mem->point1 = mem->cache1[mem->page1];
-}
-
-// Fetch the page2 pointer from cache2.
-void mem_get_page2(MemoryDevice *mem) {
- mem->point2 = mem->cache2[mem->page2];
-}
-
-void mem_allocate(MemoryDevice *mem) {
- int count = 0;
-
- // ALLOCATING
- if (mem->count_write > mem->count) {
- int to_allocate = mem->count_write - mem->count;
- for (int i=0; i<HEAP_SIZE; i++) {
+// Allocate mem->count pages of memory.
+void memory_allocate(MemoryDevice *mem) {
+ // Track how many pages have been allocated/deallocated so far.
+ int n = 0;
+ // Allocate memory.
+ if (mem->count > mem->allocated) {
+ int to_allocate = mem->count - mem->allocated;
+ for (int i=0; i<MAX_PAGES; i++) {
if (heap_index[i] == 0) {
heap_index[i] = mem->id;
- count++;
- if (count == to_allocate) {
- break;
- }
+ if (++n == to_allocate) break;
}
}
- // DEALLOCATING
- } else if (mem->count_write < mem->count) {
- for (int i=0; i<HEAP_SIZE; i++) {
+ // Deallocate memory.
+ } else if (mem->count < mem->allocated) {
+ for (int i=0; i<MAX_PAGES; i++) {
if (heap_index[i] == mem->id) {
- count++;
- if (count > mem->count_write) {
- heap_index[i] = 0;
+ if (++n > mem->count) {
+ // Clear the page when it's deallocated.
memset(heap[i], 0, 256);
+ heap_index[i] = 0;
}
}
}
}
-
- // Count the number of pages allocated to us.
- mem->count = 0;
- for (int i=0; i<HEAP_SIZE; i++) {
- if (heap_index[i]==mem->id) mem->count++;
+ // Re-count the number of pages allocated to this instance.
+ mem->allocated = 0;
+ for (int i=0; i<MAX_PAGES; i++) {
+ if (heap_index[i]==mem->id) mem->allocated++;
}
- // Reload the pointer caches for each head.
- mem_load_cache1(mem);
- mem_load_cache2(mem);
+ // Refresh the page caches for both heads.
+ memory_refresh_cache(mem, &mem->head1);
+ memory_refresh_cache(mem, &mem->head2);
}
-
-void mem_do_copy(MemoryDevice *mem) {
- int src = mem->offset2;
- int dest = mem->offset1;
- if (src == dest) return;
- for (int i=0; i<mem->copy_write; i++) {
- if (src>=mem->count || dest>=mem->count) {
- return;
- }
- memcpy(&heap[dest++], &heap[src++], 256);
+// Copy mem->count pages from head 2 to head 1.
+void memory_copy(MemoryDevice *mem) {
+ if (mem->head1.offset == mem->head2.offset) return;
+ for (int n=0; n<mem->copy; n++) {
+ if (mem->head1.cache[n] == (u8*) &unallocated) return;
+ if (mem->head2.cache[n] == (u8*) &unallocated) return;
+ memcpy(mem->head1.cache[n], mem->head2.cache[n], 256);
}
}
-
diff --git a/arm9/source/devices/memory.h b/arm9/source/devices/memory.h
index 0abff16..814f47d 100644
--- a/arm9/source/devices/memory.h
+++ b/arm9/source/devices/memory.h
@@ -1,42 +1,34 @@
#ifndef MEMORY_H_
#define MEMORY_H_
- #define HEAP_SIZE (4096*3)
+ #include "../bang.h"
- typedef struct {
- u8 id; // Unique non-zero identifier for this memory device.
-
- u16 offset1; // Bedrock offset value for head 1
- u8 page1; // Bedrock address value for head 1
- u8 byte1; // Bedrock address value for head 1
- u16 offset2; // Bedrock offset value for head 2
- u8 page2; // Bedrock address value for head 2
- u8 byte2; // Bedrock address value for head 2
-
- u16 count_write; // write cache for page count
- u16 count; // number of pages allocated for this bedrock
- u16 copy_write; // write cache for page copy length
-
- u8 *point1; // pointer to current page for head 1
- u8 *point2; // pointer to current page for head 2
-
- u8* cache1[256];
- u8* cache2[256];
- } MemoryDevice ;
- u8 mem_read1(MemoryDevice *mem);
- u8 mem_read2(MemoryDevice *mem);
- void mem_write1(MemoryDevice *mem, u8 value);
- void mem_write2(MemoryDevice *mem, u8 value);
-
- void mem_load_cache1(MemoryDevice *mem);
- void mem_load_cache2(MemoryDevice *mem);
- void mem_get_page1(MemoryDevice *mem);
- void mem_get_page2(MemoryDevice *mem);
-
-
- void mem_allocate(MemoryDevice *mem);
- void mem_do_copy(MemoryDevice *mem);
+ // Read-write head for memory device.
+ typedef struct {
+ u16 offset; // Index of base page.
+ u8 page; // Index of current page from offset.
+ u8 byte; // Index of current byte in page.
+ u8 *point; // Pointer to current page.
+ u8 *cache[256]; // Pointers to all pages for the current offset.
+ } MemoryHead;
+ // Bedrock memory device.
+ typedef struct {
+ u8 id; // Non-zero ID of this Bedrock instance.
+ u16 allocated; // Number of pages allocated to this instance
+ u16 count; // Write cache for allocation count
+ u16 copy; // Write cache for copy length
+ MemoryHead head1;
+ MemoryHead head2;
+ } MemoryDevice;
+ // Methods.
+ void memory_reset(MemoryDevice *mem);
+ u8 memory_read(MemoryHead *head);
+ void memory_write(MemoryHead *head, u8 value);
+ void memory_refresh_page(MemoryHead *head);
+ void memory_refresh_cache(MemoryDevice *mem, MemoryHead *head);
+ void memory_allocate(MemoryDevice *mem);
+ void memory_copy(MemoryDevice *mem);
#endif
diff --git a/arm9/source/devices/screen.c b/arm9/source/devices/screen.c
index 698b754..bca436d 100644
--- a/arm9/source/devices/screen.c
+++ b/arm9/source/devices/screen.c
@@ -1,114 +1,123 @@
+#include "screen.h"
+
+
/*
-A screen layer contains 768 tiles (32*24), requiring 24KB. Each tile is 32 bytes,
-holding 2 pixels per byte. The upper four bits of a tile byte represent the
-colour of the right pixel, and the lower four bits the colour of the left pixel.
-The colour is a 4-bit reference into a 16-colour RGB15 palette.
+Each screen layer is 24KB and contains 768 tiles (32*24). Each tile is 32
+bytes, and contains 64 pixels (8*8), holding 2 pixels per byte. The upper
+four bits of a tile byte represent the colour of the right pixel, and the
+lower four bits represent the colour of the left pixel. The colour is a
+4-bit index into a 16-colour RGB15 palette.
+
+Four screen layers are used by each physical screen: a foreground layer, a
+background layer, and then back buffers for each. Screen layers are stored
+as u16* pointers to raw video memory.
+
+Each 'tile slot' of video memory is 16KB, so we need two slots per layer. We
+can't use memory more efficiently by packing the layers more tightly into the
+available slots, because we can only draw the contents of a layer by passing
+a tile slot base address to the video system. We can, however, use the gaps to
+store our tile map, because each map slot takes only 2KB with a corresponding
+increase in address granularity.
-Screen memory contains four layers: bg, fg, then the same but for double buffers.
-Ignore double buffering for now. We keep these as u32* because a single 32-bit
-integer represents a single 8-pixel row.
-TODO: This needs to be updated. We have double buffering, and we use u16*.
+The tile map is shared by all foreground and background layers on a physical
+screen, and is stored just past the contents of the first screen layer (at the
+24KB offset in video memory). Each entry in the map is a 16-bit tile index.
+The low 10 bits of the value represent the tile index, then h-flip, then
+v-flip, then a 4-bit palette identifier. We don't flip any tiles, and we
+always use palette zero. The map is initialised with an incrementing sequence,
+and then never touched.
-The tile map is shared by the foreground and background layers, and is stored
-just past the first layer for both screens (at the 24KB offset). Each entry is
-a 16-bit tile index (low 10 bits are tile index, then h-flip, then v-flip, then
-4-bit palette identifier).
+The memory bank system of the NDS is byzantine and most vexing, with banks being
+identified by letters A through I, and in sizes of 128/128/128/128/64/16/16/32/16
+KB, respectively. The main 2D engine can use banks A/B/C/D/E for BG data (tiles),
+and the sub 2D engine can use bank C for the same.
*/
-#include <nds.h>
-#include "screen.h"
-#include "../bang.h"
-Screen scr_main = {
- .bgv = BG_TILE_RAM(BG_SLOT_VIS),
- .fgv = BG_TILE_RAM(FG_SLOT_VIS),
- .bg = BG_TILE_RAM(BG_SLOT),
- .fg = BG_TILE_RAM(FG_SLOT),
+// ------ NDS SCREENS ----------------------------------------------------------
+
+// VRAM addresses for the main 2D engine.
+NDSScreen main_screen = {
+ .bgv = BG_TILE_RAM(BG_SLOT_FRONT),
+ .fgv = BG_TILE_RAM(FG_SLOT_FRONT),
+ .bg = BG_TILE_RAM(BG_SLOT_BACK),
+ .fg = BG_TILE_RAM(FG_SLOT_BACK),
.map = BG_MAP_RAM(MAP_SLOT),
.palv = BG_PALETTE,
};
-Screen scr_sub = {
- .bgv = BG_TILE_RAM_SUB(BG_SLOT_VIS),
- .fgv = BG_TILE_RAM_SUB(FG_SLOT_VIS),
- .bg = BG_TILE_RAM_SUB(BG_SLOT),
- .fg = BG_TILE_RAM_SUB(FG_SLOT),
+
+// VRAM addresses for the sub 2D engine.
+NDSScreen sub_screen = {
+ .bgv = BG_TILE_RAM_SUB(BG_SLOT_FRONT),
+ .fgv = BG_TILE_RAM_SUB(FG_SLOT_FRONT),
+ .bg = BG_TILE_RAM_SUB(BG_SLOT_BACK),
+ .fg = BG_TILE_RAM_SUB(FG_SLOT_BACK),
.map = BG_MAP_RAM_SUB(MAP_SLOT),
.palv = BG_PALETTE_SUB,
};
-// TODO: Make an enum thing for main/sub, combine these functions
-void scr_make_main(ScreenDevice *scr) {
- scr->nds = &scr_main;
- for (int i=0; i<16; i++) {
- scr->nds->pal[i] = scr->palette[i];
- }
- scr->wake = true;
-}
-
-void scr_make_sub(ScreenDevice *scr) {
- scr->nds = &scr_sub;
- for (int i=0; i<16; i++) {
- scr->nds->pal[i] = scr->palette[i];
- }
- scr->wake = true;
-}
-
-void scr_unmake(ScreenDevice *scr) {
- if (scr->nds) {
- black_screen(scr->nds);
- scr->nds = NULL;
- }
-}
-
-void init_screens(void) {
- // Allocate VRAM for screens
+// Initialise the VRAM mappings and tile map for both NDS screens.
+void init_nds_screens(void) {
+ // Allocate VRAM for screens.
videoSetMode(DISPLAY_BG0_ACTIVE | DISPLAY_BG1_ACTIVE | MODE_0_2D);
vramSetBankA(VRAM_A_MAIN_BG);
videoSetModeSub(DISPLAY_BG0_ACTIVE | DISPLAY_BG1_ACTIVE | MODE_0_2D);
vramSetBankC(VRAM_C_SUB_BG);
-
- /* Configure screen layers to use tile graphics. */
- REG_BG0CNT = BG_32x32 | BG_COLOR_16 | BG_PRIORITY_3 | BG_TILE_BASE(BG_SLOT_VIS) | BG_MAP_BASE(MAP_SLOT);
- REG_BG1CNT = BG_32x32 | BG_COLOR_16 | BG_PRIORITY_2 | BG_TILE_BASE(FG_SLOT_VIS) | BG_MAP_BASE(MAP_SLOT);
- REG_BG0CNT_SUB = BG_32x32 | BG_COLOR_16 | BG_PRIORITY_3 | BG_TILE_BASE(BG_SLOT_VIS) | BG_MAP_BASE(MAP_SLOT);
- REG_BG1CNT_SUB = BG_32x32 | BG_COLOR_16 | BG_PRIORITY_2 | BG_TILE_BASE(FG_SLOT_VIS) | BG_MAP_BASE(MAP_SLOT);
-
- /* Populate tile maps with tile indices. */
- int i;
+ // Configure screen layers to use tile graphics.
+ REG_BG0CNT = BG_32x32 | BG_COLOR_16 | BG_PRIORITY_3 | BG_TILE_BASE(BG_SLOT_FRONT) | BG_MAP_BASE(MAP_SLOT);
+ REG_BG1CNT = BG_32x32 | BG_COLOR_16 | BG_PRIORITY_2 | BG_TILE_BASE(FG_SLOT_FRONT) | BG_MAP_BASE(MAP_SLOT);
+ REG_BG0CNT_SUB = BG_32x32 | BG_COLOR_16 | BG_PRIORITY_3 | BG_TILE_BASE(BG_SLOT_FRONT) | BG_MAP_BASE(MAP_SLOT);
+ REG_BG1CNT_SUB = BG_32x32 | BG_COLOR_16 | BG_PRIORITY_2 | BG_TILE_BASE(FG_SLOT_FRONT) | BG_MAP_BASE(MAP_SLOT);
+ // Populate tile maps.
u16 *main_map = BG_MAP_RAM(12);
u16 *sub_map = BG_MAP_RAM_SUB(12);
- for (i = 0; i < TILES_SIZE; i++) {
+ for (int i=0; i<TILES_COUNT; i++) {
*(main_map++) = i;
*(sub_map++) = i;
}
}
-
-void set_palette_high(ScreenDevice *scr, u8 high) {
- SET_HIGH(scr->palette_write, high);
+// Copy the contents of the back buffer to the front buffer.
+void ndsscreen_flip_buffers(NDSScreen *nds) {
+ if (nds) {
+ dmaCopyWords(0, nds->bg, nds->bgv, LAYER_MEM);
+ dmaCopyWords(0, nds->fg, nds->fgv, LAYER_MEM);
+ for (int i=0; i<16; i++) nds->palv[i] = nds->pal[i];
+ }
}
-void set_palette_low(ScreenDevice *scr, u8 low) {
- SET_LOW(scr->palette_write, low);
- u8 i = scr->palette_write >> 12 & 0x0f;
- u8 r = scr->palette_write >> 7 & 0x1e;
- u8 g = scr->palette_write >> 3 & 0x1e;
- u8 b = scr->palette_write << 1 & 0x1e;
- scr->palette[i] = RGB15(r,g,b);
- if (scr->nds) {
- scr->nds->pal[i] = RGB15(r,g,b);
+
+// Erase both buffers and set every colour to black.
+void ndsscreen_clear(NDSScreen *nds) {
+ if (nds) {
+ dmaFillWords(0, nds->bgv, LAYER_MEM);
+ dmaFillWords(0, nds->fgv, LAYER_MEM);
+ dmaFillWords(0, nds->bg, LAYER_MEM);
+ dmaFillWords(0, nds->fg, LAYER_MEM);
+ for (int i=0; i<16; i++) nds->palv[i] = RGB15(0,0,0);
}
}
-void push_sprite(SpriteBuffer *b, u8 row) {
- b->mem[b->p] = row;
- b->p = (b->p + 1) % 16;
+
+// ------ SPRITE BUFFER --------------------------------------------------------
+
+// Reset a sprite buffer.
+void spritebuf_reset(SpriteBuffer *b) {
+ for (int i=0; i<16; i++) b->mem[i] = 0;
+ b->cached = false;
+}
+
+// Push a byte to a sprite buffer.
+void spritebuf_push(SpriteBuffer *b, u8 row) {
+ b->mem[b->p++] = row;
+ b->p %= 16;
b->cached = FALSE;
}
-void prepare_1bit_sprite(SpriteBuffer *b, u8 draw) {
+// Parse, transform, and cache a 1-bit sprite.
+void spritebuf_prepare_1bit(SpriteBuffer *b, u8 draw) {
u8 l,p,x,y;
if (b->cached && draw == b->draw) return;
-
+ // Parse and transform the sprite if not already cached.
switch (draw & 0x07) {
case 0x0: p=b->p+8; for (y=0;y<8;y++) { l=b->mem[p++ % 16]; for (x=0;x<8;x++) { b->sprite[y][x] = l>>(7-x) & 1; } }; break;
case 0x1: p=b->p+8; for (y=0;y<8;y++) { l=b->mem[p++ % 16]; for (x=0;x<8;x++) { b->sprite[y][x] = l>>( x) & 1; } }; break;
@@ -119,15 +128,15 @@ void prepare_1bit_sprite(SpriteBuffer *b, u8 draw) {
case 0x6: p=b->p; for (y=0;y<8;y++) { l=b->mem[--p % 16]; for (x=0;x<8;x++) { b->sprite[x][y] = l>>(7-x) & 1; } }; break;
case 0x7: p=b->p; for (y=0;y<8;y++) { l=b->mem[--p % 16]; for (x=0;x<8;x++) { b->sprite[x][y] = l>>( x) & 1; } }; break;
}
-
- b->cached = TRUE;
b->draw = draw;
+ b->cached = true;
}
-void prepare_2bit_sprite(SpriteBuffer *b, u8 draw) {
+// Parse, transform, and cache a 2-bit sprite.
+void spritebuf_prepare_2bit(SpriteBuffer *b, u8 draw) {
u8 l,h,i,p,s,x,y;
if (b->cached && draw == b->draw) return;
-
+ // Parse and transform the sprite if not already cached.
switch (draw & 0x07) {
case 0x0: p=b->p+8; s=p+8; for (y=0;y<8;y++) { l=b->mem[p++ % 16]; h=b->mem[s++ % 16]; for (x=0;x<8;x++) { i=(7-x); b->sprite[y][x] = (l>>i & 1) | (h>>i & 1) << 1; } }; break;
case 0x1: p=b->p+8; s=p+8; for (y=0;y<8;y++) { l=b->mem[p++ % 16]; h=b->mem[s++ % 16]; for (x=0;x<8;x++) { i=( x); b->sprite[y][x] = (l>>i & 1) | (h>>i & 1) << 1; } }; break;
@@ -138,14 +147,77 @@ void prepare_2bit_sprite(SpriteBuffer *b, u8 draw) {
case 0x6: p=b->p; s=p+8; for (y=0;y<8;y++) { l=b->mem[--p % 16]; h=b->mem[--s % 16]; for (x=0;x<8;x++) { i=(7-x); b->sprite[x][y] = (l>>i & 1) | (h>>i & 1) << 1; } }; break;
case 0x7: p=b->p; s=p+8; for (y=0;y<8;y++) { l=b->mem[--p % 16]; h=b->mem[--s % 16]; for (x=0;x<8;x++) { i=( x); b->sprite[x][y] = (l>>i & 1) | (h>>i & 1) << 1; } }; break;
}
-
- b->cached = TRUE;
b->draw = draw;
+ b->cached = true;
+}
+
+
+// ------ BEDROCK SCREEN -------------------------------------------------------
+
+// Reset a screen device.
+void screen_reset(ScreenDevice *screen) {
+ screen->x = 0;
+ screen->y = 0;
+ screen->px = 0;
+ screen->py = 0;
+ screen->selected = 0;
+ spritebuf_reset(&screen->sprite);
+ screen->colour = 0;
+ for (int i=0; i<16; i++) screen->pal[i] = 0;
+ ndsscreen_clear(screen->nds);
+ screen->wake = false;
+ screen->dirty = false;
}
+// Unmap a screen device from a screen.
+void screen_map_to_none(ScreenDevice *screen) {
+ if (screen->nds) {
+ ndsscreen_clear(screen->nds);
+ screen->nds = NULL;
+ }
+}
+
+// Map a screen device to the main screen.
+void screen_map_to_main(ScreenDevice *screen) {
+ screen->nds = &main_screen;
+ memcpy(&screen->nds->pal, &screen->pal, 32);
+ screen->wake = true;
+}
+
+// Map a screen device to the sub screen.
+void screen_map_to_sub(ScreenDevice *screen) {
+ screen->nds = &sub_screen;
+ memcpy(&screen->nds->pal, &screen->pal, 32);
+ screen->wake = true;
+}
+
+// Commit a new colour to the colour palette.
+void screen_commit_colour(ScreenDevice *screen) {
+ u8 i = screen->colour >> 12 & 0x0f;
+ // Extract 5-bit channel values.
+ u8 r = screen->colour >> 7 & 0x1e;
+ u8 g = screen->colour >> 3 & 0x1e;
+ u8 b = screen->colour << 1 & 0x1e;
+ screen->pal[i] = RGB15(r,g,b);
+ if (screen->nds) screen->nds->pal[i] = RGB15(r,g,b);
+ screen->dirty = true;
+}
+
+// Move the screen cursor.
+void screen_move_cursor(ScreenDevice *screen, u8 move) {
+ switch (move >> 6) {
+ case 0b00: screen->x += move & 0x3f; return;
+ case 0b01: screen->y += move & 0x3f; return;
+ case 0b10: screen->x -= move & 0x3f; return;
+ case 0b11: screen->y -= move & 0x3f; return;
+ }
+}
+
+
-// ---------------------------------------------------------------------------
+// ------ RAW DRAW OPERATIONS --------------------------------------------------
+// Draw a pixel to a screen layer.
void draw_pixel(u16 *layer, u16 x, u16 y, u8 colour) {
if (x < PIXELS_WIDTH && y < PIXELS_HEIGHT) {
u32 addr = \
@@ -156,109 +228,58 @@ void draw_pixel(u16 *layer, u16 x, u16 y, u8 colour) {
}
}
+// Fill a screen layer with a solid colour.
void fill_layer(u16 *layer, u8 colour) {
u8 byte = colour << 4 | colour;
u32 word = byte << 24 | byte << 16 | byte << 8 | byte;
- dmaFillWords(word, layer, TILES_MEM);
-}
-
-void erase_screen(Screen *nds) {
- if (nds) {
- dmaFillWords(0, nds->bg, TILES_MEM);
- dmaFillWords(0, nds->fg, TILES_MEM);
- }
-};
-
-void flip_buffer(Screen *nds) {
- if (nds) {
- dmaCopyWords(0, nds->bg, nds->bgv, TILES_MEM);
- dmaCopyWords(0, nds->fg, nds->fgv, TILES_MEM);
- for (int i=0; i<16; i++) {
- nds->palv[i] = nds->pal[i];
- }
- }
+ dmaFillWords(word, layer, LAYER_MEM);
}
-void black_screen(Screen *nds) {
- if (nds) {
- for (int i=0; i<16; i++) {
- nds->palv[i] = RGB15(0,0,0);
- }
- dmaFillWords(0, nds->bgv, TILES_MEM);
- dmaFillWords(0, nds->fgv, TILES_MEM);
- }
-}
-// ---------------------------------------------------------------------------
-void draw_dispatch(ScreenDevice *scr, u8 draw) {
- if (scr->nds) {
- switch (draw >> 4) {
- case 0x0: scr_draw_pixel(scr, scr->nds->bg, draw); break;
- case 0x1: scr_draw_sprite(scr, scr->nds->bg, draw); break;
- case 0x2: scr_fill_layer(scr, scr->nds->bg, draw); break;
- case 0x3: scr_draw_sprite(scr, scr->nds->bg, draw); break;
- case 0x4: scr_draw_line(scr, scr->nds->bg, draw); break;
- case 0x5: scr_draw_line(scr, scr->nds->bg, draw); break;
- case 0x6: scr_draw_rect(scr, scr->nds->bg, draw); break;
- case 0x7: scr_draw_rect(scr, scr->nds->bg, draw); break;
- case 0x8: scr_draw_pixel(scr, scr->nds->fg, draw); break;
- case 0x9: scr_draw_sprite(scr, scr->nds->fg, draw); break;
- case 0xA: scr_fill_layer(scr, scr->nds->fg, draw); break;
- case 0xB: scr_draw_sprite(scr, scr->nds->fg, draw); break;
- case 0xC: scr_draw_line(scr, scr->nds->fg, draw); break;
- case 0xD: scr_draw_line(scr, scr->nds->fg, draw); break;
- case 0xE: scr_draw_rect(scr, scr->nds->fg, draw); break;
- case 0xF: scr_draw_rect(scr, scr->nds->fg, draw); break;
- }
- scr->dirty = true;
- }
- scr->px = scr->x;
- scr->py = scr->y;
-}
+// ------ DRAW OPERATIONS ------------------------------------------------------
-void scr_draw_pixel(ScreenDevice *scr, u16 *layer, u8 draw) {
- draw_pixel(layer, scr->x, scr->y, draw&0xf);
+void op_draw_pixel(ScreenDevice *screen, u16 *layer, u8 draw) {
+ draw_pixel(layer, screen->x, screen->y, draw&0xf);
}
-void scr_fill_layer(ScreenDevice *scr, u16 *layer, u8 draw) {
+void op_fill_layer(ScreenDevice *screen, u16 *layer, u8 draw) {
fill_layer(layer, draw&0xf);
}
-void scr_draw_sprite(ScreenDevice *scr, u16 *layer, u8 draw) {
- if (draw & 0x20) { prepare_2bit_sprite(&scr->sprite, draw); }
- else { prepare_1bit_sprite(&scr->sprite, draw); }
-
- u8 colours[4] = {
- scr->colours >> 12 & 0x000f,
- scr->colours >> 8 & 0x000f,
- scr->colours >> 4 & 0x000f,
- scr->colours & 0x000f,
+void op_draw_sprite(ScreenDevice *screen, u16 *layer, u8 draw) {
+ if (draw & 0x20) { spritebuf_prepare_2bit(&screen->sprite, draw); }
+ else { spritebuf_prepare_1bit(&screen->sprite, draw); }
+ // Parse sprite colours.
+ u8 selected[4] = {
+ screen->selected >> 12 & 0x000f,
+ screen->selected >> 8 & 0x000f,
+ screen->selected >> 4 & 0x000f,
+ screen->selected & 0x000f,
};
-
if (draw & 0x08) {
- // Draw sprite with transparent background
+ // Draw sprite with transparent background.
for (u8 y=0;y<8;y++) {
for (u8 x=0;x<8;x++) {
- u8 i = scr->sprite.sprite[y][x];
- if (i) draw_pixel(layer, scr->x+x, scr->y+y, colours[i]);
+ u8 i = screen->sprite.sprite[y][x];
+ if (i) draw_pixel(layer, screen->x+x, screen->y+y, selected[i]);
}
}
} else {
- // Draw sprite with opaque background
+ // Draw sprite with opaque background.
for (u8 y=0;y<8;y++) {
for (u8 x=0;x<8;x++) {
- u8 i = scr->sprite.sprite[y][x];
- draw_pixel(layer, scr->x+x, scr->y+y, colours[i]);
+ u8 i = screen->sprite.sprite[y][x];
+ draw_pixel(layer, screen->x+x, screen->y+y, selected[i]);
}
}
}
}
-void scr_draw_line(ScreenDevice *scr, u16 *layer, u8 draw) {
- s16 x = (s16) scr->x;
- s16 y = (s16) scr->y;
- s16 x_end = (s16) scr->px;
- s16 y_end = (s16) scr->py;
+void op_draw_line(ScreenDevice *screen, u16 *layer, u8 draw) {
+ s16 x = (s16) screen->x;
+ s16 y = (s16) screen->y;
+ s16 x_end = (s16) screen->px;
+ s16 y_end = (s16) screen->py;
s32 dx = abs(x_end - x);
s32 dy = -abs(y_end - y);
@@ -267,24 +288,24 @@ void scr_draw_line(ScreenDevice *scr, u16 *layer, u8 draw) {
s32 e1 = dx + dy;
if (draw & 0x10) {
- // Draw 1-bit textured line.
- prepare_1bit_sprite(&scr->sprite, draw);
- u8 c1 = scr->colours >> 8 & 0xf;
- u8 c0 = scr->colours >> 12 & 0xf;
+ // Draw 1-bit textured line.
+ spritebuf_prepare_1bit(&screen->sprite, draw);
+ u8 c1 = screen->selected >> 8 & 0xf;
+ u8 c0 = screen->selected >> 12 & 0xf;
bool opaque = !(draw & 0x08);
while (1) {
- if (scr->sprite.sprite[y%8][x%8]) { draw_pixel(layer, x, y, c1); }
- else if (opaque) { draw_pixel(layer, x, y, c0); }
+ if (screen->sprite.sprite[y%8][x%8]) { draw_pixel(layer, x, y, c1); }
+ else if (opaque) { draw_pixel(layer, x, y, c0); }
if (x == x_end && y == y_end) return;
s32 e2 = e1 << 1;
if (e2 >= dy) { e1 += dy; x += sx; }
if (e2 <= dx) { e1 += dx; y += sy; }
}
} else {
- // Draw solid line.
- u8 colour = draw & 0xf;
+ // Draw solid line.
+ u8 c0 = draw & 0xf;
while (1) {
- draw_pixel(layer, x, y, colour);
+ draw_pixel(layer, x, y, c0);
if (x == x_end && y == y_end) return;
s32 e2 = e1 << 1;
if (e2 >= dy) { e1 += dy; x += sx; }
@@ -293,46 +314,64 @@ void scr_draw_line(ScreenDevice *scr, u16 *layer, u8 draw) {
}
}
-void scr_draw_rect(ScreenDevice *scr, u16 *layer, u8 draw) {
+void op_draw_rect(ScreenDevice *screen, u16 *layer, u8 draw) {
#define SWAP(x,y) {u8 temp=x; x=y; y=temp;}
#define CLAMP(v,m) {v>0x7fff ? 0 : v>m ? m : v}
// Get bounding box.
- u16 l = CLAMP(scr->px, PIXELS_WIDTH -1);
- u16 r = CLAMP(scr->x , PIXELS_WIDTH -1);
- u16 t = CLAMP(scr->py, PIXELS_HEIGHT-1);
- u16 b = CLAMP(scr->y , PIXELS_HEIGHT-1);
+ u16 l = CLAMP(screen->px, PIXELS_WIDTH -1);
+ u16 r = CLAMP(screen->x , PIXELS_WIDTH -1);
+ u16 t = CLAMP(screen->py, PIXELS_HEIGHT-1);
+ u16 b = CLAMP(screen->y , PIXELS_HEIGHT-1);
if (l>r) SWAP(l,r);
if (t>b) SWAP(t,b);
if (draw & 0x10) {
- // Draw 1-bit textured rectangle.
- prepare_1bit_sprite(&scr->sprite, draw);
- u8 c1 = scr->colours >> 8 & 0xf;
- u8 c0 = scr->colours >> 12 & 0xf;
+ // Draw 1-bit textured rectangle.
+ spritebuf_prepare_1bit(&screen->sprite, draw);
+ u8 c1 = screen->selected >> 8 & 0xf;
+ u8 c0 = screen->selected >> 12 & 0xf;
bool opaque = !(draw & 0x08);
for (u16 x=l; x<r+1; x++) {
for (u16 y=t; y<b+1; y++) {
- if (scr->sprite.sprite[y%8][x%8]) { draw_pixel(layer, x, y, c1); }
- else if (opaque) { draw_pixel(layer, x, y, c0); }
+ if (screen->sprite.sprite[y%8][x%8]) { draw_pixel(layer, x, y, c1); }
+ else if (opaque) { draw_pixel(layer, x, y, c0); }
}
}
} else {
- // Draw solid rectangle.
- u8 colour = draw & 0xf;
+ // Draw solid rectangle.
+ u8 c0 = draw & 0xf;
for (u16 x=l; x<r+1; x++) {
for (u16 y=t; y<b+1; y++) {
- draw_pixel(layer, x, y, colour);
+ draw_pixel(layer, x, y, c0);
}
}
}
}
-void move_cursor(ScreenDevice *scr, u8 move) {
- switch (move >> 6) {
- case 0b00: scr->x += move & 0x3f; return;
- case 0b01: scr->y += move & 0x3f; return;
- case 0b10: scr->x -= move & 0x3f; return;
- case 0b11: scr->y -= move & 0x3f; return;
+// Dispatch to the correct drawing operation.
+void screen_draw(ScreenDevice *screen, u8 draw) {
+ if (screen->nds) {
+ switch (draw >> 4) {
+ case 0x0: op_draw_pixel(screen, screen->nds->bg, draw); break;
+ case 0x1: op_draw_sprite(screen, screen->nds->bg, draw); break;
+ case 0x2: op_fill_layer(screen, screen->nds->bg, draw); break;
+ case 0x3: op_draw_sprite(screen, screen->nds->bg, draw); break;
+ case 0x4: op_draw_line(screen, screen->nds->bg, draw); break;
+ case 0x5: op_draw_line(screen, screen->nds->bg, draw); break;
+ case 0x6: op_draw_rect(screen, screen->nds->bg, draw); break;
+ case 0x7: op_draw_rect(screen, screen->nds->bg, draw); break;
+ case 0x8: op_draw_pixel(screen, screen->nds->fg, draw); break;
+ case 0x9: op_draw_sprite(screen, screen->nds->fg, draw); break;
+ case 0xA: op_fill_layer(screen, screen->nds->fg, draw); break;
+ case 0xB: op_draw_sprite(screen, screen->nds->fg, draw); break;
+ case 0xC: op_draw_line(screen, screen->nds->fg, draw); break;
+ case 0xD: op_draw_line(screen, screen->nds->fg, draw); break;
+ case 0xE: op_draw_rect(screen, screen->nds->fg, draw); break;
+ case 0xF: op_draw_rect(screen, screen->nds->fg, draw); break;
+ }
+ screen->dirty = true;
}
+ screen->px = screen->x;
+ screen->py = screen->y;
}
diff --git a/arm9/source/devices/screen.h b/arm9/source/devices/screen.h
index 1ff58e5..48411b7 100644
--- a/arm9/source/devices/screen.h
+++ b/arm9/source/devices/screen.h
@@ -1,70 +1,68 @@
#ifndef SCREEN_H_
#define SCREEN_H_
+ #include "../bang.h"
+
+
+ // Dimension constants.
#define PIXELS_WIDTH 256
#define PIXELS_HEIGHT 192
- #define PIXELS_SIZE 49152
+ #define PIXELS_COUNT (PIXELS_WIDTH*PIXELS_HEIGHT)
#define TILES_WIDTH 32
#define TILES_HEIGHT 24
- #define TILES_SIZE 768
- #define TILES_MEM 24576 // size of a screen layer in bytes
+ #define TILES_COUNT (TILES_WIDTH*TILES_HEIGHT)
+ #define LAYER_MEM (TILES_COUNT*32)
- #define BG_SLOT_VIS 0 // tile base for visible background tiles
- #define FG_SLOT_VIS 2 // tile base for visible foreground tiles
- #define BG_SLOT 4 // tile base for background tiles
- #define FG_SLOT 6 // tile base for foreground tiles
- #define MAP_SLOT 12 // map base for tile map
+ // VRAM addresses.
+ #define BG_SLOT_FRONT 0 // Tile base for background tiles in the front buffer
+ #define FG_SLOT_FRONT 2 // Tile base for foreground tiles in the front buffer
+ #define BG_SLOT_BACK 4 // Tile base for background tiles in the back buffer
+ #define FG_SLOT_BACK 6 // Tile base for foreground tiles in the back buffer
+ #define MAP_SLOT 12 // Map base for tile map
+ // Sprite buffer for the screen device.
typedef struct {
- u8 mem[16]; // buffer memory
- u8 p; // buffer pointer
- u8 sprite[8][8]; // transformed sprite
- bool cached; // true if sprite has been transformed
- u8 draw; // the cached draw byte
+ u8 mem[16]; // Buffer memory
+ u8 p; // Buffer pointer
+ u8 sprite[8][8]; // Cached transformed sprite
+ u8 draw; // Cached draw byte
+ bool cached; // A transformed sprite has been cached
} SpriteBuffer;
+ // Hardware screen on the NDS.
typedef struct {
- u16 *bgv, *fgv; // visible tile memory
- u16 *bg, *fg; // buffered tile memory
- u16 *map; // tile map (never changes)
- u16 *palv; // visible colour palette
- u16 pal[16]; // buffered colour palette
- } Screen;
+ u16 *bgv, *fgv; // Visible tile memory (front buffer)
+ u16 *bg, *fg; // Buffered tile memory (back buffer)
+ u16 *map; // Tile map (never changes)
+ u16 *palv; // Visible colour palette (front buffer)
+ u16 pal[16]; // Buffered colour palette (back buffer)
+ } NDSScreen;
+ // Bedrock screen device.
typedef struct {
- u16 x,y; // cursor position
- u16 px,py; // previous cursor position
- u16 colours; // sprite colours
- SpriteBuffer sprite; // sprite buffer
- u16 palette_write; // palette write cache
- u16 palette[16]; // palette as RGB15 colours
- Screen *nds; // NDS VRAM pointers
- bool wake; // wake flag
- bool dirty; // dirty flag
+ u16 x,y; // Current cursor position
+ u16 px,py; // Previous cursor position
+ u16 selected; // Selected sprite colours
+ SpriteBuffer sprite; // Sprite buffer
+ u16 colour; // Palette colour write cache
+ u16 pal[16]; // Palette as RGB15 colours
+ NDSScreen *nds; // Pointer to hardware screen to draw to.
+ bool wake; // Wake flag
+ bool dirty; // Dirty flag
} ScreenDevice;
- void init_screens(void);
- void scr_make_main(ScreenDevice *scr);
- void scr_make_sub(ScreenDevice *scr);
- void scr_unmake(ScreenDevice *scr);
-
- void set_palette_high(ScreenDevice *scr, u8 high);
- void set_palette_low(ScreenDevice *scr, u8 low);
- void draw_pixel(u16 *layer, u16 x, u16 y, u8 colour);
- void fill_layer(u16 *layer, u8 colour);
- void erase_screen(Screen *nds);
- void flip_buffer(Screen *nds);
- void black_screen(Screen *nds);
-
- void scr_draw_pixel( ScreenDevice *scr, u16 *layer, u8 draw);
- void scr_draw_sprite(ScreenDevice *scr, u16 *layer, u8 draw);
- void scr_fill_layer( ScreenDevice *scr, u16 *layer, u8 draw);
- void scr_draw_line( ScreenDevice *scr, u16 *layer, u8 draw);
- void scr_draw_rect( ScreenDevice *scr, u16 *layer, u8 draw);
-
- void draw_dispatch(ScreenDevice *scr, u8 draw);
- void move_cursor(ScreenDevice *scr, u8 move);
-
- void push_sprite(SpriteBuffer *b, u8 row);
+ // Functions.
+ void init_nds_screens(void);
+ // Methods.
+ void screen_reset(ScreenDevice *screen);
+ void ndsscreen_flip_buffers(NDSScreen *nds);
+ void ndsscreen_clear(NDSScreen *nds);
+ void spritebuf_push(SpriteBuffer *b, u8 row);
+ void screen_map_to_none(ScreenDevice *screen);
+ void screen_map_to_main(ScreenDevice *screen);
+ void screen_map_to_sub(ScreenDevice *screen);
+ void screen_commit_colour(ScreenDevice *screen);
+ void screen_move_cursor(ScreenDevice *screen, u8 move);
+ void screen_draw(ScreenDevice *screen, u8 draw);
#endif
diff --git a/arm9/source/devices/stream.c b/arm9/source/devices/stream.c
new file mode 100644
index 0000000..7329380
--- /dev/null
+++ b/arm9/source/devices/stream.c
@@ -0,0 +1,40 @@
+#include "stream.h"
+
+/*
+This is a skeleton of a device at the moment. The local.output.connected flag
+// of the keyboard program is manually set in main.c so that only the keyboard
+can send bytes to the main instance, otherwise user programs that write to the
+stream device will send keyboard bytes to themselves.
+*/
+
+
+void channel_reset(Channel *channel) {
+ channel->connected = false;
+ channel->transmitting = false;
+}
+
+void bytestream_reset(Bytestream *bstream) {
+ channel_reset(&bstream->input);
+ channel_reset(&bstream->output);
+}
+
+// Reset a stream device.
+void stream_reset(StreamDevice *stream) {
+ bytestream_reset(&stream->local);
+ bytestream_reset(&stream->remote);
+}
+
+// Write a byte to the stream of the main instance. This byte is expected to
+// be consumed by a keyboard program running on the sub instance.
+void stream_write(StreamDevice *stream, u8 byte) {
+ if (stream->local.output.connected) {
+ receive_keyboard_byte(byte);
+ }
+}
+
+// End the current transmission. Currently this will only hide the keyboard.
+void stream_end(StreamDevice *stream) {
+ if (stream->local.output.connected) {
+ close_keyboard();
+ }
+}
diff --git a/arm9/source/devices/stream.h b/arm9/source/devices/stream.h
new file mode 100644
index 0000000..2ee463c
--- /dev/null
+++ b/arm9/source/devices/stream.h
@@ -0,0 +1,33 @@
+// TODO: Implement this properly.
+
+
+#ifndef STREAM_H_
+ #define STREAM_H_
+
+ #include "../bang.h"
+
+ typedef struct {
+ bool connected;
+ bool transmitting;
+ } Channel;
+
+ typedef struct {
+ Channel input;
+ Channel output;
+ } Bytestream;
+
+ // Bedrock stream device.
+ typedef struct {
+ Bytestream local;
+ Bytestream remote;
+ } StreamDevice;
+
+ // Methods.
+ void stream_reset(StreamDevice *stream);
+ void stream_write(StreamDevice *stream, u8 byte);
+ void stream_end(StreamDevice *stream);
+
+ // Duplicate declarations from main.
+ void receive_keyboard_byte(u8 byte);
+ void close_keyboard(void);
+#endif
diff --git a/arm9/source/devices/system.c b/arm9/source/devices/system.c
index 3406eed..d2aeb7f 100644
--- a/arm9/source/devices/system.c
+++ b/arm9/source/devices/system.c
@@ -1,16 +1,35 @@
-#include "nds.h"
#include "file.h"
#include "system.h"
-u8 devices_high() {
- return 0b11111100;
+// Reset a system device.
+void system_reset(SystemDevice *system) {
+ readbuf_set_pointer(&system->name);
+ readbuf_set_pointer(&system->authors);
}
-u8 devices_low() {
- u8 devices = 0;
- if (filesystem_enabled()) {
- devices |= 0b00100000;
- }
- return devices;
+// Return a bitmask representing the connected state of each device.
+u16 connected_devices(void) {
+ bool devices[16] = {
+ /* SYSTEM */ true,
+ /* MEMORY */ true,
+ /* MATH */ true,
+ /* CLOCK */ true,
+ /* INPUT */ true,
+ /* SCREEN */ true,
+ /* TONE */ false,
+ /* SAMPLER */ false,
+ /* STREAM */ true,
+ /* FILE */ nds_filesystem_enabled(),
+ /* CLIPBOARD */ false,
+ /* REGISTRY */ false,
+ /* CUSTOM 1 */ false,
+ /* CUSTOM 2 */ false,
+ /* CUSTOM 3 */ false,
+ /* CUSTOM 4 */ false,
+ };
+ u16 mask = 0;
+ for (int i=0; i<16; i++) mask |= devices[i] << (15-i);
+ return mask;
}
+
diff --git a/arm9/source/devices/system.h b/arm9/source/devices/system.h
index 7549f0f..029d2e6 100644
--- a/arm9/source/devices/system.h
+++ b/arm9/source/devices/system.h
@@ -1,16 +1,25 @@
-#include "../types/readbuf.h"
+// TODO: Wrap more system device functionality in functions here.
#ifndef SYSTEM_H_
#define SYSTEM_H_
+ #include "../bang.h"
+ #include "../types/readbuf.h"
+ #include "../types/wakequeue.h"
+
+
+ // Bedrock system device.
typedef struct {
ReadBuf name;
ReadBuf authors;
u16 sleep; // device mask for waking
u8 wake; // ID of wake device
+ WakeQueue queue;
} SystemDevice;
- u8 devices_high();
- u8 devices_low();
+ // Functions.
+ u16 connected_devices(void);
+ // Methods.
+ void system_reset(SystemDevice *system);
#endif
diff --git a/arm9/source/main.c b/arm9/source/main.c
index 56103da..9dc612c 100644
--- a/arm9/source/main.c
+++ b/arm9/source/main.c
@@ -1,122 +1,179 @@
-#include <stdio.h>
-#include <time.h>
-#include <nds.h>
-#include "devices/clock.h"
-#include "devices/math.h"
-#include "devices/screen.h"
-#include "bang.h"
-#include "core.h"
#include "main.h"
+#include "config.h"
-#define NUM_BR 5
-Bedrock br[NUM_BR] = {};
+char *system_name = "bedrock-nds/0.1.0";
+char *system_authors = "Ben Bridle";
+
+// Reserve memory for all Bedrock instances up front.
+Bedrock br[NUM_INSTANCES] = {};
+// The instance currently visible on the main screen.
+u32 MAIN_INSTANCE = 0;
+
+// The NDS has two 2D engines, called the main engine and the sub engine.
+// These can be freely allocated to either of the hardware screens, there
+// is effectively no difference between the two engines for our purposes.
+// The br_main pointer will point to the Bedrock instance currently using
+// the main engine (which will always be the current user instance), and
+// the br_sub pointer to the instance using the sub engine (which will
+// always be the keyboard instance).
Bedrock *br_main;
Bedrock *br_sub;
-bool main_on_bottom = TRUE;
+// The main 2D engine always starts on the bottom hardware screen.
+bool main_on_bottom = true;
-char *system_name = "bedrock-nds/0.1.0-alpha";
-char *system_authors = "Ben Bridle";
+// Bake some Bedrock programs into the emulator.
u8 main_program[] = {
- #include "../include/cobalt.br.inc"
+ // #include "../include/alphabet-snake.br.inc"
+ // #include "../include/clock.br.inc"
+ #include "../include/cobalt-demo.br.inc"
+ // #include "../include/system-info.br.inc"
};
u8 keyboard_program[] = {
#include "../include/keyboard.br.inc"
};
-// Change to the next screen layout.
-void change_layout(void) {
+// Swap the hardware screens.
+void swap_screens(void) {
lcdSwap();
main_on_bottom = !main_on_bottom;
+ // Hide the sub program if the main program is on the bottom screen.
if (main_on_bottom) {
- scr_unmake(&br_sub->scr);
+ screen_map_to_none(&br_sub->dev.screen);
} else {
- scr_make_sub(&br_sub->scr);
+ screen_map_to_sub(&br_sub->dev.screen);
}
}
+// TODO
void receive_keyboard_byte(u8 byte) {
if (br_main) {
- inp_receive_byte(&br_main->inp, byte);
+ input_receive_key(&br_main->dev.input, byte);
}
}
-bool is_keyboard_open(void) {
- return !main_on_bottom;
-}
-
+// TODO
void open_keyboard(void) {
if (main_on_bottom) {
- change_layout();
+ swap_screens();
+ // Deactivate the pointer on the main instance.
+ br_main->dev.input.pointer = false;
+ br_main->dev.input.wake = true;
+ // Connect the keyboard.
+ br_sub->dev.stream.local.output.connected = true;
}
}
+// TODO
void close_keyboard(void) {
if (!main_on_bottom) {
- change_layout();
+ swap_screens();
+ // Disconnect the keyboard.
+ br_sub->dev.stream.local.output.connected = false;
}
}
+// Make a neighbouring user instance become the new active user instance.
+void change_main_instance(int delta) {
+ screen_map_to_none(&br[MAIN_INSTANCE].dev.screen);
+ MAIN_INSTANCE = (MAIN_INSTANCE + delta) % USER_INSTANCES;
+ screen_map_to_main(&br[MAIN_INSTANCE].dev.screen);
+ br[MAIN_INSTANCE].dev.screen.wake = true;
+ br_main = &br[MAIN_INSTANCE];
+}
+
// Scan for input and handle emulator-specific keys.
void receive_input(void) {
+ // This should be the only place in the entire codebase where the
+ // scanKeys function is called.
scanKeys();
- if (keysDown() & KEY_SELECT) change_layout();
+ // Swap screens when the select key is pressed.
+ if (keysDown() & KEY_SELECT) swap_screens();
+ if (SWITCH_BETWEEN_INSTANCES) {
+ if (keysDown() & KEY_L) change_main_instance(-1);
+ if (keysDown() & KEY_R) change_main_instance(1);
+ }
}
+// ------ MAIN -----------------------------------------------------------------
+
int main(void) {
#define ALIVE(br) (br && br->alive)
#define DEAD(br) (br && !br->alive)
#define AWAKE(br) (br && br->alive && br->awake)
#define ASLEEP(br) (br && br->alive && !br->awake)
- // Set memory identifiers and system device strings.
- for (int i=0; i<NUM_BR; i++) {
- br[i].mem.id = i+1;
- br[i].sys.name.mem = (u8*) &system_name[0];
- br[i].sys.authors.mem = (u8*) &system_authors[0];
+ // Initialise all Bedrock instances.
+ for (int i=0; i<NUM_INSTANCES; i++) {
+ br_reset(&br[i]);
+ br[i].dev.memory.id = i+1;
+ readbuf_populate(&br[i].dev.system.name, (u8*) system_name);
+ readbuf_populate(&br[i].dev.system.authors, (u8*) system_authors);
}
- init_screens();
- init_clock();
- init_filesystem();
+ // Initialise functions used by devices.
+ init_nds_clock();
+ init_nds_screens();
+ init_nds_filesystem();
+
+ // Start with the main screen on the bottom.
lcdMainOnBottom();
- // Load program
- start_br(&br[0], main_program, sizeof(main_program));
- start_br(&br[1], keyboard_program, sizeof(keyboard_program));
- br_main = &br[0];
- br_sub = &br[1];
- scr_make_main(&br_main->scr);
+ // Initialise the debug console.
+ // TODO: Remove.
+ // consoleDemoInit();
+
+ // Load program.
+ br_main = &br[MAIN_INSTANCE];
+ br_sub = &br[KEY_INSTANCE];
+ br_load(&br[MAIN_INSTANCE], main_program, sizeof(main_program));
+ br_load(&br[KEY_INSTANCE], keyboard_program, sizeof(keyboard_program));
+
+ // We map the main instance to the main screen, but we don't map the
+ // sub instance because we don't want it to be visible just yet.
+ screen_map_to_main(&br_main->dev.screen);
+
+ // ------ EVENT LOOP -------------------------------------------------------
while (1) {
- if (AWAKE(br_main)) run_br(br_main);
- if (AWAKE(br_sub)) run_br(br_sub);
+ if (AWAKE(br_main)) br_run(br_main);
+ if (AWAKE(br_sub)) br_run(br_sub);
if (DEAD(br_main)) br_main = NULL;
if (DEAD(br_sub)) br_sub = NULL;
- bool main_flip = ASLEEP(br_main) && br_main->scr.dirty;
- bool sub_flip = ASLEEP(br_sub) && br_sub->scr.dirty;
- if (main_flip || sub_flip) swiWaitForVBlank();
- if (main_flip) { flip_buffer(br_main->scr.nds); br_main->scr.dirty = false; }
- if (sub_flip) { flip_buffer(br_sub->scr.nds); br_sub->scr.dirty = false; }
+ // Check if screen buffers need to be flipped.
+ // Only flip buffers if the instance is asleep.
+ bool flip_main = ASLEEP(br_main) && br_main->dev.screen.dirty;
+ bool flip_sub = ASLEEP(br_sub) && br_sub->dev.screen.dirty;
+ // Wait for next frame to avoid running too fast.
+ if (flip_main || flip_sub) swiWaitForVBlank();
+ if (flip_main) {
+ ndsscreen_flip_buffers(br_main->dev.screen.nds);
+ br_main->dev.screen.dirty = false;
+ }
+ if (flip_sub) {
+ ndsscreen_flip_buffers(br_sub->dev.screen.nds);
+ br_sub->dev.screen.dirty = false;
+ }
rouse:
receive_input();
+ // Receive gamepad and touch input if main is on bottom screen.
if (ALIVE(br_main) && main_on_bottom) {
- inp_read_navigation(&br_main->inp);
- inp_read_gamepad(&br_main->inp);
- inp_read_touch(&br_main->inp);
+ input_update_gamepad(&br_main->dev.input);
+ input_update_touch(&br_main->dev.input);
}
+ // Receive gamepad and touch input if sub is on bottom screen.
if (ALIVE(br_sub) && !main_on_bottom) {
- inp_read_navigation(&br_sub->inp);
- inp_read_gamepad(&br_sub->inp);
- inp_read_touch(&br_sub->inp);
+ input_update_gamepad(&br_sub->dev.input);
+ input_update_touch(&br_sub->dev.input);
}
- if (ASLEEP(br_main)) rouse_br(br_main);
- if (ASLEEP(br_sub)) rouse_br(br_sub);
+ if (ASLEEP(br_main)) br_rouse(br_main);
+ if (ASLEEP(br_sub)) br_rouse(br_sub);
+
if (ASLEEP(br_main) && ASLEEP(br_sub)) {
// Sleep until next keypad event or clock tick.
swiIntrWait(1, IRQ_KEYS | IRQ_TIMER0);
@@ -124,6 +181,7 @@ int main(void) {
}
if (!br_main) {
+ printf("SHUTTING DOWN\n");
systemShutDown();
return 0;
}
diff --git a/arm9/source/main.h b/arm9/source/main.h
index 14aa0dd..bd2a8c3 100644
--- a/arm9/source/main.h
+++ b/arm9/source/main.h
@@ -1,12 +1,15 @@
-#include <nds.h>
-
#ifndef MAIN_H_
#define MAIN_H_
+ #include <stdio.h>
+ #include <time.h>
+ #include "bang.h"
+ #include "core.h"
+
+
+ // Functions.
void receive_keyboard_byte(u8 byte);
- bool is_keyboard_open(void);
void open_keyboard(void);
void close_keyboard(void);
void change_layout(void);
-
#endif
diff --git a/arm9/source/types/circbuf.c b/arm9/source/types/circbuf.c
index 532a5a0..0398254 100644
--- a/arm9/source/types/circbuf.c
+++ b/arm9/source/types/circbuf.c
@@ -1,6 +1,8 @@
#include "circbuf.h"
-u8 cb_read_byte(CircBuf *buf) {
+
+// Read a byte from a circular buffer, or zero if the buffer is empty.
+u8 circbuf_read(CircBuf *buf) {
if (buf->front != buf->back) {
return buf->mem[buf->front++];
} else {
@@ -8,13 +10,15 @@ u8 cb_read_byte(CircBuf *buf) {
}
}
-void cb_write_byte(CircBuf *buf, u8 byte) {
+// Write a byte to a circular buffer if the buffer is not full.
+void circbuf_write(CircBuf *buf, u8 byte) {
if (((buf->back+1)&0xff) != buf->front) {
buf->mem[buf->back++] = byte;
}
}
-void cb_clear(CircBuf *buf) {
+// Clear a circular buffer.
+void circbuf_clear(CircBuf *buf) {
buf->front = 0;
buf->back = 0;
}
diff --git a/arm9/source/types/circbuf.h b/arm9/source/types/circbuf.h
index 305f8bf..15b3b63 100644
--- a/arm9/source/types/circbuf.h
+++ b/arm9/source/types/circbuf.h
@@ -1,16 +1,18 @@
-#include <nds.h>
-
#ifndef CIRCBUF_H_
#define CIRCBUF_H_
+ #include "../bang.h"
+
+
+ // A 256-byte circular buffer.
typedef struct {
u8 mem[256];
- u8 front; // start of buffer, read from here until back
- u8 back; // end of buffer, write past here until front
+ u8 front; // start of buffer, read from here up to back
+ u8 back; // end of buffer, write past here up to front
} CircBuf;
- u8 cb_read_byte(CircBuf *buf);
- void cb_write_byte(CircBuf *buf, u8 byte);
- void cb_clear(CircBuf *buf);
-
+ // Methods.
+ u8 circbuf_read(CircBuf *buf);
+ void circbuf_write(CircBuf *buf, u8 byte);
+ void circbuf_clear(CircBuf *buf);
#endif
diff --git a/arm9/source/types/pathbuf.c b/arm9/source/types/pathbuf.c
index 1a610c8..e94b955 100644
--- a/arm9/source/types/pathbuf.c
+++ b/arm9/source/types/pathbuf.c
@@ -1,52 +1,99 @@
-#include <nds.h>
#include "pathbuf.h"
-u8 pb_read(PathBuf *buf) {
+
+// Read the next byte of the path buffer, or zero if all bytes have been read.
+u8 pathbuf_read(PathBuf *buf) {
u8 output = buf->mem[buf->p];
if (output) buf->p++;
return output;
}
-void pb_clear(PathBuf *buf) {
- memset(&buf->mem, 0, 256);
+// Clear a path buffer.
+void pathbuf_clear(PathBuf *buf) {
+ for (int i=0; i<256; i++) buf->mem[i] = 0;
+ buf->p = 0;
}
-void pb_reset(PathBuf *buf, bool to_name) {
+// Move the pointer to either the start of the path buffer or to the start of
+// the final path component.
+void pathbuf_set_pointer(PathBuf *buf, bool to_final_component) {
buf->p = 0;
- if (to_name) for (int i=0; i<255; i++) {
- if (buf->mem[i] == '/') {
- buf->p = i+1;
- } else if (buf->mem[i] == 0) {
- break;
+ if (to_final_component) {
+ for (int i=0; i<255; i++) {
+ if (buf->mem[i] == '/') {
+ buf->p = i+1;
+ } else if (buf->mem[i] == 0) {
+ break;
+ }
}
}
}
-// Push a byte to a PathBuf, return true and reset the pointer if byte is null.
-bool pb_push_byte(PathBuf *buf, u8 byte) {
- // Stop before overwriting the pointer.
- if (buf->p != 0xff) {
- buf->mem[buf->p++] = byte;
- }
- if (byte == 0) {
- buf->p = 0;
- return true;
- } else {
- return false;
- }
+// Populate a path buffer with a bytestring.
+void pathbuf_populate(PathBuf *buf, u8 *path) {
+ pathbuf_clear(buf);
+ u8 c;
+ for (int i=0; i<256; i++) {
+ c = path[i];
+ buf->mem[i] = c;
+ if (c == 0) return;
+ };
}
-bool pb_is_terminated(PathBuf *buf) {
- for (int i=0; i<255; i++) {
- if (buf->mem[i] == 0) {
- return true;
- }
- }
- return false;
+// Push a byte to a path buffer, return true and reset pointer if byte is null.
+bool pathbuf_push(PathBuf *buf, u8 byte) {
+ buf->mem[buf->p++] = byte;
+ return byte == 0;
}
-void pb_populate(PathBuf *buf, u8 *path) {
- strncpy((char*) &buf->mem[0], (char*) path, 254);
- buf->p = 0;
+// Check if a path buffer is empty.
+bool pathbuf_is_empty(PathBuf *buf) {
+ return buf->mem[0] == 0;
+}
+
+// Check if a path buffer contains the path of the root directory.
+bool pathbuf_is_root(PathBuf *buf) {
+ return buf->mem[0] == '/' && buf->mem[1] == 0;
+}
+
+// Check if a path buffer contains a valid path.
+bool pathbuf_is_valid(PathBuf *buf) {
+ // Test that path begins with a forward slash and ends with a null byte.
+ if (buf->mem[0x00] != '/') return false;
+ if (buf->mem[0xFF] != 0 ) return false;
+ // Find the length of the path.
+ int len = 0;
+ for (; len<256; len++) if (buf->mem[len] == 0) break;
+ // End early if path is the root directory.
+ if (len == 1) return true;
+ // Test that path contains no control characters.
+ for (int i=0; i<len; i++) if (buf->mem[i] < 0x20) return false;
+ // Test that path contains no empty or relative components. This also
+ // happens to test that it doesn't end with a slash.
+ bool is_empty = false;
+ bool all_dots = false;
+ int dot_count = 0;
+ u8 c;
+ for (int i=0; i<=len; i++) {
+ c = buf->mem[i];
+ if (c == '/' || c == 0) {
+ // Test if component is empty.
+ if (is_empty) return false;
+ // Test if component is one or two periods.
+ if (all_dots && dot_count < 3) return false;
+ // Reset flags.
+ is_empty = true;
+ all_dots = true;
+ dot_count = 0;
+ } else {
+ is_empty = false;
+ if (c == '.') {
+ dot_count++;
+ } else {
+ all_dots = false;
+ }
+ }
+ }
+ return true;
}
diff --git a/arm9/source/types/pathbuf.h b/arm9/source/types/pathbuf.h
index 7fd7251..a926262 100644
--- a/arm9/source/types/pathbuf.h
+++ b/arm9/source/types/pathbuf.h
@@ -1,18 +1,22 @@
-#include <nds.h>
-
#ifndef PATHBUF_H_
#define PATHBUF_H_
+ #include "../bang.h"
+
+
+ // A 255-byte path buffer.
typedef struct {
- u8 mem[255];
+ u8 mem[256];
u8 p;
} PathBuf;
- u8 pb_read(PathBuf *buf);
- void pb_clear(PathBuf *buf);
- void pb_reset(PathBuf *buf, bool to_name);
- bool pb_push_byte(PathBuf *buf, u8 byte);
- bool pb_is_terminated(PathBuf *buf);
- void pb_populate(PathBuf *buf, u8 *path);
-
+ // Methods.
+ u8 pathbuf_read(PathBuf *buf);
+ void pathbuf_clear(PathBuf *buf);
+ void pathbuf_set_pointer(PathBuf *buf, bool to_final_component);
+ void pathbuf_populate(PathBuf *buf, u8 *path);
+ bool pathbuf_push(PathBuf *buf, u8 byte);
+ bool pathbuf_is_empty(PathBuf *buf);
+ bool pathbuf_is_root(PathBuf *buf);
+ bool pathbuf_is_valid(PathBuf *buf);
#endif
diff --git a/arm9/source/types/readbuf.c b/arm9/source/types/readbuf.c
index eaee27a..750ac4d 100644
--- a/arm9/source/types/readbuf.c
+++ b/arm9/source/types/readbuf.c
@@ -1,12 +1,20 @@
-#include <nds.h>
#include "readbuf.h"
-u8 rb_read(ReadBuf *buf) {
+
+// Populate a read buffer with a pointer to a string.
+void readbuf_populate(ReadBuf *buf, u8 *string) {
+ buf->mem = string;
+ buf->p = 0;
+}
+
+// Read the next byte of a read buffer, or zero if all bytes have been read.
+u8 readbuf_read(ReadBuf *buf) {
u8 output = buf->mem[buf->p];
if (output) buf->p++;
return output;
}
-void rb_reset(ReadBuf *buf) {
+// Move the pointer to the start of the buffer.
+void readbuf_set_pointer(ReadBuf *buf) {
buf->p = 0;
}
diff --git a/arm9/source/types/readbuf.h b/arm9/source/types/readbuf.h
index 9077a69..a88934b 100644
--- a/arm9/source/types/readbuf.h
+++ b/arm9/source/types/readbuf.h
@@ -1,14 +1,17 @@
-#include <nds.h>
-
#ifndef READBUF_H_
#define READBUF_H_
+ #include "../bang.h"
+
+
+ // A variable-length read buffer.
typedef struct {
u8 *mem;
u8 p;
} ReadBuf;
- u8 rb_read(ReadBuf *buf);
- void rb_reset(ReadBuf *buf);
-
+ // Methods.
+ void readbuf_populate(ReadBuf *buf, u8 *string);
+ u8 readbuf_read(ReadBuf *buf);
+ void readbuf_set_pointer(ReadBuf *buf);
#endif
diff --git a/arm9/source/types/wakequeue.c b/arm9/source/types/wakequeue.c
new file mode 100644
index 0000000..8876123
--- /dev/null
+++ b/arm9/source/types/wakequeue.c
@@ -0,0 +1,30 @@
+#include "wakequeue.h"
+
+/*
+TODO: This is unused at the moment. It will eventually be used for keeping
+track of which device last woke a Bedrock instance, to optimally choose
+which device to use when waking from sleep.
+*/
+
+// Reset a wake queue.
+void wakequeue_reset(WakeQueue *queue) {
+ // Populate the queue with fifteen slot numbers. Slot zero is excluded,
+ // as it always comes last in the wake order.
+ for (int i=0; i<15; i++) queue->mem[i] = i+1;
+}
+
+// TODO: Not quite done yet.
+bool wakequeue_wake(WakeQueue *queue, u16 device_list) {
+ // Test each entry in the queue against the device list.
+ for (int i=0; i<15; i++) {
+ u8 slot_number = queue->mem[i];
+ if (TEST(device_list, 0x8000 >> slot_number)) {
+ // Move the matched entry to the back of the queue.
+ for (; i<14; i++) queue->mem[i] = queue->mem[i+1];
+ queue->mem[14] = slot_number;
+ return true;
+ }
+ }
+ // Test system device last.
+ return TEST(device_list, 0x8000);
+}
diff --git a/arm9/source/types/wakequeue.h b/arm9/source/types/wakequeue.h
new file mode 100644
index 0000000..ed07d6d
--- /dev/null
+++ b/arm9/source/types/wakequeue.h
@@ -0,0 +1,13 @@
+#ifndef WAKEQUEUE_H_
+ #define WAKEQUEUE_H_
+
+ #include "../bang.h"
+
+
+ // A variable-length read buffer.
+ typedef struct {
+ u8 mem[15]; // List of slot numbers
+ } WakeQueue;
+
+ // Methods.
+#endif
diff --git a/icon.bmp b/icon.bmp
new file mode 100644
index 0000000..121dc1c
--- /dev/null
+++ b/icon.bmp
Binary files differ