diff --git a/.gitignore b/.gitignore
index e818d98..b762c35 100644
--- a/.gitignore
+++ b/.gitignore
@@ -31,6 +31,18 @@
*.out
*.app
+# Log files
+*.log
+
+# Metadata directories
+.metadata/
+project/.metadata
+
+# Test files
+project/Core/Inc/stlogo.h
+project/Core/Inc/test_img.h
+project/Core/Inc/test_data.h
+
project/Debug/
project/.idea/
@@ -43,4 +55,6 @@ project/.mxproject
project/project.launch
-project/.cproject
\ No newline at end of file
+project/Scripts
+Scripts/
+project/project\ Debug.launch
\ No newline at end of file
diff --git a/docs/lcd_api.md b/docs/lcd_api.md
new file mode 100644
index 0000000..32c46ae
--- /dev/null
+++ b/docs/lcd_api.md
@@ -0,0 +1,92 @@
+# LCD API
+
+## Introduction
+
+The LCD API can be used to display BMP images or text onto the LCD screen.
+At the moment of writing, only BMP's in C array's are supported.
+Supported color schemes for BMP's are ARGB8888, RGB565, RGB888.
+Displayed text that is exceeds the LCD width size, will be wrapped onto the next line and a '-' character will be injected if the wrap occurs within a word.
+
+## Usage of LCD API
+### Generating BMP C header files
+#### Resizing images
+To resize an image to the desired size (width and height), one can use an image editor such as Photoshop, GIMP, ImageMagick, ... .
+
+For example, using ImageMagick:
+```bash
+convert in.png -resize 10% BMP3:out.bmp
+#OR (depending on the version of ImageMagick)
+magick in.png -resize 50x50 out.png
+```
+
+The resize option can both be used to resize in percentages or in pixels.
+
+The BMP3 option is used to convert the PNG to Bitmap version 3.0 (note that the BMP header will still be present in the output image).
+
+#### Generating the C array
+To easily generate a BMP C array (in the desired color scheme) from an image, [lv_img_conv](https://github.com/lvgl/lv_img_conv) can be used.
+
+See the installation instructions on Github or use the [online version](https://lvgl.io/tools/imageconverter).
+
+Example:
+```bash
+./lv_img_conv.js test.png -f -c CF_TRUE_COLOR
+```
+
+The command above will generate a .c file in which arrays can be found for RGB332, RGB565, ARGB8888. It is also possible to generate a binary BMP image file in ARGB8332, ARGB8565, ARGB8565_RBSWAP, ARGB8888.
+```bash
+./lv_img_conv.js logo_lvgl.png -f -c CF_TRUE_COLOR -t bin --binary-format ARGB8888
+```
+
+### Using the LCD API
+#### Initialization of LCD API
+The `lcd_init(bool bl_on)` function initialises the LCD screen. The `bl_on` variable allows to enable or disable the LCD backlight.
+```c
+#include "lcd_api.h"
+
+...
+
+void main(void) {
+ ...
+ lcd_init(true);
+ ...
+}
+```
+
+#### Drawing text on the screen
+
+```c
+void lcd_display_text(const char* text, uint16_t x_pos, uint16_t y_pos, uint32_t color, uint32_t bg_color, sFONT *font);
+```
+
+```c
+#include "lcd_api.h"
+
+...
+
+void main(void) {
+ ...
+ lcd_init(true);
+ ...
+ lcd_display_text("This is a text string.", 10, 10, LCD_GREEN, LCD_BLACK, LCD_FONT16);
+}
+```
+Display text on the LCD screen in a certain color. When text width exceeds BSP_LCD_GetXSize(), a text wrap will be performed. If the text wrap is between two will be injected.
+
+#### Drawing a BMP (C-array) onto the screen
+```c
+void lcd_draw_bmp(const void* p_src, uint32_t x_pos, uint32_t y_pos, uint32_t x_size, uint32_t y_size, uint32_t color_mode);
+```
+
+```c
+#include "lcd_api.h"
+#include "test_image.h"
+
+void main(void) {
+ ...
+ lcd_init(true);
+ ...
+ lcd_draw_bmp(bmp_array, 0, 0, 50, 50, LCD_ARGB8888);
+}
+```
+Draw BMP image from C array to the LCD screen at position X, Y. In color mode ARGB8888, RGB888, RGB565 or ARGB1555 Supports ARGB8888, RGB565, RGB888 (see LCD_* defines in header file).
diff --git a/docs/llfs.md b/docs/llfs.md
index eac7c21..2fa6986 100644
--- a/docs/llfs.md
+++ b/docs/llfs.md
@@ -1,17 +1,52 @@
# LLFS (Linked List File System)
## Introduction
-The llfs filesystem can be generated using the mkllfss utility.
-It is a simple filesystem that uses a linked list to store files.
-The filesystem is stored in a single c file (`llfs_data.c`), which can be compiled and read by the llfs library.
-The llfs filesystem is a flat filesystem, meaning that it does not support directories.
+The llfs filesystem can be generated using the [mkllfs](mkllfs.md) utility.
+The resulting C file encapsulates the filesystem data within a linked list which can be used by the llfs library.
+
+As a flat filesystem, llfs lacks support for directories.
+Using the llfs API, information about the files in the filesystem can be retrieved,
+and the files can be read using direct memory access.
+Alternatively, the POSIX file functions can be used.
+But this is more resource intensive, as data must be copied before using it.
+
+It's essential to note that the llfs filesystem operates in a read-only mode,
+restricting operations solely to read functions.
+
+## Table of contents
+ - [Introduction](#introduction)
+ - [Table of contents](#table-of-contents)
+ - [Initialization](#initialization)
+ - [Usage of the llfs API](#usage-of-the-llfs-api)
+ - [The `llfs_file_t` struct](#the-llfs_file_t-struct)
+ - [Getting a list of files](#getting-a-list-of-files)
+ - [Iterator function (not recommended)](#iterator-function-not-recommended)
+ - [Reading a file](#reading-a-file)
+ - [Getting the number of files](#getting-the-number-of-files)
+ - [Using the POSIX file functions](#using-the-posix-file-functions)
+
+## Initialization
+Before using the llfs API, or the file related POSIX (fopen, fgetc, ...) functions, the filesystem must be initialized by calling `llfs_init()`.
## Usage of the llfs API
+### The `llfs_file_t` struct
+The `llfs_file_t` struct contains information about a file in the filesystem.
+```c
+typedef struct {
+ const uint8_t* data; // Pointer to the file data (len bytes)
+ const char* name; // Null-terminated string with the filename
+ size_t len; // Length of the file data
+} llfs_file_t;
+```
+The data pointer points to the data of the file in the filesystem, and can be used to read the file.
+
### Getting a list of files
```c
#include "llfs.h"
void main(void) {
+ llfs_init();
+
// Allocate space for 10 files
llfs_file_t file_list[10];
@@ -33,13 +68,50 @@ Result:
[Info] (2031) [main]: File: file1.txt, size: 77
```
+It is also possible to use a file extension filter (e.g. `*.bmp`, `*.txt`, `*.py`).
+```c
+ // ...
+ size_t file_count = llfs_file_list(file_list, 10, "*.bmp");
+ // ...
+```
+This will only return files with the `.bmp` extension.
+````
+[Info] (2009) [main]: File: image.bmp, size: 9270
+[Info] (2019) [main]: File: image2.bmp, size: 7738
+````
+
+#### Iterator function (not recommended)
+It is also possible to iterate through the files without allocating an array.
+When the memory pointer is `NULL`, the iterator will start at the beginning of the file list.
+Each call to `llfs_next_file()` will return the next file in the list,
+if a filter is specified files that don't match the filter will be skipped.
+```c
+#include "llfs.h"
+
+void main(void) {
+ llfs_init();
+
+ // Get the file list
+ void* mem = NULL; // Pointer for internal use by the llfs library
+ llfs_file_t* file;
+ while ((file = llfs_next_file(&mem, ".bmp")) != NULL) {
+ LOG_INFO(TAG, "File: %s", file->name);
+ }
+}
+```
+While this method doesn't require allocating memory for the file list,
+it is slower than the previous method due to the overhead calling the function for each file.
+Additionally, the required memory for the filelist is very small, so it's recommended to use the first method.
+
### Reading a file
```c
#include "llfs.h"
void main(void) {
+ llfs_init();
+
// Get a file by name
- llfs_file_t *file = llfs_file_open("filename with a space.txt");
+ llfs_file_t* file = llfs_file_open("filename with a space.txt");
if (file != NULL) {
// Print the file name, size and data
@@ -55,3 +127,37 @@ Result:
[Info] (2040) [main]: File found: filename with a space.txt, size: 61
[Info] (2047) [main]: File data: This is a file with a space in it's filename.
```
+
+### Getting the number of files
+```c
+#include "llfs.h"
+
+void main(void) {
+ llfs_init();
+
+ // Get the number of files
+ size_t file_count = llfs_file_count();
+
+ // Print the number of files
+ LOG_INFO(TAG, "File count: %d", file_count);
+}
+```
+
+## Using the POSIX file functions
+The llfs library also supports the POSIX file functions.
+As the file system is read-only, write functions are not implemented.
+There is also a limit on the number of files that can be open concurrently,
+this is set by the `POSIX_MAX_FILES` macro in `llfs.c`.
+The default value is 10, but there are already 3 files in use (stdin, stdout, stderr),
+so the maximum number of files that can be open is 7.
+
+The following functions are tested and working, but other functions might also work:
+ - `fopen`
+ - `fclose`
+ - `fgetc`
+ - `fread`
+ - `fseek`
+ - `ftell`
+ - `rewind`
+ - `fstat`
+ - `fileno`
diff --git a/project/.cproject b/project/.cproject
index b36ef16..2b2e80a 100644
--- a/project/.cproject
+++ b/project/.cproject
@@ -24,7 +24,7 @@
-
+
@@ -91,11 +91,12 @@
+
+
-
@@ -117,28 +118,28 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
+
-
+
-
-
-
+
+
-
-
-
+
+
-
+
diff --git a/project/Core/Inc/fsdata_custom.c b/project/Core/Inc/fsdata_custom.c
new file mode 100644
index 0000000..6bc79cf
--- /dev/null
+++ b/project/Core/Inc/fsdata_custom.c
@@ -0,0 +1,2281 @@
+//***************************************************************************
+//
+// File System Image.
+//
+// This file was automatically generated using the makefsfile utility.
+//
+//***************************************************************************
+
+static const unsigned char data_cgi[] =
+{
+ /* /cgi */
+ 0x2f, 0x63, 0x67, 0x69, 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, 0x6c, 0x77, 0x49, 0x50, 0x2f, 0x31, 0x2e,
+ 0x34, 0x2e, 0x30, 0x20, 0x28, 0x68, 0x74, 0x74,
+ 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e,
+ 0x73, 0x69, 0x63, 0x73, 0x2e, 0x73, 0x65, 0x2f,
+ 0x7e, 0x61, 0x64, 0x61, 0x6d, 0x2f, 0x6c, 0x77,
+ 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, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x0d, 0x0a,
+ 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d,
+ 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3a, 0x20,
+ 0x33, 0x33, 0x0d, 0x0a, 0x0d, 0x0a,
+ 0x41, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74,
+ 0x73, 0x3a, 0x20, 0x50, 0x49, 0x4e, 0x31, 0x3d,
+ 0x7b, 0x30, 0x2f, 0x31, 0x7d, 0x26, 0x50, 0x49,
+ 0x4e, 0x32, 0x3d, 0x7b, 0x30, 0x2f, 0x31, 0x7d,
+ 0x0a,
+};
+
+static const unsigned char data_img_png[] =
+{
+ /* /img.png */
+ 0x2f, 0x69, 0x6d, 0x67, 0x2e, 0x70, 0x6e, 0x67,
+ 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, 0x6c, 0x77, 0x49, 0x50, 0x2f, 0x31, 0x2e,
+ 0x34, 0x2e, 0x30, 0x20, 0x28, 0x68, 0x74, 0x74,
+ 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e,
+ 0x73, 0x69, 0x63, 0x73, 0x2e, 0x73, 0x65, 0x2f,
+ 0x7e, 0x61, 0x64, 0x61, 0x6d, 0x2f, 0x6c, 0x77,
+ 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, 0x70, 0x6e, 0x67, 0x0d, 0x0a, 0x43,
+ 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x4c,
+ 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3a, 0x20, 0x31,
+ 0x36, 0x33, 0x30, 0x30, 0x0d, 0x0a, 0x0d, 0x0a,
+
+ 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a,
+ 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00,
+ 0x08, 0x06, 0x00, 0x00, 0x00, 0xf4, 0x78, 0xd4,
+ 0xfa, 0x00, 0x00, 0x00, 0x04, 0x73, 0x42, 0x49,
+ 0x54, 0x08, 0x08, 0x08, 0x08, 0x7c, 0x08, 0x64,
+ 0x88, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59,
+ 0x73, 0x00, 0x00, 0x0e, 0xc4, 0x00, 0x00, 0x0e,
+ 0xc4, 0x01, 0x95, 0x2b, 0x0e, 0x1b, 0x00, 0x00,
+ 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f,
+ 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x00, 0x77,
+ 0x77, 0x77, 0x2e, 0x69, 0x6e, 0x6b, 0x73, 0x63,
+ 0x61, 0x70, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x9b,
+ 0xee, 0x3c, 0x1a, 0x00, 0x00, 0x20, 0x00, 0x49,
+ 0x44, 0x41, 0x54, 0x78, 0x9c, 0xed, 0xdd, 0x67,
+ 0xb4, 0x65, 0x45, 0xb5, 0xb0, 0xe1, 0xb7, 0x03,
+ 0x4d, 0xce, 0x39, 0x2b, 0x20, 0xd1, 0x80, 0x24,
+ 0x45, 0x25, 0x98, 0x50, 0xae, 0x82, 0x80, 0x0a,
+ 0x66, 0xef, 0x55, 0x51, 0x3f, 0x15, 0x10, 0x13,
+ 0xc9, 0x00, 0x98, 0x00, 0x01, 0xc5, 0x2b, 0xe6,
+ 0x04, 0x5c, 0x03, 0x18, 0x11, 0x23, 0x22, 0x22,
+ 0x82, 0x8a, 0x44, 0x13, 0x41, 0x10, 0x5a, 0xc9,
+ 0x48, 0x6c, 0x72, 0x37, 0xdd, 0xfd, 0xfd, 0x28,
+ 0x5a, 0x9a, 0xa6, 0xcf, 0x39, 0x3b, 0xd4, 0xac,
+ 0x5a, 0x6b, 0xaf, 0xf7, 0x19, 0xa3, 0x86, 0x8e,
+ 0x01, 0xd4, 0xae, 0xb9, 0xce, 0xda, 0x55, 0x73,
+ 0xaf, 0x50, 0x73, 0x12, 0xcd, 0xb0, 0x01, 0xf0,
+ 0x74, 0x60, 0x63, 0x60, 0x23, 0xe0, 0x09, 0xc0,
+ 0xd2, 0xc0, 0xf2, 0xc0, 0x92, 0xc0, 0xb4, 0x7a,
+ 0x43, 0x93, 0xa4, 0x56, 0x9b, 0x09, 0xdc, 0x0b,
+ 0xdc, 0x01, 0xdc, 0x0d, 0x5c, 0x09, 0x5c, 0x01,
+ 0x5c, 0x0e, 0xfc, 0x01, 0xb8, 0xaa, 0xde, 0xd0,
+ 0x54, 0xd3, 0xa4, 0x4a, 0x9f, 0xbb, 0x28, 0xf0,
+ 0x22, 0x60, 0x57, 0xe0, 0x39, 0xc0, 0xda, 0x95,
+ 0xc6, 0x21, 0x49, 0x5d, 0x77, 0x2d, 0x70, 0x26,
+ 0x70, 0x1a, 0xf0, 0x63, 0xe0, 0xc1, 0xba, 0xc3,
+ 0x51, 0x29, 0xa5, 0x13, 0x80, 0xcd, 0x81, 0x37,
+ 0x03, 0x7b, 0x01, 0x2b, 0x14, 0xfe, 0x6c, 0x49,
+ 0xd2, 0xf8, 0xee, 0x00, 0x4e, 0x06, 0xbe, 0x08,
+ 0x5c, 0x5c, 0x79, 0x2c, 0x0a, 0x56, 0x2a, 0x01,
+ 0x78, 0x06, 0x70, 0x10, 0xe9, 0x57, 0x7f, 0xad,
+ 0xab, 0x0e, 0x92, 0xa4, 0xde, 0x9d, 0x0b, 0x7c,
+ 0x90, 0x74, 0x75, 0x40, 0x23, 0x28, 0x7a, 0x31,
+ 0x5e, 0x0f, 0xf8, 0x34, 0x69, 0xe1, 0x97, 0x24,
+ 0xb5, 0xcf, 0x4f, 0x80, 0x7d, 0x81, 0xab, 0x6b,
+ 0x0f, 0x44, 0x79, 0x4d, 0x09, 0xea, 0x77, 0x1a,
+ 0x70, 0x30, 0xf0, 0x2d, 0x60, 0xd3, 0xa0, 0xcf,
+ 0x90, 0x24, 0xc5, 0xdb, 0x90, 0x74, 0xeb, 0x76,
+ 0x32, 0xe9, 0xa1, 0xc1, 0xd9, 0x75, 0x87, 0xa3,
+ 0x5c, 0x22, 0xae, 0x00, 0xac, 0x03, 0x7c, 0x1b,
+ 0xd8, 0x36, 0xa0, 0x6f, 0x49, 0x52, 0x3d, 0x17,
+ 0x92, 0x9e, 0xe1, 0xfa, 0x47, 0xed, 0x81, 0x68,
+ 0x78, 0x93, 0x33, 0xf7, 0xb7, 0x1b, 0xf0, 0x27,
+ 0x5c, 0xfc, 0x25, 0x69, 0x14, 0x6d, 0x09, 0x5c,
+ 0x40, 0x9a, 0xeb, 0xd5, 0x72, 0x39, 0x6f, 0x01,
+ 0xbc, 0x1d, 0xf8, 0x3a, 0xb0, 0x78, 0xc6, 0x3e,
+ 0x25, 0x49, 0xcd, 0xb2, 0x18, 0xe9, 0x2a, 0xc0,
+ 0x3d, 0xc0, 0xef, 0x2b, 0x8f, 0x45, 0x43, 0xc8,
+ 0x95, 0x00, 0x1c, 0x00, 0x1c, 0x8b, 0x4f, 0xf8,
+ 0x4b, 0x52, 0x17, 0x4c, 0x02, 0x76, 0x22, 0xfd,
+ 0xe0, 0xfb, 0x55, 0xe5, 0xb1, 0x68, 0x40, 0x39,
+ 0x12, 0x80, 0x0f, 0x03, 0x87, 0x67, 0xe8, 0x47,
+ 0x92, 0xd4, 0x2e, 0xcf, 0x02, 0xa6, 0xe2, 0xab,
+ 0x82, 0xad, 0x34, 0x6c, 0x02, 0xf0, 0xff, 0x80,
+ 0x23, 0x73, 0x0c, 0x44, 0x92, 0xd4, 0x4a, 0xdb,
+ 0x03, 0x33, 0x48, 0x6f, 0x08, 0xa8, 0x45, 0x86,
+ 0xb9, 0x64, 0xbf, 0x1b, 0xf0, 0x3d, 0xf2, 0x3f,
+ 0x48, 0x28, 0x49, 0x6a, 0x97, 0x39, 0xc0, 0x4b,
+ 0x81, 0x1f, 0xd6, 0x1e, 0x88, 0x7a, 0x37, 0x68,
+ 0x02, 0xb0, 0x0e, 0x69, 0x9b, 0x48, 0xb7, 0xf3,
+ 0x95, 0x24, 0x01, 0xdc, 0x09, 0x6c, 0x01, 0x5c,
+ 0x53, 0x7b, 0x20, 0xea, 0xcd, 0x20, 0xbf, 0xde,
+ 0x17, 0x21, 0xbd, 0xe7, 0xef, 0xe2, 0x2f, 0x49,
+ 0x9a, 0x67, 0x39, 0x52, 0x1d, 0x01, 0xab, 0xb7,
+ 0xb6, 0xc4, 0x20, 0xcf, 0x00, 0x1c, 0x02, 0xbc,
+ 0x2e, 0xf7, 0x40, 0x24, 0x49, 0xad, 0xb7, 0x26,
+ 0x30, 0x0b, 0x38, 0xbb, 0xf6, 0x40, 0x34, 0xb1,
+ 0x7e, 0x6f, 0x01, 0xac, 0x0b, 0x5c, 0x0a, 0x2c,
+ 0x11, 0x30, 0x16, 0x49, 0x52, 0xfb, 0xdd, 0x0f,
+ 0x3c, 0x11, 0x6b, 0x07, 0x34, 0x5e, 0xbf, 0xb7,
+ 0x00, 0x8e, 0xc7, 0xc5, 0x5f, 0x92, 0x34, 0xb6,
+ 0xc5, 0x49, 0x45, 0xe0, 0xd4, 0x70, 0xfd, 0x5c,
+ 0x01, 0x78, 0x3a, 0xee, 0xfa, 0x24, 0x49, 0xea,
+ 0xcd, 0x76, 0xc0, 0x39, 0xb5, 0x07, 0xa1, 0xb1,
+ 0xf5, 0x73, 0x05, 0xe0, 0x03, 0x61, 0xa3, 0x90,
+ 0x24, 0x8d, 0x9a, 0x83, 0x6a, 0x0f, 0x40, 0xe3,
+ 0xeb, 0xf5, 0x0a, 0xc0, 0xe6, 0xc0, 0x45, 0x7d,
+ 0xfc, 0xfb, 0xc3, 0xb8, 0x08, 0x38, 0x95, 0xf4,
+ 0x10, 0xc9, 0x4d, 0xc0, 0xb5, 0xc0, 0xbd, 0x05,
+ 0x3e, 0x57, 0x92, 0x46, 0xd1, 0x92, 0xc0, 0xda,
+ 0xc0, 0x6a, 0xa4, 0x4d, 0x7b, 0x5e, 0x42, 0x7a,
+ 0x5d, 0x2f, 0xda, 0x5c, 0x52, 0xf1, 0xa0, 0x8b,
+ 0x0b, 0x7c, 0x96, 0x02, 0x7d, 0x96, 0xf4, 0xc7,
+ 0x8c, 0x6a, 0x73, 0x80, 0xef, 0x00, 0x1b, 0x95,
+ 0x0a, 0x48, 0x92, 0x3a, 0x6c, 0x23, 0xd2, 0x9c,
+ 0x3b, 0x87, 0xd8, 0xb9, 0xfd, 0x73, 0xa5, 0x02,
+ 0x52, 0x8c, 0x45, 0x81, 0xdb, 0x88, 0x3b, 0x41,
+ 0xae, 0xc6, 0xf2, 0xc1, 0x92, 0x54, 0xc3, 0xb6,
+ 0xa4, 0x39, 0x38, 0x6a, 0x7e, 0xbf, 0x8d, 0xb4,
+ 0x86, 0xa8, 0xa5, 0xf6, 0x20, 0xee, 0xe4, 0x38,
+ 0x1b, 0x58, 0xa9, 0x5c, 0x28, 0x92, 0xa4, 0x05,
+ 0xac, 0x04, 0xfc, 0x86, 0xb8, 0x79, 0xfe, 0xa5,
+ 0xe5, 0x42, 0x51, 0x6e, 0x5f, 0x23, 0x6e, 0xf1,
+ 0x77, 0xc7, 0x28, 0x49, 0xaa, 0x6f, 0x1a, 0x70,
+ 0x16, 0x31, 0x73, 0xfd, 0xd7, 0xca, 0x85, 0xa1,
+ 0xdc, 0xa6, 0x93, 0xff, 0x84, 0xb8, 0x06, 0x58,
+ 0xa5, 0x60, 0x0c, 0x92, 0xa4, 0xf1, 0xad, 0x08,
+ 0x5c, 0x45, 0xfe, 0xf9, 0xfe, 0x9f, 0x25, 0x83,
+ 0x50, 0x3e, 0xeb, 0x93, 0xff, 0x64, 0x98, 0x83,
+ 0xf7, 0xfc, 0x25, 0xa9, 0x89, 0xb6, 0x25, 0xe6,
+ 0xc1, 0xc0, 0x0d, 0x4a, 0x06, 0xa1, 0xde, 0x4c,
+ 0xb4, 0x0f, 0xc0, 0xd3, 0x03, 0x3e, 0xf3, 0xfb,
+ 0xb8, 0xa1, 0x90, 0x24, 0x35, 0xd1, 0xef, 0x49,
+ 0x73, 0x74, 0x6e, 0x11, 0x6b, 0x89, 0x86, 0x34,
+ 0x51, 0x02, 0xb0, 0x71, 0xe6, 0xcf, 0x9b, 0x0b,
+ 0xbc, 0x3f, 0x73, 0x9f, 0x92, 0xa4, 0x7c, 0xde,
+ 0x4f, 0x9a, 0xab, 0x73, 0xf2, 0x15, 0xef, 0x06,
+ 0x9a, 0x28, 0x01, 0xc8, 0xfd, 0x47, 0xbb, 0x18,
+ 0xb8, 0x3c, 0x73, 0x9f, 0x92, 0xa4, 0x7c, 0x2e,
+ 0x07, 0x2e, 0xc9, 0xdc, 0xa7, 0x09, 0x40, 0x03,
+ 0x4d, 0x94, 0x00, 0xe4, 0xbe, 0x6f, 0xf3, 0xa3,
+ 0xcc, 0xfd, 0x49, 0x92, 0xf2, 0x3b, 0x35, 0x73,
+ 0x7f, 0x3e, 0x03, 0xd0, 0x40, 0x13, 0x25, 0x00,
+ 0xcb, 0x65, 0xfe, 0x3c, 0x6b, 0x44, 0x4b, 0x52,
+ 0xf3, 0xe5, 0x9e, 0xab, 0x97, 0xcf, 0xdc, 0x9f,
+ 0x32, 0x98, 0x28, 0x01, 0x58, 0x26, 0xf3, 0xe7,
+ 0x5d, 0x9f, 0xb9, 0x3f, 0x49, 0x52, 0x7e, 0xb9,
+ 0xe7, 0xea, 0xa5, 0x33, 0xf7, 0xa7, 0x0c, 0x26,
+ 0x4a, 0x00, 0x96, 0xca, 0xfc, 0x79, 0x37, 0x66,
+ 0xee, 0x4f, 0x92, 0x94, 0xdf, 0x0d, 0x99, 0xfb,
+ 0x33, 0x01, 0x68, 0xa0, 0x89, 0xaa, 0xfb, 0xcd,
+ 0xe9, 0xe1, 0xdf, 0xe9, 0xc7, 0x64, 0xf2, 0x3f,
+ 0x5d, 0x2a, 0x49, 0xca, 0xcf, 0xf9, 0x7f, 0xc4,
+ 0x4d, 0x74, 0x05, 0x40, 0x92, 0x24, 0x8d, 0x20,
+ 0x13, 0x00, 0x49, 0x92, 0x3a, 0xc8, 0x04, 0x40,
+ 0x92, 0xa4, 0x0e, 0x32, 0x01, 0x90, 0x24, 0xa9,
+ 0x83, 0x4c, 0x00, 0x24, 0x49, 0xea, 0x20, 0x13,
+ 0x00, 0x49, 0x92, 0x3a, 0xc8, 0x04, 0x40, 0x92,
+ 0xa4, 0x0e, 0x32, 0x01, 0x90, 0x24, 0xa9, 0x83,
+ 0x4c, 0x00, 0x24, 0x49, 0xea, 0xa0, 0xa9, 0xb5,
+ 0x07, 0xd0, 0x41, 0x3b, 0x00, 0x2f, 0x7d, 0xf8,
+ 0x7f, 0xd7, 0x00, 0x56, 0xaa, 0x3b, 0x1c, 0x00,
+ 0x1e, 0x04, 0x6e, 0x02, 0x2e, 0x03, 0x4e, 0x03,
+ 0x4e, 0x01, 0x6e, 0xad, 0x38, 0x9e, 0xd5, 0x81,
+ 0x67, 0x03, 0xcf, 0x00, 0x36, 0x06, 0xd6, 0x07,
+ 0x96, 0x25, 0x15, 0xa7, 0x1a, 0x74, 0x67, 0xb2,
+ 0x07, 0x81, 0x9b, 0x49, 0x31, 0xfe, 0x98, 0x14,
+ 0xe3, 0x2d, 0x43, 0x8f, 0x34, 0xd6, 0xe3, 0x49,
+ 0xc7, 0x61, 0x0b, 0x60, 0x43, 0xe0, 0x71, 0xa4,
+ 0xf3, 0x65, 0x09, 0x60, 0xd1, 0x3e, 0xfa, 0x99,
+ 0x4b, 0x8a, 0xfd, 0x3a, 0xe0, 0x97, 0xa4, 0xd8,
+ 0x73, 0x97, 0x7b, 0xed, 0xd5, 0x4a, 0xc0, 0x9e,
+ 0xc0, 0x2e, 0xc0, 0x26, 0xc0, 0x6a, 0xf4, 0x17,
+ 0x4b, 0x94, 0xdb, 0x48, 0xfb, 0xdf, 0xff, 0x06,
+ 0xf8, 0x3e, 0x70, 0x56, 0xd5, 0xd1, 0x48, 0x0d,
+ 0x30, 0x87, 0x34, 0x79, 0xe4, 0x6a, 0x39, 0xb7,
+ 0x95, 0x6c, 0x9b, 0xa7, 0x90, 0x26, 0x95, 0x9c,
+ 0xc7, 0x33, 0xaa, 0xdd, 0x05, 0x1c, 0x4c, 0xd9,
+ 0x04, 0x71, 0x49, 0xe0, 0xcd, 0xc0, 0x39, 0xe4,
+ 0x3f, 0xef, 0x16, 0xd6, 0x66, 0x00, 0x1f, 0x00,
+ 0x16, 0x29, 0x11, 0x5c, 0x1f, 0x36, 0x02, 0x3e,
+ 0x02, 0xfc, 0x83, 0xb8, 0xd8, 0xe7, 0x90, 0x92,
+ 0x80, 0x75, 0x0a, 0xc5, 0x04, 0xe9, 0x5c, 0x3a,
+ 0x98, 0x74, 0x6e, 0xd5, 0x3e, 0xbf, 0x7b, 0x69,
+ 0x67, 0x91, 0xbe, 0xb3, 0x5d, 0xe6, 0xfc, 0xdf,
+ 0x71, 0x9e, 0x00, 0x79, 0xec, 0x05, 0xdc, 0x47,
+ 0xfd, 0x49, 0xad, 0xdf, 0x76, 0x06, 0xb0, 0x42,
+ 0xc0, 0xf1, 0x98, 0xdf, 0x92, 0xa4, 0x85, 0xf8,
+ 0xdf, 0x95, 0x62, 0x3c, 0x8b, 0x66, 0x5c, 0x85,
+ 0xd9, 0x11, 0x38, 0x9d, 0xb2, 0xb1, 0xdf, 0x0c,
+ 0x3c, 0xab, 0x40, 0x6c, 0xcb, 0x93, 0xae, 0x3c,
+ 0xd4, 0x3e, 0x9f, 0xfb, 0x6d, 0xf7, 0x01, 0xaf,
+ 0x08, 0x38, 0x1e, 0x6d, 0xe1, 0xfc, 0xdf, 0x71,
+ 0x9e, 0x00, 0xc3, 0xdb, 0x19, 0x78, 0x88, 0xfa,
+ 0x93, 0xd9, 0xa0, 0xed, 0x5c, 0xe2, 0x2e, 0xd1,
+ 0xee, 0x06, 0xfc, 0xab, 0x01, 0x31, 0x9e, 0x07,
+ 0x2c, 0x16, 0x14, 0xe3, 0x44, 0x36, 0x01, 0x7e,
+ 0xd5, 0xc3, 0x18, 0xa3, 0xda, 0x3d, 0xc4, 0xfe,
+ 0xd2, 0x5d, 0x84, 0xf6, 0x5c, 0xf9, 0x5a, 0x58,
+ 0x9b, 0x0d, 0xec, 0x9a, 0xfb, 0xa0, 0xb4, 0x84,
+ 0xf3, 0x7f, 0xc7, 0x79, 0x02, 0x0c, 0x67, 0x5d,
+ 0xd2, 0xa5, 0xe6, 0xda, 0x93, 0xd8, 0xb0, 0xed,
+ 0xb8, 0xcc, 0xc7, 0x65, 0x71, 0xe0, 0x0b, 0x0d,
+ 0x88, 0x6b, 0xfe, 0xf6, 0xb9, 0xcc, 0x31, 0x4e,
+ 0x64, 0x2a, 0x70, 0x18, 0xe9, 0xd9, 0x84, 0xda,
+ 0xb1, 0x5f, 0x43, 0x7a, 0xae, 0x20, 0xc2, 0x71,
+ 0x0d, 0x88, 0x6f, 0xd8, 0x36, 0x83, 0xf4, 0x5d,
+ 0xee, 0x1a, 0xe7, 0xff, 0x8e, 0xf3, 0x04, 0x18,
+ 0xce, 0x49, 0xd4, 0x9f, 0xbc, 0x72, 0xb4, 0x87,
+ 0x48, 0xbf, 0x54, 0x73, 0x58, 0x89, 0xf4, 0x8b,
+ 0xbb, 0x76, 0x4c, 0x0b, 0x8b, 0x71, 0xb3, 0x4c,
+ 0x31, 0x4e, 0x64, 0x4d, 0xd2, 0xc3, 0x66, 0xb5,
+ 0x63, 0x9e, 0xbf, 0x1d, 0x1c, 0x10, 0xe7, 0x86,
+ 0xc0, 0xcc, 0x06, 0xc4, 0x96, 0xa3, 0x9d, 0x98,
+ 0xf9, 0xd8, 0xb4, 0x81, 0xf3, 0x7f, 0xc7, 0x79,
+ 0x02, 0x0c, 0x6e, 0x35, 0xd2, 0xe5, 0xc3, 0xda,
+ 0x13, 0x57, 0xae, 0x76, 0x7c, 0x86, 0x63, 0xb2,
+ 0x3a, 0xe9, 0x29, 0xfc, 0xda, 0xb1, 0x8c, 0xd5,
+ 0xbe, 0x94, 0x21, 0xc6, 0x89, 0x3c, 0x91, 0xf4,
+ 0x34, 0x7e, 0xed, 0x58, 0x17, 0x6c, 0xb7, 0x00,
+ 0x53, 0x32, 0xc7, 0x7a, 0x7c, 0x03, 0xe2, 0xca,
+ 0xd5, 0x66, 0x93, 0xbe, 0xd3, 0x5d, 0xe2, 0xfc,
+ 0xdf, 0x71, 0x9e, 0x00, 0x83, 0x7b, 0x0b, 0xf5,
+ 0x27, 0xad, 0x9c, 0xed, 0x7a, 0x86, 0xfb, 0xfb,
+ 0x2d, 0x0b, 0x5c, 0xdc, 0x80, 0x38, 0xc6, 0x6b,
+ 0x37, 0x93, 0x7f, 0x11, 0x9c, 0xdf, 0xd3, 0x80,
+ 0xdb, 0x1b, 0x10, 0xe7, 0x58, 0x6d, 0xfb, 0x8c,
+ 0xb1, 0x4e, 0x02, 0xae, 0x6d, 0x40, 0x4c, 0x39,
+ 0xdb, 0x9b, 0x33, 0x1e, 0x9f, 0x36, 0x70, 0xfe,
+ 0x1f, 0x71, 0x6e, 0x04, 0x14, 0x67, 0x8b, 0xda,
+ 0x03, 0xc8, 0x6c, 0x0d, 0xd2, 0x2f, 0xf8, 0x41,
+ 0x4c, 0x26, 0xbd, 0x76, 0xb6, 0x79, 0xbe, 0xe1,
+ 0x84, 0x58, 0x05, 0x58, 0x2b, 0xa8, 0xef, 0x4d,
+ 0x81, 0x9f, 0x92, 0x9e, 0x88, 0x6f, 0xaa, 0xad,
+ 0x32, 0xf6, 0xb5, 0x3a, 0x71, 0xc7, 0xb2, 0x96,
+ 0x2d, 0x6b, 0x0f, 0x40, 0xca, 0xc9, 0x04, 0x20,
+ 0xce, 0x1a, 0xb5, 0x07, 0x10, 0x60, 0xd0, 0x98,
+ 0x0e, 0x04, 0x76, 0xca, 0x39, 0x90, 0x40, 0x6b,
+ 0x06, 0xf4, 0xb9, 0x1a, 0xf0, 0x0b, 0xe2, 0x5f,
+ 0xa9, 0x1c, 0xd6, 0xa0, 0x09, 0x5e, 0x74, 0x5f,
+ 0x4d, 0x31, 0x8a, 0xdf, 0x69, 0x75, 0x98, 0x09,
+ 0x40, 0x9c, 0xb9, 0xb5, 0x07, 0x10, 0x60, 0x90,
+ 0x98, 0x36, 0x04, 0x3e, 0x98, 0x7b, 0x20, 0x81,
+ 0x72, 0xff, 0xdd, 0x26, 0x93, 0x1e, 0x20, 0x6b,
+ 0xc3, 0xaf, 0xe1, 0x9c, 0xb1, 0x7b, 0xfe, 0x4b,
+ 0x0d, 0x67, 0x02, 0x10, 0xe7, 0x86, 0xda, 0x03,
+ 0x08, 0x70, 0xfd, 0x00, 0xff, 0xcd, 0x67, 0x69,
+ 0xc6, 0x56, 0xaf, 0xbd, 0xca, 0xfd, 0x77, 0x3b,
+ 0x10, 0x78, 0x7e, 0xe6, 0x3e, 0xa3, 0xdc, 0xd8,
+ 0xd0, 0xbe, 0x9a, 0x62, 0x14, 0xbf, 0xd3, 0xea,
+ 0x30, 0x13, 0x80, 0x38, 0x17, 0xd6, 0x1e, 0x40,
+ 0x66, 0xd7, 0x93, 0x1e, 0x92, 0xeb, 0xc7, 0x0e,
+ 0xc0, 0x73, 0x03, 0xc6, 0x12, 0xe5, 0x16, 0xd2,
+ 0x83, 0x6b, 0xb9, 0xac, 0x4f, 0xda, 0xe5, 0xb0,
+ 0x2d, 0xce, 0xcf, 0xd8, 0xd7, 0x4d, 0xa4, 0xb7,
+ 0x1d, 0x46, 0xc9, 0x05, 0xb5, 0x07, 0x20, 0xe5,
+ 0x64, 0x02, 0x10, 0xe7, 0x34, 0xd2, 0x53, 0xb4,
+ 0xa3, 0xe2, 0x54, 0xfa, 0xbf, 0x04, 0x7a, 0x40,
+ 0xc4, 0x40, 0x02, 0xfd, 0x88, 0xbc, 0x7f, 0xb3,
+ 0xe3, 0xa8, 0xb7, 0xc3, 0x60, 0xbf, 0xfe, 0x0d,
+ 0xfc, 0x3e, 0x63, 0x7f, 0x73, 0x49, 0xc7, 0x73,
+ 0x54, 0xcc, 0x21, 0x15, 0x91, 0x92, 0x3a, 0xc3,
+ 0xd7, 0x40, 0x86, 0x73, 0x22, 0xf5, 0x5f, 0x5d,
+ 0xca, 0xd1, 0x66, 0xd1, 0xff, 0x46, 0x40, 0x6b,
+ 0xd2, 0xae, 0x2d, 0x90, 0x73, 0x6f, 0x04, 0xb4,
+ 0x75, 0x03, 0x62, 0xea, 0xa7, 0x1d, 0x94, 0x31,
+ 0xf6, 0x79, 0x46, 0x69, 0x23, 0xa0, 0xaf, 0xe7,
+ 0x3d, 0x34, 0xad, 0xe0, 0xfc, 0xdf, 0x71, 0x9e,
+ 0x00, 0xc3, 0x59, 0x87, 0xf6, 0x54, 0x3f, 0x1b,
+ 0xaf, 0x7d, 0x72, 0x80, 0xd8, 0x0f, 0x68, 0xc0,
+ 0xb8, 0xfb, 0x69, 0x39, 0x36, 0x3a, 0x9a, 0xdf,
+ 0x0f, 0x1a, 0x10, 0x53, 0xaf, 0xed, 0x6a, 0xe2,
+ 0xb6, 0x02, 0xfe, 0x54, 0x03, 0xe2, 0x1b, 0xb6,
+ 0xdd, 0x45, 0xd9, 0xca, 0x89, 0x4d, 0xe1, 0xfc,
+ 0xdf, 0x71, 0x9e, 0x00, 0xc3, 0x7b, 0x21, 0xed,
+ 0xfa, 0x25, 0xbc, 0x60, 0x1b, 0xb4, 0x18, 0xd0,
+ 0x59, 0x0d, 0x18, 0x7b, 0xaf, 0xed, 0x02, 0x52,
+ 0x7d, 0x82, 0x5c, 0xda, 0x74, 0xf5, 0xe3, 0x6e,
+ 0xe0, 0xc9, 0x19, 0x63, 0x5f, 0xd0, 0x28, 0x14,
+ 0x03, 0xda, 0x25, 0xf7, 0x41, 0x69, 0x09, 0xe7,
+ 0xff, 0x8e, 0xf3, 0x04, 0xc8, 0x63, 0x4f, 0xe0,
+ 0x5e, 0xea, 0x4f, 0x66, 0xfd, 0xb6, 0xd3, 0x19,
+ 0x6c, 0xe3, 0x9a, 0xc5, 0x80, 0xfb, 0x1b, 0x30,
+ 0xfe, 0x5e, 0xda, 0x99, 0xc0, 0x8a, 0x03, 0xc4,
+ 0x38, 0x9e, 0xb6, 0x5c, 0xfd, 0xb8, 0x09, 0x78,
+ 0x66, 0xe6, 0xd8, 0x17, 0x66, 0x79, 0xca, 0x97,
+ 0x3a, 0xce, 0xd1, 0xee, 0x25, 0x7d, 0x77, 0xbb,
+ 0xca, 0xf9, 0xbf, 0xe3, 0x3c, 0x01, 0xf2, 0x79,
+ 0x12, 0x75, 0xcb, 0xbe, 0xf6, 0xd3, 0xee, 0x24,
+ 0x2d, 0x62, 0x53, 0x07, 0x8c, 0x75, 0xf3, 0x06,
+ 0xc4, 0x30, 0x51, 0xbb, 0x0b, 0x38, 0x84, 0xf4,
+ 0x0b, 0x35, 0xb7, 0x0b, 0x1b, 0x10, 0xdf, 0x78,
+ 0x6d, 0x0e, 0xf0, 0x6d, 0xca, 0xee, 0x4d, 0x30,
+ 0x95, 0x74, 0x4e, 0xdd, 0x99, 0x31, 0x8e, 0xc8,
+ 0x76, 0x26, 0xe9, 0x3b, 0xdb, 0x65, 0xce, 0xff,
+ 0x1d, 0xe7, 0x09, 0x90, 0xdf, 0x76, 0xa4, 0xfb,
+ 0xa2, 0x97, 0x90, 0x5e, 0x3b, 0xab, 0x3d, 0xd1,
+ 0xcd, 0x05, 0x1e, 0x20, 0x95, 0x84, 0xfd, 0x29,
+ 0xf0, 0x56, 0x86, 0xff, 0x45, 0xbc, 0x57, 0x03,
+ 0x62, 0x5a, 0x58, 0x8c, 0xd3, 0x81, 0x9f, 0x01,
+ 0x6f, 0x03, 0x56, 0x1e, 0x32, 0xc6, 0xb1, 0xac,
+ 0x48, 0xf3, 0x8a, 0x40, 0xcd, 0x21, 0xbd, 0x97,
+ 0x7f, 0x1e, 0xf0, 0x11, 0x62, 0x2f, 0xf9, 0x4f,
+ 0x64, 0x45, 0xd2, 0x39, 0xf6, 0x53, 0xd2, 0x39,
+ 0xf7, 0x00, 0xf5, 0x8f, 0xcf, 0x5c, 0xd2, 0x5b,
+ 0x10, 0x97, 0x90, 0xbe, 0x9b, 0xdb, 0x85, 0x45,
+ 0xdf, 0x2e, 0xce, 0xff, 0x1d, 0xe7, 0x09, 0x50,
+ 0xcf, 0x0e, 0xe4, 0x3d, 0xf6, 0x67, 0x15, 0x1c,
+ 0xfb, 0xbb, 0x32, 0x8f, 0x7d, 0x36, 0xb0, 0x1f,
+ 0xb0, 0x4c, 0xc1, 0x18, 0x06, 0xb5, 0x07, 0x31,
+ 0x0b, 0xd4, 0x2c, 0xe0, 0xcb, 0xa4, 0xc5, 0x69,
+ 0xe9, 0x62, 0xd1, 0xd4, 0x75, 0x26, 0x79, 0x8f,
+ 0xe1, 0xb3, 0xcb, 0x0e, 0xbf, 0xf5, 0x9c, 0xff,
+ 0x47, 0xdc, 0xa0, 0x97, 0x78, 0xa5, 0xf1, 0x2c,
+ 0x95, 0xb9, 0xbf, 0xef, 0x90, 0xde, 0xa9, 0x6f,
+ 0x83, 0x88, 0x5f, 0xd7, 0xb7, 0x03, 0x2f, 0x01,
+ 0xce, 0x09, 0xe8, 0x5b, 0x52, 0x47, 0xb9, 0x11,
+ 0x90, 0x22, 0xe4, 0x7e, 0xa5, 0xec, 0x4f, 0x99,
+ 0xfb, 0x8b, 0xb4, 0x51, 0xe6, 0xfe, 0xe6, 0x00,
+ 0x2f, 0xc5, 0xc5, 0x5f, 0x52, 0x66, 0x26, 0x00,
+ 0x6a, 0x83, 0x36, 0xed, 0xa8, 0xb8, 0x5e, 0xe6,
+ 0xfe, 0x4e, 0xa1, 0xec, 0xed, 0x1b, 0x49, 0x1d,
+ 0x61, 0x02, 0x20, 0xe5, 0x95, 0xfb, 0x39, 0x85,
+ 0x6f, 0x64, 0xee, 0x4f, 0x92, 0x00, 0x13, 0x00,
+ 0x29, 0xb7, 0xdc, 0xcf, 0x3f, 0xfc, 0x2d, 0x73,
+ 0x7f, 0x92, 0x04, 0x98, 0x00, 0x48, 0x4d, 0xe7,
+ 0x93, 0xd3, 0x92, 0x42, 0x98, 0x00, 0x48, 0x79,
+ 0xdd, 0x9d, 0xb9, 0xbf, 0x9c, 0x05, 0x8a, 0x24,
+ 0xe9, 0x3f, 0x4c, 0x00, 0xa4, 0xbc, 0x66, 0x64,
+ 0xee, 0xef, 0xd5, 0x99, 0xfb, 0x93, 0x24, 0xc0,
+ 0x04, 0x40, 0xca, 0xed, 0x9a, 0xcc, 0xfd, 0xbd,
+ 0x1c, 0x37, 0xb0, 0x91, 0x14, 0xc0, 0x8d, 0x80,
+ 0xa4, 0xbc, 0xae, 0xc8, 0xdc, 0xdf, 0x64, 0xe0,
+ 0xbb, 0xc0, 0x6e, 0xc0, 0x6f, 0x33, 0xf7, 0x2d,
+ 0xa9, 0x7f, 0xab, 0x92, 0xea, 0x68, 0xac, 0x05,
+ 0xac, 0xcb, 0xa3, 0x2b, 0x89, 0x2e, 0x42, 0xda,
+ 0x56, 0xfa, 0x96, 0x87, 0xff, 0xf7, 0x6a, 0xe0,
+ 0x86, 0xd2, 0x03, 0xec, 0x95, 0x09, 0x80, 0x94,
+ 0x57, 0xc4, 0xa6, 0x45, 0x2b, 0x00, 0xbf, 0x06,
+ 0x4e, 0x04, 0x4e, 0x20, 0xed, 0x59, 0x7f, 0x57,
+ 0xc0, 0xe7, 0x48, 0x7a, 0xb4, 0xc5, 0x81, 0xed,
+ 0x81, 0xa7, 0x03, 0x4f, 0x7b, 0xb8, 0xad, 0xd0,
+ 0x67, 0x1f, 0xb7, 0x92, 0xe6, 0x85, 0x4b, 0x80,
+ 0x5f, 0x02, 0xbf, 0x21, 0xd5, 0xc0, 0x68, 0x3c,
+ 0xf7, 0x82, 0xae, 0xa7, 0xcd, 0xb5, 0x00, 0x8e,
+ 0xc8, 0x3c, 0xf6, 0x41, 0xf7, 0xce, 0xbf, 0x9e,
+ 0xb4, 0x83, 0xde, 0xc1, 0xc0, 0xfa, 0xa1, 0x11,
+ 0x3f, 0x62, 0x05, 0xca, 0x15, 0x03, 0x9a, 0x43,
+ 0xda, 0x26, 0xf8, 0x5f, 0xc0, 0xef, 0x81, 0xaf,
+ 0x01, 0xef, 0x25, 0x4d, 0x52, 0xa3, 0x90, 0xdc,
+ 0x5b, 0x0b, 0xa0, 0xae, 0xae, 0xce, 0xff, 0xcb,
+ 0x92, 0x9e, 0xbd, 0xf9, 0x2e, 0x70, 0x0f, 0xf9,
+ 0xbf, 0xb7, 0xf7, 0x02, 0x3f, 0x01, 0xde, 0x00,
+ 0x2c, 0x59, 0x28, 0xa6, 0x81, 0x74, 0xf5, 0x04,
+ 0x68, 0x82, 0x1d, 0xc8, 0x7b, 0xec, 0xcf, 0x2a,
+ 0x38, 0xf6, 0x26, 0x24, 0x00, 0x0b, 0xb6, 0x59,
+ 0xc0, 0x67, 0x49, 0xb5, 0xe9, 0xa3, 0x5d, 0x50,
+ 0x21, 0xbe, 0x05, 0xdb, 0x5d, 0xc0, 0x49, 0xc0,
+ 0x4e, 0xc0, 0x94, 0xd8, 0x70, 0xc3, 0x98, 0x00,
+ 0xd4, 0xd5, 0xb5, 0xf9, 0x7f, 0x53, 0xe0, 0xf3,
+ 0xa4, 0x05, 0xba, 0xe4, 0xf7, 0xf4, 0xf3, 0xc0,
+ 0x53, 0x0b, 0xc4, 0xd7, 0xb7, 0xae, 0x9d, 0x00,
+ 0x4d, 0xb2, 0x03, 0x79, 0x8f, 0xfd, 0x59, 0x05,
+ 0xc7, 0xde, 0xc4, 0x04, 0x60, 0x5e, 0xbb, 0x82,
+ 0xfc, 0xfb, 0xf5, 0x2f, 0xe8, 0x7d, 0x0d, 0x88,
+ 0x73, 0xfe, 0x76, 0x0d, 0xf0, 0xff, 0x80, 0xc5,
+ 0x22, 0x83, 0x0e, 0x60, 0x02, 0x50, 0x57, 0x57,
+ 0xe6, 0xff, 0xa7, 0x03, 0xa7, 0x93, 0x3f, 0xde,
+ 0x7e, 0xdb, 0x69, 0xc0, 0xe6, 0xc1, 0xb1, 0x3e,
+ 0x8a, 0x6f, 0x01, 0xa8, 0x6b, 0x36, 0x24, 0xdd,
+ 0x4f, 0x5f, 0x2b, 0xf0, 0x33, 0xbe, 0x41, 0xba,
+ 0x0d, 0xd0, 0x14, 0x8f, 0x23, 0x5d, 0xfd, 0xb8,
+ 0x0a, 0xd8, 0xab, 0xee, 0x50, 0xa4, 0xc6, 0x58,
+ 0x0f, 0x38, 0x19, 0xf8, 0x1d, 0xf0, 0x7c, 0xea,
+ 0x27, 0x28, 0x2f, 0x06, 0x2e, 0x22, 0x55, 0x3f,
+ 0xcd, 0x5d, 0x53, 0x64, 0xa1, 0x4c, 0x00, 0xd4,
+ 0x45, 0xab, 0x03, 0xdf, 0x26, 0xee, 0x0b, 0x7f,
+ 0x3d, 0xf0, 0xa3, 0xa0, 0xbe, 0x87, 0xb1, 0x26,
+ 0x29, 0xee, 0x5f, 0x3c, 0xfc, 0xff, 0xa5, 0x2e,
+ 0x9a, 0x0a, 0x7c, 0x08, 0xb8, 0x0c, 0xd8, 0x93,
+ 0xfa, 0x0b, 0xff, 0xfc, 0x26, 0x01, 0x2f, 0x03,
+ 0xfe, 0x0c, 0xec, 0x4f, 0xf0, 0xed, 0x3b, 0x13,
+ 0x00, 0x75, 0xd5, 0x33, 0x49, 0xef, 0xd8, 0x47,
+ 0xf9, 0x58, 0x60, 0xdf, 0xc3, 0xda, 0x09, 0xb8,
+ 0x18, 0x78, 0x41, 0xed, 0x81, 0x48, 0x85, 0x6d,
+ 0x04, 0x9c, 0x0b, 0x1c, 0x0a, 0x4c, 0xab, 0x3b,
+ 0x94, 0x71, 0x2d, 0x09, 0x1c, 0x4b, 0x1a, 0xeb,
+ 0x26, 0x51, 0x1f, 0x62, 0x02, 0xa0, 0x2e, 0x7b,
+ 0x77, 0x60, 0xdf, 0x17, 0x90, 0xee, 0xe9, 0x35,
+ 0xd5, 0xca, 0xa4, 0x27, 0x91, 0xdf, 0x5a, 0x7b,
+ 0x20, 0x52, 0x21, 0xaf, 0x25, 0x5d, 0x62, 0xdf,
+ 0xa6, 0xf6, 0x40, 0xfa, 0xf0, 0x34, 0xe0, 0x3c,
+ 0x60, 0xf7, 0x88, 0xce, 0x4d, 0x00, 0xd4, 0x65,
+ 0x5b, 0x13, 0xfb, 0x2c, 0xc0, 0x3b, 0x81, 0xfb,
+ 0x03, 0xfb, 0x1f, 0xd6, 0x14, 0xe0, 0x73, 0xc0,
+ 0x21, 0xb5, 0x07, 0x22, 0x05, 0x9a, 0x44, 0xfa,
+ 0xc5, 0x7f, 0x02, 0xb0, 0x44, 0xdd, 0xa1, 0x0c,
+ 0x64, 0x69, 0xe0, 0x7b, 0xa4, 0x87, 0xab, 0xb3,
+ 0xae, 0xd9, 0x26, 0x00, 0xea, 0xb2, 0x49, 0xc0,
+ 0x16, 0x81, 0xfd, 0x5f, 0x0d, 0x7c, 0x38, 0xb0,
+ 0xff, 0x5c, 0x3e, 0x02, 0xec, 0x53, 0x7b, 0x10,
+ 0x52, 0x80, 0x45, 0x49, 0x0f, 0xfa, 0x7d, 0x88,
+ 0x66, 0xdd, 0xeb, 0xef, 0xd7, 0x24, 0xe0, 0x00,
+ 0xe0, 0xff, 0xc8, 0xb8, 0xc7, 0x87, 0x09, 0x80,
+ 0xba, 0x6e, 0x8d, 0xe0, 0xfe, 0x8f, 0x04, 0xce,
+ 0x08, 0xfe, 0x8c, 0x1c, 0x3e, 0x45, 0xd0, 0x65,
+ 0x46, 0xa9, 0x92, 0x45, 0x80, 0x53, 0x88, 0x7d,
+ 0xd6, 0xa7, 0xb4, 0x57, 0x02, 0xdf, 0x22, 0xc5,
+ 0x36, 0x34, 0x13, 0x00, 0x75, 0xdd, 0xdc, 0xe0,
+ 0xfe, 0xe7, 0x00, 0xaf, 0x01, 0xae, 0x0d, 0xfe,
+ 0x9c, 0x61, 0x4d, 0x26, 0xed, 0x24, 0x58, 0xe4,
+ 0xf5, 0x23, 0x29, 0xd8, 0x54, 0xe0, 0x9b, 0xc0,
+ 0xae, 0xb5, 0x07, 0x12, 0xe0, 0x65, 0xa4, 0xb7,
+ 0x79, 0x86, 0xbe, 0x12, 0x60, 0x02, 0xa0, 0xae,
+ 0xbb, 0xbe, 0xc0, 0x67, 0xdc, 0x4c, 0x7a, 0xe2,
+ 0xfe, 0xb6, 0x02, 0x9f, 0x35, 0x8c, 0x65, 0x49,
+ 0x13, 0x4b, 0x5b, 0x77, 0x0e, 0x94, 0xe6, 0xf9,
+ 0x22, 0x69, 0xa1, 0x1c, 0x55, 0x7b, 0x00, 0x9f,
+ 0x1c, 0xb6, 0x13, 0x13, 0x00, 0x75, 0xd9, 0x5c,
+ 0x52, 0x81, 0x8e, 0x12, 0x2e, 0x03, 0xfe, 0x8b,
+ 0xb4, 0x77, 0x7f, 0x93, 0x6d, 0x0d, 0xbc, 0xad,
+ 0xf6, 0x20, 0xa4, 0x21, 0xec, 0x0b, 0xfc, 0x4f,
+ 0xed, 0x41, 0x14, 0xf0, 0x0e, 0x86, 0xfc, 0xae,
+ 0x9a, 0x00, 0xa8, 0xcb, 0xce, 0x07, 0xae, 0x2b,
+ 0xf8, 0x79, 0x7f, 0x04, 0xb6, 0xa3, 0xf9, 0xb7,
+ 0x03, 0x3e, 0x0c, 0xac, 0x52, 0x7b, 0x10, 0xd2,
+ 0x00, 0xb6, 0x03, 0x8e, 0xae, 0x3d, 0x88, 0x82,
+ 0x8e, 0x03, 0x76, 0x1c, 0xf4, 0x3f, 0x36, 0x01,
+ 0x50, 0x97, 0xd5, 0x98, 0x28, 0x2e, 0x25, 0xbd,
+ 0xdb, 0xfb, 0xeb, 0x0a, 0x9f, 0xdd, 0xab, 0x65,
+ 0x81, 0x77, 0xd5, 0x1e, 0x84, 0xd4, 0xa7, 0x15,
+ 0x49, 0x0f, 0xfd, 0x65, 0x79, 0x40, 0xae, 0x25,
+ 0xa6, 0x92, 0x5e, 0x6f, 0x5c, 0x66, 0x90, 0xff,
+ 0xd8, 0x04, 0x40, 0x5d, 0xf5, 0x5b, 0x52, 0xb9,
+ 0xcf, 0x1a, 0x6e, 0x24, 0xed, 0x3d, 0xfe, 0x41,
+ 0xe0, 0xc1, 0x4a, 0x63, 0x98, 0xc8, 0xdb, 0x28,
+ 0x53, 0x39, 0x51, 0xca, 0xe5, 0x18, 0x60, 0xb5,
+ 0xda, 0x83, 0xa8, 0x60, 0x1d, 0x06, 0x7c, 0x1e,
+ 0xc0, 0x04, 0x40, 0x5d, 0x74, 0x23, 0xe9, 0x75,
+ 0x9a, 0xe8, 0x37, 0x00, 0xc6, 0x33, 0x9b, 0x74,
+ 0xa9, 0xfd, 0xc9, 0xa4, 0xbd, 0xf9, 0x9b, 0x66,
+ 0x69, 0xd2, 0xdb, 0x0b, 0x52, 0x1b, 0x3c, 0x0f,
+ 0x78, 0x5d, 0xed, 0x41, 0x54, 0xf4, 0x06, 0x60,
+ 0xe7, 0x7e, 0xff, 0x23, 0x13, 0x00, 0x75, 0xcd,
+ 0x15, 0xa4, 0x7b, 0x66, 0x25, 0x9e, 0xfe, 0xef,
+ 0xc5, 0xdf, 0x81, 0x17, 0x92, 0xee, 0x5d, 0x36,
+ 0x2d, 0x11, 0xe8, 0xf2, 0x84, 0xaa, 0xf6, 0x58,
+ 0x0c, 0xf8, 0x02, 0xed, 0xde, 0xe8, 0x27, 0x87,
+ 0x63, 0xe9, 0xf3, 0xd5, 0xc0, 0x6c, 0x3b, 0x0a,
+ 0x49, 0x0d, 0x37, 0x8b, 0xf4, 0x6a, 0xd0, 0x21,
+ 0xc0, 0x5d, 0x95, 0xc7, 0xb2, 0x30, 0xe7, 0x90,
+ 0x12, 0x81, 0x27, 0x90, 0xf6, 0x2c, 0x7f, 0xc5,
+ 0xc3, 0xff, 0xbf, 0xa6, 0xad, 0x48, 0xfb, 0x02,
+ 0x5c, 0x5d, 0x79, 0x1c, 0xd2, 0x78, 0xde, 0x4d,
+ 0x9d, 0xfd, 0x2b, 0xae, 0x02, 0xfe, 0x0a, 0xfc,
+ 0x8b, 0xb4, 0xe5, 0xf7, 0x2c, 0xd2, 0xbd, 0xf8,
+ 0x35, 0x48, 0x57, 0xf6, 0x36, 0xa0, 0xec, 0x8f,
+ 0xec, 0x8d, 0x81, 0x37, 0x01, 0x9f, 0xcf, 0xd5,
+ 0xe1, 0x1c, 0xd2, 0x65, 0xd2, 0x5c, 0xad, 0xeb,
+ 0x19, 0x5a, 0x3f, 0x76, 0x20, 0xef, 0xb1, 0x3f,
+ 0xab, 0xe0, 0xd8, 0x8f, 0xc8, 0x3c, 0xf6, 0x41,
+ 0xda, 0x2c, 0xd2, 0x13, 0xfe, 0xbf, 0x01, 0x0e,
+ 0x04, 0x1e, 0x1f, 0x1a, 0x71, 0x8c, 0x75, 0x81,
+ 0xff, 0x26, 0x3d, 0xe9, 0xfb, 0x73, 0xd2, 0xd5,
+ 0x8b, 0x5b, 0x81, 0x07, 0x28, 0x77, 0x1c, 0xf7,
+ 0x8e, 0x0e, 0x72, 0x1c, 0x67, 0x8e, 0x33, 0xae,
+ 0x41, 0xda, 0xb3, 0xcb, 0x0e, 0xbf, 0xf5, 0xda,
+ 0x30, 0xff, 0xaf, 0x09, 0xdc, 0x93, 0x79, 0x9c,
+ 0x63, 0xb5, 0x39, 0xc0, 0xcf, 0x48, 0xaf, 0x18,
+ 0xf6, 0xf2, 0x96, 0xcc, 0xca, 0xa4, 0x64, 0xfe,
+ 0x74, 0xd2, 0x2d, 0xbf, 0x12, 0x63, 0xbc, 0x11,
+ 0x58, 0xaa, 0xa7, 0x23, 0xd7, 0x83, 0x36, 0x9c,
+ 0x00, 0xa3, 0x6a, 0x07, 0xf2, 0x1e, 0xfb, 0xb3,
+ 0x0a, 0x8e, 0x3d, 0x77, 0x02, 0x70, 0x40, 0xc1,
+ 0xb1, 0xb7, 0xc9, 0xa2, 0xa4, 0xf2, 0xa6, 0xef,
+ 0x23, 0x6d, 0x36, 0x14, 0x31, 0xa1, 0x7c, 0xb3,
+ 0x58, 0x34, 0x8f, 0x65, 0x02, 0x50, 0x57, 0x1b,
+ 0xe6, 0xff, 0x93, 0x32, 0x8f, 0x71, 0x61, 0x6d,
+ 0x0e, 0x69, 0x0f, 0xfe, 0x8d, 0x86, 0x18, 0xe7,
+ 0x46, 0xa4, 0xef, 0x52, 0x89, 0x44, 0xe0, 0xed,
+ 0xbd, 0x0e, 0xca, 0x67, 0x00, 0xa4, 0xf6, 0x7a,
+ 0x90, 0x74, 0x55, 0xe0, 0x28, 0x60, 0x53, 0xe0,
+ 0xec, 0x80, 0xcf, 0x78, 0x4a, 0x40, 0x9f, 0x52,
+ 0x0e, 0x4f, 0x07, 0x5e, 0x1d, 0xfc, 0x19, 0x57,
+ 0x00, 0xdb, 0x92, 0x1e, 0x88, 0xbd, 0x62, 0xc8,
+ 0x7e, 0x5e, 0x45, 0xfa, 0x61, 0x77, 0x79, 0x86,
+ 0x71, 0x8d, 0x67, 0x1f, 0x7a, 0x4c, 0xb6, 0x4c,
+ 0x00, 0xa4, 0xd1, 0x70, 0x1b, 0xb0, 0x0b, 0x70,
+ 0x65, 0xe6, 0x7e, 0x37, 0xc0, 0x67, 0x85, 0xd4,
+ 0x3c, 0x93, 0x48, 0xb7, 0xc6, 0x22, 0xaf, 0x2a,
+ 0x7f, 0x9b, 0x54, 0x2d, 0xf4, 0xbc, 0x8c, 0x7d,
+ 0x9e, 0x43, 0x7a, 0xb6, 0xe6, 0x3b, 0x19, 0xfb,
+ 0x5c, 0xd0, 0x46, 0xc0, 0x4e, 0xbd, 0xfc, 0x8b,
+ 0x26, 0x00, 0xd2, 0xe8, 0x98, 0x01, 0x1c, 0x94,
+ 0xb9, 0xcf, 0x69, 0xc4, 0x57, 0x4c, 0x94, 0xfa,
+ 0xf5, 0x5a, 0x60, 0x9b, 0xc0, 0xfe, 0x8f, 0x21,
+ 0xfd, 0x62, 0xbf, 0x2f, 0xa0, 0xef, 0x7b, 0x81,
+ 0xbd, 0x80, 0x4f, 0x07, 0xf4, 0x3d, 0x4f, 0x4f,
+ 0xcf, 0xee, 0x98, 0x00, 0x48, 0xa3, 0xe5, 0x34,
+ 0x52, 0x22, 0x90, 0xd3, 0xb2, 0x99, 0xfb, 0x93,
+ 0x86, 0xb1, 0x14, 0xf0, 0xf1, 0xc0, 0xfe, 0x3f,
+ 0x07, 0xbc, 0x87, 0x74, 0x3f, 0x3d, 0xca, 0x5c,
+ 0xe0, 0x9d, 0xa4, 0x37, 0x93, 0x22, 0xbc, 0x10,
+ 0x58, 0x62, 0xa2, 0x7f, 0xc9, 0x04, 0x40, 0x1a,
+ 0x2d, 0x33, 0x49, 0x7b, 0x0b, 0xe4, 0xb4, 0x74,
+ 0xe6, 0xfe, 0xa4, 0x61, 0x1c, 0x4c, 0xdc, 0x55,
+ 0xa9, 0xb3, 0x48, 0xc5, 0x84, 0x4a, 0x98, 0x4b,
+ 0x2a, 0xe8, 0xf3, 0x9b, 0x80, 0xbe, 0x97, 0x24,
+ 0x55, 0x20, 0x1d, 0x97, 0x09, 0x80, 0x34, 0x7a,
+ 0xfc, 0x5e, 0x6b, 0x54, 0xad, 0x07, 0xec, 0x1f,
+ 0xd4, 0xf7, 0x0c, 0xd2, 0xc3, 0x7e, 0x0f, 0x05,
+ 0xf5, 0xbf, 0x30, 0xb3, 0x48, 0x1b, 0x6e, 0x45,
+ 0xec, 0x4d, 0xb2, 0xdb, 0x44, 0xff, 0x82, 0x13,
+ 0x85, 0x34, 0x5a, 0xa6, 0x91, 0x1e, 0xdc, 0xcb,
+ 0xe9, 0xee, 0xcc, 0xfd, 0x49, 0x83, 0xfa, 0x04,
+ 0x69, 0xe7, 0xbf, 0x08, 0x87, 0x50, 0x67, 0x87,
+ 0xd0, 0x7f, 0x01, 0x87, 0x06, 0xf4, 0xbb, 0xdd,
+ 0x44, 0xff, 0x82, 0x09, 0x80, 0x34, 0x5a, 0x76,
+ 0x65, 0xc0, 0xca, 0x60, 0xe3, 0x68, 0xe2, 0xce,
+ 0x89, 0xea, 0x9e, 0xe7, 0x00, 0x7b, 0x04, 0xf5,
+ 0xfd, 0x17, 0xd2, 0xbd, 0xff, 0x5a, 0x3e, 0x0b,
+ 0x4c, 0xcf, 0xdc, 0xe7, 0xe3, 0x81, 0x55, 0xc7,
+ 0xfb, 0x17, 0x4c, 0x00, 0xd4, 0x06, 0x9e, 0xa7,
+ 0xbd, 0x59, 0x96, 0xfc, 0x0f, 0x47, 0x3d, 0x48,
+ 0x73, 0xea, 0x26, 0xa8, 0xbb, 0xa6, 0x30, 0x60,
+ 0xc5, 0xbb, 0x1e, 0xbd, 0x9b, 0xb4, 0x49, 0x4f,
+ 0x2d, 0x33, 0x81, 0xcf, 0x04, 0xf4, 0xfb, 0xb4,
+ 0xf1, 0xfe, 0xa1, 0x13, 0xab, 0x22, 0xe4, 0x7e,
+ 0x75, 0x66, 0xf3, 0xcc, 0xfd, 0x8d, 0xa2, 0x95,
+ 0x48, 0x6f, 0x00, 0xe4, 0xbe, 0xfc, 0xff, 0x0f,
+ 0xea, 0x4e, 0x8c, 0x12, 0xc0, 0x9b, 0x49, 0xfb,
+ 0xeb, 0x47, 0xf8, 0x01, 0xf0, 0xcb, 0xa0, 0xbe,
+ 0xfb, 0xf1, 0x35, 0xd2, 0x33, 0x01, 0x39, 0x8d,
+ 0xbb, 0x91, 0x97, 0x09, 0x80, 0x22, 0xdc, 0x93,
+ 0xb9, 0xbf, 0x97, 0x93, 0x5e, 0x99, 0xf1, 0x75,
+ 0xb4, 0x47, 0x5b, 0x14, 0xd8, 0x84, 0x54, 0xeb,
+ 0xe0, 0x32, 0x7a, 0xb8, 0xe7, 0x37, 0x80, 0x3f,
+ 0x05, 0xf4, 0x29, 0xf5, 0x63, 0x79, 0xe0, 0xf0,
+ 0xa0, 0xbe, 0x1f, 0x24, 0xbd, 0xf2, 0xd7, 0x04,
+ 0xb7, 0x93, 0xff, 0x8d, 0x80, 0x75, 0xc7, 0xfb,
+ 0x87, 0xee, 0xf0, 0xa5, 0x08, 0xb9, 0x2f, 0x19,
+ 0x4f, 0x22, 0x5d, 0xfe, 0x1b, 0xe6, 0x12, 0xe0,
+ 0x83, 0xa4, 0xfd, 0xf2, 0x2f, 0x03, 0x7e, 0x0c,
+ 0x9c, 0x02, 0xdc, 0x32, 0xfc, 0xd0, 0x7a, 0x32,
+ 0x05, 0x78, 0x31, 0xe9, 0xa9, 0xdc, 0xa7, 0x91,
+ 0x0a, 0x98, 0xe4, 0xbe, 0x4f, 0x1f, 0xe5, 0xcc,
+ 0xda, 0x03, 0x50, 0xe7, 0x1d, 0x4a, 0xba, 0xc2,
+ 0x15, 0xe1, 0x18, 0x9a, 0x55, 0xed, 0xf2, 0xd7,
+ 0xc0, 0xf3, 0x32, 0xf6, 0xb7, 0xce, 0x30, 0xff,
+ 0x71, 0x1b, 0x8a, 0x41, 0x8c, 0xaa, 0x1d, 0xc8,
+ 0x7b, 0xec, 0xcf, 0x2a, 0x38, 0xf6, 0xcd, 0x33,
+ 0x8f, 0x3d, 0xa2, 0xcd, 0x00, 0x3e, 0x00, 0x2c,
+ 0x12, 0x74, 0x0c, 0xe6, 0xd9, 0x89, 0x54, 0x32,
+ 0xb4, 0x76, 0xbc, 0x83, 0xb6, 0x1a, 0x65, 0x56,
+ 0xe7, 0xb1, 0x18, 0x50, 0x5d, 0x4d, 0x98, 0xff,
+ 0x37, 0x21, 0xdd, 0x1f, 0x8f, 0x38, 0xb7, 0x6f,
+ 0xa0, 0x79, 0x7b, 0x5c, 0xec, 0x44, 0xde, 0x18,
+ 0xc7, 0xad, 0x5f, 0xe0, 0x2d, 0x00, 0x45, 0xb8,
+ 0x9c, 0x54, 0xb2, 0xb6, 0xc9, 0x96, 0x26, 0x5d,
+ 0x56, 0xfc, 0x25, 0x71, 0xbf, 0x2e, 0x0e, 0x26,
+ 0x95, 0x0f, 0xdd, 0x2c, 0xa8, 0xff, 0x68, 0xe7,
+ 0xd3, 0xac, 0x5f, 0x47, 0xea, 0x9e, 0x4f, 0x12,
+ 0x97, 0xa4, 0x1f, 0x44, 0xf3, 0x5e, 0x71, 0xcd,
+ 0xfd, 0x7d, 0x1b, 0xf7, 0xb6, 0xa9, 0x09, 0x80,
+ 0x22, 0x3c, 0x00, 0xfc, 0xbe, 0xf6, 0x20, 0x7a,
+ 0xb4, 0x03, 0xf0, 0x0b, 0x7a, 0xd8, 0x36, 0xb3,
+ 0x4f, 0x07, 0x00, 0x1f, 0xa5, 0xdd, 0xdf, 0xb1,
+ 0x13, 0x6b, 0x0f, 0x40, 0x9d, 0xf6, 0x62, 0x7a,
+ 0xd8, 0xcd, 0x6e, 0x40, 0x77, 0x53, 0xf6, 0xaa,
+ 0x68, 0xaf, 0x6e, 0xca, 0xdc, 0xdf, 0xb4, 0xf1,
+ 0xfe, 0x61, 0x9b, 0x27, 0x27, 0x35, 0xdb, 0xcf,
+ 0x6b, 0x0f, 0xa0, 0x0f, 0x5b, 0x90, 0xee, 0x05,
+ 0xe6, 0xb2, 0x03, 0xf0, 0xb1, 0x8c, 0xfd, 0xd5,
+ 0x30, 0x03, 0xf8, 0x46, 0xed, 0x41, 0xa8, 0xb3,
+ 0xa6, 0x91, 0xf7, 0x3b, 0xb9, 0xa0, 0xa5, 0x49,
+ 0xcf, 0x03, 0x1d, 0x41, 0xaa, 0x2d, 0xd0, 0x14,
+ 0xb9, 0xdf, 0x02, 0x18, 0xf7, 0xea, 0x89, 0x09,
+ 0x80, 0xa2, 0x7c, 0x83, 0x76, 0xbd, 0x3e, 0xb6,
+ 0x37, 0xf0, 0xc4, 0x0c, 0xfd, 0x4c, 0x22, 0x4d,
+ 0x5c, 0x6d, 0xff, 0x6e, 0x1d, 0x0f, 0xdc, 0x51,
+ 0x7b, 0x10, 0xea, 0xac, 0x7d, 0x80, 0x0d, 0x83,
+ 0x3f, 0x63, 0x71, 0xd2, 0x95, 0xba, 0x4b, 0x81,
+ 0x57, 0xd0, 0x8c, 0x67, 0xd4, 0xc6, 0xfd, 0xc5,
+ 0x3e, 0x80, 0x29, 0xe3, 0xfd, 0xc3, 0xb6, 0x4f,
+ 0x52, 0x6a, 0xae, 0xeb, 0x49, 0x97, 0xd6, 0xdb,
+ 0x62, 0x0a, 0xb0, 0x5f, 0x86, 0x7e, 0x76, 0x04,
+ 0xb6, 0xcc, 0xd0, 0x4f, 0x4d, 0x77, 0x12, 0xbb,
+ 0xe9, 0x8a, 0x34, 0x9e, 0x55, 0x48, 0x0f, 0xe8,
+ 0x96, 0xb2, 0x36, 0xf0, 0x2d, 0xe0, 0x6c, 0xea,
+ 0x7f, 0x77, 0x57, 0xcc, 0xdc, 0xdf, 0xb8, 0xbb,
+ 0x78, 0x9a, 0x00, 0x28, 0xd2, 0x47, 0x6a, 0x0f,
+ 0xa0, 0x4f, 0xbb, 0x32, 0x41, 0xc6, 0xdc, 0x83,
+ 0x09, 0x0b, 0x70, 0xb4, 0xc0, 0xfb, 0x81, 0x7f,
+ 0xd7, 0x1e, 0x84, 0x3a, 0xeb, 0x63, 0xd4, 0xd9,
+ 0xf3, 0xe3, 0x59, 0xa4, 0x07, 0x5f, 0x4f, 0x04,
+ 0x56, 0xab, 0xf0, 0xf9, 0x90, 0xff, 0xaa, 0xc7,
+ 0xad, 0xe3, 0xfd, 0x43, 0x13, 0x00, 0x45, 0xfa,
+ 0x3d, 0x70, 0x7a, 0xed, 0x41, 0xf4, 0x61, 0x15,
+ 0x60, 0xad, 0x21, 0xfb, 0xd8, 0x22, 0xc7, 0x40,
+ 0x2a, 0xfa, 0x23, 0xf0, 0xf9, 0xda, 0x83, 0x50,
+ 0x67, 0x3d, 0x15, 0xf8, 0x9f, 0x8a, 0x9f, 0x3f,
+ 0x09, 0x78, 0x2d, 0xe9, 0xf5, 0xb9, 0xf7, 0x92,
+ 0xff, 0x92, 0xfc, 0x44, 0x72, 0xef, 0x7a, 0x7a,
+ 0xfb, 0x78, 0xff, 0xd0, 0x04, 0x40, 0xd1, 0xde,
+ 0x41, 0xf3, 0x5f, 0x09, 0x9c, 0xdf, 0x9a, 0x95,
+ 0xff, 0xfb, 0x9a, 0xee, 0x04, 0x5e, 0x49, 0xbb,
+ 0x9e, 0xdd, 0xd0, 0xe8, 0x98, 0x04, 0x1c, 0x47,
+ 0x33, 0xd6, 0xa5, 0x65, 0x80, 0xa3, 0x80, 0xbf,
+ 0x91, 0xae, 0x0c, 0x96, 0x92, 0x73, 0x13, 0x20,
+ 0x48, 0x7b, 0x1d, 0x8c, 0xa9, 0x09, 0x07, 0x5a,
+ 0x0b, 0x97, 0xfb, 0xfd, 0xd4, 0x19, 0x99, 0xfb,
+ 0xeb, 0xd5, 0x95, 0xc4, 0x94, 0xba, 0x6c, 0xaa,
+ 0x39, 0xb5, 0x07, 0x30, 0xa0, 0x39, 0xc0, 0x7f,
+ 0xd3, 0xac, 0xf7, 0xfe, 0x73, 0x6f, 0x29, 0x5d,
+ 0xeb, 0x3b, 0xa0, 0xde, 0xbc, 0x9c, 0x98, 0xed,
+ 0xac, 0x87, 0xb1, 0x01, 0x70, 0x2a, 0xe9, 0x4a,
+ 0xe6, 0xa6, 0xc1, 0x9f, 0xb5, 0x22, 0xb0, 0x7d,
+ 0xe6, 0x3e, 0xff, 0x3a, 0xde, 0x3f, 0x34, 0x01,
+ 0x68, 0xae, 0x1b, 0x33, 0xf7, 0x37, 0x6e, 0x26,
+ 0x18, 0xec, 0x28, 0xd2, 0x86, 0x38, 0x6d, 0x30,
+ 0xec, 0x36, 0xc6, 0xb9, 0xff, 0x6e, 0xa5, 0xbc,
+ 0x8b, 0x34, 0xd1, 0x35, 0x49, 0xee, 0x73, 0xd6,
+ 0xaa, 0x86, 0xcd, 0xb5, 0x38, 0x69, 0x9e, 0x68,
+ 0xaa, 0xe7, 0x93, 0xea, 0x62, 0x7c, 0x1a, 0x58,
+ 0x21, 0xe8, 0x33, 0x5e, 0x43, 0xaa, 0xef, 0x91,
+ 0xd3, 0xb8, 0x09, 0xc0, 0x44, 0x9a, 0xb0, 0x15,
+ 0x64, 0x57, 0x4d, 0x02, 0xae, 0x25, 0xdf, 0xb1,
+ 0x7f, 0x53, 0xd9, 0xe1, 0x3f, 0xc6, 0x32, 0xc0,
+ 0x85, 0xc4, 0x6c, 0xe9, 0x99, 0xab, 0xdd, 0xcc,
+ 0xf0, 0x49, 0xf1, 0xa7, 0x1a, 0x10, 0x47, 0xbf,
+ 0xed, 0xe0, 0x21, 0x63, 0x8e, 0xb2, 0x37, 0xf9,
+ 0x62, 0xbc, 0x0e, 0xe7, 0x9f, 0x7e, 0x95, 0x9c,
+ 0xff, 0x3f, 0x98, 0xf9, 0xb3, 0x22, 0xdb, 0xad,
+ 0xc0, 0xdb, 0xc9, 0x5b, 0x4b, 0x67, 0x1a, 0x30,
+ 0x3d, 0x60, 0xac, 0x43, 0x6d, 0xe5, 0x6d, 0x02,
+ 0x50, 0xd7, 0xf1, 0xe4, 0x39, 0xee, 0xb3, 0xa9,
+ 0xf7, 0x54, 0xeb, 0xfc, 0x56, 0x23, 0xbd, 0x73,
+ 0x5b, 0xfb, 0x0b, 0x3c, 0x56, 0xfb, 0x52, 0x86,
+ 0x18, 0x77, 0x6c, 0x40, 0x1c, 0xbd, 0xb6, 0x87,
+ 0x48, 0x8b, 0x6c, 0x53, 0xad, 0x46, 0x3a, 0x77,
+ 0x73, 0xc4, 0x7a, 0x7c, 0xe1, 0xb1, 0x8f, 0x82,
+ 0x52, 0xf3, 0xff, 0x5a, 0xc0, 0xbd, 0x99, 0x3f,
+ 0xab, 0x44, 0xfb, 0x0b, 0xf0, 0xdc, 0xde, 0x0f,
+ 0xe7, 0xb8, 0xde, 0x16, 0x30, 0xbe, 0x6b, 0x87,
+ 0x1d, 0x94, 0x09, 0x40, 0x5d, 0x1b, 0x92, 0xa7,
+ 0x10, 0xc6, 0xd7, 0x0b, 0x8f, 0x7b, 0x3c, 0x2b,
+ 0x92, 0xde, 0x0e, 0xa8, 0xfd, 0xe5, 0x5d, 0xb0,
+ 0x3d, 0x44, 0x9e, 0x3d, 0xfb, 0x27, 0x91, 0x5e,
+ 0x25, 0xaa, 0x1d, 0xcf, 0x44, 0xed, 0x26, 0xf2,
+ 0x4d, 0x5e, 0x91, 0x4e, 0x64, 0xf8, 0x58, 0x67,
+ 0x91, 0x8a, 0xca, 0xa8, 0x3f, 0xa5, 0xe6, 0xff,
+ 0x6f, 0x66, 0xfe, 0x9c, 0xd2, 0xed, 0x34, 0x60,
+ 0xfd, 0x5e, 0x0f, 0xea, 0x42, 0x2c, 0x4f, 0x7a,
+ 0xed, 0x36, 0xf7, 0xb8, 0xbe, 0x3c, 0xc4, 0x98,
+ 0x00, 0x13, 0x80, 0x26, 0x18, 0xf6, 0x92, 0xf2,
+ 0x5d, 0x0c, 0x59, 0x12, 0x32, 0xc0, 0x62, 0xe4,
+ 0xbb, 0xba, 0x91, 0xab, 0xe5, 0xfc, 0x85, 0xb8,
+ 0x3d, 0x29, 0xa1, 0xa8, 0x1d, 0xd3, 0x58, 0xed,
+ 0x27, 0xc0, 0xea, 0x19, 0xe3, 0x8d, 0xb4, 0x0e,
+ 0xe9, 0x1c, 0x1e, 0x26, 0x5e, 0x37, 0x35, 0x1a,
+ 0x4c, 0x89, 0xf9, 0x7f, 0xdb, 0x80, 0xcf, 0xa9,
+ 0xd1, 0x66, 0x92, 0xde, 0x60, 0x18, 0xa4, 0xcc,
+ 0x77, 0xd4, 0x6d, 0xc3, 0x97, 0x0f, 0x30, 0x96,
+ 0x47, 0x31, 0x01, 0xa8, 0x6f, 0x11, 0x52, 0xd1,
+ 0x8a, 0x41, 0x8e, 0xf7, 0x6c, 0x60, 0x97, 0xe2,
+ 0x23, 0xee, 0xdd, 0x2e, 0xc0, 0x35, 0xd4, 0xff,
+ 0xf2, 0xfe, 0x81, 0x94, 0x94, 0xe4, 0xf4, 0xde,
+ 0x06, 0xc4, 0xb5, 0x60, 0x9b, 0x0e, 0xec, 0x91,
+ 0x39, 0xce, 0x12, 0x5e, 0xc8, 0xe0, 0x09, 0xd5,
+ 0xb9, 0xe4, 0x7f, 0xb0, 0xaa, 0x2b, 0xa2, 0xe7,
+ 0xff, 0xc9, 0xb4, 0xe3, 0x6a, 0x59, 0x3f, 0xed,
+ 0x06, 0xd2, 0xdb, 0x34, 0xbd, 0x3e, 0x4b, 0xb4,
+ 0x31, 0x31, 0xe5, 0x8e, 0x1f, 0x24, 0x5d, 0x59,
+ 0x18, 0x8a, 0x09, 0x40, 0x33, 0x2c, 0x4f, 0x7a,
+ 0x0d, 0xa5, 0x9f, 0x63, 0x7d, 0x2f, 0xb0, 0x67,
+ 0x8d, 0xc1, 0xf6, 0x69, 0x09, 0xe0, 0x40, 0xe0,
+ 0x16, 0xea, 0x7c, 0x61, 0xcf, 0x24, 0xff, 0xf6,
+ 0x9b, 0xf3, 0x1c, 0x48, 0xbe, 0x7b, 0xd8, 0xc3,
+ 0xb4, 0x7f, 0x90, 0xee, 0xf5, 0x97, 0xde, 0xd4,
+ 0x24, 0xa7, 0x3d, 0xe9, 0xff, 0x3e, 0xf1, 0xe9,
+ 0x64, 0x98, 0x04, 0x3b, 0x2c, 0x7a, 0xfe, 0x7f,
+ 0x43, 0xe6, 0xfe, 0x9b, 0xd4, 0x2e, 0x24, 0xed,
+ 0x2c, 0x38, 0x91, 0x9f, 0x06, 0x7d, 0xfe, 0xc9,
+ 0x3d, 0x7c, 0xf6, 0x84, 0x4c, 0x00, 0x9a, 0x63,
+ 0x2a, 0xa9, 0x70, 0xc5, 0x9d, 0x4c, 0x7c, 0x9c,
+ 0xcf, 0x04, 0x9e, 0x54, 0x67, 0x98, 0x03, 0x5b,
+ 0x82, 0xf4, 0xa6, 0xc2, 0xd9, 0x94, 0xb9, 0x24,
+ 0x78, 0x17, 0x70, 0x08, 0x71, 0xb5, 0xc6, 0xe7,
+ 0x79, 0x2e, 0xf0, 0xe7, 0x02, 0xf1, 0x2c, 0xd8,
+ 0xee, 0x00, 0x4e, 0x20, 0x6d, 0x2c, 0x32, 0x2a,
+ 0xaf, 0xfb, 0x3e, 0x09, 0xf8, 0x15, 0x13, 0xc7,
+ 0x7e, 0x27, 0xe9, 0xbb, 0x92, 0xf3, 0x29, 0xed,
+ 0x2e, 0x8a, 0x9c, 0xff, 0x97, 0x26, 0xfd, 0x5a,
+ 0x2e, 0xfd, 0xbd, 0x28, 0xdd, 0x4e, 0x03, 0xd6,
+ 0x1d, 0xe3, 0xf8, 0xbe, 0x38, 0xf0, 0x73, 0x77,
+ 0x1a, 0xe3, 0x33, 0xfb, 0x62, 0x02, 0xd0, 0x3c,
+ 0x2b, 0x02, 0x6f, 0x25, 0x65, 0x8e, 0xd7, 0x90,
+ 0x76, 0xd9, 0xfb, 0x37, 0x70, 0x09, 0xe9, 0x5e,
+ 0x52, 0xd3, 0x36, 0xd2, 0x18, 0xc4, 0xaa, 0xc0,
+ 0x5e, 0xa4, 0x77, 0x6e, 0x4f, 0x07, 0xae, 0x22,
+ 0x6d, 0x69, 0x39, 0xcc, 0xaf, 0xe9, 0x07, 0x48,
+ 0x97, 0xc0, 0x7f, 0x46, 0x7a, 0xe2, 0x76, 0xe5,
+ 0x52, 0xc1, 0x90, 0x16, 0xe0, 0x5d, 0x80, 0xaf,
+ 0x90, 0x76, 0x16, 0xeb, 0x25, 0x89, 0xeb, 0xa5,
+ 0xcd, 0x26, 0x1d, 0x97, 0xe9, 0xa4, 0x4b, 0xdd,
+ 0x5f, 0x01, 0xde, 0x0d, 0x6c, 0xcd, 0xf0, 0x35,
+ 0x0d, 0x9a, 0x6c, 0x3b, 0xd2, 0xb9, 0x7e, 0x09,
+ 0xe9, 0xca, 0xd1, 0x03, 0xa4, 0xef, 0xc2, 0x4f,
+ 0x49, 0xdf, 0x8d, 0xa8, 0x2b, 0x3a, 0x5d, 0x13,
+ 0x39, 0xff, 0x1f, 0x99, 0xb9, 0xef, 0x26, 0xb7,
+ 0x7b, 0x79, 0x6c, 0xd9, 0xe1, 0x69, 0xc0, 0xe5,
+ 0x41, 0x9f, 0xf7, 0x2f, 0x32, 0x7d, 0xff, 0x4d,
+ 0x00, 0x24, 0xa9, 0x9b, 0xa2, 0xe6, 0xff, 0xf5,
+ 0x49, 0x49, 0x5b, 0xc4, 0xe2, 0x77, 0x7f, 0x50,
+ 0xbf, 0x39, 0xda, 0x74, 0x1e, 0xb9, 0x2d, 0xfb,
+ 0xae, 0xc0, 0xcf, 0xd9, 0x9f, 0x4c, 0x4c, 0x00,
+ 0x24, 0xa9, 0x9b, 0xa2, 0xe6, 0xff, 0x1f, 0x66,
+ 0xee, 0x77, 0xfe, 0xf6, 0x66, 0xd2, 0x15, 0xa2,
+ 0x8b, 0x02, 0x3f, 0x63, 0xd8, 0xf6, 0x1b, 0xf2,
+ 0x5d, 0x05, 0x5c, 0xb0, 0x5d, 0x4f, 0xda, 0x55,
+ 0x31, 0x0b, 0x13, 0x00, 0x49, 0xea, 0xa6, 0x88,
+ 0xf9, 0xff, 0x39, 0x99, 0xfb, 0x9c, 0xbf, 0x5d,
+ 0xcc, 0x23, 0x97, 0xbe, 0x27, 0x03, 0xaf, 0x23,
+ 0xed, 0x77, 0x51, 0x7b, 0xc1, 0x2f, 0xd9, 0xde,
+ 0xf1, 0xd8, 0x3f, 0xe3, 0xe0, 0x4c, 0x00, 0x24,
+ 0xa9, 0x9b, 0x72, 0xcf, 0xff, 0x8b, 0x90, 0x76,
+ 0xcf, 0x8b, 0x5a, 0xfc, 0x76, 0x58, 0x48, 0x0c,
+ 0xcb, 0x02, 0x9f, 0x20, 0xbd, 0x16, 0x57, 0x7b,
+ 0x71, 0x8e, 0x6e, 0xd3, 0xc9, 0xfc, 0xca, 0xab,
+ 0x09, 0x80, 0x24, 0x75, 0x53, 0xee, 0xf9, 0x7f,
+ 0xdf, 0xcc, 0xfd, 0xcd, 0xdf, 0x26, 0x7a, 0xed,
+ 0x6d, 0x03, 0xe0, 0x94, 0xc0, 0xcf, 0x6f, 0x42,
+ 0x1b, 0x7a, 0xe3, 0x9f, 0x05, 0x99, 0x00, 0x48,
+ 0x52, 0x37, 0xe5, 0x9e, 0xff, 0x6f, 0xcb, 0xdc,
+ 0xdf, 0xbc, 0x76, 0x1f, 0xf0, 0xb8, 0x1e, 0x63,
+ 0x7a, 0x01, 0xcd, 0xae, 0x47, 0x32, 0x68, 0xfb,
+ 0x4d, 0x8f, 0xf1, 0xf7, 0xc5, 0x04, 0x40, 0x92,
+ 0xba, 0xa9, 0x2d, 0x5b, 0xf4, 0x1e, 0xde, 0x67,
+ 0x5c, 0x53, 0x49, 0x0f, 0x0b, 0x46, 0xec, 0xbf,
+ 0x5f, 0xa3, 0xcd, 0x06, 0xb6, 0xea, 0xf3, 0x18,
+ 0xf4, 0xc4, 0x04, 0x40, 0x92, 0xba, 0xa9, 0x0d,
+ 0x09, 0xc0, 0x75, 0xc0, 0x92, 0x03, 0xc6, 0xb7,
+ 0x02, 0x69, 0xff, 0xfe, 0x59, 0x0d, 0x88, 0x63,
+ 0x98, 0xf6, 0x85, 0x01, 0xe3, 0x9f, 0x90, 0x09,
+ 0x80, 0x24, 0x75, 0x53, 0x1b, 0x12, 0x80, 0x57,
+ 0x67, 0x88, 0x73, 0x63, 0xd2, 0x06, 0x61, 0xb5,
+ 0x63, 0x19, 0xa4, 0xdd, 0x45, 0x60, 0xa9, 0x77,
+ 0x13, 0x00, 0x49, 0xea, 0xa6, 0xa6, 0x27, 0x00,
+ 0xbf, 0x23, 0xef, 0x9a, 0xb2, 0x0b, 0xa9, 0x6e,
+ 0x46, 0xed, 0xb8, 0xfa, 0x69, 0xef, 0xca, 0x18,
+ 0xff, 0x63, 0x98, 0x00, 0x48, 0x52, 0x37, 0x35,
+ 0x39, 0x01, 0x98, 0x03, 0x6c, 0x13, 0x10, 0xf3,
+ 0x34, 0x60, 0x3f, 0x86, 0x2f, 0x41, 0x5d, 0xa2,
+ 0x5d, 0x49, 0x70, 0xa5, 0x4b, 0x13, 0x00, 0x49,
+ 0xea, 0xa6, 0x26, 0x27, 0x00, 0x5f, 0x0b, 0x8c,
+ 0x1b, 0x60, 0x75, 0xd2, 0xbd, 0xf5, 0x26, 0x54,
+ 0xf3, 0x1c, 0xab, 0xbd, 0x28, 0x2c, 0xfa, 0x87,
+ 0x99, 0x00, 0x48, 0x52, 0x37, 0x35, 0x35, 0x01,
+ 0xb8, 0x1b, 0x58, 0x23, 0x30, 0xee, 0xf9, 0x6d,
+ 0x09, 0x9c, 0x53, 0x20, 0xa6, 0x7e, 0xdb, 0x2f,
+ 0x23, 0x83, 0x9e, 0xc7, 0x04, 0x40, 0x92, 0xba,
+ 0xa9, 0xa9, 0x09, 0xc0, 0x81, 0x91, 0x41, 0x2f,
+ 0xc4, 0x24, 0xd2, 0x26, 0x3b, 0xd3, 0x87, 0x1c,
+ 0x77, 0xae, 0x36, 0x0b, 0xd8, 0x2c, 0x32, 0xe0,
+ 0x79, 0x4c, 0x00, 0x24, 0xa9, 0x9b, 0x9a, 0x98,
+ 0x00, 0xfc, 0x03, 0x58, 0x2c, 0x32, 0xe8, 0x71,
+ 0x2c, 0x01, 0x1c, 0x4a, 0xda, 0x78, 0xa8, 0xe6,
+ 0x31, 0x38, 0x36, 0x38, 0xce, 0xff, 0x30, 0x01,
+ 0x90, 0xa4, 0x6e, 0x6a, 0x62, 0x02, 0xb0, 0x5b,
+ 0x68, 0xc4, 0xbd, 0x59, 0x0b, 0x38, 0x91, 0x3a,
+ 0xc7, 0xe7, 0x36, 0xd2, 0xfe, 0x05, 0x45, 0x98,
+ 0x00, 0x48, 0x52, 0x37, 0x35, 0x2d, 0x01, 0xf8,
+ 0x55, 0x6c, 0xb8, 0x7d, 0xdb, 0x81, 0x54, 0x81,
+ 0xb0, 0xe4, 0x31, 0x78, 0x6b, 0x91, 0xc8, 0x1e,
+ 0x66, 0x02, 0x20, 0x49, 0xdd, 0xd4, 0xa4, 0x04,
+ 0xe0, 0x21, 0xe0, 0xc9, 0xb1, 0xe1, 0x0e, 0xa4,
+ 0x64, 0xd9, 0xe1, 0xbf, 0x92, 0xb6, 0x31, 0x2e,
+ 0xc6, 0x04, 0x40, 0x92, 0xba, 0xa9, 0x49, 0x09,
+ 0xc0, 0x67, 0x83, 0x63, 0x1d, 0xd6, 0x72, 0xa4,
+ 0x6d, 0x85, 0x23, 0x8f, 0xc1, 0xb3, 0x8b, 0x45,
+ 0xf3, 0x30, 0x13, 0x00, 0x49, 0xea, 0xa6, 0xa6,
+ 0x24, 0x00, 0xb7, 0x03, 0x2b, 0x05, 0xc7, 0x9a,
+ 0xc3, 0x3b, 0x88, 0x3b, 0x06, 0xdf, 0x29, 0x18,
+ 0xc7, 0x7f, 0x98, 0x00, 0x48, 0x52, 0x37, 0x35,
+ 0x25, 0x01, 0xd8, 0x37, 0x3a, 0xd0, 0x0c, 0x56,
+ 0x00, 0x6e, 0x25, 0x26, 0xfe, 0xfb, 0x81, 0xc7,
+ 0x97, 0x0b, 0xe5, 0x11, 0x26, 0x00, 0x92, 0xd4,
+ 0x4d, 0x4d, 0x48, 0x00, 0x2e, 0x05, 0x16, 0x89,
+ 0x0e, 0x34, 0x83, 0xff, 0x25, 0xee, 0x18, 0x7c,
+ 0xa4, 0x60, 0x1c, 0x8f, 0x62, 0x02, 0x20, 0x49,
+ 0xdd, 0xd4, 0x84, 0x04, 0xe0, 0x85, 0xe1, 0x51,
+ 0x0e, 0x6f, 0x53, 0x60, 0x26, 0x31, 0xf1, 0xdf,
+ 0x08, 0x2c, 0x53, 0x2e, 0x94, 0x47, 0x33, 0x01,
+ 0x90, 0xa4, 0x6e, 0xaa, 0x9d, 0x00, 0x9c, 0x1a,
+ 0x1f, 0x62, 0x16, 0x3f, 0x27, 0xee, 0x18, 0xbc,
+ 0xb6, 0x60, 0x1c, 0x8f, 0x61, 0x02, 0x20, 0x49,
+ 0xdd, 0x54, 0x33, 0x01, 0x78, 0x10, 0xd8, 0x30,
+ 0x3e, 0xc4, 0xa1, 0xbd, 0x84, 0xb8, 0x63, 0xf0,
+ 0x7b, 0x2a, 0xaf, 0x99, 0x26, 0x00, 0x92, 0xd4,
+ 0x4d, 0x35, 0x13, 0x80, 0xa3, 0x0a, 0xc4, 0x37,
+ 0xac, 0x69, 0xc0, 0x15, 0xc4, 0xc4, 0x3f, 0x07,
+ 0x78, 0x5a, 0xb9, 0x50, 0x16, 0xce, 0x04, 0x40,
+ 0x92, 0xba, 0xa9, 0x56, 0x02, 0x70, 0x33, 0xb0,
+ 0x6c, 0x81, 0xf8, 0x86, 0x75, 0x00, 0x71, 0xc7,
+ 0xe0, 0x84, 0x82, 0x71, 0x8c, 0xc9, 0x04, 0x40,
+ 0x92, 0xba, 0xa9, 0x56, 0x02, 0xf0, 0xc6, 0x12,
+ 0xc1, 0x0d, 0x69, 0x55, 0xe0, 0x4e, 0x62, 0xe2,
+ 0x2f, 0x59, 0xee, 0x78, 0x5c, 0x26, 0x00, 0x92,
+ 0xd4, 0x4d, 0x35, 0x12, 0x80, 0x8b, 0x48, 0xdb,
+ 0xeb, 0x36, 0xdd, 0x57, 0x89, 0x3b, 0x06, 0x07,
+ 0x17, 0x8c, 0x63, 0x5c, 0x26, 0x00, 0x92, 0xd4,
+ 0x4d, 0x35, 0x12, 0x80, 0xed, 0x8b, 0x44, 0x36,
+ 0x9c, 0xa7, 0x02, 0xb3, 0x89, 0x89, 0xff, 0x6a,
+ 0xea, 0x95, 0x3b, 0x7e, 0x0c, 0x13, 0x00, 0x49,
+ 0xea, 0xa6, 0xd2, 0x09, 0xc0, 0xb7, 0xca, 0x84,
+ 0x35, 0x94, 0x49, 0xc0, 0xd9, 0xc4, 0x1d, 0x83,
+ 0x3d, 0xca, 0x85, 0x32, 0x31, 0x13, 0x00, 0x49,
+ 0xea, 0xa6, 0x92, 0x09, 0xc0, 0x7d, 0xc0, 0xba,
+ 0x65, 0xc2, 0x1a, 0xca, 0xab, 0x88, 0x3b, 0x06,
+ 0x67, 0x16, 0x8c, 0xa3, 0x27, 0x26, 0x00, 0x92,
+ 0xd4, 0x4d, 0x25, 0x13, 0x80, 0x43, 0xcb, 0x84,
+ 0x34, 0x94, 0xc5, 0x81, 0xe9, 0xc4, 0xc4, 0xff,
+ 0x10, 0xf0, 0x94, 0x62, 0x91, 0xf4, 0xc8, 0x04,
+ 0x40, 0x92, 0xba, 0xa9, 0x54, 0x02, 0x70, 0x2d,
+ 0xb0, 0x64, 0xa1, 0x98, 0x86, 0x71, 0x18, 0x71,
+ 0xc7, 0xa0, 0x91, 0xe5, 0x8e, 0x4d, 0x00, 0x24,
+ 0xa9, 0x9b, 0x4a, 0x25, 0x00, 0xaf, 0x28, 0x15,
+ 0xd0, 0x10, 0xd6, 0x02, 0xee, 0x21, 0x26, 0xfe,
+ 0xc6, 0x96, 0x3b, 0x36, 0x01, 0x90, 0xa4, 0x6e,
+ 0x2a, 0x91, 0x00, 0xfc, 0x8e, 0x76, 0xac, 0x0b,
+ 0xdf, 0x26, 0xee, 0x18, 0xec, 0x57, 0x30, 0x8e,
+ 0xbe, 0x98, 0x00, 0x48, 0x52, 0x37, 0x45, 0x27,
+ 0x00, 0xb3, 0x81, 0xad, 0x8b, 0x45, 0x33, 0xb8,
+ 0x67, 0x10, 0x77, 0x2c, 0x2e, 0xa3, 0xc1, 0xe5,
+ 0x8e, 0x4d, 0x00, 0x24, 0xa9, 0x9b, 0xa2, 0x13,
+ 0x80, 0x2f, 0x97, 0x0b, 0x65, 0x60, 0x93, 0x81,
+ 0xf3, 0x89, 0x3b, 0x06, 0x3b, 0x97, 0x0b, 0xa5,
+ 0x7f, 0x26, 0x00, 0x92, 0xd4, 0x4d, 0x91, 0x09,
+ 0xc0, 0x0c, 0x60, 0xf5, 0x72, 0xa1, 0x0c, 0xec,
+ 0x4d, 0xc4, 0x1d, 0x83, 0xd3, 0x0a, 0xc6, 0x31,
+ 0x10, 0x13, 0x00, 0x49, 0xea, 0xa6, 0xc8, 0x04,
+ 0xe0, 0xbd, 0x05, 0xe3, 0x18, 0xd4, 0xd2, 0xc0,
+ 0x0d, 0xc4, 0xc4, 0xff, 0x20, 0xb0, 0x51, 0xb9,
+ 0x50, 0x06, 0x63, 0x02, 0xf0, 0x58, 0x9b, 0x01,
+ 0x87, 0x03, 0x7f, 0x20, 0x9d, 0x1c, 0x51, 0x5b,
+ 0x42, 0xe6, 0x6a, 0x0f, 0x01, 0xd7, 0x03, 0xe7,
+ 0x00, 0x87, 0x00, 0x1b, 0xe4, 0x3f, 0x24, 0x92,
+ 0x46, 0xcc, 0x36, 0xc4, 0xcd, 0x49, 0x57, 0x02,
+ 0x8b, 0x96, 0x0b, 0x65, 0x60, 0x9f, 0x20, 0xee,
+ 0x18, 0x1c, 0x53, 0x30, 0x8e, 0x81, 0x99, 0x00,
+ 0x3c, 0x62, 0x75, 0xe0, 0x24, 0x9a, 0xbf, 0xe0,
+ 0x4f, 0xd4, 0x66, 0x01, 0x9f, 0x07, 0x96, 0xcf,
+ 0x7b, 0x78, 0x24, 0x8d, 0x88, 0x49, 0xa4, 0x1f,
+ 0x0c, 0x51, 0x73, 0xd0, 0xae, 0xe5, 0x42, 0x19,
+ 0xd8, 0xfa, 0xc0, 0x03, 0xc4, 0xc4, 0x7f, 0x33,
+ 0xb0, 0x5c, 0xb9, 0x50, 0x06, 0x67, 0x02, 0x90,
+ 0x6c, 0x05, 0x5c, 0x47, 0xfd, 0xc5, 0x3b, 0x67,
+ 0xfb, 0x3b, 0xb0, 0x71, 0xce, 0x83, 0x24, 0x69,
+ 0x24, 0xbc, 0x96, 0xb8, 0x79, 0xe7, 0x8c, 0x82,
+ 0x71, 0x0c, 0xe3, 0x34, 0xe2, 0x8e, 0xc1, 0xde,
+ 0x05, 0xe3, 0x18, 0x8a, 0x09, 0x40, 0xba, 0x4f,
+ 0x73, 0x3b, 0xf5, 0x17, 0xec, 0x88, 0x76, 0x23,
+ 0x69, 0x83, 0x0b, 0x49, 0x02, 0x58, 0x02, 0xf8,
+ 0x27, 0x31, 0xf3, 0xcd, 0x2c, 0xe0, 0x49, 0xe5,
+ 0x42, 0x19, 0xd8, 0x73, 0x89, 0x9b, 0x73, 0x2f,
+ 0x06, 0xa6, 0x94, 0x0b, 0x65, 0x38, 0x5d, 0x4f,
+ 0x00, 0xa6, 0x01, 0x97, 0x52, 0x7f, 0xa1, 0x8e,
+ 0x6c, 0xe7, 0xd0, 0xbe, 0xbf, 0x8b, 0xa4, 0x18,
+ 0x1f, 0x21, 0x6e, 0xae, 0x39, 0xae, 0x60, 0x1c,
+ 0x83, 0x9a, 0x0a, 0xfc, 0x85, 0xb8, 0x63, 0xb0,
+ 0x43, 0xb9, 0x50, 0x86, 0xd7, 0xf5, 0x04, 0x60,
+ 0x5f, 0xea, 0x2f, 0xd0, 0x25, 0xda, 0x5e, 0xb9,
+ 0x0e, 0x98, 0xa4, 0xd6, 0x5a, 0x07, 0xb8, 0x97,
+ 0x98, 0x39, 0xe6, 0x76, 0x60, 0xc5, 0x72, 0xa1,
+ 0x0c, 0x6c, 0x3f, 0xe2, 0xe6, 0xd9, 0x6f, 0x17,
+ 0x8c, 0x23, 0x8b, 0xae, 0x27, 0x00, 0xd3, 0xa9,
+ 0xbf, 0x38, 0x97, 0x68, 0x7f, 0xcc, 0x74, 0xbc,
+ 0x24, 0xb5, 0xd7, 0x77, 0x89, 0x9b, 0x63, 0xde,
+ 0x5e, 0x30, 0x8e, 0x41, 0xad, 0x00, 0xdc, 0x4a,
+ 0x4c, 0xfc, 0xf7, 0x01, 0x8f, 0x2b, 0x16, 0x49,
+ 0x26, 0x5d, 0x4e, 0x00, 0xb6, 0xa0, 0xfe, 0xc2,
+ 0x5c, 0xaa, 0xcd, 0x01, 0xd6, 0xce, 0x73, 0xd8,
+ 0x24, 0xb5, 0xd0, 0x8e, 0xc4, 0xcd, 0x2f, 0x7f,
+ 0x23, 0x5d, 0x5a, 0x6f, 0xba, 0xcf, 0x12, 0x77,
+ 0x0c, 0x0e, 0x2b, 0x18, 0x47, 0x36, 0x5d, 0x4e,
+ 0x00, 0xf6, 0xa6, 0xfe, 0xc2, 0x5c, 0xb2, 0xbd,
+ 0x24, 0xcf, 0x61, 0x93, 0xd4, 0x32, 0x53, 0x80,
+ 0x4b, 0x88, 0x9b, 0x5b, 0x76, 0x2a, 0x17, 0xca,
+ 0xc0, 0x36, 0x25, 0x3d, 0xa4, 0x18, 0x11, 0xff,
+ 0x75, 0x34, 0xb4, 0xdc, 0xf1, 0xe4, 0xda, 0x03,
+ 0x68, 0xb0, 0x36, 0x6c, 0x53, 0x99, 0xd3, 0x1a,
+ 0xb5, 0x07, 0x20, 0xa9, 0x8a, 0xbd, 0x81, 0xa7,
+ 0x04, 0xf5, 0xfd, 0x03, 0xe0, 0xf4, 0xa0, 0xbe,
+ 0x73, 0xfa, 0x24, 0x71, 0x57, 0x29, 0xde, 0x47,
+ 0x7a, 0xb6, 0xa2, 0x75, 0xba, 0x7c, 0x05, 0xe0,
+ 0x48, 0xea, 0xff, 0x2a, 0x2f, 0xd9, 0xde, 0x97,
+ 0xe7, 0xb0, 0x49, 0x6a, 0x91, 0xe5, 0x80, 0x5b,
+ 0x88, 0x99, 0x53, 0x1e, 0x04, 0x9e, 0x50, 0x2e,
+ 0x94, 0x81, 0xed, 0x41, 0xdc, 0xbc, 0xda, 0xe8,
+ 0x72, 0xc7, 0x5e, 0x01, 0x90, 0xa4, 0xee, 0xfa,
+ 0x10, 0xb0, 0x72, 0x50, 0xdf, 0xc7, 0x92, 0xb6,
+ 0xfd, 0x6d, 0xb2, 0x69, 0xc0, 0x11, 0x41, 0x7d,
+ 0xcf, 0x01, 0xde, 0x49, 0x4a, 0x04, 0x1a, 0xc9,
+ 0x04, 0x40, 0x92, 0xba, 0x69, 0x63, 0xe2, 0x9e,
+ 0xce, 0xbf, 0x19, 0xf8, 0x78, 0x50, 0xdf, 0x39,
+ 0xbd, 0x87, 0xb8, 0xab, 0x14, 0x27, 0xd0, 0xf0,
+ 0x37, 0xac, 0x4c, 0x00, 0x24, 0xa9, 0x9b, 0x8e,
+ 0x05, 0x16, 0x09, 0xea, 0xfb, 0x40, 0x52, 0xc9,
+ 0xdf, 0x26, 0x5b, 0x15, 0x38, 0x20, 0xa8, 0xef,
+ 0xbb, 0x49, 0xc5, 0xd7, 0x1a, 0xcd, 0x04, 0x40,
+ 0x92, 0xba, 0xe7, 0x45, 0xc0, 0xce, 0x41, 0x7d,
+ 0x5f, 0x04, 0x9c, 0x18, 0xd4, 0x77, 0x4e, 0x47,
+ 0x02, 0xcb, 0x04, 0xf5, 0xfd, 0x51, 0xd2, 0x56,
+ 0xeb, 0x8d, 0x66, 0x02, 0x20, 0x49, 0xdd, 0xb2,
+ 0x08, 0x71, 0xe5, 0x68, 0xe7, 0x92, 0x76, 0xd3,
+ 0x9b, 0x13, 0xd4, 0x7f, 0x2e, 0x5b, 0x92, 0x8a,
+ 0x1e, 0x45, 0xb8, 0x1a, 0xf8, 0x54, 0x50, 0xdf,
+ 0x59, 0x99, 0x00, 0x48, 0x52, 0xb7, 0xec, 0x4b,
+ 0x2a, 0x72, 0x16, 0xe1, 0x9b, 0xa4, 0xfa, 0x22,
+ 0x4d, 0x36, 0x89, 0xb4, 0x40, 0x47, 0xad, 0x7f,
+ 0xef, 0x22, 0xbd, 0x01, 0xd1, 0x78, 0x26, 0x00,
+ 0x92, 0xd4, 0x1d, 0x2b, 0x03, 0xef, 0x0f, 0xea,
+ 0xfb, 0x7e, 0xe0, 0xe0, 0xa0, 0xbe, 0x73, 0x7a,
+ 0x0d, 0xf0, 0xac, 0xa0, 0xbe, 0xcf, 0x04, 0x4e,
+ 0x0d, 0xea, 0x3b, 0x3b, 0x13, 0x00, 0x49, 0xea,
+ 0x8e, 0x8f, 0x90, 0xde, 0xfd, 0x8f, 0xf0, 0x71,
+ 0xe0, 0x5f, 0x41, 0x7d, 0xe7, 0xb2, 0x04, 0xe9,
+ 0x18, 0x44, 0x98, 0x4d, 0x7a, 0xed, 0xaf, 0x35,
+ 0x4c, 0x00, 0x24, 0xa9, 0x1b, 0x36, 0x07, 0xde,
+ 0x18, 0xd4, 0xf7, 0xb5, 0xc4, 0x3d, 0x57, 0x90,
+ 0xd3, 0x41, 0xa4, 0xaa, 0x87, 0x11, 0x3e, 0x47,
+ 0x2a, 0x25, 0xdc, 0x1a, 0x26, 0x00, 0xe5, 0x1c,
+ 0x40, 0xba, 0xf7, 0x94, 0xab, 0x1d, 0x55, 0x76,
+ 0xf8, 0x92, 0x5a, 0xee, 0x53, 0xa4, 0x7d, 0xff,
+ 0x23, 0xbc, 0x9b, 0x54, 0xf1, 0xae, 0xc9, 0xd6,
+ 0x26, 0xdd, 0x9f, 0x8f, 0x70, 0x07, 0x2d, 0x2c,
+ 0xf8, 0x63, 0x02, 0x20, 0x49, 0xa3, 0x6f, 0x4f,
+ 0x60, 0x87, 0xa0, 0xbe, 0xcf, 0x25, 0x95, 0x12,
+ 0x6e, 0xba, 0x63, 0x49, 0xb7, 0x00, 0x22, 0x7c,
+ 0x90, 0x54, 0x4a, 0xb8, 0x55, 0x4c, 0x00, 0x24,
+ 0x69, 0xb4, 0x2d, 0x46, 0x7a, 0xe7, 0x3d, 0x42,
+ 0xe3, 0xb7, 0xbb, 0x7d, 0xd8, 0xb3, 0x80, 0x97,
+ 0x06, 0xf5, 0x7d, 0x19, 0xf0, 0x85, 0xa0, 0xbe,
+ 0x43, 0x99, 0x00, 0x48, 0xd2, 0x68, 0x7b, 0x2f,
+ 0xf0, 0xb8, 0xa0, 0xbe, 0xbf, 0x0c, 0x5c, 0x10,
+ 0xd4, 0x77, 0x2e, 0x93, 0x49, 0xb7, 0x3f, 0xa2,
+ 0x8a, 0xf2, 0xec, 0x4f, 0x2a, 0x25, 0xdc, 0x3a,
+ 0x26, 0x00, 0x92, 0x34, 0xba, 0xd6, 0x24, 0x6e,
+ 0xbb, 0xdb, 0x19, 0xa4, 0x62, 0x42, 0x4d, 0xb7,
+ 0x37, 0x69, 0xe3, 0x9f, 0x08, 0xa7, 0x02, 0xbf,
+ 0x08, 0xea, 0x3b, 0x9c, 0x09, 0x80, 0x24, 0x8d,
+ 0xae, 0x23, 0x81, 0x25, 0x83, 0xfa, 0x3e, 0x0c,
+ 0xb8, 0x29, 0xa8, 0xef, 0x5c, 0x96, 0x01, 0x0e,
+ 0x0d, 0xea, 0x7b, 0x26, 0x2d, 0x2f, 0xa3, 0x6e,
+ 0x02, 0x20, 0x49, 0xa3, 0x69, 0x5b, 0xe0, 0x55,
+ 0x41, 0x7d, 0x5f, 0x05, 0x1c, 0x1f, 0xd4, 0x77,
+ 0x4e, 0x87, 0x02, 0xab, 0x05, 0xf5, 0xfd, 0x29,
+ 0xe0, 0xef, 0x41, 0x7d, 0x17, 0x61, 0x02, 0x20,
+ 0x49, 0xa3, 0x67, 0xde, 0x76, 0xb7, 0x51, 0xf7,
+ 0xbd, 0xdf, 0x49, 0xf3, 0xb7, 0xbb, 0xdd, 0x80,
+ 0xb8, 0x72, 0xc7, 0xb7, 0x00, 0x1f, 0x0b, 0xea,
+ 0xbb, 0x18, 0x13, 0x00, 0x49, 0x1a, 0x3d, 0xaf,
+ 0x07, 0xb6, 0x09, 0xea, 0xfb, 0x0c, 0xe0, 0x27,
+ 0x41, 0x7d, 0xe7, 0xf4, 0x69, 0x60, 0x5a, 0x50,
+ 0xdf, 0x07, 0x01, 0x77, 0x05, 0xf5, 0x5d, 0x8c,
+ 0x09, 0x80, 0x24, 0x8d, 0x96, 0xa5, 0x48, 0xe5,
+ 0x68, 0x23, 0x3c, 0x44, 0x3b, 0xb6, 0xbb, 0x7d,
+ 0x3e, 0x71, 0xe5, 0x8e, 0x2f, 0x06, 0xbe, 0x1e,
+ 0xd4, 0x77, 0x51, 0x26, 0x00, 0x92, 0x34, 0x5a,
+ 0x0e, 0x01, 0xd6, 0x08, 0xea, 0xfb, 0x33, 0xc0,
+ 0xdf, 0x82, 0xfa, 0xce, 0x65, 0x11, 0xe0, 0x7f,
+ 0x83, 0xfa, 0x6e, 0x4b, 0xb9, 0xe3, 0x9e, 0x98,
+ 0x00, 0x48, 0xd2, 0xe8, 0x58, 0x8f, 0xb8, 0x5f,
+ 0xe8, 0xb7, 0x13, 0x57, 0x48, 0x27, 0xa7, 0x7d,
+ 0x88, 0x2b, 0x77, 0xfc, 0x6d, 0xe0, 0xb7, 0x41,
+ 0x7d, 0x17, 0x67, 0x02, 0x20, 0x49, 0xa3, 0xe3,
+ 0x18, 0xd2, 0xce, 0x7f, 0x11, 0x0e, 0x01, 0x6e,
+ 0x0b, 0xea, 0x3b, 0x97, 0x95, 0x81, 0x0f, 0x04,
+ 0xf5, 0x7d, 0x3f, 0xe9, 0xde, 0xff, 0xc8, 0x30,
+ 0x01, 0x90, 0xa4, 0xd1, 0xf0, 0x1c, 0x60, 0xb7,
+ 0xa0, 0xbe, 0xff, 0x46, 0xda, 0xf5, 0xaf, 0xe9,
+ 0x22, 0xcb, 0x1d, 0x1f, 0x09, 0xfc, 0x33, 0xa8,
+ 0xef, 0x2a, 0x4c, 0x00, 0x24, 0xa9, 0xfd, 0xa6,
+ 0x00, 0x9f, 0x0c, 0xec, 0x7f, 0x7f, 0xd2, 0x03,
+ 0x80, 0x4d, 0xf6, 0x14, 0xe2, 0xca, 0x1d, 0x5f,
+ 0x07, 0x1c, 0x1d, 0xd4, 0x77, 0x35, 0x26, 0x00,
+ 0x92, 0xd4, 0x7e, 0x6f, 0x05, 0x9e, 0x1c, 0xd4,
+ 0xf7, 0xf7, 0x80, 0x5f, 0x06, 0xf5, 0x9d, 0x53,
+ 0x64, 0xb9, 0xe3, 0xf7, 0x00, 0xf7, 0x06, 0xf5,
+ 0x5d, 0x8d, 0x09, 0x80, 0x24, 0xb5, 0xdb, 0xf2,
+ 0xc4, 0x6d, 0x77, 0xfb, 0x20, 0x70, 0x60, 0x50,
+ 0xdf, 0x39, 0xbd, 0x1c, 0xd8, 0x31, 0xa8, 0xef,
+ 0xdf, 0x01, 0xa7, 0x04, 0xf5, 0x5d, 0x95, 0x09,
+ 0x80, 0x24, 0xb5, 0xdb, 0x61, 0xc0, 0x4a, 0x41,
+ 0x7d, 0x1f, 0x4d, 0xda, 0xf6, 0xb7, 0xc9, 0x16,
+ 0x03, 0x8e, 0x0a, 0xea, 0xbb, 0x2d, 0xe5, 0x8e,
+ 0x07, 0x62, 0x02, 0x20, 0x49, 0xed, 0xb5, 0x09,
+ 0xe9, 0xf2, 0x7f, 0x84, 0x9b, 0x88, 0x5b, 0x58,
+ 0x73, 0x7a, 0x0f, 0x71, 0xe5, 0x8e, 0xbf, 0x0a,
+ 0x9c, 0x1f, 0xd4, 0x77, 0x75, 0x26, 0x00, 0x92,
+ 0xd4, 0x5e, 0xc7, 0x92, 0x36, 0xbe, 0x89, 0xf0,
+ 0x3e, 0x52, 0xc9, 0xdf, 0x26, 0x8b, 0x2c, 0x77,
+ 0x7c, 0x37, 0xf0, 0xc1, 0xa0, 0xbe, 0x5b, 0x61,
+ 0x0e, 0xe9, 0xd2, 0x47, 0xae, 0x16, 0x55, 0x98,
+ 0x22, 0xc2, 0x91, 0xe4, 0x8d, 0xbd, 0xe9, 0xad,
+ 0x44, 0x59, 0xcb, 0xc9, 0xc0, 0x8b, 0x48, 0xaf,
+ 0x13, 0x5d, 0x0a, 0xdc, 0x59, 0x30, 0x3e, 0x5b,
+ 0x7b, 0xda, 0x1c, 0xd2, 0xaf, 0xcf, 0x0b, 0x80,
+ 0x23, 0x88, 0xab, 0xe5, 0xde, 0xab, 0x35, 0x81,
+ 0x77, 0x93, 0xf6, 0xc0, 0xbf, 0x96, 0x74, 0x5f,
+ 0xfc, 0x26, 0xd2, 0x2f, 0xc3, 0x8f, 0x01, 0x9b,
+ 0x57, 0x1a, 0xd7, 0xae, 0xc4, 0xfd, 0x0d, 0x2e,
+ 0xa0, 0x1d, 0x3f, 0x10, 0x4f, 0x22, 0xee, 0x18,
+ 0xbc, 0xa7, 0x60, 0x1c, 0x8d, 0x64, 0x02, 0xd0,
+ 0x9d, 0x16, 0x9d, 0x00, 0xec, 0x48, 0xda, 0x43,
+ 0xbb, 0x76, 0x9c, 0xb6, 0x76, 0xb6, 0x1f, 0x00,
+ 0x8f, 0xa7, 0xac, 0x25, 0x80, 0x4f, 0x00, 0xf7,
+ 0x4d, 0x30, 0xb6, 0x39, 0xc0, 0x77, 0x89, 0xbb,
+ 0x0c, 0xbd, 0x30, 0xd3, 0x80, 0x2b, 0x26, 0x18,
+ 0xd7, 0xa0, 0x6d, 0x0e, 0xf0, 0xac, 0x72, 0xa1,
+ 0x0c, 0xec, 0xe9, 0xe4, 0x5f, 0xa3, 0xe6, 0xb5,
+ 0xab, 0x80, 0x45, 0xcb, 0x85, 0xd2, 0x4c, 0x26,
+ 0x00, 0xdd, 0x69, 0x91, 0x09, 0xc0, 0xbc, 0x77,
+ 0x88, 0x6b, 0xc7, 0x68, 0x6b, 0x77, 0xbb, 0x15,
+ 0x78, 0x36, 0x65, 0xac, 0x0d, 0x5c, 0xd4, 0xe7,
+ 0xf8, 0xfe, 0x0d, 0xec, 0x50, 0x68, 0x7c, 0xef,
+ 0xed, 0x73, 0x6c, 0xfd, 0xb4, 0x13, 0x0a, 0xc5,
+ 0x30, 0x8c, 0x49, 0xc0, 0x79, 0xc4, 0x1d, 0x83,
+ 0x5d, 0xca, 0x85, 0xd2, 0x5c, 0x26, 0x00, 0xdd,
+ 0x69, 0x51, 0x09, 0xc0, 0x3b, 0x1a, 0x10, 0x9b,
+ 0x6d, 0x74, 0xda, 0xfd, 0xc4, 0x95, 0xb9, 0x9d,
+ 0x67, 0x19, 0xd2, 0xce, 0x77, 0x4d, 0x1d, 0xdf,
+ 0x2a, 0xc4, 0xdd, 0x3e, 0xbb, 0x9b, 0xb8, 0x42,
+ 0x42, 0x39, 0xbd, 0x9e, 0xb8, 0x73, 0xec, 0x8c,
+ 0x82, 0x71, 0x54, 0xd5, 0x86, 0x7b, 0x3c, 0x6a,
+ 0xaf, 0x6d, 0x88, 0xdd, 0x9d, 0x4c, 0xdd, 0xb3,
+ 0x18, 0x69, 0x63, 0x9a, 0xa5, 0x03, 0x3f, 0xe3,
+ 0x44, 0x60, 0xd3, 0x01, 0xff, 0xdb, 0xc5, 0x48,
+ 0xb7, 0x03, 0x22, 0xc7, 0xf7, 0x31, 0x60, 0xd9,
+ 0xa0, 0xbe, 0x3f, 0x0e, 0xdc, 0x10, 0xd4, 0x77,
+ 0x2e, 0x4b, 0x91, 0x8e, 0x41, 0x84, 0xb6, 0x94,
+ 0x3b, 0xce, 0xc2, 0x04, 0x40, 0x91, 0x8e, 0x00,
+ 0xa6, 0xd6, 0x1e, 0x84, 0x46, 0xce, 0x5a, 0xa4,
+ 0x4b, 0xe0, 0x11, 0xb6, 0x07, 0x5e, 0x32, 0x64,
+ 0x1f, 0x6b, 0x93, 0x1e, 0x1a, 0x8c, 0xf0, 0x54,
+ 0xe0, 0x7f, 0x82, 0xfa, 0xbe, 0x86, 0xf4, 0x56,
+ 0x41, 0xd3, 0x1d, 0x4c, 0xdc, 0x55, 0x8a, 0xe3,
+ 0x81, 0xbf, 0x06, 0xf5, 0xdd, 0x3a, 0xde, 0x02,
+ 0xe8, 0x4e, 0xcb, 0x7d, 0x0b, 0x60, 0x9b, 0x06,
+ 0xc4, 0x64, 0x1b, 0xdd, 0x76, 0x07, 0xe9, 0x41,
+ 0xb8, 0xdc, 0x7e, 0x9c, 0x71, 0x7c, 0x11, 0xaf,
+ 0xe7, 0xfd, 0x26, 0xd3, 0xf8, 0x16, 0xd6, 0x5e,
+ 0x1a, 0x30, 0xde, 0xdc, 0xd6, 0x23, 0xdd, 0x66,
+ 0x89, 0x88, 0xff, 0x36, 0x60, 0xc5, 0x72, 0xa1,
+ 0xd4, 0xe7, 0x15, 0x00, 0x45, 0x89, 0xaa, 0x4a,
+ 0x26, 0x41, 0xaa, 0xf8, 0xb6, 0x63, 0xe6, 0x3e,
+ 0x97, 0x02, 0x9e, 0x9b, 0xa9, 0xaf, 0xe5, 0xc8,
+ 0xff, 0x40, 0xe0, 0x2b, 0x48, 0x57, 0x28, 0x22,
+ 0xfc, 0x9a, 0x74, 0xc8, 0xe0, 0x95, 0xce, 0x00,
+ 0x00, 0x1f, 0x1d, 0x49, 0x44, 0x41, 0x54, 0x6b,
+ 0xa5, 0xe9, 0x8e, 0x26, 0xae, 0xdc, 0xf1, 0xfb,
+ 0x69, 0x7e, 0xb9, 0xe3, 0xac, 0x4c, 0x00, 0x14,
+ 0xa5, 0xf6, 0xbb, 0xdb, 0x1a, 0x7d, 0x5b, 0x65,
+ 0xee, 0xef, 0x49, 0xe4, 0x5d, 0x5c, 0xb6, 0xce,
+ 0xd8, 0xd7, 0xe2, 0xa4, 0x5b, 0x6a, 0x11, 0x66,
+ 0x93, 0xde, 0xd4, 0x69, 0xba, 0x67, 0x03, 0xbb,
+ 0x07, 0xf5, 0x7d, 0x29, 0xf0, 0xa5, 0xa0, 0xbe,
+ 0x1b, 0xcb, 0x04, 0x40, 0x51, 0xda, 0xf0, 0x24,
+ 0xb1, 0xda, 0x6d, 0xf5, 0xcc, 0xfd, 0xad, 0x99,
+ 0xb9, 0xbf, 0x9c, 0xe3, 0x3b, 0x00, 0x58, 0x37,
+ 0x63, 0x7f, 0xf3, 0xfb, 0x22, 0xf0, 0xa7, 0xa0,
+ 0xbe, 0x73, 0x99, 0x42, 0xaa, 0xf6, 0x17, 0xa5,
+ 0x0d, 0xe5, 0x8e, 0xb3, 0x33, 0x01, 0x18, 0xdb,
+ 0x3d, 0xb5, 0x07, 0x50, 0x58, 0xee, 0x2d, 0x3f,
+ 0xe7, 0x66, 0xee, 0x4f, 0x5a, 0x50, 0xee, 0x73,
+ 0xac, 0xa9, 0xfd, 0xad, 0x45, 0xdc, 0xae, 0x74,
+ 0x77, 0xd2, 0x8e, 0xed, 0x6e, 0xdf, 0x42, 0x5c,
+ 0xb9, 0xe3, 0xef, 0x03, 0xa7, 0x07, 0xf5, 0xdd,
+ 0x68, 0x26, 0x00, 0x63, 0xbb, 0xb1, 0xf6, 0x00,
+ 0x0a, 0xbb, 0x3e, 0x73, 0x7f, 0x4d, 0x7f, 0x95,
+ 0x48, 0xed, 0x97, 0xfb, 0x1c, 0xcb, 0xdd, 0xdf,
+ 0x4d, 0x99, 0xfa, 0xf9, 0x04, 0xb0, 0x64, 0xa6,
+ 0xbe, 0x16, 0x74, 0x18, 0x69, 0x83, 0xa5, 0x26,
+ 0x5b, 0x9e, 0x34, 0xce, 0x08, 0x33, 0x69, 0x47,
+ 0xb9, 0xe3, 0x10, 0x26, 0x00, 0x63, 0xbb, 0xa0,
+ 0xf6, 0x00, 0x0a, 0x9a, 0x4b, 0xda, 0xa6, 0x37,
+ 0xa7, 0x0b, 0x33, 0xf7, 0x27, 0x2d, 0x28, 0xf7,
+ 0x77, 0xf4, 0x4f, 0xa4, 0x6d, 0x7f, 0x73, 0x39,
+ 0x2f, 0x43, 0x1f, 0xdb, 0x02, 0x7b, 0x65, 0xe8,
+ 0x67, 0x61, 0x2e, 0x27, 0xbd, 0xf6, 0xd6, 0x74,
+ 0x87, 0x12, 0x57, 0xee, 0xf8, 0x18, 0xe0, 0xca,
+ 0xa0, 0xbe, 0x5b, 0xaf, 0xcb, 0xaf, 0x01, 0x42,
+ 0x7a, 0x2f, 0xb6, 0xf6, 0xeb, 0x4e, 0x25, 0xda,
+ 0x1f, 0x73, 0x1d, 0xb0, 0xf9, 0x6c, 0xdd, 0x80,
+ 0xb8, 0x6c, 0xa3, 0xdb, 0xa2, 0x5e, 0x03, 0x3c,
+ 0x2d, 0xd3, 0xf8, 0x6e, 0x67, 0xf8, 0xd7, 0x00,
+ 0x27, 0x93, 0xbe, 0x9b, 0x51, 0xc7, 0x70, 0xe7,
+ 0x21, 0xc7, 0x57, 0xc2, 0x26, 0xa4, 0x5f, 0xe9,
+ 0x11, 0xf1, 0xdf, 0x44, 0xda, 0xf5, 0x51, 0x63,
+ 0xe8, 0x7a, 0x02, 0xb0, 0x0f, 0xf5, 0x27, 0xba,
+ 0x12, 0x6d, 0xcf, 0x5c, 0x07, 0x6c, 0x01, 0x67,
+ 0x36, 0x20, 0x36, 0xdb, 0x68, 0xb6, 0x43, 0x89,
+ 0xb1, 0x5d, 0xa6, 0xf1, 0xe5, 0xb8, 0xaf, 0xfe,
+ 0xc6, 0x4c, 0x63, 0x59, 0x58, 0x3b, 0x2d, 0xc3,
+ 0xf8, 0x4a, 0xf8, 0x19, 0x71, 0xc7, 0xe0, 0xf5,
+ 0x05, 0xe3, 0x68, 0xa5, 0xae, 0x27, 0x00, 0xd3,
+ 0x18, 0x7c, 0x4f, 0xf0, 0xb6, 0xb4, 0xdf, 0x12,
+ 0xf7, 0x77, 0xd9, 0x9a, 0xb8, 0xec, 0xdd, 0xd6,
+ 0xdd, 0xf6, 0x2f, 0x62, 0xb7, 0xda, 0xfd, 0x41,
+ 0x03, 0xc6, 0xb7, 0x34, 0xe9, 0x99, 0x84, 0x88,
+ 0xe3, 0x37, 0x13, 0xd8, 0x68, 0xc8, 0xf1, 0x95,
+ 0xb0, 0x0b, 0x71, 0xe7, 0x50, 0x5b, 0xca, 0x1d,
+ 0x57, 0xd5, 0xf5, 0x04, 0x00, 0x60, 0x43, 0xd2,
+ 0xe5, 0xbc, 0xda, 0x93, 0x5e, 0x44, 0xbb, 0x81,
+ 0xfc, 0xaf, 0x3e, 0x2d, 0xe8, 0x6d, 0x0d, 0x88,
+ 0xd3, 0x36, 0x3a, 0xed, 0x7e, 0xf2, 0xbe, 0x5f,
+ 0xbf, 0x30, 0xc3, 0x16, 0x03, 0xca, 0x31, 0xbe,
+ 0xa3, 0x06, 0xfc, 0xfc, 0x5e, 0xda, 0xd1, 0x19,
+ 0xc6, 0x17, 0xcd, 0x72, 0xc7, 0x0d, 0x60, 0x02,
+ 0x90, 0x6c, 0x09, 0x5c, 0x4b, 0xfd, 0xc9, 0x2f,
+ 0x67, 0xbb, 0x82, 0x72, 0xbf, 0x02, 0xf6, 0x03,
+ 0x66, 0x15, 0x88, 0xc9, 0x36, 0xda, 0xed, 0xdf,
+ 0xe4, 0xdf, 0xfd, 0x6f, 0x2c, 0x6b, 0x93, 0x1e,
+ 0x64, 0xed, 0x67, 0x7c, 0xb7, 0x90, 0x67, 0xf7,
+ 0xbf, 0xf5, 0x81, 0x07, 0xfa, 0xfc, 0xec, 0x5e,
+ 0xdb, 0xcd, 0xa4, 0x5d, 0x0a, 0x9b, 0x2e, 0xb2,
+ 0xdc, 0xf1, 0x49, 0x05, 0xe3, 0x68, 0x35, 0x13,
+ 0x80, 0x47, 0xac, 0x4a, 0xaa, 0x93, 0x3d, 0x9b,
+ 0xfa, 0x13, 0xe1, 0x30, 0x6d, 0x26, 0xe9, 0xc9,
+ 0xdf, 0xd2, 0x93, 0xc0, 0x76, 0xf4, 0x3f, 0xa1,
+ 0xda, 0x6c, 0x73, 0x49, 0xf3, 0xd0, 0x77, 0x81,
+ 0xc7, 0x51, 0xd6, 0x12, 0xa4, 0x9a, 0x20, 0xf7,
+ 0xf5, 0x30, 0xbe, 0x53, 0xc8, 0xb7, 0x51, 0xcf,
+ 0xa9, 0x13, 0x7c, 0xde, 0x30, 0x6d, 0xef, 0x4c,
+ 0x63, 0x8c, 0x14, 0x59, 0xee, 0xf8, 0x5e, 0x60,
+ 0x9d, 0x72, 0xa1, 0xb4, 0x9b, 0x09, 0xc0, 0x63,
+ 0x6d, 0x42, 0x7a, 0x00, 0xe9, 0x77, 0xa4, 0x4b,
+ 0xe8, 0x4d, 0x4f, 0x08, 0x66, 0x01, 0xd7, 0x01,
+ 0x67, 0x03, 0x07, 0x91, 0x8a, 0x69, 0xd4, 0x32,
+ 0x99, 0xf4, 0xe4, 0xf1, 0x17, 0x49, 0x15, 0xb7,
+ 0xee, 0xa0, 0xfe, 0xf1, 0xb1, 0x35, 0xaf, 0xcd,
+ 0x21, 0xed, 0xc3, 0x71, 0x3e, 0xa9, 0x3c, 0xed,
+ 0x53, 0xa9, 0x6b, 0x0d, 0xd2, 0x4e, 0x71, 0xbf,
+ 0x24, 0x5d, 0x09, 0x7c, 0x90, 0x34, 0xbe, 0xf3,
+ 0x80, 0x8f, 0x02, 0x4f, 0xc9, 0xf8, 0x59, 0xcf,
+ 0x25, 0xee, 0xb8, 0x5e, 0x4c, 0xda, 0x51, 0xaf,
+ 0xe9, 0xbe, 0x44, 0xdc, 0x31, 0x78, 0x7f, 0xc1,
+ 0x38, 0x5a, 0xcf, 0x04, 0x40, 0x92, 0xca, 0x98,
+ 0x0a, 0xfc, 0x99, 0xb8, 0xc5, 0x6f, 0x87, 0x72,
+ 0xa1, 0x0c, 0xec, 0xa9, 0xa4, 0x2d, 0x79, 0x23,
+ 0xe2, 0xff, 0x17, 0xe9, 0xaa, 0x8e, 0x7a, 0x64,
+ 0x02, 0x20, 0x49, 0x65, 0xec, 0x4b, 0xdc, 0xe2,
+ 0x7f, 0x72, 0xc1, 0x38, 0x86, 0x11, 0x59, 0xee,
+ 0xf8, 0x65, 0x05, 0xe3, 0x18, 0x09, 0x26, 0x00,
+ 0x92, 0x14, 0x6f, 0x79, 0xd2, 0x96, 0xbc, 0x11,
+ 0x0b, 0xdf, 0x7d, 0x94, 0x7f, 0x7e, 0x62, 0x10,
+ 0xaf, 0x20, 0x6e, 0xf1, 0x3f, 0x07, 0xd7, 0x9f,
+ 0xbe, 0x99, 0x00, 0x48, 0x52, 0xbc, 0xcf, 0x10,
+ 0xb7, 0xf8, 0x45, 0xed, 0xa3, 0x9f, 0xd3, 0xe2,
+ 0xc0, 0x74, 0x62, 0xe2, 0x9f, 0x8d, 0xe5, 0xc9,
+ 0x07, 0x62, 0x02, 0x20, 0x49, 0xb1, 0x36, 0x25,
+ 0xee, 0x35, 0xd9, 0xeb, 0x88, 0x2b, 0x24, 0x94,
+ 0xd3, 0x87, 0x88, 0x4b, 0x80, 0x3e, 0x5f, 0x30,
+ 0x8e, 0x91, 0x62, 0x02, 0x20, 0x49, 0xb1, 0x7e,
+ 0x41, 0xdc, 0xe2, 0xf7, 0xaa, 0x82, 0x71, 0x0c,
+ 0x6a, 0x2d, 0x52, 0xf9, 0xf5, 0x88, 0xf8, 0xef,
+ 0x02, 0x56, 0x2b, 0x17, 0xca, 0x68, 0x31, 0x01,
+ 0x90, 0xa4, 0x38, 0xbb, 0x13, 0xb7, 0xf8, 0xff,
+ 0x8e, 0x76, 0xcc, 0xb9, 0xdf, 0x24, 0xee, 0x18,
+ 0xec, 0x5f, 0x30, 0x8e, 0x91, 0x63, 0x02, 0x20,
+ 0x49, 0x31, 0xa6, 0x01, 0x7f, 0x27, 0x66, 0xe1,
+ 0x9b, 0x0d, 0x6c, 0x53, 0x2e, 0x94, 0x81, 0x6d,
+ 0x4b, 0xfe, 0x75, 0x66, 0x5e, 0xbb, 0x92, 0x98,
+ 0x8a, 0x91, 0x9d, 0x61, 0x02, 0x20, 0x49, 0x31,
+ 0x0e, 0x24, 0xee, 0x97, 0xef, 0x57, 0x0b, 0xc6,
+ 0x31, 0xa8, 0xe8, 0x72, 0xc7, 0xff, 0x55, 0x2e,
+ 0x94, 0xd1, 0x64, 0x02, 0x20, 0x49, 0xf9, 0xad,
+ 0x4a, 0xba, 0x3f, 0x1d, 0xb1, 0xf0, 0xcd, 0x00,
+ 0x56, 0x2f, 0x17, 0xca, 0xc0, 0xde, 0x40, 0xdc,
+ 0xe2, 0x7f, 0x7a, 0xc1, 0x38, 0x46, 0x96, 0x09,
+ 0x80, 0x24, 0xe5, 0xf7, 0x35, 0xe2, 0x16, 0xbf,
+ 0x03, 0x0a, 0xc6, 0x31, 0xa8, 0xc8, 0x72, 0xc7,
+ 0xb3, 0x80, 0xcd, 0xca, 0x85, 0x32, 0xba, 0x4c,
+ 0x00, 0x24, 0x29, 0xaf, 0x2d, 0x88, 0xab, 0x21,
+ 0xf2, 0x0f, 0x60, 0xb1, 0x72, 0xa1, 0x0c, 0xec,
+ 0x48, 0xe2, 0x12, 0xa0, 0x63, 0x0a, 0xc6, 0x31,
+ 0xd2, 0x4c, 0x00, 0x24, 0x29, 0x9f, 0x49, 0xc0,
+ 0x6f, 0x89, 0x5b, 0xfc, 0x76, 0x2b, 0x17, 0xca,
+ 0xc0, 0x22, 0xcb, 0x1d, 0xdf, 0x42, 0x3b, 0xca,
+ 0x1d, 0xb7, 0x82, 0x09, 0x80, 0x24, 0xe5, 0xf3,
+ 0x6a, 0xe2, 0x16, 0xff, 0x5f, 0x15, 0x8c, 0x63,
+ 0x18, 0x91, 0xe5, 0x8e, 0xdf, 0x52, 0x30, 0x8e,
+ 0x91, 0x67, 0x02, 0x20, 0x49, 0x79, 0x2c, 0x0e,
+ 0xfc, 0x93, 0x98, 0x85, 0xef, 0x21, 0xe0, 0x49,
+ 0xe5, 0x42, 0x19, 0xd8, 0x73, 0x88, 0x5b, 0xfc,
+ 0x2f, 0xa1, 0x1d, 0xe5, 0x8e, 0x5b, 0xc3, 0x04,
+ 0x40, 0x92, 0xf2, 0x38, 0x9c, 0xb8, 0xc5, 0xef,
+ 0x33, 0x05, 0xe3, 0x18, 0xd4, 0x14, 0x62, 0xcb,
+ 0x1d, 0xef, 0x58, 0x2c, 0x92, 0x8e, 0x30, 0x01,
+ 0x90, 0xa4, 0xe1, 0xad, 0x0d, 0xdc, 0x4b, 0xcc,
+ 0xc2, 0x77, 0x3b, 0xb0, 0x52, 0xb9, 0x50, 0x06,
+ 0xb6, 0x0f, 0x71, 0x8b, 0xff, 0x29, 0x05, 0xe3,
+ 0xe8, 0x0c, 0x13, 0x00, 0x49, 0x1a, 0xde, 0x29,
+ 0xc4, 0x2d, 0x7e, 0xfb, 0x14, 0x8c, 0x63, 0x50,
+ 0x91, 0xe5, 0x8e, 0xef, 0xa7, 0x1d, 0xe5, 0x8e,
+ 0x5b, 0xc7, 0x04, 0x40, 0x92, 0x86, 0xf3, 0x4c,
+ 0xe2, 0xb6, 0xbb, 0xbd, 0x14, 0x58, 0xa4, 0x5c,
+ 0x28, 0x03, 0x8b, 0x2c, 0x77, 0xfc, 0xe1, 0x82,
+ 0x71, 0x74, 0x8a, 0x09, 0x80, 0x24, 0x0d, 0x6e,
+ 0x32, 0x70, 0x3e, 0x71, 0x8b, 0xdf, 0x0b, 0xca,
+ 0x85, 0x32, 0xb0, 0x4d, 0x81, 0x99, 0xc4, 0xc4,
+ 0x7f, 0x1d, 0xb0, 0x54, 0xb9, 0x50, 0xba, 0xc5,
+ 0x04, 0x40, 0x92, 0x06, 0xf7, 0x66, 0xe2, 0x16,
+ 0xff, 0x53, 0x0b, 0xc6, 0x31, 0x8c, 0x9f, 0x13,
+ 0x77, 0x0c, 0x5e, 0x53, 0x30, 0x8e, 0xce, 0x31,
+ 0x01, 0x90, 0xa4, 0xc1, 0x2c, 0x03, 0xdc, 0x48,
+ 0xcc, 0xc2, 0xf7, 0x20, 0xb0, 0x61, 0xb9, 0x50,
+ 0x06, 0xb6, 0x1b, 0x71, 0x8b, 0xff, 0xef, 0x71,
+ 0x4d, 0x09, 0x65, 0x02, 0x20, 0x49, 0x83, 0x39,
+ 0x86, 0xb8, 0xc5, 0xef, 0xc8, 0x82, 0x71, 0x0c,
+ 0x2a, 0xb2, 0xdc, 0xf1, 0x1c, 0xda, 0x51, 0xee,
+ 0xb8, 0xd5, 0x4c, 0x00, 0x24, 0xa9, 0x7f, 0x1b,
+ 0x10, 0xb7, 0xdd, 0xed, 0xcd, 0xc0, 0xb2, 0xe5,
+ 0x42, 0x19, 0xd8, 0x01, 0xc4, 0x25, 0x40, 0x5f,
+ 0x2f, 0x17, 0x46, 0x77, 0x99, 0x00, 0x48, 0x52,
+ 0xff, 0x7e, 0x4c, 0xdc, 0xe2, 0xf7, 0x86, 0x82,
+ 0x71, 0x0c, 0x6a, 0x55, 0xe0, 0x4e, 0x62, 0xe2,
+ 0xbf, 0x1b, 0x58, 0xa3, 0x5c, 0x28, 0xdd, 0x65,
+ 0x02, 0x20, 0x49, 0xfd, 0x79, 0x1e, 0x71, 0x8b,
+ 0xff, 0x45, 0xa4, 0x37, 0x0b, 0x9a, 0xee, 0xab,
+ 0xc4, 0x1d, 0x83, 0x83, 0x0a, 0xc6, 0xd1, 0x69,
+ 0x26, 0x00, 0x92, 0xd4, 0xbb, 0xa9, 0xc0, 0x5f,
+ 0x89, 0x5b, 0xfc, 0xb6, 0x2f, 0x17, 0xca, 0xc0,
+ 0x2c, 0x77, 0x3c, 0x22, 0x4c, 0x00, 0x24, 0xa9,
+ 0x77, 0xef, 0x24, 0x6e, 0xf1, 0xff, 0x66, 0xc1,
+ 0x38, 0x06, 0x35, 0x09, 0x38, 0x9b, 0xb8, 0x63,
+ 0xb0, 0x7b, 0xb9, 0x50, 0x64, 0x02, 0x20, 0x49,
+ 0xbd, 0x59, 0x81, 0xb8, 0xed, 0x6e, 0xef, 0x03,
+ 0xd6, 0x2d, 0x17, 0xca, 0xc0, 0x5e, 0x45, 0xdc,
+ 0xe2, 0x7f, 0x66, 0xc1, 0x38, 0x84, 0x09, 0x80,
+ 0x24, 0xf5, 0xea, 0x73, 0xc4, 0x2d, 0x7e, 0x1f,
+ 0x2a, 0x18, 0xc7, 0xa0, 0x16, 0x07, 0xa6, 0x13,
+ 0x13, 0xff, 0x43, 0xc0, 0x93, 0x8b, 0x45, 0x22,
+ 0xc0, 0x04, 0x40, 0x92, 0x7a, 0xb1, 0x19, 0x30,
+ 0x8b, 0x98, 0xc5, 0xef, 0x5a, 0x60, 0xc9, 0x72,
+ 0xa1, 0x0c, 0xec, 0x30, 0xe2, 0x12, 0xa0, 0xe3,
+ 0x0b, 0xc6, 0xa1, 0x87, 0x99, 0x00, 0x48, 0xd2,
+ 0xc4, 0x4e, 0x27, 0x6e, 0xf1, 0x7b, 0x45, 0xc1,
+ 0x38, 0x06, 0x65, 0xb9, 0xe3, 0x11, 0x64, 0x02,
+ 0x20, 0x49, 0xe3, 0x7b, 0x29, 0x71, 0x8b, 0xff,
+ 0xb9, 0xb4, 0x63, 0xde, 0x3c, 0x99, 0xb8, 0x63,
+ 0xb0, 0x6f, 0xc1, 0x38, 0x34, 0x1f, 0x13, 0x00,
+ 0x49, 0x1a, 0xdb, 0xa2, 0xc0, 0x95, 0xc4, 0x2c,
+ 0x7c, 0xb3, 0x81, 0xad, 0xcb, 0x85, 0x32, 0xb0,
+ 0x67, 0x60, 0xb9, 0xe3, 0x91, 0x64, 0x02, 0x20,
+ 0x49, 0x63, 0x3b, 0x84, 0xb8, 0x5f, 0xbe, 0x5f,
+ 0x2a, 0x18, 0xc7, 0xa0, 0xa2, 0xcb, 0x1d, 0xbf,
+ 0xb0, 0x5c, 0x28, 0x5a, 0x90, 0x09, 0x80, 0x24,
+ 0x2d, 0xdc, 0x6a, 0xc0, 0x5d, 0xc4, 0x2c, 0x7c,
+ 0x33, 0x80, 0xd5, 0xcb, 0x85, 0x32, 0xb0, 0xbd,
+ 0x89, 0x5b, 0xfc, 0x7f, 0x54, 0x30, 0x0e, 0x2d,
+ 0x84, 0x09, 0x80, 0x24, 0x2d, 0xdc, 0x89, 0xc4,
+ 0x2d, 0x7e, 0xef, 0x2d, 0x18, 0xc7, 0xa0, 0x96,
+ 0xc6, 0x72, 0xc7, 0x23, 0xcd, 0x04, 0x40, 0x92,
+ 0x1e, 0x6b, 0x4b, 0xe2, 0xb6, 0xbb, 0xbd, 0x8a,
+ 0xf4, 0x6c, 0x41, 0xd3, 0x1d, 0x4d, 0x5c, 0x02,
+ 0x74, 0x54, 0xc1, 0x38, 0x34, 0x06, 0x13, 0x00,
+ 0x49, 0x7a, 0xb4, 0x49, 0xc0, 0x39, 0xc4, 0x2d,
+ 0x7e, 0xbb, 0x94, 0x0b, 0x65, 0x60, 0xeb, 0x63,
+ 0xb9, 0xe3, 0x91, 0x67, 0x02, 0x20, 0x49, 0x8f,
+ 0xf6, 0x3a, 0xe2, 0x16, 0xff, 0x33, 0x0a, 0xc6,
+ 0x31, 0x8c, 0xd3, 0x88, 0x3b, 0x06, 0x6f, 0x2a,
+ 0x18, 0x87, 0xc6, 0x61, 0x02, 0x20, 0x49, 0x8f,
+ 0x58, 0x0a, 0xb8, 0x9e, 0x98, 0x85, 0x6f, 0x16,
+ 0xf0, 0xc4, 0x72, 0xa1, 0x0c, 0x2c, 0xba, 0xdc,
+ 0xf1, 0x94, 0x72, 0xa1, 0x68, 0x3c, 0x26, 0x00,
+ 0x92, 0xf4, 0x88, 0x8f, 0x12, 0xb7, 0xf8, 0x1d,
+ 0x57, 0x30, 0x8e, 0x41, 0x4d, 0x05, 0xfe, 0x42,
+ 0xdc, 0x31, 0x68, 0x43, 0xb9, 0xe3, 0xce, 0x30,
+ 0x01, 0x90, 0xa4, 0xe4, 0xf1, 0xc0, 0xfd, 0xc4,
+ 0x2c, 0x7c, 0xb7, 0x01, 0x2b, 0x96, 0x0b, 0x65,
+ 0x60, 0x91, 0xe5, 0x8e, 0xbf, 0x55, 0x30, 0x0e,
+ 0xf5, 0xc0, 0x04, 0x40, 0x92, 0x92, 0xef, 0x12,
+ 0xb7, 0xf8, 0xbd, 0xad, 0x60, 0x1c, 0x83, 0xb2,
+ 0xdc, 0x71, 0xc7, 0x98, 0x00, 0x3c, 0xd6, 0x66,
+ 0xc0, 0xe1, 0xc0, 0x1f, 0x80, 0x1b, 0x88, 0x7b,
+ 0x15, 0x28, 0x57, 0x7b, 0x88, 0x74, 0xcf, 0xf2,
+ 0x1c, 0xd2, 0xae, 0x65, 0x1b, 0xe4, 0x3f, 0x24,
+ 0xd2, 0xc8, 0x7b, 0x36, 0x71, 0xdf, 0xd1, 0xbf,
+ 0x91, 0x2e, 0xad, 0x37, 0xdd, 0x67, 0x89, 0x3b,
+ 0x06, 0x87, 0x96, 0x0b, 0x43, 0xbd, 0x32, 0x01,
+ 0x78, 0xc4, 0xea, 0xc0, 0x49, 0x34, 0x7f, 0xc1,
+ 0x9f, 0xa8, 0xcd, 0x02, 0x3e, 0x0f, 0x2c, 0x9f,
+ 0xf7, 0xf0, 0x48, 0x23, 0x6b, 0x0a, 0x70, 0x09,
+ 0x71, 0xdf, 0xc9, 0x9d, 0xca, 0x85, 0x32, 0x30,
+ 0xcb, 0x1d, 0x77, 0x90, 0x09, 0x40, 0xb2, 0x15,
+ 0x70, 0x1d, 0xf5, 0x17, 0xef, 0x9c, 0xed, 0xef,
+ 0xc0, 0xc6, 0x39, 0x0f, 0x92, 0x34, 0xa2, 0xde,
+ 0x4a, 0xdc, 0xf7, 0xf0, 0xfb, 0x05, 0xe3, 0x18,
+ 0x46, 0x64, 0xb9, 0xe3, 0x57, 0x16, 0x8c, 0x43,
+ 0x7d, 0x30, 0x01, 0x80, 0x8d, 0x48, 0xf5, 0xa8,
+ 0x6b, 0x2f, 0xd8, 0x11, 0xed, 0x46, 0x60, 0xad,
+ 0x7c, 0x87, 0x4a, 0x1a, 0x39, 0xcb, 0x01, 0xb7,
+ 0x10, 0xf3, 0xfd, 0x7b, 0x10, 0x78, 0x42, 0xb9,
+ 0x50, 0x06, 0x16, 0x59, 0xee, 0xf8, 0x77, 0xb4,
+ 0x73, 0x5d, 0xe8, 0x84, 0xae, 0x27, 0x00, 0xd3,
+ 0x48, 0xe5, 0x28, 0x6b, 0x2f, 0xd4, 0x91, 0xed,
+ 0x1c, 0xda, 0xf7, 0x77, 0x91, 0x4a, 0xf9, 0x24,
+ 0x71, 0xdf, 0xbd, 0x8f, 0x15, 0x8c, 0x63, 0x50,
+ 0xd3, 0xb0, 0xdc, 0x71, 0x67, 0x75, 0x3d, 0x01,
+ 0xd8, 0x97, 0xfa, 0x0b, 0x74, 0x89, 0xb6, 0x57,
+ 0xae, 0x03, 0x26, 0x8d, 0x90, 0x8d, 0x81, 0x99,
+ 0xc4, 0x7c, 0xe7, 0x6e, 0x02, 0x96, 0x29, 0x17,
+ 0xca, 0xc0, 0x0e, 0x26, 0x6e, 0xde, 0xf9, 0x4a,
+ 0xc1, 0x38, 0x34, 0x80, 0xae, 0x27, 0x00, 0xd3,
+ 0xa9, 0xbf, 0x38, 0x97, 0x68, 0x7f, 0xcc, 0x74,
+ 0xbc, 0xa4, 0x51, 0xf2, 0x53, 0xe2, 0xbe, 0x73,
+ 0xaf, 0x2f, 0x18, 0xc7, 0xa0, 0x56, 0xc5, 0x72,
+ 0xc7, 0x9d, 0xd6, 0xe5, 0x04, 0x60, 0x0b, 0xea,
+ 0x2f, 0xcc, 0xa5, 0xda, 0x1c, 0x60, 0xed, 0x3c,
+ 0x87, 0x4d, 0x1a, 0x09, 0x2f, 0x22, 0xee, 0xfb,
+ 0x76, 0x21, 0x30, 0xb9, 0x5c, 0x28, 0x03, 0x3b,
+ 0x81, 0xb8, 0x63, 0xf0, 0xbe, 0x82, 0x71, 0x68,
+ 0x40, 0x5d, 0x4e, 0x00, 0xf6, 0xa6, 0xfe, 0xc2,
+ 0x5c, 0xb2, 0xbd, 0x24, 0xcf, 0x61, 0x93, 0x5a,
+ 0x6f, 0x11, 0xe0, 0x72, 0x62, 0xbe, 0x67, 0x73,
+ 0x80, 0x67, 0x95, 0x0b, 0x65, 0x60, 0x96, 0x3b,
+ 0xee, 0x80, 0x36, 0x64, 0xa1, 0xb5, 0x74, 0xed,
+ 0xf2, 0xd4, 0x1a, 0xb5, 0x07, 0x20, 0x35, 0xc4,
+ 0xbe, 0xa4, 0xb7, 0x7f, 0x22, 0x7c, 0x83, 0xf4,
+ 0xe0, 0x6d, 0x93, 0x4d, 0x22, 0xd5, 0x25, 0x88,
+ 0x5a, 0x1f, 0xde, 0x45, 0x7a, 0x03, 0x42, 0x95,
+ 0x99, 0x00, 0x8c, 0xad, 0x6b, 0x1b, 0x53, 0x2c,
+ 0x5d, 0x7b, 0x00, 0x52, 0x03, 0xac, 0x02, 0xbc,
+ 0x3f, 0xa8, 0xef, 0xfb, 0x48, 0xbb, 0x71, 0x36,
+ 0xdd, 0x6b, 0x80, 0x67, 0x06, 0xf5, 0x7d, 0x26,
+ 0xf0, 0xa3, 0xa0, 0xbe, 0xd5, 0x27, 0x13, 0x00,
+ 0x49, 0x7a, 0xc4, 0x47, 0x48, 0xef, 0xfe, 0x47,
+ 0xf8, 0x38, 0xf0, 0xaf, 0xa0, 0xbe, 0x73, 0x59,
+ 0x82, 0x74, 0x0c, 0x22, 0xcc, 0x26, 0x15, 0x13,
+ 0x52, 0x43, 0x98, 0x00, 0x48, 0x52, 0xb2, 0x39,
+ 0xf0, 0x86, 0xa0, 0xbe, 0xaf, 0x05, 0x8e, 0x0d,
+ 0xea, 0x3b, 0xa7, 0x83, 0x81, 0x75, 0x82, 0xfa,
+ 0xfe, 0x2c, 0xa9, 0x94, 0xb0, 0x1a, 0xc2, 0x04,
+ 0x40, 0x92, 0x92, 0x4f, 0x91, 0xf6, 0xfd, 0x8f,
+ 0xf0, 0x1e, 0xd2, 0x2d, 0x80, 0x26, 0x7b, 0x1c,
+ 0xe9, 0xfe, 0x7c, 0x84, 0xfb, 0xb1, 0xe0, 0x4f,
+ 0xe3, 0x98, 0x00, 0x48, 0x12, 0xec, 0x09, 0xec,
+ 0x10, 0xd4, 0xf7, 0xb9, 0xc0, 0x77, 0x82, 0xfa,
+ 0xce, 0xe9, 0x68, 0x60, 0xf1, 0xa0, 0xbe, 0x27,
+ 0x91, 0xb6, 0x54, 0x57, 0x83, 0x98, 0x00, 0x48,
+ 0xea, 0xba, 0xc5, 0x81, 0x23, 0x83, 0xfa, 0x9e,
+ 0x03, 0xec, 0x47, 0x7a, 0xfd, 0xad, 0xc9, 0x9e,
+ 0x05, 0xec, 0x11, 0xd8, 0xff, 0x62, 0xb4, 0xeb,
+ 0x35, 0xf0, 0x4e, 0x30, 0x01, 0x90, 0xd4, 0x75,
+ 0xef, 0x25, 0x5d, 0xfe, 0x8e, 0xf0, 0x65, 0xd2,
+ 0xc6, 0x3f, 0x4d, 0x36, 0x99, 0x74, 0xfb, 0xc3,
+ 0x05, 0xba, 0x63, 0x4c, 0x00, 0x24, 0x75, 0xd9,
+ 0x9a, 0xc4, 0xed, 0x4a, 0x37, 0x03, 0xf8, 0x50,
+ 0x50, 0xdf, 0x39, 0xbd, 0x99, 0xb4, 0xf1, 0x8f,
+ 0x3a, 0xc6, 0x04, 0x40, 0x52, 0x97, 0x1d, 0x49,
+ 0xdc, 0x9e, 0x1f, 0x87, 0x91, 0x8a, 0xfe, 0x34,
+ 0xd9, 0x72, 0xc0, 0xe1, 0xb5, 0x07, 0xa1, 0x3a,
+ 0x4c, 0x00, 0x24, 0x75, 0xd5, 0xb6, 0xc0, 0xab,
+ 0x82, 0xfa, 0xbe, 0x0a, 0x38, 0x3e, 0xa8, 0xef,
+ 0x9c, 0x3e, 0x04, 0xac, 0x5c, 0x7b, 0x10, 0xaa,
+ 0xc3, 0x04, 0xa0, 0x9c, 0x03, 0x48, 0xf7, 0xd8,
+ 0x72, 0xb5, 0xa3, 0xca, 0x0e, 0x5f, 0x1a, 0x29,
+ 0xd1, 0xf7, 0xbd, 0xf7, 0xa3, 0xf9, 0xdb, 0xdd,
+ 0x6e, 0x0c, 0xbc, 0xbd, 0xf6, 0x20, 0x54, 0x8f,
+ 0x09, 0x80, 0xa4, 0x2e, 0x7a, 0x3d, 0xb0, 0x4d,
+ 0x50, 0xdf, 0x67, 0x90, 0x4a, 0x09, 0x37, 0xdd,
+ 0xb1, 0xa4, 0xc2, 0x47, 0xea, 0x28, 0x13, 0x00,
+ 0x49, 0x5d, 0xb3, 0x14, 0xf0, 0xd1, 0xa0, 0xbe,
+ 0x1f, 0xa2, 0x1d, 0xdb, 0xdd, 0xbe, 0x08, 0xd8,
+ 0xb9, 0xf6, 0x20, 0x54, 0x97, 0x09, 0x80, 0xa4,
+ 0xae, 0x39, 0x84, 0xb8, 0x6a, 0x9f, 0xff, 0x0b,
+ 0xfc, 0x2d, 0xa8, 0xef, 0x5c, 0x16, 0x01, 0x8e,
+ 0xa9, 0x3d, 0x08, 0xd5, 0x67, 0x02, 0x20, 0xa9,
+ 0x4b, 0xd6, 0x23, 0xee, 0x17, 0xfa, 0xed, 0xc4,
+ 0x15, 0xd2, 0xc9, 0x69, 0x1f, 0xe2, 0xca, 0x1d,
+ 0xab, 0x45, 0x4c, 0x00, 0x24, 0x75, 0xc9, 0x31,
+ 0xa4, 0x5d, 0xe9, 0x22, 0x1c, 0x4c, 0xf3, 0xb7,
+ 0xbb, 0x5d, 0x19, 0xf8, 0x40, 0xed, 0x41, 0xa8,
+ 0x19, 0x4c, 0x00, 0x24, 0x75, 0xc5, 0x73, 0x80,
+ 0xdd, 0x82, 0xfa, 0xfe, 0x1b, 0xf0, 0x95, 0xa0,
+ 0xbe, 0x73, 0x8a, 0x2c, 0x77, 0xac, 0x96, 0x31,
+ 0x01, 0x90, 0xd4, 0x05, 0x53, 0x48, 0xaf, 0xfd,
+ 0x45, 0xd9, 0x9f, 0xf4, 0x00, 0x60, 0x93, 0x6d,
+ 0x0e, 0xbc, 0xb1, 0xf6, 0x20, 0xd4, 0x1c, 0x26,
+ 0x00, 0x92, 0xba, 0xe0, 0xad, 0xc0, 0x93, 0x82,
+ 0xfa, 0xfe, 0x2e, 0xf0, 0xcb, 0xa0, 0xbe, 0x73,
+ 0x8a, 0x2c, 0x77, 0xac, 0x16, 0x32, 0x01, 0x90,
+ 0x34, 0xea, 0x96, 0x27, 0xae, 0x16, 0xfd, 0x83,
+ 0xc0, 0x41, 0x41, 0x7d, 0xe7, 0xf4, 0x72, 0xe2,
+ 0xca, 0x1d, 0xab, 0xa5, 0x4c, 0x00, 0x24, 0x8d,
+ 0xba, 0xc3, 0x80, 0x95, 0x82, 0xfa, 0x3e, 0x9a,
+ 0xb4, 0xed, 0x6f, 0x93, 0x2d, 0x86, 0x3b, 0x87,
+ 0x6a, 0x21, 0x4c, 0x00, 0x24, 0x8d, 0xb2, 0x4d,
+ 0x48, 0x97, 0xff, 0x23, 0x5c, 0x0f, 0x1c, 0x11,
+ 0xd4, 0x77, 0x4e, 0x91, 0xe5, 0x8e, 0xd5, 0x62,
+ 0x26, 0x00, 0x92, 0x46, 0xd9, 0x27, 0x89, 0xdb,
+ 0xee, 0xf6, 0x20, 0xe0, 0x9e, 0xa0, 0xbe, 0x73,
+ 0x59, 0x93, 0x54, 0x87, 0x44, 0x7a, 0x0c, 0x13,
+ 0x00, 0x49, 0xa3, 0x6a, 0x57, 0xe0, 0x05, 0x41,
+ 0x7d, 0xff, 0x01, 0xf8, 0xbf, 0xa0, 0xbe, 0x73,
+ 0x8a, 0x2c, 0x77, 0xac, 0x96, 0x33, 0x01, 0x90,
+ 0x34, 0x8a, 0xa6, 0x01, 0x9f, 0x08, 0xea, 0x7b,
+ 0x2e, 0x69, 0x37, 0xc1, 0xb9, 0x41, 0xfd, 0xe7,
+ 0xf2, 0x74, 0xe2, 0xca, 0x1d, 0x6b, 0x04, 0x98,
+ 0x00, 0x48, 0x1a, 0x45, 0xef, 0x04, 0x36, 0x0c,
+ 0xea, 0xfb, 0x24, 0xe0, 0xbc, 0xa0, 0xbe, 0x73,
+ 0x99, 0x04, 0x1c, 0x47, 0x5c, 0xb9, 0x63, 0x8d,
+ 0x00, 0x13, 0x00, 0x49, 0xa3, 0x66, 0x15, 0xd2,
+ 0xb6, 0xbc, 0x11, 0xee, 0xa1, 0x1d, 0xaf, 0xfd,
+ 0x45, 0x96, 0x3b, 0xd6, 0x88, 0x30, 0x01, 0x90,
+ 0x34, 0x6a, 0x3e, 0x0e, 0x2c, 0x1b, 0xd8, 0xf7,
+ 0x0d, 0x41, 0x7d, 0xe7, 0x12, 0x59, 0xee, 0x58,
+ 0x23, 0xc4, 0x04, 0x40, 0xd2, 0x28, 0x79, 0x2a,
+ 0xf0, 0xdf, 0x41, 0x7d, 0x5f, 0x03, 0x1c, 0x1b,
+ 0xd4, 0x77, 0x4e, 0x87, 0x00, 0x6b, 0xd4, 0x1e,
+ 0x84, 0x9a, 0xcf, 0x04, 0x40, 0xd2, 0x28, 0xf9,
+ 0x14, 0x71, 0xf3, 0xda, 0x7b, 0x80, 0x07, 0x82,
+ 0xfa, 0xce, 0x25, 0xb2, 0xdc, 0xb1, 0x46, 0xcc,
+ 0xd4, 0xda, 0x03, 0xe8, 0x90, 0x23, 0x1f, 0x6e,
+ 0x5d, 0x36, 0x19, 0xd8, 0x19, 0xd8, 0x1d, 0x78,
+ 0x06, 0xe9, 0x57, 0x4a, 0xd4, 0xa5, 0x5a, 0x29,
+ 0xa7, 0x5f, 0x03, 0xdf, 0xaf, 0x3d, 0x88, 0x1e,
+ 0x7c, 0x82, 0xb8, 0x72, 0xc7, 0x1a, 0x31, 0x26,
+ 0x00, 0x2a, 0x65, 0x47, 0xd2, 0xa6, 0x2c, 0x9b,
+ 0x57, 0x1e, 0x87, 0xd4, 0xaf, 0xd9, 0xa4, 0x6a,
+ 0x7f, 0x4d, 0xf7, 0x1c, 0x60, 0x8f, 0xda, 0x83,
+ 0x50, 0x7b, 0x78, 0x0b, 0x40, 0x25, 0xec, 0x0f,
+ 0x9c, 0x81, 0x8b, 0xbf, 0xda, 0xe9, 0x4b, 0xc0,
+ 0x9f, 0x6a, 0x0f, 0x62, 0x02, 0xd1, 0xe5, 0x8e,
+ 0x35, 0x82, 0xbc, 0x02, 0xa0, 0x68, 0xef, 0xa0,
+ 0x1d, 0x0f, 0x4e, 0x49, 0x0b, 0x73, 0x07, 0xf0,
+ 0x81, 0xda, 0x83, 0xe8, 0xc1, 0x5b, 0x88, 0x2b,
+ 0x77, 0xac, 0x11, 0xe5, 0x15, 0x00, 0x45, 0xda,
+ 0x86, 0x74, 0xd9, 0x5f, 0x6a, 0xab, 0xc3, 0x81,
+ 0x5b, 0x6b, 0x0f, 0x62, 0x02, 0xcb, 0x93, 0x2a,
+ 0x1e, 0x4a, 0x7d, 0x31, 0x01, 0x50, 0xa4, 0x23,
+ 0xf0, 0x2a, 0x93, 0xda, 0xeb, 0x72, 0xe0, 0xf8,
+ 0xda, 0x83, 0xe8, 0xc1, 0xa1, 0xc4, 0x95, 0x3b,
+ 0xd6, 0x08, 0x33, 0x01, 0x50, 0x94, 0x6d, 0x80,
+ 0x67, 0xd7, 0x1e, 0x84, 0x34, 0x84, 0xfd, 0x81,
+ 0x59, 0xb5, 0x07, 0x31, 0x81, 0x4d, 0x80, 0xff,
+ 0x57, 0x7b, 0x10, 0x6a, 0x27, 0x13, 0x00, 0x45,
+ 0xd9, 0xad, 0xf6, 0x00, 0xa4, 0x21, 0xfc, 0x18,
+ 0xf8, 0x79, 0xed, 0x41, 0xf4, 0xe0, 0x58, 0xe2,
+ 0xca, 0x1d, 0x6b, 0xc4, 0x99, 0x00, 0x28, 0xca,
+ 0x16, 0xb5, 0x07, 0x20, 0x0d, 0x68, 0x26, 0xf0,
+ 0xee, 0xda, 0x83, 0xe8, 0xc1, 0x8b, 0x81, 0x17,
+ 0x06, 0xf5, 0x7d, 0x1e, 0xcd, 0xaf, 0x76, 0xa8,
+ 0x21, 0x99, 0x00, 0x28, 0xca, 0x9a, 0xb5, 0x07,
+ 0x20, 0x0d, 0xe8, 0xd3, 0xc0, 0xdf, 0x6b, 0x0f,
+ 0x62, 0x02, 0xd3, 0x80, 0x63, 0x82, 0xfa, 0x9e,
+ 0x4b, 0xda, 0xf5, 0x50, 0x23, 0xce, 0x04, 0x60,
+ 0x6c, 0xf7, 0xd4, 0x1e, 0x40, 0x61, 0x33, 0x32,
+ 0xf7, 0xe7, 0xaf, 0x07, 0xb5, 0xd1, 0x2d, 0xc0,
+ 0x47, 0x6a, 0x0f, 0xa2, 0x07, 0xfb, 0x11, 0x5b,
+ 0xee, 0xf8, 0x9c, 0xa0, 0xbe, 0xd5, 0x20, 0x26,
+ 0x00, 0x63, 0xbb, 0xb1, 0xf6, 0x00, 0x0a, 0xbb,
+ 0x3e, 0x73, 0x7f, 0x4d, 0xaf, 0x98, 0x26, 0x2d,
+ 0xcc, 0xfb, 0x81, 0xbb, 0x6a, 0x0f, 0x62, 0x02,
+ 0xab, 0x90, 0x0a, 0xfe, 0x44, 0xb8, 0x8f, 0x74,
+ 0x0c, 0xd4, 0x01, 0x26, 0x00, 0x63, 0xbb, 0xa0,
+ 0xf6, 0x00, 0x0a, 0x9a, 0x0b, 0x5c, 0x9c, 0xb9,
+ 0xcf, 0x0b, 0x33, 0xf7, 0x27, 0x45, 0xbb, 0x04,
+ 0xf8, 0x6a, 0xed, 0x41, 0xf4, 0xe0, 0x63, 0xc4,
+ 0xd5, 0xd0, 0xf8, 0x28, 0x70, 0x6d, 0x50, 0xdf,
+ 0x6a, 0x99, 0x39, 0xa4, 0xc5, 0x21, 0x57, 0x9b,
+ 0x54, 0x76, 0xf8, 0x43, 0xbb, 0x86, 0xbc, 0xf1,
+ 0x37, 0xb5, 0xfd, 0x31, 0xd7, 0x01, 0x9b, 0xcf,
+ 0xd6, 0x0d, 0x88, 0xcb, 0x66, 0xeb, 0xa7, 0x6d,
+ 0x4f, 0xf3, 0x6d, 0x41, 0xaa, 0x4d, 0x10, 0x11,
+ 0xff, 0x35, 0x3c, 0xba, 0x90, 0x50, 0xd7, 0xe7,
+ 0xff, 0x91, 0xe7, 0x15, 0x80, 0xf1, 0x75, 0x65,
+ 0x0b, 0xdb, 0xa3, 0x03, 0xfa, 0x3c, 0x9f, 0x54,
+ 0x41, 0x4d, 0x6a, 0x83, 0x93, 0x81, 0xb3, 0x6b,
+ 0x0f, 0xa2, 0x07, 0x9f, 0xa4, 0xdb, 0xe5, 0x8e,
+ 0x55, 0x50, 0xd7, 0x33, 0xc0, 0x69, 0xc0, 0xdf,
+ 0xa8, 0xff, 0xcb, 0x24, 0xb2, 0xfd, 0x96, 0xb8,
+ 0xbf, 0xcb, 0xd6, 0xa4, 0x57, 0xaa, 0x6a, 0xc7,
+ 0x68, 0xb3, 0x8d, 0xd7, 0xee, 0x03, 0xd6, 0xa5,
+ 0xf9, 0xf6, 0x22, 0xee, 0x18, 0xfc, 0x7a, 0x21,
+ 0x9f, 0xd7, 0xf5, 0xf9, 0xbf, 0xf3, 0x3c, 0x01,
+ 0xd2, 0x93, 0xb6, 0xb7, 0x53, 0x7f, 0x92, 0x8a,
+ 0x68, 0x37, 0x10, 0xff, 0xba, 0xde, 0xdb, 0x1a,
+ 0x10, 0xa7, 0xcd, 0x36, 0x5e, 0x6b, 0xc3, 0x3e,
+ 0xfa, 0x8b, 0x03, 0xd3, 0x89, 0x89, 0xff, 0x21,
+ 0xe0, 0x29, 0x0b, 0xf9, 0x4c, 0xe7, 0xff, 0x8e,
+ 0xf3, 0x04, 0x48, 0xb6, 0x24, 0x3d, 0x18, 0x53,
+ 0x7b, 0xa2, 0xca, 0xd9, 0xae, 0x00, 0x36, 0xca,
+ 0x79, 0x90, 0xc6, 0xb1, 0x1f, 0x69, 0x4b, 0xd5,
+ 0xda, 0x31, 0xdb, 0x6c, 0x0b, 0xb6, 0x6b, 0x81,
+ 0x25, 0x69, 0xbe, 0x0f, 0x12, 0x77, 0x0c, 0x3e,
+ 0x3f, 0xc6, 0x67, 0x3a, 0xff, 0x77, 0x9c, 0x27,
+ 0xc0, 0x23, 0x56, 0x05, 0x4e, 0x20, 0xee, 0x01,
+ 0x9c, 0x52, 0x6d, 0x26, 0xa9, 0xc0, 0xc9, 0x72,
+ 0x79, 0x0f, 0xcf, 0x84, 0xb6, 0x23, 0xbd, 0x19,
+ 0x50, 0x3b, 0x7e, 0x9b, 0x6d, 0xfe, 0xf6, 0x6a,
+ 0x9a, 0x6f, 0x6d, 0xe0, 0x5e, 0x62, 0xe2, 0xbf,
+ 0x03, 0x58, 0x79, 0x8c, 0xcf, 0x75, 0xfe, 0xef,
+ 0x38, 0x4f, 0x80, 0xc7, 0xda, 0x84, 0x54, 0x7d,
+ 0xeb, 0x77, 0xa4, 0x4b, 0xe8, 0x4d, 0x4f, 0x08,
+ 0x66, 0x01, 0xd7, 0x91, 0x1e, 0x70, 0x3a, 0x08,
+ 0x58, 0x2f, 0xfb, 0x11, 0xe9, 0xdd, 0x64, 0x60,
+ 0x67, 0xe0, 0x8b, 0xc0, 0x5f, 0x49, 0x93, 0x4f,
+ 0xed, 0xe3, 0x63, 0xeb, 0x6e, 0x3b, 0x97, 0x76,
+ 0xcc, 0x49, 0xdf, 0x24, 0xee, 0x18, 0xbc, 0x73,
+ 0x9c, 0xcf, 0x75, 0xfe, 0xef, 0x38, 0x4f, 0x00,
+ 0x49, 0xb5, 0x4c, 0x23, 0x6d, 0xc9, 0x1b, 0xb1,
+ 0xf0, 0xcd, 0x26, 0x55, 0xac, 0x6c, 0xba, 0x6d,
+ 0xc9, 0x3f, 0x0f, 0xcf, 0x6b, 0x97, 0x31, 0x7e,
+ 0x21, 0x21, 0xe7, 0xff, 0x8e, 0xf3, 0x04, 0x90,
+ 0x54, 0xcb, 0x41, 0xc4, 0x2c, 0x7c, 0x73, 0x69,
+ 0xc7, 0x86, 0x3f, 0x93, 0x49, 0x7b, 0x74, 0x44,
+ 0x1d, 0x83, 0x9d, 0x27, 0xf8, 0x7c, 0xe7, 0xff,
+ 0x8e, 0xf3, 0x04, 0x90, 0x54, 0xc3, 0xaa, 0xa4,
+ 0x2d, 0x79, 0x23, 0x16, 0xbe, 0x19, 0xc0, 0xea,
+ 0xe5, 0x42, 0x19, 0xd8, 0x1b, 0x89, 0x5b, 0xfc,
+ 0x7f, 0xdc, 0xc3, 0xe7, 0x3b, 0xff, 0x77, 0x9c,
+ 0x27, 0x80, 0xa4, 0x1a, 0xbe, 0x4e, 0xdc, 0xe2,
+ 0x77, 0x40, 0xb9, 0x30, 0x06, 0xb6, 0x34, 0xe9,
+ 0x19, 0xa3, 0x88, 0xf8, 0x67, 0xd2, 0xdb, 0x1b,
+ 0x40, 0xce, 0xff, 0x1d, 0xe7, 0x09, 0x20, 0xa9,
+ 0xb4, 0xc8, 0xed, 0x6e, 0xff, 0x01, 0x2c, 0x5a,
+ 0x2e, 0x94, 0x81, 0x1d, 0x49, 0x5c, 0x02, 0xd4,
+ 0xeb, 0xce, 0x9f, 0xce, 0xff, 0x1d, 0xe7, 0x09,
+ 0x20, 0xa9, 0xa4, 0x49, 0xa4, 0xdd, 0x29, 0xa3,
+ 0x16, 0xbf, 0x97, 0x94, 0x0b, 0x65, 0x60, 0xeb,
+ 0x93, 0xb6, 0xe4, 0x8d, 0x88, 0xff, 0x66, 0x7a,
+ 0x7f, 0x05, 0xd8, 0xf9, 0xbf, 0xe3, 0x3c, 0x01,
+ 0x24, 0x95, 0xf4, 0x1a, 0xe2, 0x16, 0xff, 0x5f,
+ 0x15, 0x8c, 0x63, 0x18, 0xa7, 0x12, 0x77, 0x0c,
+ 0xf6, 0xee, 0x63, 0x1c, 0xce, 0xff, 0x1d, 0xe7,
+ 0x09, 0x20, 0xa9, 0x94, 0x25, 0x80, 0x7f, 0x12,
+ 0xb3, 0xf0, 0x3d, 0x04, 0x3c, 0xa9, 0x5c, 0x28,
+ 0x03, 0x7b, 0x2e, 0x71, 0x8b, 0xff, 0xc5, 0xc0,
+ 0x94, 0x3e, 0xc6, 0xe2, 0xfc, 0xdf, 0x71, 0x9e,
+ 0x00, 0x92, 0x4a, 0xf9, 0x30, 0x71, 0x8b, 0xdf,
+ 0xff, 0x16, 0x8c, 0x63, 0x50, 0x53, 0x80, 0x3f,
+ 0x13, 0x77, 0x0c, 0x76, 0xe8, 0x73, 0x3c, 0xce,
+ 0xff, 0x1d, 0xe7, 0x09, 0x20, 0xa9, 0x84, 0xc8,
+ 0xed, 0x6e, 0x6f, 0x07, 0x56, 0x2a, 0x17, 0xca,
+ 0xc0, 0xf6, 0x21, 0x6e, 0xf1, 0x3f, 0x79, 0x80,
+ 0xf1, 0x38, 0xff, 0x77, 0x9c, 0x27, 0x80, 0xa4,
+ 0x12, 0x4e, 0x21, 0x6e, 0xf1, 0x7b, 0x47, 0xc1,
+ 0x38, 0x06, 0xb5, 0x3c, 0x70, 0x2b, 0x31, 0xf1,
+ 0xdf, 0x07, 0x3c, 0x6e, 0x80, 0x31, 0x39, 0xff,
+ 0x77, 0x9c, 0x27, 0x80, 0xa4, 0x68, 0xcf, 0x24,
+ 0x6e, 0xbb, 0xdb, 0x4b, 0x19, 0x7f, 0xbb, 0xdb,
+ 0xa6, 0xf8, 0x0c, 0x71, 0x09, 0xd0, 0xa0, 0xe5,
+ 0x8e, 0x9d, 0xff, 0x3b, 0xce, 0x13, 0x40, 0x52,
+ 0xa4, 0xc9, 0xc0, 0x05, 0xc4, 0x2d, 0x7e, 0x2f,
+ 0x28, 0x17, 0xca, 0xc0, 0x36, 0x25, 0xae, 0x5c,
+ 0xf6, 0x75, 0x0c, 0x5e, 0xee, 0xd8, 0xf9, 0xbf,
+ 0xe3, 0x3c, 0x01, 0x24, 0x45, 0x7a, 0x0b, 0x71,
+ 0x8b, 0xff, 0x0f, 0x0b, 0xc6, 0x31, 0x8c, 0x5f,
+ 0x10, 0x77, 0x0c, 0x86, 0x29, 0x77, 0xec, 0xfc,
+ 0xdf, 0x71, 0x9e, 0x00, 0x92, 0xa2, 0x2c, 0x03,
+ 0xdc, 0x48, 0xcc, 0xc2, 0xf7, 0x20, 0xb0, 0x61,
+ 0xb9, 0x50, 0x06, 0xb6, 0x1b, 0x71, 0x8b, 0xff,
+ 0xef, 0x18, 0x6e, 0xce, 0x75, 0xfe, 0xef, 0x38,
+ 0x4f, 0x00, 0x49, 0x51, 0x8e, 0x25, 0x6e, 0xf1,
+ 0x3b, 0xb2, 0x60, 0x1c, 0x83, 0x6a, 0x7a, 0xb9,
+ 0x63, 0xe7, 0xff, 0x8e, 0xf3, 0x04, 0x90, 0x14,
+ 0x61, 0x0d, 0xe2, 0xb6, 0xbb, 0xbd, 0x89, 0x74,
+ 0x75, 0xa1, 0xe9, 0x0e, 0x20, 0x2e, 0x01, 0xfa,
+ 0x7a, 0x86, 0xf1, 0x39, 0xff, 0x77, 0x9c, 0x27,
+ 0x80, 0xa4, 0x08, 0x1f, 0x27, 0x6e, 0xf1, 0xfb,
+ 0x15, 0xb0, 0x62, 0xb9, 0x50, 0x06, 0xb2, 0x1a,
+ 0xa9, 0x2c, 0x71, 0x44, 0xfc, 0xb9, 0xca, 0x1d,
+ 0x3b, 0xff, 0x77, 0x9c, 0x27, 0x80, 0xa4, 0x08,
+ 0x97, 0x11, 0x97, 0x00, 0xcc, 0x25, 0x6d, 0xfe,
+ 0x73, 0x00, 0xe9, 0x32, 0x7b, 0x13, 0x7d, 0x8d,
+ 0xb8, 0xd8, 0x73, 0x95, 0x3b, 0x76, 0xfe, 0xef,
+ 0x38, 0x4f, 0x00, 0x49, 0xb9, 0xad, 0x40, 0xdc,
+ 0x7b, 0xff, 0x0b, 0xb6, 0xbf, 0x02, 0xcf, 0x2f,
+ 0x13, 0x56, 0xcf, 0xb6, 0xa2, 0x1d, 0xe5, 0x8e,
+ 0x9d, 0xff, 0x3b, 0xce, 0x13, 0x40, 0x52, 0x6e,
+ 0xcf, 0xa0, 0xcc, 0xe2, 0x3f, 0x7f, 0xfb, 0x25,
+ 0xe9, 0x7d, 0xfb, 0xda, 0x26, 0x01, 0x67, 0x13,
+ 0x17, 0xe7, 0x6e, 0x19, 0xc7, 0xea, 0xfc, 0xdf,
+ 0x71, 0x9e, 0x00, 0x92, 0x72, 0x8b, 0x2c, 0xf9,
+ 0x3b, 0x5e, 0x9b, 0x09, 0x1c, 0x07, 0x2c, 0x1b,
+ 0x1f, 0xe2, 0x98, 0x5e, 0xbd, 0x90, 0x71, 0xe5,
+ 0x6a, 0xb9, 0xcb, 0x1d, 0x3b, 0xff, 0x77, 0x9c,
+ 0x27, 0x80, 0xa4, 0xdc, 0x3e, 0x44, 0x9d, 0x04,
+ 0x60, 0x5e, 0xbb, 0x15, 0xd8, 0x8f, 0xfe, 0x4a,
+ 0xe3, 0xe6, 0xb0, 0x38, 0xed, 0x2a, 0x77, 0xec,
+ 0xfc, 0xdf, 0x71, 0x9e, 0x00, 0x92, 0x72, 0x3b,
+ 0x81, 0xba, 0x09, 0xc0, 0xbc, 0x76, 0x21, 0xb0,
+ 0x5d, 0x70, 0xac, 0xf3, 0x3b, 0x3c, 0x28, 0x8e,
+ 0xb9, 0xa4, 0x5a, 0x02, 0xb9, 0x39, 0xff, 0x77,
+ 0x9c, 0x27, 0x80, 0xa4, 0xdc, 0x7e, 0x4b, 0xfd,
+ 0xc5, 0x7f, 0xfe, 0x76, 0x1a, 0x83, 0x55, 0xcb,
+ 0xeb, 0x47, 0x1b, 0xcb, 0x1d, 0x3b, 0xff, 0x77,
+ 0x9c, 0x27, 0x80, 0xa4, 0xdc, 0xae, 0xa7, 0xfe,
+ 0xa2, 0xbf, 0x60, 0xbb, 0x0f, 0x38, 0x02, 0x58,
+ 0x2a, 0x28, 0xe6, 0x93, 0x03, 0xc7, 0xbe, 0x4f,
+ 0xd0, 0x98, 0x9d, 0xff, 0x3b, 0xce, 0x13, 0x40,
+ 0x52, 0x4e, 0x8b, 0x53, 0xee, 0x15, 0xc0, 0x41,
+ 0xda, 0x75, 0xc0, 0xeb, 0xc8, 0x3b, 0x57, 0xb5,
+ 0xb5, 0xdc, 0xb1, 0xf3, 0x7f, 0xc7, 0x79, 0x02,
+ 0x48, 0xca, 0x69, 0x33, 0xea, 0x2f, 0xf2, 0xbd,
+ 0xb4, 0xf3, 0x80, 0xa7, 0x67, 0x88, 0x77, 0x32,
+ 0x70, 0x7e, 0xe0, 0x38, 0x23, 0xcb, 0x1d, 0x3b,
+ 0xff, 0x77, 0x9c, 0x27, 0x80, 0xa4, 0x9c, 0x76,
+ 0xa1, 0xfe, 0xe2, 0xde, 0x6b, 0x9b, 0x03, 0x9c,
+ 0x48, 0xda, 0xb6, 0x77, 0x50, 0x7b, 0x07, 0x8e,
+ 0xef, 0xd4, 0x21, 0xc6, 0xd5, 0x0b, 0xe7, 0xff,
+ 0x8e, 0xf3, 0x04, 0x90, 0x94, 0xd3, 0x7e, 0xd4,
+ 0x5f, 0xd8, 0xfb, 0x6d, 0xf7, 0x00, 0x87, 0xd2,
+ 0xff, 0x0e, 0x7b, 0x4b, 0xd3, 0xee, 0x72, 0xc7,
+ 0xce, 0xff, 0x1d, 0xe7, 0x09, 0x20, 0x29, 0xa7,
+ 0xe3, 0xa8, 0xbf, 0xa0, 0x0f, 0xda, 0xae, 0x04,
+ 0x5e, 0xde, 0x47, 0xac, 0x47, 0x07, 0x8e, 0xa5,
+ 0x44, 0xb9, 0x63, 0xe7, 0xff, 0x8e, 0xf3, 0x04,
+ 0x90, 0x94, 0xd3, 0x69, 0xd4, 0x5f, 0xc8, 0x87,
+ 0x6d, 0xbf, 0x62, 0xe2, 0x4d, 0x77, 0x36, 0x20,
+ 0xae, 0xdc, 0xf1, 0xcd, 0x94, 0xd9, 0xcd, 0xd0,
+ 0xf9, 0xbf, 0xe3, 0x3c, 0x01, 0x24, 0xe5, 0x74,
+ 0x29, 0xf5, 0x17, 0xf0, 0x1c, 0x6d, 0x16, 0xf0,
+ 0x05, 0x60, 0xe5, 0x31, 0xe2, 0xfc, 0x71, 0xe0,
+ 0x67, 0xbf, 0x61, 0xe2, 0xc3, 0x9c, 0x85, 0xf3,
+ 0x7f, 0xc7, 0x79, 0x02, 0x48, 0xca, 0x65, 0x12,
+ 0xe9, 0x7d, 0xfb, 0xda, 0x8b, 0x77, 0xce, 0x76,
+ 0x3b, 0xe9, 0xb9, 0x86, 0xa9, 0xf3, 0xc5, 0xf9,
+ 0xbc, 0xc0, 0xcf, 0xbb, 0x88, 0xf4, 0x66, 0x41,
+ 0x09, 0xce, 0xff, 0x1d, 0xe7, 0x09, 0x20, 0x29,
+ 0x97, 0x35, 0xa9, 0xbf, 0x60, 0x47, 0xb5, 0xcb,
+ 0x80, 0x9d, 0x49, 0x89, 0xc0, 0x5f, 0x02, 0x3f,
+ 0x67, 0xfb, 0xbe, 0x8f, 0xfa, 0xe0, 0x9c, 0xff,
+ 0x3b, 0xce, 0x13, 0x40, 0x52, 0x2e, 0xdb, 0x51,
+ 0x7f, 0xa1, 0x8e, 0x6e, 0x7f, 0x0e, 0xec, 0xfb,
+ 0x5b, 0xfd, 0x1f, 0xf2, 0xa1, 0x38, 0xff, 0x8f,
+ 0xb8, 0x52, 0x97, 0x92, 0x24, 0x69, 0xfd, 0xda,
+ 0x03, 0x28, 0x20, 0x77, 0x45, 0xbe, 0x79, 0xee,
+ 0x07, 0x0e, 0x0c, 0xea, 0x5b, 0x1d, 0x65, 0x02,
+ 0x20, 0xa9, 0x94, 0xc7, 0x67, 0xee, 0xef, 0xd7,
+ 0xc0, 0xd7, 0x49, 0xbf, 0x54, 0x47, 0xdd, 0x51,
+ 0xa4, 0x52, 0xc2, 0x52, 0x36, 0x26, 0x00, 0x92,
+ 0x4a, 0xc9, 0x7d, 0x05, 0xe0, 0x7c, 0xe0, 0x7f,
+ 0x80, 0xad, 0x81, 0x73, 0x32, 0xf7, 0xdd, 0x24,
+ 0xd7, 0x01, 0x9f, 0xa8, 0x3d, 0x08, 0x8d, 0x1e,
+ 0x13, 0x00, 0x49, 0xa5, 0xac, 0x97, 0xb9, 0xbf,
+ 0xab, 0x1f, 0xfe, 0xdf, 0x8b, 0x48, 0xcf, 0x17,
+ 0xec, 0xca, 0x68, 0xfe, 0x4a, 0x7e, 0x2f, 0xa9,
+ 0x94, 0xb0, 0x54, 0x94, 0x0f, 0x81, 0x48, 0xca,
+ 0xe5, 0x26, 0xf2, 0xce, 0x27, 0xcf, 0x5f, 0xc8,
+ 0x67, 0x2c, 0x01, 0x1c, 0x00, 0xdc, 0x9d, 0xf9,
+ 0xb3, 0x6a, 0xb5, 0x73, 0xa9, 0x37, 0x6f, 0x3a,
+ 0xff, 0x77, 0x9c, 0x27, 0x80, 0xa4, 0x1c, 0x96,
+ 0x22, 0xff, 0x7c, 0x32, 0xde, 0x2d, 0x85, 0xb5,
+ 0x48, 0x85, 0x7c, 0x9a, 0x5c, 0x7a, 0x78, 0xa2,
+ 0x36, 0x9b, 0x74, 0x7b, 0xa3, 0x16, 0xe7, 0xff,
+ 0x8e, 0xf3, 0x04, 0x90, 0x94, 0xc3, 0x93, 0xc9,
+ 0x3b, 0x97, 0xcc, 0x02, 0x16, 0xe9, 0xe1, 0x73,
+ 0x9f, 0x06, 0xfc, 0x21, 0xf3, 0x67, 0x97, 0x6a,
+ 0x5f, 0xea, 0x21, 0xbe, 0x48, 0xce, 0xff, 0x1d,
+ 0xe7, 0x09, 0x20, 0x29, 0x87, 0xdd, 0xc8, 0x3b,
+ 0x97, 0xfc, 0xa3, 0x8f, 0xcf, 0x9e, 0x0c, 0xbc,
+ 0x8e, 0xfc, 0xb7, 0x20, 0x22, 0xdb, 0x0c, 0x60,
+ 0xf5, 0x3e, 0x62, 0x8c, 0xe0, 0xfc, 0x3f, 0xe2,
+ 0x7c, 0x08, 0xb0, 0x7f, 0x9b, 0x01, 0x87, 0x93,
+ 0x7e, 0x55, 0xdc, 0x40, 0xba, 0x4c, 0x57, 0x7b,
+ 0xb2, 0x18, 0xaf, 0x3d, 0x04, 0x5c, 0x4f, 0x7a,
+ 0x4a, 0xfa, 0x10, 0x52, 0x91, 0x12, 0xa9, 0xb4,
+ 0xa8, 0x07, 0x00, 0x7b, 0x31, 0x87, 0x74, 0x3b,
+ 0x60, 0x03, 0xe0, 0x30, 0x52, 0x29, 0xdd, 0xa6,
+ 0xfb, 0x30, 0xa9, 0x94, 0xb0, 0x54, 0x8d, 0x19,
+ 0xe0, 0x23, 0x56, 0x07, 0x4e, 0xa2, 0xf9, 0x0b,
+ 0xfe, 0x44, 0x6d, 0x16, 0xf0, 0x79, 0x60, 0xf9,
+ 0xbc, 0x87, 0x47, 0x1a, 0xd7, 0x67, 0xc8, 0x7b,
+ 0x1e, 0x7f, 0x61, 0x88, 0xb1, 0x3c, 0x01, 0x38,
+ 0x25, 0xf3, 0x78, 0x72, 0xb6, 0xab, 0x80, 0x45,
+ 0x87, 0x88, 0x2f, 0x17, 0xe7, 0xff, 0x8e, 0xf3,
+ 0x04, 0x48, 0xb6, 0x22, 0xbd, 0x8b, 0x5b, 0x7b,
+ 0x62, 0xc8, 0xd9, 0xfe, 0x0e, 0x6c, 0x9c, 0xf3,
+ 0x20, 0x49, 0xe3, 0xf8, 0x29, 0x79, 0xcf, 0xdf,
+ 0x03, 0x32, 0x8c, 0xe9, 0xb9, 0xc4, 0xee, 0xdb,
+ 0x3f, 0x68, 0xdb, 0x25, 0x43, 0x6c, 0x39, 0x38,
+ 0xff, 0x77, 0x9c, 0x27, 0x00, 0x6c, 0x44, 0xaa,
+ 0xf8, 0x55, 0x7b, 0x52, 0x88, 0x68, 0x37, 0x92,
+ 0x9e, 0x96, 0x96, 0xa2, 0x5d, 0x41, 0xde, 0x73,
+ 0xf7, 0xe5, 0x99, 0xc6, 0x35, 0x15, 0x78, 0x33,
+ 0xf0, 0xef, 0xcc, 0xe3, 0x1b, 0xb4, 0x9d, 0x91,
+ 0x29, 0xae, 0x1c, 0x9c, 0xff, 0x3b, 0xae, 0xeb,
+ 0x27, 0xc0, 0x34, 0x46, 0xa7, 0x7e, 0xf9, 0x58,
+ 0xed, 0x1c, 0xda, 0xf7, 0x77, 0x51, 0xbb, 0x4c,
+ 0x06, 0x1e, 0x20, 0xef, 0x79, 0xbb, 0x45, 0xe6,
+ 0x31, 0xae, 0x00, 0x1c, 0x47, 0x7a, 0x66, 0xa6,
+ 0xd6, 0x77, 0x71, 0x16, 0xf0, 0xc4, 0xcc, 0x71,
+ 0x0d, 0xa3, 0xeb, 0xf3, 0x7f, 0xe7, 0x75, 0xfd,
+ 0x04, 0xd8, 0x97, 0xfa, 0x0b, 0x74, 0x89, 0xb6,
+ 0x57, 0xae, 0x03, 0x26, 0x2d, 0xc4, 0x3a, 0xe4,
+ 0x3f, 0x67, 0x97, 0x0b, 0x1a, 0xeb, 0x26, 0xc0,
+ 0xcf, 0x03, 0xc6, 0xdb, 0x4b, 0x3b, 0x2e, 0x28,
+ 0xa6, 0x41, 0x75, 0x7d, 0xfe, 0xef, 0xbc, 0xae,
+ 0x9f, 0x00, 0xd3, 0xa9, 0xbf, 0x38, 0x97, 0x68,
+ 0x7f, 0xcc, 0x74, 0xbc, 0xa4, 0x85, 0xd9, 0x91,
+ 0xbc, 0xe7, 0xeb, 0x6d, 0xc1, 0xe3, 0xdd, 0x10,
+ 0xb8, 0x39, 0xf3, 0x98, 0x27, 0x6a, 0xb7, 0x92,
+ 0xae, 0x42, 0x34, 0x49, 0xd7, 0xe7, 0xff, 0x91,
+ 0xe7, 0x6b, 0x80, 0x63, 0xdb, 0x02, 0x58, 0xb7,
+ 0xf6, 0x20, 0x0a, 0xd9, 0x0a, 0x58, 0xbb, 0xf6,
+ 0x20, 0x34, 0xb2, 0x72, 0x17, 0x01, 0xea, 0xe7,
+ 0x15, 0xc0, 0x7e, 0xed, 0x0a, 0x9c, 0x07, 0xac,
+ 0x12, 0xf8, 0x19, 0x0b, 0xf3, 0x41, 0xd2, 0xb3,
+ 0x46, 0x52, 0x31, 0x26, 0x00, 0x63, 0xdb, 0xb2,
+ 0xf6, 0x00, 0x0a, 0x9a, 0x44, 0xfe, 0x7b, 0xaa,
+ 0xd2, 0x3c, 0xb9, 0xcb, 0x00, 0xf7, 0xb3, 0x09,
+ 0x50, 0xaf, 0xa6, 0x02, 0x47, 0x00, 0x3f, 0x24,
+ 0xee, 0xf6, 0xc2, 0x58, 0x2e, 0x05, 0xbe, 0x58,
+ 0xf8, 0x33, 0x25, 0xa6, 0xd6, 0x1e, 0x40, 0x83,
+ 0xd5, 0xde, 0x85, 0xab, 0xb4, 0x35, 0x6a, 0x0f,
+ 0x40, 0x23, 0xab, 0xe9, 0x57, 0x00, 0x56, 0x01,
+ 0xbe, 0x49, 0x7a, 0x2d, 0xb0, 0x86, 0xfd, 0x49,
+ 0x0f, 0x1f, 0x4a, 0x45, 0x99, 0x00, 0x8c, 0x6d,
+ 0xc9, 0xda, 0x03, 0x28, 0x6c, 0xe9, 0xda, 0x03,
+ 0xd0, 0xc8, 0xca, 0x7d, 0x05, 0x20, 0x67, 0x02,
+ 0xb0, 0x23, 0xf0, 0x2d, 0x60, 0xb5, 0x8c, 0x7d,
+ 0xf6, 0xe3, 0xeb, 0xc0, 0xe9, 0x95, 0x3e, 0x5b,
+ 0x1d, 0xe7, 0x2d, 0x00, 0x49, 0xd1, 0x9a, 0x78,
+ 0x05, 0x60, 0x12, 0xf0, 0x3e, 0xe0, 0x97, 0xd4,
+ 0x5b, 0xfc, 0x2f, 0x05, 0xf6, 0xa9, 0xf4, 0xd9,
+ 0x92, 0x57, 0x00, 0x24, 0x85, 0x5a, 0x06, 0x58,
+ 0x29, 0x73, 0x9f, 0xc3, 0x3e, 0x03, 0xb0, 0x0c,
+ 0xf0, 0x15, 0xe0, 0x65, 0x19, 0xc6, 0x32, 0xa8,
+ 0x8b, 0x81, 0x17, 0x00, 0xf7, 0x54, 0x1c, 0x83,
+ 0x3a, 0xce, 0x2b, 0x00, 0x92, 0x22, 0xe5, 0xfe,
+ 0xf5, 0x3f, 0x8b, 0xb4, 0x2d, 0xf7, 0xa0, 0x9e,
+ 0x02, 0x5c, 0x48, 0xdd, 0xc5, 0xff, 0x87, 0xc0,
+ 0xb3, 0x49, 0xbb, 0x0f, 0x4a, 0xd5, 0x98, 0x00,
+ 0x48, 0x8a, 0x94, 0xbb, 0x0a, 0xe0, 0x74, 0x52,
+ 0x41, 0xae, 0x41, 0xbc, 0x16, 0xf8, 0x1d, 0xf5,
+ 0x2a, 0x62, 0x3e, 0x04, 0x1c, 0x08, 0xec, 0x0e,
+ 0xdc, 0x55, 0x69, 0x0c, 0xd2, 0x7f, 0x78, 0x0b,
+ 0x40, 0x52, 0xa4, 0x9a, 0x65, 0x80, 0xe7, 0x59,
+ 0x14, 0x38, 0x8a, 0xb4, 0xb3, 0x67, 0x2d, 0xd7,
+ 0x03, 0x7b, 0x92, 0x12, 0x10, 0xa9, 0x11, 0x4c,
+ 0x00, 0x24, 0x45, 0xca, 0x9d, 0x00, 0xf4, 0x7b,
+ 0xff, 0x7f, 0x1d, 0xe0, 0x3b, 0xc0, 0x36, 0x99,
+ 0xc7, 0xd1, 0x8f, 0xb3, 0x80, 0x57, 0x02, 0x37,
+ 0x55, 0x1c, 0x83, 0xf4, 0x18, 0xde, 0x02, 0x90,
+ 0x14, 0x29, 0x77, 0x02, 0x70, 0x4d, 0x1f, 0xff,
+ 0xee, 0x8b, 0x48, 0x0f, 0xdb, 0xd5, 0x5a, 0xfc,
+ 0xe7, 0x02, 0x47, 0x02, 0xcf, 0xc3, 0xc5, 0x5f,
+ 0x0d, 0x64, 0x02, 0x20, 0x29, 0x52, 0xee, 0x87,
+ 0x00, 0x7b, 0xb9, 0x02, 0x30, 0x05, 0x38, 0x14,
+ 0xf8, 0x11, 0xf5, 0xf6, 0xd7, 0xbf, 0x0b, 0x78,
+ 0x29, 0xe9, 0x9e, 0xff, 0xa0, 0xcf, 0x2c, 0x48,
+ 0xa1, 0xbc, 0x05, 0x20, 0x29, 0xca, 0x14, 0xd2,
+ 0x25, 0xf8, 0x9c, 0x26, 0x7a, 0x06, 0x60, 0x25,
+ 0xe0, 0x1b, 0xc0, 0x4e, 0x99, 0x3f, 0xb7, 0x1f,
+ 0x17, 0x93, 0xde, 0x32, 0x88, 0xac, 0x59, 0x20,
+ 0x0d, 0xcd, 0x2b, 0x00, 0xe5, 0x1c, 0x40, 0xda,
+ 0x7c, 0x24, 0x57, 0x3b, 0xaa, 0xec, 0xf0, 0xa5,
+ 0xbe, 0xad, 0x03, 0x2c, 0x92, 0xb9, 0xcf, 0xf1,
+ 0x6e, 0x01, 0x6c, 0x05, 0x5c, 0x40, 0xdd, 0xc5,
+ 0xff, 0x24, 0xe0, 0x99, 0xb8, 0xf8, 0xab, 0x05,
+ 0x4c, 0x00, 0x24, 0x45, 0xc9, 0x7d, 0xff, 0xff,
+ 0xdf, 0xc0, 0x8c, 0x31, 0xfe, 0xd9, 0x9b, 0x81,
+ 0x73, 0xa9, 0x57, 0xc1, 0xf3, 0x01, 0x60, 0x6f,
+ 0xe0, 0x75, 0xc0, 0xfd, 0x95, 0xc6, 0x20, 0xf5,
+ 0xc5, 0x5b, 0x00, 0x92, 0xa2, 0x94, 0xb8, 0xff,
+ 0xbf, 0x14, 0xf0, 0x65, 0x60, 0xaf, 0xcc, 0x9f,
+ 0xd5, 0x8f, 0xab, 0x48, 0xf7, 0xfb, 0xff, 0x5c,
+ 0x71, 0x0c, 0x52, 0xdf, 0x4c, 0x00, 0x24, 0x45,
+ 0x89, 0x2e, 0x02, 0xb4, 0x11, 0xf0, 0x3d, 0x60,
+ 0xb3, 0xcc, 0x9f, 0xd3, 0x8f, 0xd3, 0x48, 0xbf,
+ 0xfa, 0xef, 0xac, 0x38, 0x06, 0x69, 0x20, 0xde,
+ 0x02, 0x90, 0x14, 0x25, 0xb2, 0x08, 0xd0, 0x2b,
+ 0x49, 0xf7, 0xfb, 0x6b, 0x2d, 0xfe, 0x0f, 0x01,
+ 0x87, 0x01, 0xbb, 0xe1, 0xe2, 0xaf, 0x96, 0xf2,
+ 0x0a, 0x80, 0xa4, 0x28, 0x11, 0xbb, 0x00, 0x4e,
+ 0x05, 0x3e, 0x42, 0x7a, 0xa8, 0xb6, 0x96, 0x7f,
+ 0x93, 0x12, 0x90, 0x5f, 0x55, 0x1c, 0x83, 0x34,
+ 0x34, 0x13, 0x00, 0x49, 0x51, 0x72, 0x27, 0x00,
+ 0x33, 0x81, 0xb3, 0x81, 0x6d, 0x33, 0xf7, 0xdb,
+ 0x8f, 0xdf, 0x92, 0x9e, 0x37, 0xb8, 0xb1, 0xe2,
+ 0x18, 0xa4, 0x2c, 0x4c, 0x00, 0x24, 0x45, 0x58,
+ 0xfe, 0xe1, 0x96, 0xd3, 0x97, 0x81, 0xc5, 0x32,
+ 0xf7, 0xd9, 0xab, 0xb9, 0xc0, 0xd1, 0xc0, 0xc1,
+ 0xa4, 0xcb, 0xff, 0x52, 0xeb, 0x99, 0x00, 0x48,
+ 0x8a, 0x90, 0xfb, 0xfe, 0x3f, 0xd4, 0x5b, 0xfc,
+ 0xef, 0x06, 0xde, 0x00, 0x7c, 0xb7, 0xd2, 0xe7,
+ 0x4b, 0x21, 0x4c, 0x00, 0x24, 0x45, 0xc8, 0x7d,
+ 0xf9, 0xbf, 0x96, 0xcb, 0x48, 0xaf, 0xf8, 0x5d,
+ 0x56, 0x7b, 0x20, 0x52, 0x6e, 0xbe, 0x05, 0x20,
+ 0x29, 0xc2, 0x28, 0x24, 0x00, 0xff, 0x47, 0xda,
+ 0x5d, 0xd0, 0xc5, 0x5f, 0x23, 0xc9, 0x04, 0x40,
+ 0x52, 0x84, 0x36, 0x27, 0x00, 0x0f, 0x02, 0xef,
+ 0x04, 0x5e, 0x0b, 0xdc, 0x57, 0x79, 0x2c, 0x52,
+ 0x18, 0x6f, 0x01, 0x48, 0x8a, 0xd0, 0xd6, 0x04,
+ 0xe0, 0x5f, 0xc0, 0x9e, 0xc0, 0x79, 0xb5, 0x07,
+ 0x22, 0x45, 0xf3, 0x0a, 0x80, 0xa4, 0x08, 0x11,
+ 0x0f, 0x01, 0x46, 0xfb, 0x09, 0xf0, 0x54, 0x5c,
+ 0xfc, 0xd5, 0x11, 0x26, 0x00, 0x92, 0x72, 0x5b,
+ 0x04, 0x58, 0xbb, 0xf6, 0x20, 0xfa, 0x30, 0x9b,
+ 0xb4, 0xab, 0xdf, 0xae, 0xc0, 0xed, 0x95, 0xc7,
+ 0x22, 0x15, 0xe3, 0x2d, 0x00, 0x49, 0xb9, 0xad,
+ 0x0b, 0x4c, 0xa9, 0x3d, 0x88, 0x1e, 0xdd, 0x0a,
+ 0xbc, 0x1a, 0x38, 0xbd, 0xf6, 0x40, 0xa4, 0xd2,
+ 0x4c, 0x00, 0x24, 0xe5, 0xd6, 0x96, 0xfb, 0xff,
+ 0x17, 0x00, 0x2f, 0x03, 0xfe, 0x59, 0x7b, 0x20,
+ 0x52, 0x0d, 0xde, 0x02, 0x90, 0x94, 0x5b, 0x1b,
+ 0xee, 0xff, 0x7f, 0x11, 0x78, 0x26, 0x2e, 0xfe,
+ 0xea, 0x30, 0xaf, 0x00, 0x48, 0xca, 0x2d, 0x77,
+ 0x19, 0xe0, 0x9c, 0xee, 0x01, 0xde, 0x04, 0x9c,
+ 0x5c, 0x7b, 0x20, 0x52, 0x6d, 0x26, 0x00, 0x92,
+ 0x72, 0x6b, 0xea, 0x15, 0x80, 0x2b, 0x48, 0xbb,
+ 0xfa, 0xfd, 0xad, 0xf6, 0x40, 0xa4, 0x26, 0x30,
+ 0x01, 0x28, 0xe7, 0xc8, 0x87, 0x5b, 0x97, 0x4d,
+ 0x06, 0x76, 0x06, 0x76, 0x07, 0x9e, 0x01, 0xac,
+ 0x01, 0x2c, 0x5b, 0x75, 0x44, 0xa3, 0xeb, 0x5e,
+ 0xe0, 0x3a, 0xe0, 0x22, 0xe0, 0x54, 0xe0, 0x07,
+ 0xa4, 0x6a, 0x7a, 0x25, 0x34, 0xf1, 0x19, 0x80,
+ 0x6f, 0x01, 0x6f, 0x26, 0x5d, 0x01, 0x90, 0xd4,
+ 0x83, 0x39, 0xa4, 0x2a, 0x58, 0xb9, 0xda, 0xa4,
+ 0xb2, 0xc3, 0x1f, 0xca, 0x91, 0xe4, 0x8d, 0xbd,
+ 0xe9, 0xed, 0x7d, 0x79, 0x0e, 0xdb, 0x98, 0x76,
+ 0x04, 0x2e, 0x6e, 0x40, 0x9c, 0x5d, 0x6d, 0xff,
+ 0x00, 0xf6, 0x98, 0xe8, 0x8f, 0x94, 0xc9, 0x5d,
+ 0x85, 0x62, 0xea, 0xa5, 0xcd, 0x02, 0x0e, 0x88,
+ 0x0d, 0x77, 0x64, 0x75, 0x79, 0xfe, 0xef, 0x04,
+ 0x1f, 0x02, 0x54, 0x09, 0xfb, 0x03, 0x67, 0x00,
+ 0x9b, 0xd7, 0x1e, 0x48, 0x87, 0xad, 0x07, 0x7c,
+ 0x0f, 0xf8, 0x04, 0xb1, 0xaf, 0xe8, 0xad, 0x04,
+ 0x2c, 0x13, 0xd8, 0x7f, 0x3f, 0xae, 0x03, 0xb6,
+ 0xc7, 0x2b, 0x6f, 0xd2, 0x42, 0x79, 0x0b, 0x40,
+ 0xd1, 0xde, 0x01, 0x1c, 0x5b, 0x7b, 0x10, 0xfa,
+ 0x8f, 0xf7, 0x90, 0x7e, 0x8d, 0x45, 0x5d, 0xf1,
+ 0x69, 0xca, 0xfd, 0xff, 0x5f, 0x03, 0xaf, 0x04,
+ 0x6e, 0xae, 0x3d, 0x10, 0xa9, 0xa9, 0xbc, 0x02,
+ 0xa0, 0x48, 0xdb, 0x00, 0x9f, 0xac, 0x3d, 0x08,
+ 0x3d, 0xc6, 0x7b, 0x49, 0xcf, 0x61, 0x44, 0xa8,
+ 0x7d, 0xff, 0x7f, 0x2e, 0xe9, 0x17, 0xff, 0xf3,
+ 0x71, 0xf1, 0x97, 0xc6, 0x65, 0x02, 0xa0, 0x48,
+ 0x47, 0xe0, 0x55, 0xa6, 0xa6, 0x3a, 0x06, 0x58,
+ 0x34, 0xa0, 0xdf, 0x9a, 0x09, 0xc0, 0x6d, 0xc0,
+ 0x8b, 0x80, 0x03, 0x49, 0xdb, 0xfb, 0x4a, 0x1a,
+ 0x87, 0x09, 0x80, 0xa2, 0x6c, 0x03, 0x3c, 0xbb,
+ 0xf6, 0x20, 0x34, 0xa6, 0xc7, 0x03, 0x2f, 0x09,
+ 0xe8, 0xb7, 0x56, 0x02, 0x70, 0x11, 0xb0, 0x35,
+ 0xf0, 0xb3, 0x4a, 0x9f, 0x2f, 0xb5, 0x8e, 0x09,
+ 0x80, 0xa2, 0xec, 0x56, 0x7b, 0x00, 0x9a, 0xd0,
+ 0xa8, 0x24, 0x00, 0x27, 0x01, 0xcf, 0x02, 0xae,
+ 0xa9, 0xf0, 0xd9, 0x52, 0x6b, 0x79, 0x79, 0x56,
+ 0x51, 0xb6, 0xac, 0x3d, 0x00, 0x4d, 0x68, 0xab,
+ 0x80, 0x3e, 0x4b, 0xee, 0x02, 0x78, 0x1f, 0xf0,
+ 0x16, 0xe0, 0xff, 0x0a, 0x7e, 0xa6, 0x34, 0x32,
+ 0x4c, 0x00, 0x14, 0x65, 0x8d, 0xda, 0x03, 0xd0,
+ 0x84, 0x22, 0xfe, 0x46, 0x2b, 0x07, 0xf4, 0xb9,
+ 0x30, 0x57, 0x92, 0x0a, 0xf9, 0xfc, 0xb9, 0xd0,
+ 0xe7, 0x49, 0x23, 0xc7, 0x5b, 0x00, 0x63, 0xeb,
+ 0xda, 0x8e, 0x61, 0x33, 0x32, 0xf7, 0x37, 0x37,
+ 0x73, 0x7f, 0x6a, 0x87, 0x12, 0x73, 0xca, 0xf7,
+ 0x48, 0x57, 0x2f, 0x5c, 0xfc, 0xa5, 0x21, 0x98,
+ 0x00, 0x8c, 0xed, 0xc6, 0xda, 0x03, 0x28, 0xec,
+ 0xfa, 0xcc, 0xfd, 0xdd, 0x90, 0xb9, 0x3f, 0xe5,
+ 0x97, 0xfb, 0x6f, 0x0e, 0xb1, 0x7f, 0xf7, 0x87,
+ 0x80, 0x77, 0x03, 0x2f, 0x27, 0x7f, 0xc2, 0x2a,
+ 0x75, 0x8e, 0x09, 0xc0, 0xd8, 0x2e, 0xa8, 0x3d,
+ 0x80, 0x82, 0xe6, 0x92, 0xb6, 0xe9, 0xcd, 0xe9,
+ 0xc2, 0xcc, 0xfd, 0x29, 0xbf, 0x88, 0x73, 0xfc,
+ 0xfc, 0x80, 0x3e, 0x01, 0x6e, 0x01, 0x5e, 0x40,
+ 0xda, 0x54, 0xca, 0xab, 0x4b, 0x52, 0x06, 0x26,
+ 0x00, 0x63, 0xbb, 0x04, 0x98, 0x5e, 0x7b, 0x10,
+ 0x85, 0x5c, 0x40, 0xda, 0x36, 0x35, 0xa7, 0x1f,
+ 0x66, 0xee, 0x4f, 0xf9, 0x9d, 0x1a, 0xd0, 0xe7,
+ 0x0f, 0x02, 0xfa, 0x3c, 0x0b, 0x78, 0x32, 0x70,
+ 0x66, 0x40, 0xdf, 0x92, 0xc6, 0xd0, 0xf5, 0x62,
+ 0x10, 0xfb, 0x50, 0xbf, 0x98, 0x49, 0x89, 0xb6,
+ 0x67, 0xae, 0x03, 0xb6, 0x80, 0x33, 0x1b, 0x10,
+ 0x9b, 0x6d, 0xe1, 0xed, 0x1f, 0xc0, 0xb4, 0xb1,
+ 0xff, 0x74, 0x03, 0x9b, 0x06, 0xfc, 0x33, 0xd3,
+ 0x18, 0xe7, 0xe0, 0x66, 0x52, 0x35, 0x75, 0x7d,
+ 0xfe, 0xef, 0xbc, 0xae, 0x9f, 0x00, 0xd3, 0x48,
+ 0xb5, 0xc3, 0x6b, 0x4f, 0xd6, 0x91, 0xed, 0xb7,
+ 0xc4, 0xfd, 0x5d, 0xb6, 0x26, 0x95, 0xa0, 0xad,
+ 0x1d, 0xa3, 0xed, 0xb1, 0x2d, 0x72, 0x9f, 0x86,
+ 0x97, 0x66, 0x18, 0xdf, 0x1d, 0xc0, 0xae, 0x81,
+ 0x63, 0xd4, 0xc4, 0xba, 0x3e, 0xff, 0x77, 0x9e,
+ 0x27, 0x00, 0x6c, 0x08, 0xdc, 0x4e, 0xfd, 0x09,
+ 0x3b, 0xa2, 0xdd, 0x00, 0xac, 0x99, 0xef, 0x50,
+ 0x2d, 0xd4, 0xdb, 0x1a, 0x10, 0xa7, 0xed, 0xd1,
+ 0xad, 0x44, 0x75, 0xbc, 0x4f, 0x0d, 0x31, 0xbe,
+ 0x8b, 0x69, 0x4e, 0x51, 0xa1, 0x2e, 0x73, 0xfe,
+ 0xef, 0x38, 0x4f, 0x80, 0x64, 0x4b, 0xe0, 0x5a,
+ 0xea, 0x4f, 0xdc, 0x39, 0xdb, 0x15, 0xc0, 0x46,
+ 0x39, 0x0f, 0xd2, 0x38, 0xf6, 0x23, 0xd5, 0x65,
+ 0xaf, 0x1d, 0xb3, 0x0d, 0x8e, 0xa2, 0xcc, 0xb3,
+ 0x3f, 0x93, 0x48, 0x85, 0xa0, 0xfa, 0x1d, 0xdf,
+ 0x57, 0x80, 0xc5, 0x0b, 0x8c, 0x4f, 0x13, 0x73,
+ 0xfe, 0xef, 0x38, 0x4f, 0x80, 0x47, 0xac, 0x0a,
+ 0x9c, 0x40, 0x2a, 0x32, 0x52, 0x7b, 0x12, 0x1f,
+ 0xa6, 0xcd, 0x04, 0x8e, 0x07, 0x96, 0xcb, 0x7b,
+ 0x78, 0x26, 0xb4, 0x1d, 0xe9, 0xcd, 0x80, 0xda,
+ 0xf1, 0x77, 0xb5, 0x5d, 0x49, 0x9d, 0xed, 0x99,
+ 0x77, 0x27, 0x3d, 0x4c, 0x3b, 0xd1, 0xf8, 0xfe,
+ 0x89, 0x97, 0xfc, 0x9b, 0xc6, 0xf9, 0x7f, 0xc4,
+ 0x4d, 0xf4, 0x07, 0x99, 0xd3, 0xc3, 0xbf, 0xd3,
+ 0x8f, 0xc9, 0xa4, 0x13, 0xa1, 0xcd, 0x36, 0x01,
+ 0xf6, 0x02, 0x76, 0x02, 0x1e, 0x47, 0x4a, 0x0c,
+ 0x9a, 0xfc, 0x36, 0xc5, 0x43, 0xa4, 0xb2, 0xa8,
+ 0x57, 0x93, 0x0a, 0xa5, 0x9c, 0xfc, 0xf0, 0xff,
+ 0xaf, 0x61, 0x32, 0xe9, 0x55, 0xae, 0xdd, 0x81,
+ 0x67, 0x90, 0x6e, 0x3f, 0x94, 0x4e, 0x44, 0xba,
+ 0xe2, 0x1e, 0xd2, 0x9b, 0x1d, 0x17, 0x92, 0xde,
+ 0xc8, 0x38, 0x95, 0x74, 0x15, 0xa6, 0x86, 0x69,
+ 0xa4, 0xbf, 0xf9, 0xee, 0xa4, 0x22, 0x51, 0xab,
+ 0x91, 0xe6, 0x81, 0x1b, 0x81, 0x3f, 0x00, 0x3f,
+ 0x02, 0xbe, 0x4f, 0x3a, 0x57, 0xd5, 0x1c, 0xce,
+ 0xff, 0x23, 0xce, 0x04, 0x40, 0x92, 0xb4, 0x30,
+ 0xce, 0xff, 0x23, 0xae, 0xc9, 0xbf, 0x5c, 0x25,
+ 0x49, 0x52, 0x10, 0x13, 0x00, 0x49, 0x92, 0x3a,
+ 0xc8, 0x04, 0x40, 0x92, 0xa4, 0x0e, 0x32, 0x01,
+ 0x90, 0x24, 0xa9, 0x83, 0x4c, 0x00, 0x24, 0x49,
+ 0xea, 0x20, 0x13, 0x00, 0x49, 0x92, 0x3a, 0xc8,
+ 0x04, 0x40, 0x92, 0xa4, 0x0e, 0x32, 0x01, 0x90,
+ 0x24, 0xa9, 0x83, 0x4c, 0x00, 0x24, 0x49, 0xea,
+ 0x20, 0x13, 0x00, 0x49, 0x92, 0x3a, 0xc8, 0x04,
+ 0x40, 0x92, 0xa4, 0x0e, 0x32, 0x01, 0x90, 0x24,
+ 0xa9, 0x83, 0x4c, 0x00, 0x24, 0x49, 0xea, 0x20,
+ 0x13, 0x00, 0x49, 0x92, 0x3a, 0xc8, 0x04, 0x40,
+ 0x92, 0xa4, 0x0e, 0x32, 0x01, 0x90, 0x24, 0xa9,
+ 0x83, 0x4c, 0x00, 0x24, 0x49, 0xea, 0x20, 0x13,
+ 0x00, 0x49, 0x92, 0x3a, 0xc8, 0x04, 0x40, 0x92,
+ 0xa4, 0x0e, 0x32, 0x01, 0x90, 0x24, 0xa9, 0x83,
+ 0x4c, 0x00, 0x24, 0x49, 0xea, 0x20, 0x13, 0x00,
+ 0x49, 0x92, 0x3a, 0xc8, 0x04, 0x40, 0x92, 0xa4,
+ 0x0e, 0x32, 0x01, 0x90, 0x24, 0xa9, 0x83, 0x4c,
+ 0x00, 0x24, 0x49, 0xea, 0x20, 0x13, 0x00, 0x49,
+ 0x92, 0x3a, 0xc8, 0x04, 0x40, 0x92, 0xa4, 0x0e,
+ 0x32, 0x01, 0x90, 0x24, 0xa9, 0x83, 0x4c, 0x00,
+ 0x24, 0x49, 0xea, 0x20, 0x13, 0x00, 0x49, 0x92,
+ 0x3a, 0xc8, 0x04, 0x40, 0x92, 0xa4, 0x0e, 0x32,
+ 0x01, 0x90, 0x24, 0xa9, 0x83, 0x4c, 0x00, 0x24,
+ 0x49, 0xea, 0x20, 0x13, 0x00, 0x49, 0x92, 0x3a,
+ 0xc8, 0x04, 0x40, 0x92, 0xa4, 0x0e, 0x32, 0x01,
+ 0x90, 0x24, 0xa9, 0x83, 0x4c, 0x00, 0x24, 0x49,
+ 0xea, 0x20, 0x13, 0x00, 0x49, 0x92, 0x3a, 0xc8,
+ 0x04, 0x40, 0x92, 0xa4, 0x0e, 0x32, 0x01, 0x90,
+ 0x24, 0xa9, 0x83, 0x4c, 0x00, 0x24, 0x49, 0xea,
+ 0xa0, 0x89, 0x12, 0x80, 0x99, 0x99, 0x3f, 0x6f,
+ 0xe9, 0xcc, 0xfd, 0x49, 0x92, 0xf2, 0x5b, 0x0a,
+ 0x98, 0x94, 0xb1, 0xbf, 0x99, 0xc0, 0xdc, 0x8c,
+ 0xfd, 0x29, 0x83, 0x89, 0x12, 0x80, 0x7b, 0x32,
+ 0x7f, 0xde, 0xea, 0x99, 0xfb, 0x93, 0x24, 0xe5,
+ 0xb7, 0x66, 0xe6, 0xfe, 0xee, 0xce, 0xdc, 0x9f,
+ 0x32, 0x98, 0x28, 0x01, 0x98, 0x91, 0xf9, 0xf3,
+ 0x72, 0x9f, 0x54, 0x92, 0xa4, 0xfc, 0xd6, 0xc8,
+ 0xdc, 0x9f, 0x09, 0x40, 0x03, 0x4d, 0x94, 0x00,
+ 0xdc, 0x99, 0xf9, 0xf3, 0xb6, 0xcb, 0xdc, 0x9f,
+ 0x24, 0x29, 0xbf, 0xed, 0x33, 0xf7, 0x77, 0x47,
+ 0xe6, 0xfe, 0x94, 0xc1, 0x44, 0x09, 0xc0, 0x55,
+ 0x99, 0x3f, 0xef, 0x25, 0x99, 0xfb, 0x93, 0x24,
+ 0xe5, 0xb7, 0x5b, 0xe6, 0xfe, 0xae, 0xcc, 0xdc,
+ 0x9f, 0x32, 0x98, 0x28, 0x01, 0xb8, 0x3c, 0xf3,
+ 0xe7, 0x3d, 0x15, 0xd8, 0x38, 0x73, 0x9f, 0x92,
+ 0xa4, 0x7c, 0x36, 0x06, 0x36, 0xcf, 0xdc, 0xe7,
+ 0xdf, 0x33, 0xf7, 0xa7, 0x0c, 0x26, 0x4a, 0x00,
+ 0xae, 0x08, 0xf8, 0xcc, 0x8f, 0x06, 0xf4, 0x29,
+ 0x49, 0xca, 0x23, 0x62, 0x8e, 0x8e, 0x58, 0x4b,
+ 0x14, 0x6c, 0x3d, 0xd2, 0xab, 0x1b, 0x39, 0xdb,
+ 0x1c, 0xe0, 0x19, 0x25, 0x83, 0x90, 0x24, 0xf5,
+ 0xe4, 0x19, 0xa4, 0x39, 0x3a, 0xf7, 0xbc, 0xbf,
+ 0x7e, 0xc9, 0x20, 0x94, 0xcf, 0x35, 0xe4, 0x3f,
+ 0x19, 0xa6, 0x03, 0xab, 0x14, 0x8c, 0x41, 0x92,
+ 0x34, 0xbe, 0x15, 0x49, 0xcf, 0x7d, 0xe5, 0x9e,
+ 0xef, 0xff, 0x59, 0x32, 0x08, 0xe5, 0xf5, 0x55,
+ 0xf2, 0x9f, 0x10, 0x73, 0x81, 0xb3, 0x81, 0x69,
+ 0x05, 0xe3, 0x90, 0x24, 0x2d, 0xdc, 0x34, 0xe0,
+ 0x37, 0xc4, 0xcc, 0xf5, 0x5f, 0x2b, 0x18, 0x87,
+ 0x32, 0xdb, 0x9d, 0x98, 0x93, 0x62, 0x5e, 0x12,
+ 0xb0, 0x72, 0xb9, 0x50, 0x24, 0x49, 0x0b, 0x58,
+ 0x99, 0xb8, 0xc5, 0x7f, 0x2e, 0xb0, 0x47, 0xb9,
+ 0x50, 0x94, 0xdb, 0x34, 0xe0, 0x56, 0xe2, 0x4e,
+ 0x8e, 0x6b, 0xf0, 0x99, 0x00, 0x49, 0xaa, 0xe1,
+ 0x99, 0xc4, 0xdc, 0xe6, 0x9d, 0xd7, 0x6e, 0x03,
+ 0x16, 0x2d, 0x16, 0x8d, 0x42, 0x1c, 0x4f, 0xdc,
+ 0x09, 0x32, 0xaf, 0x7d, 0x0f, 0xd8, 0xa4, 0x54,
+ 0x40, 0x92, 0xd4, 0x61, 0x9b, 0x90, 0xe6, 0xdc,
+ 0xe8, 0x79, 0xfd, 0x73, 0xa5, 0x02, 0x52, 0xff,
+ 0x7a, 0x2d, 0xf6, 0xf0, 0x14, 0xe0, 0xe2, 0x3e,
+ 0xfe, 0xfd, 0x61, 0x5c, 0x02, 0x9c, 0x4a, 0xba,
+ 0x3d, 0x70, 0x03, 0x70, 0x1d, 0xf9, 0x6b, 0x12,
+ 0x48, 0x52, 0x57, 0x2c, 0x05, 0xac, 0x45, 0xda,
+ 0xde, 0x77, 0x7b, 0xd2, 0x86, 0x6c, 0xb9, 0xdf,
+ 0xf3, 0x5f, 0x98, 0xb9, 0xc0, 0x96, 0xa4, 0xb5,
+ 0x43, 0x0d, 0xd4, 0xcf, 0x82, 0xfe, 0x63, 0xe0,
+ 0x45, 0x51, 0x03, 0x91, 0x24, 0x8d, 0x94, 0x9f,
+ 0x00, 0x2f, 0xae, 0x3d, 0x08, 0x8d, 0xad, 0x9f,
+ 0x04, 0xe0, 0x69, 0xc0, 0x1f, 0xa2, 0x06, 0x22,
+ 0x49, 0x1a, 0x29, 0xcf, 0x02, 0xce, 0xad, 0x3d,
+ 0x08, 0x8d, 0x6d, 0xa2, 0x9d, 0x00, 0xe7, 0x77,
+ 0x1e, 0x70, 0x5a, 0xd4, 0x40, 0x24, 0x49, 0x23,
+ 0xe3, 0x34, 0x5c, 0xfc, 0x1b, 0xaf, 0xdf, 0x7b,
+ 0xfa, 0xeb, 0x00, 0x97, 0x02, 0x4b, 0x06, 0x8c,
+ 0x45, 0x92, 0xd4, 0x7e, 0xf7, 0x03, 0x4f, 0x04,
+ 0xae, 0xae, 0x3d, 0x10, 0x8d, 0x6f, 0x4a, 0x9f,
+ 0xff, 0xfe, 0x5d, 0xa4, 0xab, 0x06, 0xcf, 0x09,
+ 0x18, 0x8b, 0x24, 0xa9, 0xfd, 0x0e, 0x27, 0x3d,
+ 0xc8, 0xad, 0x86, 0x1b, 0xe4, 0xa9, 0xfe, 0x45,
+ 0x80, 0xb3, 0xf0, 0xdd, 0x7d, 0x49, 0xd2, 0xa3,
+ 0x9d, 0x4f, 0xba, 0xf7, 0x3f, 0xb3, 0xf6, 0x40,
+ 0x34, 0xb1, 0x41, 0x5f, 0xeb, 0x5b, 0x9b, 0xf4,
+ 0x6a, 0xc7, 0x8a, 0x19, 0xc7, 0x22, 0x49, 0x6a,
+ 0xaf, 0x3b, 0x81, 0x2d, 0x48, 0x1b, 0x0b, 0xa9,
+ 0x05, 0xfa, 0x79, 0x08, 0x70, 0x7e, 0xd7, 0x02,
+ 0x6f, 0x20, 0x55, 0x8d, 0x92, 0x24, 0x75, 0xdb,
+ 0x1c, 0xe0, 0xf5, 0xb8, 0xf8, 0xb7, 0x4a, 0xbf,
+ 0xcf, 0x00, 0xcc, 0xef, 0x0a, 0xe0, 0x16, 0x7c,
+ 0xcf, 0x53, 0x92, 0xba, 0x6e, 0x7f, 0xe0, 0xc4,
+ 0xda, 0x83, 0x50, 0x7f, 0x86, 0x49, 0x00, 0x00,
+ 0x2e, 0x20, 0x5d, 0x45, 0xd8, 0x21, 0xc3, 0x58,
+ 0x24, 0x49, 0xed, 0x73, 0x38, 0x70, 0x44, 0xed,
+ 0x41, 0xa8, 0x7f, 0xc3, 0x26, 0x00, 0x90, 0x1e,
+ 0x08, 0x7c, 0x00, 0x78, 0x5e, 0x86, 0xbe, 0x24,
+ 0x49, 0xed, 0x71, 0x24, 0xf0, 0x81, 0xda, 0x83,
+ 0xd0, 0x60, 0x72, 0x24, 0x00, 0x90, 0x36, 0x7c,
+ 0xf8, 0x37, 0xb0, 0x33, 0x65, 0xea, 0x05, 0x48,
+ 0x92, 0xea, 0x99, 0x0b, 0xbc, 0x07, 0xf8, 0x70,
+ 0xed, 0x81, 0x68, 0x70, 0xb9, 0x17, 0xeb, 0x5d,
+ 0x80, 0x13, 0x80, 0xe5, 0x33, 0xf7, 0x2b, 0x49,
+ 0x6a, 0x86, 0x3b, 0x48, 0x0f, 0xfc, 0xb9, 0x33,
+ 0x6c, 0xcb, 0x45, 0xfc, 0x5a, 0x5f, 0x1b, 0xf8,
+ 0x36, 0xee, 0x13, 0x20, 0x49, 0xa3, 0xe6, 0x02,
+ 0x60, 0x2f, 0xdc, 0xe5, 0x6f, 0x24, 0xe4, 0xba,
+ 0x05, 0x30, 0xbf, 0x19, 0xc0, 0x49, 0xc0, 0x83,
+ 0xc0, 0xd3, 0x49, 0x1b, 0x07, 0x49, 0x92, 0xda,
+ 0xeb, 0x3e, 0xe0, 0x30, 0xd2, 0xeb, 0xdf, 0xb7,
+ 0x55, 0x1e, 0x8b, 0x32, 0x89, 0xbe, 0x5f, 0xff,
+ 0x38, 0xe0, 0x38, 0x60, 0xd7, 0xe0, 0xcf, 0x91,
+ 0x24, 0xc5, 0xf8, 0x11, 0xb0, 0x1f, 0x30, 0xbd,
+ 0xf2, 0x38, 0x94, 0xd9, 0xa0, 0x1b, 0x01, 0xf5,
+ 0x6a, 0x3a, 0xf0, 0x12, 0xd2, 0xee, 0x50, 0xdf,
+ 0x21, 0x3d, 0x38, 0x22, 0x49, 0x6a, 0xbe, 0x33,
+ 0x80, 0x6d, 0x49, 0x73, 0xf8, 0xf4, 0xba, 0x43,
+ 0x51, 0x84, 0xd2, 0x4f, 0xec, 0x3f, 0x05, 0xd8,
+ 0x1b, 0x78, 0x05, 0x6e, 0x23, 0x2c, 0x49, 0x4d,
+ 0x73, 0x3b, 0xe9, 0x19, 0xae, 0x2f, 0x01, 0x97,
+ 0x54, 0x1e, 0x8b, 0x82, 0xd5, 0x7a, 0x65, 0x6f,
+ 0x1a, 0xf0, 0x5f, 0xa4, 0xb7, 0x06, 0x9e, 0x43,
+ 0xba, 0x55, 0x20, 0x49, 0x2a, 0x6f, 0x3a, 0x70,
+ 0x26, 0xe9, 0xa9, 0xfe, 0x9f, 0x62, 0x21, 0x9f,
+ 0xce, 0x68, 0xca, 0x3b, 0xfb, 0xeb, 0x91, 0x1e,
+ 0x18, 0xdc, 0x18, 0xd8, 0x08, 0xd8, 0x00, 0x58,
+ 0xee, 0xe1, 0xb6, 0x14, 0x29, 0x61, 0x90, 0x24,
+ 0xf5, 0x6f, 0x26, 0x70, 0x0f, 0xa9, 0x58, 0xcf,
+ 0x9d, 0xc0, 0x55, 0xa4, 0xad, 0xdc, 0x2f, 0x07,
+ 0xfe, 0x80, 0x4f, 0xf4, 0x77, 0xd6, 0xff, 0x07,
+ 0xac, 0xd4, 0x43, 0xbd, 0x21, 0x93, 0x5f, 0x0a,
+ 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44,
+ 0xae, 0x42, 0x60, 0x82,
+};
+
+static const unsigned char data_index_html[] =
+{
+ /* /index.html */
+ 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 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, 0x6c, 0x77, 0x49, 0x50, 0x2f, 0x31, 0x2e,
+ 0x34, 0x2e, 0x30, 0x20, 0x28, 0x68, 0x74, 0x74,
+ 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e,
+ 0x73, 0x69, 0x63, 0x73, 0x2e, 0x73, 0x65, 0x2f,
+ 0x7e, 0x61, 0x64, 0x61, 0x6d, 0x2f, 0x6c, 0x77,
+ 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, 0x43,
+ 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x4c,
+ 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3a, 0x20, 0x32,
+ 0x31, 0x32, 0x0d, 0x0a, 0x0d, 0x0a,
+ 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50,
+ 0x45, 0x20, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72,
+ 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x74, 0x79, 0x6c,
+ 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20,
+ 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x73, 0x74,
+ 0x79, 0x6c, 0x65, 0x2e, 0x63, 0x73, 0x73, 0x22,
+ 0x3e, 0x0d, 0x0a, 0x09, 0x3c, 0x74, 0x69, 0x74,
+ 0x6c, 0x65, 0x3e, 0x49, 0x6e, 0x64, 0x65, 0x78,
+ 0x20, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x3c,
+ 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e,
+ 0x0d, 0x0a, 0x0d, 0x0a, 0x3c, 0x62, 0x6f, 0x64,
+ 0x79, 0x3e, 0x0d, 0x0a, 0x09, 0x3c, 0x48, 0x31,
+ 0x3e, 0x44, 0x61, 0x67, 0x20, 0x57, 0x65, 0x72,
+ 0x65, 0x6c, 0x64, 0x3c, 0x2f, 0x48, 0x31, 0x3e,
+ 0x0d, 0x0a, 0x09, 0x3c, 0x48, 0x32, 0x3e, 0x50,
+ 0x61, 0x73, 0x20, 0x6d, 0x69, 0x6a, 0x20, 0x61,
+ 0x61, 0x6e, 0x2e, 0x2e, 0x2e, 0x3c, 0x2f, 0x48,
+ 0x32, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x6d, 0x67,
+ 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x69, 0x6d,
+ 0x67, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x2f, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x68, 0x74, 0x6d,
+ 0x6c, 0x3e, 0x0d, 0x0a,
+};
+
+static const unsigned char data_info_shtml[] =
+{
+ /* /info.shtml */
+ 0x2f, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x73, 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, 0x6c, 0x77, 0x49, 0x50, 0x2f, 0x31, 0x2e,
+ 0x34, 0x2e, 0x30, 0x20, 0x28, 0x68, 0x74, 0x74,
+ 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e,
+ 0x73, 0x69, 0x63, 0x73, 0x2e, 0x73, 0x65, 0x2f,
+ 0x7e, 0x61, 0x64, 0x61, 0x6d, 0x2f, 0x6c, 0x77,
+ 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, 0x45,
+ 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x3a, 0x20,
+ 0x46, 0x72, 0x69, 0x2c, 0x20, 0x31, 0x30, 0x20,
+ 0x41, 0x70, 0x72, 0x20, 0x32, 0x30, 0x30, 0x38,
+ 0x20, 0x31, 0x34, 0x3a, 0x30, 0x30, 0x3a, 0x30,
+ 0x30, 0x20, 0x47, 0x4d, 0x54, 0x0d, 0x0a, 0x50,
+ 0x72, 0x61, 0x67, 0x6d, 0x61, 0x3a, 0x20, 0x6e,
+ 0x6f, 0x2d, 0x63, 0x61, 0x63, 0x68, 0x65, 0x0d,
+ 0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+ 0x2d, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3a,
+ 0x20, 0x32, 0x31, 0x39, 0x0d, 0x0a, 0x0d, 0x0a,
+
+ 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50,
+ 0x45, 0x20, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a,
+ 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, 0x3c,
+ 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, 0x6c,
+ 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d,
+ 0x22, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x73, 0x68,
+ 0x65, 0x65, 0x74, 0x22, 0x20, 0x68, 0x72, 0x65,
+ 0x66, 0x3d, 0x22, 0x73, 0x74, 0x79, 0x6c, 0x65,
+ 0x2e, 0x63, 0x73, 0x73, 0x22, 0x3e, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c,
+ 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x49, 0x6e,
+ 0x66, 0x6f, 0x20, 0x70, 0x61, 0x67, 0x65, 0x3c,
+ 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x0a,
+ 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0a,
+ 0x0a, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a,
+ 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x69, 0x73, 0x20,
+ 0x61, 0x70, 0x70, 0x20, 0x69, 0x73, 0x20, 0x63,
+ 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x20,
+ 0x6f, 0x6e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x23,
+ 0x44, 0x41, 0x54, 0x45, 0x2d, 0x2d, 0x3e, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x75, 0x73, 0x65, 0x73,
+ 0x20, 0x4c, 0x77, 0x49, 0x50, 0x20, 0x76, 0x65,
+ 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x3c, 0x21,
+ 0x2d, 0x2d, 0x23, 0x56, 0x45, 0x52, 0x53, 0x49,
+ 0x4f, 0x4e, 0x2d, 0x2d, 0x3e, 0x20, 0x3c, 0x2f,
+ 0x70, 0x3e, 0x0a, 0x3c, 0x2f, 0x62, 0x6f, 0x64,
+ 0x79, 0x3e, 0x0a, 0x3c, 0x2f, 0x68, 0x74, 0x6d,
+ 0x6c, 0x3e, 0x0a,
+};
+
+static const unsigned char data_style_css[] =
+{
+ /* /style.css */
+ 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x2e, 0x63,
+ 0x73, 0x73, 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, 0x6c, 0x77, 0x49, 0x50, 0x2f, 0x31, 0x2e,
+ 0x34, 0x2e, 0x30, 0x20, 0x28, 0x68, 0x74, 0x74,
+ 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e,
+ 0x73, 0x69, 0x63, 0x73, 0x2e, 0x73, 0x65, 0x2f,
+ 0x7e, 0x61, 0x64, 0x61, 0x6d, 0x2f, 0x6c, 0x77,
+ 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, 0x63, 0x73, 0x73, 0x0d, 0x0a, 0x43, 0x6f,
+ 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x4c, 0x65,
+ 0x6e, 0x67, 0x74, 0x68, 0x3a, 0x20, 0x32, 0x37,
+ 0x0d, 0x0a, 0x0d, 0x0a,
+ 0x68, 0x32, 0x7b, 0x0a, 0x09, 0x74, 0x65, 0x78,
+ 0x74, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a,
+ 0x20, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3b,
+ 0x0a, 0x7d, 0x0a,
+};
+
+const struct fsdata_file file_style_css[] =
+{
+ {
+ NULL,
+ data_style_css,
+ data_style_css + 11,
+ sizeof(data_style_css) - 11
+ }
+};
+
+const struct fsdata_file file_info_shtml[] =
+{
+ {
+ file_style_css,
+ data_info_shtml,
+ data_info_shtml + 12,
+ sizeof(data_info_shtml) - 12
+ }
+};
+
+const struct fsdata_file file_index_html[] =
+{
+ {
+ file_info_shtml,
+ data_index_html,
+ data_index_html + 12,
+ sizeof(data_index_html) - 12
+ }
+};
+
+const struct fsdata_file file_img_png[] =
+{
+ {
+ file_index_html,
+ data_img_png,
+ data_img_png + 9,
+ sizeof(data_img_png) - 9
+ }
+};
+
+const struct fsdata_file file_cgi[] =
+{
+ {
+ file_img_png,
+ data_cgi,
+ data_cgi + 5,
+ sizeof(data_cgi) - 5
+ }
+};
+
+#define FS_ROOT file_cgi
+
+#define FS_NUMFILES 5
diff --git a/project/Core/Inc/lcd_api.h b/project/Core/Inc/lcd_api.h
new file mode 100644
index 0000000..0dafb8a
--- /dev/null
+++ b/project/Core/Inc/lcd_api.h
@@ -0,0 +1,98 @@
+/**
+ * @file lcd_api.h
+ * @brief API for LCD functionality
+ * @author Tim S.
+ */
+
+#ifndef INC_LCD_API_H_
+#define INC_LCD_API_H_
+#include
+#include
+#include
+
+#define LOGGER_LEVEL_ALL
+#include "log.h"
+#include "../../Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_lcd.h"
+
+#define LCD_BLUE LCD_COLOR_BLUE
+#define LCD_GREEN LCD_COLOR_GREEN
+#define LCD_RED LCD_COLOR_RED
+#define LCD_CYAN LCD_COLOR_CYAN
+#define LCD_MAGENTA LCD_COLOR_MAGENTA
+#define LCD_YELLOW LCD_COLOR_YELLOW
+#define LCD_LIGHTBLUE LCD_COLOR_LIGHTBLUE
+#define LCD_LIGHTGREEN LCD_COLOR_LIGHTGREEN
+#define LCD_LIGHTRED LCD_COLOR_LIGHTRED
+#define LCD_LIGHTCYAN LCD_COLOR_LIGHTCYAN
+#define LCD_LIGHTMAGENTA LCD_COLOR_LIGHTMAGENTA
+#define LCD_LIGHTYELLOW LCD_COLOR_LIGHTYELLOW
+#define LCD_DARKBLUE LCD_COLOR_DARKBLUE
+#define LCD_DARKGREEN LCD_COLOR_DARKGREEN
+#define LCD_DARKRED LCD_COLOR_DARKRED
+#define LCD_DARKCYAN LCD_COLOR_DARKCYAN
+#define LCD_DARKMAGENTA LCD_COLOR_DARKMAGENTA
+#define LCD_DARKYELLOW LCD_COLOR_DARKYELLOW
+#define LCD_WHITE LCD_COLOR_WHITE
+#define LCD_LIGHTGRAY LCD_COLOR_LIGHTGRAY
+#define LCD_GRAY LCD_COLOR_GRAY
+#define LCD_DARKGRAY LCD_COLOR_DARKGRAY
+#define LCD_BLACK LCD_COLOR_BLACK
+#define LCD_BROWN LCD_COLOR_BROWN
+#define LCD_ORANGE LCD_COLOR_ORANGE
+#define LCD_TRANSPARENT LCD_COLOR_TRANSPARENT
+
+#define LCD_ARGB8888 0x00000000U
+#define LCD_RGB888 0x00000001U
+#define LCD_RGB565 0x00000002U
+#define LCD_ARGB1555 0x00000003U
+
+#define LCD_FONT8 &Font8
+#define LCD_FONT12 &Font12
+#define LCD_FONT16 &Font16
+#define LCD_FONT20 &Font20
+#define LCD_FONT24 &Font24
+
+
+extern LTDC_HandleTypeDef hLtdcHandler;
+
+/**
+ * @brief Initialise LCD
+ * Initialise the LCD screen with BackLight on or not
+ *
+ * @param[in] bl_on Bool to enable or disable the LCD backlight
+ *
+ */
+void lcd_init(bool bl_on);
+
+/**
+ * @brief Display text
+ * Display text on the LCD screen in a certain color. When text width exceeds BSP_LCD_GetXSize(),
+ * a text wrap will be performed. If the text wrap is between two letters in a word, the '-' character
+ * will be injected.
+ *
+ * @param[in] text C-style text string to display on the LCD screen
+ * @param[in] x_pos X-position
+ * @param[in] y_pos Y-position
+ * @param[in] color Color in which the text will be displayed, see preset colors in defines above
+ * @param[in] bg_color Background color for the text
+ * @param[in] font Font size, see defines above in file
+ */
+void lcd_display_text(uint8_t* text, uint16_t x_pos, uint16_t y_pos, uint32_t color, uint32_t bg_color, sFONT *font);
+
+/**
+ * @brief Draw BMP image on screen
+ * Draw BMP image from C array to the LCD screen at position X, Y. In color mode ARGB8888, RGB888, RGB565 or ARGB1555
+ * Supports ARGB8888, RGB565, RGB888
+ *
+ * @author Wim Dams
+ *
+ * @param[in] p_src C array containing the image data
+ * @param[in] x_pos X-position
+ * @param[in] y_pos Y-position
+ * @param[in] x_size Width of image
+ * @param[in] y_size Height of image
+ * @param[in] color_mode Color mode (see defined color modes above in file)
+ */
+void lcd_draw_bmp(const void* p_src, uint32_t x_pos, uint32_t y_pos, uint32_t x_size, uint32_t y_size, uint32_t color_mode);
+
+#endif /* INC_LCD_API_H_ */
diff --git a/project/Core/Inc/llfs.h b/project/Core/Inc/llfs.h
index 7fff04a..780a73b 100644
--- a/project/Core/Inc/llfs.h
+++ b/project/Core/Inc/llfs.h
@@ -2,6 +2,7 @@
* @file llfs.h
* @brief Linked List Filesystem header (llfs)
* @author Lorenz C.
+ * @version 0.1.1
*/
#ifndef LLFS_H
@@ -30,20 +31,25 @@ struct llfs_data_file {
const struct llfs_data_file* next;
};
+/**
+ * @brief Initialize the llfs filesystem
+ * @note This function should be called before any other llfs function or POSIX file operation (e.g. fopen, fread, ...)
+ * @return 0 on success
+ */
+int8_t llfs_init(void);
+
/**
* @brief Get a list of files in the filesystem
* Get a list of all the files in the filesystem.
*
- * Use the filter to filter out files with a filename that do not match the filter. (e.g. "*.txt" or "*.png|*.jpg") (not
- * implemented yet) Multiple filters can be used by separating them with a pipe (|).
+ * Use the filter to filter out files with a filename that do not match the file extension filter.
*
* The following members of the llfs_file_t struct are set: name, len and data. @ref llfs_file_t
*
- * @todo Implement file filter
*
* @param[out] file_list A pointer to an array of llfs_file_t to store the files in @ref llfs_file_t
* @param[in] max_files The maximum number of files to return (size of file_list)
- * @param[in] filter A string with file extensions to filter out. (e.g. "*.txt" or "*.png|*.jpg")
+ * @param[in] filter A string with the file extensions to filter out. (e.g. "*.txt" or "*.png")
* @return The number of files returned
*/
size_t llfs_file_list(llfs_file_t* file_list, size_t max_files, char* filter);
@@ -58,4 +64,23 @@ size_t llfs_file_list(llfs_file_t* file_list, size_t max_files, char* filter);
*/
llfs_file_t* llfs_file_open(const char* name);
+/**
+ * @brief Iterate over all files in the filesystem
+ * For each call (with the same mem pointer) the next file in the filesystem is returned.
+ * The first call should be with mem = NULL.
+ * If a filter is specified, only files with a filename that matches the filter are returned.
+ *
+ * @param[in, out] mem A pointer to a void* that is used internally to keep track of the current file
+ * @param[in] filter A string with file extension to filter out. (e.g. "*.txt" or "*.png")
+ * @return The next file in the filesystem or NULL if there are no more files @ref llfs_file_t
+ */
+llfs_file_t* llfs_next_file(void** mem, char* filter);
+
+/**
+ * @brief Get the number of files in the filesystem
+ *
+ * @return The number of files in the filesystem
+ */
+size_t llfs_file_count(void);
+
#endif // LLFS_H
diff --git a/project/Core/Inc/main.h b/project/Core/Inc/main.h
index dc32257..95c16c2 100644
--- a/project/Core/Inc/main.h
+++ b/project/Core/Inc/main.h
@@ -31,6 +31,7 @@ extern "C" {
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
+#include "../../Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_lcd.h"
/* USER CODE END Includes */
diff --git a/project/Core/Src/lcd_api.c b/project/Core/Src/lcd_api.c
new file mode 100644
index 0000000..4eaa68b
--- /dev/null
+++ b/project/Core/Src/lcd_api.c
@@ -0,0 +1,97 @@
+/**
+ * @file lcd_api.c
+ * @brief LCD API implementation
+ * @author Tim S.
+ * @todo Implement function to read images from fs
+ */
+#include "lcd_api.h"
+
+static const char* TAG = "lcd_api";
+
+static DMA2D_HandleTypeDef hDma2dHandler2;
+
+void lcd_init(bool bl_on) {
+ LOG_INFO(TAG, "Init LCD");
+
+ BSP_LCD_Init();
+ BSP_LCD_LayerDefaultInit(1, LCD_FB_START_ADDRESS);
+ BSP_LCD_LayerDefaultInit(0, LCD_FB_START_ADDRESS + (BSP_LCD_GetXSize()*BSP_LCD_GetYSize()*4));
+ BSP_LCD_SelectLayer(0);
+ BSP_LCD_Clear(LCD_COLOR_BLACK);
+ BSP_LCD_SelectLayer(1);
+ BSP_LCD_Clear(LCD_COLOR_BLACK);
+ if (bl_on) {
+ HAL_GPIO_WritePin(GPIOK, GPIO_PIN_3, GPIO_PIN_SET);
+ HAL_GPIO_WritePin(GPIOI, GPIO_PIN_12, GPIO_PIN_SET);
+ } else {
+ HAL_GPIO_WritePin(GPIOK, GPIO_PIN_3, GPIO_PIN_RESET);
+ HAL_GPIO_WritePin(GPIOI, GPIO_PIN_12, GPIO_PIN_RESET);
+ }
+}
+
+void lcd_display_text(uint8_t* text, uint16_t x_pos, uint16_t y_pos, uint32_t color, uint32_t bg_color, sFONT *font) {
+ LOG_INFO(TAG, "Display text: %s @x=%d,y=%d", text, x_pos, y_pos);
+
+ uint16_t tot_length = x_pos + (strlen(text) * font->Width);
+ if ((x_pos % font->Width) != 0) {
+ x_pos -= (x_pos % font->Width);
+ }
+
+ BSP_LCD_SetTextColor(color);
+ BSP_LCD_SetBackColor(bg_color);
+ BSP_LCD_SetFont(font);
+
+ if (tot_length > BSP_LCD_GetXSize()) {
+ for (int i = 0; i < strlen(text); i++) {
+ if ((x_pos) > BSP_LCD_GetXSize() - (font->Width)*2) {
+ if (isalpha(text[i-1]) && isalpha(text[i])) {
+ BSP_LCD_DisplayChar(x_pos, y_pos, '-');
+ i -= 1;
+ }
+ x_pos = 0;
+ y_pos += font->Height;
+ } else {
+ BSP_LCD_DisplayChar(x_pos, y_pos, text[i]);
+ x_pos += font->Width;
+ }
+ }
+ } else {
+ BSP_LCD_DisplayStringAt(x_pos, y_pos, text, LEFT_MODE);
+ }
+
+}
+
+void lcd_draw_bmp(const void* p_src, uint32_t x_pos, uint32_t y_pos, uint32_t x_size, uint32_t y_size, uint32_t color_mode) {
+
+ uint32_t address = hLtdcHandler.LayerCfg[1].FBStartAdress + (((BSP_LCD_GetXSize()*y_pos) + x_pos)*(4));
+ void *p_dst = (void *)address;
+
+
+ hDma2dHandler2.Init.Mode = DMA2D_M2M_PFC;
+ hDma2dHandler2.Init.ColorMode = DMA2D_ARGB8888;
+ hDma2dHandler2.Init.OutputOffset = BSP_LCD_GetXSize()-x_size;
+
+ hDma2dHandler2.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA;
+ hDma2dHandler2.LayerCfg[1].InputAlpha = 0xFF;
+ hDma2dHandler2.LayerCfg[1].InputColorMode = color_mode;
+ hDma2dHandler2.LayerCfg[1].InputOffset = 0;
+
+ LOG_INFO(TAG, "DMA2D init");
+ hDma2dHandler2.Instance = DMA2D;
+ if (HAL_DMA2D_Init(&hDma2dHandler2) != HAL_OK) {
+ LOG_CRIT(TAG, "HAL_DMA2D_Init error");
+ return;
+ }
+ LOG_INFO(TAG, "DMA2D config layer");
+ if (HAL_DMA2D_ConfigLayer(&hDma2dHandler2, 1) != HAL_OK) {
+ LOG_CRIT(TAG, "HAL_DMA2D_ConfigLayer error");
+ return;
+ }
+ LOG_INFO(TAG, "DMA2D start");
+ if (HAL_DMA2D_Start(&hDma2dHandler2, (uint32_t)p_src, (uint32_t)p_dst, x_size, y_size) != HAL_OK) {
+ LOG_CRIT(TAG, "HAL_DMA2D_Start error");
+ return;
+ }
+ LOG_INFO(TAG, "DMA2D poll");
+ HAL_DMA2D_PollForTransfer(&hDma2dHandler2, 10);
+}
diff --git a/project/Core/Src/llfs.c b/project/Core/Src/llfs.c
index b139d99..62588de 100644
--- a/project/Core/Src/llfs.c
+++ b/project/Core/Src/llfs.c
@@ -2,34 +2,82 @@
* @file llfs.c
* @brief Linked List Filesystem implementation (llfs)
* @author Lorenz C.
- * @todo Implement file extension filter
+ * @version 0.1.1
*/
+#include
+#include
+#include
#include
#define LOGGER_LEVEL_WARN
#include "llfs.h"
#include "log.h"
+/**
+ * @brief The maximum number of files that can be opened concurrently using the POSIX API
+ */
+#define POSIX_MAX_FILES 10
+
extern struct llfs_data_file* llfs_root;
const char* TAG = "llfs";
+size_t file_count = 0;
+FILE* file_table[POSIX_MAX_FILES];
+
+static int new_file_table_entry(void);
+static int free_file_table_entry(int file_id);
+static FILE* file_id_to_stream(int file_id);
+static uint8_t file_ext_cmp(const char* filename, const char* ext);
+
+int8_t llfs_init(void) {
+ LOG_DEBUG(TAG, "Initializing llfs");
+
+ // Initialize the file table
+ for (int i = 0; i < POSIX_MAX_FILES; i++) {
+ file_table[i] = NULL;
+ }
+
+ // Add stdin, stdout and stderr to the file table
+ file_table[STDIN_FILENO] = stdin;
+ file_table[STDOUT_FILENO] = stdout;
+ file_table[STDERR_FILENO] = stderr;
+
+ return 0;
+}
-// TODO: Implement file extension filter
size_t llfs_file_list(llfs_file_t* file_list, size_t max_files, char* filter) {
- size_t file_count = 0;
- const struct llfs_data_file* file = llfs_root;
+ size_t count = 0; // Number of files found
+ const struct llfs_data_file* file = llfs_root; // Pointer to the current file
- LOG_DEBUG(TAG, "Getting file list with filter: %s", filter);
+ if (filter != NULL) {
+ LOG_DEBUG(TAG, "Filtering files with filter: %s", filter);
+ if (filter[0] == '*') {
+ filter++;
+ }
+ }
+
+ // Iterate over all files in the filesystem
while (file != NULL && file_count < max_files) {
- file_list[file_count].data = file->data;
- file_list[file_count].name = file->name;
- file_list[file_count].len = file->len;
- file_count++;
+ // Filter out files with a filename that does not match the filter
+ if (filter != NULL) {
+ if (!file_ext_cmp(file->name, filter)) {
+ file = file->next;
+ continue;
+ }
+ }
+
+ // Add the file to the file list
+ file_list[count].data = file->data;
+ file_list[count].name = file->name;
+ file_list[count].len = file->len;
+
+ // Move to the next file
+ count++;
file = file->next;
}
- LOG_DEBUG(TAG, "Files found: %d", file_count);
- return file_count;
+ LOG_DEBUG(TAG, "Files found: %d", count);
+ return count;
}
llfs_file_t* llfs_file_open(const char* name) {
@@ -48,3 +96,341 @@ llfs_file_t* llfs_file_open(const char* name) {
LOG_DEBUG(TAG, "File not found: %s", name);
return NULL;
}
+
+llfs_file_t* llfs_next_file(void** mem, char* filter) {
+ struct llfs_data_file* prev_file = (struct llfs_data_file*)*mem;
+ uint8_t filter_ok = 0;
+
+ if (prev_file == NULL) {
+ prev_file = llfs_root;
+ } else {
+ prev_file = (struct llfs_data_file*)prev_file->next;
+ }
+
+ // If a filter is specified, only return files that match the filter
+ if (filter != NULL) {
+ LOG_DEBUG(TAG, "Filtering files with filter: %s", filter);
+
+ // Remove the '*' from the filter
+ if (filter[0] == '*') {
+ filter++;
+ }
+
+ while (prev_file != NULL) {
+ if (file_ext_cmp(prev_file->name, filter)) {
+ filter_ok = 1;
+ break;
+ }
+ prev_file = (struct llfs_data_file*)prev_file->next;
+ }
+ }
+
+ *mem = (void*)prev_file;
+ return (llfs_file_t*)prev_file;
+}
+
+size_t llfs_file_count(void) {
+ if (file_count == 0) {
+ const struct llfs_data_file* file = llfs_root;
+ while (file != NULL) {
+ file_count++;
+ file = file->next;
+ }
+ }
+ return file_count;
+}
+
+/**
+ * @brief Newlib open implementation
+ *
+ * @param path
+ * @param flags
+ * @param mode
+ * @return
+ */
+int _open(char* path, int flags, int mode) {
+ int file_id;
+ FILE* stream;
+ errno = 0;
+ llfs_file_t* llfs_file;
+
+ // Add a new entry to the file table
+ file_id = new_file_table_entry();
+ if (file_id < 0) {
+ LOG_WARN(TAG, "Failed to add new file table entry. %s", strerror(errno));
+ return -1;
+ }
+
+ // Get the stream associated with the file id
+ stream = file_id_to_stream(file_id);
+ if (stream == NULL) {
+ LOG_WARN(TAG, "Failed to get file table entry. %s", strerror(errno));
+ free_file_table_entry(file_id);
+ return -1;
+ }
+
+ // Get the file from the llfs filesystem
+ llfs_file = llfs_file_open(path);
+ if (llfs_file == NULL) {
+ LOG_DEBUG(TAG, "Failed to open file: %s", path);
+ free_file_table_entry(file_id);
+ return -1;
+ }
+
+ // Initialize the stream
+ stream->_cookie = (void*)llfs_file;
+ stream->_offset = 0;
+ stream->_flags = __SRD;
+
+ return file_id;
+}
+
+/**
+ * @brief Newlib close implementation
+ *
+ * @param file_id
+ * @return
+ */
+int _close(int file_id) {
+ FILE* stream;
+
+ // Get the stream associated with the file id
+ stream = file_id_to_stream(file_id);
+ if (stream == NULL) {
+ LOG_WARN(TAG, "Failed to get file table entry. %s", strerror(errno));
+ return -1;
+ }
+
+ // Remove the entry from the file table
+ if (free_file_table_entry(file_id) < 0) {
+ LOG_WARN(TAG, "Failed to remove file table entry. %s", strerror(errno));
+ return -1;
+ }
+
+ return 0;
+}
+
+/**
+ * @brief Newlib read implementation
+ *
+ * @param file_id
+ * @param ptr
+ * @param len
+ * @return
+ */
+int _read(int file_id, char* ptr, int len) {
+ FILE* stream;
+ llfs_file_t* llfs_file;
+ size_t bytes_read;
+
+ // Read from stdin, stdout and stderr is not supported
+ if (file_id == STDIN_FILENO || file_id == STDOUT_FILENO || file_id == STDERR_FILENO) {
+ LOG_DEBUG(TAG, "Trying to read from stdin, stdout or stderr: %d", file_id);
+ return -1;
+ }
+
+ // Get the stream associated with the file id
+ stream = file_id_to_stream(file_id);
+ if (stream == NULL) {
+ LOG_WARN(TAG, "Failed to get file table entry. %s", strerror(errno));
+ return -1;
+ }
+
+ // Get the file from the llfs filesystem associated with the stream
+ llfs_file = (llfs_file_t*)stream->_cookie;
+ if (llfs_file == NULL) {
+ LOG_WARN(TAG, "Failed to get llfs file associated with stream: %d", file_id);
+ return -1;
+ }
+
+ // Calculate the number of bytes to read (limited by the file size)
+ bytes_read = llfs_file->len - stream->_offset;
+ if (bytes_read > len) {
+ bytes_read = len;
+ } else if (bytes_read == 0) { // End of file
+ stream->_flags |= __SEOF;
+ return 0;
+ }
+
+ // Copy the data over to the dst buffer
+ memcpy(ptr, llfs_file->data + stream->_offset, bytes_read);
+
+ stream->_offset += (off_t)bytes_read;
+ return (int)bytes_read;
+}
+
+/**
+ * @brief Newlib isatty implementation
+ *
+ * @param file
+ * @return 1 if the file is stdin, stdout or stderr, 0 otherwise
+ */
+int isatty(int file) {
+ if (file == STDIN_FILENO || file == STDOUT_FILENO || file == STDERR_FILENO) {
+ return 1;
+ }
+
+ return 0;
+}
+
+/**
+ * @brief Newlib lseek implementation
+ *
+ * @param file
+ * @param ptr
+ * @param dir
+ * @return
+ */
+int _lseek(int file, int ptr, int dir) {
+ FILE* stream;
+
+ if (file == STDIN_FILENO || file == STDOUT_FILENO || file == STDERR_FILENO) {
+ LOG_DEBUG(TAG, "Trying to seek stdin, stdout or stderr: %d", file);
+ return -1;
+ }
+
+ stream = file_id_to_stream(file);
+ if (stream == NULL) {
+ LOG_WARN(TAG, "Failed to get file table entry. %s", strerror(errno));
+ return -1;
+ }
+
+ switch (dir) {
+ case SEEK_SET:
+ stream->_offset = ptr;
+ break;
+ case SEEK_CUR:
+ stream->_offset += ptr;
+ break;
+ case SEEK_END:
+ stream->_offset = (off_t)((llfs_file_t*)stream->_cookie)->len + ptr;
+ break;
+ default:
+ LOG_WARN(TAG, "Invalid seek direction: %d", dir);
+ return -1;
+ }
+
+ return 0;
+}
+
+/**
+ * @brief Newlib fstat implementation
+ *
+ * @param[in] file
+ * @param[out] st
+ * @return
+ */
+int _fstat(int file, struct stat* st) {
+ FILE* stream;
+ llfs_file_t *llfs_file;
+
+ // Check if the file is stdin, stdout or stderr
+ if (file == STDIN_FILENO || file == STDOUT_FILENO || file == STDERR_FILENO) {
+ st->st_mode = S_IFCHR; // Character special file
+ return 0;
+ }
+
+ // Get the stream associated with the file id
+ stream = file_id_to_stream(file);
+ if (stream == NULL) {
+ LOG_WARN(TAG, "Failed to get file table entry. %s", strerror(errno));
+ return -1;
+ }
+
+ // Get the file from the llfs filesystem associated with the stream
+ llfs_file = (llfs_file_t*)stream->_cookie;
+ if (llfs_file == NULL) {
+ LOG_WARN(TAG, "Failed to get llfs file associated with stream: %d", file);
+ return -1;
+ }
+
+ st->st_mode = S_IFREG; // Regular file
+ st->st_size = (off_t)llfs_file->len;
+ return 0;
+}
+
+/**
+ * @brief Create a new entry in the file table
+ *
+ * @return The file id or -1 if an error occurred. See errno for more information.
+ */
+static int new_file_table_entry(void) {
+ FILE* stream;
+
+ // Try to find an empty entry in the file table
+ for (int i = 0; i < POSIX_MAX_FILES; i++) {
+ if (file_table[i] == NULL) {
+ stream = (FILE*)malloc(sizeof(FILE));
+ if (stream == NULL) {
+ errno = ENOMEM; // Out of memory
+ return -1;
+ }
+ file_table[i] = stream;
+ return i;
+ }
+ }
+
+ // No empty entry found
+ errno = ENFILE; // Too many open files
+ return -1;
+}
+
+/**
+ * @brief Remove an entry from the file table
+ *
+ * @param[in] file_id The file id to remove
+ * @return 0 if successful, -1 if an error occurred. See errno for more information.
+ */
+static int free_file_table_entry(int file_id) {
+ // Check if the file id is valid
+ if (file_id < 0 || file_id >= POSIX_MAX_FILES) {
+ errno = EBADF; // Bad file number
+ return -1;
+ }
+
+ // Remove the entry from the file table
+ free(file_table[file_id]);
+ file_table[file_id] = NULL;
+
+ return 0;
+}
+
+/**
+ * @brief Get the stream associated with a file id
+ *
+ * @param[in] file_id The file id to get the stream for
+ * @return The stream or NULL if an error occurred. See errno for more information.
+ */
+static FILE* file_id_to_stream(int file_id) {
+ if (file_id < 0 || file_id >= POSIX_MAX_FILES) {
+ errno = EBADF; // Bad file number
+ return NULL;
+ }
+ return file_table[file_id];
+}
+
+
+
+/**
+ * @brief Check if a filename ends with a given extension
+ *
+ * @param[in] filename The filename to check
+ * @param[in] ext The extension to check for
+ * @return 1 if the filename ends with the extension, 0 otherwise
+ */
+static uint8_t file_ext_cmp(const char* const filename, const char* const ext) {
+ uint8_t ext_len = strlen(ext);
+ uint8_t filename_len = strlen(filename);
+
+ if (filename_len < ext_len) {
+ return 0;
+ }
+
+ // Compare backwards
+ for (uint8_t i = 0; i < ext_len; i++) {
+ if (filename[filename_len - i] != ext[ext_len - i]) {
+ return 0;
+ }
+ }
+ return 1;
+}
diff --git a/project/Core/Src/log.c b/project/Core/Src/log.c
index ab47e12..7f23cf6 100644
--- a/project/Core/Src/log.c
+++ b/project/Core/Src/log.c
@@ -1,7 +1,7 @@
/**
* @file log.c
* @brief Logger implementation
- * @authors Lorenz C. && Speetjens S.
+ * @authors Lorenz C. && Sander S.
*/
#include
diff --git a/project/Core/Src/main.c b/project/Core/Src/main.c
index 23f07ed..6af0c87 100644
--- a/project/Core/Src/main.c
+++ b/project/Core/Src/main.c
@@ -1,506 +1,656 @@
-/* USER CODE BEGIN Header */
-/**
- ******************************************************************************
- * @file : main.c
- * @brief : Main program body
- ******************************************************************************
- * @attention
- *
- * Copyright (c) 2023 STMicroelectronics.
- * All rights reserved.
- *
- * This software is licensed under terms that can be found in the LICENSE file
- * in the root directory of this software component.
- * If no LICENSE file comes with this software, it is provided AS-IS.
- *
- ******************************************************************************
- */
-/* USER CODE END Header */
-/* Includes ------------------------------------------------------------------*/
-#include "main.h"
-#include "lwip.h"
-
-/* Private includes ----------------------------------------------------------*/
-/* USER CODE BEGIN Includes */
-#define LOGGER_LEVEL_ALL
-#include "log.h"
-/* USER CODE END Includes */
-
-/* Private typedef -----------------------------------------------------------*/
-/* USER CODE BEGIN PTD */
-
-/* USER CODE END PTD */
-
-/* Private define ------------------------------------------------------------*/
-/* USER CODE BEGIN PD */
-static const char *TAG = "main";
-/* USER CODE END PD */
-
-/* Private macro -------------------------------------------------------------*/
-/* USER CODE BEGIN PM */
-
-/* USER CODE END PM */
-
-/* Private variables ---------------------------------------------------------*/
-
-DMA2D_HandleTypeDef hdma2d;
-
-LTDC_HandleTypeDef hltdc;
-
-QSPI_HandleTypeDef hqspi;
-
-UART_HandleTypeDef huart1;
-
-SDRAM_HandleTypeDef hsdram1;
-
-/* USER CODE BEGIN PV */
-
-/* USER CODE END PV */
-
-/* Private function prototypes -----------------------------------------------*/
-void SystemClock_Config(void);
-static void MX_GPIO_Init(void);
-static void MX_LTDC_Init(void);
-static void MX_USART1_UART_Init(void);
-static void MX_DMA2D_Init(void);
-static void MX_FMC_Init(void);
-static void MX_QUADSPI_Init(void);
-/* USER CODE BEGIN PFP */
-
-/* USER CODE END PFP */
-
-/* Private user code ---------------------------------------------------------*/
-/* USER CODE BEGIN 0 */
-
-/* USER CODE END 0 */
-
-/**
- * @brief The application entry point.
- * @retval int
- */
-int main(void)
-{
- /* USER CODE BEGIN 1 */
-
- /* USER CODE END 1 */
-
- /* MCU Configuration--------------------------------------------------------*/
-
- /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
- HAL_Init();
-
- /* USER CODE BEGIN Init */
-
- /* USER CODE END Init */
-
- /* Configure the system clock */
- SystemClock_Config();
-
- /* USER CODE BEGIN SysInit */
-
- /* USER CODE END SysInit */
-
- /* Initialize all configured peripherals */
- MX_GPIO_Init();
- MX_LTDC_Init();
- MX_USART1_UART_Init();
- MX_DMA2D_Init();
- MX_FMC_Init();
- MX_LWIP_Init();
- MX_QUADSPI_Init();
- /* USER CODE BEGIN 2 */
-
- /* USER CODE END 2 */
-
- /* Infinite loop */
- /* USER CODE BEGIN WHILE */
- while (1)
- {
- /* USER CODE END WHILE */
-
- /* USER CODE BEGIN 3 */
- MX_LWIP_Process();
- }
- /* USER CODE END 3 */
-}
-
-/**
- * @brief System Clock Configuration
- * @retval None
- */
-void SystemClock_Config(void)
-{
- RCC_OscInitTypeDef RCC_OscInitStruct = {0};
- RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
-
- /** Configure LSE Drive Capability
- */
- HAL_PWR_EnableBkUpAccess();
-
- /** Configure the main internal regulator output voltage
- */
- __HAL_RCC_PWR_CLK_ENABLE();
- __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
-
- /** Initializes the RCC Oscillators according to the specified parameters
- * in the RCC_OscInitTypeDef structure.
- */
- RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
- RCC_OscInitStruct.HSEState = RCC_HSE_ON;
- RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
- RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
- RCC_OscInitStruct.PLL.PLLM = 25;
- RCC_OscInitStruct.PLL.PLLN = 400;
- RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
- RCC_OscInitStruct.PLL.PLLQ = 2;
- if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
- {
- Error_Handler();
- }
-
- /** Activate the Over-Drive mode
- */
- if (HAL_PWREx_EnableOverDrive() != HAL_OK)
- {
- Error_Handler();
- }
-
- /** Initializes the CPU, AHB and APB buses clocks
- */
- RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
- |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
- RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
- RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
- RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
- RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
-
- if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_6) != HAL_OK)
- {
- Error_Handler();
- }
-}
-
-/**
- * @brief DMA2D Initialization Function
- * @param None
- * @retval None
- */
-static void MX_DMA2D_Init(void)
-{
-
- /* USER CODE BEGIN DMA2D_Init 0 */
-
- /* USER CODE END DMA2D_Init 0 */
-
- /* USER CODE BEGIN DMA2D_Init 1 */
-
- /* USER CODE END DMA2D_Init 1 */
- hdma2d.Instance = DMA2D;
- hdma2d.Init.Mode = DMA2D_M2M;
- hdma2d.Init.ColorMode = DMA2D_OUTPUT_ARGB8888;
- hdma2d.Init.OutputOffset = 0;
- hdma2d.LayerCfg[1].InputOffset = 0;
- hdma2d.LayerCfg[1].InputColorMode = DMA2D_INPUT_ARGB8888;
- hdma2d.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA;
- hdma2d.LayerCfg[1].InputAlpha = 0;
- if (HAL_DMA2D_Init(&hdma2d) != HAL_OK)
- {
- Error_Handler();
- }
- if (HAL_DMA2D_ConfigLayer(&hdma2d, 1) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN DMA2D_Init 2 */
-
- /* USER CODE END DMA2D_Init 2 */
-
-}
-
-/**
- * @brief LTDC Initialization Function
- * @param None
- * @retval None
- */
-static void MX_LTDC_Init(void)
-{
-
- /* USER CODE BEGIN LTDC_Init 0 */
-
- /* USER CODE END LTDC_Init 0 */
-
- LTDC_LayerCfgTypeDef pLayerCfg = {0};
- LTDC_LayerCfgTypeDef pLayerCfg1 = {0};
-
- /* USER CODE BEGIN LTDC_Init 1 */
-
- /* USER CODE END LTDC_Init 1 */
- hltdc.Instance = LTDC;
- hltdc.Init.HSPolarity = LTDC_HSPOLARITY_AL;
- hltdc.Init.VSPolarity = LTDC_VSPOLARITY_AL;
- hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL;
- hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IPC;
- hltdc.Init.HorizontalSync = 40;
- hltdc.Init.VerticalSync = 9;
- hltdc.Init.AccumulatedHBP = 53;
- hltdc.Init.AccumulatedVBP = 11;
- hltdc.Init.AccumulatedActiveW = 533;
- hltdc.Init.AccumulatedActiveH = 283;
- hltdc.Init.TotalWidth = 565;
- hltdc.Init.TotalHeigh = 285;
- hltdc.Init.Backcolor.Blue = 0;
- hltdc.Init.Backcolor.Green = 255;
- hltdc.Init.Backcolor.Red = 0;
- if (HAL_LTDC_Init(&hltdc) != HAL_OK)
- {
- Error_Handler();
- }
- pLayerCfg.WindowX0 = 0;
- pLayerCfg.WindowX1 = 480;
- pLayerCfg.WindowY0 = 0;
- pLayerCfg.WindowY1 = 272;
- pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_ARGB1555;
- pLayerCfg.Alpha = 255;
- pLayerCfg.Alpha0 = 0;
- pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_PAxCA;
- pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA;
- pLayerCfg.FBStartAdress = 0;
- pLayerCfg.ImageWidth = 480;
- pLayerCfg.ImageHeight = 272;
- pLayerCfg.Backcolor.Blue = 0;
- pLayerCfg.Backcolor.Green = 0;
- pLayerCfg.Backcolor.Red = 0;
- if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg, 0) != HAL_OK)
- {
- Error_Handler();
- }
- pLayerCfg1.WindowX0 = 0;
- pLayerCfg1.WindowX1 = 480;
- pLayerCfg1.WindowY0 = 0;
- pLayerCfg1.WindowY1 = 272;
- pLayerCfg1.PixelFormat = LTDC_PIXEL_FORMAT_ARGB1555;
- pLayerCfg1.Alpha = 255;
- pLayerCfg1.Alpha0 = 0;
- pLayerCfg1.BlendingFactor1 = LTDC_BLENDING_FACTOR1_PAxCA;
- pLayerCfg1.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA;
- pLayerCfg1.FBStartAdress = 0;
- pLayerCfg1.ImageWidth = 480;
- pLayerCfg1.ImageHeight = 272;
- pLayerCfg1.Backcolor.Blue = 0;
- pLayerCfg1.Backcolor.Green = 0;
- pLayerCfg1.Backcolor.Red = 0;
- if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg1, 1) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN LTDC_Init 2 */
-
- /* USER CODE END LTDC_Init 2 */
-
-}
-
-/**
- * @brief QUADSPI Initialization Function
- * @param None
- * @retval None
- */
-static void MX_QUADSPI_Init(void)
-{
-
- /* USER CODE BEGIN QUADSPI_Init 0 */
-
- /* USER CODE END QUADSPI_Init 0 */
-
- /* USER CODE BEGIN QUADSPI_Init 1 */
-
- /* USER CODE END QUADSPI_Init 1 */
- /* QUADSPI parameter configuration*/
- hqspi.Instance = QUADSPI;
- hqspi.Init.ClockPrescaler = 1;
- hqspi.Init.FifoThreshold = 4;
- hqspi.Init.SampleShifting = QSPI_SAMPLE_SHIFTING_HALFCYCLE;
- hqspi.Init.FlashSize = 16;
- hqspi.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_6_CYCLE;
- hqspi.Init.ClockMode = QSPI_CLOCK_MODE_0;
- hqspi.Init.FlashID = QSPI_FLASH_ID_1;
- hqspi.Init.DualFlash = QSPI_DUALFLASH_DISABLE;
- if (HAL_QSPI_Init(&hqspi) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN QUADSPI_Init 2 */
-
- /* USER CODE END QUADSPI_Init 2 */
-
-}
-
-/**
- * @brief USART1 Initialization Function
- * @param None
- * @retval None
- */
-static void MX_USART1_UART_Init(void)
-{
-
- /* USER CODE BEGIN USART1_Init 0 */
-
- /* USER CODE END USART1_Init 0 */
-
- /* USER CODE BEGIN USART1_Init 1 */
-
- /* USER CODE END USART1_Init 1 */
- huart1.Instance = USART1;
- huart1.Init.BaudRate = 115200;
- huart1.Init.WordLength = UART_WORDLENGTH_8B;
- huart1.Init.StopBits = UART_STOPBITS_1;
- huart1.Init.Parity = UART_PARITY_NONE;
- huart1.Init.Mode = UART_MODE_TX_RX;
- huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
- huart1.Init.OverSampling = UART_OVERSAMPLING_16;
- huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
- huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
- if (HAL_UART_Init(&huart1) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN USART1_Init 2 */
-
- /* USER CODE END USART1_Init 2 */
-
-}
-
-/* FMC initialization function */
-static void MX_FMC_Init(void)
-{
-
- /* USER CODE BEGIN FMC_Init 0 */
-
- /* USER CODE END FMC_Init 0 */
-
- FMC_SDRAM_TimingTypeDef SdramTiming = {0};
-
- /* USER CODE BEGIN FMC_Init 1 */
-
- /* USER CODE END FMC_Init 1 */
-
- /** Perform the SDRAM1 memory initialization sequence
- */
- hsdram1.Instance = FMC_SDRAM_DEVICE;
- /* hsdram1.Init */
- hsdram1.Init.SDBank = FMC_SDRAM_BANK1;
- hsdram1.Init.ColumnBitsNumber = FMC_SDRAM_COLUMN_BITS_NUM_8;
- hsdram1.Init.RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_12;
- hsdram1.Init.MemoryDataWidth = FMC_SDRAM_MEM_BUS_WIDTH_16;
- hsdram1.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4;
- hsdram1.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_1;
- hsdram1.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE;
- hsdram1.Init.SDClockPeriod = FMC_SDRAM_CLOCK_DISABLE;
- hsdram1.Init.ReadBurst = FMC_SDRAM_RBURST_DISABLE;
- hsdram1.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_0;
- /* SdramTiming */
- SdramTiming.LoadToActiveDelay = 16;
- SdramTiming.ExitSelfRefreshDelay = 16;
- SdramTiming.SelfRefreshTime = 16;
- SdramTiming.RowCycleDelay = 16;
- SdramTiming.WriteRecoveryTime = 16;
- SdramTiming.RPDelay = 16;
- SdramTiming.RCDDelay = 16;
-
- if (HAL_SDRAM_Init(&hsdram1, &SdramTiming) != HAL_OK)
- {
- Error_Handler( );
- }
-
- /* USER CODE BEGIN FMC_Init 2 */
-
- /* USER CODE END FMC_Init 2 */
-}
-
-/**
- * @brief GPIO Initialization Function
- * @param None
- * @retval None
- */
-static void MX_GPIO_Init(void)
-{
- GPIO_InitTypeDef GPIO_InitStruct = {0};
-/* USER CODE BEGIN MX_GPIO_Init_1 */
-/* USER CODE END MX_GPIO_Init_1 */
-
- /* GPIO Ports Clock Enable */
- __HAL_RCC_GPIOE_CLK_ENABLE();
- __HAL_RCC_GPIOG_CLK_ENABLE();
- __HAL_RCC_GPIOB_CLK_ENABLE();
- __HAL_RCC_GPIOJ_CLK_ENABLE();
- __HAL_RCC_GPIOD_CLK_ENABLE();
- __HAL_RCC_GPIOK_CLK_ENABLE();
- __HAL_RCC_GPIOF_CLK_ENABLE();
- __HAL_RCC_GPIOI_CLK_ENABLE();
- __HAL_RCC_GPIOC_CLK_ENABLE();
- __HAL_RCC_GPIOA_CLK_ENABLE();
- __HAL_RCC_GPIOH_CLK_ENABLE();
-
- /*Configure GPIO pin Output Level */
- HAL_GPIO_WritePin(LCD_BL_CTRL_GPIO_Port, LCD_BL_CTRL_Pin, GPIO_PIN_RESET);
-
- /*Configure GPIO pin Output Level */
- HAL_GPIO_WritePin(GPIOI, LED_Pin|LCD_DISP_Pin, GPIO_PIN_RESET);
-
- /*Configure GPIO pin : LCD_BL_CTRL_Pin */
- GPIO_InitStruct.Pin = LCD_BL_CTRL_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- HAL_GPIO_Init(LCD_BL_CTRL_GPIO_Port, &GPIO_InitStruct);
-
- /*Configure GPIO pins : LED_Pin LCD_DISP_Pin */
- GPIO_InitStruct.Pin = LED_Pin|LCD_DISP_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- HAL_GPIO_Init(GPIOI, &GPIO_InitStruct);
-
- /*Configure GPIO pin : BUTTON_Pin */
- GPIO_InitStruct.Pin = BUTTON_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- HAL_GPIO_Init(BUTTON_GPIO_Port, &GPIO_InitStruct);
-
-/* USER CODE BEGIN MX_GPIO_Init_2 */
-/* USER CODE END MX_GPIO_Init_2 */
-}
-
-/* USER CODE BEGIN 4 */
-/* USER CODE END 4 */
-
-/**
- * @brief This function is executed in case of error occurrence.
- * @retval None
- */
-void Error_Handler(void)
-{
- /* USER CODE BEGIN Error_Handler_Debug */
- /* User can add his own implementation to report the HAL error return state */
- __disable_irq();
- while (1)
- {
- }
- /* USER CODE END Error_Handler_Debug */
-}
-
-#ifdef USE_FULL_ASSERT
-/**
- * @brief Reports the name of the source file and the source line number
- * where the assert_param error has occurred.
- * @param file: pointer to the source file name
- * @param line: assert_param error line source number
- * @retval None
- */
-void assert_failed(uint8_t *file, uint32_t line)
-{
- /* USER CODE BEGIN 6 */
- /* User can add his own implementation to report the file name and line number,
- ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
- /* USER CODE END 6 */
-}
-#endif /* USE_FULL_ASSERT */
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * @file : main.c
+ * @brief : Main program body
+ ******************************************************************************
+ * @attention
+ *
+ * Copyright (c) 2023 STMicroelectronics.
+ * All rights reserved.
+ *
+ * This software is licensed under terms that can be found in the LICENSE file
+ * in the root directory of this software component.
+ * If no LICENSE file comes with this software, it is provided AS-IS.
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+/* Includes ------------------------------------------------------------------*/
+#include "main.h"
+#include "lwip.h"
+
+/* Private includes ----------------------------------------------------------*/
+/* USER CODE BEGIN Includes */
+#define LOGGER_LEVEL_ALL
+#include "log.h"
+#include "llfs.h"
+#include "../../Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_lcd.h"
+#include "lcd_api.h"
+
+/* USER CODE END Includes */
+
+/* Private typedef -----------------------------------------------------------*/
+/* USER CODE BEGIN PTD */
+
+/* USER CODE END PTD */
+
+/* Private define ------------------------------------------------------------*/
+/* USER CODE BEGIN PD */
+static const char *TAG = "main";
+/* USER CODE END PD */
+
+/* Private macro -------------------------------------------------------------*/
+/* USER CODE BEGIN PM */
+
+/* USER CODE END PM */
+
+/* Private variables ---------------------------------------------------------*/
+
+DMA2D_HandleTypeDef hdma2d;
+
+LTDC_HandleTypeDef hltdc;
+
+QSPI_HandleTypeDef hqspi;
+
+UART_HandleTypeDef huart1;
+
+SDRAM_HandleTypeDef hsdram1;
+
+/* USER CODE BEGIN PV */
+
+/* USER CODE END PV */
+
+/* Private function prototypes -----------------------------------------------*/
+void SystemClock_Config(void);
+static void MX_GPIO_Init(void);
+static void MX_LTDC_Init(void);
+static void MX_USART1_UART_Init(void);
+static void MX_DMA2D_Init(void);
+static void MX_FMC_Init(void);
+static void MX_QUADSPI_Init(void);
+/* USER CODE BEGIN PFP */
+
+/* USER CODE END PFP */
+
+/* Private user code ---------------------------------------------------------*/
+/* USER CODE BEGIN 0 */
+
+/* USER CODE END 0 */
+
+/**
+ * @brief The application entry point.
+ * @retval int
+ */
+int main(void)
+{
+ /* USER CODE BEGIN 1 */
+
+ /* USER CODE END 1 */
+
+ /* MCU Configuration--------------------------------------------------------*/
+
+ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
+ HAL_Init();
+
+ /* USER CODE BEGIN Init */
+
+ /* USER CODE END Init */
+
+ /* Configure the system clock */
+ SystemClock_Config();
+
+ /* USER CODE BEGIN SysInit */
+
+ /* USER CODE END SysInit */
+
+ /* Initialize all configured peripherals */
+ MX_GPIO_Init();
+ MX_LTDC_Init();
+ MX_USART1_UART_Init();
+ MX_DMA2D_Init();
+ MX_FMC_Init();
+ MX_LWIP_Init();
+ MX_QUADSPI_Init();
+ /* USER CODE BEGIN 2 */
+ lcd_init(true);
+
+ llfs_init();
+
+
+ FILE *f = fopen("test.txt", "rw");
+ if (f == NULL) {
+ LOG_INFO(TAG, "File not found test.txt");
+ return 1;
+ } else {
+ LOG_INFO(TAG, "File found test.txt");
+ }
+
+ // Test POSIX file operations
+ // fgetc
+ int c;
+ printf("Printing file:\n");
+ while ((c = fgetc(f)) != EOF) {
+ printf("%c", c);
+ }
+ LOG_INFO(TAG, "File printed");
+
+ // fseek
+ fseek(f, 0, SEEK_SET);
+ LOG_INFO(TAG, "File seeked to start");
+
+ // ftell
+ long pos = ftell(f);
+ LOG_INFO(TAG, "File position: %d", pos);
+
+ // fread
+ char buf[100];
+ size_t bytes_read = fread(buf, 1, 100, f);
+ LOG_INFO(TAG, "Read %d bytes from file", bytes_read);
+ printf("Read from file:\n");
+ for (int i = 0; i < bytes_read; i++) {
+ printf("%c", buf[i]);
+ }
+
+ // Rewind the file
+ LOG_INFO(TAG, "Before File rewinded, pos: %d", ftell(f));
+ rewind(f);
+ LOG_INFO(TAG, "File rewinded, pos: %d", ftell(f));
+
+ // Get the file size fstat
+ struct stat st;
+ fstat(fileno(f), &st);
+ LOG_INFO(TAG, "File size: %d", st.st_size);
+
+
+ // Get a list of all files with the .bmp extension
+ llfs_file_t file_list[10];
+ size_t num_files = llfs_file_list(file_list, 10, "*.bmp");
+ LOG_INFO(TAG, "Found %d files with the .bmp extension", num_files);
+ for (int i = 0; i < num_files; i++) {
+ LOG_INFO(TAG, "File %d: %s", i, file_list[i].name);
+ }
+
+ // Get a list of files with .txt or .html
+ num_files = llfs_file_list(file_list, 10, "*.txt");
+ LOG_INFO(TAG, "Found %d files with the .txt or .html extension", num_files);
+ for (int i = 0; i < num_files; i++) {
+ LOG_INFO(TAG, "File %d: %s", i, file_list[i].name);
+ }
+
+ // Loop over all files using the iterator
+ LOG_INFO(TAG, "Looping over all files, using the iterator");
+ void *mem = NULL;
+ llfs_file_t *file;
+ while ((file = llfs_next_file(&mem, NULL)) != NULL) {
+ LOG_INFO(TAG, "File: %s", file->name);
+ }
+
+ // Loop over all files with the .bmp extension using the iterator
+ LOG_INFO(TAG, "Looping over all files with the .bmp extension, using the iterator");
+ mem = NULL;
+ while ((file = llfs_next_file(&mem, "*.bmp")) != NULL) {
+ LOG_INFO(TAG, "File: %s", file->name);
+ }
+
+ // Get the number of files in the filesystem
+ size_t num_files_in_fs = llfs_file_count();
+ LOG_INFO(TAG, "Number of files in the filesystem: %d", num_files_in_fs);
+
+
+ fclose(f);
+
+ // Try opening multiple files
+ LOG_INFO(TAG, "Opening an closing multiple files");
+ FILE * f1 = fopen("test.txt", "rw");
+ if (f1 == NULL) {
+ LOG_INFO(TAG, "File not found f1");
+ return 1;
+ } else {
+ LOG_INFO(TAG, "File found f1");
+ }
+ // Get the fileno
+ int fd = fileno(f1);
+ LOG_INFO(TAG, "File descriptor f1: %d", fd);
+
+ FILE * f2 = fopen("test.txt", "rw");
+ if (f2 == NULL) {
+ LOG_INFO(TAG, "File not found f2");
+ return 1;
+ } else {
+ LOG_INFO(TAG, "File found f2");
+ }
+ // Get the fileno
+ fd = fileno(f2);
+ LOG_INFO(TAG, "File descriptorf2: %d", fd);
+
+ LOG_INFO(TAG, "Closing f1");
+ fclose(f1);
+
+ FILE * f3 = fopen("test.txt", "rw");
+ if (f3 == NULL) {
+ LOG_INFO(TAG, "File not found f3");
+ return 1;
+ } else {
+ LOG_INFO(TAG, "File found f3");
+ }
+ // Get the fileno
+ fd = fileno(f3);
+ LOG_INFO(TAG, "File descriptor f3: %d", fd);
+
+ LOG_INFO(TAG, "Closing f2");
+ fclose(f2);
+
+ LOG_INFO(TAG, "Closing f3");
+ fclose(f3);
+
+ // Try opening a file multiple times, until it fails
+ int i = 0;
+ LOG_INFO(TAG, "Opening a file multiple times, until it fails");
+ while (1) {
+ f = fopen("test.txt", "rw");
+ LOG_INFO(TAG, "File descriptor: %d", fileno(f));
+ if (f == NULL) {
+ LOG_INFO(TAG, "File not found test.txt");
+ break;
+ } else {
+ LOG_INFO(TAG, "File found test.txt");
+ }
+ i++;
+ }
+ LOG_INFO(TAG, "File opened %d times", i);
+
+
+ /* USER CODE END 2 */
+ /* Infinite loop */
+ /* USER CODE BEGIN WHILE */
+ while (1)
+ {
+ /* USER CODE END WHILE */
+
+ /* USER CODE BEGIN 3 */
+ MX_LWIP_Process();
+ }
+ /* USER CODE END 3 */
+}
+
+/**
+ * @brief System Clock Configuration
+ * @retval None
+ */
+void SystemClock_Config(void)
+{
+ RCC_OscInitTypeDef RCC_OscInitStruct = {0};
+ RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
+
+ /** Configure LSE Drive Capability
+ */
+ HAL_PWR_EnableBkUpAccess();
+
+ /** Configure the main internal regulator output voltage
+ */
+ __HAL_RCC_PWR_CLK_ENABLE();
+ __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
+
+ /** Initializes the RCC Oscillators according to the specified parameters
+ * in the RCC_OscInitTypeDef structure.
+ */
+ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
+ RCC_OscInitStruct.HSEState = RCC_HSE_ON;
+ RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
+ RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
+ RCC_OscInitStruct.PLL.PLLM = 25;
+ RCC_OscInitStruct.PLL.PLLN = 400;
+ RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
+ RCC_OscInitStruct.PLL.PLLQ = 2;
+ if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
+ {
+ Error_Handler();
+ }
+
+ /** Activate the Over-Drive mode
+ */
+ if (HAL_PWREx_EnableOverDrive() != HAL_OK)
+ {
+ Error_Handler();
+ }
+
+ /** Initializes the CPU, AHB and APB buses clocks
+ */
+ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
+ |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
+ RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
+ RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
+ RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
+ RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
+
+ if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_6) != HAL_OK)
+ {
+ Error_Handler();
+ }
+}
+
+/**
+ * @brief DMA2D Initialization Function
+ * @param None
+ * @retval None
+ */
+static void MX_DMA2D_Init(void)
+{
+
+ /* USER CODE BEGIN DMA2D_Init 0 */
+
+ /* USER CODE END DMA2D_Init 0 */
+
+ /* USER CODE BEGIN DMA2D_Init 1 */
+
+ /* USER CODE END DMA2D_Init 1 */
+ hdma2d.Instance = DMA2D;
+ hdma2d.Init.Mode = DMA2D_M2M;
+ hdma2d.Init.ColorMode = DMA2D_OUTPUT_ARGB8888;
+ hdma2d.Init.OutputOffset = 0;
+ hdma2d.LayerCfg[1].InputOffset = 0;
+ hdma2d.LayerCfg[1].InputColorMode = DMA2D_INPUT_ARGB8888;
+ hdma2d.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA;
+ hdma2d.LayerCfg[1].InputAlpha = 0;
+ if (HAL_DMA2D_Init(&hdma2d) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ if (HAL_DMA2D_ConfigLayer(&hdma2d, 1) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN DMA2D_Init 2 */
+
+ /* USER CODE END DMA2D_Init 2 */
+
+}
+
+/**
+ * @brief LTDC Initialization Function
+ * @param None
+ * @retval None
+ */
+static void MX_LTDC_Init(void)
+{
+
+ /* USER CODE BEGIN LTDC_Init 0 */
+
+ /* USER CODE END LTDC_Init 0 */
+
+ LTDC_LayerCfgTypeDef pLayerCfg = {0};
+ LTDC_LayerCfgTypeDef pLayerCfg1 = {0};
+
+ /* USER CODE BEGIN LTDC_Init 1 */
+
+ /* USER CODE END LTDC_Init 1 */
+ hltdc.Instance = LTDC;
+ hltdc.Init.HSPolarity = LTDC_HSPOLARITY_AL;
+ hltdc.Init.VSPolarity = LTDC_VSPOLARITY_AL;
+ hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL;
+ hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IPC;
+ hltdc.Init.HorizontalSync = 40;
+ hltdc.Init.VerticalSync = 9;
+ hltdc.Init.AccumulatedHBP = 53;
+ hltdc.Init.AccumulatedVBP = 11;
+ hltdc.Init.AccumulatedActiveW = 533;
+ hltdc.Init.AccumulatedActiveH = 283;
+ hltdc.Init.TotalWidth = 565;
+ hltdc.Init.TotalHeigh = 285;
+ hltdc.Init.Backcolor.Blue = 0;
+ hltdc.Init.Backcolor.Green = 255;
+ hltdc.Init.Backcolor.Red = 0;
+ if (HAL_LTDC_Init(&hltdc) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ pLayerCfg.WindowX0 = 0;
+ pLayerCfg.WindowX1 = 480;
+ pLayerCfg.WindowY0 = 0;
+ pLayerCfg.WindowY1 = 272;
+ pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_ARGB1555;
+ pLayerCfg.Alpha = 255;
+ pLayerCfg.Alpha0 = 0;
+ pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_PAxCA;
+ pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA;
+ pLayerCfg.FBStartAdress = 0;
+ pLayerCfg.ImageWidth = 480;
+ pLayerCfg.ImageHeight = 272;
+ pLayerCfg.Backcolor.Blue = 0;
+ pLayerCfg.Backcolor.Green = 0;
+ pLayerCfg.Backcolor.Red = 0;
+ if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg, 0) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ pLayerCfg1.WindowX0 = 0;
+ pLayerCfg1.WindowX1 = 480;
+ pLayerCfg1.WindowY0 = 0;
+ pLayerCfg1.WindowY1 = 272;
+ pLayerCfg1.PixelFormat = LTDC_PIXEL_FORMAT_ARGB1555;
+ pLayerCfg1.Alpha = 255;
+ pLayerCfg1.Alpha0 = 0;
+ pLayerCfg1.BlendingFactor1 = LTDC_BLENDING_FACTOR1_PAxCA;
+ pLayerCfg1.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA;
+ pLayerCfg1.FBStartAdress = 0;
+ pLayerCfg1.ImageWidth = 480;
+ pLayerCfg1.ImageHeight = 272;
+ pLayerCfg1.Backcolor.Blue = 0;
+ pLayerCfg1.Backcolor.Green = 0;
+ pLayerCfg1.Backcolor.Red = 0;
+ if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg1, 1) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN LTDC_Init 2 */
+
+ /* USER CODE END LTDC_Init 2 */
+
+}
+
+/**
+ * @brief QUADSPI Initialization Function
+ * @param None
+ * @retval None
+ */
+static void MX_QUADSPI_Init(void)
+{
+
+ /* USER CODE BEGIN QUADSPI_Init 0 */
+
+ /* USER CODE END QUADSPI_Init 0 */
+
+ /* USER CODE BEGIN QUADSPI_Init 1 */
+
+ /* USER CODE END QUADSPI_Init 1 */
+ /* QUADSPI parameter configuration*/
+ hqspi.Instance = QUADSPI;
+ hqspi.Init.ClockPrescaler = 1;
+ hqspi.Init.FifoThreshold = 4;
+ hqspi.Init.SampleShifting = QSPI_SAMPLE_SHIFTING_HALFCYCLE;
+ hqspi.Init.FlashSize = 16;
+ hqspi.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_6_CYCLE;
+ hqspi.Init.ClockMode = QSPI_CLOCK_MODE_0;
+ hqspi.Init.FlashID = QSPI_FLASH_ID_1;
+ hqspi.Init.DualFlash = QSPI_DUALFLASH_DISABLE;
+ if (HAL_QSPI_Init(&hqspi) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN QUADSPI_Init 2 */
+
+ /* USER CODE END QUADSPI_Init 2 */
+
+}
+
+/**
+ * @brief USART1 Initialization Function
+ * @param None
+ * @retval None
+ */
+static void MX_USART1_UART_Init(void)
+{
+
+ /* USER CODE BEGIN USART1_Init 0 */
+
+ /* USER CODE END USART1_Init 0 */
+
+ /* USER CODE BEGIN USART1_Init 1 */
+
+ /* USER CODE END USART1_Init 1 */
+ huart1.Instance = USART1;
+ huart1.Init.BaudRate = 115200;
+ huart1.Init.WordLength = UART_WORDLENGTH_8B;
+ huart1.Init.StopBits = UART_STOPBITS_1;
+ huart1.Init.Parity = UART_PARITY_NONE;
+ huart1.Init.Mode = UART_MODE_TX_RX;
+ huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
+ huart1.Init.OverSampling = UART_OVERSAMPLING_16;
+ huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
+ huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
+ if (HAL_UART_Init(&huart1) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN USART1_Init 2 */
+
+ /* USER CODE END USART1_Init 2 */
+
+}
+
+/* FMC initialization function */
+static void MX_FMC_Init(void)
+{
+
+ /* USER CODE BEGIN FMC_Init 0 */
+
+ /* USER CODE END FMC_Init 0 */
+
+ FMC_SDRAM_TimingTypeDef SdramTiming = {0};
+
+ /* USER CODE BEGIN FMC_Init 1 */
+
+ /* USER CODE END FMC_Init 1 */
+
+ /** Perform the SDRAM1 memory initialization sequence
+ */
+ hsdram1.Instance = FMC_SDRAM_DEVICE;
+ /* hsdram1.Init */
+ hsdram1.Init.SDBank = FMC_SDRAM_BANK1;
+ hsdram1.Init.ColumnBitsNumber = FMC_SDRAM_COLUMN_BITS_NUM_8;
+ hsdram1.Init.RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_12;
+ hsdram1.Init.MemoryDataWidth = FMC_SDRAM_MEM_BUS_WIDTH_16;
+ hsdram1.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4;
+ hsdram1.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_1;
+ hsdram1.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE;
+ hsdram1.Init.SDClockPeriod = FMC_SDRAM_CLOCK_DISABLE;
+ hsdram1.Init.ReadBurst = FMC_SDRAM_RBURST_DISABLE;
+ hsdram1.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_0;
+ /* SdramTiming */
+ SdramTiming.LoadToActiveDelay = 16;
+ SdramTiming.ExitSelfRefreshDelay = 16;
+ SdramTiming.SelfRefreshTime = 16;
+ SdramTiming.RowCycleDelay = 16;
+ SdramTiming.WriteRecoveryTime = 16;
+ SdramTiming.RPDelay = 16;
+ SdramTiming.RCDDelay = 16;
+
+ if (HAL_SDRAM_Init(&hsdram1, &SdramTiming) != HAL_OK)
+ {
+ Error_Handler( );
+ }
+
+ /* USER CODE BEGIN FMC_Init 2 */
+
+ /* USER CODE END FMC_Init 2 */
+}
+
+/**
+ * @brief GPIO Initialization Function
+ * @param None
+ * @retval None
+ */
+static void MX_GPIO_Init(void)
+{
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+/* USER CODE BEGIN MX_GPIO_Init_1 */
+/* USER CODE END MX_GPIO_Init_1 */
+
+ /* GPIO Ports Clock Enable */
+ __HAL_RCC_GPIOE_CLK_ENABLE();
+ __HAL_RCC_GPIOG_CLK_ENABLE();
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ __HAL_RCC_GPIOJ_CLK_ENABLE();
+ __HAL_RCC_GPIOD_CLK_ENABLE();
+ __HAL_RCC_GPIOK_CLK_ENABLE();
+ __HAL_RCC_GPIOF_CLK_ENABLE();
+ __HAL_RCC_GPIOI_CLK_ENABLE();
+ __HAL_RCC_GPIOC_CLK_ENABLE();
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ __HAL_RCC_GPIOH_CLK_ENABLE();
+
+ /*Configure GPIO pin Output Level */
+ HAL_GPIO_WritePin(LCD_BL_CTRL_GPIO_Port, LCD_BL_CTRL_Pin, GPIO_PIN_RESET);
+
+ /*Configure GPIO pin Output Level */
+ HAL_GPIO_WritePin(GPIOI, LED_Pin|LCD_DISP_Pin, GPIO_PIN_RESET);
+
+ /*Configure GPIO pin : LCD_BL_CTRL_Pin */
+ GPIO_InitStruct.Pin = LCD_BL_CTRL_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ HAL_GPIO_Init(LCD_BL_CTRL_GPIO_Port, &GPIO_InitStruct);
+
+ /*Configure GPIO pins : LED_Pin LCD_DISP_Pin */
+ GPIO_InitStruct.Pin = LED_Pin|LCD_DISP_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ HAL_GPIO_Init(GPIOI, &GPIO_InitStruct);
+
+ /*Configure GPIO pin : BUTTON_Pin */
+ GPIO_InitStruct.Pin = BUTTON_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ HAL_GPIO_Init(BUTTON_GPIO_Port, &GPIO_InitStruct);
+
+/* USER CODE BEGIN MX_GPIO_Init_2 */
+/* USER CODE END MX_GPIO_Init_2 */
+}
+
+/* USER CODE BEGIN 4 */
+/* USER CODE END 4 */
+
+/**
+ * @brief This function is executed in case of error occurrence.
+ * @retval None
+ */
+void Error_Handler(void)
+{
+ /* USER CODE BEGIN Error_Handler_Debug */
+ /* User can add his own implementation to report the HAL error return state */
+ __disable_irq();
+ while (1)
+ {
+ }
+ /* USER CODE END Error_Handler_Debug */
+}
+
+#ifdef USE_FULL_ASSERT
+/**
+ * @brief Reports the name of the source file and the source line number
+ * where the assert_param error has occurred.
+ * @param file: pointer to the source file name
+ * @param line: assert_param error line source number
+ * @retval None
+ */
+void assert_failed(uint8_t *file, uint32_t line)
+{
+ /* USER CODE BEGIN 6 */
+ /* User can add his own implementation to report the file name and line number,
+ ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
+ /* USER CODE END 6 */
+}
+#endif /* USE_FULL_ASSERT */
diff --git a/project/Core/Src/syscalls.c b/project/Core/Src/syscalls.c
index d190edf..ede9e3a 100644
--- a/project/Core/Src/syscalls.c
+++ b/project/Core/Src/syscalls.c
@@ -89,14 +89,14 @@ __attribute__((weak)) int _write(int file, char *ptr, int len)
return len;
}
-int _close(int file)
+__attribute__((weak)) int _close(int file)
{
(void)file;
return -1;
}
-int _fstat(int file, struct stat *st)
+__attribute__((weak)) int _fstat(int file, struct stat *st)
{
(void)file;
st->st_mode = S_IFCHR;
@@ -109,7 +109,7 @@ int _isatty(int file)
return 1;
}
-int _lseek(int file, int ptr, int dir)
+__attribute__((weak)) int _lseek(int file, int ptr, int dir)
{
(void)file;
(void)ptr;
@@ -117,7 +117,7 @@ int _lseek(int file, int ptr, int dir)
return 0;
}
-int _open(char *path, int flags, ...)
+__attribute__((weak)) int _open(char *path, int flags, ...)
{
(void)path;
(void)flags;
@@ -145,7 +145,7 @@ int _times(struct tms *buf)
return -1;
}
-int _stat(char *file, struct stat *st)
+__attribute__((weak)) int _stat(char *file, struct stat *st)
{
(void)file;
st->st_mode = S_IFCHR;
diff --git a/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_lcd.c b/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_lcd.c
index 369c2af..8277ff3 100644
--- a/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_lcd.c
+++ b/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_lcd.c
@@ -116,7 +116,7 @@ EndDependencies */
/** @defgroup STM32746G_DISCOVERY_LCD_Private_Variables STM32746G_DISCOVERY_LCD Private Variables
* @{
- */
+ */
LTDC_HandleTypeDef hLtdcHandler;
static DMA2D_HandleTypeDef hDma2dHandler;
@@ -1021,7 +1021,7 @@ void BSP_LCD_DrawPixel(uint16_t Xpos, uint16_t Ypos, uint32_t RGB_Code)
*/
void BSP_LCD_DrawBitmap(uint32_t Xpos, uint32_t Ypos, uint8_t *pbmp)
{
- uint32_t index = 0, width = 0, height = 0, bit_pixel = 0;
+ uint32_t index = 0, width = 0, height = 0, bit_pixel = 0, row_size = 0;
uint32_t address;
uint32_t input_color_mode = 0;
@@ -1039,6 +1039,9 @@ void BSP_LCD_DrawBitmap(uint32_t Xpos, uint32_t Ypos, uint8_t *pbmp)
/* Set the address */
address = hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (((BSP_LCD_GetXSize()*Ypos) + Xpos)*(4));
+
+ /* Calculate the row size in byte */
+ row_size = ((bit_pixel*width + 31)/32) * 4;
/* Get the layer pixel format */
if ((bit_pixel/8) == 4)
@@ -1053,20 +1056,20 @@ void BSP_LCD_DrawBitmap(uint32_t Xpos, uint32_t Ypos, uint8_t *pbmp)
{
input_color_mode = CM_RGB888;
}
-
+
/* Bypass the bitmap header */
- pbmp += (index + (width * (height - 1) * (bit_pixel/8)));
-
+ pbmp += (index + (row_size * (height - 1)));
+
/* Convert picture to ARGB8888 pixel format */
for(index=0; index < height; index++)
{
/* Pixel format conversion */
LL_ConvertLineToARGB8888((uint32_t *)pbmp, (uint32_t *)address, width, input_color_mode);
-
+
/* Increment the source and destination buffers */
- address+= (BSP_LCD_GetXSize()*4);
- pbmp -= width*(bit_pixel/8);
- }
+ address += (BSP_LCD_GetXSize()*4);
+ pbmp -= row_size;
+ }
}
/**
diff --git a/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_lcd.h b/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_lcd.h
index 04b2aa3..3507e41 100644
--- a/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_lcd.h
+++ b/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_lcd.h
@@ -43,7 +43,7 @@
/** @addtogroup STM32746G_DISCOVERY
* @{
*/
-
+
/** @addtogroup STM32746G_DISCOVERY_LCD
* @{
*/