Browse Source

Initial revision

David Rose 24 years ago
parent
commit
5338cc677f

+ 45 - 0
pandaapp/src/indexify/Package.pp

@@ -0,0 +1,45 @@
+//
+// Package.pp
+//
+// This file defines certain configuration variables that are to be
+// written into the various make scripts.  It is processed by ppremake
+// (along with the Sources.pp files in each of the various
+// directories) to generate build scripts appropriate to each
+// environment.
+//
+// This is the package-specific file, which should be at the top of
+// every source hierarchy.  It generally gets the ball rolling, and is
+// responsible for explicitly including all of the relevent Config.pp
+// files.
+
+#define PACKAGE indexify
+#define VERSION 0.80
+
+// Where should we find the PANDATOOL source directory?
+#if $[or $[CTPROJS],$[PANDATOOL]]
+  // If we are presently attached, use the environment variable.
+  #define PANDATOOL_SOURCE $[PANDATOOL]
+  #if $[eq $[PANDATOOL],]
+    #error You seem to be attached to some trees, but not PANDATOOL!
+  #endif
+#else
+  // Otherwise, if we are not attached, we guess that the source is a
+  // sibling directory to this source root.
+  #define PANDATOOL_SOURCE $[standardize $[TOPDIR]/../pandatool]
+#endif
+
+// Where should we install INDEXIFY?
+#defer INDEXIFY_INSTALL $[INSTALL_DIR]
+#defer INDEXIFY_INSTALL_OTHER $[INSTALL_DIR]
+
+
+// Define the inter-tree dependencies.
+#define NEEDS_TREES $[NEEDS_TREES] pandatool
+
+
+// Also get the PANDATOOL Package file and everything that includes.
+#if $[not $[isfile $[PANDATOOL_SOURCE]/Package.pp]]
+  #error PANDATOOL source directory not found!  Are you attached properly?
+#endif
+
+#include $[PANDATOOL_SOURCE]/Package.pp

+ 21 - 0
pandaapp/src/indexify/Sources.pp

@@ -0,0 +1,21 @@
+#begin bin_target
+  #define USE_FREETYPE yes
+
+  #define TARGET indexify
+  #define OTHER_LIBS \
+    progbase \
+    pnmimage:c pnmimagetypes:c panda:m \
+    pystub
+
+  #define SOURCES \
+    default_index_icons.cxx default_index_icons.h \
+    default_font.cxx default_font.h \
+    indexImage.cxx indexImage.h \
+    indexParameters.cxx indexParameters.h \
+    indexify.cxx indexify.h \
+    photo.cxx photo.h \
+    rollDirectory.cxx rollDirectory.h \
+    textGlyph.cxx textGlyph.h \
+    textMaker.cxx textMaker.h
+
+#end bin_target

+ 2049 - 0
pandaapp/src/indexify/default_font.cxx

@@ -0,0 +1,2049 @@
+// Filename: default_font.cxx
+// Created by:  drose (04Apr02)
+//
+////////////////////////////////////////////////////////////////////
+//
+// PANDA 3D SOFTWARE
+// Copyright (c) 2001, Disney Enterprises, Inc.  All rights reserved
+//
+// All use of this software is subject to the terms of the Panda 3d
+// Software license.  You should have received a copy of this license
+// along with this source code; you will also find a current copy of
+// the license at http://www.panda3d.org/license.txt .
+//
+// To contact the maintainers of this program write to
+// [email protected] .
+//
+////////////////////////////////////////////////////////////////////
+
+#include "default_font.h"
+
+// This file was generated from helvR24.pcf, to be used as a standard
+// fallback font when no font file is specified by the user.
+
+const char default_font[] = {
+  0x01, 0x66, 0x63, 0x70, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 
+  0x00, 0x02, 0x00, 0x00, 0x00, 0x28, 0x04, 0x00, 0x00, 0x88, 0x00, 
+  0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x64, 
+  0x00, 0x00, 0x00, 0xb0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 
+  0x02, 0x01, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x14, 0x05, 0x00, 
+  0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xd0, 0x3d, 
+  0x00, 0x00, 0x94, 0x09, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x02, 
+  0x00, 0x00, 0x00, 0xd0, 0x01, 0x00, 0x00, 0x64, 0x47, 0x00, 0x00, 
+  0x40, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x9c, 0x03, 0x00, 
+  0x00, 0x34, 0x49, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x02, 0x00, 
+  0x00, 0x00, 0xdc, 0x09, 0x00, 0x00, 0xd0, 0x4c, 0x00, 0x00, 0x00, 
+  0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 
+  0xac, 0x56, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00, 0x0e, 
+  0x00, 0x00, 0x00, 0x01, 0x1a, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 
+  0x00, 0x01, 0x30, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x01, 
+  0x3d, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x4d, 0x00, 
+  0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x01, 0x63, 0x00, 0x00, 0x00, 
+  0x64, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x6f, 0x00, 
+  0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 
+  0x00, 0x4b, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x00, 0x4b, 
+  0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x01, 0x9c, 0x00, 0x00, 
+  0x00, 0x9e, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0xac, 
+  0x00, 0x00, 0x00, 0x01, 0xbd, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 
+  0x00, 0x01, 0xd6, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x00, 
+  0x13, 0x00, 0x00, 0x00, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 
+  0x00, 0x00, 0xec, 0x00, 0x00, 0x00, 0x01, 0xf6, 0x00, 0x00, 0x00, 
+  0x00, 0x01, 0x00, 0x00, 0x01, 0x0a, 0x01, 0x00, 0x00, 0xa1, 0x01, 
+  0x00, 0x00, 0x01, 0xa8, 0x01, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 
+  0x01, 0x06, 0x02, 0x00, 0x00, 0x13, 0x02, 0x00, 0x00, 0x01, 0x24, 
+  0x02, 0x00, 0x00, 0x47, 0x02, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 
+  0x00, 0x59, 0x02, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x69, 
+  0x02, 0x00, 0x00, 0x01, 0x7d, 0x02, 0x00, 0x00, 0x9c, 0x02, 0x00, 
+  0x00, 0x01, 0xa6, 0x02, 0x00, 0x00, 0xb0, 0x02, 0x00, 0x00, 0x01, 
+  0xb5, 0x02, 0x00, 0x00, 0xf4, 0x02, 0x00, 0x00, 0x00, 0x0a, 0x00, 
+  0x00, 0x00, 0xfb, 0x02, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 
+  0x06, 0x03, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x11, 0x03, 0x00, 0x00, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x52, 
+  0x59, 0x00, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x00, 0x46, 0x41, 0x4d, 
+  0x49, 0x4c, 0x59, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x00, 0x48, 0x65, 
+  0x6c, 0x76, 0x65, 0x74, 0x69, 0x63, 0x61, 0x00, 0x57, 0x45, 0x49, 
+  0x47, 0x48, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x00, 0x4d, 0x65, 
+  0x64, 0x69, 0x75, 0x6d, 0x00, 0x53, 0x4c, 0x41, 0x4e, 0x54, 0x00, 
+  0x52, 0x00, 0x53, 0x45, 0x54, 0x57, 0x49, 0x44, 0x54, 0x48, 0x5f, 
+  0x4e, 0x41, 0x4d, 0x45, 0x00, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 
+  0x00, 0x41, 0x44, 0x44, 0x5f, 0x53, 0x54, 0x59, 0x4c, 0x45, 0x5f, 
+  0x4e, 0x41, 0x4d, 0x45, 0x00, 0x00, 0x50, 0x49, 0x58, 0x45, 0x4c, 
+  0x5f, 0x53, 0x49, 0x5a, 0x45, 0x00, 0x50, 0x4f, 0x49, 0x4e, 0x54, 
+  0x5f, 0x53, 0x49, 0x5a, 0x45, 0x00, 0x52, 0x45, 0x53, 0x4f, 0x4c, 
+  0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x58, 0x00, 0x52, 0x45, 0x53, 
+  0x4f, 0x4c, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x59, 0x00, 0x53, 
+  0x50, 0x41, 0x43, 0x49, 0x4e, 0x47, 0x00, 0x50, 0x00, 0x41, 0x56, 
+  0x45, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x57, 0x49, 0x44, 0x54, 0x48, 
+  0x00, 0x43, 0x48, 0x41, 0x52, 0x53, 0x45, 0x54, 0x5f, 0x52, 0x45, 
+  0x47, 0x49, 0x53, 0x54, 0x52, 0x59, 0x00, 0x49, 0x53, 0x4f, 0x38, 
+  0x38, 0x35, 0x39, 0x00, 0x43, 0x48, 0x41, 0x52, 0x53, 0x45, 0x54, 
+  0x5f, 0x45, 0x4e, 0x43, 0x4f, 0x44, 0x49, 0x4e, 0x47, 0x00, 0x31, 
+  0x00, 0x43, 0x41, 0x50, 0x5f, 0x48, 0x45, 0x49, 0x47, 0x48, 0x54, 
+  0x00, 0x58, 0x5f, 0x48, 0x45, 0x49, 0x47, 0x48, 0x54, 0x00, 0x46, 
+  0x41, 0x43, 0x45, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x00, 0x48, 0x65, 
+  0x6c, 0x76, 0x65, 0x74, 0x69, 0x63, 0x61, 0x00, 0x43, 0x4f, 0x50, 
+  0x59, 0x52, 0x49, 0x47, 0x48, 0x54, 0x00, 0x43, 0x6f, 0x70, 0x79, 
+  0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, 0x63, 0x29, 0x20, 0x31, 
+  0x39, 0x38, 0x34, 0x2c, 0x20, 0x31, 0x39, 0x38, 0x37, 0x20, 0x41, 
+  0x64, 0x6f, 0x62, 0x65, 0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 
+  0x73, 0x20, 0x49, 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 
+  0x74, 0x65, 0x64, 0x2e, 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x52, 0x69, 
+  0x67, 0x68, 0x74, 0x73, 0x20, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 
+  0x65, 0x64, 0x2e, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 
+  0x68, 0x74, 0x20, 0x28, 0x63, 0x29, 0x20, 0x31, 0x39, 0x38, 0x38, 
+  0x2c, 0x20, 0x31, 0x39, 0x39, 0x31, 0x20, 0x44, 0x69, 0x67, 0x69, 
+  0x74, 0x61, 0x6c, 0x20, 0x45, 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, 
+  0x6e, 0x74, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 
+  0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x52, 0x69, 
+  0x67, 0x68, 0x74, 0x73, 0x20, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 
+  0x65, 0x64, 0x2e, 0x00, 0x4e, 0x4f, 0x54, 0x49, 0x43, 0x45, 0x00, 
+  0x48, 0x65, 0x6c, 0x76, 0x65, 0x74, 0x69, 0x63, 0x61, 0x20, 0x69, 
+  0x73, 0x20, 0x61, 0x20, 0x74, 0x72, 0x61, 0x64, 0x65, 0x6d, 0x61, 
+  0x72, 0x6b, 0x20, 0x6f, 0x66, 0x20, 0x4c, 0x69, 0x6e, 0x6f, 0x74, 
+  0x79, 0x70, 0x65, 0x2d, 0x48, 0x65, 0x6c, 0x6c, 0x20, 0x41, 0x47, 
+  0x20, 0x61, 0x6e, 0x64, 0x2f, 0x6f, 0x72, 0x20, 0x69, 0x74, 0x73, 
+  0x20, 0x73, 0x75, 0x62, 0x73, 0x69, 0x64, 0x69, 0x61, 0x72, 0x69, 
+  0x65, 0x73, 0x2e, 0x20, 0x20, 0x00, 0x5f, 0x44, 0x45, 0x43, 0x5f, 
+  0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x46, 0x4f, 0x4e, 0x54, 
+  0x4e, 0x41, 0x4d, 0x45, 0x53, 0x00, 0x50, 0x53, 0x3d, 0x48, 0x65, 
+  0x6c, 0x76, 0x65, 0x74, 0x69, 0x63, 0x61, 0x00, 0x5f, 0x44, 0x45, 
+  0x43, 0x5f, 0x50, 0x52, 0x4f, 0x44, 0x55, 0x43, 0x54, 0x49, 0x4e, 
+  0x46, 0x4f, 0x00, 0x44, 0x45, 0x43, 0x77, 0x69, 0x6e, 0x64, 0x6f, 
+  0x77, 0x73, 0x20, 0x46, 0x6f, 0x6e, 0x74, 0x73, 0x20, 0x56, 0x32, 
+  0x2e, 0x32, 0x2c, 0x20, 0x30, 0x37, 0x2d, 0x4e, 0x6f, 0x76, 0x2d, 
+  0x31, 0x39, 0x39, 0x31, 0x00, 0x52, 0x45, 0x4c, 0x41, 0x54, 0x49, 
+  0x56, 0x45, 0x5f, 0x53, 0x45, 0x54, 0x57, 0x49, 0x44, 0x54, 0x48, 
+  0x00, 0x52, 0x45, 0x4c, 0x41, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x57, 
+  0x45, 0x49, 0x47, 0x48, 0x54, 0x00, 0x43, 0x48, 0x41, 0x52, 0x53, 
+  0x45, 0x54, 0x5f, 0x43, 0x4f, 0x4c, 0x4c, 0x45, 0x43, 0x54, 0x49, 
+  0x4f, 0x4e, 0x53, 0x00, 0x41, 0x53, 0x43, 0x49, 0x49, 0x20, 0x49, 
+  0x53, 0x4f, 0x38, 0x38, 0x35, 0x39, 0x2d, 0x31, 0x20, 0x41, 0x44, 
+  0x4f, 0x42, 0x45, 0x2d, 0x53, 0x54, 0x41, 0x4e, 0x44, 0x41, 0x52, 
+  0x44, 0x00, 0x46, 0x55, 0x4c, 0x4c, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 
+  0x00, 0x48, 0x65, 0x6c, 0x76, 0x65, 0x74, 0x69, 0x63, 0x61, 0x00, 
+  0x46, 0x4f, 0x4e, 0x54, 0x00, 0x2d, 0x41, 0x64, 0x6f, 0x62, 0x65, 
+  0x2d, 0x48, 0x65, 0x6c, 0x76, 0x65, 0x74, 0x69, 0x63, 0x61, 0x2d, 
+  0x4d, 0x65, 0x64, 0x69, 0x75, 0x6d, 0x2d, 0x52, 0x2d, 0x4e, 0x6f, 
+  0x72, 0x6d, 0x61, 0x6c, 0x2d, 0x2d, 0x32, 0x34, 0x2d, 0x32, 0x34, 
+  0x30, 0x2d, 0x37, 0x35, 0x2d, 0x37, 0x35, 0x2d, 0x50, 0x2d, 0x31, 
+  0x33, 0x30, 0x2d, 0x49, 0x53, 0x4f, 0x38, 0x38, 0x35, 0x39, 0x2d, 
+  0x31, 0x00, 0x57, 0x45, 0x49, 0x47, 0x48, 0x54, 0x00, 0x52, 0x45, 
+  0x53, 0x4f, 0x4c, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x51, 0x55, 
+  0x41, 0x44, 0x5f, 0x57, 0x49, 0x44, 0x54, 0x48, 0x00, 0x00, 0x00, 
+  0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x00, 0xfd, 0xff, 0x01, 0x00, 0x04, 0x00, 0xfd, 0xff, 
+  0xf0, 0xff, 0x00, 0x00, 0x03, 0x00, 0x19, 0x00, 0x19, 0x00, 0x18, 
+  0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  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, 0x01, 0x00, 0x00, 0xe5, 0x00, 0x80, 0x81, 0x86, 
+  0x81, 0x80, 0x82, 0x84, 0x86, 0x93, 0x80, 0x81, 0x87, 0x88, 0x93, 
+  0x73, 0x82, 0x8d, 0x8e, 0x91, 0x80, 0x81, 0x8c, 0x8d, 0x93, 0x82, 
+  0x81, 0x94, 0x96, 0x92, 0x80, 0x81, 0x8f, 0x91, 0x92, 0x80, 0x82, 
+  0x84, 0x86, 0x93, 0x73, 0x82, 0x87, 0x88, 0x93, 0x85, 0x81, 0x86, 
+  0x88, 0x93, 0x85, 0x81, 0x88, 0x8a, 0x93, 0x74, 0x81, 0x8d, 0x8e, 
+  0x8d, 0x7f, 0x82, 0x84, 0x86, 0x83, 0x83, 0x82, 0x8d, 0x8f, 0x88, 
+  0x7a, 0x82, 0x84, 0x86, 0x83, 0x80, 0x80, 0x87, 0x87, 0x93, 0x80, 
+  0x81, 0x8c, 0x8d, 0x92, 0x80, 0x82, 0x88, 0x8d, 0x92, 0x80, 0x81, 
+  0x8c, 0x8d, 0x92, 0x80, 0x81, 0x8c, 0x8d, 0x92, 0x80, 0x81, 0x8c, 
+  0x8d, 0x92, 0x80, 0x81, 0x8c, 0x8d, 0x92, 0x80, 0x81, 0x8c, 0x8d, 
+  0x92, 0x80, 0x81, 0x8c, 0x8d, 0x92, 0x80, 0x81, 0x8c, 0x8d, 0x92, 
+  0x80, 0x81, 0x8c, 0x8d, 0x92, 0x80, 0x82, 0x84, 0x86, 0x8e, 0x80, 
+  0x82, 0x84, 0x86, 0x8e, 0x83, 0x81, 0x8d, 0x8f, 0x8d, 0x7f, 0x82, 
+  0x8c, 0x8f, 0x8b, 0x7b, 0x81, 0x8d, 0x8f, 0x8d, 0x7f, 0x81, 0x8b, 
+  0x8c, 0x93, 0x80, 0x82, 0x98, 0x99, 0x93, 0x84, 0x81, 0x90, 0x91, 
+  0x93, 0x80, 0x82, 0x90, 0x91, 0x93, 0x80, 0x81, 0x91, 0x92, 0x93, 
+  0x80, 0x82, 0x91, 0x92, 0x93, 0x80, 0x82, 0x8e, 0x90, 0x93, 0x80, 
+  0x82, 0x8d, 0x8e, 0x93, 0x80, 0x81, 0x91, 0x93, 0x93, 0x80, 0x82, 
+  0x90, 0x92, 0x93, 0x80, 0x83, 0x85, 0x88, 0x93, 0x80, 0x81, 0x8b, 
+  0x8d, 0x93, 0x80, 0x82, 0x91, 0x92, 0x93, 0x80, 0x82, 0x8d, 0x8e, 
+  0x93, 0x80, 0x82, 0x93, 0x95, 0x93, 0x80, 0x82, 0x90, 0x92, 0x93, 
+  0x80, 0x81, 0x91, 0x92, 0x93, 0x80, 0x82, 0x8f, 0x90, 0x93, 0x80, 
+  0x81, 0x91, 0x92, 0x93, 0x80, 0x82, 0x8f, 0x91, 0x93, 0x80, 0x81, 
+  0x8f, 0x90, 0x93, 0x80, 0x81, 0x8f, 0x90, 0x93, 0x80, 0x82, 0x90, 
+  0x92, 0x93, 0x80, 0x81, 0x90, 0x91, 0x93, 0x80, 0x81, 0x95, 0x96, 
+  0x93, 0x80, 0x81, 0x90, 0x91, 0x93, 0x80, 0x81, 0x8f, 0x90, 0x93, 
+  0x80, 0x81, 0x8e, 0x8f, 0x93, 0x80, 0x82, 0x86, 0x87, 0x93, 0x85, 
+  0x80, 0x87, 0x87, 0x93, 0x80, 0x81, 0x85, 0x87, 0x93, 0x85, 0x81, 
+  0x8b, 0x8c, 0x93, 0x76, 0x80, 0x8e, 0x8e, 0x7d, 0x85, 0x82, 0x84, 
+  0x86, 0x93, 0x73, 0x81, 0x8c, 0x8d, 0x8e, 0x80, 0x82, 0x8d, 0x8e, 
+  0x93, 0x80, 0x81, 0x8b, 0x8c, 0x8e, 0x80, 0x81, 0x8c, 0x8e, 0x93, 
+  0x80, 0x81, 0x8c, 0x8d, 0x8e, 0x80, 0x81, 0x87, 0x88, 0x93, 0x80, 
+  0x81, 0x8c, 0x8e, 0x8e, 0x85, 0x82, 0x8c, 0x8d, 0x93, 0x80, 0x82, 
+  0x84, 0x86, 0x93, 0x80, 0x80, 0x84, 0x86, 0x93, 0x85, 0x82, 0x8c, 
+  0x8c, 0x93, 0x80, 0x82, 0x84, 0x86, 0x93, 0x80, 0x82, 0x92, 0x94, 
+  0x8e, 0x80, 0x82, 0x8c, 0x8e, 0x8e, 0x80, 0x81, 0x8c, 0x8d, 0x8e, 
+  0x80, 0x82, 0x8d, 0x8e, 0x8e, 0x85, 0x81, 0x8c, 0x8e, 0x8e, 0x85, 
+  0x82, 0x88, 0x89, 0x8e, 0x80, 0x81, 0x8b, 0x8c, 0x8e, 0x80, 0x81, 
+  0x87, 0x88, 0x92, 0x80, 0x82, 0x8c, 0x8e, 0x8e, 0x80, 0x81, 0x8c, 
+  0x8d, 0x8e, 0x80, 0x80, 0x92, 0x92, 0x8e, 0x80, 0x81, 0x8b, 0x8c, 
+  0x8e, 0x80, 0x80, 0x8c, 0x8d, 0x8e, 0x85, 0x81, 0x8b, 0x8c, 0x8e, 
+  0x80, 0x81, 0x87, 0x88, 0x93, 0x85, 0x82, 0x84, 0x86, 0x93, 0x85, 
+  0x81, 0x87, 0x88, 0x93, 0x85, 0x82, 0x8c, 0x8e, 0x89, 0x7b, 0x80, 
+  0x81, 0x86, 0x81, 0x80, 0x82, 0x84, 0x86, 0x8e, 0x85, 0x81, 0x8b, 
+  0x8d, 0x90, 0x82, 0x81, 0x8d, 0x8e, 0x92, 0x80, 0x81, 0x8c, 0x8d, 
+  0x8f, 0x7d, 0x80, 0x8e, 0x8e, 0x92, 0x80, 0x82, 0x84, 0x86, 0x93, 
+  0x84, 0x81, 0x8c, 0x8d, 0x93, 0x85, 0x81, 0x87, 0x88, 0x92, 0x70, 
+  0x81, 0x92, 0x93, 0x91, 0x80, 0x81, 0x88, 0x89, 0x93, 0x79, 0x82, 
+  0x8b, 0x8e, 0x8b, 0x7d, 0x81, 0x8e, 0x8f, 0x8b, 0x7d, 0x81, 0x87, 
+  0x88, 0x88, 0x7a, 0x81, 0x92, 0x93, 0x91, 0x80, 0x81, 0x87, 0x88, 
+  0x92, 0x70, 0x80, 0x88, 0x89, 0x92, 0x75, 0x81, 0x8d, 0x8e, 0x8d, 
+  0x80, 0x80, 0x87, 0x87, 0x92, 0x78, 0x80, 0x87, 0x87, 0x92, 0x78, 
+  0x81, 0x86, 0x87, 0x93, 0x71, 0x82, 0x8c, 0x8e, 0x8e, 0x85, 0x81, 
+  0x8b, 0x8c, 0x93, 0x84, 0x82, 0x84, 0x86, 0x89, 0x7a, 0x81, 0x86, 
+  0x87, 0x81, 0x85, 0x81, 0x85, 0x87, 0x92, 0x78, 0x81, 0x88, 0x89, 
+  0x93, 0x79, 0x83, 0x8c, 0x8e, 0x8b, 0x7d, 0x81, 0x93, 0x93, 0x92, 
+  0x80, 0x81, 0x93, 0x93, 0x92, 0x80, 0x80, 0x93, 0x93, 0x92, 0x80, 
+  0x81, 0x8b, 0x8c, 0x8e, 0x85, 0x81, 0x90, 0x91, 0x98, 0x80, 0x81, 
+  0x90, 0x91, 0x98, 0x80, 0x81, 0x90, 0x91, 0x98, 0x80, 0x81, 0x90, 
+  0x91, 0x97, 0x80, 0x81, 0x90, 0x91, 0x97, 0x80, 0x81, 0x90, 0x91, 
+  0x98, 0x80, 0x81, 0x96, 0x97, 0x93, 0x80, 0x81, 0x91, 0x92, 0x93, 
+  0x85, 0x82, 0x8e, 0x90, 0x98, 0x80, 0x82, 0x8e, 0x90, 0x98, 0x80, 
+  0x82, 0x8e, 0x90, 0x98, 0x80, 0x82, 0x8e, 0x90, 0x97, 0x80, 0x81, 
+  0x86, 0x88, 0x98, 0x80, 0x82, 0x87, 0x88, 0x98, 0x80, 0x80, 0x88, 
+  0x88, 0x98, 0x80, 0x81, 0x87, 0x88, 0x97, 0x80, 0x80, 0x91, 0x92, 
+  0x93, 0x80, 0x82, 0x90, 0x92, 0x97, 0x80, 0x81, 0x91, 0x92, 0x98, 
+  0x80, 0x81, 0x91, 0x92, 0x98, 0x80, 0x81, 0x91, 0x92, 0x98, 0x80, 
+  0x81, 0x91, 0x92, 0x97, 0x80, 0x81, 0x91, 0x92, 0x97, 0x80, 0x80, 
+  0x8d, 0x8e, 0x8d, 0x7f, 0x80, 0x92, 0x92, 0x93, 0x80, 0x82, 0x90, 
+  0x92, 0x98, 0x80, 0x82, 0x90, 0x92, 0x98, 0x80, 0x82, 0x90, 0x92, 
+  0x98, 0x80, 0x82, 0x90, 0x92, 0x97, 0x80, 0x81, 0x8f, 0x90, 0x98, 
+  0x80, 0x82, 0x8f, 0x90, 0x93, 0x80, 0x83, 0x8d, 0x8f, 0x93, 0x80, 
+  0x81, 0x8c, 0x8d, 0x93, 0x80, 0x81, 0x8c, 0x8d, 0x93, 0x80, 0x81, 
+  0x8c, 0x8d, 0x93, 0x80, 0x81, 0x8c, 0x8d, 0x93, 0x80, 0x81, 0x8c, 
+  0x8d, 0x92, 0x80, 0x81, 0x8c, 0x8d, 0x93, 0x80, 0x81, 0x94, 0x95, 
+  0x8e, 0x80, 0x81, 0x8b, 0x8c, 0x8e, 0x85, 0x81, 0x8c, 0x8d, 0x93, 
+  0x80, 0x81, 0x8c, 0x8d, 0x93, 0x80, 0x81, 0x8c, 0x8d, 0x93, 0x80, 
+  0x81, 0x8c, 0x8d, 0x92, 0x80, 0x80, 0x85, 0x86, 0x93, 0x80, 0x81, 
+  0x86, 0x86, 0x93, 0x80, 0x7f, 0x87, 0x86, 0x93, 0x80, 0x80, 0x86, 
+  0x86, 0x92, 0x80, 0x81, 0x8c, 0x8d, 0x93, 0x80, 0x82, 0x8c, 0x8e, 
+  0x92, 0x80, 0x81, 0x8c, 0x8d, 0x93, 0x80, 0x81, 0x8c, 0x8d, 0x93, 
+  0x80, 0x81, 0x8c, 0x8d, 0x93, 0x80, 0x81, 0x8c, 0x8d, 0x92, 0x80, 
+  0x81, 0x8c, 0x8d, 0x92, 0x80, 0x81, 0x8d, 0x8e, 0x8d, 0x7f, 0x80, 
+  0x8d, 0x8d, 0x8e, 0x80, 0x82, 0x8c, 0x8e, 0x93, 0x80, 0x82, 0x8c, 
+  0x8e, 0x93, 0x80, 0x82, 0x8c, 0x8e, 0x93, 0x80, 0x82, 0x8c, 0x8e, 
+  0x92, 0x80, 0x80, 0x8c, 0x8d, 0x93, 0x85, 0x82, 0x8d, 0x8e, 0x93, 
+  0x85, 0x80, 0x8c, 0x8d, 0x92, 0x85, 0x7f, 0x8d, 0x8e, 0x93, 0x80, 
+  0x81, 0x96, 0x97, 0x93, 0x80, 0x82, 0x8f, 0x90, 0x93, 0x80, 0x82, 
+  0x8e, 0x90, 0x93, 0x80, 0x81, 0x8e, 0x8f, 0x93, 0x80, 0x80, 0x88, 
+  0x88, 0x93, 0x71, 0x82, 0x86, 0x88, 0x8b, 0x7a, 0x80, 0x88, 0x88, 
+  0x93, 0x71, 0x80, 0x88, 0x88, 0x93, 0x71, 0x81, 0x8d, 0x8e, 0x93, 
+  0x85, 0x81, 0x8d, 0x8e, 0x93, 0x85, 0x83, 0x85, 0x88, 0x92, 0x70, 
+  0x82, 0x84, 0x86, 0x8e, 0x80, 0x83, 0x95, 0x99, 0x83, 0x80, 0x80, 
+  0x99, 0x99, 0x88, 0x7a, 0x80, 0x8e, 0x8e, 0x88, 0x7a, 0x81, 0x8b, 
+  0x8d, 0x93, 0x80, 0x81, 0x8b, 0x8d, 0x93, 0x80, 0x80, 0x8b, 0x8b, 
+  0x92, 0x85, 0x7d, 0x87, 0x84, 0x92, 0x80, 0x81, 0x86, 0x87, 0x93, 
+  0x71, 0x81, 0x86, 0x88, 0x8b, 0x7d, 0x82, 0x87, 0x88, 0x8b, 0x7d, 
+  0x81, 0x88, 0x89, 0x93, 0x70, 0x80, 0x86, 0x86, 0x93, 0x80, 0x81, 
+  0x95, 0x96, 0x8e, 0x80, 0x82, 0x87, 0x87, 0x81, 0x85, 0x82, 0x97, 
+  0x97, 0x92, 0x80, 0x82, 0x87, 0x89, 0x83, 0x83, 0x82, 0x87, 0x89, 
+  0x93, 0x73, 0x82, 0x87, 0x89, 0x93, 0x73, 0x82, 0x84, 0x86, 0x83, 
+  0x83, 0x82, 0x84, 0x86, 0x93, 0x73, 0x82, 0x86, 0x88, 0x93, 0x72, 
+  0x81, 0x8b, 0x8c, 0x93, 0x80, 0x81, 0x89, 0x8a, 0x93, 0x70, 0x81, 
+  0x94, 0x95, 0x91, 0x79, 0x81, 0x8b, 0x8c, 0x93, 0x80, 0x00, 0x02, 
+  0x00, 0x00, 0x00, 0xe5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x04, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 
+  0x00, 0xac, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x48, 0x01, 
+  0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0xa8, 0x01, 0x00, 0x00, 0x08, 
+  0x02, 0x00, 0x00, 0x68, 0x02, 0x00, 0x00, 0x84, 0x02, 0x00, 0x00, 
+  0xb4, 0x02, 0x00, 0x00, 0xcc, 0x02, 0x00, 0x00, 0xd4, 0x02, 0x00, 
+  0x00, 0xe0, 0x02, 0x00, 0x00, 0x2c, 0x03, 0x00, 0x00, 0x74, 0x03, 
+  0x00, 0x00, 0xbc, 0x03, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x4c, 
+  0x04, 0x00, 0x00, 0x94, 0x04, 0x00, 0x00, 0xdc, 0x04, 0x00, 0x00, 
+  0x24, 0x05, 0x00, 0x00, 0x6c, 0x05, 0x00, 0x00, 0xb4, 0x05, 0x00, 
+  0x00, 0xfc, 0x05, 0x00, 0x00, 0x34, 0x06, 0x00, 0x00, 0x78, 0x06, 
+  0x00, 0x00, 0xa8, 0x06, 0x00, 0x00, 0xc0, 0x06, 0x00, 0x00, 0xf0, 
+  0x06, 0x00, 0x00, 0x3c, 0x07, 0x00, 0x00, 0x98, 0x07, 0x00, 0x00, 
+  0xe4, 0x07, 0x00, 0x00, 0x30, 0x08, 0x00, 0x00, 0x7c, 0x08, 0x00, 
+  0x00, 0xc8, 0x08, 0x00, 0x00, 0x14, 0x09, 0x00, 0x00, 0x60, 0x09, 
+  0x00, 0x00, 0xac, 0x09, 0x00, 0x00, 0xf8, 0x09, 0x00, 0x00, 0x44, 
+  0x0a, 0x00, 0x00, 0x90, 0x0a, 0x00, 0x00, 0xdc, 0x0a, 0x00, 0x00, 
+  0x28, 0x0b, 0x00, 0x00, 0x74, 0x0b, 0x00, 0x00, 0xc0, 0x0b, 0x00, 
+  0x00, 0x0c, 0x0c, 0x00, 0x00, 0x58, 0x0c, 0x00, 0x00, 0xa4, 0x0c, 
+  0x00, 0x00, 0xf0, 0x0c, 0x00, 0x00, 0x3c, 0x0d, 0x00, 0x00, 0x88, 
+  0x0d, 0x00, 0x00, 0xd4, 0x0d, 0x00, 0x00, 0x20, 0x0e, 0x00, 0x00, 
+  0x6c, 0x0e, 0x00, 0x00, 0xb8, 0x0e, 0x00, 0x00, 0x04, 0x0f, 0x00, 
+  0x00, 0x50, 0x0f, 0x00, 0x00, 0xb0, 0x0f, 0x00, 0x00, 0xfc, 0x0f, 
+  0x00, 0x00, 0x5c, 0x10, 0x00, 0x00, 0x80, 0x10, 0x00, 0x00, 0x88, 
+  0x10, 0x00, 0x00, 0xa0, 0x10, 0x00, 0x00, 0xd8, 0x10, 0x00, 0x00, 
+  0x24, 0x11, 0x00, 0x00, 0x5c, 0x11, 0x00, 0x00, 0xa8, 0x11, 0x00, 
+  0x00, 0xe0, 0x11, 0x00, 0x00, 0x2c, 0x12, 0x00, 0x00, 0x78, 0x12, 
+  0x00, 0x00, 0xc4, 0x12, 0x00, 0x00, 0x10, 0x13, 0x00, 0x00, 0x70, 
+  0x13, 0x00, 0x00, 0xbc, 0x13, 0x00, 0x00, 0x08, 0x14, 0x00, 0x00, 
+  0x40, 0x14, 0x00, 0x00, 0x78, 0x14, 0x00, 0x00, 0xb0, 0x14, 0x00, 
+  0x00, 0xfc, 0x14, 0x00, 0x00, 0x48, 0x15, 0x00, 0x00, 0x80, 0x15, 
+  0x00, 0x00, 0xb8, 0x15, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x38, 
+  0x16, 0x00, 0x00, 0x70, 0x16, 0x00, 0x00, 0xa8, 0x16, 0x00, 0x00, 
+  0xe0, 0x16, 0x00, 0x00, 0x2c, 0x17, 0x00, 0x00, 0x64, 0x17, 0x00, 
+  0x00, 0xc4, 0x17, 0x00, 0x00, 0x24, 0x18, 0x00, 0x00, 0x84, 0x18, 
+  0x00, 0x00, 0x94, 0x18, 0x00, 0x00, 0x98, 0x18, 0x00, 0x00, 0xe4, 
+  0x18, 0x00, 0x00, 0x2c, 0x19, 0x00, 0x00, 0x74, 0x19, 0x00, 0x00, 
+  0xa4, 0x19, 0x00, 0x00, 0xec, 0x19, 0x00, 0x00, 0x48, 0x1a, 0x00, 
+  0x00, 0xa8, 0x1a, 0x00, 0x00, 0xb0, 0x1a, 0x00, 0x00, 0xf4, 0x1a, 
+  0x00, 0x00, 0x24, 0x1b, 0x00, 0x00, 0x44, 0x1b, 0x00, 0x00, 0x64, 
+  0x1b, 0x00, 0x00, 0x6c, 0x1b, 0x00, 0x00, 0xb0, 0x1b, 0x00, 0x00, 
+  0xb8, 0x1b, 0x00, 0x00, 0xd4, 0x1b, 0x00, 0x00, 0x08, 0x1c, 0x00, 
+  0x00, 0x30, 0x1c, 0x00, 0x00, 0x58, 0x1c, 0x00, 0x00, 0x68, 0x1c, 
+  0x00, 0x00, 0xb4, 0x1c, 0x00, 0x00, 0x10, 0x1d, 0x00, 0x00, 0x1c, 
+  0x1d, 0x00, 0x00, 0x34, 0x1d, 0x00, 0x00, 0x5c, 0x1d, 0x00, 0x00, 
+  0x8c, 0x1d, 0x00, 0x00, 0xac, 0x1d, 0x00, 0x00, 0xf4, 0x1d, 0x00, 
+  0x00, 0x3c, 0x1e, 0x00, 0x00, 0x84, 0x1e, 0x00, 0x00, 0xd0, 0x1e, 
+  0x00, 0x00, 0x30, 0x1f, 0x00, 0x00, 0x90, 0x1f, 0x00, 0x00, 0xf0, 
+  0x1f, 0x00, 0x00, 0x4c, 0x20, 0x00, 0x00, 0xa8, 0x20, 0x00, 0x00, 
+  0x08, 0x21, 0x00, 0x00, 0x54, 0x21, 0x00, 0x00, 0xb4, 0x21, 0x00, 
+  0x00, 0x14, 0x22, 0x00, 0x00, 0x74, 0x22, 0x00, 0x00, 0xd4, 0x22, 
+  0x00, 0x00, 0x30, 0x23, 0x00, 0x00, 0x90, 0x23, 0x00, 0x00, 0xf0, 
+  0x23, 0x00, 0x00, 0x50, 0x24, 0x00, 0x00, 0xac, 0x24, 0x00, 0x00, 
+  0xf8, 0x24, 0x00, 0x00, 0x54, 0x25, 0x00, 0x00, 0xb4, 0x25, 0x00, 
+  0x00, 0x14, 0x26, 0x00, 0x00, 0x74, 0x26, 0x00, 0x00, 0xd0, 0x26, 
+  0x00, 0x00, 0x2c, 0x27, 0x00, 0x00, 0x5c, 0x27, 0x00, 0x00, 0xa8, 
+  0x27, 0x00, 0x00, 0x08, 0x28, 0x00, 0x00, 0x68, 0x28, 0x00, 0x00, 
+  0xc8, 0x28, 0x00, 0x00, 0x24, 0x29, 0x00, 0x00, 0x84, 0x29, 0x00, 
+  0x00, 0xd0, 0x29, 0x00, 0x00, 0x1c, 0x2a, 0x00, 0x00, 0x68, 0x2a, 
+  0x00, 0x00, 0xb4, 0x2a, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x4c, 
+  0x2b, 0x00, 0x00, 0x94, 0x2b, 0x00, 0x00, 0xe0, 0x2b, 0x00, 0x00, 
+  0x18, 0x2c, 0x00, 0x00, 0x64, 0x2c, 0x00, 0x00, 0xb0, 0x2c, 0x00, 
+  0x00, 0xfc, 0x2c, 0x00, 0x00, 0x48, 0x2d, 0x00, 0x00, 0x90, 0x2d, 
+  0x00, 0x00, 0xdc, 0x2d, 0x00, 0x00, 0x28, 0x2e, 0x00, 0x00, 0x74, 
+  0x2e, 0x00, 0x00, 0xbc, 0x2e, 0x00, 0x00, 0x08, 0x2f, 0x00, 0x00, 
+  0x50, 0x2f, 0x00, 0x00, 0x9c, 0x2f, 0x00, 0x00, 0xe8, 0x2f, 0x00, 
+  0x00, 0x34, 0x30, 0x00, 0x00, 0x7c, 0x30, 0x00, 0x00, 0xc4, 0x30, 
+  0x00, 0x00, 0xf4, 0x30, 0x00, 0x00, 0x2c, 0x31, 0x00, 0x00, 0x78, 
+  0x31, 0x00, 0x00, 0xc4, 0x31, 0x00, 0x00, 0x10, 0x32, 0x00, 0x00, 
+  0x58, 0x32, 0x00, 0x00, 0xb8, 0x32, 0x00, 0x00, 0x18, 0x33, 0x00, 
+  0x00, 0x74, 0x33, 0x00, 0x00, 0xc0, 0x33, 0x00, 0x00, 0x0c, 0x34, 
+  0x00, 0x00, 0x58, 0x34, 0x00, 0x00, 0xa4, 0x34, 0x00, 0x00, 0xf0, 
+  0x34, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x14, 0x35, 0x00, 0x00, 
+  0x24, 0x35, 0x00, 0x00, 0x34, 0x35, 0x00, 0x00, 0x94, 0x35, 0x00, 
+  0x00, 0xf4, 0x35, 0x00, 0x00, 0xfc, 0x35, 0x00, 0x00, 0x34, 0x36, 
+  0x00, 0x00, 0x40, 0x36, 0x00, 0x00, 0x48, 0x36, 0x00, 0x00, 0x50, 
+  0x36, 0x00, 0x00, 0x9c, 0x36, 0x00, 0x00, 0xe8, 0x36, 0x00, 0x00, 
+  0x44, 0x37, 0x00, 0x00, 0x8c, 0x37, 0x00, 0x00, 0x9c, 0x37, 0x00, 
+  0x00, 0xbc, 0x37, 0x00, 0x00, 0xdc, 0x37, 0x00, 0x00, 0xe8, 0x37, 
+  0x00, 0x00, 0x34, 0x38, 0x00, 0x00, 0x6c, 0x38, 0x00, 0x00, 0x84, 
+  0x38, 0x00, 0x00, 0xcc, 0x38, 0x00, 0x00, 0xe4, 0x38, 0x00, 0x00, 
+  0xfc, 0x38, 0x00, 0x00, 0x14, 0x39, 0x00, 0x00, 0x2c, 0x39, 0x00, 
+  0x00, 0x44, 0x39, 0x00, 0x00, 0x58, 0x39, 0x00, 0x00, 0xa4, 0x39, 
+  0x00, 0x00, 0xb0, 0x39, 0x00, 0x00, 0xd8, 0x39, 0x00, 0x00, 0xfd, 
+  0x1a, 0x00, 0x00, 0x8e, 0x1f, 0x00, 0x00, 0x24, 0x3a, 0x00, 0x00, 
+  0x48, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 
+  0x33, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 
+  0x00, 0x33, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x30, 0x03, 
+  0x00, 0x00, 0x30, 0x03, 0x00, 0x00, 0x30, 0x03, 0x00, 0x00, 0x98, 
+  0x01, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 
+  0x98, 0x01, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0xcc, 0x00, 0x00, 
+  0x00, 0xcc, 0x00, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0xff, 0x07, 
+  0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0x66, 
+  0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 
+  0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 
+  0x00, 0xfe, 0x03, 0x00, 0x00, 0x67, 0x07, 0x00, 0x00, 0x63, 0x06, 
+  0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x6e, 
+  0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 
+  0xe0, 0x03, 0x00, 0x00, 0x60, 0x07, 0x00, 0x00, 0x60, 0x06, 0x00, 
+  0x00, 0x63, 0x06, 0x00, 0x00, 0x63, 0x06, 0x00, 0x00, 0x67, 0x07, 
+  0x00, 0x00, 0xfe, 0x03, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x60, 
+  0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 
+  0x3c, 0x30, 0x00, 0x00, 0x7e, 0x30, 0x00, 0x00, 0xc3, 0x18, 0x00, 
+  0x00, 0xc3, 0x18, 0x00, 0x00, 0xc3, 0x0c, 0x00, 0x00, 0xc3, 0x0c, 
+  0x00, 0x00, 0x7e, 0x06, 0x00, 0x00, 0x3c, 0x06, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0xe3, 0x01, 0x00, 0x80, 0xf1, 0x03, 0x00, 
+  0x80, 0x19, 0x06, 0x00, 0xc0, 0x18, 0x06, 0x00, 0xc0, 0x18, 0x06, 
+  0x00, 0x60, 0x18, 0x06, 0x00, 0x60, 0xf0, 0x03, 0x00, 0x20, 0xe0, 
+  0x01, 0x00, 0xf0, 0x00, 0x00, 0x00, 0xf8, 0x01, 0x00, 0x00, 0x9c, 
+  0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 
+  0x0c, 0x03, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0xf0, 0x00, 0x00, 
+  0x00, 0x78, 0x00, 0x00, 0x00, 0xfc, 0x18, 0x00, 0x00, 0xce, 0x19, 
+  0x00, 0x00, 0x86, 0x1b, 0x00, 0x00, 0x03, 0x0f, 0x00, 0x00, 0x03, 
+  0x06, 0x00, 0x00, 0x03, 0x0f, 0x00, 0x00, 0x87, 0x1b, 0x00, 0x00, 
+  0xfe, 0x39, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 
+  0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 
+  0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 
+  0x0c, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 
+  0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 
+  0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x18, 
+  0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 
+  0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 
+  0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 
+  0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 
+  0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 
+  0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0c, 0x00, 
+  0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x06, 
+  0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 
+  0x00, 0x6b, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x1c, 0x00, 
+  0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x60, 
+  0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 
+  0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xff, 0x0f, 0x00, 
+  0x00, 0xff, 0x0f, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 
+  0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 
+  0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0xff, 0x07, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 
+  0x60, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 
+  0x00, 0x30, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 
+  0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0c, 
+  0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 
+  0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x8e, 
+  0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 
+  0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 
+  0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 
+  0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x06, 
+  0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x8e, 0x03, 0x00, 0x00, 
+  0xfc, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 
+  0x00, 0x30, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x3f, 0x00, 
+  0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 
+  0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 
+  0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 
+  0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 
+  0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 
+  0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 
+  0x86, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x06, 0x00, 
+  0x00, 0x03, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xf0, 
+  0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 
+  0x0e, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0xff, 0x07, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0xf8, 0x00, 
+  0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x86, 0x01, 0x00, 0x00, 0x03, 
+  0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xf0, 0x00, 0x00, 
+  0x00, 0xf0, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 
+  0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 
+  0x03, 0x00, 0x00, 0x86, 0x03, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 
+  0xf8, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 
+  0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0xf0, 0x01, 
+  0x00, 0x00, 0xb0, 0x01, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x9c, 
+  0x01, 0x00, 0x00, 0x8c, 0x01, 0x00, 0x00, 0x86, 0x01, 0x00, 0x00, 
+  0x87, 0x01, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0xff, 0x07, 0x00, 
+  0x00, 0xff, 0x07, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 
+  0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xfe, 
+  0x03, 0x00, 0x00, 0xfe, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 
+  0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 
+  0x00, 0x76, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x8e, 0x03, 
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 
+  0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 
+  0x03, 0x03, 0x00, 0x00, 0x87, 0x03, 0x00, 0x00, 0xfe, 0x01, 0x00, 
+  0x00, 0x78, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0xfc, 0x03, 
+  0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x07, 
+  0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0xf3, 0x00, 0x00, 0x00, 0xfb, 0x01, 0x00, 0x00, 0x8f, 0x03, 0x00, 
+  0x00, 0x07, 0x03, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 
+  0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x07, 0x06, 0x00, 0x00, 0x06, 
+  0x03, 0x00, 0x00, 0xfe, 0x03, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 
+  0xff, 0x07, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 
+  0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x60, 
+  0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 
+  0x30, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 
+  0x00, 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x0c, 0x00, 
+  0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xfc, 
+  0x01, 0x00, 0x00, 0x8c, 0x01, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 
+  0x06, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 
+  0x00, 0x8c, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfc, 0x01, 
+  0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x03, 
+  0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 
+  0x8e, 0x03, 0x00, 0x00, 0xfe, 0x03, 0x00, 0x00, 0xf8, 0x00, 0x00, 
+  0x00, 0xf8, 0x00, 0x00, 0x00, 0xfe, 0x03, 0x00, 0x00, 0x8e, 0x03, 
+  0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 
+  0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 
+  0x07, 0x07, 0x00, 0x00, 0x8e, 0x07, 0x00, 0x00, 0xfe, 0x06, 0x00, 
+  0x00, 0x78, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 
+  0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x87, 0x03, 0x00, 0x00, 0xfe, 
+  0x01, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 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, 0x03, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 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, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 
+  0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 
+  0x0c, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 
+  0xf0, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 
+  0x00, 0x07, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0xf0, 0x00, 
+  0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 
+  0x0c, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x03, 0x00, 
+  0x00, 0xff, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0f, 0x00, 
+  0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0xc0, 
+  0x03, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 
+  0xc0, 0x03, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 
+  0x00, 0x0f, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf8, 0x00, 
+  0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x8e, 0x03, 0x00, 0x00, 0x07, 
+  0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x83, 0x03, 0x00, 0x00, 
+  0x80, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x00, 0x00, 
+  0x00, 0x60, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 
+  0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 
+  0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 
+  0x00, 0xc0, 0xff, 0x03, 0x00, 0xf0, 0x80, 0x07, 0x00, 0x38, 0x00, 
+  0x0e, 0x00, 0x1c, 0x00, 0x18, 0x00, 0x0c, 0x00, 0x18, 0x00, 0x06, 
+  0xce, 0x30, 0x00, 0x06, 0xdf, 0x30, 0x00, 0x83, 0xe3, 0x30, 0x00, 
+  0xc3, 0x61, 0x30, 0x00, 0xc3, 0x60, 0x30, 0x00, 0x63, 0x60, 0x30, 
+  0x00, 0x63, 0x30, 0x38, 0x00, 0x63, 0x30, 0x18, 0x00, 0x63, 0x30, 
+  0x1c, 0x00, 0xe7, 0x38, 0x0e, 0x00, 0xc6, 0xef, 0x07, 0x00, 0x8e, 
+  0xc7, 0x01, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 
+  0xf0, 0xc0, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x3f, 0x00, 
+  0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x60, 0x03, 
+  0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x30, 0x02, 0x00, 0x00, 0x30, 
+  0x06, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, 0x18, 0x0c, 0x00, 0x00, 
+  0x18, 0x0c, 0x00, 0x00, 0x18, 0x0c, 0x00, 0x00, 0x0c, 0x18, 0x00, 
+  0x00, 0xfc, 0x1f, 0x00, 0x00, 0xfc, 0x1f, 0x00, 0x00, 0x06, 0x30, 
+  0x00, 0x00, 0x06, 0x30, 0x00, 0x00, 0x06, 0x30, 0x00, 0x00, 0x03, 
+  0x60, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 
+  0xff, 0x03, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0x03, 0x0e, 0x00, 
+  0x00, 0x03, 0x18, 0x00, 0x00, 0x03, 0x18, 0x00, 0x00, 0x03, 0x18, 
+  0x00, 0x00, 0x03, 0x18, 0x00, 0x00, 0x03, 0x0c, 0x00, 0x00, 0xff, 
+  0x07, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0x03, 0x18, 0x00, 0x00, 
+  0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 
+  0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x38, 0x00, 0x00, 0x03, 0x1c, 
+  0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xe0, 
+  0x07, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, 
+  0x0e, 0x70, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x07, 0x60, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, 
+  0x06, 0x60, 0x00, 0x00, 0x0e, 0x70, 0x00, 0x00, 0x3c, 0x3c, 0x00, 
+  0x00, 0xf8, 0x1f, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xff, 0x03, 
+  0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0x03, 0x1e, 0x00, 0x00, 0x03, 
+  0x38, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x70, 0x00, 0x00, 
+  0x03, 0x60, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x03, 0x60, 0x00, 
+  0x00, 0x03, 0x60, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x03, 0x60, 
+  0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x03, 0x70, 0x00, 0x00, 0x03, 
+  0x30, 0x00, 0x00, 0x03, 0x38, 0x00, 0x00, 0x03, 0x1e, 0x00, 0x00, 
+  0xff, 0x0f, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff, 0x0f, 0x00, 
+  0x00, 0xff, 0x0f, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 
+  0xff, 0x07, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xff, 
+  0x0f, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 
+  0xff, 0x07, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xff, 
+  0x03, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xf8, 
+  0x1f, 0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, 0x0e, 0x70, 0x00, 0x00, 
+  0x06, 0x60, 0x00, 0x00, 0x07, 0x60, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0xfe, 
+  0x00, 0x00, 0x03, 0xfe, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x03, 
+  0xc0, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x06, 0xe0, 0x00, 0x00, 
+  0x0e, 0xf0, 0x00, 0x00, 0x3c, 0xfc, 0x00, 0x00, 0xf8, 0xdf, 0x00, 
+  0x00, 0xe0, 0xc7, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 
+  0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 
+  0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 
+  0x03, 0x30, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0xff, 0x3f, 0x00, 
+  0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 
+  0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 
+  0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 
+  0x03, 0x30, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 
+  0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 
+  0x00, 0x86, 0x01, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0xfc, 0x00, 
+  0x00, 0x00, 0x03, 0x1c, 0x00, 0x00, 0x03, 0x0e, 0x00, 0x00, 0x03, 
+  0x07, 0x00, 0x00, 0x83, 0x03, 0x00, 0x00, 0xc3, 0x01, 0x00, 0x00, 
+  0xe3, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 
+  0x00, 0x3f, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0xe7, 0x00, 
+  0x00, 0x00, 0xc3, 0x01, 0x00, 0x00, 0x83, 0x03, 0x00, 0x00, 0x03, 
+  0x07, 0x00, 0x00, 0x03, 0x0e, 0x00, 0x00, 0x03, 0x1c, 0x00, 0x00, 
+  0x03, 0x38, 0x00, 0x00, 0x03, 0x70, 0x00, 0x00, 0x03, 0x60, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 
+  0x03, 0x80, 0x01, 0x00, 0x07, 0xc0, 0x01, 0x00, 0x07, 0xc0, 0x01, 
+  0x00, 0x0f, 0xe0, 0x01, 0x00, 0x0f, 0xe0, 0x01, 0x00, 0x1b, 0xb0, 
+  0x01, 0x00, 0x1b, 0xb0, 0x01, 0x00, 0x1b, 0xb0, 0x01, 0x00, 0x33, 
+  0x98, 0x01, 0x00, 0x33, 0x98, 0x01, 0x00, 0x33, 0x98, 0x01, 0x00, 
+  0x63, 0x8c, 0x01, 0x00, 0x63, 0x8c, 0x01, 0x00, 0x63, 0x8c, 0x01, 
+  0x00, 0xc3, 0x86, 0x01, 0x00, 0xc3, 0x86, 0x01, 0x00, 0xc3, 0x86, 
+  0x01, 0x00, 0x83, 0x83, 0x01, 0x00, 0x83, 0x83, 0x01, 0x00, 0x07, 
+  0x30, 0x00, 0x00, 0x0f, 0x30, 0x00, 0x00, 0x0f, 0x30, 0x00, 0x00, 
+  0x1b, 0x30, 0x00, 0x00, 0x3b, 0x30, 0x00, 0x00, 0x33, 0x30, 0x00, 
+  0x00, 0x73, 0x30, 0x00, 0x00, 0x63, 0x30, 0x00, 0x00, 0xe3, 0x30, 
+  0x00, 0x00, 0xc3, 0x30, 0x00, 0x00, 0xc3, 0x31, 0x00, 0x00, 0x83, 
+  0x31, 0x00, 0x00, 0x83, 0x33, 0x00, 0x00, 0x03, 0x33, 0x00, 0x00, 
+  0x03, 0x37, 0x00, 0x00, 0x03, 0x36, 0x00, 0x00, 0x03, 0x3c, 0x00, 
+  0x00, 0x03, 0x3c, 0x00, 0x00, 0x03, 0x38, 0x00, 0x00, 0xe0, 0x07, 
+  0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, 0x0e, 
+  0x70, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 
+  0x03, 0xc0, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x03, 0xc0, 0x00, 
+  0x00, 0x03, 0xc0, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x03, 0xc0, 
+  0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x06, 
+  0x60, 0x00, 0x00, 0x0e, 0x70, 0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, 
+  0xf8, 0x1f, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xff, 0x07, 0x00, 
+  0x00, 0xff, 0x0f, 0x00, 0x00, 0x03, 0x0c, 0x00, 0x00, 0x03, 0x18, 
+  0x00, 0x00, 0x03, 0x18, 0x00, 0x00, 0x03, 0x18, 0x00, 0x00, 0x03, 
+  0x18, 0x00, 0x00, 0x03, 0x0c, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 
+  0xff, 0x07, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 
+  0xf8, 0x1f, 0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, 0x0e, 0x70, 0x00, 
+  0x00, 0x06, 0x60, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x03, 0xc0, 
+  0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x03, 
+  0xc0, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 
+  0x03, 0xc0, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x06, 0x67, 0x00, 
+  0x00, 0x0e, 0x7e, 0x00, 0x00, 0x3c, 0x38, 0x00, 0x00, 0xf8, 0x7f, 
+  0x00, 0x00, 0xe0, 0xe7, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0xff, 
+  0x0f, 0x00, 0x00, 0x03, 0x0c, 0x00, 0x00, 0x03, 0x18, 0x00, 0x00, 
+  0x03, 0x18, 0x00, 0x00, 0x03, 0x18, 0x00, 0x00, 0x03, 0x18, 0x00, 
+  0x00, 0x03, 0x0c, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xff, 0x07, 
+  0x00, 0x00, 0x03, 0x0e, 0x00, 0x00, 0x03, 0x0c, 0x00, 0x00, 0x03, 
+  0x18, 0x00, 0x00, 0x03, 0x18, 0x00, 0x00, 0x03, 0x18, 0x00, 0x00, 
+  0x03, 0x18, 0x00, 0x00, 0x03, 0x18, 0x00, 0x00, 0x03, 0x18, 0x00, 
+  0x00, 0x03, 0x18, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xf8, 0x0f, 
+  0x00, 0x00, 0x1c, 0x1c, 0x00, 0x00, 0x0e, 0x18, 0x00, 0x00, 0x06, 
+  0x18, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 
+  0x7c, 0x00, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0x80, 0x0f, 0x00, 
+  0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x30, 
+  0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x07, 
+  0x38, 0x00, 0x00, 0x1e, 0x1c, 0x00, 0x00, 0xfc, 0x0f, 0x00, 0x00, 
+  0xf0, 0x03, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0xff, 0x3f, 0x00, 
+  0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 
+  0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 
+  0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 
+  0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 
+  0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 
+  0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 
+  0x00, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 
+  0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 
+  0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 
+  0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 
+  0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 
+  0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x06, 0x18, 0x00, 
+  0x00, 0x0e, 0x1c, 0x00, 0x00, 0xfc, 0x0f, 0x00, 0x00, 0xf0, 0x03, 
+  0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x07, 
+  0x70, 0x00, 0x00, 0x06, 0x30, 0x00, 0x00, 0x0e, 0x38, 0x00, 0x00, 
+  0x0c, 0x18, 0x00, 0x00, 0x0c, 0x18, 0x00, 0x00, 0x1c, 0x1c, 0x00, 
+  0x00, 0x18, 0x0c, 0x00, 0x00, 0x18, 0x0c, 0x00, 0x00, 0x38, 0x0e, 
+  0x00, 0x00, 0x30, 0x06, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, 0x70, 
+  0x07, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 
+  0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 
+  0x00, 0x03, 0x06, 0x0c, 0x00, 0x03, 0x06, 0x0c, 0x00, 0x03, 0x06, 
+  0x0c, 0x00, 0x03, 0x0f, 0x0c, 0x00, 0x06, 0x0f, 0x06, 0x00, 0x86, 
+  0x19, 0x06, 0x00, 0x86, 0x19, 0x06, 0x00, 0x86, 0x19, 0x06, 0x00, 
+  0x86, 0x19, 0x06, 0x00, 0x8c, 0x19, 0x03, 0x00, 0xcc, 0x30, 0x03, 
+  0x00, 0xcc, 0x30, 0x03, 0x00, 0xcc, 0x30, 0x03, 0x00, 0xd8, 0xb0, 
+  0x01, 0x00, 0xd8, 0xb0, 0x01, 0x00, 0x78, 0xe0, 0x01, 0x00, 0x70, 
+  0xe0, 0x00, 0x00, 0x30, 0xc0, 0x00, 0x00, 0x30, 0xc0, 0x00, 0x00, 
+  0x03, 0x60, 0x00, 0x00, 0x07, 0x70, 0x00, 0x00, 0x0e, 0x38, 0x00, 
+  0x00, 0x0c, 0x18, 0x00, 0x00, 0x18, 0x0c, 0x00, 0x00, 0x38, 0x0e, 
+  0x00, 0x00, 0x70, 0x07, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xc0, 
+  0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 
+  0x70, 0x07, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, 0x38, 0x0e, 0x00, 
+  0x00, 0x1c, 0x1c, 0x00, 0x00, 0x0c, 0x18, 0x00, 0x00, 0x06, 0x30, 
+  0x00, 0x00, 0x07, 0x70, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x03, 
+  0x30, 0x00, 0x00, 0x07, 0x38, 0x00, 0x00, 0x06, 0x18, 0x00, 0x00, 
+  0x0e, 0x1c, 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x00, 0x1c, 0x0e, 0x00, 
+  0x00, 0x18, 0x06, 0x00, 0x00, 0x38, 0x07, 0x00, 0x00, 0x30, 0x03, 
+  0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0xe0, 
+  0x01, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 
+  0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 
+  0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xff, 0x1f, 
+  0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 
+  0x0e, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 
+  0x80, 0x03, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x00, 0x00, 
+  0x00, 0xe0, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x38, 0x00, 
+  0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x0e, 
+  0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 
+  0xff, 0x1f, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 0x0f, 0x00, 0x00, 
+  0x00, 0x0f, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 
+  0x00, 0x0f, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 
+  0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 
+  0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 
+  0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 
+  0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 
+  0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 
+  0x60, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 
+  0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 
+  0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 
+  0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 
+  0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 
+  0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 
+  0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 
+  0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 
+  0x0c, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 
+  0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x78, 0x00, 
+  0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0x86, 
+  0x01, 0x00, 0x00, 0x86, 0x01, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 
+  0x03, 0x03, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0xff, 0x3f, 0x00, 
+  0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 
+  0x86, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0xe0, 0x03, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x1e, 0x03, 
+  0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x83, 
+  0x03, 0x00, 0x00, 0xc7, 0x03, 0x00, 0x00, 0x7e, 0x07, 0x00, 0x00, 
+  0x3c, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0xf3, 0x00, 0x00, 0x00, 0xfb, 0x01, 0x00, 0x00, 0x8f, 
+  0x03, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 
+  0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 
+  0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x07, 0x03, 
+  0x00, 0x00, 0x8f, 0x03, 0x00, 0x00, 0xfb, 0x01, 0x00, 0x00, 0xf3, 
+  0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 
+  0x8e, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 
+  0x03, 0x00, 0x00, 0x8e, 0x03, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 
+  0xf8, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 
+  0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 
+  0x00, 0x00, 0x78, 0x06, 0x00, 0x00, 0xfc, 0x06, 0x00, 0x00, 0x8e, 
+  0x07, 0x00, 0x00, 0x06, 0x07, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 
+  0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 
+  0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x06, 0x07, 
+  0x00, 0x00, 0x8e, 0x07, 0x00, 0x00, 0xfc, 0x06, 0x00, 0x00, 0x78, 
+  0x06, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 
+  0x8e, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x03, 0x06, 0x00, 
+  0x00, 0x03, 0x06, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0xff, 0x07, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 
+  0x06, 0x00, 0x00, 0x0e, 0x07, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 
+  0xf0, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 
+  0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 
+  0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x0c, 
+  0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 
+  0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 
+  0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 
+  0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 
+  0x00, 0x00, 0x00, 0x78, 0x06, 0x00, 0x00, 0xfc, 0x06, 0x00, 0x00, 
+  0x8e, 0x07, 0x00, 0x00, 0x06, 0x07, 0x00, 0x00, 0x03, 0x06, 0x00, 
+  0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 
+  0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x06, 
+  0x07, 0x00, 0x00, 0x8e, 0x07, 0x00, 0x00, 0xfc, 0x06, 0x00, 0x00, 
+  0x78, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 
+  0x00, 0x07, 0x03, 0x00, 0x00, 0xfe, 0x03, 0x00, 0x00, 0xf8, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0x73, 0x00, 0x00, 0x00, 0xfb, 0x01, 0x00, 0x00, 0x8f, 0x01, 0x00, 
+  0x00, 0x07, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 
+  0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 
+  0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 
+  0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 
+  0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 
+  0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 
+  0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 
+  0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 
+  0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 
+  0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 
+  0x0f, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0xc3, 
+  0x01, 0x00, 0x00, 0xe3, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 
+  0x3b, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 
+  0x00, 0x73, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0xe3, 0x00, 
+  0x00, 0x00, 0xc3, 0x01, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x83, 
+  0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x73, 0x3c, 0x00, 0x00, 0xff, 
+  0x7e, 0x00, 0x00, 0xc7, 0xe3, 0x00, 0x00, 0x83, 0xc1, 0x00, 0x00, 
+  0x83, 0xc1, 0x00, 0x00, 0x83, 0xc1, 0x00, 0x00, 0x83, 0xc1, 0x00, 
+  0x00, 0x83, 0xc1, 0x00, 0x00, 0x83, 0xc1, 0x00, 0x00, 0x83, 0xc1, 
+  0x00, 0x00, 0x83, 0xc1, 0x00, 0x00, 0x83, 0xc1, 0x00, 0x00, 0x83, 
+  0xc1, 0x00, 0x00, 0x83, 0xc1, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 
+  0xfb, 0x01, 0x00, 0x00, 0x8f, 0x01, 0x00, 0x00, 0x07, 0x03, 0x00, 
+  0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 
+  0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 
+  0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 
+  0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0xf8, 0x00, 0x00, 
+  0x00, 0xfc, 0x01, 0x00, 0x00, 0x8e, 0x03, 0x00, 0x00, 0x06, 0x03, 
+  0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 
+  0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 
+  0x03, 0x06, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x8e, 0x03, 0x00, 
+  0x00, 0xfc, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xf3, 0x00, 
+  0x00, 0x00, 0xfb, 0x01, 0x00, 0x00, 0x8f, 0x03, 0x00, 0x00, 0x07, 
+  0x03, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 
+  0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 
+  0x00, 0x03, 0x06, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0x8f, 0x03, 
+  0x00, 0x00, 0xfb, 0x01, 0x00, 0x00, 0xf3, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x78, 0x06, 0x00, 
+  0x00, 0xfc, 0x06, 0x00, 0x00, 0x8e, 0x07, 0x00, 0x00, 0x06, 0x07, 
+  0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 
+  0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 
+  0x03, 0x06, 0x00, 0x00, 0x06, 0x07, 0x00, 0x00, 0x8e, 0x07, 0x00, 
+  0x00, 0xfc, 0x06, 0x00, 0x00, 0x78, 0x06, 0x00, 0x00, 0x00, 0x06, 
+  0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 
+  0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 
+  0x3b, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 
+  0x00, 0xfe, 0x01, 0x00, 0x00, 0x87, 0x03, 0x00, 0x00, 0x03, 0x03, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xfe, 
+  0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x83, 0x03, 0x00, 
+  0x00, 0xff, 0x01, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x0c, 0x00, 
+  0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 
+  0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 
+  0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 
+  0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 
+  0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 
+  0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 
+  0x38, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 
+  0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 
+  0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 
+  0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 
+  0x83, 0x03, 0x00, 0x00, 0xc6, 0x03, 0x00, 0x00, 0x7e, 0x03, 0x00, 
+  0x00, 0x38, 0x03, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 
+  0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 
+  0x03, 0x00, 0x00, 0x8e, 0x03, 0x00, 0x00, 0x8c, 0x01, 0x00, 0x00, 
+  0x8c, 0x01, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 
+  0x00, 0xd8, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x70, 0x00, 
+  0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x00, 0x03, 
+  0x03, 0x03, 0x00, 0x86, 0x87, 0x01, 0x00, 0x86, 0x87, 0x01, 0x00, 
+  0x86, 0x87, 0x01, 0x00, 0x8c, 0xc4, 0x00, 0x00, 0xcc, 0xcc, 0x00, 
+  0x00, 0xcc, 0xcc, 0x00, 0x00, 0xd8, 0x6c, 0x00, 0x00, 0x58, 0x68, 
+  0x00, 0x00, 0x78, 0x78, 0x00, 0x00, 0x70, 0x38, 0x00, 0x00, 0x30, 
+  0x30, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 
+  0x87, 0x03, 0x00, 0x00, 0x86, 0x01, 0x00, 0x00, 0xcc, 0x00, 0x00, 
+  0x00, 0xfc, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x30, 0x00, 
+  0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xcc, 
+  0x00, 0x00, 0x00, 0xce, 0x01, 0x00, 0x00, 0x86, 0x01, 0x00, 0x00, 
+  0x87, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x0c, 0x00, 
+  0x00, 0x03, 0x0c, 0x00, 0x00, 0x06, 0x0c, 0x00, 0x00, 0x0e, 0x06, 
+  0x00, 0x00, 0x0c, 0x06, 0x00, 0x00, 0x1c, 0x07, 0x00, 0x00, 0x18, 
+  0x03, 0x00, 0x00, 0x18, 0x03, 0x00, 0x00, 0xb0, 0x01, 0x00, 0x00, 
+  0xb0, 0x01, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0xe0, 0x00, 0x00, 
+  0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x60, 0x00, 
+  0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x3c, 
+  0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 
+  0xff, 0x03, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xc0, 0x00, 0x00, 
+  0x00, 0xe0, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x30, 0x00, 
+  0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x0c, 
+  0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 
+  0xff, 0x03, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0x30, 0x00, 0x00, 
+  0x00, 0x18, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 
+  0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 
+  0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 
+  0x0c, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0c, 0x00, 
+  0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 
+  0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 
+  0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 
+  0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0c, 
+  0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 
+  0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 
+  0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x18, 0x00, 
+  0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x18, 
+  0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 
+  0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 
+  0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 
+  0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0e, 
+  0x03, 0x00, 0x00, 0x3f, 0x03, 0x00, 0x00, 0xf3, 0x03, 0x00, 0x00, 
+  0xc3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 
+  0x80, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 
+  0x00, 0xce, 0x03, 0x00, 0x00, 0x66, 0x03, 0x00, 0x00, 0x63, 0x00, 
+  0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x33, 
+  0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 
+  0x1b, 0x03, 0x00, 0x00, 0x8e, 0x03, 0x00, 0x00, 0xfe, 0x01, 0x00, 
+  0x00, 0xfc, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 
+  0x00, 0x00, 0xf8, 0x01, 0x00, 0x00, 0xfc, 0x07, 0x00, 0x00, 0x0e, 
+  0x0e, 0x00, 0x00, 0x06, 0x0c, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 
+  0x0e, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 
+  0x00, 0xff, 0x01, 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0x18, 0x00, 
+  0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0c, 
+  0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xe6, 0x0c, 0x00, 0x00, 
+  0xff, 0x0f, 0x00, 0x00, 0x0f, 0x07, 0x00, 0x00, 0x03, 0x06, 0x00, 
+  0x00, 0x77, 0x07, 0x00, 0x00, 0xfe, 0x03, 0x00, 0x00, 0x8c, 0x01, 
+  0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 
+  0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x8c, 0x01, 0x00, 0x00, 
+  0xfe, 0x03, 0x00, 0x00, 0x77, 0x07, 0x00, 0x00, 0x03, 0x06, 0x00, 
+  0x00, 0x07, 0x38, 0x00, 0x00, 0x06, 0x18, 0x00, 0x00, 0x0e, 0x1c, 
+  0x00, 0x00, 0x0c, 0x0c, 0x00, 0x00, 0x1c, 0x0e, 0x00, 0x00, 0x18, 
+  0x06, 0x00, 0x00, 0x38, 0x07, 0x00, 0x00, 0x30, 0x03, 0x00, 0x00, 
+  0xfc, 0x0f, 0x00, 0x00, 0xfc, 0x0f, 0x00, 0x00, 0xc0, 0x00, 0x00, 
+  0x00, 0xfc, 0x0f, 0x00, 0x00, 0xfc, 0x0f, 0x00, 0x00, 0xc0, 0x00, 
+  0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 
+  0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0xf8, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x8e, 0x03, 0x00, 
+  0x00, 0x06, 0x03, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x1c, 0x00, 
+  0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0xe7, 
+  0x00, 0x00, 0x00, 0xc3, 0x01, 0x00, 0x00, 0x83, 0x03, 0x00, 0x00, 
+  0x03, 0x03, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x0e, 0x06, 0x00, 
+  0x00, 0x1c, 0x06, 0x00, 0x00, 0x38, 0x03, 0x00, 0x00, 0xf0, 0x01, 
+  0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x86, 
+  0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x8e, 0x03, 0x00, 0x00, 
+  0xfc, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 
+  0x00, 0x33, 0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x38, 0x38, 
+  0x00, 0x00, 0x0c, 0x60, 0x00, 0x00, 0x06, 0xc0, 0x00, 0x00, 0xc2, 
+  0x87, 0x00, 0x00, 0x63, 0x8c, 0x01, 0x00, 0x31, 0x08, 0x01, 0x00, 
+  0x11, 0x00, 0x01, 0x00, 0x11, 0x00, 0x01, 0x00, 0x11, 0x00, 0x01, 
+  0x00, 0x31, 0x08, 0x01, 0x00, 0x63, 0x8c, 0x01, 0x00, 0xc2, 0x87, 
+  0x00, 0x00, 0x06, 0xc0, 0x00, 0x00, 0x0c, 0x60, 0x00, 0x00, 0x38, 
+  0x38, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 
+  0x33, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 
+  0x00, 0x3e, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x33, 0x00, 
+  0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 
+  0x98, 0x01, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 
+  0x00, 0x33, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x66, 0x00, 
+  0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0xff, 
+  0x1f, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 
+  0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 
+  0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x3f, 0x00, 
+  0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x38, 
+  0x38, 0x00, 0x00, 0x0c, 0x60, 0x00, 0x00, 0x06, 0xc0, 0x00, 0x00, 
+  0xc2, 0x87, 0x00, 0x00, 0x43, 0x88, 0x01, 0x00, 0x41, 0x08, 0x01, 
+  0x00, 0x41, 0x08, 0x01, 0x00, 0xc1, 0x07, 0x01, 0x00, 0x41, 0x02, 
+  0x01, 0x00, 0x41, 0x04, 0x01, 0x00, 0x43, 0x84, 0x01, 0x00, 0x42, 
+  0x88, 0x00, 0x00, 0x06, 0xc0, 0x00, 0x00, 0x0c, 0x60, 0x00, 0x00, 
+  0x38, 0x38, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x3f, 0x00, 0x00, 
+  0x00, 0x3f, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x66, 0x00, 
+  0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0xc3, 
+  0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 
+  0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 
+  0x00, 0x60, 0x00, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xff, 0x0f, 
+  0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 
+  0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0xff, 0x0f, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0x3c, 0x00, 0x00, 
+  0x00, 0x7e, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x60, 0x00, 
+  0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0c, 
+  0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 
+  0x7f, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 
+  0x00, 0x63, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x3c, 0x00, 
+  0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x63, 
+  0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 
+  0x18, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 
+  0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 
+  0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 
+  0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 
+  0x00, 0x83, 0x03, 0x00, 0x00, 0xc7, 0x03, 0x00, 0x00, 0x7f, 0x03, 
+  0x00, 0x00, 0x3b, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0xfe, 0x03, 0x00, 
+  0x00, 0x9e, 0x01, 0x00, 0x00, 0x9f, 0x01, 0x00, 0x00, 0x9f, 0x01, 
+  0x00, 0x00, 0x9f, 0x01, 0x00, 0x00, 0x9f, 0x01, 0x00, 0x00, 0x9f, 
+  0x01, 0x00, 0x00, 0x9f, 0x01, 0x00, 0x00, 0x9e, 0x01, 0x00, 0x00, 
+  0x9e, 0x01, 0x00, 0x00, 0x9c, 0x01, 0x00, 0x00, 0x98, 0x01, 0x00, 
+  0x00, 0x98, 0x01, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x98, 0x01, 
+  0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x98, 
+  0x01, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 
+  0x98, 0x01, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 
+  0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 
+  0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 
+  0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 
+  0x00, 0x0f, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 
+  0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 
+  0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 
+  0x36, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 
+  0x00, 0x63, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x63, 0x00, 
+  0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 
+  0x33, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 
+  0x00, 0x98, 0x01, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0xcc, 0x00, 
+  0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x0c, 
+  0x18, 0x00, 0x00, 0x0c, 0x18, 0x00, 0x00, 0x0f, 0x0c, 0x00, 0x00, 
+  0x0f, 0x0c, 0x00, 0x00, 0x0c, 0x06, 0x00, 0x00, 0x0c, 0x06, 0x00, 
+  0x00, 0x0c, 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x8c, 0xc1, 
+  0x00, 0x00, 0x8c, 0xe1, 0x00, 0x00, 0xc0, 0xf0, 0x00, 0x00, 0xc0, 
+  0xf0, 0x00, 0x00, 0x60, 0xd8, 0x00, 0x00, 0x60, 0xcc, 0x00, 0x00, 
+  0x30, 0xfe, 0x03, 0x00, 0x30, 0xfe, 0x03, 0x00, 0x18, 0xc0, 0x00, 
+  0x00, 0x18, 0xc0, 0x00, 0x00, 0x0c, 0x18, 0x00, 0x00, 0x0c, 0x18, 
+  0x00, 0x00, 0x0f, 0x0c, 0x00, 0x00, 0x0f, 0x0c, 0x00, 0x00, 0x0c, 
+  0x06, 0x00, 0x00, 0x0c, 0x06, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 
+  0x0c, 0x03, 0x00, 0x00, 0x8c, 0xe1, 0x01, 0x00, 0x8c, 0xf1, 0x03, 
+  0x00, 0xc0, 0x18, 0x03, 0x00, 0xc0, 0x00, 0x03, 0x00, 0x60, 0x80, 
+  0x01, 0x00, 0x60, 0xc0, 0x00, 0x00, 0x30, 0x60, 0x00, 0x00, 0x30, 
+  0x30, 0x00, 0x00, 0x18, 0xf8, 0x03, 0x00, 0x18, 0xf8, 0x03, 0x00, 
+  0x3e, 0x30, 0x00, 0x00, 0x7f, 0x30, 0x00, 0x00, 0x63, 0x18, 0x00, 
+  0x00, 0x60, 0x18, 0x00, 0x00, 0x3c, 0x0c, 0x00, 0x00, 0x3c, 0x0c, 
+  0x00, 0x00, 0x60, 0x06, 0x00, 0x00, 0x63, 0x06, 0x00, 0x00, 0x7f, 
+  0x83, 0x01, 0x00, 0x3e, 0xc3, 0x01, 0x00, 0x80, 0xe1, 0x01, 0x00, 
+  0x80, 0xe1, 0x01, 0x00, 0xc0, 0xb0, 0x01, 0x00, 0xc0, 0x98, 0x01, 
+  0x00, 0x60, 0xfc, 0x07, 0x00, 0x60, 0xfc, 0x07, 0x00, 0x30, 0x80, 
+  0x01, 0x00, 0x30, 0x80, 0x01, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 
+  0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 
+  0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x18, 0x00, 
+  0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x06, 
+  0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 
+  0x83, 0x03, 0x00, 0x00, 0xc7, 0x01, 0x00, 0x00, 0xfe, 0x01, 0x00, 
+  0x00, 0x7c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x60, 0x00, 
+  0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 
+  0x60, 0x03, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x30, 0x02, 0x00, 
+  0x00, 0x30, 0x06, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, 0x18, 0x0c, 
+  0x00, 0x00, 0x18, 0x0c, 0x00, 0x00, 0x18, 0x0c, 0x00, 0x00, 0x0c, 
+  0x18, 0x00, 0x00, 0xfc, 0x1f, 0x00, 0x00, 0xfc, 0x1f, 0x00, 0x00, 
+  0x06, 0x30, 0x00, 0x00, 0x06, 0x30, 0x00, 0x00, 0x06, 0x30, 0x00, 
+  0x00, 0x03, 0x60, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x03, 0x60, 
+  0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x80, 
+  0x01, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x60, 0x03, 0x00, 
+  0x00, 0x60, 0x03, 0x00, 0x00, 0x30, 0x02, 0x00, 0x00, 0x30, 0x06, 
+  0x00, 0x00, 0x30, 0x06, 0x00, 0x00, 0x18, 0x0c, 0x00, 0x00, 0x18, 
+  0x0c, 0x00, 0x00, 0x18, 0x0c, 0x00, 0x00, 0x0c, 0x18, 0x00, 0x00, 
+  0xfc, 0x1f, 0x00, 0x00, 0xfc, 0x1f, 0x00, 0x00, 0x06, 0x30, 0x00, 
+  0x00, 0x06, 0x30, 0x00, 0x00, 0x06, 0x30, 0x00, 0x00, 0x03, 0x60, 
+  0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x80, 
+  0x01, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x60, 0x06, 0x00, 0x00, 
+  0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 
+  0x00, 0xc0, 0x01, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x60, 0x03, 
+  0x00, 0x00, 0x30, 0x02, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, 0x30, 
+  0x06, 0x00, 0x00, 0x18, 0x0c, 0x00, 0x00, 0x18, 0x0c, 0x00, 0x00, 
+  0x18, 0x0c, 0x00, 0x00, 0x0c, 0x18, 0x00, 0x00, 0xfc, 0x1f, 0x00, 
+  0x00, 0xfc, 0x1f, 0x00, 0x00, 0x06, 0x30, 0x00, 0x00, 0x06, 0x30, 
+  0x00, 0x00, 0x06, 0x30, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x03, 
+  0x60, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0xe0, 0x08, 0x00, 0x00, 
+  0xb0, 0x0d, 0x00, 0x00, 0x10, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x60, 0x03, 
+  0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x30, 0x02, 0x00, 0x00, 0x30, 
+  0x06, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, 0x18, 0x0c, 0x00, 0x00, 
+  0x18, 0x0c, 0x00, 0x00, 0x18, 0x0c, 0x00, 0x00, 0x0c, 0x18, 0x00, 
+  0x00, 0xfc, 0x1f, 0x00, 0x00, 0xfc, 0x1f, 0x00, 0x00, 0x06, 0x30, 
+  0x00, 0x00, 0x06, 0x30, 0x00, 0x00, 0x06, 0x30, 0x00, 0x00, 0x03, 
+  0x60, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 
+  0x30, 0x06, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 
+  0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x30, 
+  0x02, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, 
+  0x18, 0x0c, 0x00, 0x00, 0x18, 0x0c, 0x00, 0x00, 0x18, 0x0c, 0x00, 
+  0x00, 0x0c, 0x18, 0x00, 0x00, 0xfc, 0x1f, 0x00, 0x00, 0xfc, 0x1f, 
+  0x00, 0x00, 0x06, 0x30, 0x00, 0x00, 0x06, 0x30, 0x00, 0x00, 0x06, 
+  0x30, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 
+  0x03, 0x60, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x60, 0x03, 0x00, 
+  0x00, 0x60, 0x03, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x60, 
+  0x03, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x30, 0x02, 0x00, 0x00, 
+  0x30, 0x06, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, 0x18, 0x0c, 0x00, 
+  0x00, 0x18, 0x0c, 0x00, 0x00, 0x18, 0x0c, 0x00, 0x00, 0x0c, 0x18, 
+  0x00, 0x00, 0xfc, 0x1f, 0x00, 0x00, 0xfc, 0x1f, 0x00, 0x00, 0x06, 
+  0x30, 0x00, 0x00, 0x06, 0x30, 0x00, 0x00, 0x06, 0x30, 0x00, 0x00, 
+  0x03, 0x60, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x03, 0x60, 0x00, 
+  0x00, 0xc0, 0xff, 0x1f, 0x00, 0xc0, 0xff, 0x1f, 0x00, 0x60, 0x06, 
+  0x00, 0x00, 0x60, 0x06, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, 0x30, 
+  0x06, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, 0x18, 0x06, 0x00, 0x00, 
+  0x18, 0xfe, 0x1f, 0x00, 0x18, 0xfe, 0x1f, 0x00, 0x0c, 0x06, 0x00, 
+  0x00, 0xfc, 0x07, 0x00, 0x00, 0xfc, 0x07, 0x00, 0x00, 0x06, 0x06, 
+  0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x03, 
+  0x06, 0x00, 0x00, 0x03, 0xfe, 0x1f, 0x00, 0x03, 0xfe, 0x1f, 0x00, 
+  0xe0, 0x07, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x3c, 0x3c, 0x00, 
+  0x00, 0x0e, 0x70, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x07, 0x60, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x07, 0xc0, 0x00, 
+  0x00, 0x06, 0x60, 0x00, 0x00, 0x0e, 0x70, 0x00, 0x00, 0x3c, 0x3c, 
+  0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xc0, 
+  0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0xe0, 0x03, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 
+  0x00, 0x18, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x60, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xff, 
+  0x0f, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0xff, 0x07, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xff, 0x0f, 0x00, 
+  0x00, 0xff, 0x0f, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xc0, 0x00, 
+  0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xff, 0x0f, 
+  0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x98, 
+  0x01, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0xff, 0x0f, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xff, 
+  0x07, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0x98, 
+  0x01, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xff, 0x0f, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xff, 
+  0x0f, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 
+  0x0c, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 
+  0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 
+  0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 
+  0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 
+  0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 
+  0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 
+  0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 
+  0x18, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 
+  0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 
+  0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 
+  0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 
+  0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 
+  0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 
+  0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 
+  0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 
+  0x00, 0x3c, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0xc3, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 
+  0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 
+  0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 
+  0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 
+  0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 
+  0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 
+  0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 
+  0x00, 0x18, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x33, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 
+  0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 
+  0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 
+  0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 
+  0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 
+  0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 
+  0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 
+  0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xfc, 0x0f, 
+  0x00, 0x00, 0xfc, 0x3f, 0x00, 0x00, 0x0c, 0x78, 0x00, 0x00, 0x0c, 
+  0xe0, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, 0x0c, 0xc0, 0x01, 0x00, 
+  0x0c, 0x80, 0x01, 0x00, 0x0c, 0x80, 0x01, 0x00, 0xff, 0x80, 0x01, 
+  0x00, 0xff, 0x80, 0x01, 0x00, 0x0c, 0x80, 0x01, 0x00, 0x0c, 0x80, 
+  0x01, 0x00, 0x0c, 0x80, 0x01, 0x00, 0x0c, 0xc0, 0x01, 0x00, 0x0c, 
+  0xc0, 0x00, 0x00, 0x0c, 0xe0, 0x00, 0x00, 0x0c, 0x78, 0x00, 0x00, 
+  0xfc, 0x3f, 0x00, 0x00, 0xfc, 0x0f, 0x00, 0x00, 0xe0, 0x08, 0x00, 
+  0x00, 0xb0, 0x0d, 0x00, 0x00, 0x10, 0x07, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x07, 0x30, 0x00, 0x00, 0x0f, 0x30, 0x00, 0x00, 0x0f, 
+  0x30, 0x00, 0x00, 0x1b, 0x30, 0x00, 0x00, 0x3b, 0x30, 0x00, 0x00, 
+  0x33, 0x30, 0x00, 0x00, 0x73, 0x30, 0x00, 0x00, 0x63, 0x30, 0x00, 
+  0x00, 0xe3, 0x30, 0x00, 0x00, 0xc3, 0x30, 0x00, 0x00, 0xc3, 0x31, 
+  0x00, 0x00, 0x83, 0x31, 0x00, 0x00, 0x83, 0x33, 0x00, 0x00, 0x03, 
+  0x33, 0x00, 0x00, 0x03, 0x37, 0x00, 0x00, 0x03, 0x36, 0x00, 0x00, 
+  0x03, 0x3c, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x03, 0x38, 0x00, 
+  0x00, 0x60, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x80, 0x01, 
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 
+  0x07, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, 
+  0x0e, 0x70, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x07, 0xe0, 0x00, 
+  0x00, 0x03, 0xc0, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x03, 0xc0, 
+  0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x03, 
+  0xc0, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 
+  0x06, 0x60, 0x00, 0x00, 0x0e, 0x70, 0x00, 0x00, 0x3c, 0x3c, 0x00, 
+  0x00, 0xf8, 0x1f, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x0c, 
+  0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x80, 
+  0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 
+  0xf8, 0x1f, 0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, 0x0e, 0x70, 0x00, 
+  0x00, 0x06, 0x60, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x03, 0xc0, 
+  0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x03, 
+  0xc0, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 
+  0x03, 0xc0, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x06, 0x60, 0x00, 
+  0x00, 0x0e, 0x70, 0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, 0xf8, 0x1f, 
+  0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xc0, 
+  0x03, 0x00, 0x00, 0x60, 0x06, 0x00, 0x00, 0x30, 0x0c, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xf8, 0x1f, 0x00, 
+  0x00, 0x3c, 0x3c, 0x00, 0x00, 0x0e, 0x70, 0x00, 0x00, 0x06, 0x60, 
+  0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x03, 
+  0xc0, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 
+  0x03, 0xc0, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x03, 0xc0, 0x00, 
+  0x00, 0x07, 0xe0, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x0e, 0x70, 
+  0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0xe0, 
+  0x07, 0x00, 0x00, 0xe0, 0x08, 0x00, 0x00, 0xb0, 0x0d, 0x00, 0x00, 
+  0x10, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 
+  0x00, 0xf8, 0x1f, 0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, 0x0e, 0x70, 
+  0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x03, 
+  0xc0, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 
+  0x03, 0xc0, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x03, 0xc0, 0x00, 
+  0x00, 0x03, 0xc0, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x06, 0x60, 
+  0x00, 0x00, 0x0e, 0x70, 0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, 0xf8, 
+  0x1f, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x60, 0x06, 0x00, 0x00, 
+  0x60, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0xe0, 0x07, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x3c, 0x3c, 
+  0x00, 0x00, 0x0e, 0x70, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x07, 
+  0xe0, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 
+  0x03, 0xc0, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x03, 0xc0, 0x00, 
+  0x00, 0x03, 0xc0, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x07, 0xe0, 
+  0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x0e, 0x70, 0x00, 0x00, 0x3c, 
+  0x3c, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 
+  0x03, 0x18, 0x00, 0x00, 0x06, 0x0c, 0x00, 0x00, 0x0c, 0x06, 0x00, 
+  0x00, 0x18, 0x03, 0x00, 0x00, 0xb0, 0x01, 0x00, 0x00, 0xe0, 0x00, 
+  0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0xb0, 0x01, 0x00, 0x00, 0x18, 
+  0x03, 0x00, 0x00, 0x0c, 0x06, 0x00, 0x00, 0x06, 0x0c, 0x00, 0x00, 
+  0x03, 0x18, 0x00, 0x00, 0xc0, 0x0f, 0x02, 0x00, 0xf0, 0x3f, 0x03, 
+  0x00, 0x78, 0xf8, 0x01, 0x00, 0x1c, 0xe0, 0x00, 0x00, 0x0c, 0xe0, 
+  0x00, 0x00, 0x0e, 0xb0, 0x01, 0x00, 0x06, 0x98, 0x01, 0x00, 0x06, 
+  0x8c, 0x01, 0x00, 0x06, 0x86, 0x01, 0x00, 0x06, 0x83, 0x01, 0x00, 
+  0x86, 0x81, 0x01, 0x00, 0xc6, 0x80, 0x01, 0x00, 0x66, 0x80, 0x01, 
+  0x00, 0x36, 0xc0, 0x01, 0x00, 0x1c, 0xc0, 0x00, 0x00, 0x1c, 0xe0, 
+  0x00, 0x00, 0x7e, 0x78, 0x00, 0x00, 0xf3, 0x3f, 0x00, 0x00, 0xc1, 
+  0x0f, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 
+  0xc0, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 
+  0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 
+  0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 
+  0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 
+  0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 
+  0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x06, 0x18, 0x00, 0x00, 0x0e, 
+  0x1c, 0x00, 0x00, 0xfc, 0x0f, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 
+  0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x80, 0x01, 0x00, 
+  0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 
+  0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 
+  0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 
+  0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 
+  0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 
+  0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 
+  0x30, 0x00, 0x00, 0x06, 0x18, 0x00, 0x00, 0x0e, 0x1c, 0x00, 0x00, 
+  0xfc, 0x0f, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0xc0, 0x00, 0x00, 
+  0x00, 0xe0, 0x01, 0x00, 0x00, 0x30, 0x03, 0x00, 0x00, 0x18, 0x06, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 
+  0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 
+  0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 
+  0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 
+  0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 
+  0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 
+  0x06, 0x18, 0x00, 0x00, 0x0e, 0x1c, 0x00, 0x00, 0xfc, 0x0f, 0x00, 
+  0x00, 0xf0, 0x03, 0x00, 0x00, 0x30, 0x03, 0x00, 0x00, 0x30, 0x03, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 
+  0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 
+  0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 
+  0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 
+  0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 
+  0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 
+  0x03, 0x30, 0x00, 0x00, 0x06, 0x18, 0x00, 0x00, 0x0e, 0x1c, 0x00, 
+  0x00, 0xfc, 0x0f, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0x00, 0x06, 
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xc0, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 
+  0x07, 0x38, 0x00, 0x00, 0x06, 0x18, 0x00, 0x00, 0x0e, 0x1c, 0x00, 
+  0x00, 0x0c, 0x0c, 0x00, 0x00, 0x1c, 0x0e, 0x00, 0x00, 0x18, 0x06, 
+  0x00, 0x00, 0x38, 0x07, 0x00, 0x00, 0x30, 0x03, 0x00, 0x00, 0xf0, 
+  0x03, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 
+  0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 
+  0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 
+  0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0xff, 0x07, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0x03, 0x0c, 0x00, 
+  0x00, 0x03, 0x18, 0x00, 0x00, 0x03, 0x18, 0x00, 0x00, 0x03, 0x18, 
+  0x00, 0x00, 0x03, 0x18, 0x00, 0x00, 0x03, 0x0c, 0x00, 0x00, 0xff, 
+  0x0f, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0xfe, 0x00, 
+  0x00, 0x00, 0xc7, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x83, 
+  0x01, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 
+  0xe3, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0xf3, 0x00, 0x00, 
+  0x00, 0xc3, 0x01, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x03, 0x03, 
+  0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x83, 
+  0x01, 0x00, 0x00, 0xc3, 0x01, 0x00, 0x00, 0xf3, 0x00, 0x00, 0x00, 
+  0x73, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 
+  0x00, 0x60, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x86, 
+  0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0xe0, 0x03, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x1e, 0x03, 0x00, 
+  0x00, 0x07, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x83, 0x03, 
+  0x00, 0x00, 0xc7, 0x03, 0x00, 0x00, 0x7e, 0x07, 0x00, 0x00, 0x3c, 
+  0x06, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 
+  0x60, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0xf8, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x86, 0x03, 
+  0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xe0, 
+  0x03, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x1e, 0x03, 0x00, 0x00, 
+  0x07, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x83, 0x03, 0x00, 
+  0x00, 0xc7, 0x03, 0x00, 0x00, 0x7e, 0x07, 0x00, 0x00, 0x3c, 0x06, 
+  0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x98, 
+  0x01, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0xf8, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x86, 0x03, 0x00, 
+  0x00, 0x06, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xe0, 0x03, 
+  0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x1e, 0x03, 0x00, 0x00, 0x07, 
+  0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x83, 0x03, 0x00, 0x00, 
+  0xc7, 0x03, 0x00, 0x00, 0x7e, 0x07, 0x00, 0x00, 0x3c, 0x06, 0x00, 
+  0x00, 0x38, 0x02, 0x00, 0x00, 0x6c, 0x03, 0x00, 0x00, 0xc4, 0x01, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 
+  0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x86, 0x03, 0x00, 0x00, 
+  0x06, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xe0, 0x03, 0x00, 
+  0x00, 0xfc, 0x03, 0x00, 0x00, 0x1e, 0x03, 0x00, 0x00, 0x07, 0x03, 
+  0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x83, 0x03, 0x00, 0x00, 0xc7, 
+  0x03, 0x00, 0x00, 0x7e, 0x07, 0x00, 0x00, 0x3c, 0x06, 0x00, 0x00, 
+  0x98, 0x01, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfc, 0x01, 
+  0x00, 0x00, 0x86, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 
+  0x1e, 0x03, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 
+  0x00, 0x83, 0x03, 0x00, 0x00, 0xc7, 0x03, 0x00, 0x00, 0x7e, 0x07, 
+  0x00, 0x00, 0x3c, 0x06, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xd8, 
+  0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 
+  0x70, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 
+  0x00, 0x86, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x1e, 
+  0x03, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 
+  0x83, 0x03, 0x00, 0x00, 0xc7, 0x03, 0x00, 0x00, 0x7e, 0x07, 0x00, 
+  0x00, 0x3c, 0x06, 0x00, 0x00, 0xf8, 0x70, 0x00, 0x00, 0xfc, 0xfd, 
+  0x01, 0x00, 0x86, 0x8f, 0x03, 0x00, 0x06, 0x07, 0x03, 0x00, 0x00, 
+  0x03, 0x06, 0x00, 0xe0, 0x03, 0x06, 0x00, 0xfc, 0xff, 0x07, 0x00, 
+  0x1e, 0xff, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 
+  0x00, 0x83, 0x07, 0x06, 0x00, 0xc7, 0x0f, 0x07, 0x00, 0x7e, 0xfc, 
+  0x03, 0x00, 0x3c, 0xf0, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfc, 
+  0x01, 0x00, 0x00, 0x8e, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x8e, 0x03, 0x00, 0x00, 0xfc, 
+  0x01, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 
+  0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 
+  0x00, 0x38, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x30, 0x00, 
+  0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 
+  0x8e, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x03, 0x06, 0x00, 
+  0x00, 0x03, 0x06, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0xff, 0x07, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 
+  0x06, 0x00, 0x00, 0x0e, 0x07, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 
+  0xf0, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xc0, 0x00, 0x00, 
+  0x00, 0x60, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x8e, 
+  0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 
+  0x03, 0x06, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0xff, 0x07, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x06, 
+  0x00, 0x00, 0x0e, 0x07, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0xf0, 
+  0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 
+  0x98, 0x01, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x70, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x8e, 0x03, 
+  0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 
+  0x06, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 
+  0x00, 0x0e, 0x07, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0xf0, 0x00, 
+  0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 
+  0xfc, 0x01, 0x00, 0x00, 0x8e, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 
+  0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0xff, 0x07, 
+  0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x0e, 0x07, 0x00, 0x00, 
+  0xfc, 0x03, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x06, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x18, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 
+  0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 
+  0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 
+  0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 
+  0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 
+  0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 
+  0x0c, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 
+  0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 
+  0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 
+  0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 
+  0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 
+  0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3c, 
+  0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 
+  0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 
+  0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 
+  0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 
+  0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 
+  0x00, 0x18, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x33, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 
+  0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 
+  0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 
+  0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 
+  0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 
+  0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 
+  0x07, 0x00, 0x00, 0x00, 0x8e, 0x01, 0x00, 0x00, 0x78, 0x00, 0x00, 
+  0x00, 0x3c, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0xf8, 0x00, 
+  0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x8e, 0x03, 0x00, 0x00, 0x06, 
+  0x03, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 
+  0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 
+  0x00, 0x03, 0x06, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x8e, 0x03, 
+  0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x1c, 
+  0x01, 0x00, 0x00, 0xb6, 0x01, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0xfb, 0x01, 0x00, 
+  0x00, 0x8f, 0x01, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0x03, 0x03, 
+  0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 
+  0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 
+  0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 
+  0x00, 0x03, 0x03, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x30, 0x00, 
+  0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 
+  0x8e, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x03, 0x06, 0x00, 
+  0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 
+  0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x06, 
+  0x03, 0x00, 0x00, 0x8e, 0x03, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 
+  0xf8, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xc0, 0x00, 0x00, 
+  0x00, 0x60, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x8e, 
+  0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 
+  0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 
+  0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x06, 0x03, 
+  0x00, 0x00, 0x8e, 0x03, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0xf8, 
+  0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 
+  0x98, 0x01, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0xf8, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x8e, 0x03, 
+  0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 
+  0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 
+  0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x06, 0x03, 0x00, 
+  0x00, 0x8e, 0x03, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0xf8, 0x00, 
+  0x00, 0x00, 0x38, 0x02, 0x00, 0x00, 0x6c, 0x03, 0x00, 0x00, 0xc4, 
+  0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 
+  0xfc, 0x01, 0x00, 0x00, 0x8e, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 
+  0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 
+  0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 
+  0x06, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x8e, 0x03, 0x00, 0x00, 
+  0xfc, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x8c, 0x01, 0x00, 
+  0x00, 0x8c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x8e, 
+  0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 
+  0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 
+  0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x06, 0x03, 
+  0x00, 0x00, 0x8e, 0x03, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0xf8, 
+  0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 
+  0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0xff, 0x0f, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 
+  0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xf0, 0x19, 0x00, 0x00, 
+  0xf8, 0x0f, 0x00, 0x00, 0x1c, 0x07, 0x00, 0x00, 0x0c, 0x06, 0x00, 
+  0x00, 0x06, 0x0f, 0x00, 0x00, 0x86, 0x0d, 0x00, 0x00, 0xc6, 0x0c, 
+  0x00, 0x00, 0x66, 0x0c, 0x00, 0x00, 0x66, 0x0c, 0x00, 0x00, 0x36, 
+  0x0c, 0x00, 0x00, 0x1c, 0x06, 0x00, 0x00, 0x0c, 0x07, 0x00, 0x00, 
+  0xfe, 0x03, 0x00, 0x00, 0xf3, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 
+  0x00, 0x18, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x60, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 
+  0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 
+  0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 
+  0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 
+  0x00, 0x00, 0x83, 0x03, 0x00, 0x00, 0xc6, 0x03, 0x00, 0x00, 0x7e, 
+  0x03, 0x00, 0x00, 0x38, 0x03, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 
+  0xc0, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 
+  0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 
+  0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 
+  0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 
+  0x00, 0x83, 0x03, 0x00, 0x00, 0xc6, 0x03, 0x00, 0x00, 0x7e, 0x03, 
+  0x00, 0x00, 0x38, 0x03, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x78, 
+  0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0x86, 0x01, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 
+  0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 
+  0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 
+  0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 
+  0x83, 0x03, 0x00, 0x00, 0xc6, 0x03, 0x00, 0x00, 0x7e, 0x03, 0x00, 
+  0x00, 0x38, 0x03, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 
+  0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 
+  0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 
+  0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 
+  0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x83, 0x03, 0x00, 0x00, 0xc6, 
+  0x03, 0x00, 0x00, 0x7e, 0x03, 0x00, 0x00, 0x38, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xc0, 0x00, 0x00, 
+  0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0c, 
+  0x00, 0x00, 0x03, 0x0c, 0x00, 0x00, 0x06, 0x0c, 0x00, 0x00, 0x0e, 
+  0x06, 0x00, 0x00, 0x0c, 0x06, 0x00, 0x00, 0x1c, 0x07, 0x00, 0x00, 
+  0x18, 0x03, 0x00, 0x00, 0x18, 0x03, 0x00, 0x00, 0xb0, 0x01, 0x00, 
+  0x00, 0xb0, 0x01, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0xe0, 0x00, 
+  0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x60, 
+  0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 
+  0x3c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf3, 0x00, 0x00, 0x00, 0xfb, 
+  0x01, 0x00, 0x00, 0x8f, 0x03, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 
+  0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 
+  0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 
+  0x00, 0x00, 0x07, 0x03, 0x00, 0x00, 0x8f, 0x03, 0x00, 0x00, 0xfb, 
+  0x01, 0x00, 0x00, 0xf3, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x98, 0x01, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 
+  0x0c, 0x00, 0x00, 0x03, 0x0c, 0x00, 0x00, 0x06, 0x0c, 0x00, 0x00, 
+  0x0e, 0x06, 0x00, 0x00, 0x0c, 0x06, 0x00, 0x00, 0x1c, 0x07, 0x00, 
+  0x00, 0x18, 0x03, 0x00, 0x00, 0x18, 0x03, 0x00, 0x00, 0xb0, 0x01, 
+  0x00, 0x00, 0xb0, 0x01, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0xe0, 
+  0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 
+  0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 
+  0x00, 0x3c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x18, 0x00, 
+  0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 
+  0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 
+  0x38, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 
+  0x00, 0x1e, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x18, 0x00, 
+  0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 
+  0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 
+  0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xe0, 0xfb, 0x1f, 
+  0x00, 0xf8, 0xff, 0x1f, 0x00, 0x3c, 0x1c, 0x00, 0x00, 0x0e, 0x18, 
+  0x00, 0x00, 0x06, 0x18, 0x00, 0x00, 0x07, 0x18, 0x00, 0x00, 0x03, 
+  0x18, 0x00, 0x00, 0x03, 0x18, 0x00, 0x00, 0x03, 0x18, 0x00, 0x00, 
+  0x03, 0xf8, 0x1f, 0x00, 0x03, 0xf8, 0x1f, 0x00, 0x03, 0x18, 0x00, 
+  0x00, 0x03, 0x18, 0x00, 0x00, 0x07, 0x18, 0x00, 0x00, 0x06, 0x18, 
+  0x00, 0x00, 0x0e, 0x18, 0x00, 0x00, 0x3c, 0x1c, 0x00, 0x00, 0xf8, 
+  0xff, 0x1f, 0x00, 0xe0, 0xfb, 0x1f, 0x00, 0x0c, 0x03, 0x00, 0x00, 
+  0x98, 0x01, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0xfc, 0x07, 
+  0x00, 0x00, 0x0e, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 
+  0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 
+  0xf0, 0x0f, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x18, 0x00, 
+  0x00, 0x03, 0x18, 0x00, 0x00, 0x07, 0x0c, 0x00, 0x00, 0xfe, 0x0f, 
+  0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x98, 
+  0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x03, 0x0c, 0x00, 0x00, 0x07, 0x0e, 0x00, 
+  0x00, 0x0e, 0x07, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x98, 0x01, 
+  0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x60, 
+  0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 
+  0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 
+  0x00, 0x60, 0x00, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x98, 0x01, 
+  0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 
+  0x00, 0x1c, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x07, 0x00, 
+  0x00, 0x80, 0x03, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x70, 0x00, 
+  0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x0e, 
+  0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 
+  0xff, 0x1f, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 
+  0x00, 0x7e, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x06, 0x00, 
+  0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 
+  0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 
+  0x66, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 
+  0x00, 0x18, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x66, 0x00, 
+  0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 
+  0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 
+  0x60, 0x00, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xff, 0x0f, 0x00, 
+  0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 
+  0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 
+  0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 
+  0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 
+  0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 
+  0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 
+  0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 
+  0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 
+  0x00, 0xff, 0x0f, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0x60, 0x00, 
+  0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 
+  0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 
+  0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 
+  0x00, 0x60, 0x00, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xff, 0x0f, 
+  0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 
+  0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x03, 
+  0x03, 0x00, 0x03, 0x03, 0x03, 0x00, 0x03, 0x03, 0x03, 0x00, 0xff, 
+  0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0x3f, 0x00, 0x00, 
+  0xff, 0x3f, 0x00, 0x00, 0x38, 0x03, 0x00, 0x00, 0x3c, 0x03, 0x00, 
+  0x00, 0x0c, 0x03, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 
+  0x00, 0x00, 0x3f, 0x03, 0x00, 0x00, 0x3f, 0x03, 0x00, 0x00, 0x0c, 
+  0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 
+  0x0c, 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 
+  0x00, 0x0c, 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x0c, 0x03, 
+  0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x0c, 
+  0x03, 0x00, 0x00, 0x38, 0x03, 0x00, 0x00, 0x3c, 0x03, 0x00, 0x00, 
+  0x0c, 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 
+  0x00, 0x3f, 0x03, 0x00, 0x00, 0x3f, 0x03, 0x00, 0x00, 0x0c, 0x03, 
+  0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x0c, 
+  0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 
+  0x0c, 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 
+  0x00, 0x0c, 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x0c, 0x03, 
+  0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0xe0, 
+  0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 
+  0x60, 0x00, 0x00, 0x00, 0xfe, 0x03, 0x00, 0x00, 0xfe, 0x03, 0x00, 
+  0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 
+  0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 
+  0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 
+  0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 
+  0x00, 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x0f, 0x00, 
+  0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 
+  0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 
+  0x00, 0x60, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 
+  0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0c, 
+  0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 
+  0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0c, 0x00, 
+  0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0c, 
+  0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 
+  0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 
+  0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 
+  0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 
+  0x00, 0x1b, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 
+  0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 
+  0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 
+  0x3c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 
+  0x00, 0x0f, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 
+  0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 
+  0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 
+  0x0c, 0x00, 0x00, 0x00, 0xf8, 0xe0, 0x00, 0x00, 0xfc, 0xf9, 0x03, 
+  0x00, 0x8e, 0x1f, 0x07, 0x00, 0x06, 0x0f, 0x06, 0x00, 0x03, 0x06, 
+  0x0c, 0x00, 0x03, 0x06, 0x0c, 0x00, 0x03, 0xfe, 0x0f, 0x00, 0x03, 
+  0xfe, 0x0f, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 
+  0x06, 0x0f, 0x0c, 0x00, 0x8e, 0x1f, 0x0e, 0x00, 0xfc, 0xf9, 0x07, 
+  0x00, 0xf8, 0xe0, 0x01, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x06, 0x00, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1f, 
+  0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x1c, 0x0c, 0x00, 0x00, 
+  0x3e, 0x06, 0x00, 0x00, 0x63, 0x06, 0x00, 0x00, 0x63, 0x03, 0x00, 
+  0x00, 0x63, 0x03, 0x00, 0x00, 0xbe, 0x01, 0x00, 0x00, 0x9c, 0x01, 
+  0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x60, 
+  0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x30, 0x07, 0x07, 0x00, 
+  0xb8, 0x8f, 0x0f, 0x00, 0xd8, 0xd8, 0x18, 0x00, 0xcc, 0xd8, 0x18, 
+  0x00, 0xcc, 0xd8, 0x18, 0x00, 0x86, 0x8f, 0x0f, 0x00, 0x06, 0x07, 
+  0x07, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x1b, 
+  0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 
+  0x09, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 
+  0x00, 0x09, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x1b, 0x00, 
+  0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x1b, 
+  0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 
+  0x12, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 
+  0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 
+  0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
+  0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 
+  0x00, 0x06, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x09, 0x00, 
+  0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x86, 
+  0x01, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 
+  0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 
+  0x00, 0xfe, 0x00, 0x00, 0x00, 0xc7, 0x01, 0x00, 0x00, 0x83, 0x01, 
+  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xfe, 
+  0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 
+  0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x87, 0x03, 0x00, 
+  0x00, 0xfe, 0x01, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x8e, 0x00, 
+  0x00, 0x00, 0xdb, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0xff, 
+  0x06, 0x06, 0x00, 0xff, 0x0e, 0x07, 0x00, 0x18, 0x0e, 0x07, 0x00, 
+  0x18, 0x9e, 0x07, 0x00, 0x18, 0x96, 0x06, 0x00, 0x18, 0xf6, 0x06, 
+  0x00, 0x18, 0x66, 0x06, 0x00, 0x18, 0x66, 0x06, 0x00, 0x18, 0x66, 
+  0x06, 0x00, 0x18, 0x66, 0x06, 0x00, 0x86, 0x01, 0x00, 0x00, 0xcc, 
+  0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff, 0x03, 0x00, 
+  0x00, 0x80, 0x01, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xe0, 0x00, 
+  0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x38, 
+  0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 
+  0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xff, 0x03, 0x00, 
+  0x00, 0xff, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 
+  0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 
+  0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x06, 0x00, 
+  0x07, 0x00, 0x08, 0x00, 0x09, 0x00, 0x0a, 0x00, 0x0b, 0x00, 0x0c, 
+  0x00, 0x0d, 0x00, 0x0e, 0x00, 0x0f, 0x00, 0x10, 0x00, 0x11, 0x00, 
+  0x12, 0x00, 0x13, 0x00, 0x14, 0x00, 0x15, 0x00, 0x16, 0x00, 0x17, 
+  0x00, 0x18, 0x00, 0x19, 0x00, 0x1a, 0x00, 0x1b, 0x00, 0x1c, 0x00, 
+  0x1d, 0x00, 0x1e, 0x00, 0x1f, 0x00, 0x20, 0x00, 0x21, 0x00, 0x22, 
+  0x00, 0x23, 0x00, 0x24, 0x00, 0x25, 0x00, 0x26, 0x00, 0x27, 0x00, 
+  0x28, 0x00, 0x29, 0x00, 0x2a, 0x00, 0x2b, 0x00, 0x2c, 0x00, 0x2d, 
+  0x00, 0x2e, 0x00, 0x2f, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 
+  0x33, 0x00, 0x34, 0x00, 0x35, 0x00, 0x36, 0x00, 0x37, 0x00, 0x38, 
+  0x00, 0x39, 0x00, 0x3a, 0x00, 0x3b, 0x00, 0x3c, 0x00, 0x3d, 0x00, 
+  0x3e, 0x00, 0x3f, 0x00, 0x40, 0x00, 0x41, 0x00, 0x42, 0x00, 0x43, 
+  0x00, 0x44, 0x00, 0x45, 0x00, 0x46, 0x00, 0x47, 0x00, 0x48, 0x00, 
+  0x49, 0x00, 0x4a, 0x00, 0x4b, 0x00, 0x4c, 0x00, 0x4d, 0x00, 0x4e, 
+  0x00, 0x4f, 0x00, 0x50, 0x00, 0x51, 0x00, 0x52, 0x00, 0x53, 0x00, 
+  0x54, 0x00, 0x55, 0x00, 0x56, 0x00, 0x57, 0x00, 0x58, 0x00, 0x59, 
+  0x00, 0x5a, 0x00, 0x5b, 0x00, 0x5c, 0x00, 0x5d, 0x00, 0x5e, 0x00, 
+  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+  0x5f, 0x00, 0x60, 0x00, 0x61, 0x00, 0x62, 0x00, 0x63, 0x00, 0x64, 
+  0x00, 0x65, 0x00, 0x66, 0x00, 0x67, 0x00, 0x68, 0x00, 0x69, 0x00, 
+  0x6a, 0x00, 0x6b, 0x00, 0x6c, 0x00, 0x6d, 0x00, 0x6e, 0x00, 0x6f, 
+  0x00, 0x70, 0x00, 0x71, 0x00, 0x72, 0x00, 0x73, 0x00, 0x74, 0x00, 
+  0x75, 0x00, 0x76, 0x00, 0x77, 0x00, 0x78, 0x00, 0x79, 0x00, 0x7a, 
+  0x00, 0x7b, 0x00, 0x7c, 0x00, 0x7d, 0x00, 0x7e, 0x00, 0x7f, 0x00, 
+  0x80, 0x00, 0x81, 0x00, 0x82, 0x00, 0x83, 0x00, 0x84, 0x00, 0x85, 
+  0x00, 0x86, 0x00, 0x87, 0x00, 0x88, 0x00, 0x89, 0x00, 0x8a, 0x00, 
+  0x8b, 0x00, 0x8c, 0x00, 0x8d, 0x00, 0x8e, 0x00, 0x8f, 0x00, 0x90, 
+  0x00, 0x91, 0x00, 0x92, 0x00, 0x93, 0x00, 0x94, 0x00, 0x95, 0x00, 
+  0x96, 0x00, 0x97, 0x00, 0x98, 0x00, 0x99, 0x00, 0x9a, 0x00, 0x9b, 
+  0x00, 0x9c, 0x00, 0x9d, 0x00, 0x9e, 0x00, 0x9f, 0x00, 0xa0, 0x00, 
+  0xa1, 0x00, 0xa2, 0x00, 0xa3, 0x00, 0xa4, 0x00, 0xa5, 0x00, 0xa6, 
+  0x00, 0xa7, 0x00, 0xa8, 0x00, 0xa9, 0x00, 0xaa, 0x00, 0xab, 0x00, 
+  0xac, 0x00, 0xad, 0x00, 0xae, 0x00, 0xaf, 0x00, 0xb0, 0x00, 0xb1, 
+  0x00, 0xb2, 0x00, 0xb3, 0x00, 0xb4, 0x00, 0xb5, 0x00, 0xb6, 0x00, 
+  0xb7, 0x00, 0xb8, 0x00, 0xb9, 0x00, 0xba, 0x00, 0xbb, 0x00, 0xbc, 
+  0x00, 0xbd, 0x00, 0xbe, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 
+  0xe5, 0x00, 0x00, 0x00, 0x16, 0x01, 0x00, 0x00, 0x16, 0x01, 0x00, 
+  0x00, 0x63, 0x01, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 0x2c, 0x02, 
+  0x00, 0x00, 0x79, 0x03, 0x00, 0x00, 0x9b, 0x02, 0x00, 0x00, 0xde, 
+  0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 
+  0x85, 0x01, 0x00, 0x00, 0x48, 0x02, 0x00, 0x00, 0x16, 0x01, 0x00, 
+  0x00, 0x48, 0x02, 0x00, 0x00, 0x16, 0x01, 0x00, 0x00, 0x16, 0x01, 
+  0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 0x2c, 
+  0x02, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 
+  0x2c, 0x02, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 0x2c, 0x02, 0x00, 
+  0x00, 0x2c, 0x02, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 0x16, 0x01, 
+  0x00, 0x00, 0x16, 0x01, 0x00, 0x00, 0x48, 0x02, 0x00, 0x00, 0x48, 
+  0x02, 0x00, 0x00, 0x48, 0x02, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 
+  0xf7, 0x03, 0x00, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x9b, 0x02, 0x00, 
+  0x00, 0xd2, 0x02, 0x00, 0x00, 0xd2, 0x02, 0x00, 0x00, 0x9b, 0x02, 
+  0x00, 0x00, 0x63, 0x02, 0x00, 0x00, 0x0a, 0x03, 0x00, 0x00, 0xd2, 
+  0x02, 0x00, 0x00, 0x16, 0x01, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 
+  0x9b, 0x02, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 0x41, 0x03, 0x00, 
+  0x00, 0xd2, 0x02, 0x00, 0x00, 0x0a, 0x03, 0x00, 0x00, 0x9b, 0x02, 
+  0x00, 0x00, 0x0a, 0x03, 0x00, 0x00, 0xd2, 0x02, 0x00, 0x00, 0x9b, 
+  0x02, 0x00, 0x00, 0x63, 0x02, 0x00, 0x00, 0xd2, 0x02, 0x00, 0x00, 
+  0x9b, 0x02, 0x00, 0x00, 0xb0, 0x03, 0x00, 0x00, 0x9b, 0x02, 0x00, 
+  0x00, 0x9b, 0x02, 0x00, 0x00, 0x63, 0x02, 0x00, 0x00, 0x16, 0x01, 
+  0x00, 0x00, 0x16, 0x01, 0x00, 0x00, 0x16, 0x01, 0x00, 0x00, 0xd5, 
+  0x01, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 0xde, 0x00, 0x00, 0x00, 
+  0x2c, 0x02, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 0xf4, 0x01, 0x00, 
+  0x00, 0x2c, 0x02, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 0x16, 0x01, 
+  0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 0xde, 
+  0x00, 0x00, 0x00, 0xde, 0x00, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 
+  0xde, 0x00, 0x00, 0x00, 0x41, 0x03, 0x00, 0x00, 0x2c, 0x02, 0x00, 
+  0x00, 0x2c, 0x02, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 0x2c, 0x02, 
+  0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x16, 
+  0x01, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 
+  0xd2, 0x02, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0xf4, 0x01, 0x00, 
+  0x00, 0xf4, 0x01, 0x00, 0x00, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x01, 
+  0x00, 0x00, 0x4e, 0x01, 0x00, 0x00, 0x48, 0x02, 0x00, 0x00, 0x16, 
+  0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 
+  0x2c, 0x02, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 0x2c, 0x02, 0x00, 
+  0x00, 0x04, 0x01, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x01, 
+  0x00, 0x00, 0xe1, 0x02, 0x00, 0x00, 0x72, 0x01, 0x00, 0x00, 0x2c, 
+  0x02, 0x00, 0x00, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 
+  0xe1, 0x02, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 
+  0x00, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x4d, 0x01, 
+  0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 0x19, 
+  0x02, 0x00, 0x00, 0x16, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 
+  0x4d, 0x01, 0x00, 0x00, 0x6d, 0x01, 0x00, 0x00, 0x2c, 0x02, 0x00, 
+  0x00, 0x42, 0x03, 0x00, 0x00, 0x42, 0x03, 0x00, 0x00, 0x42, 0x03, 
+  0x00, 0x00, 0x63, 0x02, 0x00, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x9b, 
+  0x02, 0x00, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x9b, 0x02, 0x00, 0x00, 
+  0x9b, 0x02, 0x00, 0x00, 0x9b, 0x02, 0x00, 0x00, 0xe8, 0x03, 0x00, 
+  0x00, 0xd2, 0x02, 0x00, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x9b, 0x02, 
+  0x00, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x16, 
+  0x01, 0x00, 0x00, 0x16, 0x01, 0x00, 0x00, 0x16, 0x01, 0x00, 0x00, 
+  0x16, 0x01, 0x00, 0x00, 0xd2, 0x02, 0x00, 0x00, 0xd2, 0x02, 0x00, 
+  0x00, 0x0a, 0x03, 0x00, 0x00, 0x0a, 0x03, 0x00, 0x00, 0x0a, 0x03, 
+  0x00, 0x00, 0x0a, 0x03, 0x00, 0x00, 0x0a, 0x03, 0x00, 0x00, 0x48, 
+  0x02, 0x00, 0x00, 0x0a, 0x03, 0x00, 0x00, 0xd2, 0x02, 0x00, 0x00, 
+  0xd2, 0x02, 0x00, 0x00, 0xd2, 0x02, 0x00, 0x00, 0xd2, 0x02, 0x00, 
+  0x00, 0x9b, 0x02, 0x00, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x63, 0x02, 
+  0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 0x2c, 
+  0x02, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 
+  0x2c, 0x02, 0x00, 0x00, 0x79, 0x03, 0x00, 0x00, 0xf4, 0x01, 0x00, 
+  0x00, 0x2c, 0x02, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 0x2c, 0x02, 
+  0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 0x16, 0x01, 0x00, 0x00, 0x16, 
+  0x01, 0x00, 0x00, 0x16, 0x01, 0x00, 0x00, 0x16, 0x01, 0x00, 0x00, 
+  0x2c, 0x02, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 0x2c, 0x02, 0x00, 
+  0x00, 0x2c, 0x02, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 0x2c, 0x02, 
+  0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 0x48, 0x02, 0x00, 0x00, 0x63, 
+  0x02, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 
+  0x2c, 0x02, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 0xf4, 0x01, 0x00, 
+  0x00, 0x2c, 0x02, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x2c, 0x02, 
+  0x00, 0x00, 0xe8, 0x03, 0x00, 0x00, 0x9b, 0x02, 0x00, 0x00, 0x9b, 
+  0x02, 0x00, 0x00, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 
+  0x5e, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 
+  0x00, 0x2c, 0x02, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x01, 
+  0x00, 0x00, 0x16, 0x01, 0x00, 0x00, 0xe8, 0x03, 0x00, 0x00, 0xe8, 
+  0x03, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 
+  0xf4, 0x01, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 0xa7, 0x00, 0x00, 
+  0x00, 0x4d, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x4d, 0x01, 
+  0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0xde, 0x00, 0x00, 0x00, 0xb0, 
+  0x03, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0xe8, 0x03, 0x00, 0x00, 
+  0x4d, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 
+  0x00, 0xde, 0x00, 0x00, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x4d, 0x01, 
+  0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0xe8, 
+  0x03, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 
+  0xe5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 
+  0x00, 0x0d, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x21, 0x00, 
+  0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x3a, 
+  0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 
+  0x5a, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 
+  0x00, 0x6e, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x7b, 0x00, 
+  0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x8a, 
+  0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 
+  0x99, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, 0xa2, 0x00, 0x00, 
+  0x00, 0xa8, 0x00, 0x00, 0x00, 0xae, 0x00, 0x00, 0x00, 0xb3, 0x00, 
+  0x00, 0x00, 0xb9, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0xc8, 
+  0x00, 0x00, 0x00, 0xce, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x00, 0x00, 
+  0xdf, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 
+  0x00, 0xe6, 0x00, 0x00, 0x00, 0xe8, 0x00, 0x00, 0x00, 0xea, 0x00, 
+  0x00, 0x00, 0xec, 0x00, 0x00, 0x00, 0xee, 0x00, 0x00, 0x00, 0xf0, 
+  0x00, 0x00, 0x00, 0xf2, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 
+  0xf6, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x00, 
+  0x00, 0xfc, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x01, 
+  0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x06, 
+  0x01, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x0a, 0x01, 0x00, 0x00, 
+  0x0c, 0x01, 0x00, 0x00, 0x0e, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 
+  0x00, 0x12, 0x01, 0x00, 0x00, 0x14, 0x01, 0x00, 0x00, 0x16, 0x01, 
+  0x00, 0x00, 0x22, 0x01, 0x00, 0x00, 0x2c, 0x01, 0x00, 0x00, 0x39, 
+  0x01, 0x00, 0x00, 0x45, 0x01, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00, 
+  0x5a, 0x01, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00, 0x5e, 0x01, 0x00, 
+  0x00, 0x60, 0x01, 0x00, 0x00, 0x62, 0x01, 0x00, 0x00, 0x64, 0x01, 
+  0x00, 0x00, 0x66, 0x01, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00, 0x6a, 
+  0x01, 0x00, 0x00, 0x6c, 0x01, 0x00, 0x00, 0x6e, 0x01, 0x00, 0x00, 
+  0x70, 0x01, 0x00, 0x00, 0x72, 0x01, 0x00, 0x00, 0x74, 0x01, 0x00, 
+  0x00, 0x76, 0x01, 0x00, 0x00, 0x78, 0x01, 0x00, 0x00, 0x7a, 0x01, 
+  0x00, 0x00, 0x7c, 0x01, 0x00, 0x00, 0x7e, 0x01, 0x00, 0x00, 0x80, 
+  0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x84, 0x01, 0x00, 0x00, 
+  0x86, 0x01, 0x00, 0x00, 0x88, 0x01, 0x00, 0x00, 0x8a, 0x01, 0x00, 
+  0x00, 0x8c, 0x01, 0x00, 0x00, 0x8e, 0x01, 0x00, 0x00, 0x98, 0x01, 
+  0x00, 0x00, 0x9c, 0x01, 0x00, 0x00, 0xa7, 0x01, 0x00, 0x00, 0xb2, 
+  0x01, 0x00, 0x00, 0xb8, 0x01, 0x00, 0x00, 0xc3, 0x01, 0x00, 0x00, 
+  0xc8, 0x01, 0x00, 0x00, 0xd1, 0x01, 0x00, 0x00, 0xda, 0x01, 0x00, 
+  0x00, 0xde, 0x01, 0x00, 0x00, 0xe8, 0x01, 0x00, 0x00, 0xf0, 0x01, 
+  0x00, 0x00, 0xf9, 0x01, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x0f, 
+  0x02, 0x00, 0x00, 0x1d, 0x02, 0x00, 0x00, 0x28, 0x02, 0x00, 0x00, 
+  0x2f, 0x02, 0x00, 0x00, 0x3a, 0x02, 0x00, 0x00, 0x41, 0x02, 0x00, 
+  0x00, 0x48, 0x02, 0x00, 0x00, 0x52, 0x02, 0x00, 0x00, 0x5e, 0x02, 
+  0x00, 0x00, 0x6c, 0x02, 0x00, 0x00, 0x72, 0x02, 0x00, 0x00, 0x75, 
+  0x02, 0x00, 0x00, 0x7f, 0x02, 0x00, 0x00, 0x8e, 0x02, 0x00, 0x00, 
+  0x96, 0x02, 0x00, 0x00, 0xa2, 0x02, 0x00, 0x00, 0xaf, 0x02, 0x00, 
+  0x00, 0xbe, 0x02, 0x00, 0x00, 0xc9, 0x02, 0x00, 0x00, 0xd1, 0x02, 
+  0x00, 0x00, 0xdf, 0x02, 0x00, 0x00, 0xec, 0x02, 0x00, 0x00, 0xf3, 
+  0x02, 0x00, 0x00, 0xfa, 0x02, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 
+  0x0d, 0x03, 0x00, 0x00, 0x17, 0x03, 0x00, 0x00, 0x1d, 0x03, 0x00, 
+  0x00, 0x20, 0x03, 0x00, 0x00, 0x29, 0x03, 0x00, 0x00, 0x30, 0x03, 
+  0x00, 0x00, 0x37, 0x03, 0x00, 0x00, 0x43, 0x03, 0x00, 0x00, 0x4d, 
+  0x03, 0x00, 0x00, 0x54, 0x03, 0x00, 0x00, 0x5b, 0x03, 0x00, 0x00, 
+  0x67, 0x03, 0x00, 0x00, 0x71, 0x03, 0x00, 0x00, 0x75, 0x03, 0x00, 
+  0x00, 0x7c, 0x03, 0x00, 0x00, 0x83, 0x03, 0x00, 0x00, 0x8a, 0x03, 
+  0x00, 0x00, 0x96, 0x03, 0x00, 0x00, 0x9d, 0x03, 0x00, 0x00, 0xa7, 
+  0x03, 0x00, 0x00, 0xb0, 0x03, 0x00, 0x00, 0xb7, 0x03, 0x00, 0x00, 
+  0xbe, 0x03, 0x00, 0x00, 0xc5, 0x03, 0x00, 0x00, 0xd1, 0x03, 0x00, 
+  0x00, 0xdb, 0x03, 0x00, 0x00, 0xe2, 0x03, 0x00, 0x00, 0xe8, 0x03, 
+  0x00, 0x00, 0xf3, 0x03, 0x00, 0x00, 0xfa, 0x03, 0x00, 0x00, 0x01, 
+  0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x14, 0x04, 0x00, 0x00, 
+  0x1e, 0x04, 0x00, 0x00, 0x24, 0x04, 0x00, 0x00, 0x27, 0x04, 0x00, 
+  0x00, 0x30, 0x04, 0x00, 0x00, 0x37, 0x04, 0x00, 0x00, 0x3e, 0x04, 
+  0x00, 0x00, 0x4a, 0x04, 0x00, 0x00, 0x54, 0x04, 0x00, 0x00, 0x5b, 
+  0x04, 0x00, 0x00, 0x62, 0x04, 0x00, 0x00, 0x6e, 0x04, 0x00, 0x00, 
+  0x78, 0x04, 0x00, 0x00, 0x7c, 0x04, 0x00, 0x00, 0x83, 0x04, 0x00, 
+  0x00, 0x8a, 0x04, 0x00, 0x00, 0x91, 0x04, 0x00, 0x00, 0x9d, 0x04, 
+  0x00, 0x00, 0xa4, 0x04, 0x00, 0x00, 0xae, 0x04, 0x00, 0x00, 0xb5, 
+  0x04, 0x00, 0x00, 0xbc, 0x04, 0x00, 0x00, 0xc3, 0x04, 0x00, 0x00, 
+  0xca, 0x04, 0x00, 0x00, 0xd6, 0x04, 0x00, 0x00, 0xe0, 0x04, 0x00, 
+  0x00, 0xe7, 0x04, 0x00, 0x00, 0xed, 0x04, 0x00, 0x00, 0xf7, 0x04, 
+  0x00, 0x00, 0xfe, 0x04, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x08, 
+  0x05, 0x00, 0x00, 0x12, 0x05, 0x00, 0x00, 0x19, 0x05, 0x00, 0x00, 
+  0x1f, 0x05, 0x00, 0x00, 0x26, 0x05, 0x00, 0x00, 0x2c, 0x05, 0x00, 
+  0x00, 0x37, 0x05, 0x00, 0x00, 0x3e, 0x05, 0x00, 0x00, 0x48, 0x05, 
+  0x00, 0x00, 0x52, 0x05, 0x00, 0x00, 0x5b, 0x05, 0x00, 0x00, 0x64, 
+  0x05, 0x00, 0x00, 0x6b, 0x05, 0x00, 0x00, 0x72, 0x05, 0x00, 0x00, 
+  0x75, 0x05, 0x00, 0x00, 0x78, 0x05, 0x00, 0x00, 0x7f, 0x05, 0x00, 
+  0x00, 0x88, 0x05, 0x00, 0x00, 0x8e, 0x05, 0x00, 0x00, 0x9c, 0x05, 
+  0x00, 0x00, 0xab, 0x05, 0x00, 0x00, 0xb8, 0x05, 0x00, 0x00, 0xbf, 
+  0x05, 0x00, 0x00, 0xc2, 0x05, 0x00, 0x00, 0xc9, 0x05, 0x00, 0x00, 
+  0xd5, 0x05, 0x00, 0x00, 0xe2, 0x05, 0x00, 0x00, 0xef, 0x05, 0x00, 
+  0x00, 0xfd, 0x05, 0x00, 0x00, 0x0c, 0x06, 0x00, 0x00, 0x18, 0x06, 
+  0x00, 0x00, 0x1d, 0x06, 0x00, 0x00, 0x24, 0x06, 0x00, 0x00, 0x2a, 
+  0x06, 0x00, 0x00, 0x34, 0x06, 0x00, 0x00, 0x3b, 0x06, 0x00, 0x00, 
+  0x73, 0x70, 0x61, 0x63, 0x65, 0x00, 0x65, 0x78, 0x63, 0x6c, 0x61, 
+  0x6d, 0x00, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x64, 0x62, 0x6c, 0x00, 
+  0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x69, 0x67, 0x6e, 0x00, 
+  0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x00, 0x70, 0x65, 0x72, 0x63, 
+  0x65, 0x6e, 0x74, 0x00, 0x61, 0x6d, 0x70, 0x65, 0x72, 0x73, 0x61, 
+  0x6e, 0x64, 0x00, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x72, 0x69, 0x67, 
+  0x68, 0x74, 0x00, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x6c, 0x65, 0x66, 
+  0x74, 0x00, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x72, 0x69, 0x67, 0x68, 
+  0x74, 0x00, 0x61, 0x73, 0x74, 0x65, 0x72, 0x69, 0x73, 0x6b, 0x00, 
+  0x70, 0x6c, 0x75, 0x73, 0x00, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x00, 
+  0x6d, 0x69, 0x6e, 0x75, 0x73, 0x00, 0x70, 0x65, 0x72, 0x69, 0x6f, 
+  0x64, 0x00, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x00, 0x7a, 0x65, 0x72, 
+  0x6f, 0x00, 0x6f, 0x6e, 0x65, 0x00, 0x74, 0x77, 0x6f, 0x00, 0x74, 
+  0x68, 0x72, 0x65, 0x65, 0x00, 0x66, 0x6f, 0x75, 0x72, 0x00, 0x66, 
+  0x69, 0x76, 0x65, 0x00, 0x73, 0x69, 0x78, 0x00, 0x73, 0x65, 0x76, 
+  0x65, 0x6e, 0x00, 0x65, 0x69, 0x67, 0x68, 0x74, 0x00, 0x6e, 0x69, 
+  0x6e, 0x65, 0x00, 0x63, 0x6f, 0x6c, 0x6f, 0x6e, 0x00, 0x73, 0x65, 
+  0x6d, 0x69, 0x63, 0x6f, 0x6c, 0x6f, 0x6e, 0x00, 0x6c, 0x65, 0x73, 
+  0x73, 0x00, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x00, 0x67, 0x72, 0x65, 
+  0x61, 0x74, 0x65, 0x72, 0x00, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 
+  0x6f, 0x6e, 0x00, 0x61, 0x74, 0x00, 0x41, 0x00, 0x42, 0x00, 0x43, 
+  0x00, 0x44, 0x00, 0x45, 0x00, 0x46, 0x00, 0x47, 0x00, 0x48, 0x00, 
+  0x49, 0x00, 0x4a, 0x00, 0x4b, 0x00, 0x4c, 0x00, 0x4d, 0x00, 0x4e, 
+  0x00, 0x4f, 0x00, 0x50, 0x00, 0x51, 0x00, 0x52, 0x00, 0x53, 0x00, 
+  0x54, 0x00, 0x55, 0x00, 0x56, 0x00, 0x57, 0x00, 0x58, 0x00, 0x59, 
+  0x00, 0x5a, 0x00, 0x62, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x6c, 
+  0x65, 0x66, 0x74, 0x00, 0x62, 0x61, 0x63, 0x6b, 0x73, 0x6c, 0x61, 
+  0x73, 0x68, 0x00, 0x62, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x72, 
+  0x69, 0x67, 0x68, 0x74, 0x00, 0x61, 0x73, 0x63, 0x69, 0x69, 0x63, 
+  0x69, 0x72, 0x63, 0x75, 0x6d, 0x00, 0x75, 0x6e, 0x64, 0x65, 0x72, 
+  0x73, 0x63, 0x6f, 0x72, 0x65, 0x00, 0x71, 0x75, 0x6f, 0x74, 0x65, 
+  0x6c, 0x65, 0x66, 0x74, 0x00, 0x61, 0x00, 0x62, 0x00, 0x63, 0x00, 
+  0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x67, 0x00, 0x68, 0x00, 0x69, 
+  0x00, 0x6a, 0x00, 0x6b, 0x00, 0x6c, 0x00, 0x6d, 0x00, 0x6e, 0x00, 
+  0x6f, 0x00, 0x70, 0x00, 0x71, 0x00, 0x72, 0x00, 0x73, 0x00, 0x74, 
+  0x00, 0x75, 0x00, 0x76, 0x00, 0x77, 0x00, 0x78, 0x00, 0x79, 0x00, 
+  0x7a, 0x00, 0x62, 0x72, 0x61, 0x63, 0x65, 0x6c, 0x65, 0x66, 0x74, 
+  0x00, 0x62, 0x61, 0x72, 0x00, 0x62, 0x72, 0x61, 0x63, 0x65, 0x72, 
+  0x69, 0x67, 0x68, 0x74, 0x00, 0x61, 0x73, 0x63, 0x69, 0x69, 0x74, 
+  0x69, 0x6c, 0x64, 0x65, 0x00, 0x73, 0x70, 0x61, 0x63, 0x65, 0x00, 
+  0x65, 0x78, 0x63, 0x6c, 0x61, 0x6d, 0x64, 0x6f, 0x77, 0x6e, 0x00, 
+  0x63, 0x65, 0x6e, 0x74, 0x00, 0x73, 0x74, 0x65, 0x72, 0x6c, 0x69, 
+  0x6e, 0x67, 0x00, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 
+  0x00, 0x79, 0x65, 0x6e, 0x00, 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x6e, 
+  0x62, 0x61, 0x72, 0x00, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 
+  0x00, 0x64, 0x69, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x00, 0x63, 
+  0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x00, 0x6f, 0x72, 
+  0x64, 0x66, 0x65, 0x6d, 0x69, 0x6e, 0x69, 0x6e, 0x65, 0x00, 0x67, 
+  0x75, 0x69, 0x6c, 0x6c, 0x65, 0x6d, 0x6f, 0x74, 0x6c, 0x65, 0x66, 
+  0x74, 0x00, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x6e, 0x6f, 
+  0x74, 0x00, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x00, 0x72, 0x65, 
+  0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x00, 0x6d, 0x61, 
+  0x63, 0x72, 0x6f, 0x6e, 0x00, 0x64, 0x65, 0x67, 0x72, 0x65, 0x65, 
+  0x00, 0x70, 0x6c, 0x75, 0x73, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x00, 
+  0x74, 0x77, 0x6f, 0x73, 0x75, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x72, 
+  0x00, 0x74, 0x68, 0x72, 0x65, 0x65, 0x73, 0x75, 0x70, 0x65, 0x72, 
+  0x69, 0x6f, 0x72, 0x00, 0x61, 0x63, 0x75, 0x74, 0x65, 0x00, 0x6d, 
+  0x75, 0x00, 0x70, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 
+  0x00, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x63, 0x65, 0x6e, 0x74, 
+  0x65, 0x72, 0x65, 0x64, 0x00, 0x63, 0x65, 0x64, 0x69, 0x6c, 0x6c, 
+  0x61, 0x00, 0x6f, 0x6e, 0x65, 0x73, 0x75, 0x70, 0x65, 0x72, 0x69, 
+  0x6f, 0x72, 0x00, 0x6f, 0x72, 0x64, 0x6d, 0x61, 0x73, 0x63, 0x75, 
+  0x6c, 0x69, 0x6e, 0x65, 0x00, 0x67, 0x75, 0x69, 0x6c, 0x6c, 0x65, 
+  0x6d, 0x6f, 0x74, 0x72, 0x69, 0x67, 0x68, 0x74, 0x00, 0x6f, 0x6e, 
+  0x65, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x00, 0x6f, 0x6e, 
+  0x65, 0x68, 0x61, 0x6c, 0x66, 0x00, 0x74, 0x68, 0x72, 0x65, 0x65, 
+  0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x73, 0x00, 0x71, 0x75, 
+  0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x6f, 0x77, 0x6e, 0x00, 
+  0x41, 0x67, 0x72, 0x61, 0x76, 0x65, 0x00, 0x41, 0x61, 0x63, 0x75, 
+  0x74, 0x65, 0x00, 0x41, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 
+  0x6c, 0x65, 0x78, 0x00, 0x41, 0x74, 0x69, 0x6c, 0x64, 0x65, 0x00, 
+  0x41, 0x64, 0x69, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x00, 0x41, 
+  0x72, 0x69, 0x6e, 0x67, 0x00, 0x41, 0x45, 0x00, 0x43, 0x63, 0x65, 
+  0x64, 0x69, 0x6c, 0x6c, 0x61, 0x00, 0x45, 0x67, 0x72, 0x61, 0x76, 
+  0x65, 0x00, 0x45, 0x61, 0x63, 0x75, 0x74, 0x65, 0x00, 0x45, 0x63, 
+  0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x00, 0x45, 
+  0x64, 0x69, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x00, 0x49, 0x67, 
+  0x72, 0x61, 0x76, 0x65, 0x00, 0x49, 0x61, 0x63, 0x75, 0x74, 0x65, 
+  0x00, 0x49, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 
+  0x78, 0x00, 0x49, 0x64, 0x69, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 
+  0x00, 0x45, 0x74, 0x68, 0x00, 0x4e, 0x74, 0x69, 0x6c, 0x64, 0x65, 
+  0x00, 0x4f, 0x67, 0x72, 0x61, 0x76, 0x65, 0x00, 0x4f, 0x61, 0x63, 
+  0x75, 0x74, 0x65, 0x00, 0x4f, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 
+  0x66, 0x6c, 0x65, 0x78, 0x00, 0x4f, 0x74, 0x69, 0x6c, 0x64, 0x65, 
+  0x00, 0x4f, 0x64, 0x69, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x00, 
+  0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x79, 0x00, 0x4f, 0x73, 
+  0x6c, 0x61, 0x73, 0x68, 0x00, 0x55, 0x67, 0x72, 0x61, 0x76, 0x65, 
+  0x00, 0x55, 0x61, 0x63, 0x75, 0x74, 0x65, 0x00, 0x55, 0x63, 0x69, 
+  0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x00, 0x55, 0x64, 
+  0x69, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x00, 0x59, 0x61, 0x63, 
+  0x75, 0x74, 0x65, 0x00, 0x54, 0x68, 0x6f, 0x72, 0x6e, 0x00, 0x67, 
+  0x65, 0x72, 0x6d, 0x61, 0x6e, 0x64, 0x62, 0x6c, 0x73, 0x00, 0x61, 
+  0x67, 0x72, 0x61, 0x76, 0x65, 0x00, 0x61, 0x61, 0x63, 0x75, 0x74, 
+  0x65, 0x00, 0x61, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 
+  0x65, 0x78, 0x00, 0x61, 0x74, 0x69, 0x6c, 0x64, 0x65, 0x00, 0x61, 
+  0x64, 0x69, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x00, 0x61, 0x72, 
+  0x69, 0x6e, 0x67, 0x00, 0x61, 0x65, 0x00, 0x63, 0x63, 0x65, 0x64, 
+  0x69, 0x6c, 0x6c, 0x61, 0x00, 0x65, 0x67, 0x72, 0x61, 0x76, 0x65, 
+  0x00, 0x65, 0x61, 0x63, 0x75, 0x74, 0x65, 0x00, 0x65, 0x63, 0x69, 
+  0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x00, 0x65, 0x64, 
+  0x69, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x00, 0x69, 0x67, 0x72, 
+  0x61, 0x76, 0x65, 0x00, 0x69, 0x61, 0x63, 0x75, 0x74, 0x65, 0x00, 
+  0x69, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 
+  0x00, 0x69, 0x64, 0x69, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x00, 
+  0x65, 0x74, 0x68, 0x00, 0x6e, 0x74, 0x69, 0x6c, 0x64, 0x65, 0x00, 
+  0x6f, 0x67, 0x72, 0x61, 0x76, 0x65, 0x00, 0x6f, 0x61, 0x63, 0x75, 
+  0x74, 0x65, 0x00, 0x6f, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 
+  0x6c, 0x65, 0x78, 0x00, 0x6f, 0x74, 0x69, 0x6c, 0x64, 0x65, 0x00, 
+  0x6f, 0x64, 0x69, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x00, 0x64, 
+  0x69, 0x76, 0x69, 0x64, 0x65, 0x00, 0x6f, 0x73, 0x6c, 0x61, 0x73, 
+  0x68, 0x00, 0x75, 0x67, 0x72, 0x61, 0x76, 0x65, 0x00, 0x75, 0x61, 
+  0x63, 0x75, 0x74, 0x65, 0x00, 0x75, 0x63, 0x69, 0x72, 0x63, 0x75, 
+  0x6d, 0x66, 0x6c, 0x65, 0x78, 0x00, 0x75, 0x64, 0x69, 0x65, 0x72, 
+  0x65, 0x73, 0x69, 0x73, 0x00, 0x79, 0x61, 0x63, 0x75, 0x74, 0x65, 
+  0x00, 0x74, 0x68, 0x6f, 0x72, 0x6e, 0x00, 0x79, 0x64, 0x69, 0x65, 
+  0x72, 0x65, 0x73, 0x69, 0x73, 0x00, 0x4c, 0x73, 0x6c, 0x61, 0x73, 
+  0x68, 0x00, 0x4f, 0x45, 0x00, 0x53, 0x63, 0x61, 0x72, 0x6f, 0x6e, 
+  0x00, 0x59, 0x64, 0x69, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x00, 
+  0x5a, 0x63, 0x61, 0x72, 0x6f, 0x6e, 0x00, 0x62, 0x72, 0x65, 0x76, 
+  0x65, 0x00, 0x62, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x00, 0x63, 0x61, 
+  0x72, 0x6f, 0x6e, 0x00, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 
+  0x6c, 0x65, 0x78, 0x00, 0x64, 0x61, 0x67, 0x67, 0x65, 0x72, 0x00, 
+  0x64, 0x61, 0x67, 0x67, 0x65, 0x72, 0x64, 0x62, 0x6c, 0x00, 0x64, 
+  0x6f, 0x74, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x00, 0x64, 0x6f, 
+  0x74, 0x6c, 0x65, 0x73, 0x73, 0x69, 0x00, 0x65, 0x6c, 0x6c, 0x69, 
+  0x70, 0x73, 0x69, 0x73, 0x00, 0x65, 0x6d, 0x64, 0x61, 0x73, 0x68, 
+  0x00, 0x65, 0x6e, 0x64, 0x61, 0x73, 0x68, 0x00, 0x66, 0x69, 0x00, 
+  0x66, 0x6c, 0x00, 0x66, 0x6c, 0x6f, 0x72, 0x69, 0x6e, 0x00, 0x66, 
+  0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x67, 0x72, 0x61, 
+  0x76, 0x65, 0x00, 0x67, 0x75, 0x69, 0x6c, 0x73, 0x69, 0x6e, 0x67, 
+  0x6c, 0x6c, 0x65, 0x66, 0x74, 0x00, 0x67, 0x75, 0x69, 0x6c, 0x73, 
+  0x69, 0x6e, 0x67, 0x6c, 0x72, 0x69, 0x67, 0x68, 0x74, 0x00, 0x68, 
+  0x75, 0x6e, 0x67, 0x61, 0x72, 0x75, 0x6d, 0x6c, 0x61, 0x75, 0x74, 
+  0x00, 0x6c, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x00, 0x6f, 0x65, 0x00, 
+  0x6f, 0x67, 0x6f, 0x6e, 0x65, 0x6b, 0x00, 0x70, 0x65, 0x72, 0x74, 
+  0x68, 0x6f, 0x75, 0x73, 0x61, 0x6e, 0x64, 0x00, 0x71, 0x75, 0x6f, 
+  0x74, 0x65, 0x64, 0x62, 0x6c, 0x62, 0x61, 0x73, 0x65, 0x00, 0x71, 
+  0x75, 0x6f, 0x74, 0x65, 0x64, 0x62, 0x6c, 0x6c, 0x65, 0x66, 0x74, 
+  0x00, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x64, 0x62, 0x6c, 0x72, 0x69, 
+  0x67, 0x68, 0x74, 0x00, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x73, 0x69, 
+  0x6e, 0x67, 0x6c, 0x62, 0x61, 0x73, 0x65, 0x00, 0x71, 0x75, 0x6f, 
+  0x74, 0x65, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x00, 0x72, 0x69, 
+  0x6e, 0x67, 0x00, 0x73, 0x63, 0x61, 0x72, 0x6f, 0x6e, 0x00, 0x74, 
+  0x69, 0x6c, 0x64, 0x65, 0x00, 0x74, 0x72, 0x61, 0x64, 0x65, 0x6d, 
+  0x61, 0x72, 0x6b, 0x00, 0x7a, 0x63, 0x61, 0x72, 0x6f, 0x6e, 0x00, 
+  0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 
+  0x00, 0x00, 0x00, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0xfd, 0xff, 
+  0xf0, 0xff, 0x00, 0x00, 0x03, 0x00, 0x18, 0x00, 0x19, 0x00, 0x18, 
+  0x00, 0x05, 0x00, 0x00, 0x00, 
+};
+
+const int default_font_size = sizeof(default_font);

+ 26 - 0
pandaapp/src/indexify/default_font.h

@@ -0,0 +1,26 @@
+// Filename: default_font.h
+// Created by:  drose (04Apr02)
+//
+////////////////////////////////////////////////////////////////////
+//
+// PANDA 3D SOFTWARE
+// Copyright (c) 2001, Disney Enterprises, Inc.  All rights reserved
+//
+// All use of this software is subject to the terms of the Panda 3d
+// Software license.  You should have received a copy of this license
+// along with this source code; you will also find a current copy of
+// the license at http://www.panda3d.org/license.txt .
+//
+// To contact the maintainers of this program write to
+// [email protected] .
+//
+////////////////////////////////////////////////////////////////////
+
+#ifndef DEFAULT_FONT_H
+#define DEFAULT_FONT_H
+
+extern const char default_font[];
+extern const int default_font_size;
+
+#endif
+

+ 185 - 0
pandaapp/src/indexify/default_index_icons.cxx

@@ -0,0 +1,185 @@
+// Filename: default_index_icons.cxx
+// Created by:  drose (04Apr02)
+//
+////////////////////////////////////////////////////////////////////
+//
+// PANDA 3D SOFTWARE
+// Copyright (c) 2001, Disney Enterprises, Inc.  All rights reserved
+//
+// All use of this software is subject to the terms of the Panda 3d
+// Software license.  You should have received a copy of this license
+// along with this source code; you will also find a current copy of
+// the license at http://www.panda3d.org/license.txt .
+//
+// To contact the maintainers of this program write to
+// [email protected] .
+//
+////////////////////////////////////////////////////////////////////
+
+#include "default_index_icons.h"
+
+// This file was generated from left.png, right.png, and up.png; it
+// provides data for default navigation icons if the -i parameter is
+// supplied on the command line.
+
+const char *default_left_icon_filename = "left.png";
+const char default_left_icon[] = {
+  0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 
+  0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 
+  0x00, 0x1e, 0x08, 0x03, 0x00, 0x00, 0x00, 0x0c, 0xee, 0x5e, 0x90, 
+  0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 
+  0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00, 0x00, 0x00, 0x2d, 0x50, 0x4c, 
+  0x54, 0x45, 0xeb, 0xed, 0xee, 0xdd, 0xe1, 0xe3, 0xcf, 0xd4, 0xd7, 
+  0xc2, 0xc9, 0xcd, 0xb5, 0xbd, 0xc2, 0xae, 0xb7, 0xbc, 0xa7, 0xb0, 
+  0xb6, 0x99, 0xa4, 0xab, 0x8c, 0x98, 0xa0, 0x7e, 0x8c, 0x95, 0x77, 
+  0x86, 0x8f, 0x6c, 0x7a, 0x83, 0x60, 0x6c, 0x74, 0x55, 0x60, 0x67, 
+  0x4f, 0x5a, 0x60, 0x44, 0x10, 0xa7, 0xee, 0x00, 0x00, 0x01, 0x96, 
+  0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x7d, 0x93, 0xdd, 0x92, 0xec, 
+  0x20, 0x08, 0x84, 0x47, 0x7e, 0x04, 0xd4, 0xe4, 0xfd, 0x1f, 0xf7, 
+  0x74, 0xe3, 0x9c, 0xaa, 0xbd, 0xd8, 0x5a, 0x2f, 0x66, 0x12, 0x3f, 
+  0x81, 0xb6, 0x21, 0x9f, 0xcf, 0x2f, 0x4b, 0xe4, 0xfb, 0x70, 0x7e, 
+  0xa3, 0x9f, 0x31, 0xee, 0xff, 0x24, 0x56, 0x15, 0x8b, 0xa9, 0x63, 
+  0x08, 0x96, 0xe9, 0xf8, 0x0c, 0x35, 0x9f, 0xa6, 0xa2, 0xb5, 0x89, 
+  0x45, 0x67, 0xba, 0xca, 0x10, 0x33, 0x73, 0x13, 0x9c, 0x53, 0x2e, 
+  0xb3, 0x45, 0x6c, 0x86, 0x27, 0x1c, 0xc6, 0x29, 0x47, 0x26, 0xe2, 
+  0x7e, 0x33, 0xad, 0x02, 0x8e, 0x00, 0x9d, 0xd3, 0xb8, 0x21, 0x0c, 
+  0x14, 0x3b, 0xce, 0x42, 0xa3, 0x16, 0x05, 0x4c, 0x77, 0xc7, 0x19, 
+  0x60, 0x63, 0xca, 0xb9, 0x9f, 0x07, 0x69, 0x20, 0x26, 0xd7, 0x95, 
+  0xa6, 0xea, 0xdc, 0x40, 0x65, 0xf3, 0x7a, 0xdf, 0xe7, 0xa0, 0x1e, 
+  0xb4, 0xcc, 0x6c, 0x69, 0x54, 0x3c, 0xad, 0x57, 0x3e, 0x58, 0xa7, 
+  0xb1, 0x68, 0x54, 0x47, 0xb3, 0xa4, 0xff, 0x80, 0x7b, 0xb7, 0x46, 
+  0xcd, 0xfc, 0x62, 0xe4, 0x45, 0x81, 0xf3, 0x36, 0x5c, 0x6b, 0x07, 
+  0x6f, 0xe6, 0x19, 0xc4, 0x14, 0x84, 0x3b, 0xd5, 0x83, 0xa2, 0x7b, 
+  0xef, 0xca, 0x5c, 0xd1, 0x2a, 0xcf, 0xba, 0xf7, 0x86, 0xde, 0x42, 
+  0xda, 0xf7, 0x41, 0x64, 0x55, 0x56, 0x39, 0xb2, 0x89, 0x1e, 0x9a, 
+  0xea, 0x6e, 0x1a, 0xcc, 0x4b, 0x0c, 0x08, 0xba, 0x9c, 0x29, 0x75, 
+  0x37, 0x06, 0x7d, 0xbb, 0xea, 0x73, 0x16, 0x28, 0x70, 0xb5, 0x91, 
+  0xd6, 0xd1, 0xbc, 0x17, 0xac, 0xa0, 0x60, 0x64, 0x66, 0x74, 0x26, 
+  0x5d, 0xd6, 0x9b, 0x9c, 0x1d, 0x10, 0x49, 0x62, 0x42, 0xe2, 0x0a, 
+  0x52, 0x59, 0xed, 0x1a, 0xcc, 0x62, 0xae, 0xd8, 0x0c, 0xcf, 0x3e, 
+  0x10, 0x74, 0xf2, 0xde, 0xdb, 0x33, 0xd9, 0x14, 0x38, 0x57, 0x67, 
+  0xdf, 0xec, 0x3b, 0x18, 0xe0, 0xbb, 0x5b, 0x12, 0xc0, 0xd7, 0xd9, 
+  0x80, 0xe8, 0x95, 0x51, 0x3b, 0x69, 0xe2, 0xad, 0xad, 0x16, 0x41, 
+  0xda, 0xdd, 0x44, 0x85, 0x8a, 0x2c, 0x36, 0xd1, 0xa4, 0x1b, 0x0a, 
+  0xbf, 0x1d, 0xed, 0x61, 0x13, 0xc4, 0xdc, 0x29, 0x3c, 0x31, 0x4d, 
+  0xae, 0x63, 0x4e, 0x46, 0x63, 0xb0, 0xe4, 0x36, 0x5b, 0x67, 0xc0, 
+  0xfb, 0xeb, 0x1a, 0x42, 0x26, 0x3d, 0x97, 0x89, 0xdc, 0x18, 0x17, 
+  0x12, 0x4e, 0x05, 0x86, 0x6a, 0xb9, 0xd0, 0xd5, 0x6c, 0x5b, 0xa8, 
+  0x0b, 0xd9, 0x48, 0xfa, 0xc7, 0xfe, 0xcf, 0xe5, 0x6a, 0x7c, 0x27, 
+  0x8c, 0x9b, 0x82, 0xa1, 0x31, 0xef, 0xa9, 0x1e, 0xa8, 0xb9, 0xf7, 
+  0xd7, 0xd4, 0x56, 0xae, 0x2d, 0xa0, 0xa7, 0xb2, 0xa5, 0x7e, 0x3d, 
+  0xff, 0x33, 0x7a, 0xf6, 0x45, 0xe1, 0xdc, 0x84, 0x3a, 0x98, 0xb6, 
+  0xcf, 0xc2, 0x0b, 0xac, 0xa1, 0x03, 0xf8, 0xcc, 0xce, 0x69, 0xa3, 
+  0x89, 0xc9, 0xd1, 0x9a, 0xc0, 0x73, 0x9e, 0x8d, 0xad, 0x7f, 0xbd, 
+  0xcf, 0x11, 0xe9, 0xc6, 0x04, 0xc1, 0x3d, 0x00, 0x00, 0x00, 0x00, 
+  0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, 
+};
+const int default_left_icon_size = sizeof(default_left_icon);
+
+const char *default_right_icon_filename = "right.png";
+const char default_right_icon[] = {
+  0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 
+  0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 
+  0x00, 0x1e, 0x08, 0x03, 0x00, 0x00, 0x00, 0x0c, 0xee, 0x5e, 0x90, 
+  0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 
+  0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00, 0x00, 0x00, 0x2d, 0x50, 0x4c, 
+  0x54, 0x45, 0xec, 0xee, 0xef, 0xd8, 0xdc, 0xdf, 0xca, 0xd0, 0xd3, 
+  0xc3, 0xc9, 0xcd, 0xae, 0xb7, 0xbc, 0xa8, 0xb1, 0xb7, 0x99, 0xa4, 
+  0xab, 0x93, 0x9f, 0xa6, 0x86, 0x93, 0x9b, 0x77, 0x86, 0x8f, 0x71, 
+  0x80, 0x89, 0x60, 0x6c, 0x74, 0x5b, 0x67, 0x6e, 0x50, 0x5b, 0x61, 
+  0x45, 0x4e, 0x53, 0xeb, 0x64, 0x46, 0x0c, 0x00, 0x00, 0x01, 0x8c, 
+  0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x6d, 0x92, 0x59, 0x6e, 0xc3, 
+  0x30, 0x0c, 0x44, 0x2d, 0x71, 0x95, 0x94, 0xf4, 0xfe, 0xc7, 0xed, 
+  0xcc, 0xc8, 0x40, 0x7f, 0x4a, 0x04, 0x89, 0xc3, 0xc7, 0x65, 0x4c, 
+  0xf2, 0x79, 0xfe, 0xb1, 0x39, 0xde, 0x87, 0xf3, 0xfc, 0x6b, 0x2f, 
+  0x0e, 0xe2, 0x69, 0xd3, 0x6c, 0xce, 0x31, 0xf8, 0xc1, 0xef, 0x33, 
+  0x3c, 0x33, 0xc3, 0xe7, 0x58, 0x1b, 0x18, 0xc8, 0x33, 0x8c, 0x6c, 
+  0x20, 0x14, 0x99, 0xd3, 0x3d, 0x1c, 0x6e, 0x61, 0x64, 0x44, 0x05, 
+  0x53, 0xdd, 0xcd, 0x6d, 0xa8, 0xde, 0x44, 0x45, 0x5b, 0x0d, 0x0c, 
+  0xa7, 0x79, 0x7d, 0x62, 0x98, 0x52, 0xc6, 0x20, 0x1e, 0xc2, 0x0b, 
+  0x38, 0x13, 0xbc, 0x7f, 0xbe, 0x1b, 0x71, 0x72, 0x8f, 0x71, 0x45, 
+  0x8c, 0x22, 0x8e, 0x70, 0xf7, 0xf5, 0xf3, 0xfd, 0x7c, 0xda, 0x21, 
+  0x03, 0x32, 0x81, 0xf9, 0xfd, 0x44, 0xdf, 0xde, 0xd3, 0xfa, 0xfb, 
+  0x39, 0xb0, 0x36, 0xbe, 0x86, 0x5d, 0x8d, 0x23, 0x97, 0x94, 0xa3, 
+  0x56, 0x01, 0xef, 0x7d, 0xce, 0x4e, 0x89, 0x12, 0xb6, 0x62, 0xb6, 
+  0xa2, 0xf3, 0x0b, 0x4a, 0x3b, 0xcb, 0xe9, 0xa0, 0x78, 0xeb, 0x7c, 
+  0x31, 0xb2, 0xcf, 0x5e, 0xb2, 0x7d, 0xca, 0x5c, 0x21, 0x7e, 0x54, 
+  0x9c, 0x73, 0xe9, 0xef, 0x21, 0xeb, 0x06, 0xdf, 0xbb, 0x9d, 0x6f, 
+  0xe1, 0xe7, 0xdc, 0x6c, 0xb3, 0x22, 0x86, 0xbf, 0x5a, 0x05, 0x76, 
+  0x72, 0x04, 0xfb, 0xdc, 0xb1, 0xcc, 0x99, 0xc4, 0x50, 0x5e, 0x85, 
+  0x02, 0x94, 0x90, 0xc8, 0x39, 0x17, 0x73, 0xac, 0x12, 0xbe, 0xbb, 
+  0x6f, 0x7e, 0xb3, 0xf9, 0xc5, 0x9a, 0x91, 0x13, 0x93, 0xca, 0x5c, 
+  0xe2, 0xa6, 0x86, 0xaa, 0x55, 0x09, 0xaf, 0x0b, 0xcb, 0x4c, 0x0d, 
+  0x67, 0xd5, 0xa3, 0xf5, 0xf9, 0xed, 0xbd, 0x29, 0x9d, 0x4d, 0x45, 
+  0xcd, 0x36, 0xb3, 0xbd, 0x2a, 0xa1, 0x9c, 0xaf, 0x8d, 0xfc, 0xd0, 
+  0xfa, 0x5d, 0x31, 0xea, 0x1d, 0x59, 0xe9, 0xf9, 0x01, 0x5a, 0x2b, 
+  0xe1, 0xc4, 0x34, 0x71, 0x2b, 0xec, 0xdd, 0x4b, 0xc5, 0x33, 0x2d, 
+  0x0e, 0x87, 0x31, 0x4d, 0x58, 0x3f, 0x38, 0x8c, 0x08, 0x4a, 0xa3, 
+  0x0b, 0xd2, 0x96, 0xf1, 0x5e, 0x5c, 0x1b, 0x9a, 0xce, 0x5b, 0x8b, 
+  0x54, 0x36, 0x1e, 0xe3, 0x68, 0x4e, 0x91, 0x1c, 0x02, 0x37, 0xcc, 
+  0x2a, 0xa5, 0x4b, 0x8d, 0xc4, 0x7c, 0x43, 0x04, 0x97, 0x83, 0xd6, 
+  0xda, 0x18, 0x2f, 0xf5, 0x1e, 0xb2, 0xaa, 0x22, 0x68, 0x28, 0x92, 
+  0x17, 0x39, 0x74, 0x6b, 0xfb, 0xbd, 0xd4, 0xa1, 0x6a, 0x8a, 0x82, 
+  0xaa, 0x0c, 0x1e, 0xbb, 0x79, 0xfc, 0x0d, 0xf5, 0x35, 0xd2, 0x08, 
+  0x5d, 0x1b, 0x12, 0x98, 0x1d, 0x7b, 0x65, 0x61, 0x53, 0x19, 0x68, 
+  0xcf, 0x75, 0x9f, 0x85, 0x3f, 0xa9, 0xb5, 0x43, 0xf9, 0xd1, 0x1a, 
+  0xab, 0x89, 0xc9, 0x79, 0x6f, 0x78, 0x6e, 0xac, 0x2f, 0xe3, 0x17, 
+  0x29, 0xef, 0x0f, 0xde, 0x36, 0xeb, 0x43, 0xec, 0x00, 0x00, 0x00, 
+  0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, 
+};
+const int default_right_icon_size = sizeof(default_right_icon);
+
+const char *default_up_icon_filename = "up.png";
+const char default_up_icon[] = {
+  0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 
+  0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 
+  0x00, 0x1e, 0x08, 0x03, 0x00, 0x00, 0x00, 0x0c, 0xee, 0x5e, 0x90, 
+  0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 
+  0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00, 0x00, 0x00, 0x2d, 0x50, 0x4c, 
+  0x54, 0x45, 0xeb, 0xed, 0xee, 0xdd, 0xe1, 0xe3, 0xcf, 0xd4, 0xd7, 
+  0xc9, 0xcf, 0xd2, 0xc2, 0xc9, 0xcd, 0xb4, 0xbc, 0xc1, 0xad, 0xb6, 
+  0xbb, 0x98, 0xa3, 0xaa, 0x92, 0x9e, 0xa5, 0x7d, 0x8b, 0x94, 0x70, 
+  0x7f, 0x88, 0x65, 0x72, 0x7a, 0x5f, 0x6b, 0x73, 0x54, 0x5f, 0x66, 
+  0x4a, 0x53, 0x59, 0xac, 0xfc, 0xc3, 0x4d, 0x00, 0x00, 0x01, 0xa3, 
+  0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x6d, 0x53, 0x59, 0x96, 0xc3, 
+  0x30, 0x08, 0x8b, 0x59, 0xbd, 0x90, 0xdc, 0xff, 0xb8, 0x23, 0xe1, 
+  0x7e, 0x0e, 0xaf, 0x75, 0x5a, 0x8b, 0x45, 0x02, 0xf2, 0x3c, 0xff, 
+  0x98, 0xc8, 0xef, 0x47, 0xfd, 0x87, 0x3e, 0x63, 0xdc, 0x67, 0x10, 
+  0x16, 0x53, 0x33, 0x15, 0x19, 0xfc, 0xa8, 0x8c, 0x21, 0x9e, 0x99, 
+  0xe1, 0x22, 0xeb, 0x00, 0x06, 0xe4, 0x19, 0x86, 0x6b, 0x98, 0xeb, 
+  0x78, 0x86, 0x7a, 0x84, 0x9b, 0xe8, 0xde, 0x80, 0x55, 0x34, 0x66, 
+  0x20, 0x4c, 0xdc, 0x1d, 0x41, 0xf0, 0x33, 0x55, 0x35, 0xf7, 0xb5, 
+  0x00, 0xbb, 0x9b, 0x7f, 0xdf, 0xf7, 0xbe, 0x6f, 0x1f, 0x3f, 0x13, 
+  0x73, 0x5b, 0x8c, 0xce, 0xf4, 0x86, 0xeb, 0x7d, 0xeb, 0x9c, 0x2a, 
+  0x1c, 0x78, 0xa0, 0xd0, 0x98, 0x84, 0x03, 0x46, 0xf8, 0xb4, 0x11, 
+  0xdc, 0xfb, 0x1c, 0xd3, 0x31, 0x62, 0xb2, 0x36, 0x8a, 0x5b, 0x04, 
+  0xf8, 0xa3, 0xb2, 0x3b, 0x1e, 0x26, 0xa2, 0xe0, 0x20, 0xc9, 0xda, 
+  0xd6, 0x8c, 0x89, 0xc0, 0x20, 0xb1, 0x71, 0xc0, 0x62, 0x93, 0xd1, 
+  0x66, 0x70, 0xb0, 0x0b, 0xaf, 0xa9, 0x74, 0x71, 0xf8, 0x10, 0xce, 
+  0x1f, 0x0c, 0xa5, 0x06, 0xc0, 0xab, 0x80, 0x41, 0x68, 0xe0, 0x52, 
+  0xa3, 0x48, 0x8d, 0xbe, 0xe8, 0x83, 0x22, 0xc3, 0x79, 0x6b, 0xb1, 
+  0x81, 0x2c, 0x05, 0xf7, 0xaa, 0xab, 0x1b, 0x2d, 0x00, 0xec, 0x1b, 
+  0xea, 0xaa, 0x39, 0xe2, 0x3f, 0x52, 0x9e, 0x6a, 0x61, 0xde, 0x74, 
+  0xd4, 0x5b, 0xdd, 0x62, 0x2a, 0x04, 0x20, 0xfd, 0x85, 0x1d, 0xca, 
+  0x40, 0xc4, 0xd7, 0xf7, 0x15, 0x34, 0xa3, 0x4b, 0x24, 0xd3, 0x4c, 
+  0x7a, 0xba, 0x72, 0xa5, 0x31, 0x78, 0xc3, 0xbc, 0xd3, 0x83, 0x5b, 
+  0x8f, 0x04, 0x53, 0xec, 0x60, 0x56, 0xde, 0x7b, 0xad, 0x3d, 0xc9, 
+  0x05, 0xfa, 0xa5, 0x75, 0xa3, 0x96, 0x33, 0xd7, 0xc7, 0x9e, 0xaf, 
+  0x35, 0xd7, 0xbe, 0xc4, 0xcc, 0x3a, 0x3a, 0xe6, 0x44, 0x39, 0x87, 
+  0x28, 0x54, 0x5e, 0xc4, 0x17, 0x96, 0x81, 0x62, 0xba, 0x76, 0x24, 
+  0x60, 0x4b, 0x8e, 0x6b, 0x13, 0x9b, 0x73, 0xcf, 0xe8, 0xee, 0xf7, 
+  0x40, 0x15, 0xbb, 0x63, 0x52, 0x28, 0x7c, 0x43, 0x67, 0x22, 0x3d, 
+  0xa6, 0xe8, 0x12, 0xd1, 0xbb, 0x16, 0x21, 0xf3, 0x25, 0x3c, 0xe9, 
+  0x00, 0x43, 0x76, 0xb4, 0x71, 0x04, 0x7b, 0xae, 0xcc, 0xf4, 0x36, 
+  0xbc, 0x20, 0xab, 0xe1, 0x0d, 0x18, 0xeb, 0xd0, 0xba, 0x23, 0xcd, 
+  0x79, 0x09, 0x82, 0x7d, 0x70, 0x3f, 0x8c, 0x5d, 0xde, 0x0d, 0x73, 
+  0xfc, 0xb8, 0x4b, 0x8c, 0xb8, 0x0f, 0xca, 0xea, 0xbd, 0x3c, 0xa4, 
+  0xc6, 0x8e, 0xb2, 0xe9, 0xb8, 0x94, 0x0e, 0x4b, 0x94, 0x1d, 0x03, 
+  0x8c, 0xea, 0xfc, 0x9a, 0xaa, 0xfc, 0x2a, 0x3b, 0x6d, 0xdc, 0xf1, 
+  0x7e, 0x21, 0x6e, 0x74, 0xec, 0x95, 0x13, 0x7c, 0x49, 0x36, 0xc1, 
+  0x1c, 0xea, 0xf1, 0x27, 0xc9, 0x72, 0xe5, 0x83, 0xc5, 0xad, 0x16, 
+  0x43, 0x98, 0x78, 0xd5, 0xc6, 0x2b, 0x14, 0xf3, 0x1c, 0x5c, 0xfd, 
+  0x01, 0x56, 0x35, 0x13, 0x9e, 0xbd, 0x4e, 0x62, 0x4e, 0x00, 0x00, 
+  0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, 
+};
+const int default_up_icon_size = sizeof(default_up_icon);

+ 35 - 0
pandaapp/src/indexify/default_index_icons.h

@@ -0,0 +1,35 @@
+// Filename: default_index_icons.h
+// Created by:  drose (04Apr02)
+//
+////////////////////////////////////////////////////////////////////
+//
+// PANDA 3D SOFTWARE
+// Copyright (c) 2001, Disney Enterprises, Inc.  All rights reserved
+//
+// All use of this software is subject to the terms of the Panda 3d
+// Software license.  You should have received a copy of this license
+// along with this source code; you will also find a current copy of
+// the license at http://www.panda3d.org/license.txt .
+//
+// To contact the maintainers of this program write to
+// [email protected] .
+//
+////////////////////////////////////////////////////////////////////
+
+#ifndef DEFAULT_INDEX_ICONS_H
+#define DEFAULT_INDEX_ICONS_H
+
+extern const char *default_left_icon_filename;
+extern const char default_left_icon[];
+extern const int default_left_icon_size;
+
+extern const char *default_right_icon_filename;
+extern const char default_right_icon[];
+extern const int default_right_icon_size;
+
+extern const char *default_up_icon_filename;
+extern const char default_up_icon[];
+extern const int default_up_icon_size;
+
+#endif
+

+ 517 - 0
pandaapp/src/indexify/indexImage.cxx

@@ -0,0 +1,517 @@
+// Filename: indexImage.cxx
+// Created by:  drose (03Apr02)
+//
+////////////////////////////////////////////////////////////////////
+//
+// PANDA 3D SOFTWARE
+// Copyright (c) 2001, Disney Enterprises, Inc.  All rights reserved
+//
+// All use of this software is subject to the terms of the Panda 3d
+// Software license.  You should have received a copy of this license
+// along with this source code; you will also find a current copy of
+// the license at http://www.panda3d.org/license.txt .
+//
+// To contact the maintainers of this program write to
+// [email protected] .
+//
+////////////////////////////////////////////////////////////////////
+
+#include "indexImage.h"
+#include "rollDirectory.h"
+#include "photo.h"
+#include "textMaker.h"
+#include "indexParameters.h"
+#include "pnmImage.h"
+
+#include "string_utils.h"
+
+////////////////////////////////////////////////////////////////////
+//     Function: IndexImage::Constructor
+//       Access: Public
+//  Description:
+////////////////////////////////////////////////////////////////////
+IndexImage::
+IndexImage(RollDirectory *dir, int index) :
+  _dir(dir),
+  _index(index)
+{
+  _name = _dir->get_basename() + "_" + format_string(index + 1);
+  _index_x_size = 0;
+  _index_y_size = 0;
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: IndexImage::Destructor
+//       Access: Public
+//  Description:
+////////////////////////////////////////////////////////////////////
+IndexImage::
+~IndexImage() {
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: IndexImage::add_photo
+//       Access: Public
+//  Description: Adds the nth photo in the roll to the index image.
+//               Returns true if the photo is added, or false if there
+//               was no more room.
+////////////////////////////////////////////////////////////////////
+bool IndexImage::
+add_photo(int photo_index) {
+  int count = _photos.size();
+  if (count >= max_thumbs) {
+    return false;
+  }
+
+  int yi = count / thumb_count_x;
+  int xi = count - (yi * thumb_count_x);
+
+  int x = thumb_x_space + xi * (thumb_width + thumb_x_space);
+  int y = thumb_y_space + yi * (thumb_width + thumb_caption_height + thumb_x_space);
+
+  PhotoInfo pinfo;
+  pinfo._photo_index = photo_index;
+  pinfo._x_place = x;
+  pinfo._y_place = y;
+  _photos.push_back(pinfo);
+
+  return true;
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: IndexImage::generate_images
+//       Access: Public
+//  Description: Computes the thumbnail image file and writes it to
+//               the indicated directory; generates all reduced images
+//               associated with these photos into the appropriate
+//               subdirectory.  Returns true on success, false on
+//               failure.
+////////////////////////////////////////////////////////////////////
+bool IndexImage::
+generate_images(const Filename &archive_dir, TextMaker *text_maker) {
+  int count = _photos.size();
+  int num_rows = (count + thumb_count_x - 1) / thumb_count_x;
+  int actual_index_height = thumb_y_space + num_rows * (thumb_height + thumb_caption_height + thumb_y_space);
+
+  PNMImage index_image;
+  index_image.clear(actual_index_width, actual_index_height);
+  index_image.fill(1.0, 1.0, 1.0);
+
+  Filename reduced_dir(archive_dir, "reduced/" + _dir->get_basename());
+
+  Photos::const_iterator pi;
+  for (pi = _photos.begin(); pi != _photos.end(); ++pi) {
+    const PhotoInfo &pinfo = (*pi);
+    Photo *photo = _dir->get_photo(pinfo._photo_index);
+    Filename photo_filename(_dir->get_dir(), photo->get_basename());
+    nout << "Reading " << photo_filename << "\n";
+
+    PNMImage photo_image;
+    if (!photo_image.read(photo_filename)) {
+      nout << "Unable to read.\n";
+      return false;
+    }
+
+    photo->_full_x_size = photo_image.get_x_size();
+    photo->_full_y_size = photo_image.get_y_size();
+
+    // Generate a reduced image for the photo.
+    PNMImage reduced_image;
+    compute_reduction(photo_image, reduced_image, reduced_width, reduced_height);
+    reduced_image.quick_filter_from(photo_image);
+    Filename reduced_filename(reduced_dir, photo->get_basename());
+    reduced_filename.make_dir();
+    nout << "Writing " << reduced_filename << "\n";
+    if (!reduced_image.write(reduced_filename)) {
+      nout << "Unable to write.\n";
+      return false;
+    }
+
+    photo->_reduced_x_size = reduced_image.get_x_size();
+    photo->_reduced_y_size = reduced_image.get_y_size();
+
+    // Generate a thumbnail image for the photo.
+    PNMImage thumbnail_image;
+    compute_reduction(reduced_image, thumbnail_image, thumb_width, thumb_height);
+
+    thumbnail_image.quick_filter_from(reduced_image);
+    // Center the thumbnail image within its box.
+    int x_center = (thumb_width - thumbnail_image.get_x_size()) / 2;
+    int y_center = (thumb_height - thumbnail_image.get_y_size()) / 2;
+
+    index_image.copy_sub_image(thumbnail_image, 
+                               pinfo._x_place + x_center, 
+                               pinfo._y_place + y_center);
+
+    if (text_maker != (TextMaker *)NULL) {
+      text_maker->generate_into(photo->get_name(), index_image, 
+                                pinfo._x_place + thumb_width / 2, 
+                                pinfo._y_place + thumb_height + thumb_caption_height);
+    }
+  }
+
+  Filename output_filename(archive_dir, _name);
+  output_filename.set_extension("jpg");
+
+  nout << "Writing " << output_filename << "\n";
+  if (!index_image.write(output_filename)) {
+    nout << "Unable to write.\n";
+    return false;
+  }
+
+  _index_x_size = index_image.get_x_size();
+  _index_y_size = index_image.get_y_size();
+  _index_basename = output_filename.get_basename();
+
+  return true;
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: IndexImage::generate_html
+//       Access: Public
+//  Description: Generates all HTML files associated with reduced
+//               images into the appropriate subdirectory, and
+//               generates root-level HTML code to access the
+//               thumbnails on the index image into the indicated
+//               stream.
+////////////////////////////////////////////////////////////////////
+bool IndexImage::
+generate_html(ostream &root_html, const Filename &archive_dir,
+              const Filename &roll_dir_root) {
+  root_html
+    << "<a name=\"" << _name << "\">\n"
+    << "<img src=\"" << _index_basename
+    << "\" width=" << _index_x_size << " height=" << _index_y_size
+    << " ismap usemap=\"#" << _name << "\">\n"
+    << "<map name=\"" << _name << "\"><br>\n";
+
+  Photos::const_iterator pi;
+  for (pi = _photos.begin(); pi != _photos.end(); ++pi) {
+    const PhotoInfo &pinfo = (*pi);
+    int photo_index = pinfo._photo_index;
+    Photo *photo = _dir->get_photo(pinfo._photo_index);
+    Filename html_relname("html/" + _dir->get_basename(), 
+                          photo->get_basename());
+    html_relname.set_extension("htm");
+
+    Filename html_filename(archive_dir, html_relname);
+    html_filename.make_dir();
+    html_filename.set_text();
+    ofstream reduced_html;
+    if (!html_filename.open_write(reduced_html)) {
+      nout << "Unable to write to " << html_filename << "\n";
+      return false;
+    }
+    if (!generate_reduced_html(reduced_html, photo, photo_index,
+                               pi - _photos.begin(), roll_dir_root)) {
+      return false;
+    }
+
+    root_html
+      << "  <area shape=\"RECT\" href=\"" << html_relname 
+      << "\" coords=\""
+      << pinfo._x_place << "," << pinfo._y_place << ","
+      << pinfo._x_place + thumb_width << "," 
+      << pinfo._y_place + thumb_height + thumb_caption_height
+      << "\">\n";
+  }
+
+  root_html
+    << "</map>\n";
+
+  return true;
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: IndexImage::output
+//       Access: Public
+//  Description:
+////////////////////////////////////////////////////////////////////
+void IndexImage::
+output(ostream &out) const {
+  out << _name;
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: IndexImage::write
+//       Access: Public
+//  Description:
+////////////////////////////////////////////////////////////////////
+void IndexImage::
+write(ostream &out, int indent_level) const {
+  indent(out, indent_level)
+    << _name << "\n";
+  Photos::const_iterator pi;
+  for (pi = _photos.begin(); pi != _photos.end(); ++pi) {
+    const PhotoInfo &pinfo = (*pi);
+    indent(out, indent_level + 2)
+      << *_dir->get_photo(pinfo._photo_index) << "\n";
+  }
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: IndexImage::generate_reduced_html
+//       Access: Public
+//  Description: Generates HTML code for rendering the indicated
+//               reduced-image photo into the given ostream.
+////////////////////////////////////////////////////////////////////
+bool IndexImage::
+generate_reduced_html(ostream &html, Photo *photo, int photo_index, int pi,
+                      const Filename &roll_dir_root) {
+  Filename full_dir =
+    compose_href("../..", roll_dir_root, _dir->get_basename());
+  Filename full(full_dir, photo->get_basename());
+
+  Filename reduced_dir("../../reduced", _dir->get_basename());
+  Filename reduced(reduced_dir, photo->get_basename());
+
+  Filename root_html("../..", "index.htm");
+  string up_href = root_html.get_fullpath() + "#" + _name;
+
+  Filename prev_photo_filename;
+  Filename next_photo_filename;
+
+  if (pi != 0) {
+    // If this is not the first photo on the index, "back" will take
+    // us to the previous photo on the same index.
+    Photo *prev_photo = _dir->get_photo(_photos[pi - 1]._photo_index);
+    prev_photo_filename = Filename(prev_photo->get_basename());
+    prev_photo_filename.set_extension("htm");
+
+  } else {
+    // If this is the first photo on the index, "back" will take us to
+    // the last photo on the previous index.  Or even to the last
+    // photo on the previous roll.
+    RollDirectory *roll_dir = _dir;
+    int index = _index - 1;
+    while (index < 0 && roll_dir->_prev != (RollDirectory *)NULL) {
+      roll_dir = roll_dir->_prev;
+      index = roll_dir->get_num_index_images() - 1;
+    }
+
+    if (index >= 0) {
+      IndexImage *prev_index = roll_dir->get_index_image(index);
+      nassertr(!prev_index->_photos.empty(), false);
+      Photo *prev_photo = 
+        roll_dir->get_photo(prev_index->_photos.back()._photo_index);
+      Filename other_dir("..", roll_dir->get_basename());
+      prev_photo_filename = Filename(other_dir, prev_photo->get_basename());
+      prev_photo_filename.set_extension("htm");
+    } 
+  }
+
+  if (pi + 1 < (int)_photos.size()) {
+    // If this is not the last photo, "next" will take us to the next
+    // photo on the same index.
+    Photo *next_photo = _dir->get_photo(_photos[pi + 1]._photo_index);
+    next_photo_filename = Filename(next_photo->get_basename());
+    next_photo_filename.set_extension("htm");
+
+  } else {
+    // If this is the last photo on the index, "next" will take us to
+    // the first photo on the next index.  Or even to the first photo
+    // on the next roll.
+
+    RollDirectory *roll_dir = _dir;
+    int index = _index + 1;
+    while (index >= roll_dir->get_num_index_images() && 
+           roll_dir->_next != (RollDirectory *)NULL) {
+      roll_dir = roll_dir->_next;
+      index = 0;
+    }
+
+    if (index < roll_dir->get_num_index_images()) {
+      IndexImage *next_index = roll_dir->get_index_image(index);
+      nassertr(!next_index->_photos.empty(), false);
+      Photo *next_photo = 
+        roll_dir->get_photo(next_index->_photos.front()._photo_index);
+      Filename other_dir("..", roll_dir->get_basename());
+      next_photo_filename = Filename(other_dir, next_photo->get_basename());
+      next_photo_filename.set_extension("htm");
+    }
+  }
+
+  html 
+    << "<html>\n"
+    << "<head>\n"
+    << "<title>" << photo->get_name() << " (" << photo_index + 1 << " of "
+    << _dir->get_num_photos() << " on " << _dir->get_basename() 
+    << ")</title>\n"
+    << "</head>\n"
+    << "<body>\n"
+    << "<h1>" << photo->get_name() << " (" << photo_index + 1 << " of "
+    << _dir->get_num_photos() << ")</h1>";
+
+  generate_nav_buttons(html, prev_photo_filename, next_photo_filename,
+                       up_href);
+
+  Filename cm_filename(_dir->get_dir(), photo->get_basename());
+  cm_filename.set_extension("cm");
+  if (cm_filename.exists()) {
+    // If a comment file for the photo exists, insert its contents
+    // here, right above the photo.
+    if (!RollDirectory::insert_html_comment(html, cm_filename)) {
+      return false;
+    }
+  }
+
+  html
+    << "<p><a href=\"" << reduced << "\">"
+    << "<img src=\"" << reduced << "\" width=" << photo->_reduced_x_size
+    << " height=" << photo->_reduced_y_size << " alt=\"" << photo->get_name()
+    << "\"></a></p>\n";
+
+  html
+    << "<p><a href=\"" << full << "\">View full size image ("
+    << photo->_full_x_size << " x " << photo->_full_y_size << ")</a></p>";
+
+  generate_nav_buttons(html, prev_photo_filename, next_photo_filename,
+                       up_href);
+
+  html
+    << "</body>\n"
+    << "</html>\n";
+
+  return true;
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: IndexImage::generate_nav_buttons
+//       Access: Private, Static
+//  Description: Outputs the HTML code to generate the next, prev,
+//               up buttons when viewing each reduced image.
+////////////////////////////////////////////////////////////////////
+void IndexImage::
+generate_nav_buttons(ostream &html, const Filename &prev_photo_filename,
+                     const Filename &next_photo_filename, 
+                     const string &up_href) {
+  html << "<p>\n";
+
+  bool first_icons = false;
+  if (!prev_icon.empty() && !next_icon.empty()) {
+    first_icons = true;
+    // Use icons to go forward and back.
+    Filename prev_icon_href = compose_href("../..", prev_icon);
+    if (prev_photo_filename.empty()) {
+      html << "<img src=\"" << prev_icon_href << "\" alt=\"No previous photo\">\n";
+    } else {
+      html << "<a href=\"" << prev_photo_filename
+           << "\"><img src=\"" << prev_icon_href << "\" alt=\"previous\"></a>\n";
+    }
+
+    Filename next_icon_href = compose_href("../..", next_icon);
+    if (next_photo_filename.empty()) {
+      html << "<img src=\"" << next_icon_href << "\" alt=\"No next photo\">\n";
+    } else {
+      html << "<a href=\"" << next_photo_filename
+           << "\"><img src=\"" << next_icon_href << "\" alt=\"next\"></a>\n";
+    }
+
+  } else {
+    // No prev/next icons; use text to go forward and back.
+    if (prev_photo_filename.empty()) {
+      html << "(This is the first photo.)\n";
+    } else {
+      html << "<a href=\"" << prev_photo_filename
+           << "\">Back to previous photo</a>\n";
+    }
+    
+    if (next_photo_filename.empty()) {
+      html << "<br>(This is the last photo.)\n";
+    } else {
+      html << "<br><a href=\"" << next_photo_filename
+           << "\">On to next photo</a>\n";
+    }
+  }
+
+  if (!up_href.empty()) {
+    if (!up_icon.empty()) {
+      // Use an icon to go up.
+      if (!first_icons) {
+        html << "<br>";
+      } else {
+        html << "&nbsp;&nbsp;&nbsp;";
+      }
+      Filename up_icon_href = compose_href("../..", up_icon);
+      html << "<a href=\"" << up_href
+           << "\"><img src=\"" << up_icon_href << "\" alt=\"return to index\"></a>\n";
+    } else {
+      // No up icon; use text to go up.
+      html << "<br><a href=\"" << up_href
+           << "\">Return to index</a>\n";
+    }
+  }
+  html << "</p>\n";
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: IndexImage::compose_href
+//       Access: Private
+//  Description: Combines a user-supplied prefix with a relative
+//               directory to generate the appropriate href to the
+//               file.
+//
+//               rel_dir is the relative path to archive_dir.
+//               user_prefix is the string the user indicated as the
+//               relative or absolute path to the file's parent
+//               directory from archive_dir.  basename is the name
+//               of the file, or empty if the filename is part of
+//               user_prefix.
+////////////////////////////////////////////////////////////////////
+Filename IndexImage::
+compose_href(const Filename &rel_dir, const Filename &user_prefix,
+             const Filename &basename) {
+  Filename result;
+
+  if (user_prefix.empty()) {
+    result = rel_dir;
+
+  } else {
+    // Check to see if the user prefix begins with a URL designator,
+    // like http:// or ftp://.
+    size_t ui = 0;
+    while (ui < user_prefix.length() && isalpha(user_prefix[ui])) {
+      ui++;
+    }
+    bool is_url = (user_prefix.get_fullpath().substr(ui, 3) == "://");
+    
+    if (!is_url && user_prefix.is_local()) {
+      Filename rel_user_dir(rel_dir, user_prefix);
+      result = rel_user_dir;
+      result.standardize();
+      
+    } else {
+      result = user_prefix;
+    }
+  }
+
+  if (basename.empty()) {
+    return result;
+  } else {
+    return Filename(result, basename);
+  }
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: IndexImage::compute_reduction
+//       Access: Private, Static
+//  Description: Computes the amount by which the source image must be
+//               scaled to fit within the indicated box, and clears
+//               the dest_image to the computed size.
+////////////////////////////////////////////////////////////////////
+void IndexImage::
+compute_reduction(const PNMImage &source_image, PNMImage &dest_image,
+                  int x_size, int y_size) {
+  double x_scale = (double)x_size / (double)source_image.get_x_size();
+  double y_scale = (double)y_size / (double)source_image.get_y_size();
+  double scale = min(x_scale, y_scale);
+
+  scale = min(scale, 1.0);
+
+  int new_x_size = (int)(source_image.get_x_size() * scale + 0.5);
+  int new_y_size = (int)(source_image.get_y_size() * scale + 0.5);
+
+  dest_image.clear(new_x_size, new_y_size,
+                   source_image.get_num_channels(),
+                   source_image.get_maxval());
+}

+ 90 - 0
pandaapp/src/indexify/indexImage.h

@@ -0,0 +1,90 @@
+// Filename: indexImage.h
+// Created by:  drose (03Apr02)
+//
+////////////////////////////////////////////////////////////////////
+//
+// PANDA 3D SOFTWARE
+// Copyright (c) 2001, Disney Enterprises, Inc.  All rights reserved
+//
+// All use of this software is subject to the terms of the Panda 3d
+// Software license.  You should have received a copy of this license
+// along with this source code; you will also find a current copy of
+// the license at http://www.panda3d.org/license.txt .
+//
+// To contact the maintainers of this program write to
+// [email protected] .
+//
+////////////////////////////////////////////////////////////////////
+
+#ifndef INDEXIMAGE_H
+#define INDEXIMAGE_H
+
+#include "pandatoolbase.h"
+
+#include "filename.h"
+#include "pvector.h"
+
+class RollDirectory;
+class Photo;
+class TextMaker;
+class PNMImage;
+
+////////////////////////////////////////////////////////////////////
+//       Class : IndexImage
+// Description : An aggregate image containing several thumbnails, one
+//               for each of several photos.  A roll directory will
+//               collect its photos into one or more IndexImages.
+////////////////////////////////////////////////////////////////////
+class IndexImage {
+public:
+  IndexImage(RollDirectory *dir, int index);
+  ~IndexImage();
+
+  bool add_photo(int index);
+  bool generate_images(const Filename &archive_dir, TextMaker *text_maker);
+  bool generate_html(ostream &root_html, const Filename &archive_dir,
+                     const Filename &roll_dir_root);
+
+  void output(ostream &out) const;
+  void write(ostream &out, int indent_level) const;
+
+private:
+  bool generate_reduced_html(ostream &html, Photo *photo, int photo_index,
+                             int pi, const Filename &roll_dir_root);
+  void generate_nav_buttons(ostream &html, const Filename &prev_photo_filename,
+                            const Filename &next_photo_filename, 
+                            const string &up_href);
+
+  Filename compose_href(const Filename &rel_dir, const Filename &user_prefix,
+                        const Filename &basename = Filename());
+
+  static void compute_reduction(const PNMImage &source_image,
+                                PNMImage &dest_image,
+                                int x_size, int y_size);
+
+private:
+  RollDirectory *_dir;
+  int _index;
+  string _name;
+
+  class PhotoInfo {
+  public:
+    int _photo_index;
+    int _x_place;
+    int _y_place;
+  };
+
+  typedef pvector<PhotoInfo> Photos;
+  Photos _photos;
+
+  int _index_x_size;
+  int _index_y_size;
+  string _index_basename;
+};
+
+INLINE ostream &operator << (ostream &out, const IndexImage &d) {
+  d.output(out);
+  return out;
+}
+
+#endif

+ 63 - 0
pandaapp/src/indexify/indexParameters.cxx

@@ -0,0 +1,63 @@
+// Filename: indexParameters.cxx
+// Created by:  drose (04Apr02)
+//
+////////////////////////////////////////////////////////////////////
+//
+// PANDA 3D SOFTWARE
+// Copyright (c) 2001, Disney Enterprises, Inc.  All rights reserved
+//
+// All use of this software is subject to the terms of the Panda 3d
+// Software license.  You should have received a copy of this license
+// along with this source code; you will also find a current copy of
+// the license at http://www.panda3d.org/license.txt .
+//
+// To contact the maintainers of this program write to
+// [email protected] .
+//
+////////////////////////////////////////////////////////////////////
+
+#include "indexParameters.h"
+
+// User parameters
+int max_index_width = 700;
+int max_index_height = 700;
+
+int thumb_width = 100;
+int thumb_height = 100;
+int thumb_caption_height = 16;
+int thumb_x_space = 16;
+int thumb_y_space = 16;
+
+int caption_font_size = 14;
+
+int reduced_width = 800;
+int reduced_height = 700;
+
+Filename prev_icon;
+Filename next_icon;
+Filename up_icon;
+
+// Computed parameters
+int thumb_count_x;
+int thumb_count_y;
+int max_thumbs;
+int actual_index_width;
+
+////////////////////////////////////////////////////////////////////
+//     Function: finalize_parameters
+//  Description: This is called after all user parameters have been
+//               changed, to do whatever computations are required for
+//               the other parameters that are based on the user
+//               parameters.
+////////////////////////////////////////////////////////////////////
+void
+finalize_parameters() {
+  thumb_count_x = 
+    (max_index_width - thumb_x_space) / (thumb_width + thumb_x_space);
+  thumb_count_y = 
+    (max_index_height - thumb_y_space) / (thumb_height + thumb_caption_height + thumb_y_space);
+  
+  max_thumbs = thumb_count_x * thumb_count_y;
+  
+  actual_index_width = thumb_x_space + thumb_count_x * (thumb_width + thumb_x_space);
+}

+ 58 - 0
pandaapp/src/indexify/indexParameters.h

@@ -0,0 +1,58 @@
+// Filename: indexParameters.h
+// Created by:  drose (04Apr02)
+//
+////////////////////////////////////////////////////////////////////
+//
+// PANDA 3D SOFTWARE
+// Copyright (c) 2001, Disney Enterprises, Inc.  All rights reserved
+//
+// All use of this software is subject to the terms of the Panda 3d
+// Software license.  You should have received a copy of this license
+// along with this source code; you will also find a current copy of
+// the license at http://www.panda3d.org/license.txt .
+//
+// To contact the maintainers of this program write to
+// [email protected] .
+//
+////////////////////////////////////////////////////////////////////
+
+#ifndef INDEXPARAMETERS_H
+#define INDEXPARAMETERS_H
+
+#include "pandatoolbase.h"
+
+#include "filename.h"
+
+// Some of these constants may be modified by command-line parameters
+// from the user.
+
+extern int max_index_width;
+extern int max_index_height;
+
+extern int thumb_width;
+extern int thumb_height;
+extern int thumb_caption_height;
+extern int thumb_x_space;
+extern int thumb_y_space;
+
+extern int caption_font_size;
+
+extern int reduced_width;
+extern int reduced_height;
+
+extern Filename prev_icon;
+extern Filename next_icon;
+extern Filename up_icon;
+
+void finalize_parameters();
+
+// The following parameters are all computed based on the above.
+
+extern int thumb_count_x;
+extern int thumb_count_y;
+extern int max_thumbs;
+extern int actual_index_width;
+
+#endif
+
+

+ 376 - 0
pandaapp/src/indexify/indexify.cxx

@@ -0,0 +1,376 @@
+// Filename: indexify.cxx
+// Created by:  drose (03Apr02)
+//
+////////////////////////////////////////////////////////////////////
+//
+// PANDA 3D SOFTWARE
+// Copyright (c) 2001, Disney Enterprises, Inc.  All rights reserved
+//
+// All use of this software is subject to the terms of the Panda 3d
+// Software license.  You should have received a copy of this license
+// along with this source code; you will also find a current copy of
+// the license at http://www.panda3d.org/license.txt .
+//
+// To contact the maintainers of this program write to
+// [email protected] .
+//
+////////////////////////////////////////////////////////////////////
+
+#include "indexify.h"
+#include "rollDirectory.h"
+#include "notify.h"
+#include "textMaker.h"
+#include "default_font.h"
+#include "default_index_icons.h"
+#include "indexParameters.h"
+
+#include <math.h>
+
+////////////////////////////////////////////////////////////////////
+//     Function: Indexify::Constructor
+//       Access: Public
+//  Description:
+////////////////////////////////////////////////////////////////////
+Indexify::
+Indexify() {
+  clear_runlines();
+  add_runline("[opts] roll1-dir roll2-dir [roll3-dir ...]");
+
+  set_program_description
+    ("This program reads a collection of directories containing photo "
+     "archives (typically JPEG files), and will generate a number of "
+     "thumbnail images and a series of HTML pages to browse them.  It is "
+     "especially useful in preparation for burning the photo archives to "
+     "CD.");
+
+  add_option
+    ("t", "title", 0,
+     "Specifies the title to give to the front HTML page.",
+     &Indexify::dispatch_string, NULL, &_front_title);
+
+  add_option
+    ("a", "archive-dir", 0,
+     "Write the generated files to the indicated directory, instead of "
+     "the directory above roll1-dir.",
+     &Indexify::dispatch_filename, NULL, &_archive_dir);
+
+  add_option
+    ("r", "relative-dir", 0,
+     "When -a is specifies to place the generate html files in a directory "
+     "other than the one above the actual roll directories, you may need "
+     "to specify how the html files will address the roll directories.  This "
+     "parameter specifies the relative path to the directory above the roll "
+     "directories, from the directory named by -a.",
+     &Indexify::dispatch_filename, NULL, &_roll_dir_root);
+
+  add_option
+    ("e", "extension", 0,
+     "Specifies the filename extension (without a leading dot) to identify "
+     "photo files within the roll directories.  This is normally jpg.",
+     &Indexify::dispatch_string, NULL, &_photo_extension);
+
+  add_option
+    ("i", "", 0,
+     "Indicates that default navigation icon images should be generated "
+     "into a directory called \"icons\" which will be created within the "
+     "directory named by -a.  This is meaningful only if -prev, -next, and "
+     "-up are not explicitly specified.",
+     &Indexify::dispatch_none, &_generate_icons);
+
+  add_option
+    ("caption", "size", 0,
+     "Specifies the font size in pixels of the thumbnail captions.",
+     &Indexify::dispatch_int, NULL, &caption_font_size);
+
+  add_option
+    ("font", "fontname", 0,
+     "Specifies the filename of the font to use to generate the thumbnail "
+     "captions.",
+     &Indexify::dispatch_filename, NULL, &_font_filename);
+
+  add_option
+    ("thumb", "x,y", 0,
+     "Specifies the size in pixels of thumbnails.",
+     &Indexify::dispatch_int_pair, NULL, &thumb_width);
+
+  add_option
+    ("reduced", "x,y", 0,
+     "Specifies the size in pixels of reduced images (images presented after "
+     "the first click on a thumbnail).",
+     &Indexify::dispatch_int_pair, NULL, &reduced_width);
+
+  add_option
+    ("space", "x,y", 0,
+     "Specifies the x,y spacing between thumbnails in pixels.",
+     &Indexify::dispatch_int_pair, NULL, &thumb_x_space);
+
+  add_option
+    ("index", "x,y", 0,
+     "Specifies the size in pixels of the index images.",
+     &Indexify::dispatch_int_pair, NULL, &max_index_width);
+
+  add_option
+    ("prev", "filename", 0,
+     "Specifies the relative pathname from the archive directory (or "
+     "absolute pathname) to the \"previous\" photo icon.",
+     &Indexify::dispatch_filename, NULL, &prev_icon);
+
+  add_option
+    ("next", "filename", 0,
+     "Specifies the relative pathname from the archive directory (or "
+     "absolute pathname) to the \"next\" photo icon.",
+     &Indexify::dispatch_filename, NULL, &next_icon);
+
+  add_option
+    ("up", "filename", 0,
+     "Specifies the relative pathname from the archive directory (or "
+     "absolute pathname) to the \"up\" photo icon.",
+     &Indexify::dispatch_filename, NULL, &up_icon);
+
+  _photo_extension = "jpg";
+  _text_maker = (TextMaker *)NULL;
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: Indexify::Destructor
+//       Access: Public, Virtual
+//  Description:
+////////////////////////////////////////////////////////////////////
+Indexify::
+~Indexify() {
+  RollDirs::iterator di;
+  for (di = _roll_dirs.begin(); di != _roll_dirs.end(); ++di) {
+    RollDirectory *roll_dir = (*di);
+    delete roll_dir;
+  }
+
+  if (_text_maker != (TextMaker *)NULL) {
+    delete _text_maker;
+  }
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: Indexify::handle_args
+//       Access: Protected, Virtual
+//  Description: Does something with the additional arguments on the
+//               command line (after all the -options have been
+//               parsed).  Returns true if the arguments are good,
+//               false otherwise.
+////////////////////////////////////////////////////////////////////
+bool Indexify::
+handle_args(ProgramBase::Args &args) {
+  if (args.empty()) {
+    nout << "You must specify the roll directories containing archive photos on the command line.\n";
+    return false;
+  }
+
+  RollDirectory *prev_roll_dir = (RollDirectory *)NULL;
+  Args::const_iterator ai;
+  for (ai = args.begin(); ai != args.end(); ++ai) {
+    Filename filename = Filename::from_os_specific(*ai);
+    filename.standardize();
+    if (filename.is_directory()) {
+      RollDirectory *roll_dir = new RollDirectory(filename);
+      if (prev_roll_dir != (RollDirectory *)NULL) {
+        roll_dir->_prev = prev_roll_dir;
+        prev_roll_dir->_next = roll_dir;
+      }
+
+      _roll_dirs.push_back(roll_dir);
+      prev_roll_dir = roll_dir;
+
+    } else if (filename.exists()) {
+      nout << filename << " is not a directory name.\n";
+      return false;
+
+    } else {
+      nout << filename << " does not exist.\n";
+      return false;
+    }
+  }
+
+  return true;
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: Indexify::post_command_line
+//       Access: Protected, Virtual
+//  Description: This is called after the command line has been
+//               completely processed, and it gives the program a
+//               chance to do some last-minute processing and
+//               validation of the options and arguments.  It should
+//               return true if everything is fine, false if there is
+//               an error.
+////////////////////////////////////////////////////////////////////
+bool Indexify::
+post_command_line() {
+  if (_roll_dirs.empty()) {
+    nout << "No roll directories.\n";
+    return false;
+  }
+
+  if (_archive_dir.empty()) {
+    // Choose a default archive directory, above the first roll directory.
+    _archive_dir = _roll_dirs.front()->get_dir().get_dirname();
+    if (_archive_dir.empty()) {
+      _archive_dir = ".";
+    }
+  }
+  _archive_dir.standardize();
+
+  if (!_roll_dir_root.empty()) {
+    _roll_dir_root.standardize();
+  }
+
+  if (_front_title.empty()) {
+    // Supply a default title.
+    if (_roll_dirs.size() == 1) {
+      _front_title = _roll_dirs.front()->get_basename();
+    } else {
+      _front_title = _roll_dirs.front()->get_basename() + " to " + _roll_dirs.back()->get_basename();
+    }
+  }
+    
+
+  if (!_font_filename.empty()) {
+    _text_maker = new TextMaker(_font_filename, 0);
+    if (!_text_maker->is_valid()) {
+      delete _text_maker;
+      _text_maker = (TextMaker *)NULL;
+    }
+  }
+
+  if (_text_maker == (TextMaker *)NULL) {
+    _text_maker = new TextMaker(default_font, default_font_size, 0);
+    if (!_text_maker->is_valid()) {
+      nout << "Unable to open default font.\n";
+      delete _text_maker;
+      _text_maker = (TextMaker *)NULL;
+    }
+  }
+  
+  if (_text_maker != (TextMaker *)NULL) {
+    _text_maker->set_pixel_size(caption_font_size, 4.0);
+  }
+
+  if (_generate_icons) {
+    if (prev_icon.empty()) {
+      prev_icon = Filename("icons", default_left_icon_filename);
+      Filename icon_filename(_archive_dir, prev_icon);
+      icon_filename.make_dir();
+      icon_filename.set_binary();
+
+      ofstream output;
+      if (!icon_filename.open_write(output)) {
+        nout << "Unable to write to " << icon_filename << "\n";
+        exit(1);
+      }
+      output.write(default_left_icon, default_left_icon_size);
+    }
+    if (next_icon.empty()) {
+      next_icon = Filename("icons", default_right_icon_filename);
+      Filename icon_filename(_archive_dir, next_icon);
+      icon_filename.make_dir();
+      icon_filename.set_binary();
+
+      ofstream output;
+      if (!icon_filename.open_write(output)) {
+        nout << "Unable to write to " << icon_filename << "\n";
+        exit(1);
+      }
+      output.write(default_right_icon, default_right_icon_size);
+    }
+    if (up_icon.empty()) {
+      up_icon = Filename("icons", default_up_icon_filename);
+      Filename icon_filename(_archive_dir, up_icon);
+      icon_filename.make_dir();
+      icon_filename.set_binary();
+
+      ofstream output;
+      if (!icon_filename.open_write(output)) {
+        nout << "Unable to write to " << icon_filename << "\n";
+        exit(1);
+      }
+      output.write(default_up_icon, default_up_icon_size);
+    }
+  }
+
+  // Provide a little bit of whitespace above the captions.
+  thumb_caption_height = (int)ceil(caption_font_size * 8.0 / 7.0);
+
+  finalize_parameters();
+
+
+  return ProgramBase::post_command_line();
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: Indexify::run
+//       Access: Public
+//  Description:
+////////////////////////////////////////////////////////////////////
+void Indexify::
+run() {
+  bool all_ok = true;
+
+  RollDirs::iterator di;
+  for (di = _roll_dirs.begin(); di != _roll_dirs.end(); ++di) {
+    RollDirectory *roll_dir = (*di);
+    if (!roll_dir->scan(_photo_extension)) {
+      nout << "Unable to read " << *roll_dir << "\n";
+      all_ok = false;
+    }
+    roll_dir->collect_index_images();
+  }
+
+  if (!all_ok) {
+    exit(1);
+  }
+
+  // First, generate all the images.
+  for (di = _roll_dirs.begin(); di != _roll_dirs.end(); ++di) {
+    RollDirectory *roll_dir = (*di);
+    if (!roll_dir->generate_images(_archive_dir, _text_maker)) {
+      nout << "Failure.\n";
+      exit(1);
+    }
+  }
+
+  // Then go back and generate the HTML.
+
+  Filename html_filename(_archive_dir, "index.htm");
+  html_filename.set_text();
+  ofstream root_html;
+  if (!html_filename.open_write(root_html)) {
+    nout << "Unable to write to " << html_filename << "\n";
+    exit(1);
+  }
+
+  root_html
+    << "<html>\n"
+    << "<head>\n"
+    << "<title>" << _front_title << "</title>\n"
+    << "</head>\n"
+    << "<body>\n"
+    << "<h1>" << _front_title << "</h1>\n";
+
+  for (di = _roll_dirs.begin(); di != _roll_dirs.end(); ++di) {
+    RollDirectory *roll_dir = (*di);
+    if (!roll_dir->generate_html(root_html, _archive_dir, _roll_dir_root)) {
+      nout << "Failure.\n";
+      exit(1);
+    }
+  }
+
+  root_html
+    << "</body>\n"
+    << "</html>\n";
+}
+
+
+int main(int argc, char *argv[]) {
+  Indexify prog;
+  prog.parse_command_line(argc, argv);
+  prog.run();
+  return 0;
+}

+ 60 - 0
pandaapp/src/indexify/indexify.h

@@ -0,0 +1,60 @@
+// Filename: indexify.h
+// Created by:  drose (03Apr02)
+//
+////////////////////////////////////////////////////////////////////
+//
+// PANDA 3D SOFTWARE
+// Copyright (c) 2001, Disney Enterprises, Inc.  All rights reserved
+//
+// All use of this software is subject to the terms of the Panda 3d
+// Software license.  You should have received a copy of this license
+// along with this source code; you will also find a current copy of
+// the license at http://www.panda3d.org/license.txt .
+//
+// To contact the maintainers of this program write to
+// [email protected] .
+//
+////////////////////////////////////////////////////////////////////
+
+#ifndef INDEXIFY_H
+#define INDEXIFY_H
+
+#include "pandatoolbase.h"
+
+#include "programBase.h"
+#include "filename.h"
+#include "pvector.h"
+
+class RollDirectory;
+class TextMaker;
+
+////////////////////////////////////////////////////////////////////
+//       Class : Indexify
+// Description :
+////////////////////////////////////////////////////////////////////
+class Indexify : public ProgramBase {
+public:
+  Indexify();
+  virtual ~Indexify();
+
+protected:
+  virtual bool handle_args(Args &args);
+  virtual bool post_command_line();
+
+public:
+  void run();
+
+  string _front_title;
+  Filename _archive_dir;
+  Filename _roll_dir_root;
+  string _photo_extension;
+  Filename _font_filename;
+  bool _generate_icons;
+
+  typedef pvector<RollDirectory *> RollDirs;
+  RollDirs _roll_dirs;
+
+  TextMaker *_text_maker;
+};
+
+#endif

+ 69 - 0
pandaapp/src/indexify/photo.cxx

@@ -0,0 +1,69 @@
+// Filename: photo.cxx
+// Created by:  drose (03Apr02)
+//
+////////////////////////////////////////////////////////////////////
+//
+// PANDA 3D SOFTWARE
+// Copyright (c) 2001, Disney Enterprises, Inc.  All rights reserved
+//
+// All use of this software is subject to the terms of the Panda 3d
+// Software license.  You should have received a copy of this license
+// along with this source code; you will also find a current copy of
+// the license at http://www.panda3d.org/license.txt .
+//
+// To contact the maintainers of this program write to
+// [email protected] .
+//
+////////////////////////////////////////////////////////////////////
+
+#include "photo.h"
+
+
+////////////////////////////////////////////////////////////////////
+//     Function: Photo::Constructor
+//       Access: Public
+//  Description:
+////////////////////////////////////////////////////////////////////
+Photo::
+Photo(RollDirectory *dir, const Filename &basename) :
+  _dir(dir),
+  _basename(basename)
+{
+  _name = _basename.get_basename_wo_extension();
+  _full_x_size = 0;
+  _full_y_size = 0;
+  _reduced_x_size = 0;
+  _reduced_y_size = 0;
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: Photo::get_basename
+//       Access: Public
+//  Description: Returns the filename of the photo within its roll
+//               directory.
+////////////////////////////////////////////////////////////////////
+const Filename &Photo::
+get_basename() const {
+  return _basename;
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: Photo::get_name
+//       Access: Public
+//  Description: Returns the name of the photo without its filename
+//               extension.
+////////////////////////////////////////////////////////////////////
+const string &Photo::
+get_name() const {
+  return _name;
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: Photo::output
+//       Access: Public
+//  Description:
+////////////////////////////////////////////////////////////////////
+void Photo::
+output(ostream &out) const {
+  out << _basename;
+}

+ 58 - 0
pandaapp/src/indexify/photo.h

@@ -0,0 +1,58 @@
+// Filename: photo.h
+// Created by:  drose (03Apr02)
+//
+////////////////////////////////////////////////////////////////////
+//
+// PANDA 3D SOFTWARE
+// Copyright (c) 2001, Disney Enterprises, Inc.  All rights reserved
+//
+// All use of this software is subject to the terms of the Panda 3d
+// Software license.  You should have received a copy of this license
+// along with this source code; you will also find a current copy of
+// the license at http://www.panda3d.org/license.txt .
+//
+// To contact the maintainers of this program write to
+// [email protected] .
+//
+////////////////////////////////////////////////////////////////////
+
+#ifndef PHOTO_H
+#define PHOTO_H
+
+#include "pandatoolbase.h"
+
+#include "filename.h"
+
+class RollDirectory;
+
+////////////////////////////////////////////////////////////////////
+//       Class : Photo
+// Description : A single photo image within a roll directory.
+////////////////////////////////////////////////////////////////////
+class Photo {
+public:
+  Photo(RollDirectory *dir, const Filename &basename);
+
+  const Filename &get_basename() const;
+  const string &get_name() const;
+
+  void output(ostream &out) const;
+
+public:
+  int _full_x_size;
+  int _full_y_size;
+  int _reduced_x_size;
+  int _reduced_y_size;
+
+private:
+  RollDirectory *_dir;
+  Filename _basename;
+  string _name;
+};
+
+INLINE ostream &operator << (ostream &out, const Photo &p) {
+  p.output(out);
+  return out;
+}
+
+#endif

+ 336 - 0
pandaapp/src/indexify/rollDirectory.cxx

@@ -0,0 +1,336 @@
+// Filename: rollDirectory.cxx
+// Created by:  drose (03Apr02)
+//
+////////////////////////////////////////////////////////////////////
+//
+// PANDA 3D SOFTWARE
+// Copyright (c) 2001, Disney Enterprises, Inc.  All rights reserved
+//
+// All use of this software is subject to the terms of the Panda 3d
+// Software license.  You should have received a copy of this license
+// along with this source code; you will also find a current copy of
+// the license at http://www.panda3d.org/license.txt .
+//
+// To contact the maintainers of this program write to
+// [email protected] .
+//
+////////////////////////////////////////////////////////////////////
+
+#include "rollDirectory.h"
+#include "photo.h"
+#include "indexImage.h"
+#include "indent.h"
+#include "notify.h"
+#include "string_utils.h"
+
+////////////////////////////////////////////////////////////////////
+//     Function: RollDirectory::Constructor
+//       Access: Public
+//  Description:
+////////////////////////////////////////////////////////////////////
+RollDirectory::
+RollDirectory(const Filename &dir) :
+  _dir(dir)
+{
+  _basename = _dir.get_basename();
+  _prev = (RollDirectory *)NULL;
+  _next = (RollDirectory *)NULL;
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: RollDirectory::Destructor
+//       Access: Public
+//  Description:
+////////////////////////////////////////////////////////////////////
+RollDirectory::
+~RollDirectory() {
+  IndexImages::iterator ii;
+  for (ii = _index_images.begin(); ii != _index_images.end(); ++ii) {
+    IndexImage *index_image = (*ii);
+    delete index_image;
+  }
+
+  Photos::iterator pi;
+  for (pi = _photos.begin(); pi != _photos.end(); ++pi) {
+    Photo *photo = (*pi);
+    delete photo;
+  }
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: RollDirectory::get_dir
+//       Access: Public
+//  Description: Returns the filename of the directory.
+////////////////////////////////////////////////////////////////////
+const Filename &RollDirectory::
+get_dir() const {
+  return _dir;
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: RollDirectory::get_basename
+//       Access: Public
+//  Description: Returns the base name of the directory.
+////////////////////////////////////////////////////////////////////
+const string &RollDirectory::
+get_basename() const {
+  return _basename;
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: RollDirectory::scan
+//       Access: Public
+//  Description: Scans the directory for all the listed photos.
+////////////////////////////////////////////////////////////////////
+bool RollDirectory::
+scan(const string &extension) {
+  vector_string contents;
+  if (!_dir.scan_directory(contents)) {
+    nout << "Could not read " << _dir << "\n";
+    return false;
+  }
+
+  vector_string::iterator ci;
+  for (ci = contents.begin(); ci != contents.end(); ++ci) {
+    Filename basename = (*ci);
+    if (basename.get_extension() == extension) {
+      _photos.push_back(new Photo(this, basename));
+    }
+  }
+
+  if (_photos.empty()) {
+    nout << _dir << " contains no photos.\n";
+    return false;
+  }
+
+  return true;
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: RollDirectory::collect_index_images
+//       Access: Public
+//  Description: Groups the photos into one or more IndexImages.
+////////////////////////////////////////////////////////////////////
+void RollDirectory::
+collect_index_images() {
+  // Don't call this twice.
+  nassertv(_index_images.empty());
+
+  IndexImage *index_image = new IndexImage(this, _index_images.size());
+  _index_images.push_back(index_image);
+
+  size_t i;
+  for (i = 0; i < _photos.size(); i++) {
+    if (!index_image->add_photo(i)) {
+      // Oops, that one's full.
+      index_image = new IndexImage(this, _index_images.size());
+      _index_images.push_back(index_image);
+      bool result = index_image->add_photo(i);
+      nassertv(result);
+    }
+  }
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: RollDirectory::get_num_photos
+//       Access: Public
+//  Description: Returns the number of photos in the roll.
+////////////////////////////////////////////////////////////////////
+int RollDirectory::
+get_num_photos() const {
+  return _photos.size();
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: RollDirectory::get_photo
+//       Access: Public
+//  Description: Returns the nth photo in the roll.
+////////////////////////////////////////////////////////////////////
+Photo *RollDirectory::
+get_photo(int n) const {
+  nassertr(n >= 0 && n < (int)_photos.size(), NULL);
+  return _photos[n];
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: RollDirectory::get_num_index_images
+//       Access: Public
+//  Description: Returns the number of index images in the roll.
+////////////////////////////////////////////////////////////////////
+int RollDirectory::
+get_num_index_images() const {
+  return _index_images.size();
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: RollDirectory::get_index_image
+//       Access: Public
+//  Description: Returns the nth index image in the roll.
+////////////////////////////////////////////////////////////////////
+IndexImage *RollDirectory::
+get_index_image(int n) const {
+  nassertr(n >= 0 && n < (int)_index_images.size(), NULL);
+  return _index_images[n];
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: RollDirectory::generate_images
+//       Access: Public
+//  Description: Generates image files appropriate to this directory
+//               to the indicated archive dir.  Returns true on
+//               success, false on failure.
+////////////////////////////////////////////////////////////////////
+bool RollDirectory::
+generate_images(const Filename &archive_dir, TextMaker *text_maker) {
+  nassertr(!_index_images.empty(), false);
+
+  IndexImages::iterator ii;
+  for (ii = _index_images.begin(); ii != _index_images.end(); ++ii) {
+    IndexImage *index_image = (*ii);
+    if (!index_image->generate_images(archive_dir, text_maker)) {
+      return false;
+    }
+  }
+
+  return true;
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: RollDirectory::generate_html
+//       Access: Public
+//  Description: Generates all appropriate HTML files for this
+//               directory, and generate the appropriate HTML code
+//               into the root_html file.
+////////////////////////////////////////////////////////////////////
+bool RollDirectory::
+generate_html(ostream &root_html, const Filename &archive_dir, 
+              const Filename &roll_dir_root) {
+  nassertr(!_index_images.empty(), false);
+
+  Filename cm_filename(_dir, _basename);
+  cm_filename.set_extension("cm");
+  if (cm_filename.exists()) {
+    // If the comment file for the roll exists, insert its contents
+    // here instead of the generic header.
+    if (!insert_html_comment(root_html, cm_filename)) {
+      return false;
+    }
+
+  } else {
+    root_html
+      << "<h2>" << _basename << "</h2>\n";
+  }
+
+  IndexImages::iterator ii;
+  for (ii = _index_images.begin(); ii != _index_images.end(); ++ii) {
+    IndexImage *index_image = (*ii);
+    if (!index_image->generate_html(root_html, archive_dir, roll_dir_root)) {
+      return false;
+    }
+  }
+
+  return true;
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: RollDirectory::output
+//       Access: Public
+//  Description:
+////////////////////////////////////////////////////////////////////
+void RollDirectory::
+output(ostream &out) const {
+  out << _basename;
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: RollDirectory::write
+//       Access: Public
+//  Description:
+////////////////////////////////////////////////////////////////////
+void RollDirectory::
+write(ostream &out, int indent_level) const {
+  indent(out, indent_level)
+    << _dir << "\n";
+
+  if (!_index_images.empty()) {
+    // If we have any index images, output those.
+    IndexImages::const_iterator ii;
+    for (ii = _index_images.begin(); ii != _index_images.end(); ++ii) {
+      const IndexImage *index_image = (*ii);
+      index_image->write(out, indent_level + 2);
+    }
+
+  } else {
+    // Otherwise, just output the photos.
+    Photos::const_iterator pi;
+    for (pi = _photos.begin(); pi != _photos.end(); ++pi) {
+      const Photo *photo = (*pi);
+      indent(out, indent_level + 2)
+        << *photo << "\n";
+    }
+  }
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: RollDirectory::insert_html_comment
+//       Access: Public, Static
+//  Description: Reads the indicated comment file and inserts its
+//               contents (after the header) within the indicated
+//               ostream at the current point.
+////////////////////////////////////////////////////////////////////
+bool RollDirectory::
+insert_html_comment(ostream &html, Filename cm_filename) {
+  cm_filename.set_text();
+  ifstream cm;
+  if (!cm_filename.open_read(cm)) {
+    nout << "Unable to read " << cm_filename << "\n";
+    return false;
+  }
+
+  // First, scan through the file looking for <BODY> or <body>.
+  string line;
+  getline(cm, line);
+  while (!cm.eof() && !cm.fail()) {
+    string lower = downcase(line);
+    size_t body = lower.find("<body>");
+    if (body != string::npos) {
+      return insert_html_comment_body(html, cm);
+    }
+    getline(cm, line);
+  }
+
+  // We didn't find it.  Insert the whole file.
+  cm.seekg(0);
+  int ch = cm.get();
+  while (ch != EOF) {
+    html.put(ch);
+    ch = cm.get();
+  }    
+
+  return true;
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: RollDirectory::insert_html_comment_body
+//       Access: Private, Static
+//  Description: Copies from the comment file up until the next
+//               </body>, or until the end of file.
+////////////////////////////////////////////////////////////////////
+bool RollDirectory::
+insert_html_comment_body(ostream &html, istream &cm) {
+  string line;
+  getline(cm, line);
+  while (!cm.eof() && !cm.fail()) {
+    string lower = downcase(line);
+    size_t body = lower.find("</body>");
+    if (body != string::npos) {
+      // Here's the end; we're done.
+      return true;
+    }
+    html << line << "\n";
+    getline(cm, line);
+  }
+
+  // Reached end of file; good enough.
+  return true;
+}

+ 83 - 0
pandaapp/src/indexify/rollDirectory.h

@@ -0,0 +1,83 @@
+// Filename: rollDirectory.h
+// Created by:  drose (03Apr02)
+//
+////////////////////////////////////////////////////////////////////
+//
+// PANDA 3D SOFTWARE
+// Copyright (c) 2001, Disney Enterprises, Inc.  All rights reserved
+//
+// All use of this software is subject to the terms of the Panda 3d
+// Software license.  You should have received a copy of this license
+// along with this source code; you will also find a current copy of
+// the license at http://www.panda3d.org/license.txt .
+//
+// To contact the maintainers of this program write to
+// [email protected] .
+//
+////////////////////////////////////////////////////////////////////
+
+#ifndef ROLLDIRECTORY_H
+#define ROLLDIRECTORY_H
+
+#include "pandatoolbase.h"
+
+#include "filename.h"
+#include "pvector.h"
+
+class Photo;
+class IndexImage;
+class TextMaker;
+
+////////////////////////////////////////////////////////////////////
+//       Class : RollDirectory
+// Description : A representation of a single directory containing one
+//               or more photos.
+////////////////////////////////////////////////////////////////////
+class RollDirectory {
+public:
+  RollDirectory(const Filename &dir);
+  ~RollDirectory();
+
+  const Filename &get_dir() const;
+  const string &get_basename() const;
+  bool scan(const string &extension);
+  void collect_index_images();
+
+  int get_num_photos() const;
+  Photo *get_photo(int n) const;
+
+  int get_num_index_images() const;
+  IndexImage *get_index_image(int n) const;
+
+  bool generate_images(const Filename &archive_dir, TextMaker *text_maker);
+  bool generate_html(ostream &root_html, const Filename &archive_dir,
+                     const Filename &roll_dir_root);
+
+  void output(ostream &out) const;
+  void write(ostream &out, int indent_level) const;
+
+  static bool insert_html_comment(ostream &html, Filename cm_filename);
+
+private:
+  static bool insert_html_comment_body(ostream &html, istream &cm);
+
+public:
+  RollDirectory *_prev;
+  RollDirectory *_next;
+
+private:
+  Filename _dir;
+  string _basename;
+  typedef pvector<Photo *> Photos;
+  Photos _photos;
+
+  typedef pvector<IndexImage *> IndexImages;
+  IndexImages _index_images;
+};
+
+INLINE ostream &operator << (ostream &out, const RollDirectory &d) {
+  d.output(out);
+  return out;
+}
+
+#endif

+ 142 - 0
pandaapp/src/indexify/textGlyph.cxx

@@ -0,0 +1,142 @@
+// Filename: textGlyph.cxx
+// Created by:  drose (03Apr02)
+//
+////////////////////////////////////////////////////////////////////
+//
+// PANDA 3D SOFTWARE
+// Copyright (c) 2001, Disney Enterprises, Inc.  All rights reserved
+//
+// All use of this software is subject to the terms of the Panda 3d
+// Software license.  You should have received a copy of this license
+// along with this source code; you will also find a current copy of
+// the license at http://www.panda3d.org/license.txt .
+//
+// To contact the maintainers of this program write to
+// [email protected] .
+//
+////////////////////////////////////////////////////////////////////
+
+#include "textGlyph.h"
+
+////////////////////////////////////////////////////////////////////
+//     Function: TextGlyph::Constructor
+//       Access: Public
+//  Description: 
+////////////////////////////////////////////////////////////////////
+TextGlyph::
+TextGlyph(double advance) : 
+  _advance(advance) 
+{
+  _left = 0;
+  _top = 0;
+  _int_advance = (int)floor(_advance + 0.5);
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: TextGlyph::Destructor
+//       Access: Public
+//  Description: 
+////////////////////////////////////////////////////////////////////
+TextGlyph::
+~TextGlyph() {
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: TextGlyph::rescale
+//       Access: Public
+//  Description: After the image has been rendered large by FreeType,
+//               scales it small again for placing.
+////////////////////////////////////////////////////////////////////
+void TextGlyph::
+rescale(double scale_factor) {
+  nassertv(scale_factor != 0.0);
+  _advance /= scale_factor;
+  _int_advance = (int)floor(_advance + 0.5);
+
+  if (_image.is_valid()) {
+    int orig_x_size = _image.get_x_size();
+    int orig_y_size = _image.get_y_size();
+    int orig_left = _left;
+    int orig_top = _top;
+
+    // Pad the image by a few pixels all around to allow for
+    // antialiasing at the edges.
+    int extra_pad = (int)ceil(scale_factor);
+    orig_x_size += 2*extra_pad;
+    orig_y_size += 2*extra_pad;
+    orig_left += extra_pad;
+    orig_top -= extra_pad;
+
+    // Now compute the reduced size.
+    int new_x_size = (int)ceil(orig_x_size / scale_factor);
+    int new_y_size = (int)ceil(orig_y_size / scale_factor);
+    int new_left = (int)floor(orig_left / scale_factor);
+    int new_top = (int)ceil(orig_top / scale_factor);
+
+    // And scale those back up so we can determine the amount of
+    // additional padding we need to make the pixels remain in the
+    // right place after the integer reduction.
+    int old_x_size = (int)(new_x_size * scale_factor + 0.5);
+    int old_y_size = (int)(new_y_size * scale_factor + 0.5);
+    int old_left = (int)(new_left * scale_factor + 0.5);
+    int old_top = (int)(new_top * scale_factor + 0.5);
+
+    int pad_left = orig_left - old_left;
+    int pad_top = old_top - orig_top;
+
+    // These shouldn't go negative.
+    nassertv(pad_left >= 0 && pad_top >= 0);
+
+    PNMImage enlarged(old_x_size, old_y_size, 1);
+    enlarged.fill(1, 1, 1);
+    enlarged.copy_sub_image(_image, pad_left + extra_pad, pad_top + extra_pad);
+
+    _image.clear(new_x_size, new_y_size, 1);
+    _image.quick_filter_from(enlarged);
+
+    _left = new_left;
+    _top = new_top;
+  }
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: TextGlyph::get_advance
+//       Access: Public
+//  Description: Returns the number of pixels by which the pen should
+//               be advanced after rendering this glyph.
+////////////////////////////////////////////////////////////////////
+int TextGlyph::
+get_advance() const {
+  return _int_advance;
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: TextGlyph::place
+//       Access: Public
+//  Description: Copies the glyph to the indicated destination image
+//               at the indicated origin.
+////////////////////////////////////////////////////////////////////
+void TextGlyph::
+place(PNMImage &dest_image, int xp, int yp) {
+  if (!_image.is_valid()) {
+    // If we have no image, do nothing.
+    return;
+  }
+  int left = xp + _left;
+  int top = yp - _top;
+  int right = left + _image.get_x_size();
+  int bottom = top + _image.get_y_size();
+
+  // Clip the glyph to the destination image.
+  int cleft = max(left, 0);
+  int ctop = max(top, 0);
+  int cright = min(right, dest_image.get_x_size());
+  int cbottom = min(bottom, dest_image.get_y_size());
+
+  for (int y = ctop; y < cbottom; y++) {
+    for (int x = cleft; x < cright; x++) {
+      double gval = _image.get_gray(x - left, y - top);
+      dest_image.set_xel(x, y, dest_image.get_xel(x, y) * gval);
+    }
+  }
+}

+ 50 - 0
pandaapp/src/indexify/textGlyph.h

@@ -0,0 +1,50 @@
+// Filename: textGlyph.h
+// Created by:  drose (03Apr02)
+//
+////////////////////////////////////////////////////////////////////
+//
+// PANDA 3D SOFTWARE
+// Copyright (c) 2001, Disney Enterprises, Inc.  All rights reserved
+//
+// All use of this software is subject to the terms of the Panda 3d
+// Software license.  You should have received a copy of this license
+// along with this source code; you will also find a current copy of
+// the license at http://www.panda3d.org/license.txt .
+//
+// To contact the maintainers of this program write to
+// [email protected] .
+//
+////////////////////////////////////////////////////////////////////
+
+#ifndef TEXTGLYPH_H
+#define TEXTGLYPH_H
+
+#include "pandatoolbase.h"
+
+#include "pnmImage.h"
+
+////////////////////////////////////////////////////////////////////
+//       Class : TextGlyph
+// Description : A single glyph in the font.
+////////////////////////////////////////////////////////////////////
+class TextGlyph {
+public:
+  TextGlyph(double advance);
+  ~TextGlyph();
+
+  void rescale(double scale_factor);
+  int get_advance() const;
+
+  void place(PNMImage &dest_image, int xp, int yp);
+
+private:
+  PNMImage _image;
+  int _top;
+  int _left;
+  double _advance;
+  int _int_advance;
+
+  friend class TextMaker;
+};
+
+#endif

+ 401 - 0
pandaapp/src/indexify/textMaker.cxx

@@ -0,0 +1,401 @@
+// Filename: textMaker.cxx
+// Created by:  drose (03Apr02)
+//
+////////////////////////////////////////////////////////////////////
+//
+// PANDA 3D SOFTWARE
+// Copyright (c) 2001, Disney Enterprises, Inc.  All rights reserved
+//
+// All use of this software is subject to the terms of the Panda 3d
+// Software license.  You should have received a copy of this license
+// along with this source code; you will also find a current copy of
+// the license at http://www.panda3d.org/license.txt .
+//
+// To contact the maintainers of this program write to
+// [email protected] .
+//
+////////////////////////////////////////////////////////////////////
+
+#include "textMaker.h"
+#include "textGlyph.h"
+#include "filename.h"
+#include "pnmImage.h"
+
+FT_Library TextMaker::_ft_library;
+bool TextMaker::_ft_initialized = false;
+bool TextMaker::_ft_ok = false;
+
+////////////////////////////////////////////////////////////////////
+//     Function: TextMaker::Constructor
+//       Access: Public
+//  Description: The constructor expects the name of some font file
+//               that FreeType can read, along with face_index,
+//               indicating which font within the file to load
+//               (usually 0).
+////////////////////////////////////////////////////////////////////
+TextMaker::
+TextMaker(const Filename &font_filename, int face_index) {
+  _is_valid = false;
+
+  if (!_ft_initialized) {
+    initialize_ft_library();
+  }
+  if (!_ft_ok) {
+    nout
+      << "Unable to read font " << font_filename
+      << ": FreeType library not initialized properly.\n";
+    return;
+  }
+
+  Filename path(font_filename);
+  if (!path.exists()) {
+    nout << "Unable to find font file " << font_filename << "\n";
+  } else {
+    string os_specific = path.to_os_specific();
+    
+    int error = FT_New_Face(_ft_library,
+                            os_specific.c_str(),
+                            face_index,
+                            &_face);
+    if (error == FT_Err_Unknown_File_Format) {
+      nout << "Unable to read font " << font_filename << ": unknown file format.\n";
+    } else if (error) {
+      nout << "Unable to read font " << font_filename << ": invalid.\n";
+
+    } else {
+      string name = _face->family_name;
+      if (_face->style_name != NULL) {
+        name += " ";
+        name += _face->style_name;
+      }
+      set_name(name);
+
+      error = FT_Select_Charmap(_face, ft_encoding_unicode);
+      if (error) {
+        error = FT_Select_Charmap(_face, ft_encoding_latin_2);
+      }
+      if (error) {
+        nout << "Unable to select ISO encoding for " << get_name() << ".\n";
+        FT_Done_Face(_face);
+
+      } else {
+        nout << "Loaded font " << get_name() << "\n";
+        _is_valid = true;
+        _scale_factor = 0.0;
+      }
+    }
+  }
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: TextMaker::Constructor
+//       Access: Public
+//  Description: This constructor works as above, but it takes the
+//               font data from an in-memory buffer instead of from a
+//               named file.
+////////////////////////////////////////////////////////////////////
+TextMaker::
+TextMaker(const char *font_data, int font_data_size, int face_index) {
+  _is_valid = false;
+
+  if (!_ft_initialized) {
+    initialize_ft_library();
+  }
+  if (!_ft_ok) {
+    nout
+      << "Unable to read internal font: FreeType library not initialized properly.\n";
+    return;
+  }
+
+  int error = FT_New_Memory_Face(_ft_library,
+                                 (const FT_Byte *)font_data, font_data_size,
+                                 face_index,
+                                 &_face);
+  if (error == FT_Err_Unknown_File_Format) {
+    nout << "Unable to read internal font: unknown file format.\n";
+  } else if (error) {
+    nout << "Unable to read internal font: invalid.\n";
+    
+  } else {
+    string name = _face->family_name;
+    if (_face->style_name != NULL) {
+      name += " ";
+      name += _face->style_name;
+    }
+    set_name(name);
+    
+    error = FT_Select_Charmap(_face, ft_encoding_unicode);
+    if (error) {
+      error = FT_Select_Charmap(_face, ft_encoding_latin_2);
+    }
+    if (error) {
+      nout << "Unable to select ISO encoding for " << get_name() << ".\n";
+      FT_Done_Face(_face);
+      
+    } else {
+      _is_valid = true;
+      _scale_factor = 0.0;
+    }
+  }
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: TextMaker::Destructor
+//       Access: Public
+//  Description: 
+////////////////////////////////////////////////////////////////////
+TextMaker::
+~TextMaker() {
+  empty_cache();
+
+  if (_is_valid) {
+    FT_Done_Face(_face);
+    _is_valid = false;
+  }
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: TextMaker::is_valid
+//       Access: Public
+//  Description: Returns true if the TextMaker is valid and ready to
+//               generate text, false otherwise.
+////////////////////////////////////////////////////////////////////
+bool TextMaker::
+is_valid() const {
+  return _is_valid;
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: TextMaker::set_pixel_size
+//       Access: Public
+//  Description: Specifies the pixel size of the font to use to
+//               generate future text.  If the scale_factor is
+//               specified, it is the factor by which to scale up the
+//               font glyphs internally before reducing them to the
+//               final output pixel_size; this works around problems
+//               FreeType has with antialiasing small pixel sizes.
+//
+//               If the font contains one or more fixed-size fonts
+//               instead of a scalable font, this will ignore the
+//               supplied scale_factor and automatically choose the
+//               scale_factor to produce the requested pixel_size
+//               output from the closest matching input size.
+////////////////////////////////////////////////////////////////////
+void TextMaker::
+set_pixel_size(int pixel_size, double scale_factor) {
+  nassertv(_is_valid);
+  reset_scale(pixel_size, scale_factor);
+  empty_cache();
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: TextMaker::generate_into
+//       Access: Public
+//  Description: Generates text into the indicated image at the
+//               indicated position.  Currently, text is centered
+//               horizontally, with the baseline on the y position.
+////////////////////////////////////////////////////////////////////
+void TextMaker::
+generate_into(const string &text, PNMImage &dest_image, int x, int y) {
+  // First, measure the total width in pixels, so we can center.
+  int width = 0;
+  string::const_iterator ti;
+  for (ti = text.begin(); ti != text.end(); ++ti) {
+    int ch = (unsigned char)(*ti);
+    TextGlyph *glyph = get_glyph(ch);
+    width += glyph->get_advance();
+  }
+
+  int xp = x - (width / 2);
+  int yp = y;
+
+  // Now place the text.
+  for (ti = text.begin(); ti != text.end(); ++ti) {
+    int ch = (unsigned char)(*ti);
+    TextGlyph *glyph = get_glyph(ch);
+    glyph->place(dest_image, xp, yp);
+    xp += glyph->get_advance();
+  }
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: TextMaker::get_glyph
+//       Access: Private
+//  Description: Returns the glyph for the indicated index, or NULL if
+//               it is not defined in the font.
+////////////////////////////////////////////////////////////////////
+TextGlyph *TextMaker::
+get_glyph(int character) {
+  int glyph_index = FT_Get_Char_Index(_face, character);
+
+  Glyphs::iterator gi;
+  gi = _glyphs.find(glyph_index);
+  if (gi != _glyphs.end()) {
+    return (*gi).second;
+  }
+
+  TextGlyph *glyph = make_glyph(glyph_index);
+  _glyphs.insert(Glyphs::value_type(glyph_index, glyph));
+  return glyph;
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: TextMaker::make_glyph
+//       Access: Private
+//  Description: Creates a new TextGlyph object for the indicated
+//               index, if possible.
+////////////////////////////////////////////////////////////////////
+TextGlyph *TextMaker::
+make_glyph(int glyph_index) {
+  int error = FT_Load_Glyph(_face, glyph_index, FT_LOAD_RENDER);
+  if (error) {
+    nout << "Unable to render glyph " << glyph_index << "\n";
+    return (TextGlyph *)NULL;
+  }
+
+  FT_GlyphSlot slot = _face->glyph;
+  FT_Bitmap &bitmap = slot->bitmap;
+
+  double advance = slot->advance.x / 64.0;
+
+  if (bitmap.width == 0 || bitmap.rows == 0) {
+    // If we got an empty bitmap, it's a special case.
+    TextGlyph *glyph = new TextGlyph(advance);
+    glyph->rescale(_scale_factor);
+    return glyph;
+
+  } else {
+    TextGlyph *glyph = new TextGlyph(advance);
+    PNMImage &glyph_image = glyph->_image;
+    glyph_image.clear(bitmap.width, bitmap.rows, 1);
+
+    if (bitmap.pixel_mode == ft_pixel_mode_mono) {
+      // This is a little bit more work: we have to expand the
+      // one-bit-per-pixel bitmap into a one-byte-per-pixel texture.
+      unsigned char *buffer_row = bitmap.buffer;
+      for (int yi = 0; yi < bitmap.rows; yi++) {
+        int bit = 0x80;
+        unsigned char *b = buffer_row;
+        for (int xi = 0; xi < bitmap.width; xi++) {
+          if (*b & bit) {
+            glyph_image.set_gray(xi, yi, 0.0);
+          } else {
+            glyph_image.set_gray(xi, yi, 1.0);
+          }
+          bit >>= 1;
+          if (bit == 0) {
+            ++b;
+            bit = 0x80;
+          }
+        }
+
+        buffer_row += bitmap.pitch;
+      }
+      
+    } else if (bitmap.pixel_mode == ft_pixel_mode_grays) {
+      // Here we must expand a grayscale pixmap with n levels of gray
+      // into our 256-level texture.
+      unsigned char *buffer_row = bitmap.buffer;
+      for (int yi = 0; yi < bitmap.rows; yi++) {
+        for (int xi = 0; xi < bitmap.width; xi++) {
+          double value = 
+            (double)buffer_row[xi] / (double)(bitmap.num_grays - 1);
+          glyph_image.set_gray(xi, yi, 1.0 - value);
+        }
+        buffer_row += bitmap.pitch;
+      }
+
+    } else {
+      nout << "Unexpected pixel mode in bitmap: " << (int)bitmap.pixel_mode << "\n";
+    }
+
+    glyph->_top = slot->bitmap_top;
+    glyph->_left = slot->bitmap_left;
+
+    glyph->rescale(_scale_factor);
+    return glyph;
+  }
+}
+ 
+////////////////////////////////////////////////////////////////////
+//     Function: TextMaker::reset_scale
+//       Access: Private
+//  Description: Sets the font to use the appropriate scale pixels,
+//               and sets _scale_factor accordingly.
+////////////////////////////////////////////////////////////////////
+bool TextMaker::
+reset_scale(int pixel_size, double scale_factor) {
+  _scale_factor = scale_factor;
+  int want_pixel_size = (int)(pixel_size * _scale_factor + 0.5);
+
+  int error = FT_Set_Pixel_Sizes(_face, want_pixel_size, want_pixel_size);
+  if (error) {
+    // If we were unable to set a particular char size, perhaps we
+    // have a non-scalable font.  Try to figure out the closest
+    // available size.
+    int best_size = -1;
+    if (_face->num_fixed_sizes > 0) {
+      best_size = 0;
+      int best_diff = abs(want_pixel_size - _face->available_sizes[0].height);
+      for (int i = 1; i < _face->num_fixed_sizes; i++) {
+        int diff = abs(want_pixel_size - _face->available_sizes[i].height);
+        if (diff < best_diff) {
+          best_size = i;
+          best_diff = diff;
+        }
+      }
+    }
+    if (best_size >= 0) {
+      int pixel_height = _face->available_sizes[best_size].height;
+      int pixel_width = _face->available_sizes[best_size].width;
+      error = FT_Set_Pixel_Sizes(_face, pixel_width, pixel_height);
+      if (!error) {
+        _scale_factor = (double)pixel_height / (double)pixel_size;
+      }
+    }
+  }
+
+  if (error) {
+    nout
+      << "Unable to set " << get_name() 
+      << " to " << pixel_size << " pixels.\n";
+    return false;
+  }
+
+  _line_height = _face->size->metrics.height / 64.0;
+
+  return true;
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: TextMaker::empty_cache
+//       Access: Private
+//  Description: Empties the cache of previously-generated glyphs.
+////////////////////////////////////////////////////////////////////
+void TextMaker::
+empty_cache() {
+  Glyphs::iterator gi;
+  for (gi = _glyphs.begin(); gi != _glyphs.end(); ++gi) {
+    TextGlyph *glyph = (*gi).second;
+    delete glyph;
+  }
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: TextMaker::initialize_ft_library
+//       Access: Private, Static
+//  Description: Should be called exactly once to initialize the
+//               FreeType library.
+////////////////////////////////////////////////////////////////////
+void TextMaker::
+initialize_ft_library() {
+  if (!_ft_initialized) {
+    int error = FT_Init_FreeType(&_ft_library);
+    _ft_initialized = true;
+    if (error) {
+      nout << "Unable to initialize FreeType.\n";
+    } else {
+      _ft_ok = true;
+    }
+  }
+}

+ 73 - 0
pandaapp/src/indexify/textMaker.h

@@ -0,0 +1,73 @@
+// Filename: textMaker.h
+// Created by:  drose (03Apr02)
+//
+////////////////////////////////////////////////////////////////////
+//
+// PANDA 3D SOFTWARE
+// Copyright (c) 2001, Disney Enterprises, Inc.  All rights reserved
+//
+// All use of this software is subject to the terms of the Panda 3d
+// Software license.  You should have received a copy of this license
+// along with this source code; you will also find a current copy of
+// the license at http://www.panda3d.org/license.txt .
+//
+// To contact the maintainers of this program write to
+// [email protected] .
+//
+////////////////////////////////////////////////////////////////////
+
+#ifndef TEXTMAKER_H
+#define TEXTMAKER_H
+
+#include "pandatoolbase.h"
+#include "pmap.h"
+#include "namable.h"
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+class Filename;
+class PNMImage;
+class TextGlyph;
+
+////////////////////////////////////////////////////////////////////
+//       Class : TextMaker
+// Description : An object that uses Freetype to generate text at a
+//               fixed pixel size into a PNMImage.
+////////////////////////////////////////////////////////////////////
+class TextMaker : public Namable {
+public:
+  TextMaker(const Filename &font_filename, int face_index);
+  TextMaker(const char *font_data, int font_data_size, int face_index);
+  ~TextMaker();
+
+  bool is_valid() const;
+
+  void set_pixel_size(int pixel_size, double scale_factor = 1.0);
+
+  void generate_into(const string &text,
+                     PNMImage &dest_image, int x, int y);
+
+private:
+  TextGlyph *get_glyph(int character);
+  TextGlyph *make_glyph(int glyph_index);
+  bool reset_scale(int pixel_size, double scale_factor);
+  void empty_cache();
+
+  static void initialize_ft_library();
+
+  bool _is_valid;
+
+  typedef pmap<int, TextGlyph *> Glyphs;
+  Glyphs _glyphs;
+
+  FT_Face _face;
+  double _scale_factor;
+  double _line_height;
+
+  static FT_Library _ft_library;
+  static bool _ft_initialized;
+  static bool _ft_ok;
+};
+
+#endif