/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/cgi.c
0,0 → 1,211
/**
* \addtogroup httpd
* @{
*/
 
/**
* \file
* HTTP server script language C functions file.
* \author Adam Dunkels <adam@dunkels.com>
*
* This file contains functions that are called by the web server
* scripts. The functions takes one argument, and the return value is
* interpreted as follows. A zero means that the function did not
* complete and should be invoked for the next packet as well. A
* non-zero value indicates that the function has completed and that
* the web server should move along to the next script line.
*
*/
 
/*
* Copyright (c) 2001, Adam Dunkels.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote
* products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This file is part of the uIP TCP/IP stack.
*
* $Id: cgi.c,v 1.23.2.4 2003/10/07 13:22:27 adam Exp $
*
*/
 
#include "uip.h"
#include "cgi.h"
#include "httpd.h"
#include "fs.h"
 
#include <stdio.h>
#include <string.h>
 
static u8_t print_stats(u8_t next);
static u8_t file_stats(u8_t next);
static u8_t tcp_stats(u8_t next);
 
cgifunction cgitab[] = {
print_stats, /* CGI function "a" */
file_stats, /* CGI function "b" */
tcp_stats /* CGI function "c" */
};
 
static const char closed[] = /* "CLOSED",*/
{0x43, 0x4c, 0x4f, 0x53, 0x45, 0x44, 0};
static const char syn_rcvd[] = /* "SYN-RCVD",*/
{0x53, 0x59, 0x4e, 0x2d, 0x52, 0x43, 0x56,
0x44, 0};
static const char syn_sent[] = /* "SYN-SENT",*/
{0x53, 0x59, 0x4e, 0x2d, 0x53, 0x45, 0x4e,
0x54, 0};
static const char established[] = /* "ESTABLISHED",*/
{0x45, 0x53, 0x54, 0x41, 0x42, 0x4c, 0x49, 0x53, 0x48,
0x45, 0x44, 0};
static const char fin_wait_1[] = /* "FIN-WAIT-1",*/
{0x46, 0x49, 0x4e, 0x2d, 0x57, 0x41, 0x49,
0x54, 0x2d, 0x31, 0};
static const char fin_wait_2[] = /* "FIN-WAIT-2",*/
{0x46, 0x49, 0x4e, 0x2d, 0x57, 0x41, 0x49,
0x54, 0x2d, 0x32, 0};
static const char closing[] = /* "CLOSING",*/
{0x43, 0x4c, 0x4f, 0x53, 0x49,
0x4e, 0x47, 0};
static const char time_wait[] = /* "TIME-WAIT,"*/
{0x54, 0x49, 0x4d, 0x45, 0x2d, 0x57, 0x41,
0x49, 0x54, 0};
static const char last_ack[] = /* "LAST-ACK"*/
{0x4c, 0x41, 0x53, 0x54, 0x2d, 0x41, 0x43,
0x4b, 0};
 
static const char *states[] = {
closed,
syn_rcvd,
syn_sent,
established,
fin_wait_1,
fin_wait_2,
closing,
time_wait,
last_ack};
 
/*-----------------------------------------------------------------------------------*/
/* print_stats:
*
* Prints out a part of the uIP statistics. The statistics data is
* written into the uip_appdata buffer. It overwrites any incoming
* packet.
*/
static u8_t
print_stats(u8_t next)
{
#if UIP_STATISTICS
u16_t i, j;
u8_t *buf;
u16_t *databytes;
if(next) {
/* If our last data has been acknowledged, we move on the next
chunk of statistics. */
hs->count = hs->count + 4;
if(hs->count >= sizeof(struct uip_stats)/sizeof(u16_t)) {
/* We have printed out all statistics, so we return 1 to
indicate that we are done. */
return 1;
}
}
 
/* Write part of the statistics into the uip_appdata buffer. */
databytes = (u16_t *)&uip_stat + hs->count;
buf = (u8_t *)uip_appdata;
 
j = 4 + 1;
i = hs->count;
while (i < sizeof(struct uip_stats)/sizeof(u16_t) && --j > 0) {
sprintf((char *)buf, "%5u\r\n", *databytes);
++databytes;
buf += 6;
++i;
}
 
/* Send the data. */
uip_send(uip_appdata, buf - uip_appdata);
return 0;
#else
return 1;
#endif /* UIP_STATISTICS */
}
/*-----------------------------------------------------------------------------------*/
static u8_t
file_stats(u8_t next)
{
/* We use sprintf() to print the number of file accesses to a
particular file (given as an argument to the function in the
script). We then use uip_send() to actually send the data. */
if(next) {
return 1;
}
uip_send(uip_appdata, sprintf((char *)uip_appdata, "%5u", fs_count(&hs->script[4])));
return 0;
}
/*-----------------------------------------------------------------------------------*/
static u8_t
tcp_stats(u8_t next)
{
struct uip_conn *conn;
 
if(next) {
/* If the previously sent data has been acknowledged, we move
forward one connection. */
if(++hs->count == UIP_CONNS) {
/* If all connections has been printed out, we are done and
return 1. */
return 1;
}
}
conn = &uip_conns[hs->count];
if((conn->tcpstateflags & TS_MASK) == CLOSED) {
uip_send(uip_appdata, sprintf((char *)uip_appdata,
"<tr align=\"center\"><td>-</td><td>-</td><td>%u</td><td>%u</td><td>%c %c</td></tr>\r\n",
conn->nrtx,
conn->timer,
(uip_outstanding(conn))? '*':' ',
(uip_stopped(conn))? '!':' '));
} else {
uip_send(uip_appdata, sprintf((char *)uip_appdata,
"<tr align=\"center\"><td>%u.%u.%u.%u:%u</td><td>%s</td><td>%u</td><td>%u</td><td>%c %c</td></tr>\r\n",
htons(conn->ripaddr[0]) >> 8,
htons(conn->ripaddr[0]) & 0xff,
htons(conn->ripaddr[1]) >> 8,
htons(conn->ripaddr[1]) & 0xff,
htons(conn->rport),
states[conn->tcpstateflags & TS_MASK],
conn->nrtx,
conn->timer,
(uip_outstanding(conn))? '*':' ',
(uip_stopped(conn))? '!':' '));
}
return 0;
}
/*-----------------------------------------------------------------------------------*/
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/cgi.d
0,0 → 1,22
Utilities/uip/cgi.o: Utilities/uip/cgi.c Utilities/uip/uip.h \
Utilities/uip/uipopt.h Utilities/uip/httpd.h Utilities/uip/cgi.h \
Utilities/uip/fs.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/stdio.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/_ansi.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/newlib.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/config.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/machine/ieeefp.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/features.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/include/stddef.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/include/stdarg.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/reent.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/_ansi.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/_types.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/machine/_types.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/machine/_default_types.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/lock.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/types.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/machine/types.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/stdio.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/string.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/string.h
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/cgi.h
0,0 → 1,57
/**
* \addtogroup httpd
* @{
*/
 
/**
* \file
* HTTP script language header file.
* \author Adam Dunkels <adam@dunkels.com>
*/
 
/*
* Copyright (c) 2001, Adam Dunkels.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote
* products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This file is part of the uIP TCP/IP stack.
*
* $Id: cgi.h,v 1.3.2.4 2003/10/07 13:22:27 adam Exp $
*
*/
 
#ifndef __CGI_H__
#define __CGI_H__
 
typedef u8_t (* cgifunction)(u8_t next);
 
/**
* A table containing pointers to C functions that can be called from
* a web server script.
*/
extern cgifunction cgitab[];
 
#endif /* __CGI_H__ */
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/fs.c
0,0 → 1,155
/**
* \addtogroup httpd
* @{
*/
 
/**
* \file
* HTTP server read-only file system code.
* \author Adam Dunkels <adam@dunkels.com>
*
* A simple read-only filesystem.
*/
/*
* Copyright (c) 2001, Swedish Institute of Computer Science.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the Institute nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* This file is part of the lwIP TCP/IP stack.
*
* Author: Adam Dunkels <adam@sics.se>
*
* $Id: fs.c,v 1.7.2.3 2003/10/07 13:22:27 adam Exp $
*/
 
#include "uip.h"
#include "httpd.h"
#include "fs.h"
#include "fsdata.h"
 
#define NULL (void *)0
#include "fsdata.c"
 
#ifdef FS_STATISTICS
#if FS_STATISTICS == 1
static u16_t count[FS_NUMFILES];
#endif /* FS_STATISTICS */
#endif /* FS_STATISTICS */
 
/*-----------------------------------------------------------------------------------*/
static u8_t
fs_strcmp(const char *str1, const char *str2)
{
u8_t i;
i = 0;
loop:
 
if(str2[i] == 0 ||
str1[i] == '\r' ||
str1[i] == '\n') {
return 0;
}
 
if(str1[i] != str2[i]) {
return 1;
}
 
 
++i;
goto loop;
}
/*-----------------------------------------------------------------------------------*/
int
fs_open(const char *name, struct fs_file *file)
{
#ifdef FS_STATISTICS
#if FS_STATISTICS == 1
u16_t i = 0;
#endif /* FS_STATISTICS */
#endif /* FS_STATISTICS */
struct fsdata_file_noconst *f;
 
for(f = (struct fsdata_file_noconst *)FS_ROOT;
f != NULL;
f = (struct fsdata_file_noconst *)f->next) {
 
if(fs_strcmp(name, f->name) == 0) {
file->data = f->data;
file->len = f->len;
#ifdef FS_STATISTICS
#if FS_STATISTICS == 1
++count[i];
#endif /* FS_STATISTICS */
#endif /* FS_STATISTICS */
return 1;
}
#ifdef FS_STATISTICS
#if FS_STATISTICS == 1
++i;
#endif /* FS_STATISTICS */
#endif /* FS_STATISTICS */
 
}
return 0;
}
/*-----------------------------------------------------------------------------------*/
void
fs_init(void)
{
#ifdef FS_STATISTICS
#if FS_STATISTICS == 1
u16_t i;
for(i = 0; i < FS_NUMFILES; i++) {
count[i] = 0;
}
#endif /* FS_STATISTICS */
#endif /* FS_STATISTICS */
}
/*-----------------------------------------------------------------------------------*/
#ifdef FS_STATISTICS
#if FS_STATISTICS == 1
u16_t fs_count
(char *name)
{
struct fsdata_file_noconst *f;
u16_t i;
 
i = 0;
for(f = (struct fsdata_file_noconst *)FS_ROOT;
f != NULL;
f = (struct fsdata_file_noconst *)f->next) {
 
if(fs_strcmp(name, f->name) == 0) {
return count[i];
}
++i;
}
return 0;
}
#endif /* FS_STATISTICS */
#endif /* FS_STATISTICS */
/*-----------------------------------------------------------------------------------*/
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/fs.d
0,0 → 1,3
Utilities/uip/fs.o: Utilities/uip/fs.c Utilities/uip/uip.h \
Utilities/uip/uipopt.h Utilities/uip/httpd.h Utilities/uip/fs.h \
Utilities/uip/fsdata.h Utilities/uip/fsdata.c
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/fs.h
0,0 → 1,80
/**
* \addtogroup httpd
* @{
*/
 
/**
* \file
* HTTP server read-only file system header file.
* \author Adam Dunkels <adam@dunkels.com>
*/
/*
* Copyright (c) 2001, Swedish Institute of Computer Science.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the Institute nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* This file is part of the lwIP TCP/IP stack.
*
* Author: Adam Dunkels <adam@sics.se>
*
* $Id: fs.h,v 1.6.2.3 2003/10/07 13:22:27 adam Exp $
*/
#ifndef __FS_H__
#define __FS_H__
 
#include "uip.h"
 
/**
* An open file in the read-only file system.
*/
struct fs_file {
char *data; /**< The actual file data. */
int len; /**< The length of the file data. */
};
 
/**
* Open a file in the read-only file system.
*
* \param name The name of the file.
*
* \param file The file pointer, which must be allocated by caller and
* will be filled in by the function.
*/
int fs_open(const char *name, struct fs_file *file);
 
#ifdef FS_STATISTICS
#if FS_STATISTICS == 1
u16_t fs_count(char *name);
#endif /* FS_STATISTICS */
#endif /* FS_STATISTICS */
 
/**
* Initialize the read-only file system.
*/
void fs_init(void);
 
#endif /* __FS_H__ */
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/fsdata.c
0,0 → 1,4285
/*************************************************************************
fsdata.c generator for UIP0.9
Works with cc65 C compiler
Based on the work of Adam Dunkels <adam@dunkels.com>
The syntax has been left as-is, with respect to the perl version
Supports for a maximum of 2 levels directory and 999 files in each directory
For more information, please go to http://www.design4fpga.com
ALL RIGHTS RESERVED, COPYRIGHT APRIL 2006, DESIGN4FPGA
*************************************************************************/
 
/*************************************************************************
REDISTRIBUTION OF THIS PIECE OF SOFTWARE IN SOURCE OR AS A BINARY FILE IS PERMITTED IF AND ONLY IF
THE FOLLOWING RULES ARE OBSERVED:
 
1) THE REDISTRIBUTION FILE OR ARCHIVE SHOULD INCLUDE THIS README FILE AS WELL AS THE COPYRIGHT NOTICE.
 
BY USING THIS SOFTWARE, YOU ARE ACKNOWLEDGING THAT YOU HAVE READ AND AGREED WITH THE FOLLOWING
DISCLAIMER AND THE COPYRIGHT NOTICE ABOVE.
 
DISCLAIMER:
 
THIS PIECE OF SOFTWARE IS SUPPLIED ''AS IS'', WE (DESIGN4FPGA) SHALL NOT BE HELD RESPONSIBLE OR LIABLE
FOR ANY RESULTING EVENTS THAT MIGHT HAPPEN DURING THE USE OF THIS PROGRAM IN PARTICULAR:
 
1) THE LOSS OF INFORMATION DUE TO THE USE OR MISUSE OF FS_GENERATOR.EXE
2) THE LOSS OF BUSINESS, STOCKS, MONEY, PEOPLE AND LIVES OR ANY UNFORTUNATE CIRCUMSTANCE THAT MAY PREVAIL
AS A RESULT OF A SYSTEM FAILURE, DIRECTLY OR INDIRECTLY DUE TO THE USE OF FS_GENERATOR.EXE
*************************************************************************/
 
#include "fsdata.h"
static const char data_404_html[] = {
/* /404.html */
0x2f, 0x34, 0x30, 0x34, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0,
0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xd, 0xa, 0x20, 0x20,
0x3c, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x62, 0x67, 0x63, 0x6f,
0x6c, 0x6f, 0x72, 0x3d, 0x22, 0x77, 0x68, 0x69, 0x74, 0x65,
0x22, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x63,
0x65, 0x6e, 0x74, 0x65, 0x72, 0x3e, 0xd, 0xa, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x3c, 0x68, 0x31, 0x3e, 0x34, 0x30,
0x34, 0x20, 0x2d, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x6e,
0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x3c, 0x2f,
0x68, 0x31, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x3c, 0x68, 0x33, 0x3e, 0x47, 0x6f, 0x20, 0x3c, 0x61,
0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x22, 0x3e,
0x68, 0x65, 0x72, 0x65, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x69,
0x6e, 0x73, 0x74, 0x65, 0x61, 0x64, 0x2e, 0x3c, 0x2f, 0x68,
0x33, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f,
0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3e, 0xd, 0xa, 0x20,
0x20, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0xd, 0xa,
0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0};
 
static const char data_index_html[] = {
0x2f,0x53,0x54,0x4d,0x33,0x32,0x5f,0x48,
0x6f,0x6d,0x65,0x5f,0x57,0x65,0x62,0x73,
0x65,0x72,0x76,0x65,0x72,0x5f,0x44,0x65,
0x6d,0x6f,0x2e,0x68,0x74,0x6d,0x6c,0x00,0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x30,
0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
0x0a,0x53,0x65,0x72,0x76,0x65,0x72,0x3a,
0x20,0x75,0x49,0x50,0x2f,0x30,0x2e,0x39,
0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,
0x2f,0x64,0x75,0x6e,0x6b,0x65,0x6c,0x73,
0x2e,0x63,0x6f,0x6d,0x2f,0x61,0x64,0x61,
0x6d,0x2f,0x75,0x69,0x70,0x2f,0x29,0x0d,
0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,
0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,
0x65,0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,
0x0d,0x0a,0x0d,0x0a,0x3c,0x21,0x44,0x4f,
0x43,0x54,0x59,0x50,0x45,0x20,0x48,0x54,
0x4d,0x4c,0x20,0x50,0x55,0x42,0x4c,0x49,
0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57,0x33,
0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x48,
0x54,0x4d,0x4c,0x20,0x34,0x2e,0x30,0x20,
0x54,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,
0x6f,0x6e,0x61,0x6c,0x2f,0x2f,0x45,0x4e,
0x22,0x3e,0x0a,0x3c,0x68,0x74,0x6d,0x6c,
0x3e,0x3c,0x68,0x65,0x61,0x64,0x3e,0x3c,
0x21,0x2d,0x2d,0x20,0x73,0x61,0x76,0x65,
0x64,0x20,0x66,0x72,0x6f,0x6d,0x20,0x75,
0x72,0x6c,0x3d,0x28,0x30,0x30,0x34,0x39,
0x29,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,
0x31,0x39,0x32,0x2e,0x31,0x36,0x38,0x2e,
0x30,0x2e,0x38,0x2f,0x53,0x54,0x4d,0x33,
0x32,0x5f,0x48,0x6f,0x6d,0x65,0x5f,0x57,
0x65,0x62,0x73,0x65,0x72,0x76,0x65,0x72,
0x5f,0x44,0x65,0x6d,0x6f,0x2e,0x68,0x74,
0x6d,0x6c,0x20,0x2d,0x2d,0x3e,0x3c,0x74,
0x69,0x74,0x6c,0x65,0x3e,0x53,0x54,0x4d,
0x33,0x32,0x20,0x28,0x43,0x4f,0x52,0x54,
0x45,0x58,0x20,0x4d,0x33,0x29,0x20,0x2d,
0x20,0x33,0x32,0x2d,0x62,0x69,0x74,0x20,
0x4d,0x69,0x63,0x72,0x6f,0x63,0x6f,0x6e,
0x74,0x72,0x6f,0x6c,0x6c,0x65,0x72,0x73,
0x3c,0x2f,0x74,0x69,0x74,0x6c,0x65,0x3e,
0x0d,0x0a,0x3c,0x6d,0x65,0x74,0x61,0x20,
0x68,0x74,0x74,0x70,0x2d,0x65,0x71,0x75,
0x69,0x76,0x3d,0x22,0x43,0x6f,0x6e,0x74,
0x65,0x6e,0x74,0x2d,0x54,0x79,0x70,0x65,
0x22,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,
0x74,0x3d,0x22,0x74,0x65,0x78,0x74,0x2f,
0x68,0x74,0x6d,0x6c,0x3b,0x20,0x63,0x68,
0x61,0x72,0x73,0x65,0x74,0x3d,0x49,0x53,
0x4f,0x2d,0x38,0x38,0x35,0x39,0x2d,0x31,
0x22,0x3e,0x0d,0x0a,0x3c,0x6d,0x65,0x74,
0x61,0x20,0x68,0x74,0x74,0x70,0x2d,0x65,
0x71,0x75,0x69,0x76,0x3d,0x22,0x45,0x58,
0x50,0x49,0x52,0x45,0x53,0x22,0x20,0x63,
0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3d,0x22,
0x54,0x75,0x65,0x2c,0x20,0x30,0x39,0x20,
0x44,0x65,0x63,0x20,0x32,0x30,0x30,0x38,
0x20,0x30,0x30,0x3a,0x30,0x30,0x3a,0x30,
0x30,0x22,0x3e,0x0d,0x0a,0x3c,0x6d,0x65,
0x74,0x61,0x20,0x63,0x6f,0x6e,0x74,0x65,
0x6e,0x74,0x3d,0x22,0x44,0x4f,0x43,0x55,
0x4d,0x45,0x4e,0x54,0x22,0x20,0x6e,0x61,
0x6d,0x65,0x3d,0x22,0x52,0x45,0x53,0x4f,
0x55,0x52,0x43,0x45,0x2d,0x54,0x59,0x50,
0x45,0x22,0x3e,0x0d,0x0a,0x3c,0x6d,0x65,
0x74,0x61,0x20,0x63,0x6f,0x6e,0x74,0x65,
0x6e,0x74,0x3d,0x22,0x47,0x4c,0x4f,0x42,
0x41,0x4c,0x22,0x20,0x6e,0x61,0x6d,0x65,
0x3d,0x22,0x44,0x49,0x53,0x54,0x52,0x49,
0x42,0x55,0x54,0x49,0x4f,0x4e,0x22,0x3e,
0x0d,0x0a,0x3c,0x6d,0x65,0x74,0x61,0x20,
0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3d,
0x22,0x53,0x54,0x4d,0x69,0x63,0x72,0x6f,
0x65,0x6c,0x65,0x63,0x74,0x72,0x6f,0x6e,
0x69,0x63,0x73,0x22,0x20,0x6e,0x61,0x6d,
0x65,0x3d,0x22,0x41,0x55,0x54,0x48,0x4f,
0x52,0x22,0x3e,0x0d,0x0a,0x3c,0x6d,0x65,
0x74,0x61,0x20,0x63,0x6f,0x6e,0x74,0x65,
0x6e,0x74,0x3d,0x22,0x43,0x6f,0x70,0x79,
0x72,0x69,0x67,0x68,0x74,0x20,0x28,0x63,
0x29,0x20,0x62,0x79,0x20,0x53,0x54,0x4d,
0x69,0x63,0x72,0x6f,0x65,0x6c,0x65,0x63,
0x74,0x72,0x6f,0x6e,0x69,0x63,0x73,0x22,
0x20,0x6e,0x61,0x6d,0x65,0x3d,0x22,0x43,
0x4f,0x50,0x59,0x52,0x49,0x47,0x48,0x54,
0x22,0x3e,0x0d,0x0a,0x3c,0x6d,0x65,0x74,
0x61,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,
0x74,0x3d,0x22,0x50,0x72,0x6f,0x64,0x75,
0x63,0x74,0x20,0x44,0x6f,0x6d,0x61,0x69,
0x6e,0x22,0x20,0x6e,0x61,0x6d,0x65,0x3d,
0x22,0x57,0x54,0x2e,0x63,0x67,0x5f,0x6e,
0x22,0x3e,0x0d,0x0a,0x3c,0x6d,0x65,0x74,
0x61,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,
0x74,0x3d,0x22,0x4d,0x69,0x63,0x72,0x6f,
0x63,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x6c,
0x65,0x72,0x73,0x22,0x20,0x6e,0x61,0x6d,
0x65,0x3d,0x22,0x57,0x54,0x2e,0x63,0x67,
0x5f,0x73,0x22,0x3e,0x0d,0x0a,0x3c,0x6d,
0x65,0x74,0x61,0x20,0x63,0x6f,0x6e,0x74,
0x65,0x6e,0x74,0x3d,0x22,0x6d,0x69,0x63,
0x72,0x6f,0x63,0x6f,0x6e,0x74,0x72,0x6f,
0x6c,0x6c,0x65,0x72,0x2c,0x20,0x4d,0x43,
0x55,0x2c,0x20,0x41,0x52,0x4d,0x20,0x4d,
0x43,0x55,0x2c,0x20,0x33,0x32,0x2d,0x62,
0x69,0x74,0x20,0x6d,0x69,0x63,0x72,0x6f,
0x63,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x6c,
0x65,0x72,0x2c,0x20,0x53,0x54,0x4d,0x33,
0x32,0x2c,0x20,0x41,0x52,0x4d,0x20,0x6d,
0x69,0x63,0x72,0x6f,0x63,0x6f,0x6e,0x74,
0x72,0x6f,0x6c,0x6c,0x65,0x72,0x2c,0x20,
0x65,0x6d,0x62,0x65,0x64,0x64,0x65,0x64,
0x2c,0x20,0x65,0x6d,0x75,0x6c,0x61,0x74,
0x6f,0x72,0x2c,0x20,0x73,0x74,0x61,0x72,
0x74,0x65,0x72,0x20,0x6b,0x69,0x74,0x2c,
0x20,0x6d,0x69,0x70,0x73,0x2c,0x20,0x66,
0x6c,0x61,0x73,0x68,0x20,0x4d,0x43,0x55,
0x2c,0x20,0x43,0x20,0x63,0x6f,0x6d,0x70,
0x69,0x6c,0x65,0x72,0x2c,0x20,0x70,0x72,
0x6f,0x67,0x72,0x61,0x6d,0x6d,0x65,0x72,
0x2c,0x20,0x55,0x53,0x42,0x2c,0x20,0x63,
0x6f,0x72,0x74,0x65,0x78,0x2d,0x6d,0x33,
0x2c,0x20,0x33,0x2d,0x70,0x68,0x61,0x73,
0x65,0x20,0x6d,0x6f,0x74,0x6f,0x72,0x20,
0x64,0x72,0x69,0x76,0x65,0x2c,0x20,0x43,
0x41,0x4e,0x2c,0x20,0x54,0x68,0x75,0x6d,
0x62,0x2d,0x32,0x22,0x20,0x6e,0x61,0x6d,
0x65,0x3d,0x22,0x4b,0x45,0x59,0x57,0x4f,
0x52,0x44,0x53,0x22,0x3e,0x0d,0x0a,0x3c,
0x6d,0x65,0x74,0x61,0x20,0x63,0x6f,0x6e,
0x74,0x65,0x6e,0x74,0x3d,0x22,0x53,0x54,
0x4d,0x33,0x32,0x20,0x28,0x43,0x4f,0x52,
0x54,0x45,0x58,0x20,0x4d,0x33,0x29,0x20,
0x2d,0x20,0x33,0x32,0x2d,0x62,0x69,0x74,
0x20,0x4d,0x69,0x63,0x72,0x6f,0x63,0x6f,
0x6e,0x74,0x72,0x6f,0x6c,0x6c,0x65,0x72,
0x73,0x20,0x53,0x54,0x4d,0x69,0x63,0x72,
0x6f,0x65,0x6c,0x65,0x63,0x74,0x72,0x6f,
0x6e,0x69,0x63,0x73,0x22,0x20,0x6e,0x61,
0x6d,0x65,0x3d,0x22,0x44,0x45,0x53,0x43,
0x52,0x49,0x50,0x54,0x49,0x4f,0x4e,0x22,
0x3e,0x0d,0x0a,0x3c,0x6d,0x65,0x74,0x61,
0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,
0x3d,0x22,0x49,0x4e,0x44,0x45,0x58,0x2c,
0x20,0x46,0x4f,0x4c,0x4c,0x4f,0x57,0x22,
0x20,0x6e,0x61,0x6d,0x65,0x3d,0x22,0x52,
0x4f,0x42,0x4f,0x54,0x53,0x22,0x3e,0x0d,
0x0a,0x3c,0x6d,0x65,0x74,0x61,0x20,0x63,
0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3d,0x22,
0x31,0x20,0x44,0x41,0x59,0x53,0x22,0x20,
0x6e,0x61,0x6d,0x65,0x3d,0x22,0x52,0x45,
0x56,0x49,0x53,0x49,0x54,0x2d,0x41,0x46,
0x54,0x45,0x52,0x22,0x3e,0x0d,0x0a,0x3c,
0x6d,0x65,0x74,0x61,0x20,0x63,0x6f,0x6e,
0x74,0x65,0x6e,0x74,0x3d,0x22,0x47,0x45,
0x4e,0x45,0x52,0x41,0x4c,0x22,0x20,0x6e,
0x61,0x6d,0x65,0x3d,0x22,0x52,0x41,0x54,
0x49,0x4e,0x47,0x22,0x3e,0x3c,0x6c,0x69,
0x6e,0x6b,0x20,0x68,0x72,0x65,0x66,0x3d,
0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,
0x77,0x77,0x77,0x2e,0x73,0x74,0x2e,0x63,
0x6f,0x6d,0x2f,0x6d,0x63,0x75,0x2f,0x66,
0x61,0x76,0x69,0x63,0x6f,0x6e,0x2e,0x69,
0x63,0x6f,0x22,0x20,0x72,0x65,0x6c,0x3d,
0x22,0x53,0x48,0x4f,0x52,0x54,0x43,0x55,
0x54,0x20,0x49,0x43,0x4f,0x4e,0x22,0x3e,
0x0d,0x0a,0x3c,0x6d,0x65,0x74,0x61,0x20,
0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3d,
0x22,0x4d,0x53,0x48,0x54,0x4d,0x4c,0x20,
0x36,0x2e,0x30,0x30,0x2e,0x32,0x38,0x30,
0x30,0x2e,0x31,0x35,0x36,0x31,0x22,0x20,
0x6e,0x61,0x6d,0x65,0x3d,0x22,0x47,0x45,
0x4e,0x45,0x52,0x41,0x54,0x4f,0x52,0x22,
0x3e,0x3c,0x6c,0x69,0x6e,0x6b,0x20,0x74,
0x69,0x74,0x6c,0x65,0x3d,0x22,0x52,0x53,
0x53,0x22,0x20,0x68,0x72,0x65,0x66,0x3d,
0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,
0x77,0x77,0x77,0x2e,0x73,0x74,0x2e,0x63,
0x6f,0x6d,0x2f,0x6d,0x63,0x75,0x2f,0x62,
0x61,0x63,0x6b,0x65,0x6e,0x64,0x2e,0x70,
0x68,0x70,0x22,0x20,0x74,0x79,0x70,0x65,
0x3d,0x22,0x61,0x70,0x70,0x6c,0x69,0x63,
0x61,0x74,0x69,0x6f,0x6e,0x2f,0x72,0x73,
0x73,0x2b,0x78,0x6d,0x6c,0x22,0x20,0x72,
0x65,0x6c,0x3d,0x22,0x61,0x6c,0x74,0x65,
0x72,0x6e,0x61,0x74,0x65,0x22,0x3e,0x3c,
0x2f,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,
0x3c,0x62,0x6f,0x64,0x79,0x20,0x73,0x74,
0x79,0x6c,0x65,0x3d,0x22,0x63,0x6f,0x6c,
0x6f,0x72,0x3a,0x20,0x72,0x67,0x62,0x28,
0x30,0x2c,0x20,0x30,0x2c,0x20,0x30,0x29,
0x3b,0x20,0x62,0x61,0x63,0x6b,0x67,0x72,
0x6f,0x75,0x6e,0x64,0x2d,0x63,0x6f,0x6c,
0x6f,0x72,0x3a,0x20,0x72,0x67,0x62,0x28,
0x32,0x35,0x35,0x2c,0x20,0x32,0x35,0x35,
0x2c,0x20,0x32,0x35,0x35,0x29,0x3b,0x22,
0x20,0x6f,0x6e,0x6c,0x6f,0x61,0x64,0x3d,
0x22,0x62,0x72,0x65,0x61,0x6b,0x4f,0x75,
0x74,0x28,0x29,0x22,0x20,0x61,0x6c,0x69,
0x6e,0x6b,0x3d,0x22,0x23,0x64,0x35,0x61,
0x65,0x38,0x33,0x22,0x20,0x6c,0x69,0x6e,
0x6b,0x3d,0x22,0x23,0x33,0x36,0x33,0x36,
0x33,0x36,0x22,0x20,0x76,0x6c,0x69,0x6e,
0x6b,0x3d,0x22,0x23,0x33,0x36,0x33,0x36,
0x33,0x36,0x22,0x3e,0x0d,0x0a,0x3c,0x74,
0x61,0x62,0x6c,0x65,0x20,0x73,0x74,0x79,
0x6c,0x65,0x3d,0x22,0x77,0x69,0x64,0x74,
0x68,0x3a,0x20,0x31,0x30,0x38,0x30,0x70,
0x78,0x3b,0x20,0x68,0x65,0x69,0x67,0x68,
0x74,0x3a,0x20,0x31,0x32,0x31,0x70,0x78,
0x3b,0x22,0x20,0x61,0x6c,0x69,0x67,0x6e,
0x3d,0x22,0x63,0x65,0x6e,0x74,0x65,0x72,
0x22,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,
0x3d,0x22,0x30,0x22,0x20,0x63,0x65,0x6c,
0x6c,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,
0x3d,0x22,0x30,0x22,0x20,0x63,0x65,0x6c,
0x6c,0x73,0x70,0x61,0x63,0x69,0x6e,0x67,
0x3d,0x22,0x30,0x22,0x3e,0x0d,0x0a,0x20,
0x20,0x3c,0x74,0x62,0x6f,0x64,0x79,0x3e,
0x0d,0x0a,0x20,0x20,0x3c,0x74,0x72,0x3e,
0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x74,
0x64,0x3e,0x3c,0x66,0x6f,0x6e,0x74,0x20,
0x73,0x69,0x7a,0x65,0x3d,0x22,0x2d,0x31,
0x22,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,
0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,
0x2f,0x2f,0x77,0x77,0x77,0x2e,0x73,0x74,
0x2e,0x63,0x6f,0x6d,0x2f,0x73,0x74,0x6f,
0x6e,0x6c,0x69,0x6e,0x65,0x2f,0x69,0x6e,
0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x22,
0x3e,0x3c,0x69,0x6d,0x67,0x20,0x61,0x6c,
0x74,0x3d,0x22,0x22,0x20,0x73,0x74,0x79,
0x6c,0x65,0x3d,0x22,0x62,0x6f,0x72,0x64,
0x65,0x72,0x3a,0x20,0x30,0x70,0x78,0x20,
0x73,0x6f,0x6c,0x69,0x64,0x20,0x3b,0x20,
0x77,0x69,0x64,0x74,0x68,0x3a,0x20,0x31,
0x30,0x37,0x30,0x70,0x78,0x3b,0x20,0x68,
0x65,0x69,0x67,0x68,0x74,0x3a,0x20,0x35,
0x38,0x70,0x78,0x3b,0x22,0x20,0x73,0x72,
0x63,0x3d,0x22,0x53,0x54,0x4d,0x33,0x32,
0x5f,0x48,0x6f,0x6d,0x65,0x5f,0x57,0x65,
0x62,0x73,0x65,0x72,0x76,0x65,0x72,0x5f,
0x44,0x65,0x6d,0x6f,0x5f,0x66,0x69,0x6c,
0x65,0x73,0x2f,0x73,0x74,0x37,0x36,0x36,
0x2e,0x67,0x69,0x66,0x22,0x3e,0x3c,0x2f,
0x61,0x3e,0x3c,0x2f,0x66,0x6f,0x6e,0x74,
0x3e,0x3c,0x2f,0x74,0x64,0x3e,0x3c,0x74,
0x64,0x3e,0x3c,0x2f,0x74,0x64,0x3e,0x3c,
0x2f,0x74,0x72,0x3e,0x0d,0x0a,0x20,0x20,
0x3c,0x74,0x72,0x3e,0x0d,0x0a,0x20,0x20,
0x20,0x20,0x3c,0x74,0x64,0x20,0x61,0x6c,
0x69,0x67,0x6e,0x3d,0x22,0x72,0x69,0x67,
0x68,0x74,0x22,0x20,0x76,0x61,0x6c,0x69,
0x67,0x6e,0x3d,0x22,0x74,0x6f,0x70,0x22,
0x3e,0x3c,0x66,0x6f,0x6e,0x74,0x20,0x73,
0x69,0x7a,0x65,0x3d,0x22,0x2d,0x31,0x22,
0x3e,0x3c,0x62,0x72,0x3e,0x3c,0x2f,0x66,
0x6f,0x6e,0x74,0x3e,0x3c,0x2f,0x74,0x64,
0x3e,0x3c,0x74,0x64,0x3e,0x3c,0x2f,0x74,
0x64,0x3e,0x3c,0x2f,0x74,0x72,0x3e,0x0d,
0x0a,0x20,0x20,0x3c,0x74,0x72,0x3e,0x0d,
0x0a,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,
0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,
0x74,0x65,0x78,0x74,0x2d,0x61,0x6c,0x69,
0x67,0x6e,0x3a,0x20,0x63,0x65,0x6e,0x74,
0x65,0x72,0x3b,0x22,0x3e,0x0d,0x0a,0x20,
0x20,0x20,0x20,0x20,0x20,0x0d,0x0a,0x3c,
0x68,0x31,0x20,0x73,0x74,0x79,0x6c,0x65,
0x3d,0x22,0x6d,0x61,0x72,0x67,0x69,0x6e,
0x2d,0x74,0x6f,0x70,0x3a,0x20,0x31,0x25,
0x3b,0x20,0x6d,0x61,0x72,0x67,0x69,0x6e,
0x2d,0x6c,0x65,0x66,0x74,0x3a,0x20,0x34,
0x30,0x70,0x78,0x3b,0x22,0x3e,0x0d,0x0a,
0x0d,0x0a,0x3c,0x73,0x70,0x61,0x6e,0x20,
0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,0x66,
0x6f,0x6e,0x74,0x2d,0x73,0x69,0x7a,0x65,
0x3a,0x20,0x31,0x36,0x70,0x74,0x3b,0x20,
0x66,0x6f,0x6e,0x74,0x2d,0x66,0x61,0x6d,
0x69,0x6c,0x79,0x3a,0x20,0x41,0x72,0x69,
0x61,0x6c,0x3b,0x22,0x3e,0x53,0x54,0x4d,
0x69,0x63,0x72,0x6f,0x65,0x6c,0x65,0x63,
0x74,0x72,0x6f,0x6e,0x69,0x63,0x73,0x0d,
0x0a,0x44,0x65,0x6c,0x69,0x76,0x65,0x72,
0x73,0x20,0x53,0x54,0x4d,0x33,0x32,0x20,
0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x69,
0x76,0x69,0x74,0x79,0x20,0x4c,0x69,0x6e,
0x65,0x20,0x4d,0x69,0x63,0x72,0x6f,0x63,
0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x6c,0x65,
0x72,0x73,0x20,0x26,0x6e,0x62,0x73,0x70,
0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,0x3b,
0x20,0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,
0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,
0x6e,0x62,0x73,0x70,0x3b,0x26,0x6e,0x62,
0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,
0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,
0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,0x3b,
0x0d,0x0a,0x26,0x6e,0x62,0x73,0x70,0x3b,
0x20,0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,
0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,
0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,
0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,
0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,
0x70,0x3b,0x26,0x6e,0x62,0x73,0x70,0x3b,
0x20,0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,
0x26,0x6e,0x62,0x73,0x70,0x3b,0x0d,0x0a,
0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,
0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,
0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,
0x73,0x70,0x3b,0x3c,0x2f,0x73,0x70,0x61,
0x6e,0x3e,0x3c,0x2f,0x68,0x31,0x3e,0x3c,
0x2f,0x74,0x64,0x3e,0x3c,0x74,0x64,0x3e,
0x3c,0x2f,0x74,0x64,0x3e,0x3c,0x2f,0x74,
0x72,0x3e,0x3c,0x2f,0x74,0x62,0x6f,0x64,
0x79,0x3e,0x3c,0x2f,0x74,0x61,0x62,0x6c,
0x65,0x3e,0x0d,0x0a,0x3c,0x74,0x61,0x62,
0x6c,0x65,0x20,0x73,0x74,0x79,0x6c,0x65,
0x3d,0x22,0x6d,0x61,0x72,0x67,0x69,0x6e,
0x2d,0x6c,0x65,0x66,0x74,0x3a,0x20,0x61,
0x75,0x74,0x6f,0x3b,0x20,0x6d,0x61,0x72,
0x67,0x69,0x6e,0x2d,0x72,0x69,0x67,0x68,
0x74,0x3a,0x20,0x61,0x75,0x74,0x6f,0x3b,
0x20,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,
0x75,0x6e,0x64,0x2d,0x63,0x6f,0x6c,0x6f,
0x72,0x3a,0x20,0x72,0x67,0x62,0x28,0x32,
0x35,0x35,0x2c,0x20,0x32,0x35,0x35,0x2c,
0x20,0x32,0x35,0x35,0x29,0x3b,0x20,0x74,
0x65,0x78,0x74,0x2d,0x61,0x6c,0x69,0x67,
0x6e,0x3a,0x20,0x6c,0x65,0x66,0x74,0x3b,
0x20,0x77,0x69,0x64,0x74,0x68,0x3a,0x20,
0x31,0x30,0x38,0x32,0x70,0x78,0x3b,0x20,
0x68,0x65,0x69,0x67,0x68,0x74,0x3a,0x20,
0x35,0x30,0x31,0x70,0x78,0x3b,0x22,0x20,
0x62,0x6f,0x72,0x64,0x65,0x72,0x3d,0x22,
0x30,0x22,0x20,0x63,0x65,0x6c,0x6c,0x70,
0x61,0x64,0x64,0x69,0x6e,0x67,0x3d,0x22,
0x30,0x22,0x20,0x63,0x65,0x6c,0x6c,0x73,
0x70,0x61,0x63,0x69,0x6e,0x67,0x3d,0x22,
0x30,0x22,0x3e,0x0d,0x0a,0x20,0x20,0x3c,
0x74,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,
0x20,0x20,0x3c,0x74,0x72,0x20,0x76,0x61,
0x6c,0x69,0x67,0x6e,0x3d,0x22,0x74,0x6f,
0x70,0x22,0x3e,0x3c,0x2f,0x74,0x72,0x3e,
0x0d,0x0a,0x20,0x20,0x3c,0x74,0x72,0x20,
0x76,0x61,0x6c,0x69,0x67,0x6e,0x3d,0x22,
0x74,0x6f,0x70,0x22,0x3e,0x0d,0x0a,0x20,
0x20,0x20,0x20,0x3c,0x74,0x64,0x20,0x63,
0x6c,0x61,0x73,0x73,0x3d,0x22,0x74,0x65,
0x78,0x74,0x22,0x3e,0x0d,0x0a,0x20,0x20,
0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,
0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,
0x74,0x65,0x78,0x74,0x2d,0x61,0x6c,0x69,
0x67,0x6e,0x3a,0x20,0x63,0x65,0x6e,0x74,
0x65,0x72,0x3b,0x22,0x3e,0x3c,0x2f,0x64,
0x69,0x76,0x3e,0x0d,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x3c,0x74,0x61,0x62,0x6c,
0x65,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,
0x22,0x77,0x69,0x64,0x74,0x68,0x3a,0x20,
0x39,0x34,0x37,0x70,0x78,0x3b,0x20,0x68,
0x65,0x69,0x67,0x68,0x74,0x3a,0x20,0x32,
0x33,0x36,0x70,0x78,0x3b,0x22,0x20,0x62,
0x6f,0x72,0x64,0x65,0x72,0x3d,0x22,0x30,
0x22,0x20,0x63,0x65,0x6c,0x6c,0x70,0x61,
0x64,0x64,0x69,0x6e,0x67,0x3d,0x22,0x30,
0x22,0x20,0x63,0x65,0x6c,0x6c,0x73,0x70,
0x61,0x63,0x69,0x6e,0x67,0x3d,0x22,0x30,
0x22,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x3c,0x74,0x62,0x6f,
0x64,0x79,0x3e,0x0d,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x72,
0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,
0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,
0x74,0x65,0x78,0x74,0x2d,0x61,0x6c,0x69,
0x67,0x6e,0x3a,0x20,0x6c,0x65,0x66,0x74,
0x3b,0x22,0x3e,0x3c,0x64,0x69,0x76,0x20,
0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,0x74,
0x65,0x78,0x74,0x2d,0x61,0x6c,0x69,0x67,
0x6e,0x3a,0x20,0x63,0x65,0x6e,0x74,0x65,
0x72,0x3b,0x22,0x3e,0x0d,0x0a,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,
0x3c,0x64,0x6c,0x3e,0x3c,0x64,0x64,0x3e,
0x3c,0x66,0x6f,0x6e,0x74,0x20,0x73,0x69,
0x7a,0x65,0x3d,0x22,0x2d,0x31,0x22,0x3e,
0x3c,0x69,0x6d,0x67,0x20,0x73,0x74,0x79,
0x6c,0x65,0x3d,0x22,0x62,0x6f,0x72,0x64,
0x65,0x72,0x3a,0x20,0x30,0x70,0x78,0x20,
0x73,0x6f,0x6c,0x69,0x64,0x20,0x3b,0x20,
0x68,0x65,0x69,0x67,0x68,0x74,0x3a,0x20,
0x32,0x30,0x31,0x70,0x78,0x3b,0x20,0x77,
0x69,0x64,0x74,0x68,0x3a,0x20,0x32,0x35,
0x30,0x70,0x78,0x3b,0x22,0x20,0x61,0x6c,
0x74,0x3d,0x22,0x53,0x54,0x4d,0x33,0x32,
0x22,0x20,0x73,0x72,0x63,0x3d,0x22,0x53,
0x54,0x4d,0x33,0x32,0x5f,0x48,0x6f,0x6d,
0x65,0x5f,0x57,0x65,0x62,0x73,0x65,0x72,
0x76,0x65,0x72,0x5f,0x44,0x65,0x6d,0x6f,
0x5f,0x66,0x69,0x6c,0x65,0x73,0x2f,0x73,
0x74,0x6d,0x33,0x32,0x5f,0x65,0x78,0x74,
0x65,0x6e,0x64,0x73,0x2e,0x67,0x69,0x66,
0x22,0x20,0x61,0x6c,0x69,0x67,0x6e,0x3d,
0x22,0x74,0x6f,0x70,0x22,0x3e,0x3c,0x2f,
0x66,0x6f,0x6e,0x74,0x3e,0x3c,0x2f,0x64,
0x64,0x3e,0x3c,0x2f,0x64,0x6c,0x3e,0x3c,
0x64,0x6c,0x3e,0x3c,0x64,0x64,0x3e,0x3c,
0x2f,0x64,0x64,0x3e,0x3c,0x64,0x64,0x3e,
0x3c,0x2f,0x64,0x64,0x3e,0x3c,0x2f,0x64,
0x6c,0x3e,0x3c,0x62,0x72,0x3e,0x3c,0x2f,
0x74,0x64,0x3e,0x0d,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,
0x74,0x64,0x20,0x76,0x61,0x6c,0x69,0x67,
0x6e,0x3d,0x22,0x74,0x6f,0x70,0x22,0x20,
0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x35,
0x37,0x33,0x22,0x3e,0x0d,0x0a,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x61,
0x6c,0x69,0x67,0x6e,0x3d,0x22,0x6a,0x75,
0x73,0x74,0x69,0x66,0x79,0x22,0x3e,0x3c,
0x66,0x6f,0x6e,0x74,0x20,0x73,0x69,0x7a,
0x65,0x3d,0x22,0x2d,0x31,0x22,0x3e,0x3c,
0x62,0x72,0x3e,0x3c,0x62,0x72,0x3e,0x3c,
0x62,0x72,0x3e,0x3c,0x2f,0x66,0x6f,0x6e,
0x74,0x3e,0x54,0x68,0x69,0x73,0x20,0x64,
0x65,0x6d,0x6f,0x6e,0x73,0x74,0x72,0x61,
0x74,0x69,0x6f,0x6e,0x20,0x69,0x73,0x20,
0x61,0x6e,0x20,0x65,0x6d,0x62,0x65,0x64,
0x64,0x65,0x64,0x20,0x77,0x65,0x62,0x73,
0x65,0x72,0x76,0x65,0x72,0x20,0x66,0x6f,
0x72,0x20,0x53,0x54,0x4d,0x33,0x32,0x20,
0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x69,
0x76,0x69,0x74,0x79,0x20,0x4c,0x69,0x6e,
0x65,0x20,0x4d,0x69,0x63,0x72,0x6f,0x63,
0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x6c,0x65,
0x72,0x73,0x2e,0x3c,0x62,0x72,0x3e,0x49,
0x74,0x20,0x69,0x73,0x20,0x62,0x61,0x73,
0x65,0x64,0x20,0x6f,0x6e,0x20,0x75,0x49,
0x50,0x20,0x54,0x43,0x50,0x2f,0x49,0x50,
0x20,0x73,0x74,0x61,0x63,0x6b,0x20,0x76,
0x30,0x2e,0x39,0x20,0x61,0x6e,0x64,0x20,
0x66,0x65,0x61,0x74,0x75,0x72,0x65,0x73,
0x20,0x74,0x68,0x72,0x65,0x65,0x20,0x48,
0x54,0x4d,0x4c,0x20,0x70,0x61,0x67,0x65,
0x73,0x20,0x74,0x68,0x61,0x74,0x20,0x66,
0x6f,0x72,0x6d,0x20,0x61,0x20,0x63,0x6f,
0x6d,0x70,0x61,0x63,0x74,0x20,0x61,0x6e,
0x64,0x3c,0x62,0x72,0x3e,0x69,0x6e,0x74,
0x65,0x72,0x61,0x63,0x74,0x69,0x76,0x65,
0x20,0x77,0x65,0x62,0x73,0x65,0x72,0x76,
0x65,0x72,0x20,0x74,0x6f,0x20,0x69,0x6e,
0x74,0x65,0x72,0x61,0x63,0x74,0x20,0x77,
0x69,0x74,0x68,0x20,0x53,0x54,0x4d,0x33,
0x32,0x31,0x30,0x43,0x2d,0x45,0x56,0x41,
0x4c,0x20,0x62,0x6f,0x61,0x72,0x64,0x2e,
0x3c,0x62,0x72,0x3e,0x3c,0x62,0x72,0x3e,
0x59,0x6f,0x75,0x20,0x77,0x69,0x6c,0x6c,
0x20,0x62,0x65,0x20,0x61,0x62,0x6c,0x65,
0x20,0x74,0x6f,0x20,0x61,0x64,0x64,0x72,
0x65,0x73,0x73,0x20,0x0d,0x0a,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x74,0x68,0x65,0x26,0x6e,0x62,0x73,0x70,
0x3b,0x53,0x54,0x4d,0x33,0x32,0x31,0x30,
0x43,0x2d,0x45,0x56,0x41,0x4c,0x20,0x62,
0x6f,0x61,0x72,0x64,0x20,0x61,0x73,0x20,
0x61,0x20,0x77,0x65,0x62,0x20,0x70,0x61,
0x67,0x65,0x20,0x75,0x73,0x69,0x6e,0x67,
0x20,0x0d,0x0a,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x79,0x6f,0x75,
0x72,0x20,0x77,0x65,0x62,0x20,0x62,0x72,
0x6f,0x77,0x73,0x65,0x72,0x2c,0x20,0x61,
0x73,0x20,0x77,0x65,0x6c,0x6c,0x20,0x61,
0x73,0x20,0x63,0x6f,0x6e,0x74,0x72,0x6f,
0x6c,0x6c,0x69,0x6e,0x67,0x20,0x74,0x68,
0x65,0x20,0x66,0x6f,0x75,0x72,0x20,0x4c,
0x45,0x44,0x73,0x20,0x6f,0x6e,0x20,0x74,
0x68,0x65,0x20,0x0d,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62,
0x6f,0x61,0x72,0x64,0x20,0x74,0x68,0x72,
0x6f,0x75,0x67,0x68,0x20,0x74,0x68,0x65,
0x20,0x62,0x72,0x6f,0x77,0x73,0x65,0x72,
0x20,0x61,0x6e,0x64,0x20,0x66,0x69,0x6e,
0x61,0x6c,0x6c,0x79,0x20,0x79,0x6f,0x75,
0x20,0x77,0x69,0x6c,0x6c,0x20,0x62,0x65,
0x20,0x61,0x62,0x6c,0x65,0x20,0x74,0x6f,
0x20,0x67,0x65,0x74,0x20,0x0d,0x0a,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x63,0x6f,0x6e,0x74,0x69,0x6e,0x75,
0x6f,0x75,0x73,0x6c,0x79,0x2c,0x20,0x65,
0x61,0x63,0x68,0x20,0x31,0x73,0x65,0x63,
0x6f,0x6e,0x64,0x2c,0x26,0x6e,0x62,0x73,
0x70,0x3b,0x74,0x68,0x65,0x20,0x41,0x44,
0x43,0x20,0x43,0x68,0x61,0x6e,0x6e,0x65,
0x6c,0x31,0x34,0x20,0x63,0x6f,0x6e,0x76,
0x65,0x72,0x74,0x65,0x64,0x20,0x0d,0x0a,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x76,0x61,0x6c,0x75,0x65,0x20,
0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x65,
0x64,0x20,0x6f,0x6e,0x20,0x61,0x20,0x73,
0x74,0x61,0x74,0x75,0x73,0x20,0x62,0x61,
0x72,0x20,0x61,0x6c,0x73,0x6f,0x26,0x6e,
0x62,0x73,0x70,0x3b,0x69,0x6e,0x20,0x74,
0x68,0x65,0x20,0x77,0x65,0x62,0x20,0x70,
0x61,0x67,0x65,0x20,0x6f,0x66,0x20,0x0d,
0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x26,0x6e,0x62,0x73,0x70,
0x3b,0x79,0x6f,0x75,0x72,0x20,0x62,0x72,
0x6f,0x77,0x73,0x65,0x72,0x2e,0x3c,0x62,
0x72,0x3e,0x3c,0x62,0x72,0x3e,0x46,0x6f,
0x72,0x20,0x63,0x6f,0x6d,0x70,0x6c,0x65,
0x74,0x65,0x20,0x64,0x6f,0x63,0x75,0x6d,
0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,
0x20,0x6f,0x6e,0x20,0x53,0x54,0x4d,0x33,
0x32,0x20,0x28,0x43,0x4f,0x52,0x54,0x45,
0x58,0x20,0x4d,0x33,0x29,0x20,0x33,0x32,
0x2d,0x62,0x69,0x74,0x20,0x4d,0x69,0x63,
0x72,0x6f,0x63,0x6f,0x6e,0x74,0x72,0x6f,
0x6c,0x6c,0x65,0x72,0x73,0x20,0x70,0x6c,
0x61,0x74,0x66,0x6f,0x72,0x6d,0x20,0x76,
0x69,0x73,0x69,0x74,0x20,0x3c,0x61,0x20,
0x68,0x72,0x65,0x66,0x3d,0x22,0x68,0x74,
0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,
0x2e,0x73,0x74,0x2e,0x63,0x6f,0x6d,0x2f,
0x6d,0x63,0x75,0x2f,0x69,0x6e,0x63,0x68,
0x74,0x6d,0x6c,0x2d,0x70,0x61,0x67,0x65,
0x73,0x2d,0x73,0x74,0x6d,0x33,0x32,0x2e,
0x68,0x74,0x6d,0x6c,0x22,0x3e,0x77,0x77,
0x77,0x2e,0x73,0x74,0x2e,0x63,0x6f,0x6d,
0x2f,0x53,0x54,0x4d,0x33,0x32,0x3c,0x2f,
0x61,0x3e,0x3c,0x70,0x20,0x61,0x6c,0x69,
0x67,0x6e,0x3d,0x22,0x6a,0x75,0x73,0x74,
0x69,0x66,0x79,0x22,0x3e,0x3c,0x2f,0x70,
0x3e,0x3c,0x75,0x6c,0x3e,0x3c,0x2f,0x75,
0x6c,0x3e,0x3c,0x2f,0x64,0x69,0x76,0x3e,
0x3c,0x2f,0x74,0x64,0x3e,0x3c,0x2f,0x74,
0x72,0x3e,0x3c,0x2f,0x74,0x62,0x6f,0x64,
0x79,0x3e,0x3c,0x2f,0x74,0x61,0x62,0x6c,
0x65,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,
0x20,0x20,0x3c,0x74,0x61,0x62,0x6c,0x65,
0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,
0x77,0x69,0x64,0x74,0x68,0x3a,0x20,0x39,
0x34,0x35,0x70,0x78,0x3b,0x20,0x68,0x65,
0x69,0x67,0x68,0x74,0x3a,0x20,0x31,0x38,
0x33,0x70,0x78,0x3b,0x22,0x20,0x62,0x6f,
0x72,0x64,0x65,0x72,0x3d,0x22,0x30,0x22,
0x20,0x63,0x65,0x6c,0x6c,0x70,0x61,0x64,
0x64,0x69,0x6e,0x67,0x3d,0x22,0x33,0x22,
0x20,0x63,0x65,0x6c,0x6c,0x73,0x70,0x61,
0x63,0x69,0x6e,0x67,0x3d,0x22,0x30,0x22,
0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x3c,0x74,0x62,0x6f,0x64,
0x79,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x3c,0x74,0x72,0x3e,
0x0d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x3c,0x74,0x64,0x3e,
0x54,0x6f,0x20,0x73,0x65,0x6c,0x65,0x63,
0x74,0x20,0x6f,0x6e,0x65,0x20,0x6f,0x66,
0x20,0x74,0x68,0x65,0x20,0x74,0x77,0x6f,
0x20,0x70,0x61,0x72,0x74,0x73,0x20,0x6f,
0x66,0x20,0x0d,0x0a,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x68,
0x65,0x20,0x53,0x54,0x4d,0x33,0x32,0x20,
0x77,0x65,0x62,0x73,0x65,0x72,0x76,0x65,
0x72,0x20,0x64,0x65,0x6d,0x6f,0x2c,0x20,
0x70,0x6c,0x65,0x61,0x73,0x65,0x20,0x63,
0x6c,0x69,0x63,0x6b,0x20,0x6f,0x6e,0x20,
0x6f,0x6e,0x65,0x20,0x6f,0x66,0x20,0x74,
0x68,0x65,0x20,0x66,0x6f,0x6c,0x6c,0x6f,
0x77,0x69,0x6e,0x67,0x20,0x0d,0x0a,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x6c,0x69,0x6e,0x6b,0x73,0x3a,0x3c,
0x74,0x61,0x62,0x6c,0x65,0x20,0x73,0x74,
0x79,0x6c,0x65,0x3d,0x22,0x77,0x69,0x64,
0x74,0x68,0x3a,0x20,0x39,0x30,0x32,0x70,
0x78,0x3b,0x20,0x68,0x65,0x69,0x67,0x68,
0x74,0x3a,0x20,0x31,0x33,0x35,0x70,0x78,
0x3b,0x22,0x20,0x62,0x6f,0x72,0x64,0x65,
0x72,0x3d,0x22,0x30,0x22,0x20,0x63,0x65,
0x6c,0x6c,0x70,0x61,0x64,0x64,0x69,0x6e,
0x67,0x3d,0x22,0x33,0x22,0x20,0x63,0x65,
0x6c,0x6c,0x73,0x70,0x61,0x63,0x69,0x6e,
0x67,0x3d,0x22,0x30,0x22,0x3e,0x0d,0x0a,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,
0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x0d,0x0a,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x0d,0x0a,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x72,
0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x3c,0x74,0x64,0x3e,0x0d,
0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x3c,0x74,0x61,0x62,0x6c,
0x65,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,
0x22,0x68,0x65,0x69,0x67,0x68,0x74,0x3a,
0x20,0x32,0x31,0x70,0x78,0x3b,0x20,0x77,
0x69,0x64,0x74,0x68,0x3a,0x20,0x38,0x36,
0x30,0x70,0x78,0x3b,0x22,0x20,0x62,0x6f,
0x72,0x64,0x65,0x72,0x3d,0x22,0x30,0x22,
0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,
0x74,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x3c,0x74,0x72,0x3e,
0x0d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x3c,0x74,0x64,0x20,0x77,0x69,0x64,0x74,
0x68,0x3d,0x22,0x32,0x25,0x22,0x3e,0x0d,
0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x3c,0x75,0x6c,0x20,0x73,0x74,0x79,
0x6c,0x65,0x3d,0x22,0x6c,0x69,0x73,0x74,
0x2d,0x73,0x74,0x79,0x6c,0x65,0x2d,0x74,
0x79,0x70,0x65,0x3a,0x20,0x73,0x71,0x75,
0x61,0x72,0x65,0x3b,0x22,0x3e,0x0d,0x0a,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x2f,
0x6c,0x69,0x3e,0x3c,0x2f,0x75,0x6c,0x3e,
0x3c,0x2f,0x74,0x64,0x3e,0x0d,0x0a,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,
0x3e,0x3c,0x2f,0x74,0x64,0x3e,0x3c,0x74,
0x64,0x3e,0x3c,0x2f,0x74,0x64,0x3e,0x3c,
0x74,0x64,0x20,0x77,0x69,0x64,0x74,0x68,
0x3d,0x22,0x39,0x38,0x25,0x22,0x3e,0x3c,
0x66,0x6f,0x6e,0x74,0x20,0x73,0x69,0x7a,
0x65,0x3d,0x22,0x2d,0x31,0x22,0x3e,0x3c,
0x61,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,
0x22,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x74,
0x79,0x6c,0x65,0x3a,0x20,0x69,0x74,0x61,
0x6c,0x69,0x63,0x3b,0x22,0x20,0x68,0x72,
0x65,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,
0x3a,0x2f,0x2f,0x31,0x39,0x32,0x2e,0x31,
0x36,0x38,0x2e,0x30,0x2e,0x38,0x2f,0x53,
0x54,0x4d,0x33,0x32,0x5f,0x4c,0x45,0x44,
0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x3c,
0x62,0x69,0x67,0x3e,0x3c,0x62,0x69,0x67,
0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,
0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x72,
0x67,0x62,0x28,0x31,0x30,0x32,0x2c,0x20,
0x30,0x2c,0x20,0x32,0x30,0x34,0x29,0x3b,
0x22,0x3e,0x3c,0x73,0x70,0x61,0x6e,0x20,
0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,0x66,
0x6f,0x6e,0x74,0x2d,0x77,0x65,0x69,0x67,
0x68,0x74,0x3a,0x20,0x62,0x6f,0x6c,0x64,
0x3b,0x22,0x3e,0x53,0x54,0x4d,0x33,0x32,
0x20,0x4c,0x45,0x44,0x73,0x20,0x0d,0x0a,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x43,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x3c,
0x2f,0x73,0x70,0x61,0x6e,0x3e,0x3c,0x2f,
0x62,0x69,0x67,0x3e,0x3c,0x2f,0x62,0x69,
0x67,0x3e,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,
0x66,0x6f,0x6e,0x74,0x3e,0x20,0x0d,0x0a,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x3c,0x2f,0x74,0x64,0x3e,0x3c,
0x2f,0x74,0x72,0x3e,0x3c,0x2f,0x74,0x62,
0x6f,0x64,0x79,0x3e,0x3c,0x2f,0x74,0x61,
0x62,0x6c,0x65,0x3e,0x3c,0x66,0x6f,0x6e,
0x74,0x20,0x73,0x69,0x7a,0x65,0x3d,0x22,
0x2d,0x31,0x22,0x3e,0x26,0x6e,0x62,0x73,
0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,
0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,0x3b,
0x20,0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,
0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,
0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,
0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,
0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,
0x70,0x3b,0x20,0x3c,0x2f,0x66,0x6f,0x6e,
0x74,0x3e,0x26,0x6e,0x62,0x73,0x70,0x3b,
0x54,0x68,0x69,0x73,0x20,0x70,0x61,0x72,
0x74,0x20,0x6f,0x66,0x20,0x0d,0x0a,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x74,0x68,0x65,0x20,0x44,0x65,0x6d,
0x6f,0x20,0x69,0x73,0x26,0x6e,0x62,0x73,
0x70,0x3b,0x75,0x73,0x65,0x64,0x20,0x74,
0x6f,0x20,0x63,0x6f,0x6e,0x74,0x72,0x6f,
0x6c,0x20,0x74,0x68,0x65,0x20,0x34,0x20,
0x4c,0x45,0x44,0x73,0x20,0x6c,0x6f,0x63,
0x61,0x74,0x65,0x64,0x20,0x69,0x6e,0x20,
0x74,0x68,0x65,0x20,0x0d,0x0a,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x53,0x54,0x4d,0x33,0x32,0x31,0x30,0x43,
0x2d,0x45,0x56,0x41,0x4c,0x20,0x62,0x6f,
0x61,0x72,0x64,0x2e,0x3c,0x66,0x6f,0x6e,
0x74,0x20,0x73,0x69,0x7a,0x65,0x3d,0x22,
0x2d,0x31,0x22,0x3e,0x3c,0x62,0x72,0x3e,
0x3c,0x2f,0x66,0x6f,0x6e,0x74,0x3e,0x0d,
0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x3c,0x74,0x61,0x62,0x6c,
0x65,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,
0x22,0x77,0x69,0x64,0x74,0x68,0x3a,0x20,
0x38,0x36,0x31,0x70,0x78,0x3b,0x20,0x68,
0x65,0x69,0x67,0x68,0x74,0x3a,0x20,0x32,
0x32,0x70,0x78,0x3b,0x22,0x20,0x62,0x6f,
0x72,0x64,0x65,0x72,0x3d,0x22,0x30,0x22,
0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,
0x74,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x3c,0x74,0x72,0x3e,
0x0d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x3c,0x74,0x64,0x20,0x77,0x69,0x64,0x74,
0x68,0x3d,0x22,0x32,0x25,0x22,0x3e,0x0d,
0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x3c,0x75,0x6c,0x20,0x73,0x74,0x79,
0x6c,0x65,0x3d,0x22,0x6c,0x69,0x73,0x74,
0x2d,0x73,0x74,0x79,0x6c,0x65,0x2d,0x74,
0x79,0x70,0x65,0x3a,0x20,0x73,0x71,0x75,
0x61,0x72,0x65,0x3b,0x22,0x3e,0x0d,0x0a,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x2f,
0x6c,0x69,0x3e,0x3c,0x2f,0x75,0x6c,0x3e,
0x3c,0x2f,0x74,0x64,0x3e,0x0d,0x0a,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,
0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,
0x39,0x38,0x25,0x22,0x3e,0x3c,0x66,0x6f,
0x6e,0x74,0x20,0x73,0x69,0x7a,0x65,0x3d,
0x22,0x2d,0x31,0x22,0x3e,0x3c,0x61,0x20,
0x68,0x72,0x65,0x66,0x3d,0x22,0x68,0x74,
0x74,0x70,0x3a,0x2f,0x2f,0x31,0x39,0x32,
0x2e,0x31,0x36,0x38,0x2e,0x30,0x2e,0x38,
0x2f,0x53,0x54,0x4d,0x33,0x32,0x5f,0x53,
0x74,0x61,0x74,0x75,0x73,0x42,0x61,0x72,
0x2e,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x3c,
0x62,0x69,0x67,0x20,0x73,0x74,0x79,0x6c,
0x65,0x3d,0x22,0x66,0x6f,0x6e,0x74,0x2d,
0x73,0x74,0x79,0x6c,0x65,0x3a,0x20,0x69,
0x74,0x61,0x6c,0x69,0x63,0x3b,0x22,0x3e,
0x3c,0x62,0x69,0x67,0x20,0x73,0x74,0x79,
0x6c,0x65,0x3d,0x22,0x63,0x6f,0x6c,0x6f,
0x72,0x3a,0x20,0x72,0x67,0x62,0x28,0x31,
0x30,0x32,0x2c,0x20,0x30,0x2c,0x20,0x32,
0x30,0x34,0x29,0x3b,0x22,0x3e,0x3c,0x73,
0x70,0x61,0x6e,0x20,0x73,0x74,0x79,0x6c,
0x65,0x3d,0x22,0x66,0x6f,0x6e,0x74,0x2d,
0x77,0x65,0x69,0x67,0x68,0x74,0x3a,0x20,
0x62,0x6f,0x6c,0x64,0x3b,0x22,0x3e,0x53,
0x54,0x4d,0x33,0x32,0x20,0x41,0x44,0x43,
0x20,0x43,0x6f,0x6e,0x76,0x65,0x72,0x73,
0x69,0x6f,0x6e,0x20,0x53,0x74,0x61,0x74,
0x75,0x73,0x20,0x0d,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x42,0x61,0x72,
0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x3c,
0x2f,0x62,0x69,0x67,0x3e,0x3c,0x2f,0x62,
0x69,0x67,0x3e,0x3c,0x2f,0x61,0x3e,0x3c,
0x62,0x72,0x3e,0x3c,0x2f,0x66,0x6f,0x6e,
0x74,0x3e,0x3c,0x2f,0x74,0x64,0x3e,0x3c,
0x2f,0x74,0x72,0x3e,0x3c,0x2f,0x74,0x62,
0x6f,0x64,0x79,0x3e,0x3c,0x2f,0x74,0x61,
0x62,0x6c,0x65,0x3e,0x3c,0x66,0x6f,0x6e,
0x74,0x20,0x73,0x69,0x7a,0x65,0x3d,0x22,
0x2d,0x31,0x22,0x3e,0x26,0x6e,0x62,0x73,
0x70,0x3b,0x0d,0x0a,0x26,0x6e,0x62,0x73,
0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,
0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,0x3b,
0x20,0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,
0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,
0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,
0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,
0x73,0x70,0x3b,0x26,0x6e,0x62,0x73,0x70,
0x3b,0x3c,0x2f,0x66,0x6f,0x6e,0x74,0x3e,
0x54,0x68,0x69,0x73,0x20,0x70,0x61,0x72,
0x74,0x0d,0x0a,0x6f,0x66,0x20,0x74,0x68,
0x65,0x20,0x44,0x65,0x6d,0x6f,0x20,0x69,
0x73,0x26,0x6e,0x62,0x73,0x70,0x3b,0x75,
0x73,0x65,0x64,0x20,0x74,0x6f,0x20,0x67,
0x65,0x74,0x20,0x63,0x6f,0x6e,0x74,0x69,
0x6e,0x75,0x6f,0x75,0x73,0x6c,0x79,0x20,
0x74,0x68,0x65,0x20,0x41,0x44,0x43,0x20,
0x43,0x68,0x61,0x6e,0x6e,0x65,0x6c,0x20,
0x31,0x34,0x0d,0x0a,0x63,0x6f,0x6e,0x76,
0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x76,
0x61,0x6c,0x75,0x65,0x20,0x61,0x6e,0x64,
0x20,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,
0x20,0x69,0x74,0x20,0x6f,0x6e,0x20,0x61,
0x20,0x73,0x74,0x61,0x74,0x75,0x73,0x20,
0x62,0x61,0x72,0x2e,0x20,0x41,0x44,0x43,
0x20,0x43,0x68,0x61,0x6e,0x6e,0x65,0x6c,
0x20,0x31,0x34,0x20,0x26,0x6e,0x62,0x73,
0x70,0x3b,0x0d,0x0a,0x26,0x6e,0x62,0x73,
0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,
0x3b,0x69,0x73,0x20,0x63,0x6f,0x6e,0x6e,
0x65,0x63,0x74,0x65,0x64,0x20,0x74,0x6f,
0x20,0x74,0x68,0x65,0x20,0x61,0x6e,0x61,
0x6c,0x6f,0x67,0x20,0x69,0x6e,0x70,0x75,
0x74,0x20,0x6f,0x75,0x74,0x70,0x75,0x74,
0x65,0x64,0x20,0x62,0x79,0x20,0x74,0x68,
0x65,0x20,0x52,0x56,0x31,0x0d,0x0a,0x70,
0x6f,0x74,0x65,0x6e,0x74,0x69,0x6f,0x6d,
0x65,0x74,0x65,0x72,0x20,0x6c,0x6f,0x63,
0x61,0x74,0x65,0x64,0x20,0x69,0x6e,0x20,
0x74,0x68,0x65,0x20,0x53,0x54,0x4d,0x33,
0x32,0x31,0x30,0x43,0x2d,0x45,0x56,0x41,
0x4c,0x20,0x62,0x6f,0x61,0x72,0x64,0x2e,
0x3c,0x2f,0x74,0x64,0x3e,0x3c,0x2f,0x74,
0x72,0x3e,0x3c,0x2f,0x74,0x62,0x6f,0x64,
0x79,0x3e,0x3c,0x2f,0x74,0x61,0x62,0x6c,
0x65,0x3e,0x3c,0x2f,0x74,0x64,0x3e,0x3c,
0x2f,0x74,0x72,0x3e,0x3c,0x2f,0x74,0x62,
0x6f,0x64,0x79,0x3e,0x3c,0x2f,0x74,0x61,
0x62,0x6c,0x65,0x3e,0x3c,0x2f,0x74,0x64,
0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,
0x74,0x64,0x3e,0x3c,0x2f,0x74,0x64,0x3e,
0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x74,
0x64,0x20,0x63,0x6f,0x6c,0x73,0x70,0x61,
0x6e,0x3d,0x22,0x32,0x22,0x3e,0x3c,0x66,
0x6f,0x6e,0x74,0x20,0x73,0x69,0x7a,0x65,
0x3d,0x22,0x2d,0x31,0x22,0x3e,0x3c,0x62,
0x72,0x3e,0x3c,0x62,0x72,0x3e,0x3c,0x62,
0x72,0x3e,0x3c,0x2f,0x66,0x6f,0x6e,0x74,
0x3e,0x3c,0x2f,0x74,0x64,0x3e,0x3c,0x2f,
0x74,0x72,0x3e,0x3c,0x2f,0x74,0x62,0x6f,
0x64,0x79,0x3e,0x3c,0x2f,0x74,0x61,0x62,
0x6c,0x65,0x3e,0x3c,0x66,0x6f,0x6e,0x74,
0x20,0x73,0x69,0x7a,0x65,0x3d,0x22,0x2d,
0x31,0x22,0x3e,0x3c,0x73,0x70,0x61,0x6e,
0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,
0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x62,
0x6c,0x61,0x63,0x6b,0x3b,0x22,0x3e,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x3c,0x62,0x72,
0x3e,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,
0x3c,0x2f,0x66,0x6f,0x6e,0x74,0x3e,0x3c,
0x66,0x6f,0x6e,0x74,0x20,0x63,0x6c,0x61,
0x73,0x73,0x3d,0x22,0x66,0x6f,0x6f,0x74,
0x6d,0x73,0x67,0x22,0x3e,0x26,0x6e,0x62,
0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,
0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,
0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,0x3b,
0x20,0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,
0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,
0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,
0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,
0x73,0x70,0x3b,0x20,0x0d,0x0a,0x26,0x6e,
0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,
0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,
0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,
0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,0x3b,
0x20,0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,
0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,
0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,
0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,
0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,
0x70,0x3b,0x20,0x0d,0x0a,0x26,0x6e,0x62,
0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,
0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,
0x3b,0x3c,0x65,0x6d,0x3e,0x3c,0x2f,0x65,
0x6d,0x3e,0x20,0x0d,0x0a,0x3c,0x73,0x70,
0x61,0x6e,0x20,0x73,0x74,0x79,0x6c,0x65,
0x3d,0x22,0x63,0x6f,0x6c,0x6f,0x72,0x3a,
0x20,0x73,0x69,0x6c,0x76,0x65,0x72,0x3b,
0x22,0x3e,0x26,0x6e,0x62,0x73,0x70,0x3b,
0x20,0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,
0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,
0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,
0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,
0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,
0x70,0x3b,0x20,0x0d,0x0a,0x26,0x6e,0x62,
0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,
0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,
0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,0x3b,
0x20,0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,
0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,
0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,
0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,
0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,
0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,
0x3b,0x20,0x41,0x6c,0x6c,0x20,0x0d,0x0a,
0x72,0x69,0x67,0x68,0x74,0x73,0x20,0x72,
0x65,0x73,0x65,0x72,0x76,0x65,0x64,0x20,
0xa9,0x20,0x32,0x30,0x30,0x39,0x20,0x53,
0x54,0x4d,0x69,0x63,0x72,0x6f,0x65,0x6c,
0x65,0x63,0x74,0x72,0x6f,0x6e,0x69,0x63,
0x73,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,
0x26,0x6e,0x62,0x73,0x70,0x3b,0x3c,0x2f,
0x66,0x6f,0x6e,0x74,0x3e,0x20,0x3c,0x2f,
0x62,0x6f,0x64,0x79,0x3e,0x3c,0x2f,0x68,
0x74,0x6d,0x6c,0x3e,};
 
static const char data_STM32_Home_Webserver_Demo_files_st766_gif[] = {
0x2f,0x53,0x54,0x4d,0x33,0x32,0x5f,0x48,
0x6f,0x6d,0x65,0x5f,0x57,0x65,0x62,0x73,
0x65,0x72,0x76,0x65,0x72,0x5f,0x44,0x65,
0x6d,0x6f,0x5f,0x66,0x69,0x6c,0x65,0x73,
0x2f,0x73,0x74,0x37,0x36,0x36,0x2e,0x67,
0x69,0x66,0x00,0x48,0x54,0x54,0x50,0x2f,
0x31,0x2e,0x30,0x20,0x32,0x30,0x30,0x20,
0x4f,0x4b,0x0d,0x0a,0x53,0x65,0x72,0x76,
0x65,0x72,0x3a,0x20,0x75,0x49,0x50,0x2f,
0x30,0x2e,0x39,0x20,0x28,0x68,0x74,0x74,
0x70,0x3a,0x2f,0x2f,0x64,0x75,0x6e,0x6b,
0x65,0x6c,0x73,0x2e,0x63,0x6f,0x6d,0x2f,
0x61,0x64,0x61,0x6d,0x2f,0x75,0x69,0x70,
0x2f,0x29,0x0d,0x0a,0x43,0x6f,0x6e,0x74,
0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,
0x3a,0x20,0x69,0x6d,0x61,0x67,0x65,0x2f,
0x67,0x69,0x66,0x0d,0x0a,0x0d,0x0a,0x47,
0x49,0x46,0x38,0x39,0x61,0xfe,0x02,0x3a,
0x00,0xf7,0x00,0x00,0xff,0xff,0xff,0xf8,
0xfb,0xff,0xf6,0xfa,0xff,0xf7,0xf7,0xf7,
0xef,0xf6,0xfe,0xf2,0xf6,0xfa,0xef,0xef,
0xef,0xee,0xee,0xf7,0xe8,0xec,0xef,0xe6,
0xef,0xf8,0xe0,0xef,0xff,0xe6,0xe6,0xe6,
0xe2,0xe4,0xe7,0xd3,0xe5,0xf9,0xcd,0xe4,
0xfe,0xde,0xde,0xef,0xde,0xde,0xde,0xde,
0xe1,0xe5,0xd0,0xde,0xed,0xd8,0xde,0xe5,
0xbe,0xdd,0xfe,0xd6,0xd6,0xd6,0xcd,0xd5,
0xdf,0xc6,0xd3,0xe2,0xba,0xd7,0xf7,0xce,
0xce,0xe7,0xbd,0xd6,0xf2,0xcc,0xcc,0xcc,
0xad,0xd4,0xfe,0xbc,0xcd,0xdf,0xac,0xcf,
0xf6,0xc5,0xc5,0xc5,0x99,0xcc,0xff,0xaa,
0xc8,0xe9,0xa5,0xc9,0xf0,0xba,0xba,0xdd,
0x99,0xc6,0xf7,0xbd,0xbd,0xbd,0x8f,0xc4,
0xfe,0xa8,0xc0,0xda,0xb5,0xb5,0xb5,0x9a,
0xb8,0xd9,0x89,0xbb,0xf0,0x8f,0xba,0xe8,
0x81,0xbc,0xfc,0xaa,0xaa,0xd5,0xb1,0xb0,
0xb0,0xab,0xaa,0xaa,0x81,0xb1,0xe5,0x8c,
0xb0,0xd8,0x74,0xb5,0xfc,0x7b,0xb3,0xf0,
0x6c,0xb2,0xfd,0xa4,0xa4,0xa4,0x82,0xad,
0xdd,0x78,0xaa,0xe1,0x99,0x99,0xcc,0x6d,
0xae,0xf3,0x61,0xac,0xfc,0x78,0xa8,0xdb,
0x99,0x99,0x99,0x67,0xa7,0xec,0x6d,0xa6,
0xe4,0x59,0xa7,0xfc,0x6b,0x9e,0xd5,0x61,
0x9b,0xd9,0x57,0xa1,0xf0,0x4c,0xa1,0xfd,
0x8b,0x8b,0xc5,0x5c,0x9c,0xe2,0x43,0x9c,
0xfc,0x5e,0x98,0xd8,0x47,0x97,0xed,0x33,
0x99,0xff,0x56,0x94,0xd8,0x4b,0x93,0xe1,
0x41,0x96,0xf1,0x7c,0x7c,0xbe,0x4d,0x8d,
0xd4,0x33,0x99,0xff,0x39,0x89,0xe0,0x31,
0x8b,0xed,0x75,0x75,0xba,0x27,0x8d,0xfc,
0x2b,0x8a,0xf2,0x24,0x8c,0xfc,0x37,0x87,
0xdf,0x31,0x87,0xe4,0x6a,0x6a,0xb5,0x22,
0x87,0xf5,0x16,0x85,0xfc,0x12,0x82,0xfc,
0x32,0x7f,0xd3,0x65,0x65,0xb2,0x1b,0x7b,
0xe4,0x0a,0x7e,0xfc,0x0a,0x7b,0xf6,0x09,
0x78,0xef,0x19,0x72,0xd3,0x58,0x58,0xac,
0x13,0x74,0xdc,0x09,0x77,0xee,0x09,0x73,
0xe6,0x09,0x70,0xdf,0x0f,0x6e,0xd4,0x54,
0x54,0xaa,0x09,0x6e,0xdc,0x09,0x6b,0xd6,
0x4a,0x4a,0xa5,0x44,0x44,0xa2,0x44,0x44,
0x8f,0x3d,0x3d,0x9e,0x33,0x33,0x99,0x30,
0x30,0x83,0x20,0x20,0x90,0x20,0x20,0x79,
0x1a,0x1a,0x8f,0x10,0x10,0x88,0x10,0x10,
0x70,0x0c,0x0c,0x84,0x00,0x00,0x82,0x00,
0x00,0x7f,0x00,0x00,0x75,0x00,0x00,0x66,
0x00,0x00,0x56,0x00,0x00,0x43,0x00,0x00,
0x33,0x00,0x00,0x21,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
0x00,0xfe,0x02,0x3a,0x00,0x00,0x08,0xff,
0x00,0x01,0x08,0x1c,0x48,0xb0,0xa0,0xc1,
0x83,0x08,0x13,0x2a,0x5c,0xc8,0xb0,0xa1,
0xc3,0x87,0x10,0x23,0x4a,0x9c,0x48,0xb1,
0xa2,0xc5,0x8b,0x18,0x33,0x6a,0xdc,0xc8,
0xb1,0xa3,0xc7,0x8f,0x20,0x43,0x8a,0x1c,
0x49,0xb2,0xa4,0xc9,0x93,0x28,0x53,0xaa,
0x5c,0xc9,0xb2,0xa5,0xcb,0x97,0x30,0x63,
0xca,0x9c,0x49,0xb3,0xa6,0xcd,0x9b,0x38,
0x73,0xea,0xdc,0xc9,0xb3,0xa7,0xcf,0x9f,
0x40,0x83,0x0a,0x1d,0x4a,0xb4,0xa8,0xd1,
0xa3,0x48,0x93,0x2a,0x5d,0xca,0xb4,0xa9,
0xd3,0xa7,0x50,0xa3,0x4a,0x9d,0x4a,0xb5,
0xaa,0xd5,0xab,0x58,0xb3,0x6a,0xdd,0xca,
0xb5,0xab,0xd7,0xaf,0x60,0xc3,0x8a,0x1d,
0x4b,0xb6,0xac,0xd9,0xb3,0x68,0xd3,0xaa,
0x5d,0xcb,0xb6,0xad,0xdb,0xb7,0x70,0xe3,
0xca,0x9d,0x4b,0xb7,0xae,0xdd,0xbb,0x78,
0xf3,0xea,0xdd,0xcb,0xb7,0xaf,0xdf,0xbf,
0x80,0x1f,0x06,0x18,0x3c,0xa0,0xb0,0xe1,
0xc3,0x88,0x13,0x1b,0x1e,0x4c,0x58,0x71,
0x61,0xc6,0x01,0x02,0x4b,0x9e,0x4c,0xb9,
0x32,0xdb,0x00,0x86,0x2d,0x6b,0xde,0xcc,
0xb9,0xb3,0xc9,0x06,0x3e,0x42,0x8b,0x1e,
0x4d,0xba,0xb4,0xe9,0xd3,0xa5,0x45,0x0c,
0x80,0x00,0x61,0x40,0x64,0xcf,0xb0,0x63,
0xcb,0x9e,0xbd,0xb0,0xc8,0x9a,0x33,0x66,
0x72,0xeb,0xde,0xcd,0xbb,0xb7,0xef,0xdf,
0xbb,0x45,0x2c,0xd8,0x00,0xc1,0xc0,0x00,
0xda,0xc8,0x93,0x2b,0xb7,0xfc,0x80,0x8c,
0x99,0x30,0x60,0xa2,0x4b,0x9f,0x4e,0xbd,
0xba,0xf5,0xeb,0xd2,0xa7,0x00,0xa8,0xf0,
0xa1,0xf8,0xf1,0xe5,0xe0,0xc3,0x8b,0xff,
0xaf,0xeb,0x43,0x4d,0x98,0x2f,0xe8,0xd3,
0xab,0x5f,0xcf,0xbe,0xbd,0x7b,0xf5,0x2c,
0x06,0x7c,0xd8,0xb0,0xa0,0x30,0xed,0x05,
0x28,0x78,0xf0,0xa8,0x51,0x82,0x01,0x8a,
0xff,0x00,0xa2,0x60,0xc0,0x7f,0x0b,0x08,
0xb4,0xc1,0x7f,0x00,0x2c,0xc0,0x03,0x0a,
0x1b,0x55,0xc0,0x43,0x05,0x0e,0x0d,0x50,
0x01,0x84,0x15,0x29,0xc8,0xe0,0x78,0x18,
0x66,0xc8,0x50,0x02,0xce,0x81,0x81,0xde,
0x16,0x20,0x86,0x28,0xe2,0x88,0x24,0x96,
0x68,0xe2,0x16,0x55,0x24,0x00,0x41,0x09,
0x15,0xd4,0xf7,0x5d,0x6c,0x0a,0xf2,0xf0,
0x02,0x0a,0x35,0x3c,0xa8,0xdf,0x8d,0xfa,
0xc5,0xc8,0xe0,0x00,0x37,0x02,0x30,0xe0,
0x06,0x0d,0x3e,0xe8,0x90,0x85,0x16,0xfd,
0xa8,0xe1,0x91,0x48,0x12,0xb4,0x82,0x1a,
0x65,0x68,0xa1,0x03,0x07,0x0a,0x44,0x29,
0xe5,0x94,0x54,0x56,0x69,0xe5,0x95,0x51,
0xca,0xc7,0x22,0x02,0xf6,0xc9,0xe6,0x60,
0x0d,0xdf,0x55,0xf0,0x5d,0x7e,0x14,0xc6,
0xc8,0x83,0x01,0x1f,0xf4,0x68,0xe4,0x76,
0x2e,0xe8,0x57,0xc2,0x80,0x1f,0x54,0x20,
0xe0,0x80,0xfa,0x09,0x28,0x50,0x05,0x2f,
0xec,0x07,0xa1,0x83,0x10,0x0e,0xb0,0x41,
0x8d,0x2f,0x40,0x60,0x60,0x9e,0x35,0x54,
0xd0,0x66,0x0d,0x28,0x4c,0x98,0xe8,0x07,
0x0c,0xd2,0xb9,0xa0,0x01,0x00,0x1c,0xf8,
0x41,0x8d,0x28,0x0c,0xb0,0xa6,0xa1,0x6e,
0x6e,0x57,0xe3,0x82,0x49,0x76,0x2a,0x9b,
0x15,0x67,0x30,0xe1,0xc0,0x49,0xab,0xa1,
0xb0,0x41,0x04,0xc6,0xbd,0x16,0x9b,0x83,
0xfa,0xb9,0xf0,0x01,0xa4,0x02,0x91,0xff,
0x29,0x90,0x99,0x25,0x6c,0xca,0x43,0x82,
0x9c,0x42,0xb0,0xdf,0x06,0x69,0x9a,0xc9,
0xc3,0x02,0x79,0x96,0x50,0x82,0x8c,0x00,
0xe8,0xfa,0x42,0x05,0x35,0x2e,0xc0,0x67,
0xa4,0x0b,0x6e,0xb0,0x9f,0x9f,0x32,0xca,
0x89,0xc2,0xa1,0x89,0xb2,0xaa,0x1f,0x00,
0xc1,0x0e,0xfb,0x02,0x00,0xf9,0x21,0xaa,
0x5f,0x8b,0xb9,0xee,0x9a,0xa6,0x83,0x2e,
0x70,0x57,0x83,0xa7,0xe8,0x72,0xa6,0x81,
0x1a,0x42,0x10,0x40,0xea,0x02,0x8c,0xb6,
0xd8,0xe5,0x6c,0xce,0xe2,0x58,0x20,0xb7,
0x42,0xe2,0x8a,0x42,0x9e,0x3c,0xa4,0x79,
0x2b,0x91,0xc3,0x52,0x68,0x80,0x82,0x2e,
0xcc,0x4a,0x2c,0xb6,0xbf,0x0e,0xcb,0x22,
0x99,0xcb,0xd6,0xb8,0xc1,0x06,0x79,0x2e,
0x50,0xe3,0x77,0x03,0x73,0xba,0x1d,0x0f,
0x40,0xe2,0xba,0x2d,0xc2,0xf8,0xfd,0xca,
0x2c,0xb8,0x0c,0x06,0x2c,0x90,0x01,0x5f,
0xb2,0xf8,0x62,0xba,0x28,0x4b,0xb6,0xc4,
0x15,0x02,0xa0,0x64,0x00,0x04,0xae,0x7a,
0x77,0x32,0x6c,0x86,0x0d,0xf7,0x6d,0xac,
0xf9,0x5a,0xf8,0xa5,0xae,0xff,0x72,0x9a,
0xdf,0xbd,0xfa,0x1a,0x7c,0xe1,0xcf,0xf9,
0xb9,0x00,0xe0,0x84,0x42,0xd6,0x09,0xa0,
0x01,0xd7,0x0e,0x44,0xe4,0xc5,0x65,0x5a,
0x4c,0xb4,0xc7,0x7c,0x12,0xf9,0xf3,0x40,
0x03,0xe4,0xa7,0x1f,0x98,0x29,0x77,0xfd,
0x57,0x02,0x6a,0x60,0x80,0xd2,0x00,0x08,
0x1c,0x48,0x9f,0x71,0xc8,0xe1,0xd9,0x22,
0x04,0x35,0x52,0x28,0xab,0xbe,0x12,0x42,
0x10,0x63,0xd0,0x69,0x96,0x50,0x58,0x09,
0x4f,0xf3,0x78,0x26,0xd3,0x3c,0xc8,0xff,
0xc7,0x83,0xdd,0x12,0x22,0x0d,0x61,0x9e,
0x7d,0x6e,0x60,0x00,0xe1,0x09,0xd2,0xc7,
0x83,0x0b,0x85,0x2d,0x0b,0x80,0xde,0x06,
0xf0,0x9d,0x35,0xd5,0x0f,0x12,0x59,0xf7,
0xdd,0x13,0x0e,0x20,0xb1,0xc7,0x5e,0x77,
0xae,0x97,0x0f,0x57,0x18,0xe4,0xd8,0xe8,
0xf3,0x62,0x4d,0x3a,0x7e,0x25,0xc8,0x9c,
0x36,0x8e,0x0b,0x8e,0x99,0xb3,0xc5,0xb8,
0xf6,0xbc,0x23,0xbf,0x39,0xc2,0x5e,0xaf,
0x7e,0x40,0x0e,0x40,0xfb,0x83,0xcb,0xb2,
0x6d,0xaf,0xef,0x75,0xea,0xcd,0x7b,0xbe,
0xcc,0xde,0x08,0xe4,0xd5,0x55,0x73,0xaa,
0x3b,0x8e,0xd6,0x2e,0xee,0xf9,0xf3,0x77,
0x05,0x40,0xc6,0x0c,0x05,0x91,0x6d,0xc1,
0x05,0xd8,0x67,0xaf,0xfd,0xf6,0x17,0x48,
0x90,0x40,0x41,0x06,0x4c,0xc0,0xbd,0x04,
0x12,0x90,0xec,0xc2,0x06,0x0c,0xa4,0x9a,
0x1c,0xc9,0x13,0x02,0xed,0x63,0x7d,0x02,
0x69,0x0e,0xeb,0xe3,0x0b,0x14,0x28,0x7f,
0xfc,0x13,0x56,0x60,0xdc,0x02,0xf3,0x27,
0xd8,0x3e,0xd6,0xf9,0x6b,0x8d,0xe6,0xbe,
0x13,0xb8,0x16,0xe1,0x2f,0x73,0x8f,0x9b,
0x50,0xe4,0xe0,0xe7,0xb4,0xff,0xbd,0xef,
0x38,0x03,0xbc,0x5f,0x02,0x15,0xb8,0x9a,
0xfc,0x41,0xef,0x82,0x74,0x11,0x81,0x1a,
0x48,0x00,0x3e,0x1b,0xa0,0x01,0x0d,0x64,
0x08,0xa1,0x08,0x47,0x48,0x42,0x32,0x88,
0x80,0x20,0x9a,0x73,0x02,0x08,0x49,0x08,
0x05,0x34,0x6d,0xa9,0x74,0x18,0x8c,0xa1,
0x0c,0x67,0x18,0x11,0x28,0x9c,0x81,0x83,
0x04,0x31,0x80,0x12,0x98,0x14,0x86,0x1e,
0xfa,0xf0,0x87,0x40,0xa4,0x82,0xbb,0xff,
0x06,0x62,0x80,0x0e,0xac,0xc1,0x0c,0x65,
0x00,0x22,0x09,0xe0,0xe4,0x1d,0x55,0xd1,
0xf0,0x89,0x50,0x8c,0x22,0x00,0x24,0xa0,
0x06,0x33,0xc8,0xa0,0x7a,0x1a,0xf0,0x82,
0x87,0xde,0xb3,0x1e,0x10,0xa0,0x70,0x01,
0x47,0x30,0xcf,0x7a,0xb4,0x53,0x01,0x16,
0xb9,0x48,0x8a,0x68,0x4c,0x23,0x06,0x8b,
0x70,0x86,0x30,0x50,0xc1,0x89,0x02,0xd1,
0x40,0x16,0xb8,0xa8,0x9e,0x2a,0x0c,0x71,
0x64,0x16,0x10,0x83,0x19,0xb6,0x98,0x1e,
0x13,0x0c,0x40,0x58,0xaa,0x53,0xa3,0x20,
0x07,0x89,0x2e,0x0e,0xed,0x11,0x0c,0x1e,
0x38,0x48,0x03,0x98,0xc0,0xc7,0xf7,0xb0,
0xe0,0x8b,0x36,0x58,0x43,0x19,0xd6,0xa3,
0x05,0x02,0x44,0xc0,0x54,0xfc,0x9b,0x19,
0x21,0x37,0xc9,0x49,0xf0,0xc0,0x80,0x49,
0xe8,0xa1,0x42,0x01,0x0e,0x52,0x00,0x21,
0x34,0xb2,0x3d,0x0d,0x40,0x61,0x04,0xb8,
0x70,0x86,0x53,0xea,0x00,0x00,0x1f,0x78,
0xa1,0x26,0x3b,0x49,0xcb,0x5a,0x76,0x66,
0x00,0x57,0xd8,0x63,0x7a,0x72,0x80,0x10,
0x01,0xf4,0xe0,0x94,0xea,0x19,0x02,0xf8,
0x4e,0x20,0x49,0xf6,0x50,0x00,0x01,0xa6,
0x42,0x95,0x6b,0x6c,0xc9,0xcc,0x66,0x6a,
0x26,0x04,0xa0,0x4c,0x0f,0x18,0xa8,0x87,
0x90,0x19,0x00,0x13,0x3d,0x1c,0xf8,0xe2,
0x0e,0xcf,0xa3,0x9e,0x24,0x44,0x4a,0x96,
0xce,0x0c,0xa7,0x38,0xff,0xb2,0x84,0x36,
0xae,0x07,0x0c,0x2a,0x80,0xe3,0x40,0xac,
0xc9,0x9e,0x24,0xb4,0x8c,0x88,0x17,0x40,
0x83,0x2e,0xd5,0x03,0x82,0x3f,0x76,0x47,
0x7d,0xe3,0xcc,0xa7,0x3e,0xe9,0x42,0xff,
0xc5,0x79,0xaa,0x27,0x0c,0x33,0x50,0xa7,
0x40,0x7e,0xb9,0x1e,0x13,0x7c,0x71,0x07,
0x62,0xac,0xa3,0x00,0xca,0x28,0xaf,0x59,
0xee,0xf3,0xa1,0x10,0x35,0x4b,0x39,0xb9,
0xc9,0x9e,0x30,0xf4,0x60,0x94,0x06,0x39,
0xc0,0x15,0xf8,0xa8,0x05,0x05,0xe4,0x70,
0x02,0xac,0x3c,0xa5,0x0c,0x02,0x00,0x48,
0xe3,0x38,0x34,0xa2,0x28,0x4d,0xe9,0x56,
0x10,0x50,0xc5,0x6b,0xa2,0x07,0x0c,0x48,
0xc0,0x28,0x0a,0x43,0x30,0x49,0xf4,0xbc,
0x92,0x20,0x08,0x48,0x41,0x31,0xd7,0xa3,
0x00,0xfc,0x9c,0x6d,0x99,0x2a,0x0d,0xaa,
0x50,0xb3,0x02,0x03,0x73,0x72,0x11,0xa6,
0xdf,0x2b,0x08,0x02,0x36,0x8a,0x1e,0x0a,
0x7c,0xd1,0x09,0xad,0x5c,0x8f,0x11,0x60,
0x09,0xce,0xa1,0x5a,0xf5,0xaa,0x50,0x19,
0x80,0x17,0xfc,0xf9,0x1e,0x30,0x44,0x21,
0x95,0x39,0xbc,0xc1,0x24,0xa7,0x9a,0xc3,
0x0e,0xc8,0xf3,0x94,0x1c,0x80,0x93,0x32,
0x05,0x8a,0xd5,0xb6,0xba,0x35,0x28,0x1e,
0x88,0x26,0x1d,0xbf,0xe0,0xd5,0x3b,0xfa,
0x28,0x05,0x7b,0xf4,0x22,0xd6,0x16,0x00,
0x84,0x84,0xa6,0x87,0x8c,0x66,0x84,0xe1,
0x5b,0x07,0x4b,0xd8,0x9d,0xd8,0xd0,0xa5,
0xee,0xf1,0x28,0x11,0x53,0x70,0x86,0x2c,
0xd8,0x35,0x7c,0x7a,0x3c,0x65,0x7c,0x4a,
0x70,0x4f,0xc1,0x16,0xf6,0xb2,0x98,0x8d,
0x89,0x07,0x3c,0xc0,0x81,0xce,0x7a,0xf6,
0xb3,0xa0,0xe5,0x80,0x53,0xb1,0x86,0x00,
0x1b,0x9c,0xe1,0x8a,0xa4,0x8d,0xc1,0x4e,
0xd3,0xb3,0x05,0x02,0x40,0x00,0x93,0x68,
0xcb,0xac,0x6c,0x67,0x5b,0x94,0x14,0xff,
0x9e,0x01,0xac,0xf1,0x5b,0x40,0x48,0xd7,
0xf3,0x03,0xaa,0x42,0x80,0x4b,0x27,0xa5,
0xad,0x70,0x87,0x4b,0x13,0x03,0x58,0x00,
0x0d,0x48,0x50,0x2a,0x31,0xcd,0x60,0xcc,
0x1f,0xa5,0x0f,0xa8,0xc4,0x8d,0xae,0x74,
0x63,0x32,0xb0,0x30,0x8a,0x6d,0xaf,0x4e,
0xf0,0x2b,0x7a,0xbc,0xb9,0x81,0xaa,0x4e,
0xf7,0xbb,0xe0,0x75,0xd9,0x02,0x54,0x9b,
0xdc,0xb2,0x9e,0x75,0x3d,0x1c,0xb0,0x67,
0x13,0xc3,0xcb,0xde,0xf6,0x82,0x64,0x00,
0x0c,0xd8,0xc1,0x6d,0x12,0x99,0xc3,0x20,
0x68,0xf7,0x0b,0x80,0x6d,0xa8,0x7b,0xf7,
0xcb,0xdf,0xf8,0x91,0xee,0xbf,0x08,0x58,
0x81,0x12,0x84,0x90,0x83,0xc8,0x1c,0xc6,
0x00,0x37,0xe8,0x41,0x0f,0x74,0xc0,0x60,
0x06,0xa7,0xf7,0x03,0x95,0x0d,0x6e,0x7f,
0x27,0x2c,0x5b,0xcd,0xd5,0x2f,0x02,0x18,
0xce,0xb0,0x86,0x37,0xcc,0xe1,0x08,0x20,
0xe0,0x00,0x20,0x66,0xc0,0x86,0xf9,0x57,
0x80,0x12,0x9b,0x98,0x64,0x25,0xa0,0x8f,
0x65,0x29,0xcc,0xe2,0xcc,0x6a,0xae,0x02,
0x0f,0x8b,0x65,0x09,0x02,0x44,0xe3,0x1a,
0x07,0x48,0x58,0x33,0xb6,0x31,0x0a,0x70,
0xcc,0xe3,0x14,0x07,0xb2,0xc5,0x40,0x9e,
0xad,0xa5,0xea,0xc7,0x9a,0xfc,0x19,0xf9,
0xc8,0x48,0x4e,0xb2,0x92,0x93,0x9c,0x49,
0x09,0x07,0xf9,0xc9,0x6d,0x2d,0x4c,0xe4,
0xa6,0x4c,0xe5,0x2a,0x53,0x19,0x01,0x58,
0xce,0xb2,0x96,0xb7,0xcc,0x65,0x04,0x4c,
0xf9,0x31,0x50,0x0e,0xb3,0x8b,0xff,0x4b,
0xe6,0x32,0x3b,0x86,0xad,0x62,0x4e,0xf3,
0x55,0x21,0xc3,0xe6,0x36,0xbb,0xd9,0x1c,
0xcc,0x87,0x61,0x8c,0x9a,0xe7,0x4c,0xe7,
0x3a,0xdb,0xf9,0xce,0x78,0xce,0xb3,0x9e,
0xf7,0xcc,0xe7,0x3e,0xfb,0xf9,0xcf,0x80,
0x36,0x4a,0x40,0x00,0x00,0x3b,};
 
static const char data_STM32_Home_Webserver_Demo_files_stm32_extends_gif[] = {
0x2f,0x53,0x54,0x4d,0x33,0x32,0x5f,0x48,
0x6f,0x6d,0x65,0x5f,0x57,0x65,0x62,0x73,
0x65,0x72,0x76,0x65,0x72,0x5f,0x44,0x65,
0x6d,0x6f,0x5f,0x66,0x69,0x6c,0x65,0x73,
0x2f,0x73,0x74,0x6d,0x33,0x32,0x5f,0x65,
0x78,0x74,0x65,0x6e,0x64,0x73,0x2e,0x67,
0x69,0x66,0x00,0x48,0x54,0x54,0x50,0x2f,
0x31,0x2e,0x30,0x20,0x32,0x30,0x30,0x20,
0x4f,0x4b,0x0d,0x0a,0x53,0x65,0x72,0x76,
0x65,0x72,0x3a,0x20,0x75,0x49,0x50,0x2f,
0x30,0x2e,0x39,0x20,0x28,0x68,0x74,0x74,
0x70,0x3a,0x2f,0x2f,0x64,0x75,0x6e,0x6b,
0x65,0x6c,0x73,0x2e,0x63,0x6f,0x6d,0x2f,
0x61,0x64,0x61,0x6d,0x2f,0x75,0x69,0x70,
0x2f,0x29,0x0d,0x0a,0x43,0x6f,0x6e,0x74,
0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,
0x3a,0x20,0x69,0x6d,0x61,0x67,0x65,0x2f,
0x67,0x69,0x66,0x0d,0x0a,0x0d,0x0a,0x47,
0x49,0x46,0x38,0x39,0x61,0xfa,0x00,0xab,
0x00,0xf7,0x00,0x00,0xf2,0xd1,0xb2,0x8a,
0x8c,0x8f,0xf9,0xbe,0x28,0xcd,0xaf,0x4f,
0xca,0x61,0x3a,0xc7,0x5a,0x35,0xff,0xdb,
0x5c,0xff,0xdb,0x69,0x01,0x92,0xd2,0xe6,
0xb7,0x02,0xd2,0x73,0x42,0xfa,0xc2,0x23,
0x5a,0x80,0x6d,0x8f,0x74,0x18,0xdd,0x8b,
0x48,0xaf,0xae,0xae,0xd5,0x79,0x45,0xea,
0xa4,0x43,0xd0,0xd0,0xcd,0x21,0x84,0x9e,
0xff,0xff,0xff,0xe6,0xb0,0x8c,0xb0,0x99,
0x49,0xff,0xdb,0x71,0x67,0xca,0xf3,0xff,
0xcb,0x05,0xe2,0x95,0x48,0xec,0xb1,0x6b,
0xab,0x8d,0x35,0xfd,0xcb,0x08,0xd9,0xac,
0x02,0xb8,0xa8,0x91,0xff,0xd7,0x45,0xfd,
0xe6,0x98,0xfe,0xf9,0xe5,0xfc,0xc5,0x1c,
0xff,0xe2,0x75,0xf3,0xb2,0x3a,0xff,0xd2,
0x29,0xfe,0xeb,0xa7,0xff,0xc9,0x00,0xb3,
0x8f,0x03,0x0f,0x0f,0x0f,0xed,0xa9,0x42,
0xf1,0xaf,0x3b,0xda,0x86,0x48,0xfc,0xe8,
0xb5,0xff,0xdb,0x61,0xed,0xa7,0x3a,0xcf,
0xcc,0xad,0x4c,0x4d,0x50,0xf4,0xda,0xc4,
0xfe,0xcd,0x13,0xff,0xd4,0x36,0xff,0xe4,
0x88,0xf5,0xb9,0x33,0xff,0xdb,0x65,0xdb,
0x98,0x82,0x74,0x77,0x7b,0xcc,0x68,0x3d,
0xcc,0xb6,0x66,0xae,0xc8,0x96,0xa9,0x96,
0x72,0xd4,0xae,0x2d,0xe5,0x9a,0x48,0xfe,
0xf5,0xd6,0x8f,0xce,0xd6,0xf3,0xb6,0x36,
0xb8,0xaa,0x6e,0xfe,0xc7,0x15,0xce,0x6b,
0x3f,0xeb,0xea,0xe4,0xd3,0xc8,0x93,0xf9,
0xd7,0x8a,0x36,0x78,0x7b,0x96,0x77,0x40,
0xf8,0xe6,0xc6,0xe9,0xc7,0x59,0xf3,0xcc,
0x58,0x6d,0x91,0x73,0xc9,0x93,0x6d,0xe7,
0x9d,0x46,0xad,0x9d,0x8a,0x9a,0x8a,0x6e,
0xce,0x99,0x35,0x63,0x65,0x68,0x7e,0x81,
0x86,0xfe,0xf2,0xc9,0xfc,0xc6,0x01,0xc3,
0xb7,0x8a,0xff,0xdb,0x52,0xe7,0xc8,0x64,
0x47,0x7c,0x72,0x94,0xbb,0x8f,0x92,0x8c,
0x54,0xff,0xcf,0x19,0x9e,0x82,0x30,0xe6,
0x99,0x3e,0xf3,0xc8,0x88,0xd6,0xc6,0x6f,
0xff,0xfd,0xf2,0xfa,0xeb,0xd8,0x78,0x7c,
0x4d,0xd0,0x70,0x41,0xf5,0xc5,0x66,0xd9,
0x83,0x44,0xf2,0xc2,0x77,0xbb,0xa2,0x57,
0x73,0x59,0x25,0xf8,0xd9,0x9e,0xdf,0x90,
0x48,0xf8,0xc8,0x48,0xff,0xde,0x67,0xfd,
0xde,0x79,0xfb,0xd5,0x5c,0xe8,0xe5,0xdb,
0x4a,0xa7,0xb1,0xde,0xb9,0x58,0xfb,0xd5,
0x61,0xf4,0xf4,0xf2,0xff,0xc9,0x0c,0x74,
0xa8,0x91,0xff,0xcd,0x08,0xe2,0x93,0x40,
0xff,0xcd,0x06,0xe3,0x9c,0x58,0xc6,0x9d,
0x02,0xea,0xa9,0x5c,0xfa,0xca,0x31,0xf3,
0xb7,0x47,0x94,0xb4,0xb1,0xc8,0xbb,0xa7,
0xfd,0xc4,0x0d,0xf2,0xcb,0x9b,0x67,0xb9,
0xdd,0xf6,0xc3,0x01,0xd7,0x81,0x46,0xd4,
0x76,0x3e,0xee,0xd1,0x67,0xfe,0xd6,0x54,
0xd8,0x87,0x57,0x9e,0x80,0x0c,0xf4,0xf0,
0xe5,0xf5,0xc4,0x07,0xff,0xde,0x5f,0xbd,
0xbf,0xc0,0xd8,0x82,0x48,0xe0,0xb7,0x21,
0xde,0x8a,0x41,0x6f,0x71,0x75,0xef,0xc5,
0x9e,0x9d,0x9d,0xa0,0xe5,0xd9,0x9f,0xeb,
0xd3,0x75,0xe9,0x9f,0x44,0xfb,0xd6,0x6c,
0x75,0xb3,0xa1,0x6a,0x6c,0x70,0xfe,0xef,
0xb9,0x3d,0x8a,0x92,0xe6,0xd5,0x8a,0xd6,
0x7c,0x46,0xdc,0xb9,0x4a,0xf2,0xba,0x5c,
0xf4,0xd0,0x5c,0xeb,0xbf,0xa4,0xf5,0xc6,
0x11,0xe1,0xdc,0xc9,0xff,0xcd,0x0d,0x97,
0xaa,0x75,0xf7,0xd2,0x6d,0x35,0xb8,0xe9,
0xfa,0xd6,0x71,0xe7,0xc3,0x4e,0xf5,0xd0,
0x64,0xe2,0xba,0x38,0xee,0xad,0x4d,0x22,
0x9a,0xc0,0xdc,0x92,0x5d,0xb7,0xc2,0x7e,
0xe0,0x8e,0x41,0xff,0xd0,0x20,0xed,0xc0,
0x17,0x5a,0x5b,0x5f,0xff,0xce,0x02,0xde,
0xcb,0x7e,0xf5,0xd2,0x74,0xea,0xa4,0x4c,
0xf4,0xda,0x7d,0xf8,0xd2,0x83,0xe9,0xc0,
0x28,0xf3,0xf4,0xf8,0x3c,0xa7,0xd9,0xfa,
0xc8,0x08,0xf0,0xae,0x3f,0xc0,0x87,0x3c,
0xd0,0x6c,0x3b,0xee,0xc7,0x31,0xcf,0x6e,
0x40,0xf9,0xfa,0xfd,0xe9,0xa1,0x45,0xfa,
0xc8,0x06,0xe2,0xa0,0x70,0xe1,0xf1,0xeb,
0xcb,0x63,0x35,0xbd,0x9b,0x30,0xc2,0xa2,
0x44,0xd1,0x71,0x3c,0x51,0x71,0x5a,0xde,
0xbe,0x5b,0x64,0x5f,0x3e,0xf2,0xb1,0x2e,
0x4e,0x3d,0x29,0xee,0xbe,0x8c,0xf7,0xbf,
0x41,0xbf,0x7b,0x4d,0xfa,0xc0,0x18,0xf7,
0xda,0x75,0xe8,0x9e,0x48,0xfa,0xf6,0xef,
0x7d,0x71,0x5f,0xf2,0xd8,0x79,0xdd,0xae,
0x45,0xca,0x88,0x62,0xd7,0x7c,0x40,0xf4,
0xd7,0x64,0xf6,0xdf,0xb3,0xd0,0x8d,0x43,
0xcd,0xa3,0x59,0xfa,0xd8,0x60,0xf0,0xaa,
0x34,0xfb,0xc9,0x0f,0xf8,0xcb,0x24,0xfc,
0xc9,0x03,0x36,0x37,0x39,0xf7,0xbc,0x2e,
0xf8,0xd9,0x6e,0xe8,0xa1,0x4a,0xfc,0xd8,
0x66,0xf0,0xf1,0xf1,0xda,0xda,0xda,0xef,
0xee,0xed,0xd3,0x76,0x44,0x5c,0xa3,0x9d,
0xe2,0xdf,0xd5,0xd7,0x7e,0x46,0x9b,0xa9,
0x42,0xd5,0x70,0x3f,0xe1,0xe1,0xe2,0xf8,
0xc7,0x0b,0xf8,0xd1,0x4f,0xef,0xbf,0x04,
0xf9,0xf9,0xf7,0xfe,0xdf,0x6b,0x00,0x96,
0xd9,0xff,0xca,0x08,0x21,0xf9,0x04,0x00,
0x00,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
0x00,0xfa,0x00,0xab,0x00,0x00,0x08,0xff,
0x00,0x4b,0xe5,0x18,0x48,0xb0,0xa0,0xc1,
0x83,0x08,0x13,0x2a,0x5c,0xc8,0xb0,0xa1,
0xc3,0x87,0x10,0x23,0x4a,0x9c,0x48,0xb1,
0xa2,0x45,0x8a,0x04,0x0a,0x68,0xdc,0xc8,
0xb1,0xa3,0xc7,0x8f,0x20,0x43,0x8a,0x1c,
0x49,0xb2,0xa4,0xc9,0x93,0x28,0x53,0xaa,
0x5c,0xc9,0xb2,0x65,0xca,0x1c,0x2e,0x63,
0xca,0x9c,0x49,0xb3,0xa6,0xcd,0x9b,0x38,
0x4f,0xe6,0xc8,0x98,0xb1,0x00,0x4f,0x9f,
0x40,0x7f,0x0a,0x0d,0x4a,0x74,0xe8,0xcf,
0x9c,0x48,0x93,0x2a,0x5d,0xca,0xf4,0xe3,
0x4e,0x9f,0x04,0x8c,0x16,0x9d,0x2a,0xb5,
0x2a,0xd5,0xab,0x56,0xb3,0x62,0xdd,0xaa,
0xb5,0xab,0xca,0x9e,0x40,0xbf,0x4e,0x6d,
0xda,0x34,0xc7,0x8e,0xa8,0x68,0xd3,0xaa,
0x5d,0xcb,0xb6,0xad,0xdb,0xb7,0x70,0xe3,
0xca,0x9d,0x1b,0x15,0x6b,0x5b,0xae,0x54,
0xeb,0x7a,0xdd,0x8b,0x97,0xaf,0xd7,0x92,
0x60,0x3f,0x1e,0xdd,0x49,0xb7,0xb0,0xe1,
0xc3,0x88,0x13,0x2b,0x5e,0xcc,0xb8,0xb1,
0x63,0xc3,0x76,0x73,0x18,0x89,0x7a,0xf6,
0xb1,0xe5,0xcb,0x98,0x33,0x6b,0xde,0xcc,
0xb9,0xad,0x59,0x02,0x67,0x43,0x83,0x1e,
0x2d,0xba,0x34,0xe9,0xd3,0xa6,0x53,0x53,
0x46,0xcd,0x5a,0xb5,0xeb,0xd6,0xb0,0x5f,
0xbf,0xee,0xbc,0x98,0x19,0x01,0xdb,0xb4,
0x73,0xab,0xcd,0x71,0x66,0x87,0xef,0xdf,
0xc0,0x83,0x0b,0x1f,0x2e,0x9c,0x34,0x70,
0xd0,0xa5,0x89,0x2b,0x5f,0xee,0x1b,0xf9,
0xef,0xd8,0xd0,0x65,0x47,0x47,0x7d,0x3c,
0x74,0x70,0xe4,0xd3,0xa5,0x6b,0x3f,0xdd,
0x76,0xf6,0x6a,0xd1,0x68,0xb7,0xcf,0xff,
0xae,0x60,0x84,0xb9,0xf9,0xf3,0xe8,0xd3,
0xab,0x5f,0xcf,0xbe,0xbd,0x7b,0xe6,0xd9,
0x5b,0xbf,0x2f,0x2e,0x3e,0xfe,0xd9,0x1c,
0xc6,0x8c,0x94,0xd7,0xcf,0xbf,0xff,0x8e,
0xfe,0xe5,0xb9,0x17,0x60,0x80,0xf3,0x15,
0x68,0xe0,0x81,0xcc,0xd9,0xa6,0x20,0x82,
0x0c,0x36,0x68,0x5e,0x05,0x67,0x18,0x93,
0x1f,0x80,0x14,0x56,0x68,0xe1,0x85,0xfc,
0xdd,0x73,0xcf,0x84,0x18,0x76,0xe8,0xe1,
0x87,0x20,0x86,0x28,0xe2,0x85,0xff,0xfd,
0xf7,0x4d,0x05,0x02,0x31,0xb2,0x03,0x33,
0xbe,0x11,0xe8,0xe0,0x8b,0x08,0x92,0x27,
0xe1,0x8c,0x34,0xd6,0x68,0xe3,0x8d,0x38,
0xce,0x48,0x8c,0x31,0xc4,0x14,0xc0,0x06,
0x01,0x11,0xe6,0x28,0xe4,0x90,0x44,0x16,
0x69,0xe4,0x88,0x21,0xee,0xa0,0x40,0x05,
0x4c,0x96,0x72,0x04,0x3f,0xa5,0x7c,0xd3,
0x22,0x92,0x54,0x56,0x69,0x25,0x86,0x10,
0x1a,0x13,0xe1,0x19,0x5c,0x76,0xe9,0xe5,
0x97,0x60,0x86,0xe9,0x25,0x8f,0xd7,0x7c,
0x73,0x0d,0x1b,0xb7,0x54,0x21,0x43,0x01,
0x1b,0xee,0x28,0xe6,0x8c,0x41,0x1a,0x29,
0xe7,0x9c,0x74,0xd6,0x49,0xa3,0x11,0x00,
0xec,0xb4,0x22,0x31,0x39,0xcc,0x00,0x40,
0x05,0x0a,0xec,0x60,0xe7,0xa0,0x84,0x16,
0x19,0x62,0x05,0x5a,0x8a,0xa9,0x68,0x97,
0x0a,0x9c,0xd1,0xe8,0xa3,0x5c,0x3e,0xaa,
0x80,0x31,0x3b,0x5c,0xf3,0x41,0x00,0x32,
0x54,0x61,0x85,0x15,0x3a,0xc8,0xc0,0x0d,
0x23,0xdf,0x10,0xb3,0xe8,0xa8,0xa4,0x96,
0x6a,0xea,0xa9,0x75,0x6e,0xd9,0x5b,0x0e,
0xa5,0x08,0xda,0xe5,0x0e,0xf2,0x94,0xff,
0xe2,0x27,0x04,0x46,0x74,0x99,0x68,0x98,
0x45,0x7e,0x49,0x63,0x9c,0x85,0xf6,0x3a,
0x63,0x05,0xf2,0x28,0x20,0xec,0xb0,0xc4,
0x16,0x6b,0xec,0xb1,0xc5,0x56,0xfa,0xcd,
0x25,0x6a,0xea,0xb0,0xa9,0xb3,0x95,0xc8,
0x10,0xc0,0x20,0x8c,0x38,0x8a,0xec,0xb5,
0xd8,0x66,0xab,0x6d,0xb1,0xa7,0x76,0xab,
0xa8,0x31,0x00,0x30,0x42,0x4c,0xa3,0x91,
0x1a,0x61,0x8c,0xac,0xa5,0xc8,0xf3,0x8c,
0xa3,0xde,0xb6,0xeb,0xee,0xbb,0x8b,0x02,
0x2a,0xcf,0xbc,0xf4,0x06,0x6b,0xef,0xb6,
0xc6,0xca,0x13,0xe1,0x37,0x52,0x74,0xda,
0x49,0x00,0x9b,0x06,0x6c,0x45,0xb4,0x01,
0x44,0xc2,0x88,0x31,0xf8,0x26,0xac,0xf0,
0xc2,0x0c,0xe3,0x4b,0x8c,0x32,0x00,0xd4,
0x6a,0xec,0x19,0xb1,0x96,0x02,0xa8,0xb5,
0x0d,0x67,0x2c,0xec,0x97,0xd9,0x62,0xdc,
0x71,0xbc,0x10,0xd4,0x2b,0xf2,0xc8,0x24,
0x97,0x6c,0xcc,0x35,0x3e,0x5c,0x72,0x8b,
0x0c,0x56,0x00,0x2c,0x30,0xa7,0x56,0x74,
0x22,0xc3,0x07,0x83,0x7c,0xf3,0x4c,0xc9,
0x38,0xe7,0xac,0xc0,0xbd,0x38,0xe7,0xbb,
0xf3,0xcf,0xc1,0x32,0xcc,0x73,0xce,0x22,
0xe3,0x59,0xc1,0xb8,0xc3,0xda,0xab,0xef,
0x37,0x16,0x57,0xf0,0x8c,0xc6,0x50,0x47,
0xdd,0x70,0x05,0x21,0x43,0x10,0x32,0xbd,
0x55,0xcb,0x73,0x75,0xce,0x56,0x6b,0x9d,
0x88,0x31,0x50,0x48,0x11,0xed,0xbf,0x2d,
0xbf,0x2c,0xb0,0x9a,0x97,0x50,0xab,0x40,
0xd5,0x5b,0x13,0xed,0xf6,0xdb,0x70,0xc7,
0x2d,0x37,0xbd,0x6b,0x87,0x4b,0xb1,0xc9,
0xac,0x5a,0x4c,0xcc,0xdc,0x7c,0xc3,0xff,
0xbd,0xf3,0xbc,0x40,0x2b,0x3d,0x37,0xb1,
0xc1,0x56,0x10,0x8a,0xd5,0x88,0x27,0xae,
0xf8,0xe2,0x8c,0x2b,0x70,0x8d,0x14,0x01,
0xac,0x5c,0xb6,0xd9,0x02,0x3b,0xbb,0x72,
0xda,0xdf,0x24,0xc2,0xf8,0xe6,0x59,0xb3,
0xdd,0x75,0xe7,0x5a,0x87,0x0e,0x7a,0xdb,
0xf5,0x8e,0x2e,0xfa,0xe9,0x59,0x97,0x8e,
0x7a,0xe8,0x58,0x07,0xcb,0x48,0xba,0xac,
0x8b,0x1c,0xf2,0x19,0x4c,0x02,0xa0,0xcc,
0xcd,0x7d,0xe7,0x4e,0xb2,0x02,0xcf,0x3c,
0xdd,0xfb,0xdf,0xba,0x8f,0x6c,0x78,0x28,
0xc4,0x17,0x6f,0xfc,0xf1,0xc8,0x1b,0x9f,
0xc8,0x19,0x52,0x48,0xd1,0x89,0x3a,0x9d,
0x3c,0x7b,0x09,0xc0,0x2e,0x57,0xfe,0xec,
0xe5,0x83,0xd4,0x03,0x01,0xf2,0x8a,0x27,
0xef,0x7d,0xf2,0x9c,0x87,0x2f,0xfe,0xf8,
0xe4,0x43,0x90,0x88,0x2c,0xe9,0x6e,0x7f,
0xf8,0xe6,0xb1,0x56,0x30,0x83,0x2c,0x6b,
0x97,0x2f,0x3f,0xe7,0xa7,0x3f,0x73,0xbe,
0x32,0x16,0x5b,0xcc,0x88,0xd6,0x88,0xaf,
0x6e,0x7a,0xea,0xf5,0xaa,0x40,0x3d,0x8a,
0x57,0x8f,0x02,0x0e,0xd0,0x78,0x06,0x4c,
0x60,0x01,0x8b,0xf7,0x8c,0x6f,0x5c,0x4a,
0x06,0x32,0x70,0x96,0xb3,0x22,0xf1,0x8e,
0x4b,0x50,0x2e,0x60,0x12,0x5c,0xd9,0x03,
0xb2,0xa7,0xbe,0xef,0x79,0xf0,0x83,0x20,
0x0c,0xa1,0x08,0x47,0x48,0xbc,0x44,0xe4,
0xa0,0x02,0x89,0x00,0xa1,0x3c,0x5e,0xe7,
0x3e,0x49,0xf0,0xef,0x78,0xf3,0xb3,0x1a,
0x09,0xcd,0x97,0x03,0x00,0xcc,0xa1,0x0c,
0x8e,0x98,0x41,0x29,0x4a,0xf1,0x27,0xcd,
0x11,0x2f,0x71,0x22,0x5c,0x5c,0x05,0xff,
0x24,0xa1,0xc0,0x22,0x1a,0x31,0x81,0x10,
0xb8,0x06,0x14,0x98,0xa5,0x8e,0x5b,0xe8,
0x40,0x07,0x95,0x08,0x00,0x3c,0xe2,0xf1,
0x80,0x4d,0x55,0xef,0x65,0x4f,0x7c,0x22,
0x04,0x1f,0xf0,0x81,0x01,0x1e,0xf1,0x80,
0x24,0xfc,0x62,0x02,0x8f,0x27,0xc6,0x32,
0x82,0xf1,0x83,0x0a,0x0c,0x45,0x22,0x94,
0x01,0xa8,0x10,0x9e,0x6f,0x87,0x33,0x90,
0x21,0x09,0xe7,0x68,0x3c,0xf3,0xa1,0x6f,
0x06,0x39,0xac,0xc0,0xfe,0xd4,0xc5,0x08,
0x00,0x1c,0x8e,0x8e,0xde,0x1b,0x22,0x22,
0x06,0x89,0x08,0x49,0x14,0x92,0x90,0x88,
0x44,0x64,0x3d,0x10,0x51,0x8f,0x33,0x40,
0xe1,0x03,0x56,0x50,0x87,0x0c,0x3a,0x01,
0x45,0x1d,0x44,0xe2,0x17,0x91,0xb0,0xc2,
0x03,0x32,0x79,0xc5,0xca,0x65,0xb1,0x53,
0x32,0xe0,0x22,0x23,0xc0,0x91,0x48,0x42,
0x26,0xb0,0x94,0xa8,0x64,0xa4,0x19,0x17,
0x99,0xca,0x56,0x2a,0x72,0x95,0x62,0x4c,
0x44,0x05,0x94,0x91,0x08,0x58,0xca,0xa3,
0x76,0xa5,0xa8,0x25,0x2c,0x61,0xe9,0xbd,
0x44,0x48,0xc2,0x7d,0x33,0x98,0xc1,0x10,
0xd7,0x36,0x40,0x08,0xf4,0x91,0x11,0xc4,
0x5b,0x20,0x20,0x8b,0x57,0x81,0x16,0x48,
0xc2,0x90,0x87,0x7c,0xa6,0x34,0xa7,0x39,
0x4d,0x70,0x58,0x4a,0x0a,0x55,0x68,0x62,
0x25,0x2a,0xf1,0x2f,0x7c,0xc4,0xe3,0x12,
0x3a,0x08,0xc0,0x11,0x8e,0xe1,0xb2,0x4e,
0x72,0xea,0x93,0xd1,0xba,0xc5,0x03,0x72,
0x00,0xcd,0x67,0x46,0x13,0x91,0xd4,0x8c,
0xa7,0x34,0xdf,0x69,0xc8,0x7a,0xd2,0xf3,
0x9e,0xf6,0xcc,0x27,0x3e,0x4b,0x69,0xff,
0xcf,0x56,0xd6,0x03,0x1c,0x4c,0x4a,0x84,
0x2b,0x07,0x69,0x40,0x08,0x58,0x6c,0x0e,
0x28,0x64,0xe5,0x40,0x17,0x5a,0xca,0x02,
0x82,0x23,0x14,0x10,0xf3,0x93,0x1e,0x75,
0x69,0xc0,0x50,0xbc,0x4e,0x12,0xa1,0xd8,
0x65,0x19,0x9b,0x29,0x09,0x67,0xca,0x33,
0x9e,0x2d,0x40,0x84,0x3c,0x1e,0x89,0x29,
0x75,0x54,0xa1,0x13,0xdb,0x7c,0xc0,0x3b,
0x24,0xd0,0x32,0x96,0x4a,0x80,0x02,0x55,
0xa4,0xdc,0x27,0xa1,0xc8,0x4d,0xe8,0x3d,
0x40,0x0a,0x69,0x90,0xa6,0x33,0x3d,0xfa,
0xd1,0x9e,0xfa,0xf4,0xa7,0x40,0x0d,0xaa,
0x50,0x65,0x59,0x0a,0x70,0x4c,0xf3,0x9d,
0x84,0x84,0x66,0x3d,0x24,0x61,0xb1,0x32,
0xc8,0x82,0x94,0xfa,0x8c,0xea,0x3e,0xa5,
0xfa,0xcf,0x3b,0x02,0xa0,0x14,0x8c,0x80,
0xc0,0x22,0x17,0x49,0x44,0x44,0x40,0xb4,
0xa8,0xfc,0x44,0x2a,0x43,0x11,0xd1,0xcc,
0x16,0x98,0xf5,0xac,0x68,0x45,0x6b,0x1a,
0x5a,0x00,0x0e,0x7e,0x31,0x31,0x53,0x27,
0xad,0x84,0x0e,0x8e,0x50,0xc5,0x48,0xf0,
0x83,0x02,0x97,0xb8,0x04,0x05,0x58,0x4a,
0x3d,0xe9,0x81,0x33,0x8b,0xdb,0xac,0x44,
0x36,0xab,0xf0,0x81,0x1c,0x20,0x62,0xa7,
0x1e,0x4d,0xab,0x62,0x17,0xcb,0xd8,0xc6,
0xa6,0xb5,0xa3,0x90,0x35,0x6b,0x64,0x21,
0x3b,0xd9,0x69,0xee,0xf4,0x99,0x97,0xb5,
0x2c,0x11,0x65,0x31,0x03,0xa1,0xce,0x13,
0x7d,0xb2,0x0a,0xa9,0x67,0x85,0x0a,0x0e,
0x46,0x54,0x23,0x98,0xa5,0x50,0x86,0x56,
0xe7,0x59,0xcd,0xd4,0x16,0x72,0xb4,0x3e,
0xad,0x80,0x03,0x1c,0xab,0x56,0x44,0xff,
0x84,0x2d,0x00,0xea,0x68,0x62,0x9a,0x3a,
0x81,0x52,0x1d,0x54,0x51,0xa5,0x77,0x8d,
0x44,0x00,0xf8,0xf1,0x8b,0xea,0x15,0xec,
0x92,0x0f,0x90,0xeb,0x13,0x03,0x5b,0x89,
0x5b,0xd8,0x14,0x0a,0xb4,0x8d,0xae,0x74,
0xa7,0x4b,0xdd,0xea,0x9a,0x75,0xad,0xe8,
0xb3,0x2e,0x5b,0xf1,0x07,0x00,0x00,0x1c,
0xb6,0xa3,0x68,0x9d,0x6c,0x63,0xc5,0x4b,
0x4a,0x60,0xfe,0x89,0x88,0x97,0xcd,0x69,
0x4e,0x25,0x91,0x86,0x3e,0x26,0x16,0xbc,
0xd1,0x85,0x6c,0x4e,0x2f,0xdb,0x02,0xd9,
0xce,0x76,0xb6,0x2d,0xc0,0xaf,0x7e,0xcd,
0xfa,0x0d,0x28,0x3c,0xc0,0xb9,0x92,0xbc,
0x45,0x9a,0xe2,0x5a,0x89,0xbc,0x06,0xec,
0x12,0xc2,0x95,0x80,0x04,0xfa,0x6a,0x85,
0x97,0xd2,0x55,0xb9,0x34,0xe5,0x66,0x27,
0x9c,0xab,0x49,0x28,0xe0,0x57,0xbb,0x18,
0xce,0xf0,0x59,0xf7,0x5b,0xdd,0xec,0x6a,
0x37,0x0d,0x4c,0x12,0x26,0x38,0x34,0x7c,
0xd6,0x34,0x80,0x23,0xa2,0x57,0x65,0x04,
0x22,0xd6,0xda,0x58,0x80,0x56,0x60,0xc4,
0x24,0x4e,0x6b,0x35,0x1c,0x40,0xe3,0x1a,
0xdb,0xb8,0xc6,0xc3,0x30,0x06,0x24,0x73,
0x2b,0x49,0x19,0x0c,0x98,0xc0,0x01,0x78,
0x07,0x3c,0xe0,0x91,0xc9,0xbc,0x32,0x18,
0x60,0x97,0x78,0xc0,0xf4,0xd0,0xb9,0xcd,
0x4e,0x54,0x41,0x4d,0xea,0x98,0xc2,0x03,
0xa0,0x90,0x06,0x1a,0xe7,0xf7,0xbe,0x58,
0xbe,0xb2,0x96,0xad,0xcc,0xe5,0x1b,0x67,
0xb9,0xcb,0x5b,0xbe,0x6f,0x7e,0xcd,0xba,
0xdf,0x2c,0x8f,0x99,0xc3,0x8d,0x9d,0x2d,
0xfa,0x38,0xcc,0x66,0x32,0xbb,0xb9,0xff,
0x05,0xd5,0x90,0x95,0x2c,0xaa,0x3c,0xe6,
0x3a,0x5f,0xd8,0xce,0x6f,0x4e,0xc3,0x1d,
0xfd,0xa4,0x0c,0x16,0x5f,0xf8,0xce,0x2d,
0xd0,0xb3,0x25,0x36,0x1c,0xe3,0xb3,0xce,
0xd8,0xcb,0x5e,0xbe,0xc6,0x12,0xa8,0xc1,
0xe3,0x00,0x0b,0xf8,0xc9,0xbd,0xad,0x04,
0x3e,0x28,0x70,0x8c,0x22,0xf7,0xd5,0xb8,
0x0f,0x08,0xc0,0x03,0x00,0x4b,0x53,0x27,
0x3f,0x59,0x1d,0x2a,0x08,0xc0,0x07,0x2c,
0x8c,0xe8,0x52,0x9b,0xda,0xcb,0x61,0x4e,
0x35,0x98,0x57,0x8d,0x65,0x53,0xab,0x5a,
0xcc,0x7d,0x28,0x05,0xab,0x5f,0xbd,0xe5,
0xee,0x02,0x80,0xcc,0x62,0x2e,0xf3,0x9b,
0xef,0xbb,0x56,0xf3,0x36,0x93,0xce,0x35,
0x3e,0xb3,0x96,0xd3,0x60,0xb1,0x2a,0xe7,
0x7a,0xd7,0xc8,0x06,0x73,0x9d,0xab,0xe1,
0x06,0x07,0x34,0xbb,0xd9,0xce,0x8e,0xb6,
0x1b,0xdc,0x70,0x06,0x36,0xa8,0x80,0xc7,
0x10,0xf4,0xf1,0x93,0xe3,0x0a,0x45,0x09,
0xe0,0x23,0x00,0xce,0xb2,0x62,0xd9,0x02,
0x10,0x80,0x24,0x6f,0x7a,0xd3,0x80,0x6d,
0xb2,0x93,0xd3,0x94,0x5b,0x51,0xcb,0xa2,
0xc6,0xd0,0x8e,0xb7,0x97,0xe5,0x1d,0xed,
0x7a,0xd3,0xfb,0xd4,0xf8,0xce,0xb7,0xbe,
0x5b,0xd0,0x07,0x00,0x40,0x1b,0xd1,0x94,
0x38,0x75,0x0b,0x20,0xf6,0x27,0x63,0xeb,
0xdb,0xca,0x94,0x40,0xb1,0x25,0xe6,0x7c,
0x70,0x7e,0x03,0x20,0xe0,0x07,0x8f,0x78,
0x35,0x64,0x31,0xed,0x8a,0x5b,0x7c,0xda,
0xe3,0xb8,0x06,0x35,0xae,0x9d,0xdb,0x6c,
0x3f,0x9a,0xdb,0xe1,0x84,0x59,0xc0,0xae,
0xa8,0xe4,0xe9,0x95,0x7b,0x7a,0x72,0xff,
0x0d,0xac,0xa7,0x05,0x2c,0x83,0xdc,0x26,
0xf9,0x1b,0xb4,0x98,0x36,0x8d,0x65,0x4e,
0xf3,0x67,0xdb,0xdc,0xd9,0xcf,0x9e,0xb9,
0xce,0x6b,0x8e,0x73,0x69,0xeb,0xdc,0xe7,
0x34,0xff,0x39,0xbd,0x87,0xfe,0x73,0x07,
0xf4,0xe1,0x7d,0x3b,0x77,0x40,0xc0,0xdd,
0xd0,0x87,0x9c,0xdb,0x9b,0xc6,0x94,0xb0,
0x84,0x25,0x66,0xd0,0x87,0xa5,0xf7,0x9c,
0xe7,0xd0,0xa6,0x84,0x2c,0xa6,0xce,0x67,
0xa5,0xff,0x1b,0xde,0x45,0x57,0xba,0x30,
0x21,0xae,0xef,0x7b,0x97,0xba,0x1a,0x1a,
0xd0,0xc0,0xc5,0x2d,0xae,0x81,0x61,0x10,
0x60,0xe3,0xd8,0x86,0xe0,0xc7,0x7b,0x9b,
0x45,0xca,0x69,0x3a,0x12,0xd3,0x33,0x77,
0xa6,0x53,0xae,0xf2,0x27,0xb3,0x5c,0x06,
0xd7,0x96,0xc2,0xa8,0x63,0xbe,0xf6,0xc2,
0x1b,0xfe,0xf0,0x88,0x4f,0xbc,0xe2,0x17,
0x6f,0xf4,0x19,0xa8,0xbd,0xd9,0xb4,0x48,
0x43,0x1f,0x2a,0x60,0x6b,0x26,0x28,0x83,
0x12,0x15,0xbf,0x3a,0x2d,0x38,0x0b,0x00,
0x4b,0x60,0xfe,0xea,0x37,0x97,0x39,0x25,
0x80,0x29,0x4c,0x37,0x7c,0x3e,0xf3,0x58,
0x7f,0xf6,0xe8,0x01,0x90,0xf4,0xa7,0xdb,
0x3b,0xf4,0xb0,0x77,0x36,0xb3,0xd3,0xee,
0x06,0xda,0xdb,0x5e,0x03,0x0e,0x58,0xc2,
0x12,0x54,0xc0,0x71,0x8f,0x0f,0x18,0xa5,
0x10,0x16,0x58,0xf5,0x26,0x9d,0xe9,0x93,
0x57,0x92,0xb9,0xdc,0xf4,0xfb,0xca,0x5a,
0x7e,0xed,0x4b,0x40,0x41,0x16,0x6a,0x7f,
0xbc,0xf4,0xa7,0x3d,0xfd,0xda,0x53,0x7f,
0xed,0x8f,0x5f,0xbc,0xf6,0xb7,0x5f,0x78,
0x00,0x34,0xdd,0xf4,0xfd,0x66,0x82,0xff,
0x25,0xfa,0xd0,0x07,0x07,0x40,0xec,0xfb,
0x85,0xa7,0x44,0x35,0x00,0x30,0x03,0x65,
0x10,0xfe,0xf0,0x31,0xe7,0xfa,0xf8,0x31,
0xcf,0x7d,0xa3,0x03,0x00,0xf7,0xdc,0xdf,
0x3e,0xda,0xd3,0xce,0xff,0xfe,0xd3,0x7e,
0x07,0x29,0xc3,0x71,0x3d,0x26,0x60,0xbb,
0xb5,0x4d,0x9f,0x84,0x41,0x0f,0x20,0x01,
0x49,0x36,0x45,0x91,0xa0,0x64,0xe8,0x04,
0x7c,0xbc,0xe5,0x77,0xd9,0x96,0x5b,0xd7,
0xa6,0x64,0xb5,0x77,0x7b,0x17,0x98,0x81,
0x18,0xb8,0x81,0xd1,0xd7,0x81,0x1a,0xe8,
0x81,0x1c,0xf8,0x81,0x22,0x68,0x7b,0xd6,
0x97,0x7d,0xd1,0xe7,0x7d,0x6e,0x40,0x0b,
0x15,0x50,0x06,0xde,0x47,0x7f,0x7b,0xa0,
0x82,0x96,0xf0,0x7e,0xd7,0x47,0x7d,0xb6,
0x26,0x83,0x32,0x98,0x82,0xfd,0x36,0x03,
0x4c,0x50,0x01,0xb4,0x40,0x0b,0xd5,0xf7,
0x83,0x33,0xa8,0x01,0x15,0x80,0x7e,0xf9,
0xb7,0x78,0xfb,0xe7,0x7f,0xfe,0x37,0x0c,
0xd7,0x10,0x09,0x1f,0x00,0x78,0x3d,0xe6,
0x63,0xbf,0x47,0x49,0x75,0x07,0x33,0x0f,
0x00,0x0f,0x14,0x80,0x0f,0x12,0x00,0x0f,
0x09,0xf8,0x2c,0xcb,0x45,0x6e,0xea,0xa6,
0x7c,0x10,0xc4,0x63,0x2a,0x20,0x03,0xe4,
0x80,0x84,0x66,0x78,0x86,0x68,0x98,0x86,
0x1f,0x98,0x86,0x1c,0x68,0x86,0x29,0xa8,
0x01,0x7d,0xc0,0x7f,0xb4,0x00,0x00,0x1b,
0x10,0x75,0x65,0xb0,0x01,0xd4,0xc7,0x7f,
0x4c,0x87,0x82,0x7a,0x68,0x7b,0xb4,0xb0,
0x7e,0x54,0xa7,0x76,0x7b,0xd0,0x07,0x1b,
0xd0,0x07,0x3e,0xa8,0x01,0xb4,0xb0,0x01,
0x00,0x50,0x06,0x96,0x47,0x0b,0x7b,0xff,
0x00,0x82,0x90,0xa8,0x81,0x6e,0x50,0x01,
0x7f,0x50,0x82,0x91,0x18,0x82,0xd1,0x27,
0x89,0xd6,0xe7,0x06,0xd5,0x00,0x04,0x1a,
0xe0,0x89,0x9f,0x98,0x76,0x9e,0x08,0x04,
0x7b,0x70,0x0d,0x53,0x20,0x01,0x83,0xf0,
0x00,0xbc,0x37,0x80,0x8f,0xc6,0x5b,0x10,
0xf6,0x44,0x97,0x10,0x0f,0xf0,0xd0,0x60,
0xf8,0x10,0x09,0xf8,0x60,0x41,0x5c,0x18,
0x45,0x44,0x06,0x45,0x11,0x58,0x05,0xcb,
0xd7,0x72,0x14,0xa8,0x02,0xe3,0x00,0x8a,
0x6c,0x58,0x8c,0xc6,0x78,0x8c,0xc8,0x98,
0x76,0xb4,0xd0,0x07,0xeb,0x07,0x00,0xfb,
0xe7,0x06,0x52,0x57,0x08,0x54,0x77,0x81,
0xfe,0xb7,0x07,0x96,0xf0,0x07,0x69,0xd8,
0x6f,0x9d,0xb7,0x8c,0xec,0xe7,0x08,0x4c,
0xd0,0x07,0x2f,0xb8,0x7e,0x65,0x40,0x75,
0x8f,0x98,0x8c,0xb4,0xf7,0x07,0xb3,0x67,
0x8e,0x6c,0xa8,0x81,0x9d,0x08,0x04,0xee,
0xf8,0x8e,0xf0,0x98,0x71,0x0f,0x90,0x80,
0xcd,0xc3,0x7b,0xbe,0xf7,0x64,0x81,0x95,
0x45,0x01,0xa0,0x60,0x47,0x00,0x30,0xb5,
0x88,0x45,0x34,0x95,0x57,0x97,0x20,0x61,
0x12,0x08,0x8c,0xc1,0xe8,0x00,0xda,0x10,
0x8a,0xa0,0x38,0x8a,0x0c,0xf9,0x89,0x0d,
0xe9,0x8e,0x0e,0x29,0x8a,0x12,0x19,0x8a,
0x14,0xb9,0x90,0x13,0x59,0x91,0x13,0x69,
0x91,0x0a,0xa9,0x01,0x7b,0x50,0x01,0xe2,
0x67,0x88,0xd5,0x10,0x87,0x7f,0xe8,0x08,
0xf7,0xf7,0x88,0xa3,0x28,0x91,0x1d,0x89,
0x87,0xfd,0x47,0x8c,0x88,0x08,0x00,0x85,
0x00,0x00,0x40,0xe0,0x27,0x84,0x28,0x7e,
0x7b,0x20,0x8d,0x65,0x60,0x09,0x7b,0xff,
0x50,0x8e,0xea,0xd8,0x6f,0x71,0xa8,0x8e,
0xc9,0xd8,0x8e,0xf0,0x18,0x94,0x8a,0x36,
0x05,0x52,0x10,0x09,0x0d,0xc8,0x0d,0xd7,
0x26,0x77,0xbb,0x05,0x7c,0x51,0x94,0x85,
0x03,0xe3,0x6d,0xe4,0x76,0x45,0x4f,0xd4,
0x09,0x06,0x16,0x09,0xf0,0xa0,0x03,0x2b,
0xf7,0x8b,0x62,0xa8,0x02,0x41,0xd9,0x95,
0x5e,0xf9,0x95,0x60,0x19,0x96,0xf0,0xf8,
0x89,0x39,0xe9,0x90,0x62,0x39,0x8a,0x00,
0xc0,0x04,0x1b,0x90,0x93,0xcc,0x08,0x04,
0x61,0xd0,0x07,0xe3,0x68,0x92,0x10,0x19,
0x94,0x7b,0x50,0x0d,0x1b,0xc0,0x90,0x5d,
0x59,0x97,0xdd,0xc5,0x04,0x85,0xb0,0x07,
0x40,0x40,0x0b,0x96,0xc0,0x97,0x3a,0x58,
0x01,0x7e,0x19,0x91,0x73,0xf9,0x90,0x0f,
0xa9,0x01,0x85,0xb0,0x96,0x1a,0xd9,0x98,
0x19,0xf9,0x98,0x18,0x19,0x8a,0x62,0xa0,
0x0d,0x40,0x10,0x05,0x51,0x50,0x99,0x96,
0x99,0x99,0x19,0xb7,0x04,0xcd,0x23,0x01,
0x1f,0xf0,0x00,0x4e,0x48,0x80,0x90,0x66,
0x80,0x44,0x96,0x80,0x16,0xa4,0x80,0xe2,
0xf6,0x2c,0x65,0xb3,0x49,0x12,0xb0,0x52,
0x56,0x00,0x86,0x06,0xc9,0x7b,0x6c,0xb0,
0x02,0x94,0x99,0x99,0x99,0x79,0x96,0xb8,
0x99,0x9b,0xed,0x50,0x0d,0x85,0x50,0x08,
0x76,0xe9,0x96,0x61,0xe0,0x8e,0x97,0x29,
0x9c,0xef,0x18,0x06,0x7f,0xc0,0x04,0x30,
0xb9,0x07,0x51,0x10,0x06,0x6a,0xb0,0x96,
0x1b,0x70,0x93,0xe2,0x80,0x8d,0x60,0x19,
0x06,0x76,0xa9,0x01,0xc3,0xd9,0x95,0x61,
0xb0,0x0b,0xdd,0x55,0x06,0xc5,0xb9,0x01,
0xdb,0x10,0x4c,0x6b,0x79,0x9d,0xb9,0xff,
0xf9,0x8e,0x75,0x89,0x76,0xe3,0x79,0x9e,
0x41,0x59,0x0d,0xed,0xa0,0x0d,0xec,0xd9,
0x9e,0xee,0xa9,0x09,0x4a,0xc8,0x99,0x97,
0xe0,0x99,0x53,0x00,0x6a,0x50,0x58,0x80,
0x72,0x65,0x95,0x46,0x19,0x0f,0x17,0x64,
0x45,0xf3,0x98,0x85,0xf3,0x19,0x6e,0xbe,
0xb8,0x7c,0xc1,0x78,0x0b,0xbb,0xa0,0x09,
0xda,0x10,0x05,0x09,0x6a,0x9b,0x0c,0xda,
0xa0,0x0e,0xfa,0xa0,0x10,0x7a,0x99,0xcb,
0xb9,0x01,0xea,0x49,0xa1,0x00,0x20,0x0e,
0x96,0xb0,0x01,0xcb,0x19,0x06,0x96,0x89,
0x99,0x6e,0xb9,0x01,0x4c,0x50,0x0d,0xc1,
0xa9,0x0d,0x6f,0x29,0xa2,0x1b,0xe0,0x08,
0xd5,0xa0,0x97,0xc1,0x59,0x99,0x2c,0xca,
0xa2,0x61,0xb0,0x98,0xc1,0xc9,0xa0,0xf0,
0x18,0x06,0x8b,0x08,0x00,0xca,0x49,0x8a,
0xd5,0xf0,0x9d,0x1b,0xc0,0xa1,0x41,0x29,
0xa3,0x5f,0x19,0x05,0x7b,0xa0,0x88,0x09,
0x8a,0x9e,0x44,0x0a,0x04,0x62,0xd0,0x0e,
0xc8,0x80,0x0c,0x48,0x9a,0xa4,0x4c,0x9a,
0xa4,0x51,0x30,0x0c,0x4b,0x30,0x05,0x3e,
0xb0,0x49,0x0f,0x80,0x94,0x8e,0xc6,0x5b,
0x4c,0x99,0x64,0x12,0x90,0x49,0xa9,0xe9,
0x9f,0x12,0x10,0x0f,0x14,0x64,0x94,0xce,
0x02,0x4e,0x04,0x18,0x86,0xbc,0xc7,0x0d,
0x97,0x20,0x05,0x9a,0xa0,0xa4,0xda,0xa0,
0x09,0x08,0x8a,0xa0,0xee,0x19,0xa7,0x72,
0x3a,0xa7,0x74,0xaa,0x0d,0x4a,0x7a,0xa7,
0xec,0x19,0x05,0xed,0x20,0x06,0x7f,0x10,
0x06,0x61,0x80,0x0c,0x1b,0x20,0x06,0x7e,
0x22,0x06,0x1a,0x1a,0x06,0x09,0xea,0xa7,
0xa7,0xb5,0xa3,0x96,0x89,0xa0,0x00,0xff,
0x80,0x8e,0x8e,0xa0,0x06,0x7b,0xe0,0xa6,
0x33,0x50,0x08,0x7e,0x9a,0xa0,0x79,0x6a,
0xa9,0x8d,0x6a,0x99,0x75,0x4a,0x9d,0x65,
0xf0,0x07,0x99,0x19,0x06,0x4c,0xe0,0x08,
0x7d,0x9a,0x99,0x96,0xaa,0xa0,0xa6,0x5a,
0xaa,0x0b,0xfa,0xa9,0xbb,0x30,0x03,0xa3,
0x6a,0xaa,0x11,0xfa,0xaa,0xb0,0x2a,0x06,
0xbb,0x80,0x0c,0x11,0xc0,0xa4,0x11,0x70,
0xab,0xb7,0x4a,0xab,0xe3,0x90,0x08,0xf2,
0x99,0x8a,0x52,0x70,0x0b,0x63,0x18,0x85,
0x81,0x55,0x30,0xe0,0x44,0x39,0x99,0x86,
0x60,0x44,0xb6,0xa5,0x9c,0x02,0x6e,0x05,
0x09,0x6a,0xea,0x40,0x6e,0x52,0x10,0x03,
0xb5,0xda,0xa4,0xd4,0x5a,0xad,0xd6,0x7a,
0xad,0xd8,0x6a,0xad,0x51,0xf0,0x07,0x84,
0xea,0xa6,0x9a,0xf0,0xa7,0xe8,0x28,0x0e,
0x33,0xb0,0x01,0x9a,0xb0,0x01,0x7f,0x50,
0x08,0xe2,0xd0,0x0e,0x7f,0xea,0xa6,0x8a,
0xa8,0x06,0x85,0x70,0x87,0x61,0xb0,0xa6,
0x9a,0xb0,0x0b,0xe2,0xd0,0xa8,0x7f,0xda,
0xa4,0xcc,0x09,0x00,0x51,0x80,0x0c,0x6b,
0x8a,0xa4,0xfe,0x7a,0xa7,0x2f,0x4a,0xa9,
0x4a,0x1a,0x06,0xcf,0xb9,0xa3,0xfe,0xba,
0xa4,0xd9,0x8a,0x0c,0xee,0xa9,0xa7,0x00,
0xa0,0x06,0x86,0xda,0xa6,0x75,0x1a,0xb1,
0x12,0x1b,0xa7,0xb2,0x8a,0xab,0x16,0x7b,
0xb1,0x11,0x30,0x0e,0x60,0x80,0x32,0x08,
0xf6,0x00,0x3e,0x60,0x9f,0x90,0xc6,0x94,
0x06,0x78,0x41,0x79,0xf5,0x0b,0xe0,0xa4,
0x80,0xd1,0xc3,0xac,0x03,0xca,0x7c,0xcf,
0x3a,0x05,0xd3,0x33,0x05,0x7d,0x80,0xab,
0xb4,0x8a,0xb1,0xb9,0x5a,0xab,0xd3,0xff,
0x9a,0xb0,0xd8,0x6a,0xb3,0xb4,0x9a,0xa4,
0xb7,0x3a,0xaf,0x84,0xca,0xaf,0x49,0xea,
0xad,0x1b,0x20,0x0e,0xc8,0x49,0xb4,0x07,
0x9a,0xab,0xc8,0xf0,0x07,0x6a,0xb0,0x0d,
0xdb,0xb0,0xa3,0x37,0xeb,0xa6,0x62,0x50,
0x06,0xb2,0x8a,0xaf,0x74,0x78,0xb3,0xd8,
0xca,0x04,0x62,0x70,0xaf,0xcc,0x99,0xb5,
0x38,0x9b,0xad,0x9a,0xe0,0x92,0x86,0x5a,
0xad,0x4b,0x3a,0xb6,0x49,0x4a,0xb6,0x77,
0x7a,0xb6,0x08,0x6b,0xad,0x62,0x40,0xb3,
0x18,0xbb,0x02,0xc8,0x30,0x0e,0x51,0x3a,
0x05,0x9f,0xa9,0x64,0xbc,0x17,0xb2,0xc0,
0x37,0x85,0x23,0x47,0x6e,0x59,0xe8,0x6d,
0x58,0x19,0x4e,0x01,0x90,0x7c,0x03,0x5a,
0xb7,0x44,0xa9,0x32,0x53,0x10,0x00,0x50,
0xc0,0xb6,0x88,0x9b,0xb8,0x8a,0xbb,0xb8,
0x11,0x50,0x0d,0x6a,0xa0,0x06,0xb0,0x70,
0xb1,0x9a,0x40,0xa8,0x4a,0xab,0x09,0x32,
0x1b,0x01,0xbb,0xc0,0x04,0xe2,0xc0,0xa7,
0x48,0xcb,0xae,0x62,0xc0,0x04,0x33,0x30,
0xab,0x3b,0x8b,0x0c,0xe2,0x10,0xb9,0x88,
0x4b,0xab,0x7f,0xd0,0xa9,0x3c,0xab,0x09,
0x8b,0x69,0xb9,0x8c,0x7b,0xb1,0xb4,0xca,
0xba,0x4c,0x20,0xb3,0x5d,0x5b,0xbb,0xd9,
0x2a,0x06,0x2b,0xb0,0x02,0x11,0xa0,0xbb,
0xb9,0xbb,0xbb,0xbe,0x9b,0xbb,0x2b,0xf0,
0xa4,0x4b,0x90,0x32,0x9b,0x34,0x05,0x56,
0x8a,0xa5,0x4c,0xf9,0x44,0x18,0x74,0x09,
0xdf,0xb6,0xa5,0x46,0x59,0x45,0x3a,0x30,
0x3d,0x28,0x15,0x81,0x80,0xa7,0x02,0xdc,
0x20,0x05,0x16,0xc4,0x0d,0x2d,0x43,0x0e,
0xbe,0xdb,0xbd,0xb7,0xaa,0xbb,0x6c,0xff,
0x0b,0xbe,0xe2,0xfb,0xbd,0xe4,0xeb,0xbd,
0xaf,0x3b,0xb9,0x21,0x6a,0xbe,0x2b,0xb0,
0xb6,0x6a,0x30,0xb3,0x11,0x00,0x03,0xa9,
0x1b,0x9d,0x6b,0x0b,0xbe,0x9a,0x30,0x0a,
0xe2,0x20,0x0e,0x6a,0xf0,0x07,0x18,0x0b,
0x0b,0x85,0xb0,0xb8,0x93,0x2b,0x0e,0x61,
0x80,0xab,0xb0,0xd0,0x06,0xee,0xfb,0xba,
0x16,0xcb,0x9c,0x65,0x00,0x0b,0xae,0x6b,
0xc0,0x0c,0x4c,0xb3,0xb8,0x0b,0xbc,0x10,
0x1c,0xc1,0xc0,0xbb,0x07,0x1b,0xeb,0xb2,
0x9b,0x74,0x09,0x1b,0x37,0x49,0xae,0x68,
0x80,0xca,0xbb,0x29,0xf8,0x70,0x6e,0x58,
0x78,0x09,0x29,0x1b,0x33,0x4d,0x96,0x4d,
0xd7,0xe6,0xb2,0x53,0x60,0x05,0xda,0xeb,
0x03,0xe4,0xd0,0xbb,0xbc,0x2b,0xc1,0x30,
0x1c,0xc3,0x32,0x3c,0xc3,0x2f,0xec,0xbb,
0xa3,0x80,0xbb,0x30,0x50,0xc3,0xba,0xdb,
0x9c,0x62,0x90,0xc3,0xef,0xbb,0x01,0x41,
0xd0,0xb0,0x0f,0xfc,0xbe,0xb0,0x90,0x96,
0x6a,0x70,0xab,0x30,0xf0,0xbb,0xef,0xeb,
0xae,0xe4,0xab,0xc3,0xef,0x1b,0x01,0xf8,
0x9b,0xc4,0x2b,0xa0,0x09,0x6a,0x50,0x0d,
0x49,0xdc,0xbd,0xe3,0xab,0xb8,0x62,0x50,
0xba,0xe5,0xdb,0xc0,0x5e,0x7c,0xab,0x62,
0x00,0x0b,0xb9,0x2b,0x0c,0x34,0x9c,0xbb,
0x1a,0xeb,0x05,0x3e,0xe0,0x03,0x91,0x30,
0xa5,0xa0,0x76,0x0b,0xdc,0x94,0x8f,0xe1,
0xe6,0x2c,0x74,0x15,0xbd,0xc2,0x15,0xbd,
0xe0,0xc6,0x5c,0xce,0x35,0x86,0x97,0xe0,
0x03,0x01,0x30,0x05,0x9d,0x20,0xa5,0x7d,
0x90,0xc3,0x65,0x3c,0xc8,0x84,0x5c,0xc6,
0x30,0x30,0x0a,0x85,0x00,0x0b,0x82,0xff,
0xec,0xc2,0x30,0xa0,0x06,0xf7,0x0b,0xb9,
0xb0,0x30,0x0a,0x14,0x50,0x06,0x85,0xa0,
0x06,0x3e,0xdc,0xc8,0x65,0xd0,0x06,0x2b,
0x20,0xc5,0x12,0x0c,0x03,0x85,0x30,0x0a,
0x8b,0x0c,0xc3,0x11,0x00,0x0b,0x4c,0x00,
0xc1,0x11,0xd0,0x06,0x1b,0x10,0xca,0x65,
0xfc,0xbe,0x87,0x7c,0xbf,0x91,0x3b,0xc3,
0xbb,0xab,0xc3,0xb2,0x1c,0xcb,0xb4,0xec,
0xc2,0x3a,0x2c,0x06,0x64,0x2c,0x0c,0xba,
0x9c,0xcb,0xbb,0xdc,0xcb,0x2b,0x20,0x0c,
0x11,0xa0,0x84,0x2e,0x5b,0x94,0x7d,0x7c,
0x6d,0x6f,0x9c,0x8f,0x30,0xe3,0x5b,0xbf,
0x00,0x0f,0xdf,0x16,0xbd,0x03,0x83,0xc7,
0xbc,0xa7,0x03,0x52,0x90,0x32,0x55,0x50,
0x09,0x3e,0x20,0x05,0xbf,0x9c,0xcd,0xda,
0x4c,0xc6,0xdb,0x3c,0xc3,0xdc,0xcc,0xcd,
0xb9,0x0b,0x03,0xe2,0x2c,0xce,0xe0,0xac,
0xcd,0x32,0x7c,0xc8,0x62,0xa0,0x06,0xa3,
0x20,0x0c,0x62,0xbc,0x02,0xb0,0xf0,0xb8,
0xe8,0x1a,0xc9,0x62,0xb0,0x0d,0x6d,0x30,
0x0a,0x8a,0xbc,0xc9,0x2b,0x20,0x0e,0x65,
0x60,0xc9,0x33,0x0c,0x0b,0xe2,0x60,0xc8,
0xee,0x2a,0xc8,0x30,0xb0,0x01,0x6d,0xa0,
0xca,0x34,0x9c,0xc3,0x88,0x8c,0xb5,0xe2,
0x5c,0xc8,0x0c,0x5d,0xc6,0xbd,0xd0,0xcb,
0x10,0x1d,0xd1,0xbb,0x1c,0x01,0x60,0x00,
0x06,0x53,0x20,0x65,0x9f,0x59,0x09,0xd7,
0x86,0x95,0x1c,0x2c,0x41,0x4f,0xa4,0x69,
0x2d,0x53,0x45,0x7c,0x17,0x2d,0xbc,0xd7,
0x3c,0x0f,0x30,0x05,0xb7,0x50,0xb8,0x6b,
0xb0,0x02,0x2c,0x20,0xd1,0x2e,0x2d,0xd1,
0xbf,0xcc,0xcb,0x2b,0x60,0x0e,0xe6,0xff,
0xb0,0x02,0xa3,0xf0,0xb8,0x8f,0xbb,0xce,
0x30,0x60,0x0e,0xe4,0xcc,0xcb,0xba,0x1c,
0xd3,0x31,0x8d,0xd0,0x38,0x8d,0x06,0x6a,
0x20,0x06,0xa0,0x3c,0x0a,0x4c,0x00,0x03,
0xc2,0xc0,0x04,0x05,0xad,0xd4,0xbf,0x0c,
0x03,0x44,0x1b,0x08,0x8b,0xfc,0xcd,0x63,
0x7c,0xc8,0x85,0xe0,0xd4,0xdd,0x9c,0xcd,
0x30,0xd0,0x06,0x96,0x4c,0xc6,0x30,0x90,
0xce,0x39,0x9c,0xcb,0x63,0x3c,0xd6,0xdb,
0x2c,0x06,0x6d,0xd0,0x06,0x61,0x3c,0xd5,
0x64,0x0d,0xc3,0x54,0x9d,0xd5,0xe5,0x5c,
0xc6,0xb8,0xdc,0xd2,0x72,0x2d,0x0c,0x73,
0x5d,0xd7,0x74,0xcd,0x02,0x7b,0x00,0xa5,
0x7b,0xcc,0x84,0x52,0xd0,0xc6,0x70,0xac,
0xbc,0x12,0xd4,0x32,0x16,0x44,0x53,0x3a,
0x90,0xc7,0x33,0xe3,0x99,0x55,0xb0,0xc2,
0x2d,0xdc,0xd2,0x74,0xfd,0xd2,0x8e,0x2d,
0xd1,0xe6,0x30,0x0a,0x6d,0xc0,0x88,0xf7,
0x5b,0xd9,0x4c,0xa0,0xb9,0x46,0xbd,0xce,
0x34,0x4d,0xd3,0x8c,0x1d,0xd1,0xe6,0x20,
0x0c,0x9f,0x4d,0xd7,0x34,0xad,0xcb,0x62,
0xc0,0x02,0x44,0x1b,0xda,0xba,0x6c,0x0e,
0x85,0xd0,0x06,0xa0,0xfd,0xd8,0xe6,0x50,
0xd4,0xa8,0xed,0xd2,0xfe,0x0c,0x0b,0xba,
0x0c,0x03,0x81,0x50,0xba,0x8f,0x1d,0xd1,
0xf7,0xbb,0xd3,0x2f,0x0d,0xd4,0x3f,0xfd,
0xdb,0x32,0x0d,0xdc,0xbe,0x1d,0xdc,0xc1,
0xdd,0x0b,0x25,0xc0,0x02,0xc7,0x5d,0x02,
0xca,0xbd,0xdc,0xcc,0xdd,0xdc,0xc2,0x30,
0x0c,0x7a,0x7d,0x09,0x1f,0x10,0x09,0x52,
0x50,0xb7,0x1d,0x3d,0x53,0x2d,0xb3,0x5c,
0x50,0x04,0xac,0x2a,0x20,0x0d,0xa8,0xff,
0xe8,0x03,0x2a,0x1c,0x00,0x6b,0xb0,0x0b,
0xc8,0xcd,0x02,0xe6,0x7d,0xde,0xe8,0x9d,
0xde,0xea,0xad,0xde,0xa2,0xdd,0x06,0x22,
0xd0,0x06,0x68,0x10,0x08,0x9c,0x6d,0x0e,
0x2c,0x10,0x08,0x68,0xd0,0x0b,0xfa,0x7c,
0x05,0x97,0xcd,0xd5,0xa3,0x10,0x08,0x2c,
0xb0,0xd9,0xe8,0xdd,0xd8,0xff,0x6d,0xd6,
0x81,0x20,0xda,0x85,0x10,0x04,0xb0,0x20,
0xd7,0xff,0x8d,0x06,0x6d,0x40,0xdf,0x2e,
0x5d,0xd7,0x62,0x50,0xe0,0xba,0x6c,0xd7,
0x2d,0xfd,0xda,0xe2,0xe0,0xe0,0xaf,0xdd,
0xe0,0x73,0x2d,0xe0,0x8d,0xed,0xd9,0x68,
0x1d,0xdb,0xb9,0x1d,0xe2,0x22,0xde,0xcb,
0xc6,0xdd,0xdc,0x26,0x7e,0xe2,0x43,0x00,
0x03,0xc3,0x60,0xd1,0x52,0x76,0x53,0x01,
0xb0,0xd1,0xaf,0x38,0x53,0x9f,0x24,0x33,
0xd1,0xfc,0x01,0x9f,0xc9,0x0d,0xd6,0xec,
0x03,0xde,0x70,0xe2,0x3c,0xde,0xe3,0x27,
0xce,0x02,0x68,0x50,0x06,0x81,0x30,0x0d,
0xf4,0xcd,0xdc,0xe5,0x4d,0xdf,0xf5,0x7d,
0xdf,0x6d,0xc0,0x04,0x22,0x40,0xd9,0x49,
0x10,0xdf,0xe6,0x30,0x0d,0xe5,0xfd,0xdf,
0xba,0x40,0xb4,0x2e,0x30,0xe4,0xa3,0x20,
0x02,0xa3,0x30,0x0d,0xc7,0x8d,0xdc,0xe6,
0x20,0x06,0x68,0x80,0xe4,0xe9,0xdd,0xe5,
0xe7,0x3d,0x0a,0xbd,0x60,0xde,0xcd,0x8d,
0xde,0x25,0x60,0x0e,0x6d,0xd0,0x0b,0x48,
0x3e,0x0d,0xe2,0x80,0x06,0xeb,0x1d,0xe0,
0x75,0x2d,0xd7,0xe2,0x30,0x0a,0xe7,0xcd,
0xe1,0x75,0x4e,0xe7,0x77,0xcd,0xe7,0x73,
0xfe,0xe7,0xbd,0x30,0x04,0x25,0x20,0xe8,
0x84,0x3e,0xe8,0x43,0x70,0xe8,0x88,0xff,
0x7e,0xe8,0x83,0xae,0xdc,0x54,0x30,0x0c,
0x1c,0x80,0xbd,0x45,0xf9,0x01,0xd2,0x30,
0x86,0x32,0x5e,0xe9,0x26,0xac,0x02,0x44,
0x79,0xd2,0x32,0x40,0x94,0x44,0x80,0xdc,
0xca,0x5d,0xe8,0x82,0xee,0xe3,0xa2,0xae,
0xdc,0xd3,0xd0,0x06,0x49,0x60,0x0e,0xa3,
0xae,0xdc,0x2c,0x40,0xe4,0x25,0x10,0x08,
0x66,0x2e,0x0e,0x2e,0x50,0x06,0x41,0x10,
0xe7,0x25,0xc0,0xe5,0xad,0xde,0x06,0x43,
0x8e,0x06,0xa7,0xce,0xd4,0xb6,0xce,0xdc,
0x25,0x9e,0xea,0x49,0x30,0x0a,0xa9,0xce,
0x04,0xfe,0x5d,0xeb,0x68,0xc0,0x04,0xa9,
0x7e,0xe2,0x16,0x2e,0xe5,0xa9,0xee,0xe9,
0xc9,0x6e,0xe4,0xe7,0x9d,0xe6,0x2c,0x10,
0xe8,0x89,0x5e,0xed,0xd6,0x9e,0xe8,0x37,
0x30,0x04,0x61,0x00,0x06,0x68,0x3c,0x8f,
0x9f,0xd9,0xc6,0xda,0x1d,0xe3,0x34,0x3e,
0x86,0x29,0xe3,0x03,0x89,0xed,0xb2,0x3b,
0x7e,0xed,0xea,0xbe,0xee,0xeb,0x3e,0x0d,
0xbd,0x80,0x06,0xd3,0xc0,0xee,0x8b,0x4e,
0xe8,0xf4,0x3e,0x0d,0xf6,0xee,0xea,0xbd,
0xc0,0x04,0x65,0x90,0x04,0x43,0x30,0x0d,
0x92,0xcd,0xe5,0xd3,0x90,0x04,0x6d,0x10,
0x04,0x43,0x0e,0xea,0x81,0x60,0xdc,0xa0,
0x3e,0xef,0x8b,0x1e,0xf0,0xbd,0x10,0xef,
0xcb,0x5d,0xe8,0xcb,0x3d,0x0d,0x68,0xe0,
0x02,0x11,0x2f,0x0e,0x6d,0xd0,0xeb,0xcf,
0x6e,0xe8,0x71,0x8e,0xf1,0x19,0xdf,0xf1,
0x3c,0xde,0x0b,0x37,0x10,0xf2,0x22,0x3f,
0xf2,0x22,0x6f,0xed,0x22,0xcf,0x02,0x8d,
0xee,0xb2,0x44,0x20,0x01,0x52,0x30,0x05,
0xbc,0x37,0xd2,0x9f,0x74,0xe9,0xd2,0xff,
0x90,0xa6,0xdc,0xd0,0x09,0x5e,0x10,0x00,
0x44,0xb0,0x02,0xd9,0x9e,0xed,0x87,0xce,
0xf3,0xec,0xfe,0xf3,0xd5,0x3e,0x0d,0xba,
0x00,0xef,0x40,0xdf,0xf3,0x88,0xee,0xf3,
0x87,0x6e,0xef,0x37,0x30,0xf1,0x4c,0x80,
0x06,0xd6,0x90,0x04,0xf1,0x2e,0xf1,0x14,
0xd0,0xf0,0x41,0xaf,0xeb,0xf1,0xde,0xee,
0x81,0xd0,0xe6,0x57,0xcf,0xee,0xee,0x4e,
0xf5,0x87,0x7e,0xe5,0x45,0xaf,0xee,0x12,
0x7f,0xf1,0x61,0x5f,0xf6,0x09,0x7f,0xf6,
0x8b,0x0e,0xf2,0x24,0xbf,0xf6,0x6c,0x3f,
0xf2,0x30,0xc0,0x01,0xc3,0x30,0xa5,0x5c,
0x14,0x09,0x3a,0x00,0xe3,0xf9,0xd8,0x5c,
0xbc,0xa7,0x02,0x56,0xe0,0x03,0x85,0xcb,
0x0d,0x3a,0xe0,0x03,0x6b,0x20,0x0c,0xeb,
0xd0,0xf6,0x84,0x5f,0xf8,0x6d,0x3f,0x0d,
0xaa,0x80,0x06,0x86,0xbf,0xf8,0x24,0x6f,
0xef,0x68,0xa0,0xdf,0x6d,0x30,0x04,0x37,
0x20,0xf1,0x2e,0x60,0xf4,0x3d,0x2f,0xf4,
0x5e,0x5f,0xed,0x93,0xbf,0xf4,0x6d,0xe0,
0x0a,0x5b,0xbf,0xf6,0x47,0x1f,0xf0,0x50,
0x3f,0xf9,0xbd,0x30,0xfa,0x66,0x5f,0xed,
0xd6,0x20,0x0e,0xd6,0x70,0xfa,0xac,0xcf,
0xee,0xbd,0x30,0xf8,0x37,0xb0,0x0e,0xb2,
0x3f,0xfb,0xb4,0xcf,0xf6,0x83,0x3f,0xf8,
0x3f,0xe0,0xe8,0xd3,0x4c,0xdd,0xe6,0x3e,
0x86,0x1c,0xfc,0x3c,0xab,0x28,0xa5,0x97,
0xe0,0x05,0x29,0xcd,0xc2,0x21,0x7f,0xfb,
0xb1,0x7f,0xfc,0xc9,0x0f,0xfb,0xb0,0xcf,
0xf8,0x6c,0xff,0x06,0xaf,0xef,0xfc,0xd2,
0x3f,0xf8,0x49,0x10,0x04,0xd6,0x10,0xf2,
0xd6,0xd0,0x06,0x6c,0x8f,0xf8,0xba,0xff,
0x40,0xf8,0x4e,0xc0,0x04,0x41,0x00,0xef,
0x25,0x6f,0xf8,0xf0,0x3d,0xf9,0x6f,0xe0,
0x02,0xd7,0x2f,0xfd,0xe3,0x2f,0xf9,0x37,
0x90,0x04,0x6f,0x20,0xf9,0xec,0x1f,0xf2,
0x45,0x0f,0xfa,0xf2,0xbf,0xf3,0xf0,0xef,
0xf3,0x24,0xff,0xfa,0xb4,0xbf,0xff,0xb3,
0x0f,0x10,0x02,0xd6,0x0d,0x24,0x48,0x50,
0xc0,0xb4,0x66,0xc3,0x2c,0x3c,0xb8,0x94,
0xe5,0x81,0x14,0x75,0x2a,0x64,0x54,0xe9,
0x74,0x2b,0xa2,0x0a,0x6a,0x53,0x2e,0xf9,
0x90,0xc1,0xcd,0xc7,0x25,0x6f,0x05,0x45,
0x8e,0x24,0x59,0xd2,0xe4,0xc0,0x24,0xd6,
0x4e,0xae,0x14,0x79,0x63,0xe0,0x8d,0x83,
0x49,0x7a,0x11,0x4c,0xf2,0x86,0xa0,0xcb,
0x81,0xaa,0x9c,0xbc,0x5c,0x87,0xd3,0xa5,
0x35,0x57,0x49,0x5c,0xb4,0x51,0xd9,0xf3,
0xc6,0x51,0xa4,0x47,0x7b,0xae,0xab,0xb9,
0xce,0x5a,0x19,0x5d,0x2f,0x93,0x4e,0x55,
0x8a,0xd4,0xa8,0xca,0x69,0x37,0x52,0x1a,
0xa5,0xda,0xd5,0xeb,0x57,0xb0,0x47,0xb3,
0x09,0x20,0x5b,0xd6,0xec,0x59,0xb4,0x66,
0x11,0x82,0x91,0xe2,0xe3,0xc1,0x03,0x1f,
0x01,0x54,0xa8,0x50,0x77,0x51,0xc5,0xad,
0x4b,0x16,0xac,0x70,0xe3,0x16,0x60,0x0d,
0x0b,0xb2,0xeb,0x04,0xa6,0x3d,0x2b,0xd8,
0xf0,0xe0,0xc3,0x89,0x11,0x0f,0x16,0xf0,
0x26,0x49,0x60,0x81,0x2c,0x57,0x32,0x7e,
0xd3,0x06,0x9b,0x60,0x5d,0x4e,0x22,0x1b,
0x74,0x65,0xb3,0x64,0xd9,0x75,0xaa,0x42,
0xd4,0xdc,0x4c,0xd2,0x5a,0x08,0x55,0xd3,
0x5c,0x5c,0x91,0x4c,0xd2,0xb1,0xaa,0x24,
0xba,0xde,0xb8,0xc0,0xd9,0xba,0x75,0xff,
0xed,0x95,0xd9,0x16,0x08,0xd8,0xdd,0x9b,
0xf7,0x6f,0xdf,0xc1,0xcb,0xee,0x36,0xd7,
0x8c,0x83,0x94,0x4b,0x44,0x22,0x5d,0x62,
0x33,0xd7,0xb9,0xc7,0x00,0x53,0xa4,0xe9,
0xf0,0x41,0xe4,0xd5,0x6e,0xc2,0xd9,0xb5,
0x6f,0x1f,0xde,0xcb,0x09,0x36,0xee,0xe1,
0x0b,0x87,0x28,0xeb,0x44,0x33,0x5a,0x56,
0xaa,0xc4,0x0b,0x70,0xe5,0x42,0xbd,0x59,
0xc1,0x65,0x5d,0xb8,0xb0,0xf6,0x46,0x04,
0x29,0xd0,0x8b,0xe3,0x2b,0x26,0xcb,0xca,
0x9a,0xc0,0x24,0x82,0xe8,0xe5,0x32,0xc3,
0x5a,0xd3,0xaf,0x34,0xdb,0xd6,0xd1,0x6d,
0x01,0x06,0x1b,0x74,0xf0,0x41,0x08,0x1f,
0xa4,0x82,0x03,0x0b,0x3e,0x7a,0xc0,0x19,
0x30,0x9a,0xc3,0x88,0x83,0x4b,0xa4,0x58,
0x42,0x86,0x29,0xa4,0x20,0x07,0x9b,0x08,
0x4b,0x34,0xd1,0x41,0xe0,0x4e,0xe4,0x6d,
0x01,0x40,0x4e,0xf8,0x0e,0x38,0x18,0x85,
0xf3,0x6d,0xc5,0xdf,0x60,0x64,0xe5,0x0d,
0xf0,0xde,0x60,0x65,0xc6,0x05,0xb0,0x71,
0xe2,0x0a,0xb2,0xb0,0x13,0x52,0xb8,0xcb,
0x42,0x60,0x05,0x3c,0xb3,0x76,0x73,0x81,
0x02,0x5e,0x04,0x08,0x82,0x8c,0x37,0x6a,
0x5c,0xef,0x0d,0xfc,0xb0,0x0b,0xe2,0x84,
0xf5,0xca,0x42,0x32,0xcb,0xec,0x2e,0x58,
0x60,0x84,0x2f,0x47,0x10,0x13,0x4c,0x32,
0xc3,0x2c,0xf3,0xcc,0x2f,0xb1,0xb1,0x65,
0x42,0xb7,0x44,0x59,0x93,0x0a,0x2a,0x26,
0x99,0xd0,0x8b,0x5b,0x96,0x08,0x40,0x8a,
0x49,0xbe,0x64,0xb0,0xcc,0x13,0xfb,0xf4,
0x33,0x42,0x01,0x42,0xd0,0x87,0xc4,0x3f,
0x0b,0xc5,0x66,0x93,0x41,0xb1,0x01,0xff,
0x24,0x09,0x42,0x19,0xe4,0x0d,0x1b,0x17,
0x6c,0x68,0xd4,0x4f,0x01,0x4e,0x78,0xc3,
0x41,0xf0,0x3c,0xa1,0x20,0x88,0x37,0x36,
0xa1,0xe0,0x0a,0x52,0x26,0x2d,0x31,0x45,
0x01,0xf4,0xc1,0xb1,0xc7,0x24,0x42,0x38,
0x81,0xd1,0x18,0x5b,0xed,0xf1,0x0d,0x23,
0x01,0x71,0x75,0x56,0xe1,0x78,0xbb,0x60,
0x4c,0x5c,0x73,0xd5,0x75,0xd7,0x31,0x27,
0x19,0xa6,0x99,0x57,0x08,0x19,0x01,0x1b,
0x62,0x8b,0x98,0x84,0x03,0x30,0xfa,0x5a,
0xe3,0x15,0x5e,0x9b,0x75,0xf6,0xd9,0x67,
0x15,0x0d,0xa1,0x47,0x67,0xf5,0x44,0x93,
0x4c,0x6c,0xbf,0x7c,0xc3,0x1d,0x30,0x17,
0x08,0xe1,0x5a,0x45,0x3d,0xc1,0xb1,0x5b,
0x07,0x73,0x4d,0xf3,0x8d,0x0b,0xb0,0x01,
0x93,0x44,0x4d,0xe3,0xb0,0xa1,0x45,0x7e,
0x4e,0x38,0x92,0xdc,0x12,0xf9,0x5c,0x40,
0x0e,0x40,0x7a,0x04,0xe4,0x0a,0x59,0xaf,
0x38,0xd2,0x4f,0x6c,0x58,0xf1,0x84,0x15,
0x39,0xec,0x10,0xb5,0xd0,0x07,0x6f,0x1d,
0xa1,0x08,0x86,0x1b,0x6e,0x78,0x61,0x88,
0x1d,0x96,0xb8,0x88,0x85,0xd5,0xc4,0x86,
0xe1,0x88,0x8b,0xc0,0xe6,0x07,0x0a,0xad,
0xc3,0x18,0x62,0x68,0x43,0x16,0x59,0x57,
0x42,0xe4,0xb0,0x61,0xe4,0x90,0x29,0x3e,
0x59,0xcc,0x38,0x00,0xd9,0x95,0x10,0x77,
0x3c,0x41,0x79,0x04,0x39,0xc4,0x2c,0x62,
0x01,0x4d,0xf1,0x7d,0x57,0x84,0x38,0x42,
0xb0,0x41,0xd8,0x99,0xb9,0x1d,0xf6,0x84,
0x38,0x2e,0x7e,0x23,0x88,0x41,0x9d,0xc5,
0xc6,0x06,0x4b,0x15,0x5d,0x44,0x5d,0x6c,
0x79,0xb5,0x76,0x6a,0x30,0xfb,0x61,0xff,
0x18,0x8f,0x89,0x19,0x3e,0xa7,0x88,0xad,
0xb7,0xce,0xfa,0xeb,0xac,0xb1,0x89,0x13,
0x1b,0xaf,0xc1,0x36,0xfb,0x6c,0xb4,0xbf,
0x26,0xe4,0x82,0x10,0x1e,0x76,0x1b,0x63,
0xb8,0x23,0x96,0x9b,0x62,0x86,0x5b,0x66,
0xf8,0x82,0x1a,0xe8,0xa6,0x1b,0xe2,0x20,
0x42,0x20,0x44,0xef,0xbd,0x03,0x1f,0x81,
0x90,0x45,0x00,0x11,0x36,0xe7,0x43,0x2e,
0x70,0xe7,0x80,0x20,0x46,0xb0,0xe1,0xdb,
0x99,0x8b,0xe0,0x96,0x10,0x7d,0x4e,0x80,
0x98,0x90,0x03,0xae,0x40,0x87,0x62,0x5d,
0x29,0x56,0x75,0x81,0x22,0x08,0xb1,0xc3,
0xe5,0x99,0x77,0xed,0x07,0x0f,0xd4,0x51,
0xff,0x07,0x8f,0x60,0xf0,0x58,0x3d,0x75,
0xd8,0x63,0x97,0x7d,0xf6,0xd4,0xff,0x49,
0x86,0x10,0xda,0x73,0xd7,0x3d,0xf5,0x73,
0xf0,0xe8,0xfd,0x77,0xac,0x83,0x2f,0x42,
0x78,0xac,0xbb,0x1e,0xbe,0x08,0x2c,0xfa,
0x89,0x03,0x0b,0xdf,0xb7,0x2e,0x9e,0x6b,
0xe8,0xcb,0x06,0xfb,0x1c,0x42,0x0c,0x28,
0x87,0xf9,0x03,0xf4,0xf9,0x7b,0x62,0x42,
0x6a,0x10,0xe1,0x00,0x2c,0xa2,0x07,0x9b,
0x70,0x86,0xaf,0x20,0x03,0x04,0x42,0x08,
0x09,0x61,0x11,0x4f,0x96,0xef,0xc7,0x05,
0x74,0xb6,0x4f,0x9b,0xe1,0x72,0x8a,0x40,
0xc7,0x85,0x1a,0xe4,0x57,0xff,0x04,0xf9,
0x1b,0x26,0xa4,0xc5,0xb6,0x31,0x0c,0x1d,
0x07,0xc8,0xda,0xc2,0xf4,0x66,0x40,0x87,
0xcd,0x0d,0x0e,0xff,0x60,0x60,0x03,0x1d,
0xf8,0x40,0x08,0x46,0x50,0x82,0x12,0x74,
0xdd,0x04,0x2d,0x08,0x41,0xd7,0x65,0x70,
0x75,0x1b,0xd4,0xe0,0x04,0x3b,0x68,0xff,
0x83,0x17,0xa0,0x00,0x76,0x0c,0xcc,0xa0,
0xea,0x2a,0xa8,0x41,0xd9,0xfd,0xc3,0x04,
0x36,0x08,0xc6,0x3f,0xfa,0x01,0x02,0xe6,
0x99,0x30,0x75,0x58,0x00,0xc1,0x15,0x16,
0xc1,0xbc,0xde,0xc1,0x2e,0x87,0xa8,0xfb,
0x02,0x08,0x4c,0x70,0x85,0x20,0x98,0x80,
0x79,0xb5,0xf0,0x99,0x08,0xbe,0x80,0x85,
0x1a,0x5c,0x01,0x86,0x3b,0xd4,0xdd,0xf0,
0xce,0xb1,0x08,0x1a,0xd8,0x00,0x7d,0xc6,
0xc3,0x9a,0x27,0xb4,0x10,0xbe,0xae,0x21,
0xd1,0x05,0x24,0x40,0x5d,0x11,0x82,0xb1,
0x08,0xf4,0x61,0xed,0x78,0x57,0xd3,0x1a,
0xd7,0x08,0x61,0x3c,0xe9,0x31,0xec,0x74,
0x17,0x64,0x63,0x1b,0x21,0xd8,0x81,0x0c,
0xb8,0x51,0x8e,0x73,0x94,0x60,0x06,0xa2,
0xd8,0x0f,0x14,0xa0,0x20,0x03,0x71,0xdc,
0x63,0x1c,0x1f,0xc8,0xc7,0x7f,0x00,0xd2,
0x8f,0x70,0x0c,0x41,0x0d,0x50,0x10,0x02,
0x10,0xa0,0x40,0x82,0x1d,0x40,0x01,0x11,
0x21,0x91,0xc7,0x0e,0xfc,0x23,0x92,0xe9,
0x40,0x01,0x16,0xf6,0x88,0x05,0x13,0xb8,
0x40,0x04,0x21,0xa0,0x81,0x22,0xb1,0xa0,
0x05,0xa6,0xd9,0x00,0x0b,0xff,0x38,0xc7,
0x15,0xe2,0xa0,0xc8,0xdd,0x55,0xf0,0x1f,
0x28,0x30,0xc0,0x0b,0x0c,0xe9,0xc0,0x0e,
0xe0,0x81,0x86,0x57,0xa0,0xc1,0x3f,0xd2,
0xf1,0x0f,0x24,0x7a,0xe2,0x05,0xa3,0x44,
0x1d,0x0d,0xb8,0xf8,0xba,0xda,0x99,0x10,
0x98,0xb4,0x7b,0xdd,0x02,0xe7,0x28,0x48,
0x3a,0x06,0x32,0x99,0x74,0x04,0xe4,0x1f,
0x95,0x89,0x4c,0x07,0xea,0xd1,0x06,0x36,
0xa8,0xc1,0x17,0x50,0x11,0x48,0x54,0xff,
0xd0,0x20,0x03,0x70,0x54,0xa6,0x33,0x01,
0xc9,0xc8,0x1a,0xd8,0x00,0x0f,0xd4,0x54,
0x64,0x04,0xf5,0xc0,0xc8,0x0e,0x90,0xc0,
0x06,0x5f,0x40,0x41,0x3a,0x32,0x80,0x82,
0x2f,0xa8,0xd3,0x04,0x28,0xa8,0x81,0x27,
0xae,0xa0,0x05,0x3d,0x46,0x12,0x05,0xd3,
0xbc,0xc2,0x17,0xb6,0xb9,0xcf,0x2b,0xec,
0xf1,0x99,0x75,0x7c,0xe7,0x0a,0xe7,0xc9,
0x87,0x41,0x76,0x40,0xa1,0x87,0x84,0x03,
0x0a,0x4c,0x50,0x0b,0x13,0x58,0x51,0x8f,
0x71,0x44,0x81,0x16,0x12,0x39,0x50,0x68,
0xba,0x11,0x0e,0xd7,0xf4,0xe3,0x04,0x9b,
0xd9,0x40,0x64,0x7e,0xd4,0xa3,0x10,0x14,
0xe9,0x32,0x4d,0xea,0xc0,0x77,0x82,0xd2,
0x06,0xfd,0xd0,0x42,0x3f,0xee,0x89,0x82,
0x48,0xb2,0xd1,0x8f,0x19,0x40,0x45,0x08,
0x6a,0x71,0x05,0x4f,0x74,0xb2,0xa4,0x0a,
0x7d,0x27,0x08,0x42,0xd0,0x8f,0x5a,0x64,
0x00,0x04,0x27,0x30,0x40,0x38,0x43,0x20,
0x82,0x20,0xac,0x72,0xa6,0x35,0x0d,0x41,
0x08,0x60,0x1a,0x48,0x13,0x88,0xc0,0x90,
0x19,0x8d,0x26,0x0d,0xb4,0x50,0x03,0x48,
0xf8,0x53,0xa1,0x0c,0x8c,0x29,0x23,0xb5,
0x70,0x02,0x10,0xc0,0x81,0x69,0x0d,0x0d,
0x24,0x1c,0xe3,0x89,0x8a,0x6d,0x9e,0xd4,
0x81,0xc6,0x54,0x6b,0x5b,0xdd,0xfa,0x56,
0x08,0xe6,0x31,0x9b,0x51,0x3d,0x01,0x37,
0xdb,0x18,0x47,0x46,0xd6,0x22,0x08,0x5a,
0xf0,0xc4,0x09,0x4e,0xd0,0xc9,0xad,0x4a,
0x10,0x05,0x56,0xb5,0x81,0x3d,0x6d,0x00,
0x09,0xa6,0x21,0x76,0x9e,0xd1,0xac,0x81,
0x5f,0x2f,0xca,0xc0,0x43,0x9e,0x00,0xff,
0x05,0xe7,0xec,0x68,0x03,0xe5,0xaa,0x05,
0x48,0xcc,0xd3,0x87,0x7b,0x0c,0x2c,0x48,
0x69,0xe0,0x09,0x12,0x60,0x81,0x04,0x4e,
0x1d,0x24,0x0a,0x20,0x91,0xc8,0x0e,0xe8,
0xe1,0xad,0x6c,0x85,0x6b,0x6b,0x5d,0x6b,
0xd2,0x3c,0x9e,0x20,0x04,0x9c,0x8d,0xe9,
0x05,0xfd,0xc8,0xca,0xbd,0x7a,0xa2,0x1f,
0xfd,0xf0,0x44,0x2d,0x9e,0x2a,0x41,0x3d,
0xe4,0x71,0xb4,0xb5,0x20,0x6e,0x45,0x49,
0xb0,0xd8,0x68,0xc2,0xc1,0x13,0x9e,0xf8,
0x23,0x2a,0x3c,0x91,0x48,0x3d,0xe0,0xf5,
0x9d,0x79,0xac,0x85,0x58,0xb5,0xb0,0x4a,
0x14,0x80,0xe0,0xb1,0xaa,0x75,0x60,0x70,
0x6d,0x60,0x82,0x0c,0x00,0xf5,0xa9,0x05,
0x25,0x01,0x67,0xe1,0xca,0xda,0xd7,0xa6,
0x57,0xbd,0x1e,0x05,0x68,0x3e,0x25,0xe9,
0xc6,0xe9,0x86,0x00,0x12,0x70,0xf0,0x19,
0x0a,0x48,0x10,0xc4,0x72,0x46,0x70,0x8f,
0xd3,0x9c,0x6e,0x23,0x4f,0x80,0x5c,0x94,
0x9e,0x40,0x04,0x78,0x7c,0x60,0x23,0xc9,
0x99,0x47,0x98,0xd6,0x02,0x12,0x7e,0x25,
0x81,0x4e,0xcd,0xba,0x4e,0x45,0x76,0x16,
0x9b,0x90,0xc8,0x40,0x2d,0xf0,0x59,0x5b,
0xfb,0x1a,0x12,0x8e,0xb5,0x55,0x2b,0x7a,
0xd7,0xfb,0xe1,0x0f,0x67,0x97,0x0c,0xaf,
0x64,0x60,0x65,0x3d,0x5a,0x0b,0x10,0x18,
0xe0,0x0a,0x16,0x1e,0xed,0x3b,0x49,0x20,
0x82,0x44,0x9a,0x78,0x95,0x35,0x25,0x41,
0x3b,0xf3,0x38,0x54,0x7c,0x4a,0xb2,0xa3,
0x19,0xf8,0x82,0x08,0xc8,0x00,0x60,0xae,
0xc2,0xd3,0x00,0xda,0x05,0xe5,0x72,0x89,
0xea,0xe0,0xf7,0x3a,0x14,0xa8,0xe6,0xff,
0xb5,0xac,0x09,0xf0,0xb9,0xd9,0xad,0x66,
0xb7,0xa1,0x5d,0x5d,0x2d,0x88,0xad,0x9c,
0xde,0x98,0xda,0x51,0x04,0x36,0xd0,0xe3,
0x1c,0xe9,0x69,0x03,0x2d,0x84,0xe0,0x0a,
0xa1,0x94,0xec,0x2a,0x0d,0x10,0x04,0x12,
0xac,0x12,0xc3,0x34,0x38,0x41,0x8d,0xf3,
0xb8,0x42,0x1b,0x6c,0x14,0xb2,0xa5,0xd5,
0x02,0x05,0x24,0x2b,0xe3,0x40,0xf2,0xd8,
0x04,0x20,0xb8,0x6a,0x27,0xf3,0x89,0xd7,
0xe0,0xd2,0x20,0xc5,0xe0,0x8d,0xeb,0x55,
0xff,0x01,0x09,0x6d,0x06,0xb2,0x91,0x24,
0xb8,0xe6,0x6b,0x3d,0x7c,0x65,0x48,0x2f,
0x73,0xc3,0x19,0x48,0xc7,0x7d,0xed,0xda,
0x46,0x7d,0x66,0x15,0x05,0x27,0xa8,0x01,
0x2a,0xfa,0x11,0x04,0xfc,0xbe,0x79,0xb9,
0x86,0x54,0x24,0x3c,0x4f,0x00,0x09,0x2c,
0xd0,0x53,0x55,0x20,0xa8,0x05,0x09,0x0c,
0x60,0x80,0x17,0x72,0xf6,0x9d,0x21,0xa0,
0x40,0x8e,0x3d,0x4a,0xc9,0x3c,0x0a,0xf4,
0xbd,0xfa,0xac,0x01,0x09,0xa6,0x2a,0x61,
0x9a,0x1a,0x80,0x06,0x4e,0xfe,0x2d,0x08,
0x48,0xc0,0xce,0xf4,0x3e,0x3a,0xd2,0xcb,
0x76,0x63,0x6a,0x03,0xf9,0x85,0x20,0xa0,
0xb6,0xd9,0x13,0xce,0x40,0x3d,0xa7,0x5b,
0x58,0x4f,0x7c,0x17,0xc1,0x06,0x68,0xb3,
0x09,0x3a,0x80,0x8a,0x23,0x73,0xdb,0x13,
0x1b,0x15,0xad,0x0d,0x50,0x01,0xcf,0x69,
0xea,0x14,0x15,0x41,0x10,0x81,0x36,0xf1,
0x0c,0x52,0xae,0x96,0x58,0x92,0xaa,0x4d,
0x47,0xaf,0x91,0xdd,0x4d,0x90,0x7e,0xe1,
0x91,0x5a,0x20,0xb4,0x1d,0x8f,0x9d,0x01,
0x3e,0x24,0x9b,0xd9,0x03,0x67,0xa6,0xff,
0x6a,0x59,0xe9,0x89,0x2e,0x1f,0xb3,0x16,
0x06,0xd8,0x27,0xc3,0xf7,0x08,0x09,0x4f,
0xd4,0xc0,0xa7,0x21,0x98,0xa7,0x1e,0x41,
0x70,0x5a,0xc7,0xf6,0x83,0x04,0x20,0x98,
0xee,0x67,0x6b,0x91,0x0e,0x46,0x56,0x34,
0x04,0x47,0xac,0x01,0x05,0x9c,0x7a,0xe9,
0x07,0x2a,0x54,0xc2,0x65,0x0d,0x64,0xab,
0x3b,0x29,0xef,0xf7,0x42,0x16,0x04,0x9d,
0x36,0xe6,0x39,0x2b,0x1a,0xd4,0x95,0xbb,
0x55,0xd9,0x04,0xe7,0x79,0x73,0xdf,0x69,
0x83,0x1a,0xa3,0xdc,0x82,0x3c,0xfd,0x47,
0x51,0x4f,0x80,0x8a,0x5b,0x66,0xf7,0x9e,
0x96,0x5c,0xf0,0x15,0x57,0xd8,0xeb,0x10,
0x64,0x13,0xbb,0x14,0x0d,0x73,0x7e,0xbd,
0xca,0x49,0x10,0x8c,0x38,0xbf,0x13,0xdc,
0x6a,0x24,0xf9,0x08,0x47,0x56,0x22,0x17,
0xaf,0xb0,0xac,0xe8,0x17,0x6a,0x70,0x61,
0x8a,0x6e,0xf6,0x9c,0x8e,0xee,0xb9,0x5b,
0x6b,0x8b,0x57,0xaf,0xc7,0x9c,0x8e,0x93,
0x24,0x01,0x59,0x39,0x6c,0xdb,0x55,0x0e,
0xf5,0xa2,0x8c,0xec,0x71,0x8d,0xf9,0xe0,
0xdf,0x57,0x9b,0x40,0xcc,0x68,0x95,0x75,
0x9e,0xc1,0xba,0xf5,0x9e,0x9e,0xe0,0x0b,
0xb5,0x80,0x79,0x04,0xdf,0xde,0x5f,0xa5,
0xd2,0xa0,0x1f,0xb5,0xf4,0x68,0x06,0xb4,
0x50,0x8b,0x7e,0x68,0x95,0xea,0x35,0x28,
0xa9,0xce,0xdb,0xde,0x56,0xaf,0xf7,0x31,
0x03,0x7a,0x08,0xb8,0xdc,0xe7,0x18,0xdd,
0xec,0x72,0x39,0xe7,0x8b,0x94,0x24,0x0a,
0xe0,0x50,0x66,0x95,0xa3,0xa0,0xaf,0x78,
0x1d,0x6c,0xb6,0xb1,0x00,0xe6,0x08,0x6f,
0x15,0xe4,0x5a,0xf0,0x35,0xe2,0x19,0xff,
0x09,0x89,0xd9,0xc2,0xf4,0xee,0xfa,0xd5,
0x63,0x0d,0xfa,0x01,0xf4,0xc9,0x2b,0x98,
0xeb,0x79,0x85,0x03,0x66,0xcb,0x09,0x76,
0x38,0x80,0xf7,0xdd,0x1d,0xfe,0xfc,0x49,
0xf7,0x18,0x0c,0x53,0xd8,0x62,0x12,0x93,
0xb0,0x85,0x29,0xf2,0x91,0x01,0x5c,0x20,
0x74,0x99,0x7d,0xb4,0x41,0x50,0xe5,0xb8,
0x50,0x22,0xc2,0x41,0x9b,0x1b,0x06,0xe8,
0x86,0x57,0x69,0xfc,0x7f,0x68,0x01,0xad,
0x2a,0x97,0xa4,0x85,0x4d,0x50,0x03,0x12,
0x37,0x70,0xa1,0x62,0x65,0xf9,0x04,0xa9,
0xdb,0x0f,0xbf,0x8a,0xbe,0xf8,0x03,0x81,
0x2f,0xd0,0x82,0x77,0xdb,0xa3,0x4d,0x53,
0xa7,0xf5,0xdb,0x26,0x9a,0x52,0xbf,0xe9,
0xa3,0xbe,0xea,0x1b,0xbf,0x5a,0xd0,0x87,
0x2d,0xa8,0xc0,0x2d,0x88,0x86,0x3a,0x18,
0x80,0x1f,0xf8,0x81,0x49,0x08,0x06,0x5d,
0xc3,0xb4,0x7f,0x40,0x3d,0x12,0xa8,0xb1,
0x07,0x2c,0xb0,0x28,0xba,0x3f,0x12,0x7b,
0xa7,0x1a,0x20,0x83,0x44,0x8b,0xae,0x85,
0x43,0x85,0xeb,0xd2,0xb1,0x12,0xeb,0x87,
0x47,0xaa,0x01,0x42,0xd3,0x3f,0x9e,0x72,
0x3d,0x1b,0xf8,0xc0,0x68,0x52,0x24,0x9f,
0x6a,0x33,0xce,0xdb,0xb6,0x1a,0xb0,0x2a,
0xae,0xdb,0xa7,0x2b,0x99,0x2d,0x81,0x0a,
0x2e,0x13,0x78,0xa4,0x79,0x63,0xbb,0x08,
0x9c,0xb6,0x96,0xc3,0x81,0x03,0xc0,0x01,
0x38,0x38,0x80,0x03,0x80,0x03,0x1c,0xd8,
0x04,0x45,0xd8,0x82,0x3a,0x68,0x05,0x74,
0x70,0xb7,0x48,0x12,0x3a,0xc1,0xfa,0x02,
0x25,0x8a,0xb0,0xb2,0x0a,0x43,0x58,0x7a,
0xa7,0x78,0x4a,0x24,0x1a,0x78,0xa4,0xff,
0x6d,0x82,0x23,0x36,0x03,0xaf,0x98,0xb2,
0xb0,0x02,0x7c,0xc3,0x1d,0xc3,0x2c,0xfc,
0xdb,0xba,0x02,0x23,0x81,0x1c,0xcb,0xa3,
0xe8,0x2a,0x28,0x00,0x0c,0x01,0x61,0x83,
0xa4,0x3d,0xf2,0xa5,0x4e,0xe2,0xb7,0xf1,
0x92,0x24,0x38,0x12,0x2d,0xd0,0x42,0xb3,
0xdc,0xb3,0xa5,0x7e,0xb8,0x41,0x81,0x7b,
0x42,0x36,0xda,0x2a,0x3b,0x32,0x80,0x29,
0xc4,0x01,0x4d,0x9c,0x42,0x4e,0xb4,0x42,
0x77,0xb0,0x03,0x7d,0x40,0x87,0x73,0xe0,
0x41,0x36,0xa2,0xa7,0x88,0x43,0xb0,0x37,
0x0c,0xbd,0xe9,0xea,0x00,0x10,0x88,0x44,
0x3d,0x62,0xa5,0xa9,0xe2,0x23,0xb8,0x5b,
0xa5,0x3d,0x43,0x31,0x98,0xaa,0xac,0x94,
0x82,0x04,0xdf,0xf2,0x28,0x54,0x80,0x30,
0x13,0xa8,0xb8,0x5a,0x28,0xac,0xe3,0xca,
0x35,0xae,0xa2,0x34,0x03,0x98,0x27,0x1e,
0xeb,0x87,0x4b,0x83,0xbe,0xde,0x22,0x81,
0x97,0x0a,0xc3,0xec,0x22,0xb0,0xf5,0xda,
0x39,0x4a,0x4c,0xb9,0x6a,0xcb,0x44,0x4d,
0xdc,0x44,0x29,0xdc,0x44,0x2b,0x3c,0x80,
0x72,0xd0,0x07,0xc6,0x2b,0xc1,0x02,0x33,
0x01,0x75,0xda,0xb8,0x73,0x43,0x45,0x54,
0xa8,0x05,0xac,0xe2,0xc3,0x73,0xd3,0xb1,
0x28,0x22,0x40,0x1a,0xe0,0x26,0x95,0x63,
0x24,0xed,0xb2,0xc5,0xc6,0xc3,0x26,0x6d,
0xb3,0xa0,0x8a,0x2a,0x2a,0x05,0x24,0x01,
0xdd,0x3a,0x47,0x45,0xb4,0x2c,0x8b,0x9a,
0x28,0x7a,0x3a,0xb6,0x7c,0x52,0x24,0x7f,
0xfc,0x02,0x36,0x73,0x35,0x45,0x7a,0x27,
0x97,0x13,0xc7,0x93,0xa2,0xc6,0x6a,0x94,
0x37,0x54,0x58,0x04,0x6c,0xcc,0xc6,0xff,
0x6c,0xcc,0xc4,0x4e,0x74,0x07,0x39,0xa8,
0x81,0xa0,0x82,0xc8,0x0c,0xc0,0x83,0xe2,
0x13,0xab,0xe6,0xd3,0x02,0x2d,0x80,0x83,
0xf9,0xaa,0x3b,0x10,0x38,0xb7,0xaf,0x83,
0x23,0x54,0x00,0x81,0x95,0xba,0x45,0x45,
0x04,0x27,0x1b,0xc4,0x27,0x19,0xab,0x30,
0x72,0xb2,0x20,0x1e,0x3b,0x01,0x38,0xa8,
0xb4,0x31,0x63,0xa7,0x59,0xcc,0xc1,0x57,
0x7b,0x3e,0x70,0xe2,0xc3,0x5a,0xd0,0x83,
0x56,0x63,0xb4,0x8a,0x3a,0x81,0x56,0x43,
0x2b,0x78,0xd2,0x82,0x7b,0x9b,0xc6,0x89,
0xbc,0x20,0xbe,0x7b,0x01,0x1c,0x70,0x07,
0x8c,0xcc,0xca,0x6d,0xb4,0x42,0x29,0x3c,
0x00,0x50,0x34,0x01,0xb4,0x72,0x26,0xb1,
0xc4,0xae,0xc1,0xaa,0x85,0x2f,0x58,0x3c,
0x85,0x0c,0xb9,0x62,0xd4,0x3f,0x29,0x73,
0x37,0x94,0xaa,0xb0,0x1a,0x38,0xc6,0x99,
0x8a,0x26,0xed,0xda,0xa8,0x84,0x4b,0x39,
0x46,0x5a,0xa7,0x2f,0x38,0x3c,0xf3,0xe2,
0xae,0x7f,0x32,0x49,0x3d,0x9c,0xb1,0xb3,
0x53,0x47,0xdf,0x7a,0x27,0x9e,0xdc,0x27,
0x8e,0x3b,0x3b,0xc0,0x02,0x31,0x89,0xac,
0x46,0x06,0xac,0x85,0x03,0xb0,0x4a,0xad,
0xcc,0x4a,0x4e,0xdc,0x4a,0x1c,0x90,0x03,
0x10,0x68,0xc1,0xf7,0xe2,0x2e,0xbc,0xbb,
0xa5,0xce,0x53,0xc4,0xec,0x72,0x43,0x19,
0x3b,0x27,0xc4,0x42,0x05,0xfa,0xb3,0x44,
0x54,0x48,0xb3,0x70,0xd2,0x82,0x3f,0x24,
0x29,0x0b,0x0b,0x3b,0x3d,0xa4,0xbf,0x7d,
0xfc,0xad,0x3f,0xca,0x23,0xa5,0x7a,0x36,
0x4f,0x98,0xa7,0x15,0xba,0xaa,0x3e,0xb2,
0xb2,0xc6,0x9c,0xc8,0x74,0x30,0x81,0xff,
0xc8,0x9c,0xcc,0xc9,0xac,0xcc,0x6e,0x34,
0x80,0x45,0xf8,0x48,0xd5,0x82,0xc8,0xf3,
0xcb,0x00,0x13,0x30,0x00,0x77,0x0a,0x48,
0xba,0xf4,0x84,0x20,0x88,0x45,0x9e,0xf2,
0x2a,0xa8,0xfc,0x2a,0x73,0xc3,0x33,0xd3,
0x7a,0x28,0x86,0x33,0xbd,0x24,0xc3,0xaa,
0xe8,0x74,0xa3,0xa5,0x2c,0xb5,0x89,0xfa,
0x3a,0xc6,0x9c,0x4a,0x9d,0xbc,0x46,0xab,
0x94,0x4c,0xe2,0xcc,0x48,0x8c,0xb4,0xc2,
0x17,0x58,0x04,0x13,0xc0,0xb7,0xd7,0x12,
0x36,0xda,0xe2,0xcc,0x67,0x1b,0xad,0x10,
0x38,0xb6,0x21,0x04,0x4d,0x13,0x68,0x3e,
0x38,0x58,0x49,0xf7,0xc2,0xc5,0x5a,0x78,
0x81,0x74,0xe8,0x87,0x62,0xc0,0x05,0xfb,
0x7c,0x27,0x56,0x34,0xc0,0xb4,0x22,0x4f,
0x3e,0x24,0xca,0x0d,0x73,0xb6,0x0f,0xfb,
0x4d,0x4a,0xa4,0x34,0x10,0x18,0x4e,0xf7,
0x7c,0x4f,0xcb,0x9c,0xc2,0xc5,0xc1,0x81,
0xa2,0x0a,0x4b,0xfb,0x34,0xa9,0x77,0xe2,
0x31,0xb4,0x63,0x20,0xfd,0xb4,0x2f,0x9f,
0x82,0xc9,0x2b,0xa0,0x41,0x04,0x5c,0x42,
0x6a,0x3a,0xd1,0xb5,0xbb,0x3b,0x56,0x52,
0x47,0x2d,0xc8,0x07,0x94,0xc3,0x03,0xb3,
0xb3,0x28,0x5d,0x1b,0xbe,0x09,0x32,0xcd,
0x30,0x54,0x39,0x3f,0xd2,0xcf,0x49,0x54,
0xcf,0x37,0x0a,0x24,0x8b,0x6c,0x4f,0x0f,
0x85,0x4f,0xe3,0xdc,0xc6,0x21,0xfb,0x02,
0x7c,0x03,0xd2,0xbb,0x1a,0xb6,0x7f,0xa0,
0x01,0xce,0x93,0x2e,0xb6,0x0c,0xa7,0x43,
0x62,0x1a,0x9b,0x32,0x00,0x14,0xe5,0xbd,
0xa8,0x74,0x3c,0x1e,0x83,0x83,0xf0,0xd2,
0xbc,0x98,0x62,0xa5,0xef,0x02,0xca,0xff,
0xf1,0x6b,0x3b,0x0c,0x8d,0x40,0x3e,0x5a,
0x04,0x4d,0x64,0xd2,0x0e,0x25,0xce,0x27,
0xed,0xc6,0xf9,0x94,0x3e,0x2a,0xc5,0xb4,
0xd4,0x7c,0x1c,0x38,0x48,0x41,0x15,0x5d,
0xa5,0x78,0xf2,0xad,0x13,0x08,0x22,0x1a,
0x78,0x3d,0x38,0x88,0xbe,0xfb,0x0b,0x4c,
0x1c,0xcc,0xbb,0x3d,0x03,0x81,0x74,0x88,
0x2e,0x94,0x4a,0x27,0x76,0xda,0x53,0x24,
0x65,0xa0,0x37,0x85,0xd3,0x7f,0x90,0x53,
0x3a,0x6d,0x52,0xca,0xdc,0xc6,0x4d,0x7c,
0x01,0x43,0x2b,0xd2,0x64,0x72,0xce,0x44,
0x12,0xbc,0xdc,0xcc,0x27,0x6e,0xa2,0xa9,
0x7e,0xa8,0x01,0x24,0xaa,0x4e,0xb9,0x9a,
0xbc,0x1b,0x33,0xbf,0x09,0xd2,0x03,0x4a,
0x62,0xa9,0x7e,0x78,0xc3,0x67,0x5a,0x28,
0xc0,0x5c,0xbd,0x4b,0xc5,0xd4,0x5f,0x85,
0x20,0x84,0x5a,0x52,0x1c,0xe8,0x54,0x4f,
0xfd,0xd4,0xae,0x04,0xa3,0x05,0x2c,0xd5,
0x1e,0x9a,0x2e,0x67,0x84,0x84,0x6b,0xd2,
0x23,0x3d,0x58,0x42,0x21,0xba,0xa9,0x2b,
0x28,0x35,0x1b,0x54,0x24,0x18,0xb4,0xd4,
0x55,0xf2,0x25,0xbf,0xf2,0x2d,0x85,0x8a,
0xae,0xeb,0x4c,0x46,0x46,0x95,0x37,0xe6,
0x1c,0xb8,0x4c,0x85,0x53,0x10,0x28,0x56,
0x76,0x65,0xd7,0x3a,0x3d,0x56,0x6e,0x2c,
0x56,0x56,0x2b,0x57,0xaa,0x44,0x05,0x0a,
0x03,0x3b,0x10,0x08,0x82,0xe7,0x92,0xb8,
0x99,0xeb,0xa4,0x2f,0xc8,0x36,0x2e,0x0b,
0x24,0x56,0x63,0x40,0x03,0xd8,0x45,0xc7,
0x53,0xb2,0xc2,0x62,0x4a,0xda,0xec,0x3a,
0x87,0xb2,0xb5,0x06,0xe2,0x03,0xf1,0xcb,
0x87,0x47,0x30,0x85,0x64,0x70,0xa7,0xff,
0x73,0xbd,0xb2,0x74,0xe5,0x29,0x04,0x44,
0xc5,0xd1,0x63,0x40,0xd1,0x3b,0x51,0x4a,
0x0b,0x59,0x81,0xf2,0xd5,0x37,0x72,0xce,
0xc8,0x7c,0x01,0x94,0x75,0xd7,0x76,0x85,
0x57,0x6d,0x94,0x4f,0xfa,0xa4,0x2d,0x39,
0x4a,0xa9,0x79,0xb2,0x39,0x13,0xf0,0xab,
0x87,0x52,0x2a,0x3d,0xf0,0x19,0x1e,0x1b,
0x3d,0x54,0x30,0xd3,0x7f,0x72,0xb9,0xa7,
0x9a,0xc7,0x1b,0x23,0x81,0x60,0x3c,0x2c,
0x20,0xd3,0xb1,0xfd,0x32,0xbf,0xd4,0x0a,
0x3f,0x53,0x98,0x04,0x67,0x78,0xda,0x01,
0x88,0x5a,0x51,0xf0,0x05,0x53,0x10,0xbe,
0x08,0x4c,0x57,0x3e,0x1a,0xac,0x47,0xad,
0x81,0x73,0xb0,0xa4,0x73,0xca,0xa6,0x73,
0xa0,0x01,0xb1,0x1d,0xdb,0xb0,0x0d,0x5b,
0x1a,0xe0,0x03,0x92,0x2d,0xd9,0x2f,0x40,
0x59,0xb6,0x55,0x59,0x77,0x7d,0x01,0x77,
0x78,0x57,0x4f,0x1d,0xd1,0xcf,0x94,0x20,
0x54,0x08,0xd0,0x0a,0x45,0x81,0x5e,0x3c,
0x3a,0x04,0xa3,0x2f,0x5c,0xe8,0xb2,0xec,
0xda,0xbb,0xe0,0xaa,0x01,0x38,0x28,0xcc,
0x3e,0x6a,0x24,0x94,0xac,0xb6,0xde,0x8a,
0xbe,0xc0,0x7c,0xa7,0x7e,0x70,0x38,0x3e,
0xc0,0x85,0x7c,0x70,0x5a,0x67,0x58,0x03,
0x1e,0x50,0x04,0x5d,0x88,0x03,0xcd,0xbd,
0x00,0x5d,0x70,0x05,0x10,0x00,0x4f,0x9e,
0x4b,0x57,0x5b,0xc2,0x83,0xfb,0xa2,0x00,
0xd3,0xdd,0x14,0x5e,0x30,0x85,0x5b,0x05,
0x35,0xd6,0xbd,0x02,0xd7,0x65,0xdd,0xbe,
0xd9,0x87,0x12,0xb5,0xad,0x8a,0x2c,0xd6,
0xb6,0x6d,0xcf,0xf6,0xbc,0x80,0x03,0xd0,
0x5d,0xb9,0xf5,0xd0,0xb8,0xcd,0xcc,0xff,
0x08,0xbd,0x20,0x87,0x02,0xa2,0x20,0x28,
0x86,0x51,0x5a,0xa8,0x0c,0x78,0x1c,0x41,
0x03,0x81,0xde,0x82,0xa9,0xe8,0xd2,0x83,
0x75,0xd2,0xd5,0xbc,0x32,0x00,0x48,0x18,
0xc2,0x2f,0x58,0xc2,0xcc,0xca,0x23,0xdd,
0xc2,0x82,0x01,0xd5,0xc3,0xd1,0x1b,0x4a,
0x80,0x33,0x85,0x1f,0xb0,0x00,0xcb,0xdd,
0x82,0x0b,0xb8,0x80,0xcd,0x3d,0x5f,0xf4,
0x45,0x5f,0x39,0xac,0x3e,0xac,0x65,0x33,
0x0a,0x38,0x86,0x18,0xc8,0x82,0x2c,0x38,
0x05,0xd3,0x65,0x02,0x5b,0xc0,0x82,0x38,
0x78,0x87,0x78,0xe8,0xdf,0x78,0x30,0xdd,
0x3b,0xf0,0xdf,0x77,0x88,0x81,0x14,0x68,
0x21,0x66,0x5a,0x57,0xb6,0xed,0xd4,0x17,
0x38,0x00,0x1f,0x23,0x03,0x50,0x68,0x82,
0xde,0xf5,0xd0,0xf9,0xa4,0x55,0xe1,0xad,
0x81,0x63,0x88,0x5f,0x67,0xd8,0x07,0xa2,
0xdb,0x23,0x31,0x83,0x04,0x47,0x8c,0x3d,
0x03,0xb8,0xb0,0x21,0x5d,0xa5,0x7f,0x40,
0x31,0x3e,0x43,0xc4,0x9e,0xa2,0x25,0xe7,
0x2c,0x2f,0x74,0x94,0x38,0xce,0xc3,0x05,
0xf1,0x25,0xdf,0x68,0xd0,0x85,0xf5,0x55,
0xdf,0x1a,0x3e,0xdf,0x38,0xe0,0xbc,0xab,
0xa5,0xa3,0x74,0x88,0x03,0x0a,0x38,0x02,
0x30,0x68,0x04,0x21,0x4e,0x01,0x67,0xd8,
0x06,0x0a,0xc8,0x85,0x04,0x30,0x85,0x66,
0x10,0xe2,0x46,0x00,0x03,0x23,0xf6,0x82,
0x06,0x68,0x62,0x21,0xf6,0x03,0x0f,0x74,
0x3c,0x95,0xe3,0xae,0x30,0x74,0x4e,0xdb,
0x4d,0xe0,0x04,0x66,0x60,0xd3,0xfd,0x80,
0x01,0x88,0xe0,0xab,0x24,0xce,0x17,0x90,
0xcb,0x99,0x42,0xc3,0x8e,0xc2,0x05,0xff,
0x40,0x20,0x03,0x0a,0x78,0x07,0x22,0xf0,
0x05,0x14,0x28,0xbd,0x82,0x3a,0x01,0xcb,
0x0b,0x2a,0xd4,0x43,0x2c,0xf7,0xa2,0xbf,
0x12,0x43,0xb0,0x2e,0xdb,0xa3,0x13,0xe8,
0xc3,0x41,0xd3,0x2e,0xed,0x32,0x01,0x3d,
0x80,0xe1,0xf1,0x5d,0x83,0x68,0x60,0x85,
0xf4,0xb5,0x61,0x46,0x46,0x5f,0x1d,0x76,
0xdf,0x63,0x3a,0x87,0x20,0xa0,0x80,0x35,
0x68,0x84,0x04,0x38,0x84,0x64,0x38,0x04,
0x0f,0x18,0x83,0x1f,0xf6,0x80,0x47,0xd8,
0x87,0x04,0x08,0xe5,0x49,0x10,0x01,0x0a,
0xe0,0x00,0x3f,0x08,0xe5,0x50,0x7e,0x84,
0x9c,0x9b,0x2e,0x2c,0x48,0xb5,0x2e,0x5b,
0x28,0x1a,0x78,0xb5,0x04,0x36,0x00,0x39,
0x68,0x25,0xeb,0x21,0x65,0x0a,0xf0,0x01,
0x67,0x30,0x80,0x39,0x2d,0xd6,0x45,0x90,
0x83,0x5f,0xee,0x50,0x94,0xb5,0x83,0xf6,
0x04,0xe6,0x2c,0xe5,0xaa,0x1c,0xac,0xa4,
0x3c,0x5a,0x41,0x0a,0xb8,0x03,0x0b,0x68,
0x02,0xf9,0x43,0xb0,0x56,0x1e,0xc2,0x6a,
0x12,0x28,0x1e,0xa3,0x5e,0xc2,0x8b,0x37,
0xff,0xab,0x01,0x24,0xd4,0x27,0x75,0xc4,
0x3f,0x7f,0x32,0x64,0x19,0xce,0x86,0x45,
0x6e,0x64,0x46,0x8e,0x83,0xa3,0x0d,0x5d,
0x2f,0x43,0x07,0x52,0xb6,0x00,0x0f,0xd0,
0x03,0x78,0x66,0x24,0x5f,0x70,0x84,0x39,
0x68,0x86,0x43,0xf8,0xb6,0x0e,0xc0,0x05,
0x1a,0x60,0x63,0x77,0x3e,0xa7,0x6f,0xd3,
0x66,0x90,0xaa,0x37,0x12,0xf0,0xab,0x38,
0x40,0x87,0x43,0x08,0xb8,0x0e,0xd0,0x02,
0x76,0xf0,0x19,0x52,0x40,0xd9,0x7e,0x68,
0xaa,0x10,0xe0,0x85,0xc7,0x31,0x62,0xff,
0x0a,0x88,0x01,0x24,0xe0,0x05,0x3b,0x88,
0xdb,0x72,0xb0,0x81,0xd5,0xe8,0x2b,0x5d,
0x90,0x83,0x39,0xed,0x19,0x86,0x8e,0x03,
0x17,0xf0,0x04,0x17,0xc8,0x06,0xd5,0x2d,
0xab,0xc1,0x02,0xbe,0x13,0xc8,0x06,0x74,
0x40,0x07,0x36,0xbe,0x83,0x66,0x68,0x05,
0x73,0x83,0x3a,0xd9,0xb2,0x81,0x62,0xa8,
0x66,0x15,0xcd,0xa3,0x63,0x14,0xa1,0x5c,
0x9b,0x3e,0x3b,0x5a,0xbf,0x2c,0x46,0x30,
0x71,0x46,0x64,0x72,0x8e,0x03,0x73,0x4e,
0xea,0xf3,0xf5,0xa7,0x8b,0x55,0xaf,0x4c,
0xcd,0x00,0x53,0x98,0x64,0x4c,0x48,0x80,
0x54,0x1b,0x3d,0x3d,0x78,0x04,0x3f,0x68,
0x04,0x2a,0x96,0x54,0x3b,0xe2,0x67,0x0f,
0xd8,0x2a,0xae,0x8e,0xa6,0x9a,0x62,0xe3,
0xd3,0xdd,0x86,0x6e,0xd0,0x60,0x14,0xe0,
0x05,0xd3,0x3d,0x86,0x5c,0x68,0x85,0x17,
0xb8,0x02,0xd3,0x3d,0x82,0x35,0x70,0x84,
0xd3,0x3d,0x5d,0x7a,0x18,0x00,0x52,0x80,
0x03,0xf3,0xa9,0xeb,0x6d,0xc0,0x04,0x27,
0x10,0x51,0x5a,0xa3,0x00,0x7a,0xc0,0x84,
0xba,0xa6,0x00,0x71,0x98,0x04,0x77,0xa2,
0x27,0xb8,0x3e,0x5d,0x11,0xc8,0x04,0x23,
0x76,0x04,0x22,0x68,0x02,0x5c,0xb0,0x01,
0xb2,0x66,0x6c,0x50,0xd8,0x87,0x84,0xa2,
0x27,0xac,0x82,0x04,0x8b,0x62,0x53,0x82,
0x0a,0xc3,0x80,0x1b,0xbd,0xa2,0x8e,0x86,
0xa3,0x56,0xea,0xa4,0x8e,0x83,0x45,0xe8,
0x3f,0x37,0xa5,0xa3,0x43,0xc8,0x84,0xf8,
0xbd,0x82,0x70,0x00,0x84,0x60,0x48,0xb5,
0x74,0x78,0x84,0x04,0x90,0xdd,0x12,0x4b,
0x87,0x7d,0x3e,0x86,0x7e,0xb6,0xa0,0xff,
0x74,0x38,0x01,0xbb,0x9e,0x83,0xd3,0x45,
0xe2,0x0e,0xd8,0x07,0x26,0x30,0xdd,0x78,
0x18,0x80,0x24,0x58,0x6b,0x1f,0xe0,0x00,
0x26,0x38,0x02,0x7e,0x40,0xee,0x39,0x18,
0x04,0x0e,0x20,0x85,0xc5,0x3e,0x06,0x7a,
0x38,0x82,0xd3,0x7d,0xe0,0x72,0x08,0x6c,
0x23,0xbe,0x83,0x39,0xb8,0x60,0xd3,0xe5,
0x01,0x5f,0xe0,0xb1,0x49,0x36,0xdd,0x39,
0x08,0xef,0xd3,0xfd,0x05,0x22,0x48,0x00,
0x48,0x30,0xdd,0x6d,0x88,0x81,0x41,0xb0,
0xdf,0xf8,0xfd,0x81,0x7d,0x10,0xd7,0x55,
0xe2,0xbd,0x21,0x44,0xb1,0xc3,0x22,0xc5,
0x12,0x4b,0x2d,0xd5,0x52,0xa8,0xc8,0x8d,
0x61,0x44,0x56,0x64,0xd3,0x36,0xed,0x1c,
0x36,0xc3,0xcf,0xc3,0xda,0x04,0xc8,0x85,
0x3b,0x30,0x5d,0x32,0xb8,0x92,0x72,0x40,
0x07,0x4b,0x42,0x05,0xae,0xee,0x6a,0x0a,
0x70,0x67,0x03,0x86,0xa0,0xe0,0xaa,0xb3,
0x1f,0x06,0x83,0x06,0x48,0x01,0x1e,0x80,
0x6f,0xfb,0x4e,0x07,0x5f,0xa0,0xe8,0x53,
0xa0,0x6b,0x0a,0xc8,0x82,0x25,0x88,0x86,
0x2d,0x98,0x6b,0xd3,0x95,0x02,0x30,0xb0,
0x80,0x01,0x68,0x03,0xf4,0xf6,0x82,0x19,
0x47,0x82,0x0b,0x4e,0x6e,0x52,0x08,0x6c,
0x0a,0x90,0x80,0x25,0xf0,0x02,0x22,0xa0,
0xe8,0x18,0x70,0x86,0x70,0x32,0x5d,0x7e,
0xf0,0x81,0x28,0x1e,0x00,0x15,0x67,0xef,
0x04,0xd0,0x94,0x15,0x67,0x83,0x46,0x48,
0x01,0x4c,0xb8,0xe0,0x2c,0xf0,0x03,0x3e,
0x58,0xce,0x28,0xfa,0xce,0x77,0xfa,0x07,
0x75,0x6a,0x47,0x0e,0x1b,0xbb,0x7f,0x18,
0xf0,0x43,0x4e,0xe4,0x72,0x3e,0x70,0xff,
0xf5,0x45,0xea,0xa5,0x9e,0x5d,0x82,0x13,
0xdd,0x60,0xf0,0x80,0x66,0x20,0x82,0x53,
0x88,0x07,0xf1,0xde,0x86,0x10,0xc8,0xdf,
0x98,0xd3,0x6d,0x36,0xe6,0x80,0x77,0x76,
0x3c,0x5b,0xd2,0x14,0x32,0xf0,0x81,0x46,
0xf0,0x80,0x7d,0xf0,0x00,0x71,0x18,0xef,
0x77,0x3e,0x04,0x45,0x28,0x6c,0x78,0x58,
0x82,0x01,0x28,0x07,0x03,0x70,0x05,0x5c,
0xf6,0x01,0x0b,0x20,0x05,0x77,0x98,0xe4,
0x63,0xf0,0x01,0x30,0x88,0x06,0x27,0x88,
0x86,0x32,0x30,0xdd,0x2c,0x10,0x05,0xef,
0xf6,0x02,0x0e,0x68,0x85,0x56,0x38,0x6e,
0x0a,0x38,0x05,0x0e,0x90,0x03,0x5c,0x26,
0x82,0x06,0x20,0xf4,0x04,0xd8,0x02,0xd3,
0x75,0xe3,0x27,0x37,0xdd,0x53,0xf8,0x01,
0x53,0x38,0x84,0x56,0xc8,0x82,0x0f,0x30,
0x65,0xaf,0xab,0xa8,0x48,0xfc,0xba,0x94,
0xa2,0x38,0xda,0x2c,0xc6,0xf0,0x2d,0x73,
0x72,0xb6,0x61,0x55,0x71,0x01,0x9f,0x41,
0x73,0x1c,0x7e,0x01,0x80,0x5e,0xed,0xb9,
0x2b,0x6e,0x3f,0x48,0x81,0x46,0xb0,0x00,
0x1e,0xa0,0xef,0x32,0x40,0xec,0x55,0xdd,
0xe7,0x0c,0xff,0xea,0x3a,0xea,0x31,0xd3,
0x8d,0x01,0x4c,0xf0,0xab,0x42,0x1d,0x77,
0x2a,0xce,0x80,0x7d,0x20,0x6c,0xe4,0x26,
0x75,0x52,0x80,0x84,0x05,0x6e,0x75,0x67,
0x80,0x84,0x0b,0x58,0x6b,0x09,0x10,0x07,
0xd7,0xf5,0x04,0x5c,0x2e,0xf2,0xc0,0x06,
0xe2,0x26,0x80,0x03,0x39,0x00,0xee,0x54,
0x07,0x83,0x6c,0x60,0xe3,0x63,0x00,0x83,
0x14,0x48,0x86,0xe8,0x2a,0x86,0x98,0x5e,
0x83,0x56,0xc8,0x86,0xba,0x0e,0x82,0xff,
0x92,0xc6,0x84,0x18,0x68,0x85,0xfb,0x4e,
0xa9,0x41,0x0e,0x5a,0xc8,0xe2,0xe6,0xc7,
0x02,0x29,0x3e,0x20,0x70,0x1e,0x50,0x64,
0x35,0x3f,0x80,0x10,0x30,0x69,0x1b,0x40,
0x6a,0xa2,0x71,0xf6,0x1c,0x46,0xcf,0x05,
0x67,0x26,0x69,0xed,0x80,0x7c,0x28,0xf4,
0x6a,0x1f,0x80,0x07,0x1f,0x83,0x04,0x78,
0xaf,0x64,0xf0,0x76,0x3e,0x37,0xd2,0x06,
0x0a,0xce,0xca,0x2e,0x6c,0xd3,0x95,0x80,
0x84,0xd7,0x03,0x2c,0x70,0x82,0xd3,0x95,
0x80,0x4d,0x87,0xf7,0x78,0x8f,0x5f,0x22,
0xd8,0x65,0x1f,0x06,0xfa,0xba,0x96,0x80,
0x66,0xe8,0xf7,0xea,0x86,0x04,0x39,0x58,
0x92,0x81,0xef,0x06,0x00,0xf6,0x82,0x77,
0x86,0xa3,0x73,0x20,0xe5,0x77,0x68,0x86,
0x62,0x50,0x84,0x5c,0x50,0xf1,0xd3,0x3d,
0x86,0x20,0xc0,0x04,0x8e,0xc3,0x3c,0x7c,
0xe2,0xb7,0xb1,0x8b,0xb2,0x60,0x74,0xb8,
0x40,0x2a,0xea,0x90,0x57,0x73,0x1c,0x36,
0xac,0x4d,0x50,0xdf,0x66,0x3f,0xf0,0x38,
0x70,0x07,0xd3,0x14,0x73,0x69,0x27,0x4f,
0xde,0x52,0x84,0xfb,0x86,0xe7,0x73,0x4a,
0x06,0x0f,0x00,0x85,0x54,0xf7,0x03,0xcf,
0xf2,0x6a,0x2a,0x45,0x01,0x76,0x06,0x75,
0x22,0x98,0x7c,0xca,0x27,0x02,0x0b,0x28,
0x60,0xf3,0xae,0x6b,0x24,0x10,0x85,0xb6,
0xc5,0x65,0x29,0x98,0xf7,0x38,0xb8,0x60,
0x7e,0xe0,0x75,0xfa,0xfd,0x00,0xd2,0xd7,
0x65,0x1b,0xff,0x61,0x0e,0x50,0x84,0x17,
0x08,0x78,0x5b,0x07,0x83,0x6e,0x60,0x63,
0x7e,0xb0,0x80,0x1f,0x70,0xb7,0x5a,0xf8,
0xee,0x66,0x48,0x00,0x13,0x68,0x85,0xff,
0x01,0x20,0x02,0x24,0x80,0x07,0xb3,0xc7,
0x04,0x51,0xb8,0x38,0x52,0x1b,0x58,0x23,
0x65,0x24,0x4f,0xeb,0x87,0x42,0x06,0xf9,
0x4d,0xb0,0xfb,0xf3,0x2d,0xd4,0x13,0x68,
0xe4,0x10,0x70,0xfe,0x46,0x46,0xea,0x1c,
0xbe,0x25,0x4a,0xcc,0x54,0x14,0xf0,0x61,
0x4c,0xf0,0x03,0x67,0x33,0x7c,0x2c,0x60,
0x07,0xc1,0xc6,0x7c,0x5b,0xd2,0xf9,0x3e,
0x4f,0xd2,0x47,0xc0,0x74,0x0b,0xd0,0x6a,
0x3f,0x68,0xff,0x1f,0xf0,0x83,0x1f,0x48,
0x00,0x46,0xf2,0x71,0xd3,0xfd,0x05,0x1e,
0x70,0x02,0x94,0xf5,0x62,0x0a,0x68,0xfa,
0x72,0x00,0x08,0x77,0x22,0x28,0xf0,0xf3,
0xc1,0xc1,0xd9,0x00,0x84,0x03,0x78,0x0c,
0x68,0x15,0x82,0x02,0x85,0x23,0x1c,0x48,
0xc1,0x59,0xe4,0x02,0x22,0x3c,0x30,0xae,
0x06,0x52,0xc8,0x32,0x00,0x04,0x2a,0x2c,
0x5a,0x20,0xbe,0x6b,0x96,0x00,0x44,0xb9,
0x6e,0xaf,0x7e,0xa4,0xe0,0x80,0x09,0xe2,
0x91,0x14,0x8f,0x50,0xa0,0xc8,0x90,0xc1,
0x84,0x16,0x14,0xff,0x76,0xf2,0xfc,0xd7,
0x21,0x03,0x0a,0x2d,0x71,0x7e,0x58,0x58,
0x53,0x47,0x15,0x89,0x0b,0x4a,0x2f,0x1c,
0x08,0x11,0xc4,0x53,0x9c,0xa5,0x52,0x4f,
0x48,0xad,0xba,0x34,0x8e,0x1c,0x3d,0x19,
0x7a,0x72,0xed,0xea,0xf5,0x2b,0xd8,0xb0,
0x3b,0xe1,0x88,0xe5,0x8a,0x02,0x10,0x85,
0x63,0x03,0xf6,0xa1,0xd0,0xfa,0x0f,0x45,
0x3a,0x4f,0x1d,0x53,0x74,0xd8,0x99,0x81,
0x06,0x19,0x0a,0x16,0x3c,0xd4,0xed,0x5a,
0x17,0x0b,0x2f,0x88,0xa7,0x3c,0xcc,0xa4,
0x71,0x02,0xe2,0x98,0x04,0x41,0x21,0xff,
0x52,0xf0,0x71,0x0a,0xe2,0x9c,0x3a,0x72,
0x5e,0x08,0x84,0x98,0xc5,0xd9,0x0b,0x39,
0x17,0x29,0x9c,0x1a,0x60,0xc0,0xc0,0x81,
0x20,0x10,0x73,0x39,0x84,0xc9,0x41,0xd1,
0x0b,0x03,0x9b,0x4f,0x81,0x21,0x25,0x97,
0x42,0x3c,0x1e,0x4d,0x40,0x98,0xb8,0x02,
0xf1,0x8e,0xc9,0xbc,0x64,0x5a,0x25,0x38,
0x94,0xa0,0x09,0xe4,0x46,0xfb,0x3a,0x10,
0xcf,0x80,0x0a,0x8e,0xce,0x9e,0xc4,0xf9,
0xe0,0xca,0x37,0x89,0xc8,0x87,0x2c,0x3d,
0x30,0xf5,0x93,0x1a,0xe7,0xca,0x95,0x10,
0x07,0xac,0x5e,0x88,0x13,0x82,0xbb,0xf5,
0x0b,0xb5,0x92,0x97,0x2d,0x6f,0x5e,0x2c,
0xd9,0xf3,0x1d,0x1e,0xb5,0xa1,0xb0,0x2d,
0x93,0xa9,0x64,0xe9,0xb0,0x98,0x78,0xf8,
0x0e,0x0c,0x5f,0x3d,0xff,0xd2,0xe1,0xa5,
0xc0,0xc1,0x83,0x7e,0x5e,0x11,0x67,0x8b,
0x23,0x10,0x39,0x12,0x82,0x53,0x82,0x35,
0xe2,0xc1,0x17,0xa2,0x51,0x80,0x04,0x1b,
0x3c,0xe4,0x45,0x41,0x0c,0xa2,0xbc,0x50,
0x0e,0x47,0xdb,0xcc,0x21,0x4e,0x2b,0x8a,
0x6c,0x63,0xa0,0x0b,0x9e,0x70,0x24,0x01,
0x18,0xa5,0x45,0x34,0x11,0x24,0x72,0x1c,
0x46,0x01,0x3d,0xad,0x75,0xc3,0x0f,0x44,
0xdb,0x30,0x21,0x22,0x63,0x25,0x25,0xf0,
0x10,0x05,0x8e,0x64,0xb2,0x48,0x3f,0x1c,
0x65,0xd1,0xc8,0x23,0x3b,0x75,0xa0,0x07,
0x1e,0x5a,0xf4,0xc5,0x53,0x06,0x7c,0x9c,
0x33,0x49,0x51,0x03,0x9c,0x20,0xc4,0x2a,
0x18,0x60,0xf2,0xdd,0x01,0x36,0x04,0x41,
0x15,0x78,0x9b,0x9c,0x60,0x03,0x78,0x57,
0x81,0xb0,0xd5,0x79,0x61,0x8a,0xd9,0xff,
0x53,0x7a,0xe7,0xa5,0x93,0xc0,0x4b,0x14,
0x90,0xf1,0x94,0x83,0x8e,0x78,0x21,0x1c,
0x92,0x34,0x40,0xb4,0xd7,0x91,0x5c,0xfd,
0x84,0xc5,0x2b,0x65,0x30,0xc6,0x18,0x3d,
0x0d,0xc8,0xb4,0x62,0x3c,0x7e,0xfa,0x92,
0x26,0x05,0x63,0x34,0x61,0xd1,0x9e,0xa7,
0x58,0xd0,0x44,0x2e,0x05,0xee,0xc9,0xd9,
0x12,0x16,0xc8,0x81,0x63,0x3c,0xa7,0xa5,
0xb6,0x59,0x8b,0xe1,0xc8,0x01,0xca,0x31,
0x8f,0xc6,0x00,0xe3,0x31,0x26,0xd9,0xf2,
0xd8,0xa3,0x14,0x48,0xd0,0x80,0x1f,0x58,
0xd4,0x55,0x57,0x06,0x5a,0x98,0x40,0x9e,
0x4d,0x93,0x38,0x63,0x01,0x0f,0xac,0x44,
0x25,0x04,0x06,0x18,0x08,0xe1,0x89,0x0d,
0x56,0x6a,0xd7,0x65,0x1c,0x27,0x44,0x05,
0xac,0x3b,0xa8,0x64,0x50,0xe7,0x98,0xc9,
0xa2,0x27,0x66,0x07,0xc9,0x78,0x30,0x40,
0x0c,0x73,0xbc,0xf3,0xcb,0x11,0xa7,0x10,
0xd1,0x40,0x23,0x09,0x74,0xc0,0x87,0x90,
0xe7,0xb4,0x11,0x03,0x7e,0xfa,0x21,0xfb,
0xcf,0xb1,0x7a,0xec,0x33,0x49,0x16,0xa7,
0xcc,0x31,0x87,0xb5,0x7e,0xee,0x63,0x82,
0x38,0x31,0xc4,0xf0,0x66,0x02,0x5f,0x38,
0x71,0x8a,0xbc,0x83,0x0c,0x20,0x07,0x29,
0x48,0xc4,0x70,0x0a,0x3d,0x1f,0x4c,0xa4,
0x0f,0x0f,0xff,0x1e,0xc1,0xee,0x07,0x91,
0x92,0xf2,0x02,0x2f,0xf8,0x0e,0x32,0x11,
0x0e,0xe5,0xd8,0x80,0xaf,0xc0,0x76,0xe0,
0x40,0x0a,0x0f,0xea,0x56,0x2b,0xc5,0x12,
0xf2,0x22,0xc1,0x41,0x02,0xe9,0x78,0x50,
0xf0,0xba,0x73,0x48,0x60,0x81,0xbb,0x66,
0x81,0x50,0x43,0x4d,0x7c,0xf0,0x61,0xff,
0xca,0xac,0x3c,0xe8,0x32,0x2c,0x2f,0x50,
0xe6,0x2a,0x84,0x0b,0x22,0xd8,0xb0,0xdd,
0x55,0x55,0x6d,0xa9,0xd4,0xb0,0xe1,0xc5,
0xf1,0xaa,0x4f,0x60,0x2a,0x7b,0xf4,0x57,
0x65,0x9a,0x37,0x64,0x07,0x09,0xf8,0xd1,
0x12,0x07,0x8d,0x60,0xeb,0xc7,0x3e,0xc7,
0x6e,0xb5,0x55,0xd3,0x29,0x50,0x3d,0x2e,
0x57,0x7a,0x1c,0xe2,0x41,0x0a,0x29,0x34,
0x32,0xb6,0x1f,0x8f,0x74,0x10,0x0c,0xd8,
0x8d,0xa4,0xe0,0x41,0x3a,0x19,0xd4,0x50,
0x87,0x05,0x1c,0x58,0x20,0x4a,0x39,0x06,
0xb4,0xe2,0x0c,0x07,0x60,0x70,0x30,0x80,
0xc5,0xa4,0x78,0x63,0x41,0xdc,0x7a,0x0f,
0xb0,0xf0,0x0b,0x76,0x0c,0x20,0xf7,0x00,
0xe1,0xbc,0x50,0xf8,0xe1,0x16,0x0c,0x50,
0x0e,0x0e,0x2f,0x38,0x31,0x00,0xe0,0x82,
0x0f,0x20,0xb6,0x1f,0xc9,0xe8,0xe1,0xec,
0xd3,0x63,0xab,0xed,0xc7,0x21,0xc4,0xf5,
0x84,0x42,0x0d,0x5f,0x1e,0xcb,0xe4,0x1a,
0xd1,0x04,0xad,0x14,0xae,0x18,0x44,0xb9,
0x4c,0x08,0x38,0x30,0x75,0x41,0x36,0xbc,
0x00,0x0d,0x34,0x96,0x56,0x0d,0x1b,0xc7,
0x22,0x42,0x22,0xfd,0x7b,0xd2,0xc9,0xda,
0x14,0xcc,0x3e,0x09,0x18,0xbf,0x8f,0xd9,
0xff,0x04,0x48,0xae,0x4f,0xc9,0xe4,0x13,
0x4c,0x5f,0x46,0xfb,0x55,0xd7,0x39,0xfb,
0x58,0xaf,0xb9,0x1e,0xfa,0x05,0x13,0x4c,
0x3a,0xc1,0x14,0x5d,0x8b,0x01,0xe5,0xc8,
0x21,0x87,0x1d,0x8b,0x53,0x26,0x47,0x38,
0xa4,0x94,0x63,0x7e,0x39,0xe5,0x90,0xd2,
0x84,0x22,0xeb,0x9b,0x7f,0x21,0xf9,0xf2,
0x53,0x56,0x8e,0x1d,0x76,0xb8,0xf3,0xff,
0x42,0xe4,0x8b,0xbf,0x1f,0xff,0x0b,0x0e,
0x20,0x07,0x74,0xa4,0xa3,0x27,0xc1,0x78,
0x84,0xf5,0xce,0xf5,0x0a,0x74,0x48,0xef,
0x58,0xff,0xd0,0x02,0x2e,0x60,0x46,0x2b,
0x5b,0x55,0xa5,0x1f,0x36,0xbb,0x59,0x2e,
0x78,0x81,0x04,0x21,0x70,0x10,0x03,0x3d,
0x58,0x8a,0x96,0xb8,0x74,0x3b,0xab,0x1c,
0xe0,0x0b,0x57,0xe3,0x1a,0xf0,0x8e,0xa6,
0xb4,0xf2,0x80,0x69,0x48,0xd9,0xd3,0xc3,
0x90,0xb8,0x15,0x20,0xe9,0xb9,0x50,0x7a,
0x65,0x79,0xa1,0x56,0xfa,0x32,0x24,0xbb,
0x90,0xab,0x03,0x20,0xe8,0xdf,0xfc,0x82,
0x28,0xc4,0x21,0x12,0xd1,0x7c,0x38,0x88,
0xdc,0x11,0xfb,0xa7,0x44,0xfe,0x69,0x81,
0x06,0x36,0x61,0x9e,0x1e,0x70,0x61,0x0b,
0x67,0x8c,0x81,0x15,0x07,0x60,0x59,0x4f,
0xb4,0xa2,0x85,0x62,0xcc,0x6a,0x0c,0xe1,
0x59,0x4a,0x0c,0x5c,0x17,0x25,0x60,0x70,
0x22,0x57,0xb9,0x8a,0x92,0x10,0xb2,0xa1,
0x14,0x1b,0x9c,0x60,0x13,0xe0,0x89,0x4a,
0x09,0x1d,0xe8,0x93,0x14,0xd2,0xf1,0x1f,
0x2b,0xac,0xa3,0x0d,0xeb,0xe8,0x95,0x0c,
0xd4,0xa2,0x88,0x7e,0x9c,0xdf,0xfe,0xfe,
0x28,0x44,0x24,0xf2,0x8f,0x7f,0x38,0x38,
0x00,0x08,0xfe,0xc1,0x87,0x00,0xe9,0xc1,
0x16,0x16,0x88,0xc6,0x52,0xdc,0xe1,0xc4,
0x9f,0x28,0x32,0x03,0xaf,0x90,0x02,0x11,
0x5c,0xb1,0xba,0xa5,0xd4,0xcc,0x8c,0xab,
0x00,0x06,0x02,0x80,0x71,0x46,0x33,0x22,
0x41,0x29,0x21,0xac,0x4a,0xd0,0xa2,0x32,
0x1e,0x3d,0xb2,0xf2,0x8e,0xac,0x7c,0xe5,
0x1e,0x69,0xb0,0x08,0x41,0xd2,0xb2,0xff,
0x96,0x46,0x2c,0xe4,0x11,0x0d,0x69,0x02,
0x07,0xf2,0xa1,0x03,0xce,0xe0,0x81,0x75,
0x6a,0x90,0x8e,0xba,0x28,0x89,0x28,0x3c,
0x68,0xc3,0xcf,0xaa,0x72,0x80,0x30,0xea,
0xca,0x8c,0xb1,0x58,0x05,0x34,0xcf,0xd8,
0x03,0x12,0xc4,0xa1,0x4a,0x6d,0x7c,0xa3,
0x78,0xd2,0x91,0x3d,0x58,0xa6,0xd0,0x95,
0xdc,0xfc,0xe6,0x4f,0x7e,0x68,0xcb,0x71,
0xfa,0x91,0x90,0x84,0x74,0x87,0x01,0x9c,
0xa8,0x3c,0x26,0xb9,0xa2,0x1f,0x3c,0x8b,
0x83,0xe9,0x5e,0xe6,0x0c,0x1f,0x40,0x32,
0x04,0xc9,0x94,0x4a,0x3f,0x24,0xd0,0x4c,
0x5c,0x19,0xc2,0x10,0x62,0xcc,0x55,0x0c,
0x48,0xb0,0x1d,0x1b,0xb8,0x60,0x93,0xb7,
0x8b,0x03,0x16,0x51,0xf8,0xcd,0x30,0x79,
0x73,0xa1,0xaf,0xfc,0x49,0x2d,0x80,0x48,
0xce,0x89,0xde,0xd2,0x9c,0xfc,0xbb,0xa2,
0x36,0xf3,0x81,0x10,0x76,0x1c,0xe0,0x9d,
0xfa,0xc8,0x80,0x14,0x67,0xb5,0x85,0x38,
0xb8,0xe0,0x3b,0xac,0x20,0x21,0x28,0xcc,
0xa8,0x2b,0x5c,0x75,0x50,0x08,0xa0,0xc8,
0x46,0x36,0x10,0x24,0x2c,0x60,0xf5,0xae,
0x85,0x0e,0x55,0xe1,0x4d,0xcb,0xa3,0xd0,
0x39,0x86,0x25,0x40,0x8b,0x90,0x28,0x45,
0xc7,0x99,0x4b,0x5c,0xe6,0xf2,0x62,0xb6,
0xc0,0x05,0x93,0x9a,0x00,0x87,0x43,0x02,
0x6d,0x11,0x52,0x2c,0x8a,0x22,0x6c,0xc0,
0xab,0x2e,0x5d,0x80,0x04,0x98,0xe0,0xa0,
0x04,0x00,0x10,0x03,0x96,0xe6,0x8a,0x3a,
0x17,0xf0,0xc4,0x09,0x78,0xc6,0x9d,0x6a,
0x4e,0x32,0x85,0xc8,0xda,0xa9,0x98,0x1a,
0x9a,0x53,0x9e,0x14,0x47,0x74,0xa2,0xff,
0xc3,0x1a,0x5a,0x21,0x5a,0x4b,0x48,0x7c,
0xc6,0x00,0x74,0x0d,0x2a,0x11,0x73,0xe9,
0x0e,0x6f,0xe0,0xe2,0x07,0x6b,0x48,0x4d,
0x00,0xb7,0x03,0x4f,0x47,0xae,0x41,0x11,
0x71,0x98,0x2a,0x55,0xd7,0x28,0x8e,0x7e,
0x84,0x00,0x14,0xad,0xc3,0x55,0x0c,0xaa,
0x73,0x81,0x82,0x02,0x6b,0x97,0x29,0xc4,
0x1a,0x4f,0x7d,0x82,0xd6,0xf3,0xa8,0x75,
0xad,0x6c,0xfd,0x89,0xe8,0xc8,0xc5,0xad,
0xb8,0xd6,0xa5,0x06,0x40,0x0d,0x62,0xf8,
0xc6,0x30,0x8b,0x2e,0xcc,0x62,0x16,0x5b,
0xd0,0x87,0x01,0xcc,0x17,0x0e,0x45,0xd0,
0xb6,0xb6,0xb6,0xb5,0x6d,0xfb,0x66,0x5b,
0x5b,0xfd,0x2d,0x0e,0x0e,0xd1,0xf8,0x01,
0x42,0x74,0xab,0x88,0x4c,0xe8,0xe2,0x02,
0xad,0x28,0x8a,0x2e,0x18,0x6b,0x03,0x77,
0x88,0xd5,0x2a,0xfd,0xa8,0x4e,0x1c,0x7a,
0x75,0x02,0x38,0xe8,0xf3,0x66,0xb6,0xbb,
0xc0,0x26,0x10,0xd4,0x5c,0x2f,0x25,0xe9,
0xb2,0x6e,0x79,0x22,0x0f,0xbb,0xe9,0xd9,
0xb0,0xb0,0xca,0x68,0xe2,0x62,0x1a,0x58,
0x1c,0xa8,0x15,0x1a,0xc4,0x76,0x88,0xb1,
0x9d,0x05,0x1d,0x10,0x20,0x5f,0xf9,0xc6,
0x62,0x1e,0x3c,0x70,0x82,0x01,0xc2,0x41,
0x87,0x58,0xf0,0xb7,0xbf,0xfe,0xf5,0x2f,
0x0f,0x52,0xf1,0xdf,0x3c,0xb4,0xa2,0x7c,
0x38,0x70,0xc5,0x1a,0x9c,0x21,0x60,0xff,
0xe6,0xa1,0x0e,0x6b,0x58,0x83,0x2a,0xfa,
0x81,0x04,0x41,0xd0,0x61,0x1e,0x9c,0x98,
0x85,0x2b,0xdc,0x28,0x95,0x6e,0x74,0x81,
0x13,0x74,0xe0,0x44,0x17,0x30,0xd1,0x0b,
0xda,0xc5,0x40,0x02,0x12,0x00,0x45,0xff,
0x52,0x96,0x72,0x82,0x24,0x64,0xe3,0xa4,
0x57,0xa9,0xe9,0x66,0xcb,0x42,0x9c,0x19,
0xcf,0x78,0x86,0xe2,0x1d,0x2f,0x58,0x3a,
0x40,0x83,0x73,0x40,0xef,0x2d,0x3d,0xca,
0x84,0xb6,0x7a,0xba,0x2a,0xb7,0x9d,0xf6,
0x42,0xf3,0x98,0xaf,0x3f,0xe6,0x4b,0xdf,
0x54,0x74,0x28,0x16,0x4a,0x7e,0xf2,0x93,
0xcd,0xf0,0x84,0x24,0xcb,0xd7,0x1f,0x13,
0xe0,0x40,0x13,0x22,0xe7,0x8a,0xa2,0x1c,
0x59,0xc9,0x9f,0x00,0xc3,0x1a,0xd8,0xd1,
0x0f,0x4e,0xc8,0x77,0x02,0x4e,0x46,0x00,
0x1d,0x78,0xa0,0xe1,0x7e,0xe4,0xe2,0xcc,
0x6e,0x4e,0x45,0x34,0xc4,0xdc,0x0f,0x31,
0x83,0x30,0x04,0x03,0x21,0x03,0x12,0x46,
0xda,0x1d,0x03,0x18,0x2b,0xc6,0x61,0xe1,
0x63,0x10,0x98,0x30,0x89,0x43,0x7c,0xe1,
0x0a,0x65,0x98,0xc4,0x23,0xf4,0x93,0xc7,
0x64,0x75,0x76,0xad,0x28,0xa8,0x45,0xa0,
0x09,0xd3,0x01,0x14,0xc4,0xa1,0x23,0x7e,
0xd8,0x61,0x66,0x8b,0xa6,0x59,0x9b,0xb0,
0x57,0x88,0x06,0x20,0xb3,0x92,0x27,0x00,
0x65,0x0e,0xf0,0x20,0x16,0x49,0xf6,0x07,
0x95,0x91,0x7c,0x6a,0x04,0x48,0xe3,0x09,
0x50,0x36,0x43,0x1d,0xf8,0xd7,0x84,0xa2,
0x9c,0xb9,0xca,0x4a,0x58,0xc2,0x16,0xc6,
0x8c,0x80,0x4f,0x4c,0x61,0x0d,0x3c,0xe0,
0xc1,0x91,0x3f,0x01,0xcc,0x0b,0xe4,0x42,
0xbe,0x4f,0x20,0x75,0x0c,0x04,0x21,0x5f,
0x2f,0xa8,0x59,0x8d,0xd6,0x81,0x11,0x3c,
0x24,0x40,0x84,0x3a,0xc0,0x51,0x9d,0x60,
0x72,0xe0,0x90,0x35,0xfd,0x59,0xd0,0x7e,
0x8f,0x02,0xbf,0x48,0x41,0xbd,0xc8,0xff,
0x70,0x87,0x6c,0xc1,0x50,0xa1,0x7e,0xb6,
0x23,0x8e,0xbf,0x92,0x0e,0x13,0x44,0x44,
0x38,0x7a,0x48,0x47,0xa5,0xb3,0x90,0x02,
0x45,0x32,0x0f,0xb4,0x5b,0x29,0x37,0xb9,
0x6c,0x62,0x82,0x20,0x42,0x62,0x0b,0x4a,
0x86,0x86,0x19,0x38,0xe0,0x85,0x27,0x9c,
0xd9,0x1f,0x4a,0xb0,0x00,0x27,0x3e,0xa1,
0xf0,0x4f,0x88,0x7a,0xbe,0x4a,0x58,0xf8,
0x27,0x96,0x30,0x65,0x25,0x1b,0xdc,0x19,
0x76,0x80,0x03,0xdc,0x52,0x01,0xe5,0x5b,
0x6f,0x21,0x17,0x56,0xb6,0x40,0x2e,0x32,
0xbc,0x09,0x55,0xcc,0xc3,0x1f,0x4f,0x40,
0x43,0x3f,0xe2,0x6b,0x06,0x67,0xe8,0x42,
0x1c,0x21,0x28,0x83,0x04,0xac,0xcc,0x81,
0x2d,0x54,0x25,0xbb,0xa6,0x8a,0x14,0x39,
0x14,0xd1,0x1d,0xa2,0x51,0x92,0x5b,0x3c,
0x09,0xd0,0x4f,0xca,0x25,0xa4,0x63,0x11,
0x27,0x40,0x34,0xc8,0x04,0x11,0xb2,0xf5,
0x05,0x11,0xc4,0x23,0x5c,0x3e,0x59,0x9e,
0x5d,0x42,0x6b,0x9e,0x46,0xe7,0x14,0x0b,
0x5f,0x20,0xc3,0x1c,0xb2,0x95,0x0e,0x4a,
0xcf,0x85,0x26,0xe9,0xd8,0xfa,0xf2,0x14,
0xed,0x75,0x2c,0xd4,0xa4,0x06,0xf3,0x33,
0x40,0x17,0x6c,0x0d,0x86,0x01,0x38,0xc1,
0x09,0x6f,0x48,0xc5,0xa9,0x27,0xe0,0x85,
0x56,0x88,0x62,0x00,0x03,0xf0,0x46,0x1e,
0x6c,0xdd,0x00,0x84,0x20,0xc4,0x1b,0x70,
0xa7,0xf8,0x95,0xb7,0x00,0x09,0xca,0x75,
0x19,0xc9,0xb7,0x76,0x02,0x99,0xcd,0x70,
0xcc,0x14,0xf7,0x63,0x16,0xfe,0xf8,0x84,
0x37,0x32,0x11,0x8b,0x09,0x80,0x61,0x0b,
0x05,0x0d,0xc1,0x15,0x4e,0xb0,0x0a,0xff,
0x04,0xc0,0xda,0xc5,0x4a,0xb1,0xc3,0x43,
0x22,0x31,0x73,0xda,0xc1,0x93,0xec,0x5f,
0x27,0xbb,0xa2,0x27,0x5d,0x13,0xa0,0x9c,
0xfe,0x6a,0xa6,0xdf,0xfa,0xd0,0x9d,0x46,
0x18,0x1a,0x88,0xe0,0x1d,0x0d,0x50,0x0c,
0x16,0x32,0x00,0x75,0xa0,0xe4,0x9e,0xa1,
0xe9,0xe6,0xca,0x5d,0x20,0x51,0xe9,0x78,
0x10,0x41,0x11,0xe8,0x38,0x44,0xbc,0x53,
0x60,0x00,0x7b,0xda,0x40,0x1f,0x87,0x78,
0xa2,0x1e,0x50,0x40,0x03,0x48,0x84,0xc0,
0x13,0xbc,0x28,0x06,0x5b,0x4c,0x60,0x00,
0x1c,0x7c,0x26,0xed,0x08,0x30,0x38,0x07,
0xf4,0xf1,0x02,0x48,0xf4,0x9b,0x0e,0x13,
0x38,0xff,0x12,0x2c,0x34,0x3e,0x39,0x78,
0x1f,0x01,0x94,0x6f,0x42,0xfb,0xca,0xa1,
0x85,0xf6,0x57,0x99,0xf3,0xa2,0xb0,0xc3,
0x1a,0x2c,0x50,0x6b,0x87,0x57,0x3e,0xbe,
0x5e,0xd8,0x82,0x76,0x29,0x45,0xb1,0x7d,
0x02,0x39,0xf4,0x80,0xc1,0x59,0x80,0xcb,
0xb9,0x43,0x88,0x90,0x80,0x21,0x70,0xde,
0x1a,0x78,0x5e,0xb0,0x30,0x01,0x8b,0x20,
0x41,0x1b,0x14,0xd7,0x22,0xd4,0x02,0x1c,
0xd8,0xd3,0x09,0x64,0x43,0x31,0x84,0x8e,
0x4f,0x84,0xcf,0xbb,0x90,0xc0,0x09,0x9c,
0x40,0x38,0x98,0x02,0x16,0xd0,0x40,0x3f,
0x8c,0x60,0x1c,0x74,0xe0,0x7a,0xbd,0x40,
0x09,0x26,0xc3,0xd2,0xbd,0xc3,0x82,0xc0,
0xc1,0x01,0xc4,0x47,0xf4,0xd0,0xc0,0x52,
0x99,0x42,0x01,0x4d,0xdd,0xef,0x8d,0x0e,
0xbb,0x3d,0x0a,0x0f,0x78,0x00,0x09,0x3c,
0xc8,0x4b,0xfc,0xc2,0x2f,0xa4,0x05,0x90,
0xe9,0x07,0xe9,0x88,0xc6,0x31,0xbc,0xff,
0x03,0x44,0x80,0x42,0xc8,0x7c,0xc1,0x0f,
0x41,0x02,0xfd,0x3d,0x01,0x0f,0xc8,0xc1,
0x22,0xd8,0xd5,0xe4,0x58,0x40,0x33,0x38,
0x43,0x13,0x98,0x0f,0x15,0x56,0xd9,0xfb,
0x81,0x61,0xfb,0x35,0x9c,0x3f,0x70,0x81,
0x17,0xae,0xc1,0x14,0xcc,0x97,0x19,0x72,
0x5c,0xc2,0x59,0x00,0x1a,0x5c,0x40,0x08,
0xec,0x4c,0x3f,0xf4,0x00,0x02,0x30,0x80,
0x37,0xcc,0xc2,0x1d,0xf2,0x40,0x08,0x6c,
0xc2,0x01,0x80,0x15,0x0e,0xa8,0x9c,0x33,
0xa8,0x82,0x52,0x34,0xc5,0xa3,0xdc,0x01,
0x11,0xbc,0x01,0x24,0x0c,0xc4,0x31,0xc4,
0x43,0xa7,0x6c,0x43,0x34,0xec,0x03,0x7f,
0xd4,0x5e,0x34,0xe4,0x85,0x13,0x52,0x80,
0x38,0xbc,0x82,0x68,0xbc,0x43,0xa7,0xf0,
0x43,0x2b,0xb0,0x45,0x2d,0x50,0xc0,0x1d,
0x50,0x4d,0x0c,0x36,0x80,0x07,0x0c,0x44,
0x62,0xf4,0x05,0x0a,0x18,0x00,0x8b,0x94,
0x0d,0x67,0xf5,0x60,0xd4,0x9d,0xc3,0x2b,
0x10,0x01,0x3f,0xb8,0x89,0x05,0xac,0x4d,
0xa5,0xf1,0xc3,0x11,0xf8,0x40,0x23,0x70,
0x40,0x16,0x88,0xe2,0x0f,0x1c,0x02,0x0a,
0x98,0x80,0x08,0x1c,0x03,0x11,0x80,0x01,
0x98,0x39,0xc2,0x31,0x8c,0x01,0xdb,0xdc,
0x84,0x16,0x28,0xc2,0xfe,0xa1,0x59,0x1e,
0xcc,0x82,0x22,0x2c,0xc2,0x22,0xf0,0x8b,
0x1c,0xd8,0x4f,0x39,0x78,0x9f,0xc1,0x81,
0xc1,0x17,0x2e,0xce,0xfc,0xd9,0xda,0x04,
0xa0,0xda,0x95,0x11,0xde,0x7c,0x71,0x01,
0xff,0x6d,0xc1,0x0b,0x8c,0xc2,0x16,0xb8,
0x51,0x0a,0xda,0x40,0x9b,0xc5,0xc2,0xff,
0x65,0x02,0x0f,0x7c,0x40,0x2e,0xb8,0xff,
0xd1,0x75,0x84,0x80,0xe4,0x4d,0xc0,0x12,
0xd4,0xca,0x52,0x64,0x43,0x16,0x0c,0x82,
0xa9,0x4c,0x81,0x41,0x14,0x03,0x19,0x18,
0x23,0x18,0xf4,0x22,0x12,0x50,0xc0,0x1c,
0x80,0x0e,0x0d,0x04,0xc1,0x31,0xfc,0x02,
0x12,0x24,0xe4,0x1a,0xdc,0x01,0x41,0x9c,
0x42,0xd4,0xb8,0x04,0x67,0x64,0x4e,0x2d,
0x90,0xc1,0x11,0x28,0x1d,0xd3,0xe1,0x47,
0x38,0x6c,0x64,0x30,0x68,0x05,0x0a,0x1c,
0xc6,0x2d,0x7a,0x0f,0x0f,0xc2,0xa2,0x90,
0x24,0xc0,0x24,0x60,0x9d,0x9f,0x24,0xc0,
0x23,0x54,0xda,0x1d,0x24,0xa4,0x07,0x24,
0x80,0x07,0x88,0x03,0x05,0x0c,0x80,0x62,
0x1c,0xc6,0xb5,0xf8,0x01,0x4e,0xbe,0x82,
0x47,0xa6,0xc0,0x3e,0x68,0x85,0x1e,0xd4,
0x82,0xc6,0x41,0x19,0x02,0xd4,0xd7,0x2c,
0x64,0x21,0xbf,0x71,0xe3,0x18,0x2e,0x0e,
0xda,0x55,0x19,0x17,0x28,0x01,0x95,0x99,
0x01,0xe0,0x38,0x99,0x95,0x41,0x83,0xad,
0xe1,0xda,0xec,0x1c,0x40,0x26,0xf4,0x40,
0x0f,0x08,0x02,0x7f,0x99,0x01,0x39,0xf0,
0x42,0x08,0xb8,0x40,0x2f,0xb8,0x51,0x95,
0x04,0x01,0x09,0x90,0xd9,0x27,0x58,0x00,
0xcd,0x15,0xe2,0x26,0xe4,0x02,0x26,0x1c,
0xc3,0x20,0xac,0x5d,0x02,0xc4,0x1b,0xaa,
0x18,0xcf,0x24,0x14,0x63,0xb6,0xd0,0x80,
0x6d,0xc4,0x40,0x4c,0x7a,0x40,0x12,0x44,
0x84,0x9f,0xdc,0xe4,0x24,0x34,0x62,0x33,
0xec,0x43,0x47,0x7e,0x64,0xbd,0xd4,0xde,
0x82,0xa0,0x83,0x08,0xf0,0x43,0x63,0xfe,
0xc4,0xd5,0xc5,0xc3,0x82,0x9c,0x1b,0xd5,
0x39,0x54,0xf4,0x99,0x00,0xd6,0x65,0xff,
0x4b,0x07,0xc0,0x1b,0x05,0x0c,0x02,0xb9,
0x79,0xcd,0x61,0x12,0x81,0x07,0x3c,0x26,
0xaa,0x60,0x01,0x2e,0xa0,0xc0,0x21,0x3c,
0xc4,0x5e,0x88,0x4b,0x06,0x60,0x81,0x3d,
0x44,0xa3,0x92,0xcd,0x43,0x34,0x4c,0x06,
0xfb,0x94,0xa1,0x37,0x9a,0x8f,0x01,0xe8,
0xe1,0xf7,0x71,0x81,0x19,0x50,0x25,0x18,
0x78,0x41,0x95,0x01,0x9c,0xda,0x6d,0x01,
0xcf,0x34,0x9e,0x97,0xf9,0x40,0x2e,0x20,
0x48,0x35,0x15,0x22,0xe6,0x71,0xc2,0xe3,
0x79,0xc1,0x20,0x88,0x50,0x74,0x6d,0x49,
0x7b,0xc4,0x80,0x05,0xa0,0x03,0x2e,0x14,
0x03,0x0f,0xa8,0x8d,0xe9,0x11,0xe3,0x31,
0xdc,0xde,0x43,0x52,0xc0,0x12,0xa4,0x40,
0x3e,0x44,0x1f,0x3b,0x74,0x44,0x03,0x14,
0x65,0x07,0x98,0x02,0x19,0x68,0x66,0x02,
0x3c,0x26,0x48,0xda,0x5e,0x6f,0x3c,0x44,
0x10,0x46,0x1f,0x2b,0x9a,0x66,0xa2,0xbd,
0x22,0x4b,0xee,0xc4,0x30,0x86,0x66,0x02,
0xa0,0x02,0xd7,0xc9,0xdb,0x23,0xf0,0x41,
0x06,0xa4,0xc3,0x43,0x10,0x81,0x1f,0x80,
0x40,0x44,0xf0,0x40,0x26,0x50,0x53,0x1c,
0x1c,0xd6,0x5c,0x88,0x0e,0x83,0xee,0x43,
0x33,0x3c,0xc1,0x27,0xe0,0x26,0x02,0xcc,
0x83,0x28,0xf0,0xe6,0xf8,0x71,0xa3,0x12,
0xfc,0xa6,0x54,0x72,0x23,0x17,0x70,0x80,
0x56,0xf2,0xe3,0xc4,0xb1,0x9a,0xab,0x7d,
0x1f,0xc7,0x15,0xe2,0x05,0xa8,0x02,0x11,
0x0c,0xdc,0x27,0x2c,0xe5,0xa2,0x68,0x98,
0x52,0xc0,0x01,0x26,0x34,0x20,0x3f,0x5a,
0x40,0x2f,0x9c,0x00,0x82,0xcc,0x61,0x1c,
0xd8,0x5c,0x0c,0xa4,0x40,0x30,0xf0,0xff,
0xc1,0xd7,0xf8,0x41,0x31,0x68,0x81,0x08,
0xe6,0xc5,0x1d,0xa0,0x27,0x44,0x9a,0x62,
0x49,0xa2,0x40,0x3f,0xcc,0x45,0xe8,0x64,
0xc0,0x39,0xd4,0x27,0x18,0xdc,0xa7,0x47,
0xe6,0xe7,0x82,0x64,0xc0,0x1b,0x90,0xe4,
0x49,0xfa,0xc7,0xa5,0xf9,0xde,0x80,0xee,
0x07,0xbb,0x65,0x5d,0x02,0xe8,0x01,0x16,
0x24,0x5f,0x5f,0x60,0x81,0x0d,0x50,0x00,
0x84,0xb2,0x62,0xa9,0x40,0x04,0x5e,0xca,
0x84,0x5b,0xf8,0xc2,0x1b,0x90,0x82,0x3e,
0x88,0xc2,0x1a,0x0c,0x5c,0xc3,0xcd,0xd7,
0xdc,0xf5,0x26,0x1b,0xa2,0xe8,0x0b,0x84,
0xa3,0x8c,0x36,0x43,0xde,0xc9,0x97,0x34,
0x8c,0xa3,0xfb,0x35,0x40,0x52,0x76,0x63,
0xae,0xf1,0xcc,0x01,0xb8,0x42,0x34,0x44,
0x83,0x37,0xb8,0xda,0x04,0x58,0x80,0xce,
0x29,0x45,0xe3,0x39,0x59,0xc4,0x15,0x16,
0x76,0x6d,0xd7,0x43,0x0c,0x42,0x0a,0x24,
0x03,0x83,0x6a,0x81,0x6d,0x78,0xdb,0x11,
0xc4,0x80,0x32,0xa2,0xa7,0x6d,0x38,0x1d,
0x96,0xce,0x45,0x49,0x72,0x29,0x19,0x38,
0xc2,0x97,0xe2,0x67,0x64,0x36,0x9d,0x07,
0xe0,0xc2,0x23,0xd8,0x86,0x49,0x74,0x24,
0x3d,0x90,0x9b,0x9a,0x0e,0x68,0x81,0xba,
0x69,0xf4,0x25,0x5f,0x80,0x60,0xc1,0x83,
0x7a,0x80,0x84,0xd2,0x83,0xdc,0x00,0x8e,
0xb5,0xc6,0x8d,0x92,0x66,0x00,0x3a,0xb4,
0xd6,0x2c,0x8c,0x41,0x6c,0xc9,0x81,0x13,
0x08,0x2a,0xc1,0x9d,0xa3,0x33,0xf0,0x66,
0x18,0x7e,0x5f,0x54,0x96,0x28,0x55,0x36,
0x83,0x70,0x22,0x80,0x12,0xcc,0x17,0x34,
0x80,0xc1,0xdf,0x19,0x1c,0xae,0xb1,0xff,
0xc3,0x57,0xce,0xce,0x05,0xa0,0x81,0xca,
0x41,0xd2,0x9c,0x59,0x67,0x2c,0xc4,0x6b,
0x61,0x79,0xde,0xed,0x80,0xc0,0x7b,0x26,
0x69,0x32,0xa0,0x00,0x24,0x10,0x44,0x16,
0x58,0x40,0x42,0xa6,0x80,0x23,0xf0,0xc3,
0x82,0xa4,0xe7,0x66,0xfa,0xd8,0x5c,0x24,
0x9a,0xae,0x6a,0xa6,0x63,0x86,0x69,0x64,
0xea,0x27,0x9c,0x76,0xc3,0x83,0xf8,0x01,
0x2b,0x12,0x01,0x9f,0x26,0x2b,0x4b,0xa6,
0x43,0x28,0xba,0x29,0x1f,0x90,0xa6,0xbc,
0xf5,0xc5,0x21,0xd4,0x29,0x84,0x82,0x66,
0xd6,0xf9,0x81,0x07,0xcc,0xec,0xcc,0xbe,
0xc2,0x24,0x48,0xa2,0x09,0xf8,0x1b,0x7d,
0x8d,0xa8,0xf9,0x2c,0x82,0x35,0x74,0x19,
0xf8,0x39,0x41,0x8a,0xaa,0xdd,0x37,0x7e,
0x86,0x70,0x1a,0x5c,0x33,0x38,0x01,0x6e,
0x4a,0x83,0x33,0x1c,0xed,0x89,0xc2,0x57,
0x17,0x30,0x17,0xbe,0xba,0x53,0xda,0x31,
0x00,0x39,0x80,0x65,0x7c,0x45,0x9c,0x05,
0x1c,0x45,0xcf,0x5c,0x80,0x3b,0x80,0xc0,
0x78,0x2c,0x42,0x69,0xae,0x2a,0x2a,0xd8,
0x06,0xca,0xc8,0x6c,0x02,0xd8,0x42,0x31,
0x52,0xe9,0x31,0x38,0x5d,0x3a,0x64,0xa9,
0xbc,0xe5,0x6a,0x97,0xf2,0x2a,0x98,0x42,
0x66,0x0c,0x2e,0xc8,0xbb,0xa1,0x83,0x86,
0xf8,0xc1,0x09,0xb4,0x2d,0x80,0x2c,0x1a,
0x58,0x74,0xa6,0x43,0x2d,0x6b,0xb6,0xbc,
0x66,0xbc,0xf9,0x81,0x4a,0x42,0xab,0x9d,
0x7a,0x40,0x32,0x5c,0x81,0x5a,0x78,0x80,
0x4d,0xd0,0x84,0x6d,0xf0,0x24,0x08,0x40,
0x02,0x34,0xce,0xd7,0x13,0xbc,0x41,0x7b,
0xd9,0x15,0xa8,0x21,0xc0,0x8a,0x0a,0xff,
0xad,0xba,0xa2,0xab,0xa2,0x4e,0xe5,0x70,
0x72,0x80,0x1c,0x74,0x2e,0xba,0x36,0x80,
0x28,0xd8,0xa1,0x8c,0xca,0xab,0x3f,0xcc,
0xc3,0x28,0x6c,0x87,0xec,0x5e,0x00,0x1c,
0xa4,0x1d,0x34,0x38,0x83,0x22,0xc4,0x17,
0x17,0x2c,0xc1,0x1a,0xcc,0xa5,0x52,0x18,
0xc0,0xca,0xd4,0x82,0xb1,0xd4,0xa6,0xd8,
0x22,0x41,0x0a,0x58,0xdd,0x40,0x80,0x81,
0x1f,0xa4,0x03,0x2e,0x88,0x84,0x28,0x52,
0x29,0x05,0x4c,0xec,0xad,0x2a,0xa8,0x56,
0x74,0x69,0xd3,0xd5,0x6d,0x7e,0xde,0x9e,
0xb1,0xc4,0xa6,0x9d,0x8a,0x40,0x0c,0x20,
0x2b,0xc9,0xc2,0xe2,0xba,0xd5,0xa7,0x05,
0xf8,0x02,0x0d,0xc4,0x69,0x86,0xea,0x47,
0xcb,0xda,0xe9,0xf2,0xea,0x83,0x28,0x46,
0x83,0x2d,0x24,0x43,0x2d,0xd8,0x00,0x19,
0x9c,0x8a,0x85,0x40,0x42,0x39,0x14,0x5e,
0x2c,0xa4,0x82,0x13,0x68,0x81,0x16,0x84,
0xc3,0x2c,0xd4,0x1a,0xd3,0x4e,0x46,0xf8,
0x98,0xa8,0xa2,0x32,0xea,0x19,0x36,0xc3,
0x22,0xb4,0xab,0x7c,0xc5,0x6b,0x13,0x38,
0x2d,0x18,0xf0,0x80,0x95,0x0d,0x00,0xa6,
0x32,0x05,0x09,0x1c,0x99,0x59,0x1e,0x19,
0x03,0x2c,0x41,0xce,0x55,0xc5,0x0b,0x7c,
0xc1,0xea,0x1d,0x0b,0x0a,0xc8,0xc1,0xd8,
0x26,0x43,0x07,0x38,0x2e,0x12,0x4c,0x42,
0x30,0x7c,0x81,0x01,0xe4,0x05,0x3f,0xe0,
0x07,0x2a,0x40,0xa4,0xdb,0xc2,0xad,0x92,
0x56,0x2f,0x19,0xc8,0x20,0xf6,0x6e,0x2c,
0xde,0x7a,0x8d,0x3e,0xec,0xaa,0x5e,0xd4,
0x70,0x5a,0xad,0x29,0xb9,0x04,0x83,0x04,
0x42,0x44,0x34,0xec,0xe5,0x5c,0xbc,0xff,
0x90,0xe2,0xaa,0x66,0x06,0x1c,0xc2,0x16,
0x74,0x8a,0x08,0x5c,0x41,0x5e,0xd0,0xc3,
0x12,0x80,0x01,0x7e,0xa5,0xc6,0x18,0x3c,
0x59,0x2c,0xd0,0xc1,0x7e,0x21,0xd9,0x04,
0x34,0x40,0x1d,0xac,0x8f,0x5d,0x41,0xa5,
0xa2,0x9e,0x2b,0xd2,0xba,0x42,0x38,0xec,
0x9f,0x34,0x48,0x0a,0xeb,0x76,0x63,0x34,
0x94,0x5c,0x1e,0x38,0x41,0x47,0x5d,0x40,
0x3f,0xc0,0x81,0xe3,0x7d,0x19,0xdc,0x7d,
0x19,0x39,0xc8,0x01,0x1c,0xf4,0x71,0x1f,
0x57,0xc7,0x01,0x58,0x16,0xb9,0xa0,0x40,
0x39,0x50,0x88,0x92,0xa2,0x00,0x29,0x40,
0xb1,0x14,0x3f,0xc8,0x63,0x1c,0xc1,0x2b,
0xd8,0x82,0x68,0xe0,0xc7,0x22,0x4d,0x2f,
0x9f,0x72,0xa9,0xb7,0xf5,0x2a,0x05,0xe0,
0xf0,0xd5,0x9d,0xa7,0xb6,0xfc,0xc4,0xb0,
0xb6,0x9b,0x07,0xa0,0xc2,0xaa,0x08,0xe8,
0x80,0x36,0xa8,0x2f,0xf0,0x00,0x12,0x64,
0xc1,0x7f,0xe8,0x03,0x12,0x58,0xc0,0xa5,
0xe9,0x5e,0x3a,0x34,0xc1,0xc7,0xe4,0x47,
0x02,0xfc,0x00,0x12,0xa8,0x4b,0x0c,0x10,
0x41,0x15,0x47,0x83,0x18,0x1b,0x80,0x16,
0x24,0xa5,0x52,0xa2,0xab,0x34,0x60,0x99,
0x54,0x6e,0x63,0xa2,0x16,0x6d,0x70,0x52,
0xa5,0xe9,0x6a,0x41,0xe7,0x7e,0xf1,0x00,
0xe0,0x00,0x04,0xa3,0x41,0xa9,0x21,0x40,
0x1e,0x8c,0x01,0x3b,0xb0,0x43,0x26,0x80,
0x1a,0x56,0xe6,0x81,0xc1,0x3d,0x41,0x1e,
0x74,0x01,0x38,0x87,0x73,0x17,0x8c,0x01,
0x21,0xd6,0x82,0xd5,0xa4,0x43,0x0d,0x20,
0xc1,0x1a,0x28,0x69,0x07,0xec,0x83,0x28,
0x20,0x01,0x3d,0xd0,0xc3,0x20,0xa0,0xff,
0xcc,0x00,0x9c,0x02,0x46,0x7a,0x40,0x26,
0x20,0xc1,0x0e,0xa7,0x03,0x08,0xb4,0x72,
0x0d,0x67,0x00,0x1e,0x80,0xc2,0x8f,0xec,
0xc3,0x17,0x08,0xb4,0xd2,0xf1,0x42,0x16,
0xdc,0x9e,0x7e,0x78,0x8d,0xc7,0xfe,0xc8,
0x23,0x58,0x4d,0xf8,0xfe,0x1e,0x98,0x34,
0xe9,0xda,0x20,0x8f,0x1f,0x00,0xa5,0xb1,
0xec,0xc4,0x3e,0x5c,0xf4,0x3e,0xe0,0x01,
0x71,0xec,0x83,0x07,0x74,0xce,0xde,0x34,
0x41,0x5d,0xc5,0x96,0x01,0x2c,0x02,0x11,
0xe4,0x68,0x95,0xad,0x9a,0x12,0xb0,0x01,
0x18,0x88,0x42,0x38,0x7c,0xc6,0xf8,0x35,
0x73,0x89,0x00,0xa7,0x89,0x36,0x83,0x1d,
0x24,0xf3,0xf7,0xc5,0xab,0xe0,0xb5,0x31,
0xc7,0xb9,0x03,0x0f,0x7c,0x42,0x92,0xf1,
0x57,0x92,0x7d,0x42,0xc0,0xd5,0x41,0x7c,
0xa1,0x5a,0x30,0x7b,0x41,0x1d,0xb0,0xc2,
0x22,0x50,0x52,0x06,0xa0,0x0d,0x50,0x9e,
0x03,0x0c,0x6d,0x74,0xd8,0xa8,0x8d,0x07,
0x80,0x74,0xd8,0x24,0xc0,0x46,0x97,0x4d,
0x5d,0xe8,0xc1,0x23,0x84,0x74,0x02,0x78,
0x34,0xb7,0xc8,0x5e,0xa2,0x99,0x75,0xd3,
0xc8,0xac,0x7c,0x36,0xe8,0x61,0x70,0x00,
0xe2,0xb2,0x4a,0x44,0xff,0x1e,0x5c,0x3b,
0x8f,0xf7,0xc0,0x50,0x8f,0xf5,0xd0,0xd9,
0x40,0x0f,0x8d,0x1d,0x90,0x2d,0xe8,0x03,
0x29,0x94,0x34,0x60,0x2f,0x82,0x28,0x58,
0x00,0x03,0x7c,0x82,0x12,0x1c,0x36,0x34,
0x34,0x00,0x18,0x38,0xc3,0x6e,0x6e,0xae,
0x01,0x28,0x02,0x0f,0x98,0x81,0x64,0x5b,
0x00,0xe8,0x7e,0x86,0x22,0x10,0x81,0x64,
0x2f,0x41,0xb9,0x42,0x42,0x13,0x78,0xff,
0x41,0x66,0x3b,0x83,0x2b,0x1c,0x40,0x38,
0xdc,0xe8,0x64,0xe7,0x9a,0x2a,0xd4,0x41,
0x2a,0x78,0xe8,0x27,0x30,0xc0,0xb1,0x31,
0xb6,0x2a,0x8c,0xc1,0x14,0x48,0xb6,0x6c,
0xcf,0xb6,0x19,0x78,0xc1,0x00,0x6c,0xc2,
0xd0,0xe8,0x04,0x71,0x04,0x43,0x3e,0xb8,
0x55,0x2f,0x3d,0x02,0x70,0x97,0xe4,0xd9,
0x3c,0x42,0x6f,0x9f,0xcd,0x8c,0xf5,0x90,
0xf3,0x70,0xdb,0xb1,0x6c,0xcf,0xaa,0x30,
0xb7,0x5d,0xf7,0x18,0x5c,0xb0,0xdb,0x29,
0x90,0x5b,0xf4,0x90,0xb2,0x10,0xef,0x04,
0xd4,0x91,0x97,0x90,0xe8,0x01,0x1f,0x80,
0xc0,0xf8,0x01,0x36,0x60,0x97,0x43,0x13,
0x88,0x02,0xde,0x70,0x00,0x07,0x34,0xc3,
0x00,0x34,0x76,0x7b,0x01,0x56,0x39,0xe8,
0x03,0xdd,0x89,0x42,0x2b,0x64,0xa3,0x54,
0x1a,0xc0,0x78,0x8b,0x82,0x28,0xa8,0x23,
0x67,0x3b,0x8e,0x7d,0x2b,0xc2,0x21,0xb9,
0x82,0xa6,0xd6,0x41,0x1d,0x34,0x81,0x1f,
0x1e,0x80,0x3b,0x34,0x01,0x80,0x23,0x04,
0x80,0x2b,0x82,0x15,0xa9,0x42,0x2b,0x00,
0x78,0x1d,0x44,0x83,0x83,0x47,0xf8,0x5c,
0xbe,0x80,0xb5,0x85,0x57,0x5f,0x6c,0x93,
0x72,0x50,0x12,0x1e,0x49,0x21,0x08,0xd8,
0x86,0x0f,0x28,0xa9,0xb2,0x08,0xee,0x75,
0x7b,0x85,0x56,0x80,0x4f,0x6a,0x80,0x37,
0x8a,0xf3,0x0b,0x29,0xac,0xb8,0x18,0x4b,
0xa5,0x8b,0xcf,0xb7,0x7b,0xb5,0x17,0x24,
0x2c,0x0e,0x24,0x44,0x83,0x05,0xc0,0xd6,
0xe2,0x10,0x78,0x68,0x77,0x14,0x8f,0xf3,
0x38,0x53,0x8c,0x9c,0x2a,0xb0,0x25,0x53,
0xcc,0x6e,0x97,0xc8,0x2e,0x42,0xd5,0xff,
0xc4,0xb9,0xc1,0xd2,0xf8,0x42,0x04,0x12,
0x28,0x74,0x88,0x8f,0x38,0xd2,0x64,0x00,
0x08,0xa0,0x38,0x8a,0x9f,0xb8,0x49,0x03,
0xd6,0xe6,0xbe,0x38,0x60,0x69,0x39,0x11,
0x71,0xf6,0x1a,0xe0,0x78,0x00,0xd9,0xc1,
0x80,0xf7,0x38,0x99,0x97,0xf9,0xec,0xca,
0xae,0x8f,0x9f,0xf9,0x57,0x9a,0x90,0xd4,
0xa5,0xdb,0x5d,0x28,0x42,0x16,0xac,0x01,
0xaa,0xc8,0xd1,0x98,0x88,0x38,0x94,0x9b,
0x85,0x16,0x58,0x39,0x95,0x03,0xf6,0x89,
0xf7,0xf9,0x96,0x67,0xf9,0xd9,0xb9,0xd7,
0xfc,0x90,0xc2,0x97,0xaf,0x77,0x60,0x99,
0x39,0xa2,0x27,0xfa,0x90,0xf7,0xf8,0xbd,
0x7e,0x49,0xa6,0xe1,0x58,0x55,0x5f,0xb4,
0x07,0xf4,0x36,0x4e,0xdd,0xb9,0xf0,0x78,
0xf7,0x9e,0x97,0xb4,0x9e,0xd7,0x15,0x96,
0xbf,0xf8,0x7a,0x03,0x3a,0x70,0x06,0x11,
0xfe,0x39,0x65,0x8e,0x27,0xba,0xa9,0x2b,
0x3a,0x9a,0x33,0xfa,0x22,0xa0,0xc2,0x80,
0xae,0x4a,0xd1,0x89,0xcb,0x93,0x5b,0xfa,
0x98,0x48,0xf9,0xa6,0x67,0x7a,0x95,0x03,
0x3a,0xae,0x7b,0xfa,0x10,0x95,0xc3,0x00,
0xcc,0x12,0x12,0x9d,0xba,0xa9,0x2f,0xfa,
0xa2,0x2b,0x7a,0x3a,0x01,0xae,0xac,0x97,
0x85,0x9d,0x5b,0xfa,0xd5,0x98,0x9d,0xad,
0x37,0xfb,0x9f,0xeb,0xfa,0xb3,0x6f,0xf9,
0xa0,0x7b,0xc6,0xf6,0x6d,0x81,0x1d,0x00,
0x3b,0xb6,0xcf,0x71,0xaa,0x0f,0xfb,0x05,
0xac,0x3a,0x9d,0x1f,0xbb,0x75,0x83,0xfb,
0x9f,0x91,0x0b,0xb3,0x37,0xbb,0xad,0x47,
0x7b,0xae,0x47,0xbb,0x54,0x16,0x83,0x28,
0xc4,0x16,0x0e,0x0c,0xc0,0x16,0x2c,0xff,
0x55,0xb6,0xcf,0xfb,0xb0,0xcf,0x71,0x4d,
0x89,0x7b,0x10,0xe3,0x3b,0x0b,0x81,0x8f,
0xb9,0x3b,0x3b,0xba,0x43,0x3b,0xa0,0xd7,
0x82,0x2d,0x88,0x02,0x24,0x70,0xdf,0x0f,
0xf0,0x00,0x0d,0x1e,0xd2,0x21,0xcd,0x3b,
0xc3,0x77,0x14,0xcb,0x24,0x39,0xbe,0x27,
0xbb,0xa5,0xaf,0x57,0x16,0xf6,0x7b,0xa6,
0xf7,0x79,0xba,0x5f,0xb9,0xb4,0x9b,0x00,
0x52,0x45,0x03,0x24,0x20,0x92,0x29,0xac,
0x01,0x73,0x29,0x7c,0xc3,0x33,0x3c,0x9f,
0x69,0x9b,0xbe,0x23,0x7b,0xca,0xb3,0xd0,
0x94,0x5b,0xbc,0xb9,0xff,0xbb,0xba,0x9b,
0xc0,0x3f,0x20,0x55,0x13,0x7c,0x7c,0x2d,
0xa4,0x83,0x33,0xc4,0xfb,0x01,0x90,0x7c,
0xc9,0x03,0xfb,0x05,0xd4,0xc0,0xb5,0xad,
0xbc,0xca,0x0b,0xfd,0x57,0x58,0x0d,0xbf,
0xbb,0xbc,0xb3,0xcb,0x34,0xcc,0xe3,0x00,
0xd0,0x77,0x40,0x5f,0x2d,0x0c,0x9f,0xf5,
0x15,0xc2,0xef,0x3c,0xd5,0xf7,0xfc,0xa9,
0xf3,0x59,0xd0,0x13,0x7d,0xe0,0x6a,0xbd,
0x80,0x90,0x0b,0x2a,0xe4,0x39,0xd2,0x5b,
0xbc,0xae,0xb7,0x57,0x0d,0x44,0xcf,0x0f,
0x5c,0x3b,0xd0,0xf3,0x81,0x2d,0xac,0x01,
0xc9,0xb7,0x7d,0x47,0x2d,0xbc,0xd5,0x6f,
0xc7,0x2e,0xb5,0x39,0xd7,0x77,0x85,0xc4,
0xdf,0x39,0xd6,0x90,0x4e,0xad,0x87,0x3d,
0x95,0x43,0xfb,0x0b,0x98,0x8e,0xf2,0xe4,
0x03,0xdd,0x1c,0x80,0x39,0x2b,0x52,0xce,
0x27,0x3c,0xd5,0xbb,0xbd,0xd5,0xcb,0x8e,
0xa3,0xcf,0x11,0xc4,0x83,0xfb,0xdd,0xcb,
0xba,0xee,0x61,0x3a,0xdf,0x9f,0xbb,0x4c,
0x9b,0x34,0x0e,0x24,0xd2,0xbd,0xe9,0xff,
0x81,0x29,0x10,0xfc,0xaa,0x2b,0x0f,0x1f,
0x1c,0x7c,0x00,0x25,0x51,0xe2,0x97,0x3e,
0xcf,0x67,0x3b,0xd6,0xd7,0xfd,0xd0,0xab,
0x7e,0x57,0x18,0x47,0x0d,0x54,0x7e,0xbf,
0x6f,0x39,0x08,0x68,0x78,0x92,0xd8,0x42,
0x2b,0xc0,0x01,0xd0,0xdb,0x45,0xc8,0xbb,
0x03,0xe9,0xbb,0xbd,0xef,0x67,0x3b,0x0e,
0x98,0xb3,0xb1,0xb3,0x3e,0xba,0x11,0xbf,
0x9d,0xe8,0x5b,0xc5,0xc3,0xfe,0xc5,0xff,
0x3d,0xf3,0xf0,0x92,0x2d,0x28,0x55,0xe1,
0x17,0xcd,0x0f,0x30,0xe7,0xef,0x57,0xbf,
0xe9,0x27,0xfe,0xc2,0xcb,0x3c,0x78,0x19,
0xbf,0xdd,0x73,0xbf,0x72,0xe4,0x1b,0x0d,
0xbc,0xbe,0xf2,0xf7,0xfd,0x0b,0x00,0xbd,
0x79,0x91,0xcb,0x2b,0xfc,0x75,0x46,0x7f,
0xb5,0x2d,0x3c,0x73,0xef,0x5f,0xbf,0xf5,
0x9f,0x7e,0x20,0x1b,0xcd,0xf0,0xab,0x7e,
0xe4,0xe3,0xfb,0x56,0x88,0xff,0xf8,0x6b,
0xfa,0x22,0x00,0x84,0x89,0x0c,0x19,0xfe,
0x15,0x2c,0xa8,0x27,0xc3,0xab,0x72,0x20,
0x50,0x74,0xe8,0x60,0x30,0xc3,0x8f,0x2d,
0x70,0x70,0xb8,0x3b,0x80,0xe3,0x62,0x46,
0x8c,0x1b,0x35,0x66,0xf4,0x78,0x60,0xd1,
0x17,0x82,0x06,0x49,0x96,0x34,0x79,0x12,
0x65,0x4a,0x95,0x2b,0x59,0x9e,0x84,0xd3,
0x12,0x66,0x4c,0x99,0x33,0x4d,0x0e,0xac,
0x05,0xc2,0x40,0x4e,0x03,0x5a,0x74,0xf6,
0xf4,0xf9,0x33,0xe7,0x8b,0x17,0x20,0x44,
0x8e,0x2c,0x19,0x4c,0xd4,0x0b,0x81,0x0f,
0x49,0x3e,0x1a,0x10,0x0e,0x47,0x54,0xa9,
0x1c,0xa9,0x76,0x8c,0x7a,0xe0,0x80,0x1c,
0x13,0xff,0x8c,0xd2,0xf4,0xfa,0x15,0x62,
0xac,0xc1,0x97,0x61,0xc9,0x96,0x5d,0xd9,
0x61,0x20,0xaa,0x9b,0x06,0x5e,0x00,0x75,
0xeb,0xb3,0x6d,0x0d,0xae,0x19,0x98,0x92,
0xe4,0x63,0xab,0x95,0x01,0x54,0xff,0xea,
0x16,0xbc,0x5b,0xc7,0xdd,0x54,0xc1,0x82,
0xad,0x62,0xad,0x81,0x6a,0x64,0x5f,0xb3,
0x8b,0x19,0xff,0x1b,0xdb,0x18,0x72,0xd8,
0xae,0xff,0x6a,0xd5,0xe0,0x69,0x60,0xd1,
0x5b,0xa0,0x35,0x68,0xa0,0x20,0x88,0xb6,
0x6f,0x86,0xbb,0x4d,0x40,0x70,0x55,0x9c,
0x01,0xd7,0xa4,0x68,0x83,0x59,0x13,0x1e,
0x5a,0x6b,0x20,0x5f,0xd9,0x91,0x69,0x83,
0x0d,0x08,0x00,0x3b,};
 
static const char data_STM32_LED_html[] = {
0x2f,0x53,0x54,0x4d,0x33,0x32,0x5f,0x4c,
0x45,0x44,0x2e,0x68,0x74,0x6d,0x6c,0x00,0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x30,
0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
0x0a,0x53,0x65,0x72,0x76,0x65,0x72,0x3a,
0x20,0x75,0x49,0x50,0x2f,0x30,0x2e,0x39,
0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,
0x2f,0x64,0x75,0x6e,0x6b,0x65,0x6c,0x73,
0x2e,0x63,0x6f,0x6d,0x2f,0x61,0x64,0x61,
0x6d,0x2f,0x75,0x69,0x70,0x2f,0x29,0x0d,
0x0a,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,
0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,
0x65,0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,
0x0d,0x0a,0x0d,0x0a,0x3c,0x21,0x44,0x4f,
0x43,0x54,0x59,0x50,0x45,0x20,0x48,0x54,
0x4d,0x4c,0x20,0x50,0x55,0x42,0x4c,0x49,
0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57,0x33,
0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x48,
0x54,0x4d,0x4c,0x20,0x34,0x2e,0x30,0x20,
0x54,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,
0x6f,0x6e,0x61,0x6c,0x2f,0x2f,0x45,0x4e,
0x22,0x3e,0x0a,0x3c,0x68,0x74,0x6d,0x6c,
0x3e,0x3c,0x68,0x65,0x61,0x64,0x3e,0x3c,
0x21,0x2d,0x2d,0x20,0x73,0x61,0x76,0x65,
0x64,0x20,0x66,0x72,0x6f,0x6d,0x20,0x75,
0x72,0x6c,0x3d,0x28,0x30,0x30,0x33,0x33,
0x29,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,
0x31,0x39,0x32,0x2e,0x31,0x36,0x38,0x2e,
0x30,0x2e,0x38,0x2f,0x53,0x54,0x4d,0x33,
0x32,0x5f,0x4c,0x45,0x44,0x2e,0x68,0x74,
0x6d,0x6c,0x20,0x2d,0x2d,0x3e,0x3c,0x74,
0x69,0x74,0x6c,0x65,0x3e,0x53,0x54,0x4d,
0x33,0x32,0x20,0x57,0x65,0x62,0x73,0x65,
0x72,0x76,0x65,0x72,0x20,0x4c,0x45,0x44,
0x73,0x20,0x43,0x6f,0x6e,0x74,0x72,0x6f,
0x6c,0x3c,0x2f,0x74,0x69,0x74,0x6c,0x65,
0x3e,0x0d,0x0a,0x3c,0x6d,0x65,0x74,0x61,
0x20,0x68,0x74,0x74,0x70,0x2d,0x65,0x71,
0x75,0x69,0x76,0x3d,0x22,0x43,0x6f,0x6e,
0x74,0x65,0x6e,0x74,0x2d,0x54,0x79,0x70,
0x65,0x22,0x20,0x63,0x6f,0x6e,0x74,0x65,
0x6e,0x74,0x3d,0x22,0x74,0x65,0x78,0x74,
0x2f,0x68,0x74,0x6d,0x6c,0x3b,0x20,0x63,
0x68,0x61,0x72,0x73,0x65,0x74,0x3d,0x77,
0x69,0x6e,0x64,0x6f,0x77,0x73,0x2d,0x31,
0x32,0x35,0x32,0x22,0x3e,0x0d,0x0a,0x3c,
0x6d,0x65,0x74,0x61,0x20,0x63,0x6f,0x6e,
0x74,0x65,0x6e,0x74,0x3d,0x22,0x4d,0x53,
0x48,0x54,0x4d,0x4c,0x20,0x36,0x2e,0x30,
0x30,0x2e,0x32,0x38,0x30,0x30,0x2e,0x31,
0x35,0x36,0x31,0x22,0x20,0x6e,0x61,0x6d,
0x65,0x3d,0x22,0x47,0x45,0x4e,0x45,0x52,
0x41,0x54,0x4f,0x52,0x22,0x3e,0x3c,0x2f,
0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x0d,
0x0a,0x3c,0x62,0x6f,0x64,0x79,0x3e,0x3c,
0x73,0x6d,0x61,0x6c,0x6c,0x3e,0x3c,0x73,
0x6d,0x61,0x6c,0x6c,0x3e,0x3c,0x62,0x69,
0x67,0x3e,0x3c,0x62,0x69,0x67,0x3e,0x3c,
0x62,0x69,0x67,0x20,0x73,0x74,0x79,0x6c,
0x65,0x3d,0x22,0x66,0x6f,0x6e,0x74,0x2d,
0x77,0x65,0x69,0x67,0x68,0x74,0x3a,0x20,
0x62,0x6f,0x6c,0x64,0x3b,0x22,0x3e,0x3c,
0x62,0x69,0x67,0x3e,0x3c,0x73,0x74,0x72,
0x6f,0x6e,0x67,0x3e,0x3c,0x73,0x70,0x61,
0x6e,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,
0x22,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x74,
0x79,0x6c,0x65,0x3a,0x20,0x69,0x74,0x61,
0x6c,0x69,0x63,0x3b,0x22,0x3e,0x53,0x54,
0x4d,0x33,0x32,0x20,0x28,0x43,0x4f,0x52,
0x54,0x45,0x58,0x20,0x4d,0x33,0x29,0x20,
0x2d,0x20,0x33,0x32,0x2d,0x62,0x69,0x74,
0x20,0x4d,0x69,0x63,0x72,0x6f,0x63,0x6f,
0x6e,0x74,0x72,0x6f,0x6c,0x6c,0x65,0x72,
0x73,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,
0x20,0x0d,0x0a,0x3c,0x2f,0x73,0x74,0x72,
0x6f,0x6e,0x67,0x3e,0x26,0x6e,0x62,0x73,
0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,
0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,0x3b,
0x20,0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,
0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,
0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,
0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,
0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,
0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,
0x3b,0x20,0x0d,0x0a,0x26,0x6e,0x62,0x73,
0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,
0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,0x3b,
0x20,0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,
0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,
0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,
0x62,0x73,0x70,0x3b,0x20,0x0d,0x0a,0x26,
0x6e,0x62,0x73,0x70,0x3b,0x26,0x6e,0x62,
0x73,0x70,0x3b,0x3c,0x2f,0x62,0x69,0x67,
0x3e,0x3c,0x2f,0x62,0x69,0x67,0x3e,0x3c,
0x2f,0x62,0x69,0x67,0x3e,0x3c,0x2f,0x62,
0x69,0x67,0x3e,0x3c,0x2f,0x73,0x6d,0x61,
0x6c,0x6c,0x3e,0x3c,0x2f,0x73,0x6d,0x61,
0x6c,0x6c,0x3e,0x3c,0x62,0x72,0x3e,0x3c,
0x62,0x72,0x3e,0x3c,0x62,0x72,0x3e,0x54,
0x68,0x69,0x73,0x20,0x70,0x61,0x67,0x65,
0x20,0x61,0x6c,0x6c,0x6f,0x77,0x73,0x20,
0x0d,0x0a,0x79,0x6f,0x75,0x20,0x74,0x6f,
0x20,0x63,0x6f,0x6e,0x74,0x72,0x6f,0x6c,
0x20,0x74,0x68,0x65,0x20,0x66,0x6f,0x75,
0x72,0x20,0x4c,0x45,0x44,0x73,0x3a,0x20,
0x4c,0x45,0x44,0x31,0x2c,0x20,0x4c,0x45,
0x44,0x32,0x2c,0x20,0x4c,0x45,0x44,0x33,
0x20,0x61,0x6e,0x64,0x20,0x4c,0x45,0x44,
0x34,0x20,0x6c,0x6f,0x63,0x61,0x74,0x65,
0x64,0x20,0x69,0x6e,0x20,0x0d,0x0a,0x74,
0x68,0x65,0x26,0x6e,0x62,0x73,0x70,0x3b,
0x53,0x54,0x4d,0x33,0x32,0x31,0x30,0x43,
0x2d,0x45,0x56,0x41,0x4c,0x20,0x62,0x6f,
0x61,0x72,0x64,0x2e,0x20,0x54,0x6f,0x20,
0x70,0x75,0x74,0x20,0x6f,0x6e,0x2f,0x6f,
0x66,0x66,0x3c,0x62,0x72,0x3e,0x61,0x20,
0x4c,0x45,0x44,0x20,0x79,0x6f,0x75,0x20,
0x68,0x61,0x76,0x65,0x20,0x74,0x6f,0x20,
0x63,0x68,0x65,0x63,0x6b,0x2f,0x75,0x6e,
0x63,0x68,0x65,0x63,0x6b,0x20,0x0d,0x0a,
0x69,0x74,0x73,0x20,0x63,0x6f,0x72,0x72,
0x65,0x73,0x70,0x6f,0x6e,0x64,0x69,0x6e,
0x67,0x20,0x63,0x68,0x65,0x63,0x6b,0x62,
0x6f,0x78,0x2e,0x20,0x54,0x68,0x65,0x6e,
0x20,0x79,0x6f,0x75,0x20,0x68,0x61,0x76,
0x65,0x20,0x74,0x6f,0x20,0x63,0x6c,0x69,
0x63,0x6b,0x20,0x6f,0x6e,0x20,0x22,0x53,
0x65,0x6e,0x64,0x22,0x20,0x62,0x75,0x74,
0x74,0x6f,0x6e,0x20,0x74,0x6f,0x20,0x73,
0x75,0x62,0x6d,0x69,0x74,0x20,0x0d,0x0a,
0x74,0x68,0x65,0x20,0x6e,0x65,0x77,0x20,
0x4c,0x45,0x44,0x73,0x3c,0x62,0x72,0x3e,
0x63,0x6f,0x6e,0x66,0x69,0x67,0x75,0x72,
0x61,0x74,0x69,0x6f,0x6e,0x2e,0x20,0x46,
0x69,0x6e,0x61,0x6c,0x6c,0x79,0x20,0x63,
0x68,0x65,0x63,0x6b,0x20,0x69,0x6e,0x20,
0x74,0x68,0x65,0x26,0x6e,0x62,0x73,0x70,
0x3b,0x53,0x54,0x4d,0x33,0x32,0x31,0x30,
0x43,0x2d,0x45,0x56,0x41,0x4c,0x20,0x62,
0x6f,0x61,0x72,0x64,0x20,0x0d,0x0a,0x74,
0x68,0x61,0x74,0x20,0x79,0x6f,0x75,0x20,
0x67,0x65,0x74,0x20,0x74,0x68,0x65,0x20,
0x64,0x65,0x73,0x69,0x72,0x65,0x64,0x20,
0x4c,0x45,0x44,0x73,0x20,0x61,0x72,0x65,
0x20,0x70,0x75,0x74,0x74,0x65,0x64,0x20,
0x6f,0x6e,0x2f,0x6f,0x66,0x66,0x2e,0x20,
0x3c,0x62,0x72,0x3e,0x3c,0x62,0x72,0x3e,
0x3c,0x62,0x72,0x3e,0x0d,0x0a,0x3c,0x74,
0x61,0x62,0x6c,0x65,0x20,0x73,0x74,0x79,
0x6c,0x65,0x3d,0x22,0x77,0x69,0x64,0x74,
0x68,0x3a,0x20,0x37,0x38,0x37,0x70,0x78,
0x3b,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3a,
0x20,0x77,0x68,0x69,0x74,0x65,0x3b,0x20,
0x68,0x65,0x69,0x67,0x68,0x74,0x3a,0x20,
0x33,0x31,0x70,0x78,0x3b,0x22,0x20,0x77,
0x68,0x69,0x74,0x65,0x3d,0x22,0x22,0x20,
0x63,0x6f,0x6c,0x6f,0x72,0x3d,0x22,0x22,
0x20,0x3b,0x3d,0x22,0x22,0x20,0x31,0x30,
0x30,0x3d,0x22,0x22,0x20,0x62,0x6f,0x72,
0x64,0x65,0x72,0x3d,0x22,0x30,0x22,0x20,
0x63,0x65,0x6c,0x6c,0x70,0x61,0x64,0x64,
0x69,0x6e,0x67,0x3d,0x22,0x33,0x22,0x20,
0x63,0x65,0x6c,0x6c,0x73,0x70,0x61,0x63,
0x69,0x6e,0x67,0x3d,0x22,0x30,0x22,0x3e,
0x0d,0x0a,0x20,0x20,0x3c,0x74,0x62,0x6f,
0x64,0x79,0x3e,0x0d,0x0a,0x20,0x20,0x3c,
0x74,0x72,0x3e,0x0d,0x0a,0x20,0x20,0x20,
0x20,0x3c,0x74,0x64,0x20,0x63,0x6c,0x61,
0x73,0x73,0x3d,0x22,0x74,0x61,0x62,0x74,
0x69,0x74,0x6c,0x65,0x22,0x20,0x73,0x74,
0x79,0x6c,0x65,0x3d,0x22,0x68,0x65,0x69,
0x67,0x68,0x74,0x3a,0x20,0x31,0x35,0x70,
0x78,0x3b,0x20,0x62,0x61,0x63,0x6b,0x67,
0x72,0x6f,0x75,0x6e,0x64,0x2d,0x63,0x6f,
0x6c,0x6f,0x72,0x3a,0x20,0x72,0x67,0x62,
0x28,0x35,0x31,0x2c,0x20,0x35,0x31,0x2c,
0x20,0x32,0x35,0x35,0x29,0x3b,0x22,0x3e,
0x3c,0x62,0x69,0x67,0x3e,0x3c,0x62,0x69,
0x67,0x3e,0x3c,0x66,0x6f,0x6e,0x74,0x20,
0x73,0x69,0x7a,0x65,0x3d,0x22,0x2d,0x31,
0x22,0x3e,0x3c,0x62,0x69,0x67,0x3e,0x3c,
0x62,0x69,0x67,0x3e,0x3c,0x73,0x74,0x72,
0x6f,0x6e,0x67,0x3e,0x53,0x54,0x4d,0x33,
0x32,0x20,0x57,0x65,0x62,0x73,0x65,0x72,
0x76,0x65,0x72,0x20,0x4c,0x45,0x44,0x73,
0x20,0x0d,0x0a,0x20,0x20,0x20,0x20,0x20,
0x20,0x43,0x6f,0x6e,0x74,0x72,0x6f,0x6c,
0x3c,0x2f,0x73,0x74,0x72,0x6f,0x6e,0x67,
0x3e,0x3c,0x2f,0x62,0x69,0x67,0x3e,0x3c,
0x2f,0x62,0x69,0x67,0x3e,0x3c,0x2f,0x66,
0x6f,0x6e,0x74,0x3e,0x3c,0x2f,0x62,0x69,
0x67,0x3e,0x3c,0x2f,0x62,0x69,0x67,0x3e,
0x3c,0x2f,0x74,0x64,0x3e,0x3c,0x2f,0x74,
0x72,0x3e,0x3c,0x2f,0x74,0x62,0x6f,0x64,
0x79,0x3e,0x3c,0x2f,0x74,0x61,0x62,0x6c,
0x65,0x3e,0x3c,0x62,0x72,0x3e,0x0d,0x0a,
0x3c,0x66,0x6f,0x72,0x6d,0x20,0x61,0x63,
0x74,0x69,0x6f,0x6e,0x3d,0x22,0x6d,0x65,
0x74,0x68,0x6f,0x64,0x3d,0x67,0x65,0x74,
0x22,0x3e,0x3c,0x69,0x6e,0x70,0x75,0x74,
0x20,0x76,0x61,0x6c,0x75,0x65,0x3d,0x22,
0x31,0x22,0x20,0x6e,0x61,0x6d,0x65,0x3d,
0x22,0x6c,0x65,0x64,0x22,0x20,0x74,0x79,
0x70,0x65,0x3d,0x22,0x63,0x68,0x65,0x63,
0x6b,0x62,0x6f,0x78,0x22,0x3e,0x4c,0x45,
0x44,0x31,0x3c,0x62,0x72,0x3e,0x3c,0x69,
0x6e,0x70,0x75,0x74,0x20,0x76,0x61,0x6c,
0x75,0x65,0x3d,0x22,0x32,0x22,0x20,0x6e,
0x61,0x6d,0x65,0x3d,0x22,0x6c,0x65,0x64,
0x22,0x20,0x74,0x79,0x70,0x65,0x3d,0x22,
0x63,0x68,0x65,0x63,0x6b,0x62,0x6f,0x78,
0x22,0x3e,0x4c,0x45,0x44,0x32,0x3c,0x62,
0x72,0x3e,0x3c,0x69,0x6e,0x70,0x75,0x74,
0x20,0x76,0x61,0x6c,0x75,0x65,0x3d,0x22,
0x33,0x22,0x20,0x6e,0x61,0x6d,0x65,0x3d,
0x22,0x6c,0x65,0x64,0x22,0x20,0x74,0x79,
0x70,0x65,0x3d,0x22,0x63,0x68,0x65,0x63,
0x6b,0x62,0x6f,0x78,0x22,0x3e,0x4c,0x45,
0x44,0x33,0x3c,0x62,0x72,0x3e,0x3c,0x69,
0x6e,0x70,0x75,0x74,0x20,0x76,0x61,0x6c,
0x75,0x65,0x3d,0x22,0x34,0x22,0x20,0x6e,
0x61,0x6d,0x65,0x3d,0x22,0x6c,0x65,0x64,
0x22,0x20,0x74,0x79,0x70,0x65,0x3d,0x22,
0x63,0x68,0x65,0x63,0x6b,0x62,0x6f,0x78,
0x22,0x3e,0x4c,0x45,0x44,0x34,0x20,0x3c,
0x62,0x72,0x3e,0x3c,0x62,0x72,0x3e,0x3c,
0x69,0x6e,0x70,0x75,0x74,0x20,0x76,0x61,
0x6c,0x75,0x65,0x3d,0x22,0x53,0x65,0x6e,
0x64,0x22,0x20,0x74,0x79,0x70,0x65,0x3d,
0x22,0x73,0x75,0x62,0x6d,0x69,0x74,0x22,
0x3e,0x20,0x3c,0x2f,0x66,0x6f,0x72,0x6d,
0x3e,0x0d,0x0a,0x3c,0x68,0x33,0x3e,0x3c,
0x66,0x6f,0x6e,0x74,0x20,0x73,0x69,0x7a,
0x65,0x3d,0x22,0x2d,0x31,0x22,0x3e,0x3c,
0x73,0x70,0x61,0x6e,0x20,0x73,0x74,0x79,
0x6c,0x65,0x3d,0x22,0x63,0x6f,0x6c,0x6f,
0x72,0x3a,0x20,0x62,0x6c,0x61,0x63,0x6b,
0x3b,0x22,0x3e,0x3c,0x2f,0x73,0x70,0x61,
0x6e,0x3e,0x0d,0x0a,0x3c,0x68,0x33,0x20,
0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,0x66,
0x6f,0x6e,0x74,0x2d,0x77,0x65,0x69,0x67,
0x68,0x74,0x3a,0x20,0x6e,0x6f,0x72,0x6d,
0x61,0x6c,0x3b,0x22,0x3e,0x54,0x6f,0x20,
0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x74,
0x6f,0x20,0x74,0x68,0x65,0x20,0x53,0x54,
0x4d,0x33,0x32,0x20,0x57,0x65,0x62,0x73,
0x65,0x72,0x76,0x65,0x72,0x20,0x44,0x65,
0x6d,0x6f,0x20,0x68,0x6f,0x6d,0x65,0x20,
0x70,0x61,0x67,0x65,0x20,0x0d,0x0a,0x70,
0x6c,0x65,0x61,0x73,0x65,0x20,0x63,0x6c,
0x69,0x63,0x6b,0x20,0x6f,0x6e,0x3a,0x20,
0x26,0x6e,0x62,0x73,0x70,0x3b,0x3c,0x61,
0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x68,
0x74,0x74,0x70,0x3a,0x2f,0x2f,0x31,0x39,
0x32,0x2e,0x31,0x36,0x38,0x2e,0x30,0x2e,
0x38,0x2f,0x53,0x54,0x4d,0x33,0x32,0x5f,
0x48,0x6f,0x6d,0x65,0x5f,0x57,0x65,0x62,
0x73,0x65,0x72,0x76,0x65,0x72,0x5f,0x44,
0x65,0x6d,0x6f,0x2e,0x68,0x74,0x6d,0x6c,
0x22,0x3e,0x3c,0x62,0x69,0x67,0x3e,0x3c,
0x73,0x70,0x61,0x6e,0x20,0x73,0x74,0x79,
0x6c,0x65,0x3d,0x22,0x66,0x6f,0x6e,0x74,
0x2d,0x77,0x65,0x69,0x67,0x68,0x74,0x3a,
0x20,0x62,0x6f,0x6c,0x64,0x3b,0x22,0x3e,
0x48,0x6f,0x6d,0x65,0x3c,0x2f,0x73,0x70,
0x61,0x6e,0x3e,0x3c,0x2f,0x62,0x69,0x67,
0x3e,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x68,
0x33,0x3e,0x3c,0x2f,0x66,0x6f,0x6e,0x74,
0x3e,0x3c,0x2f,0x68,0x33,0x3e,0x0d,0x0a,
0x3c,0x68,0x33,0x3e,0x3c,0x62,0x72,0x3e,
0x3c,0x2f,0x68,0x33,0x3e,0x3c,0x66,0x6f,
0x6e,0x74,0x20,0x73,0x69,0x7a,0x65,0x3d,
0x22,0x2d,0x31,0x22,0x3e,0x3c,0x73,0x70,
0x61,0x6e,0x20,0x73,0x74,0x79,0x6c,0x65,
0x3d,0x22,0x63,0x6f,0x6c,0x6f,0x72,0x3a,
0x20,0x62,0x6c,0x61,0x63,0x6b,0x3b,0x22,
0x3e,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x3c,0x62,0x72,0x3e,0x3c,0x2f,0x73,0x70,
0x61,0x6e,0x3e,0x3c,0x2f,0x66,0x6f,0x6e,
0x74,0x3e,0x3c,0x66,0x6f,0x6e,0x74,0x20,
0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x66,
0x6f,0x6f,0x74,0x6d,0x73,0x67,0x22,0x3e,
0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,
0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,
0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,
0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,
0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,
0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,0x3b,
0x20,0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,
0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,0x0d,
0x0a,0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,
0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,
0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,
0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,
0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,
0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,
0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,0x3b,
0x20,0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,
0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,
0x6e,0x62,0x73,0x70,0x3b,0x20,0x0d,0x0a,
0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,
0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,
0x62,0x73,0x70,0x3b,0x3c,0x63,0x6f,0x6d,
0x6d,0x65,0x6e,0x74,0x20,0x74,0x69,0x74,
0x6c,0x65,0x3d,0x22,0x23,0x63,0x6f,0x6e,
0x66,0x69,0x67,0x20,0x74,0x69,0x6d,0x65,
0x66,0x6d,0x74,0x3d,0x26,0x71,0x75,0x6f,
0x74,0x3b,0x25,0x59,0x26,0x71,0x75,0x6f,
0x74,0x3b,0x20,0x22,0x20,0x78,0x6d,0x6c,
0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,
0x3a,0x2f,0x2f,0x64,0x69,0x73,0x72,0x75,
0x70,0x74,0x69,0x76,0x65,0x2d,0x69,0x6e,
0x6e,0x6f,0x76,0x61,0x74,0x69,0x6f,0x6e,
0x73,0x2e,0x63,0x6f,0x6d,0x2f,0x7a,0x6f,
0x6f,0x2f,0x6e,0x76,0x75,0x22,0x3e,0x3c,
0x21,0x2d,0x2d,0x23,0x63,0x6f,0x6e,0x66,
0x69,0x67,0x20,0x74,0x69,0x6d,0x65,0x66,
0x6d,0x74,0x3d,0x22,0x25,0x59,0x22,0x20,
0x2d,0x2d,0x3e,0x3c,0x2f,0x63,0x6f,0x6d,
0x6d,0x65,0x6e,0x74,0x3e,0x3c,0x63,0x6f,
0x6d,0x6d,0x65,0x6e,0x74,0x20,0x74,0x69,
0x74,0x6c,0x65,0x3d,0x22,0x23,0x65,0x63,
0x68,0x6f,0x20,0x76,0x61,0x72,0x3d,0x26,
0x71,0x75,0x6f,0x74,0x3b,0x44,0x41,0x54,
0x45,0x5f,0x47,0x4d,0x54,0x26,0x71,0x75,
0x6f,0x74,0x3b,0x20,0x22,0x20,0x78,0x6d,
0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,
0x70,0x3a,0x2f,0x2f,0x64,0x69,0x73,0x72,
0x75,0x70,0x74,0x69,0x76,0x65,0x2d,0x69,
0x6e,0x6e,0x6f,0x76,0x61,0x74,0x69,0x6f,
0x6e,0x73,0x2e,0x63,0x6f,0x6d,0x2f,0x7a,
0x6f,0x6f,0x2f,0x6e,0x76,0x75,0x22,0x3e,
0x3c,0x21,0x2d,0x2d,0x23,0x65,0x63,0x68,
0x6f,0x20,0x76,0x61,0x72,0x3d,0x22,0x44,
0x41,0x54,0x45,0x5f,0x47,0x4d,0x54,0x22,
0x20,0x2d,0x2d,0x3e,0x3c,0x2f,0x63,0x6f,
0x6d,0x6d,0x65,0x6e,0x74,0x3e,0x20,0x0d,
0x0a,0x3c,0x73,0x70,0x61,0x6e,0x20,0x73,
0x74,0x79,0x6c,0x65,0x3d,0x22,0x63,0x6f,
0x6c,0x6f,0x72,0x3a,0x20,0x73,0x69,0x6c,
0x76,0x65,0x72,0x3b,0x22,0x3e,0x26,0x6e,
0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,
0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,
0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,
0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,0x3b,
0x20,0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,
0x26,0x6e,0x62,0x73,0x70,0x3b,0x41,0x6c,
0x6c,0x20,0x0d,0x0a,0x72,0x69,0x67,0x68,
0x74,0x73,0x20,0x72,0x65,0x73,0x65,0x72,
0x76,0x65,0x64,0x20,0xa9,0x20,0x32,0x30,
0x30,0x39,0x20,0x53,0x54,0x4d,0x69,0x63,
0x72,0x6f,0x65,0x6c,0x65,0x63,0x74,0x72,
0x6f,0x6e,0x69,0x63,0x73,0x3c,0x2f,0x73,
0x70,0x61,0x6e,0x3e,0x26,0x6e,0x62,0x73,
0x70,0x3b,0x3c,0x2f,0x66,0x6f,0x6e,0x74,
0x3e,0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,
0x3c,0x2f,0x68,0x74,0x6d,0x6c,0x3e,};
 
static char data_STM32_StatusBar_html[] = {
0x2f,0x53,0x54,0x4d,0x33,0x32,0x5f,0x53,
0x74,0x61,0x74,0x75,0x73,0x42,0x61,0x72,
0x2e,0x68,0x74,0x6d,0x6c,0x00,0x48,0x54,
0x54,0x50,0x2f,0x31,0x2e,0x30,0x20,0x32,
0x30,0x30,0x20,0x4f,0x4b,0x0d,0x0a,0x53,
0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x75,
0x49,0x50,0x2f,0x30,0x2e,0x39,0x20,0x28,
0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x64,
0x75,0x6e,0x6b,0x65,0x6c,0x73,0x2e,0x63,
0x6f,0x6d,0x2f,0x61,0x64,0x61,0x6d,0x2f,
0x75,0x69,0x70,0x2f,0x29,0x0d,0x0a,0x43,
0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,
0x79,0x70,0x65,0x3a,0x20,0x74,0x65,0x78,
0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,
0x0d,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54,
0x59,0x50,0x45,0x20,0x48,0x54,0x4d,0x4c,
0x20,0x50,0x55,0x42,0x4c,0x49,0x43,0x20,
0x22,0x2d,0x2f,0x2f,0x57,0x33,0x43,0x2f,
0x2f,0x44,0x54,0x44,0x20,0x48,0x54,0x4d,
0x4c,0x20,0x34,0x2e,0x30,0x31,0x20,0x54,
0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,
0x6e,0x61,0x6c,0x2f,0x2f,0x45,0x4e,0x22,
0x3e,0x0a,0x3c,0x68,0x74,0x6d,0x6c,0x3e,
0x3c,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,
0x3c,0x6d,0x65,0x74,0x61,0x20,0x68,0x74,
0x74,0x70,0x2d,0x65,0x71,0x75,0x69,0x76,
0x3d,0x22,0x72,0x65,0x66,0x72,0x65,0x73,
0x68,0x22,0x20,0x63,0x6f,0x6e,0x74,0x65,
0x6e,0x74,0x3d,0x22,0x31,0x22,0x3e,0x0d,
0x0a,0x3c,0x74,0x69,0x74,0x6c,0x65,0x3e,
0x53,0x54,0x4d,0x33,0x32,0x20,0x57,0x65,
0x62,0x73,0x65,0x72,0x76,0x65,0x72,0x20,
0x41,0x44,0x43,0x20,0x43,0x6f,0x6e,0x76,
0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x53,
0x74,0x61,0x74,0x75,0x73,0x20,0x42,0x61,
0x72,0x3c,0x2f,0x74,0x69,0x74,0x6c,0x65,
0x3e,0x3c,0x2f,0x68,0x65,0x61,0x64,0x3e,
0x0d,0x0a,0x3c,0x62,0x6f,0x64,0x79,0x3e,
0x3c,0x73,0x6d,0x61,0x6c,0x6c,0x3e,0x3c,
0x73,0x6d,0x61,0x6c,0x6c,0x3e,0x3c,0x62,
0x69,0x67,0x3e,0x3c,0x62,0x69,0x67,0x3e,
0x3c,0x62,0x69,0x67,0x20,0x73,0x74,0x79,
0x6c,0x65,0x3d,0x22,0x66,0x6f,0x6e,0x74,
0x2d,0x77,0x65,0x69,0x67,0x68,0x74,0x3a,
0x20,0x62,0x6f,0x6c,0x64,0x3b,0x22,0x3e,
0x3c,0x62,0x69,0x67,0x3e,0x3c,0x73,0x74,
0x72,0x6f,0x6e,0x67,0x3e,0x3c,0x65,0x6d,
0x3e,0x3c,0x73,0x70,0x61,0x6e,0x20,0x73,
0x74,0x79,0x6c,0x65,0x3d,0x22,0x66,0x6f,
0x6e,0x74,0x2d,0x73,0x74,0x79,0x6c,0x65,
0x3a,0x20,0x69,0x74,0x61,0x6c,0x69,0x63,
0x3b,0x22,0x3e,0x53,0x54,0x4d,0x33,0x32,
0x0d,0x0a,0x28,0x43,0x4f,0x52,0x54,0x45,
0x58,0x20,0x4d,0x33,0x29,0x20,0x2d,0x20,
0x33,0x32,0x2d,0x62,0x69,0x74,0x20,0x4d,
0x69,0x63,0x72,0x6f,0x63,0x6f,0x6e,0x74,
0x72,0x6f,0x6c,0x6c,0x65,0x72,0x73,0x3c,
0x2f,0x73,0x70,0x61,0x6e,0x3e,0x3c,0x2f,
0x65,0x6d,0x3e,0x3c,0x2f,0x73,0x74,0x72,
0x6f,0x6e,0x67,0x3e,0x0d,0x0a,0x26,0x6e,
0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,
0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,
0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,
0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,0x3b,
0x20,0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,
0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,
0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,
0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,
0x73,0x70,0x3b,0x0d,0x0a,0x26,0x6e,0x62,
0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,
0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,
0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,0x3b,
0x20,0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,
0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,
0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,
0x62,0x73,0x70,0x3b,0x26,0x6e,0x62,0x73,
0x70,0x3b,0x3c,0x2f,0x62,0x69,0x67,0x3e,
0x3c,0x2f,0x62,0x69,0x67,0x3e,0x3c,0x2f,
0x62,0x69,0x67,0x3e,0x3c,0x2f,0x62,0x69,
0x67,0x3e,0x3c,0x2f,0x73,0x6d,0x61,0x6c,
0x6c,0x3e,0x3c,0x2f,0x73,0x6d,0x61,0x6c,
0x6c,0x3e,0x3c,0x66,0x6f,0x6e,0x74,0x20,
0x73,0x69,0x7a,0x65,0x3d,0x22,0x2d,0x31,
0x22,0x3e,0x26,0x6e,0x62,0x73,0x70,0x3b,
0x20,0x0d,0x0a,0x26,0x6e,0x62,0x73,0x70,
0x3b,0x20,0x3c,0x2f,0x66,0x6f,0x6e,0x74,
0x3e,0x3c,0x73,0x70,0x61,0x6e,0x20,0x73,
0x74,0x79,0x6c,0x65,0x3d,0x22,0x66,0x6f,
0x6e,0x74,0x2d,0x77,0x65,0x69,0x67,0x68,
0x74,0x3a,0x20,0x62,0x6f,0x6c,0x64,0x3b,
0x22,0x3e,0x3c,0x62,0x72,0x3e,0x3c,0x62,
0x72,0x3e,0x3c,0x62,0x72,0x3e,0x3c,0x2f,
0x73,0x70,0x61,0x6e,0x3e,0x54,0x68,0x69,
0x73,0x20,0x70,0x61,0x67,0x65,0x20,0x61,
0x6c,0x6c,0x6f,0x77,0x73,0x20,0x79,0x6f,
0x75,0x20,0x74,0x6f,0x20,0x67,0x65,0x74,
0x20,0x63,0x6f,0x6e,0x74,0x69,0x6e,0x75,
0x6f,0x75,0x73,0x6c,0x79,0x20,0x74,0x68,
0x65,0x20,0x41,0x44,0x43,0x20,0x43,0x68,
0x61,0x6e,0x6e,0x65,0x6c,0x20,0x31,0x34,
0x20,0x61,0x6e,0x61,0x6c,0x6f,0x67,0x20,
0x69,0x6e,0x70,0x75,0x74,0x20,0x63,0x6f,
0x6e,0x76,0x65,0x72,0x74,0x65,0x64,0x20,
0x76,0x61,0x6c,0x75,0x65,0x2e,0x20,0x54,
0x68,0x69,0x73,0x20,0x41,0x44,0x43,0x20,
0x43,0x68,0x61,0x6e,0x6e,0x65,0x6c,0x20,
0x69,0x73,0x20,0x63,0x6f,0x6e,0x6e,0x65,
0x63,0x74,0x65,0x64,0x20,0x3c,0x62,0x72,
0x3e,0x74,0x6f,0x0d,0x0a,0x74,0x68,0x65,
0x20,0x52,0x56,0x31,0x20,0x70,0x6f,0x74,
0x65,0x6e,0x74,0x69,0x6f,0x6d,0x65,0x74,
0x65,0x72,0x26,0x6e,0x62,0x73,0x70,0x3b,
0x6c,0x6f,0x63,0x61,0x74,0x65,0x64,0x20,
0x69,0x6e,0x20,0x74,0x68,0x65,0x26,0x6e,
0x62,0x73,0x70,0x3b,0x53,0x54,0x4d,0x33,
0x32,0x31,0x30,0x43,0x2d,0x45,0x56,0x41,
0x4c,0x20,0x62,0x6f,0x61,0x72,0x64,0x2e,
0x0d,0x0a,0x54,0x68,0x69,0x73,0x20,0x73,
0x74,0x61,0x74,0x75,0x73,0x20,0x62,0x61,
0x72,0x20,0x69,0x73,0x20,0x75,0x70,0x64,
0x61,0x74,0x65,0x64,0x2c,0x20,0x61,0x75,
0x74,0x6f,0x6d,0x61,0x74,0x69,0x63,0x61,
0x6c,0x6c,0x79,0x2c,0x20,0x65,0x61,0x63,
0x68,0x20,0x31,0x73,0x20,0x77,0x69,0x74,
0x68,0x20,0x74,0x68,0x65,0x20,0x3c,0x62,
0x72,0x3e,0x6c,0x61,0x73,0x74,0x20,0x63,
0x6f,0x6e,0x76,0x65,0x72,0x74,0x65,0x64,
0x20,0x41,0x44,0x43,0x20,0x43,0x68,0x61,
0x6e,0x6e,0x65,0x6c,0x20,0x31,0x34,0x20,
0x76,0x61,0x6c,0x75,0x65,0x2e,0x20,0x59,
0x6f,0x75,0x20,0x63,0x6f,0x75,0x6c,0x64,
0x20,0x63,0x68,0x65,0x63,0x6b,0x20,0x74,
0x68,0x69,0x73,0x20,0x62,0x79,0x20,0x63,
0x68,0x61,0x6e,0x67,0x69,0x6e,0x67,0x20,
0x74,0x68,0x65,0x20,0x52,0x56,0x31,0x20,
0x70,0x6f,0x74,0x65,0x6e,0x74,0x69,0x6f,
0x6d,0x65,0x74,0x65,0x72,0x20,0x70,0x6f,
0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x61,
0x6e,0x64,0x20,0x63,0x68,0x65,0x63,0x6b,
0x20,0x74,0x68,0x61,0x74,0x20,0x74,0x68,
0x65,0x20,0x3c,0x62,0x72,0x3e,0x73,0x74,
0x61,0x74,0x75,0x73,0x20,0x62,0x61,0x72,
0x20,0x69,0x73,0x20,0x75,0x70,0x64,0x61,
0x74,0x65,0x64,0x2c,0x20,0x62,0x79,0x20,
0x61,0x6e,0x20,0x61,0x75,0x74,0x6f,0x6d,
0x61,0x74,0x69,0x63,0x20,0x72,0x65,0x66,
0x72,0x65,0x73,0x68,0x20,0x6f,0x66,0x20,
0x74,0x68,0x69,0x73,0x20,0x70,0x61,0x67,
0x65,0x2c,0x20,0x77,0x69,0x74,0x68,0x20,
0x74,0x68,0x65,0x20,0x6e,0x65,0x77,0x20,
0x63,0x6f,0x6e,0x76,0x65,0x72,0x74,0x65,
0x64,0x20,0x76,0x61,0x6c,0x75,0x65,0x2e,
0x20,0x3c,0x62,0x72,0x3e,0x3c,0x62,0x72,
0x3e,0x3c,0x74,0x61,0x62,0x6c,0x65,0x20,
0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,0x63,
0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x77,0x68,
0x69,0x74,0x65,0x3b,0x20,0x77,0x69,0x64,
0x74,0x68,0x3a,0x20,0x37,0x38,0x31,0x70,
0x78,0x3b,0x20,0x68,0x65,0x69,0x67,0x68,
0x74,0x3a,0x20,0x33,0x31,0x70,0x78,0x3b,
0x22,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,
0x3d,0x22,0x30,0x22,0x20,0x63,0x65,0x6c,
0x6c,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,
0x3d,0x22,0x33,0x22,0x20,0x63,0x65,0x6c,
0x6c,0x73,0x70,0x61,0x63,0x69,0x6e,0x67,
0x3d,0x22,0x30,0x22,0x3e,0x3c,0x74,0x62,
0x6f,0x64,0x79,0x3e,0x3c,0x74,0x72,0x3e,
0x3c,0x74,0x64,0x20,0x63,0x6c,0x61,0x73,
0x73,0x3d,0x22,0x74,0x61,0x62,0x74,0x69,
0x74,0x6c,0x65,0x22,0x20,0x73,0x74,0x79,
0x6c,0x65,0x3d,0x22,0x68,0x65,0x69,0x67,
0x68,0x74,0x3a,0x20,0x31,0x35,0x70,0x78,
0x3b,0x20,0x62,0x61,0x63,0x6b,0x67,0x72,
0x6f,0x75,0x6e,0x64,0x2d,0x63,0x6f,0x6c,
0x6f,0x72,0x3a,0x20,0x72,0x67,0x62,0x28,
0x35,0x31,0x2c,0x20,0x35,0x31,0x2c,0x20,
0x32,0x35,0x35,0x29,0x3b,0x22,0x3e,0x3c,
0x62,0x69,0x67,0x3e,0x3c,0x62,0x69,0x67,
0x3e,0x3c,0x66,0x6f,0x6e,0x74,0x20,0x73,
0x69,0x7a,0x65,0x3d,0x22,0x2d,0x31,0x22,
0x3e,0x3c,0x62,0x69,0x67,0x3e,0x3c,0x62,
0x69,0x67,0x3e,0x3c,0x73,0x74,0x72,0x6f,
0x6e,0x67,0x3e,0x53,0x54,0x4d,0x33,0x32,
0x20,0x57,0x65,0x62,0x73,0x65,0x72,0x76,
0x65,0x72,0x20,0x41,0x44,0x43,0x20,0x43,
0x6f,0x6e,0x76,0x65,0x72,0x73,0x69,0x6f,
0x6e,0x20,0x53,0x74,0x61,0x74,0x75,0x73,
0x20,0x42,0x61,0x72,0x3a,0x20,0x49,0x6e,
0x70,0x75,0x74,0x20,0x43,0x68,0x61,0x6e,
0x6e,0x65,0x6c,0x20,0x31,0x34,0x20,0x28,
0x50,0x6f,0x74,0x65,0x6e,0x74,0x69,0x6f,
0x6d,0x65,0x74,0x65,0x72,0x20,0x52,0x56,
0x31,0x29,0x20,0x3a,0x3c,0x2f,0x73,0x74,
0x72,0x6f,0x6e,0x67,0x3e,0x3c,0x2f,0x62,
0x69,0x67,0x3e,0x3c,0x2f,0x62,0x69,0x67,
0x3e,0x3c,0x2f,0x66,0x6f,0x6e,0x74,0x3e,
0x3c,0x2f,0x62,0x69,0x67,0x3e,0x3c,0x2f,
0x62,0x69,0x67,0x3e,0x3c,0x2f,0x74,0x64,
0x3e,0x3c,0x2f,0x74,0x72,0x3e,0x3c,0x2f,
0x74,0x62,0x6f,0x64,0x79,0x3e,0x3c,0x2f,
0x74,0x61,0x62,0x6c,0x65,0x3e,0x3c,0x62,
0x72,0x3e,0x3c,0x74,0x61,0x62,0x6c,0x65,
0x20,0x62,0x67,0x63,0x6f,0x6c,0x6f,0x72,
0x3d,0x22,0x23,0x63,0x63,0x63,0x63,0x63,
0x63,0x22,0x20,0x62,0x6f,0x72,0x64,0x65,
0x72,0x3d,0x22,0x33,0x22,0x20,0x63,0x65,
0x6c,0x6c,0x70,0x61,0x64,0x64,0x69,0x6e,
0x67,0x3d,0x22,0x30,0x22,0x20,0x63,0x65,
0x6c,0x6c,0x73,0x70,0x61,0x63,0x69,0x6e,
0x67,0x3d,0x22,0x30,0x22,0x20,0x77,0x69,
0x64,0x74,0x68,0x3d,0x22,0x35,0x32,0x30,
0x22,0x3e,0x0d,0x0a,0x3c,0x74,0x62,0x6f,
0x64,0x79,0x3e,0x3c,0x74,0x72,0x3e,0x0d,
0x0a,0x3c,0x74,0x64,0x3e,0x0d,0x0a,0x3c,
0x74,0x61,0x62,0x6c,0x65,0x20,0x62,0x6f,
0x72,0x64,0x65,0x72,0x3d,0x22,0x30,0x22,
0x20,0x63,0x65,0x6c,0x6c,0x70,0x61,0x64,
0x64,0x69,0x6e,0x67,0x3d,0x22,0x30,0x22,
0x20,0x63,0x65,0x6c,0x6c,0x73,0x70,0x61,
0x63,0x69,0x6e,0x67,0x3d,0x22,0x30,0x22,
0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,
0x56,0x41,0x4c,0x22,0x3e,0x0d,0x0a,0x3c,
0x74,0x62,0x6f,0x64,0x79,0x3e,0x3c,0x74,
0x72,0x3e,0x3c,0x74,0x64,0x20,0x62,0x67,
0x63,0x6f,0x6c,0x6f,0x72,0x3d,0x22,0x23,
0x33,0x33,0x66,0x66,0x30,0x30,0x22,0x3e,
0x26,0x6e,0x62,0x73,0x70,0x3b,0x3c,0x2f,
0x74,0x64,0x3e,0x3c,0x2f,0x74,0x72,0x3e,
0x0d,0x0a,0x3c,0x2f,0x74,0x62,0x6f,0x64,
0x79,0x3e,0x3c,0x2f,0x74,0x61,0x62,0x6c,
0x65,0x3e,0x0d,0x0a,0x3c,0x2f,0x74,0x64,
0x3e,0x0d,0x0a,0x3c,0x2f,0x74,0x72,0x3e,
0x0d,0x0a,0x3c,0x2f,0x74,0x62,0x6f,0x64,
0x79,0x3e,0x3c,0x2f,0x74,0x61,0x62,0x6c,
0x65,0x3e,0x0d,0x0a,0x0d,0x0a,0x3c,0x74,
0x61,0x62,0x6c,0x65,0x20,0x62,0x6f,0x72,
0x64,0x65,0x72,0x3d,0x22,0x30,0x22,0x20,
0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x35,
0x32,0x30,0x22,0x3e,0x0d,0x0a,0x3c,0x74,
0x62,0x6f,0x64,0x79,0x3e,0x3c,0x74,0x72,
0x3e,0x0d,0x0a,0x3c,0x74,0x64,0x20,0x73,
0x74,0x79,0x6c,0x65,0x3d,0x22,0x63,0x6f,
0x6c,0x6f,0x72,0x3a,0x20,0x72,0x67,0x62,
0x28,0x35,0x31,0x2c,0x20,0x35,0x31,0x2c,
0x20,0x31,0x35,0x33,0x29,0x3b,0x22,0x20,
0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x31,
0x34,0x25,0x22,0x3e,0x30,0x56,0x3c,0x2f,
0x74,0x64,0x3e,0x0d,0x0a,0x3c,0x74,0x64,
0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,
0x31,0x34,0x25,0x22,0x3e,0x30,0x2e,0x35,
0x56,0x3c,0x2f,0x74,0x64,0x3e,0x0d,0x0a,
0x3c,0x74,0x64,0x20,0x77,0x69,0x64,0x74,
0x68,0x3d,0x22,0x31,0x34,0x25,0x22,0x3e,
0x31,0x56,0x3c,0x2f,0x74,0x64,0x3e,0x0d,
0x0a,0x3c,0x74,0x64,0x20,0x77,0x69,0x64,
0x74,0x68,0x3d,0x22,0x31,0x34,0x25,0x22,
0x3e,0x31,0x2e,0x35,0x56,0x3c,0x2f,0x74,
0x64,0x3e,0x0d,0x0a,0x3c,0x74,0x64,0x20,
0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x31,
0x34,0x25,0x22,0x3e,0x32,0x56,0x3c,0x2f,
0x74,0x64,0x3e,0x0d,0x0a,0x3c,0x74,0x64,
0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,
0x31,0x34,0x25,0x22,0x3e,0x32,0x2e,0x35,
0x56,0x3c,0x2f,0x74,0x64,0x3e,0x0d,0x0a,
0x3c,0x74,0x64,0x20,0x77,0x69,0x64,0x74,
0x68,0x3d,0x22,0x31,0x34,0x25,0x22,0x3e,
0x33,0x56,0x3c,0x2f,0x74,0x64,0x3e,0x0d,
0x0a,0x3c,0x2f,0x74,0x72,0x3e,0x0d,0x0a,
0x3c,0x2f,0x74,0x62,0x6f,0x64,0x79,0x3e,
0x3c,0x2f,0x74,0x61,0x62,0x6c,0x65,0x3e,
0x0d,0x0a,0x20,0x20,0x3c,0x66,0x6f,0x6e,
0x74,0x20,0x73,0x69,0x7a,0x65,0x3d,0x22,
0x2d,0x31,0x22,0x3e,0x3c,0x73,0x70,0x61,
0x6e,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,
0x22,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,
0x62,0x6c,0x61,0x63,0x6b,0x3b,0x22,0x3e,
0x20,0x3c,0x68,0x33,0x20,0x73,0x74,0x79,
0x6c,0x65,0x3d,0x22,0x66,0x6f,0x6e,0x74,
0x2d,0x77,0x65,0x69,0x67,0x68,0x74,0x3a,
0x20,0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x3b,
0x22,0x3e,0x3c,0x62,0x72,0x3e,0x3c,0x2f,
0x68,0x33,0x3e,0x3c,0x2f,0x73,0x70,0x61,
0x6e,0x3e,0x3c,0x2f,0x66,0x6f,0x6e,0x74,
0x3e,0x3c,0x66,0x6f,0x6e,0x74,0x20,0x73,
0x69,0x7a,0x65,0x3d,0x22,0x2d,0x31,0x22,
0x3e,0x3c,0x73,0x70,0x61,0x6e,0x20,0x73,
0x74,0x79,0x6c,0x65,0x3d,0x22,0x63,0x6f,
0x6c,0x6f,0x72,0x3a,0x20,0x62,0x6c,0x61,
0x63,0x6b,0x3b,0x22,0x3e,0x3c,0x68,0x33,
0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,
0x66,0x6f,0x6e,0x74,0x2d,0x77,0x65,0x69,
0x67,0x68,0x74,0x3a,0x20,0x6e,0x6f,0x72,
0x6d,0x61,0x6c,0x3b,0x22,0x3e,0x54,0x6f,
0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,
0x74,0x6f,0x20,0x74,0x68,0x65,0x20,0x53,
0x54,0x4d,0x33,0x32,0x20,0x57,0x65,0x62,
0x73,0x65,0x72,0x76,0x65,0x72,0x20,0x44,
0x65,0x6d,0x6f,0x20,0x68,0x6f,0x6d,0x65,
0x20,0x70,0x61,0x67,0x65,0x20,0x70,0x6c,
0x65,0x61,0x73,0x65,0x20,0x63,0x6c,0x69,
0x63,0x6b,0x20,0x6f,0x6e,0x3a,0x26,0x6e,
0x62,0x73,0x70,0x3b,0x3c,0x73,0x70,0x61,
0x6e,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,
0x22,0x66,0x6f,0x6e,0x74,0x2d,0x77,0x65,
0x69,0x67,0x68,0x74,0x3a,0x20,0x62,0x6f,
0x6c,0x64,0x3b,0x22,0x3e,0x26,0x6e,0x62,
0x73,0x70,0x3b,0x3c,0x2f,0x73,0x70,0x61,
0x6e,0x3e,0x3c,0x62,0x69,0x67,0x3e,0x3c,
0x61,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,
0x22,0x66,0x6f,0x6e,0x74,0x2d,0x77,0x65,
0x69,0x67,0x68,0x74,0x3a,0x20,0x62,0x6f,
0x6c,0x64,0x3b,0x22,0x20,0x68,0x72,0x65,
0x66,0x3d,0x22,0x53,0x54,0x4d,0x33,0x32,
0x5f,0x48,0x6f,0x6d,0x65,0x5f,0x57,0x65,
0x62,0x73,0x65,0x72,0x76,0x65,0x72,0x5f,
0x44,0x65,0x6d,0x6f,0x2e,0x68,0x74,0x6d,
0x6c,0x22,0x3e,0x48,0x6f,0x6d,0x65,0x3c,
0x2f,0x61,0x3e,0x3c,0x2f,0x62,0x69,0x67,
0x3e,0x3c,0x2f,0x68,0x33,0x3e,0x26,0x6e,
0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,
0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,
0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,
0x3b,0x20,0x3c,0x62,0x72,0x3e,0x3c,0x62,
0x72,0x3e,0x3c,0x62,0x72,0x3e,0x3c,0x62,
0x72,0x3e,0x3c,0x62,0x72,0x3e,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
0x5f,0x5f,0x5f,0x5f,0x5f,0x3c,0x62,0x72,
0x3e,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,
0x3c,0x2f,0x66,0x6f,0x6e,0x74,0x3e,0x3c,
0x66,0x6f,0x6e,0x74,0x20,0x63,0x6c,0x61,
0x73,0x73,0x3d,0x22,0x66,0x6f,0x6f,0x74,
0x6d,0x73,0x67,0x22,0x3e,0x0d,0x0a,0x26,
0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,
0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,
0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,
0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,
0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,0x3b,
0x20,0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,
0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,
0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,
0x62,0x73,0x70,0x3b,0x0d,0x0a,0x26,0x6e,
0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,
0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,
0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,
0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,0x3b,
0x20,0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,
0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,
0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,
0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,
0x73,0x70,0x3b,0x0d,0x0a,0x26,0x6e,0x62,
0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,
0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,0x70,
0x3b,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,
0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,0x63,
0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x73,0x69,
0x6c,0x76,0x65,0x72,0x3b,0x22,0x3e,0x20,
0x26,0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,
0x6e,0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,
0x62,0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,
0x73,0x70,0x3b,0x20,0x26,0x6e,0x62,0x73,
0x70,0x3b,0x26,0x6e,0x62,0x73,0x70,0x3b,
0x20,0x26,0x6e,0x62,0x73,0x70,0x3b,0x41,
0x6c,0x6c,0x20,0x72,0x69,0x67,0x68,0x74,
0x73,0x20,0x72,0x65,0x73,0x65,0x72,0x76,
0x65,0x64,0x20,0xa9,0x20,0x20,0x32,0x30,
0x30,0x39,0x20,0x53,0x54,0x4d,0x69,0x63,
0x72,0x6f,0x65,0x6c,0x65,0x63,0x74,0x72,
0x6f,0x6e,0x69,0x63,0x73,0x3c,0x2f,0x73,
0x70,0x61,0x6e,0x3e,0x26,0x6e,0x62,0x73,
0x70,0x3b,0x3c,0x2f,0x66,0x6f,0x6e,0x74,
0x3e,0x0d,0x0a,0x3c,0x66,0x6f,0x6e,0x74,
0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,
0x66,0x6f,0x6f,0x74,0x6d,0x73,0x67,0x22,
0x3e,0x3c,0x62,0x72,0x3e,0x3c,0x2f,0x66,
0x6f,0x6e,0x74,0x3e,0x3c,0x62,0x72,0x3e,
0x3c,0x66,0x6f,0x6e,0x74,0x20,0x73,0x69,
0x7a,0x65,0x3d,0x22,0x2d,0x31,0x22,0x3e,
0x3c,0x73,0x70,0x61,0x6e,0x20,0x73,0x74,
0x79,0x6c,0x65,0x3d,0x22,0x63,0x6f,0x6c,
0x6f,0x72,0x3a,0x20,0x62,0x6c,0x61,0x63,
0x6b,0x3b,0x22,0x3e,0x3c,0x2f,0x73,0x70,
0x61,0x6e,0x3e,0x3c,0x2f,0x66,0x6f,0x6e,
0x74,0x3e,0x0d,0x0a,0x0d,0x0a,0x3c,0x2f,
0x62,0x6f,0x64,0x79,0x3e,0x3c,0x2f,0x68,
0x74,0x6d,0x6c,0x3e,};
 
 
const struct fsdata_file file_404_html[] = {{NULL, data_404_html, data_404_html + 10, sizeof(data_404_html) - 10}};
const struct fsdata_file file_index_html[] = {{file_404_html, data_index_html, data_index_html + 32, sizeof(data_index_html) - 32}};
const struct fsdata_file file_STM32_Home_Webserver_Demo_files_st766_gif[] = {{file_index_html, data_STM32_Home_Webserver_Demo_files_st766_gif, data_STM32_Home_Webserver_Demo_files_st766_gif + 43, sizeof(data_STM32_Home_Webserver_Demo_files_st766_gif) - 43}};
const struct fsdata_file file_STM32_Home_Webserver_Demo_files_stm32_extends_gif[] = {{file_STM32_Home_Webserver_Demo_files_st766_gif, data_STM32_Home_Webserver_Demo_files_stm32_extends_gif, data_STM32_Home_Webserver_Demo_files_stm32_extends_gif + 51, sizeof(data_STM32_Home_Webserver_Demo_files_stm32_extends_gif) - 51}};
const struct fsdata_file file_STM32_LED_html[] = {{file_STM32_Home_Webserver_Demo_files_stm32_extends_gif, data_STM32_LED_html, data_STM32_LED_html + 16, sizeof(data_STM32_LED_html) - 16}};
const struct fsdata_file file_STM32_StatusBar_html[] = {{file_STM32_LED_html, data_STM32_StatusBar_html, data_STM32_StatusBar_html + 22, sizeof(data_STM32_StatusBar_html) - 22}};
#define FS_ROOT file_STM32_StatusBar_html
#define FS_NUMFILES 8
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/fsdata.d
0,0 → 1,2
Utilities/uip/fsdata.o: Utilities/uip/fsdata.c Utilities/uip/fsdata.h \
Utilities/uip/uipopt.h Utilities/uip/httpd.h
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/fsdata.h
0,0 → 1,64
/*
* Copyright (c) 2001, Swedish Institute of Computer Science.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the Institute nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* This file is part of the lwIP TCP/IP stack.
*
* Author: Adam Dunkels <adam@sics.se>
*
* $Id: fsdata.h,v 1.4.2.1 2003/10/04 22:54:06 adam Exp $
*/
#ifndef __FSDATA_H__
#define __FSDATA_H__
 
#include "uipopt.h"
 
struct fsdata_file {
const struct fsdata_file *next;
const char *name;
const char *data;
const int len;
#ifdef FS_STATISTICS
#if FS_STATISTICS == 1
u16_t count;
#endif /* FS_STATISTICS */
#endif /* FS_STATISTICS */
};
 
struct fsdata_file_noconst {
struct fsdata_file *next;
char *name;
char *data;
int len;
#ifdef FS_STATISTICS
#if FS_STATISTICS == 1
u16_t count;
#endif /* FS_STATISTICS */
#endif /* FS_STATISTICS */
};
 
#endif /* __FSDATA_H__ */
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/httpd.c
0,0 → 1,455
/**
* \addtogroup exampleapps
* @{
*/
 
/**
* \defgroup httpd Web server
* @{
*
* The uIP web server is a very simplistic implementation of an HTTP
* server. It can serve web pages and files from a read-only ROM
* filesystem, and provides a very small scripting language.
*
* The script language is very simple and works as follows. Each
* script line starts with a command character, either "i", "t", "c",
* "#" or ".". The "i" command tells the script interpreter to
* "include" a file from the virtual file system and output it to the
* web browser. The "t" command should be followed by a line of text
* that is to be output to the browser. The "c" command is used to
* call one of the C functions from the httpd-cgi.c file. A line that
* starts with a "#" is ignored (i.e., the "#" denotes a comment), and
* the "." denotes the last script line.
*
* The script that produces the file statistics page looks somewhat
* like this:
*
\code
i /header.html
t <h1>File statistics</h1><br><table width="100%">
t <tr><td><a href="/index.html">/index.html</a></td><td>
c a /index.html
t </td></tr> <tr><td><a href="/cgi/files">/cgi/files</a></td><td>
c a /cgi/files
t </td></tr> <tr><td><a href="/cgi/tcp">/cgi/tcp</a></td><td>
c a /cgi/tcp
t </td></tr> <tr><td><a href="/404.html">/404.html</a></td><td>
c a /404.html
t </td></tr></table>
i /footer.plain
.
\endcode
*
*/
 
 
/**
* \file
* HTTP server.
* \author Adam Dunkels <adam@dunkels.com>
*/
 
/*
* Copyright (c) 2001, Adam Dunkels.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote
* products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This file is part of the uIP TCP/IP stack.
*
* $Id: httpd.c,v 1.28.2.6 2003/10/07 13:22:27 adam Exp $
*
*/
 
#include "stm32f10x.h"
#include "stm32_eval.h"
#include "uip.h"
#include "httpd.h"
#include "fs.h"
#include "fsdata.h"
#include "cgi.h"
 
#define NULL (void *)0
 
/* The HTTP server states: */
#define HTTP_NOGET 0
#define HTTP_FILE 1
#define HTTP_TEXT 2
#define HTTP_FUNC 3
#define HTTP_END 4
 
#ifdef UIP_DEBUG
#include <stdio.h>
#define PRINT(x) printf("%s", x)
#define PRINTLN(x) printf("%s\n", x)
#else /* UIP_DEBUG */
#define PRINT(x)
#define PRINTLN(x)
#endif /* DEBUG */
 
struct httpd_state *hs;
 
extern const struct fsdata_file file_index_html;
extern const struct fsdata_file file_404_html;
extern const struct fsdata_file_noconst file_STM32_LED_html;
extern const struct fsdata_file_noconst file_STM32_StatusBar_html;
 
 
static void next_scriptline(void);
static void next_scriptstate(void);
 
#define ISO_G 0x47
#define ISO_E 0x45
#define ISO_T 0x54
#define ISO_slash 0x2f
#define ISO_c 0x63
#define ISO_g 0x67
#define ISO_i 0x69
#define ISO_space 0x20
#define ISO_nl 0x0a
#define ISO_cr 0x0d
#define ISO_a 0x61
#define ISO_t 0x74
#define ISO_hash 0x23
#define ISO_period 0x2e
 
char dataPresent;
char Digit1=0, Digit2=0, Digit3=0;
int ADCVal = 0;
 
/*-----------------------------------------------------------------------------------*/
/**
* Initialize the web server.
*
* Starts to listen for incoming connection requests on TCP port 80.
*/
/*-----------------------------------------------------------------------------------*/
void
httpd_init(void)
{
fs_init();
 
/* Listen to port 80. */
uip_listen(HTONS(80));
 
dataPresent = 0;
}
/*-----------------------------------------------------------------------------------*/
void
httpd_appcall(void)
{
struct fs_file fsfile;
 
u8_t i;
 
switch(uip_conn->lport) {
/* This is the web server: */
case HTONS(80):
/* Pick out the application state from the uip_conn structure. */
hs = (struct httpd_state *)(uip_conn->appstate);
 
/* We use the uip_ test functions to deduce why we were
called. If uip_connected() is non-zero, we were called
because a remote host has connected to us. If
uip_newdata() is non-zero, we were called because the
remote host has sent us new data, and if uip_acked() is
non-zero, the remote host has acknowledged the data we
previously sent to it. */
if(uip_connected()) {
/* Since we have just been connected with the remote host, we
reset the state for this connection. The ->count variable
contains the amount of data that is yet to be sent to the
remote host, and the ->state is set to HTTP_NOGET to signal
that we haven't received any HTTP GET request for this
connection yet. */
hs->state = HTTP_NOGET;
hs->count = 0;
return;
 
} else if(uip_poll()) {
/* If we are polled 200 times, we abort the connection. This is
because we don't want connections lingering indefinately in
the system. */
if(hs->count++ >= 200) {
// uip_abort();
}
return;
}
else
if(uip_newdata() && hs->state == HTTP_NOGET)
{
/* This is the first data we receive, and it should contain a
GET. */
 
/* Check for GET. */
if(uip_appdata[0] != ISO_G ||
uip_appdata[1] != ISO_E ||
uip_appdata[2] != ISO_T ||
uip_appdata[3] != ISO_space) {
/* If it isn't a GET, we abort the connection. */
uip_abort();
return;
}
/* Find the file we are looking for. */
for(i = 4; i < 40; ++i) {
if(uip_appdata[i] == ISO_space ||
uip_appdata[i] == ISO_cr ||
uip_appdata[i] == ISO_nl) {
uip_appdata[i] = 0;
break;
}
}
 
PRINT("request for file ");
PRINTLN(&uip_appdata[4]);
 
/* Check for a request for "/". */
if(uip_appdata[4] == ISO_slash &&
uip_appdata[5] == 0) {
fs_open(file_index_html.name, &fsfile);
}
else
{
if(!fs_open((const char *)&uip_appdata[4], &fsfile)) {
PRINTLN("couldn't open file");
fs_open(file_404_html.name, &fsfile);
}
}
 
/* LED command -------------------------------------------*/
if(uip_appdata[4] == ISO_slash &&
uip_appdata[5] == 0x6D /*m*/ &&
uip_appdata[12] == 0x67 /*g*/)
{
i = 16;
STM_EVAL_LEDOff(LED1);
STM_EVAL_LEDOff(LED2);
STM_EVAL_LEDOff(LED3);
STM_EVAL_LEDOff(LED4);
while(uip_appdata[i]!=0x48/*H*/)
{
if(uip_appdata[i]==0x31 /*LED1*/)
{
STM_EVAL_LEDOn(LED1);
}
if(uip_appdata[i]==0x32 /*LED2*/)
{
STM_EVAL_LEDOn(LED2);
}
 
if(uip_appdata[i]==0x33 /*LED3*/)
{
STM_EVAL_LEDOn(LED3);
}
if(uip_appdata[i]==0x34 /*LED4*/)
{
STM_EVAL_LEDOn(LED4);
}
i++;
}
fs_open(file_STM32_LED_html.name, &fsfile);
}
/* ADC Status Bar -------------------------------------------*/
if(uip_appdata[4] == ISO_slash &&
uip_appdata[5] == 0x53 /*S*/ &&
uip_appdata[11] == 0x53 /*S*/ &&
uip_appdata[12] == 0x74 /*t*/)
{
ADCVal = ADC_GetConversionValue(ADC1);
ADCVal = ADCVal/8;
Digit1= ADCVal/100;
Digit2= (ADCVal-(Digit1*100))/10;
Digit3= ADCVal-(Digit1*100)-(Digit2*10);
/* These are the "VAL" characters positions in the STM32_StatusBar.html
starting from file_STM32_StatusBar_html.name position */
*((file_STM32_StatusBar_html.name)+1768) = 0x30 + Digit1; /* ADC value */
*((file_STM32_StatusBar_html.name)+1769) = 0x30 + Digit2; /* ADC value */
*((file_STM32_StatusBar_html.name)+1770) = 0x30 + Digit3; /* ADC value */
fs_open(file_STM32_StatusBar_html.name, &fsfile);
}
if(uip_appdata[4] == ISO_slash &&
uip_appdata[5] == ISO_c &&
uip_appdata[6] == ISO_g &&
uip_appdata[7] == ISO_i &&
uip_appdata[8] == ISO_slash)
{
/* If the request is for a file that starts with "/cgi/", we
prepare for invoking a script. */
hs->script = fsfile.data;
next_scriptstate();
}
else
{
hs->script = NULL;
/* The web server is now no longer in the HTTP_NOGET state, but
in the HTTP_FILE state since is has now got the GET from
the client and will start transmitting the file. */
hs->state = HTTP_FILE;
 
/* Point the file pointers in the connection state to point to
the first byte of the file. */
hs->dataptr = fsfile.data;
hs->count = fsfile.len;
}
}
 
if(hs->state != HTTP_FUNC) {
/* Check if the client (remote end) has acknowledged any data that
we've previously sent. If so, we move the file pointer further
into the file and send back more data. If we are out of data to
send, we close the connection. */
if(uip_acked()) {
if(hs->count >= uip_conn->len) {
hs->count -= uip_conn->len;
hs->dataptr += uip_conn->len;
} else {
hs->count = 0;
}
if(hs->count == 0) {
if(hs->script != NULL) {
next_scriptline();
next_scriptstate();
} else {
uip_close();
}
}
}
} else
{
/* Call the CGI function. */
if(cgitab[hs->script[2] - ISO_a](uip_acked())) {
/* If the function returns non-zero, we jump to the next line
in the script. */
next_scriptline();
next_scriptstate();
}
}
 
if(hs->state != HTTP_FUNC && !uip_poll()) {
/* Send a piece of data, but not more than the MSS of the
connection. */
uip_send((u8_t*)hs->dataptr, hs->count);
 
dataPresent = 1;
}
 
/* Finally, return to uIP. Our outgoing packet will soon be on its
way... */
return;
 
default:
/* Should never happen. */
uip_abort();
break;
}
}
/*-----------------------------------------------------------------------------------*/
/* next_scriptline():
*
* Reads the script until it finds a newline. */
static void
next_scriptline(void)
{
/* Loop until we find a newline character. */
do {
++(hs->script);
} while(hs->script[0] != ISO_nl);
 
/* Eat up the newline as well. */
++(hs->script);
}
/*-----------------------------------------------------------------------------------*/
/* next_sciptstate:
*
* Reads one line of script and decides what to do next.
*/
static void
next_scriptstate(void)
{
struct fs_file fsfile;
u8_t i;
 
again:
switch(hs->script[0]) {
case ISO_t:
/* Send a text string. */
hs->state = HTTP_TEXT;
hs->dataptr = &hs->script[2];
 
/* Calculate length of string. */
for(i = 0; hs->dataptr[i] != ISO_nl; ++i);
hs->count = i;
break;
case ISO_c:
/* Call a function. */
hs->state = HTTP_FUNC;
hs->dataptr = NULL;
hs->count = 0;
cgitab[hs->script[2] - ISO_a](0);
break;
case ISO_i:
/* Include a file. */
hs->state = HTTP_FILE;
if(!fs_open(&hs->script[2], &fsfile)) {
uip_abort();
}
hs->dataptr = fsfile.data;
hs->count = fsfile.len;
break;
case ISO_hash:
/* Comment line. */
next_scriptline();
goto again;
//break;
case ISO_period:
/* End of script. */
hs->state = HTTP_END;
uip_close();
break;
default:
uip_abort();
break;
}
}
/*-----------------------------------------------------------------------------------*/
/** @} */
/** @} */
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/httpd.d
0,0 → 1,22
Utilities/uip/httpd.o: Utilities/uip/httpd.c \
Libraries/CMSIS/Core/CM3/stm32f10x.h Libraries/CMSIS/Core/CM3/core_cm3.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/include/stdint.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/stdint.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/_ansi.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/newlib.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/config.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/machine/ieeefp.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/features.h \
Libraries/CMSIS/Core/CM3/system_stm32f10x.h \
Project/Webserver_Demo_uIP/stm32f10x_conf.h \
Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_adc.h \
Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_exti.h \
Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_flash.h \
Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_gpio.h \
Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_rcc.h \
Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_spi.h \
Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_usart.h \
Libraries/STM32F10x_StdPeriph_Driver/inc/misc.h \
Utilities/STM32_EVAL/stm32_eval.h Utilities/uip/uip.h \
Utilities/uip/uipopt.h Utilities/uip/httpd.h Utilities/uip/fs.h \
Utilities/uip/fsdata.h Utilities/uip/cgi.h
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/httpd.h
0,0 → 1,77
/**
* \addtogroup httpd
* @{
*/
 
/**
* \file
* HTTP server header file.
* \author Adam Dunkels <adam@dunkels.com>
*/
 
/*
* Copyright (c) 2001, Adam Dunkels.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote
* products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This file is part of the uIP TCP/IP stack.
*
* $Id: httpd.h,v 1.4.2.3 2003/10/06 22:56:44 adam Exp $
*
*/
 
#ifndef __HTTPD_H__
#define __HTTPD_H__
 
void httpd_init(void);
void httpd_appcall(void);
 
/* UIP_APPCALL: the name of the application function. This function
must return void and take no arguments (i.e., C type "void
appfunc(void)"). */
#ifndef UIP_APPCALL
#define UIP_APPCALL httpd_appcall
#endif
 
struct httpd_state {
u8_t state;
u16_t count;
char *dataptr;
char *script;
};
 
 
/* UIP_APPSTATE_SIZE: The size of the application-specific state
stored in the uip_conn structure. */
#ifndef UIP_APPSTATE_SIZE
#define UIP_APPSTATE_SIZE (sizeof(struct httpd_state))
#endif
 
#define FS_STATISTICS 1
 
extern struct httpd_state *hs;
 
#endif /* __HTTPD_H__ */
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/memb.c
0,0 → 1,152
/**
* \addtogroup exampleapps
* @{
*/
 
/**
* \file
* Memory block allocation routines.
* \author Adam Dunkels <adam@sics.se>
*
* The memory block allocation routines provide a simple yet powerful
* set of functions for managing a set of memory blocks of fixed
* size. A set of memory blocks is statically declared with the
* MEMB() macro. Memory blocks are allocated from the declared
* memory by the memb_alloc() function, and are deallocated with the
* memb_free() function.
*
* \note Because of namespace clashes only one MEMB() can be
* declared per C module, and the name scope of a MEMB() memory
* block is local to each C module.
*
* The following example shows how to declare and use a memory block
* called "cmem" which has 8 chunks of memory with each memory chunk
* being 20 bytes large.
*
\code
MEMB(cmem, 20, 8);
 
int main(int argc, char *argv[]) {
char *ptr;
memb_init(&cmem);
 
ptr = memb_alloc(&cmem);
 
if(ptr != NULL) {
do_something(ptr);
} else {
printf("Could not allocate memory.\n");
}
 
if(memb_free(ptr) == 0) {
printf("Deallocation succeeded.\n");
}
}
\endcode
*
*/
 
#include <string.h>
 
#include "memb.h"
 
/*------------------------------------------------------------------------------*/
/**
* Initialize a memory block that was declared with MEMB().
*
* \param m A memory block previosly declared with MEMB().
*/
/*------------------------------------------------------------------------------*/
void
memb_init(struct memb_blocks *m)
{
memset(m->mem, (m->size + 1) * m->num, 0);
}
/*------------------------------------------------------------------------------*/
/**
* Allocate a memory block from a block of memory declared with MEMB().
*
* \param m A memory block previosly declared with MEMB().
*/
/*------------------------------------------------------------------------------*/
char *
memb_alloc(struct memb_blocks *m)
{
int i;
char *ptr;
 
ptr = m->mem;
for(i = 0; i < m->num; ++i) {
if(*ptr == 0) {
/* If this block was unused, we increase the reference count to
indicate that it now is used and return a pointer to the
first byte following the reference counter. */
++*ptr;
return ptr + 1;
}
ptr += m->size + 1;
}
 
/* No free block was found, so we return NULL to indicate failure to
allocate block. */
return NULL;
}
/*------------------------------------------------------------------------------*/
/**
* Deallocate a memory block from a memory block previously declared
* with MEMB().
*
* \param m m A memory block previosly declared with MEMB().
*
* \param ptr A pointer to the memory block that is to be deallocated.
*
* \return The new reference count for the memory block (should be 0
* if successfully deallocated) or -1 if the pointer "ptr" did not
* point to a legal memory block.
*/
/*------------------------------------------------------------------------------*/
char
memb_free(struct memb_blocks *m, char *ptr)
{
int i;
char *ptr2;
 
/* Walk through the list of blocks and try to find the block to
which the pointer "ptr" points to. */
ptr2 = m->mem;
for(i = 0; i < m->num; ++i) {
if(ptr2 == ptr - 1) {
/* We've found to block to which "ptr" points so we decrease the
reference count and return the new value of it. */
return --*ptr2;
}
ptr2 += m->size + 1;
}
return -1;
}
/*------------------------------------------------------------------------------*/
/**
* Increase the reference count for a memory chunk.
*
* \note No sanity checks are currently made.
*
* \param m m A memory block previosly declared with MEMB().
*
* \param ptr A pointer to the memory chunk for which the reference
* count should be increased.
*
* \return The new reference count.
*/
/*------------------------------------------------------------------------------*/
char
memb_ref(struct memb_blocks *m, char *ptr)
{
return ++*(ptr - 1);
}
/*------------------------------------------------------------------------------*/
 
 
 
 
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/memb.d
0,0 → 1,16
Utilities/uip/memb.o: Utilities/uip/memb.c \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/string.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/_ansi.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/newlib.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/config.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/machine/ieeefp.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/features.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/reent.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/_ansi.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/_types.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/machine/_types.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/machine/_default_types.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/lock.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/include/stddef.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/string.h \
Utilities/uip/memb.h
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/memb.h
0,0 → 1,43
/**
* \addtogroup exampleapps
* @{
*/
 
/**
* \file
* Memory block allocation routines.
* \author Adam Dunkels <adam@sics.se>
*
*/
 
#ifndef __MEMB_H__
#define __MEMB_H__
 
/**
* Declare a memory block.
*
* \param name The name of the memory block (later used with
* memb_init(), memb_alloc() and memb_free()).
*
* \param size The size of each memory chunk, in bytes.
*
* \param num The total number of memory chunks in the block.
*
*/
#define MEMB(name, size, num) \
static char memb_mem[(size + 1) * num]; \
static struct memb_blocks name = {size, num, memb_mem}
 
struct memb_blocks {
unsigned short size;
unsigned short num;
char *mem;
};
 
void memb_init(struct memb_blocks *m);
char *memb_alloc(struct memb_blocks *m);
char memb_ref(struct memb_blocks *m, char *ptr);
char memb_free(struct memb_blocks *m, char *ptr);
 
 
#endif /* __MEMB_H__ */
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/slipdev.c
0,0 → 1,202
/**
* \addtogroup uip
* @{
*/
 
/**
* \defgroup slip Serial Line IP (SLIP) protocol
* @{
*
* The SLIP protocol is a very simple way to transmit IP packets over
* a serial line. It does not provide any framing or error control,
* and is therefore not very widely used today.
*
* This SLIP implementation requires two functions for accessing the
* serial device: slipdev_char_poll() and slipdev_char_put(). These
* must be implemented specifically for the system on which the SLIP
* protocol is to be run.
*/
 
/**
* \file
* SLIP protocol implementation
* \author Adam Dunkels <adam@dunkels.com>
*/
 
/*
* Copyright (c) 2001, Adam Dunkels.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote
* products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This file is part of the uIP TCP/IP stack.
*
* $Id: slipdev.c,v 1.1.2.3 2003/10/07 13:23:01 adam Exp $
*
*/
 
/*
* This is a generic implementation of the SLIP protocol over an RS232
* (serial) device.
*
* Huge thanks to Ullrich von Bassewitz <uz@cc65.org> of cc65 fame for
* and endless supply of bugfixes, insightsful comments and
* suggestions, and improvements to this code!
*/
 
#include "uip.h"
 
#define SLIP_END 0300
#define SLIP_ESC 0333
#define SLIP_ESC_END 0334
#define SLIP_ESC_ESC 0335
 
static u8_t slip_buf[UIP_BUFSIZE];
 
static u16_t len, tmplen;
static u8_t lastc;
 
/*-----------------------------------------------------------------------------------*/
/**
* Send the packet in the uip_buf and uip_appdata buffers using the
* SLIP protocol.
*
* The first 40 bytes of the packet (the IP and TCP headers) are read
* from the uip_buf buffer, and the following bytes (the application
* data) are read from the uip_appdata buffer.
*
*/
/*-----------------------------------------------------------------------------------*/
void
slipdev_send(void)
{
u16_t i;
u8_t *ptr;
u8_t c;
 
slipdev_char_put(SLIP_END);
 
ptr = uip_buf;
for(i = 0; i < uip_len; ++i) {
if(i == 40) {
ptr = (u8_t *)uip_appdata;
}
c = *ptr++;
switch(c) {
case SLIP_END:
slipdev_char_put(SLIP_ESC);
slipdev_char_put(SLIP_ESC_END);
break;
case SLIP_ESC:
slipdev_char_put(SLIP_ESC);
slipdev_char_put(SLIP_ESC_ESC);
break;
default:
slipdev_char_put(c);
break;
}
}
slipdev_char_put(SLIP_END);
}
/*-----------------------------------------------------------------------------------*/
/**
* Poll the SLIP device for an available packet.
*
* This function will poll the SLIP device to see if a packet is
* available. It uses a buffer in which all avaliable bytes from the
* RS232 interface are read into. When a full packet has been read
* into the buffer, the packet is copied into the uip_buf buffer and
* the length of the packet is returned.
*
* \return The length of the packet placed in the uip_buf buffer, or
* zero if no packet is available.
*/
/*-----------------------------------------------------------------------------------*/
u16_t
slipdev_poll(void)
{
u8_t c;
while(slipdev_char_poll(c)) {
switch(c) {
case SLIP_ESC:
lastc = c;
break;
case SLIP_END:
lastc = c;
/* End marker found, we copy our input buffer to the uip_buf
buffer and return the size of the packet we copied. */
memcpy(uip_buf, slip_buf, len);
tmplen = len;
len = 0;
return tmplen;
default:
if(lastc == SLIP_ESC) {
lastc = c;
/* Previous read byte was an escape byte, so this byte will be
interpreted differently from others. */
switch(c) {
case SLIP_ESC_END:
c = SLIP_END;
break;
case SLIP_ESC_ESC:
c = SLIP_ESC;
break;
}
} else {
lastc = c;
}
slip_buf[len] = c;
++len;
if(len > UIP_BUFSIZE) {
len = 0;
}
break;
}
}
return 0;
}
/*-----------------------------------------------------------------------------------*/
/**
* Initialize the SLIP module.
*
* This function does not initialize the underlying RS232 device, but
* only the SLIP part.
*/
/*-----------------------------------------------------------------------------------*/
void
slipdev_init(void)
{
lastc = len = 0;
}
/*-----------------------------------------------------------------------------------*/
 
/** @} */
/** @} */
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/slipdev.d
0,0 → 1,2
Utilities/uip/slipdev.o: Utilities/uip/slipdev.c Utilities/uip/uip.h \
Utilities/uip/uipopt.h Utilities/uip/httpd.h
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/slipdev.h
0,0 → 1,88
/**
* \addtogroup slip
* @{
*/
 
/**
* \file
* SLIP header file.
* \author Adam Dunkels <adam@dunkels.com>
*/
 
/*
* Copyright (c) 2001, Adam Dunkels.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote
* products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This file is part of the uIP TCP/IP stack.
*
* $Id: slipdev.h,v 1.1.2.3 2003/10/06 22:42:51 adam Exp $
*
*/
 
#ifndef __SLIPDEV_H__
#define __SLIPDEV_H__
 
#include "uip.h"
 
/**
* Put a character on the serial device.
*
* This function is used by the SLIP implementation to put a character
* on the serial device. It must be implemented specifically for the
* system on which the SLIP implementation is to be run.
*
* \param c The character to be put on the serial device.
*/
void slipdev_char_put(u8_t c);
 
/**
* Poll the serial device for a character.
*
* This function is used by the SLIP implementation to poll the serial
* device for a character. It must be implemented specifically for the
* system on which the SLIP implementation is to be run.
*
* The function should return immediately regardless if a character is
* available or not. If a character is available it should be placed
* at the memory location pointed to by the pointer supplied by the
* arguement c.
*
* \param c A pointer to a byte that is filled in by the function with
* the received character, if available.
*
* \retval 0 If no character is available.
* \retval Non-zero If a character is available.
*/
u8_t slipdev_char_poll(u8_t *c);
 
void slipdev_init(void);
void slipdev_send(void);
u16_t slipdev_poll(void);
 
#endif /* __SLIPDEV_H__ */
 
/** @} */
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/tapdev.c
0,0 → 1,171
/*
* Copyright (c) 2001, Swedish Institute of Computer Science.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* 3. Neither the name of the Institute nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* Author: Adam Dunkels <adam@sics.se>
*
* $Id: tapdev.c,v 1.7.2.1 2003/10/07 13:23:19 adam Exp $
*/
 
 
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/uio.h>
#include <sys/socket.h>
 
#ifdef linux
#include <sys/ioctl.h>
#include <linux/if.h>
#include <linux/if_tun.h>
#define DEVTAP "/dev/net/tun"
#else /* linux */
#define DEVTAP "/dev/tap0"
#endif /* linux */
 
#include "uip.h"
 
static int fd;
 
static unsigned long lasttime;
static struct timezone tz;
 
/*-----------------------------------------------------------------------------------*/
void
tapdev_init(void)
{
char buf[1024];
fd = open(DEVTAP, O_RDWR);
if(fd == -1) {
perror("tapdev: tapdev_init: open");
exit(1);
}
 
#ifdef linux
{
struct ifreq ifr;
memset(&ifr, 0, sizeof(ifr));
ifr.ifr_flags = IFF_TAP|IFF_NO_PI;
if (ioctl(fd, TUNSETIFF, (void *) &ifr) < 0) {
perror(buf);
exit(1);
}
}
#endif /* Linux */
 
snprintf(buf, sizeof(buf), "ifconfig tap0 inet %d.%d.%d.%d",
UIP_DRIPADDR0, UIP_DRIPADDR1, UIP_DRIPADDR2, UIP_DRIPADDR3);
system(buf);
 
lasttime = 0;
}
/*-----------------------------------------------------------------------------------*/
unsigned int
tapdev_read(void)
{
fd_set fdset;
struct timeval tv, now;
int ret;
if(lasttime >= 500000) {
lasttime = 0;
return 0;
}
tv.tv_sec = 0;
tv.tv_usec = 500000 - lasttime;
 
 
FD_ZERO(&fdset);
FD_SET(fd, &fdset);
 
gettimeofday(&now, &tz);
ret = select(fd + 1, &fdset, NULL, NULL, &tv);
if(ret == 0) {
lasttime = 0;
return 0;
}
ret = read(fd, uip_buf, UIP_BUFSIZE);
if(ret == -1) {
perror("tap_dev: tapdev_read: read");
}
gettimeofday(&tv, &tz);
lasttime += (tv.tv_sec - now.tv_sec) * 1000000 + (tv.tv_usec - now.tv_usec);
 
return ret;
}
/*-----------------------------------------------------------------------------------*/
void
tapdev_send(void)
{
int ret;
struct iovec iov[2];
#ifdef linux
{
char tmpbuf[UIP_BUFSIZE];
int i;
 
for(i = 0; i < 40 + UIP_LLH_LEN; i++) {
tmpbuf[i] = uip_buf[i];
}
for(; i < uip_len; i++) {
tmpbuf[i] = uip_appdata[i - 40 - UIP_LLH_LEN];
}
ret = write(fd, tmpbuf, uip_len);
}
#else
 
if(uip_len < 40 + UIP_LLH_LEN) {
ret = write(fd, uip_buf, uip_len + UIP_LLH_LEN);
} else {
iov[0].iov_base = uip_buf;
iov[0].iov_len = 40 + UIP_LLH_LEN;
iov[1].iov_base = (char *)uip_appdata;
iov[1].iov_len = uip_len - (40 + UIP_LLH_LEN);
ret = writev(fd, iov, 2);
}
#endif
if(ret == -1) {
perror("tap_dev: tapdev_send: writev");
exit(1);
}
}
/*-----------------------------------------------------------------------------------*/
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/tapdev.h
0,0 → 1,42
/*
* Copyright (c) 2001, Adam Dunkels.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote
* products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This file is part of the uIP TCP/IP stack.
*
* $Id: tapdev.h,v 1.1.2.1 2003/10/04 22:54:17 adam Exp $
*
*/
 
#ifndef __TAPDEV_H__
#define __TAPDEV_H__
 
void tapdev_init(void);
unsigned int tapdev_read(void);
void tapdev_send(void);
 
#endif /* __TAPDEV_H__ */
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/telnetd-shell.c
0,0 → 1,181
/**
* \addtogroup telnetd
* @{
*/
 
/**
* \file
* An example telnet server shell
* \author Adam Dunkels <adam@dunkels.com>
*/
 
/*
* Copyright (c) 2003, Adam Dunkels.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote
* products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This file is part of the Contiki desktop OS.
*
* $Id: telnetd-shell.c,v 1.1.2.1 2003/10/06 22:56:22 adam Exp $
*
*/
 
#include "uip.h"
#include "telnetd.h"
#include <string.h>
 
struct ptentry {
char c;
void (* pfunc)(struct telnetd_state *s, char *str);
};
 
/*-----------------------------------------------------------------------------------*/
static void
parse(struct telnetd_state *s, register char *str, struct ptentry *t)
{
register struct ptentry *p;
char *sstr;
 
sstr = str;
/* Loop over the parse table entries in t in order to find one that
matches the first character in str. */
for(p = t; p->c != 0; ++p) {
if(*str == p->c) {
/* Skip rest of the characters up to the first space. */
while(*str != ' ') {
++str;
}
 
/* Skip all spaces.*/
while(*str == ' ') {
++str;
}
 
/* Call parse table entry function and return. */
p->pfunc(s, str);
return;
}
}
 
/* Did not find matching entry in parse table. We just call the
default handler supplied by the caller and return. */
p->pfunc(s, str);
}
/*-----------------------------------------------------------------------------------*/
static void
exitt(struct telnetd_state *s, char *str)
{
telnetd_close(s);
}
/*-----------------------------------------------------------------------------------*/
static void
inttostr(register char *str, unsigned int i)
{
str[0] = '0' + i / 100;
if(str[0] == '0') {
str[0] = ' ';
}
str[1] = '0' + (i / 10) % 10;
if(str[1] == '0') {
str[1] = ' ';
}
str[2] = '0' + i % 10;
str[3] = ' ';
str[4] = 0;
}
/*-----------------------------------------------------------------------------------*/
static void
stats(struct telnetd_state *s, char *strr)
{
char str[10];
 
inttostr(str, uip_stat.ip.recv);
telnetd_output(s, "IP packets received ", str);
inttostr(str, uip_stat.ip.sent);
telnetd_output(s, "IP packets sent ", str);
inttostr(str, uip_stat.ip.drop);
telnetd_output(s, "IP packets dropped ", str);
 
inttostr(str, uip_stat.icmp.recv);
telnetd_output(s, "ICMP packets received ", str);
inttostr(str, uip_stat.icmp.sent);
telnetd_output(s, "ICMP packets sent ", str);
inttostr(str, uip_stat.icmp.drop);
telnetd_output(s, "ICMP packets dropped ", str);
 
inttostr(str, uip_stat.tcp.recv);
telnetd_output(s, "TCP packets received ", str);
inttostr(str, uip_stat.tcp.sent);
telnetd_output(s, "TCP packets sent ", str);
inttostr(str, uip_stat.tcp.drop);
telnetd_output(s, "TCP packets dropped ", str);
inttostr(str, uip_stat.tcp.rexmit);
telnetd_output(s, "TCP packets retransmitted ", str);
inttostr(str, uip_stat.tcp.synrst);
telnetd_output(s, "TCP connection attempts ", str);
}
/*-----------------------------------------------------------------------------------*/
static void
help(struct telnetd_state *s, char *str)
{
telnetd_output(s, "Available commands:", "");
telnetd_output(s, "stats - show uIP statistics", "");
telnetd_output(s, "exit - exit shell", "");
telnetd_output(s, "? - show this help", "");
}
/*-----------------------------------------------------------------------------------*/
static void
none(struct telnetd_state *s, char *str)
{
if(strlen(str) > 0) {
telnetd_output(s, "Unknown command", "");
}
}
/*-----------------------------------------------------------------------------------*/
static struct ptentry configparsetab[] =
{{'s', stats},
{'e', exitt},
{'?', help},
 
/* Default action */
{0, none}};
/*-----------------------------------------------------------------------------------*/
void
telnetd_connected(struct telnetd_state *s)
{
telnetd_output(s, "uIP command shell", "");
telnetd_output(s, "Type '?' for help", "");
telnetd_prompt(s, "uIP-0.9> ");
}
/*-----------------------------------------------------------------------------------*/
void
telnetd_input(struct telnetd_state *s, char *cmd)
{
parse(s, cmd, configparsetab);
telnetd_prompt(s, "uIP-0.9> ");
}
/*-----------------------------------------------------------------------------------*/
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/telnetd-shell.d
0,0 → 1,17
Utilities/uip/telnetd-shell.o: Utilities/uip/telnetd-shell.c \
Utilities/uip/uip.h Utilities/uip/uipopt.h Utilities/uip/httpd.h \
Utilities/uip/telnetd.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/string.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/_ansi.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/newlib.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/config.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/machine/ieeefp.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/features.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/reent.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/_ansi.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/_types.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/machine/_types.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/machine/_default_types.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/lock.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/include/stddef.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/string.h
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/telnetd.c
0,0 → 1,392
/**
* \addtogroup exampleapps
* @{
*/
 
/**
* \defgroup telnetd Telnet server
* @{
*
* The uIP telnet server provides a command based interface to uIP. It
* allows using the "telnet" application to access uIP, and implements
* the required telnet option negotiation.
*
* The code is structured in a way which makes it possible to add
* commands without having to rewrite the main telnet code. The main
* telnet code calls two callback functions, telnetd_connected() and
* telnetd_input(), when a telnet connection has been established and
* when a line of text arrives on a telnet connection. These two
* functions can be implemented in a way which suits the particular
* application or environment in which the uIP system is intended to
* be run.
*
* The uIP distribution contains an example telnet shell
* implementation that provides a basic set of commands.
*/
 
/**
* \file
* Implementation of the Telnet server.
* \author Adam Dunkels <adam@dunkels.com>
*/
 
/*
* Copyright (c) 2003, Adam Dunkels.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote
* products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This file is part of the uIP TCP/IP stack.
*
* $Id: telnetd.c,v 1.1.2.2 2003/10/07 13:47:50 adam Exp $
*
*/
 
#include "uip.h"
#include "memb.h"
#include "telnetd.h"
#include <string.h>
 
#define ISO_nl 0x0a
#define ISO_cr 0x0d
 
MEMB(linemem, TELNETD_LINELEN, TELNETD_NUMLINES);
 
static u8_t i;
 
#define STATE_NORMAL 0
#define STATE_IAC 1
#define STATE_WILL 2
#define STATE_WONT 3
#define STATE_DO 4
#define STATE_DONT 5
#define STATE_CLOSE 6
 
#define TELNET_IAC 255
#define TELNET_WILL 251
#define TELNET_WONT 252
#define TELNET_DO 253
#define TELNET_DONT 254
/*-----------------------------------------------------------------------------------*/
static char *
alloc_line(void)
{
return memb_alloc(&linemem);
}
/*-----------------------------------------------------------------------------------*/
static void
dealloc_line(char *line)
{
memb_free(&linemem, line);
}
/*-----------------------------------------------------------------------------------*/
static void
sendline(struct telnetd_state *s, char *line)
{
static unsigned int i;
for(i = 0; i < TELNETD_NUMLINES; ++i) {
if(s->lines[i] == NULL) {
s->lines[i] = line;
break;
}
}
if(i == TELNETD_NUMLINES) {
dealloc_line(line);
}
}
/*-----------------------------------------------------------------------------------*/
/**
* Close a telnet session.
*
* This function can be called from a telnet command in order to close
* the connection.
*
* \param s The connection which is to be closed.
*
*/
/*-----------------------------------------------------------------------------------*/
void
telnetd_close(struct telnetd_state *s)
{
s->state = STATE_CLOSE;
}
/*-----------------------------------------------------------------------------------*/
/**
* Print a prompt on a telnet connection.
*
* This function can be called by the telnet command shell in order to
* print out a command prompt.
*
* \param s A telnet connection.
*
* \param str The command prompt.
*
*/
/*-----------------------------------------------------------------------------------*/
void
telnetd_prompt(struct telnetd_state *s, char *str)
{
char *line;
line = alloc_line();
if(line != NULL) {
strncpy(line, str, TELNETD_LINELEN);
sendline(s, line);
}
}
/*-----------------------------------------------------------------------------------*/
/**
* Print out a string on a telnet connection.
*
* This function can be called from a telnet command parser in order
* to print out a string of text on the connection. The two strings
* given as arguments to the function will be concatenated, a carrige
* return and a new line character will be added, and the line is
* sent.
*
* \param s The telnet connection.
*
* \param str1 The first string.
*
* \param str2 The second string.
*
*/
/*-----------------------------------------------------------------------------------*/
void
telnetd_output(struct telnetd_state *s, char *str1, char *str2)
{
static unsigned len;
char *line;
line = alloc_line();
if(line != NULL) {
len = strlen(str1);
strncpy(line, str1, TELNETD_LINELEN);
if(len < TELNETD_LINELEN) {
strncpy(line + len, str2, TELNETD_LINELEN - len);
}
len = strlen(line);
if(len < TELNETD_LINELEN - 2) {
line[len] = ISO_cr;
line[len+1] = ISO_nl;
line[len+2] = 0;
}
sendline(s, line);
}
}
/*-----------------------------------------------------------------------------------*/
/**
* Initialize the telnet server.
*
* This function will perform the necessary initializations and start
* listening on TCP port 23.
*/
/*-----------------------------------------------------------------------------------*/
void
telnetd_init(void)
{
memb_init(&linemem);
uip_listen(HTONS(23));
}
/*-----------------------------------------------------------------------------------*/
static void
acked(struct telnetd_state *s)
{
dealloc_line(s->lines[0]);
for(i = 1; i < TELNETD_NUMLINES; ++i) {
s->lines[i - 1] = s->lines[i];
}
}
/*-----------------------------------------------------------------------------------*/
static void
senddata(struct telnetd_state *s)
{
if(s->lines[0] != NULL) {
uip_send(s->lines[0], strlen(s->lines[0]));
}
}
/*-----------------------------------------------------------------------------------*/
static void
getchar(struct telnetd_state *s, u8_t c)
{
if(c == ISO_cr) {
return;
}
s->buf[(int)s->bufptr] = c;
if(s->buf[(int)s->bufptr] == ISO_nl ||
s->bufptr == sizeof(s->buf) - 1) {
if(s->bufptr > 0) {
s->buf[(int)s->bufptr] = 0;
}
telnetd_input(s, s->buf);
s->bufptr = 0;
} else {
++s->bufptr;
}
}
/*-----------------------------------------------------------------------------------*/
static void
sendopt(struct telnetd_state *s, u8_t option, u8_t value)
{
char *line;
line = alloc_line();
if(line != NULL) {
line[0] = TELNET_IAC;
line[1] = option;
line[2] = value;
line[3] = 0;
sendline(s, line);
}
}
/*-----------------------------------------------------------------------------------*/
static void
newdata(struct telnetd_state *s)
{
u16_t len;
u8_t c;
len = uip_datalen();
while(len > 0 && s->bufptr < sizeof(s->buf)) {
c = *uip_appdata;
++uip_appdata;
--len;
switch(s->state) {
case STATE_IAC:
if(c == TELNET_IAC) {
getchar(s, c);
s->state = STATE_NORMAL;
} else {
switch(c) {
case TELNET_WILL:
s->state = STATE_WILL;
break;
case TELNET_WONT:
s->state = STATE_WONT;
break;
case TELNET_DO:
s->state = STATE_DO;
break;
case TELNET_DONT:
s->state = STATE_DONT;
break;
default:
s->state = STATE_NORMAL;
break;
}
}
break;
case STATE_WILL:
/* Reply with a DONT */
sendopt(s, TELNET_DONT, c);
s->state = STATE_NORMAL;
break;
case STATE_WONT:
/* Reply with a DONT */
sendopt(s, TELNET_DONT, c);
s->state = STATE_NORMAL;
break;
case STATE_DO:
/* Reply with a WONT */
sendopt(s, TELNET_WONT, c);
s->state = STATE_NORMAL;
break;
case STATE_DONT:
/* Reply with a WONT */
sendopt(s, TELNET_WONT, c);
s->state = STATE_NORMAL;
break;
case STATE_NORMAL:
if(c == TELNET_IAC) {
s->state = STATE_IAC;
} else {
getchar(s, c);
}
break;
}
 
}
}
/*-----------------------------------------------------------------------------------*/
void
telnetd_app(void)
{
struct telnetd_state *s;
 
s = (struct telnetd_state *)uip_conn->appstate;
if(uip_connected()) {
 
for(i = 0; i < TELNETD_NUMLINES; ++i) {
s->lines[i] = NULL;
}
s->bufptr = 0;
s->state = STATE_NORMAL;
 
telnetd_connected(s);
senddata(s);
return;
}
 
if(s->state == STATE_CLOSE) {
s->state = STATE_NORMAL;
uip_close();
return;
}
if(uip_closed()) {
telnetd_output(s, "Connection closed", "");
}
 
if(uip_aborted()) {
telnetd_output(s, "Connection reset", "");
}
if(uip_timedout()) {
telnetd_output(s, "Connection timed out", "");
}
if(uip_acked()) {
acked(s);
}
if(uip_newdata()) {
newdata(s);
}
if(uip_rexmit() ||
uip_newdata() ||
uip_acked()) {
senddata(s);
} else if(uip_poll()) {
senddata(s);
}
}
/*-----------------------------------------------------------------------------------*/
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/telnetd.d
0,0 → 1,17
Utilities/uip/telnetd.o: Utilities/uip/telnetd.c Utilities/uip/uip.h \
Utilities/uip/uipopt.h Utilities/uip/httpd.h Utilities/uip/memb.h \
Utilities/uip/telnetd.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/string.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/_ansi.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/newlib.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/config.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/machine/ieeefp.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/features.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/reent.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/_ansi.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/_types.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/machine/_types.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/machine/_default_types.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/lock.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/include/stddef.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/string.h
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/telnetd.h
0,0 → 1,114
/**
* \addtogroup telnetd
* @{
*/
 
/**
* \file
* Header file for the telnet server.
* \author Adam Dunkels <adam@dunkels.com>
*/
 
/*
* Copyright (c) 2002, Adam Dunkels.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote
* products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This file is part of the uIP TCP/IP stack.
*
* $Id: telnetd.h,v 1.1.2.2 2003/10/07 13:22:27 adam Exp $
*
*/
#ifndef __TELNETD_H__
#define __TELNETD_H__
 
#include "uip.h"
 
/**
* The maximum length of a telnet line.
*
* \hideinitializer
*/
#define TELNETD_LINELEN 36
 
/**
* The number of output lines being buffered for all telnet
* connections.
*
* \hideinitializer
*/
#define TELNETD_NUMLINES 2
 
/**
* A telnet connection structure.
*/
struct telnetd_state {
char *lines[TELNETD_NUMLINES];
char buf[TELNETD_LINELEN];
char bufptr;
u8_t state;
};
 
 
/**
* Callback function that is called when a telnet connection has been
* established.
*
* \param s The telnet connection.
*/
void telnetd_connected(struct telnetd_state *s);
 
/**
* Callback function that is called when a line of text has arrived on
* a telnet connection.
*
* \param s The telnet connection.
*
* \param cmd The line of text.
*/
void telnetd_input(struct telnetd_state *s, char *cmd);
 
 
void telnetd_close(struct telnetd_state *s);
void telnetd_output(struct telnetd_state *s, char *s1, char *s2);
void telnetd_prompt(struct telnetd_state *s, char *str);
 
void telnetd_app(void);
 
#ifndef UIP_APPCALL
#define UIP_APPCALL telnetd_app
#endif
 
#ifndef UIP_APPSTATE_SIZE
#define UIP_APPSTATE_SIZE (sizeof(struct telnetd_state))
#endif
 
void telnetd_init(void);
 
 
#endif /* __TELNET_H__ */
 
/** @} */
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/uIPMain.c
0,0 → 1,200
/*
* Copyright (c) 2001-2003, Adam Dunkels.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote
* products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This file is part of the uIP TCP/IP stack.
*
* $Id: main.c,v 1.10.2.1 2003/10/04 22:54:17 adam Exp $
*
*/
 
 
#include <stdio.h>
 
#include "uip.h"
#include "uip_arp.h"
#include "httpd.h"
#include "stm32_eth.h"
 
 
// Define NULL
#ifndef NULL
#define NULL (void *)0
#endif
 
// Globals
extern char gPacketReceived;
 
/* The start of the uIP buffer, which will contain the frame headers. */
#define pucUIP_Buffer ( ( struct uip_eth_hdr * ) &uip_buf[ 0 ] )
 
/* uIP update frequencies. */
#define RT_CLOCK_SECOND ( configTICK_RATE_HZ )
#define uipARP_FREQUENCY ( 20 )
#define uipMAX_BLOCK_TIME ( RT_CLOCK_SECOND / 4 )
 
// Define Prototypes
void TransmitPacket(void);
 
/*-----------------------------------------------------------------------------------*/
void uIPMain(void)
{
u8_t i, arptimer;
uip_eth_hdr *BUF = (uip_eth_hdr*)uip_buf;
u32 size;
/* Initialize the uIP TCP/IP stack. */
uip_init();
 
/* Initialize the HTTP server. */
httpd_init();
 
arptimer = 0;
while(1)
{
/* Let the tapdev network device driver read an entire IP packet
into the uip_buf. If it must wait for more than 0.5 seconds, it
will return with the return value 0. If so, we know that it is
time to call upon the uip_periodic(). Otherwise, the tapdev has
received an IP packet that is to be processed by uIP. */
 
size = ETH_HandleRxPkt(uip_buf);
 
if (size > 0) {
//printf("Packet! len: %x\r\n", size);
uip_len = size;
}
 
if(uip_len <= 0x0)
{
for(i = 0; i < UIP_CONNS; i++)
{
uip_periodic(i);
 
/* If the above function invocation resulted in data that
should be sent out on the network, the global variable
uip_len is set to a value > 0. */
 
if(uip_len > 0)
{
uip_arp_out();
//printf("Reply! len: %x\r\n", uip_len);
TransmitPacket();
}
}
 
#if UIP_UDP
for(i = 0; i < UIP_UDP_CONNS; i++)
{
uip_udp_periodic(i);
/* If the above function invocation resulted in data that
should be sent out on the network, the global variable
uip_len is set to a value > 0. */
if(uip_len > 0)
{
uip_arp_out();
//printf("Reply! len: %x\r\n", uip_len);
TransmitPacket();
}
}
#endif /* UIP_UDP */
 
/* Call the ARP timer function every 10 seconds. */
if(++arptimer == 20)
{
uip_arp_timer();
arptimer = 0;
}
}
 
else
{
if(BUF->type == htons(UIP_ETHTYPE_IP))
{
uip_arp_ipin();
uip_input();
 
/* If the above function invocation resulted in data that
should be sent out on the network, the global variable
uip_len is set to a value > 0. */
if(uip_len > 0)
{
uip_arp_out();
//printf("Reply! len: %x\r\n", uip_len);
TransmitPacket();
}
}
else if(BUF->type == htons(UIP_ETHTYPE_ARP))
{
uip_arp_arpin();
 
/* If the above function invocation resulted in data that
should be sent out on the network, the global variable
uip_len is set to a value > 0. */
if(uip_len > 0)
{
//printf("Reply! len: %x\r\n", uip_len);
TransmitPacket();
}
}
}
}
}
 
/*-----------------------------------------------------------------------------------*/
 
void TransmitPacket(void)
{
int i;
u8 data[1500];
 
// Copy the header portion part
for(i=0; i < (UIP_LLH_LEN + 40); ++i) {
data[i] = uip_buf[i];
}
 
// Copy the data portion part
for(; i < uip_len; ++i) {
data[i] = uip_appdata[i - UIP_LLH_LEN - 40 ];
}
 
ETH_HandleTxPkt(data,uip_len);
}
 
/*-----------------------------------------------------------------------------------*/
void uip_log(char *m)
{
//printf("uIP log message: %s\n", m);
}
 
void udp_appcall(void)
{
}
 
 
/*-----------------------------------------------------------------------------------*/
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/uIPMain.d
0,0 → 1,33
Utilities/uip/uIPMain.o: Utilities/uip/uIPMain.c \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/stdio.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/_ansi.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/newlib.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/config.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/machine/ieeefp.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/features.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/include/stddef.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/include/stdarg.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/reent.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/_ansi.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/_types.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/machine/_types.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/machine/_default_types.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/lock.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/types.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/machine/types.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/stdio.h \
Utilities/uip/uip.h Utilities/uip/uipopt.h Utilities/uip/httpd.h \
Utilities/uip/uip_arp.h Libraries/STM32_ETH_Driver/inc/stm32_eth.h \
Libraries/CMSIS/Core/CM3/stm32f10x.h Libraries/CMSIS/Core/CM3/core_cm3.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/include/stdint.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/stdint.h \
Libraries/CMSIS/Core/CM3/system_stm32f10x.h \
Project/Webserver_Demo_uIP/stm32f10x_conf.h \
Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_adc.h \
Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_exti.h \
Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_flash.h \
Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_gpio.h \
Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_rcc.h \
Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_spi.h \
Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_usart.h \
Libraries/STM32F10x_StdPeriph_Driver/inc/misc.h
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/uip.c
0,0 → 1,1513
/**
* \addtogroup uip
* @{
*/
 
/**
* \file
* The uIP TCP/IP stack code.
* \author Adam Dunkels <adam@dunkels.com>
*/
 
/*
* Copyright (c) 2001-2003, Adam Dunkels.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote
* products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This file is part of the uIP TCP/IP stack.
*
* $Id: uip.c,v 1.62.2.10 2003/10/07 13:23:01 adam Exp $
*
*/
 
/*
This is a small implementation of the IP and TCP protocols (as well as
some basic ICMP stuff). The implementation couples the IP, TCP and the
application layers very tightly. To keep the size of the compiled code
down, this code also features heavy usage of the goto statement.
 
The principle is that we have a small buffer, called the uip_buf, in
which the device driver puts an incoming packet. The TCP/IP stack
parses the headers in the packet, and calls upon the application. If
the remote host has sent data to the application, this data is present
in the uip_buf and the application read the data from there. It is up
to the application to put this data into a byte stream if needed. The
application will not be fed with data that is out of sequence.
 
If the application whishes to send data to the peer, it should put its
data into the uip_buf, 40 bytes from the start of the buffer. The
TCP/IP stack will calculate the checksums, and fill in the necessary
header fields and finally send the packet back to the peer.
*/
 
#include "uip.h"
#include "uipopt.h"
#include "uip_arch.h"
#include "string.h"
 
/*-----------------------------------------------------------------------------------*/
/* Variable definitions. */
 
 
/* The IP address of this host. If it is defined to be fixed (by setting UIP_FIXEDADDR to 1 in uipopt.h), the address is set here. Otherwise, the address */
#if UIP_FIXEDADDR > 0
const u16_t uip_hostaddr[2] =
{HTONS((UIP_IPADDR0 << 8) | UIP_IPADDR1),
HTONS((UIP_IPADDR2 << 8) | UIP_IPADDR3)};
const u16_t uip_arp_draddr[2] =
{HTONS((UIP_DRIPADDR0 << 8) | UIP_DRIPADDR1),
HTONS((UIP_DRIPADDR2 << 8) | UIP_DRIPADDR3)};
const u16_t uip_arp_netmask[2] =
{HTONS((UIP_NETMASK0 << 8) | UIP_NETMASK1),
HTONS((UIP_NETMASK2 << 8) | UIP_NETMASK3)};
#else
u16_t uip_hostaddr[2];
u16_t uip_arp_draddr[2], uip_arp_netmask[2];
#endif /* UIP_FIXEDADDR */
 
u8_t uip_buf[UIP_BUFSIZE+2]; /* The packet buffer that contains
incoming packets. */
volatile u8_t *uip_appdata; /* The uip_appdata pointer points to
application data. */
volatile u8_t *uip_sappdata; /* The uip_appdata pointer points to the
application data which is to be sent. */
#if UIP_URGDATA > 0
volatile u8_t *uip_urgdata; /* The uip_urgdata pointer points to
urgent data (out-of-band data), if
present. */
u8_t uip_urglen, uip_surglen;
#endif /* UIP_URGDATA > 0 */
 
u16_t uip_len, uip_slen;
/* The uip_len is either 8 or 16 bits,
depending on the maximum packet
size. */
 
volatile u8_t uip_flags; /* The uip_flags variable is used for
communication between the TCP/IP stack
and the application program. */
struct uip_conn *uip_conn; /* uip_conn always points to the current
connection. */
 
struct uip_conn uip_conns[UIP_CONNS];
/* The uip_conns array holds all TCP
connections. */
u16_t uip_listenports[UIP_LISTENPORTS];
/* The uip_listenports list all currently
listning ports. */
#if UIP_UDP
struct uip_udp_conn *uip_udp_conn;
struct uip_udp_conn uip_udp_conns[UIP_UDP_CONNS];
#endif /* UIP_UDP */
 
 
static u16_t ipid; /* Ths ipid variable is an increasing
number that is used for the IP ID
field. */
 
static u8_t iss[4]; /* The iss variable is used for the TCP
initial sequence number. */
 
#if UIP_ACTIVE_OPEN
static u16_t lastport; /* Keeps track of the last port used for
a new connection. */
#endif /* UIP_ACTIVE_OPEN */
 
/* Temporary variables. */
volatile u8_t uip_acc32[4];
static u8_t c, opt;
static u16_t tmp16;
 
/* Structures and definitions. */
#define TCP_FIN 0x01
#define TCP_SYN 0x02
#define TCP_RST 0x04
#define TCP_PSH 0x08
#define TCP_ACK 0x10
#define TCP_URG 0x20
#define TCP_CTL 0x3f
 
#define ICMP_ECHO_REPLY 0
#define ICMP_ECHO 8
 
/* Macros. */
#define BUF ((uip_tcpip_hdr *)&uip_buf[UIP_LLH_LEN])
#define FBUF ((uip_tcpip_hdr *)&uip_reassbuf[0])
#define ICMPBUF ((uip_icmpip_hdr *)&uip_buf[UIP_LLH_LEN])
#define UDPBUF ((uip_udpip_hdr *)&uip_buf[UIP_LLH_LEN])
 
#if UIP_STATISTICS == 1
struct uip_stats uip_stat;
#define UIP_STAT(s) s
#else
#define UIP_STAT(s)
#endif /* UIP_STATISTICS == 1 */
 
#if UIP_LOGGING == 1
#include <stdio.h>
void uip_log(char *msg);
#define UIP_LOG(m) uip_log(m)
#else
#define UIP_LOG(m)
#endif /* UIP_LOGGING == 1 */
 
/*-----------------------------------------------------------------------------------*/
void uip_init(void)
{
for(c = 0; c < UIP_LISTENPORTS; ++c) {
uip_listenports[c] = 0;
}
for(c = 0; c < UIP_CONNS; ++c) {
uip_conns[c].tcpstateflags = CLOSED;
}
#if UIP_ACTIVE_OPEN
lastport = 1024;
#endif /* UIP_ACTIVE_OPEN */
 
#if UIP_UDP
for(c = 0; c < UIP_UDP_CONNS; ++c) {
uip_udp_conns[c].lport = 0;
}
#endif /* UIP_UDP */
 
 
/* IPv4 initialization. */
#if UIP_FIXEDADDR == 0
uip_hostaddr[0] = uip_hostaddr[1] = 0;
#endif /* UIP_FIXEDADDR */
 
}
/*-----------------------------------------------------------------------------------*/
#if UIP_ACTIVE_OPEN
struct uip_conn * uip_connect(u16_t *ripaddr, u16_t rport)
{
register struct uip_conn *conn, *cconn;
 
/* Find an unused local port. */
again:
++lastport;
 
if(lastport >= 32000) {
lastport = 4096;
}
 
/* Check if this port is already in use, and if so try to find
another one. */
for(c = 0; c < UIP_CONNS; ++c) {
conn = &uip_conns[c];
if(conn->tcpstateflags != CLOSED &&
conn->lport == htons(lastport)) {
goto again;
}
}
 
 
conn = 0;
for(c = 0; c < UIP_CONNS; ++c) {
cconn = &uip_conns[c];
if(cconn->tcpstateflags == CLOSED) {
conn = cconn;
break;
}
if(cconn->tcpstateflags == TIME_WAIT) {
if(conn == 0 ||
cconn->timer > uip_conn->timer) {
conn = cconn;
}
}
}
 
if(conn == 0) {
return 0;
}
 
conn->tcpstateflags = SYN_SENT;
 
conn->snd_nxt[0] = iss[0];
conn->snd_nxt[1] = iss[1];
conn->snd_nxt[2] = iss[2];
conn->snd_nxt[3] = iss[3];
 
conn->initialmss = conn->mss = UIP_TCP_MSS;
 
conn->len = 1; /* TCP length of the SYN is one. */
conn->nrtx = 0;
conn->timer = 1; /* Send the SYN next time around. */
conn->rto = UIP_RTO;
conn->sa = 0;
conn->sv = 16;
conn->lport = htons(lastport);
conn->rport = rport;
conn->ripaddr[0] = ripaddr[0];
conn->ripaddr[1] = ripaddr[1];
 
return conn;
}
#endif /* UIP_ACTIVE_OPEN */
/*-----------------------------------------------------------------------------------*/
#if UIP_UDP
struct uip_udp_conn *
uip_udp_new(u16_t *ripaddr, u16_t rport)
{
register struct uip_udp_conn *conn;
 
/* Find an unused local port. */
again:
++lastport;
 
if(lastport >= 32000) {
lastport = 4096;
}
 
for(c = 0; c < UIP_UDP_CONNS; ++c) {
if(uip_udp_conns[c].lport == lastport) {
goto again;
}
}
 
 
conn = 0;
for(c = 0; c < UIP_UDP_CONNS; ++c) {
if(uip_udp_conns[c].lport == 0) {
conn = &uip_udp_conns[c];
break;
}
}
 
if(conn == 0) {
return 0;
}
 
conn->lport = HTONS(lastport);
conn->rport = HTONS(rport);
conn->ripaddr[0] = ripaddr[0];
conn->ripaddr[1] = ripaddr[1];
 
return conn;
}
#endif /* UIP_UDP */
/*-----------------------------------------------------------------------------------*/
void
uip_unlisten(u16_t port)
{
for(c = 0; c < UIP_LISTENPORTS; ++c) {
if(uip_listenports[c] == port) {
uip_listenports[c] = 0;
return;
}
}
}
/*-----------------------------------------------------------------------------------*/
void
uip_listen(u16_t port)
{
for(c = 0; c < UIP_LISTENPORTS; ++c) {
if(uip_listenports[c] == 0) {
uip_listenports[c] = port;
return;
}
}
}
/*-----------------------------------------------------------------------------------*/
/* XXX: IP fragment reassembly: not well-tested. */
 
#if UIP_REASSEMBLY
#define UIP_REASS_BUFSIZE (UIP_BUFSIZE - UIP_LLH_LEN)
static u8_t uip_reassbuf[UIP_REASS_BUFSIZE];
static u8_t uip_reassbitmap[UIP_REASS_BUFSIZE / (8 * 8)];
static const u8_t bitmap_bits[8] = {0xff, 0x7f, 0x3f, 0x1f,
0x0f, 0x07, 0x03, 0x01};
static u16_t uip_reasslen;
static u8_t uip_reassflags;
#define UIP_REASS_FLAG_LASTFRAG 0x01
static u8_t uip_reasstmr;
 
#define IP_HLEN 20
#define IP_MF 0x20
 
static u8_t
uip_reass(void)
{
u16_t offset, len;
u16_t i;
 
/* If ip_reasstmr is zero, no packet is present in the buffer, so we
write the IP header of the fragment into the reassembly
buffer. The timer is updated with the maximum age. */
if(uip_reasstmr == 0) {
memcpy(uip_reassbuf, &BUF->vhl, IP_HLEN);
uip_reasstmr = UIP_REASS_MAXAGE;
uip_reassflags = 0;
/* Clear the bitmap. */
memset(uip_reassbitmap, sizeof(uip_reassbitmap), 0);
}
 
/* Check if the incoming fragment matches the one currently present
in the reasembly buffer. If so, we proceed with copying the
fragment into the buffer. */
if(BUF->srcipaddr[0] == FBUF->srcipaddr[0] &&
BUF->srcipaddr[1] == FBUF->srcipaddr[1] &&
BUF->destipaddr[0] == FBUF->destipaddr[0] &&
BUF->destipaddr[1] == FBUF->destipaddr[1] &&
BUF->ipid[0] == FBUF->ipid[0] &&
BUF->ipid[1] == FBUF->ipid[1]) {
 
len = (BUF->len[0] << 8) + BUF->len[1] - (BUF->vhl & 0x0f) * 4;
offset = (((BUF->ipoffset[0] & 0x3f) << 8) + BUF->ipoffset[1]) * 8;
 
/* If the offset or the offset + fragment length overflows the
reassembly buffer, we discard the entire packet. */
if(offset > UIP_REASS_BUFSIZE ||
offset + len > UIP_REASS_BUFSIZE) {
uip_reasstmr = 0;
goto nullreturn;
}
 
/* Copy the fragment into the reassembly buffer, at the right
offset. */
memcpy(&uip_reassbuf[IP_HLEN + offset],
(char *)BUF + (int)((BUF->vhl & 0x0f) * 4),
len);
 
/* Update the bitmap. */
if(offset / (8 * 8) == (offset + len) / (8 * 8)) {
/* If the two endpoints are in the same byte, we only update
that byte. */
uip_reassbitmap[offset / (8 * 8)] |=
bitmap_bits[(offset / 8 ) & 7] &
~bitmap_bits[((offset + len) / 8 ) & 7];
} else {
/* If the two endpoints are in different bytes, we update the
bytes in the endpoints and fill the stuff inbetween with
0xff. */
uip_reassbitmap[offset / (8 * 8)] |=
bitmap_bits[(offset / 8 ) & 7];
for(i = 1 + offset / (8 * 8); i < (offset + len) / (8 * 8); ++i) {
uip_reassbitmap[i] = 0xff;
}
uip_reassbitmap[(offset + len) / (8 * 8)] |=
~bitmap_bits[((offset + len) / 8 ) & 7];
}
 
/* If this fragment has the More Fragments flag set to zero, we
know that this is the last fragment, so we can calculate the
size of the entire packet. We also set the
IP_REASS_FLAG_LASTFRAG flag to indicate that we have received
the final fragment. */
 
if((BUF->ipoffset[0] & IP_MF) == 0) {
uip_reassflags |= UIP_REASS_FLAG_LASTFRAG;
uip_reasslen = offset + len;
}
 
/* Finally, we check if we have a full packet in the buffer. We do
this by checking if we have the last fragment and if all bits
in the bitmap are set. */
if(uip_reassflags & UIP_REASS_FLAG_LASTFRAG) {
/* Check all bytes up to and including all but the last byte in
the bitmap. */
for(i = 0; i < uip_reasslen / (8 * 8) - 1; ++i) {
if(uip_reassbitmap[i] != 0xff) {
goto nullreturn;
}
}
/* Check the last byte in the bitmap. It should contain just the
right amount of bits. */
if(uip_reassbitmap[uip_reasslen / (8 * 8)] !=
(u8_t)~bitmap_bits[uip_reasslen / 8 & 7]) {
goto nullreturn;
}
 
/* If we have come this far, we have a full packet in the
buffer, so we allocate a pbuf and copy the packet into it. We
also reset the timer. */
uip_reasstmr = 0;
memcpy(BUF, FBUF, uip_reasslen);
 
/* Pretend to be a "normal" (i.e., not fragmented) IP packet
from now on. */
BUF->ipoffset[0] = BUF->ipoffset[1] = 0;
BUF->len[0] = uip_reasslen >> 8;
BUF->len[1] = uip_reasslen & 0xff;
BUF->ipchksum = 0;
BUF->ipchksum = ~(uip_ipchksum());
 
return uip_reasslen;
}
}
 
nullreturn:
return 0;
}
#endif /* UIP_REASSEMBL */
/*-----------------------------------------------------------------------------------*/
static void
uip_add_rcv_nxt(u16_t n)
{
uip_add32(uip_conn->rcv_nxt, n);
uip_conn->rcv_nxt[0] = uip_acc32[0];
uip_conn->rcv_nxt[1] = uip_acc32[1];
uip_conn->rcv_nxt[2] = uip_acc32[2];
uip_conn->rcv_nxt[3] = uip_acc32[3];
}
/*-----------------------------------------------------------------------------------*/
void
uip_process(u8_t flag)
{
register struct uip_conn *uip_connr = uip_conn;
 
uip_appdata = &uip_buf[40 + UIP_LLH_LEN];
 
 
/* Check if we were invoked because of the perodic timer fireing. */
if(flag == UIP_TIMER) {
#if UIP_REASSEMBLY
if(uip_reasstmr != 0) {
--uip_reasstmr;
}
#endif /* UIP_REASSEMBLY */
/* Increase the initial sequence number. */
if(++iss[3] == 0) {
if(++iss[2] == 0) {
if(++iss[1] == 0) {
++iss[0];
}
}
}
uip_len = 0;
if(uip_connr->tcpstateflags == TIME_WAIT ||
uip_connr->tcpstateflags == FIN_WAIT_2) {
++(uip_connr->timer);
if(uip_connr->timer == UIP_TIME_WAIT_TIMEOUT) {
uip_connr->tcpstateflags = CLOSED;
}
} else if(uip_connr->tcpstateflags != CLOSED) {
/* If the connection has outstanding data, we increase the
connection's timer and see if it has reached the RTO value
in which case we retransmit. */
if(uip_outstanding(uip_connr)) {
if(uip_connr->timer-- == 0) {
if(uip_connr->nrtx == UIP_MAXRTX ||
((uip_connr->tcpstateflags == SYN_SENT ||
uip_connr->tcpstateflags == SYN_RCVD) &&
uip_connr->nrtx == UIP_MAXSYNRTX)) {
uip_connr->tcpstateflags = CLOSED;
 
/* We call UIP_APPCALL() with uip_flags set to
UIP_TIMEDOUT to inform the application that the
connection has timed out. */
uip_flags = UIP_TIMEDOUT;
UIP_APPCALL();
 
/* We also send a reset packet to the remote host. */
BUF->flags = TCP_RST | TCP_ACK;
goto tcp_send_nodata;
}
 
/* Exponential backoff. */
uip_connr->timer = UIP_RTO << (uip_connr->nrtx > 4?
4:
uip_connr->nrtx);
++(uip_connr->nrtx);
/* Ok, so we need to retransmit. We do this differently
depending on which state we are in. In ESTABLISHED, we
call upon the application so that it may prepare the
data for the retransmit. In SYN_RCVD, we resend the
SYNACK that we sent earlier and in LAST_ACK we have to
retransmit our FINACK. */
UIP_STAT(++uip_stat.tcp.rexmit);
switch(uip_connr->tcpstateflags & TS_MASK) {
case SYN_RCVD:
/* In the SYN_RCVD state, we should retransmit our
SYNACK. */
goto tcp_send_synack;
#if UIP_ACTIVE_OPEN
case SYN_SENT:
/* In the SYN_SENT state, we retransmit out SYN. */
BUF->flags = 0;
goto tcp_send_syn;
#endif /* UIP_ACTIVE_OPEN */
case ESTABLISHED:
/* In the ESTABLISHED state, we call upon the application
to do the actual retransmit after which we jump into
the code for sending out the packet (the apprexmit
label). */
uip_len = 0;
uip_slen = 0;
uip_flags = UIP_REXMIT;
UIP_APPCALL();
goto apprexmit;
case FIN_WAIT_1:
case CLOSING:
case LAST_ACK:
/* In all these states we should retransmit a FINACK. */
goto tcp_send_finack;
}
}
} else if((uip_connr->tcpstateflags & TS_MASK) == ESTABLISHED) {
/* If there was no need for a retransmission, we poll the
application for new data. */
uip_len = 0;
uip_slen = 0;
uip_flags = UIP_POLL;
UIP_APPCALL();
goto appsend;
}
}
goto drop;
}
#if UIP_UDP
if(flag == UIP_UDP_TIMER) {
if(uip_udp_conn->lport != 0) {
uip_appdata = &uip_buf[UIP_LLH_LEN + 28];
uip_len = uip_slen = 0;
uip_flags = UIP_POLL;
UIP_UDP_APPCALL();
goto udp_send;
} else {
goto drop;
}
}
#endif
 
/* This is where the input processing starts. */
UIP_STAT(++uip_stat.ip.recv);
 
 
/* Start of IPv4 input header processing code. */
 
/* Check validity of the IP header. */
if(BUF->vhl != 0x45) { /* IP version and header length. */
UIP_STAT(++uip_stat.ip.drop);
UIP_STAT(++uip_stat.ip.vhlerr);
UIP_LOG("ip: invalid version or header length.");
goto drop;
}
 
/* Check the size of the packet. If the size reported to us in
uip_len doesn't match the size reported in the IP header, there
has been a transmission error and we drop the packet. */
 
if(BUF->len[0] != (uip_len >> 8)) { /* IP length, high byte. */
uip_len = (uip_len & 0xff) | (BUF->len[0] << 8);
}
if(BUF->len[1] != (uip_len & 0xff)) { /* IP length, low byte. */
uip_len = (uip_len & 0xff00) | BUF->len[1];
}
 
/* Check the fragment flag. */
if((BUF->ipoffset[0] & 0x3f) != 0 ||
BUF->ipoffset[1] != 0) {
#if UIP_REASSEMBLY
uip_len = uip_reass();
if(uip_len == 0) {
goto drop;
}
#else
UIP_STAT(++uip_stat.ip.drop);
UIP_STAT(++uip_stat.ip.fragerr);
UIP_LOG("ip: fragment dropped.");
goto drop;
#endif /* UIP_REASSEMBLY */
}
 
/* If we are configured to use ping IP address configuration and
hasn't been assigned an IP address yet, we accept all ICMP
packets. */
#if UIP_PINGADDRCONF
if((uip_hostaddr[0] | uip_hostaddr[1]) == 0) {
if(BUF->proto == UIP_PROTO_ICMP) {
UIP_LOG("ip: possible ping config packet received.");
goto icmp_input;
} else {
UIP_LOG("ip: packet dropped since no address assigned.");
goto drop;
}
}
#endif /* UIP_PINGADDRCONF */
 
/* Check if the packet is destined for our IP address. */
if(BUF->destipaddr[0] != uip_hostaddr[0]) {
UIP_STAT(++uip_stat.ip.drop);
UIP_LOG("ip: packet not for us.");
goto drop;
}
if(BUF->destipaddr[1] != uip_hostaddr[1]) {
UIP_STAT(++uip_stat.ip.drop);
UIP_LOG("ip: packet not for us.");
goto drop;
}
 
#if 0
// IP checksum is wrong through Netgear DSL router
if (uip_ipchksum() != 0xffff) { /* Compute and check the IP header
checksum. */
UIP_STAT(++uip_stat.ip.drop);
UIP_STAT(++uip_stat.ip.chkerr);
UIP_LOG("ip: bad checksum.");
goto drop;
}
#endif
 
if(BUF->proto == UIP_PROTO_TCP) /* Check for TCP packet. If so, jump
to the tcp_input label. */
goto tcp_input;
 
#if UIP_UDP
if(BUF->proto == UIP_PROTO_UDP)
goto udp_input;
#endif /* UIP_UDP */
 
if(BUF->proto != UIP_PROTO_ICMP) { /* We only allow ICMP packets from
here. */
UIP_STAT(++uip_stat.ip.drop);
UIP_STAT(++uip_stat.ip.protoerr);
UIP_LOG("ip: neither tcp nor icmp.");
goto drop;
}
 
#if UIP_PINGADDRCONF
icmp_input:
#endif
UIP_STAT(++uip_stat.icmp.recv);
 
/* ICMP echo (i.e., ping) processing. This is simple, we only change
the ICMP type from ECHO to ECHO_REPLY and adjust the ICMP
checksum before we return the packet. */
if(ICMPBUF->type != ICMP_ECHO) {
UIP_STAT(++uip_stat.icmp.drop);
UIP_STAT(++uip_stat.icmp.typeerr);
UIP_LOG("icmp: not icmp echo.");
goto drop;
}
 
/* If we are configured to use ping IP address assignment, we use
the destination IP address of this ping packet and assign it to
ourself. */
#if UIP_PINGADDRCONF
if((uip_hostaddr[0] | uip_hostaddr[1]) == 0) {
uip_hostaddr[0] = BUF->destipaddr[0];
uip_hostaddr[1] = BUF->destipaddr[1];
}
#endif /* UIP_PINGADDRCONF */
 
ICMPBUF->type = ICMP_ECHO_REPLY;
 
if(ICMPBUF->icmpchksum >= HTONS(0xffff - (ICMP_ECHO << 8))) {
ICMPBUF->icmpchksum += HTONS(ICMP_ECHO << 8) + 1;
} else {
ICMPBUF->icmpchksum += HTONS(ICMP_ECHO << 8);
}
 
/* Swap IP addresses. */
tmp16 = BUF->destipaddr[0];
BUF->destipaddr[0] = BUF->srcipaddr[0];
BUF->srcipaddr[0] = tmp16;
tmp16 = BUF->destipaddr[1];
BUF->destipaddr[1] = BUF->srcipaddr[1];
BUF->srcipaddr[1] = tmp16;
 
UIP_STAT(++uip_stat.icmp.sent);
goto send;
 
/* End of IPv4 input header processing code. */
 
 
#if UIP_UDP
/* UDP input processing. */
udp_input:
/* UDP processing is really just a hack. We don't do anything to the
UDP/IP headers, but let the UDP application do all the hard
work. If the application sets uip_slen, it has a packet to
send. */
#if UIP_UDP_CHECKSUMS
if(uip_udpchksum() != 0xffff) {
UIP_STAT(++uip_stat.udp.drop);
UIP_STAT(++uip_stat.udp.chkerr);
UIP_LOG("udp: bad checksum.");
goto drop;
}
#endif /* UIP_UDP_CHECKSUMS */
 
/* Demultiplex this UDP packet between the UDP "connections". */
for(uip_udp_conn = &uip_udp_conns[0];
uip_udp_conn < &uip_udp_conns[UIP_UDP_CONNS];
++uip_udp_conn) {
if(uip_udp_conn->lport != 0 &&
UDPBUF->destport == uip_udp_conn->lport &&
(uip_udp_conn->rport == 0 ||
UDPBUF->srcport == uip_udp_conn->rport) &&
BUF->srcipaddr[0] == uip_udp_conn->ripaddr[0] &&
BUF->srcipaddr[1] == uip_udp_conn->ripaddr[1]) {
goto udp_found;
}
}
goto drop;
 
udp_found:
uip_len = uip_len - 28;
uip_appdata = &uip_buf[UIP_LLH_LEN + 28];
uip_flags = UIP_NEWDATA;
uip_slen = 0;
UIP_UDP_APPCALL();
udp_send:
if(uip_slen == 0) {
goto drop;
}
uip_len = uip_slen + 28;
 
BUF->len[0] = (uip_len >> 8);
BUF->len[1] = (uip_len & 0xff);
 
BUF->proto = UIP_PROTO_UDP;
 
UDPBUF->udplen = HTONS(uip_slen + 8);
UDPBUF->udpchksum = 0;
#if UIP_UDP_CHECKSUMS
/* Calculate UDP checksum. */
UDPBUF->udpchksum = ~(uip_udpchksum());
if(UDPBUF->udpchksum == 0) {
UDPBUF->udpchksum = 0xffff;
}
#endif /* UIP_UDP_CHECKSUMS */
 
BUF->srcport = uip_udp_conn->lport;
BUF->destport = uip_udp_conn->rport;
 
BUF->srcipaddr[0] = uip_hostaddr[0];
BUF->srcipaddr[1] = uip_hostaddr[1];
BUF->destipaddr[0] = uip_udp_conn->ripaddr[0];
BUF->destipaddr[1] = uip_udp_conn->ripaddr[1];
 
uip_appdata = &uip_buf[UIP_LLH_LEN + 40];
goto ip_send_nolen;
#endif /* UIP_UDP */
 
/* TCP input processing. */
tcp_input:
UIP_STAT(++uip_stat.tcp.recv);
 
/* Start of TCP input header processing code. */
 
#if 1 // FIXME
if(uip_tcpchksum() != 0xffff) { /* Compute and check the TCP
checksum. */
UIP_STAT(++uip_stat.tcp.drop);
UIP_STAT(++uip_stat.tcp.chkerr);
UIP_LOG("tcp: bad checksum.");
goto drop;
}
#endif
 
/* Demultiplex this segment. */
/* First check any active connections. */
for(uip_connr = &uip_conns[0]; uip_connr < &uip_conns[UIP_CONNS]; ++uip_connr) {
if(uip_connr->tcpstateflags != CLOSED &&
BUF->destport == uip_connr->lport &&
BUF->srcport == uip_connr->rport &&
BUF->srcipaddr[0] == uip_connr->ripaddr[0] &&
BUF->srcipaddr[1] == uip_connr->ripaddr[1]) {
goto found;
}
}
 
/* If we didn't find and active connection that expected the packet,
either this packet is an old duplicate, or this is a SYN packet
destined for a connection in LISTEN. If the SYN flag isn't set,
it is an old packet and we send a RST. */
if((BUF->flags & TCP_CTL) != TCP_SYN)
goto reset;
 
tmp16 = BUF->destport;
/* Next, check listening connections. */
for(c = 0; c < UIP_LISTENPORTS; ++c) {
if(tmp16 == uip_listenports[c])
goto found_listen;
}
 
/* No matching connection found, so we send a RST packet. */
UIP_STAT(++uip_stat.tcp.synrst);
reset:
 
/* We do not send resets in response to resets. */
if(BUF->flags & TCP_RST)
goto drop;
 
UIP_STAT(++uip_stat.tcp.rst);
 
BUF->flags = TCP_RST | TCP_ACK;
uip_len = 40;
BUF->tcpoffset = 5 << 4;
 
/* Flip the seqno and ackno fields in the TCP header. */
c = BUF->seqno[3];
BUF->seqno[3] = BUF->ackno[3];
BUF->ackno[3] = c;
 
c = BUF->seqno[2];
BUF->seqno[2] = BUF->ackno[2];
BUF->ackno[2] = c;
 
c = BUF->seqno[1];
BUF->seqno[1] = BUF->ackno[1];
BUF->ackno[1] = c;
 
c = BUF->seqno[0];
BUF->seqno[0] = BUF->ackno[0];
BUF->ackno[0] = c;
 
/* We also have to increase the sequence number we are
acknowledging. If the least significant byte overflowed, we need
to propagate the carry to the other bytes as well. */
if(++BUF->ackno[3] == 0) {
if(++BUF->ackno[2] == 0) {
if(++BUF->ackno[1] == 0) {
++BUF->ackno[0];
}
}
}
 
/* Swap port numbers. */
tmp16 = BUF->srcport;
BUF->srcport = BUF->destport;
BUF->destport = tmp16;
 
/* Swap IP addresses. */
tmp16 = BUF->destipaddr[0];
BUF->destipaddr[0] = BUF->srcipaddr[0];
BUF->srcipaddr[0] = tmp16;
tmp16 = BUF->destipaddr[1];
BUF->destipaddr[1] = BUF->srcipaddr[1];
BUF->srcipaddr[1] = tmp16;
 
 
/* And send out the RST packet! */
goto tcp_send_noconn;
 
/* This label will be jumped to if we matched the incoming packet
with a connection in LISTEN. In that case, we should create a new
connection and send a SYNACK in return. */
found_listen:
/* First we check if there are any connections avaliable. Unused
connections are kept in the same table as used connections, but
unused ones have the tcpstate set to CLOSED. Also, connections in
TIME_WAIT are kept track of and we'll use the oldest one if no
CLOSED connections are found. Thanks to Eddie C. Dost for a very
nice algorithm for the TIME_WAIT search. */
uip_connr = 0;
for(c = 0; c < UIP_CONNS; ++c) {
if(uip_conns[c].tcpstateflags == CLOSED) {
uip_connr = &uip_conns[c];
break;
}
if(uip_conns[c].tcpstateflags == TIME_WAIT) {
if(uip_connr == 0 ||
uip_conns[c].timer > uip_connr->timer) {
uip_connr = &uip_conns[c];
}
}
}
 
if(uip_connr == 0) {
/* All connections are used already, we drop packet and hope that
the remote end will retransmit the packet at a time when we
have more spare connections. */
UIP_STAT(++uip_stat.tcp.syndrop);
UIP_LOG("tcp: found no unused connections.");
goto drop;
}
uip_conn = uip_connr;
 
/* Fill in the necessary fields for the new connection. */
uip_connr->rto = uip_connr->timer = UIP_RTO;
uip_connr->sa = 0;
uip_connr->sv = 4;
uip_connr->nrtx = 0;
uip_connr->lport = BUF->destport;
uip_connr->rport = BUF->srcport;
uip_connr->ripaddr[0] = BUF->srcipaddr[0];
uip_connr->ripaddr[1] = BUF->srcipaddr[1];
uip_connr->tcpstateflags = SYN_RCVD;
 
uip_connr->snd_nxt[0] = iss[0];
uip_connr->snd_nxt[1] = iss[1];
uip_connr->snd_nxt[2] = iss[2];
uip_connr->snd_nxt[3] = iss[3];
uip_connr->len = 1;
 
/* rcv_nxt should be the seqno from the incoming packet + 1. */
uip_connr->rcv_nxt[3] = BUF->seqno[3];
uip_connr->rcv_nxt[2] = BUF->seqno[2];
uip_connr->rcv_nxt[1] = BUF->seqno[1];
uip_connr->rcv_nxt[0] = BUF->seqno[0];
uip_add_rcv_nxt(1);
 
/* Parse the TCP MSS option, if present. */
if((BUF->tcpoffset & 0xf0) > 0x50) {
for(c = 0; c < ((BUF->tcpoffset >> 4) - 5) << 2 ;) {
opt = uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + c];
if(opt == 0x00) {
/* End of options. */
break;
} else if(opt == 0x01) {
++c;
/* NOP option. */
} else if(opt == 0x02 &&
uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c] == 0x04) {
/* An MSS option with the right option length. */
tmp16 = ((u16_t)uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 2 + c] << 8) |
(u16_t)uip_buf[40 + UIP_LLH_LEN + 3 + c];
uip_connr->initialmss = uip_connr->mss =
tmp16 > UIP_TCP_MSS? UIP_TCP_MSS: tmp16;
/* And we are done processing options. */
break;
} else {
/* All other options have a length field, so that we easily
can skip past them. */
if(uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c] == 0) {
/* If the length field is zero, the options are malformed
and we don't process them further. */
break;
}
c += uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c];
}
}
}
 
/* Our response will be a SYNACK. */
#if UIP_ACTIVE_OPEN
tcp_send_synack:
BUF->flags = TCP_ACK;
 
tcp_send_syn:
BUF->flags |= TCP_SYN;
#else /* UIP_ACTIVE_OPEN */
tcp_send_synack:
BUF->flags = TCP_SYN | TCP_ACK;
#endif /* UIP_ACTIVE_OPEN */
 
/* We send out the TCP Maximum Segment Size option with our
SYNACK. */
BUF->optdata[0] = 2;
BUF->optdata[1] = 4;
BUF->optdata[2] = (UIP_TCP_MSS) / 256;
BUF->optdata[3] = (UIP_TCP_MSS) & 255;
uip_len = 44;
BUF->tcpoffset = 6 << 4;
goto tcp_send;
 
/* This label will be jumped to if we found an active connection. */
found:
uip_conn = uip_connr;
uip_flags = 0;
 
/* We do a very naive form of TCP reset processing; we just accept
any RST and kill our connection. We should in fact check if the
sequence number of this reset is wihtin our advertised window
before we accept the reset. */
if(BUF->flags & TCP_RST) {
uip_connr->tcpstateflags = CLOSED;
UIP_LOG("tcp: got reset, aborting connection.");
uip_flags = UIP_ABORT;
UIP_APPCALL();
goto drop;
}
/* Calculated the length of the data, if the application has sent
any data to us. */
c = (BUF->tcpoffset >> 4) << 2;
/* uip_len will contain the length of the actual TCP data. This is
calculated by subtracing the length of the TCP header (in
c) and the length of the IP header (20 bytes). */
uip_len = uip_len - c - 20;
 
/* First, check if the sequence number of the incoming packet is
what we're expecting next. If not, we send out an ACK with the
correct numbers in. */
if(uip_len > 0 &&
(BUF->seqno[0] != uip_connr->rcv_nxt[0] ||
BUF->seqno[1] != uip_connr->rcv_nxt[1] ||
BUF->seqno[2] != uip_connr->rcv_nxt[2] ||
BUF->seqno[3] != uip_connr->rcv_nxt[3])) {
goto tcp_send_ack;
}
 
/* Next, check if the incoming segment acknowledges any outstanding
data. If so, we update the sequence number, reset the length of
the outstanding data, calculate RTT estimations, and reset the
retransmission timer. */
if((BUF->flags & TCP_ACK) && uip_outstanding(uip_connr)) {
uip_add32(uip_connr->snd_nxt, uip_connr->len);
if(BUF->ackno[0] == uip_acc32[0] &&
BUF->ackno[1] == uip_acc32[1] &&
BUF->ackno[2] == uip_acc32[2] &&
BUF->ackno[3] == uip_acc32[3]) {
/* Update sequence number. */
uip_connr->snd_nxt[0] = uip_acc32[0];
uip_connr->snd_nxt[1] = uip_acc32[1];
uip_connr->snd_nxt[2] = uip_acc32[2];
uip_connr->snd_nxt[3] = uip_acc32[3];
 
/* Do RTT estimation, unless we have done retransmissions. */
if(uip_connr->nrtx == 0) {
signed char m;
m = uip_connr->rto - uip_connr->timer;
/* This is taken directly from VJs original code in his paper */
m = m - (uip_connr->sa >> 3);
uip_connr->sa += m;
if(m < 0) {
m = -m;
}
m = m - (uip_connr->sv >> 2);
uip_connr->sv += m;
uip_connr->rto = (uip_connr->sa >> 3) + uip_connr->sv;
 
}
/* Set the acknowledged flag. */
uip_flags = UIP_ACKDATA;
/* Reset the retransmission timer. */
uip_connr->timer = uip_connr->rto;
}
 
}
 
/* Do different things depending on in what state the connection is. */
switch(uip_connr->tcpstateflags & TS_MASK) {
/* CLOSED and LISTEN are not handled here. CLOSE_WAIT is not
implemented, since we force the application to close when the
peer sends a FIN (hence the application goes directly from
ESTABLISHED to LAST_ACK). */
case SYN_RCVD:
/* In SYN_RCVD we have sent out a SYNACK in response to a SYN, and
we are waiting for an ACK that acknowledges the data we sent
out the last time. Therefore, we want to have the UIP_ACKDATA
flag set. If so, we enter the ESTABLISHED state. */
if(uip_flags & UIP_ACKDATA) {
uip_connr->tcpstateflags = ESTABLISHED;
uip_flags = UIP_CONNECTED;
uip_connr->len = 0;
if(uip_len > 0) {
uip_flags |= UIP_NEWDATA;
uip_add_rcv_nxt(uip_len);
}
uip_slen = 0;
UIP_APPCALL();
goto appsend;
}
goto drop;
#if UIP_ACTIVE_OPEN
case SYN_SENT:
/* In SYN_SENT, we wait for a SYNACK that is sent in response to
our SYN. The rcv_nxt is set to sequence number in the SYNACK
plus one, and we send an ACK. We move into the ESTABLISHED
state. */
if((uip_flags & UIP_ACKDATA) &&
BUF->flags == (TCP_SYN | TCP_ACK)) {
 
/* Parse the TCP MSS option, if present. */
if((BUF->tcpoffset & 0xf0) > 0x50) {
for(c = 0; c < ((BUF->tcpoffset >> 4) - 5) << 2 ;) {
opt = uip_buf[40 + UIP_LLH_LEN + c];
if(opt == 0x00) {
/* End of options. */
break;
} else if(opt == 0x01) {
++c;
/* NOP option. */
} else if(opt == 0x02 &&
uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c] == 0x04) {
/* An MSS option with the right option length. */
tmp16 = (uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 2 + c] << 8) |
uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 3 + c];
uip_connr->initialmss =
uip_connr->mss = tmp16 > UIP_TCP_MSS? UIP_TCP_MSS: tmp16;
 
/* And we are done processing options. */
break;
} else {
/* All other options have a length field, so that we easily
can skip past them. */
if(uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c] == 0) {
/* If the length field is zero, the options are malformed
and we don't process them further. */
break;
}
c += uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c];
}
}
}
uip_connr->tcpstateflags = ESTABLISHED;
uip_connr->rcv_nxt[0] = BUF->seqno[0];
uip_connr->rcv_nxt[1] = BUF->seqno[1];
uip_connr->rcv_nxt[2] = BUF->seqno[2];
uip_connr->rcv_nxt[3] = BUF->seqno[3];
uip_add_rcv_nxt(1);
uip_flags = UIP_CONNECTED | UIP_NEWDATA;
uip_connr->len = 0;
uip_len = 0;
uip_slen = 0;
UIP_APPCALL();
goto appsend;
}
goto reset;
#endif /* UIP_ACTIVE_OPEN */
 
case ESTABLISHED:
/* In the ESTABLISHED state, we call upon the application to feed
data into the uip_buf. If the UIP_ACKDATA flag is set, the
application should put new data into the buffer, otherwise we are
retransmitting an old segment, and the application should put that
data into the buffer.
 
If the incoming packet is a FIN, we should close the connection on
this side as well, and we send out a FIN and enter the LAST_ACK
state. We require that there is no outstanding data; otherwise the
sequence numbers will be screwed up. */
 
if(BUF->flags & TCP_FIN) {
if(uip_outstanding(uip_connr)) {
goto drop;
}
uip_add_rcv_nxt(1 + uip_len);
uip_flags = UIP_CLOSE;
if(uip_len > 0) {
uip_flags |= UIP_NEWDATA;
}
UIP_APPCALL();
uip_connr->len = 1;
uip_connr->tcpstateflags = LAST_ACK;
uip_connr->nrtx = 0;
tcp_send_finack:
BUF->flags = TCP_FIN | TCP_ACK;
goto tcp_send_nodata;
}
 
/* Check the URG flag. If this is set, the segment carries urgent
data that we must pass to the application. */
if(BUF->flags & TCP_URG) {
#if UIP_URGDATA > 0
uip_urglen = (BUF->urgp[0] << 8) | BUF->urgp[1];
if(uip_urglen > uip_len) {
/* There is more urgent data in the next segment to come. */
uip_urglen = uip_len;
}
uip_add_rcv_nxt(uip_urglen);
uip_len -= uip_urglen;
uip_urgdata = uip_appdata;
uip_appdata += uip_urglen;
} else {
uip_urglen = 0;
#endif /* UIP_URGDATA > 0 */
uip_appdata += (BUF->urgp[0] << 8) | BUF->urgp[1];
uip_len -= (BUF->urgp[0] << 8) | BUF->urgp[1];
}
 
 
/* If uip_len > 0 we have TCP data in the packet, and we flag this
by setting the UIP_NEWDATA flag and update the sequence number
we acknowledge. If the application has stopped the dataflow
using uip_stop(), we must not accept any data packets from the
remote host. */
if(uip_len > 0 && !(uip_connr->tcpstateflags & UIP_STOPPED)) {
uip_flags |= UIP_NEWDATA;
uip_add_rcv_nxt(uip_len);
}
 
/* Check if the available buffer space advertised by the other end
is smaller than the initial MSS for this connection. If so, we
set the current MSS to the window size to ensure that the
application does not send more data than the other end can
handle.
 
If the remote host advertises a zero window, we set the MSS to
the initial MSS so that the application will send an entire MSS
of data. This data will not be acknowledged by the receiver,
and the application will retransmit it. This is called the
"persistent timer" and uses the retransmission mechanim.
*/
tmp16 = ((u16_t)BUF->wnd[0] << 8) + (u16_t)BUF->wnd[1];
if(tmp16 > uip_connr->initialmss ||
tmp16 == 0) {
tmp16 = uip_connr->initialmss;
}
uip_connr->mss = tmp16;
 
/* If this packet constitutes an ACK for outstanding data (flagged
by the UIP_ACKDATA flag, we should call the application since it
might want to send more data. If the incoming packet had data
from the peer (as flagged by the UIP_NEWDATA flag), the
application must also be notified.
 
When the application is called, the global variable uip_len
contains the length of the incoming data. The application can
access the incoming data through the global pointer
uip_appdata, which usually points 40 bytes into the uip_buf
array.
 
If the application wishes to send any data, this data should be
put into the uip_appdata and the length of the data should be
put into uip_len. If the application don't have any data to
send, uip_len must be set to 0. */
if(uip_flags & (UIP_NEWDATA | UIP_ACKDATA)) {
uip_slen = 0;
UIP_APPCALL();
 
appsend:
 
if(uip_flags & UIP_ABORT) {
uip_slen = 0;
uip_connr->tcpstateflags = CLOSED;
BUF->flags = TCP_RST | TCP_ACK;
goto tcp_send_nodata;
}
 
if(uip_flags & UIP_CLOSE) {
uip_slen = 0;
uip_connr->len = 1;
uip_connr->tcpstateflags = FIN_WAIT_1;
uip_connr->nrtx = 0;
BUF->flags = TCP_FIN | TCP_ACK;
goto tcp_send_nodata;
}
 
/* If uip_slen > 0, the application has data to be sent. */
if(uip_slen > 0) {
 
/* If the connection has acknowledged data, the contents of
the ->len variable should be discarded. */
if((uip_flags & UIP_ACKDATA) != 0) {
uip_connr->len = 0;
}
 
/* If the ->len variable is non-zero the connection has
already data in transit and cannot send anymore right
now. */
if(uip_connr->len == 0) {
 
/* The application cannot send more than what is allowed by
the mss (the minumum of the MSS and the available
window). */
if(uip_slen > uip_connr->mss) {
uip_slen = uip_connr->mss;
}
 
/* Remember how much data we send out now so that we know
when everything has been acknowledged. */
uip_connr->len = uip_slen;
} else {
 
/* If the application already had unacknowledged data, we
make sure that the application does not send (i.e.,
retransmit) out more than it previously sent out. */
uip_slen = uip_connr->len;
}
} else {
uip_connr->len = 0;
}
uip_connr->nrtx = 0;
apprexmit:
uip_appdata = uip_sappdata;
 
/* If the application has data to be sent, or if the incoming
packet had new data in it, we must send out a packet. */
if(uip_slen > 0 && uip_connr->len > 0) {
/* Add the length of the IP and TCP headers. */
uip_len = uip_connr->len + UIP_TCPIP_HLEN;
/* We always set the ACK flag in response packets. */
BUF->flags = TCP_ACK | TCP_PSH;
/* Send the packet. */
goto tcp_send_noopts;
}
/* If there is no data to send, just send out a pure ACK if
there is newdata. */
if(uip_flags & UIP_NEWDATA) {
uip_len = UIP_TCPIP_HLEN;
BUF->flags = TCP_ACK;
goto tcp_send_noopts;
}
}
goto drop;
case LAST_ACK:
/* We can close this connection if the peer has acknowledged our
FIN. This is indicated by the UIP_ACKDATA flag. */
if(uip_flags & UIP_ACKDATA) {
uip_connr->tcpstateflags = CLOSED;
uip_flags = UIP_CLOSE;
UIP_APPCALL();
}
break;
 
case FIN_WAIT_1:
/* The application has closed the connection, but the remote host
hasn't closed its end yet. Thus we do nothing but wait for a
FIN from the other side. */
if(uip_len > 0) {
uip_add_rcv_nxt(uip_len);
}
if(BUF->flags & TCP_FIN) {
if(uip_flags & UIP_ACKDATA) {
uip_connr->tcpstateflags = TIME_WAIT;
uip_connr->timer = 0;
uip_connr->len = 0;
} else {
uip_connr->tcpstateflags = CLOSING;
}
uip_add_rcv_nxt(1);
uip_flags = UIP_CLOSE;
UIP_APPCALL();
goto tcp_send_ack;
} else if(uip_flags & UIP_ACKDATA) {
uip_connr->tcpstateflags = FIN_WAIT_2;
uip_connr->len = 0;
goto drop;
}
if(uip_len > 0) {
goto tcp_send_ack;
}
goto drop;
 
case FIN_WAIT_2:
if(uip_len > 0) {
uip_add_rcv_nxt(uip_len);
}
if(BUF->flags & TCP_FIN) {
uip_connr->tcpstateflags = TIME_WAIT;
uip_connr->timer = 0;
uip_add_rcv_nxt(1);
uip_flags = UIP_CLOSE;
UIP_APPCALL();
goto tcp_send_ack;
}
if(uip_len > 0) {
goto tcp_send_ack;
}
goto drop;
 
case TIME_WAIT:
goto tcp_send_ack;
 
case CLOSING:
if(uip_flags & UIP_ACKDATA) {
uip_connr->tcpstateflags = TIME_WAIT;
uip_connr->timer = 0;
}
}
goto drop;
 
 
/* We jump here when we are ready to send the packet, and just want
to set the appropriate TCP sequence numbers in the TCP header. */
tcp_send_ack:
BUF->flags = TCP_ACK;
tcp_send_nodata:
uip_len = 40;
tcp_send_noopts:
BUF->tcpoffset = 5 << 4;
tcp_send:
/* We're done with the input processing. We are now ready to send a
reply. Our job is to fill in all the fields of the TCP and IP
headers before calculating the checksum and finally send the
packet. */
BUF->ackno[0] = uip_connr->rcv_nxt[0];
BUF->ackno[1] = uip_connr->rcv_nxt[1];
BUF->ackno[2] = uip_connr->rcv_nxt[2];
BUF->ackno[3] = uip_connr->rcv_nxt[3];
 
BUF->seqno[0] = uip_connr->snd_nxt[0];
BUF->seqno[1] = uip_connr->snd_nxt[1];
BUF->seqno[2] = uip_connr->snd_nxt[2];
BUF->seqno[3] = uip_connr->snd_nxt[3];
 
BUF->proto = UIP_PROTO_TCP;
 
BUF->srcport = uip_connr->lport;
BUF->destport = uip_connr->rport;
 
BUF->srcipaddr[0] = uip_hostaddr[0];
BUF->srcipaddr[1] = uip_hostaddr[1];
BUF->destipaddr[0] = uip_connr->ripaddr[0];
BUF->destipaddr[1] = uip_connr->ripaddr[1];
 
 
if(uip_connr->tcpstateflags & UIP_STOPPED) {
/* If the connection has issued uip_stop(), we advertise a zero
window so that the remote host will stop sending data. */
BUF->wnd[0] = BUF->wnd[1] = 0;
} else {
BUF->wnd[0] = ((UIP_RECEIVE_WINDOW) >> 8);
BUF->wnd[1] = ((UIP_RECEIVE_WINDOW) & 0xff);
}
 
tcp_send_noconn:
 
BUF->len[0] = (uip_len >> 8);
BUF->len[1] = (uip_len & 0xff);
 
/* Calculate TCP checksum. */
BUF->tcpchksum = 0;
BUF->tcpchksum = ~(uip_tcpchksum());
 
 
#if UIP_UDP
ip_send_nolen:
#endif
 
BUF->vhl = 0x45;
BUF->tos = 0;
BUF->ipoffset[0] = BUF->ipoffset[1] = 0;
BUF->ttl = UIP_TTL;
++ipid;
BUF->ipid[0] = ipid >> 8;
BUF->ipid[1] = ipid & 0xff;
 
/* Calculate IP checksum. */
BUF->ipchksum = 0;
BUF->ipchksum = ~(uip_ipchksum());
 
UIP_STAT(++uip_stat.tcp.sent);
send:
UIP_STAT(++uip_stat.ip.sent);
/* Return and let the caller do the actual transmission. */
return;
drop:
uip_len = 0;
return;
}
/*-----------------------------------------------------------------------------------*/
u16_t
htons(u16_t val)
{
return HTONS(val);
}
/*-----------------------------------------------------------------------------------*/
/** @} */
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/uip.d
0,0 → 1,16
Utilities/uip/uip.o: Utilities/uip/uip.c Utilities/uip/uip.h \
Utilities/uip/uipopt.h Utilities/uip/httpd.h Utilities/uip/uip_arch.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/string.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/_ansi.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/newlib.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/config.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/machine/ieeefp.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/features.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/reent.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/_ansi.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/_types.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/machine/_types.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/machine/_default_types.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/lock.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/include/stddef.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/string.h
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/uip.h
0,0 → 1,1062
/**
* \addtogroup uip
* @{
*/
 
/**
* \file
* Header file for the uIP TCP/IP stack.
* \author Adam Dunkels <adam@dunkels.com>
*
* The uIP TCP/IP stack header file contains definitions for a number
* of C macros that are used by uIP programs as well as internal uIP
* structures, TCP/IP header structures and function declarations.
*
*/
 
 
/*
* Copyright (c) 2001-2003, Adam Dunkels.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote
* products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This file is part of the uIP TCP/IP stack.
*
* $Id: uip.h,v 1.36.2.7 2003/10/07 13:47:51 adam Exp $
*
*/
 
#ifndef __UIP_H__
#define __UIP_H__
 
#include "uipopt.h"
 
/*-----------------------------------------------------------------------------------*/
/* First, the functions that should be called from the
* system. Initialization, the periodic timer and incoming packets are
* handled by the following three functions.
*/
 
/**
* \defgroup uipconffunc uIP configuration functions
* @{
*
* The uIP configuration functions are used for setting run-time
* parameters in uIP such as IP addresses.
*/
 
/**
* Set the IP address of this host.
*
* The IP address is represented as a 4-byte array where the first
* octet of the IP address is put in the first member of the 4-byte
* array.
*
* \param addr A pointer to a 4-byte representation of the IP address.
*
* \hideinitializer
*/
#define uip_sethostaddr(addr) do { uip_hostaddr[0] = addr[0]; \
uip_hostaddr[1] = addr[1]; } while(0)
 
/**
* Get the IP address of this host.
*
* The IP address is represented as a 4-byte array where the first
* octet of the IP address is put in the first member of the 4-byte
* array.
*
* \param addr A pointer to a 4-byte array that will be filled in with
* the currently configured IP address.
*
* \hideinitializer
*/
#define uip_gethostaddr(addr) do { addr[0] = uip_hostaddr[0]; \
addr[1] = uip_hostaddr[1]; } while(0)
 
/** @} */
 
/**
* \defgroup uipinit uIP initialization functions
* @{
*
* The uIP initialization functions are used for booting uIP.
*/
 
/**
* uIP initialization function.
*
* This function should be called at boot up to initilize the uIP
* TCP/IP stack.
*/
void uip_init(void);
 
/** @} */
 
/**
* \defgroup uipdevfunc uIP device driver functions
* @{
*
* These functions are used by a network device driver for interacting
* with uIP.
*/
 
/**
* Process an incoming packet.
*
* This function should be called when the device driver has received
* a packet from the network. The packet from the device driver must
* be present in the uip_buf buffer, and the length of the packet
* should be placed in the uip_len variable.
*
* When the function returns, there may be an outbound packet placed
* in the uip_buf packet buffer. If so, the uip_len variable is set to
* the length of the packet. If no packet is to be sent out, the
* uip_len variable is set to 0.
*
* The usual way of calling the function is presented by the source
* code below.
\code
uip_len = devicedriver_poll();
if(uip_len > 0) {
uip_input();
if(uip_len > 0) {
devicedriver_send();
}
}
\endcode
*
* \note If you are writing a uIP device driver that needs ARP
* (Address Resolution Protocol), e.g., when running uIP over
* Ethernet, you will need to call the uIP ARP code before calling
* this function:
\code
#define BUF ((struct uip_eth_hdr *)&uip_buf[0])
uip_len = ethernet_devicedrver_poll();
if(uip_len > 0) {
if(BUF->type == HTONS(UIP_ETHTYPE_IP)) {
uip_arp_ipin();
uip_input();
if(uip_len > 0) {
uip_arp_out();
ethernet_devicedriver_send();
}
} else if(BUF->type == HTONS(UIP_ETHTYPE_ARP)) {
uip_arp_arpin();
if(uip_len > 0) {
ethernet_devicedriver_send();
}
}
\endcode
*
* \hideinitializer
*/
#define uip_input() uip_process(UIP_DATA)
 
/**
* Periodic processing for a connection identified by its number.
*
* This function does the necessary periodic processing (timers,
* polling) for a uIP TCP conneciton, and should be called when the
* periodic uIP timer goes off. It should be called for every
* connection, regardless of whether they are open of closed.
*
* When the function returns, it may have an outbound packet waiting
* for service in the uIP packet buffer, and if so the uip_len
* variable is set to a value larger than zero. The device driver
* should be called to send out the packet.
*
* The ususal way of calling the function is through a for() loop like
* this:
\code
for(i = 0; i < UIP_CONNS; ++i) {
uip_periodic(i);
if(uip_len > 0) {
devicedriver_send();
}
}
\endcode
*
* \note If you are writing a uIP device driver that needs ARP
* (Address Resolution Protocol), e.g., when running uIP over
* Ethernet, you will need to call the uip_arp_out() function before
* calling the device driver:
\code
for(i = 0; i < UIP_CONNS; ++i) {
uip_periodic(i);
if(uip_len > 0) {
uip_arp_out();
ethernet_devicedriver_send();
}
}
\endcode
*
* \param conn The number of the connection which is to be periodically polled.
*
* \hideinitializer
*/
#define uip_periodic(conn) do { uip_conn = &uip_conns[conn]; \
uip_process(UIP_TIMER); } while (0)
 
/**
* Periodic processing for a connection identified by a pointer to its structure.
*
* Same as uip_periodic() but takes a pointer to the actual uip_conn
* struct instead of an integer as its argument. This function can be
* used to force periodic processing of a specific connection.
*
* \param conn A pointer to the uip_conn struct for the connection to
* be processed.
*
* \hideinitializer
*/
#define uip_periodic_conn(conn) do { uip_conn = conn; \
uip_process(UIP_TIMER); } while (0)
 
#if UIP_UDP
/**
* Periodic processing for a UDP connection identified by its number.
*
* This function is essentially the same as uip_prerioic(), but for
* UDP connections. It is called in a similar fashion as the
* uip_periodic() function:
\code
for(i = 0; i < UIP_UDP_CONNS; i++) {
uip_udp_periodic(i);
if(uip_len > 0) {
devicedriver_send();
}
}
\endcode
*
* \note As for the uip_periodic() function, special care has to be
* taken when using uIP together with ARP and Ethernet:
\code
for(i = 0; i < UIP_UDP_CONNS; i++) {
uip_udp_periodic(i);
if(uip_len > 0) {
uip_arp_out();
ethernet_devicedriver_send();
}
}
\endcode
*
* \param conn The number of the UDP connection to be processed.
*
* \hideinitializer
*/
#define uip_udp_periodic(conn) do { uip_udp_conn = &uip_udp_conns[conn]; \
uip_process(UIP_UDP_TIMER); } while (0)
 
/**
* Periodic processing for a UDP connection identified by a pointer to
* its structure.
*
* Same as uip_udp_periodic() but takes a pointer to the actual
* uip_conn struct instead of an integer as its argument. This
* function can be used to force periodic processing of a specific
* connection.
*
* \param conn A pointer to the uip_udp_conn struct for the connection
* to be processed.
*
* \hideinitializer
*/
#define uip_udp_periodic_conn(conn) do { uip_udp_conn = conn; \
uip_process(UIP_UDP_TIMER); } while (0)
 
 
#endif /* UIP_UDP */
 
/**
* The uIP packet buffer.
*
* The uip_buf array is used to hold incoming and outgoing
* packets. The device driver should place incoming data into this
* buffer. When sending data, the device driver should read the link
* level headers and the TCP/IP headers from this buffer. The size of
* the link level headers is configured by the UIP_LLH_LEN define.
*
* \note The application data need not be placed in this buffer, so
* the device driver must read it from the place pointed to by the
* uip_appdata pointer as illustrated by the following example:
\code
void
devicedriver_send(void)
{
hwsend(&uip_buf[0], UIP_LLH_LEN);
hwsend(&uip_buf[UIP_LLH_LEN], 40);
hwsend(uip_appdata, uip_len - 40 - UIP_LLH_LEN);
}
\endcode
*/
extern u8_t uip_buf[UIP_BUFSIZE+2]; /*_RB_ __attribute__ ((aligned (4)));*/
 
/** @} */
 
/*-----------------------------------------------------------------------------------*/
/* Functions that are used by the uIP application program. Opening and
* closing connections, sending and receiving data, etc. is all
* handled by the functions below.
*/
/**
* \defgroup uipappfunc uIP application functions
* @{
*
* Functions used by an application running of top of uIP.
*/
 
/**
* Start listening to the specified port.
*
* \note Since this function expects the port number in network byte
* order, a conversion using HTONS() or htons() is necessary.
*
\code
uip_listen(HTONS(80));
\endcode
*
* \param port A 16-bit port number in network byte order.
*/
void uip_listen(u16_t port);
 
/**
* Stop listening to the specified port.
*
* \note Since this function expects the port number in network byte
* order, a conversion using HTONS() or htons() is necessary.
*
\code
uip_unlisten(HTONS(80));
\endcode
*
* \param port A 16-bit port number in network byte order.
*/
void uip_unlisten(u16_t port);
 
/**
* Connect to a remote host using TCP.
*
* This function is used to start a new connection to the specified
* port on the specied host. It allocates a new connection identifier,
* sets the connection to the SYN_SENT state and sets the
* retransmission timer to 0. This will cause a TCP SYN segment to be
* sent out the next time this connection is periodically processed,
* which usually is done within 0.5 seconds after the call to
* uip_connect().
*
* \note This function is avaliable only if support for active open
* has been configured by defining UIP_ACTIVE_OPEN to 1 in uipopt.h.
*
* \note Since this function requires the port number to be in network
* byte order, a convertion using HTONS() or htons() is necessary.
*
\code
u16_t ipaddr[2];
 
uip_ipaddr(ipaddr, 192,168,1,2);
uip_connect(ipaddr, HTONS(80));
\endcode
*
* \param ripaddr A pointer to a 4-byte array representing the IP
* address of the remote hot.
*
* \param port A 16-bit port number in network byte order.
*
* \return A pointer to the uIP connection identifier for the new connection,
* or NULL if no connection could be allocated.
*
*/
struct uip_conn *uip_connect(u16_t *ripaddr, u16_t port);
 
 
 
/**
* \internal
*
* Check if a connection has outstanding (i.e., unacknowledged) data.
*
* \param conn A pointer to the uip_conn structure for the connection.
*
* \hideinitializer
*/
#define uip_outstanding(conn) ((conn)->len)
 
/**
* Send data on the current connection.
*
* This function is used to send out a single segment of TCP
* data. Only applications that have been invoked by uIP for event
* processing can send data.
*
* The amount of data that actually is sent out after a call to this
* funcion is determined by the maximum amount of data TCP allows. uIP
* will automatically crop the data so that only the appropriate
* amount of data is sent. The function uip_mss() can be used to query
* uIP for the amount of data that actually will be sent.
*
* \note This function does not guarantee that the sent data will
* arrive at the destination. If the data is lost in the network, the
* application will be invoked with the uip_rexmit() event being
* set. The application will then have to resend the data using this
* function.
*
* \param data A pointer to the data which is to be sent.
*
* \param len The maximum amount of data bytes to be sent.
*
* \hideinitializer
*/
#define uip_send(data, len) do { uip_sappdata = (data); uip_slen = (len);} while(0)
 
/**
* The length of any incoming data that is currently avaliable (if avaliable)
* in the uip_appdata buffer.
*
* The test function uip_data() must first be used to check if there
* is any data available at all.
*
* \hideinitializer
*/
#define uip_datalen() uip_len
 
/**
* The length of any out-of-band data (urgent data) that has arrived
* on the connection.
*
* \note The configuration parameter UIP_URGDATA must be set for this
* function to be enabled.
*
* \hideinitializer
*/
#define uip_urgdatalen() uip_urglen
 
/**
* Close the current connection.
*
* This function will close the current connection in a nice way.
*
* \hideinitializer
*/
#define uip_close() (uip_flags = UIP_CLOSE)
 
/**
* Abort the current connection.
*
* This function will abort (reset) the current connection, and is
* usually used when an error has occured that prevents using the
* uip_close() function.
*
* \hideinitializer
*/
#define uip_abort() (uip_flags = UIP_ABORT)
 
/**
* Tell the sending host to stop sending data.
*
* This function will close our receiver's window so that we stop
* receiving data for the current connection.
*
* \hideinitializer
*/
#define uip_stop() (uip_conn->tcpstateflags |= UIP_STOPPED)
 
/**
* Find out if the current connection has been previously stopped with
* uip_stop().
*
* \hideinitializer
*/
#define uip_stopped(conn) ((conn)->tcpstateflags & UIP_STOPPED)
 
/**
* Restart the current connection, if is has previously been stopped
* with uip_stop().
*
* This function will open the receiver's window again so that we
* start receiving data for the current connection.
*
* \hideinitializer
*/
#define uip_restart() do { uip_flags |= UIP_NEWDATA; \
uip_conn->tcpstateflags &= ~UIP_STOPPED; \
} while(0)
 
 
/* uIP tests that can be made to determine in what state the current
connection is, and what the application function should do. */
 
/**
* Is new incoming data available?
*
* Will reduce to non-zero if there is new data for the application
* present at the uip_appdata pointer. The size of the data is
* avaliable through the uip_len variable.
*
* \hideinitializer
*/
#define uip_newdata() (uip_flags & UIP_NEWDATA)
 
/**
* Has previously sent data been acknowledged?
*
* Will reduce to non-zero if the previously sent data has been
* acknowledged by the remote host. This means that the application
* can send new data.
*
* \hideinitializer
*/
#define uip_acked() (uip_flags & UIP_ACKDATA)
 
/**
* Has the connection just been connected?
*
* Reduces to non-zero if the current connection has been connected to
* a remote host. This will happen both if the connection has been
* actively opened (with uip_connect()) or passively opened (with
* uip_listen()).
*
* \hideinitializer
*/
#define uip_connected() (uip_flags & UIP_CONNECTED)
 
/**
* Has the connection been closed by the other end?
*
* Is non-zero if the connection has been closed by the remote
* host. The application may then do the necessary clean-ups.
*
* \hideinitializer
*/
#define uip_closed() (uip_flags & UIP_CLOSE)
 
/**
* Has the connection been aborted by the other end?
*
* Non-zero if the current connection has been aborted (reset) by the
* remote host.
*
* \hideinitializer
*/
#define uip_aborted() (uip_flags & UIP_ABORT)
 
/**
* Has the connection timed out?
*
* Non-zero if the current connection has been aborted due to too many
* retransmissions.
*
* \hideinitializer
*/
#define uip_timedout() (uip_flags & UIP_TIMEDOUT)
 
/**
* Do we need to retransmit previously data?
*
* Reduces to non-zero if the previously sent data has been lost in
* the network, and the application should retransmit it. The
* application should send the exact same data as it did the last
* time, using the uip_send() function.
*
* \hideinitializer
*/
#define uip_rexmit() (uip_flags & UIP_REXMIT)
 
/**
* Is the connection being polled by uIP?
*
* Is non-zero if the reason the application is invoked is that the
* current connection has been idle for a while and should be
* polled.
*
* The polling event can be used for sending data without having to
* wait for the remote host to send data.
*
* \hideinitializer
*/
#define uip_poll() (uip_flags & UIP_POLL)
 
/**
* Get the initial maxium segment size (MSS) of the current
* connection.
*
* \hideinitializer
*/
#define uip_initialmss() (uip_conn->initialmss)
 
/**
* Get the current maxium segment size that can be sent on the current
* connection.
*
* The current maxiumum segment size that can be sent on the
* connection is computed from the receiver's window and the MSS of
* the connection (which also is available by calling
* uip_initialmss()).
*
* \hideinitializer
*/
#define uip_mss() (uip_conn->mss)
 
/**
* Set up a new UDP connection.
*
* \param ripaddr A pointer to a 4-byte structure representing the IP
* address of the remote host.
*
* \param rport The remote port number in network byte order.
*
* \return The uip_udp_conn structure for the new connection or NULL
* if no connection could be allocated.
*/
struct uip_udp_conn *uip_udp_new(u16_t *ripaddr, u16_t rport);
 
/**
* Removed a UDP connection.
*
* \param conn A pointer to the uip_udp_conn structure for the connection.
*
* \hideinitializer
*/
#define uip_udp_remove(conn) (conn)->lport = 0
 
/**
* Send a UDP datagram of length len on the current connection.
*
* This function can only be called in response to a UDP event (poll
* or newdata). The data must be present in the uip_buf buffer, at the
* place pointed to by the uip_appdata pointer.
*
* \param len The length of the data in the uip_buf buffer.
*
* \hideinitializer
*/
#define uip_udp_send(len) uip_slen = (len)
 
/** @} */
 
/* uIP convenience and converting functions. */
 
/**
* \defgroup uipconvfunc uIP conversion functions
* @{
*
* These functions can be used for converting between different data
* formats used by uIP.
*/
 
/**
* Pack an IP address into a 4-byte array which is used by uIP to
* represent IP addresses.
*
* Example:
\code
u16_t ipaddr[2];
 
uip_ipaddr(&ipaddr, 192,168,1,2);
\endcode
*
* \param addr A pointer to a 4-byte array that will be filled in with
* the IP addres.
* \param addr0 The first octet of the IP address.
* \param addr1 The second octet of the IP address.
* \param addr2 The third octet of the IP address.
* \param addr3 The forth octet of the IP address.
*
* \hideinitializer
*/
#define uip_ipaddr(addr, addr0,addr1,addr2,addr3) do { \
(addr)[0] = HTONS(((addr0) << 8) | (addr1)); \
(addr)[1] = HTONS(((addr2) << 8) | (addr3)); \
} while(0)
 
/**
* Convert 16-bit quantity from host byte order to network byte order.
*
* This macro is primarily used for converting constants from host
* byte order to network byte order. For converting variables to
* network byte order, use the htons() function instead.
*
* \hideinitializer
*/
#ifndef HTONS
# if BYTE_ORDER == BIG_ENDIAN
# define HTONS(n) (n)
# else /* BYTE_ORDER == BIG_ENDIAN */
# define HTONS(n) ((((u16_t)((n) & 0xff)) << 8) | (((n) & 0xff00) >> 8))
# endif /* BYTE_ORDER == BIG_ENDIAN */
#endif /* HTONS */
 
/**
* Convert 16-bit quantity from host byte order to network byte order.
*
* This function is primarily used for converting variables from host
* byte order to network byte order. For converting constants to
* network byte order, use the HTONS() macro instead.
*/
#ifndef htons
u16_t htons(u16_t val);
#endif /* htons */
 
/** @} */
 
/**
* Pointer to the application data in the packet buffer.
*
* This pointer points to the application data when the application is
* called. If the application wishes to send data, the application may
* use this space to write the data into before calling uip_send().
*/
extern volatile u8_t *uip_appdata;
extern volatile u8_t *uip_sappdata;
 
#if UIP_URGDATA > 0
/* u8_t *uip_urgdata:
*
* This pointer points to any urgent data that has been received. Only
* present if compiled with support for urgent data (UIP_URGDATA).
*/
extern volatile u8_t *uip_urgdata;
#endif /* UIP_URGDATA > 0 */
 
 
/* u[8|16]_t uip_len:
*
* When the application is called, uip_len contains the length of any
* new data that has been received from the remote host. The
* application should set this variable to the size of any data that
* the application wishes to send. When the network device driver
* output function is called, uip_len should contain the length of the
* outgoing packet.
*/
extern u16_t uip_len, uip_slen;
 
#if UIP_URGDATA > 0
extern u8_t uip_urglen, uip_surglen;
#endif /* UIP_URGDATA > 0 */
 
 
/**
* Representation of a uIP TCP connection.
*
* The uip_conn structure is used for identifying a connection. All
* but one field in the structure are to be considered read-only by an
* application. The only exception is the appstate field whos purpose
* is to let the application store application-specific state (e.g.,
* file pointers) for the connection. The size of this field is
* configured in the "uipopt.h" header file.
*/
struct uip_conn {
u16_t ripaddr[2]; /**< The IP address of the remote host. */
 
u16_t lport; /**< The local TCP port, in network byte order. */
u16_t rport; /**< The local remote TCP port, in network byte
order. */
 
u8_t rcv_nxt[4]; /**< The sequence number that we expect to
receive next. */
u8_t snd_nxt[4]; /**< The sequence number that was last sent by
us. */
u16_t len; /**< Length of the data that was previously sent. */
u16_t mss; /**< Current maximum segment size for the
connection. */
u16_t initialmss; /**< Initial maximum segment size for the
connection. */
u8_t sa; /**< Retransmission time-out calculation state
variable. */
u8_t sv; /**< Retransmission time-out calculation state
variable. */
u8_t rto; /**< Retransmission time-out. */
u8_t tcpstateflags; /**< TCP state and flags. */
u8_t timer; /**< The retransmission timer. */
u8_t nrtx; /**< The number of retransmissions for the last
segment sent. */
 
/** The application state. */
u8_t appstate[UIP_APPSTATE_SIZE];
};
 
 
/* Pointer to the current connection. */
extern struct uip_conn *uip_conn;
/* The array containing all uIP connections. */
extern struct uip_conn uip_conns[UIP_CONNS];
/**
* \addtogroup uiparch
* @{
*/
 
/**
* 4-byte array used for the 32-bit sequence number calculations.
*/
extern volatile u8_t uip_acc32[4];
 
/** @} */
 
 
#if UIP_UDP
/**
* Representation of a uIP UDP connection.
*/
struct uip_udp_conn {
u16_t ripaddr[2]; /**< The IP address of the remote peer. */
u16_t lport; /**< The local port number in network byte order. */
u16_t rport; /**< The remote port number in network byte order. */
};
 
extern struct uip_udp_conn *uip_udp_conn;
extern struct uip_udp_conn uip_udp_conns[UIP_UDP_CONNS];
#endif /* UIP_UDP */
 
/**
* The structure holding the TCP/IP statistics that are gathered if
* UIP_STATISTICS is set to 1.
*
*/
struct uip_stats {
struct {
uip_stats_t drop; /**< Number of dropped packets at the IP
layer. */
uip_stats_t recv; /**< Number of received packets at the IP
layer. */
uip_stats_t sent; /**< Number of sent packets at the IP
layer. */
uip_stats_t vhlerr; /**< Number of packets dropped due to wrong
IP version or header length. */
uip_stats_t hblenerr; /**< Number of packets dropped due to wrong
IP length, high byte. */
uip_stats_t lblenerr; /**< Number of packets dropped due to wrong
IP length, low byte. */
uip_stats_t fragerr; /**< Number of packets dropped since they
were IP fragments. */
uip_stats_t chkerr; /**< Number of packets dropped due to IP
checksum errors. */
uip_stats_t protoerr; /**< Number of packets dropped since they
were neither ICMP, UDP nor TCP. */
} ip; /**< IP statistics. */
struct {
uip_stats_t drop; /**< Number of dropped ICMP packets. */
uip_stats_t recv; /**< Number of received ICMP packets. */
uip_stats_t sent; /**< Number of sent ICMP packets. */
uip_stats_t typeerr; /**< Number of ICMP packets with a wrong
type. */
} icmp; /**< ICMP statistics. */
struct {
uip_stats_t drop; /**< Number of dropped TCP segments. */
uip_stats_t recv; /**< Number of recived TCP segments. */
uip_stats_t sent; /**< Number of sent TCP segments. */
uip_stats_t chkerr; /**< Number of TCP segments with a bad
checksum. */
uip_stats_t ackerr; /**< Number of TCP segments with a bad ACK
number. */
uip_stats_t rst; /**< Number of recevied TCP RST (reset) segments. */
uip_stats_t rexmit; /**< Number of retransmitted TCP segments. */
uip_stats_t syndrop; /**< Number of dropped SYNs due to too few
connections was avaliable. */
uip_stats_t synrst; /**< Number of SYNs for closed ports,
triggering a RST. */
} tcp; /**< TCP statistics. */
};
 
/**
* The uIP TCP/IP statistics.
*
* This is the variable in which the uIP TCP/IP statistics are gathered.
*/
extern struct uip_stats uip_stat;
 
 
/*-----------------------------------------------------------------------------------*/
/* All the stuff below this point is internal to uIP and should not be
* used directly by an application or by a device driver.
*/
/*-----------------------------------------------------------------------------------*/
/* u8_t uip_flags:
*
* When the application is called, uip_flags will contain the flags
* that are defined in this file. Please read below for more
* infomation.
*/
extern volatile u8_t uip_flags;
 
/* The following flags may be set in the global variable uip_flags
before calling the application callback. The UIP_ACKDATA and
UIP_NEWDATA flags may both be set at the same time, whereas the
others are mutualy exclusive. Note that these flags should *NOT* be
accessed directly, but through the uIP functions/macros. */
 
#define UIP_ACKDATA 1 /* Signifies that the outstanding data was
acked and the application should send
out new data instead of retransmitting
the last data. */
#define UIP_NEWDATA 2 /* Flags the fact that the peer has sent
us new data. */
#define UIP_REXMIT 4 /* Tells the application to retransmit the
data that was last sent. */
#define UIP_POLL 8 /* Used for polling the application, to
check if the application has data that
it wants to send. */
#define UIP_CLOSE 16 /* The remote host has closed the
connection, thus the connection has
gone away. Or the application signals
that it wants to close the
connection. */
#define UIP_ABORT 32 /* The remote host has aborted the
connection, thus the connection has
gone away. Or the application signals
that it wants to abort the
connection. */
#define UIP_CONNECTED 64 /* We have got a connection from a remote
host and have set up a new connection
for it, or an active connection has
been successfully established. */
 
#define UIP_TIMEDOUT 128 /* The connection has been aborted due to
too many retransmissions. */
 
 
/* uip_process(flag):
*
* The actual uIP function which does all the work.
*/
void uip_process(u8_t flag);
 
void udp_appcall(void);
 
/* The following flags are passed as an argument to the uip_process()
function. They are used to distinguish between the two cases where
uip_process() is called. It can be called either because we have
incoming data that should be processed, or because the periodic
timer has fired. */
 
#define UIP_DATA 1 /* Tells uIP that there is incoming data in
the uip_buf buffer. The length of the
data is stored in the global variable
uip_len. */
#define UIP_TIMER 2 /* Tells uIP that the periodic timer has
fired. */
#if UIP_UDP
#define UIP_UDP_TIMER 3
#endif /* UIP_UDP */
 
/* The TCP states used in the uip_conn->tcpstateflags. */
#define CLOSED 0
#define SYN_RCVD 1
#define SYN_SENT 2
#define ESTABLISHED 3
#define FIN_WAIT_1 4
#define FIN_WAIT_2 5
#define CLOSING 6
#define TIME_WAIT 7
#define LAST_ACK 8
#define TS_MASK 15
 
#define UIP_STOPPED 16
 
#define UIP_TCPIP_HLEN 40
 
/* The TCP and IP headers. */
typedef struct {
/* IP header. */
u8_t vhl,
tos,
len[2],
ipid[2],
ipoffset[2],
ttl,
proto;
u16_t ipchksum;
u16_t srcipaddr[2],
destipaddr[2];
 
/* TCP header. */
u16_t srcport,
destport;
u8_t seqno[4],
ackno[4],
tcpoffset,
flags,
wnd[2];
u16_t tcpchksum;
u8_t urgp[2];
u8_t optdata[4];
} uip_tcpip_hdr;
 
/* The ICMP and IP headers. */
typedef struct {
/* IP header. */
u8_t vhl,
tos,
len[2],
ipid[2],
ipoffset[2],
ttl,
proto;
u16_t ipchksum;
u16_t srcipaddr[2],
destipaddr[2];
/* ICMP (echo) header. */
u8_t type, icode;
u16_t icmpchksum;
u16_t id, seqno;
} uip_icmpip_hdr;
 
 
/* The UDP and IP headers. */
typedef struct {
/* IP header. */
u8_t vhl,
tos,
len[2],
ipid[2],
ipoffset[2],
ttl,
proto;
u16_t ipchksum;
u16_t srcipaddr[2],
destipaddr[2];
 
/* UDP header. */
u16_t srcport,
destport;
u16_t udplen;
u16_t udpchksum;
} uip_udpip_hdr;
 
#define UIP_PROTO_ICMP 1
#define UIP_PROTO_TCP 6
#define UIP_PROTO_UDP 17
 
#if UIP_FIXEDADDR
extern const u16_t uip_hostaddr[2];
#else /* UIP_FIXEDADDR */
extern u16_t uip_hostaddr[2];
#endif /* UIP_FIXEDADDR */
 
#endif /* __UIP_H__ */
 
 
/** @} */
 
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/uip_arch.c
0,0 → 1,143
/*
* Copyright (c) 2001, Adam Dunkels.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote
* products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This file is part of the uIP TCP/IP stack.
*
* $Id: uip_arch.c,v 1.2.2.1 2003/10/04 22:54:17 adam Exp $
*
*/
 
 
#include "uip.h"
#include "uip_arch.h"
 
#define BUF ((uip_tcpip_hdr *)&uip_buf[UIP_LLH_LEN])
#define IP_PROTO_TCP 6
 
/*-----------------------------------------------------------------------------------*/
void uip_add32(u8_t *op32, u16_t op16)
{
 
uip_acc32[3] = op32[3] + (op16 & 0xff);
uip_acc32[2] = op32[2] + (op16 >> 8);
uip_acc32[1] = op32[1];
uip_acc32[0] = op32[0];
 
if(uip_acc32[2] < (op16 >> 8)) {
++uip_acc32[1];
if(uip_acc32[1] == 0) {
++uip_acc32[0];
}
}
 
 
if(uip_acc32[3] < (op16 & 0xff)) {
++uip_acc32[2];
if(uip_acc32[2] == 0) {
++uip_acc32[1];
if(uip_acc32[1] == 0) {
++uip_acc32[0];
}
}
}
}
/*-----------------------------------------------------------------------------------*/
u16_t uip_chksum(u16_t *sdata, u16_t len)
{
u16_t acc;
 
for (acc = 0; len > 1; len -= 2) {
u16_t u = ((unsigned char *)sdata)[0] + (((unsigned char *)sdata)[1] << 8);
if ((acc += u) < u) {
/* Overflow, so we add the carry to acc (i.e., increase by
one). */
++acc;
}
++sdata;
}
 
/* add up any odd byte */
if(len == 1) {
acc += htons(((u16_t)(*(u8_t *)sdata)) << 8);
if(acc < htons(((u16_t)(*(u8_t *)sdata)) << 8)) {
++acc;
}
}
 
return acc;
}
/*-----------------------------------------------------------------------------------*/
u16_t uip_ipchksum(void)
{
return uip_chksum((u16_t *)&uip_buf[UIP_LLH_LEN], 20);
}
/*-----------------------------------------------------------------------------------*/
u16_t uip_tcpchksum(void)
{
u16_t hsum, sum;
 
 
/* Compute the checksum of the TCP header. */
hsum = uip_chksum((u16_t *)&uip_buf[20 + UIP_LLH_LEN], 20);
 
/* Compute the checksum of the data in the TCP packet and add it to
the TCP header checksum. */
sum = uip_chksum((u16_t *)uip_appdata,
(u16_t)(((((u16_t)(BUF->len[0]) << 8) + BUF->len[1]) - 40)));
 
if((sum += hsum) < hsum) {
++sum;
}
 
if((sum += BUF->srcipaddr[0]) < BUF->srcipaddr[0]) {
++sum;
}
if((sum += BUF->srcipaddr[1]) < BUF->srcipaddr[1]) {
++sum;
}
if((sum += BUF->destipaddr[0]) < BUF->destipaddr[0]) {
++sum;
}
if((sum += BUF->destipaddr[1]) < BUF->destipaddr[1]) {
++sum;
}
 
if((sum += (u16_t)htons((u16_t)IP_PROTO_TCP)) < (u16_t)htons((u16_t)IP_PROTO_TCP)) {
++sum;
}
 
hsum = (u16_t)htons((((u16_t)(BUF->len[0]) << 8) + BUF->len[1]) - 20);
 
if((sum += hsum) < hsum) {
++sum;
}
 
return sum;
}
 
 
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/uip_arch.d
0,0 → 1,2
Utilities/uip/uip_arch.o: Utilities/uip/uip_arch.c Utilities/uip/uip.h \
Utilities/uip/uipopt.h Utilities/uip/httpd.h Utilities/uip/uip_arch.h
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/uip_arch.h
0,0 → 1,130
/**
* \defgroup uiparch Architecture specific uIP functions
* @{
*
* The functions in the architecture specific module implement the IP
* check sum and 32-bit additions.
*
* The IP checksum calculation is the most computationally expensive
* operation in the TCP/IP stack and it therefore pays off to
* implement this in efficient assembler. The purpose of the uip-arch
* module is to let the checksum functions to be implemented in
* architecture specific assembler.
*
*/
 
/**
* \file
* Declarations of architecture specific functions.
* \author Adam Dunkels <adam@dunkels.com>
*/
 
/*
* Copyright (c) 2001, Adam Dunkels.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote
* products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This file is part of the uIP TCP/IP stack.
*
* $Id: uip_arch.h,v 1.1.2.2 2003/10/06 15:10:22 adam Exp $
*
*/
 
#ifndef __UIP_ARCH_H__
#define __UIP_ARCH_H__
 
#include "uip.h"
 
/**
* Carry out a 32-bit addition.
*
* Because not all architectures for which uIP is intended has native
* 32-bit arithmetic, uIP uses an external C function for doing the
* required 32-bit additions in the TCP protocol processing. This
* function should add the two arguments and place the result in the
* global variable uip_acc32.
*
* \note The 32-bit integer pointed to by the op32 parameter and the
* result in the uip_acc32 variable are in network byte order (big
* endian).
*
* \param op32 A pointer to a 4-byte array representing a 32-bit
* integer in network byte order (big endian).
*
* \param op16 A 16-bit integer in host byte order.
*/
void uip_add32(u8_t *op32, u16_t op16);
 
/**
* Calculate the Internet checksum over a buffer.
*
* The Internet checksum is the one's complement of the one's
* complement sum of all 16-bit words in the buffer.
*
* See RFC1071.
*
* \note This function is not called in the current version of uIP,
* but future versions might make use of it.
*
* \param buf A pointer to the buffer over which the checksum is to be
* computed.
*
* \param len The length of the buffer over which the checksum is to
* be computed.
*
* \return The Internet checksum of the buffer.
*/
u16_t uip_chksum(u16_t *buf, u16_t len);
 
/**
* Calculate the IP header checksum of the packet header in uip_buf.
*
* The IP header checksum is the Internet checksum of the 20 bytes of
* the IP header.
*
* \return The IP header checksum of the IP header in the uip_buf
* buffer.
*/
u16_t uip_ipchksum(void);
 
/**
* Calculate the TCP checksum of the packet in uip_buf and uip_appdata.
*
* The TCP checksum is the Internet checksum of data contents of the
* TCP segment, and a pseudo-header as defined in RFC793.
*
* \note The uip_appdata pointer that points to the packet data may
* point anywhere in memory, so it is not possible to simply calculate
* the Internet checksum of the contents of the uip_buf buffer.
*
* \return The TCP checksum of the TCP segment in uip_buf and pointed
* to by uip_appdata.
*/
u16_t uip_tcpchksum(void);
 
/** @} */
 
#endif /* __UIP_ARCH_H__ */
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/uip_arp.c
0,0 → 1,429
/**
* \addtogroup uip
* @{
*/
 
/**
* \defgroup uiparp uIP Address Resolution Protocol
* @{
*
* The Address Resolution Protocol ARP is used for mapping between IP
* addresses and link level addresses such as the Ethernet MAC
* addresses. ARP uses broadcast queries to ask for the link level
* address of a known IP address and the host which is configured with
* the IP address for which the query was meant, will respond with its
* link level address.
*
* \note This ARP implementation only supports Ethernet.
*/
 
/**
* \file
* Implementation of the ARP Address Resolution Protocol.
* \author Adam Dunkels <adam@dunkels.com>
*
*/
 
/*
* Copyright (c) 2001-2003, Adam Dunkels.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote
* products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This file is part of the uIP TCP/IP stack.
*
* $Id: uip_arp.c,v 1.7.2.3 2003/10/06 22:42:30 adam Exp $
*
*/
 
 
#include "uip_arp.h"
 
#include <string.h>
 
struct arp_hdr {
struct uip_eth_hdr ethhdr;
u16_t hwtype;
u16_t protocol;
u8_t hwlen;
u8_t protolen;
u16_t opcode;
struct uip_eth_addr shwaddr;
u16_t sipaddr[2];
struct uip_eth_addr dhwaddr;
u16_t dipaddr[2];
};
 
struct ethip_hdr {
struct uip_eth_hdr ethhdr;
/* IP header. */
u8_t vhl,
tos,
len[2],
ipid[2],
ipoffset[2],
ttl,
proto;
u16_t ipchksum;
u16_t srcipaddr[2],
destipaddr[2];
};
 
#define ARP_REQUEST 1
#define ARP_REPLY 2
 
#define ARP_HWTYPE_ETH 1
 
struct arp_entry {
u16_t ipaddr[2];
struct uip_eth_addr ethaddr;
u8_t time;
};
 
struct uip_eth_addr uip_ethaddr = {{UIP_ETHADDR0,
UIP_ETHADDR1,
UIP_ETHADDR2,
UIP_ETHADDR3,
UIP_ETHADDR4,
UIP_ETHADDR5}};
 
static struct arp_entry arp_table[UIP_ARPTAB_SIZE];
static u16_t ipaddr[2];
static u8_t i, c;
 
static u8_t arptime;
static u8_t tmpage;
 
#define BUF ((struct arp_hdr *)&uip_buf[0])
#define IPBUF ((struct ethip_hdr *)&uip_buf[0])
/*-----------------------------------------------------------------------------------*/
/**
* Initialize the ARP module.
*
*/
/*-----------------------------------------------------------------------------------*/
void
uip_arp_init(void)
{
for(i = 0; i < UIP_ARPTAB_SIZE; ++i) {
memset(arp_table[i].ipaddr, 0, 4);
}
}
/*-----------------------------------------------------------------------------------*/
/**
* Periodic ARP processing function.
*
* This function performs periodic timer processing in the ARP module
* and should be called at regular intervals. The recommended interval
* is 10 seconds between the calls.
*
*/
/*-----------------------------------------------------------------------------------*/
void
uip_arp_timer(void)
{
struct arp_entry *tabptr;
 
++arptime;
for(i = 0; i < UIP_ARPTAB_SIZE; ++i) {
tabptr = &arp_table[i];
if((tabptr->ipaddr[0] | tabptr->ipaddr[1]) != 0 &&
arptime - tabptr->time >= UIP_ARP_MAXAGE) {
memset(tabptr->ipaddr, 0, 4);
}
}
 
}
/*-----------------------------------------------------------------------------------*/
static void
uip_arp_update(u16_t *ipaddr, struct uip_eth_addr *ethaddr)
{
register struct arp_entry *tabptr;
/* Walk through the ARP mapping table and try to find an entry to
update. If none is found, the IP -> MAC address mapping is
inserted in the ARP table. */
for(i = 0; i < UIP_ARPTAB_SIZE; ++i) {
 
tabptr = &arp_table[i];
/* Only check those entries that are actually in use. */
if(tabptr->ipaddr[0] != 0 &&
tabptr->ipaddr[1] != 0) {
 
/* Check if the source IP address of the incoming packet matches
the IP address in this ARP table entry. */
if(ipaddr[0] == tabptr->ipaddr[0] &&
ipaddr[1] == tabptr->ipaddr[1]) {
/* An old entry found, update this and return. */
memcpy(tabptr->ethaddr.addr, ethaddr->addr, 6);
tabptr->time = arptime;
 
return;
}
}
}
 
/* If we get here, no existing ARP table entry was found, so we
create one. */
 
/* First, we try to find an unused entry in the ARP table. */
for(i = 0; i < UIP_ARPTAB_SIZE; ++i) {
tabptr = &arp_table[i];
if(tabptr->ipaddr[0] == 0 &&
tabptr->ipaddr[1] == 0) {
break;
}
}
 
/* If no unused entry is found, we try to find the oldest entry and
throw it away. */
if(i == UIP_ARPTAB_SIZE) {
tmpage = 0;
c = 0;
for(i = 0; i < UIP_ARPTAB_SIZE; ++i) {
tabptr = &arp_table[i];
if(arptime - tabptr->time > tmpage) {
tmpage = arptime - tabptr->time;
c = i;
}
}
i = c;
}
 
/* Now, i is the ARP table entry which we will fill with the new
information. */
memcpy(tabptr->ipaddr, ipaddr, 4);
memcpy(tabptr->ethaddr.addr, ethaddr->addr, 6);
tabptr->time = arptime;
}
/*-----------------------------------------------------------------------------------*/
/**
* ARP processing for incoming IP packets
*
* This function should be called by the device driver when an IP
* packet has been received. The function will check if the address is
* in the ARP cache, and if so the ARP cache entry will be
* refreshed. If no ARP cache entry was found, a new one is created.
*
* This function expects an IP packet with a prepended Ethernet header
* in the uip_buf[] buffer, and the length of the packet in the global
* variable uip_len.
*/
/*-----------------------------------------------------------------------------------*/
void
uip_arp_ipin(void)
{
uip_len -= sizeof(struct uip_eth_hdr);
/* Only insert/update an entry if the source IP address of the
incoming IP packet comes from a host on the local network. */
if((IPBUF->srcipaddr[0] & uip_arp_netmask[0]) !=
(uip_hostaddr[0] & uip_arp_netmask[0])) {
return;
}
if((IPBUF->srcipaddr[1] & uip_arp_netmask[1]) !=
(uip_hostaddr[1] & uip_arp_netmask[1])) {
return;
}
uip_arp_update(IPBUF->srcipaddr, &(IPBUF->ethhdr.src));
 
return;
}
/*-----------------------------------------------------------------------------------*/
/**
* ARP processing for incoming ARP packets.
*
* This function should be called by the device driver when an ARP
* packet has been received. The function will act differently
* depending on the ARP packet type: if it is a reply for a request
* that we previously sent out, the ARP cache will be filled in with
* the values from the ARP reply. If the incoming ARP packet is an ARP
* request for our IP address, an ARP reply packet is created and put
* into the uip_buf[] buffer.
*
* When the function returns, the value of the global variable uip_len
* indicates whether the device driver should send out a packet or
* not. If uip_len is zero, no packet should be sent. If uip_len is
* non-zero, it contains the length of the outbound packet that is
* present in the uip_buf[] buffer.
*
* This function expects an ARP packet with a prepended Ethernet
* header in the uip_buf[] buffer, and the length of the packet in the
* global variable uip_len.
*/
/*-----------------------------------------------------------------------------------*/
typedef struct arp_hdr aht;
 
void
uip_arp_arpin(void)
{
int ul;
 
if(uip_len < sizeof(struct arp_hdr)) {
uip_len = 0;
return;
}
 
uip_len = 0;
 
switch(BUF->opcode) {
case HTONS(ARP_REQUEST):
/* ARP request. If it asked for our address, we send out a
reply. */
if(BUF->dipaddr[0] == uip_hostaddr[0] &&
BUF->dipaddr[1] == uip_hostaddr[1]) {
/* The reply opcode is 2. */
BUF->opcode = HTONS(2);
 
memcpy(BUF->dhwaddr.addr, BUF->shwaddr.addr, 6);
memcpy(BUF->shwaddr.addr, uip_ethaddr.addr, 6);
memcpy(BUF->ethhdr.src.addr, uip_ethaddr.addr, 6);
memcpy(BUF->ethhdr.dest.addr, BUF->dhwaddr.addr, 6);
 
BUF->dipaddr[0] = BUF->sipaddr[0];
BUF->dipaddr[1] = BUF->sipaddr[1];
BUF->sipaddr[0] = uip_hostaddr[0];
BUF->sipaddr[1] = uip_hostaddr[1];
 
ul = BUF->hwlen;
BUF->ethhdr.type = HTONS(UIP_ETHTYPE_ARP);
uip_len = sizeof(struct arp_hdr);
}
break;
case HTONS(ARP_REPLY):
/* ARP reply. We insert or update the ARP table if it was meant
for us. */
if(BUF->dipaddr[0] == uip_hostaddr[0] &&
BUF->dipaddr[1] == uip_hostaddr[1]) {
 
uip_arp_update(BUF->sipaddr, &BUF->shwaddr);
}
break;
}
 
( void ) ul;
 
return;
}
/*-----------------------------------------------------------------------------------*/
/**
* Prepend Ethernet header to an outbound IP packet and see if we need
* to send out an ARP request.
*
* This function should be called before sending out an IP packet. The
* function checks the destination IP address of the IP packet to see
* what Ethernet MAC address that should be used as a destination MAC
* address on the Ethernet.
*
* If the destination IP address is in the local network (determined
* by logical ANDing of netmask and our IP address), the function
* checks the ARP cache to see if an entry for the destination IP
* address is found. If so, an Ethernet header is prepended and the
* function returns. If no ARP cache entry is found for the
* destination IP address, the packet in the uip_buf[] is replaced by
* an ARP request packet for the IP address. The IP packet is dropped
* and it is assumed that they higher level protocols (e.g., TCP)
* eventually will retransmit the dropped packet.
*
* If the destination IP address is not on the local network, the IP
* address of the default router is used instead.
*
* When the function returns, a packet is present in the uip_buf[]
* buffer, and the length of the packet is in the global variable
* uip_len.
*/
/*-----------------------------------------------------------------------------------*/
void
uip_arp_out(void)
{
struct arp_entry *tabptr;
/* Find the destination IP address in the ARP table and construct
the Ethernet header. If the destination IP addres isn't on the
local network, we use the default router's IP address instead.
 
If not ARP table entry is found, we overwrite the original IP
packet with an ARP request for the IP address. */
 
/* Check if the destination address is on the local network. */
if((IPBUF->destipaddr[0] & uip_arp_netmask[0]) !=
(uip_hostaddr[0] & uip_arp_netmask[0]) ||
(IPBUF->destipaddr[1] & uip_arp_netmask[1]) !=
(uip_hostaddr[1] & uip_arp_netmask[1])) {
/* Destination address was not on the local network, so we need to
use the default router's IP address instead of the destination
address when determining the MAC address. */
ipaddr[0] = uip_arp_draddr[0];
ipaddr[1] = uip_arp_draddr[1];
} else {
/* Else, we use the destination IP address. */
ipaddr[0] = IPBUF->destipaddr[0];
ipaddr[1] = IPBUF->destipaddr[1];
}
 
for(i = 0; i < UIP_ARPTAB_SIZE; ++i) {
tabptr = &arp_table[i];
if(ipaddr[0] == tabptr->ipaddr[0] &&
ipaddr[1] == tabptr->ipaddr[1])
break;
}
 
if(i == UIP_ARPTAB_SIZE) {
/* The destination address was not in our ARP table, so we
overwrite the IP packet with an ARP request. */
 
memset(BUF->ethhdr.dest.addr, 0xff, 6);
memset(BUF->dhwaddr.addr, 0x00, 6);
memcpy(BUF->ethhdr.src.addr, uip_ethaddr.addr, 6);
memcpy(BUF->shwaddr.addr, uip_ethaddr.addr, 6);
 
BUF->dipaddr[0] = ipaddr[0];
BUF->dipaddr[1] = ipaddr[1];
BUF->sipaddr[0] = uip_hostaddr[0];
BUF->sipaddr[1] = uip_hostaddr[1];
BUF->opcode = HTONS(ARP_REQUEST); /* ARP request. */
BUF->hwtype = HTONS(ARP_HWTYPE_ETH);
BUF->protocol = HTONS(UIP_ETHTYPE_IP);
BUF->hwlen = 6;
BUF->protolen = 4;
BUF->ethhdr.type = HTONS(UIP_ETHTYPE_ARP);
 
uip_appdata = &uip_buf[40 + UIP_LLH_LEN];
 
uip_len = sizeof(struct arp_hdr);
return;
}
 
/* Build an ethernet header. */
memcpy(IPBUF->ethhdr.dest.addr, tabptr->ethaddr.addr, 6);
memcpy(IPBUF->ethhdr.src.addr, uip_ethaddr.addr, 6);
 
IPBUF->ethhdr.type = HTONS(UIP_ETHTYPE_IP);
 
uip_len += sizeof(struct uip_eth_hdr);
}
/*-----------------------------------------------------------------------------------*/
 
/** @} */
/** @} */
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/uip_arp.d
0,0 → 1,16
Utilities/uip/uip_arp.o: Utilities/uip/uip_arp.c Utilities/uip/uip_arp.h \
Utilities/uip/uip.h Utilities/uip/uipopt.h Utilities/uip/httpd.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/string.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/_ansi.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/newlib.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/config.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/machine/ieeefp.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/features.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/reent.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/_ansi.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/_types.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/machine/_types.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/machine/_default_types.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/lock.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/include/stddef.h \
/usr/bin/../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/sys/string.h
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/uip_arp.h
0,0 → 1,206
/**
* \addtogroup uip
* @{
*/
 
/**
* \addtogroup uiparp
* @{
*/
 
/**
* \file
* Macros and definitions for the ARP module.
* \author Adam Dunkels <adam@dunkels.com>
*/
 
 
/*
* Copyright (c) 2001-2003, Adam Dunkels.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote
* products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This file is part of the uIP TCP/IP stack.
*
* $Id: uip_arp.h,v 1.3.2.2 2003/10/06 15:10:22 adam Exp $
*
*/
 
#ifndef __UIP_ARP_H__
#define __UIP_ARP_H__
 
#include "uip.h"
 
 
/**
* Representation of a 48-bit Ethernet address.
*/
struct uip_eth_addr {
u8_t addr[6];
} /*_RB_ __attribute__ ((packed, aligned (1))) */;
 
extern struct uip_eth_addr uip_ethaddr;
 
/**
* The Ethernet header.
*/
typedef struct uip_eth_hdr {
struct uip_eth_addr dest;
struct uip_eth_addr src;
u16_t type;
}uip_eth_hdr /*_RB_ __attribute__ ((packed)) */;
 
#define UIP_ETHTYPE_ARP 0x0806
#define UIP_ETHTYPE_IP 0x0800
#define UIP_ETHTYPE_IP6 0x86dd
 
 
/* The uip_arp_init() function must be called before any of the other
ARP functions. */
void uip_arp_init(void);
 
/* The uip_arp_ipin() function should be called whenever an IP packet
arrives from the Ethernet. This function refreshes the ARP table or
inserts a new mapping if none exists. The function assumes that an
IP packet with an Ethernet header is present in the uip_buf buffer
and that the length of the packet is in the uip_len variable. */
void uip_arp_ipin(void);
 
/* The uip_arp_arpin() should be called when an ARP packet is received
by the Ethernet driver. This function also assumes that the
Ethernet frame is present in the uip_buf buffer. When the
uip_arp_arpin() function returns, the contents of the uip_buf
buffer should be sent out on the Ethernet if the uip_len variable
is > 0. */
void uip_arp_arpin(void);
 
/* The uip_arp_out() function should be called when an IP packet
should be sent out on the Ethernet. This function creates an
Ethernet header before the IP header in the uip_buf buffer. The
Ethernet header will have the correct Ethernet MAC destination
address filled in if an ARP table entry for the destination IP
address (or the IP address of the default router) is present. If no
such table entry is found, the IP packet is overwritten with an ARP
request and we rely on TCP to retransmit the packet that was
overwritten. In any case, the uip_len variable holds the length of
the Ethernet frame that should be transmitted. */
void uip_arp_out(void);
 
/* The uip_arp_timer() function should be called every ten seconds. It
is responsible for flushing old entries in the ARP table. */
void uip_arp_timer(void);
 
/** @} */
 
/**
* \addtogroup uipconffunc
* @{
*/
 
/**
* Set the default router's IP address.
*
* \param addr A pointer to a 4-byte array containing the IP address
* of the default router.
*
* \hideinitializer
*/
#define uip_setdraddr(addr) do { uip_arp_draddr[0] = addr[0]; \
uip_arp_draddr[1] = addr[1]; } while(0)
 
/**
* Set the netmask.
*
* \param addr A pointer to a 4-byte array containing the IP address
* of the netmask.
*
* \hideinitializer
*/
#define uip_setnetmask(addr) do { uip_arp_netmask[0] = addr[0]; \
uip_arp_netmask[1] = addr[1]; } while(0)
 
 
/**
* Get the default router's IP address.
*
* \param addr A pointer to a 4-byte array that will be filled in with
* the IP address of the default router.
*
* \hideinitializer
*/
#define uip_getdraddr(addr) do { addr[0] = uip_arp_draddr[0]; \
addr[1] = uip_arp_draddr[1]; } while(0)
 
/**
* Get the netmask.
*
* \param addr A pointer to a 4-byte array that will be filled in with
* the value of the netmask.
*
* \hideinitializer
*/
#define uip_getnetmask(addr) do { addr[0] = uip_arp_netmask[0]; \
addr[1] = uip_arp_netmask[1]; } while(0)
 
 
/**
* Specifiy the Ethernet MAC address.
*
* The ARP code needs to know the MAC address of the Ethernet card in
* order to be able to respond to ARP queries and to generate working
* Ethernet headers.
*
* \note This macro only specifies the Ethernet MAC address to the ARP
* code. It cannot be used to change the MAC address of the Ethernet
* card.
*
* \param eaddr A pointer to a struct uip_eth_addr containing the
* Ethernet MAC address of the Ethernet card.
*
* \hideinitializer
*/
#define uip_setethaddr(eaddr) do {uip_ethaddr.addr[0] = eaddr.addr[0]; \
uip_ethaddr.addr[1] = eaddr.addr[1];\
uip_ethaddr.addr[2] = eaddr.addr[2];\
uip_ethaddr.addr[3] = eaddr.addr[3];\
uip_ethaddr.addr[4] = eaddr.addr[4];\
uip_ethaddr.addr[5] = eaddr.addr[5];} while(0)
 
/** @} */
 
/**
* \internal Internal variables that are set using the macros
* uip_setdraddr and uip_setnetmask.
*/
#if UIP_FIXEDADDR > 0
extern const u16_t uip_arp_draddr[2], uip_arp_netmask[2];
#else
extern u16_t uip_arp_draddr[2], uip_arp_netmask[2];
#endif
 
#endif /* __UIP_ARP_H__ */
 
 
/Modules/CommSerial/ETH01A/SW/STM32F107_ETH_uIP/Utilities/uip/uipopt.h
0,0 → 1,560
/**
* \defgroup uipopt Configuration options for uIP
* @{
*
* uIP is configured using the per-project configuration file
* "uipopt.h". This file contains all compile-time options for uIP and
* should be tweaked to match each specific project. The uIP
* distribution contains a documented example "uipopt.h" that can be
* copied and modified for each project.
*/
 
/**
* \file
* Configuration options for uIP.
* \author Adam Dunkels <adam@dunkels.com>
*
* This file is used for tweaking various configuration options for
* uIP. You should make a copy of this file into one of your project's
* directories instead of editing this example "uipopt.h" file that
* comes with the uIP distribution.
*/
 
/*
* Copyright (c) 2001-2003, Adam Dunkels.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote
* products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This file is part of the uIP TCP/IP stack.
*
* $Id: uipopt.h,v 1.16.2.5 2003/10/07 13:22:51 adam Exp $
*
*/
 
#ifndef __UIPOPT_H__
#define __UIPOPT_H__
 
/*------------------------------------------------------------------------------*/
/**
* \defgroup uipopttypedef uIP type definitions
* @{
*/
 
/**
* The 8-bit unsigned data type.
*
* This may have to be tweaked for your particular compiler. "unsigned
* char" works for most compilers.
*/
typedef unsigned char u8_t;
 
/**
* The 16-bit unsigned data type.
*
* This may have to be tweaked for your particular compiler. "unsigned
* short" works for most compilers.
*/
typedef unsigned short u16_t;
 
/**
* The statistics data type.
*
* This datatype determines how high the statistics counters are able
* to count.
*/
typedef unsigned short uip_stats_t;
 
/** @} */
 
/*------------------------------------------------------------------------------*/
 
/**
* \defgroup uipoptstaticconf Static configuration options
* @{
*
* These configuration options can be used for setting the IP address
* settings statically, but only if UIP_FIXEDADDR is set to 1. The
* configuration options for a specific node includes IP address,
* netmask and default router as well as the Ethernet address. The
* netmask, default router and Ethernet address are appliciable only
* if uIP should be run over Ethernet.
*
* All of these should be changed to suit your project.
*/
 
/**
* Determines if uIP should use a fixed IP address or not.
*
* If uIP should use a fixed IP address, the settings are set in the
* uipopt.h file. If not, the macros uip_sethostaddr(),
* uip_setdraddr() and uip_setnetmask() should be used instead.
*
* \hideinitializer
*/
#define UIP_FIXEDADDR 1
 
/**
* Ping IP address asignment.
*
* uIP uses a "ping" packets for setting its own IP address if this
* option is set. If so, uIP will start with an empty IP address and
* the destination IP address of the first incoming "ping" (ICMP echo)
* packet will be used for setting the hosts IP address.
*
* \note This works only if UIP_FIXEDADDR is 0.
*
* \hideinitializer
*/
#define UIP_PINGADDRCONF 0
 
 
#define UIP_IPADDR0 192U /**< The first octet of the IP address of
this uIP node, if UIP_FIXEDADDR is
1. \hideinitializer */
#define UIP_IPADDR1 168U /**< The second octet of the IP address of
this uIP node, if UIP_FIXEDADDR is
1. \hideinitializer */
#define UIP_IPADDR2 0U /**< The third octet of the IP address of
this uIP node, if UIP_FIXEDADDR is
1. \hideinitializer */
#define UIP_IPADDR3 8U /**< The fourth octet of the IP address of
this uIP node, if UIP_FIXEDADDR is
1. \hideinitializer */
 
#define UIP_NETMASK0 255 /**< The first octet of the netmask of
this uIP node, if UIP_FIXEDADDR is
1. \hideinitializer */
#define UIP_NETMASK1 255 /**< The second octet of the netmask of
this uIP node, if UIP_FIXEDADDR is
1. \hideinitializer */
#define UIP_NETMASK2 255 /**< The third octet of the netmask of
this uIP node, if UIP_FIXEDADDR is
1. \hideinitializer */
#define UIP_NETMASK3 0 /**< The fourth octet of the netmask of
this uIP node, if UIP_FIXEDADDR is
1. \hideinitializer */
 
#define UIP_DRIPADDR0 192 /**< The first octet of the IP address of
the default router, if UIP_FIXEDADDR is
1. \hideinitializer */
#define UIP_DRIPADDR1 168 /**< The second octet of the IP address of
the default router, if UIP_FIXEDADDR is
1. \hideinitializer */
#define UIP_DRIPADDR2 0 /**< The third octet of the IP address of
the default router, if UIP_FIXEDADDR is
1. \hideinitializer */
#define UIP_DRIPADDR3 1 /**< The fourth octet of the IP address of
the default router, if UIP_FIXEDADDR is
1. \hideinitializer */
 
 
 
/**
* Specifies if the uIP ARP module should be compiled with a fixed
* Ethernet MAC address or not.
*
* If this configuration option is 0, the macro uip_setethaddr() can
* be used to specify the Ethernet address at run-time.
*
* \hideinitializer
*/
#define UIP_FIXEDETHADDR 1
 
#define UIP_ETHADDR0 0x00 /**< The first octet of the Ethernet
address if UIP_FIXEDETHADDR is
1. \hideinitializer */
#define UIP_ETHADDR1 0x02 /**< The second octet of the Ethernet
address if UIP_FIXEDETHADDR is
1. \hideinitializer */
#define UIP_ETHADDR2 0x04 /**< The third octet of the Ethernet
address if UIP_FIXEDETHADDR is
1. \hideinitializer */
#define UIP_ETHADDR3 0x08 /**< The fourth octet of the Ethernet
address if UIP_FIXEDETHADDR is
1. \hideinitializer */
#define UIP_ETHADDR4 0x0A /**< The fifth octet of the Ethernet
address if UIP_FIXEDETHADDR is
1. \hideinitializer */
#define UIP_ETHADDR5 0x0D /**< The sixth octet of the Ethernet
address if UIP_FIXEDETHADDR is
1. \hideinitializer */
 
/** @} */
/*------------------------------------------------------------------------------*/
/**
* \defgroup uipoptip IP configuration options
* @{
*
*/
/**
* The IP TTL (time to live) of IP packets sent by uIP.
*
* This should normally not be changed.
*/
#define UIP_TTL 255
 
/**
* Turn on support for IP packet reassembly.
*
* uIP supports reassembly of fragmented IP packets. This features
* requires an additonal amount of RAM to hold the reassembly buffer
* and the reassembly code size is approximately 700 bytes. The
* reassembly buffer is of the same size as the uip_buf buffer
* (configured by UIP_BUFSIZE).
*
* \note IP packet reassembly is not heavily tested.
*
* \hideinitializer
*/
#define UIP_REASSEMBLY 1
 
/**
* The maximum time an IP fragment should wait in the reassembly
* buffer before it is dropped.
*
*/
#define UIP_REASS_MAXAGE 40
 
/** @} */
 
/*------------------------------------------------------------------------------*/
/**
* \defgroup uipoptudp UDP configuration options
* @{
*
* \note The UDP support in uIP is still not entirely complete; there
* is no support for sending or receiving broadcast or multicast
* packets, but it works well enough to support a number of vital
* applications such as DNS queries, though
*/
 
/**
* Toggles wether UDP support should be compiled in or not.
*
* \hideinitializer
*/
#define UIP_UDP 1
 
/**
* Toggles if UDP checksums should be used or not.
*
* \note Support for UDP checksums is currently not included in uIP,
* so this option has no function.
*
* \hideinitializer
*/
#define UIP_UDP_CHECKSUMS 0
 
/**
* The maximum amount of concurrent UDP connections.
*
* \hideinitializer
*/
#define UIP_UDP_CONNS 2
 
/**
* The name of the function that should be called when UDP datagrams arrive.
*
* \hideinitializer
*/
#define UIP_UDP_APPCALL udp_appcall
 
/** @} */
/*------------------------------------------------------------------------------*/
/**
* \defgroup uipopttcp TCP configuration options
* @{
*/
 
/**
* Determines if support for opening connections from uIP should be
* compiled in.
*
* If the applications that are running on top of uIP for this project
* do not need to open outgoing TCP connections, this configration
* option can be turned off to reduce the code size of uIP.
*
* \hideinitializer
*/
#define UIP_ACTIVE_OPEN 1
 
/**
* The maximum number of simultaneously open TCP connections.
*
* Since the TCP connections are statically allocated, turning this
* configuration knob down results in less RAM used. Each TCP
* connection requires approximatly 30 bytes of memory.
*
* \hideinitializer
*/
#define UIP_CONNS 25
 
/**
* The maximum number of simultaneously listening TCP ports.
*
* Each listening TCP port requires 2 bytes of memory.
*
* \hideinitializer
*/
#define UIP_LISTENPORTS 10
 
/**
* The size of the advertised receiver's window.
*
* Should be set low (i.e., to the size of the uip_buf buffer) is the
* application is slow to process incoming data, or high (32768 bytes)
* if the application processes data quickly.
*
* \hideinitializer
*/
#define UIP_RECEIVE_WINDOW 32768
 
/**
* Determines if support for TCP urgent data notification should be
* compiled in.
*
* Urgent data (out-of-band data) is a rarely used TCP feature that
* very seldom would be required.
*
* \hideinitializer
*/
#define UIP_URGDATA 1
 
/**
* The initial retransmission timeout counted in timer pulses.
*
* This should not be changed.
*/
#define UIP_RTO 3
 
/**
* The maximum number of times a segment should be retransmitted
* before the connection should be aborted.
*
* This should not be changed.
*/
#define UIP_MAXRTX 8
 
/**
* The maximum number of times a SYN segment should be retransmitted
* before a connection request should be deemed to have been
* unsuccessful.
*
* This should not need to be changed.
*/
#define UIP_MAXSYNRTX 3
 
/**
* The TCP maximum segment size.
*
* This is should not be to set to more than UIP_BUFSIZE - UIP_LLH_LEN - 40.
*/
#define UIP_TCP_MSS (UIP_BUFSIZE - UIP_LLH_LEN - 40)
 
/**
* How long a connection should stay in the TIME_WAIT state.
*
* This configiration option has no real implication, and it should be
* left untouched.
*/
#define UIP_TIME_WAIT_TIMEOUT 120
 
 
/** @} */
/*------------------------------------------------------------------------------*/
/**
* \defgroup uipoptarp ARP configuration options
* @{
*/
 
/**
* The size of the ARP table.
*
* This option should be set to a larger value if this uIP node will
* have many connections from the local network.
*
* \hideinitializer
*/
#define UIP_ARPTAB_SIZE 8
 
/**
* The maxium age of ARP table entries measured in 10ths of seconds.
*
* An UIP_ARP_MAXAGE of 120 corresponds to 20 minutes (BSD
* default).
*/
#define UIP_ARP_MAXAGE 120
 
/** @} */
 
/*------------------------------------------------------------------------------*/
 
/**
* \defgroup uipoptgeneral General configuration options
* @{
*/
 
/**
* The size of the uIP packet buffer.
*
* The uIP packet buffer should not be smaller than 60 bytes, and does
* not need to be larger than 1500 bytes. Lower size results in lower
* TCP throughput, larger size results in higher TCP throughput.
*
* \hideinitializer
*/
#define UIP_BUFSIZE 1500
 
 
/**
* Determines if statistics support should be compiled in.
*
* The statistics is useful for debugging and to show the user.
*
* \hideinitializer
*/
#define UIP_STATISTICS 1
 
/**
* Determines if logging of certain events should be compiled in.
*
* This is useful mostly for debugging. The function uip_log()
* must be implemented to suit the architecture of the project, if
* logging is turned on.
*
* \hideinitializer
*/
#define UIP_LOGGING 0
 
/**
* Print out a uIP log message.
*
* This function must be implemented by the module that uses uIP, and
* is called by uIP whenever a log message is generated.
*/
void uip_log(char *msg);
 
/**
* The link level header length.
*
* This is the offset into the uip_buf where the IP header can be
* found. For Ethernet, this should be set to 14. For SLIP, this
* should be set to 0.
*
* \hideinitializer
*/
#define UIP_LLH_LEN 14
 
 
/** @} */
/*------------------------------------------------------------------------------*/
/**
* \defgroup uipoptcpu CPU architecture configuration
* @{
*
* The CPU architecture configuration is where the endianess of the
* CPU on which uIP is to be run is specified. Most CPUs today are
* little endian, and the most notable exception are the Motorolas
* which are big endian. The BYTE_ORDER macro should be changed to
* reflect the CPU architecture on which uIP is to be run.
*/
#ifndef LITTLE_ENDIAN
#define LITTLE_ENDIAN 3412
#endif /* LITTLE_ENDIAN */
#ifndef BIG_ENDIAN
#define BIG_ENDIAN 1234
#endif /* BIGE_ENDIAN */
 
/**
* The byte order of the CPU architecture on which uIP is to be run.
*
* This option can be either BIG_ENDIAN (Motorola byte order) or
* LITTLE_ENDIAN (Intel byte order).
*
* \hideinitializer
*/
#ifndef BYTE_ORDER
#define BYTE_ORDER LITTLE_ENDIAN
#endif /* BYTE_ORDER */
 
/** @} */
/*------------------------------------------------------------------------------*/
 
/**
* \defgroup uipoptapp Appication specific configurations
* @{
*
* An uIP application is implemented using a single application
* function that is called by uIP whenever a TCP/IP event occurs. The
* name of this function must be registered with uIP at compile time
* using the UIP_APPCALL definition.
*
* uIP applications can store the application state within the
* uip_conn structure by specifying the size of the application
* structure with the UIP_APPSTATE_SIZE macro.
*
* The file containing the definitions must be included in the
* uipopt.h file.
*
* The following example illustrates how this can look.
\code
 
void httpd_appcall(void);
#define UIP_APPCALL httpd_appcall
 
struct httpd_state {
u8_t state;
u16_t count;
char *dataptr;
char *script;
};
#define UIP_APPSTATE_SIZE (sizeof(struct httpd_state))
\endcode
*/
 
/**
* \var #define UIP_APPCALL
*
* The name of the application function that uIP should call in
* response to TCP/IP events.
*
*/
 
/**
* \var #define UIP_APPSTATE_SIZE
*
* The size of the application state that is to be stored in the
* uip_conn structure.
*/
/** @} */
 
/* Include the header file for the application program that should be
used. If you don't use the example web server, you should change
this. */
#include "httpd.h"
 
 
#endif /* __UIPOPT_H__ */