STM32 UVC学习笔记2

主机环境:Windows 7 SP1

开发环境:MDK5.18

目标板:STM32F103C8T6

开发库:STM32F1Cube库和STM32_USB_Device_Library

承接前文,动手之前看见昨天的文章居然有900+的阅读量,我还震惊了好久,之前写的一些东西隔天一般就十几二十的阅读量,这次居然直接上升了一个数量级,由此,可以看到大家对于STM32 UVC的学习很有兴趣,也更加激励了我,我只能尽可能把我在学习STM32 UVC的过程中遇到的问题分享给大家,让大家少走弯路,共同进步。

前面已经把STM32 UVC的基本框架搭建完毕,接下来就是填充实体了,即数据的传输,这就涉及到了MJPEG的编码,有关MJPEG的编码我只是大体上有一些了解,MJPEG的研归根结底是JPEG的研究,有关JPEG文件的解析可以使用一个JPEGsnoop的软件来查看,随便找一个JPEG格式的文件,使用该软件打开,STM32F1Cube库中提供了10张图片,当然都是bmp格式的文件,路径如下:\Utilities\Media\Pictures,但我们研究的是JPEG编码的图片,因此这里我直接用画图工具转成了张JPEG图片,关于JPEG的详细讲解网上有很多,我了解的也不多,其格式组成如下:

由于是初学者,因此这里我并没有去研究如何把文件进行压缩编码成JPEG文件,当然我也粗略地看了一下,这里并不建议大家去研究JPEG的编码,因为我们首要的目的是去了解如何把视频数据流传输到USB主机,而编码的事是下一步的目的。所以,这里我偷懒直接把JPEG文件的二进制数据拷贝到工程目录中,新建了jpeg.h和jpeg.c文件,jpeg.h文件如下:

#ifndef __JPEG_H__
#define __JPEG_H__

#include <stdint.h>

#define JPEG_SIZE		9167
extern uint8_t jpeg_data[JPEG_SIZE];

#endif

jpeg.c文件如下:

#include "jpeg.h"

uint8_t jpeg_data[JPEG_SIZE]={
0xFF,0xD8,0xFF,0xE0,0x00,0x10,0x4A,0x46,0x49,0x46,0x00,0x01,0x01,0x01,0x00,0x96,
0x00,0x96,0x00,0x00,0xFF,0xDB,0x00,0x43,0x00,0x02,0x01,0x01,0x02,0x01,0x01,0x02,
0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x05,0x03,0x03,0x03,0x03,0x03,0x06,0x04,
0x04,0x03,0x05,0x07,0x06,0x07,0x07,0x07,0x06,0x07,0x07,0x08,0x09,0x0B,0x09,0x08,
0x08,0x0A,0x08,0x07,0x07,0x0A,0x0D,0x0A,0x0A,0x0B,0x0C,0x0C,0x0C,0x0C,0x07,0x09,
0x0E,0x0F,0x0D,0x0C,0x0E,0x0B,0x0C,0x0C,0x0C,0xFF,0xDB,0x00,0x43,0x01,0x02,0x02,
0x02,0x03,0x03,0x03,0x06,0x03,0x03,0x06,0x0C,0x08,0x07,0x08,0x0C,0x0C,0x0C,0x0C,
0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,
0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,
0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0xFF,0xC0,
0x00,0x11,0x08,0x00,0xA0,0x00,0x80,0x03,0x01,0x22,0x00,0x02,0x11,0x01,0x03,0x11,
0x01,0xFF,0xC4,0x00,0x1F,0x00,0x00,0x01,0x05,0x01,0x01,0x01,0x01,0x01,0x01,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
0x0A,0x0B,0xFF,0xC4,0x00,0xB5,0x10,0x00,0x02,0x01,0x03,0x03,0x02,0x04,0x03,0x05,
0x05,0x04,0x04,0x00,0x00,0x01,0x7D,0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12,0x21,
0x31,0x41,0x06,0x13,0x51,0x61,0x07,0x22,0x71,0x14,0x32,0x81,0x91,0xA1,0x08,0x23,
0x42,0xB1,0xC1,0x15,0x52,0xD1,0xF0,0x24,0x33,0x62,0x72,0x82,0x09,0x0A,0x16,0x17,
0x18,0x19,0x1A,0x25,0x26,0x27,0x28,0x29,0x2A,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,
0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,
0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,
0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,
0x9A,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,
0xB8,0xB9,0xBA,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xD2,0xD3,0xD4,0xD5,
0xD6,0xD7,0xD8,0xD9,0xDA,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xF1,
0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFF,0xC4,0x00,0x1F,0x01,0x00,0x03,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0xFF,0xC4,0x00,0xB5,0x11,0x00,
0x02,0x01,0x02,0x04,0x04,0x03,0x04,0x07,0x05,0x04,0x04,0x00,0x01,0x02,0x77,0x00,
0x01,0x02,0x03,0x11,0x04,0x05,0x21,0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71,0x13,
0x22,0x32,0x81,0x08,0x14,0x42,0x91,0xA1,0xB1,0xC1,0x09,0x23,0x33,0x52,0xF0,0x15,
0x62,0x72,0xD1,0x0A,0x16,0x24,0x34,0xE1,0x25,0xF1,0x17,0x18,0x19,0x1A,0x26,0x27,
0x28,0x29,0x2A,0x35,0x36,0x37,0x38,0x39,0x3A,0x43,0x44,0x45,0x46,0x47,0x48,0x49,
0x4A,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x63,0x64,0x65,0x66,0x67,0x68,0x69,
0x6A,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x82,0x83,0x84,0x85,0x86,0x87,0x88,
0x89,0x8A,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0xA2,0xA3,0xA4,0xA5,0xA6,
0xA7,0xA8,0xA9,0xAA,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xC2,0xC3,0xC4,
0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xE2,
0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,
0xFA,0xFF,0xDA,0x00,0x0C,0x03,0x01,0x00,0x02,0x11,0x03,0x11,0x00,0x3F,0x00,0xFD,
0xFC,0xAE,0x72,0x6F,0x8A,0x1A,0x65,0x9E,0xAD,0x35,0xAD,0xC8,0xB9,0xB4,0x58,0x67,
0x6B,0x5F,0xB4,0x4B,0x1E,0x21,0x79,0x55,0x37,0xEC,0x0D,0x9E,0x49,0x5E,0x9C,0x73,
0xD0,0x73,0xC5,0x74,0x75,0xF3,0xCF,0x8F,0x7E,0x24,0x78,0x46,0xDF,0xC4,0xFE,0x27,
0xB9,0x6D,0x3B,0xC6,0x3A,0x9C,0xDA,0x1E,0xA6,0xB6,0x57,0x77,0x56,0x36,0xF0,0xBC,
0x71,0x5C,0xC9,0x25,0xA4,0x6B,0x02,0x92,0x41,0x56,0x0F,0x34,0x0C,0x03,0x80,0x59,
0x59,0xC8,0x2C,0x8A,0xD8,0xDA,0x8C,0x60,0xDB,0x53,0x39,0x71,0x32,0xAC,0x92,0x74,
0x52,0xF3,0xB9,0xEC,0xED,0xF1,0x3B,0x44,0x8E,0x69,0x16,0x4B,0xE8,0xE2,0x48,0xE3,
0x8E,0x4F,0x31,0xB8,0x47,0x0E,0x65,0x18,0x1D,0xF2,0xBE,0x4C,0x9B,0x81,0x00,0xAE,
0xC3,0x9C,0x60,0xD2,0xDC,0x7C,0x4F,0xF0,0xFD,0xAD,0xF7,0xD9,0x9F,0x56,0xB3,0xFB,
0x46,0x48,0x58,0xD5,0xB7,0x33,0xE3,0x00,0xED,0x03,0xEF,0x60,0x90,0x0E,0x33,0x82,
0x40,0x3C,0x9A,0xF1,0x0B,0x2F,0x88,0xBF,0x0F,0x75,0x4D,0x01,0xB5,0xC1,0xA8,0xF8,
0x9E,0xD6,0x78,0xBC,0x4F,0x1F,0x82,0xDE,0x16,0x81,0x56,0xEA,0x2D,0x44,0xDC,0x3C,
0x25,0x4A,0x01,0xCA,0xE6,0x76,0x72,0xFC,0xA8,0x45,0xDC,0x30,0x17,0x35,0x5F,0x52,
0xF8,0xB7,0xE0,0xAB,0x1F,0x08,0xDF,0xEA,0x1F,0x66,0xF1,0xCC,0x3A,0x4F,0x84,0x2E,
0x6F,0x2D,0xAE,0xED,0x63,0xD2,0xE2,0x91,0x34,0x88,0x52,0x28,0xEF,0x27,0x9A,0x4F,
0x94,0x85,0x45,0x43,0x1B,0x6D,0x66,0xF3,0x43,0x7C,0x8A,0x9B,0x81,0x51,0xB7,0xB2,
0xA5,0x7D,0xD9,0xCD,0xED,0x71,0x96,0xF8,0x57,0xF5,0xF3,0xFE,0xBE,0x7A,0x7B,0xC5,
0xA7,0xC4,0xBD,0x0E,0xF6,0xF5,0x2D,0xD3,0x51,0xB7,0xF3,0xA5,0x2A,0x23,0x42,0x70,
0x64,0x0C,0x70,0xAC,0x3F,0xD9,0x27,0x80,0x7A,0x64,0x81,0xDC,0x66,0x6D,0x3B,0xC7,
0xDA,0x36,0xAC,0xF7,0x2B,0x6B,0xA8,0xDB,0x5C,0x1B,0x38,0x7E,0xD1,0x37,0x96,0xDB,
0xB6,0x47,0x92,0x03,0xF1,0xFC,0x27,0x6B,0x60,0xF4,0x3B,0x4E,0x33,0x83,0x5E,0x6F,
0xF1,0x11,0x74,0x6F,0x82,0x92,0x69,0xA7,0x52,0xBE,0xF1,0x45,0xDC,0x5E,0x23,0xBA,
0xB4,0xD2,0x44,0xC9,0x1C,0x53,0x08,0x5C,0x4E,0x82,0x13,0x23,0xB2,0x82,0x49,0x91,
0xD4,0x1E,0x59,0xD8,0x16,0x38,0x3B,0x58,0x8C,0x6F,0x86,0xBF,0x1A,0xF4,0x7F,0x00,
0xDA,0x78,0xDF,0x50,0xD7,0x65,0xD5,0xF4,0xFB,0x4F,0x05,0xE9,0x16,0x72,0x4A,0xB7,
0xB6,0x26,0xD8,0x2E,0x98,0x93,0x5E,0xC7,0x0D,0xD2,0x07,0xC3,0x04,0x76,0x86,0xE0,
0x62,0x43,0xB8,0x2C,0x21,0x89,0x21,0x81,0xA8,0x74,0xE9,0xB8,0xB7,0x1B,0x97,0x0A,
0xB8,0x9E,0x78,0xC6,0x71,0x49,0x3B,0xDF,0xCB,0xF1,0x3D,0x71,0xFE,0x24,0xE8,0x31,
0x85,0x2D,0xAA,0x5A,0x20,0x7D,0xA4,0x16,0x6C,0x0C,0x32,0x87,0x07,0xE9,0xB5,0x94,
0x93,0xD0,0x06,0x19,0xC6,0x45,0x49,0x37,0xC4,0x0D,0x16,0xDD,0x50,0xC9,0xA9,0x5B,
0x20,0x90,0x80,0xBB,0x9B,0x1B,0x8E,0xF3,0x1E,0x3E,0xBB,0xC1,0x5C,0x75,0xCF,0x1D,
0x48,0xAF,0x12,0x1F,0x13,0xBE,0x1E,0x68,0x3A,0x26,0x8D,0x61,0x3F,0x89,0x3C,0xE9,
0x35,0x57,0xBC,0xB0,0x56,0xD2,0xC8,0x94,0x08,0xA5,0xBA,0xB1,0xB7,0x36,0xAC,0x8C,
0x0C,0x8A,0xAA,0x2E,0xAC,0x54,0x36,0xD1,0x84,0xDA,0xDB,0x80,0x75,0xDD,0xA5,0xF1,
0x23,0xE2,0x2F,0x82,0xBE,0x14,0xFC,0x41,0xD5,0x2D,0x35,0x1D,0x63,0x5E,0x8A,0xEB,
0xC3,0xDA,0x1D,0xDF,0x8A,0xE5,0x82,0x18,0x12,0x4B,0x71,0x04,0x32,0x9B,0xA9,0x61,
0x57,0x2B,0xCC,0xE7,0x0D,0x20,0x8B,0x76,0xF3,0x1E,0x48,0xF9,0x46,0x45,0x7B,0x2A,
0x77,0xB2,0xB8,0x2A,0xB8,0xAB,0x5D,0xC5,0x7F,0x5F,0x3E,0x87,0xAD,0xEB,0x9F,0x10,
0x74,0x4F,0x0D,0x5D,0xB4,0x1A,0x86,0xA9,0x67,0x67,0x22,0x00,0x58,0x4B,0x20,0x50,
0xB9,0x19,0x00,0x9E,0x80,0xE3,0x27,0x1D,0x70,0x09,0xE8,0x33,0x4D,0x7F,0x88,0x9A,
0x1C,0x7B,0xC3,0x6A,0x76,0xA1,0xA3,0x40,0xE5,0x4B,0x7C,0xC4,0x1D,0xB8,0xC0,0xEA,
0x4F,0xCE,0x9C,0x0E,0x41,0x75,0xC8,0xF9,0x86,0x7C,0x89,0xFE,0x3C,0xF8,0x3F,0xC6,
0x7F,0x16,0xEF,0xBC,0x0F,0x77,0x7F,0xE2,0x7F,0x0A,0xEB,0x97,0xF6,0x92,0xDE,0x5E,
0x5A,0x5E,0xDB,0xC5,0x0C,0x11,0x98,0xA2,0x56,0xC1,0x94,0x86,0x50,0xED,0x08,0x69,
0x15,0x43,0x15,0x29,0x0C,0x8D,0xFC,0x06,0xBA,0x1F,0x84,0xD6,0x7E,0x1A,0xF8,0xF7,
0xE1,0x1B,0x3F,0x1B,0x68,0x37,0x3A,0xE5,0xBD,0x9E,0xA3,0x75,0x71,0x71,0x66,0x2E,
0xA1,0x10,0xCB,0x6D,0x3C,0x77,0x0F,0x1C,0x92,0x79,0x4E,0xA4,0xAB,0x17,0x8D,0xF8,
0x61,0xD1,0x8F,0x03,0x24,0x54,0xFB,0x3A,0x69,0x5E,0x57,0x2A,0x55,0x31,0x3C,0xCD,
0x41,0x2B,0x7F,0x5E,0x7E,0x9D,0xBF,0x53,0xB0,0x8B,0xE2,0xFF,0x00,0x87,0xAE,0x27,
0x99,0x22,0xD4,0x12,0x64,0x81,0x12,0x47,0x95,0x14,0xB4,0x40,0x33,0x48,0x9F,0x7F,
0x18,0x38,0x68,0xDC,0x1E,0x78,0x23,0x1D,0x78,0xA9,0x75,0x0F,0x8A,0x5A,0x2E,0x9D,
0x21,0x46,0xBA,0x32,0x32,0xC6,0xB2,0x91,0x1C,0x6C,0xE4,0x2B,0x34,0x4A,0x0F,0x03,
0xB9,0x99,0x3F,0x03,0xCD,0x53,0xD3,0x7E,0x13,0x43,0xA6,0x5C,0x89,0x53,0x55,0xD4,
0xDC,0x99,0x96,0x79,0x03,0xF9,0x44,0x4C,0xC2,0xE2,0x5B,0x8F,0x9B,0xE4,0xFF,0x00,
0x9E,0x93,0x3F,0x4C,0x70,0x40,0xED,0x4C,0x83,0xE0,0xD5,0x85,0x95,0xA4,0x10,0x5A,
0xDE,0xEA,0x16,0xD1,0xDB,0xAC,0x88,0xA1,0x59,0x18,0x95,0x67,0x89,0x94,0x12,0xCA,
0x4F,0xC8,0x21,0x89,0x57,0xD9,0x06,0x73,0x92,0x49,0x6A,0x17,0xDD,0x91,0xCD,0x8C,
0xE5,0xD9,0x5F,0xFA,0xF3,0xFE,0xAC,0x6F,0x68,0xFE,0x2E,0xD3,0x75,0xFB,0x9F,0x26,
0xCE,0xEE,0x39,0xE5,0x11,0x99,0x4A,0xA8,0x39,0x0A,0x1C,0xA1,0x27,0x8E,0x3E,0x65,
0x65,0xFA,0xA9,0xF4,0x35,0xC9,0x7C,0x5E,0xFD,0xA4,0xBC,0x39,0xF0,0x5F,0xC4,0x1A,
0x66,0x93,0xA9,0x8D,0x46,0xEF,0x54,0xD5,0xAD,0xE6,0xBC,0x8A,0xD6,0xC6,0xDF,0xCE,
0x68,0xAD,0xE2,0x68,0xD1,0xE6,0x94,0x92,0x16,0x38,0xC3,0xCB,0x1A,0x06,0x62,0x32,
0xCE,0x00,0xC9,0xAE,0x87,0xC1,0xDE,0x0E,0x3E,0x19,0xD4,0xB5,0x9B,0x97,0x31,0x96,
0xD5,0x2F,0x0C,0xE8,0x10,0x9C,0x46,0x98,0x1F,0x2F,0x3D,0x09,0x72,0xEE,0x71,0xC6,
0xE9,0x1B,0xD6,0xBE,0x7A,0xFD,0xA9,0xBF,0x64,0xBD,0x1B,0xE2,0x3F,0xC6,0x8B,0xEF,
0x88,0x57,0x76,0x9F,0x12,0xB5,0x4D,0x5A,0xDB,0x46,0xFF,0x00,0x84,0x79,0x74,0xDB,
0x13,0x6F,0x73,0xA4,0x5E,0x5A,0x38,0x69,0x19,0x64,0xB5,0x76,0x43,0x2C,0x7E,0x61,
0x56,0x65,0xDE,0xAC,0x5D,0x10,0xA9,0x52,0xA1,0x81,0x4A,0x34,0x9D,0x4F,0x79,0xBE,
0x53,0x4A,0x95,0x2B,0xAA,0x4A,0xC9,0x73,0x37,0xF2,0xFE,0xAC,0x7A,0xDF,0x85,0x7F,
0x69,0xED,0x17,0xC6,0x1E,0x21,0xD3,0x74,0xDB,0x3D,0x2F,0xC4,0x06,0x5D,0x51,0xCA,
0x43,0x23,0x5B,0x47,0xE5,0x0D,0xA3,0x2C,0x49,0x12,0x1E,0x14,0x63,0x24,0x03,0x8C,
0xF3,0x5E,0x91,0x5F,0x16,0xFE,0xC4,0xBF,0xB2,0xAD,0xCF,0xEC,0xE1,0xF1,0x13,0xC3,
0xF7,0xF7,0xDA,0x37,0x8F,0x75,0xC9,0x34,0xED,0x11,0x7C,0x3F,0x63,0x2D,0xD6,0x91,
0x65,0x65,0x06,0x9F,0x24,0x92,0xF9,0xD7,0x77,0xD2,0x6D,0xBC,0x95,0x8B,0x4C,0xCE,
0x14,0x60,0x66,0x38,0xE2,0x31,0xE5,0xC9,0xC9,0xFB,0x4A,0x8C,0x5C,0x29,0x46,0x76,
0xA2,0xEE,0xBB,0xEC,0x3C,0x14,0xAB,0xCA,0x9D,0xF1,0x0A,0xD2,0xED,0xB8,0x57,0xCE,
0xBE,0x21,0xF0,0x07,0x84,0x7C,0x6B,0xFB,0x40,0xEA,0xBA,0x9C,0xEF,0xE3,0xBD,0x5A,
0xE8,0x4D,0x1E,0x8B,0x35,0xED,0xB6,0x9F,0x13,0x58,0x69,0xCE,0xB7,0x76,0x97,0xBE,
0x41,0x99,0x22,0x12,0xBA,0x2C,0xB6,0xD1,0x73,0x21,0x91,0x21,0x12,0x4A,0x14,0xA6,
0xF6,0xAE,0xE7,0xFE,0x1A,0xB3,0x4B,0xFF,0x00,0xA1,0x6F,0xC6,0x5F,0xF8,0x2D,0x1F,
0xFC,0x5D,0x79,0xA7,0x88,0x35,0x5D,0x03,0xC4,0x13,0x6B,0xF6,0xD9,0xF8,0xAD,0x67,
0xE1,0xDF,0x14,0x49,0x34,0xBA,0xA6,0x87,0x6F,0x61,0x6C,0xB6,0xD7,0x6D,0x34,0x7E,
0x5C,0xDF,0xBC,0x2A,0x67,0x45,0x71,0xC9,0x09,0x28,0x19,0xCE,0x31,0x93,0x5A,0xC3,
0x05,0x5D,0x7D,0x96,0x67,0xFD,0xA7,0x86,0x7F,0x6B,0xF0,0x7F,0xE4,0x41,0xAE,0x69,
0x3F,0x01,0xFC,0x3F,0x69,0x7F,0xE3,0xC3,0xE3,0xEB,0x3B,0x9B,0x4B,0x57,0xBB,0xD4,
0xDD,0x2D,0x35,0x8B,0x79,0xE3,0xBA,0xB8,0x8A,0xE5,0xB5,0x69,0x25,0x8A,0x25,0xFF,
0x00,0x59,0x70,0xB1,0x3B,0xA2,0xBA,0xE5,0x8D,0xB4,0x9B,0x72,0x54,0x86,0xA9,0xF4,
0x4F,0x85,0x9F,0x0E,0xFC,0x4D,0x24,0x36,0xB6,0xBF,0x19,0x75,0x2B,0xBB,0xF9,0xAF,
0xAC,0xF5,0x9B,0xA5,0x96,0xFF,0x00,0x4C,0x92,0x5D,0x4F,0xC9,0x8A,0x38,0xAD,0x45,
0xC2,0x34,0x05,0x65,0xF2,0xCB,0x42,0xDB,0x8A,0x99,0x1A,0x43,0x11,0x76,0x62,0x10,
0x0C,0x4D,0x53,0xC2,0xDE,0x15,0xF1,0x45,0xC5,0xFD,0xD6,0xB9,0xFF,0x00,0x0B,0x63,
0x58,0xD4,0x75,0x1D,0x12,0xE3,0xC3,0xEF,0x79,0x2E,0x9B,0x67,0x0C,0x8B,0x67,0x2D,
0xBC,0x90,0xEC,0x55,0x8A,0x34,0x40,0xC8,0x25,0x95,0x95,0xB6,0xE7,0x74,0x87,0x39,
0x50,0xAA,0x28,0xEB,0xFF,0x00,0x06,0x3C,0x03,0xE3,0x0B,0x1D,0x53,0x4F,0xD4,0xEC,
0x3E,0x2F,0xEA,0x1A,0x0E,0xAE,0x6E,0x8B,0xE9,0x53,0xC4,0x92,0x5B,0x43,0xF6,0xA9,
0xD6,0xE2,0xE3,0xCB,0xCF,0xCC,0x9E,0x63,0x83,0xC8,0x20,0x80,0xEC,0x06,0x06,0x31,
0xAA,0xC2,0x55,0xEC,0xFF,0x00,0x02,0x7F,0xB4,0xB0,0xDF,0xCD,0xF8,0x3F,0xF2,0x3D,
0x2F,0xE2,0x75,0xE7,0x84,0x3E,0x2C,0x78,0xC3,0xC2,0x7E,0x0F,0xD5,0xBC,0x73,0xAD,
0x3B,0xEB,0x5A,0x6D,0xCF,0x88,0x6D,0x65,0xB3,0x58,0x06,0x9B,0xAC,0x59,0x1B,0x88,
0xAE,0x11,0x0C,0xA6,0x36,0x45,0x74,0x48,0xC3,0x42,0xF1,0xB2,0xCA,0x22,0x8A,0x66,
0x0F,0xF7,0x9A,0xBC,0xFB,0xC2,0x31,0xFC,0x3A,0xF8,0xC5,0xE0,0x8F,0x10,0x4F,0x0D,
0xE7,0xC4,0xDF,0x1D,0xDA,0x78,0xB2,0xE6,0x4D,0x46,0xEF,0x52,0x5D,0x25,0x05,0xD6,
0x8A,0xCF,0x24,0x90,0x8C,0xF9,0x50,0xC6,0xE7,0x09,0x1A,0x84,0x89,0x96,0x46,0x48,
0xA3,0x8C,0xEC,0x01,0xB2,0xDB,0x5F,0x13,0x74,0x8F,0x09,0x7C,0x5F,0x30,0x49,0xE2,
0x1D,0x2B,0xE2,0x85,0xED,0xD4,0x7A,0x54,0x1A,0x54,0xD3,0xAD,0x8C,0x31,0x3D,0xDC,
0x51,0xCB,0xE6,0x48,0x5F,0x60,0x00,0x19,0xD4,0xC9,0x1C,0x81,0x42,0xA9,0x8E,0x67,
0x50,0xAB,0x90,0x42,0x69,0xB3,0xE8,0xFE,0x16,0xD4,0xB5,0x49,0xF4,0x0B,0x9F,0x8B,
0xDE,0x1E,0x5D,0x76,0xF6,0x7B,0xFD,0x52,0x1B,0x4D,0x3A,0xD1,0x96,0xF6,0x59,0x6E,
0x24,0x98,0x9C,0xC9,0x1B,0x34,0x64,0x09,0x4C,0x40,0xC6,0x54,0xEC,0x44,0xC9,0x2C,
0xBB,0xAA,0x63,0x84,0xAA,0x96,0x91,0x63,0x79,0x96,0x1F,0xF9,0xBF,0x06,0x49,0x6D,
0xA5,0xFC,0x2E,0xBB,0xF1,0xED,0x8F,0x8A,0xFC,0x41,0xE3,0x6D,0x69,0xB5,0x78,0xE1,
0xBC,0xBA,0x6D,0x4F,0x56,0x6B,0x7B,0x18,0x24,0x48,0xF5,0x2D,0x36,0x17,0x0F,0xB6,
0x24,0x8D,0x76,0xCD,0xA4,0x5B,0xAA,0xE0,0x0C,0xA1,0x91,0x8E,0x73,0xB9,0x7B,0xDF,
0x8A,0x1F,0xB1,0x27,0x84,0x3E,0x2D,0xCB,0xAF,0xDC,0xEA,0x97,0x7E,0x24,0x4D,0x43,
0xC4,0x13,0xCB,0x34,0xB7,0x50,0x6A,0x72,0x2F,0xD9,0xC4,0x96,0x4D,0x62,0xCB,0x1C,
0x47,0x30,0x8F,0xF4,0x69,0x24,0x8F,0x71,0x8C,0xB6,0x24,0x6F,0x9B,0x9A,0xF2,0x0D,
0x57,0xE1,0xBF,0x84,0xF5,0xD8,0x35,0x68,0xD4,0xFC,0x60,0x80,0xDE,0xF9,0xAB,0x63,
0x24,0x16,0x36,0xA9,0x2E,0x85,0x1C,0xD7,0x72,0x5D,0xC8,0xB6,0xB2,0x6C,0xDC,0xA4,
0xCD,0x26,0x43,0xB9,0x67,0x50,0x8A,0x15,0x86,0x0E,0x7D,0xDA,0x2F,0xDA,0x62,0xCE,
0x75,0x62,0x9E,0x15,0xF1,0xA9,0x0B,0xD7,0xFE,0x25,0x83,0x8F,0xFC,0x7E,0x94,0xB0,
0xB5,0xD5,0x9C,0x53,0x05,0x98,0xE1,0x9E,0xF2,0xFC,0x1F,0xF9,0x18,0x7A,0xFF,0x00,
0xEC,0x2B,0xE0,0x7F,0x10,0xDD,0x6B,0x2F,0x2A,0xEA,0x51,0x45,0xAE,0x4E,0x6E,0x27,
0x8A,0x19,0x51,0x00,0x2F,0x72,0x6E,0x26,0x50,0xC1,0x37,0x95,0x94,0xBC,0xB1,0xB8,
0x66,0x39,0x8A,0x56,0x8C,0x61,0x70,0x07,0xA6,0xF8,0x17,0xC1,0x16,0x9F,0x0F,0xB4,
0x49,0xAC,0x2C,0x9E,0x79,0x21,0x9F,0x50,0xBD,0xD4,0x98,0xCA,0x41,0x61,0x25,0xDD,
0xDC,0xB7,0x52,0x01,0x80,0x3E,0x50,0xF3,0x30,0x51,0xD4,0x28,0x19,0x24,0xF2,0x78,
0xC8,0x3F,0x69,0xDB,0x1B,0x92,0x44,0x7E,0x16,0xF1,0xAB,0x95,0xEB,0x8D,0x30,0x71,
0xFF,0x00,0x8F,0xD4,0x8D,0xFB,0x4A,0x5A,0x2A,0x6E,0x3E,0x14,0xF1,0xB6,0x33,0x8F,
0xF9,0x06,0x0C,0x7F,0xE8,0x75,0x9B,0xC2,0xE2,0x1A,0xB3,0x43,0x59,0x8E,0x17,0x75,
0x2F,0xC1,0xFF,0x00,0x91,0xE9,0x14,0x57,0x96,0xCF,0xFB,0x57,0xE9,0x56,0xD3,0x79,
0x6F,0xE1,0xCF,0x19,0x2B,0x8E,0xA0,0xE9,0xA3,0x3F,0xFA,0x1D,0x4C,0xBF,0xB4,0xED,
0x8B,0xC6,0x18,0x78,0x5F,0xC6,0xA4,0x1F,0xFA,0x86,0x0F,0xFE,0x2E,0xA7,0xEA,0x55,
0xB6,0xE5,0x2B,0xFB,0x4B,0x0D,0xFC,0xDF,0x83,0xFF,0x00,0x23,0xD3,0x28,0xAF,0x34,
0x4F,0xDA,0x6A,0xCA,0x4C,0xE3,0xC2,0xDE,0x35,0x38,0xFF,0x00,0xA8,0x60,0xFF,0x00,
0xE2,0xEA,0x3B,0xBF,0xDA,0x9B,0x4D,0xB0,0xB2,0x96,0xE2,0x6F,0x0D,0x78,0xCE,0x38,
0x60,0x43,0x24,0x8C,0x74,0xC1,0x85,0x50,0x32,0x4F,0xDF,0xCF,0x41,0x4F,0xEA,0x35,
0xFF,0x00,0x94,0x5F,0xDA,0x78,0x6F,0xE6,0xFC,0x1F,0xF9,0x1E,0x9F,0x45,0x7C,0x58,
0x7F,0xE0,0xE0,0x8F,0xD9,0x61,0x49,0x07,0xE2,0x10,0x04,0x75,0x1F,0x63,0x92,0x8F,
0xF8,0x88,0x2B,0xF6,0x58,0xFF,0x00,0xA2,0x86,0xBF,0xF8,0x06,0xF5,0xAF,0xF6,0x56,
0x2F,0xFE,0x7D,0xBF,0xB8,0x3F,0xB5,0x30,0xBF,0xCF,0xF9,0x9E,0xB7,0x45,0x00,0x6E,
0x20,0x7A,0xD4,0xF1,0x59,0x17,0x07,0x92,0x7B,0x0C,0x0A,0xEF,0x6D,0x2D,0xCE,0x84,
0xAE,0x3E,0xCA,0x6F,0x31,0xF0,0x49,0xC8,0xE9,0x93,0xC5,0x68,0xDB,0xBF,0xCA,0x05,
0x51,0x86,0xD1,0x62,0x90,0x36,0x5B,0x23,0xA6,0x71,0xE9,0x57,0x2D,0xD4,0xE7,0x39,
0xE0,0xD7,0x3C,0x9A,0xE6,0x4E,0x26,0xD6,0xF7,0x75,0x26,0x65,0xDC,0x29,0x86,0x2F,
0x9B,0x38,0x15,0x20,0x19,0xE9,0x4A,0x41,0x5C,0x82,0x30,0x7D,0xFA,0xD6,0xB2,0xA7,
0x16,0xC8,0x2A,0x6A,0x5A,0x8C,0x5A,0x26,0x9D,0x35,0xCC,0xDB,0x84,0x50,0xAE,0x4E,
0xD5,0xDC,0xC7,0xE8,0x3B,0xD3,0xBE,0x1F,0xFC,0x45,0xB2,0xF1,0x85,0xBD,0xCC,0x56,
0xD0,0xDC,0xC1,0x25,0xBA,0x0D,0xEB,0x32,0x80,0x48,0x3D,0xF8,0x27,0xD2,0xA4,0xBA,
0xB3,0x8E,0xFE,0x06,0x86,0x55,0x0D,0x1C,0x83,0x04,0x1A,0x34,0xCD,0x1A,0xCF,0x42,
0x86,0x55,0xB5,0x89,0x62,0x32,0x81,0xB8,0x8E,0x4B,0x54,0xBA,0x6A,0xD6,0x39,0x2A,
0x2C,0x4B,0xC4,0x45,0xC1,0xAE,0x4E,0xBD,0xEE,0x78,0x7F,0xC4,0xBF,0x8A,0x1F,0x15,
0x3C,0x27,0xFB,0x45,0xE9,0x5A,0x7E,0x89,0xA3,0x89,0x7C,0x1F,0x30,0x53,0x3C,0xDE,
0x42,0xBA,0x38,0xEA,0xC5,0x9C,0xF2,0xA7,0x3C,0x71,0xDA,0xBD,0xDB,0x4E,0xF1,0x1C,
0xBA,0xA4,0x6B,0x88,0xC0,0x49,0x3B,0x60,0x8C,0xD2,0x12,0xB2,0x28,0x57,0x8D,0x1D,
0x47,0x66,0x19,0xAD,0x08,0x6E,0xA2,0x68,0x82,0x26,0x23,0x20,0x00,0x07,0x4E,0x2B,
0x29,0x51,0x71,0x77,0x4C,0xCB,0x03,0x81,0x9E,0x1E,0xA5,0x59,0xCE,0xA4,0xA7,0xCE,
0xEE,0x93,0x7F,0x0F,0x92,0xF2,0xFF,0x00,0x22,0x28,0xAC,0x62,0x59,0x8B,0x18,0x41,
0x93,0x1F,0x31,0x23,0x27,0x15,0xF0,0xD7,0xFC,0x15,0x87,0xC7,0x9F,0xB4,0x57,0x83,
0x3E,0x29,0x78,0x4C,0x7C,0x2F,0xB6,0xF1,0x1C,0xFE,0x11,0x10,0xAC,0xB7,0x0B,0xA0,
0x5A,0xF9,0x93,0x5C,0x5C,0xF9,0x87,0x74,0x53,0xB6,0x19,0x91,0x36,0x05,0xDA,0x40,
0x03,0xE6,0x62,0x49,0xC6,0x2B,0xEE,0xBB,0xFB,0x95,0xBA,0xB8,0xB5,0x54,0x01,0x5A,
0x12,0xCC,0xCF,0xEA,0x31,0xD2,0xBC,0xB3,0xF6,0xD4,0xFD,0xA4,0x35,0x2F,0xD9,0x6F,
0xF6,0x7B,0xD4,0xFC,0x61,0xA4,0xE8,0x4B,0xAF,0x6A,0x16,0xF2,0xC5,0x04,0x50,0x4A,
0x59,0x61,0x88,0xC8,0xFB,0x7C,0xD9,0x76,0xFC,0xDB,0x17,0xDB,0x19,0x24,0x0C,0x8C,
0xE6,0xB2,0xAF,0x5E,0x34,0xA0,0xEB,0x54,0xD1,0x2D,0x5F,0xC8,0xFA,0x1C,0xAB,0x2C,
0xC4,0x66,0x58,0xCA,0x58,0x0C,0x22,0x52,0xA9,0x52,0x4A,0x31,0x4D,0xA4,0x9B,0x93,
0xB2,0xBB,0x6D,0x25,0xEA,0xD9,0xA7,0xFB,0x39,0xEA,0x3E,0x2E,0xD6,0x3E,0x03,0x68,
0xB7,0x9E,0x34,0xB2,0x3A,0x5F,0x89,0xEF,0x6D,0x50,0xDD,0x5B,0xB3,0x07,0x78,0x1C,
0x8C,0x95,0x62,0x06,0x09,0x1D,0xF8,0xEB,0x9A,0xF8,0x9F,0xF6,0x3A,0xFD,0x9D,0xFE,
0x3F,0x7C,0x1E,0xFD,0xB5,0x35,0xEF,0xF8,0x58,0x3A,0x9C,0x9E,0x27,0xD3,0x75,0xEB,
0xB9,0x44,0xBA,0x9C,0x37,0x93,0x4B,0x15,0xC5,0x9B,0x87,0x11,0xAF,0x94,0x4E,0xC8,
0xC6,0x0A,0xFC,0x98,0xCA,0x91,0x80,0x4E,0x79,0xFA,0xAF,0xF6,0x46,0xFD,0xAD,0xEF,
0xBF,0x68,0xEF,0x81,0x5A,0x6F,0x88,0xB5,0x7D,0x16,0x0D,0x27,0x55,0xBB,0x92,0x58,
0xE4,0x8E,0xD8,0xBB,0x40,0x76,0xB1,0x5D,0xCB,0xBB,0x90,0x0F,0xA6,0x5B,0xEA,0x7B,
0x7A,0xDE,0x99,0xAB,0x2B,0xB4,0x33,0xBE,0x23,0x8D,0x18,0x33,0x93,0xD8,0x0E,0xB4,
0xB0,0xF5,0xE9,0xD6,0xA6,0xA5,0x07,0xBA,0xBF,0xDE,0x8A,0xCE,0x32,0x7C,0x56,0x57,
0x8D,0xA9,0x81,0xC6,0x41,0x29,0xD3,0x93,0x8C,0x95,0xD3,0x57,0x8B,0xE8,0xD3,0xFC,
0x7A,0x9F,0xC8,0x06,0xB3,0x68,0x74,0xFD,0x5E,0xEA,0x06,0x04,0x34,0x13,0x3C,0x6C,
0x0F,0x50,0x43,0x11,0xFD,0x2A,0xB5,0x5B,0xD7,0xEF,0x4E,0xA5,0xAE,0xDF,0x5C,0x9C,
0x66,0xE2,0xE2,0x49,0x4E,0x06,0x07,0xCC,0xC4,0xFF,0x00,0x5A,0xA9,0x5F,0xA0,0x2D,
0x8F,0x9B,0x5B,0x1F,0xD3,0xAF,0xED,0x0F,0xFB,0x7B,0x78,0x57,0xE0,0x8E,0x9E,0xD3,
0x41,0xFE,0x9D,0x2B,0x02,0x51,0xDC,0x15,0x84,0x1F,0xE6,0xDC,0xFD,0x07,0xBD,0x7C,
0x65,0xF1,0x2F,0xFE,0x0B,0xFD,0xAF,0x78,0x66,0xED,0x53,0x4F,0xB3,0xF0,0xF2,0x42,
0x8C,0x72,0xED,0x11,0x91,0xE5,0x19,0xEE,0x37,0x63,0x8F,0x6F,0xCE,0xBE,0x59,0xBF,
0xF8,0xC5,0xF1,0x3E,0xF2,0xD2,0x79,0xE1,0xD7,0xA4,0x16,0xA6,0xE2,0xE6,0x56,0x5B,
0x80,0xAE,0xAA,0x89,0x3B,0x44,0xA7,0x63,0x71,0xCB,0x07,0x19,0xF6,0xE3,0xA5,0x7A,
0xDE,0x85,0xFF,0x00,0x04,0xF9,0xD0,0xBE,0x38,0x78,0x2F,0x4C,0xD5,0xBC,0x41,0x67,
0x63,0xFD,0xAF,0x3D,0xAA,0x19,0x4D,0xBC,0x22,0xD9,0x65,0x62,0xA0,0xE4,0xED,0xC2,
0xE7,0x92,0x49,0x20,0xF5,0xAF,0xCB,0x33,0xCC,0xE2,0x19,0x7C,0x63,0x3A,0x8D,0xAB,
0xEC,0xAC,0xB5,0x3E,0xF3,0x87,0xB8,0x7E,0x79,0x8B,0x94,0x60,0x96,0x9B,0xBB,0xBE,
0xBF,0x23,0xEE,0x9F,0xF8,0x27,0xD7,0xFC,0x15,0xC7,0xC1,0xBF,0xB6,0x66,0xA3,0x17,
0x87,0x35,0x45,0xB3,0xF0,0xF7,0x8B,0xA5,0x00,0x5B,0x22,0xC9,0xFE,0x8B,0xA8,0x9F,
0xEE,0xA6,0xE2,0x4A,0x49,0xE8,0x84,0x9C,0xF6,0x39,0xE2,0xBE,0xD2,0xB3,0xD0,0x0C,
0x80,0x97,0x70,0xA1,0x46,0x58,0x9E,0x8A,0x2B,0xF1,0x22,0xCB,0xFE,0x09,0x29,0x0F,
0x86,0xF4,0x2B,0xFD,0x63,0xC2,0x97,0xF7,0x9A,0x5F,0x8A,0x2C,0x20,0x79,0xF4,0xA5,
0xB6,0x9D,0x81,0xB9,0x9D,0x06,0xE4,0x89,0x98,0xE0,0x02,0xC4,0x61,0x4E,0x06,0x18,
0xA9,0xCF,0x15,0xFA,0x05,0xFF,0x00,0x04,0x67,0xFF,0x00,0x82,0x8C,0xC5,0xFB,0x65,
0xFE,0xCE,0xBA,0xC5,0x97,0x8C,0x6E,0x95,0x3C,0x71,0xE0,0x3B,0xB4,0xD3,0xB5,0xB1,
0x28,0xF2,0xE5,0xBD,0x5D,0xA1,0xA1,0x9C,0xA9,0xC1,0x0C,0xC0,0x10,0xC0,0xF2,0x19,
0x1B,0x3C,0xE6,0xB7,0xCB,0x73,0x2A,0x78,0xCA,0x5E,0xD2,0x96,0x8F,0xB1,0xE7,0xE7,
0xB9,0x2D,0x5C,0xBE,0xA2,0x8C,0xF5,0x4F,0xB1,0xF5,0x9E,0xB3,0x0D,0xCE,0x90,0x81,
0xA1,0xB0,0x37,0x31,0xF5,0x6D,0xAF,0xF3,0x63,0xD8,0x56,0x56,0x9B,0xE2,0x2B,0x4D,
0x7A,0x09,0x5A,0x06,0x60,0xD0,0xC8,0x62,0x74,0x61,0x86,0x46,0x18,0xC8,0x23,0xF1,
0xAE,0x33,0xE2,0x77,0xED,0x61,0x6D,0xA5,0xCD,0x70,0x96,0x92,0x45,0xE4,0x90,0x54,
0xBB,0x3E,0xD3,0x9E,0xDB,0x57,0x9C,0x90,0x48,0xA8,0x7E,0x11,0xEA,0x13,0x6B,0x76,
0xD2,0xDF,0x4D,0x11,0x86,0x5B,0xE9,0x3C,0xD7,0xC8,0xC1,0x63,0x80,0x37,0x11,0xD8,
0x9C,0x0E,0x2B,0xD1,0x55,0xE2,0x95,0xB7,0x67,0x8F,0x1C,0x25,0x5F,0x8E,0x7A,0x23,
0xD0,0x29,0x77,0x12,0xB8,0xED,0x48,0x0E,0x3A,0x52,0xB1,0xDC,0x73,0x5D,0x84,0x09,
0x45,0x28,0xF9,0x5F,0x9E,0x80,0xF3,0xDE,0x8F,0x97,0x67,0x7D,0xD9,0xFC,0x31,0x40,
0x00,0x62,0xA7,0x82,0x45,0x33,0x53,0xB6,0x87,0x5B,0xD3,0x27,0xB2,0xBD,0x8A,0x3B,
0x9B,0x5B,0x84,0x29,0x24,0x72,0x28,0x65,0x70,0x47,0x42,0x0F,0x51,0x52,0xAC,0x5B,
0xBF,0x88,0x54,0x82,0xD1,0x5F,0xA3,0x91,0xD0,0x72,0x2A,0x25,0xCA,0xF4,0x63,0x85,
0x47,0x19,0x29,0x45,0xD9,0xAD,0x4C,0x6D,0x03,0xC0,0x3A,0x2F,0x84,0xF4,0xE8,0xA0,
0xD3,0xED,0x22,0xB6,0x8A,0x35,0xC2,0x45,0x18,0x01,0x63,0xE7,0xA0,0x03,0x80,0x3D,
0xAB,0x0B,0xE3,0xFF,0x00,0x8B,0x23,0xF8,0x7B,0xF0,0x13,0xC6,0xFA,0xEB,0x11,0x1A,
0xE8,0xBE,0x1F,0xBF,0xBD,0x07,0x38,0xC1,0x8E,0xDA,0x47,0x1F,0xA8,0x15,0xC2,0xFC,
0x1C,0xFD,0xAB,0x35,0x0F,0x89,0xBF,0x1F,0x7C,0x43,0xE0,0xBB,0xBF,0x0C,0xB6,0x97,
0x0E,0x8C,0x92,0x6C,0xBB,0x13,0x34,0x9E,0x73,0x46,0xC0,0x10,0x7E,0x50,0x00,0x20,
0xE6,0xBC,0xF7,0xFE,0x0B,0x61,0xF1,0x6D,0x3E,0x0F,0xFF,0x00,0xC1,0x32,0x3E,0x29,
0x5E,0x99,0x3C,0xBB,0x8D,0x5A,0xC2,0x3D,0x12,0xDC,0x03,0x86,0x69,0x2E,0xE6,0x48,
0x38,0xF7,0x0A,0xEC,0xDF,0x45,0x35,0x8E,0x0A,0xAD,0x1A,0xD6,0xF6,0x5D,0xED,0xB5,
0x8F,0x5F,0x88,0x32,0xAC,0x7E,0x5D,0x5F,0xD9,0x66,0x2B,0xDF,0x94,0x54,0xFE,0x25,
0x2B,0xA9,0x2B,0xA7,0x74,0xDE,0xE7,0xF3,0x46,0xEF,0xE6,0x39,0x6F,0xEF,0x1C,0xD2,
0x51,0x45,0x7D,0xC9,0xF2,0xE7,0xD5,0x3E,0x08,0xF1,0x67,0x88,0x3E,0x37,0x78,0x53,
0xC3,0xFA,0x16,0x87,0x08,0x4D,0x73,0x5E,0x96,0xDB,0x49,0x58,0x59,0xB1,0xBD,0xDE,
0xE1,0xA5,0x23,0xD7,0x2C,0xF3,0x39,0xC7,0x60,0xA4,0xF7,0xAF,0xD2,0xEF,0x8D,0xAB,
0x7D,0xFB,0x20,0x7C,0x28,0xD2,0x1E,0xFE,0xEF,0x40,0x86,0xE2,0xD6,0xD6,0x35,0xBD,
0xBF,0xD4,0xE7,0x78,0xEC,0xAC,0x80,0x01,0x07,0x0A,0x0B,0xCB,0x23,0xB6,0x15,0x51,
0x71,0xDC,0x92,0x3B,0xFE,0x5C,0xFF,0x00,0xC1,0x38,0x7C,0x4F,0xAA,0xFC,0x25,0xFD,
0xBF,0x3E,0x1B,0x45,0xE2,0xB5,0x16,0x36,0x3A,0x7E,0xAE,0xC0,0x45,0x28,0x3E,0x5C,
0x37,0x6D,0x13,0x22,0xBC,0x9F,0xED,0x02,0x71,0xED,0xC8,0xAF,0xDD,0xAF,0xDA,0x1B,
0xF6,0x7C,0xF0,0xBF,0xC6,0x7D,0x0E,0xDF,0x53,0xD7,0x2C,0x2D,0xFC,0x44,0xD1,0x2A,
0xCD,0x05,0xBD,0xC6,0x25,0xB4,0x81,0x87,0x3E,0x67,0x96,0x7E,0x52,0xC3,0x3C,0x12,
0x0E,0x3B,0x57,0xE2,0x9C,0x59,0x6C,0x5D,0x44,0xA5,0x06,0xFD,0x9A,0x5A,0x6D,0xBB,
0xD7,0xF2,0xD3,0xCC,0xFD,0x67,0x83,0x25,0x3C,0x2D,0x27,0xCB,0x2B,0x7B,0x49,0x35,
0x7B,0x75,0x49,0x5B,0xE5,0xAD,0xDB,0x3E,0x76,0x8F,0xC6,0x3E,0x22,0xF1,0x77,0xC2,
0x2F,0x10,0x59,0xA5,0xA8,0xBF,0xD7,0xE2,0x8C,0xDA,0x1B,0x74,0x56,0xB0,0x5F,0x33,
0x21,0x5D,0x37,0x6E,0x24,0x28,0x04,0x9E,0x1B,0x24,0x71,0x9C,0x9C,0x8F,0x81,0x7F,
0x6E,0x1F,0x0E,0x7C,0x4F,0xFF,0x00,0x82,0x70,0x7C,0x7F,0xD3,0xFE,0x28,0xF8,0x53,
0x50,0xB5,0xD2,0xF4,0x4F,0x1E,0x42,0x34,0xA9,0x5F,0x47,0x8A,0x48,0x61,0x33,0x44,
0x83,0xF7,0x33,0xC2,0xE5,0xB6,0xC8,0xD1,0xA8,0x90,0x1D,0xCE,0x0B,0x2C,0x98,0x3C,
0x35,0x7E,0x96,0xEA,0xB3,0xC3,0xE0,0xE8,0x20,0x8A,0xD2,0xDE,0x39,0x62,0x28,0xD2,
0xEC,0x8D,0x82,0xE0,0x8E,0x15,0x4E,0x7A,0x03,0x8C,0x13,0xD8,0x0E,0x95,0xE4,0xBF,
0xB6,0x4D,0xC7,0x80,0x3E,0x3F,0x7E,0xCD,0xCB,0xA0,0x78,0xFA,0xEA,0xFA,0xDB,0xC3,
0xBA,0xB6,0xAD,0x6B,0x6D,0x0D,0xF6,0x81,0x6B,0xFD,0xA5,0x2E,0x9B,0xA8,0xC6,0x24,
0x91,0x58,0x20,0x20,0xC8,0x8A,0xAA,0xFB,0xF6,0xED,0x21,0x0B,0x74,0xE7,0x1F,0x3D,
0xC3,0xB8,0xCA,0xD3,0xC5,0x7B,0x05,0x1B,0x45,0xBB,0x7D,0xFB,0x7D,0xDD,0xCF,0xA7,
0xE2,0x9C,0xB6,0x9C,0x70,0x52,0xC4,0xB7,0xEF,0x47,0x5F,0x2B,0xAD,0xFE,0xFD,0x74,
0x39,0x4F,0xF8,0x25,0x87,0xED,0x3D,0x2F,0xED,0x05,0x23,0x47,0xA9,0x69,0x3E,0x25,
0xD6,0xB5,0xA6,0x95,0xEF,0xEE,0xF5,0x3B,0x98,0x99,0xE0,0xB7,0x8C,0x61,0x55,0x17,
0x3C,0x17,0x2C,0x5B,0x0A,0x0E,0x00,0x0C,0x7A,0x9A,0xFD,0x38,0xF0,0x1F,0x89,0x6C,
0xE3,0xB2,0x8D,0x92,0x68,0xD1,0x19,0xBC,0xB0,0x1C,0xEC,0x21,0xBF,0xBB,0x83,0xCE,
0x7D,0xAB,0xCE,0x7F,0xE0,0x9F,0x1F,0x04,0xB4,0xBD,0x13,0xF6,0x44,0xD0,0x2D,0x6C,
0xB4,0x5D,0x2F,0x4C,0xD4,0xAD,0xB4,0xCB,0x71,0x23,0x69,0xD1,0xC4,0x2D,0xEF,0x26,
0x58,0x94,0x3C,0xC8,0xF1,0xE5,0x5D,0x24,0x6C,0xB2,0xB6,0x4E,0xE0,0xC0,0xF7,0xC5,
0x78,0xAF,0xED,0xA9,0xE3,0x5F,0x13,0x78,0x57,0x59,0xF1,0x46,0xB7,0xA7,0xDA,0x89,
0x75,0x1F,0x0E,0x68,0xEF,0x06,0x97,0x6A,0x72,0xA8,0xF2,0x94,0x1B,0x9D,0xC0,0xFB,
0xD8,0x2D,0x90,0x4F,0x20,0x03,0x8C,0x57,0xD7,0x63,0x1D,0x6C,0x12,0xF6,0xB2,0xD7,
0x55,0xF2,0x3E,0x1B,0x2B,0xC3,0x51,0xCD,0xEB,0xBC,0x34,0x1F,0x2D,0x93,0xD7,0x7B,
0xF6,0xD3,0xCF,0xF0,0x47,0xDD,0x50,0x5E,0xA4,0xE3,0x82,0x33,0x52,0x86,0x04,0xFA,
0x57,0xCE,0x1F,0xB2,0x7F,0xC7,0xBD,0x77,0xC7,0x1F,0x0A,0xF4,0x79,0x3C,0x4F,0x64,
0x96,0x9A,0xC0,0x88,0x47,0x3C,0x96,0xEE,0x64,0x85,0x9C,0x70,0x79,0x3C,0x83,0xC7,
0x7F,0xCE,0xBD,0xA2,0xCF,0xC5,0x0C,0xC4,0x64,0x93,0xC7,0x7E,0xF5,0xE8,0xE1,0xB3,
0x98,0x55,0x8A,0x7B,0x7A,0x9E,0x1E,0x61,0x91,0xD6,0xC2,0xD6,0x95,0x19,0x34,0xF9,
0x5D,0xAE,0xB5,0x4F,0xD0,0xEA,0x01,0xC1,0xF5,0xA7,0x15,0x1B,0x37,0x70,0x32,0x78,
0x00,0xFF,0x00,0x93,0x59,0xB6,0x1A,0xC0,0xB9,0x1E,0xF5,0x71,0x27,0x0F,0xD3,0x9A,
0xF5,0xA1,0x88,0x84,0x95,0xCF,0x1E,0x54,0xE5,0x17,0x66,0x89,0x32,0x72,0x30,0x09,
0x3E,0xD5,0xCA,0x78,0x83,0xE3,0xD7,0x83,0xBC,0x2D,0x7A,0xF6,0xF7,0xFE,0x27,0xD2,
0x6D,0xEE,0x22,0x38,0x68,0xC4,0xDE,0x63,0x21,0xF4,0x21,0x33,0x83,0xEC,0x6B,0xC0,
0x3E,0x2F,0xFC,0x7D,0xBD,0xF8,0xEF,0xF1,0x5A,0xC7,0xC0,0xFA,0x06,0xB0,0xBA,0x27,
0x87,0xAF,0x6F,0x53,0x4E,0x93,0x50,0x4C,0xE6,0xED,0x99,0xB6,0x97,0x24,0x10,0x4C,
0x79,0xE0,0x28,0x23,0x77,0x7E,0x0F,0x1A,0xDE,0x3D,0xFF,0x00,0x82,0x59,0xF8,0x97,
0xC3,0x9A,0x71,0x9F,0xC3,0xDE,0x21,0xD3,0xB5,0xF7,0x45,0xCB,0x5B,0xCD,0x6C,0x6C,
0xA4,0x6F,0x65,0x3B,0x9D,0x49,0xFA,0x95,0xAF,0x7A,0x18,0x0C,0x35,0x17,0x15,0x98,
0x55,0xF6,0x6E,0x6A,0xE9,0x59,0xED,0xE6,0xED,0x65,0xE8,0xCF,0x82,0xC6,0x71,0x46,
0x32,0xBB,0xA9,0xFD,0x8B,0x87,0xF6,0xD1,0xA6,0xED,0x29,0x5D,0x6F,0xE5,0x14,0xEE,
0xFD,0x56,0xE7,0xBB,0x78,0x47,0xE2,0xA7,0x86,0x3C,0x7C,0xC5,0x74,0x6D,0x63,0x49,
0xBF,0x9F,0x19,0x29,0x0C,0xCB,0xE6,0x91,0xEB,0xB0,0xE1,0xB1,0xEF,0x8A,0xFC,0xAB,
0xFF,0x00,0x83,0xA8,0x3F,0x68,0x16,0xD3,0xFC,0x29,0xF0,0xCF,0xE1,0x3D,0xBC,0x8E,
0x92,0x5E,0xDD,0x4B,0xE2,0xAD,0x4E,0x32,0x0A,0x9D,0x91,0xAB,0x5B,0xDA,0x03,0xEA,
0x09,0x92,0xE5,0x88,0x3F,0xDC,0x43,0xF4,0xFD,0x08,0xFD,0x89,0xBF,0x61,0xBD,0x43,
0xC2,0x7E,0x2F,0x1E,0x2A,0xF1,0xB5,0x82,0x41,0x35,0x82,0xA3,0xE9,0x76,0x2C,0xC1,
0xCA,0xC8,0x46,0x4C,0xB2,0x63,0xBA,0x7D,0xD0,0xBE,0xB9,0x3D,0x85,0x7E,0x7D,0xFF,
0x00,0xC1,0xD8,0x9F,0x0F,0xE5,0xF1,0xBF,0x8E,0xFC,0x0F,0xE2,0x4D,0x26,0x3B,0x5B,
0x95,0xF0,0x66,0x98,0xF6,0x3A,0xD1,0x8D,0x7F,0x7F,0x6E,0xB7,0x13,0x07,0x84,0xB1,
0xEE,0x80,0xE7,0x8E,0xAB,0xE6,0x83,0xC8,0x24,0x8E,0x5A,0x70,0xC3,0xFF,0x00,0x69,
0x2A,0x18,0x47,0xCF,0x18,0xA6,0xDB,0xFF,0x00,0x86,0xDF,0xFC,0xCF,0x5F,0x2D,0xCD,
0x31,0x35,0x70,0x31,0xAF,0x99,0xC1,0x52,0x94,0xE5,0x64,0xAE,0xF5,0xED,0xA3,0xD9,
0xBE,0x8B,0x5D,0x0F,0xC6,0x5A,0x28,0xA2,0xBE,0x8C,0xF4,0xCF,0xA5,0xB4,0x8F,0x16,
0x69,0x3E,0x1C,0x78,0x35,0x8D,0x5A,0xEE,0xDB,0x4A,0xBA,0x6D,0x5B,0xED,0x36,0x37,
0x73,0x42,0x1A,0x37,0x74,0x2B,0xB5,0x1D,0x73,0xF2,0xAF,0x0C,0xA7,0xB2,0x89,0x90,
0x1E,0xE6,0xBF,0x65,0xBE,0x0F,0x7C,0x7E,0xB2,0xF8,0xA7,0xFB,0x3D,0xE9,0x37,0x1E,
0x1E,0xBD,0xB5,0xBA,0x8E,0xF2,0xCC,0x07,0xB7,0x49,0xC3,0xCB,0x6A,0xE0,0x7C,0xEA,
0xBD,0xDD,0x01,0xE8,0x7A,0xE0,0x8C,0x80,0x6B,0xF0,0xAF,0xF6,0xCA,0xF0,0x96,0xB5,
0xAB,0x6B,0xD7,0x33,0xDA,0x58,0x4B,0x1E,0x8F,0x6B,0x09,0x69,0x60,0x89,0x1C,0xC5,
0x66,0xE0,0x82,0xE4,0x6F,0xCB,0x6D,0xDC,0xEB,0x9C,0x9C,0x86,0x60,0x0F,0x41,0x5E,
0x6D,0xF0,0x67,0xF6,0xAD,0xF1,0xCF,0xC0,0xAB,0x19,0x2C,0xFC,0x3D,0xAB,0xCD,0x15,
0x8C,0x8D,0xBD,0xAD,0x25,0xFD,0xE4,0x68,0xE3,0xF8,0x94,0x1E,0x54,0xFD,0x2B,0xF2,
0x5C,0xF3,0x05,0x2A,0xB2,0x71,0x8E,0x92,0x4A,0xD7,0x3F,0x42,0xC8,0xF3,0xC8,0xE1,
0x1C,0x7D,0xBA,0x7C,0x8F,0xDE,0x5A,0x75,0xF4,0xD3,0xF0,0xED,0xEA,0x7E,0xF3,0x6A,
0x3F,0x0E,0x34,0x7F,0x1B,0x5F,0xFF,0x00,0xC4,0xCD,0x2E,0x67,0xC2,0x08,0xDE,0x29,
0x27,0x90,0x42,0xFC,0x9E,0xA8,0x08,0x0C,0x39,0xE8,0x72,0x2B,0x89,0xF8,0xDB,0xFB,
0x44,0xE8,0xBF,0xB1,0xDF,0xED,0x15,0xFB,0x3C,0x69,0x5A,0x5A,0xE9,0xF7,0x11,0xCD,
0xAD,0xDE,0xB5,0xF6,0x8A,0x23,0x52,0x7E,0xC5,0x25,0xB0,0x84,0x5C,0x63,0x6B,0x18,
0xC8,0x72,0x55,0x1F,0x8C,0xE6,0x41,0xC8,0x0D,0x5F,0x99,0xBF,0x04,0xFF,0x00,0xE0,
0xA0,0x5F,0x14,0xBE,0x3D,0x78,0xCA,0xCF,0xC1,0xFA,0x87,0x8C,0xAE,0xB4,0x58,0xB5,
0x49,0x16,0x38,0xEE,0x21,0xB9,0x7B,0x66,0x0F,0x9C,0x05,0x69,0x81,0x32,0x22,0x92,
0xD8,0xC8,0x3C,0x1C,0x75,0x19,0x15,0xF4,0x2F,0xEC,0x4F,0xFF,0x00,0x04,0xE2,0xF1,
0x27,0x8B,0xBC,0x59,0x7B,0xE2,0xBF,0x12,0xFC,0x42,0xD6,0xF4,0x7D,0x40,0xEB,0x53,
0xDA,0xEA,0x13,0xCD,0x67,0xF6,0xFB,0xEB,0x94,0x81,0xC0,0x8D,0xB7,0xDC,0xF2,0xCB,
0x95,0xDC,0x79,0xC8,0x00,0x64,0x71,0xC7,0xCC,0x65,0xB9,0x6D,0x6C,0x05,0x7F,0x6A,
0xE7,0xAD,0xB4,0x5F,0x87,0xF5,0xA1,0xF5,0xD9,0xC7,0x11,0x61,0xB3,0x2C,0x27,0xB0,
0x57,0x74,0x9B,0xF7,0xBE,0x5A,0xE8,0xBB,0xBD,0x96,0xA7,0xE9,0xBD,0xA7,0xED,0xFF,
0x00,0xA7,0x7C,0x3E,0xF0,0xED,0xAE,0x99,0xE0,0xFD,0x1B,0x4E,0xD0,0x6C,0xEC,0xEC,
0xE2,0xB4,0x82,0xD6,0xD6,0x1C,0xC1,0x6E,0xB1,0xA0,0x50,0x10,0x1E,0x00,0xE3,0xD2,
0xB8,0xBD,0x43,0xC7,0xDA,0xB7,0xED,0x01,0xE2,0x14,0xBE,0xBA,0xB4,0x8E,0x38,0x1D,
0x19,0x27,0x94,0x21,0x0B,0x28,0x38,0xDD,0xD7,0x8C,0x9C,0x7E,0xB5,0xD4,0xF8,0x33,
0xF6,0x48,0xF0,0x55,0xEF,0x83,0xAC,0xAD,0x6D,0xF5,0x5B,0xAB,0xBD,0x76,0xDE,0x11,
0x1C,0x97,0x97,0x48,0x36,0x5E,0xCA,0x0F,0x2E,0x50,0x70,0x99,0x3D,0x87,0x03,0xD0,
0xE2,0xBD,0x0B,0xE1,0xB7,0xC2,0xEF,0xB2,0xE9,0x30,0x25,0xE2,0x2C,0x6F,0x6A,0xEC,
0x8F,0x1A,0x80,0x01,0xC1,0xC7,0x4F,0xA8,0xAF,0x65,0x51,0xC5,0x62,0x1D,0xAB,0x55,
0xE6,0xBF,0x6D,0x8F,0x09,0x66,0x19,0x7E,0x16,0x2F,0xEA,0x54,0x79,0x5E,0xD7,0x7F,
0x17,0xEB,0xF9,0x93,0x7C,0x30,0xF0,0xC3,0xE9,0x5E,0x17,0x86,0x18,0x6D,0xD2,0x38,
0x49,0x25,0x41,0x5C,0x0C,0x1E,0xF5,0xDC,0x69,0x9A,0x64,0xF0,0x30,0x52,0xEE,0xF9,
0x19,0x00,0x9F,0xBA,0x3E,0xB5,0x7A,0xC7,0x49,0x78,0xF6,0x32,0xA0,0x54,0x51,0xC0,
0xC7,0x0B,0x57,0x5E,0x33,0x1A,0x13,0xD0,0xB7,0x5F,0x7A,0xAC,0x46,0x53,0xA4,0x79,
0x24,0xD3,0x4F,0x7D,0x36,0xEA,0xAD,0xB6,0xBE,0x7F,0x99,0xE3,0x7D,0x7A,0x55,0x1B,
0x6D,0x6E,0x45,0xA4,0x4B,0x24,0x71,0xA2,0x93,0x93,0x8F,0x98,0xE7,0x9A,0xC9,0xF8,
0xE5,0xE2,0xF9,0xFC,0x35,0xF0,0x53,0xC4,0x77,0x90,0xBB,0x2C,0xCB,0x64,0xF1,0xC6,
0xD9,0xE4,0x17,0xF9,0x7F,0xF6,0x6A,0xDC,0x86,0xDF,0x6A,0x60,0x8C,0x7B,0x0E,0x95,
0x8B,0xF1,0x6B,0xC2,0x92,0x78,0xDB,0xE1,0x6E,0xB9,0xA5,0x40,0xBB,0xA7,0xB9,0xB5,
0x6F,0x28,0x0E,0xA5,0xC7,0xCC,0xA3,0xEA,0x48,0xC7,0xE3,0x5E,0x8E,0x41,0x45,0xE1,
0xA7,0x4A,0x18,0x89,0xF3,0x24,0xE3,0x76,0xF4,0xD1,0x59,0x3F,0xCA,0xFF,0x00,0x3E,
0xDA,0x1E,0x1E,0x7E,0xA5,0x53,0x07,0x5B,0xD8,0x2F,0x79,0xC6,0x56,0xF5,0xB3,0xB1,
0xF0,0xA2,0x48,0xD1,0x48,0xAE,0x8C,0xC8,0xE8,0x43,0x2B,0x29,0xC3,0x29,0x1C,0x82,
0x0F,0x62,0x2B,0xF4,0x7F,0xF6,0x18,0xF8,0xC3,0xE2,0x2F,0x8D,0x3F,0x07,0x9B,0x50,
0xF1,0x00,0xB5,0x91,0xEC,0xAE,0x4D,0x8C,0x37,0x31,0x82,0xB2,0x5D,0x04,0x55,0xCB,
0xC8,0x3A,0x6E,0xC9,0xC7,0x18,0xCE,0x33,0xDE,0xBF,0x37,0x99,0xF6,0x86,0xC8,0x60,
0x53,0x20,0x82,0x30,0x41,0x1D,0xAB,0xE8,0x3F,0x81,0x5E,0x2A,0xF8,0x9D,0xF0,0x37,
0x44,0xBA,0xB2,0xF0,0xE6,0xA1,0xA0,0xCD,0x61,0x78,0xF0,0xCC,0x96,0xD3,0x8F,0x39,
0x5E,0x49,0xA0,0x9A,0x54,0x31,0x36,0x00,0x6D,0xCB,0x6F,0x2F,0xDD,0x62,0xA5,0x93,
0x1D,0x6B,0xF5,0xFE,0x2C,0xCB,0xE1,0x8B,0xC2,0x28,0xA7,0x15,0x34,0xEE,0x9B,0xD3,
0x4E,0xBA,0xFD,0xDE,0x47,0xF3,0x77,0x03,0x66,0xB3,0xC0,0xE3,0x9C,0xE4,0xA4,0xE0,
0xD5,0x9A,0x8E,0xBA,0xF4,0xBA,0xFB,0xFC,0xCF,0xB7,0xF5,0x6F,0x8C,0x1E,0x1E,0xD0,
0xBC,0x69,0x6F,0xE1,0xFB,0xDD,0x4A,0x0B,0x4D,0x4A,0xE9,0x84,0x71,0x24,0xAC,0x15,
0x59,0xD9,0x77,0x22,0x64,0xF4,0x66,0x01,0xB6,0x83,0xD7,0x63,0x01,0xCF,0x15,0xF1,
0xCF,0xFC,0x16,0x6B,0xE1,0x97,0x82,0xFC,0x69,0xF0,0xFC,0xE9,0xA6,0x0B,0x44,0xF1,
0x4F,0x88,0x2D,0x6E,0x2D,0xAF,0x04,0x40,0x06,0x96,0xD5,0xA1,0x65,0x12,0x4A,0x3B,
0xB0,0x90,0x47,0xB4,0x9E,0x70,0x1B,0xA8,0x1C,0x79,0x07,0xC6,0x8D,0x2B,0xC5,0x5A,
0xEF,0xC4,0x2D,0x5A,0xEB,0xC4,0xF7,0xF6,0xD7,0xBA,0xB4,0xEC,0x26,0xB8,0x31,0xCB,
0x98,0xCE,0xD8,0x63,0x91,0x40,0x00,0x6D,0xC2,0xC7,0x2A,0xE3,0xB0,0x1B,0xB9,0xF5,
0xF1,0x2F,0xDA,0x13,0xE2,0x6C,0x1F,0x09,0xFE,0x0C,0x78,0x9F,0xC4,0xB7,0x73,0x15,
0x3A,0x75,0x84,0xAD,0x1B,0x3B,0x72,0xF2,0x91,0xB2,0x35,0xC9,0xEE,0x5C,0xA8,0xAF,
0x2B,0x25,0xE1,0x6A,0x78,0x7A,0x90,0xC6,0x46,0xB5,0xEC,0xB5,0x4B,0x67,0x75,0xDF,
0xB7,0xCB,0x53,0xDE,0xCF,0x78,0xD6,0xBE,0x36,0x33,0xCB,0xFE,0xAF,0x67,0x29,0x2E,
0x56,0xF7,0x56,0x7A,0x69,0xFC,0xDE,0x8F,0x4B,0xD8,0xFC,0x5D,0x91,0x76,0x48,0xC3,
0xD0,0xE2,0x92,0x95,0x9B,0x73,0x12,0x7B,0x9C,0xD2,0x57,0x59,0xFA,0xA9,0xFB,0xD3,
0xFB,0x67,0xFF,0x00,0xC1,0x19,0x35,0xBD,0x63,0xC7,0x56,0x9F,0x11,0x3E,0x14,0x78,
0x9B,0x45,0xD3,0x67,0xF1,0x2A,0x31,0xD6,0xFC,0x33,0xE2,0x4B,0x39,0x2E,0x34,0xAB,
0xC9,0x72,0xC1,0xA5,0x8E,0x48,0x8F,0x99,0x0B,0x32,0xB1,0x0C,0x14,0x64,0xEE,0x6F,
0x98,0x02,0x56,0xBF,0x3D,0xBF,0x6B,0x8F,0xF8,0x20,0xC7,0xC6,0x1F,0x0B,0xE8,0x7A,
0x9F,0x8B,0xF4,0x6D,0x07,0xC1,0x97,0x32,0x46,0x7C,0xD7,0xD1,0x3C,0x2D,0x3D,0xCB,
0x8F,0x2C,0x02,0x59,0xE2,0xFB,0x4E,0x58,0x9C,0xFF,0x00,0x06,0x73,0xCF,0x1E,0x95,
0xFD,0x1D,0xF8,0x92,0xDA,0xC6,0x0F,0x0B,0xB4,0xD7,0xF2,0xC7,0x69,0xA7,0x69,0xA8,
0x65,0x79,0x5C,0x80,0xB1,0x2E,0x39,0x39,0x35,0xF2,0xF7,0xC4,0x7F,0xDA,0xEA,0x0B,
0x6D,0x54,0x5B,0x78,0x37,0x4D,0xB0,0xBE,0xB4,0x84,0xFE,0xF2,0xEE,0xFB,0x76,0x24,
0x23,0x3C,0x46,0x00,0xE9,0x8F,0xE2,0x38,0x1E,0x83,0x8C,0x9F,0xCB,0x73,0x3C,0x46,
0x1A,0x85,0xEB,0xE2,0x27,0x6B,0xFE,0x27,0xD9,0xE5,0x38,0x6C,0x4E,0x3E,0x1E,0xC2,
0x8D,0x37,0x2B,0x7D,0xCB,0xE6,0xF4,0x3F,0x98,0x7F,0x82,0x1E,0x2E,0x9F,0xE1,0xB7,
0xC5,0x9B,0x0D,0x4A,0x6D,0x1D,0xAF,0xE7,0xD1,0x2E,0x05,0xD3,0xDA,0xCE,0x19,0x5D,
0x1E,0x23,0xB8,0x33,0x0E,0x30,0x50,0xAE,0x4E,0xE0,0x7A,0x1C,0x8A,0xFD,0xB3,0xFD,
0x83,0xFE,0x20,0xDA,0xFC,0x56,0xF0,0x6D,0xAE,0xA1,0x1D,0xF2,0x5D,0xDD,0xDC,0xA9,
0xB9,0xBE,0xF2,0x4F,0x98,0x96,0xF3,0xB7,0x32,0x23,0x36,0x00,0x07,0x24,0x71,0x80,
0x4E,0x1B,0xD0,0xD6,0x9F,0xED,0x31,0xFB,0x1F,0xFC,0x1D,0xFD,0xBB,0xF5,0x39,0xF5,
0x8F,0x19,0x78,0x2A,0x5F,0x06,0xFC,0x44,0x83,0xFD,0x28,0xEA,0xFA,0x07,0x97,0x0C,
0x7A,0xD1,0x5C,0x00,0x92,0x38,0x5C,0x39,0x23,0x04,0x97,0x45,0x93,0x83,0x87,0x38,
0xCD,0x7A,0xAF,0xC3,0x2F,0x04,0x59,0x7C,0x3A,0xF0,0x8E,0x9D,0xA1,0xD8,0x3C,0xBF,
0x62,0xD3,0xD1,0x61,0x8B,0xCC,0x25,0xDC,0xAE,0xDE,0x06,0x4F,0xE9,0x8E,0x98,0xAF,
0x16,0xB6,0x22,0x8D,0x6E,0x59,0xD1,0x77,0x4C,0xF4,0xA9,0xE0,0xAB,0xE1,0x6F,0x87,
0xC4,0x2B,0x34,0xCF,0x4C,0xF0,0xFD,0x8D,0x8D,0xA2,0xC5,0x3D,0xBB,0x0B,0x79,0x91,
0x81,0x47,0x5E,0xEC,0x57,0xAF,0xBE,0x4E,0x2B,0xD3,0x34,0x2B,0x87,0xBD,0xB3,0x96,
0x78,0xD8,0x9B,0x81,0xFB,0xC3,0x81,0xF2,0x9F,0x5F,0xC7,0xAD,0x79,0x37,0x85,0x4C,
0x92,0xED,0x7F,0x98,0xAF,0xEE,0xC0,0x1B,0x30,0x7D,0x3E,0xBF,0x98,0xED,0x5D,0xFE,
0x9F,0xAD,0xC7,0xE1,0xAD,0x20,0xBC,0xAE,0xE5,0xA5,0x1B,0x50,0x31,0x1B,0x9C,0x92,
0x70,0x06,0x3A,0xE2,0x96,0x1A,0xF0,0x9F,0x32,0xD0,0x8C,0x4D,0x34,0xE0,0x8E,0xCF,
0x49,0xD4,0x9A,0x78,0x94,0xC8,0x76,0x82,0x33,0xD7,0xAF,0xF9,0xE6,0xB4,0xD6,0x61,
0x36,0x0B,0x60,0x81,0xD0,0x0E,0x00,0xAE,0x67,0x40,0x97,0x7D,0x9A,0x33,0x1C,0x67,
0x1E,0xD8,0xCF,0xFF,0x00,0xAE,0xBA,0x1B,0x46,0x0D,0x00,0xC1,0xCD,0x7B,0x10,0xAD,
0x29,0xAB,0xB3,0xCA,0x9D,0x28,0xC7,0x62,0xDA,0x22,0x63,0xA6,0x7D,0xEA,0x40,0xA0,
0x8A,0xAC,0xB2,0x32,0x81,0xE9,0x4E,0x37,0x2A,0xAA,0x4B,0x10,0xAA,0xA0,0x92,0x49,
0xC0,0x51,0xDC,0x93,0xE9,0x57,0x19,0x5B,0x75,0x73,0x09,0x41,0x9E,0x01,0xFB,0x49,
0xFE,0xC9,0xB7,0x3A,0xFE,0xAB,0x73,0xE2,0x0F,0x0C,0x45,0x1C,0x92,0xDD,0x12,0xF7,
0x9A,0x79,0x21,0x4C,0x8E,0x7A,0xC9,0x19,0xE9,0x93,0xDD,0x4E,0x39,0xE4,0x75,0xC5,
0x7C,0xF7,0xE1,0xEF,0x8E,0xDA,0x87,0x8C,0xA0,0x8F,0x51,0xD2,0x7C,0x58,0x75,0x48,
0xE2,0x99,0x1D,0x6E,0x6C,0x6F,0x52,0x75,0x59,0x22,0x12,0x2A,0x9D,0xE8,0x48,0xDC,
0xBE,0x64,0xBC,0xF5,0xCB,0xB6,0x79,0x35,0xF3,0xEF,0xFC,0x16,0x83,0xFE,0x0B,0x67,
0x17,0x8D,0x6D,0x35,0x5F,0x84,0x5F,0x06,0xB5,0x65,0x93,0x49,0x95,0x5E,0xD3,0xC4,
0x7E,0x27,0xB4,0x93,0x22,0xF4,0x1F,0x95,0xAD,0x2D,0x1C,0x71,0xE5,0x63,0x21,0xE5,
0x19,0xDF,0x9D,0xA8,0x76,0xE5,0x9B,0xF2,0x92,0xD2,0xEE,0x5D,0x3E,0x6F,0x32,0x09,
0x65,0x82,0x42,0x31,0xBE,0x37,0x2A,0xD8,0xF4,0xC8,0xE6,0xBF,0x4E,0xC9,0x71,0xB5,
0xD5,0x05,0x1C,0x5C,0x54,0x92,0xDA,0xFB,0xDB,0xCE,0xFF,0x00,0xF0,0xFD,0xCF,0xCA,
0x33,0xEE,0x08,0xC3,0x62,0x31,0x32,0xAF,0x81,0xA8,0xE9,0x4A,0x5A,0xBB,0x6B,0x16,
0xFB,0xA5,0x75,0x6F,0xBE,0xDD,0x91,0xFB,0x73,0xF1,0x7B,0xF6,0x96,0xD2,0x3E,0x16,
0x68,0xF3,0x5D,0x78,0xC3,0xC5,0x76,0x5A,0x7C,0x6F,0x08,0x4D,0x97,0x93,0x2B,0x4F,
0x3A,0x28,0x50,0xAA,0x89,0xCC,0x8F,0x80,0x89,0x8D,0xA0,0xE3,0x68,0xE9,0xCD,0x7E,
0x6B,0x7E,0xD9,0xBF,0xF0,0x50,0x1B,0xBF,0xDA,0x0B,0xC4,0x70,0xE9,0x9A,0x15,0xBC,
0xB6,0xDE,0x0A,0xD3,0xDC,0xE6,0xDA,0xE7,0xE5,0x7D,0x60,0xE0,0x82,0xF3,0x01,0xCA,
0xAE,0x09,0xDA,0xB9,0xCA,0x9C,0x37,0x0D,0x8D,0xBF,0x35,0xBB,0x19,0x24,0x67,0x62,
0x59,0xDC,0xE5,0x89,0xE4,0x93,0x45,0x7A,0x15,0xF1,0x8E,0xA4,0x79,0x23,0x15,0x15,
0xE4,0x19,0x27,0x07,0x50,0xC0,0xD5,0x58,0x8A,0xD3,0x75,0x2A,0x2D,0x9B,0xD9,0x7A,
0x2D,0x75,0xF9,0x9A,0x3E,0x25,0xD1,0xE2,0xD2,0xEF,0x12,0x4B,0x47,0x79,0xB4,0xEB,
0xC5,0xF3,0xAD,0x64,0x71,0xF3,0xEC,0x24,0x8D,0x8F,0x8E,0x03,0xA9,0x05,0x5B,0x1C,
0x64,0x64,0x64,0x10,0x4E,0x75,0x6C,0xC0,0xE6,0xF3,0xE1,0xF5,0xDA,0xC9,0xCF,0xF6,
0x7E,0xA1,0x01,0x85,0x8F,0xF0,0x89,0xA3,0x9B,0x7A,0xE7,0xBE,0x4C,0x31,0x90,0x3B,
0x6D,0x73,0xDC,0xE7,0x1A,0xB8,0x62,0xFA,0x33,0xEC,0x11,0xFD,0x45,0xFF,0x00,0xC1,
0x49,0x7F,0x68,0x58,0x3C,0x05,0xE0,0xCD,0x27,0xC2,0x50,0x5D,0x22,0xDF,0x78,0x89,
0xA3,0x96,0xF0,0x03,0xCD,0xBD,0xA8,0x39,0x1F,0xF7,0xD3,0x0F,0xD3,0xDA,0xBE,0x3B,
0xF1,0x6F,0xC4,0x38,0x34,0x5D,0x6E,0x2B,0x5D,0x29,0x5E,0x54,0x23,0x8C,0x36,0xE2,
0xDE,0x98,0xAF,0x6F,0xF8,0xE9,0xF0,0xF3,0x4A,0xFD,0xA6,0xF5,0x3B,0x5B,0xED,0x5E,
0xD2,0x5B,0x5D,0x52,0xC5,0x3C,0x94,0xBE,0xB3,0x7D,0x92,0xCB,0x1F,0xF0,0xC7,0x20,
0x20,0x86,0x03,0x39,0x1C,0x02,0x3D,0x71,0xC5,0x79,0xE1,0xFD,0x8F,0xFC,0x53,0xE1,
0xA9,0xB7,0x69,0x37,0x76,0xB7,0xD6,0xA7,0x94,0x12,0xB7,0x97,0x3A,0x0F,0x70,0x78,
0xFC,0x41,0xAF,0xC2,0xF8,0x87,0x22,0xAF,0x8F,0xC4,0x73,0xA7,0xEE,0xAB,0x5A,0xDD,
0x3B,0xE8,0xEC,0x7E,0xE7,0xC2,0x79,0xAE,0x0B,0x2D,0xC1,0x46,0x84,0xEC,0xA7,0xAB,
0x77,0xD1,0x36,0xFA,0xDF,0xC9,0x14,0x74,0x3F,0x13,0xDC,0x2C,0x62,0x79,0xD4,0x82,
0x06,0x70,0xC7,0x05,0x7B,0xD6,0xF6,0x83,0xF1,0x1C,0x36,0xA1,0x12,0x4B,0x2B,0x34,
0x6E,0x72,0x50,0x90,0x0F,0x4C,0x75,0xAC,0x31,0xF0,0xF7,0x50,0x49,0x64,0x86,0xEE,
0x78,0xE7,0x96,0x2E,0x1D,0x2D,0xCF,0x98,0x01,0xF4,0xC8,0xE3,0xF5,0xA8,0xF5,0x1F,
0x85,0xD2,0xC5,0x62,0xB7,0xD1,0x5C,0xC7,0x1C,0x11,0x8F,0x34,0xC8,0xCD,0x80,0x31,
0xD4,0x11,0xEA,0x3A,0x57,0x1C,0x32,0xBA,0xF4,0x15,0xF0,0xFA,0x25,0xDC,0xF4,0xAA,
0xE2,0xB0,0x38,0xB7,0xCB,0x59,0xA7,0x7E,0xDD,0x3E,0x67,0x7D,0xAA,0xFE,0xD3,0x5A,
0x27,0x86,0xEE,0xD3,0x48,0xD2,0xE4,0x86,0xF3,0x58,0x67,0x58,0xDC,0x4B,0x2F,0x97,
0x15,0xB0,0x1C,0x16,0x20,0xE0,0xB1,0xF6,0x1D,0x4E,0x39,0xAE,0xD7,0xC1,0xD7,0x37,
0x3A,0xEE,0xA1,0x15,0xF6,0xA5,0x33,0xCA,0x4E,0x02,0x27,0x45,0x41,0xEC,0x2B,0xF3,
0xE7,0xE2,0xB4,0xA9,0xE2,0x2F,0x17,0xEA,0xB7,0x96,0xCA,0xF6,0xC6,0xF2,0x54,0x02,
0xEA,0x35,0x29,0x21,0x28,0xA1,0x77,0xF4,0xF4,0x1D,0x0E,0x6B,0xDD,0x3F,0x66,0xAF,
0xDA,0x83,0x53,0xF0,0xDF,0x86,0xF4,0xFD,0x3F,0x56,0xD0,0xF5,0x6D,0x46,0x3B,0x79,
0x12,0x01,0x7E,0x30,0x49,0x0C,0x46,0x0B,0x63,0x8E,0x33,0xED,0x57,0x4F,0x36,0x8D,
0x49,0xF2,0x4D,0x5B,0xF1,0x39,0xF1,0x5C,0x1F,0x56,0x9E,0x1D,0x56,0xA1,0x2E,0x66,
0xFA,0x68,0x9D,0xBD,0x5B,0xFF,0x00,0x23,0xEF,0x2D,0x02,0xE1,0x4C,0x20,0x8E,0x83,
0x07,0xA5,0x74,0x16,0x52,0x2A,0xC4,0x0A,0xE4,0x8A,0xF3,0xB1,0xE3,0xFD,0x27,0xC0,
0xDE,0x14,0x9F,0x5B,0xD7,0x35,0x5D,0x3F,0x45,0xD1,0xED,0x23,0x12,0x5C,0x5E,0xDF,
0xDC,0xA5,0xB5,0xBC,0x0A,0x7B,0xB3,0xB9,0x0A,0x3D,0x3A,0xF2,0x6B,0xE2,0x4F,0xDB,
0x17,0xFE,0x0E,0x22,0xF8,0x7D,0xF0,0x72,0xC2,0xEF,0x46,0xF8,0x51,0x60,0xDF,0x10,
0xFC,0x44,0x72,0x89,0xA8,0xCE,0x1E,0xDB,0x46,0xB3,0x6E,0x9B,0x89,0x38,0x96,0x72,
0x3A,0xED,0x40,0xAA,0x7F,0xBE,0x3A,0x1F,0xAB,0xCB,0x70,0xF5,0x71,0x29,0x46,0x94,
0x5B,0xFC,0xBE,0xF3,0xF3,0x2C,0x64,0xE1,0x42,0x4F,0xDA,0x3F,0xF3,0x3E,0xFF,0x00,
0xF8,0xCD,0xF1,0xBB,0xC2,0x7F,0xB3,0xD7,0xC3,0xDB,0xDF,0x15,0x78,0xD3,0x5E,0xD3,
0xBC,0x3B,0xA0,0xD8,0x0F,0xDE,0xDD,0xDD,0xCA,0x11,0x4B,0x1C,0xED,0x44,0x1D,0x5D,
0xDB,0x07,0x08,0xA0,0xB1,0xEC,0x2B,0xF1,0x2B,0xFE,0x0A,0x89,0xFF,0x00,0x05,0xC6,
0xF1,0x1F,0xED,0x6F,0x16,0xA3,0xE0,0x7F,0x87,0x06,0xFB,0xC2,0x7F,0x0D,0xA5,0x0D,
0x6F,0x77,0x70,0xDF,0xBB,0xD4,0xBC,0x42,0x9D,0x0F,0x98,0x47,0x30,0xC0,0x7B,0x46,
0x0E,0xE6,0x04,0xEF,0x3C,0xEC,0x5F,0x92,0xBF,0x6A,0x1F,0xDB,0x07,0xE2,0x2F,0xED,
0x91,0xE3,0x61,0xAE,0xFC,0x42,0xF1,0x25,0xE6,0xB7,0x3C,0x1B,0x85,0xA5,0xAF,0x11,
0x59,0xE9,0xEA,0xDD,0x56,0x18,0x57,0x08,0x99,0xC0,0xC9,0x03,0x27,0x03,0x24,0xE0,
0x57,0x99,0xD7,0xDB,0x65,0xD9,0x24,0x28,0x35,0x52,0xAF,0xBD,0x2F,0xC1,0x7F,0x99,
0xF3,0xD8,0x9C,0x74,0xAA,0x7B,0xB1,0xD1,0x12,0xD9,0x59,0x4D,0xA9,0x5D,0xC7,0x6F,
0x6F,0x14,0x93,0x4F,0x33,0x04,0x48,0xD0,0x65,0x98,0x9E,0xC0,0x56,0xAB,0xE8,0x7A,
0x66,0x90,0x08,0xD4,0x35,0x27,0x9A,0xE1,0x4F,0xFC,0x7B,0x69,0xE8,0xB2,0xF4,0xEA,
0xAD,0x33,0x10,0x8B,0xE8,0x0A,0x09,0x7B,0xF1,0xC0,0xC9,0xA7,0x4D,0xFD,0x89,0xE0,
0xE9,0xEE,0xE2,0xC8,0xBB,0xD4,0xAE,0x1E,0xC5,0x24,0x1C,0x18,0x62,0x44,0x56,0x94,
0x0F,0x77,0xF3,0x63,0x19,0x1D,0x15,0x5C,0x7F,0x1D,0x64,0x5A,0xC6,0xB2,0x5C,0xC4,
0x8E,0x4A,0xC6,0xCE,0x03,0x36,0x71,0xB4,0x67,0x93,0xCD,0x7B,0x9A,0xB6,0x79,0xED,
0xF5,0x35,0x5A,0xFB,0xC3,0xC0,0x9D,0xBA,0x5E,0xB7,0x8F,0xF6,0xB5,0x68,0x8F,0xF2,
0xB6,0x14,0x2D,0xFE,0x81,0x1B,0xEE,0x5D,0x2B,0x57,0x66,0x1C,0x85,0x93,0x55,0x8C,
0xC6,0x4F,0xB8,0x5B,0x70,0xC4,0x7D,0x18,0x1F,0x71,0x5F,0x4D,0xFC,0x4B,0xFD,0x8D,
0xFE,0x1B,0x78,0x5B,0xF6,0x04,0xF0,0xDF,0xC4,0x8B,0x1F,0x1C,0xDB,0xCF,0xE3,0x3D,
0x50,0xC6,0xB7,0x1A,0x2B,0x3C,0x60,0x46,0xEE,0x4F,0x9B,0x00,0x50,0x7C,0xCD,0xF0,
0x81,0xF3,0x16,0xFE,0xE9,0x27,0x21,0xBE,0x5F,0x93,0x29,0xF2,0x2F,0xEA,0xE7,0x26,
0x0F,0x1B,0x0C,0x4A,0x93,0x85,0xF4,0x76,0xD4,0xD0,0xD5,0x7C,0x42,0xDA,0x8D,0x94,
0x76,0xB0,0xDB,0x5B,0xD8,0xD9,0xC6,0xDE,0x67,0x93,0x06,0xEC,0x3B,0xE3,0x1B,0xD8,
0xB1,0x2C,0xC4,0x02,0x40,0xC9,0x38,0x04,0xE3,0x19,0x39,0xCF,0xA2,0x8A,0x12,0xB6,
0x88,0xED,0x3F,0x6F,0x3E,0x1A,0xFF,0x00,0xC1,0x68,0x7F,0x67,0xFD,0x75,0x70,0xBE,
0x20,0xBB,0xF0,0xFC,0xFC,0x1D,0xBA,0xCE,0x9B,0x71,0xB4,0x72,0x32,0x33,0x1A,0x30,
0xE9,0x9E,0x41,0x35,0xDE,0xD8,0x7F,0xC1,0x41,0x7E,0x07,0x7C,0x43,0x98,0x3D,0xDF,
0xC6,0x9F,0x07,0x24,0x4C,0xD9,0xF2,0x44,0xB2,0xDA,0x20,0x04,0x63,0x1F,0x3A,0x03,
0x8C,0x0E,0x99,0xC7,0xE9,0x5F,0x80,0xD4,0x57,0x91,0x57,0x24,0xA1,0x25,0x64,0xDA,
0x3B,0xD6,0x63,0x5B,0x9B,0x99,0xD9,0xFF,0x00,0x5E,0xA7,0xF4,0x3F,0x67,0xFB,0x6B,
0x7E,0xCE,0x3A,0x45,0x99,0x2D,0xF1,0x77,0xC0,0x48,0xA8,0x31,0xB5,0x2F,0xC3,0x1F,
0xC9,0x46,0x4D,0x79,0xD7,0xC5,0x5F,0xF8,0x28,0x87,0xEC,0xBD,0x69,0x65,0x32,0xA7,
0xC5,0x2D,0x36,0xE1,0xD8,0x92,0xC9,0x61,0x67,0x75,0x30,0x73,0xF4,0xF2,0xF0,0x6B,
0xF0,0x96,0x8A,0xE5,0x7C,0x37,0x87,0x96,0x92,0x6E,0xDF,0x23,0xA2,0x9E,0x77,0x89,
0xA6,0xD4,0xA0,0xD5,0xFE,0x7F,0xE6,0x7E,0x93,0x7C,0x74,0xFF,0x00,0x82,0x99,0x7C,
0x0B,0xB7,0xDE,0x7C,0x31,0x6F,0xE3,0x1F,0x10,0xDD,0xE4,0xE3,0x66,0x9B,0x1D,0x9D,
0xB3,0x9F,0x52,0xF3,0x30,0x60,0x3F,0xED,0x9B,0x57,0x80,0x78,0xCF,0xFE,0x0A,0xB3,
0xE2,0xBB,0xA8,0x56,0xDF,0xC2,0x7E,0x19,0xF0,0xE7,0x85,0x2D,0xE1,0x72,0xF1,0xB6,
0xD7,0xBC,0x9B,0x3E,0xA7,0x76,0xD8,0x8F,0xFD,0xFA,0xFC,0x6B,0xE5,0x8A,0x28,0xC3,
0xF0,0xAE,0x59,0x4A,0x5C,0xCA,0x95,0xDF,0x9E,0xBF,0x86,0xDF,0x81,0xDD,0x5F,0x8B,
0xF3,0x7A,0xB0,0xF6,0x6E,0xB3,0x4B,0xCB,0x4F,0xC7,0x7F,0xC4,0xED,0x3E,0x33,0x7E,
0xD1,0x5E,0x3A,0xFD,0xA1,0xF5,0x78,0xEF,0x7C,0x6D,0xE2,0xBD,0x6B,0xC4,0x92,0xC0,
0x73,0x02,0x5E,0x5C,0x16,0x82,0xD7,0xDA,0x28,0x86,0x23,0x8F,0x8F,0xEE,0x28,0xAE,
0x2E,0x8A,0x2B,0xE8,0x21,0x08,0xC2,0x3C,0xB0,0x56,0x47,0xCD,0xCA,0x4E,0x4F,0x9A,
0x4E,0xEC,0x28,0xA2,0x8A,0xA1,0x1B,0x06,0x3F,0xB5,0x7C,0x3D,0x56,0x4E,0xB6,0x1A,
0x9B,0x79,0xA0,0xF5,0xC4,0xF0,0xAE,0xC2,0x3D,0xBF,0xD1,0xA4,0xCF,0xA6,0x57,0xD6,
0xBB,0xBF,0x85,0x5F,0xB3,0x4D,0xE7,0xC7,0x0D,0x2F,0x47,0x93,0xC3,0xB6,0xFA,0xE9,
0x62,0xD2,0x43,0xAC,0x5D,0x4D,0x64,0x5E,0xD2,0x09,0x7C,0xCF,0xDD,0x24,0x0C,0xB8,
0x0E,0x5A,0x32,0x32,0x19,0x86,0xD2,0x0E,0x4A,0x82,0x33,0xD6,0xFF,0x00,0xC1,0x30,
0xFF,0x00,0x65,0xA8,0xBF,0x6D,0x5F,0xDB,0x33,0xC2,0xFF,0x00,0x0B,0xEF,0x2F,0x5A,
0xC3,0x4A,0xF1,0x67,0x9B,0x0E,0xA5,0x3A,0x10,0x25,0x4B,0x68,0x97,0xED,0x0D,0xB0,
0xFF,0x00,0x7F,0x30,0xAE,0x3D,0xF1,0x9E,0x33,0x5F,0xBD,0xFF,0x00,0x0E,0x7F,0x64,
0xAF,0x08,0xFE,0xCC,0xBE,0x07,0xF1,0xAE,0x9F,0xF0,0xE7,0x41,0x1A,0x1C,0x1F,0x0C,
0xF4,0xD5,0xB4,0x8A,0x0D,0x62,0xE7,0xED,0xBF,0xDA,0x31,0xCA,0x05,0xC4,0x92,0x32,
0x74,0x52,0xD8,0x3B,0x58,0x1E,0x49,0x39,0x18,0x38,0x1C,0x35,0xAB,0xD3,0x85,0x45,
0x09,0x37,0x75,0xAD,0x95,0xB5,0xBF,0xBB,0xAD,0xFA,0x5D,0xF4,0x4F,0x54,0x9E,0xC7,
0x91,0x9A,0x63,0x6B,0x51,0x85,0xA8,0x2B,0xBD,0x75,0x77,0xD3,0x47,0x27,0x64,0xB7,
0x76,0x57,0xB3,0x69,0x79,0xDF,0x43,0xF0,0x33,0xF6,0xD4,0xFD,0x8E,0x3C,0x69,0xFB,
0x23,0x5A,0xF8,0x7A,0xCB,0xC4,0x76,0xF7,0xB0,0x5B,0x4D,0x6E,0x21,0x2D,0x71,0x6E,
0x21,0x73,0x29,0x69,0x24,0x0A,0x70,0xEE,0x36,0xEC,0x00,0x81,0xBB,0x8C,0x1E,0x32,
0x0D,0x78,0x1D,0x7F,0x42,0xBF,0xB4,0x27,0xC3,0x6D,0x2B,0xF6,0xA2,0xFD,0x9F,0xED,
0xED,0x7C,0x7B,0xA2,0x5A,0x25,0xB2,0x78,0x6E,0x7B,0x37,0xD4,0x25,0x6F,0x31,0xEE,
0x42,0x02,0xF0,0xDD,0x9D,0xC3,0x29,0x24,0x43,0xF8,0xB7,0x12,0x4E,0x7A,0x0E,0x0F,
0xF3,0xD6,0xE0,0x2B,0x90,0x0E,0x40,0x35,0xB5,0x1C,0x44,0x67,0x29,0x53,0x5B,0xC7,
0x7E,0xAA,0xFA,0xEC,0xFE,0x45,0xE5,0x15,0xEA,0xD6,0xC3,0xAA,0xB5,0x95,0xAF,0xAA,
0xD2,0xDA,0x34,0x9A,0xBA,0xE8,0xFA,0x79,0xDA,0xEB,0x46,0x25,0x14,0x51,0x5D,0x07,
0xA8,0x14,0x51,0x45,0x00,0x14,0x51,0x45,0x00,0x14,0x51,0x45,0x00,0x14,0x51,0x45,
0x00,0x14,0x51,0x5D,0xC7,0xEC,0xDD,0xA4,0x78,0x7B,0x5E,0xF8,0xDD,0xE1,0xFB,0x2F,
0x14,0xB5,0xBA,0xE8,0xB7,0x33,0x34,0x72,0x89,0xE6,0xF2,0x61,0x67,0x31,0xB7,0x94,
0xB2,0x3E,0x46,0xD4,0x32,0x6C,0x04,0x92,0x00,0x04,0xE4,0x81,0xCD,0x29,0x4A,0xC9,
0xB2,0x67,0x2E,0x58,0xB9,0x3E,0x85,0xAF,0xD9,0x7B,0xE2,0xEF,0x88,0x3F,0x67,0x8F,
0x8C,0x5A,0x57,0xC4,0x2F,0x0D,0x6A,0x12,0xE9,0x5A,0x9F,0x83,0x65,0x17,0xF1,0x5C,
0xA8,0x04,0x33,0xE0,0xAA,0xC0,0x41,0xE0,0xF9,0xB9,0x2A,0x57,0xA9,0x5D,0xE7,0x80,
0xA4,0x8F,0xB1,0x3E,0x22,0x7F,0xC1,0xC3,0xBF,0x12,0xBC,0x5F,0xE1,0x39,0x74,0xAF,
0x0D,0xF8,0x1B,0xE1,0xEF,0x81,0xAE,0xB5,0x99,0x60,0xFE,0xD9,0xD4,0x2D,0x60,0x9A,
0xE3,0xED,0xD1,0xC6,0x41,0xF2,0x44,0x72,0x12,0xB0,0xC0,0x48,0xC9,0x8D,0x01,0x18,
0x27,0x18,0xAE,0x77,0xFE,0x0B,0x0D,0xF0,0xF3,0xF6,0x63,0xF8,0x49,0xE1,0xEF,0x87,
0x3E,0x1D,0xFD,0x9F,0xF5,0x59,0xAF,0x35,0xCB,0x48,0xE6,0x1E,0x2F,0x85,0x2E,0x26,
0x9A,0x3F,0xB4,0x22,0xA4,0x6A,0xD3,0x79,0x9F,0x76,0x75,0x71,0x28,0xDA,0xA4,0xA8,
0x0E,0xFC,0x0C,0xE5,0xBE,0x1B,0xAF,0x37,0x2F,0xC5,0x43,0x1D,0x45,0x62,0x5C,0x1C,
0x6F,0xD2,0x4A,0xCF,0x47,0xD7,0xE7,0xAA,0xE9,0xD8,0xE7,0xAD,0x82,0xA5,0x52,0x7C,
0xD3,0x57,0x6B,0xAF,0xAA,0xFF,0x00,0x83,0x63,0xEB,0x8F,0xDA,0x6F,0xFE,0x0B,0x07,
0xF1,0x63,0xE3,0xA7,0x82,0x35,0x2F,0x06,0x48,0x3C,0x29,0xA0,0x69,0xB7,0x3E,0x65,
0x9D,0xED,0xC6,0x81,0x0C,0xC1,0xAF,0xE2,0xC9,0x56,0x0B,0x24,0xB2,0xB9,0x58,0xDC,
0x7F,0x70,0x29,0x20,0xFA,0x1C,0x57,0xC8,0xF4,0x51,0x5D,0xD4,0x68,0x53,0xA4,0xB9,
0x69,0xAB,0x23,0xA2,0x29,0xDB,0x5D,0xC2,0x8A,0x28,0xAD,0x4A,0x3F,0xFF,0xD9,
};

jpeg_data[]中的数据就是1_16.jpg文件中的数据,可以使用Notepad++,以16进制形式打开图片文件就可以看到跟这一模一样的数据了,如下:

这里我是写了一段代码读取图片数据,然后把16进制数据以ASCII形式写入新的文件中,这段代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

/*
* 读取二进制图像转换为文本数据存储
*/
int main( int argc, char* args[] )
{
    FILE *pFile = NULL,*pNFile = NULL;
    uint8_t buffer[200],ret = 0;
    int ch = 0;
    if(argc < 2)
    {
        printf("Usage: fileName\r\n");
        return;
    }
    printf("argc:%d\r\n",argc);

    for(ret = 0; ret < argc; ret++)
    {
        printf("args[%d]:%s\r\n",ret, args[ret]);
    }

    pFile = fopen(args[1],"rb");
    pNFile = fopen("NEW.txt","w");
    ret = 0;
    while(!feof(pFile))
    {
        ch = getc(pFile);
        fprintf(pNFile,"0x%02X,",ch);
        ret+=1;
        if(ret%16 == 0)
        {
            ret = 0;
            fprintf(pNFile,"\n");
        }
    }
    fclose(pFile);
    fclose(pNFile);
}

这里我是使用CodeBlock编辑运行的,运行完之后,在生成的文件末尾有个0xFFFFFFFF数据,手动删除即可,当然大家也可以自己编写一个小工具实现读取图片数据的功能,现在jpeg数据已经有了,就相当于我们省略了编码步骤,因为我们的数据已经是编码过了的,现在就差把数据发往USB主机了,这里就需要一个设置接口的指令的处理了,因为在默认情况下VS接口是使用的带宽为0的配置,如果想要发送视频数据,就需要把VS接口配成交替配置1,同时,我们需要一个标识,来标识当前设备处于各种状态,我使用play_status变量来进行标记,usbd_uvc.c中的Setup函数最后修改成如下:

/**
  * @brief  USBD_UVC_Setup
  *         Handle the UVC specific requests
  * @param  pdev: instance
  * @param  req: usb requests
  * @retval status
  */
static uint8_t  USBD_UVC_Setup (USBD_HandleTypeDef *pdev,
                                USBD_SetupReqTypedef *req)
{
  uint8_t *pbuf;
  uint16_t len;

  USBD_UVC_HandleTypeDef *huvc;
  huvc = pdev->pClassData;
  switch (req->bmRequest & USB_REQ_TYPE_MASK)
  {
  case USB_REQ_TYPE_CLASS :
    switch (req->bRequest)
    {
    case UVC_GET_CUR:
      UVC_REQ_GetCurrent(pdev, req);
      break;

    case UVC_SET_CUR:
      UVC_REQ_SetCurrent(pdev, req);
      break;

    default:
      USBD_CtlError (pdev, req);
      return USBD_FAIL;
    }
  	break;

  case USB_REQ_TYPE_STANDARD:
    switch (req->bRequest)
    {
    case USB_REQ_GET_INTERFACE:
	  USBD_CtlSendData (pdev,(uint8_t *)&huvc->alt_setting,1);
	  break;
	case USB_REQ_SET_INTERFACE:
	  if(LOBYTE(req->wValue) <= USBD_MAX_NUM_INTERFACES)
	  {
	  	huvc->alt_setting = LOBYTE(req->wValue);
		if(huvc->alt_setting == 1)
		{
		  BSP_LED_Off(LED_RED);
		  play_status = PLAY_STATUS_READY;
		}
		else
		{
		  BSP_LED_On(LED_RED);
		  play_status = PLAY_STATUS_STOP;
		}
	  }
	  else
	  {
	  	USBD_CtlError(pdev, req);
	  }
	  break;
    default:
      USBD_CtlError (pdev, req);
	  break;
    }
  default:
  	USBD_CtlError(pdev, req);
  	break;
  }
  return USBD_OK;
}

play_status有三种状态:PLAY_STATUS_STOP、PLAY_STATUS_READY、PLAY_STATUS_STREAMING,这里还有两个请求的处理,SET_CUR和GET_CUR,这两个请求的函数如下:

/**
  * @brief  UVC_Req_GetCurrent
  *         Handles the GET_CUR Video control request.
  * @param  pdev: instance
  * @param  req: setup class request
  * @retval status
  */
static void UVC_REQ_GetCurrent(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
  USBD_UVC_HandleTypeDef   *huvc;
  huvc = pdev->pClassData;

  memset(huvc->control.data, 0, USB_MAX_EP0_SIZE);

  if(HIBYTE(req->wValue) == VS_PROBE_CONTROL)
  {
    /* Prepare the reception of the buffer over EP0 */
    USBD_CtlSendData (pdev,
                     USBD_UVC_ProbeControl,
                     req->wLength);
  }
  else if(HIBYTE(req->wValue) == VS_COMMIT_CONTROL)
  {
  	/* Prepare the reception of the buffer over EP0 */
  	USBD_CtlSendData (pdev,
                     USBD_UVC_CommitControl,
                     req->wLength);
  }
  else
  {
  	/* Send the current mute state */
  	USBD_CtlSendData (pdev,
                    huvc->control.data,
                    req->wLength);
  }

}

/**
  * @brief  UVC_Req_SetCurrent
  *         Handles the SET_CUR Video control request.
  * @param  pdev: instance
  * @param  req: setup class request
  * @retval status
  */
static void UVC_REQ_SetCurrent(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
  USBD_UVC_HandleTypeDef   *huvc;
  huvc = pdev->pClassData;

  if (req->wLength)
  {
  	if(HIBYTE(req->wValue) == VS_PROBE_CONTROL)
  	{
	  /* Prepare the reception of the buffer over EP0 */
      USBD_CtlPrepareRx (pdev,
                         USBD_UVC_ProbeControl,
                         req->wLength);
	}
	else if(HIBYTE(req->wValue) == VS_COMMIT_CONTROL)
	{
	  /* Prepare the reception of the buffer over EP0 */
      USBD_CtlPrepareRx (pdev,
                         USBD_UVC_CommitControl,
                         req->wLength);
	}
	else
	{
      /* Prepare the reception of the buffer over EP0 */
      USBD_CtlPrepareRx (pdev,
                         huvc->control.data,
                         req->wLength);
	}

    //huvc->control.cmd = UVC_SET_CUR;     /* Set the request value */
    //huvc->control.len = req->wLength;          /* Set the request data length */
    //huvc->control.unit = HIBYTE(req->wIndex);  /* Set the request target unit */
  }
}

这里用到了两个数组,两个数组是相同的,如下:

/* USB Probe & Commit Control */
static uint8_t USBD_UVC_ProbeControl[USB_UVC_VIDEOCONTROL_SIZE] =
{
  0x00,	/* bmHint: indicate which fields shall be kept constant */
  0x00,
  0x01,	/* bFormatIndex: Video Format Index from a Format Descriptor */
  0x01,	/* bFrameIndex: Video Frame Index from a Frame Descriptor */
  0x2A,	/* dwFrameInterval: Frame interval in 100ns uints */
  0x2C,
  0x0A,
  0x00,
  0x00,	/* wKeyFrameRate: */
  0x00,
  0x00, /* wPFrameRate: */
  0x00,
  0x00,	/* wCompQuality: */
  0x00,
  0x00,	/* wCompWindowSize: */
  0x00,
  0x00,	/* wDelay: */
  0x00,
  0x00,	/* dwMaxVideoFrameSize: */
  0xA0,
  0x00,
  0x00,
  0x00,	/* dwMaxPayloadTransferSize: */
  0x00,
  0x00,
  0x00,
  0x00,	/* dwClockFrequency: */
  0x00,
  0x00,
  0x00,
  0x00,	/* bmFramingInfo: */
  0x00,	/* bPreferedVersion: */
  0x00,	/* bMinVersion: */
  0x00,	/* bMaxVersion: */
};
static uint8_t USBD_UVC_CommitControl[USB_UVC_VIDEOCONTROL_SIZE] =
{
  0x00,	/* bmHint: indicate which fields shall be kept constant */
  0x00,
  0x01,	/* bFormatIndex: Video Format Index from a Format Descriptor */
  0x01,	/* bFrameIndex: Video Frame Index from a Frame Descriptor */
  0x2A,	/* dwFrameInterval: Frame interval in 100ns uints */
  0x2C,
  0x0A,
  0x00,
  0x00,	/* wKeyFrameRate: */
  0x00,
  0x00, /* wPFrameRate: */
  0x00,
  0x00,	/* wCompQuality: */
  0x00,
  0x00,	/* wCompWindowSize: */
  0x00,
  0x00,	/* wDelay: */
  0x00,
  0x00,	/* dwMaxVideoFrameSize: */
  0xA0,
  0x00,
  0x00,
  0x00,	/* dwMaxPayloadTransferSize: */
  0x00,
  0x00,
  0x00,
  0x00,	/* dwClockFrequency: */
  0x00,
  0x00,
  0x00,
  0x00,	/* bmFramingInfo: */
  0x00,	/* bPreferedVersion: */
  0x00,	/* bMinVersion: */
  0x00,	/* bMaxVersion: */
};

有关Video Probe and Commit Controls的说明可以查看UVC规范文档以及Example文档,这是一个比较重要的流程,通过它USB主机来设置以及获取视频流的相关信息,而且有些信息在描述符中是弃用的,需要在Probe和Commit中设置和获取。当USB主机设置VS接口为配置1时,USB设备就可以向USB主机发送视频数据流了,关于发送同步数据流的模型在USB_Video_Payload_MJPEG规范中有提到,我们只需要看同步IN流程即可,如下:

这里给出的是高速高带宽的模型,当然全速的模型跟这个差不多,对于高速高带宽而言,在一个微帧内是可以安排3次同步传输的,而我们全速设备是只能安排一次同步传输的,差别仅此而已,收到SOF Packet后就可以进行同步的IN阶段了,这里注意一下数据最前面的Payload Header,这个的说明就在MJPEG负载文档中有提到,如下:

目前只用到了前面两个字节,而且只关注了PID位,在每个帧的帧起始处翻转PID位,表明这是一个新帧,在帧未结束之前,PID位保持不变,现在我们就可以完成我们的数据传输了,如下:

/**
  * @brief  USBD_UVC_SOF
  *         handle SOF event
  * @param  pdev: device instance
  * @retval status
  */
static uint8_t  USBD_UVC_SOF (USBD_HandleTypeDef *pdev)
{
  uint8_t payload[2] = {0x02,0x00};

  if(PLAY_STATUS_READY == play_status)
  {
	USBD_LL_Transmit(pdev, UVC_ISO_DATA_EP, payload, 2);
  	play_status = PLAY_STATUS_STREAMING;
  }
  return USBD_OK;
}

/**
  * @brief  USBD_UVC_DataIn
  *         handle data IN Stage
  * @param  pdev: device instance
  * @param  epnum: endpoint index
  * @retval status
  */
uint8_t packet[UVC_ISO_DATA_PACKET_SIZE]={0x00};
static uint8_t  USBD_UVC_DataIn (USBD_HandleTypeDef *pdev,
                              uint8_t epnum)
{
  static uint8_t payload_header[2] = {0x02,0x00};
  static uint16_t packet_count = JPEG_SIZE/(UVC_ISO_DATA_PACKET_SIZE-2);
  static uint8_t packet_remainder = JPEG_SIZE%(UVC_ISO_DATA_PACKET_SIZE-2);
  static uint8_t packet_index = 0;

  uint16_t packet_size = 0;

  if(PLAY_STATUS_STREAMING == play_status)
  {
  	if(packet_index == 0)
  	{
	  payload_header[1]^=0x01;
	  memcpy(packet+2,jpeg_data+packet_index*(UVC_ISO_DATA_PACKET_SIZE-2),
	  	UVC_ISO_DATA_PACKET_SIZE-2);
	  packet_size = UVC_ISO_DATA_PACKET_SIZE;
	}
  	if(packet_index < packet_count)
  	{
  	  memcpy(packet+2,jpeg_data+packet_index*(UVC_ISO_DATA_PACKET_SIZE-2),
	  	UVC_ISO_DATA_PACKET_SIZE-2);
	  packet_size = UVC_ISO_DATA_PACKET_SIZE;
  	}
	else if(packet_index == packet_count)
	{
	  memcpy(packet+2,jpeg_data+packet_index*(UVC_ISO_DATA_PACKET_SIZE-2),
	  	packet_remainder);
	  packet_size = packet_remainder+2;
	}
	else
	{
	  packet_size = 2;
	}
	packet[0] = payload_header[0];
	packet[1] = payload_header[1];
	USBD_LL_Transmit(pdev, UVC_ISO_DATA_EP,
	  	packet,
	  	packet_size);
	packet_index+=1;

	if(packet_index >= (packet_count+1))
	{
		packet_index = 0;
	}

  }
  return USBD_OK;
}

在SOF回调函数中检测是否开启了VS接口的交替配置1,如果开启了VS接口的交替配置1则发送一个负载流头,并标记play_status状态为PLAY_STATUS_STREAMING,在DataIn的回调函数中(因为在SOF中发送了一个负载流头,因此,该流头发送成功后就会自行调用DataIn的回调函数)就可以发送数据了,在DataIn回调函数中计算了发送一帧图像所需要的包数packet_cnt,以及最后一个数据包中图像的有效数据packet_reaminder,之后就是循环发送图像数据了,一帧图像发送完成之后复位packet_index,就又开始了新的一轮传输,至此,STM32
的UVC代码就基本完成了,最后把main.c文件中的一些初始化操作改掉即可。但历史的经验告诉我们,敲代码只占用了实现某一个功能的很小的一部分时间,而大部分时间是用来调试的,这是切实体会那,这些代码敲完,我用的时间的确不多,但调试我却用了很久很久。接下来我就详细说说调试过程中的各种问题,这时候把代码烧进去目标板中,就会发现没有图像!!!黑屏,这个时候就是另一个工具大显身手的时候了---USB Trace,我用的是2.7版本的,使用该工具可以分析USB设备和USB主机之间的数据流信息,首先看一个不使能双缓冲时的数据流,如下:

这个是我最开始调试时的数据,当时是使用的另一张图片,同步端点的数据包大小设置为80,可以看到每隔一个数据包就会出现一包无效数据,而且无效数据是相同的,正是这个现象并结合STM32F103C8T6参考手册,我后来才改成了双缓冲形式,满以为会出现图像时,结果还是黑屏!!!只能再次查看数据,抓图如下:

可以看到右下角有个JFIF信息,就可以知道这是我们传输的数据,而且改成双缓冲后数据正常了很多,但依然黑屏,就想是不是数据有丢失呢,怎么验证呢,从该软件中拷贝一帧图像数据跟我们代码中的数据做对比,单数据那么多如何对比呢,这就用到了文本比较软件,相信大家并不陌生--Beyond Compare,接下来就是数据排版对比了,代码中的数据很好排版,把0x以及逗号全都替换成空即可,但抓的数据就不好排版了,于是乎,我又写了段代码,把抓的数据排版成我们想要的形式,如下:

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

int main( int argc, char* args[] )
{
    FILE *pFile = NULL,*pNFile = NULL;
    uint8_t buffer[1024];
    uint16_t ret = 0;
    if(argc < 3)
    {
        printf("Usage: fileName 16\r\n");
        return;
    }
    printf("argc:%d\r\n",argc);
    for(ret = 0; ret < argc; ret++)
    {
        printf("args[%d]:%s\r\n",ret, args[ret]);
    }

    pFile = fopen(args[1],"rb");
    pNFile = fopen("NEW.txt","wb");
    while(!feof(pFile))
    {
        ret = fread(buffer,1,atoi(args[2])*3,pFile);
        buffer[ret-1] = '\r';
        buffer[ret] = '\n';
        fwrite(buffer,1,ret+1,pNFile);
    }
    fclose(pFile);
    fclose(pNFile);
}

使用这段代码的前提是把抓的数据中的payload header去掉并把其中的回车换行符也去掉,这个用Notepad++很容易就可以办到,接着运行这段代码就可以得到我们想要的数据排版了,使用Beyond Compare对比两个文件,发现数据是没有丢失的,结果如下:

可以看到,数据基本是一致的,左图是我们代码中的数据,右图是我们从USBTrace软件中抓来的数据,数据也没有少,只是后面多了一包数据,但并不影响,这个时候是我最抓狂的时候,数据是对的,怎么图像就是不出来呢,后来又在USBTrace软件中分析数据,希望得以找到一些蛛丝马迹,最后还真的找到了,在软件的左下角有一些信息,如下:

不知道大家发现了没,这里可以看到这段数据的包个数为0x20,但它下面还有一个ErrorCount为0x10,什么情况,传输了这么多包居然有一半是错误的,继续往下看,

可以发现有的包状态是USBD_STATUS_SUCCESS,但有的包状态却是USBD_STATUS_BUFFER_OVERRUN。。。缓存溢出了,看来这就是为啥图像出不来的原因了,但到底是什么原因导致的呢?一开始我还怀疑是不是Cube库有bug呢,赶紧去STM32社区看了一下果然STM32F1Cube库有更新,最新的是3月12号的,我之前的库还是去年12月下载的好像,立马下载下来,替换掉,满心期待的看了下--黑屏依旧。。。而且对比了两个版本的库,基本上是没有改动的,USB库也一样。陷入了僵局。。。先到这吧,下一篇再告诉大家究竟是什么原因导致黑屏一直存在。

时间: 2024-11-05 13:34:07

STM32 UVC学习笔记2的相关文章

STM32 FSMC学习笔记+补充(LCD的FSMC配置)

STM32 FSMC学习笔记+补充(LCD的FSMC配置) STM32 FSMC学习笔记 STM32 FSMC的用法--LCD

正点原子STM32探索者学习笔记1

1.在STM32的数据手册中,引脚定义中的I/O structure中如果是FT的话,说明该引脚兼容5V: 2.IO口一般都有多个功能,可以通过寄存器的设置来选择其IO口的功能,F1还有重映射的概念,F4没有: 3.IO口分为两种情况:一个是完全独立的IO(不能有任何外设连接的IO,一般比较少)(如ADC采集):一种是允许IO口挂其他外设,但是必须可以单独做输入.输出使用. 4.基本外设:GPIO输入输出,外部中断,定时器,串口.这四个基本外设任何一款MCU都有:然后是一些高级的通信外设如SPI

STM32本学习笔记EXTI(外部中断)

参考资料:STM32数据表.网络信息 =========================================切割线========================================= 外部中断/事件控制器由19个产生事件/中断要求的边沿检測器组成.每一个输入线能够独立地配置 输入类型(脉冲或挂起)和相应的触发事件(上升沿或下降沿或者双边沿都触发).每一个输入线都能够被独 立的屏蔽. 挂起寄存器保持着状态线的中断要求. ==========================

ucos实时操作系统学习笔记——操作系统在STM32的移植

使用ucos实时操作系统是在上学的时候,导师科研项目中.那时候就是网上找到操作系统移植教程以及应用教程依葫芦画瓢,功能实现也就罢了,没有很深入的去研究过这个东西.后来工作了,闲来无聊就研究了一下这个只有几千行代码的操作系统,也没所有的代码都看,只是看了其中部分内容.自己还自不量力的尝试着去写过简单的操作系统,最后写着写着就被带到了ucos的设计思路上了,后来干脆就“copy”代码了,虽说对操作系统内核的理解有很大的帮助,但是很是惭愧啊,智力不够,对操作系统内核的设计者更加仰慕,O(∩_∩)O哈哈

STM32学习笔记——USART串口(向原子哥和火哥学习)

一.USART简介 通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换.USART利用分数波特率发生器提供宽范围的波特率选择. STM32 的串口资源相当丰富的,功能也相当强劲.STM32F103ZET6 最多可提供 5 路串口,有分数波特率发生器,支持同步单向通信和半双工单线通信,支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作.它还允许多处理器通信.

stm32寄存器版学习笔记07 ADC

STM32F103RCT有3个ADC,12位主逼近型模拟数字转换器,有18个通道,可测量16个外部和2个内部信号源.各通道的A/D转换可以单次.连续.扫描或间断模式执行. 1.通道选择 stm32把ADC转换分成2个通道组:规则通道组相当于正常运行的程序:注入通道组相当于中断.程序初始化阶段设置好不同的转换组,系统运行中不用变更循环转换的配置,从而达到任务互不干扰和快速切换. 有16个多路通道.可以把转换组织成两组:规则组和注入组.在任意多个通道上以任意顺序进行的一系列转换构成成组转换.例如,可

stm32寄存器版学习笔记05 PWM

STM32除TIM6和TIM7外都可以产生PWM输出.高级定时器TIM1和TIM8可以同时产生7路PWM,通用定时器可以产生4路PWM输出. 1.TIM1 CH1输出PWM配置步骤 ①开启TIM1时钟,配置PA8为复用输出 APB2外设时钟使能寄存器(RCC_APB2ENR) APB1外设复位寄存器 (RCC_APB1RSTR) 置1开启.清0关闭. Eg:RCC->APB2ENR|=1<<11; //使能TIM1时钟 配置I/O口: 参见stm32寄存器版学习笔记01 GPIO口的配置

STM32学习笔记6(TIM通用模块生成PWM)

1.     TIMER输出PWM基本概念   脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术.简单一点,就是对脉冲宽度的控制.一般用来控制步进电机的速度等等. STM32的定时器除了TIM6和TIM7之外,其他的定时器都可以用来产生PWM输出,其中高级定时器TIM1和TIM8可以同时产生7路的PWM输出,而通用定时器也能同时产生4路的PWM输出. 1.1   PWM输出模式 S

LwIP学习笔记——STM32 ENC28J60移植与入门

0.前言 去年(2013年)的整理了LwIP相关代码,并在STM32上"裸奔"成功.一直没有时间深入整理,在这里借博文整理总结.LwIP的移植过程细节很多,博文也不可能一一详解个别部分只能点到为止. [本文要点] [1]不带操作系统的LwIP移植,LwIP版本为1.4.1. [2]MCU为STM32F103VE,网卡为ENC28J60. [3]移植过程重点描述ethernetif.c和LwIP宏配置等. [4]一个简单的TCP echo例子. [5]力求简单,没有DHCP功能,甚至没有