Mcu 0145-EEPROM-programmer: Difference between revisions

From wikipost
Jump to navigation Jump to search
No edit summary
 
(No difference)

Latest revision as of 01:29, 13 December 2021

This programmer helped me write the calibration data of my Tektronix 2445B oscilloscope to a new chip.


The programmer works with 65,536 (64k) bit parallel-addressable RAM chips (8,192 words by 8 bits) such as the DS1225Y, STK12C68, and probably many others.

This design uses three IO pins from the arduino (clock, latch, data) to fill the two serial shift registers to set the address bits and then uses 8x IO pins from the arduino to set the 8-bit value bits for an address.

The chips I intended to program with this design only have 28 pins, which only leaves room for 13 address lines. This means that only addresses up to (2^13 =) 8,192 can be written to. This is why the 3 Most Significant Bits of the 2nd serial shift register are unused.


Schematic:

0145 EEPROM programmer schematic.png


The Arduino based EEPROM programmer, using two 74HC595 serial shift registers:

EEPROM-programmer arduino 74HC595 top.jpg


EEPROM-programmer arduino 74HC595 bottom.jpg


I built this programmer so that I could rescue my aging Tektronix 2445B oscilloscope. Inside this oscilloscope is a Non-volatile RAM chip that holds the calibration data. This data is unique to each oscilloscope and requires an elaborate calibration procedure and specialised test equipment to obtain and store this data inside the RAM chip. Without this data the oscilloscope is unusable. The original RAM chip that came with this oscilloscope is a Dallas DS1225Y. This chip will retain the data inside, but only if a constant voltage is applied. The manufacturers of this chip came up with a clever hack by adding a small button-cell battery and potting the chip inside a slightly bigger package. This is a neat solution, but only as long as the battery is able to provide enough power. Since the battery and chip are glued together it is almost impossible to swap out the battery for a fresh one. Since I wanted to keep using my 2445B oscilloscope I decided to upgrade the RAM chip with a model that doesn't need an internal battery anymore. The option I went with is the Cypress STK12C68. It uses the same protocol and pinout for reading and writing data. It doesn't have (or needs) a battery, but it does need an external capacitor. The capacitor is only needed for write operations and even if the capacitor is disconnected the internal RAM still retains the data. This was an acceptable compromise.

The pinout of the STK12C68:

STK12C68 pinout.png


The new STK12C68 EEPROM chip after making the modifications for placement inside the 2445B oscilloscope:

EEPROM STK12C68 a.jpg


EEPROM STK12C68 b.jpg



Arduino code:

/*
DS1225Y/STK12C68/FM16W08 EEPROM Programmer using 74HC595 serial shift registers


              LSB <--------------------------------> MSB

         +----------------+                     +----------------+ 
         | HC595     QA 15| --> A0              | HC595     QA 15| --> A8
         |           QB  1| --> A1              |           QB  1| --> A9
         |           QC  2| --> A2              |           QC  2| --> A10
 data--->|14 SER     QD  3| --> A3   +--------->|14 SER     QD  3| --> A11
 clock-->|11 SRCLK   QE  4| --> A4   |  clock-->|11 SRCLK   QE  4| --> A12
 latch-->|12 RCLK    QF  5| --> A5   |  latch-->|12 RCLK    QF  5| NC
         |           QG  6| --> A6   |          |           QG  6| NC
         |           QH  7| --> A7   |          |           QH  7| NC
         |           QH' 9+----------+          |           QH' 9| NC
     +---+13 OE   SRCLR 10+---+             +---+13 OE   SRCLR 10+---+  
     |   +----------------+   |             |   +----------------+   | 
    GND                      Vcc           GND                      Vcc 


           address bits                                                data bits
           ------------                                                ---------
            Q  Q  Q  Q  Q  Q Q Q   Q Q Q Q Q Q Q Q                     5 6 7 8 9 10 11 12   <-- Arduino D-pins
            H  G  F  E  D  C B A   H G F E D C B A                     
                                                                               
           15 14 13 12 11 10 9 8   7 6 5 4 3 2 1 0                     7 6 5 4 3 2 1 0  <-- [ DS1225Y ]
            |  |  |  |  |  | | |   | | | | | | | |                     | | | | | | | |
            NC NC NC |  |  | | |   | | | | | | | +-- A0 (pin 10)       | | | | | | | +-- DQ0 (pin 11)
                     |  |  | | |   | | | | | | +---- A1 (pin 9)        | | | | | | +---- DQ1 (pin 12)
                     |  |  | | |   | | | | | +------ A2 (pin 8)        | | | | | +------ DQ2 (pin 13)
                     |  |  | | |   | | | | +-------- A3 (pin 7)        | | | | +-------- DQ3 (pin 15)
                     |  |  | | |   | | | +---------- A4 (pin 6)        | | | +---------- DQ4 (pin 16)
                     |  |  | | |   | | +------------ A5 (pin 5)        | | +------------ DQ5 (pin 17)
                     |  |  | | |   | +-------------- A6 (pin 4)        | +-------------- DQ6 (pin 18)
                     |  |  | | |   +---------------- A7 (pin 3)        +---------------- DQ7 (pin 19)
                     |  |  | | +-------------------- A8 (pin 25)
                     |  |  | +---------------------- A9 (pin 24)
                     |  |  +------------------------ A10 (pin 21)
                     |  +--------------------------- A11 (pin 23)
                     +------------------------------ A12 (pin 2)

          
 NOTES:

   ---[STK12C68]---
     - a capacitor (68uF - 220uF) must be connected between pins 1 (Vcap) and 14 (Vss/GND) to 
       utilise the chip's AutoStore (on device power-down) feature.
     - Pin 1 and Pin 26 must not touch the IC-socket of the A5-Board!



 Last modified: 10 Dec 2021
 Author: M. Post
 Sketch/project: 0145


 */

// address lines are controlled with 2x serial shift registers
#define DATA  2  // EEPROM pin 14 DATA  (SER or DS)
#define LATCH 3  // EEPROM pin 12 LATCH (RCLK or ST_CP)
#define CLOCK 4  // EEPROM pin 11 CLOCK (SRCLK or SH_CP)

#define WRITE_ENABLE  13   // D13
#define OUTPUT_ENABLE 14   // A0 = 14 when used as Digital IO
#define CHIP_ENABLE   15   // A1 = 15 when used as Digital IO

#define CHIPTYPE 1         // 0=DS1225Y, 1=STK12C68, 2=FM16W08
#define MAX_ADDRESS 8192   // set to 8192 to write/read addresses for a full memory bank

// data lines
#define DQ0 5
#define DQ1 6
#define DQ2 7
#define DQ3 8
#define DQ4 9
#define DQ5 10
#define DQ6 11
#define DQ7 12

String command;

uint16_t addr=0;        // begin reading at this address
uint8_t  data_byte=0;   // holds value read from eeprom


// Tektronix 2445B calibration data
const PROGMEM uint16_t data[] = {
  
0x3e, 0x1e, 0x3e, 0x65, 0x3f, 0x65, 0x3f, 0x65, 0x3f, 0x65, 0x89, 0x79, 0x89, 0x79, 0x8a, 0x79, 
0x8a, 0x79, 0xb9, 0x1d, 0x29, 0x2d, 0x00, 0x32, 0x4a, 0x48, 0x52, 0x5a, 0x43, 0x6a, 0x1d, 0x03, 
0x41, 0x15, 0xf3, 0x22, 0xf6, 0x36, 0x63, 0x43, 0x1c, 0x12, 0x74, 0x23, 0xff, 0x7f, 0x00, 0x01, 
0x64, 0x01, 0x00, 0x00, 0x08, 0x01, 0xa0, 0x00, 0x50, 0x85, 0x12, 0x00, 0x00, 0xc0, 0x02, 0x1a, 
0x04, 0x91, 0x20, 0x48, 0x17, 0x77, 0x21, 0x61, 0x04, 0x08, 0x00, 0x10, 0x93, 0x00, 0xff, 0x8a, 
0xa8, 0xbd, 0x38, 0xdd, 0x0c, 0x1e, 0x00, 0x0c, 0x00, 0x0f, 0x0a, 0x02, 0x26, 0x78, 0x03, 0x0a, 
0x00, 0x02, 0x07, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x12, 0x00, 0x9d, 
0x00, 0xc0, 0xf6, 0x75, 0x62, 0x00, 0x99, 0x91, 0x28, 0x28, 0x39, 0xfa, 0xfe, 0x04, 0x77, 0x00, 
0x02, 0x6b, 0x08, 0xb2, 0x03, 0x3d, 0x03, 0x31, 0x02, 0x28, 0x02, 0xdf, 0x28, 0xe6, 0xc0, 0x20, 
0x00, 0xf3, 0x00, 0xab, 0x1c, 0xbe, 0x1f, 0x61, 0x1f, 0xae, 0x1f, 0x9e, 0x0d, 0x9a, 0x02, 0x66, 
0x1d, 0x3f, 0x1f, 0x4e, 0x1f, 0xa7, 0x1c, 0xab, 0x0c, 0xb9, 0x02, 0xc2, 0x00, 0xe6, 0x00, 0x0d, 
0x18, 0x00, 0xee, 0x16, 0xc3, 0x21, 0x1c, 0x12, 0x74, 0x23, 0xdf, 0x02, 0xb2, 0x02, 0xb9, 0x0d, 
0x3f, 0x02, 0x12, 0x06, 0x29, 0x0d, 0xe6, 0x02, 0x52, 0x06, 0x00, 0x00, 0x04, 0x00, 0x35, 0xea, 
0x00, 0xae, 0x27, 0x1c, 0x56, 0x11, 0x00, 0x99, 0x12, 0x00, 0x00, 0x10, 0x7a, 0x02, 0x1c, 0x00, 
0x80, 0x00, 0x41, 0x05, 0x50, 0x02, 0x1c, 0x00, 0x80, 0x00, 0xf6, 0x06, 0xeb, 0xaf, 0x00, 0x00, 
0x04, 0x00, 0x01, 0xff, 0x5f, 0x00, 0x75, 0x02, 0x0b, 0x0e, 0x1d, 0x03, 0xf3, 0x02, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x5a, 0x00, 0x22, 0x04, 0x04, 0x84, 0x3c, 0x02, 
0x8a, 0xf5, 0x00, 0x97, 0x02, 0x00, 0x02, 0x00, 0x33, 0x75, 0x02, 0x01, 0x01, 0x05, 0x01, 0x01, 
0x00, 0x01, 0xff, 0xff, 0xf8, 0xff, 0x00, 0xf8, 0x20, 0x02, 0x02, 0x05, 0x05, 0x00, 0x00, 0xf7, 
0x41, 0x00, 0x0b, 0x04, 0x05, 0x01, 0x00, 0xbf, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 
0x00, 0x64, 0x60, 0x00, 0x00, 0x24, 0x00, 0x00, 0x31, 0x03, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 
0xe8, 0x03, 0x00, 0x00, 0xf9, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x12, 
0x00, 0x00, 0x21, 0x12, 0x00, 0x00, 0x1e, 0x10, 0x00, 0x00, 0xa2, 0x70, 0x78, 0x0a, 0x00, 0x00, 
0x10, 0x00, 0x09, 0x00, 0x00, 0x9d, 0xfe, 0x06, 0x01, 0xfd, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x29, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x64, 0x12, 0x25, 0x01, 0x09, 0xae, 0x07, 0x00, 0x00, 
0x00, 0x00, 0x83, 0x00, 0x71, 0x06, 0x5c, 0x02, 0x60, 0x02, 0xe2, 0xff, 0x7e, 0x02, 0xfc, 0x0d, 
0x00, 0x00, 0x00, 0x00, 0x51, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x9c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 
0x16, 0x00, 0x07, 0x00, 0xfc, 0x03, 0x02, 0x01, 0x00, 0x00, 0xff, 0x5f, 0x00, 0x00, 0x04, 0x0a, 
0x00, 0x06, 0xf3, 0x01, 0x96, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 
0x73, 0x1a, 0x8b, 0x6b, 0xad, 0x68, 0xa3, 0x55, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 
0x01, 0x00, 0x00, 0x43, 0xf8, 0x01, 0x00, 0x07, 0x01, 0x01, 0x01, 0x1d, 0x00, 0x24, 0x00, 0xff, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x42, 0xec, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4b, 0x08, 0x42, 0x03, 
0x6e, 0x02, 0x28, 0x0e, 0x0f, 0x0f, 0x0f, 0x00, 0x0f, 0x0f, 0x00, 0x0f, 0x0f, 0x00, 0x0f, 0x20, 
0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x6b, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x01, 0x22, 0xff, 0xf4, 0xf4, 0x01, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x22, 0x00, 0x55, 0x55, 0x08, 0x00, 0x00, 0x03, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 
0x17, 0x7a, 0x24, 0xda, 0x35, 0x79, 0x48, 0x07, 0x5c, 0x00, 0x6b, 0xc3, 0x12, 0x27, 0x52, 0x1c, 
0x74, 0xea, 0x00, 0xb8, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 
0x00, 0x05, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xd2, 0xd2, 0xa5, 
0xd2, 0xfe, 0xe0, 0xfe, 0x41, 0xd1, 0x9d, 0xd0, 0xfe, 0xd2, 0xa5, 0xc0, 0xfe, 0xd2, 0xd2, 0xc0, 
0xd2, 0xfe, 0xd2, 0xfe, 0xe1, 0xfe, 0x41, 0xd1, 0xd0, 0x00, 0xff, 0xe3, 0x22, 0xfe, 0x41, 0xc0, 
0x00, 0x64, 0xc7, 0x00, 0xc1, 0xc4, 0x07, 0xd7, 0x99, 0xe8, 0x00, 0xc4, 0x07, 0x00, 0x13, 0xe1, 
0x00, 0x3d, 0x12, 0x01, 0xdf, 0xb7, 0xc2, 0x96, 0x00, 0xb3, 0x5d, 0xc8, 0xd7, 0xc1, 0xf7, 0x05, 
0xc0, 0x7a, 0x01, 0x0f, 0x16, 0x01, 0x39, 0x13, 0x12, 0x01, 0xea, 0x2f, 0xc2, 0xd1, 0x00, 0x4f, 
0x00, 0x04, 0x07, 0x07, 0x08, 0x3f, 0x00, 0x03, 0x07, 0x51, 0x08, 0xa7, 0x00, 0x71, 0x00, 0x1b, 
0x07, 0x0c, 0x67, 0x75, 0xfc, 0x22, 0xfc, 0x02, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 
0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 
0x17, 0x00, 0x00, 0x36, 0x6e, 0x00, 0xff, 0x0e, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 
0x2a, 0xff, 0x00, 0xd2, 0x00, 0xff, 0x00, 0xff, 0x00, 0x01, 0x00, 0x0a, 0x05, 0x00, 0x05, 0x46, 
0xfc, 0xdc, 0x05, 0xc0, 0x04, 0xdc, 0x24, 0x14, 0x45, 0x08, 0x65, 0x08, 0xff, 0x00, 0xff, 0x00, 
0x00, 0xff, 0x00, 0xff, 0x62, 0x22, 0x48, 0x0f, 0x64, 0x00, 0x00, 0x2e, 0x20, 0x00, 0x2e, 0x04, 
0xb0, 0x0c, 0x27, 0x04, 0xb6, 0x0c, 0x00, 0x00, 0xd2, 0x2a, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 
0x04, 0x17, 0xf9, 0x00, 0xf9, 0xf9, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x01, 0x00, 0xff, 0x00, 0xff, 
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 
0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xf5, 0xf7, 0xf7, 0xff, 
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 
0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 
0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 
0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 
0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 
0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 
0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 
0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 
0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb8, 0x00, 
0xbc, 0xc8, 0xc0, 0xc0, 0xc0, 0xc0, 0x02, 0x01, 0x80, 0x02, 0x40, 0x02, 0x60, 0x01, 0x42, 0x00, 
0x00, 0x21, 0x64, 0x04, 0x00, 0x20, 0x08, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x34, 0xfe, 0x06, 
0x58, 0xfd, 0x6e, 0xe6, 0x00, 0x4d, 0x15, 0x00, 0x00, 0x41, 0x37, 0x00, 0x47, 0x13, 0x0e, 0xbe, 
0x03, 0x92, 0x16, 0x55, 0x2b, 0xea, 0x0e, 0xfc, 0x16, 0x92, 0xff, 0x09, 0x00, 0x00, 0x2d, 0x51, 
0xb3, 0x4e, 0x4d, 0x53, 0xc5, 0x55, 0xfd, 0x0f, 0x0f, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0xfe, 0x0f, 0xff, 0x55, 0x55, 0x03, 0x00, 0x00, 0x00, 0x00, 
0x75, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xb8, 0x00, 0xbc, 0xc8, 0xc0, 0xc0, 0xc0, 0xc0, 0x03, 0x01, 0x89, 0x02, 
0x40, 0x04, 0x69, 0x20, 0x62, 0x09, 0x08, 0x21, 0x64, 0x04, 0x20, 0x20, 0x08, 0x00, 0x10, 0x00, 
0x00, 0x00, 0x00, 0x10, 0xfe, 0x06, 0x58, 0xfd, 0x64, 0x9c, 0x00, 0xc7, 0x15, 0x00, 0x00, 0x41, 
0x37, 0x00, 0x47, 0x04, 0x0d, 0xbd, 0x12, 0x4e, 0x17, 0x64, 0x25, 0xa5, 0x0d, 0xdc, 0x12, 0x4e, 
0xff, 0x64, 0x00, 0x00, 0x5e, 0x51, 0xcf, 0x4e, 0xd6, 0x4d, 0x92, 0x54, 0x00, 0x08, 0x0f, 0xff, 
0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x20, 0x0f, 0x0f, 0x0f, 0xfe, 0x0f, 0x4e, 0xbb, 
0x85, 0x01, 0x00, 0x00, 0x18, 0x00, 0x75, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb8, 0x00, 0xbc, 0xc8, 0xc0, 0xc0, 
0xc0, 0xc0, 0x03, 0x01, 0x89, 0x02, 0x40, 0x04, 0x69, 0x20, 0x62, 0x09, 0x08, 0x21, 0x64, 0x04, 
0x20, 0x20, 0x08, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0xfe, 0x06, 0x58, 0xfd, 0x64, 0x9c, 
0x00, 0xc7, 0x15, 0x00, 0x00, 0x41, 0x37, 0x00, 0x47, 0x04, 0x0d, 0xbd, 0x12, 0x4e, 0x17, 0x64, 
0x25, 0xa5, 0x0d, 0xdc, 0x12, 0x4e, 0xff, 0x64, 0x00, 0x00, 0x5e, 0x51, 0xcf, 0x4e, 0xd6, 0x4d, 
0x92, 0x54, 0x00, 0x08, 0x0f, 0xff, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x20, 0x0f, 
0x0f, 0x0f, 0xfe, 0x0f, 0x4e, 0xbb, 0x85, 0x01, 0x00, 0x00, 0x18, 0x00, 0x75, 0x00, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xb8, 0x00, 0xbc, 0xc8, 0xc0, 0xc0, 0xc0, 0xc0, 0x03, 0x01, 0x89, 0x02, 0x40, 0x04, 0x69, 0x20, 
0x62, 0x09, 0x08, 0x21, 0x64, 0x04, 0x20, 0x20, 0x08, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 
0xfe, 0x06, 0x58, 0xfd, 0x64, 0x9c, 0x00, 0xc7, 0x15, 0x00, 0x00, 0x41, 0x37, 0x00, 0x47, 0x04, 
0x0d, 0xbd, 0x12, 0x4e, 0x17, 0x64, 0x25, 0xa5, 0x0d, 0xdc, 0x12, 0x4e, 0xff, 0x64, 0x00, 0x00, 
0x5e, 0x51, 0xcf, 0x4e, 0xd6, 0x4d, 0x92, 0x54, 0x00, 0x08, 0x0f, 0xff, 0x00, 0x0f, 0x0f, 0x0f, 
0x0f, 0x0f, 0x00, 0x00, 0x20, 0x0f, 0x0f, 0x0f, 0xfe, 0x0f, 0x4e, 0xbb, 0x85, 0x01, 0x00, 0x00, 
0x18, 0x00, 0x75, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb8, 0x00, 0xbc, 0xc8, 0xc0, 0xc0, 0xc0, 0xc0, 0x03, 0x01, 
0x89, 0x02, 0x40, 0x04, 0x69, 0x20, 0x62, 0x09, 0x08, 0x21, 0x64, 0x04, 0x20, 0x20, 0x08, 0x00, 
0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0xfe, 0x06, 0x58, 0xfd, 0x64, 0x9c, 0x00, 0xc7, 0x15, 0x00, 
0x00, 0x41, 0x37, 0x00, 0x47, 0x04, 0x0d, 0xbd, 0x12, 0x4e, 0x17, 0x64, 0x25, 0xa5, 0x0d, 0xdc, 
0x12, 0x4e, 0xff, 0x64, 0x00, 0x00, 0x5e, 0x51, 0xcf, 0x4e, 0xd6, 0x4d, 0x92, 0x54, 0x00, 0x08, 
0x0f, 0xff, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x20, 0x0f, 0x0f, 0x0f, 0xfe, 0x0f, 
0x4e, 0xbb, 0x85, 0x01, 0x00, 0x00, 0x18, 0x00, 0x75, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb8, 0x00, 0xbc, 0xc8, 
0xc0, 0xc0, 0xc0, 0xc0, 0x03, 0x01, 0x89, 0x02, 0x40, 0x04, 0x69, 0x20, 0x62, 0x09, 0x08, 0x21, 
0x64, 0x04, 0x20, 0x20, 0x08, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0xfe, 0x06, 0x58, 0xfd, 
0x64, 0x9c, 0x00, 0xc7, 0x15, 0x00, 0x00, 0x41, 0x37, 0x00, 0x47, 0x04, 0x0d, 0xbd, 0x12, 0x4e, 
0x17, 0x64, 0x25, 0xa5, 0x0d, 0xdc, 0x12, 0x4e, 0xff, 0x64, 0x00, 0x00, 0x5e, 0x51, 0xcf, 0x4e, 
0xd6, 0x4d, 0x92, 0x54, 0x00, 0x08, 0x0f, 0xff, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 
0x20, 0x0f, 0x0f, 0x0f, 0xfe, 0x0f, 0x4e, 0xbb, 0x85, 0x01, 0x00, 0x00, 0x18, 0x00, 0x75, 0x00, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xb8, 0x00, 0xbc, 0xc8, 0xc0, 0xc0, 0xc0, 0xc0, 0x03, 0x01, 0x89, 0x02, 0x40, 0x04, 
0x69, 0x20, 0x62, 0x09, 0x08, 0x21, 0x64, 0x04, 0x20, 0x20, 0x08, 0x00, 0x10, 0x00, 0xff, 0x00, 
0x00, 0xfc, 0xfe, 0x06, 0x58, 0xfd, 0x64, 0x9c, 0x00, 0xc7, 0x15, 0x00, 0x00, 0x41, 0x37, 0x00, 
0x47, 0x04, 0x0d, 0xbd, 0x12, 0x4e, 0x17, 0x64, 0x25, 0xa5, 0x0d, 0xdc, 0x12, 0x4e, 0xff, 0x64, 
0x00, 0x00, 0x5e, 0x51, 0xcf, 0x4e, 0xd6, 0x4d, 0x92, 0x54, 0x00, 0x08, 0x0f, 0xff, 0x00, 0x0f, 
0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x20, 0x0f, 0x0f, 0x0f, 0xfe, 0x0f, 0x4e, 0xbb, 0x85, 0x01, 
0x00, 0x00, 0x18, 0x00, 0x75, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8c, 0x00, 0xb8, 0xc8, 0xc0, 0xc0, 0xc0, 0xc0, 
0x01, 0x01, 0x00, 0x03, 0x41, 0x02, 0x6a, 0x20, 0x11, 0x0a, 0x00, 0x21, 0x64, 0x04, 0x00, 0x08, 
0x08, 0x00, 0x10, 0x00, 0xff, 0x00, 0x00, 0xfc, 0xfe, 0x06, 0x57, 0xfd, 0x69, 0xef, 0x00, 0xbd, 
0x14, 0x00, 0x00, 0xa7, 0x37, 0x00, 0x47, 0x13, 0x0a, 0xbd, 0x00, 0x34, 0x24, 0x00, 0x2c, 0x99, 
0x0a, 0x75, 0x20, 0x34, 0xff, 0x44, 0x00, 0x00, 0x2e, 0x50, 0xc1, 0x47, 0xc4, 0x4d, 0x4b, 0x54, 
0x00, 0x08, 0x0f, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 
0xfe, 0x0f, 0x44, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x1a, 0x01, 0x00, 0x00, 0x40, 0x0a, 0x4f, 0x20, 0x22, 0x0f, 
0x00, 0x22, 0x64, 0x14, 0x20, 0x28, 0x08, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x06, 
0x58, 0xfd, 0x6f, 0x00, 0x00, 0xff, 0x17, 0x00, 0x00, 0xff, 0x36, 0x00, 0x43, 0xed, 0x21, 0x9f, 
0x00, 0xfb, 0x26, 0x00, 0x27, 0x26, 0x12, 0x94, 0x2f, 0xf1, 0xff, 0x3c, 0x00, 0x00, 0xfe, 0x47, 
0xfc, 0x4f, 0xff, 0x57, 0x01, 0x5c, 0x00, 0x08, 0x0f, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0xfe, 0x0f, 0x4c, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x75, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 
0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 
0x00, 0xff, 0x00, 0xff, 0x00, 0x1e, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 
0x03, 0x00, 0x23, 0x2b, 0x21, 0x06, 0x23, 0xfb, 0x02, 0x12, 0x99, 0x0f, 0x07, 0x8b, 0x0b, 0x2c, 
0x14, 0x7a, 0x00, 0x01, 0x75, 0x03, 0x08, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x4e, 0x65, 
0xff, 0x00, 0xff, 0x00, 0x05, 0x00, 0xff, 0x00, 0xff, 0x00, 0xa0, 0x00, 0x4c, 0x1d, 0x4e, 0x50, 
0x0c, 0x54, 0xe7, 0x00, 0x5c, 0xea, 0x0c, 0xc3, 0x0b, 0xe4, 0x68, 0x54, 0x6a, 0x00, 0x98, 0x76, 
0xff, 0x00, 0xed, 0x41, 0x7f, 0x00, 0x00, 0x00, 0xc3, 0x5c, 0x27, 0x6b, 0xc3, 0x5c, 0xff, 0x00, 
0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x6f, 0x01, 0x00, 0x48, 
0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x01, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 
0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 
0xff, 0x00, 0x02, 0x00, 0x00, 0x62, 0x00, 0x2c, 0x00, 0x02, 0x00, 0x04, 0x1d, 0x02, 0xff, 0x4c, 
0xeb, 0xff, 0x10, 0x36, 0x0a, 0x68, 0x0a, 0x82, 0x00, 0x77, 0x02, 0xff, 0x00, 0x68, 0x02, 0xff, 
0xff, 0x60, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x0f, 0x00, 0xff, 0x00, 
0x00, 0xff, 0x01, 0x00, 0x00, 0x01, 0x01, 0x0c, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xff, 
0xff, 0x00, 0x00, 0x02, 0x02, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 
0x00, 0xff, 0xf7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0xff, 
0x69, 0x00, 0xfb, 0x07, 0x01, 0xff, 0x01, 0xff, 0x05, 0xff, 0x01, 0xff, 0xfd, 0x0c, 0xfe, 0xbf, 
0x02, 0xca, 0x00, 0xe6, 0x00, 0xff, 0x00, 0x00, 0x45, 0x03, 0x99, 0x00, 0x00, 0x48, 0x05, 0x04, 
0x03, 0x15, 0x00, 0x45, 0x00, 0x00, 0xff, 0x07, 0x4b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0xff, 0x45, 0x03, 0x31, 0x08, 0x30, 0x08, 0x00, 0xff, 0x00, 0xff, 0x00, 0x01, 0x01, 0x02, 
0xd4, 0x01, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0x95, 0x00, 0x01, 0xb6, 0x00, 0x01, 0x00, 0x00, 
0x02, 0x01, 0x09, 0x08, 0x99, 0x00, 0x99, 0x33, 0x99, 0xc8, 0x98, 0x32, 0x98, 0x9c, 0x97, 0x06, 
0x96, 0x70, 0x96, 0xda, 0x95, 0x44, 0x95, 0xae, 0x94, 0x18, 0x93, 0x82, 0x93, 0xec, 0x92, 0x56, 
0x92, 0xc0, 0x91, 0x2a, 0x90, 0x94, 0x90, 0xfe, 0x8f, 0x68, 0x8f, 0xd2, 0x8e, 0x3c, 0x8e, 0xa6, 
0x8d, 0x10, 0x8c, 0x7a, 0x8c, 0xe4, 0x8b, 0x4e, 0x8b, 0xb8, 0x8a, 0x22, 0x89, 0x8c, 0x89, 0xf6, 
0x88, 0x60, 0x00, 0xca, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 
0x00, 0xff, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00, 0x1d, 0x01, 
0x00, 0x79, 0x99, 0x00, 0x01, 0x32, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 
0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x9c, 0x00, 0x1a, 0xd6, 0xff, 0x22, 
0xff, 0x00, 0x53, 0x08, 0x00, 0x00, 0x00, 0x00, 0x66, 0x48, 0x04, 0x9d, 0xea, 0x9c, 0x00, 0x14, 
0xff, 0x80, 0x80, 0x00, 0xff, 0x00, 0x35, 0x0c, 0x45, 0x08, 0x65, 0x08, 0xcc, 0x0f, 0xcc, 0x1f, 
0x26, 0x00, 0xe6, 0x0f, 0x03, 0x6c, 0x08, 0xff, 0x08, 0x3a, 0x00, 0x64, 0x00, 0x00, 0x00, 0x08, 
0x14, 0x00, 0x22, 0x22, 0xff, 0xff, 0x00, 0xff, 0x48, 0x00, 0x08, 0x02, 0xff, 0x00, 0xff, 0xff, 
0x00, 0x00, 0x04, 0x48, 0x00, 0x80, 0x45, 0x08, 0x65, 0x08, 0x00, 0x00, 0x00, 0xff, 0x00, 0x20, 
0xff, 0x00, 0x3c, 0x01, 0xff, 0xff, 0xff, 0x7b, 0x00, 0x84, 0xff, 0x45, 0x00, 0xe8, 0xff, 0x00, 
0xf0, 0x1e, 0x21, 0x00, 0x94, 0xaf, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 
0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x1d, 0x01, 0xe8, 0x01, 0xba, 0x00, 0xcf, 
0x0c, 0x40, 0x7e, 0xfe, 0x41, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x41, 0x00, 0xb8, 0x00, 0xff, 
0x00, 0x00, 0x03, 0x90, 0x0d, 0x05, 0x0d, 0xe6, 0x0d, 0xe8, 0x0d, 0xef, 0x0d, 0xee, 0x0d, 0xe8, 
0x0d, 0xee, 0x0d, 0xed, 0x0d, 0xe2, 0x0d, 0xbe, 0x0d, 0xbd, 0x0d, 0xb7, 0x0d, 0xbd, 0x0d, 0xbd, 
0x0e, 0xb1, 0x0e, 0x57, 0x0e, 0x56, 0x0e, 0x50, 0x0e, 0x57, 0x0e, 0x56, 0x0e, 0x4a, 0x0d, 0x51, 
0x0d, 0xb2, 0x0d, 0xab, 0x0d, 0xb7, 0x0d, 0xb7, 0x0d, 0x4d, 0x0d, 0x4d, 0x0d, 0x4d, 0x0d, 0x4d, 
0x0d, 0x4f, 0x0d, 0x53, 0x0d, 0x52, 0x0d, 0x4b, 0x0d, 0x4f, 0x0d, 0x4e, 0x0d, 0x4a, 0x0d, 0x4e, 
0x0d, 0x90, 0x0d, 0x92, 0x0d, 0x96, 0x0d, 0x94, 0x0d, 0x8d, 0x0d, 0x91, 0x0d, 0x90, 0x0d, 0x8c, 
0x0d, 0x90, 0x0d, 0x2a, 0x0d, 0x27, 0x0d, 0x2b, 0x0d, 0x29, 0x0d, 0xbd, 0x00, 0x90, 0x0d, 0x14, 
0x00, 0x90, 0x9d, 0x3e, 0x9d, 0xc7, 0xff, 0x95, 0x00, 0x82, 0x00, 0x42, 0x00, 0xff, 0x00, 0xff, 
0xae, 0xfd, 0x30, 0xfe, 0xff, 0x4c, 0x01, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 
0x02, 0xff, 0x12, 0xff, 0x05, 0x1c, 0x05, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 
0x00, 0xb3, 0x04, 0xdb, 0x24, 0xd3, 0x04, 0xbd, 0x24, 0xad, 0x04, 0x96, 0x04, 0xcf, 0x24, 0xd0, 
0x04, 0xb7, 0x04, 0xb1, 0x04, 0xb7, 0x22, 0x37, 0x22, 0x34, 0x02, 0x36, 0x02, 0x35, 0x02, 0x50, 
0x02, 0x36, 0x02, 0x30, 0x22, 0x31, 0x02, 0x30, 0x02, 0x44, 0x20, 0x72, 0x20, 0x1e, 0x20, 0x1d, 
0x20, 0x1e, 0x00, 0x1c, 0x3b, 0xa6, 0x1d, 0x40, 0x1d, 0x0e, 0x3c, 0xc7, 0x1f, 0xc0, 0x3f, 0xc1, 
0x1f, 0xbe, 0x3f, 0xa7, 0x1f, 0xb4, 0x02, 0x35, 0x02, 0x3c, 0x02, 0x30, 0x22, 0x2f, 0x1c, 0xf5, 
0x3d, 0xc9, 0x3e, 0x5f, 0x10, 0x00, 0x3f, 0xad, 0x1f, 0xa9, 0x3f, 0xab, 0x1f, 0xa3, 0x1f, 0xaf, 
0x02, 0xe1, 0x02, 0xe1, 0x02, 0xdd, 0x22, 0xdc, 0x27, 0x9e, 0x28, 0x49, 0x28, 0x4a, 0x08, 0x6f, 
0x08, 0x55, 0x08, 0x77, 0x08, 0x59, 0x00, 0x5d, 0x28, 0x49, 0x08, 0x48, 0x28, 0x70, 0x28, 0x57, 
0x28, 0x75, 0x08, 0x56, 0x00, 0x5e, 0x23, 0x47, 0x23, 0x33, 0x03, 0x34, 0x26, 0x5c, 0x06, 0x4f, 
0x26, 0x66, 0x26, 0x59, 0x22, 0xdc, 0x22, 0xe0, 0x18, 0x3e, 0x2e, 0x9d, 0x0e, 0x99, 0x26, 0xf6, 
0x26, 0xde, 0x02, 0x72, 0x02, 0x7b, 0x01, 0x44, 0x21, 0x49, 0x27, 0xe5, 0x27, 0xfb, 0x25, 0x17, 
0x04, 0x53, 0x06, 0x16, 0x27, 0x49, 0x26, 0x0a, 0x05, 0x2c, 0x06, 0x43, 0x05, 0x7f, 0x07, 0x42, 
0x07, 0x72, 0x06, 0xd5, 0x04, 0x4d, 0x04, 0x56, 0x04, 0x1e, 0x05, 0x75, 0x27, 0x16, 0x26, 0xfa, 
0x25, 0xd4, 0x25, 0xdd, 0x25, 0xa5, 0x22, 0xd9, 0x00, 0xc7, 0x00, 0xc8, 0x00, 0xab, 0x08, 0x14, 
0x08, 0x28, 0x00, 0x07, 0x1f, 0xb7, 0x3c, 0xb9, 0x1c, 0xcf, 0x00, 0xc7, 0x00, 0xfd, 0x00, 0xd7, 
0x00, 0xff, 0x00, 0x6f, 0xd2, 0xff, 0xfa, 0xe0, 0x01, 0xff, 0xff, 0x8b, 0x04, 0xff, 0xff, 0x5c, 
0x11, 0xfe, 0xfd, 0xa9, 0xa2, 0x77, 0xff, 0x99, 0x9c, 0xef, 0xff, 0x23, 0x60, 0xfd, 0xfd, 0x00, 
0x20, 0xf1, 0xfd, 0xe0, 0x01, 0x7f, 0xff, 0x14, 0x00, 0xff, 0xff, 0x13, 0x4b, 0xf7, 0xff, 0x77, 
0x8f, 0xff, 0xff, 0x48, 0x22, 0xff, 0xbf, 0xcf, 0x21, 0xff, 0xff, 0xc8, 0x91, 0xdf, 0xfd, 0x34, 
0xfd, 0xef, 0xfd, 0x83, 0x14, 0xef, 0xff, 0x03, 0x09, 0xfd, 0x7e, 0x0e, 0xc3, 0xfe, 0xf7, 0x00, 
0x12, 0xef, 0x5b, 0x70, 0x04, 0xe0, 0xff, 0xdc, 0xb0, 0x6f, 0x6f, 0x14, 0x8a, 0x7f, 0xef, 0x57, 
0xc3, 0xf1, 0x7f, 0x00, 0x06, 0xfb, 0x2c, 0x50, 0x2d, 0xa8, 0x0d, 0xd4, 0x2d, 0xd0, 0x0d, 0xd8, 
0x0d, 0xd8, 0x2d, 0xc4, 0x0d, 0xb4, 0x2d, 0xb0, 0x0d, 0xb4, 0x2d, 0xc8, 0x2d, 0xdc, 0x0d, 0xb8, 
0x2d, 0xa4, 0x0d, 0xa0, 0x10, 0x0a, 0x10, 0x0a, 0x10, 0x0a, 0x10, 0x0a, 0x10, 0x0a, 0x31, 0xe8, 
0x0d, 0x24, 0x2b, 0xc4, 0x2a, 0xfa, 0x2a, 0x7e, 0x2a, 0x4e, 0x0a, 0x34, 0x0a, 0x20, 0x0a, 0x1a, 
0x0a, 0x1c, 0x2a, 0x22, 0x0a, 0x26, 0x2a, 0x24, 0x0a, 0x20, 0x2a, 0x24, 0x0b, 0xb8, 0x0b, 0xb8, 
0x0b, 0xb8, 0x0b, 0xb8, 0x0b, 0xb8, 0x2e, 0xba, 0x2e, 0xba, 0x2e, 0xba, 0x2e, 0xba, 0x2e, 0xb6, 
0x2e, 0x9e, 0x2e, 0x92, 0x0e, 0x66, 0x0d, 0xde, 0x0c, 0xf2, 0x0c, 0xf2, 0x28, 0x4a, 0x0b, 0x74, 
0x3f, 0xfb, 0x1c, 0xcf, 0x1c, 0xd4, 0x1c, 0xda, 0xe4, 0xa0, 0x07, 0xe4, 0xa0, 0x07, 0xe4, 0xa0, 
0x07, 0xe4, 0xa0, 0x07, 0xe4, 0xa0, 0x07, 0xe4, 0xa0, 0x07, 0xe4, 0xa0, 0x07, 0xe4, 0xa0, 0x07, 
0xe4, 0xa0, 0x07, 0xe4, 0xa0, 0x07, 0xe4, 0xa0, 0x07, 0xe4, 0xa0, 0x07, 0xe4, 0xa0, 0x07, 0xe4, 
0xa0, 0x07, 0xe4, 0xa0, 0x07, 0xe4, 0xa0, 0x07, 0xe4, 0xa0, 0x07, 0xe4, 0x00, 0x00, 0x00, 0x00
  
  };


void setup() {

  pinMode(DATA,OUTPUT);
  pinMode(LATCH,OUTPUT); // LOW=don't update outputs
  pinMode(CLOCK,OUTPUT);
 
  digitalWrite(OUTPUT_ENABLE,HIGH); // not outputting
  pinMode(OUTPUT_ENABLE,OUTPUT);

  digitalWrite(CHIP_ENABLE,HIGH);    // chip disabled
  pinMode(CHIP_ENABLE,OUTPUT);

  digitalWrite(WRITE_ENABLE,HIGH);  // not writing
  pinMode(WRITE_ENABLE,OUTPUT);
 
  Serial.begin(9600);
  
  show_options();
  
}

void show_options()
{

  Serial.println("DS1225Y/STK12C68/FM16W08 EEPROM Programmer (Project 0145)");
  Serial.println("");
  Serial.println("Available commands:");
  Serial.println("  read    (read from EEPROM)");
  Serial.println("  write   (write data to EEPROM");
  Serial.println("  verify  (verify EEPROM with const data");
  Serial.println("  wipe    (write zeroes to EEPROM");
  Serial.println("");
  Serial.println("");
}

void datalines_output()
{
  pinMode(DQ0,OUTPUT);
  pinMode(DQ1,OUTPUT);
  pinMode(DQ2,OUTPUT);
  pinMode(DQ3,OUTPUT);
  pinMode(DQ4,OUTPUT);
  pinMode(DQ5,OUTPUT);
  pinMode(DQ6,OUTPUT);
  pinMode(DQ7,OUTPUT);
}

void datalines_input()
{
  pinMode(DQ0,INPUT);
  pinMode(DQ1,INPUT);
  pinMode(DQ2,INPUT);
  pinMode(DQ3,INPUT);
  pinMode(DQ4,INPUT);
  pinMode(DQ5,INPUT);
  pinMode(DQ6,INPUT);
  pinMode(DQ7,INPUT);
}


void set_address(uint16_t address)
{

  // write the 16-bit EEPROM address to the two serial shift registers
  
  digitalWrite(LATCH,LOW);
    
  shiftOut(DATA, CLOCK, MSBFIRST, highByte(address));       
  shiftOut(DATA, CLOCK, MSBFIRST, lowByte(address));  

   digitalWrite(LATCH,HIGH);
  
}


void read_eeprom(int verify)
{

  // --- READ ---
  
  Serial.print("READ ");

  if (verify == 1)
  {
    Serial.print("(+Verify) ");
  }
  
  Serial.print("from EEPROM:");
  Serial.println("");
  
  int mismatch = 0;
  addr=0;       // begin reading at this address
  
  datalines_input();    
   
  digitalWrite(WRITE_ENABLE, HIGH); // keep WE high during the entire read cycle
  digitalWrite(CHIP_ENABLE, LOW);  // keep CE low during the entire read cycle (ok for SRAM)
    
  while (addr < MAX_ADDRESS)
  {

    // begin read EEPROM sequence
    
    
    digitalWrite(OUTPUT_ENABLE, HIGH);
    delayMicroseconds(1);
   
    
    // write the 16-bit EEPROM address to the two serial shift registers
    set_address(addr);


    if (CHIPTYPE == 2)
    {
      // FRAM requires toggling of CE 
      delayMicroseconds(1);                    
      digitalWrite(CHIP_ENABLE, HIGH); 
      delayMicroseconds(1);           
      digitalWrite(CHIP_ENABLE, LOW); 
      delayMicroseconds(1);       
    }
    
    digitalWrite(OUTPUT_ENABLE, LOW);


  

    // CE and OE must be LOW
    // WE and HSB are HIGH
    
    // read data bits from digital inputs
    data_byte=0;
    
    data_byte |= (digitalRead(DQ7) << 7);
    data_byte |= (digitalRead(DQ6) << 6);
    data_byte |= (digitalRead(DQ5) << 5);
    data_byte |= (digitalRead(DQ4) << 4);
    data_byte |= (digitalRead(DQ3) << 3);
    data_byte |= (digitalRead(DQ2) << 2);
    data_byte |= (digitalRead(DQ1) << 1);
    data_byte |= digitalRead(DQ0);
   
    digitalWrite(OUTPUT_ENABLE, HIGH);
    delayMicroseconds(1);   
    digitalWrite(OUTPUT_ENABLE, LOW);
    
    

    Serial.print("Addr: ");
    Serial.print(addr);
    Serial.print("  0x");
    Serial.print(addr,HEX);
    Serial.print("  ");
    Serial.print(data_byte,HEX);

   
    
    if (verify == 1)
    {
      // get corresponding data byte that we expect to see at this address    

      int data_byte_exp = pgm_read_byte_near(data + addr);

      if (data_byte < 16)
      {
        Serial.print(" ");        
      }
      
      if (data_byte == data_byte_exp)
      {
        
        Serial.print("    Ok");        
        
      } else {
        
        Serial.print("    MISMATCH -- expected ");        
        Serial.print(data_byte_exp,HEX);
        
        mismatch++;
      
      }
    }


    Serial.println();

    addr++;
    
  }
  
  Serial.println("");
  Serial.print("READ finished, ");
  Serial.print(addr);
  Serial.println(" Bytes");
  Serial.println("");

  if (verify == 1)
  {
    if (mismatch == 0)
    {
      
      Serial.println("Verification 100% successful");        
      Serial.println("");
      
    } else {
      
      Serial.print(mismatch);
      Serial.println(" Bytes failed verification.");
      Serial.println("");
    }
  }
  
}




void write_eeprom(int bank)
{
  // --- WRITE ---
    
  Serial.println("WRITE to EEPROM:");
  Serial.println("--");

  addr=0;       // begin writing at this address
  
  while (addr < MAX_ADDRESS)
  {     

    // fetch firmware data byte from progmem

    if (bank == 0)
      data_byte = 0; // wipe with zeroes

      
    if (bank == 1)
      data_byte = pgm_read_byte_near(data + addr); // write firmware data

 
    // write byte to EEPROM

    digitalWrite(OUTPUT_ENABLE,HIGH); 
    delayMicroseconds(1000);
    digitalWrite(WRITE_ENABLE, HIGH);
    delayMicroseconds(1000);      


    // write the 16-bit EEPROM address to the two serial shift registers
    set_address(addr);

    delayMicroseconds(1000);      
     
    datalines_output();
    delayMicroseconds(1000);
       
    // write data_byte to digital IO pins
    digitalWrite(DQ0, data_byte & 1);   // write bit 0 of data_byte to DQ0
    digitalWrite(DQ1, data_byte & 2);   // write bit 1 of data_byte to DQ1
    digitalWrite(DQ2, data_byte & 4);   // write bit 2 of data_byte to DQ2
    digitalWrite(DQ3, data_byte & 8);   // write bit 3 of data_byte to DQ3
    digitalWrite(DQ4, data_byte & 16);  // write bit 4 of data_byte to DQ4
    digitalWrite(DQ5, data_byte & 32);  // write bit 5 of data_byte to DQ5
    digitalWrite(DQ6, data_byte & 64);  // write bit 6 of data_byte to DQ6
    digitalWrite(DQ7, data_byte & 128); // write bit 7 of data_byte to DQ7

    // check if what we write is correct
  
    delayMicroseconds(1000);  
    
    if (CHIPTYPE == 2)
    {
      // FRAM requires toggling of CE 
      delayMicroseconds(1000);                    
      digitalWrite(CHIP_ENABLE, HIGH); 
      delayMicroseconds(1000);           
      digitalWrite(CHIP_ENABLE, LOW); 
      delayMicroseconds(1000);       
    } else {
      // not toggle required for SRAM
      digitalWrite(CHIP_ENABLE, LOW);  
      delayMicroseconds(1000);   
    }

    
    
       
    digitalWrite(WRITE_ENABLE,LOW);
    delayMicroseconds(1000);      
    digitalWrite(WRITE_ENABLE, HIGH);
    delayMicroseconds(1000);      

    // CE and WE are LOW
    // HSB is high (use pullup?)
    
    datalines_input();

    digitalWrite(OUTPUT_ENABLE,LOW);
    delayMicroseconds(1000);  
    digitalWrite(OUTPUT_ENABLE,HIGH); 
    delayMicroseconds(1000);  
    digitalWrite(CHIP_ENABLE, HIGH);

    Serial.print("Addr: ");
    Serial.print(addr);
    Serial.print("  0x");
    Serial.print(addr,HEX);
    Serial.print("  ");
    Serial.println(data_byte,HEX);    
    
    addr++;
 
  }
  
  Serial.println("");
  Serial.print("WRITE finished, ");
  Serial.print(addr);
  Serial.println(" Bytes");
  Serial.println("");
  
  
}

void loop() {
  

  uint16_t addr=0;
  uint8_t  data_byte=0;
  
  uint8_t do_write=0;
  uint8_t do_read=1;
  
  
  while(true)
  {
    if(Serial.available())
    {
      command = Serial.readStringUntil('\n');      

      if(command.equals("read"))
      {
          read_eeprom(0);
      }
      else if(command.equals("write"))
      {
            write_eeprom(1);
      }
      else if(command.equals("wipe"))
      {
            write_eeprom(0);
      }
      else if(command.equals("verify"))
      {
            read_eeprom(1);
      }

      
      else{
          Serial.println("Invalid command");
      }

      show_options();
      
    }
  }

  

    
  
}