aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgoodale <goodale@1faa4e14-9dd3-4be0-9f0e-ffe519881164>2000-09-14 19:09:58 +0000
committergoodale <goodale@1faa4e14-9dd3-4be0-9f0e-ffe519881164>2000-09-14 19:09:58 +0000
commit37a1b7289e02a794269bf1ab248da152d4c80648 (patch)
treecc7d14cc7c672fabb580671608355064ac526213
parent68d3b18fee8e7331fd47f85b396a0fe25634e0d6 (diff)
Initial version of C http thorn. There are still a fair number of things on
my to-do list, but it is fairly usable now as far as functionality is concerned. Tom git-svn-id: http://svn.cactuscode.org/arrangements/CactusConnect/HTTPD/trunk@2 1faa4e14-9dd3-4be0-9f0e-ffe519881164
-rw-r--r--README138
-rw-r--r--interface.ccl4
-rw-r--r--param.ccl29
-rw-r--r--schedule.ccl17
-rw-r--r--src/Content.c717
-rw-r--r--src/Server.c299
-rw-r--r--src/Sockets.c241
-rw-r--r--src/Startup.c99
-rw-r--r--src/http.c618
-rw-r--r--src/http_Request.h51
-rw-r--r--src/httpd.h37
-rw-r--r--src/images/wwwcactuscodeorg.h1053
-rw-r--r--src/make.code.defn9
13 files changed, 3312 insertions, 0 deletions
diff --git a/README b/README
new file mode 100644
index 0000000..a267fad
--- /dev/null
+++ b/README
@@ -0,0 +1,138 @@
+Cactus Code Thorn httpd
+Authors : Tom Goodale
+CVS info : $Header$
+--------------------------------------------------------------------------
+
+Purpose of the thorn:
+-------------------
+This is a prototype C version of a web server thorn.
+
+Usage:
+-------------------
+
+Interface:
+---------
+
+The current interface for this webserver is contained in
+
+http_Request.h
+
+(Note that this will change once we have an agreed common protocol for
+other thorns to talk to web-serving thorns.)
+
+The primary mechanism is to
+
+HTTP_RegisterPage(path, function, data)
+
+where 'path' is the URI you want to register, e.g.
+
+/parameters
+
+'function' is a function of the form
+
+int foo(cGH *cctkGH, httpRequest *request, void *data)
+
+which will be called when the page is accessed, with 'data' being the
+same data pointer that was passed into the registration routine.
+
+Note that a request of the form '/foo/bar/' will look for a page of
+the called '/foo/var/index.html' first, followed by '/foo/bar',
+followed by '/foo' followed by '/'.
+
+The httpRequest structure contains various pieces of information -
+
+request->filedes The file descriptor of the socket to write
+ to.
+
+request->body The body of the http request. This is
+ empty for a GET.
+
+request->body_length The length of the body.
+
+request->method The http method.
+request->uri The full URI of the request.
+request->residual The URI remaining after the registered URI
+ is removed from it.
+
+request->http_major_version The major version of the HTTP protocol
+ used.
+
+request->http_minor_version The minor version of the HTTP protocol
+ used.
+
+request->n_arguments The number of arguments passed to the
+ request.
+
+All other members of the structure should be considered opaque.
+
+
+To get details of arguments or HTTP header lines, the functions
+
+const char *HTTP_ArgumentValue(const httpRequest *request,
+ const char *arg);
+
+const char *HTTP_HeaderValue(const httpRequest *request,
+ const char *header);
+
+may be used. Given the name of a header field or an argument, these
+functions will return the corresponding value, or NULL if the argument
+or header does not exist.
+
+
+Writing to the browser:
+----------------------
+
+Currently this is done via the 'write' command. This takes three
+arguments - the file-descripter, a buffer, and the length of the
+buffer.
+
+The first line sent to the browser should be
+
+write(request->filedes, "HTTP/1.0 200 OK\r\n",19)
+
+(or an error code, e.g. "404 Not Found"). This should be followed by
+any HTTP headers, such as "Content-Type", followed by "\r\n\r\n" and
+then the content of your page, or at least that's what the standard
+says 8-).
+
+
+Examples:
+---------
+
+For examples of how to use the interface, please look at the Content.c
+file.
+
+Structure of the thorn:
+----------------------
+
+The thorn is split into two parts - web serving and content provision.
+
+Web serving:
+-----------
+The web server capabilities are held in
+
+Sockets.c - basic socket utilities; these should be
+ replaced by or moved to the Socket thorn.
+
+Server.c - Stuff to register and serve pages.
+
+http.c - Parsing of HTTP requests.
+
+Startup.c - normal scheduled stuff.
+
+The above files should not need to be touched apart from debugging
+purposes, to add more HTTP methods, or otherwise to enhance the
+interaction with the network and protocols.
+
+Content Provision:
+-----------------
+
+The content provision is currently all in
+
+Content.c
+
+This makes use of the interfaces in http_Request.h described above to
+provide content. In principle this could be in another thorn, but
+that should wait until we have an agreed set of interfaces to allow
+web-server thorns to be interchangeable, at least at compile time, but
+hopefully at run-time.
diff --git a/interface.ccl b/interface.ccl
new file mode 100644
index 0000000..df89c86
--- /dev/null
+++ b/interface.ccl
@@ -0,0 +1,4 @@
+# Interface definition for thorn httpd
+# $Header$
+
+implements: httpd
diff --git a/param.ccl b/param.ccl
new file mode 100644
index 0000000..56579d1
--- /dev/null
+++ b/param.ccl
@@ -0,0 +1,29 @@
+# Parameter definitions for thorn httpd
+# $Header$
+
+private:
+
+INT port "HTTP port number"
+{
+ 1:65535 :: "Any valid port"
+} 5555
+
+INT queue_length "Listen queue length"
+{
+ 1: :: "Any positive number"
+} 4
+
+INT timeout_seconds "Polling timeout seconds"
+{
+ 0: :: "Any whole number"
+} 0
+
+INT timeout_useconds "Polling timeout micro-seconds"
+{
+ 0: :: "Any whole number"
+} 0
+
+BOOLEAN standalone "Should the server poll continuously in startup"
+{
+} "no"
+ \ No newline at end of file
diff --git a/schedule.ccl b/schedule.ccl
new file mode 100644
index 0000000..5f975c3
--- /dev/null
+++ b/schedule.ccl
@@ -0,0 +1,17 @@
+# Schedule definitions for thorn httpd
+# $Header$
+
+SCHEDULE HTTP_Startup AT startup
+{
+ LANG: C
+} "HTTP daemon startup"
+
+SCHEDULE HTTP_Work AT poststep
+{
+ LANG: C
+} "HTTP working routine"
+
+SCHEDULE HTTP_Shutdown AT shutdown
+{
+ LANG: C
+} "HTTP daemon shutdown"
diff --git a/src/Content.c b/src/Content.c
new file mode 100644
index 0000000..8f44f86
--- /dev/null
+++ b/src/Content.c
@@ -0,0 +1,717 @@
+ /*@@
+ @file Content.c
+ @date Wed Sep 13 23:47:43 2000
+ @author Tom Goodale
+ @desc
+ The actual content of the web pages.
+ Note that this need not be in this thorn, since
+ it should just use the interface defined in http_Request.h
+ and should never touch the internals.
+ @enddesc
+ @version $Header$
+ @@*/
+
+#include <stdio.h>
+
+#include "cctk.h"
+
+#include "util_String.h"
+
+#include "http_Request.h"
+
+static char *rcsid = "$Header$";
+
+CCTK_FILEVERSION(DevThorns_httpd_Content_c)
+
+/********************************************************************
+ ********************* Local Data Types ***********************
+ ********************************************************************/
+
+struct httpStaticPage
+{
+ char *page;
+ unsigned int length;
+ char *mime_type;
+};
+
+/********************************************************************
+ ********************* Local Routine Prototypes *********************
+ ********************************************************************/
+
+static int RegisterImages(void);
+
+static int MainPage(cGH *cctkGH, httpRequest *request, void *data);
+static int ParameterPage(cGH *cctkGH, httpRequest *request, void *data);
+
+static int ShowStaticPage(cGH *cctkGH, httpRequest *request, void *data);
+
+static int TestPage(cGH *cctkGH, httpRequest *request, void *data);
+
+static int CompareStrings(const void *string1, const void *string2);
+
+/********************************************************************
+ ********************* Other Routine Prototypes *********************
+ ********************************************************************/
+
+/********************************************************************
+ ********************* Local Data *****************************
+ ********************************************************************/
+
+/********************************************************************
+ ********************* External Routines **********************
+ ********************************************************************/
+
+ /*@@
+ @routine HTTP_RegisterPages
+ @date Wed Sep 13 23:47:43 2000
+ @author Tom Goodale
+ @desc
+ Main page registration routine.
+ @enddesc
+ @calls
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+int HTTP_RegisterPages(void)
+{
+#ifdef HTTP_DEBUG
+ printf("Registering index.html\n");
+#endif
+
+ /* Register the master page. */
+ HTTP_RegisterPage("/index.html", MainPage, NULL);
+
+ /* Register a duff parameters page */
+
+ HTTP_RegisterPage("/parameters", ParameterPage, NULL);
+
+ /* Register a test page */
+ HTTP_RegisterPage("/test_page", TestPage, NULL);
+
+ /* Registrer images */
+ RegisterImages();
+}
+
+/********************************************************************
+ ********************* Local Routines *************************
+ ********************************************************************/
+
+ /*@@
+ @routine CompareStrings
+ @date Thu Sep 14 18:57:52 2000
+ @author Tom Goodale
+ @desc
+ Case independent string comparison to pass to qsort.
+ @enddesc
+ @calls
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+static int CompareStrings(const void *string1, const void *string2)
+{
+ return Util_StrCmpi(*(const char **)string1, *(const char **)string2);
+}
+
+/******************************************************************************
+ ***************************** Main Page **************************************
+ ******************************************************************************/
+
+
+static const char *cactus_mainheader = " \
+</HEAD>\n \
+<BODY BGCOLOR=\"#FFFFFF\" \
+ link=\"#1B831D\" vlink=\"#768000\" alink=\"#00FF00\">\n \
+<center><A HREF=\"http://www.cactuscode.org/\"> \
+<img src=\"/Images/wwwcactuscodeorg.jpg\" \
+ alt=\"Cactus\" BORDER=0></A> \
+</A> \
+<table width=70% border=0><tr><td> \
+\n";
+
+static const char *cactus_header = " \
+</HEAD>\n \
+<BODY BGCOLOR=\"#FFFFFF\" \
+ link=\"#1B831D\" vlink=\"#768000\" alink=\"#00FF00\">\n \
+<center> \
+</A> \
+<table width=70% border=0><tr><td> \
+\n";
+
+static const char *cactus_footer = \
+"</table>" \
+"\n \
+<HR size=1>\n \
+<ADDRESS><DIV ALIGN=left>\n \
+<SMALL>\n \
+<A HREF=\"http://www.cactuscode.org/\">Cactus Home Page</A><BR>\n\
+Cactus Web Interface by <A HREF=\"mailto:cactusmaint@cactuscode.org\">The Cactus Team</A><BR>\n\
+</SMALL></DIV></ADDRESS></BODY></HTML>\n";
+
+static const char base_page[] =
+"<HTML>\n<HEAD><TITLE>Test Page for Tom's trivial web server</TITLE></HEAD>\
+<BODY BGCOLOR=\"#FFFFFF\" \
+ link=\"#1B831D\" vlink=\"#768000\" alink=\"#00FF00\">\n \
+<center><A HREF=\"http://www.cactuscode.org/\"> \
+<img src=\"/Images/wwwcactuscodeorg.jpg\" \
+ alt=\"Cactus\" BORDER=0></A> \
+</A> \
+</BODY></HTML>";
+
+ /*@@
+ @routine MainPage
+ @date Wed Sep 13 23:47:43 2000
+ @author Tom Goodale
+ @desc
+ Displays the main page.
+ @enddesc
+ @calls
+ @calledby
+ @history
+ @hdate Thu Sep 14 10:54:22 2000 @hauthor Tom Goodale
+ @hdesc Copied content format from original http thorn
+ developed by Werner Benger, with the aesthetic
+ enhancements of Gabrielle Allen, John Shalf and
+ Ed Seidel.
+ @endhistory
+
+@@*/
+static int MainPage(cGH *cctkGH, httpRequest *request, void *data)
+{
+ int retval;
+ char message[4098];
+
+ /* Status message */
+ strcpy(message,"HTTP/1.0 200 OK\r\n");
+
+ write(request->filedes, message, strlen(message));
+
+ /* Content-Type */
+ strcpy(message,"Content-Type: text/html\r\n\r\n");
+
+ write(request->filedes, message, strlen(message));
+
+ /* Start the page */
+ strcpy(message,"<HTML><HEAD><TITLE>Running CACTUS Status Information</TITLE>\n");
+
+ write(request->filedes, message, strlen(message));
+
+ /* Write out the main header part */
+ write(request->filedes, cactus_mainheader, strlen(cactus_mainheader));
+
+ /* Some blurb */
+ strcpy(message, "<br>"
+ "<center><table cellspacing=5 cellpadding=5 border=0><tr><td valign=top>"
+ "<h3>Simulation web server:</h3>"
+ "<p>This browser is connected to a Cactus simulation which contains "
+ "a web server thorn. This thorn allows you to monitor the simulation, "
+ "and view and change parameters</p>"
+ "<p>Depending on which other thorns are active, there may be additional "
+ "features available, such as the viewing and downloading of output files</p>");
+
+ write(request->filedes, message, strlen(message));
+
+
+ /* CONFIGURATION DETAILS */
+
+ sprintf(message, "<h3>Configuration:</h3>"
+ "<ul> <li>Flesh version <FONT COLOR=RED> %s"
+ "</FONT></li>\n"
+ "<li>Code compiled on <FONT COLOR=RED>"
+ __DATE__ "</FONT> at <FONT COLOR=RED>"__TIME__ "</font></li>\n"
+ "</ul>", CCTK_FullVersion());
+
+ write(request->filedes, message, strlen(message));
+
+ /******************************************************************************/
+
+ /* NEW COLUMN */
+
+ strcpy(message, "</td><td valign=top>");
+
+ write(request->filedes, message, strlen(message));
+
+ /*******************************************************************************/
+
+ /* CURRENT STATE OF SIMULATION */
+
+ if (cctkGH)
+ {
+
+ sprintf(message, "<H3> Current state:</h3> "
+ "<ul><li>Physical time <FONT COLOR=RED> %f"
+ "</FONT> \n"
+ "<li>Iteration number <FONT COLOR=RED> %d"
+ "</FONT></li>\n",
+ cctkGH->cctk_time,
+ cctkGH->cctk_iteration);
+
+ }
+ else
+ {
+ strcpy(message, "<li>Current cactus time is unknown</li>\n");
+ }
+
+ write(request->filedes, message, strlen(message));
+
+ strcpy(message, "</ul>");
+
+ write(request->filedes, message, strlen(message));
+
+ /* LIST COMPILED THORNS */
+
+ {
+ int i;
+ int nthorns;
+ const char **thorns;
+
+ nthorns = CCTK_NumCompiledThorns();
+
+ thorns = (const char **)malloc(nthorns * sizeof(char *));
+
+ for(i=0; i < nthorns; i++)
+ {
+ thorns[i] = CCTK_CompiledThorn (i);
+ }
+
+ /* Sort the thorns */
+ qsort(thorns, nthorns, sizeof(char *), CompareStrings);
+
+ strcpy(message, "<h3>Compiled thorns:</h3>"
+ "<p>This list shows all thorns compiled into the executable, "
+ "those thorns which have been activated in the parameter "
+ "file for this simulation are shown in "
+ "<font color=red>red</font></p>"
+ "<UL>");
+
+ for(i=0; i < nthorns; i++)
+ {
+ strcat(message, "<LI>");
+ if (CCTK_IsThornActive(thorns[i]))
+ {
+ sprintf(message,"%s <FONT COLOR=red> %s </FONT>\n", message, thorns[i]);
+ }
+ else
+ {
+ strcat(message, thorns[i]);
+ }
+ }
+ strcat(message, "</UL>");
+
+ free(thorns);
+ }
+
+ write(request->filedes, message, strlen(message));
+
+
+ /* Finish table started by blurb */
+ strcpy(message, "</td></tr></table>");
+
+ write(request->filedes, message, strlen(message));
+
+ /* Write out the footer part. */
+
+ retval = write(request->filedes, cactus_footer, strlen(cactus_footer));
+
+ /* retval = write(request->filedes, base_page, strlen(base_page)); */
+
+ return retval;
+}
+
+
+/******************************************************************************
+ ***************************** Parameter Page *********************************
+ ******************************************************************************/
+
+ /*@@
+ @routine ParameterPage
+ @date Wed Sep 13 23:47:43 2000
+ @author Tom Goodale
+ @desc
+ Displays the parameter page.
+ @enddesc
+ @calls
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+static int ParameterPage(cGH *cctkGH, httpRequest *request, void *data)
+{
+ int retval;
+ char message[4098];
+
+ /* Status message */
+ strcpy(message,"HTTP/1.0 200 OK\r\n");
+
+ write(request->filedes, message, strlen(message));
+
+ /* Content-Type */
+ strcpy(message,"Content-Type: text/html\r\n\r\n");
+
+ write(request->filedes, message, strlen(message));
+
+ /* Start the page */
+ strcpy(message,"<HTML><HEAD><TITLE>Running CACTUS Status Information</TITLE>\n");
+
+ write(request->filedes, message, strlen(message));
+
+ /* Write out the main header part */
+ write(request->filedes, cactus_header, strlen(cactus_header));
+
+ /* This is just a test to see what the actual page requested was. */
+ sprintf(message, "Residual is '%s'\n", request->residual);
+
+ write(request->filedes, message, strlen(message));
+
+ /* Write out the footer part. */
+
+ retval = write(request->filedes, cactus_footer, strlen(cactus_footer));
+
+ /* retval = write(request->filedes, base_page, strlen(base_page)); */
+
+ return retval;
+}
+
+/******************************************************************************
+ ***************************** Images *****************************************
+ ******************************************************************************/
+
+#include "images/wwwcactuscodeorg.h"
+
+ /*@@
+ @routine RegisterImages
+ @date Wed Sep 13 23:47:43 2000
+ @author Tom Goodale
+ @desc
+ Registers images. Images are static pages, so it
+ registers a function which takes a data structure and
+ displays it.
+ @enddesc
+ @calls
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+static int RegisterImages(void)
+{
+ struct httpStaticPage *image;
+
+ image = (struct httpStaticPage *)malloc(sizeof(struct httpStaticPage));
+
+ if(image)
+ {
+ image->page = (char *)malloc(sizeof(wwwcactuscodeorg));
+ memcpy(image->page, wwwcactuscodeorg, sizeof(wwwcactuscodeorg));
+ image->length = sizeof(wwwcactuscodeorg);
+ image->mime_type = (char *)malloc(strlen("image/jpeg"));
+ strcpy(image->mime_type, "image/jpeg");
+
+#ifdef HTTP_DEBUG
+ printf("Registering /Images/wwwcactuscodeorg.jpg\n");
+#endif
+
+ HTTP_RegisterPage("/Images/wwwcactuscodeorg.jpg", ShowStaticPage, (void *)image);
+ }
+
+ return 0;
+}
+
+ /*@@
+ @routine ShowStaticPages
+ @date Wed Sep 13 23:47:43 2000
+ @author Tom Goodale
+ @desc
+ Displays a static page.
+ @enddesc
+ @calls
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+static int ShowStaticPage(cGH *cctkGH, httpRequest *request, void *data)
+{
+ int retval;
+ char message[1024];
+ struct httpStaticPage *page;
+
+ if(data)
+ {
+ page = (struct httpStaticPage *)data;
+
+ strcpy(message,"HTTP/1.0 200 OK\r\n");
+
+ write(request->filedes, message, strlen(message));
+
+ sprintf(message,"Content-Length: %d\r\nContent-Type: %s\r\n\r\n", page->length, page->mime_type);
+
+ write(request->filedes, message, strlen(message));
+
+ retval = write(request->filedes, page->page, page->length);
+ }
+ else
+ {
+ retval = -1;
+ }
+
+
+ return retval;
+}
+
+
+/******************************************************************************
+ ***************************** Test Page **************************************
+ ******************************************************************************/
+
+static char *test_page="\n
+<html>
+ <head>
+ <title>Advanced Query</title>
+ </head>
+ <body bgcolor=\"#FFFFFF\" background=\"/Images/cac_bord.gif\"
+ link=\"#1B831D\" vlink=\"#768000\" alink=\"#00FF00\">
+ <table width=80%>
+ <tr>
+ <td><img src=\"/Images/cac_space.gif\"></td>
+ <td>
+<TABLE><TR><TD NOWRAP=\"1\"><FONT SIZE=\"+3\"><font color=\"#047704\"><H1>Query Problem Reports</H1></font></FONT></TD> <TD WIDTH=\"100%\">&nbsp;</TD> <TD NOWRAP=\"1\"><tt><small>User:&nbsp;&nbsp;&nbsp;&nbsp; goodale<br>Database: normal<br>Access:&nbsp;&nbsp; edit</tt></small></TD></TR></TABLE><FORM ACTION=\"http:/test_page\" ENCTYPE=\"application/x-www-form-urlencoded\">
+<INPUT TYPE=\"submit\" NAME=\"cmd\" VALUE=\"submit query\"> or <INPUT TYPE=\"reset\" VALUE=\"reset\"><hr><center><table border=1 bgcolor=#d0d0d0><caption>Search All Text</caption><tr bgcolor=#9fbdf9><th nowrap>Search these text fields<th nowrap>using regular expression</tr>
+<tr><td>Single-line text fields:<td><INPUT TYPE=\"text\" NAME=\"text\" SIZE=30></tr>
+<tr><td>Multi-line text fields:<td><INPUT TYPE=\"text\" NAME=\"multitext\" SIZE=30></tr>
+</table>
+<table border=1 bgcolor=#d0d0d0><caption>Search By Date</caption><tr bgcolor=#9fbdf9><th nowrap>Date Search<th nowrap>Example: <tt>1999-04-01 05:00 GMT</tt></tr>
+<tr><td>Arrived After:<td><INPUT TYPE=\"text\" NAME=\"arrivedafter\" SIZE=30></tr>
+<tr><td>Arrived Before:<td><INPUT TYPE=\"text\" NAME=\"arrivedbefore\" SIZE=30></tr>
+<tr><td>Modified After:<td><INPUT TYPE=\"text\" NAME=\"modifiedafter\" SIZE=30></tr>
+<tr><td>Modified Before:<td><INPUT TYPE=\"text\" NAME=\"modifiedbefore\" SIZE=30></tr>
+<tr><td>Closed After:<td><INPUT TYPE=\"text\" NAME=\"closedafter\" SIZE=30></tr>
+<tr><td>Closed Before:<td><INPUT TYPE=\"text\" NAME=\"closedbefore\" SIZE=30></tr>
+</table>
+<table border=1 bgcolor=#d0d0d0><caption>Search Individual Fields</caption><tr bgcolor=#9fbdf9><th nowrap>Search this field<th nowrap>using regular expression, or<th nowrap>using multi-selection</tr>
+<tr valign=top><td>Category:<td><INPUT TYPE=\"text\" NAME=\"category\" SIZE=30><td><SELECT NAME=\"category\" SIZE=4 MULTIPLE>
+<OPTION VALUE=\"all\">all
+<OPTION VALUE=\"CVS\">CVS
+<OPTION VALUE=\"Cactus\">Cactus
+<OPTION VALUE=\"CactusBase\">CactusBase
+<OPTION VALUE=\"CactusEinstein-ADM\">CactusEinstein-ADM
+<OPTION VALUE=\"CactusEinstein-ADMConstraints\">CactusEinstein-ADMConstraints
+<OPTION VALUE=\"CactusEinstein-BMA\">CactusEinstein-BMA
+<OPTION VALUE=\"CactusEinstein-Einstein\">CactusEinstein-Einstein
+<OPTION VALUE=\"CactusEinstein-IDAnalyticBH\">CactusEinstein-IDAnalyticBH
+<OPTION VALUE=\"CactusEinstein-IDLinearWaves\">CactusEinstein-IDLinearWaves
+<OPTION VALUE=\"CactusEinstein\">CactusEinstein
+<OPTION VALUE=\"CactusElliptic-EllBase\">CactusElliptic-EllBase
+<OPTION VALUE=\"CactusElliptic-EllPETSc\">CactusElliptic-EllPETSc
+<OPTION VALUE=\"CactusElliptic-EllSOR\">CactusElliptic-EllSOR
+<OPTION VALUE=\"CactusElliptic-EllTest\">CactusElliptic-EllTest
+<OPTION VALUE=\"CactusElliptic\">CactusElliptic
+<OPTION VALUE=\"CactusPUGH-Interp\">CactusPUGH-Interp
+<OPTION VALUE=\"CactusPUGH-PUGH\">CactusPUGH-PUGH
+<OPTION VALUE=\"CactusPUGH\">CactusPUGH
+<OPTION VALUE=\"CactusPUGHIO-IOASCII\">CactusPUGHIO-IOASCII
+<OPTION VALUE=\"CactusPUGHIO-IOFlexIO\">CactusPUGHIO-IOFlexIO
+<OPTION VALUE=\"CactusPUGHIO-IOHDF5\">CactusPUGHIO-IOHDF5
+<OPTION VALUE=\"CactusPUGHIO-IsoSurfacer\">CactusPUGHIO-IsoSurfacer
+<OPTION VALUE=\"CactusPUGHIO\">CactusPUGHIO
+<OPTION VALUE=\"CactusWave\">CactusWave
+<OPTION VALUE=\"Compiler\">Compiler
+<OPTION VALUE=\"Documentation\">Documentation
+<OPTION VALUE=\"IO\">IO
+<OPTION VALUE=\"Thorns\">Thorns
+<OPTION VALUE=\"Webpage\">Webpage
+<OPTION VALUE=\"external\">external
+</SELECT>
+
+<tr valign=top><td>Synopsis:<td><INPUT TYPE=\"text\" NAME=\"synopsis\" SIZE=30><td>&nbsp;
+<tr valign=top><td>Confidential:<td><INPUT TYPE=\"text\" NAME=\"confidential\" SIZE=30><td><SELECT NAME=\"confidential\" SIZE=3 MULTIPLE>
+<OPTION VALUE=\"all\">all
+<OPTION VALUE=\"no\">no
+<OPTION VALUE=\"yes\">yes
+</SELECT>
+
+<tr valign=top><td>Severity:<td><INPUT TYPE=\"text\" NAME=\"severity\" SIZE=30><td><SELECT NAME=\"severity\" SIZE=4 MULTIPLE>
+<OPTION VALUE=\"all\">all
+<OPTION VALUE=\"critical\">critical
+<OPTION VALUE=\"serious\">serious
+<OPTION VALUE=\"non-critical\">non-critical
+</SELECT>
+
+<tr valign=top><td>Priority:<td><INPUT TYPE=\"text\" NAME=\"priority\" SIZE=30><td><SELECT NAME=\"priority\" SIZE=4 MULTIPLE>
+<OPTION VALUE=\"all\">all
+<OPTION VALUE=\"high\">high
+<OPTION VALUE=\"medium\">medium
+<OPTION VALUE=\"low\">low
+</SELECT>
+
+<tr valign=top><td>Responsible:<td><INPUT TYPE=\"text\" NAME=\"responsible\" SIZE=30><td><SELECT NAME=\"responsible\" SIZE=4 MULTIPLE>
+<OPTION VALUE=\"all\">all
+<OPTION VALUE=\"allen\">allen
+<OPTION VALUE=\"bernd\">bernd
+<OPTION VALUE=\"gnats-admin\">gnats-admin
+<OPTION VALUE=\"goodale\">goodale
+<OPTION VALUE=\"lanfer\">lanfer
+<OPTION VALUE=\"tradke\">tradke
+<OPTION VALUE=\"werner\">werner
+</SELECT>
+
+<tr valign=top><td>State:<td><INPUT TYPE=\"text\" NAME=\"state\" SIZE=30><br><INPUT TYPE=\"checkbox\" NAME=\"ignoreclosed\" VALUE=\"Ignore Closed\" CHECKED>Ignore Closed<td><SELECT NAME=\"state\" SIZE=4 MULTIPLE>
+<OPTION VALUE=\"all\">all
+<OPTION VALUE=\"open\">open
+<OPTION VALUE=\"analyzed\">analyzed
+<OPTION VALUE=\"suspended\">suspended
+<OPTION VALUE=\"feedback\">feedback
+<OPTION VALUE=\"Cactus4.0beta7\">Cactus4.0beta7
+<OPTION VALUE=\"Cactus4.0beta8\">Cactus4.0beta8
+<OPTION VALUE=\"Cactus4.0beta9\">Cactus4.0beta9
+<OPTION VALUE=\"closed\">closed
+</SELECT>
+
+<tr valign=top><td>Class:<td><INPUT TYPE=\"text\" NAME=\"class\" SIZE=30><td><SELECT NAME=\"class\" SIZE=4 MULTIPLE>
+<OPTION VALUE=\"all\">all
+<OPTION VALUE=\"sw-bug\">sw-bug
+<OPTION VALUE=\"doc-bug\">doc-bug
+<OPTION VALUE=\"support\">support
+<OPTION VALUE=\"feature-request\">feature-request
+<OPTION VALUE=\"mistaken\">mistaken
+<OPTION VALUE=\"duplicate\">duplicate
+</SELECT>
+
+<tr valign=top><td>Submitter-Id:<td><INPUT TYPE=\"text\" NAME=\"submitter_id\" SIZE=30><td><SELECT NAME=\"submitter_id\" SIZE=3 MULTIPLE>
+<OPTION VALUE=\"all\">all
+<OPTION VALUE=\"test\">test
+<OPTION VALUE=\"unknown\">unknown
+</SELECT>
+
+<tr valign=top><td>Originator:<td><INPUT TYPE=\"text\" NAME=\"originator\" SIZE=30><td>&nbsp;
+<tr valign=top><td>Release:<td><INPUT TYPE=\"text\" NAME=\"release\" SIZE=30><td>&nbsp;
+</table>
+<table border=1 bgcolor=#d0d0d0><caption>Select Columns to Display</caption><tr valign=top><td>Display these columns:<td><SELECT NAME=\"columns\" SIZE=14 MULTIPLE>
+<OPTION SELECTED VALUE=\"category\">category
+<OPTION VALUE=\"confidential\">confidential
+<OPTION SELECTED VALUE=\"state\">state
+<OPTION VALUE=\"class\">class
+<OPTION VALUE=\"severity\">severity
+<OPTION VALUE=\"priority\">priority
+<OPTION VALUE=\"release\">release
+<OPTION SELECTED VALUE=\"responsible\">responsible
+<OPTION VALUE=\"submitter_id\">submitter_id
+<OPTION SELECTED VALUE=\"originator\">originator
+<OPTION VALUE=\"arrival_date\">arrival_date
+<OPTION VALUE=\"last_modified\">last_modified
+<OPTION VALUE=\"closed_date\">closed_date
+<OPTION SELECTED VALUE=\"synopsis\">synopsis
+</SELECT>
+</table>
+</center>
+<hr><INPUT TYPE=\"submit\" NAME=\"cmd\" VALUE=\"submit query\"> or <INPUT TYPE=\"reset\" VALUE=\"reset\"><INPUT TYPE=\"hidden\" NAME=\".cgifields\" VALUE=\"confidential\"><INPUT TYPE=\"hidden\" NAME=\".cgifields\" VALUE=\"columns\"><INPUT TYPE=\"hidden\" NAME=\".cgifields\" VALUE=\"state\"><INPUT TYPE=\"hidden\" NAME=\".cgifields\" VALUE=\"priority\"><INPUT TYPE=\"hidden\" NAME=\".cgifields\" VALUE=\"submitter_id\"><INPUT TYPE=\"hidden\" NAME=\".cgifields\" VALUE=\"severity\"><INPUT TYPE=\"hidden\" NAME=\".cgifields\" VALUE=\"class\"><INPUT TYPE=\"hidden\" NAME=\".cgifields\" VALUE=\"ignoreclosed\"><INPUT TYPE=\"hidden\" NAME=\".cgifields\" VALUE=\"responsible\"><INPUT TYPE=\"hidden\" NAME=\".cgifields\" VALUE=\"category\"></FORM><HR><!-- Included footer with navigation bar -->
+ <div align=\"center\">
+ <table border=\"0\" width=\"100%\">
+ <tr>
+ <td bgcolor=\"#E9F4D3\" align=\"center\"
+ nowrap><font face=\"arial,helvetica\"><small><a href=\"/index.html\">Welcome</a></small></font>
+ </td>
+ <td bgcolor=\"#E9F4D3\" align=\"center\"
+ nowrap><font face=\"arial,helvetica\"><small><a href=\"/Documentation.html\">Documentation</a></small></font>
+ </td>
+ <td bgcolor=\"#E9F4D3\" align=\"center\"
+ nowrap><font face=\"arial,helvetica\"><small><a href=\"/Download.html\">Download</a></small></font>
+ </td>
+ <td bgcolor=\"#E9F4D3\" align=\"center\"
+ nowrap><font face=\"arial,helvetica\"><small><a href=\"/Development.html\">Development</a></small></font>
+ </td>
+ <td bgcolor=\"#E9F4D3\" align=\"center\"
+ nowrap><font face=\"arial,helvetica\"><small><a href=\"/Showcase.html\">Showcase</a></small></font>
+ </td>
+ <td bgcolor=\"#E9F4D3\" align=\"center\"
+ nowrap><font face=\"arial,helvetica\"><small><a href=\"/Links.html\">Links</a></small></font>
+ </td>
+ </tr>
+ <tr>
+ <td align=\"center\" colspan=\"6\">
+ <a href=\"/index.html\"><img src=\"/images/wwwcactuscodeorg_small.jpg\"
+ border=\"0\" alt=\"CactusCode\"></a><br>
+ <a href=\"mailto:cactus@cactuscode.org\">cactus@cactuscode.org</a>
+ <!--#config timefmt=\"Last Modified: <i>%a %b %d, %Y</i>\" -->
+ <!--#echo var=\"LAST_MODIFIED\" -->
+ </td>
+ </tr>
+ </table>
+ </div>
+</td></tr></table></BODY></HTML>";
+
+ /*@@
+ @routine TestPage
+ @date Thu Sep 14 20:42:37 2000
+ @author Tom Goodale
+ @desc
+ A test page for showing how to access arguments and header lines
+ and generally playing about.
+ If this is called with no arguments, it displays a form. If it is
+ called with arguments it displays some info.
+ @enddesc
+ @calls
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+static int TestPage(cGH *cctkGH, httpRequest *request, void *data)
+{
+ int retval;
+ char message[1024];
+
+ const char *value;
+
+ strcpy(message,"HTTP/1.0 200 OK\r\n");
+
+ write(request->filedes, message, strlen(message));
+
+ strcpy(message,"Content-Type: text/html\r\n\r\n");
+
+ write(request->filedes, message, strlen(message));
+
+ if(request->n_arguments == 0)
+ {
+ retval = write(request->filedes, test_page, strlen(test_page));
+ }
+ else
+ {
+ strcpy(message, "<html><head><title>Advanced Query</title></head>"
+ "<body><H1> Query Result </H1><br>");
+
+ write(request->filedes, message, strlen(message));
+
+ sprintf(message, "Number of arguments is %d<hr>\n", request->n_arguments);
+
+ write(request->filedes, message, strlen(message));
+
+ value = HTTP_ArgumentValue(request, "cmd");
+
+ sprintf(message, "cmd = %s<hr>\n", value);
+
+ write(request->filedes, message, strlen(message));
+
+ value = HTTP_HeaderValue(request, "Host");
+
+ sprintf(message, "Host header = %s<hr>\n", value);
+
+ write(request->filedes, message, strlen(message));
+
+ strcpy(message, "</body></html>");
+
+ retval = write(request->filedes, message, strlen(message));
+ }
+
+ return retval;
+}
diff --git a/src/Server.c b/src/Server.c
new file mode 100644
index 0000000..b72c3a6
--- /dev/null
+++ b/src/Server.c
@@ -0,0 +1,299 @@
+ /*@@
+ @file Server.c
+ @date Wed Sep 13 20:10:24 2000
+ @author Tom Goodale
+ @desc
+ Web serving and utility routines.
+ @enddesc
+ @version $Header$
+ @@*/
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "cctk.h"
+#include "util_Hash.h"
+
+#include "httpd.h"
+
+static char *rcsid = "$Header$";
+
+CCTK_FILEVERSION(DevThorns_httpd_Server_c)
+
+/********************************************************************
+ ********************* Local Data Types ***********************
+ ********************************************************************/
+
+typedef struct
+{
+ int (*function)(cGH *, httpRequest *, void *);
+ void *data;
+} httpPage;
+
+/********************************************************************
+ ********************* Local Routine Prototypes *********************
+ ********************************************************************/
+
+static httpPage *CreatePageData(int (*function)(cGH *,httpRequest *, void *), void *data);
+static httpPage *FindPage(char *path, char **residual);
+
+/********************************************************************
+ ********************* Other Routine Prototypes *********************
+ ********************************************************************/
+
+/********************************************************************
+ ********************* Local Data *****************************
+ ********************************************************************/
+
+static uHash *pages = NULL;
+
+static const char *notfound_page =
+"<HTML>\n<HEAD><TITLE>Error 404: Not Found</TITLE></HEAD>\
+<BODY>The URI you requested could not be found</BODY>\n<HTML>\n";
+
+static const char *notimplemented_page =
+"<HTML>\n<HEAD><TITLE>Error 501: Not Implemented</TITLE></HEAD>\
+<BODY>The requested method is not implemented</BODY>\n<HTML>\n";
+
+#define INITIAL_SIZE 16
+
+/********************************************************************
+ ********************* External Routines **********************
+ ********************************************************************/
+
+ /*@@
+ @routine HTTP_RequestGet
+ @date Wed Sep 13 20:10:24 2000
+ @author Tom Goodale
+ @desc
+ Routine to deal with a GET request.
+ @enddesc
+ @calls
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+
+int HTTP_RequestGET(cGH *cctkGH, httpRequest *request)
+{
+ httpPage *pagedata;
+ int retval;
+ char message[1024];
+
+ if((pagedata = FindPage(request->uri, &(request->residual))))
+ {
+ retval = pagedata->function(cctkGH, request, pagedata->data);
+ }
+ else
+ {
+ retval = -1;
+ }
+
+ if(retval < 0)
+ {
+ strcpy(message,"HTTP/1.0 404 Not Found\r\n");
+
+ write(request->filedes, message, strlen(message));
+
+ strcpy(message,"Content-Type: text/html\r\n\r\n");
+
+ write(request->filedes, message, strlen(message));
+
+
+ write(request->filedes, notfound_page, strlen(notfound_page));
+ }
+
+ return retval;
+}
+
+ /*@@
+ @routine HTTP_RequestUnsupported
+ @date Thu Sep 14 12:18:56 2000
+ @author Tom Goodale
+ @desc
+
+ @enddesc
+ @calls
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+int HTTP_RequestUnsupported(cGH *cctkGH, httpRequest *request)
+{
+ char message[1024];
+
+ strcpy(message,"HTTP/1.0 501 Not Implemented\r\n");
+
+ write(request->filedes, message, strlen(message));
+
+ strcpy(message,"Content-Type: text/html\r\n\r\n");
+
+ write(request->filedes, message, strlen(message));
+
+
+ write(request->filedes, notimplemented_page, strlen(notimplemented_page));
+
+ return 0;
+}
+
+ /*@@
+ @routine HTTP_RegisterPage
+ @date Wed Sep 13 20:10:24 2000
+ @author Tom Goodale
+ @desc
+ Routine to register a web page.
+ @enddesc
+ @calls
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+int HTTP_RegisterPage(const char *path, int (*function)(cGH *, httpRequest *, void *), void *data)
+{
+ int retval;
+
+ httpPage *pagedata;
+
+ /* Create the hash table if it's not already been created */
+ if(! pages)
+ {
+ pages = Util_HashCreate(INITIAL_SIZE);
+ }
+
+ if(Util_HashData(pages, strlen(path), path, 0))
+ {
+ fprintf(stderr, "Page %s already exists\n", path);
+ retval = -1;
+ }
+ else
+ {
+ pagedata = CreatePageData(function, data);
+
+ if(pagedata)
+ {
+ retval = Util_HashStore(pages, strlen(path), path, 0, (void *)pagedata);
+ }
+ else
+ {
+ retval = -2;
+ }
+ }
+
+ return 0;
+}
+
+
+/********************************************************************
+ ********************* Local Routines *************************
+ ********************************************************************/
+
+ /*@@
+ @routine CreatePageData
+ @date Wed Sep 13 20:10:24 2000
+ @author Tom Goodale
+ @desc
+ Creates a httpPage structure.
+ @enddesc
+ @calls
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+static httpPage *CreatePageData(int (*function)(cGH *, httpRequest *, void *), void *data)
+{
+ httpPage *pagedata;
+
+ pagedata = (httpPage *)malloc(sizeof(httpPage));
+
+ if(pagedata)
+ {
+ pagedata->function = function;
+ pagedata->data = data;
+ }
+
+ return pagedata;
+}
+
+ /*@@
+ @routine FindPage
+ @date Wed Sep 13 20:10:24 2000
+ @author Tom Goodale
+ @desc
+ Finds a page, if it exists.
+ @enddesc
+ @calls
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+static httpPage *FindPage(char *path, char **residual)
+{
+ httpPage *pagedata;
+ char *position;
+ char *temp;
+
+ pagedata = NULL;
+
+ if(pages)
+ {
+ /* Check for index.html */
+ if(path[strlen(path)-1] == '/')
+ {
+#ifdef HTTP_DEBUG
+ printf("Looking for '%sindex.html'\n", path);
+#endif
+ temp = (char *)malloc(sizeof(path)+11);
+
+ sprintf(temp,"%sindex.html", path);
+
+ pagedata = Util_HashData(pages, strlen(temp), temp, 0);
+
+ *residual = NULL;
+ free(temp);
+ }
+ else
+ {
+#ifdef HTTP_DEBUG
+ printf("Looking for '%s'\n", path);
+#endif
+ /* Or exact path */
+ pagedata = Util_HashData(pages, strlen(path), path, 0);
+ *residual = NULL;
+ }
+
+ if(!pagedata)
+ {
+ /* Ok, now cycle through. Know it doesn't end with a slash */
+ for(position = path+strlen(path)-1; position >= path; position--)
+ {
+ if(*position == '/')
+ {
+#ifdef HTTP_DEBUG
+ printf("Looking for '%s' less '%s' \n", path, position);
+#endif
+ if((pagedata = Util_HashData(pages, position-path, path, 0)))
+ {
+ *residual = position+1;
+ break;
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ pagedata = NULL;
+ }
+
+ return pagedata;
+}
diff --git a/src/Sockets.c b/src/Sockets.c
new file mode 100644
index 0000000..6643ffd
--- /dev/null
+++ b/src/Sockets.c
@@ -0,0 +1,241 @@
+ /*@@
+ @file Sockets.c
+ @date Wed Sep 13 20:39:15 2000
+ @author Tom Goodale
+ @desc
+ Routines which deal with sockets.
+ These should probably move into thorn Socket at some point if
+ they aren't already there.
+ @enddesc
+ @version $Header$
+ @@*/
+
+#include <stdio.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <netdb.h>
+#include <arpa/inet.h>
+#include <sys/time.h>
+#include <sys/types.h>
+
+#include "cctk.h"
+
+#include "httpd.h"
+
+static char *rcsid = "$Header$";
+
+CCTK_FILEVERSION(DevThorns_httpd_Socket_c)
+
+/********************************************************************
+ ********************* Local Data Types ***********************
+ ********************************************************************/
+
+/********************************************************************
+ ********************* Local Routine Prototypes *********************
+ ********************************************************************/
+
+int HTTP_MakeSocket (uint16_t port);
+
+/********************************************************************
+ ********************* Other Routine Prototypes *********************
+ ********************************************************************/
+
+/********************************************************************
+ ********************* Local Data *****************************
+ ********************************************************************/
+
+/* Active file descriptors */
+static fd_set active_fd_set;
+
+/* Main server socket */
+static int sock;
+
+/********************************************************************
+ ********************* External Routines **********************
+ ********************************************************************/
+
+
+ /*@@
+ @routine HTTP_SetupServer
+ @date Wed Sep 13 20:39:15 2000
+ @author Tom Goodale
+ @desc
+ Creates a socket to listen on.
+ @enddesc
+ @calls
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+int HTTP_SetupServer(int port, int queue_size)
+{
+ /* Create the socket and set it up to accept connections. */
+ sock = HTTP_MakeSocket (port);
+ if (listen (sock, queue_size) < 0)
+ {
+ perror ("listen");
+ exit (EXIT_FAILURE);
+ }
+
+ /* Initialize the set of active sockets. */
+ FD_ZERO (&active_fd_set);
+ FD_SET (sock, &active_fd_set);
+
+ return 0;
+}
+
+ /*@@
+ @routine HTTP_ShutdownServer
+ @date Wed Sep 13 20:39:15 2000
+ @author Tom Goodale
+ @desc
+ Closes all sockets we are interested in.
+ @enddesc
+ @calls
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+int HTTP_ShutdownServer(void)
+{
+ int i;
+
+ /* Close all sockets in our active set */
+ for(i = FD_SETSIZE-1; i >=0; i--)
+ {
+ if(FD_ISSET(i, &active_fd_set))
+ {
+ close(i);
+ }
+ }
+
+ return 0;
+}
+
+ /*@@
+ @routine HTTP_Poll
+ @date Wed Sep 13 20:39:15 2000
+ @author Tom Goodale
+ @desc
+ Main workhorse routine.
+ Looks for activity on any of the sockets which are open
+ and dispatches work.
+ @enddesc
+ @calls
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+int HTTP_Poll(cGH *cctkGH, long sec, long usec)
+{
+ int i;
+ size_t size;
+ fd_set read_fd_set;
+
+ struct sockaddr_in clientname;
+ struct timeval timeout;
+
+ timeout.tv_sec = sec;
+ timeout.tv_usec = usec;
+
+ /* Block until input arrives on one or more active sockets. */
+ read_fd_set = active_fd_set;
+
+ if (select (FD_SETSIZE, &read_fd_set, NULL, NULL, &timeout) < 0)
+ {
+ perror ("select");
+ exit (EXIT_FAILURE);
+ }
+
+ /* Service all the sockets with input pending. */
+ for (i = 0; i < FD_SETSIZE; ++i)
+ {
+ if (FD_ISSET (i, &read_fd_set))
+ {
+ if (i == sock)
+ {
+ /* Connection request on original socket. */
+ int new;
+ size = sizeof (clientname);
+ new = accept (sock,
+ (struct sockaddr *) &clientname,
+ &size);
+ if (new < 0)
+ {
+ perror ("accept");
+ exit (EXIT_FAILURE);
+ }
+ fprintf (stderr,
+ "Server: connect from host %s, port %hd.\n",
+ inet_ntoa (clientname.sin_addr),
+ ntohs (clientname.sin_port));
+ FD_SET (new, &active_fd_set);
+ }
+ else
+ {
+ /* Data arriving on an already-connected socket. */
+ if (HTTP_ReadFromClient (cctkGH, i) < 0)
+ {
+ close (i);
+ FD_CLR (i, &active_fd_set);
+ }
+ }
+ }
+ }
+
+ return 0;
+}
+
+/********************************************************************
+ ********************* Local Routines *************************
+ ********************************************************************/
+
+ /*@@
+ @routine HTTP_MakeSocket
+ @date Wed Sep 13 20:39:15 2000
+ @author Tom Goodale
+ @desc
+ Creates a socket.
+ @enddesc
+ @calls
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+int HTTP_MakeSocket (uint16_t port)
+{
+ int sock;
+ struct sockaddr_in name;
+
+ /* Create the socket. */
+ sock = socket (PF_INET, SOCK_STREAM, 0);
+ if (sock < 0)
+ {
+ perror ("socket");
+ exit (EXIT_FAILURE);
+ }
+
+ /* Give the socket a name. */
+ name.sin_family = AF_INET;
+ name.sin_port = htons (port);
+ name.sin_addr.s_addr = htonl (INADDR_ANY);
+ if (bind (sock, (struct sockaddr *) &name, sizeof (name)) < 0)
+ {
+ perror ("bind");
+ exit (EXIT_FAILURE);
+ }
+
+ return sock;
+}
diff --git a/src/Startup.c b/src/Startup.c
new file mode 100644
index 0000000..ef2b4ba
--- /dev/null
+++ b/src/Startup.c
@@ -0,0 +1,99 @@
+ /*@@
+ @file Startup.c
+ @date Wed Sep 13 21:26:56 2000
+ @author Tom Goodale
+ @desc
+
+ @enddesc
+ @version $Header$
+ @@*/
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "cctk.h"
+
+#include "cctk_Arguments.h"
+#include "cctk_Parameters.h"
+
+#include "httpd.h"
+
+static char *rcsid = "$Header$";
+
+CCTK_FILEVERSION(DevThorn_http_Startup_c)
+
+ /*@@
+ @routine HTTP_Startup
+ @date Wed Sep 13 21:26:56 2000
+ @author Tom Goodale
+ @desc
+ Startup routine for the webserver.
+ @enddesc
+ @calls
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+int HTTP_Startup(void)
+{
+ DECLARE_CCTK_PARAMETERS
+
+ HTTP_RegisterPages();
+
+ HTTP_SetupServer(port, queue_length);
+
+ if(standalone)
+ {
+ while(1)
+ {
+ HTTP_Poll(NULL, 10000,0);
+ }
+ }
+
+ return 0;
+}
+
+ /*@@
+ @routine HTTP_Work
+ @date Wed Sep 13 21:26:56 2000
+ @author Tom Goodale
+ @desc
+ Main working routine for the webserver.
+ @enddesc
+ @calls
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+void HTTP_Work(CCTK_ARGUMENTS)
+{
+ DECLARE_CCTK_ARGUMENTS
+ DECLARE_CCTK_PARAMETERS
+
+ HTTP_Poll(cctkGH, timeout_seconds, timeout_useconds);
+}
+
+ /*@@
+ @routine HTTP_Startup
+ @date Wed Sep 13 21:26:56 2000
+ @author Tom Goodale
+ @desc
+ Shurdown routine for the webserver.
+ @enddesc
+ @calls
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+int HTTP_Shutdown(void)
+{
+ HTTP_ShutdownServer();
+
+ return 0;
+}
diff --git a/src/http.c b/src/http.c
new file mode 100644
index 0000000..ec3ea6f
--- /dev/null
+++ b/src/http.c
@@ -0,0 +1,618 @@
+ /*@@
+ @file http.c
+ @date Wed Sep 13 20:44:31 2000
+ @author Tom Goodale
+ @desc
+ Stuff to parse and deal with HTTP requests.
+ @enddesc
+ @version $Header$
+ @@*/
+#include <stdio.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <string.h>
+
+#include "cctk.h"
+
+#include "util_String.h"
+
+#include "httpd.h"
+
+static char *rcsid = "$Header$";
+
+CCTK_FILEVERSION(DevThorns_httpd_http_c)
+
+/********************************************************************
+ ********************* Local Data Types ***********************
+ ********************************************************************/
+
+struct httpHeader
+{
+ char *line;
+};
+
+/********************************************************************
+ ********************* Local Routine Prototypes *********************
+ ********************************************************************/
+
+static char *NextLine(char *buffer, int *start, int size);
+static int DealWithRequest(cGH *cctkGH, int filedes, char *buffer, int bufsize);
+static int AddHeader(httpRequest *request, const char *line);
+
+static int StripArgs(httpRequest *request, char *request_uri);
+static void Decode(char *string);
+static int ClearRequest(httpRequest *request);
+
+static void DestroyHeader(struct httpHeader *header);
+
+/********************************************************************
+ ********************* Other Routine Prototypes *********************
+ ********************************************************************/
+
+/********************************************************************
+ ********************* Local Data *****************************
+ ********************************************************************/
+
+#define INITIAL_SIZE 16
+#define MAXMSG 2048
+
+/********************************************************************
+ ********************* External Routines **********************
+ ********************************************************************/
+
+ /*@@
+ @routine HTTP_ReadFromClient
+ @date Wed Sep 13 20:44:31 2000
+ @author Tom Goodale
+ @desc
+ Reads a request from a client socket.
+ @enddesc
+ @calls
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+int HTTP_ReadFromClient(cGH *cctkGH, int filedes)
+{
+ char buffer[MAXMSG];
+ int nbytes;
+
+ nbytes = read (filedes, buffer, MAXMSG);
+ if (nbytes < 0)
+ {
+ /* Read error. */
+ perror ("read");
+ exit (EXIT_FAILURE);
+ }
+ else if (nbytes == 0)
+ /* End-of-file. */
+ return -1;
+ else
+ {
+ /* Data read. */
+#ifdef HTTP_DEBUG
+ fprintf (stderr, "Server: got message: `%s'\n", buffer);
+#endif
+ }
+
+ if(nbytes > 0)
+ {
+ DealWithRequest(cctkGH, filedes, buffer, nbytes);
+ }
+
+ return -1;
+}
+
+ /*@@
+ @routine HTTP_ArgumentValue
+ @date Thu Sep 14 16:40:11 2000
+ @author Tom Goodale
+ @desc
+ Returns the value (if any) of an argument.
+ @enddesc
+ @calls
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+const char *HTTP_ArgumentValue(const httpRequest *request, const char *arg)
+{
+ const char *value;
+
+ if(request->arguments)
+ {
+ value = Util_HashData(request->arguments, strlen(arg), arg, 0);
+ }
+ else
+ {
+ value = NULL;
+ }
+
+ return value;
+}
+
+ /*@@
+ @routine HTTP_HeaderValue
+ @date Thu Sep 14 19:55:04 2000
+ @author Tom Goodale
+ @desc
+ Gets the value of an HTTP header line.
+ @enddesc
+ @calls
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+const char *HTTP_HeaderValue(const httpRequest *request, const char *header)
+{
+ struct httpHeader *header_line;
+ const char *value;
+
+ if(request->headers)
+ {
+ header_line = Util_HashData(request->headers, strlen(header), header, 0);
+
+ if(header_line)
+ {
+ value = header_line->line;
+ }
+ else
+ {
+ value = NULL;
+ }
+ }
+ else
+ {
+ value = NULL;
+ }
+
+ return value;
+}
+
+/********************************************************************
+ ********************* Local Routines *************************
+ ********************************************************************/
+
+ /*@@
+ @routine NextLine
+ @date Wed Sep 13 20:44:31 2000
+ @author Tom Goodale
+ @desc
+ Gets the next line from an HTTP header.
+ @enddesc
+ @calls
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+static char *NextLine(char *buffer, int *start, int size)
+{
+ char *line;
+ int found;
+ char *pos;
+
+ found = 0;
+ for(pos = buffer + *start; pos-buffer < size-1; pos++)
+ {
+ if(*pos == '\r' && *(pos+1) == '\n')
+ {
+ *pos = 0;
+ found = 1;
+ break;
+ }
+ }
+
+ if(found)
+ {
+ line = buffer + *start;
+ *start = pos-buffer+2;
+ }
+ else
+ {
+ line = NULL;
+ *start = size+1;
+ }
+
+ return line;
+}
+
+ /*@@
+ @routine DealWithRequest
+ @date Wed Sep 13 20:44:31 2000
+ @author Tom Goodale
+ @desc
+ Takes an http request buffer and deals with it.
+ @enddesc
+ @calls
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+static int DealWithRequest(cGH *cctkGH, int filedes, char *buffer, int bufsize)
+{
+ char *line;
+ char *tmp;
+ int size;
+ int start;
+ char *token;
+ char *method;
+ char *request_uri;
+ char *http_version;
+ httpRequest request;
+
+ request.filedes = filedes;
+
+ tmp = buffer;
+
+#ifdef HTTP_DEBUG
+ printf("Dealing with request\n");
+#endif
+
+ start = 0;
+
+ line = NextLine(tmp, &start, bufsize);
+
+ method = NULL;
+ request_uri = NULL;
+ http_version = NULL;
+
+ if(line)
+ {
+ method = line;
+
+ for(; *line; line++)
+ {
+ if(*line == ' ')
+ {
+ *line = 0;
+ line++;
+ if(!request_uri)
+ {
+ request_uri = line;
+ }
+ else
+ {
+ http_version = line;
+ break;
+ }
+ }
+ }
+ }
+
+ if(method)
+ {
+ printf("Method: %s\n", method);
+
+ request.method = method;
+ }
+ else
+ {
+ request.method = NULL;
+ }
+
+ request.n_arguments = 0;
+ if(request_uri)
+ {
+ printf("URI: %s\n", request_uri);
+
+ request.uri = request_uri;
+ StripArgs(&request, request.uri);
+ }
+ else
+ {
+ request.uri = NULL;
+ request.arguments=NULL;
+ }
+
+ if(http_version)
+ {
+ printf("HTTP: %s\n", http_version);
+
+ sscanf(http_version, "%*5s%d%*1[.]%d", &(request.http_major_version),
+ &(request.http_minor_version));
+ }
+ else
+ {
+ request.http_major_version = 0;
+ request.http_minor_version = 90;
+ }
+
+#ifdef HTTP_DEBUG
+ printf("HTTP Major version: %d\n", request.http_major_version);
+ printf("HTTP Minor version: %d\n", request.http_minor_version);
+#endif
+
+#ifdef HTTP_DEBUG
+ printf("Start of request header\n");
+#endif
+
+ request.body = NULL;
+ request.headers = NULL;
+
+ while(line = NextLine(tmp, &start, bufsize))
+ {
+ if(! request.body && *line != 0)
+ {
+ AddHeader(&request, line);
+ }
+
+#ifdef HTTP_DEBUG
+ if(line)
+ {
+ printf("Line is '%s'\n", line);
+ }
+#endif
+
+ if(*line == 0)
+ {
+#ifdef HTTP_DEBUG
+ printf("End of request header\n");
+
+ printf("Start of request body\n");
+#endif
+ request.body = line + 2;
+ }
+ }
+
+#ifdef HTTP_DEBUG
+ printf("End of request body\n");
+#endif
+
+ request.body_length = buffer + bufsize - request.body;
+
+ printf("Replying...\n");
+
+ if(!strcmp(request.method, "GET"))
+ {
+ HTTP_RequestGET(cctkGH, &request);
+ }
+ else
+ {
+ HTTP_RequestUnsupported(cctkGH, &request);
+ }
+
+#ifdef HTTP_DEBUG
+ printf("Dealt with.\n");
+#endif
+
+ ClearRequest(&request);
+
+ return 0;
+}
+
+
+
+ /*@@
+ @routine AddHeader
+ @date Wed Sep 13 20:44:31 2000
+ @author Tom Goodale
+ @desc
+ Stores an HTTP header line on a request.
+ @enddesc
+ @calls
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+static int AddHeader(httpRequest *request, const char *line)
+{
+ int keylength;
+ char *value;
+ char *temp;
+ struct httpHeader *header_line;
+
+ /* Split the string */
+ value = strchr(line, ':');
+
+ if(value)
+ {
+ keylength = value - line;
+
+ value++;
+
+ /* Strip off leading whitespace */
+ for(; *value && (*value == ' ' || *value == '\t') ; value++);
+ }
+ else
+ {
+ fprintf(stderr, "Invalid header line '%s'\n", line);
+ }
+
+ if(value)
+ {
+ if(!request->headers)
+ {
+ /* Need to create the hash table */
+ request->headers = Util_HashCreate(INITIAL_SIZE);
+ }
+
+ if(request->headers)
+ {
+ /* Does the line already exist ? */
+ header_line = (struct httpHeader *)Util_HashData(request->headers, keylength, line, 0);
+
+ if(header_line)
+ {
+ temp = (char *)realloc(header_line->line, strlen(header_line->line)+strlen(value)+2);
+
+ if(temp)
+ {
+ header_line->line = temp;
+ sprintf(header_line->line,"%s,%s", header_line->line,value);
+ }
+ else
+ {
+ fprintf(stderr, "Out of memory !\n");
+ }
+ }
+ else
+ {
+ /* Ok, must create it */
+ header_line = (struct httpHeader *)malloc(sizeof(struct httpHeader));
+
+ if(header_line)
+ {
+ header_line->line = (char *)malloc(strlen(value)+1);
+
+ if(header_line->line)
+ {
+ strcpy(header_line->line, value);
+
+ Util_HashStore(request->headers, keylength, line, 0, (void *)header_line);
+ }
+ }
+ }
+ }
+ }
+
+ return 0;
+}
+
+ /*@@
+ @routine StripArgs
+ @date Thu Sep 14 16:36:56 2000
+ @author Tom Goodale
+ @desc
+ Strips the arguments for a submitted URI from the
+ URI and decodes any HTTP encodings.
+ @enddesc
+ @calls
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+static int StripArgs(httpRequest *request, char *request_uri)
+{
+ char *position;
+ char *token;
+ char *value;
+ char *storable;
+
+ /* Do we have arguments ? */
+ if((position = strchr(request_uri, '?')))
+ {
+ /* Mark the end of the URI */
+ *position = 0;
+
+ /* Create the hash table */
+ request->arguments = Util_HashCreate(INITIAL_SIZE);
+
+ /* Parse the argument list */
+ *position++;
+
+ token = strtok(position, "&");
+
+ do
+ {
+ value = strchr(token, '=');
+ *value = 0;
+
+ value++;
+
+ /* Remove any encoding in the token and value */
+ Decode(token);
+ Decode(value);
+
+ storable = Util_Strdup(value);
+
+ if(Util_HashData(request->arguments, strlen(token), token, 0))
+ {
+#ifdef HTTP_DEBUG
+ fprintf(stderr, "Ignoring duplicate argument '%s'\n", token);
+#endif
+ }
+ else
+ {
+ Util_HashStore(request->arguments, strlen(token), token, 0, (void *)storable);
+ request->n_arguments++;
+ }
+
+ } while(token=strtok(NULL, "&"));
+ }
+ else
+ {
+ request->arguments = NULL;
+ }
+
+ /* Finally remove any encoding in the URI */
+ Decode(request_uri);
+
+ return 0;
+}
+
+static int ClearRequest(httpRequest *request)
+{
+ if(request->arguments)
+ {
+ Util_HashDestroy(request->arguments, (void (*)(void *))free);
+ }
+
+ if(request->headers)
+ {
+ Util_HashDestroy(request->headers, (void (*)(void *))DestroyHeader);
+ }
+
+ return 0;
+}
+
+ /*@@
+ @routine Decode
+ @date Thu Sep 14 16:25:25 2000
+ @author Tom Goodale
+ @desc
+ Decode HTTP encodings -
+ + -> ' '
+ %2-bytehexadecimal -> ascii
+ @enddesc
+ @calls
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+static void Decode(char *string)
+{
+ char *position;
+ char *to;
+ char hexadecimal[3];
+
+ hexadecimal[3] = 0;
+
+ for(position=string, to=position; *position; position++, to++)
+ {
+ switch(*position)
+ {
+ case '+' : *to = ' '; break;
+ case '%' : hexadecimal[0] = *(position+1);
+ hexadecimal[1] = *(position+2);
+ position += 2;
+ *to = strtol(hexadecimal, NULL, 16);
+ break;
+ default : *to = *position;
+ }
+ }
+
+ *to = 0;
+}
+
+static void DestroyHeader(struct httpHeader *header)
+{
+ free(header->line);
+ free(header);
+}
diff --git a/src/http_Request.h b/src/http_Request.h
new file mode 100644
index 0000000..1ff2412
--- /dev/null
+++ b/src/http_Request.h
@@ -0,0 +1,51 @@
+ /*@@
+ @header http_Request.h
+ @date Wed Sep 13 23:49:30 2000
+ @author Tom Goodale
+ @desc
+
+ @enddesc
+ @version $Header$
+ @@*/
+
+#include "util_Hash.h"
+
+#ifndef __HTTP_REQUEST_H__
+#define __HTTP_REQUEST_H__ 1
+
+typedef struct
+{
+ int filedes;
+ char *body;
+ int body_length;
+
+ char *method;
+ char *uri;
+ char *residual;
+
+ int http_major_version;
+ int http_minor_version;
+
+ int n_arguments;
+
+ uHash *arguments;
+ uHash *headers;
+
+} httpRequest;
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+int HTTP_RegisterPage(const char *path, int (*function)(cGH *, httpRequest *, void *), void *data);
+
+const char *HTTP_ArgumentValue(const httpRequest *request, const char *arg);
+
+const char *HTTP_HeaderValue(const httpRequest *request, const char *header);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __HTTP_REQUEST_H__ */
diff --git a/src/httpd.h b/src/httpd.h
new file mode 100644
index 0000000..50d0eb2
--- /dev/null
+++ b/src/httpd.h
@@ -0,0 +1,37 @@
+ /*@@
+ @header httpd.h
+ @date Wed Sep 13 20:15:23 2000
+ @author Tom Goodale
+ @desc
+
+ @enddesc
+ @version $Header$
+ @@*/
+
+#include "http_Request.h"
+
+#ifndef __HTTP_H__
+#define __HTTP_H__ 1
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+int HTTP_ReadFromClient (cGH *cctkGH, int filedes);
+
+
+int HTTP_SetupServer(int port, int queue_size);
+int HTTP_ShutdownServer(void);
+
+int HTTP_Poll(cGH *cctkGH, long sec, long usec);
+
+/* Request stuff */
+int HTTP_RequestGET(cGH *cctkGH, httpRequest *request);
+int HTTP_RequestUnsupported(cGH *cctkGH, httpRequest *request);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __HTTP_H__ */
diff --git a/src/images/wwwcactuscodeorg.h b/src/images/wwwcactuscodeorg.h
new file mode 100644
index 0000000..45a51f5
--- /dev/null
+++ b/src/images/wwwcactuscodeorg.h
@@ -0,0 +1,1053 @@
+#ifndef __wwwcactuscodeorg_H_
+#define __wwwcactuscodeorg_H_
+
+/*
+ Header created from wwwcactuscodeorg.jpg by ImageEncode
+ Source code in $TOP/DevThorns/HTTPD/src/ImageEncode.cc
+*/
+
+static char wwwcactuscodeorg[]={0xFF,0xD8,0xFF,0xE0,0x00,0x10,0x4A,0x46,0x49,
+ 0x46,0x00,0x01,0x01,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0xFF,
+ 0xDB,0x00,0x43,0x00,0x05,0x03,0x04,0x04,0x04,0x03,0x05,0x04,
+ 0x04,0x04,0x05,0x05,0x05,0x06,0x07,0x0C,0x08,0x07,0x07,0x07,
+ 0x07,0x0F,0x0B,0x0B,0x09,0x0C,0x11,0x0F,0x12,0x12,0x11,0x0F,
+ 0x11,0x11,0x13,0x16,0x1C,0x17,0x13,0x14,0x1A,0x15,0x11,0x11,
+ 0x18,0x21,0x18,0x1A,0x1D,0x1D,0x1F,0x1F,0x1F,0x13,0x17,0x22,
+ 0x24,0x22,0x1E,0x24,0x1C,0x1E,0x1F,0x1E,0xFF,0xDB,0x00,0x43,
+ 0x01,0x05,0x05,0x05,0x07,0x06,0x07,0x0E,0x08,0x08,0x0E,0x1E,
+ 0x14,0x11,0x14,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,
+ 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,
+ 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,
+ 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,
+ 0x1E,0x1E,0x1E,0x1E,0x1E,0xFF,0xC0,0x00,0x11,0x08,0x00,0x74,
+ 0x02,0x66,0x03,0x01,0x22,0x00,0x02,0x11,0x01,0x03,0x11,0x01,
+ 0xFF,0xC4,0x00,0x1C,0x00,0x01,0x00,0x03,0x01,0x01,0x01,0x01,
+ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x06,
+ 0x07,0x04,0x03,0x02,0x01,0x08,0xFF,0xC4,0x00,0x44,0x10,0x00,
+ 0x01,0x03,0x03,0x03,0x01,0x05,0x05,0x05,0x04,0x09,0x03,0x04,
+ 0x03,0x00,0x00,0x01,0x02,0x03,0x04,0x00,0x05,0x11,0x06,0x12,
+ 0x21,0x31,0x07,0x13,0x41,0x51,0x61,0x14,0x22,0x32,0x71,0x81,
+ 0x15,0x23,0x91,0xA1,0xB1,0x42,0x52,0xC1,0xF0,0x08,0x16,0x24,
+ 0x33,0x62,0x72,0x92,0xD1,0xE1,0x17,0x82,0xA2,0x26,0x43,0x44,
+ 0xF1,0x73,0xB2,0xB3,0xFF,0xC4,0x00,0x1A,0x01,0x01,0x00,0x02,
+ 0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0xFF,0xC4,0x00,0x34,
+ 0x11,0x00,0x02,0x01,0x02,0x04,0x03,0x06,0x06,0x02,0x02,0x02,
+ 0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x11,0x04,0x12,
+ 0x21,0x31,0x05,0x41,0x51,0x06,0x13,0x61,0x71,0x81,0x91,0xA1,
+ 0xB1,0xC1,0xD1,0xE1,0xF0,0x22,0x32,0x15,0x16,0x23,0x42,0x52,
+ 0x62,0xF1,0xFF,0xDA,0x00,0x0C,0x03,0x01,0x00,0x02,0x11,0x03,
+ 0x11,0x00,0x3F,0x00,0xFE,0xCB,0xA5,0x29,0x40,0x29,0x4A,0x50,
+ 0x0A,0x52,0x94,0x02,0x94,0xA5,0x00,0xA5,0x29,0x40,0x29,0x4A,
+ 0x50,0x0A,0x52,0x94,0x02,0x94,0xA5,0x00,0xA5,0x29,0x40,0x29,
+ 0x4A,0x50,0x0A,0x52,0x94,0x02,0x94,0xA5,0x00,0xA5,0x29,0x40,
+ 0x29,0x4A,0x50,0x0A,0x52,0x94,0x02,0x94,0xA5,0x00,0xA5,0x29,
+ 0x40,0x29,0x4A,0x50,0x0A,0x52,0x94,0x02,0x94,0xA5,0x00,0xA5,
+ 0x29,0x40,0x29,0x4A,0x50,0x0A,0x52,0x94,0x02,0x94,0xA5,0x00,
+ 0xA5,0x29,0x40,0x29,0x4A,0x50,0x0A,0x52,0x94,0x02,0x94,0xA5,
+ 0x00,0xA5,0x29,0x40,0x29,0x4A,0x50,0x0A,0x52,0x94,0x02,0x94,
+ 0xA5,0x00,0xA5,0x29,0x40,0x29,0x4A,0x50,0x0A,0x52,0x94,0x02,
+ 0x94,0xA5,0x00,0xA5,0x29,0x40,0x29,0x4A,0x50,0x0A,0x52,0x94,
+ 0x02,0x94,0xA5,0x00,0xA5,0x29,0x40,0x29,0x4A,0x50,0x0A,0x52,
+ 0x94,0x02,0x94,0xA5,0x00,0xA5,0x29,0x40,0x29,0x4A,0x50,0x0A,
+ 0x52,0x94,0x02,0x94,0xA5,0x00,0xA5,0x29,0x40,0x29,0x4A,0x50,
+ 0x0A,0x57,0xC3,0xEE,0xB6,0xC3,0x2A,0x75,0xD5,0x84,0x21,0x03,
+ 0x2A,0x51,0xF0,0xAA,0xFC,0x8B,0xE4,0xE9,0x4A,0x29,0xB5,0x43,
+ 0x25,0xB1,0xFF,0x00,0xBA,0xE0,0xEB,0xF2,0xCF,0x15,0xA3,0x8D,
+ 0xE2,0x38,0x7C,0x12,0x4E,0xAC,0xB5,0x7B,0x2E,0x63,0x72,0xC7,
+ 0x4A,0xAB,0x7F,0xEA,0x35,0x80,0xB5,0x4C,0x42,0x09,0xFD,0x9E,
+ 0x06,0x3F,0x01,0x5E,0x66,0x46,0xA6,0x65,0x5B,0x52,0xB0,0xF0,
+ 0xF3,0x01,0x24,0x7E,0x60,0x1A,0xE4,0xAE,0xD3,0xE1,0xAF,0xAC,
+ 0x25,0xEC,0xBE,0xE5,0xB2,0x4B,0xA1,0x6D,0xA5,0x41,0xD9,0xAF,
+ 0x6A,0x79,0xF3,0x0A,0xE0,0x84,0xB1,0x2B,0xF6,0x7C,0x97,0xFF,
+ 0x00,0x35,0x36,0x14,0x0F,0x43,0x5D,0xBC,0x2E,0x2E,0x96,0x2A,
+ 0x9A,0xA9,0x49,0xDD,0x15,0x3F,0x69,0x4A,0x56,0xC8,0x14,0xA5,
+ 0x28,0x05,0x29,0x4A,0x01,0x4A,0x52,0x80,0x52,0x94,0xA0,0x14,
+ 0xA5,0x28,0x05,0x29,0x4A,0x01,0x4A,0x52,0x80,0x52,0xBC,0xE4,
+ 0x3C,0xD4,0x76,0x54,0xF3,0xEB,0x08,0x6D,0x23,0x25,0x46,0xAB,
+ 0xEF,0x5F,0x2E,0x12,0xC9,0xFB,0x2E,0x19,0x0D,0x8E,0x8E,0x38,
+ 0x39,0x57,0xCB,0x3C,0x7E,0xB5,0xA3,0x8D,0xE2,0x58,0x7C,0x12,
+ 0x5D,0xEC,0xB5,0x7C,0xB9,0x8B,0x5C,0xB2,0x52,0xAA,0xBF,0xFA,
+ 0x8D,0x60,0x29,0x53,0x50,0x82,0x47,0xC2,0x70,0x31,0xF8,0x0A,
+ 0xF8,0xF6,0x9D,0x4C,0xD2,0xF6,0xA4,0x87,0x92,0x3C,0x70,0x92,
+ 0x3F,0x81,0xAE,0x4A,0xED,0x3E,0x1A,0xFA,0xC2,0x5E,0xCB,0xEE,
+ 0x5B,0x2C,0xBA,0x16,0xDA,0x54,0x2D,0x92,0xF7,0xED,0x2E,0x98,
+ 0x73,0x92,0x18,0x98,0x9F,0x0F,0x05,0x8F,0x4F,0x5F,0x4F,0xE4,
+ 0x4C,0x85,0x03,0xD0,0xD7,0x73,0x0B,0x8A,0xA5,0x8A,0xA6,0xAA,
+ 0x52,0x77,0x4C,0xA9,0xFB,0x4A,0x52,0xB6,0x00,0xA5,0x29,0x40,
+ 0x29,0x5C,0xF7,0x09,0x8C,0x41,0x8A,0xA9,0x12,0x17,0xB5,0x03,
+ 0x80,0x07,0x55,0x1F,0x21,0xEB,0x50,0x2A,0xBE,0x5D,0xDF,0x56,
+ 0xC8,0xD6,0xDE,0xEF,0x3E,0x2B,0x07,0xF5,0x38,0x15,0xCE,0xC6,
+ 0xF1,0x5C,0x36,0x09,0xA8,0xD5,0x96,0xAF,0x97,0x30,0x95,0xCB,
+ 0x35,0x2A,0xBF,0x69,0xBD,0xBA,0x89,0x5E,0xC3,0x76,0x29,0x6D,
+ 0xE5,0x1C,0xA1,0x59,0x1E,0x3E,0x07,0x1D,0x3D,0x2A,0x7C,0x10,
+ 0x7A,0x1A,0xCD,0x83,0xC6,0xD2,0xC6,0x53,0xEF,0x29,0x3D,0x3E,
+ 0x2B,0xCC,0x1F,0xB4,0xA5,0x2B,0x6C,0x0A,0x52,0x94,0x02,0x94,
+ 0xA5,0x00,0xA5,0x29,0x40,0x29,0x4A,0x50,0x0A,0x52,0x94,0x02,
+ 0x94,0xA5,0x00,0xA5,0x29,0x40,0x29,0x4A,0x50,0x0A,0x52,0x94,
+ 0x02,0x94,0xA5,0x00,0xA5,0x2A,0x9D,0xAA,0x6F,0xEB,0x5C,0xE5,
+ 0x5A,0x62,0x4C,0x6A,0x06,0xC3,0x87,0x1F,0x79,0xCE,0xEB,0x72,
+ 0xBF,0x75,0x24,0xF4,0xFE,0x3F,0x2E,0xBA,0x78,0xDC,0x6D,0x3C,
+ 0x1D,0x3E,0xF2,0x7E,0x89,0x6E,0xD9,0x0D,0x97,0x1A,0x55,0x13,
+ 0xB9,0xD4,0x41,0xAC,0xFD,0xB4,0xDE,0xCC,0x75,0xF6,0x83,0xD3,
+ 0xCF,0x38,0xA8,0x24,0x5F,0xED,0xB2,0x66,0xAA,0xD3,0x2B,0x5B,
+ 0xDB,0xD5,0x29,0xB7,0x00,0x0D,0x26,0x50,0x74,0xEF,0x23,0xE1,
+ 0xCE,0x78,0x3F,0xE1,0xFA,0xF8,0xD7,0x0F,0xFD,0x9E,0x9B,0xBE,
+ 0x5A,0x52,0xB9,0x36,0x7D,0x0D,0x62,0x95,0x9F,0xBF,0x05,0xC6,
+ 0xE3,0x2D,0xE7,0xF5,0x16,0xD6,0x52,0x92,0xA5,0x29,0x4A,0x38,
+ 0x03,0xCF,0xE2,0xA8,0x3B,0x76,0xB4,0x82,0xEB,0x12,0x20,0x5A,
+ 0xF5,0x4C,0x17,0x23,0x25,0x60,0x2A,0x5A,0xDC,0xEE,0xD0,0x85,
+ 0x73,0x94,0x85,0x9E,0x87,0x3F,0xA5,0x5A,0x9F,0x69,0x61,0x3D,
+ 0x5D,0x27,0x6E,0xBB,0xEB,0xC8,0x86,0xDA,0xDC,0xD7,0x29,0x59,
+ 0xC8,0x93,0x75,0x11,0x7B,0xDF,0xEB,0x2C,0x4E,0xE3,0x1F,0xDE,
+ 0x7B,0x77,0x1C,0xFF,0x00,0x8A,0xBF,0x6D,0xEE,0xDD,0xE5,0xA7,
+ 0x74,0x1D,0x47,0x1A,0x4A,0x4F,0x8A,0x26,0xF7,0x9F,0xEF,0x51,
+ 0xFE,0xCF,0x4A,0xF6,0xEE,0xE4,0x35,0xE8,0x68,0xB4,0xAC,0xBE,
+ 0xF1,0x7B,0x36,0x39,0x2D,0xA2,0xFD,0xAC,0x20,0x41,0x2F,0xFB,
+ 0x81,0x0F,0x4D,0xF7,0x8E,0x78,0xE1,0x04,0x8C,0xFC,0xFC,0x3A,
+ 0xF9,0xD7,0x65,0xBE,0x2F,0xB6,0x44,0x4C,0x88,0x1A,0x91,0x2F,
+ 0x47,0x50,0xCA,0x56,0xD2,0x89,0x49,0xFF,0x00,0xCA,0xAB,0x3E,
+ 0xD4,0x53,0x8A,0xBF,0x74,0xED,0xE3,0xA1,0x36,0x97,0x43,0x44,
+ 0xA5,0x64,0xD2,0xF5,0x24,0x2B,0x06,0xA0,0x6A,0x13,0x1A,0x89,
+ 0x99,0x77,0x55,0x13,0xBA,0x26,0x0A,0x8E,0xDC,0x12,0x4A,0xB9,
+ 0xE0,0x71,0xD7,0xCF,0x15,0x21,0x6F,0xB8,0x5C,0xAE,0x05,0x4E,
+ 0xC2,0xD4,0xF0,0xA4,0x15,0x12,0x54,0x96,0xE6,0x83,0xB4,0xF9,
+ 0x6D,0x1F,0x0F,0xCB,0x03,0x15,0x75,0xDA,0x5A,0x79,0x53,0x74,
+ 0xE5,0xAF,0xCB,0xA9,0x17,0x77,0xB1,0xA4,0xD2,0xB3,0x66,0xE6,
+ 0x5C,0x1D,0x94,0x5A,0x6B,0x54,0xC3,0x5B,0xC3,0x92,0xDA,0x6E,
+ 0x19,0x23,0xFE,0xDA,0xFD,0xB8,0x4C,0xB9,0x44,0x8E,0xA7,0xE7,
+ 0x6A,0x88,0x71,0x59,0x40,0xCA,0x9C,0x76,0x7F,0x76,0x91,0xF3,
+ 0x3C,0x54,0x7F,0xB3,0xD2,0xBD,0xBB,0xA9,0x5C,0x6B,0xD0,0xD2,
+ 0x29,0x59,0x85,0x8E,0x74,0x2D,0x46,0x55,0x2A,0xDB,0xAB,0xA3,
+ 0x4B,0x78,0xFF,0x00,0x7B,0xDC,0xB9,0x92,0x3C,0x3C,0x0F,0x4E,
+ 0x38,0xF3,0x18,0x35,0xF5,0xA8,0x9D,0x85,0x61,0x86,0x99,0xD7,
+ 0xAD,0x56,0xC4,0x36,0x42,0x80,0x42,0xE4,0x2F,0x09,0x2A,0x3D,
+ 0x06,0x4A,0xBC,0x4E,0x2A,0x8F,0xB5,0x11,0xCD,0x95,0x52,0x77,
+ 0xF3,0xFC,0x13,0x69,0x6F,0x63,0x4D,0xA5,0x65,0xB1,0x75,0x4B,
+ 0xB7,0xAF,0x65,0x53,0x1A,0x92,0x0C,0x67,0x14,0xD0,0x53,0x4C,
+ 0x2E,0x57,0x72,0xE2,0xD2,0x46,0x77,0x14,0x1E,0x4E,0x6B,0xA6,
+ 0xE7,0x74,0xB8,0x5A,0x10,0x99,0x53,0xF5,0x2C,0x36,0x42,0x30,
+ 0xA4,0xA5,0xC9,0x83,0xDF,0xF4,0xDB,0xFB,0x59,0xF2,0xAC,0xF2,
+ 0xED,0x25,0x25,0x2B,0x2A,0x72,0xF6,0x22,0xFC,0xCD,0x26,0xBE,
+ 0x5D,0x71,0x0D,0x36,0xA7,0x1C,0x50,0x4A,0x10,0x0A,0x94,0xA3,
+ 0xD0,0x01,0x51,0x9A,0x72,0xF2,0xDD,0xE2,0x00,0x7C,0x36,0xA6,
+ 0xD6,0x93,0xB5,0x60,0x83,0x8C,0xFA,0x1F,0x11,0x51,0xBD,0xA1,
+ 0x4C,0x5B,0x56,0xE6,0x21,0xB5,0x9D,0xD2,0x57,0xC8,0x03,0xA8,
+ 0x4E,0x38,0xFC,0x48,0xAE,0xAD,0x7C,0x75,0x3A,0x78,0x47,0x89,
+ 0x8E,0xAA,0xD7,0x5F,0x4F,0x88,0xBE,0x97,0x3E,0x1D,0x96,0x6F,
+ 0x2B,0x54,0x97,0xB7,0x22,0xDE,0xC9,0xFB,0xB6,0xBC,0x5C,0x23,
+ 0xC4,0xFF,0x00,0xB7,0xF2,0x6A,0xBD,0xA1,0xEA,0xE9,0x16,0x78,
+ 0x0C,0xC6,0xB7,0x36,0x83,0x3E,0x51,0xEE,0xE3,0x35,0x9F,0x75,
+ 0x3E,0x6A,0x57,0xF8,0x40,0xC9,0x3F,0x2F,0x95,0x59,0xA1,0xAD,
+ 0x1F,0x67,0xC7,0x43,0x63,0xDC,0x28,0x0A,0x09,0x58,0xF0,0x23,
+ 0x8C,0xFD,0x31,0x58,0x87,0x69,0x77,0x76,0x5C,0xED,0x16,0x53,
+ 0x0D,0xBB,0x93,0x15,0x96,0x98,0x4A,0x01,0x04,0x36,0xB5,0x92,
+ 0x55,0xC7,0x81,0x20,0x23,0xF9,0x35,0xE0,0x28,0xD5,0x96,0x32,
+ 0xBB,0x9D,0x4F,0xE5,0x2D,0xFE,0xCB,0xC8,0xBC,0xAF,0x18,0x9D,
+ 0x82,0xD9,0xA8,0xA4,0xA4,0x4B,0x91,0xA9,0x6F,0xAB,0x79,0x5E,
+ 0xF0,0x31,0xD6,0x86,0x9B,0x4F,0x8F,0xB8,0x92,0x92,0x71,0xF3,
+ 0x26,0xA4,0x6C,0x5A,0xBA,0xF1,0x62,0x94,0x88,0x57,0xD9,0x4E,
+ 0x4D,0x82,0xA2,0x13,0xED,0x2F,0xA0,0x21,0xE6,0x49,0x3D,0x57,
+ 0x80,0x02,0x93,0xEA,0x00,0xC7,0x97,0x88,0xF3,0xB5,0xCE,0x72,
+ 0x5B,0xA9,0x43,0x7C,0x24,0x70,0x00,0xF0,0x15,0x63,0x99,0xA6,
+ 0xD3,0x76,0xB7,0x16,0x9E,0x4F,0x24,0x1D,0xAA,0xC7,0x23,0xFE,
+ 0x3D,0x2B,0xD5,0xD6,0xE0,0x77,0xA7,0xA4,0xAE,0xFA,0x59,0x5B,
+ 0xD3,0xA1,0x4B,0x1C,0x9A,0xD2,0x7B,0xB0,0x2F,0x91,0xA6,0x25,
+ 0x6F,0x2D,0x12,0x58,0xFE,0xF0,0xAB,0xDC,0x42,0x90,0xAE,0x00,
+ 0x1E,0x64,0x2F,0xFF,0x00,0x1A,0xD1,0xF4,0xF5,0xED,0x13,0xE2,
+ 0xB2,0xF8,0x23,0xEF,0x10,0x15,0x8F,0x2C,0x8A,0xC3,0x1B,0xD0,
+ 0xF7,0x64,0x5C,0xD0,0x27,0x49,0x98,0xB8,0xB1,0xB2,0x1A,0x6D,
+ 0x6E,0xEE,0x40,0x1D,0x3D,0xDF,0x1E,0x9E,0x7D,0x2A,0xDF,0x64,
+ 0x95,0x70,0x76,0x42,0x6D,0x36,0x44,0x72,0x8F,0x75,0xC7,0x40,
+ 0xF7,0x5B,0xF4,0x1F,0xEF,0xE1,0x58,0x38,0x6C,0x7F,0xC6,0x52,
+ 0x95,0x5A,0xDA,0x27,0xA5,0xB9,0xB6,0xBC,0x05,0xCD,0x95,0x2E,
+ 0xA0,0x20,0x15,0xAD,0x29,0x07,0xCC,0xE2,0xBD,0x01,0x0A,0x00,
+ 0x82,0x08,0x3D,0x08,0xAC,0x85,0xDB,0x96,0x90,0x87,0x7D,0x4D,
+ 0x96,0xF3,0xAC,0xE0,0xFD,0xB0,0xE9,0x4A,0x51,0x1B,0xDA,0x13,
+ 0xDE,0xA9,0x4A,0xE8,0x30,0x72,0x49,0x3E,0x15,0x38,0xA7,0x9F,
+ 0xD3,0x4B,0x4C,0xD8,0xD2,0xBB,0xE8,0x8A,0x50,0x4B,0x8D,0x2F,
+ 0x80,0x73,0xD3,0xEB,0xE4,0x6A,0x21,0xDA,0x65,0xDE,0x28,0xD4,
+ 0xA4,0xD4,0x5F,0x3B,0xFD,0x2C,0x4B,0x4D,0x6A,0xD1,0xA1,0x52,
+ 0xA3,0x20,0xDF,0x2D,0xF2,0xAD,0xBF,0x68,0x21,0xF4,0xA5,0x80,
+ 0x32,0xB2,0xAE,0x36,0x1F,0x10,0x7D,0x6A,0x06,0x6C,0xEB,0x95,
+ 0xE4,0x29,0xC6,0x5F,0xFB,0x3A,0xDA,0x07,0x0B,0x57,0x0A,0x58,
+ 0xF3,0x3F,0xED,0x9F,0xC6,0xBA,0xF8,0xDE,0x2D,0x43,0x09,0x4D,
+ 0x4D,0xBB,0xB9,0x6C,0x97,0x3F,0xC1,0x17,0x2D,0xEA,0x75,0xB4,
+ 0xAB,0x6A,0x9C,0x40,0x3E,0x44,0xD7,0xD5,0x64,0x6C,0xDD,0x34,
+ 0x4B,0xD7,0x63,0x66,0x6F,0x53,0xB2,0xF5,0xD0,0x12,0x14,0xCA,
+ 0x14,0x37,0x67,0x19,0x3C,0x63,0xCB,0x9F,0x95,0x4C,0xC4,0xB8,
+ 0xBD,0xA7,0x9C,0x4B,0xCD,0xCB,0x12,0xE1,0x29,0x5B,0x5C,0x6C,
+ 0x82,0x9C,0x7C,0x81,0xF1,0xFD,0x6B,0x93,0x4B,0xB4,0xAB,0xBD,
+ 0x50,0xAD,0x49,0xC5,0x3E,0x77,0xFC,0x0B,0xD8,0xBF,0x4B,0x90,
+ 0xCC,0x58,0xEB,0x91,0x21,0xC0,0xDB,0x68,0x19,0x52,0x8D,0x41,
+ 0xDB,0xF5,0x28,0x76,0x79,0x6A,0x64,0x65,0x45,0x61,0xD3,0xF7,
+ 0x0E,0x2C,0x11,0x9F,0xF3,0x78,0x73,0xE9,0xFF,0x00,0x35,0x14,
+ 0x95,0x4C,0xBE,0xAD,0x13,0xA7,0xBA,0x86,0xA1,0x67,0x7B,0x31,
+ 0xC1,0xC8,0xF4,0xCF,0x9F,0xFC,0x9E,0x9D,0x2A,0x37,0x52,0x5B,
+ 0x6E,0x57,0x2B,0xE4,0x79,0x31,0x5D,0x6D,0x31,0x5A,0x8C,0xB6,
+ 0xD4,0x87,0x1D,0xDB,0xEF,0x15,0x20,0x83,0x8F,0x90,0x3C,0xD6,
+ 0x96,0x2F,0xB4,0x93,0x95,0x75,0xDC,0x69,0x18,0xF5,0xFF,0x00,
+ 0xB7,0xD9,0x7E,0xF9,0x4E,0x56,0xD5,0xCD,0x22,0x95,0x97,0x45,
+ 0xBB,0x4A,0x99,0x29,0xDB,0x1C,0x8B,0xEB,0x11,0xDC,0x84,0x79,
+ 0xDA,0xBE,0xA7,0x03,0x8C,0xE4,0x74,0x0A,0x4F,0x1F,0xE2,0xAE,
+ 0xD9,0xA2,0x4D,0xA6,0x13,0xB7,0x47,0x2F,0xE4,0xA2,0x32,0x7B,
+ 0xC5,0x64,0x92,0x30,0x3E,0xB5,0xD0,0x7D,0xA6,0xA7,0x75,0x6A,
+ 0x6E,0xCC,0x8B,0xB3,0x44,0xA5,0x67,0x92,0x75,0x38,0xBC,0x21,
+ 0x2C,0xBB,0x71,0x66,0xD4,0x86,0xD0,0x14,0xA5,0x2D,0x7B,0x77,
+ 0xAB,0xA1,0xC1,0xC8,0xE3,0x91,0xF8,0xD7,0xDB,0x30,0x9E,0x7B,
+ 0xFB,0xAD,0x44,0xA5,0xE4,0x64,0x61,0x47,0x9F,0xFC,0xA9,0x5B,
+ 0xB4,0xD4,0x61,0x3C,0xB0,0x83,0x92,0xEB,0xB0,0x4E,0xFB,0x1A,
+ 0x05,0x7E,0x29,0x49,0x4A,0x77,0x28,0x84,0x81,0xE2,0x4D,0x52,
+ 0x6C,0x7A,0xE6,0x2B,0x96,0xF5,0xA5,0xE2,0x64,0x48,0x41,0xD8,
+ 0xD1,0x40,0xFE,0xF8,0xE7,0x1F,0x43,0x9E,0xBF,0xC8,0xA8,0xAD,
+ 0x51,0x71,0xB5,0x5B,0xDB,0x45,0xCF,0x59,0xEA,0x48,0xB6,0xC6,
+ 0xDE,0x38,0x42,0x1C,0x70,0x21,0x29,0x3E,0x00,0x13,0xE8,0x0F,
+ 0x87,0x9F,0x5A,0xCF,0x89,0xED,0x05,0x0A,0x70,0x8F,0x74,0xB3,
+ 0x4A,0x5C,0xBA,0x79,0x92,0xB5,0xD8,0xD2,0xD0,0xB4,0x2C,0x65,
+ 0x0A,0x4A,0x87,0xA1,0xCD,0x7C,0xBE,0xEB,0x6C,0x32,0xB7,0x9D,
+ 0x58,0x43,0x68,0x1B,0x94,0x4F,0x80,0xAC,0xCE,0xCF,0xF6,0x1D,
+ 0xE2,0x2A,0x6E,0x1A,0x6F,0x51,0x35,0x21,0x93,0x90,0x97,0x5B,
+ 0x56,0xE0,0x48,0xF2,0x23,0x15,0xF9,0x37,0x55,0x3B,0x73,0xB6,
+ 0x37,0x6C,0x53,0xCD,0xAD,0x69,0x7B,0x63,0x8F,0x05,0x70,0xBD,
+ 0xA7,0x18,0x3E,0xA0,0xF5,0xF9,0x56,0xBC,0x3B,0x48,0xB2,0x49,
+ 0xD4,0xA6,0xE3,0x24,0xB4,0xE6,0x9B,0xE9,0xB6,0x85,0x5B,0xB6,
+ 0xE5,0x91,0xE9,0x5F,0x6B,0x2B,0xDB,0x25,0x25,0x49,0x84,0x85,
+ 0x7D,0xC3,0x3E,0x2B,0x3F,0xBC,0x7C,0xFE,0x5F,0xC9,0xA8,0xF6,
+ 0x8F,0xAC,0x26,0x5A,0xA3,0xC6,0x81,0x6A,0x0D,0x7D,0xA5,0x35,
+ 0x45,0x2C,0x21,0x64,0x84,0x36,0x91,0xF1,0x38,0xAC,0x72,0x42,
+ 0x47,0xE3,0xC0,0xE3,0x39,0xA9,0xE7,0x5E,0x77,0xBB,0x69,0xB4,
+ 0x20,0x20,0x36,0x81,0xEE,0x83,0x90,0x32,0x3F,0x91,0xF4,0xAC,
+ 0x5B,0x5A,0xDD,0x8B,0xFD,0xA0,0xCE,0x2E,0xA0,0xA0,0xB5,0xDD,
+ 0x43,0x4F,0xBC,0x4F,0x1F,0x12,0x88,0x1E,0x19,0xDC,0x9F,0xF4,
+ 0xD7,0x95,0xA7,0x1A,0x98,0xDC,0x43,0x9D,0x57,0x79,0x6F,0xF6,
+ 0x5E,0x45,0xB3,0x59,0x59,0x12,0xC2,0xDD,0xA8,0xDE,0x48,0x96,
+ 0xFE,0xA6,0xD4,0x0E,0xBE,0xAF,0x7B,0x7B,0x4E,0x36,0xDA,0x07,
+ 0x8F,0xBA,0x8D,0xA7,0x8F,0x2C,0xE7,0xE6,0x6A,0x46,0xC1,0xAB,
+ 0xAE,0x96,0x99,0xCD,0xC0,0xD4,0x0F,0x39,0x36,0x32,0xD4,0x10,
+ 0x89,0x6E,0x20,0x21,0xD6,0x89,0xE9,0xDE,0x01,0x80,0x41,0x3F,
+ 0xB4,0x00,0xC7,0x88,0xC7,0x23,0xCE,0xD7,0x39,0xD9,0xAF,0x04,
+ 0xA4,0xF1,0xD0,0x62,0xAC,0x17,0x2D,0x2E,0x9B,0xC5,0xB4,0xB4,
+ 0xF2,0x70,0xBD,0xA4,0x25,0x58,0xE9,0xE9,0xF2,0xAF,0x5F,0x5F,
+ 0x81,0xDE,0x9F,0xF1,0x95,0xDF,0x47,0x6F,0x87,0x42,0x0E,0x6D,
+ 0x6B,0x70,0x55,0x9B,0x53,0xC6,0x73,0xDA,0x8A,0xD5,0x29,0x80,
+ 0xF3,0x69,0xF0,0x49,0x6D,0x40,0x13,0x9F,0x5D,0xC8,0xFC,0x2B,
+ 0x4A,0xB1,0xDE,0x1B,0x9A,0xC3,0x6E,0xA1,0x59,0x0B,0x48,0x50,
+ 0xE7,0xC0,0x8A,0xC1,0xE3,0x68,0x9B,0xB2,0x6E,0xA1,0xCB,0x94,
+ 0xA9,0xAE,0xB3,0x1D,0x25,0x0D,0x87,0x9D,0xDE,0x02,0x49,0x19,
+ 0x09,0x3D,0x70,0x76,0x8E,0x49,0xAB,0x95,0x92,0x4D,0xC6,0x5B,
+ 0xBF,0x66,0xD9,0x7D,0xC6,0xDA,0x18,0x75,0xF1,0xC0,0x48,0x1E,
+ 0x09,0x3E,0x9E,0x75,0x8B,0x03,0x25,0xC3,0x69,0x4E,0xAD,0x5D,
+ 0x13,0xB5,0x97,0x36,0xD7,0x44,0x42,0x36,0x30,0xF3,0x61,0x20,
+ 0xAD,0x69,0x4E,0x7C,0xCE,0x2B,0xD0,0x10,0x46,0x47,0x22,0xB1,
+ 0xFB,0xA5,0xCF,0x47,0x58,0xE4,0x88,0xBA,0x87,0x56,0x47,0x62,
+ 0x62,0xF9,0xC2,0xD7,0x82,0x7F,0x10,0x73,0xF8,0xD4,0xC5,0xB9,
+ 0xD7,0xA2,0xB2,0x2E,0x16,0x3B,0xAA,0x25,0x30,0x13,0xDE,0x14,
+ 0x73,0xB5,0x49,0xEB,0xD3,0xC7,0x8F,0x11,0x54,0x8F,0x69,0xAD,
+ 0x25,0xDE,0x51,0x6A,0x2F,0x9D,0xFF,0x00,0x04,0xEA,0x8D,0x22,
+ 0x95,0x13,0x63,0xBE,0xC3,0xBA,0xC4,0xEF,0x9B,0x50,0x42,0xD1,
+ 0xFD,0xEB,0x6A,0x3C,0xA0,0xFF,0x00,0xB7,0xAD,0x45,0xDC,0xAE,
+ 0x52,0xAF,0x0B,0x53,0x16,0xB7,0xFD,0x9E,0x12,0x09,0x0E,0x49,
+ 0xE8,0x57,0xFE,0x5F,0x4F,0x5F,0x1A,0xEC,0x62,0xF8,0xAE,0x1F,
+ 0x0D,0x41,0x56,0x6E,0xE9,0xED,0x6E,0x7F,0xBC,0xC9,0xDF,0x63,
+ 0xA3,0x5A,0x41,0x5B,0xF1,0xFD,0xB2,0x3C,0xB0,0xD4,0x88,0xC8,
+ 0x2A,0x4A,0x54,0x41,0x18,0xEB,0x90,0x0F,0x8F,0xEB,0x8A,0xAB,
+ 0xE9,0x8B,0x95,0xF1,0xF4,0x49,0x66,0xEB,0x3D,0x12,0x9C,0x42,
+ 0xF2,0xDB,0x8D,0x31,0xDC,0xA7,0x61,0xE8,0x36,0xEE,0x39,0x23,
+ 0x9E,0x73,0x5C,0x77,0xA9,0x9A,0x3A,0xCC,0xB6,0xD8,0xBC,0x6A,
+ 0x98,0xD1,0x65,0x3C,0xB2,0x84,0x07,0x5C,0x09,0xDE,0xBF,0x20,
+ 0x0F,0x8D,0x77,0xDB,0x61,0x98,0x89,0x76,0x43,0x52,0x9A,0x92,
+ 0xC3,0xBB,0x36,0x2D,0x1E,0x3D,0x6B,0xC4,0x63,0xB1,0x2F,0x15,
+ 0x51,0xD5,0x54,0xF2,0xE6,0xF5,0xBF,0xAD,0x88,0xBB,0x4C,0xA9,
+ 0xCE,0xB8,0xFB,0x16,0xBC,0x94,0x97,0x17,0xCA,0x95,0x1C,0xF5,
+ 0xF9,0xD6,0xAD,0x6C,0xBA,0xA2,0x46,0x30,0xAA,0xFE,0x76,0xED,
+ 0x1E,0x72,0xE3,0xF6,0x8A,0xF6,0x0E,0x32,0x96,0x0F,0xE6,0xAA,
+ 0xBA,0x69,0xAB,0xDD,0xC2,0xE1,0x25,0x36,0xDB,0x46,0x54,0xF9,
+ 0xE1,0xC7,0x47,0x21,0xBF,0xF9,0xFD,0x3F,0x4F,0x41,0xC2,0x6B,
+ 0x53,0xC1,0x61,0xE7,0x52,0xA7,0xFE,0xBF,0x20,0x99,0xB7,0x07,
+ 0x9B,0x09,0x1B,0xD6,0x94,0xE7,0xA6,0x4E,0x2B,0xD2,0xB2,0x6B,
+ 0xCC,0xDD,0x25,0x60,0x90,0xD4,0x6D,0x51,0xAB,0xA1,0xC3,0x9D,
+ 0x23,0xFB,0xB4,0xBE,0xFA,0x50,0x57,0xFE,0xAC,0xE7,0xA8,0xF1,
+ 0xF1,0xA9,0x86,0x24,0x4E,0xB0,0xA5,0x12,0xE2,0x4B,0x13,0x21,
+ 0x9F,0x8D,0xBE,0x89,0xC7,0xF0,0xF9,0xD4,0x53,0xED,0x3C,0x73,
+ 0xA5,0x52,0x9B,0x51,0x7C,0xEF,0x7F,0xA1,0x2D,0x35,0xBA,0x34,
+ 0x1A,0x57,0x05,0xA6,0xED,0x12,0xE7,0x11,0x32,0x62,0xB8,0x14,
+ 0x95,0x75,0x1E,0x29,0x3E,0x47,0xD6,0xBB,0xC1,0x07,0xA5,0x7A,
+ 0x88,0x4E,0x33,0x8A,0x94,0x5D,0xD3,0x02,0x95,0xCD,0x73,0x9D,
+ 0x1E,0xDD,0x11,0x52,0x64,0xAF,0x6A,0x47,0x00,0x0E,0xAA,0x3E,
+ 0x00,0x0F,0x13,0x54,0xFB,0x91,0x9B,0x72,0x06,0x4D,0xD2,0xE0,
+ 0x98,0x11,0x8F,0x28,0x63,0x3D,0x13,0xEB,0xEB,0xEB,0xCF,0xF0,
+ 0xAE,0x67,0x12,0xE2,0xF4,0xB0,0x36,0x8B,0x59,0xA4,0xF6,0x48,
+ 0x79,0x17,0x74,0xB8,0xDA,0x95,0xB5,0x2E,0x25,0x47,0xC8,0x1A,
+ 0xFA,0xAC,0x8A,0xD3,0x77,0xD0,0x97,0xB9,0xEA,0xB7,0xD8,0x35,
+ 0x95,0xBE,0x64,0xE4,0x65,0x45,0xB6,0xA4,0x25,0xC5,0x00,0x3A,
+ 0x9C,0x0E,0x78,0x35,0x67,0xB7,0x5F,0x25,0x58,0xE5,0xA2,0x1D,
+ 0xD9,0xE2,0xFC,0x57,0x3F,0xBB,0x7B,0xA9,0x47,0x87,0xE1,0xE9,
+ 0xE1,0xC5,0x73,0xF0,0xDD,0xA3,0x84,0xEA,0xAA,0x55,0xE1,0x92,
+ 0xFF,0x00,0xBA,0xE8,0x83,0xBA,0xDC,0xBB,0x57,0x8B,0x92,0xA3,
+ 0x37,0x25,0x11,0x96,0xFB,0x69,0x79,0x63,0x29,0x41,0x57,0x27,
+ 0xE9,0x55,0xEB,0xA6,0xA6,0x79,0x72,0x7D,0x92,0xCA,0xC2,0x65,
+ 0x2C,0x1D,0xAB,0x7B,0x04,0xA1,0x27,0xC8,0x1E,0x99,0xA8,0x3B,
+ 0xDC,0x67,0x5A,0x69,0x85,0x94,0xB9,0x2E,0xEB,0x22,0x42,0x12,
+ 0xA7,0x02,0xC8,0x0D,0xE4,0xF2,0x78,0xF2,0x1E,0x1E,0x95,0x93,
+ 0x1D,0xDA,0x0A,0x54,0x27,0xDD,0xD1,0x59,0x9A,0xDF,0xA2,0xF5,
+ 0xEA,0x45,0xCD,0x08,0x29,0x25,0x45,0x21,0x43,0x70,0xEA,0x33,
+ 0xCD,0x7E,0xD6,0x75,0x39,0x81,0x6D,0x4A,0xEE,0x2D,0x5C,0x9C,
+ 0x54,0xC6,0x7D,0xF7,0x14,0x46,0x41,0xF3,0xFE,0x72,0x6A,0x45,
+ 0x9D,0x57,0x2A,0xEF,0x15,0x11,0x2D,0x8C,0x84,0x4D,0x50,0xC3,
+ 0xAE,0x1F,0x81,0xBF,0x51,0xF3,0xFC,0xBF,0x3A,0x8C,0x3F,0x68,
+ 0xE8,0x4E,0x32,0x75,0x62,0xE2,0xD6,0xCB,0x7B,0xF9,0x78,0xF8,
+ 0x0B,0xF2,0x2E,0x6B,0x5A,0x10,0x32,0xB5,0x25,0x23,0xD4,0xE2,
+ 0x89,0x52,0x54,0x9D,0xC9,0x21,0x40,0xF8,0x83,0x59,0x7E,0xA5,
+ 0x93,0xA6,0xB4,0xF2,0x53,0x27,0x56,0xEA,0xA8,0xF0,0xCB,0xCA,
+ 0xDA,0x85,0xBE,0xE8,0x46,0xE5,0x75,0xC6,0x4E,0x72,0x7A,0xD7,
+ 0x54,0x14,0x6C,0x8A,0xDD,0xDB,0x4E,0x5D,0xD3,0x26,0x3A,0xD2,
+ 0x1C,0x68,0xA0,0xEE,0x4B,0xA9,0x23,0x20,0xE4,0x70,0xA0,0x47,
+ 0xA5,0x6A,0x2E,0xD4,0xAC,0xC9,0xCA,0x93,0x51,0xEB,0x7F,0xC1,
+ 0x2D,0x49,0x72,0x34,0x7A,0x55,0x15,0xDB,0x86,0xA9,0x7D,0xA5,
+ 0x4B,0x5B,0x8D,0x45,0x69,0xAF,0x7F,0x68,0xC0,0x04,0x0E,0x7D,
+ 0x73,0xF2,0xCD,0x58,0x34,0xC6,0xA1,0x8B,0x79,0x8B,0xB9,0x0A,
+ 0x4A,0x5F,0x40,0x1B,0xD0,0x0E,0x47,0xCC,0x79,0x8A,0xEB,0xE0,
+ 0xB8,0xCE,0x1F,0x19,0x51,0xD3,0x85,0xD3,0xE5,0x7E,0x7E,0x44,
+ 0x5C,0x9A,0xA5,0x01,0x07,0xA5,0x2B,0xAC,0x48,0xA5,0x29,0x40,
+ 0x29,0x4A,0x50,0x0A,0xA9,0xF6,0x99,0xA7,0xA1,0x5D,0xEC,0x4F,
+ 0x3C,0xFC,0x36,0xA4,0x2D,0xA4,0xE5,0x68,0x5A,0x02,0x83,0x88,
+ 0xF1,0x04,0x1E,0xB8,0xEB,0xF4,0xAB,0x65,0x7E,0x38,0x90,0xB4,
+ 0x29,0x0A,0x00,0xA5,0x43,0x04,0x1F,0x1A,0xD7,0xC5,0x61,0xE3,
+ 0x88,0xA4,0xE9,0xCB,0x9F,0xC1,0xF5,0x21,0xAB,0xA3,0x2F,0xEC,
+ 0xFE,0x6B,0x6F,0xDA,0x1C,0xB6,0x2D,0x69,0x2F,0x40,0x57,0x74,
+ 0x52,0xA5,0x64,0x96,0xC8,0xCA,0x0F,0xE1,0xC7,0xCD,0x26,0xB3,
+ 0x3D,0x59,0x0E,0x0D,0x8E,0x7C,0xAD,0x3C,0xEC,0x18,0xC9,0x88,
+ 0x95,0x6F,0x65,0xB0,0xDA,0x42,0x4B,0x6A,0xE5,0x2A,0x00,0x74,
+ 0xC7,0x29,0xCF,0x5C,0xA0,0x9A,0xB8,0xCE,0x0B,0xD2,0x7D,0xA0,
+ 0xB6,0x95,0xA8,0xA6,0x23,0xCB,0x0C,0x2C,0x9E,0x9B,0x16,0x7E,
+ 0xED,0x5C,0xF9,0x28,0xE0,0x9F,0x53,0x5D,0x7D,0xAD,0x69,0x09,
+ 0x3A,0x96,0x2D,0xBE,0x55,0xAD,0x28,0x33,0x23,0xBA,0x10,0xB0,
+ 0x4E,0xDD,0xEC,0xAC,0xF3,0xCF,0xA1,0xC1,0xC9,0xE8,0x0A,0xAB,
+ 0xC2,0x2C,0x3E,0x56,0xEF,0xA3,0x5B,0xF9,0xA2,0x2E,0xE5,0x1F,
+ 0x22,0x43,0x45,0xAD,0xCB,0xB6,0x8D,0x8A,0xF4,0xF6,0x42,0xF7,
+ 0xA1,0x4D,0x2F,0x3C,0x87,0x00,0x25,0x24,0xF3,0xE7,0x8F,0xCE,
+ 0xB3,0x3B,0xD3,0xAA,0xB2,0xDD,0x5D,0xB1,0x3A,0xD2,0x42,0x12,
+ 0x42,0x5A,0x0B,0x4E,0x02,0x90,0x7E,0x13,0xF5,0x1C,0x1F,0x0C,
+ 0xE7,0xCA,0xBD,0x2D,0x5A,0xC9,0xB4,0x76,0xA8,0x6C,0x0C,0xCD,
+ 0x5B,0x96,0x18,0x48,0x4D,0xA9,0xA2,0x78,0x4A,0xE4,0xA4,0x65,
+ 0x6E,0x60,0x0E,0xA5,0x79,0x47,0xF9,0xB3,0x56,0xDD,0x69,0x61,
+ 0xB7,0x5C,0x2E,0xB6,0xEB,0xDC,0xD7,0x52,0xD3,0x50,0x09,0x32,
+ 0x96,0xA0,0x30,0xEB,0x23,0x2A,0x09,0x3C,0x78,0x1E,0x06,0x48,
+ 0x00,0x2D,0x46,0xAF,0x3A,0x31,0x8A,0x51,0xB1,0x8E,0x4F,0xA9,
+ 0x56,0xD5,0xE2,0x12,0x15,0x68,0xD2,0x2D,0xC5,0x68,0x46,0x65,
+ 0x9F,0x6C,0x98,0xC0,0x6F,0x68,0x3B,0x89,0x28,0x6C,0xA4,0x0C,
+ 0x1C,0x93,0x9C,0x79,0xA0,0xF9,0xD4,0x9E,0x8F,0x76,0x25,0x93,
+ 0x54,0x7D,0x94,0x19,0x6A,0x02,0x5E,0x51,0x4E,0x1A,0x48,0x42,
+ 0x43,0x80,0x64,0x70,0x38,0xE5,0x23,0xCB,0x9C,0x0A,0xA5,0x68,
+ 0x1B,0x92,0xF5,0x2E,0xAE,0x99,0x7E,0x91,0x9C,0x49,0x7C,0xC9,
+ 0x19,0x4E,0xDC,0x20,0x1C,0x34,0x9C,0x64,0xE3,0x8C,0x12,0x3C,
+ 0xC9,0xAB,0x66,0xBE,0x81,0x23,0x7C,0x7B,0xC4,0x35,0x29,0xB7,
+ 0x52,0xA4,0xE1,0xC1,0xD5,0x2E,0x24,0xE5,0x0A,0xE7,0xE5,0xF9,
+ 0x56,0xD4,0xF8,0x74,0x9E,0x19,0xD4,0x6F,0x45,0xA7,0xDD,0xFB,
+ 0xFC,0x89,0xDB,0x52,0x73,0xB5,0x88,0x0C,0xC2,0x91,0x1B,0x53,
+ 0x26,0x23,0x7D,0xE3,0x88,0x11,0x24,0x3B,0xB3,0xDE,0x03,0x92,
+ 0x8E,0x7C,0x13,0xCA,0x87,0xA9,0x29,0xAE,0x1E,0xC8,0x26,0x95,
+ 0x5C,0x67,0x5B,0xE1,0xC6,0x4A,0x22,0xB8,0x8F,0x69,0x01,0xB4,
+ 0x84,0xA5,0x2B,0x04,0x05,0xF0,0x07,0x53,0x94,0x9F,0xC7,0xCE,
+ 0xAC,0xED,0x4B,0x85,0xAD,0xF4,0x67,0xD9,0xEF,0xE5,0x8F,0x6C,
+ 0x8D,0xB7,0x7A,0x91,0x9E,0xE9,0xC1,0xD0,0x8C,0xFE,0xD2,0x54,
+ 0x3F,0x14,0xD6,0x59,0xA8,0x27,0x5E,0x7B,0x38,0xD2,0xF0,0x6D,
+ 0x31,0x5F,0x43,0x1A,0x8A,0xEB,0x38,0x3E,0xEE,0x02,0x94,0x1B,
+ 0x8B,0x1D,0x59,0x3E,0x5C,0x2D,0x58,0x4F,0x38,0xCA,0x57,0x9F,
+ 0x0E,0x35,0x2A,0x61,0x5D,0x68,0xE5,0xE6,0xFE,0x9C,0xCB,0xED,
+ 0x2B,0xA6,0x5C,0xFB,0x53,0x82,0xBB,0x24,0xB6,0xAF,0x8D,0x32,
+ 0x94,0xB5,0x30,0x86,0xDF,0x52,0x52,0x07,0xDE,0x24,0x1C,0x12,
+ 0x47,0x3C,0xA4,0x63,0x9F,0xDD,0x03,0xC6,0xA0,0xA1,0x4F,0x8D,
+ 0x6D,0xD2,0x97,0x3D,0x4A,0xCC,0x48,0xFF,0x00,0x68,0x48,0x02,
+ 0x14,0x77,0x00,0x4E,0xF7,0x14,0xA2,0x30,0x93,0xE2,0x40,0x38,
+ 0xFF,0x00,0x5D,0x5F,0x6E,0x2C,0xC3,0xD6,0xFA,0x21,0x2B,0xEF,
+ 0xD4,0x58,0xB8,0x46,0x4A,0xD9,0x51,0xE7,0xBA,0x5F,0x0A,0x4A,
+ 0xB1,0x9E,0xA9,0x50,0x1C,0x7A,0x11,0x58,0xDE,0xB3,0x98,0x18,
+ 0xBE,0x59,0x74,0x5C,0x47,0x12,0xEA,0x2C,0xED,0x87,0x64,0xE0,
+ 0x85,0x05,0x4B,0x74,0x70,0x33,0x8C,0xFB,0xA9,0x24,0x0F,0x42,
+ 0x9A,0x52,0xC3,0xC5,0xD9,0x2E,0x5F,0x42,0x92,0xDE,0xE4,0xBC,
+ 0x08,0x10,0xEC,0x70,0xE1,0x5D,0x23,0xDB,0xE3,0x99,0x08,0x70,
+ 0x93,0x23,0x66,0x1C,0x79,0x43,0x1B,0xCA,0x97,0x82,0xA2,0x55,
+ 0xB9,0x5E,0x35,0xA4,0xDD,0x6D,0x8C,0xEA,0x2D,0x2A,0xEB,0xFB,
+ 0x5A,0x7D,0x05,0x09,0x7E,0x38,0x52,0x46,0xD5,0x2D,0x3E,0xF2,
+ 0x73,0x90,0x70,0x0F,0x4F,0x91,0xA8,0x29,0x36,0xC1,0x33,0x4B,
+ 0xA6,0x04,0x71,0xB9,0x6C,0x20,0x29,0xBF,0x55,0x0E,0xBF,0x8F,
+ 0x3F,0x8D,0x7B,0x76,0x43,0x76,0x59,0x8F,0x22,0xC0,0xF2,0xCF,
+ 0x79,0x18,0xF7,0xD1,0xC7,0x1C,0xB4,0xA3,0xCE,0x07,0x5E,0x15,
+ 0x90,0x7D,0x0A,0x6B,0x27,0x12,0xC0,0xCF,0x0C,0xE2,0xDB,0xBB,
+ 0xD1,0xFD,0xC9,0x4A,0xCE,0xCC,0xA6,0x5A,0x6E,0xE9,0x6F,0x51,
+ 0xC0,0xB8,0xC4,0x8B,0xBA,0x63,0x4B,0x08,0xF7,0x5B,0xFB,0xD5,
+ 0xB4,0x7E,0x24,0x63,0x83,0xD3,0x90,0x0F,0x8A,0x45,0x6A,0xDA,
+ 0xEA,0xCC,0xF5,0xD2,0xCC,0xA7,0x11,0x10,0x39,0x2E,0x12,0xBD,
+ 0xA2,0x38,0x20,0x13,0xBC,0x02,0x0A,0x46,0x78,0xC9,0x49,0x20,
+ 0x1F,0x03,0x83,0xE1,0x54,0x5B,0xF5,0x9E,0x1E,0x93,0xD6,0x17,
+ 0x5D,0x65,0x39,0xD6,0xBE,0xC7,0x8A,0xD2,0xA7,0x21,0xB4,0xE3,
+ 0x25,0xFF,0x00,0x06,0x80,0x27,0x25,0x45,0xCF,0x7C,0x1E,0x9C,
+ 0xED,0xA9,0x8E,0xC0,0x75,0x6D,0xC6,0xFD,0xA6,0xA4,0xC2,0xBC,
+ 0x3E,0x1D,0xBA,0xC5,0x78,0xB8,0xE9,0xC1,0x00,0xA1,0xD2,0x56,
+ 0x9C,0x64,0x9E,0x01,0xDC,0x80,0x33,0xC0,0x40,0xF3,0xAD,0x7A,
+ 0x98,0x4B,0xC5,0x54,0x4F,0x6F,0xDF,0xDF,0x32,0xF0,0xD9,0xC5,
+ 0x95,0x6D,0x2A,0xB8,0x1A,0x9A,0xF1,0x1A,0x34,0xC8,0xD1,0x64,
+ 0xB0,0xDF,0xDE,0xA8,0xBA,0xDE,0xF1,0x80,0x0A,0xB7,0x0F,0x22,
+ 0x12,0x09,0x18,0xF2,0x15,0xEB,0xA7,0x53,0x0F,0x58,0xEB,0x69,
+ 0x17,0xB9,0x2C,0xB6,0xF3,0x45,0xD5,0x26,0x1A,0x8E,0x16,0x19,
+ 0x8E,0x83,0x8C,0xA0,0xF8,0x6E,0x50,0xCE,0x7C,0x8A,0x7C,0xAB,
+ 0xF3,0xB4,0xC8,0x0C,0xE8,0x2B,0x7D,0xF2,0xE3,0x0E,0x56,0x26,
+ 0x5F,0xE4,0x08,0xB6,0xF4,0x27,0x76,0xE6,0x03,0x84,0xAD,0xE2,
+ 0x71,0xC7,0x1B,0x49,0x4F,0x80,0x03,0x15,0xE9,0xD9,0x8A,0xE3,
+ 0x5B,0x74,0xF1,0x98,0xF2,0xC3,0x4D,0xED,0x09,0x49,0x51,0xE8,
+ 0xDA,0x78,0x1F,0x89,0xFE,0x15,0xD1,0xC0,0xE1,0x23,0x52,0x6B,
+ 0xFF,0x00,0x1D,0xDF,0x92,0xFB,0xB3,0x1A,0x5A,0xD8,0xDA,0x6D,
+ 0x12,0x9A,0x69,0xA4,0x47,0x61,0x21,0x0D,0xA0,0x61,0x29,0x1E,
+ 0x15,0x09,0xDA,0x63,0xEB,0x6D,0xCB,0x7B,0xE3,0x77,0x08,0x59,
+ 0x05,0x3D,0x72,0x08,0x3C,0x55,0x72,0xD9,0xFD,0x69,0xBD,0x8F,
+ 0x6F,0xB5,0x93,0x16,0x1A,0x0F,0xDD,0x82,0xA0,0x92,0xBF,0x5F,
+ 0x5F,0x97,0xFF,0x00,0x66,0x5A,0x5C,0xF5,0xDF,0xEC,0x6B,0xB7,
+ 0x4A,0x4F,0x77,0x79,0x84,0x4A,0xD2,0x8C,0x63,0xBE,0x03,0xE2,
+ 0x00,0x7E,0xF6,0x39,0xC7,0xA7,0xE1,0xB9,0x8F,0xE2,0x14,0x31,
+ 0x94,0x27,0x86,0xA5,0xBF,0x2E,0x8E,0xCF,0x65,0xF4,0x26,0x52,
+ 0xBA,0x27,0xE0,0x3C,0x24,0xDB,0x23,0x3E,0x12,0xA0,0x16,0xDA,
+ 0x48,0xDC,0x30,0x4F,0x15,0xFC,0xCF,0xDA,0xAB,0x8F,0xC4,0xED,
+ 0x66,0xEC,0x87,0x50,0xA6,0xD2,0xE4,0xE6,0x5C,0x41,0x57,0x01,
+ 0x49,0xEE,0x5A,0x19,0x1E,0x99,0x04,0x7D,0x0D,0x6D,0x9D,0x9E,
+ 0x6A,0x24,0x3C,0x8F,0xEA,0xF4,0xD7,0x0A,0x65,0xC5,0xCF,0x74,
+ 0x55,0xFF,0x00,0xB8,0xD7,0xEC,0x90,0x7C,0xC6,0x76,0x9F,0x97,
+ 0xA8,0xAC,0xDF,0xFA,0x4D,0x69,0xB9,0x11,0xEF,0x90,0x75,0x64,
+ 0x64,0xA9,0x4C,0x3C,0xDA,0x63,0x3E,0x40,0xE1,0xB5,0xA0,0xA9,
+ 0x48,0x27,0xFC,0xC1,0x44,0x67,0xFC,0x23,0xCE,0xB9,0x98,0x4A,
+ 0x50,0x85,0x55,0x56,0xDB,0xAF,0xAA,0xFB,0x19,0x1C,0xAF,0x12,
+ 0xC7,0xD9,0xC4,0x60,0xF2,0xD0,0xA5,0x0C,0xD6,0xD3,0x6C,0x84,
+ 0x81,0x1D,0x23,0x68,0xE9,0x58,0x77,0x65,0x3A,0x82,0xD2,0x59,
+ 0x69,0x4E,0xCC,0x69,0x95,0x60,0x6E,0x4A,0xCE,0x08,0x3F,0xC6,
+ 0xB5,0x27,0xB5,0x4A,0x66,0xB6,0x9B,0x75,0x81,0x4A,0x71,0xE5,
+ 0xF0,0xB9,0x3B,0x0E,0xD6,0x87,0x98,0xCF,0x8D,0x7A,0xDC,0x47,
+ 0x12,0xC3,0x61,0xE9,0xBA,0x92,0x9A,0xFA,0x95,0x72,0x49,0x1C,
+ 0x9D,0xA1,0x49,0x61,0xA8,0x6B,0x89,0x09,0xE4,0x99,0x3B,0xC2,
+ 0x5E,0xD9,0xD5,0xB4,0xE3,0xF2,0x3D,0x05,0x52,0xCE,0xB7,0xD3,
+ 0x76,0x1B,0x60,0xB7,0xDB,0x9E,0x91,0x2E,0xE1,0xB0,0xE6,0x34,
+ 0x36,0x0A,0xDE,0x2B,0xC1,0xC6,0xEF,0x04,0x8F,0x52,0x40,0xCF,
+ 0x88,0xA9,0x3D,0x6A,0xF5,0xB2,0xCA,0xAB,0x64,0x78,0xB9,0x76,
+ 0x64,0xB7,0xD6,0xDB,0x8B,0x53,0x84,0xF0,0x1B,0x52,0x89,0x23,
+ 0xA1,0xE4,0x01,0xF5,0xAE,0xCD,0x3B,0xA7,0xA2,0xCC,0x88,0x9B,
+ 0x94,0xC0,0x56,0xDA,0xC9,0x28,0x69,0x3D,0x2B,0xC3,0xE3,0x71,
+ 0xB3,0xC5,0xD5,0x55,0x2A,0xC5,0xF8,0x24,0xF6,0xFD,0xE7,0xB1,
+ 0x4B,0xBC,0xC6,0x6F,0x64,0x8B,0x21,0x16,0xE5,0x34,0x21,0xEF,
+ 0x9B,0x29,0xC5,0x48,0x95,0xDD,0x27,0x25,0x4F,0x2D,0x45,0x5D,
+ 0x47,0x52,0x09,0xC0,0xF9,0x0C,0x56,0x9D,0xDA,0x5F,0x7D,0x1F,
+ 0x42,0x5E,0x64,0xF7,0x78,0x31,0xA2,0x2D,0xD4,0x12,0x3E,0x15,
+ 0x20,0x6E,0x07,0xE8,0x45,0x67,0x9A,0xFF,0x00,0x5D,0x5E,0xA3,
+ 0xDE,0x64,0xE9,0xFD,0x20,0xCC,0x7B,0x2C,0x58,0x2B,0x08,0x93,
+ 0x70,0x42,0x02,0xDF,0x70,0xE0,0x28,0xB6,0xD8,0x39,0x00,0x60,
+ 0x8C,0xA8,0xE7,0xA9,0x01,0x3C,0x66,0xB4,0x5E,0xD6,0x94,0xB4,
+ 0x76,0x4F,0xA9,0x46,0xE2,0x4F,0xD9,0x4F,0xE4,0x9F,0xFF,0x00,
+ 0x19,0xAB,0x4B,0x09,0x2A,0x93,0x8C,0xE6,0xF5,0xBA,0x7E,0x57,
+ 0x32,0x43,0x4B,0xEA,0x51,0x34,0x3D,0xDD,0xEB,0xB5,0xD2,0x35,
+ 0x9C,0x3B,0x96,0x56,0xEF,0x78,0xA4,0x67,0x85,0x1C,0x75,0x3E,
+ 0x78,0x03,0x3F,0x8D,0x5A,0x7B,0x55,0xB8,0x4E,0x46,0x9B,0x5B,
+ 0x31,0x9C,0x72,0x22,0x1F,0x75,0xB8,0xE9,0x5E,0xDE,0x52,0x85,
+ 0x28,0x05,0x11,0xD3,0x9C,0x64,0xE7,0xCE,0xB1,0xAE,0xCC,0x6E,
+ 0x28,0x89,0xAF,0x6D,0x82,0x69,0x53,0x48,0x5B,0x8A,0x6C,0x6E,
+ 0x04,0x7B,0xCA,0x42,0x92,0x91,0xF5,0x24,0x0F,0xAD,0x6C,0x9D,
+ 0xA1,0x41,0x95,0x78,0xD3,0x2F,0x44,0x86,0x92,0xE3,0xED,0xAD,
+ 0x0F,0xB5,0xE2,0x55,0xB1,0x41,0x45,0x23,0xD4,0x80,0x40,0xF5,
+ 0xC5,0x59,0xD1,0x51,0x9A,0x93,0x31,0x5E,0xC8,0xA8,0xB3,0x09,
+ 0x30,0xF4,0xD3,0x52,0xAC,0xCD,0xB2,0xD8,0x61,0xC2,0xA4,0xB4,
+ 0x11,0xF0,0xED,0xFD,0xA3,0xE7,0xD0,0xE7,0xC7,0x15,0xC5,0x79,
+ 0xD6,0x77,0x3B,0xEB,0x2C,0x5A,0xD9,0xB1,0xBD,0x1D,0x65,0xF6,
+ 0x96,0xB7,0x8C,0x84,0xA9,0x2A,0xDA,0x42,0xB0,0x90,0x93,0x93,
+ 0xC8,0xC7,0x20,0x75,0xCF,0x1D,0x0C,0x46,0x98,0xD5,0x6C,0xC4,
+ 0x6C,0xC3,0x98,0x1E,0x0A,0x43,0x84,0x8D,0xA9,0xCF,0x07,0xC3,
+ 0xF1,0xCD,0x58,0xE3,0x46,0x96,0x5A,0x73,0x52,0xDB,0xA0,0x35,
+ 0x1E,0x13,0x6A,0x01,0x7B,0xCE,0x0A,0xF3,0xFA,0x7D,0x3E,0x75,
+ 0xB9,0x5B,0x0F,0x84,0x8C,0x29,0xCD,0xCB,0x57,0x6B,0xEE,0xDD,
+ 0xF9,0xB5,0xF9,0x26,0xE8,0x90,0xEC,0xA3,0xBB,0x5E,0xAF,0x94,
+ 0xA0,0xEC,0x92,0xA3,0x15,0x64,0xA1,0x52,0x9C,0x53,0x40,0xEF,
+ 0x4F,0x29,0x6C,0xAB,0x6A,0x4E,0x54,0x79,0x00,0x1E,0x6B,0x8B,
+ 0xFA,0x41,0xAB,0x6D,0xF6,0xCA,0xD3,0xB2,0x66,0xB4,0xD2,0xA2,
+ 0x48,0x56,0xD8,0xD3,0x5D,0x63,0x71,0x0B,0x68,0x0D,0xDD,0xDA,
+ 0x93,0x9C,0x05,0x1E,0xBE,0x75,0xD9,0xD9,0x33,0x49,0x6F,0x58,
+ 0xBE,0xB5,0x1D,0xA9,0x5C,0x57,0x31,0x9F,0xF3,0xA0,0xD4,0x3F,
+ 0xF4,0x9A,0xCA,0x6F,0xFA,0x7C,0x03,0xFF,0x00,0xC3,0x95,0xFF,
+ 0x00,0xEE,0xCD,0x69,0xD2,0xC3,0x42,0x55,0x15,0x45,0xE2,0x5E,
+ 0x32,0x79,0x0A,0xA4,0x66,0x63,0x47,0x6D,0x86,0xDF,0x68,0xBA,
+ 0x5C,0x50,0x7D,0x2A,0x79,0xD5,0x3A,0xB0,0xA1,0x80,0x15,0xBD,
+ 0x44,0xAB,0x38,0x48,0xF1,0xE8,0x05,0x6D,0x3D,0xA2,0xA8,0xB1,
+ 0xA1,0xAF,0x20,0x24,0xE4,0x41,0x70,0xFA,0x00,0x12,0x6B,0x08,
+ 0x66,0x43,0x73,0x4C,0x52,0x82,0x46,0xC6,0xB6,0x28,0x1F,0x02,
+ 0x2B,0x6F,0xED,0x32,0x42,0xBF,0xE9,0xFD,0xF9,0xA2,0x16,0xAF,
+ 0xEC,0x0F,0x61,0x5E,0x1F,0x09,0xE2,0xB6,0x31,0x14,0xA0,0xAB,
+ 0x28,0xC5,0xDD,0x5D,0x18,0xEF,0x62,0x82,0xF4,0x9B,0x7D,0xCA,
+ 0xD6,0xA5,0x4E,0x8F,0x1E,0x52,0x50,0xFA,0x51,0xDD,0xBC,0xD8,
+ 0x5A,0x79,0x04,0xE7,0x9F,0x2D,0xBF,0x9D,0x69,0x7A,0x1A,0x3B,
+ 0x68,0xD2,0xD1,0xE4,0xB4,0x4B,0x2C,0x36,0x85,0x04,0x84,0x8C,
+ 0xE3,0x0A,0x23,0xF0,0xC6,0x2B,0x00,0x89,0x3B,0x11,0x97,0x1B,
+ 0x79,0xEF,0x15,0x21,0x2A,0x09,0xF4,0x09,0x50,0xFE,0x22,0xBF,
+ 0xA1,0x3B,0x3D,0x6A,0x4B,0x7A,0x0E,0x08,0x7D,0x0B,0x42,0xB6,
+ 0xBA,0x76,0xA8,0x60,0xE3,0x7A,0xB0,0x7F,0x0A,0xD3,0xC5,0xD1,
+ 0x51,0x8C,0x72,0xF9,0x96,0x86,0xE6,0x65,0xA4,0xAF,0x82,0x3D,
+ 0xEA,0x1B,0x3B,0xC2,0x12,0x6E,0x05,0xB3,0xBB,0xF7,0x54,0xF1,
+ 0x1F,0xA1,0xAD,0x3F,0x53,0x69,0x34,0xDF,0x2F,0x31,0xEF,0x21,
+ 0x60,0x4A,0x8E,0xCA,0xDA,0x68,0xB8,0x9D,0xC9,0x1B,0x88,0x24,
+ 0xA4,0xFE,0xC9,0xF7,0x71,0xEA,0x31,0x5F,0xCE,0xF1,0xD8,0x72,
+ 0xE9,0xA8,0x45,0xAC,0x3C,0x96,0x97,0x2E,0x7A,0xD8,0x42,0xD4,
+ 0x70,0x02,0x94,0xE9,0x09,0xE7,0xC3,0x92,0x2B,0x4A,0x57,0x68,
+ 0xBA,0xCB,0x43,0x4D,0x5D,0x83,0x50,0xDA,0x9A,0xBE,0x26,0x30,
+ 0x18,0x95,0x1D,0xE0,0xD3,0xCB,0x49,0x00,0x83,0xB5,0x58,0x42,
+ 0xFA,0x9F,0x7B,0x72,0x79,0x04,0x63,0x83,0x59,0x2B,0x61,0x33,
+ 0x4D,0xCA,0x2E,0xCF,0x52,0x62,0xD5,0x9A,0x67,0x74,0xD8,0x5A,
+ 0x83,0x47,0x5C,0x57,0x7B,0xFB,0x0D,0x72,0xD9,0x5A,0x3F,0xB5,
+ 0x22,0x3A,0x93,0xEF,0x81,0xF0,0x92,0x49,0x00,0x28,0x74,0xE4,
+ 0xF4,0x35,0x56,0x87,0x7E,0x5A,0xBB,0xE9,0x1E,0xC6,0xB8,0x2D,
+ 0xAE,0x43,0xAE,0x21,0x95,0xB8,0x95,0x29,0x21,0x4A,0x2A,0x39,
+ 0x29,0x24,0x67,0x2A,0x3D,0x0D,0x68,0x5A,0x2F,0xB4,0x1B,0x06,
+ 0xB1,0x94,0xEA,0x23,0xBB,0x3A,0x1D,0xC9,0xA6,0xC3,0x8E,0x43,
+ 0x96,0xDE,0xC5,0x25,0x3D,0x38,0x23,0x29,0x58,0x1E,0x25,0x24,
+ 0x81,0x91,0x9E,0xA2,0xB2,0xFE,0xD2,0x11,0x1A,0xD7,0xAE,0xA4,
+ 0xC0,0x8A,0x94,0xA5,0xA7,0x1A,0x44,0x84,0xB6,0x94,0xE1,0x29,
+ 0x0B,0xC8,0xDA,0x07,0xCD,0x27,0xF1,0x02,0xAE,0xE8,0xBC,0xBD,
+ 0xDB,0x5B,0x7B,0xFD,0x8A,0x33,0x74,0x4B,0xE1,0xF4,0xF7,0x8D,
+ 0x24,0xA9,0x27,0x9C,0xE6,0xBF,0x9C,0xB5,0xFC,0xC5,0x23,0xB5,
+ 0x4B,0xA3,0x5B,0xBF,0xF9,0xAD,0xFF,0x00,0xFC,0x9B,0xAD,0xA3,
+ 0xB1,0xBB,0xDD,0xBE,0xF5,0x64,0x16,0xC9,0x2F,0x14,0x5C,0xA0,
+ 0x04,0xB6,0x50,0x9C,0x27,0x73,0x60,0x7B,0x8B,0x03,0xC4,0x60,
+ 0x60,0xFA,0x83,0xE9,0x59,0xC7,0xF4,0x92,0xD3,0xCF,0x5B,0x35,
+ 0x64,0x3D,0x4D,0x19,0xBF,0xEC,0xB3,0x02,0x5B,0x71,0x41,0x38,
+ 0xC3,0xE8,0xF1,0x51,0xF3,0x52,0x40,0xC7,0xF9,0x0D,0x5F,0x05,
+ 0x15,0x4A,0xB7,0xF2,0x2F,0x66,0x95,0xF9,0x17,0x3E,0xCD,0xE3,
+ 0x07,0x8A,0x14,0xA1,0x9A,0xD9,0xAD,0xD0,0x90,0x18,0x48,0xDB,
+ 0xE1,0x58,0x97,0x65,0x9A,0x82,0xD1,0xDC,0x36,0xA7,0x26,0xB4,
+ 0xD1,0xC0,0xCA,0x56,0x70,0x45,0x69,0x6F,0xEA,0x55,0x5D,0x00,
+ 0xB5,0xE9,0xF5,0x2C,0xA9,0x7C,0x3D,0x2B,0x69,0x01,0xB4,0xFF,
+ 0x00,0x87,0xD7,0xD7,0xFF,0x00,0xB1,0xEB,0x71,0x5C,0x4B,0x0D,
+ 0x86,0xA6,0xE7,0x29,0x27,0xE0,0xB7,0x64,0xB9,0x24,0x70,0xF6,
+ 0x83,0x2A,0x31,0x67,0xEC,0xEB,0x7B,0xC9,0x5C,0x97,0x1C,0xD8,
+ 0xEE,0xC3,0xCA,0x47,0x96,0x7C,0xC9,0x38,0xFC,0x6B,0xE6,0x1A,
+ 0x11,0x69,0xB2,0xB6,0xC4,0x76,0x14,0x90,0x1A,0xEF,0x5C,0xDC,
+ 0x9D,0xA4,0xF1,0x91,0x9F,0xE7,0xAE,0x6A,0xBF,0xAF,0x97,0x6F,
+ 0xB2,0x4C,0xB6,0xDB,0x61,0xC7,0x52,0xA5,0xCA,0x4B,0x8B,0x53,
+ 0xAA,0x59,0x20,0x25,0x03,0x93,0xFE,0xA2,0x91,0xF5,0xA9,0x88,
+ 0x33,0x93,0x73,0xB3,0x36,0x02,0xCA,0x83,0xCC,0x63,0x7A,0x4E,
+ 0x52,0x92,0x53,0xD3,0xD7,0x15,0xE2,0xF1,0x58,0x8A,0xB8,0xDA,
+ 0xBD,0xE5,0x55,0x6E,0x8B,0xA1,0x8D,0xC9,0xA7,0xA9,0x99,0x69,
+ 0x85,0xB1,0x30,0x4F,0x9E,0x49,0x12,0x24,0xA1,0xD9,0x4A,0x71,
+ 0x43,0xDE,0x52,0x73,0xEE,0x27,0x9F,0x0D,0xBB,0x45,0x5B,0x7B,
+ 0x25,0x92,0x16,0xDC,0xE0,0xD1,0x0D,0x33,0x19,0x41,0xC4,0xA5,
+ 0xB4,0xF2,0x37,0xE7,0x23,0x1E,0x59,0x04,0xFD,0x6B,0x27,0xB1,
+ 0xDC,0x0C,0x27,0xA4,0xC4,0x5B,0x9B,0x8B,0x10,0xDC,0x61,0x44,
+ 0x70,0x0A,0x91,0x80,0x71,0x9F,0x54,0x9A,0xD2,0xFB,0x08,0x69,
+ 0xFF,0x00,0x66,0xBA,0x49,0x28,0x57,0x76,0xB0,0xC8,0x4A,0xBC,
+ 0x09,0x1B,0xF3,0x57,0xC5,0xD1,0x8A,0xA4,0xA7,0xCD,0xB7,0xF0,
+ 0x7A,0x13,0x1D,0xD1,0xF7,0xAD,0xE5,0x9B,0x26,0xA8,0x0D,0xA1,
+ 0xD7,0x23,0xC4,0x9E,0xC8,0x75,0x00,0x7B,0xB8,0x4E,0x70,0xB4,
+ 0xE3,0xC8,0x1C,0x1F,0xFB,0xB1,0xE1,0x5A,0x0C,0xA2,0xE4,0x1B,
+ 0x21,0xC2,0x42,0x5B,0x8E,0xC6,0xE5,0x10,0x32,0x32,0x06,0x7F,
+ 0x01,0xFC,0x2B,0x11,0xFE,0x90,0xB7,0xB4,0xBB,0xAC,0xE0,0xC3,
+ 0x69,0x61,0x6B,0xB7,0xDB,0xDC,0x2E,0x94,0xF3,0x82,0xEA,0xD3,
+ 0xB4,0x7C,0xFE,0xE9,0x55,0xB9,0x34,0xFB,0x17,0xCD,0x32,0x17,
+ 0x15,0xC2,0xB8,0xD3,0xE2,0xE5,0xB5,0x0E,0x32,0x95,0xA7,0x83,
+ 0xF8,0x11,0x58,0x71,0x18,0x2C,0xF1,0x52,0x7A,0x19,0x21,0xA3,
+ 0x66,0x17,0xA6,0xD9,0x8F,0x32,0x14,0xDB,0xC4,0xA4,0x30,0xA9,
+ 0xF2,0x19,0x32,0xA4,0x3A,0xB6,0xC2,0x94,0xA0,0xAE,0x43,0x79,
+ 0x3C,0x84,0x84,0xF1,0xF4,0xAB,0xAF,0x64,0x93,0x50,0xBB,0x6C,
+ 0xA8,0x2C,0xE5,0x2C,0xC6,0x74,0x29,0x28,0xC7,0xBA,0x84,0x28,
+ 0x64,0x25,0x3E,0x99,0x0A,0xE2,0xB2,0x1B,0x7D,0xC2,0x55,0x95,
+ 0x53,0x6C,0xF7,0x34,0x2D,0x99,0x29,0x60,0xC6,0x71,0x3D,0x76,
+ 0xB8,0x91,0x8C,0x7C,0xB3,0x9E,0x7E,0x55,0xA4,0xF6,0x22,0xE1,
+ 0x4B,0x37,0x3D,0xC9,0x25,0x2B,0xEE,0x46,0x47,0x87,0xC7,0x5B,
+ 0x38,0x9A,0x30,0x54,0xD5,0xB7,0x7B,0xFB,0xE9,0xF0,0x31,0x5E,
+ 0xC5,0x1F,0xB6,0x79,0x05,0x3D,0xA2,0x4A,0x28,0xCA,0x70,0xC3,
+ 0x24,0x7A,0x7C,0x55,0xAE,0xF6,0x53,0x69,0x4D,0xB7,0x43,0xC6,
+ 0x98,0xE2,0xBB,0x87,0x64,0x20,0xC8,0x71,0xC0,0x41,0xCA,0x33,
+ 0xEE,0x8C,0x8F,0x0C,0x0D,0xD8,0xF5,0xF4,0xAC,0x7F,0xB6,0xC6,
+ 0xD3,0xFF,0x00,0x50,0x65,0x6D,0x58,0x56,0x23,0x33,0xCF,0xFA,
+ 0xAB,0x6F,0xEC,0xC6,0x6B,0x77,0x4E,0xCE,0xEC,0xCE,0x35,0x92,
+ 0x84,0xC4,0x4B,0x0E,0x24,0x8E,0x77,0x20,0x6C,0x56,0x7E,0xA9,
+ 0x35,0x87,0x17,0x17,0xDC,0x45,0x2F,0x0F,0x91,0x78,0x6A,0xCC,
+ 0xDD,0x37,0x2E,0xCF,0x7E,0xD2,0xB9,0xDC,0xE4,0xF6,0x9B,0xA5,
+ 0x9E,0x99,0x70,0x7D,0x65,0xC5,0xBC,0xF8,0xDC,0x1A,0x04,0x84,
+ 0x35,0x8F,0xDD,0x09,0xC7,0xA1,0x39,0x3E,0x35,0x7A,0xD2,0x57,
+ 0xCD,0x25,0x1F,0x4A,0x46,0x89,0x1F,0x55,0xD9,0x2E,0x51,0x42,
+ 0x54,0xD8,0x53,0x32,0x52,0xA4,0x6C,0xC9,0x01,0x3C,0x9F,0x01,
+ 0xC6,0x3D,0x2B,0x16,0xD5,0x71,0x9E,0xB0,0x5F,0x5E,0xB3,0xCB,
+ 0x0A,0x61,0x96,0x16,0x50,0xCA,0x90,0x9D,0xC0,0xB5,0x9F,0xBB,
+ 0x23,0x27,0x9F,0x77,0x19,0xE7,0xA8,0x23,0xA8,0xA8,0xF4,0x5A,
+ 0x2D,0xF7,0x37,0xC1,0x6A,0x1A,0x27,0xBE,0x7C,0x57,0x11,0x25,
+ 0x5F,0xA9,0x35,0x92,0xB6,0x12,0x9D,0x58,0x39,0x49,0xB5,0xEA,
+ 0xBE,0x56,0x41,0x4F,0x2F,0x23,0x5E,0xEC,0xFF,0x00,0x54,0x16,
+ 0x35,0x54,0x88,0x4C,0x4A,0x44,0x98,0xFD,0xF3,0x8C,0xAD,0x4D,
+ 0x2B,0x72,0x48,0x49,0x3B,0x15,0x9F,0x3C,0x6D,0xC9,0xF3,0x26,
+ 0xB6,0xCB,0x5C,0xD0,0xFA,0x01,0x06,0xBF,0x9A,0xB4,0x93,0xF0,
+ 0xEC,0xF6,0xE4,0xB7,0x02,0x2E,0x26,0xA9,0x5B,0x7B,0x90,0x9C,
+ 0x64,0xF9,0xF1,0xC0,0x4F,0xF3,0xEB,0x5A,0x25,0x9D,0xDD,0x63,
+ 0x66,0xDB,0x70,0x98,0xE2,0x5C,0x6C,0x61,0x4E,0x47,0x52,0x87,
+ 0x09,0xF5,0x4E,0x32,0x9A,0xED,0x61,0xB8,0x86,0x1F,0x87,0xD2,
+ 0x8D,0x39,0x4B,0x35,0xF5,0xD3,0x92,0x64,0x29,0x24,0x8B,0x13,
+ 0xF7,0x23,0x74,0xD4,0xEF,0xBC,0xE2,0xB7,0x31,0x0C,0x94,0xB2,
+ 0xDE,0x78,0x18,0xE3,0x77,0xD7,0x1F,0x98,0xF2,0xAA,0x77,0x6B,
+ 0x3D,0xE4,0xAB,0x6C,0x46,0x66,0x2D,0x26,0x24,0xE9,0x1D,0xD3,
+ 0xC8,0x39,0x1B,0xD0,0x12,0x54,0x51,0xC1,0xE8,0x40,0x20,0x8F,
+ 0x22,0x6B,0xAF,0x4E,0x4F,0x8B,0xFD,0x67,0x43,0x0E,0xB8,0xB6,
+ 0xD1,0x28,0xAD,0x0D,0xA8,0x80,0x39,0xF8,0x80,0x3E,0x44,0x84,
+ 0x9A,0xE0,0xFE,0x90,0x8B,0x71,0x9B,0x3D,0x95,0xF6,0x82,0x8B,
+ 0x6D,0xDC,0x14,0x09,0x03,0x18,0xCB,0x0E,0xF5,0xAF,0x36,0x94,
+ 0xAB,0x56,0x75,0xA5,0xAB,0x6D,0xBB,0xFC,0x88,0x8D,0xDA,0x6C,
+ 0xAD,0x5F,0x15,0x1E,0x3D,0xAE,0xDA,0xFB,0x41,0x09,0x58,0xCB,
+ 0xB1,0xC2,0x10,0x91,0xDC,0xA9,0x0A,0x1B,0x76,0xF9,0x78,0x7E,
+ 0x95,0xAA,0xCA,0x69,0x77,0xCD,0x2E,0x97,0x9A,0x0A,0x48,0x7A,
+ 0x30,0x79,0x95,0x94,0xE4,0xA4,0x94,0xE5,0x27,0x1F,0xA8,0xF2,
+ 0x26,0xB0,0x27,0x27,0x89,0x90,0x6D,0x2D,0x15,0xE3,0x1B,0xC2,
+ 0x8F,0x5C,0x7B,0xC0,0x7F,0x0A,0xFE,0x87,0x86,0xB1,0x61,0xD1,
+ 0x51,0xC4,0xB7,0xDB,0x6D,0x10,0xE0,0x23,0xBD,0x71,0x47,0x08,
+ 0x4E,0xD6,0xC6,0x49,0xCF,0x87,0x15,0x9F,0x19,0x83,0x8E,0x64,
+ 0xA1,0xC9,0x27,0xEE,0x95,0xFD,0xD9,0x7A,0x7C,0xD1,0x95,0x69,
+ 0x8D,0x53,0x76,0x4D,0xCA,0x12,0x21,0x4E,0x54,0x46,0x1F,0x75,
+ 0xB1,0x22,0x3B,0x8C,0xEF,0x51,0x04,0xF2,0x3A,0x8D,0xAA,0x19,
+ 0xF5,0xE9,0xD2,0xAE,0x3D,0xA5,0x5E,0xAE,0x76,0x7D,0x2D,0x2E,
+ 0x74,0x2D,0xEC,0x48,0x52,0x92,0xCB,0x4B,0x3C,0x14,0x29,0x6A,
+ 0xDA,0x15,0xCF,0x91,0x22,0xB0,0x6D,0x19,0x74,0x79,0xFB,0xCD,
+ 0xB1,0xF7,0xB0,0x95,0xCA,0x94,0x87,0x94,0x90,0x4F,0xBB,0xBD,
+ 0x7B,0xB1,0xF4,0xCE,0x2B,0x60,0xED,0xD2,0x42,0xC6,0x82,0x90,
+ 0x90,0x14,0xAC,0x4B,0x8E,0x42,0xBC,0xBE,0xF9,0x35,0x67,0x42,
+ 0x31,0x9A,0x8B,0x5A,0x26,0x63,0xBD,0x8A,0x25,0xDB,0xB4,0x2D,
+ 0x4D,0x2A,0xD6,0xE5,0x9D,0x5F,0x66,0xA5,0x2E,0x23,0xBB,0x5C,
+ 0xD4,0xA9,0x61,0xD2,0x3C,0x48,0x46,0x30,0x0E,0x3F,0xC5,0xD7,
+ 0xD3,0x8A,0xD3,0x7B,0x21,0x78,0x4C,0xD2,0xEE,0xBA,0xD2,0xD6,
+ 0xD1,0x6D,0xFE,0xEF,0x70,0x3D,0x42,0x52,0x93,0x8F,0xCC,0x7E,
+ 0x15,0x8A,0x69,0x58,0xAD,0xDC,0x22,0x48,0x43,0xA9,0x49,0x2A,
+ 0x71,0x49,0x2B,0xC0,0xDC,0x91,0x81,0xE3,0x57,0x4E,0xCA,0xEE,
+ 0x97,0x7D,0x3F,0x74,0x76,0x04,0x78,0xB2,0x6E,0xB6,0xD9,0x2E,
+ 0x8D,0xDE,0xCC,0x9D,0xC5,0xA5,0xF0,0x37,0x81,0xD4,0x82,0x00,
+ 0xC8,0x19,0x3E,0xEF,0x00,0xF3,0x59,0xB1,0xF8,0x1C,0xB4,0x23,
+ 0x3B,0xAD,0x75,0xE8,0x59,0x68,0xD5,0xCE,0xDE,0xD0,0xA6,0x86,
+ 0xFB,0x49,0x95,0x26,0x48,0xCA,0xE3,0x42,0x69,0xB8,0xFB,0xBA,
+ 0x20,0x2C,0xA8,0xAC,0x81,0xE0,0x55,0x84,0x82,0x7C,0x42,0x45,
+ 0x5B,0xFB,0x23,0x75,0x52,0x74,0xDC,0x95,0x33,0x92,0xD3,0x73,
+ 0x16,0x94,0xA4,0x74,0x46,0x52,0x95,0x10,0x3E,0xAA,0x27,0xEB,
+ 0x55,0xCE,0xD4,0xF4,0xD9,0xD4,0x1A,0x93,0xDB,0x2D,0x37,0x28,
+ 0x42,0x7A,0x23,0xA2,0x3C,0x88,0x8E,0xBE,0x86,0xD4,0x76,0xA9,
+ 0x58,0x29,0x24,0x80,0x4E,0x16,0x72,0x09,0x1F,0x08,0xC5,0x4B,
+ 0xC4,0xBC,0xE9,0xAE,0xCA,0x74,0x6A,0x62,0xDD,0x6F,0x51,0x1D,
+ 0x9E,0xFB,0x8A,0x74,0xB4,0xC2,0xFB,0xC5,0xBC,0xE6,0x12,0x9D,
+ 0xAD,0xA4,0x72,0xAE,0x02,0x73,0x81,0xE2,0x4F,0x4A,0xD5,0xAF,
+ 0x85,0x75,0xA3,0x64,0xB5,0xB2,0x2F,0x1B,0xE6,0x6C,0x86,0xED,
+ 0x3B,0x59,0x6A,0x4B,0x1E,0xAB,0x99,0x66,0x8C,0x6D,0xD2,0x1A,
+ 0x72,0x23,0x6E,0x36,0x1F,0xDE,0x85,0x35,0xBF,0x7A,0x73,0x91,
+ 0x9D,0xFC,0xA4,0xF1,0xC7,0xCF,0xCA,0x7B,0xB2,0x67,0x17,0x6D,
+ 0x80,0xC9,0x90,0xEE,0x5D,0x2C,0xA1,0xA0,0x9F,0x24,0x80,0x39,
+ 0x3E,0xA7,0x1D,0x2B,0x17,0x54,0x8B,0xBE,0xA9,0xD4,0xF2,0xF5,
+ 0x45,0xCD,0xA5,0xB1,0xED,0x2E,0x24,0xB6,0xC9,0x39,0xEE,0xDB,
+ 0x40,0xC2,0x11,0xF3,0xEA,0x4F,0xAA,0x88,0xAD,0x4B,0x43,0xA5,
+ 0xF7,0x5C,0x49,0x39,0xAF,0x49,0xC2,0xB8,0x6C,0x60,0xA3,0x36,
+ 0xBF,0xAE,0xDE,0xDA,0xB2,0x16,0xAE,0xEC,0xDC,0x2D,0xD2,0x7B,
+ 0xE4,0x03,0x9A,0x90,0xA8,0x5B,0x13,0x4A,0x4B,0x29,0xCF,0x95,
+ 0x4D,0x0E,0x95,0xE8,0x0B,0x0A,0x52,0x94,0x02,0x94,0xA5,0x00,
+ 0xA5,0x29,0x40,0x50,0x3B,0x63,0xD3,0xA6,0xED,0x68,0x12,0xD9,
+ 0x60,0xB8,0xE3,0x49,0x28,0x74,0x24,0x72,0x5B,0x3E,0x3F,0x43,
+ 0xFA,0x9A,0xCC,0x2F,0x5D,0xA9,0x7D,0x95,0xA1,0xDE,0xB7,0xB4,
+ 0xF2,0x9C,0xD4,0x61,0xAE,0xE5,0x96,0x54,0x92,0xAD,0xCB,0x3E,
+ 0xE8,0x59,0xE8,0x36,0xF4,0x51,0xF4,0xCE,0x39,0xAF,0xE8,0xC7,
+ 0x12,0x14,0x82,0x08,0xCD,0x66,0xBA,0x9F,0xB3,0xDB,0x4C,0x9B,
+ 0xA2,0xAE,0x01,0x0A,0x00,0x9D,0xC5,0x81,0x8D,0x85,0x5E,0x7F,
+ 0xF1,0x5C,0x4C,0x67,0x0C,0x94,0xEB,0x77,0xB4,0xF9,0xEE,0xBE,
+ 0xBF,0x74,0x51,0xA6,0x9D,0xD1,0xFC,0xBD,0x0E,0xCB,0x70,0x83,
+ 0x66,0x6A,0x4B,0x45,0xD1,0xDD,0x90,0x43,0x99,0x21,0x79,0x1C,
+ 0xF7,0xB9,0xEB,0xF1,0x73,0x9F,0xAD,0x5E,0xBB,0x41,0xED,0x12,
+ 0x3D,0xEB,0xB3,0xF6,0xAC,0xD0,0x5C,0xC5,0xD2,0x7A,0x52,0xCC,
+ 0xC6,0x92,0x31,0xDC,0xA3,0x1F,0x79,0xC1,0xF0,0x20,0x29,0x23,
+ 0xE6,0x0D,0x69,0x2E,0x69,0x6C,0xC8,0x3F,0x76,0x36,0xF4,0xC6,
+ 0x38,0xAE,0x68,0xFD,0x9A,0xDB,0xD8,0x98,0xA9,0xA9,0x6D,0x47,
+ 0xC5,0x0D,0x1F,0x85,0x07,0xCC,0x52,0xB7,0x0B,0x79,0xA2,0xE1,
+ 0xAF,0x5B,0xF5,0xEB,0xF8,0x21,0xC1,0xF2,0x33,0xAE,0xCD,0x20,
+ 0xBF,0x02,0x3A,0x7B,0xC4,0x14,0x38,0xE9,0xDC,0x41,0x18,0x20,
+ 0x78,0x0F,0xE7,0xCE,0xB6,0xC8,0x36,0x84,0xDD,0x6C,0x8F,0x43,
+ 0x70,0x0F,0xBD,0x6F,0x09,0x27,0xF6,0x55,0xE0,0x7E,0x87,0x15,
+ 0x13,0x03,0x4C,0x16,0xE5,0x05,0x6C,0xF1,0xF2,0xAD,0x0E,0xC3,
+ 0x07,0xB8,0x64,0x02,0x3C,0x2B,0xAB,0x1A,0x10,0x54,0xBB,0xAE,
+ 0x56,0xB1,0x7B,0x69,0x63,0x13,0xB7,0xDD,0xE2,0xE8,0xE9,0x53,
+ 0xA0,0xEA,0x12,0xB8,0xAC,0x28,0xEF,0x49,0x5A,0x7D,0xD4,0xAF,
+ 0xA1,0x1E,0x7C,0xF0,0x47,0x87,0x5A,0xCB,0xEE,0xEB,0xB8,0x6A,
+ 0xFD,0x5D,0x3A,0xF9,0xB5,0x45,0xA2,0x8E,0xE2,0x31,0x50,0xF8,
+ 0x59,0x46,0xE2,0x81,0x92,0x33,0xEF,0x29,0x4A,0x57,0x3D,0x01,
+ 0x1E,0x55,0xFD,0x59,0xAE,0x74,0x84,0x0D,0x40,0xCA,0x14,0xF0,
+ 0x53,0x4F,0x23,0x80,0xEB,0x78,0xDC,0x47,0x91,0xF3,0xAA,0x44,
+ 0xCD,0x1A,0xC4,0x44,0x26,0x3C,0x56,0x76,0xB6,0x9F,0xC4,0xFA,
+ 0x9A,0xE2,0xE1,0xB8,0x44,0xA9,0xD4,0x6A,0x4F,0xF8,0xF5,0xEB,
+ 0xE1,0x6F,0x99,0x8E,0x30,0x6B,0x4E,0x46,0x6F,0xD9,0xB6,0xBC,
+ 0x8F,0xA5,0xEC,0x13,0xAC,0xB7,0xD9,0x62,0x22,0x19,0x70,0xBB,
+ 0x0F,0x7A,0x0A,0x8F,0xBD,0x92,0xA4,0x00,0x07,0x82,0x86,0x7A,
+ 0xE4,0xEF,0xF4,0xAA,0x7E,0x8C,0x66,0x7D,0xCA,0xFE,0xF5,0xFA,
+ 0x6B,0x6B,0x4A,0xE4,0x3A,0xA7,0xC8,0x24,0x90,0x95,0x2B,0xE1,
+ 0x46,0x4F,0x82,0x53,0x81,0xFF,0x00,0x68,0xAD,0xAE,0x5F,0x67,
+ 0x70,0xEE,0x6A,0x6D,0xD7,0x92,0xB6,0xD6,0x9F,0x88,0xA3,0x8D,
+ 0xC3,0xC8,0xD7,0x57,0xF5,0x41,0xB6,0x0A,0x1B,0x65,0x90,0x84,
+ 0x23,0x80,0x00,0xAD,0x9C,0x37,0x0E,0x74,0xEA,0xB7,0x2D,0xBE,
+ 0x65,0x94,0x5D,0xF5,0x3A,0x74,0x53,0x6B,0x75,0x09,0xDC,0x2A,
+ 0x17,0x59,0x5B,0xE4,0xE9,0x3D,0x4C,0xCD,0xF6,0x3B,0x4E,0x08,
+ 0x65,0x65,0x47,0xBB,0xC9,0x05,0x0A,0x1E,0xFA,0x70,0x3A,0x91,
+ 0xF1,0x01,0xE8,0x2B,0x43,0xD2,0xD6,0x9F,0x66,0x4A,0x72,0x9C,
+ 0x55,0x8A,0xEB,0x6B,0x8B,0x71,0xB6,0xB9,0x0E,0x5B,0x21,0xC6,
+ 0x5C,0x4E,0x08,0x3F,0xA8,0xF2,0x35,0xB3,0x8F,0xC1,0xAC,0x55,
+ 0x3B,0x27,0x66,0xB5,0x5F,0xBE,0x24,0xCA,0x37,0x3F,0x97,0xBB,
+ 0x61,0xD5,0xD1,0xB5,0x6C,0x88,0x56,0x2D,0x38,0xB3,0x26,0x23,
+ 0x6B,0xEF,0xA5,0xB8,0x84,0x90,0x16,0xB0,0x70,0x86,0xFD,0x79,
+ 0x05,0x47,0xCB,0x68,0xF3,0xA8,0xBD,0x1B,0x72,0x95,0xA2,0x35,
+ 0x9C,0x59,0xF2,0x4A,0x93,0x11,0xC4,0x77,0x12,0x56,0x06,0x41,
+ 0x6D,0x58,0xF7,0xBF,0xED,0x50,0x04,0xF8,0xE3,0x3E,0x75,0xB5,
+ 0xC8,0xD0,0x10,0xAD,0xBD,0xEA,0xD8,0xDE,0xF3,0xAB,0xE3,0xBC,
+ 0x70,0x0C,0x81,0xE4,0x31,0x51,0xCE,0x68,0xA6,0x67,0xB0,0xB8,
+ 0xD2,0x5A,0x25,0x2A,0xE8,0x40,0xE5,0x27,0xCC,0x57,0x3E,0x9F,
+ 0x0A,0x7D,0xC5,0x9E,0x92,0xE9,0xF9,0xF1,0x2A,0xA2,0xF7,0x32,
+ 0x2E,0xD4,0xF5,0x12,0xB5,0xF6,0xB8,0x8B,0xF6,0x43,0xEA,0x95,
+ 0x6C,0x80,0xCE,0xC6,0x16,0x10,0x40,0x53,0x8B,0xC1,0x5A,0xB3,
+ 0xE2,0x02,0x42,0x40,0xF2,0x25,0x42,0xAD,0x28,0xB6,0xCB,0x95,
+ 0x64,0x6A,0x3C,0x34,0x29,0x5E,0xCE,0xA0,0xAE,0xEC,0x75,0x52,
+ 0x40,0x23,0x8F,0x33,0x57,0x58,0x7A,0x02,0x2D,0xB2,0x31,0x6D,
+ 0x84,0x29,0x6B,0x51,0xCA,0xDC,0x50,0xF7,0x8F,0x90,0xF9,0x54,
+ 0xEE,0x9C,0xD3,0xE6,0x3B,0x80,0xEC,0xC5,0x6D,0xD0,0xC0,0x25,
+ 0x45,0xC2,0x7C,0xD5,0xBC,0x8B,0x65,0xBA,0xD4,0xAB,0xE9,0x9E,
+ 0xD1,0xB4,0xFD,0x9E,0xD8,0xDB,0x1A,0x82,0x6B,0x76,0xE9,0x31,
+ 0xD2,0x50,0x94,0x3A,0x76,0xA5,0xD1,0x9C,0xE5,0x04,0xF0,0x49,
+ 0xF2,0xEB,0x9A,0x88,0xD3,0xF7,0xE9,0x9A,0xAB,0x5A,0x49,0xBC,
+ 0x44,0x61,0xE8,0xB6,0xEF,0x68,0x6D,0x6C,0x17,0x50,0x50,0xBD,
+ 0x89,0x03,0x2E,0x10,0x79,0x05,0x44,0x70,0x0F,0x38,0x00,0x9C,
+ 0x73,0x8D,0x23,0x52,0x68,0x28,0x37,0x17,0x4C,0xB6,0x9D,0x72,
+ 0x2B,0x8A,0xE5,0xC0,0x84,0x82,0x95,0x1F,0x3C,0x78,0x1A,0x87,
+ 0xFB,0x0D,0x36,0xE6,0xD3,0x16,0x1B,0x65,0x2D,0xA7,0xA9,0x3D,
+ 0x54,0x7C,0xC9,0xF1,0x35,0xCE,0xC3,0xF0,0x79,0x29,0x65,0xA8,
+ 0xBF,0x8A,0x7B,0xDF,0x7F,0x25,0xCB,0xF6,0xC5,0x54,0x5D,0xB2,
+ 0xBD,0x88,0xEE,0xD1,0x34,0xE1,0xBA,0x0F,0xB6,0xAC,0xC5,0x4C,
+ 0xCF,0x64,0xF7,0x9F,0x76,0x39,0x27,0xC5,0x40,0x78,0x9F,0x31,
+ 0xE3,0xF3,0xEB,0x57,0x85,0xDA,0xB0,0x8D,0x6F,0x5D,0x93,0x5B,
+ 0xD8,0x5C,0x91,0x1C,0xFB,0x8B,0x7E,0x3B,0x3E,0xD0,0xD2,0xD2,
+ 0x31,0xF1,0x36,0x72,0xB0,0x73,0xE0,0x02,0xB1,0x8C,0xE6,0xB5,
+ 0xDB,0x14,0x17,0x0B,0x60,0x2C,0x1A,0x8A,0xD6,0x1A,0x06,0xD5,
+ 0x77,0xDC,0xF3,0xD1,0x00,0x78,0xF5,0x71,0xB3,0xB5,0x47,0xE7,
+ 0x8E,0xBF,0x5A,0xDC,0xC5,0x70,0xB5,0x39,0x66,0xA7,0xCF,0x75,
+ 0xF5,0x5D,0x3E,0x44,0xB8,0xB5,0xB1,0x95,0x5B,0x6F,0x5D,0x8B,
+ 0x87,0x0C,0xA8,0xF7,0x29,0xD0,0x37,0x28,0xFF,0x00,0x67,0x90,
+ 0x97,0x1B,0x23,0xE4,0x95,0xA4,0x2B,0x1E,0xA4,0x9A,0xB3,0x33,
+ 0xDA,0x8E,0x8C,0x81,0x19,0x50,0xEC,0xAC,0x5C,0x64,0x23,0x6F,
+ 0x2E,0x45,0x86,0xE3,0xC1,0x7E,0x85,0xC0,0x9C,0x03,0xFC,0x9A,
+ 0x8E,0x7F,0xB2,0xD8,0xCC,0x3C,0x4B,0x72,0x25,0x25,0x3E,0x47,
+ 0x69,0xFE,0x15,0xDD,0x0F,0x42,0xC2,0x65,0x23,0xBD,0x76,0x5B,
+ 0xB8,0xF0,0xDC,0x00,0xFC,0x86,0x7F,0x3A,0xE6,0xCB,0x83,0x4E,
+ 0x4E,0xF9,0x35,0xF1,0x97,0xE0,0xA6,0x57,0xD0,0xAF,0xAA,0xE5,
+ 0x73,0xD5,0xDA,0x85,0x13,0x9B,0xB4,0xFB,0x13,0x51,0x23,0x2D,
+ 0xB6,0x52,0xFA,0xD2,0x5C,0x1B,0x88,0x24,0x92,0x32,0x13,0x9D,
+ 0xA0,0x01,0x9C,0xF2,0x73,0x8A,0x93,0xB0,0xF6,0x9A,0xCD,0x82,
+ 0xDA,0xAB,0x3D,0xEE,0xDF,0x3D,0xB5,0x47,0x75,0x61,0x0E,0x46,
+ 0x8E,0xB7,0xFB,0xC4,0xA9,0x45,0x58,0x21,0x23,0x29,0x50,0xC9,
+ 0x1C,0xF1,0xC0,0xC1,0xE7,0x02,0xC7,0x1E,0xCE,0x22,0xB5,0xDC,
+ 0x43,0x60,0x34,0xDE,0x72,0x40,0xF1,0x3E,0x64,0xF8,0xD7,0xE4,
+ 0xCD,0x0F,0x12,0xEC,0x43,0xB2,0x50,0xEB,0x6E,0x81,0x8D,0xED,
+ 0x90,0x09,0x1E,0xB9,0x04,0x1A,0xD9,0x7C,0x17,0x2C,0x14,0xA3,
+ 0x67,0x2E,0x9C,0xBD,0x0B,0x28,0x38,0xEA,0x8A,0x16,0xA4,0xED,
+ 0x0F,0x47,0xA2,0x6B,0xF7,0x1D,0x39,0xA7,0x2E,0x13,0xAE,0xD2,
+ 0x0E,0x4A,0xA6,0xC6,0x72,0x3C,0x76,0xD7,0xC0,0xEF,0x14,0x1C,
+ 0x48,0x24,0xE0,0x74,0x19,0x07,0xC4,0x78,0xD4,0x8E,0x9C,0xED,
+ 0x96,0xDC,0xD6,0x9C,0x36,0xAD,0x70,0xD4,0xD7,0xA5,0xED,0x2D,
+ 0x3E,0xB6,0xED,0xEB,0x7D,0xB9,0x00,0xE4,0x12,0x52,0x84,0x9D,
+ 0xBE,0xA0,0x81,0xE9,0xC5,0x4A,0xBD,0xD9,0xE4,0x18,0x6F,0x07,
+ 0x50,0xD3,0xAF,0x2C,0x1C,0xA4,0xBA,0x73,0x8F,0xA0,0x00,0x57,
+ 0x14,0xFE,0xCF,0x62,0xDC,0x5D,0xEF,0x9D,0x43,0xAD,0xB8,0x7E,
+ 0x22,0xD9,0x03,0x77,0xCF,0x20,0xD4,0x47,0x84,0x49,0x43,0x6D,
+ 0x7C,0xF5,0xF7,0x09,0x49,0x19,0xC5,0xF6,0xEB,0x3F,0x5E,0xEB,
+ 0x39,0x37,0x58,0x51,0xDD,0x85,0x06,0x3B,0x2D,0xC5,0x80,0x8D,
+ 0xBD,0xC9,0x6D,0xB6,0xF7,0x14,0x90,0x07,0xC2,0x4A,0x94,0x71,
+ 0xD0,0x80,0x13,0x90,0x2A,0xF1,0xA7,0x3B,0x53,0x7E,0xD9,0x1D,
+ 0x30,0x75,0x64,0x19,0x2B,0x53,0x23,0x69,0x99,0x19,0xA2,0xB2,
+ 0xAC,0x7E,0xF3,0x69,0xE4,0x2B,0xA7,0xC2,0x08,0xEB,0xD3,0x81,
+ 0x53,0xB6,0xDD,0x1A,0x98,0x49,0x43,0x31,0xD9,0xD8,0x84,0xFE,
+ 0x7E,0xA6,0xA5,0x27,0x68,0x38,0x57,0x46,0x33,0x26,0x39,0x0E,
+ 0xE3,0x1D,0xE2,0x0E,0x15,0xFF,0x00,0x3F,0x5A,0xCF,0x5B,0x84,
+ 0xE6,0xA6,0xAD,0xBF,0xEE,0xDF,0xBA,0x87,0x16,0xCA,0xCD,0xCB,
+ 0x5D,0xF6,0x38,0xFC,0x81,0x72,0x9E,0xC3,0x73,0x66,0xAF,0x00,
+ 0xA2,0x3C,0x77,0x4B,0xA4,0xF5,0xCA,0x90,0xDF,0x39,0xF3,0x24,
+ 0x67,0xCE,0xB8,0xE6,0x6A,0x4B,0x87,0x69,0x37,0x08,0x76,0x4B,
+ 0x5D,0xAC,0xDA,0x34,0xD4,0x57,0x43,0xAA,0x6D,0xD4,0x8E,0xF2,
+ 0x49,0x42,0xB2,0x92,0xA4,0xF3,0xB1,0x00,0x80,0xAE,0x7D,0xE5,
+ 0x1C,0x70,0x9E,0x41,0xF4,0x9B,0xD9,0x54,0x76,0x64,0x6E,0xEF,
+ 0xA5,0x29,0x39,0xE9,0xC0,0xFE,0x15,0x64,0xD3,0x36,0x1F,0xB2,
+ 0x9B,0x0C,0xC5,0x63,0xBB,0x4F,0xED,0x1F,0x15,0x7C,0xCD,0x61,
+ 0xA1,0xC2,0x1A,0x6B,0x32,0xB2,0xF3,0xBB,0xF4,0x0A,0x2E,0xD6,
+ 0x38,0xAF,0xD0,0xE6,0x69,0x59,0xCC,0xDC,0x62,0xB4,0x67,0xC4,
+ 0xF8,0x56,0x33,0xB4,0xA8,0x1E,0xA3,0xD0,0xE4,0x02,0x3C,0x0E,
+ 0x31,0x91,0x51,0xFA,0x8F,0xB4,0x4E,0xCF,0xAE,0x11,0x58,0x37,
+ 0xBB,0x15,0xE6,0x74,0xB8,0x68,0x50,0x65,0xBF,0xB3,0xDF,0x49,
+ 0x19,0xC1,0x28,0x0E,0x01,0xB7,0x92,0x91,0xCE,0x71,0xC7,0x5A,
+ 0xD4,0xA2,0x5B,0x3D,0xAE,0x22,0xE3,0xC9,0x68,0x38,0xD3,0x89,
+ 0xC2,0x92,0xA1,0xC1,0x15,0x55,0xBD,0x76,0x63,0x6A,0x53,0x85,
+ 0xD4,0xFB,0x51,0x49,0x39,0xEE,0xCB,0x83,0x68,0xF4,0xE9,0x9F,
+ 0xCE,0xA2,0xB7,0x06,0x71,0x9F,0xFC,0x5F,0xD5,0xF2,0xBD,0xAD,
+ 0xF8,0xF8,0x8C,0x8D,0x3D,0x0C,0xA6,0xD2,0x8B,0x86,0xAD,0xBB,
+ 0x5C,0xAE,0xD1,0xED,0x11,0xED,0x51,0x9C,0x57,0xDC,0x45,0x6B,
+ 0x8D,0xA9,0x00,0x0C,0x67,0xA6,0xF3,0x82,0x48,0x1C,0x0C,0xE3,
+ 0x27,0xA9,0xBC,0xDA,0xFB,0x44,0x83,0x16,0x10,0xB6,0xEA,0x98,
+ 0xCF,0xB2,0xA4,0xA7,0xBA,0x5B,0xCA,0x64,0xB8,0xCB,0xA3,0x04,
+ 0x12,0xBC,0x0F,0x77,0xA7,0x21,0x40,0x75,0xC0,0xCD,0x58,0x2C,
+ 0xDA,0x74,0xC2,0x5A,0x1B,0x65,0xA0,0xDB,0x68,0xE1,0x29,0x03,
+ 0x81,0x5D,0xB7,0xDD,0x0B,0x02,0xF0,0x82,0xFB,0x89,0x71,0x89,
+ 0x04,0x7B,0xCB,0x68,0x81,0xBB,0xE6,0x0D,0x5E,0xBF,0x07,0xFE,
+ 0x29,0xC3,0x57,0xCD,0x6D,0xED,0xF9,0x21,0xC1,0xF2,0x32,0x59,
+ 0xFA,0xAF,0xB3,0x8B,0x54,0xF5,0xCB,0xD3,0x16,0x19,0xD7,0xCB,
+ 0x8E,0xEC,0x36,0xD3,0xAB,0x52,0x21,0x36,0x70,0x0E,0xF2,0xE1,
+ 0x4F,0x23,0xD0,0x15,0x1C,0x9C,0x11,0xE5,0x69,0xB6,0x76,0xC3,
+ 0x1A,0x16,0x95,0x84,0xCD,0xE5,0xE3,0x72,0xBE,0xA9,0x0B,0x53,
+ 0xEC,0x5B,0xE3,0x10,0x94,0xFD,0xE2,0x82,0x50,0x12,0x33,0xDD,
+ 0x80,0x90,0x31,0xB8,0xF2,0x31,0xC9,0xCE,0x6B,0xD1,0x3D,0x9C,
+ 0xC2,0x83,0x2C,0x3D,0xB1,0xC9,0x0B,0x07,0x8E,0xF7,0x04,0x0F,
+ 0xA6,0x3F,0x5A,0x31,0xD9,0xEC,0x2E,0xF9,0xC7,0x16,0x1E,0x53,
+ 0x6A,0x39,0x4B,0x40,0xE0,0x27,0xEB,0xD6,0xB1,0x2E,0x13,0x51,
+ 0x45,0x7F,0x15,0xEF,0xAF,0xAB,0xE9,0xE0,0x89,0x4A,0x48,0xCC,
+ 0xEF,0x3A,0x8A,0x14,0xBD,0x41,0x0E,0xE7,0x64,0xD2,0x92,0x6D,
+ 0x0D,0x43,0x7B,0xDA,0x1D,0x4B,0xB2,0x12,0xB5,0x3A,0xAE,0xF1,
+ 0x2A,0x1F,0x09,0x50,0x4F,0x3B,0xBC,0x7C,0x45,0x5F,0xAE,0xFA,
+ 0xCF,0xB3,0xAD,0x5B,0x09,0x94,0x5F,0x27,0xC8,0xB1,0xCC,0x61,
+ 0x21,0x09,0x91,0x2D,0x92,0x8C,0x03,0x93,0xB0,0xA8,0xFB,0xAB,
+ 0x03,0x9E,0x84,0xE0,0xF8,0xE0,0x9C,0xCA,0xB5,0xA3,0x98,0x64,
+ 0xA9,0xB6,0x62,0x21,0x08,0x5F,0x0A,0x18,0xCE,0xE1,0xEB,0x9A,
+ 0xFC,0x3D,0x99,0xC3,0x5A,0x0A,0x99,0x76,0x43,0x19,0xFD,0x90,
+ 0x42,0x92,0x3F,0x1E,0x7F,0x3A,0xBD,0x5E,0x13,0x35,0x15,0x97,
+ 0x5F,0x27,0x6F,0x9D,0xC6,0x56,0x8A,0xC5,0x97,0x50,0xF6,0x6B,
+ 0xA2,0xA4,0x49,0xB9,0xDB,0x35,0x12,0xF5,0x3D,0xC9,0xC6,0x0B,
+ 0x6C,0x33,0x01,0x9E,0xF0,0x27,0x24,0x13,0x92,0x38,0x04,0xED,
+ 0xC0,0x24,0xA4,0x0E,0x72,0x79,0x18,0xAC,0x5A,0xDB,0xBB,0x6A,
+ 0x5D,0x51,0x23,0x53,0x5D,0x9A,0xEE,0x7B,0xF7,0x42,0x92,0xD0,
+ 0x51,0x50,0x4A,0x53,0xF0,0xA0,0x1F,0x10,0x39,0x24,0xF4,0x24,
+ 0x9A,0xD1,0x5B,0xEC,0xD6,0x2B,0x4E,0xEE,0x90,0xEB,0xD2,0x00,
+ 0x3F,0x0E,0x36,0x83,0xF3,0xC7,0x3F,0x9D,0x4E,0xC6,0xD3,0x60,
+ 0x29,0x29,0x43,0x41,0x29,0x4F,0x00,0x01,0x80,0x05,0x67,0xC1,
+ 0xF0,0xE7,0x17,0x7A,0x8A,0xDE,0xB7,0x7F,0xFC,0x11,0x8F,0x52,
+ 0x9B,0x71,0xD3,0xD7,0x16,0xDC,0x6B,0x50,0x69,0xD7,0x9D,0x89,
+ 0x71,0x8F,0x95,0x05,0x34,0x9C,0x9F,0x5F,0x77,0xA2,0x81,0xF1,
+ 0x4F,0x8F,0xCE,0xBA,0xD3,0xDA,0xEB,0x0F,0xDB,0x55,0x69,0xD7,
+ 0x5A,0x65,0x4E,0xB6,0xB4,0xED,0x79,0xE8,0xAD,0x17,0xD8,0x77,
+ 0x18,0xE7,0xBB,0x19,0x71,0x2A,0xCF,0x20,0x60,0xE3,0x1F,0x16,
+ 0x6B,0x58,0xB0,0xD8,0xFB,0xB6,0x80,0x29,0xA8,0xAD,0x5D,0xD9,
+ 0xED,0xA6,0xE8,0xA5,0x3C,0xE4,0x4D,0xAF,0x1E,0x4B,0x8D,0x9D,
+ 0xA4,0xFC,0xFC,0x0F,0xD6,0xAF,0x8B,0xE1,0x8A,0xA4,0xB3,0x53,
+ 0xB7,0x97,0xD9,0xFE,0xA2,0xCD,0x35,0xB1,0x98,0x5B,0x2F,0x5D,
+ 0x8C,0x36,0xBF,0x69,0x8F,0x74,0x9B,0x0F,0x72,0x89,0x11,0xA4,
+ 0x05,0xB6,0x53,0xCF,0x4D,0xAB,0x48,0x50,0x1F,0x3C,0xD5,0xAD,
+ 0x8E,0xD6,0x74,0x65,0xB6,0x2A,0xA1,0xD9,0x98,0xB9,0x48,0x09,
+ 0x18,0xDF,0x12,0xDE,0xEB,0xA9,0x59,0xC7,0x4E,0xF0,0x27,0x6F,
+ 0xF3,0xCD,0x44,0x39,0xD9,0x74,0x66,0x1E,0x25,0xB9,0x32,0x80,
+ 0xF5,0xDA,0x7F,0x85,0x77,0xC4,0xD0,0xD0,0x99,0x48,0xEF,0x5C,
+ 0x96,0xE9,0x1E,0x05,0x40,0x0F,0xC8,0x67,0xF3,0xAE,0x53,0xE0,
+ 0xB5,0x1C,0xF3,0x65,0xD7,0xC6,0x5F,0x82,0x99,0x5A,0x77,0x48,
+ 0x82,0x45,0xD6,0xF1,0xAD,0xB5,0x48,0xB9,0x3D,0x09,0xDB,0x64,
+ 0x46,0x23,0x77,0x0C,0xB4,0xF2,0x92,0xA5,0xA1,0x2A,0x50,0x52,
+ 0xD6,0xB2,0x92,0x46,0x4E,0xD4,0x80,0x9C,0x9E,0x84,0xF1,0x9E,
+ 0x3E,0x53,0xA8,0x2E,0xBA,0x22,0xE8,0xE3,0x2E,0xC7,0x5D,0xC2,
+ 0xD4,0xF2,0x8A,0xF6,0x21,0x5E,0xFA,0x7F,0xC4,0x8C,0xF1,0xD7,
+ 0xAA,0x72,0x39,0x39,0x1E,0xB7,0x46,0x2D,0x02,0x3B,0x61,0x88,
+ 0x8C,0x06,0x9B,0xCE,0x70,0x9F,0x13,0xE6,0x7C,0xEA,0x40,0x69,
+ 0x76,0x6E,0x31,0x0C,0x79,0xAC,0x07,0x5B,0x57,0x81,0xF0,0xF5,
+ 0x07,0xC2,0xBA,0x1F,0xE1,0xA2,0xE9,0xDD,0xFF,0x00,0x7F,0x87,
+ 0x97,0xE7,0x72,0x5C,0x2F,0xAF,0x33,0x23,0xBA,0x1E,0xCB,0x6F,
+ 0x57,0x47,0x6E,0x7F,0xD7,0x24,0x69,0xE5,0x3A,0xB2,0xB7,0x62,
+ 0x4D,0x67,0xBB,0x3B,0xC9,0x25,0x4A,0x4E,0xE2,0x0E,0x09,0xE7,
+ 0x18,0xEA,0x4F,0x38,0xC0,0xAB,0x0A,0x3B,0x4B,0xD3,0xD6,0x3B,
+ 0x10,0xB1,0x68,0x48,0xB2,0x6F,0x4F,0x03,0x95,0xCB,0xDB,0xDD,
+ 0xB0,0xA5,0x94,0xFC,0x45,0xC3,0x91,0x81,0x8E,0x89,0xDC,0x7D,
+ 0x0E,0x49,0xA9,0x2B,0xB7,0x65,0x11,0xBB,0xD2,0xB8,0xF2,0x9F,
+ 0x6D,0x39,0xF8,0x54,0x90,0xAF,0xF6,0xAF,0x7B,0x36,0x84,0x85,
+ 0x6E,0x58,0x71,0x69,0x72,0x4B,0x89,0xE9,0xDE,0x7C,0x20,0xF9,
+ 0xE0,0x7F,0x1C,0xD6,0xAC,0x78,0x55,0x5B,0xEB,0x1F,0x56,0xF4,
+ 0xF6,0x5A,0x90,0x93,0x5C,0x8C,0xE1,0xBD,0x2D,0x32,0x5B,0x32,
+ 0x6E,0x57,0x97,0xCA,0xE7,0xCE,0x51,0x75,0xC5,0xA5,0x38,0x25,
+ 0x44,0x00,0x0E,0x0F,0x3B,0x40,0x00,0x00,0x7C,0x05,0x4A,0xE8,
+ 0x4D,0x73,0x7E,0xD0,0x2D,0x1B,0x15,0xDE,0x24,0x89,0xF6,0x70,
+ 0xAC,0xC7,0x5B,0x20,0x17,0x63,0xA4,0x9E,0x70,0x0E,0x37,0xA3,
+ 0x92,0x7F,0x79,0x3C,0x8C,0x11,0x80,0x34,0x95,0xD8,0xDC,0x90,
+ 0xEE,0x54,0x82,0x6A,0x41,0xDD,0x13,0x0A,0xE1,0x07,0xB9,0x99,
+ 0x18,0x38,0x07,0xC2,0x7A,0x14,0x9F,0x43,0x5D,0x2A,0xDC,0x36,
+ 0x0E,0x96,0x58,0xEF,0xE3,0xCF,0xF7,0x91,0x7C,0xB6,0xD8,0xCE,
+ 0xB5,0x17,0x68,0xDD,0x94,0x5E,0xE5,0xFB,0x55,0xD2,0xD9,0x73,
+ 0x97,0x25,0x29,0xC2,0x57,0xF6,0x3C,0x96,0xD6,0xA3,0xC7,0x05,
+ 0x41,0x20,0x1E,0x98,0x1B,0x81,0xC5,0x7A,0x69,0x3E,0xD3,0xB4,
+ 0xCC,0x48,0x13,0xFD,0xA2,0xD6,0xD6,0x9F,0x82,0x95,0x20,0xC6,
+ 0x60,0xA8,0xB9,0x2A,0x56,0x41,0xCF,0xB8,0x33,0x9C,0x1C,0xF0,
+ 0x09,0xF8,0xBA,0x0A,0xEF,0xBB,0xF6,0x53,0x6E,0x6D,0xE2,0xB4,
+ 0x2A,0x59,0x19,0xF8,0x4A,0xC6,0x3F,0x4C,0xD7,0x13,0x9D,0x9D,
+ 0xC7,0x53,0xCD,0xA9,0xA2,0xF4,0x76,0xD2,0x30,0xB4,0x27,0x9D,
+ 0xDE,0x44,0x13,0xD2,0xB9,0xD2,0xE1,0x33,0x71,0xFE,0xAB,0xDF,
+ 0xF5,0x14,0x71,0x6C,0xA8,0xF6,0x85,0xAB,0x74,0x9D,0xF6,0x43,
+ 0xD2,0x20,0x69,0xCB,0xF3,0xB7,0x05,0xB2,0x96,0xDB,0x92,0x54,
+ 0x96,0x19,0x04,0x13,0x8D,0xE8,0x5F,0xBE,0x7A,0x9F,0x84,0x57,
+ 0x46,0x80,0xD5,0x77,0xAD,0x08,0xA5,0x37,0x22,0x03,0x92,0xAD,
+ 0x33,0x0F,0x7A,0xB6,0x01,0xC2,0xDB,0x56,0x30,0x56,0x8F,0x3C,
+ 0xE0,0x65,0x24,0xFA,0x8F,0x10,0x6D,0x49,0xD0,0x70,0x99,0x7D,
+ 0x2E,0xB7,0x19,0x4A,0x5A,0x4E,0x42,0x96,0xA2,0x7F,0x2E,0x95,
+ 0x63,0x87,0xA4,0xDA,0x99,0x10,0xC7,0x97,0x1C,0x38,0xD9,0xF0,
+ 0x23,0x90,0x7C,0xC1,0xF0,0x35,0x9E,0x1C,0x21,0xAA,0x6D,0x3B,
+ 0x5F,0xD5,0xFB,0xFE,0x09,0x51,0x68,0x8C,0xBA,0xEB,0xDE,0xC9,
+ 0xEF,0xB0,0x42,0x2E,0xF7,0x6B,0x52,0x70,0x49,0x4B,0x13,0xF2,
+ 0xC3,0xA9,0x3C,0x67,0x00,0xED,0x5A,0x73,0x81,0xE5,0x9A,0xAF,
+ 0xBD,0xDA,0x4E,0x9A,0xB5,0x46,0x54,0x1E,0xCE,0x6C,0x6C,0xBF,
+ 0x3D,0xC2,0x52,0x26,0xA9,0xA5,0xA5,0x86,0x32,0x31,0xB8,0x2D,
+ 0x64,0x95,0x70,0x7A,0x23,0xAE,0x30,0x48,0xEB,0x5D,0xF7,0xEE,
+ 0xCA,0x59,0x2A,0x2A,0x62,0x53,0xE9,0x4F,0x92,0x92,0x15,0xF9,
+ 0xF1,0x5E,0x36,0x0D,0x12,0xC5,0xA6,0x52,0x5D,0x4B,0x6B,0x79,
+ 0xD4,0x9E,0x14,0xE7,0x38,0xF9,0x0E,0x95,0xAF,0x4B,0x83,0xCF,
+ 0x36,0xAA,0xDE,0x6E,0xEB,0xD9,0x04,0x9D,0xCE,0x48,0x30,0x6F,
+ 0x16,0x16,0xE0,0xDF,0x6E,0x86,0x44,0xE7,0x94,0xF0,0x90,0xF3,
+ 0x83,0x68,0x71,0x4A,0x2B,0xDC,0xA1,0x8E,0x00,0x27,0x9C,0x0F,
+ 0xA5,0x59,0x6F,0x9D,0xA7,0xE9,0xB4,0xDB,0x1C,0x4C,0x39,0xA2,
+ 0x7D,0xC5,0xE4,0x94,0x88,0x4D,0x82,0x5D,0x0A,0x23,0xF6,0x81,
+ 0x19,0x4F,0xCC,0xD5,0xA2,0xDD,0x01,0x52,0x63,0xAA,0x3C,0x96,
+ 0x83,0x8D,0x2C,0x61,0x49,0x50,0xE0,0x8A,0x8D,0x5F,0x67,0x90,
+ 0xD9,0x91,0xDF,0xA9,0xE7,0x9E,0x68,0x1C,0xA5,0x95,0x01,0x8F,
+ 0x91,0x3E,0x22,0xAD,0x5F,0x83,0x4A,0x33,0xBD,0x35,0x99,0x3E,
+ 0xAE,0xD6,0xFB,0xAF,0x22,0x1C,0x1A,0xD8,0xA7,0xDB,0x2D,0x17,
+ 0x3B,0x96,0x99,0x44,0x85,0x3C,0x5A,0x96,0xD2,0x5B,0x5B,0x0A,
+ 0x07,0xDF,0x52,0xD3,0xCE,0xF4,0xE7,0xA1,0xC8,0x04,0x1F,0x1A,
+ 0x5C,0x3B,0x42,0x85,0x75,0xB1,0x2F,0x4E,0x6B,0xC8,0x12,0x63,
+ 0x02,0xA4,0xA5,0x53,0x62,0x36,0x54,0x82,0xA4,0xA8,0x6D,0x59,
+ 0x03,0x96,0xC8,0x3C,0x90,0xA1,0xB7,0x03,0xAF,0x38,0xAB,0xDB,
+ 0x56,0xF7,0xFD,0xA0,0x0C,0x10,0x07,0x41,0x5F,0x37,0xED,0x07,
+ 0x02,0xF2,0xD9,0x75,0xE6,0x96,0xD3,0xE4,0x72,0xE3,0x47,0x04,
+ 0xFC,0xC7,0x43,0xFA,0xD6,0x69,0xF0,0x65,0x4E,0x0B,0xBA,0xD5,
+ 0xF3,0xE5,0x7F,0x2E,0x84,0xA8,0xB8,0xAD,0x0C,0xAE,0xD0,0x7B,
+ 0x2A,0xB1,0xCB,0x17,0x07,0x35,0xF4,0x3B,0xC8,0x6C,0xEE,0x10,
+ 0xA3,0xA4,0x29,0xC7,0x38,0xE9,0xB4,0x12,0x7E,0x80,0x13,0xE1,
+ 0xD6,0xBA,0xB5,0xB6,0xB0,0xBD,0x6B,0xE8,0xFF,0x00,0x60,0x5B,
+ 0x21,0x4A,0x89,0x66,0x52,0xB7,0x48,0x5B,0x84,0xA1,0xE9,0x49,
+ 0x19,0x3B,0x36,0xE3,0x29,0x6C,0xF1,0x9C,0xE0,0x91,0x94,0xE3,
+ 0x04,0xE6,0x70,0xF6,0x5A,0xD3,0x32,0x32,0xA9,0x8F,0x94,0x67,
+ 0xA0,0x40,0x07,0xF1,0xAB,0x0D,0xBF,0x4E,0x31,0x6E,0x8A,0x58,
+ 0x88,0xC6,0xDD,0xDF,0x12,0x8F,0x2A,0x57,0xCC,0xD6,0x2A,0x1C,
+ 0x2A,0xA6,0x7B,0xC9,0x5B,0xCD,0xDD,0xFA,0x58,0x28,0xBF,0x23,
+ 0x25,0xD2,0x97,0x0D,0x13,0x65,0x98,0x66,0x6A,0x66,0xEF,0x4E,
+ 0x5C,0x63,0x3E,0x15,0x1E,0x34,0x58,0x6B,0x5B,0x6A,0xDB,0x82,
+ 0x0A,0x94,0x90,0x47,0x27,0x8C,0x71,0xD3,0xAF,0x35,0x70,0xBD,
+ 0x76,0x9F,0xA3,0x6F,0x76,0xD7,0xA0,0x5E,0x2D,0x97,0xB4,0xC4,
+ 0x7B,0x92,0x53,0x05,0xC2,0x52,0x41,0xC8,0x23,0x00,0xE0,0x82,
+ 0x01,0xE8,0x6A,0x7D,0xDE,0xCF,0xE0,0xDC,0xA6,0x09,0x32,0x19,
+ 0x70,0x2F,0xC7,0x61,0xC0,0x57,0xCE,0x97,0x3E,0xCD,0xAD,0x3D,
+ 0xC1,0x4A,0x19,0x79,0x27,0xCC,0x38,0x7F,0x8D,0x27,0xC2,0x2A,
+ 0x5F,0x44,0x9F,0x8D,0xD9,0x19,0x19,0x8F,0xCC,0x9B,0xA7,0x55,
+ 0x76,0xDB,0xA4,0x57,0x77,0x10,0xDC,0x6B,0xEF,0xC4,0xD6,0x14,
+ 0xD9,0x07,0x3D,0x32,0x40,0xCF,0xE1,0xF5,0xE6,0xB7,0x8D,0x2B,
+ 0x32,0x04,0xDD,0x11,0x16,0x2D,0x95,0x5E,0xC6,0x65,0xC2,0x01,
+ 0xE9,0x71,0x80,0xDC,0xDB,0x84,0x61,0x58,0x27,0x3C,0xA5,0x59,
+ 0xF7,0x48,0xC6,0x41,0xCD,0x67,0x17,0x7B,0x14,0x3D,0x32,0xD9,
+ 0x8E,0xC4,0x7E,0xF1,0xF9,0x99,0x48,0x53,0xDC,0x84,0xA7,0x8C,
+ 0x93,0xF8,0xD5,0x95,0x36,0x9B,0x3E,0x84,0xD2,0xEE,0xEA,0x80,
+ 0xCC,0xD9,0xB7,0x00,0x81,0xF7,0x2C,0xBA,0xA0,0xDA,0x9C,0x5E,
+ 0x02,0x42,0x90,0x0E,0xD2,0x72,0x52,0x37,0x63,0x8C,0xF5,0xAE,
+ 0x6E,0x2E,0x9C,0x69,0x55,0x8D,0x36,0xEF,0x2F,0x97,0xBD,0x8A,
+ 0xDF,0x2B,0xB1,0x1B,0x3B,0xB0,0x4D,0x37,0x29,0xA2,0xB1,0x39,
+ 0x12,0x54,0xA3,0x95,0xBB,0x2A,0x30,0x79,0xD7,0x0F,0xEF,0x2D,
+ 0x4A,0xC9,0x27,0xE6,0x6B,0x95,0x9E,0xC2,0xA2,0xDB,0x7D,0xEB,
+ 0x2D,0xC2,0xD8,0xD3,0xAA,0xE1,0x79,0x8B,0xDD,0x64,0x7C,0xD2,
+ 0x0E,0x6A,0xAB,0x73,0xED,0x57,0xB4,0x28,0xEF,0xA9,0xC8,0xEF,
+ 0x58,0xE1,0xA4,0x9C,0xF7,0x26,0x22,0xDF,0x29,0xF4,0xDF,0xBD,
+ 0x19,0xFC,0x2B,0xCE,0xD1,0xDB,0x26,0xB9,0x6A,0x58,0x55,0xC1,
+ 0x9B,0x45,0xCD,0xB2,0x71,0xDD,0x32,0xC2,0xE3,0x2B,0xE8,0xAD,
+ 0xCB,0xCF,0xCB,0x1F,0x5A,0xD6,0x9C,0x71,0x57,0x79,0x65,0x75,
+ 0xE7,0xF7,0x26,0xF1,0x64,0xEB,0x51,0xAE,0x16,0x1B,0xB2,0x2C,
+ 0xBA,0x85,0xA0,0xD0,0x20,0x16,0x5D,0xC8,0x29,0xC7,0x87,0x23,
+ 0x82,0x3D,0x7C,0x3C,0x7D,0x36,0x2D,0x15,0x69,0x4B,0x49,0x42,
+ 0xB6,0x8A,0xCC,0xBB,0x69,0xBA,0x34,0xBB,0x3E,0x9C,0x90,0xA4,
+ 0x16,0x5F,0x90,0xF1,0x50,0x43,0xA3,0x0E,0x06,0xD4,0xD2,0x94,
+ 0x46,0x0F,0x23,0x90,0x8C,0xFA,0x81,0x5A,0x17,0x64,0x97,0x45,
+ 0xBD,0xA6,0xA0,0x77,0xE4,0xF7,0x9B,0x31,0xCF,0xEE,0x82,0x42,
+ 0x7F,0x2C,0x57,0xA0,0xE0,0xB8,0xD9,0xD7,0x86,0x49,0x6B,0xA6,
+ 0x8F,0xD6,0xD6,0x2D,0x07,0xAD,0x8D,0x4A,0x1B,0x41,0x0D,0x80,
+ 0x05,0x74,0x57,0x84,0x47,0x02,0xDB,0x04,0x57,0xBD,0x77,0x8C,
+ 0x82,0x94,0xA5,0x00,0xA5,0x29,0x40,0x29,0x4A,0x50,0x0A,0xF2,
+ 0x79,0x94,0xB8,0x30,0x45,0x7A,0xD2,0x80,0x8E,0x36,0xE6,0xCA,
+ 0xB3,0xB4,0x57,0xA7,0xB1,0x23,0x6E,0x36,0xD7,0x6D,0x28,0x0E,
+ 0x04,0xC0,0x6C,0x2B,0x3B,0x45,0x75,0xB4,0xD8,0x40,0xC0,0x15,
+ 0xE9,0x4A,0x03,0xE5,0x69,0x0A,0x18,0x35,0xC4,0xF4,0x04,0x2D,
+ 0x59,0x29,0x15,0xDF,0x4A,0x03,0x85,0xB8,0x2D,0xA4,0x7C,0x22,
+ 0xBF,0x17,0x01,0xB2,0x73,0xB4,0x57,0x7D,0x28,0x0E,0x76,0x23,
+ 0x25,0xBE,0x83,0x15,0xD1,0x81,0x8C,0x52,0x94,0x07,0x2C,0x88,
+ 0xA8,0x73,0xA8,0x06,0xBC,0x5B,0xB7,0xB6,0x93,0xF0,0x8A,0x90,
+ 0xA5,0x01,0xC2,0xB8,0x2D,0xA8,0x7C,0x22,0xBE,0x99,0x84,0x84,
+ 0x1C,0x84,0x8A,0xEC,0xA5,0x01,0xE2,0xE3,0x01,0x49,0xC6,0x2A,
+ 0x3D,0xEB,0x63,0x6B,0x5E,0x76,0x8A,0x96,0xA5,0x01,0xC3,0x16,
+ 0x12,0x1A,0x1C,0x0A,0xE8,0x72,0x3A,0x14,0x30,0x40,0xAF,0x6A,
+ 0x50,0x11,0x4F,0xDA,0xDA,0x59,0xCE,0xC1,0x5C,0xCA,0xB3,0x37,
+ 0xFB,0xA2,0xA7,0xA9,0x81,0xE5,0x40,0x41,0x37,0x66,0x68,0x1C,
+ 0xED,0x15,0xD8,0xD5,0xB9,0xB4,0xA7,0x1B,0x45,0x48,0xE0,0x52,
+ 0x80,0x8A,0x7E,0xD6,0xD2,0xFA,0xA4,0x57,0x9A,0x6D,0x0D,0x0F,
+ 0xD8,0x15,0x33,0x4A,0x02,0x20,0x5A,0x5A,0xCF,0xC0,0x3F,0x0A,
+ 0xF7,0x6E,0xDE,0xDA,0x53,0x8D,0xA2,0xA4,0x29,0x40,0x44,0x48,
+ 0xB4,0xB4,0xE7,0x54,0x0A,0xE7,0x45,0x91,0xA4,0xAB,0x21,0x02,
+ 0xA7,0xE9,0x40,0x70,0x46,0x82,0x86,0xC7,0x09,0xAF,0xB7,0xE1,
+ 0x21,0x63,0x05,0x22,0xBB,0x29,0x40,0x44,0x8B,0x5B,0x41,0x59,
+ 0xDA,0x3F,0x0A,0xE9,0x4C,0x24,0x04,0xE3,0x6D,0x76,0xD2,0x80,
+ 0x88,0x7E,0xD4,0xD2,0xD5,0x92,0x91,0x5E,0x69,0xB3,0xB4,0x3F,
+ 0x64,0x54,0xDD,0x28,0x08,0x51,0x67,0x6B,0x39,0xD8,0x2B,0xD8,
+ 0x5B,0x1B,0x09,0xC6,0xD1,0x52,0x94,0xA0,0x21,0x1C,0xB4,0xB6,
+ 0x4E,0x76,0x8A,0xFD,0x6A,0xD2,0xDA,0x4E,0x76,0x8A,0x9A,0xA5,
+ 0x01,0xCD,0x1E,0x2A,0x1B,0x1C,0x0A,0xFB,0x76,0x3A,0x16,0x30,
+ 0x40,0xAF,0x6A,0x50,0x11,0x4F,0xDA,0xDA,0x59,0xF8,0x45,0x73,
+ 0x2A,0xCC,0xDF,0xEE,0x8A,0x9E,0xA6,0x05,0x01,0x04,0xDD,0x99,
+ 0xA0,0x73,0xB4,0x57,0x7B,0x10,0x1B,0x40,0xC0,0x48,0xAE,0xEA,
+ 0x50,0x1C,0x0F,0xC0,0x6D,0x63,0x94,0x8A,0xE3,0x5D,0xA1,0xB2,
+ 0x7E,0x11,0x53,0x74,0xA0,0x22,0x19,0xB5,0x36,0x93,0xF0,0x8A,
+ 0xEE,0x6E,0x2A,0x12,0x9C,0x60,0x57,0x4D,0x28,0x08,0xF9,0x36,
+ 0xE6,0xDC,0xEA,0x91,0x5C,0x66,0xCC,0xD6,0x7E,0x01,0x53,0x94,
+ 0xA0,0x20,0x7E,0xC5,0x67,0x3F,0x00,0xAE,0x98,0xF6,0xC6,0xDB,
+ 0xE8,0x91,0x52,0xB4,0xA0,0x23,0x24,0x5B,0x1B,0x71,0x38,0x29,
+ 0x15,0x1E,0xBB,0x0B,0x25,0x79,0xD8,0x3F,0x0A,0xB1,0xD3,0x03,
+ 0xCA,0x80,0x87,0x8B,0x6A,0x6D,0xAE,0x89,0x15,0xD2,0xE4,0x14,
+ 0x29,0x38,0xDB,0x5D,0xF4,0xA0,0x21,0xD3,0x6A,0x6C,0x2F,0x3B,
+ 0x45,0x76,0x22,0x12,0x02,0x31,0xB6,0xBB,0x29,0x40,0x45,0x3F,
+ 0x6C,0x6D,0x67,0xE1,0x15,0xE0,0x2D,0x0D,0xE7,0xE1,0x15,0x39,
+ 0x4C,0x0A,0x02,0x31,0x9B,0x6B,0x68,0xFD,0x91,0x5F,0xAF,0x5B,
+ 0x9B,0x58,0xE5,0x22,0xA4,0xA9,0x40,0x52,0xB5,0x7E,0x88,0x85,
+ 0x7F,0xB7,0x96,0x56,0x03,0x72,0x10,0x09,0x65,0xCC,0x74,0x27,
+ 0xA8,0x3E,0x60,0xD6,0x3B,0x2A,0xF9,0xA8,0xF4,0x6B,0xAF,0x59,
+ 0x6F,0x16,0x71,0x78,0x86,0xDA,0x7B,0xB2,0xDE,0xF4,0xA1,0xE0,
+ 0x8F,0x01,0xEF,0x61,0x0B,0x18,0xF1,0xC8,0xE9,0xE2,0x79,0xAF,
+ 0xE9,0x72,0x33,0x55,0xFD,0x53,0x62,0xB7,0xDE,0x18,0xD9,0x3A,
+ 0x13,0x32,0x02,0x7E,0x12,0xB4,0xE4,0xA7,0xE4,0x7A,0x8A,0xE4,
+ 0xF1,0x0E,0x17,0x1C,0x53,0xCF,0x1D,0x25,0xF0,0x7F,0x5F,0x53,
+ 0x1C,0xE1,0x7D,0x51,0xFC,0xAF,0x74,0xBD,0x76,0x6D,0x39,0xCE,
+ 0xFA,0xE1,0xA6,0xB5,0x45,0xB9,0xF5,0x7C,0x4C,0x32,0x42,0xD2,
+ 0x9F,0xAA,0x42,0xC7,0xFE,0x55,0xCF,0x6D,0xD4,0xBA,0x7A,0xD5,
+ 0xEF,0xE9,0xBE,0xCF,0xE5,0xC8,0x94,0x97,0x0F,0x77,0x26,0xF3,
+ 0x2D,0x1B,0x02,0x7A,0x64,0x25,0x19,0x3E,0xA0,0x29,0x19,0xF9,
+ 0x78,0x6C,0x17,0x6E,0xCB,0xEC,0x4A,0x7C,0xA9,0x10,0x9C,0x40,
+ 0xF2,0x0F,0x28,0xFE,0xA6,0xBD,0xAD,0x1A,0x12,0xCD,0x01,0x41,
+ 0x4D,0x5B,0x1A,0x2B,0x1F,0xB4,0xE6,0x57,0xF5,0xF7,0xB3,0x5C,
+ 0xE5,0xC0,0xEA,0x35,0x96,0x4F,0x4F,0x39,0x7E,0x3E,0x65,0x15,
+ 0x39,0x19,0x15,0xBE,0xC5,0xA8,0x75,0x75,0xE7,0xFA,0xCD,0xAA,
+ 0xE5,0x19,0x0A,0xC6,0xD6,0x5B,0x42,0x4A,0x1A,0x4A,0x78,0xC8,
+ 0x42,0x49,0x38,0x04,0x8E,0x54,0x79,0x38,0x03,0xA0,0x00,0x6B,
+ 0xFA,0x2D,0x87,0x19,0x52,0x10,0x13,0xB5,0x29,0xC0,0x00,0x0C,
+ 0x00,0x2A,0x77,0xEC,0x6D,0xF8,0x1B,0x3F,0x2A,0x99,0xB2,0xD9,
+ 0x83,0x2A,0x07,0x6D,0x77,0x70,0x98,0x4A,0x78,0x5A,0x6A,0x10,
+ 0x46,0x58,0xAB,0x16,0x2B,0x4E,0x7B,0x94,0xE6,0xA4,0x2B,0xC2,
+ 0x2B,0x5D,0xDA,0x00,0xAF,0x7A,0xDA,0x2C,0x29,0x4A,0x50,0x0A,
+ 0x52,0x94,0x02,0x94,0xA5,0x00,0xA5,0x29,0x40,0x29,0x4A,0x50,
+ 0x0A,0x52,0x94,0x02,0x94,0xA5,0x00,0xA5,0x29,0x40,0x29,0x4A,
+ 0x50,0x0A,0x52,0x94,0x02,0x94,0xA5,0x00,0xA5,0x29,0x40,0x29,
+ 0x4A,0x50,0x0A,0x52,0x94,0x02,0x94,0xA5,0x00,0xA5,0x29,0x40,
+ 0x29,0x4A,0x50,0x0A,0x52,0x94,0x02,0x94,0xA5,0x00,0xA5,0x29,
+ 0x40,0x29,0x4A,0x50,0x0A,0x52,0x94,0x02,0x94,0xA5,0x00,0xA5,
+ 0x29,0x40,0x29,0x4A,0x50,0x0A,0x52,0x94,0x02,0x94,0xA5,0x00,
+ 0xA5,0x29,0x40,0x29,0x4A,0x50,0x0A,0x52,0x94,0x02,0x94,0xA5,
+ 0x00,0xA5,0x29,0x40,0x29,0x4A,0x50,0x0A,0x52,0x94,0x02,0x94,
+ 0xA5,0x00,0xAF,0x95,0xA4,0x28,0x60,0xD7,0xD5,0x28,0x0E,0x37,
+ 0xA1,0x21,0x7D,0x52,0x2B,0xC7,0xEC,0xE4,0x67,0xE1,0x15,0x25,
+ 0x4A,0x03,0x85,0x10,0x50,0x3F,0x66,0xBA,0x5B,0x65,0x28,0xF0,
+ 0xAF,0x5A,0x50,0x0A,0x52,0x94,0x02,0x94,0xA5,0x00,0xA5,0x29,
+ 0x40,0x29,0x4A,0x50,0x0A,0x52,0x94,0x02,0x94,0xA5,0x00,0xA5,
+ 0x29,0x40,0x29,0x4A,0x50,0x0A,0x52,0x94,0x02,0x94,0xA5,0x00,
+ 0xA5,0x29,0x40,0x29,0x4A,0x50,0x0A,0x52,0x94,0x02,0x94,0xA5,
+ 0x00,0xA5,0x29,0x40,0x29,0x4A,0x50,0x0A,0x52,0x94,0x02,0x94,
+ 0xA5,0x00,0xA5,0x29,0x40,0x29,0x4A,0x50,0x0A,0x52,0x94,0x02,
+ 0x94,0xA5,0x00,0xA5,0x29,0x40,0x29,0x4A,0x50,0x0A,0x52,0x94,
+ 0x02,0x94,0xA5,0x00,0xA5,0x29,0x40,0x29,0x4A,0x50,0x0A,0x52,
+ 0x94,0x02,0x94,0xA5,0x00,0xA5,0x29,0x40,0x29,0x4A,0x50,0x0A,
+ 0x52,0x94,0x02,0x94,0xA5,0x00,0xA5,0x29,0x40,0x29,0x4A,0x50,
+ 0x0A,0x52,0x94,0x02,0x94,0xA5,0x00,0xA5,0x29,0x40,0x29,0x4A,
+ 0x50,0x0A,0x52,0x94,0x07,0xFF,0xD9};
+
+#endif /* __wwwcactuscodeorg_H_ */
+
diff --git a/src/make.code.defn b/src/make.code.defn
new file mode 100644
index 0000000..a2f26b5
--- /dev/null
+++ b/src/make.code.defn
@@ -0,0 +1,9 @@
+# Main make.code.defn file for thorn httpd
+# $Header$
+
+# Source files in this directory
+SRCS = Startup.c Server.c Sockets.c http.c Content.c
+
+# Subdirectories containing source files
+SUBDIRS =
+