Arduino Music Player on Teensy Audio Shield

Status
Not open for further replies.
Hi Jarkko
I just want to let you know I've been playing with your pmf player for two days and I am extremely impressed.
Only issue I'm having right now is that I cannot get ILI9341 TFT display and the player work together on Teensy 4. :confused:
 
Hey thanks Chris! Incidentally I worked on ILI9341 based visualizer for the project, currently running on Teensy 3.6, but I'm about to port it to Teensy 4 :D I think it should be quite straightforward, just make sure you don't have conflicting pins with the audio board and the TFT display. But I let you know on this thread what I find.

 
Hey thanks Chris! Incidentally I worked on ILI9341 based visualizer for the project, currently running on Teensy 3.6, but I'm about to port it to Teensy 4 :D I think it should be quite straightforward, just make sure you don't have conflicting pins with the audio board and the TFT display. But I let you know on this thread what I find.
Note, the pinout for the audio shield is completely different for the Teensy 4 than it is for the Teensy 3.x processors. Without doing a lot of rewiring between the audio board mounted separately and the Teensy 4.0, etc. you will need to use the revision D audio board for the Teensy 4.0 and revisions A-C of the audio board for Teensy 3.x.

I replied to two threads giving the available pins after mounting the audio boards:

During the Teensy 4.0 beta, Paul built this breakout board to convert revision A-C audio boards for use with the Teensy 4.0. However, I suspect now that the revision D audio board is available, it is a lot easier to use that than to build this converter board (note PJRC.COM is NOT selling this board, they are just making the plans/gerber files available if you want to make one):

Also if you use the _t3 libraries, the Teensy 4.0 doesn't have the special CS and DC pins that sped things up for the 3.x processors (well pin 10 is special for the SPI CS pin, but that is used by the audio shield, and in practice I haven't seen a slowdown when I switched from using pin 10 to pin 22).
 
Ported the TFT visualizer to Teensy 4, which seems to work fine even when using hardware CS pin for the TFT. The audio shield uses the hardware CS pin for SD card so it doesn't conflict with the player audio playback.

 
@ MichaelMeissner and JarkkoL.
Thanks both of you I could not reply sooner because of power outages after snow storm ‘Ezekiel’ in the Poconos USA.

@ MichaelMeissner
Yeah I'm not sure what my issues are yet Perhaps it's pin configuration conflict, will look into it may be today. Thanks:)

@ JarkkoL.
This looks impressive on Teensy 4.0, I am actually not running Teensy audio board just using the AudioOutputI2S and Adafruit I2S 3W Class D Amplifier Breakout - MAX98357A.
One more thing I'm also running Teensy 4.0 SDIO microSD card with SdFat-beta ver.2 library.
 
Hi Jarkko.
If it's not too much to ask can you explain the first few bytes of the data structure created with PMF converter.
I'm not sure about the data marked in the red:

0x70 0x6d 0x66 0x78 - ASCII (p f m x<--? ) :)
0x00 0x14 yellow = (PMF v1.4) <--?

EDIT: oops:eek: correct placement for data size
0x98 0x23 0x00 0x00 green = 32bit data size, HEX 00002398‬ -- DEC 9112 bytes.


Code:
// Song name: aryx (aryx.s3m)
//    Length: 42
//  Channels: 12
//      Size: 9112 bytes
//  Exporter: PMF Converter v0.6 (PMF v1.4)

0x70, 0x6d, 0x66, [COLOR="#FF0000"]0x78,[/COLOR] [COLOR="#FFD700"]0x00, 0x14,[/COLOR] 0x00, 0x00,[COLOR="#008000"] 0x98, 0x23, 0x00, 0x00,[/COLOR] 0x68, 0x00, 0x00, 0x00, 0xe8, 0x00, 0x00, 0x00, 0xe8, 0x00, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00, 0x02, 0x5f, 0x1c, 0x00, 0x00, 0x6b, 0x2a, 0x00, 0x0c, 0x0c, 0x00, 0x08, 0x03, 0x02, 0x04, 0x04, 0x05, 0x05, 0x06, 0x06, 0x08, 0x09, 0x0a, 0x0b, 0x00, 0x01, 0x00, 0x01, 0x07, 0x05, 0x07, 0x05, 0x06, 0x06, 0x0a, 0x0b, 0x0a, 0x0b, 0x08, 0x09, 0x08, 0x09, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x07, 0x06, 0x06, 0x06, 0xc4, 0x4c, 0xc4, 0x4c, 0xc4, 0x4c, 0xc4, 0x4c, 0xc4, 0x4c, 0xc4, 0x4c, 0x00, 0x00, 0x85, 0x0f, 0x00, 0x00, 0xae, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x80, 0x76, 0x0e, 0x00, 0xff, 0x34, 0x10, 0x00, 0x00, 0xad, 0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x80, 0x84, 0x0e, 0x00, 0xff, 0xe2, 0x10, 0x00, 0x00, 0x69, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xdc, 0xfd, 0x00, 0xff, 0x4c, 0x14, 0x00, 0x00, 0xb6, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xfa, 0x00, 0x00, 0xb4, 0x03, 0x18, 0x00, 0x00, 0xb2, 0x03, 0x00, 0x00, 0xab, 0x03, 0x00, 0x80, 0xb2, 0x04, 0x00, 0xc8, 0xb6, 0x1b, 0x00, 0x00, 0xae, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xbe, 0xfa, 0x00, 0xc8, 0x65, 0x1f, 0x00, 0x00, 0x84, 0x03, 0x00, 0x00, 0x7a, 0x03, 0x00, 0x80, 0x65, 0x08, 0x00, 0xff, 0xea, 0x22, 0x00, 0x00, 0xad, 0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x80, 0x66, 0x0e, 0x00, 0xa0, 0x3f, 0x00, 0x20, 0x02, 0x5c, 0x02, 0x98, 0x02, 0xd5, 0x02, 0x12, 0x03, 0x61, 0x03, 0xb3, 0x03, 0xff, 0x03, 0x2b, 0x04, 0x7f, 0x04, 0xd3, 0x04, 
0xdf, 0x04, 0x3f, 0x00, 0xeb, 0x04, 0x2a, 0x05, 0x69, 0x05, 0xa9, 0x05, 0xe9, 0x05, 0x61, 0x03, 0xb3, 0x03, 0xff, 0x03, 0x38, 0x06, 0x8c, 0x06, 0xe0, 0x06, 0xec, 0x06, 0x3f, 0x00, 0xf8, 0x06, 0x0f, 0x07, 0x26, 0x07, 0x32, 0x07, 0x3f, 0x07, 0x68, 0x07, 0x90, 0x07, 0xb4, 0x07, 0xcd, 0x07, 0xe6, 0x07, 0x23, 0x08, 0x5f, 0x08, 0x3f, 0x00, 0x9b, 0x08, 0xd7, 0x08, 0x13, 0x09, 0x2c, 0x09, 0x47, 0x09, 0x6b, 0x09, 0x8f, 0x09, 0xa3, 0x09, 0xb6, 0x09, 0xb6, 0x09, 0xb6, 0x09, 0xb6, 0x09, 0x3f, 0x00, 0xc0, 0x09, 0xd7, 0x09, 0x26, 0x07, 0x32, 0x07, 0xee, 0x09, 0x61, 0x03, 0xb6, 0x09, 0xff, 0x03, 0xb6, 0x09, 0xb6, 0x09, 0x01, 0x0a, 0x18, 0x0a, 0x3f, 0x00, 0x2f, 0x0a, 0xc0, 0x09, 0x71, 0x0a, 0x88, 0x0a, 0xa1, 0x0a, 0x61, 0x03, 0xd8, 0x0a, 0xff, 0x03, 0x24, 0x0b, 0x76, 0x0b, 0x01, 0x0a, 0x18, 0x0a, 0x3f, 0x00, 0x2f, 0x0a, 0xb6, 0x09, 0xc8, 0x0b, 0xc8, 0x0b, 0xa1, 0x0a, 0x61, 0x03, 0xb3, 0x03, 0xff, 0x03, 0x24, 0x0b, 0x76, 0x0b, 0x01, 0x0a, 0x18, 0x0a, 0x3f, 0x00, 0x2f, 0x0a, 0xdc, 0x0b, 0x00, 0x0c, 0x0b, 0x0c, 0xee, 0x09, 0x61, 0x03, 0xb3, 0x03, 0xff, 0x03, 0x24, 0x0b, 0x76, 0x0b, 0x01, 0x0a, 0x18, 0x0a, 0x3f, 0x00, 0x18, 0x0c, 0x54, 0x0c, 0x90, 0x0c, 0xcc, 0x0c, 0x08, 0x0d, 0x43, 0x0d, 0x57, 0x0d, 0x72, 0x0d, 0x8c, 0x0d, 0xa6, 0x0d, 0xd0, 0x0d, 0xeb, 0x0d, 0x3f, 0x00, 0x06, 0x0e, 0x45, 0x0e, 0x84, 0x0e, 0xc4, 0x0e, 0x04, 0x0f, 0xb6, 0x09, 0xb6, 0x09, 0xb6, 0x09, 0xb6, 0x09, 0xb6, 0x09, 0xb6, 0x09, 0xb6, 0x09, 0x3f, 0x00, 0x18, 0x0c, 0x54, 0x0c, 0x98, 0x02, 0xd5, 0x02, 0x44, 0x0f, 0x61, 0x03, 0xee, 0x09, 0xff, 0x03, 0xb6, 0x09, 
0xb6, 0x09, 0xb6, 0x09, 0xb6, 0x09, 0x3f, 0x00, 0x06, 0x0e, 0x45, 0x0e, 0x84, 0x0e, 0xc4, 0x0e, 0x04, 0x0f, 0x61, 0x03, 0xee, 0x09, 0xff, 0x03, 0xb6, 0x09, 0xb6, 0x09, 0xb6, 0x09, 0xb6, 0x09, 0xd6, 0x00, 0x0f, 0xa0, 0x10, 0x52, 0x04, 0xe0, 0x30, 0x8a, 0x09, 0xa8, 0x90, 0x21, 0x92, 0x36, 0x88, 0x43, 0x24, 0x2d, 0x0c, 0x79, 0x14, 0xc3, 0x3e, 0x26, 0x05, 0x54, 0xc8, 0x0f, 0x61, 0x17, 0xc3, 0xa7, 0x80, 0x0a, 0x99, 0x51, 0x4c, 0x40, 0x85, 0x18, 0xf1, 0x84, 0x44, 0x34, 0xe2, 0x69, 0x67, 0xf8, 0xa3, 0x18, 0x0e, 0xf2, 0x29, 0xa0, 0x42, 0x86, 0x38, 0x03, 0xd6, 0x00, 0x2f, 0xa0, 0x10, 0x52, 0x04, 0xe0, 0x30, 0x8a, 0x09, 0xa8, 0x90, 0x21, 0x92, 0x36, 0x88, 0x43, 0x24, 0x2d, 0x0c, 0x79, 0x14, 0xc3, 0x3e, 0x26, 0x05, 0x54, 0xc8, 0x0f, 0x61, 0x17, 0xc3, 0xa7, 0x80, 0x0a, 0x99, 0x51, 0x4c, 0x40, 0x85, 0x18, 0xf1, 0x84, 0x44, 0x34, 0xe2, 0x69, 0x67, 0xf8, 0xa3, 0x18, 0x0e, 0xf2, 0x29, 0xa0, 0x42, 0x86, 0x38, 0x03, 0x16, 0x81, 0xd2, 0xc1, 0x30, 0xb0, 0x28, 0xcc, 0x15, 0xd1, 0x3c, 0x26, 0x39, 0x8c, 0xe2, 0x2e, 0x6c, 0x88, 0xa4, 0x88, 0x0e, 0xf2, 0x90, 0x49, 0x0e, 0x63, 0x1e, 0xc5, 0x51, 0x98, 0x0f, 0x49, 0x11, 0xfd, 0x63, 0x98, 0xc5, 0x51, 0xd8, 0x29, 0xa2, 0x67, 0x14, 0x77, 0x61, 0x46, 0x3c, 0x21, 0x11, 0x8d, 0x78, 0x8a, 0xe8, 0x19, 0xff, 0x28, 0x8e, 0xc2, 0x82, 0x78, 0x02, 0x16, 0x81, 0xd2, 0xc1, 0x10, 0xb0, 0x28, 0xcc, 0x15, 0xd1, 0x3c, 0x26, 0x39, 0x8c, 0xe2, 0x2e, 0x6c, 0x88, 0xa4, 0x88, 0x0e, 0xf2, 0x90, 0x49, 0x0e, 0x63, 0x1e, 0xc5, 0x51, 0x98, 0x0f, 0x49, 0x11, 0xfd, 0x63, 0x98, 0xc5, 0x51, 0xd8, 0x29, 0xa2, 0x67, 0x14, 
0x77, 0x61, 0x46, 0x3c, 0x21, 0x11, 0x8d, 0x78, 0x8a, 0xe8, 0x19, 0xff, 0x28, 0x8e, 0xc2, 0x82, 0x78, 0x02, 0xd6, 0xc0, 0x50, 0xe8, 0xc0, 0x05, 0x80, 0x11, 0x3c, 0xd5, 0x11, 0x5d, 0x40, 0x1d, 0xf1, 0x82, 0x06, 0x86, 0x42, 0x67, 0xa4, 0x80, 0x86, 0xd1, 0xdd, 0x9d, 0x0d, 0x83, 0x99, 0x14, 0x50, 0x67, 0x41, 0x1c, 0x22, 0xa9, 0x98, 0x61, 0xcc, 0xa3, 0x3b, 0x3a, 0xf3, 0x15, 0x32, 0x9c, 0x14, 0x50, 0x67, 0x3f, 0x84, 0xdd, 0x5d, 0x21, 0xc3, 0xce, 0x4e, 0x01, 0x3d, 0xa3, 0xbb, 0x3b, 0x33, 0x16, 0x32, 0xfc, 0xc4, 0x44, 0x36, 0xf2, 0xc9, 0xe1, 0x33, 0xfe, 0xd1, 0x1d, 0x9d, 0x05, 0x01, 0xd6, 0x80, 0x50, 0xa0, 0x83, 0x21, 0x21, 0x44, 0x40, 0x04, 0xb2, 0x37, 0xb5, 0xd2, 0x0c, 0xd1, 0x08, 0x11, 0x10, 0x81, 0xec, 0x4d, 0xad, 0x34, 0x43, 0x34, 0x42, 0x04, 0x44, 0x20, 0x7b, 0x53, 0x2b, 0xcd, 0x10, 0x8d, 0x10, 0x01, 0x11, 0xc8, 0xde, 0xd4, 0x4a, 0x33, 0x44, 0x23, 0x44, 0x40, 0x04, 0xb2, 0x37, 0xb5, 0xd2, 0x0c, 0xd1, 0x08, 0x11, 0x10, 0x81, 0xec, 0x4d, 0xad, 0x34, 0x43, 0x34, 0x42, 0x04, 0x44, 0x20, 0x7b, 0x53, 0x2b, 0xcd, 0x10, 0x8d, 0x10, 0x01, 0x11, 0xc8, 0xde, 0xd4, 0x0a, 0xd6, 0xc3, 0xb1, 0x58, 0x5a, 0x80, 0x38, 0x90, 0x06, 0x20, 0x4a, 0x03, 0x07, 0x82, 0x21, 0x0e, 0xae, 0x03, 0x88, 0xf3, 0x42, 0x87, 0x97, 0x16, 0x60, 0xa4, 0x01, 0x88, 0xd2, 0xc0, 0x81, 0x60, 0x88, 0x83, 0xeb, 0x00, 0xe2, 0xbc, 0xd0, 0xe1, 0xa5, 0x05, 0x18, 0x69, 0x00, 0xa2, 0x34, 0x70, 0x20, 0x18, 0xe2, 0xe0, 0x3a, 0x80, 0x38, 0x2f, 0x74, 0x78, 0x69, 0x01, 0x46, 0x1a, 0x80, 0x28, 0x0d, 0x1c, 0x08, 0x86, 0x38, 0xb8, 0x0e, 0x20, 0xca, 0x0b, 0x1d, 0x00, 0xd6, 
0x80, 0x72, 0x20, 0x0a, 0x8a, 0x60, 0x58, 0x61, 0x8f, 0x51, 0x56, 0x98, 0x42, 0x82, 0x22, 0x0a, 0x0f, 0x15, 0xcc, 0x08, 0x86, 0x3d, 0x46, 0x91, 0x29, 0x64, 0x85, 0x3d, 0x46, 0x59, 0x61, 0x0a, 0x09, 0x8a, 0x28, 0x3c, 0x54, 0x30, 0x23, 0x18, 0xf6, 0x18, 0x05, 0xd6, 0x00, 0x0c, 0x88, 0x40, 0x09, 0x24, 0xa0, 0x23, 0xa0, 0x62, 0xf0, 0xc6, 0x63, 0x25, 0x90, 0x08, 0x28, 0x51, 0x95, 0x50, 0x46, 0x21, 0xa0, 0x18, 0xbd, 0x88, 0x02, 0xd9, 0x8d, 0x80, 0x8a, 0x79, 0x25, 0x90, 0x88, 0x22, 0x40, 0x0f, 0x34, 0xa2, 0x18, 0xbd, 0x08, 0x94, 0x42, 0x66, 0x01, 0x05, 0xb2, 0x11, 0x50, 0x31, 0x7a, 0x2b, 0x81, 0x44, 0x40, 0x89, 0xaa, 0x04, 0x1a, 0x50, 0x8c, 0x5e, 0x44, 0x81, 0xec, 0x46, 0x40, 0xc5, 0xbc, 0x12, 0x48, 0x44, 0x11, 0xa0, 0x07, 0x1a, 0x51, 0x8c, 0x5e, 0x04, 0x0a, 0xd6, 0x00, 0x2c, 0x88, 0x40, 0x09, 0x24, 0xa0, 0x23, 0xa0, 0x62, 0xf0, 0xc6, 0x63, 0x25, 0x90, 0x08, 0x28, 0x51, 0x95, 0x50, 0x46, 0x21, 0xa0, 0x18, 0xbd, 0x88, 0x02, 0xd9, 0x8d, 0x80, 0x8a, 0x79, 0x25, 0x90, 0x88, 0x22, 0x40, 0x0f, 0x34, 0xa2, 0x18, 0xbd, 0x08, 0x94, 0x42, 0x66, 0x01, 0x05, 0xb2, 0x11, 0x50, 0x31, 0x7a, 0x2b, 0x81, 0x44, 0x40, 0x89, 0xaa, 0x04, 0x1a, 0x50, 0x8c, 0x5e, 0x44, 0x81, 0xec, 0x46, 0x40, 0xc5, 0xbc, 0x12, 0x48, 0x44, 0x11, 0xa0, 0x07, 0x1a, 0x51, 0x8c, 0x5e, 0x04, 0x0a, 0x71, 0x48, 0x00, 0x00, 0x00, 0x00, 0x60, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x71, 0x48, 0x01, 0x00, 0x00, 0x00, 0x60, 0x9c, 0x00, 0x00, 0x00, 0x00, 0xd6, 0xc0, 0x10, 0xa0, 0x90, 0x55, 0x04, 0xe0, 0x37, 0x8a, 0x09, 0xa8, 0x10, 0x25, 0xae, 0x16, 0x89, 0x4a, 0x5c, 0xed, 0x0d, 
0x87, 0x14, 0xc3, 0x45, 0x5e, 0x05, 0x54, 0x88, 0x11, 0x6f, 0x14, 0xc3, 0xae, 0x80, 0x0a, 0xd1, 0x51, 0x4c, 0x40, 0x85, 0x04, 0xd1, 0x85, 0x3a, 0xf4, 0xa1, 0xeb, 0x60, 0x02, 0x2a, 0x86, 0x60, 0x02, 0x2a, 0x24, 0x48, 0x31, 0x01, 0x15, 0x32, 0x44, 0xd7, 0xd6, 0xc0, 0x30, 0xa0, 0x90, 0x55, 0x04, 0xe0, 0x37, 0x8a, 0x09, 0xa8, 0x10, 0x25, 0xae, 0x16, 0x89, 0x4a, 0x5c, 0xed, 0x0d, 0x87, 0x14, 0xc3, 0x45, 0x5e, 0x05, 0x54, 0x88, 0x11, 0x6f, 0x14, 0xc3, 0xae, 0x80, 0x0a, 0xd1, 0x51, 0x4c, 0x40, 0x85, 0x04, 0xd1, 0x85, 0x3a, 0xf4, 0xa1, 0xeb, 0x60, 0x02, 0x2a, 0x86, 0x60, 0x02, 0x2a, 0x24, 0x48, 0x31, 0x01, 0x15, 0x32, 0x44, 0xd7, 0x16, 0x81, 0xd2, 0xc1, 0x30, 0xb0, 0x28, 0x6c, 0x46, 0x71, 0xbc, 0x8a, 0xa8, 0xb0, 0x1b, 0xc5, 0x45, 0x54, 0x98, 0x12, 0x57, 0x8b, 0x44, 0x25, 0xae, 0xf6, 0x86, 0x43, 0x8a, 0xe3, 0x22, 0xaf, 0x22, 0x2a, 0xcc, 0x88, 0x37, 0x8a, 0x63, 0x57, 0x44, 0x85, 0xe9, 0x28, 0x2e, 0xa2, 0xc2, 0x82, 0xe8, 0x42, 0x1d, 0xfa, 0xd0, 0x75, 0x70, 0x11, 0x15, 0x47, 0x70, 0x11, 0x15, 0x16, 0xa4, 0x38, 0x16, 0x81, 0xd2, 0xc1, 0x10, 0xb0, 0x28, 0x6c, 0x46, 0x71, 0xbc, 0x8a, 0xa8, 0xb0, 0x1b, 0xc5, 0x45, 0x54, 0x98, 0x12, 0x57, 0x8b, 0x44, 0x25, 0xae, 0xf6, 0x86, 0x43, 0x8a, 0xe3, 0x22, 0xaf, 0x22, 0x2a, 0xcc, 0x88, 0x37, 0x8a, 0x63, 0x57, 0x44, 0x85, 0xe9, 0x28, 0x2e, 0xa2, 0xc2, 0x82, 0xe8, 0x42, 0x1d, 0xfa, 0xd0, 0x75, 0x70, 0x11, 0x15, 0x47, 0x70, 0x11, 0x15, 0x16, 0xa4, 0x38, 0xd6, 0xc0, 0x50, 0xe8, 0xe0, 0x14, 0x80, 0x11, 0x3c, 0xd5, 0x51, 0xd9, 0x0c, 0x87, 0xc9, 0xbc, 0x0a, 0xa8, 0xb2, 0x1b, 0xd5, 0x05, 0x54, 
0x99, 0xb2, 0x91, 0xe1, 0xab, 0x80, 0x2a, 0x43, 0xa2, 0x12, 0x57, 0x8d, 0x0c, 0xbf, 0x51, 0x1d, 0xd1, 0x51, 0x59, 0xb1, 0x91, 0xe1, 0xab, 0x80, 0x2a, 0x33, 0xe2, 0x8d, 0xea, 0x1a, 0x19, 0x56, 0xe6, 0x0a, 0x68, 0x1d, 0xd5, 0x5d, 0x59, 0xb0, 0x91, 0xe1, 0x2e, 0xd6, 0xb1, 0x8f, 0x5d, 0x0e, 0xab, 0x0b, 0xa8, 0x32, 0x1f, 0xba, 0x36, 0x08, 0xd6, 0xc0, 0x0d, 0x88, 0x40, 0x09, 0x24, 0xa0, 0x23, 0xa0, 0x62, 0xf0, 0xc6, 0x63, 0x25, 0x90, 0x08, 0x28, 0x51, 0x95, 0x50, 0x46, 0x21, 0xa0, 0x18, 0xbd, 0x88, 0x02, 0xd9, 0x8d, 0x80, 0x8a, 0x79, 0x25, 0x90, 0x88, 0x22, 0x40, 0x0f, 0x34, 0xa2, 0x18, 0xbd, 0x08, 0x94, 0x42, 0x74, 0x01, 0x05, 0xb2, 0x11, 0x50, 0x31, 0x7a, 0x2b, 0x81, 0x44, 0x40, 0x89, 0xaa, 0x04, 0x1a, 0x50, 0x8c, 0x5e, 0x44, 0x81, 0xec, 0x46, 0x40, 0xc5, 0xbc, 0x12, 0x48, 0x44, 0x11, 0xa0, 0x07, 0x1a, 0x51, 0x8c, 0x5e, 0x04, 0x0a, 0xd6, 0xc0, 0x2d, 0x88, 0x40, 0x09, 0x24, 0xa0, 0x23, 0xa0, 0x62, 0xf0, 0xc6, 0x63, 0x25, 0x90, 0x08, 0x28, 0x51, 0x95, 0x50, 0x46, 0x21, 0xa0, 0x18, 0xbd, 0x88, 0x02, 0xd9, 0x8d, 0x80, 0x8a, 0x79, 0x25, 0x90, 0x88, 0x22, 0x40, 0x0f, 0x34, 0xa2, 0x18, 0xbd, 0x08, 0x94, 0x42, 0x74, 0x01, 0x05, 0xb2, 0x11, 0x50, 0x31, 0x7a, 0x2b, 0x81, 0x44, 0x40, 0x89, 0xaa, 0x04, 0x1a, 0x50, 0x8c, 0x5e, 0x44, 0x81, 0xec, 0x46, 0x40, 0xc5, 0xbc, 0x12, 0x48, 0x44, 0x11, 0xa0, 0x07, 0x1a, 0x51, 0x8c, 0x5e, 0x04, 0x0a, 0x71, 0x56, 0x00, 0x00, 0x00, 0x00, 0x60, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x71, 0x56, 0x01, 0x00, 0x00, 0x00, 0x60, 0xb8, 0x00, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x0c, 0x88, 0x00, 0x09, 0x24, 0xa0, 
0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0x5d, 0xd6, 0x00, 0x2c, 0x88, 0x00, 0x09, 0x24, 0xa0, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0x5d, 0xf1, 0x48, 0xc7, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf1, 0x49, 0xc7, 0x5f, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0x01, 0xf5, 0x80, 0x4a, 0xe0, 0x59, 0x40, 0x08, 0x06, 0x10, 0xa0, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x6a, 0x0c, 0x8e, 0x09, 0x10, 0x32, 0x12, 0x63, 0x83, 0x0c, 0x2e, 0xa8, 0x60, 0x82, 0x08, 0x1e, 0x68, 0x60, 0x81, 0x04, 0x0a, 0x18, 0x30, 0x56, 0x00, 0x1e, 0xa0, 0x03, 0xea, 0xb1, 0x94, 0xc0, 0xb3, 0x80, 0x10, 0x0c, 0x20, 0x40, 0x55, 0x55, 0x55, 0x55, 0x55, 0xd5, 0x90, 0x4c, 0x80, 0x90, 0x89, 0x51, 0x61, 0x46, 0x04, 0x0f, 0x34, 0x18, 0x0b, 0x46, 0x82, 0x71, 0x40, 0x01, 0x03, 0x06, 0x1d, 0x50, 0x0f, 0xa5, 0x04, 0x9e, 0x05, 0x84, 0x60, 0x00, 0x01, 0xaa, 0x56, 0x83, 0x84, 0x19, 0xa0, 0xaa, 0xd5, 0x10, 0x61, 0x06, 0xa8, 0x6a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0x00, 0xc9, 0x00, 0x42, 0x98, 0x01, 0xc0, 0x01, 0x00, 0x02, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0xd6, 0x40, 0xc9, 0x00, 0x42, 0x98, 0x01, 0xc0, 0x01, 0x00, 0x02, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0xd6, 0x03, 0x8f, 0xc0, 0x3a, 0x20, 0x84, 0x41, 0x20, 0x82, 0x02, 0x20, 0x1a, 0x26, 0x84, 0x31, 0x20, 0x02, 0x01, 0x20, 0x1a, 0x24, 0x84, 0x21, 0x20, 0x82, 
0x00, 0x20, 0x1a, 0x23, 0x84, 0x19, 0x20, 0x22, 0x80, 0x0e, 0xa0, 0x85, 0x10, 0x44, 0x18, 0x33, 0xf1, 0x3b, 0x00, 0xbf, 0x43, 0xf1, 0x87, 0x19, 0x84, 0x86, 0x31, 0x19, 0xbf, 0x03, 0xf0, 0x07, 0x19, 0x84, 0x2e, 0xd6, 0x03, 0x09, 0xa0, 0x3a, 0x20, 0x02, 0xc1, 0x2a, 0xa2, 0xad, 0x85, 0x31, 0xcf, 0x16, 0xd6, 0x9c, 0x9b, 0xb8, 0xf3, 0x6f, 0x62, 0xd0, 0xc3, 0x89, 0x47, 0x27, 0x27, 0x36, 0x2f, 0x3e, 0x1d, 0xbd, 0x58, 0xf5, 0xf5, 0xe2, 0xd6, 0xdd, 0x8d, 0x5f, 0x8f, 0x37, 0x96, 0x9d, 0xde, 0xb8, 0x76, 0xfb, 0x63, 0xdc, 0xf3, 0x8f, 0x77, 0xe7, 0x3f, 0xf6, 0xfd, 0x1f, 0x01, 0xd6, 0x03, 0x29, 0xa0, 0x3a, 0x20, 0x02, 0xc1, 0x2a, 0xa2, 0xad, 0x85, 0x31, 0xcf, 0x16, 0xd6, 0x9c, 0x9b, 0xb8, 0xf3, 0x6f, 0x62, 0xd0, 0xc3, 0x89, 0x47, 0x27, 0x27, 0x36, 0x2f, 0x3e, 0x1d, 0xbd, 0x58, 0xf5, 0xf5, 0xe2, 0xd6, 0xdd, 0x8d, 0x5f, 0x8f, 0x37, 0x96, 0x9d, 0xde, 0xb8, 0x76, 0xfb, 0x63, 0xdc, 0xf3, 0x8f, 0x77, 0xe7, 0x3f, 0xf6, 0xfd, 0x1f, 0x01, 0xd6, 0x03, 0x0c, 0xa0, 0x40, 0x20, 0x02, 0xc1, 0x2a, 0xa2, 0xad, 0x85, 0x31, 0xcf, 0x16, 0xd6, 0x9c, 0x9b, 0xb8, 0xf3, 0x6f, 0x62, 0xd0, 0xc3, 0x89, 0x47, 0x27, 0x27, 0x36, 0x2f, 0x3e, 0x1d, 0xbd, 0x58, 0xf5, 0xf5, 0xe2, 0xd6, 0xdd, 0x8d, 0x5f, 0x8f, 0x37, 0x96, 0x9d, 0xde, 0xb8, 0x76, 0xfb, 0x63, 0xdc, 0xf3, 0x8f, 0x77, 0xe7, 0x3f, 0xf6, 0xfd, 0x1f, 0x01, 0xd6, 0x03, 0x2c, 0xa0, 0xe0, 0x2b, 0x02, 0xc1, 0x2a, 0xa2, 0xad, 0x85, 0x31, 0xcf, 0x16, 0xd6, 0x9c, 0x9b, 0xb8, 0xf3, 0x6f, 0x62, 0xd0, 0xc3, 0x89, 0x47, 0x27, 0x27, 0x36, 0x2f, 0x3e, 0x1d, 0xbd, 0x58, 0xf5, 0xf5, 0xe2, 0xd6, 0xdd, 0x8d, 0x5f, 
0x8f, 0x37, 0x96, 0x9d, 0xde, 0xb8, 0x76, 0xfb, 0x63, 0xdc, 0xf3, 0x8f, 0x77, 0xe7, 0x3f, 0xf6, 0xfd, 0x1f, 0x01, 0xd6, 0x01, 0xe9, 0x50, 0x80, 0x10, 0x26, 0x02, 0x70, 0x00, 0x80, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xd6, 0x03, 0xe9, 0x50, 0xca, 0x00, 0x08, 0x61, 0x22, 0x00, 0x07, 0x00, 0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x75, 0x80, 0x57, 0x20, 0x05, 0x05, 0x48, 0x81, 0x20, 0x85, 0x01, 0x48, 0x21, 0x20, 0x04, 0x4a, 0x11, 0x88, 0x30, 0x11, 0x88, 0x30, 0x00, 0x88, 0x30, 0x12, 0x88, 0x88, 0x08, 0x33, 0x81, 0x08, 0x03, 0x80, 0x80, 0x00, 0x31, 0xf0, 0xe0, 0xf1, 0x0a, 0x08, 0x8b, 0xa7, 0x00, 0x16, 0x8f, 0xc0, 0xe2, 0x09, 0x00, 0xde, 0x8e, 0x10, 0x10, 0x27, 0x02, 0x71, 0x00, 0x10, 0x47, 0x02, 0x71, 0x00, 0x10, 0x67, 0x02, 0x71, 0x00, 0x10, 0x07, 0x00, 0x75, 0x00, 0x56, 0x20, 0x05, 0x05, 0x48, 0x81, 0x20, 0x85, 0x01, 0x48, 0x11, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x0f, 0x1e, 0xc0, 0x0a, 0x08, 0x29, 0x14, 0x40, 0x0a, 0x02, 0x29, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x0c, 0x88, 0x40, 0x09, 0x24, 0xa0, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0x5d, 0xd6, 0x00, 0x2c, 0x88, 0x40, 0x09, 0x24, 0xa0, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0x5d, 0x75, 0x60, 0x28, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 
0x00, 0xd6, 0x00, 0x09, 0x88, 0x40, 0x09, 0x24, 0xa0, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0x5d, 0xd6, 0x00, 0x29, 0x88, 0x40, 0x09, 0x24, 0xa0, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0x5d, 0xd6, 0x00, 0xec, 0x88, 0xa0, 0x28, 0x84, 0x17, 0xd0, 0x48, 0x8b, 0xd9, 0x0b, 0xd1, 0x05, 0x34, 0xcc, 0x79, 0x16, 0x73, 0x21, 0xba, 0x80, 0x8a, 0xb9, 0x10, 0x58, 0x40, 0x23, 0x9d, 0x67, 0x30, 0x17, 0x72, 0x0b, 0x68, 0x98, 0xf3, 0x1c, 0x69, 0x31, 0x7b, 0x21, 0xba, 0x80, 0x86, 0x39, 0xcf, 0x62, 0x2e, 0x44, 0x17, 0x50, 0x31, 0x17, 0x02, 0x0b, 0x68, 0xa4, 0xf3, 0x0c, 0xe6, 0x42, 0x6e, 0x01, 0x01, 0xf5, 0x80, 0x74, 0xfc, 0x88, 0x30, 0x03, 0x80, 0x08, 0x03, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0xf5, 0x81, 0x74, 0xfc, 0x65, 0x80, 0x08, 0x33, 0x00, 0x88, 0x30, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0xd6, 0xc0, 0x50, 0xa0, 0x03, 0xa4, 0x41, 0x45, 0x50, 0x44, 0x14, 0xd0, 0x36, 0x43, 0x74, 0x01, 0x45, 0xb4, 0x37, 0x43, 0x74, 0x01, 0x45, 0xb4, 0x37, 0x43, 0x74, 0x01, 0x45, 0xb4, 0x37, 0x43, 0x74, 0x01, 0x45, 0xb4, 0x37, 0x43, 0x74, 0x01, 0x45, 0xb4, 0x37, 0x43, 0x74, 0x01, 0x45, 0xb4, 0x37, 0x43, 0x74, 0x01, 0x45, 0xb4, 0x03, 0x56, 0xc3, 0x51, 0x69, 0x01, 0xe2, 0x40, 0x1a, 0x80, 0x28, 0x0d, 0x14, 0x48, 0xa2, 0x20, 0x0e, 0xae, 0x03, 0x88, 0x13, 0x43, 0x87, 0x95, 0x16, 0x60, 0xa4, 0x01, 0x88, 0xd2, 0x40, 0x81, 0x60, 0x88, 0x83, 0xeb, 0x00, 0xe2, 0xc4, 0xd0, 0x61, 
0xa5, 0x05, 0x18, 0x69, 0x00, 0xa2, 0x34, 0x50, 0x20, 0x18, 0xe2, 0xe0, 0x3a, 0x80, 0x38, 0x31, 0x74, 0x58, 0x69, 0x01, 0x46, 0x1a, 0x80, 0x28, 0x0d, 0x14, 0x08, 0x86, 0x38, 0xb8, 0x0e, 0x20, 0x4e, 0x0c, 0x1d, 0x00, 0xd6, 0x00, 0x0c, 0x88, 0x40, 0x09, 0x24, 0xa0, 0x23, 0xa0, 0x62, 0xf0, 0xc6, 0x63, 0x25, 0x90, 0x08, 0x28, 0x51, 0x95, 0x50, 0x46, 0x21, 0xa0, 0x18, 0xbd, 0x88, 0x02, 0xd9, 0x8d, 0x80, 0x8a, 0x79, 0x25, 0x90, 0x88, 0x22, 0x40, 0x0f, 0x34, 0xa2, 0x18, 0xbd, 0x08, 0x94, 0x40, 0x02, 0xda, 0x23, 0xa0, 0x62, 0xf4, 0x56, 0x02, 0x89, 0x80, 0x12, 0x55, 0x09, 0x34, 0xa0, 0x18, 0xbd, 0x88, 0x02, 0xd9, 0x8d, 0x80, 0x8a, 0x79, 0x25, 0x90, 0x88, 0x22, 0x40, 0x0f, 0x34, 0xa2, 0x18, 0xbd, 0x08, 0x14, 0xd6, 0x00, 0x2c, 0x88, 0x40, 0x09, 0x24, 0xa0, 0x23, 0xa0, 0x62, 0xf0, 0xc6, 0x63, 0x25, 0x90, 0x08, 0x28, 0x51, 0x95, 0x50, 0x46, 0x21, 0xa0, 0x18, 0xbd, 0x88, 0x02, 0xd9, 0x8d, 0x80, 0x8a, 0x79, 0x25, 0x90, 0x88, 0x22, 0x40, 0x0f, 0x34, 0xa2, 0x18, 0xbd, 0x08, 0x94, 0x40, 0x02, 0xda, 0x23, 0xa0, 0x62, 0xf4, 0x56, 0x02, 0x89, 0x80, 0x12, 0x55, 0x09, 0x34, 0xa0, 0x18, 0xbd, 0x88, 0x02, 0xd9, 0x8d, 0x80, 0x8a, 0x79, 0x25, 0x90, 0x88, 0x22, 0x40, 0x0f, 0x34, 0xa2, 0x18, 0xbd, 0x08, 0x14, 0x05, 0x11, 0x66, 0x00, 0x10, 0x61, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xd6, 0x03, 0x92, 0x00, 0x09, 0x84, 0x10, 0x08, 0x80, 0x00, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x91, 0x90, 0x48, 0x87, 0x10, 0x89, 0xb1, 0x63, 0xd4, 0x18, 0x2d, 0xc6, 0x89, 0xf1, 0x61, 0x64, 0x18, 0x11, 0x24, 0x00, 
0x71, 0x48, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x49, 0x47, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x0f, 0xa0, 0x10, 0x52, 0x04, 0xe0, 0x30, 0x82, 0x09, 0xa8, 0x90, 0x21, 0x92, 0x36, 0x88, 0x43, 0x24, 0x2d, 0x0c, 0x79, 0x14, 0xc3, 0x3e, 0x26, 0x05, 0x54, 0xc8, 0x0f, 0x61, 0x17, 0xc3, 0xa7, 0x80, 0x0a, 0x99, 0x11, 0x4c, 0x40, 0x85, 0x18, 0xf1, 0x84, 0x44, 0x34, 0xe2, 0x69, 0x67, 0xf8, 0xa3, 0x18, 0x0e, 0xf2, 0x29, 0xa0, 0x42, 0x86, 0x38, 0x03, 0xd6, 0x00, 0x2f, 0xa0, 0x10, 0x52, 0x04, 0xe0, 0x30, 0x82, 0x09, 0xa8, 0x90, 0x21, 0x92, 0x36, 0x88, 0x43, 0x24, 0x2d, 0x0c, 0x79, 0x14, 0xc3, 0x3e, 0x26, 0x05, 0x54, 0xc8, 0x0f, 0x61, 0x17, 0xc3, 0xa7, 0x80, 0x0a, 0x99, 0x11, 0x4c, 0x40, 0x85, 0x18, 0xf1, 0x84, 0x44, 0x34, 0xe2, 0x69, 0x67, 0xf8, 0xa3, 0x18, 0x0e, 0xf2, 0x29, 0xa0, 0x42, 0x86, 0x38, 0x03, 0x56, 0x00, 0x1e, 0xa0, 0x03, 0x5e, 0x60, 0x51, 0x18, 0x29, 0x02, 0xa5, 0x32, 0x18, 0xd1, 0x05, 0x54, 0xd9, 0x10, 0x49, 0x1b, 0xc4, 0x21, 0x92, 0x16, 0x86, 0x3c, 0xaa, 0x63, 0x1f, 0x93, 0x02, 0xaa, 0xec, 0x87, 0xb0, 0xab, 0xe3, 0x53, 0x40, 0x95, 0xcd, 0x88, 0x2e, 0xa0, 0xca, 0x8c, 0x78, 0x42, 0x22, 0x1a, 0xf1, 0xb4, 0x33, 0xfc, 0x51, 0x1d, 0x07, 0xf9, 0x04, 0x56, 0x00, 0x1e, 0xa0, 0x03, 0x1e, 0x60, 0x51, 0x18, 0x29, 0x02, 0xa5, 0x32, 0x18, 0xd1, 0x05, 0x54, 0xd9, 0x10, 0x49, 0x1b, 0xc4, 0x21, 0x92, 0x16, 0x86, 0x3c, 0xaa, 0x63, 0x1f, 0x93, 0x02, 0xaa, 0xec, 0x87, 0xb0, 0xab, 0xe3, 0x53, 0x40, 0x95, 0xcd, 0x88, 0x2e, 0xa0, 0xca, 0x8c, 0x78, 0x42, 0x22, 0x1a, 0xf1, 
0xb4, 0x33, 0xfc, 0x51, 0x1d, 0x07, 0xf9, 0x04, 0x56, 0x00, 0x1e, 0x00, 0x3a, 0xe0, 0x05, 0x20, 0x85, 0x91, 0x22, 0x78, 0x2a, 0x83, 0x11, 0x5d, 0x40, 0x95, 0x0d, 0x91, 0xb4, 0x41, 0x1c, 0x22, 0x69, 0x61, 0xc8, 0xa3, 0x3a, 0xf6, 0x31, 0x29, 0xa0, 0xca, 0x7e, 0x08, 0xbb, 0x3a, 0x3e, 0x05, 0x54, 0xd9, 0x8c, 0xe8, 0x02, 0xaa, 0xcc, 0x88, 0x27, 0x24, 0xa2, 0x11, 0x4f, 0x3b, 0xc3, 0x1f, 0xd5, 0x71, 0x10, 0x75, 0x60, 0x56, 0x20, 0x05, 0x05, 0x48, 0x81, 0x20, 0x85, 0x01, 0x48, 0x11, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x56, 0x20, 0x05, 0x25, 0x05, 0x84, 0x14, 0x8a, 0x14, 0x08, 0x52, 0x18, 0x52, 0x10, 0x48, 0x21, 0x48, 0x11, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x29, 0x20, 0x84, 0x31, 0x00, 0x1c, 0x00, 0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x0a, 0x38, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xd6, 0x00, 0x09, 0x20, 0x84, 0x31, 0x00, 0x1c, 0x00, 0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x0a, 0x38, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x71, 0x78, 0x44, 0x1c, 0x04, 0x49, 0xa1, 0x11, 0x59, 0x1c, 0x03, 0xa9, 0xa0, 0x11, 0x52, 0x1c, 0x02, 0x69, 0xa0, 0x11, 0x4d, 0x9c, 0x01, 0x49, 0xa0, 0x11, 0x49, 0x1c, 0x01, 0x29, 0xa0, 0x11, 0x46, 0x9c, 0x00, 0x29, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x49, 0xc6, 0x2c, 0x88, 0x03, 0x20, 0x4e, 0x82, 0x38, 0x00, 0xe2, 0x00, 0x88, 0x63, 0x20, 0x4e, 0x81, 0x38, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x4b, 0xc6, 0x2c, 0x88, 0x03, 0x20, 0x4e, 0x82, 0x38, 0x00, 0xe2, 0x00, 0x88, 0x63, 0x20, 0x4e, 0x81, 0x38, 0x04, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0xc0, 0x10, 0xa0, 0x90, 0x55, 0x04, 0xe0, 0x37, 0x82, 0x09, 0xa8, 0x10, 0x25, 0xae, 0x16, 0x89, 0x4a, 0x5c, 0xed, 0x0d, 0x87, 0x14, 0xc3, 0x45, 0x5e, 0x05, 0x54, 0x88, 0x11, 0x6f, 0x14, 0xc3, 0xae, 0x80, 0x0a, 0xd1, 0x11, 0x4c, 0x40, 0x85, 0x04, 0xd1, 0x85, 0x3a, 0xf4, 0xa1, 0xeb, 0x60, 0x02, 0x2a, 0x86, 0x60, 0x02, 0x2a, 0x24, 0x48, 0x31, 0x01, 0x15, 0x32, 0x44, 0xd7, 0xd6, 0xc0, 0x30, 0xa0, 0x90, 0x55, 0x04, 0xe0, 0x37, 0x82, 0x09, 0xa8, 0x10, 0x25, 0xae, 0x16, 0x89, 0x4a, 0x5c, 0xed, 0x0d, 0x87, 0x14, 0xc3, 0x45, 0x5e, 0x05, 0x54, 0x88, 0x11, 0x6f, 0x14, 0xc3, 0xae, 0x80, 0x0a, 0xd1, 0x11, 0x4c, 0x40, 0x85, 0x04, 0xd1, 0x85, 0x3a, 0xf4, 0xa1, 0xeb, 0x60, 0x02, 0x2a, 0x86, 0x60, 0x02, 0x2a, 0x24, 0x48, 0x31, 0x01, 0x15, 0x32, 0x44, 0xd7, 0x16, 0x81, 0xd2, 0xc1, 0x30, 0xb0, 0x28, 0x6c, 0x46, 0x71, 0xbc, 0x8a, 0xa8, 0xb0, 0x1b, 0xc1, 0x45, 0x54, 0x98, 0x12, 0x57, 0x88, 0x44, 0x25, 0xae, 0xf6, 0x86, 0x43, 0x8a, 0xe3, 0x22, 0xaf, 0x22, 0x2a, 0xcc, 0x88, 0x37, 0x8a, 0x63, 0x57, 0x44, 0x85, 0xe9, 0x08, 0x2e, 0xa2, 0xc2, 0x82, 0xe8, 0x42, 0x1d, 0xfa, 0xd0, 0x75, 0x70, 0x11, 0x15, 0x47, 0x70, 0x11, 0x15, 0x16, 0xa4, 0x38, 0x16, 0x81, 0xd2, 0xc1, 0x10, 0xb0, 0x28, 0x6c, 0x46, 0x71, 0xbc, 0x8a, 0xa8, 0xb0, 0x1b, 0xc1, 0x45, 0x54, 0x98, 0x12, 0x57, 0x88, 0x44, 0x25, 0xae, 0xf6, 0x86, 0x43, 0x8a, 0xe3, 0x22, 0xaf, 0x22, 0x2a, 0xcc, 0x88, 0x37, 0x8a, 0x63, 0x57, 0x44, 0x85, 0xe9, 0x08, 0x2e, 0xa2, 0xc2, 0x82, 0xe8, 0x42, 0x1d, 0xfa, 0xd0, 0x75, 0x70, 0x11, 0x15, 0x47, 0x70, 0x11, 
0x15, 0x16, 0xa4, 0x38, 0x46, 0x07, 0x27, 0x00, 0x8c, 0xe0, 0xa9, 0x6c, 0x88, 0x33, 0xaa, 0xe3, 0x55, 0x40, 0x95, 0xdd, 0x88, 0x2e, 0xa0, 0xca, 0x94, 0xb8, 0x42, 0x24, 0x2a, 0x71, 0xb5, 0x37, 0x1c, 0x52, 0x1d, 0x17, 0x79, 0x15, 0x50, 0x65, 0x46, 0xbc, 0x51, 0x1d, 0xbb, 0x02, 0xaa, 0x4c, 0x47, 0x74, 0x01, 0x55, 0x16, 0x44, 0x17, 0xea, 0xd0, 0x87, 0xae, 0xa3, 0x0b, 0xa8, 0x3a, 0xa2, 0x0b, 0xa8, 0xb2, 0x20, 0x46, 0x07, 0x2e, 0x00, 0x8c, 0xe0, 0xa9, 0x6c, 0x48, 0x75, 0x01, 0x75, 0xc4, 0x0b, 0xa8, 0x8c, 0x14, 0xd0, 0x30, 0xa2, 0xbb, 0xb2, 0x21, 0x92, 0x02, 0x3a, 0xc8, 0x43, 0x26, 0x39, 0x8c, 0x79, 0x54, 0x47, 0x65, 0x3e, 0x24, 0x05, 0xf4, 0x8f, 0x61, 0x56, 0x47, 0x65, 0xa7, 0x80, 0x9e, 0x11, 0xdd, 0x95, 0x19, 0xf1, 0x84, 0x44, 0x34, 0xe2, 0x29, 0xa0, 0x67, 0xfc, 0xa3, 0x3a, 0x2a, 0x0b, 0x02, 0xeb, 0xf5, 0xeb, 0xe9, 0xb9, 0xb5, 0x12, 0x08, 0xfc, 0x04, 0x0d, 0x04, 0x0a, 0x0c, 0x0b, 0x0d, 0x0f, 0x10, 0x10, 0x12, 0x13, 0x14, 0x16, 0x17, 0x18, 0x1a, 0x1c, 0x1c, 0x1d, 0x1f, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x25, 0x27, 0x28, 0x28, 0x29, 0x2a, 0x2a, 0x2a, 0x2b, 0x2c, 0x2c, 0x2d, 0x2d, 0x2d, 0x2e, 0x2e, 0x2e, 0x2e, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2e, 0x2e, 0x2e, 0x2e, 0x2d, 0x2d, 0x2d, 0x2c, 0x2b, 0x2b, 0x2a, 0x29, 0x29, 0x28, 0x27, 0x27, 0x26, 0x25, 0x24, 0x24, 0x23, 0x22, 0x21, 0x20, 0x1e, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18, 0x17, 0x16, 0x15, 0x14, 0x13, 0x11, 0x10, 0x0f, 0x0e, 0x0c, 0x0b, 0x0a, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x00, 0xff, 0xfd, 0xfc, 0xfa, 0xf9, 0xf7, 0xf6, 
0xf4, 0xf3, 0xf1, 0xf0, 0xee, 0xed, 0xeb, 0xea, 0xe8, 0xe7, 0xe5, 0xe3, 0xe1, 0xe0, 0xde, 0xdd, 0xdb, 0xda, 0xd8, 0xd6, 0xd5, 0xd3, 0xd1, 0xd0, 0xce, 0xcc, 0xcb, 0xc9, 0xc7, 0xc5, 0xc4, 0xc2, 0xc0, 0xbf, 0xbd, 0xbb, 0xba, 0xb8, 0xb6, 0xb5, 0xb4, 0xb1, 0xb0, 0xaf, 0xad, 0xab, 0xab, 0xa8, 0xa5, 0xad, 0xdc, 0xdc, 0xeb, 0xf5, 0xeb, 0xe9, 0xb9, 0xb5, 0x0d, 0x02, 0xfd, 0xfd, 0x00, 0xfb, 0xf9, 0xfa, 0xf8, 0xf7, 0xf6, 0xf5, 0xf4, 0xf2, 0xf1, 0xf0, 0xee, 0xed, 0xeb, 0xeb, 0xea, 0xe9, 0xe8, 0xe6, 0xe5, 0xe4, 0xe3, 0xe2, 0xe1, 0xe0, 0xdf, 0xde, 0xdd, 0xdc, 0xdb, 0xdb, 0xda, 0xd9, 0xd8, 0xd8, 0xd7, 0xd6, 0xd6, 0xd5, 0xd5, 0xd4, 0xd4, 0xd3, 0xd3, 0xd3, 0xd2, 0xd2, 0xd2, 0xd2, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd5, 0xd5, 0xd6, 0xd6, 0xd7, 0xd7, 0xd8, 0xd9, 0xd9, 0xda, 0xdb, 0xdc, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xef, 0xf0, 0xf1, 0xf3, 0xf4, 0xf5, 0xf7, 0xf8, 0xfa, 0xfb, 0xfd, 0xfe, 0x00, 0x01, 0x03, 0x04, 0x06, 0x08, 0x09, 0x0b, 0x0d, 0x0e, 0x10, 0x12, 0x14, 0x16, 0x17, 0x19, 0x1b, 0x1d, 0x1f, 0x21, 0x23, 0x25, 0x27, 0x28, 0x2a, 0x2c, 0x2e, 0x31, 0x32, 0x34, 0x36, 0x39, 0x3b, 0x3d, 0x3f, 0x41, 0x43, 0x45, 0x48, 0x4a, 0x4c, 0x4e, 0x50, 0x52, 0x55, 0x57, 0x58, 0x5b, 0x61, 0x5a, 0x62, 0x6b, 0x5d, 0x0f, 0x0f, 0xeb, 0xf5, 0xeb, 0xe9, 0xb9, 0xb5, 0x37, 0x18, 0xe1, 0xb9, 0xbe, 0xea, 0x20, 0x47, 0x4a, 0x2c, 0xfc, 0xd4, 0xc6, 0xd7, 0xfd, 0x26, 0x44, 0x4a, 0x38, 0x14, 0xe8, 0xc0, 0xa9, 0xa8, 
0xb8, 0xd3, 0xee, 0x02, 0x04, 0xf8, 0xdf, 0xc1, 0xa4, 0x92, 0x8e, 0x9a, 0xb6, 0xdc, 0x06, 0x31, 0x57, 0x74, 0x7e, 0x7e, 0x7e, 0x76, 0x69, 0x60, 0x5c, 0x5c, 0x60, 0x66, 0x6c, 0x6e, 0x6a, 0x60, 0x4e, 0x34, 0x14, 0xf1, 0xcd, 0xac, 0x92, 0x80, 0x80, 0x80, 0x8a, 0x9d, 0xb7, 0xd2, 0xee, 0x08, 0x1e, 0x32, 0x42, 0x4c, 0x54, 0x58, 0x58, 0x55, 0x4e, 0x49, 0x44, 0x42, 0x40, 0x40, 0x40, 0x40, 0x3e, 0x3a, 0x32, 0x29, 0x1b, 0x0a, 0xf7, 0xe2, 0xcc, 0xb7, 0xa3, 0x92, 0x86, 0x80, 0x80, 0x80, 0x80, 0x83, 0x8d, 0x9a, 0xab, 0xbe, 0xd2, 0xe6, 0xfa, 0x0e, 0x23, 0x36, 0x45, 0x52, 0x5c, 0x64, 0x66, 0x66, 0x62, 0x5c, 0x52, 0x48, 0x3c, 0x30, 0x23, 0x16, 0x0a, 0xff, 0xf5, 0xea, 0xe1, 0xd7, 0xcc, 0xc4, 0xba, 0xb0, 0xa7, 0x9f, 0x98, 0x92, 0x8e, 0x8c, 0x8b, 0x8c, 0x8c, 0x8e, 0x93, 0x98, 0x9f, 0xa6, 0xae, 0xb7, 0xc1, 0xcc, 0xda, 0xe8, 0xf9, 0x09, 0x1a, 0x29, 0x39, 0x48, 0x56, 0x63, 0x6e, 0x76, 0x7c, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x78, 0x70, 0x67, 0x5c, 0x4e, 0x40, 0x32, 0x22, 0x12, 0x02, 0xf4, 0xe3, 0xd2, 0xc3, 0xb4, 0xa6, 0x9a, 0x8e, 0x86, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x86, 0x8d, 0x96, 0xa0, 0xaa, 0xb6, 0xc4, 0xd2, 0xe1, 0xee, 0xfd, 0x0a, 0x18, 0x26, 0x34, 0x40, 0x4b, 0x56, 0x62, 0x6c, 0x75, 0x7d, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x78, 0x70, 0x69, 0x5e, 0x54, 0x49, 0x3e, 0x35, 0x2b, 0x21, 0x16, 0x0b, 0x01, 0xf7, 0xec, 0xe3, 0xd9, 0xce, 0xc4, 0xba, 0xb3, 0xac, 0xa5, 0xa0, 0x9a, 0x96, 0x94, 0x95, 0x97, 0x9b, 0x9e, 0xa2, 0xa7, 0xac, 0xb2, 0xb8, 0xc1, 0xca, 0xd4, 0xdc, 0xe6, 0xf0, 0xfa, 0x06, 0x11, 0x1a, 0x24, 0x2c, 
0x34, 0x3d, 0x46, 0x4e, 0x57, 0x5f, 0x66, 0x6c, 0x72, 0x78, 0x7c, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7a, 0x76, 0x72, 0x6d, 0x67, 0x60, 0x58, 0x50, 0x48, 0x40, 0x38, 0x2e, 0x26, 0x1c, 0x11, 0x07, 0xfe, 0xf6, 0xee, 0xe6, 0xdd, 0xd4, 0xcc, 0xc4, 0xbc, 0xb6, 0xae, 0xa7, 0xa0, 0x99, 0x94, 0x90, 0x8e, 0x8c, 0x8a, 0x8a, 0x8a, 0x8a, 0x8c, 0x8d, 0x90, 0x94, 0x98, 0x9e, 0xa5, 0xac, 0xb4, 0xbc, 0xc4, 0xcc, 0xd5, 0xde, 0xe8, 0xf1, 0xf9, 0x01, 0x09, 0x11, 0x1a, 0x23, 0x2c, 0x34, 0x3c, 0x42, 0x49, 0x50, 0x58, 0x5e, 0x64, 0x69, 0x6d, 0x72, 0x75, 0x78, 0x7b, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7c, 0x79, 0x76, 0x71, 0x6d, 0x68, 0x62, 0x5a, 0x52, 0x4b, 0x44, 0x3d, 0x36, 0x2e, 0x26, 0x1d, 0x14, 0x0b, 0x02, 0xf9, 0xf1, 0xe8, 0xe1, 0xda, 0xd4, 0xce, 0xc7, 0xc0, 0xb7, 0xae, 0xa7, 0xa1, 0x9c, 0x97, 0x93, 0x8e, 0x8a, 0x87, 0x84, 0x82, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x82, 0x84, 0x86, 0x88, 0x8c, 0x91, 0x97, 0x9e, 0xa6, 0xac, 0xb4, 0xba, 0xc0, 0xc7, 0xce, 0xd7, 0xe0, 0xe8, 0xf1, 0xf9, 0x02, 0x0a, 0x12, 0x1a, 0x21, 0x28, 0x2e, 0x36, 0x3d, 0x44, 0x4a, 0x50, 0x57, 0x5c, 0x62, 0x68, 0x6e, 0x71, 0x74, 0x77, 0x79, 0x7b, 0x7c, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7a, 0x76, 0x72, 0x6e, 0x6a, 0x66, 0x62, 0x5e, 0x58, 0x50, 0x48, 0x41, 0x3a, 0x32, 0x2b, 0x23, 0x1a, 0x12, 0x0a, 0x03, 0xfc, 0xf6, 0xee, 0xe7, 0xe0, 0xd8, 0xd0, 0xc9, 0xc2, 0xbc, 0xb6, 0xb1, 0xac, 0xa6, 0xa2, 0x9d, 0x99, 0x94, 0x90, 0x8c, 0x88, 0x84, 0x82, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
0x80, 0x80, 0x80, 0x80, 0x82, 0x84, 0x86, 0x8a, 0x8e, 0x94, 0x9a, 0xa0, 0xa6, 0xaa, 0xae, 0xb4, 0xba, 0xc1, 0xc8, 0xce, 0xd7, 0xde, 0xe6, 0xee, 0xf4, 0xfc, 0x02, 0x0a, 0x11, 0x18, 0x1f, 0x26, 0x2c, 0x34, 0x3b, 0x42, 0x48, 0x4e, 0x52, 0x58, 0x5c, 0x62, 0x66, 0x69, 0x6c, 0x6e, 0x73, 0x77, 0x7b, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7a, 0x78, 0x75, 0x72, 0x6e, 0x6a, 0x65, 0x60, 0x5b, 0x56, 0x50, 0x4b, 0x45, 0x3f, 0x39, 0x32, 0x2c, 0x26, 0x1e, 0x18, 0x10, 0x0a, 0x04, 0xfc, 0xf6, 0xee, 0xe8, 0xe2, 0xdc, 0xd6, 0xd0, 0xca, 0xc4, 0xbd, 0xb8, 0xb2, 0xac, 0xa8, 0xa4, 0xa1, 0x9d, 0x9a, 0x96, 0x92, 0x8e, 0x8b, 0x88, 0x85, 0x82, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x82, 0x82, 0x83, 0x84, 0x84, 0x86, 0x89, 0x8c, 0x91, 0x94, 0x96, 0x99, 0x9c, 0xa1, 0xa5, 0xa9, 0xac, 0xb2, 0xb6, 0xba, 0xc0, 0xc5, 0xca, 0xce, 0xd4, 0xda, 0xe0, 0xe6, 0xeb, 0xf1, 0xf7, 0xfd, 0x04, 0x0a, 0x11, 0x18, 0x1d, 0x23, 0x28, 0x2c, 0x32, 0x37, 0x3d, 0x44, 0x49, 0x4e, 0x52, 0x56, 0x5a, 0x5c, 0x60, 0x65, 0x6a, 0x6e, 0x71, 0x74, 0x76, 0x78, 0x7a, 0x7d, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7d, 0x7b, 0x7a, 0x79, 0x78, 0x76, 0x72, 0x70, 0x6c, 0x6a, 0x66, 0x64, 0x60, 0x5d, 0x5a, 0x56, 0x52, 0x4e, 0x4b, 0x48, 0x43, 0x3e, 0x39, 0x34, 0x30, 0x2c, 0x27, 0x22, 0x1e, 0x18, 0x14, 0x0e, 0x09, 0x05, 0x00, 0xfb, 0xf6, 0xf1, 0xec, 0xe6, 0xe1, 0xdc, 0xd8, 0xd4, 0xd0, 0xcb, 0xc6, 
0xc1, 0xbc, 0xb8, 0xb4, 0xb2, 0xae, 0xac, 0xa8, 0xa6, 0xa2, 0x9e, 0x9b, 0x98, 0x96, 0x94, 0x92, 0x91, 0x90, 0x8e, 0x8e, 0x8e, 0x8c, 0x8c, 0x8a, 0x89, 0x88, 0x88, 0x88, 0x88, 0x89, 0x8a, 0x8a, 0x8c, 0x8c, 0x8e, 0x8e, 0x90, 0x91, 0x93, 0x96, 0x97, 0x99, 0x9b, 0x9d, 0x9f, 0xa1, 0xa3, 0xa6, 0xa9, 0xac, 0xae, 0xb1, 0xb4, 0xb6, 0xb8, 0xbc, 0xc0, 0xc3, 0xc6, 0xc9, 0xcc, 0xd0, 0xd3, 0xd6, 0xda, 0xde, 0xe2, 0xe7, 0xeb, 0xed, 0xf0, 0xf3, 0xf6, 0xfa, 0xfe, 0xfe, 0xeb, 0xf5, 0xeb, 0xe9, 0xb9, 0xb5, 0x25, 0x47, 0xb1, 0xc1, 0x5f, 0xb5, 0x3f, 0xc4, 0x7f, 0x9a, 0x6f, 0x94, 0x2d, 0xfd, 0x3d, 0xc9, 0x0f, 0xfb, 0x0f, 0x93, 0x25, 0x7f, 0x92, 0x67, 0xd3, 0xd1, 0x05, 0x7f, 0x91, 0x6f, 0xef, 0x26, 0xf3, 0xe1, 0xff, 0x2f, 0x06, 0xc1, 0x38, 0xc1, 0xcb, 0xb0, 0x3f, 0x7c, 0x91, 0x29, 0xf5, 0x5f, 0xa0, 0x19, 0x93, 0x59, 0x95, 0xff, 0x7f, 0xa7, 0x3c, 0xf5, 0xd5, 0xe5, 0x7f, 0x93, 0x4f, 0x3d, 0xa9, 0xed, 0x7f, 0xc9, 0xed, 0x03, 0xf5, 0x24, 0xff, 0x2f, 0xe1, 0x7f, 0xa0, 0xcd, 0x7f, 0x91, 0x1f, 0xe1, 0x25, 0xe3, 0x07, 0xfd, 0x7f, 0xf6, 0xf3, 0x0a, 0x2f, 0x05, 0xc5, 0x49, 0xe0, 0xc0, 0x5f, 0xbd, 0xeb, 0x67, 0x97, 0x17, 0x1f, 0xc0, 0x0f, 0x1d, 0xcb, 0x15, 0x3d, 0xc2, 0x2f, 0xcd, 0x2d, 0xef, 0x15, 0x0f, 0x3b, 0xf5, 0xeb, 0x35, 0xff, 0x17, 0xd3, 0x26, 0x43, 0xc7, 0x1d, 0x43, 0xc5, 0x29, 0xeb, 0x2a, 0xdd, 0xcb, 0x1f, 0xdb, 0x17, 0xc9, 0x1e, 0x2f, 0xd9, 0xf9, 0xe4, 0xed, 0xef, 0x15, 0x15, 0xb1, 0x4b, 0x4a, 0xb5, 0x1f, 0xe0, 0x29, 0xf9, 0x1f, 0xff, 0x0f, 0x15, 0xf6, 0xe6, 0x23, 0xf7, 0x25, 0x3f, 0xbd, 0xcd, 0x09, 0x2b, 0xe1, 0xb0, 0x4f, 0xff, 0xe3, 
0xe5, 0x39, 0xe9, 0x23, 0xbd, 0x23, 0xf3, 0x24, 0x1b, 0x05, 0x39, 0xd3, 0x2f, 0xfd, 0x0f, 0x37, 0xbd, 0x4f, 0xfb, 0xb9, 0x49, 0xd5, 0xc3, 0x25, 0x0e, 0xf1, 0xfa, 0x3f, 0xc9, 0x4d, 0xe7, 0x09, 0xe1, 0x0b, 0xde, 0x3f, 0xc1, 0x39, 0xc9, 0xe5, 0x4d, 0xc0, 0x1d, 0xeb, 0x3f, 0xcf, 0x05, 0x0f, 0x01, 0xff, 0x2f, 0xb5, 0x4b, 0xa5, 0x2f, 0xd3, 0x01, 0x0f, 0x0f, 0x19, 0xcf, 0x35, 0xe3, 0x2f, 0xbb, 0x4f, 0xc5, 0xe7, 0x4d, 0xb9, 0x1d, 0xdd, 0x03, 0x23, 0xdf, 0x1d, 0xf3, 0x15, 0xc0, 0xf1, 0x2f, 0xf5, 0xe3, 0xde, 0x2f, 0xdc, 0x01, 0xeb, 0x0f, 0xfd, 0x05, 0x25, 0xd7, 0x1d, 0xee, 0x13, 0xf3, 0x0d, 0x0d, 0x39, 0xda, 0x15, 0xff, 0xd7, 0x2d, 0xef, 0xf9, 0x2d, 0xf5, 0xed, 0x1c, 0xef, 0xef, 0x3f, 0xb8, 0x15, 0x07, 0x14, 0xc1, 0x45, 0xcb, 0x3d, 0xd5, 0x0f, 0x05, 0xd7, 0x3f, 0xcd, 0x2f, 0xb9, 0x0d, 0x39, 0xb7, 0x01, 0x1d, 0xed, 0x0c, 0xe7, 0xf4, 0x09, 0x0f, 0x09, 0xed, 0x2f, 0xc9, 0x0c, 0x0d, 0x0f, 0xfd, 0xa9, 0x49, 0xf4, 0xfd, 0x03, 0x07, 0xdd, 0x1d, 0x1f, 0xa0, 0x2c, 0xdd, 0x1d, 0xe7, 0x2f, 0xe9, 0xff, 0x07, 0x29, 0xdd, 0x0b, 0xf7, 0xff, 0x03, 0xeb, 0x2f, 0xef, 0x0b, 0x24, 0xf9, 0xe7, 0x05, 0x09, 0x17, 0x17, 0xdd, 0xf9, 0x13, 0x29, 0xdf, 0x25, 0xe7, 0x1f, 0x01, 0x09, 0xe9, 0x3e, 0xe5, 0x14, 0xdb, 0xe7, 0x09, 0x4f, 0xbd, 0xdb, 0x3f, 0xe8, 0xfd, 0xf7, 0xf7, 0x0f, 0x0f, 0x07, 0xfc, 0x1b, 0xdb, 0x01, 0x2f, 0xe3, 0x17, 0x09, 0xf5, 0x0f, 0xfe, 0xe4, 0x17, 0xfd, 0x17, 0xe7, 0x43, 0xb5, 0x1d, 0xf3, 0xeb, 0x1d, 0x0d, 0x07, 0x2d, 0xf7, 0x09, 0xfb, 0xe1, 0x44, 0xdd, 0xe1, 0x1c, 0x2f, 0xcb, 0x05, 0xeb, 0x06, 0x03, 0x1d, 0xd7, 0x1d, 0x0d, 0x15, 
0xed, 0x01, 0x0f, 0x05, 0x0f, 0x05, 0xe7, 0x2c, 0x05, 0xe5, 0x29, 0xed, 0x01, 0xff, 0xf3, 0x1d, 0xf5, 0x0f, 0xef, 0x09, 0x0d, 0x1d, 0xe1, 0x25, 0xf9, 0xff, 0xdf, 0x2b, 0xe5, 0x03, 0xef, 0x2d, 0xe5, 0x03, 0x09, 0xf5, 0xfb, 0xf5, 0xfd, 0x09, 0xf5, 0x09, 0xf1, 0x19, 0xeb, 0x07, 0xe7, 0x15, 0x15, 0xf3, 0x01, 0x03, 0xf2, 0x09, 0x0d, 0xed, 0x1d, 0xe9, 0x0d, 0xe5, 0x3b, 0xdd, 0xee, 0x27, 0xe0, 0x13, 0x0d, 0xed, 0x19, 0xef, 0xf7, 0x1d, 0x01, 0xef, 0xf3, 0x1b, 0xef, 0x07, 0x0f, 0xe7, 0xfd, 0x03, 0x0f, 0xf7, 0x02, 0x27, 0xe1, 0x1b, 0xe0, 0x0b, 0xe9, 0x17, 0xdf, 0x1b, 0xe7, 0x1d, 0xfc, 0x15, 0xf1, 0x05, 0xed, 0x0b, 0x07, 0xea, 0x17, 0xf3, 0xf4, 0x13, 0xfb, 0x05, 0xf3, 0xfc, 0x0f, 0xf5, 0xff, 0x09, 0x23, 0xe3, 0x0f, 0x03, 0xf5, 0xf3, 0x07, 0xff, 0xfd, 0x15, 0xe9, 0x16, 0xf5, 0xf7, 0x09, 0x0f, 0xfd, 0xe0, 0x25, 0xef, 0xef, 0x13, 0x07, 0xfd, 0x07, 0xf3, 0x05, 0x05, 0x0b, 0xf9, 0xf9, 0xff, 0x09, 0xf3, 0x1d, 0xf3, 0x07, 0xff, 0xfd, 0x0e, 0xfc, 0x01, 0x1d, 0xf3, 0x17, 0xd5, 0x09, 0x09, 0x0a, 0xfd, 0x07, 0xe5, 0x15, 0xeb, 0x1f, 0xf7, 0xfd, 0x01, 0x24, 0xd9, 0x01, 0xfd, 0x0b, 0x05, 0xf7, 0x0b, 0xf5, 0x1f, 0xef, 0x09, 0x01, 0xff, 0x0f, 0xf5, 0x09, 0xf7, 0x0b, 0xfe, 0x03, 0x14, 0xf1, 0x03, 0x05, 0xf7, 0x01, 0xf9, 0x09, 0x05, 0x01, 0x0f, 0xf4, 0x25, 0xd9, 0x07, 0x19, 0xef, 0x05, 0x07, 0x0b, 0xeb, 0x05, 0x03, 0x0f, 0xf1, 0xfb, 0xff, 0x25, 0xe7, 0x0b, 0x04, 0xf5, 0x04, 0x13, 0xe9, 0x01, 0x0f, 0xfe, 0xf9, 0xff, 0x03, 0x0f, 0xe5, 0x09, 0xf3, 0x1f, 0xef, 0x01, 0xff, 0x09, 0xf8, 0xff, 0xff, 0xed, 0x0f, 0xee, 0x1d, 0xdb, 0x0f, 0xf7, 0x0f, 
0xf5, 0x09, 0x03, 0xfd, 0x0b, 0xfb, 0x05, 0x09, 0xff, 0xf1, 0xfb, 0x09, 0x15, 0xf9, 0x0d, 0xef, 0x0f, 0xfd, 0x0e, 0xff, 0xf5, 0x0b, 0x01, 0x01, 0x0d, 0x05, 0xf7, 0x0d, 0xe9, 0x0f, 0xf9, 0x03, 0xf9, 0x09, 0xfe, 0x03, 0x23, 0xe0, 0x01, 0x17, 0xf3, 0xf5, 0x0d, 0xf3, 0x2b, 0xd5, 0x0a, 0x0f, 0xfd, 0xff, 0x0b, 0xf7, 0xfe, 0x01, 0x09, 0xeb, 0x0f, 0x03, 0xef, 0x06, 0x01, 0xfc, 0x09, 0xf3, 0x13, 0xee, 0x17, 0xf7, 0xed, 0x0f, 0x0b, 0xef, 0xfb, 0x0f, 0xfc, 0x07, 0xff, 0x01, 0xf5, 0x0b, 0x15, 0xd9, 0x0f, 0x15, 0xea, 0x09, 0xf8, 0x07, 0x05, 0x03, 0xfb, 0xf7, 0x0b, 0x03, 0xf7, 0x0f, 0xf3, 0x0f, 0xf2, 0x0f, 0xff, 0xfc, 0x01, 0xf1, 0x04, 0xff, 0x09, 0xf5, 0x0c, 0xef, 0x09, 0x05, 0x07, 0xf7, 0x09, 0xfd, 0xfb, 0x05, 0x0b, 0x09, 0xfd, 0xfe, 0xff, 0x05, 0x0c, 0xf4, 0x1d, 0xe7, 0x0f, 0xfb, 0x0f, 0xf7, 0x04, 0x06, 0x01, 0xf7, 0xff, 0x01, 0x07, 0x01, 0x05, 0x07, 0xff, 0x0f, 0xf3, 0x05, 0xff, 0x01, 0x09, 0xfb, 0x0d, 0x03, 0xff, 0xfb, 0x05, 0x07, 0xff, 0x05, 0xfb, 0x0f, 0xef, 0x16, 0xed, 0x07, 0xfb, 0x01, 0x07, 0xff, 0xfd, 0xff, 0x07, 0xfb, 0xfd, 0x05, 0x07, 0xfc, 0x0f, 0xf4, 0xff, 0x0d, 0x01, 0xfb, 0xf6, 0x01, 0x09, 0xf5, 0x0f, 0xf9, 0x09, 0x03, 0xfd, 0x03, 0x01, 0x01, 0x01, 0x09, 0x0f, 0xf7, 0x05, 0xf5, 0x0e, 0xf7, 0x05, 0x15, 0xeb, 0x06, 0x05, 0x0f, 0xf7, 0x0b, 0xfb, 0xff, 0x03, 0xfd, 0x0f, 0xef, 0x14, 0xf5, 0x09, 0xff, 0x0f, 0xf7, 0x0d, 0x03, 0xff, 0xfc, 0x08, 0xff, 0x03, 0x09, 0xfb, 0x0b, 0xfc, 0xff, 0x05, 0x05, 0x03, 0x0b, 0x05, 0xf4, 0x05, 0x0d, 0xff, 0xfb, 0x15, 0xe9, 0x0b, 0xff, 0x05, 0xff, 0x07, 0xfb, 0x03, 0x07, 0xfd, 0xfa, 
0x03, 0x03, 0x03, 0xeb, 0xf5, 0xeb, 0xe9, 0xb9, 0xb5, 0x00, 0x03, 0xfa, 0x1b, 0xe3, 0x04, 0x17, 0x03, 0xe5, 0x33, 0xc8, 0x37, 0xf9, 0xd7, 0x41, 0xf1, 0xbd, 0x73, 0xb5, 0xfb, 0x2f, 0xf7, 0xfe, 0xd3, 0x5d, 0xab, 0x57, 0xbe, 0x18, 0x03, 0xfa, 0x2c, 0xab, 0x6f, 0xbf, 0x0f, 0xef, 0x51, 0x98, 0x2f, 0x13, 0xf7, 0x17, 0xe9, 0x0c, 0xe9, 0x29, 0xfb, 0xe9, 0x24, 0xf5, 0xf5, 0x47, 0x8f, 0x71, 0xbd, 0x24, 0xf6, 0x16, 0xcf, 0x5b, 0xbd, 0x01, 0x44, 0xc9, 0x0d, 0x2d, 0xf5, 0xd7, 0x15, 0x3b, 0xd1, 0x13, 0xf8, 0x01, 0x03, 0x0d, 0x00, 0x03, 0xfe, 0x1c, 0xdf, 0x19, 0x2b, 0xcf, 0x0e, 0xf2, 0x27, 0xf8, 0xee, 0x2d, 0xd3, 0x31, 0xf7, 0x01, 0xdb, 0x61, 0xb7, 0x11, 0xed, 0x41, 0xe1, 0xeb, 0x35, 0xb7, 0x4d, 0xef, 0xf7, 0x24, 0xbd, 0x54, 0xd7, 0x05, 0x0d, 0x17, 0xbb, 0x4a, 0xf1, 0xc9, 0x71, 0x9a, 0x53, 0xa7, 0x73, 0xad, 0x1a, 0x18, 0xe1, 0x1d, 0x0d, 0xea, 0x18, 0xe2, 0x43, 0xa5, 0x55, 0xdc, 0x04, 0x27, 0xdd, 0x05, 0xfb, 0x37, 0xd3, 0x1c, 0xe7, 0x15, 0xf5, 0x37, 0xa8, 0x53, 0xdb, 0xfe, 0x25, 0xcd, 0x63, 0xa6, 0x29, 0x01, 0x0d, 0x05, 0x04, 0xf3, 0x14, 0x05, 0x08, 0xfa, 0x0d, 0xd9, 0x51, 0xb3, 0x2e, 0x0f, 0xd8, 0x1b, 0x11, 0xe3, 0x23, 0xf7, 0x0f, 0xbf, 0x59, 0xff, 0xcf, 0x1b, 0x1b, 0xcf, 0x2c, 0x0a, 0xe1, 0x15, 0xec, 0x23, 0x00, 0xe9, 0x2a, 0xd3, 0x26, 0xf7, 0xe1, 0x67, 0x87, 0x43, 0x04, 0xf1, 0x2f, 0xcb, 0x14, 0x2e, 0xd7, 0x07, 0x3a, 0xaa, 0x47, 0xcd, 0x48, 0xcd, 0x2b, 0xdc, 0x23, 0xdf, 0x2e, 0xf6, 0xeb, 0x17, 0xf8, 0x11, 0x03, 0xf4, 0x02, 0x01, 0x2f, 0xd9, 0x0b, 0x19, 0xe8, 0x1d, 0xfd, 0xf7, 0x27, 0xe5, 0x01, 0x15, 0xf9, 0x14, 0xfd, 0x01, 
0xf2, 0x25, 0xd8, 0x4f, 0xba, 0xfa, 0x66, 0xa6, 0x3b, 0xdd, 0x27, 0xd8, 0x2c, 0xe7, 0x26, 0xdd, 0x1a, 0xe4, 0x31, 0xf3, 0xf3, 0x19, 0xf3, 0x0d, 0x09, 0xef, 0x27, 0xe3, 0x12, 0xff, 0x09, 0xf1, 0x15, 0x01, 0xee, 0x21, 0xd8, 0x35, 0x01, 0xcd, 0x35, 0xfc, 0xfb, 0xe9, 0x4b, 0xc9, 0xfa, 0x20, 0x18, 0xe0, 0xfb, 0x1f, 0xf9, 0xf8, 0x14, 0xef, 0xf9, 0x28, 0xe9, 0x16, 0xf7, 0xfd, 0x0b, 0x20, 0xcd, 0x35, 0xd6, 0x15, 0x13, 0xe8, 0x14, 0xd9, 0x5b, 0x9e, 0x49, 0xfb, 0xd8, 0x25, 0x18, 0xeb, 0xfa, 0x06, 0x16, 0xf7, 0x07, 0xff, 0x09, 0xf3, 0x27, 0xf6, 0xed, 0x2e, 0xcb, 0x28, 0x1b, 0xc3, 0x14, 0x3b, 0xc2, 0x06, 0x37, 0xda, 0x01, 0x01, 0x2b, 0xd3, 0x19, 0xf3, 0x06, 0x1d, 0xd1, 0x31, 0xd7, 0x21, 0x04, 0xd2, 0x4c, 0xe4, 0xf4, 0x08, 0x25, 0xdd, 0x2b, 0xc9, 0x42, 0xe1, 0xf6, 0x3a, 0xc6, 0x1e, 0x19, 0xc9, 0x4d, 0xb5, 0x33, 0x09, 0xc9, 0x3b, 0xeb, 0x16, 0xfb, 0xde, 0x25, 0x05, 0x01, 0xe9, 0x37, 0xc5, 0x24, 0x12, 0xd8, 0x2d, 0xf9, 0xf7, 0x03, 0x11, 0xf4, 0x15, 0xe0, 0x2e, 0xed, 0x07, 0xec, 0x3f, 0xce, 0x07, 0x28, 0xdb, 0x0b, 0x0f, 0xd9, 0x3f, 0xe3, 0xf5, 0x0f, 0x0c, 0x0c, 0xd9, 0x2d, 0xe9, 0x15, 0x13, 0xc9, 0x36, 0xf7, 0xff, 0x04, 0xfb, 0x0b, 0xf3, 0x2f, 0xaf, 0x53, 0xe5, 0xf9, 0x05, 0x11, 0xef, 0x0e, 0x19, 0xbd, 0x47, 0xf3, 0xd5, 0x2d, 0x0e, 0xdd, 0x0c, 0x0f, 0x03, 0x02, 0xe2, 0x37, 0xe0, 0xff, 0x33, 0xde, 0xfd, 0x08, 0x0e, 0x09, 0xf9, 0xeb, 0x1a, 0x01, 0x07, 0xee, 0x1f, 0xec, 0x13, 0xef, 0x21, 0xcd, 0x4e, 0xbd, 0x20, 0x0a, 0xf3, 0x19, 0xef, 0x17, 0xe3, 0x24, 0xdd, 0x2f, 0xca, 0x5b, 0xa3, 0x2d, 0x1d, 0xcf, 0x27, 0xf5, 0xef, 0x13, 0x19, 
0xd8, 0x16, 0xf2, 0x3e, 0xb3, 0x37, 0xf5, 0xfc, 0x11, 0xfc, 0xfe, 0xff, 0x23, 0xcc, 0x36, 0xe2, 0x15, 0xee, 0x15, 0x0b, 0xe7, 0x15, 0x09, 0xf4, 0x05, 0x0d, 0x06, 0xd9, 0x2b, 0xfd, 0xe9, 0x32, 0xbb, 0x48, 0xd1, 0x2f, 0xef, 0x04, 0xf9, 0x27, 0xcc, 0x15, 0x2b, 0xab, 0x4b, 0xf5, 0xdb, 0x17, 0x1e, 0xe0, 0x09, 0x0b, 0x0d, 0xe1, 0x1e, 0xf6, 0xfd, 0x0f, 0x1f, 0xa9, 0x57, 0xf2, 0xe5, 0x0e, 0x28, 0xeb, 0xee, 0x34, 0xcb, 0x0b, 0x29, 0xef, 0xe1, 0x21, 0x1d, 0xc2, 0x3c, 0x02, 0xdc, 0x2a, 0xfa, 0xd9, 0x3a, 0xd4, 0x2d, 0xeb, 0xe7, 0x42, 0xda, 0xfd, 0x2a, 0xbe, 0x53, 0xd5, 0x04, 0x14, 0xf5, 0x1b, 0xf5, 0xf2, 0x29, 0xed, 0x0f, 0xfa, 0x00, 0x13, 0xea, 0x21, 0xdb, 0x00, 0x37, 0xd5, 0x07, 0x21, 0xd5, 0x3a, 0xd7, 0x14, 0xfa, 0x23, 0xe5, 0xf5, 0x35, 0xc4, 0x35, 0xdf, 0x19, 0x0b, 0xf1, 0xf5, 0x2f, 0xd8, 0x3d, 0xad, 0x67, 0x97, 0x57, 0xeb, 0xf1, 0x18, 0x02, 0xf5, 0x0b, 0x14, 0xdd, 0x29, 0xff, 0xe6, 0x05, 0x2e, 0xcc, 0x18, 0x16, 0xef, 0x0b, 0xfd, 0x05, 0x0f, 0xe5, 0x21, 0xff, 0x01, 0xeb, 0x21, 0xee, 0x11, 0xfb, 0xfb, 0x0b, 0x07, 0xf3, 0x17, 0xf5, 0x0f, 0xf9, 0xeb, 0x40, 0xc5, 0x2e, 0xea, 0x0c, 0xf7, 0x0b, 0xfa, 0xfd, 0x29, 0xca, 0x2e, 0xdd, 0x27, 0xe2, 0x2e, 0xd2, 0x17, 0x29, 0xc7, 0x1d, 0x2a, 0xf1, 0xfd, 0x13, 0x03, 0xfd, 0x05, 0x0b, 0xea, 0x15, 0x0c, 0xda, 0x27, 0x01, 0xe5, 0x11, 0x1c, 0xd5, 0x19, 0x22, 0xcc, 0x2d, 0xe9, 0x18, 0xf7, 0x07, 0xfd, 0x03, 0x0f, 0xf5, 0x03, 0x0c, 0xf5, 0x0b, 0xfb, 0x0b, 0xf5, 0x11, 0xf4, 0x15, 0xde, 0x2a, 0xe4, 0x21, 0xd6, 0x18, 0x13, 0xe3, 0x15, 0xed, 0x39, 0xc8, 0x13, 0x1b, 0xe3, 0x13, 0x0f, 0xd3, 0x1f, 
0x17, 0xdf, 0x12, 0x13, 0xda, 0x29, 0xec, 0x06, 0xfb, 0x18, 0xf4, 0x07, 0x03, 0xfe, 0x03, 0x0f, 0xef, 0x11, 0x05, 0xd5, 0x56, 0xae, 0x1b, 0x3a, 0xab, 0x31, 0x1a, 0xbb, 0x31, 0x14, 0xd3, 0x1c, 0xf1, 0x27, 0xd7, 0x0e, 0x1c, 0xd3, 0x2a, 0xfa, 0xef, 0x27, 0xdb, 0x12, 0x11, 0xd7, 0x2f, 0xed, 0x03, 0xfe, 0x0d, 0x01, 0xeb, 0x17, 0x00, 0xfc, 0xf4, 0x27, 0xdf, 0x1b, 0xe9, 0x09, 0x25, 0xdb, 0x0b, 0x13, 0xd3, 0x45, 0xbe, 0x3f, 0xdb, 0x18, 0xee, 0x0e, 0xfe, 0x0b, 0xf1, 0x16, 0xfb, 0xf1, 0x0f, 0x14, 0xe9, 0xf7, 0x2b, 0xed, 0x02, 0x03, 0x03, 0xfb, 0x0f, 0xfb, 0x15, 0xd5, 0x29, 0xed, 0x0f, 0xee, 0x16, 0xe5, 0x0b, 0x1d, 0xd4, 0x35, 0xe3, 0x03, 0x0f, 0xed, 0x13, 0xf7, 0x06, 0x0c, 0xe8, 0x19, 0xfe, 0xf5, 0x1c, 0xf2, 0xf5, 0x19, 0xf5, 0x0f, 0xef, 0x13, 0xfd, 0xf3, 0x1d, 0xe2, 0x21, 0xd5, 0x3d, 0xc7, 0x29, 0xdf, 0x2d, 0xe9, 0xee, 0x2f, 0xe3, 0x07, 0x13, 0xef, 0x01, 0x21, 0xd9, 0x14, 0x0f, 0xe4, 0x1b, 0xea, 0x29, 0xce, 0x26, 0x0b, 0xdc, 0x31, 0xf7, 0xef, 0x1c, 0xeb, 0x11, 0xfd, 0x09, 0xf5, 0x09, 0xf7, 0x29, 0xb6, 0x59, 0xc7, 0x02, 0x35, 0xc8, 0x1d, 0x05, 0xf8, 0xfe, 0xff, 0x05, 0x0c, 0xf4, 0xf4, 0xeb, 0xf5, 0xeb, 0xe9, 0xb9, 0xb5, 0xfe, 0x20, 0x2e, 0x42, 0x3a, 0x2e, 0x07, 0x7e, 0x96, 0x1e, 0x7e, 0x6f, 0x45, 0x18, 0xaf, 0xa7, 0x97, 0xf8, 0xab, 0xfa, 0xb7, 0xb0, 0xbc, 0x9e, 0xc9, 0xc8, 0x06, 0x99, 0xe3, 0x5e, 0x5b, 0xce, 0x7e, 0x4e, 0x4a, 0x7e, 0x7e, 0x5f, 0x46, 0x7e, 0x7e, 0xcf, 0x7e, 0x37, 0x04, 0xac, 0x17, 0x2c, 0x08, 0xa5, 0xb0, 0xbe, 0xeb, 0xc6, 0xdf, 0xd8, 0xa0, 0x91, 0xc1, 0x24, 0xc2, 0x9d, 0x92, 0x96, 0x99, 0xcb, 0xb7, 0xc0, 
0x99, 0xbd, 0xef, 0xff, 0xf7, 0xc6, 0xc6, 0x0c, 0x0f, 0x19, 0x3b, 0x42, 0xfc, 0x03, 0x5c, 0x6f, 0x47, 0x67, 0x66, 0x7e, 0x78, 0x7e, 0x7e, 0x66, 0x7e, 0x72, 0x53, 0x36, 0x77, 0x6d, 0x5b, 0x1e, 0x52, 0x6e, 0xff, 0x37, 0xf6, 0xe5, 0xb7, 0xe7, 0x00, 0x8b, 0xa3, 0x92, 0x8f, 0x9e, 0x8c, 0x92, 0x91, 0x92, 0xc9, 0x91, 0x90, 0x92, 0xd5, 0x93, 0x94, 0xb2, 0xcb, 0x97, 0xc0, 0x96, 0xb3, 0xc4, 0xa2, 0xdb, 0x1f, 0x22, 0x02, 0x9f, 0x1d, 0x52, 0x47, 0x14, 0x79, 0x4c, 0x4a, 0x7e, 0x7b, 0x26, 0x77, 0x7e, 0x7e, 0x7e, 0x58, 0x42, 0x67, 0x4e, 0x72, 0x7e, 0x7e, 0x31, 0x7d, 0x7d, 0x56, 0x7e, 0x7e, 0x53, 0x27, 0x1a, 0x46, 0x7e, 0xa7, 0x0e, 0x36, 0x23, 0x0a, 0x0d, 0x87, 0x0a, 0x41, 0xb7, 0xd5, 0x25, 0xff, 0x99, 0x8b, 0x87, 0xf5, 0xfb, 0xab, 0x87, 0xb0, 0xac, 0xef, 0x8a, 0x90, 0x93, 0xb1, 0xf1, 0xb1, 0x90, 0x8d, 0xa8, 0xc7, 0x8e, 0xaf, 0xb3, 0xa6, 0xdc, 0xa8, 0xc0, 0x97, 0xbb, 0x00, 0x1d, 0xe2, 0xa0, 0xde, 0xea, 0x5f, 0x2f, 0x3f, 0x41, 0x16, 0x01, 0xde, 0x4c, 0x2e, 0xbf, 0xfb, 0x37, 0x42, 0x28, 0x32, 0x1f, 0xde, 0xf7, 0x94, 0x30, 0x5e, 0x46, 0xcd, 0x3f, 0xdf, 0x12, 0x77, 0xdd, 0x34, 0x7e, 0x1f, 0x07, 0x68, 0x67, 0x7e, 0xe7, 0x32, 0x6d, 0x7e, 0x67, 0x1f, 0x2e, 0x7e, 0x57, 0x23, 0x22, 0x1f, 0x6e, 0x78, 0x5c, 0x03, 0xf2, 0x44, 0x0e, 0xee, 0x3d, 0xfb, 0xa3, 0x1a, 0x03, 0xfe, 0xd7, 0xbd, 0xfd, 0x0d, 0xd3, 0x95, 0x9e, 0xbe, 0xce, 0x33, 0xfb, 0x8b, 0x86, 0xbd, 0x05, 0xb6, 0x89, 0x9c, 0xb2, 0xfe, 0x07, 0x8e, 0xaa, 0x1e, 0xe7, 0x8e, 0x9f, 0xcc, 0xd2, 0xfe, 0x04, 0x35, 0xdb, 0xc0, 0x4b, 0x21, 0xe3, 0x13, 0x41, 0x3b, 0xe9, 0x02, 0x70, 0x57, 0xdf, 
0xf7, 0x77, 0x37, 0xf2, 0x06, 0xb5, 0x0e, 0x73, 0x17, 0xdb, 0x5d, 0x47, 0x11, 0xc4, 0xe6, 0x3d, 0x3f, 0xcf, 0x72, 0x19, 0xe8, 0x36, 0xdf, 0x91, 0x64, 0x01, 0x89, 0x1c, 0x17, 0x8b, 0xc8, 0x3b, 0x90, 0x8c, 0xea, 0x3f, 0xa5, 0x91, 0xe1, 0x2a, 0xff, 0x8f, 0xe2, 0xdf, 0x9c, 0xfa, 0x00, 0xdf, 0xf3, 0xb3, 0x91, 0xdc, 0xe7, 0x18, 0x25, 0xdb, 0xce, 0x98, 0xd8, 0x55, 0xff, 0xfa, 0x48, 0xc7, 0xf4, 0x17, 0xd4, 0xd6, 0x43, 0x2f, 0xe1, 0x2a, 0x0b, 0xeb, 0xf8, 0xfb, 0x14, 0xfe, 0x50, 0xcb, 0x06, 0x65, 0x01, 0x20, 0x20, 0x07, 0x16, 0x5b, 0x5f, 0xc3, 0x13, 0xfe, 0x6b, 0x17, 0x09, 0x06, 0x42, 0x34, 0x13, 0x3f, 0x16, 0xe5, 0x05, 0x6f, 0x4a, 0x53, 0x28, 0xe1, 0x06, 0x5e, 0x39, 0xfe, 0x57, 0xd3, 0x16, 0x36, 0x2b, 0x91, 0x72, 0x47, 0xcf, 0xe2, 0x4e, 0x0d, 0x13, 0x0a, 0x07, 0xb7, 0xfe, 0x61, 0xe7, 0xd6, 0xf3, 0xef, 0x46, 0xcc, 0xf2, 0xdb, 0xaf, 0xe5, 0x33, 0xef, 0xf2, 0xfd, 0x90, 0x07, 0x01, 0xbf, 0x02, 0xca, 0x0c, 0x1f, 0xff, 0xb7, 0xf6, 0x0b, 0x0b, 0x0b, 0xc3, 0x97, 0x1a, 0x26, 0x02, 0xce, 0xa7, 0x0e, 0x7e, 0xcb, 0xd6, 0xf2, 0x33, 0xde, 0x07, 0xee, 0xa5, 0xce, 0x12, 0xf7, 0x54, 0x03, 0x95, 0xd9, 0x07, 0xd5, 0xf6, 0x22, 0x23, 0xec, 0xa6, 0x02, 0xcb, 0xd6, 0xf9, 0xd8, 0xe1, 0xef, 0xba, 0xde, 0x07, 0xd3, 0xc0, 0x2f, 0xd3, 0xcc, 0xe1, 0x05, 0xef, 0xfa, 0xed, 0x07, 0xc3, 0x0e, 0x0b, 0xfb, 0xd5, 0xf8, 0xf8, 0x03, 0xe1, 0x36, 0x07, 0xdf, 0x0e, 0x3e, 0xe3, 0xd3, 0x05, 0x51, 0x03, 0xfa, 0x01, 0x06, 0x2b, 0x0a, 0x06, 0xf1, 0x3f, 0x15, 0x18, 0xef, 0x2b, 0xc7, 0xda, 0x4e, 0x4f, 0x0a, 0xf6, 0xdf, 0xfb, 0x25, 0x44, 0x12, 0x0d, 0x06, 0xf7, 0x05, 
0x2d, 0x1f, 0x0e, 0x3f, 0x0f, 0xe3, 0xef, 0x45, 0x2f, 0x11, 0xdf, 0x0c, 0x25, 0xfe, 0x23, 0x49, 0x00, 0xfe, 0x1c, 0xfe, 0x36, 0xfb, 0xdb, 0x58, 0x3b, 0xbe, 0x32, 0x57, 0xe7, 0xda, 0x06, 0x6a, 0x0f, 0xf7, 0x32, 0x5f, 0x05, 0xc5, 0x37, 0xff, 0x75, 0x1f, 0xd2, 0x17, 0x37, 0x22, 0x0f, 0x2b, 0xf8, 0x2f, 0x17, 0xfe, 0x2f, 0x32, 0x0d, 0x06, 0x1b, 0xf4, 0xee, 0x43, 0x05, 0xc6, 0x2a, 0xf6, 0xe8, 0x07, 0xf7, 0xee, 0x17, 0xfb, 0xdb, 0xd6, 0x0d, 0xff, 0xf6, 0x12, 0xdb, 0xe0, 0xca, 0xef, 0xfc, 0x00, 0xf2, 0xc4, 0xdf, 0xff, 0xe3, 0xac, 0xbe, 0xf5, 0xf2, 0xd7, 0xa5, 0xbd, 0xcb, 0x0e, 0xf7, 0x98, 0xae, 0xf4, 0xf5, 0xde, 0xbf, 0xd3, 0x08, 0xe7, 0x9a, 0xf6, 0xe4, 0xc7, 0xe5, 0xbf, 0xf3, 0xd8, 0xf8, 0xeb, 0xb9, 0xce, 0xdb, 0x08, 0xf8, 0xeb, 0xdb, 0xd8, 0x2a, 0x1f, 0xb6, 0xdf, 0x25, 0xcb, 0xf1, 0xeb, 0x08, 0x1e, 0xc9, 0xd9, 0x04, 0xff, 0x08, 0x07, 0xaf, 0x32, 0xf4, 0xdb, 0xf2, 0xf8, 0x0c, 0x07, 0x06, 0x1a, 0xf9, 0xfb, 0xce, 0xfd, 0x1b, 0x03, 0x11, 0xf5, 0xe4, 0x22, 0x1b, 0x0e, 0x07, 0x16, 0x02, 0x2b, 0x0a, 0xff, 0x17, 0x10, 0x36, 0x07, 0xec, 0x13, 0x41, 0x1e, 0xfc, 0x2b, 0x2b, 0x09, 0x02, 0x2e, 0x0a, 0x21, 0x19, 0x2b, 0x27, 0x14, 0x1e, 0x10, 0x04, 0x15, 0x37, 0x12, 0x29, 0xee, 0x1f, 0x0c, 0x0e, 0x49, 0x41, 0x02, 0x16, 0x0a, 0x1e, 0x41, 0xfb, 0x1e, 0xfe, 0x0c, 0x25, 0x11, 0xfa, 0xf7, 0x12, 0xf5, 0x44, 0x05, 0xf1, 0xfe, 0x13, 0x1b, 0xff, 0x09, 0xff, 0x07, 0x1a, 0x05, 0xf8, 0x07, 0x0c, 0xfe, 0x04, 0xda, 0x02, 0x32, 0xfb, 0xd4, 0x12, 0x32, 0x03, 0xfa, 0xff, 0xec, 0x07, 0x07, 0xd1, 0x13, 0x30, 0xff, 0xf8, 0x0b, 0x2a, 0x16, 0x10, 0x0a, 
0x21, 0x02, 0x28, 0x03, 0xfc, 0x3e, 0x0e, 0xfe, 0x1b, 0x13, 0xfb, 0x12, 0x08, 0x04, 0x0e, 0x1b, 0xee, 0x03, 0xf2, 0x0c, 0x33, 0x07, 0xed, 0xec, 0x11, 0xf2, 0xf5, 0xe6, 0xf8, 0xf3, 0xfe, 0xf2, 0xe5, 0xde, 0x0c, 0xc6, 0xd4, 0xf8, 0xf4, 0xdf, 0xd1, 0xde, 0xe0, 0xcf, 0xec, 0xd2, 0xbc, 0xd5, 0xdc, 0xcd, 0xd4, 0xd8, 0xcb, 0xb8, 0xe1, 0xdb, 0xde, 0xd5, 0xc9, 0xe3, 0xed, 0xcd, 0xde, 0xf1, 0xe2, 0xdc, 0xd0, 0xfc, 0x06, 0xc1, 0xde, 0xf9, 0xcf, 0xe6, 0x06, 0xe1, 0xfd, 0xea, 0xeb, 0xe1, 0xfa, 0xfe, 0x02, 0xec, 0xeb, 0x02, 0xfc, 0xfa, 0xfb, 0xf6, 0xfc, 0x15, 0xfc, 0xd9, 0xfe, 0x06, 0xfb, 0x0b, 0xfe, 0x0d, 0x0d, 0xeb, 0xf5, 0xeb, 0xe9, 0xb9, 0xb5, 0x1f, 0x11, 0x01, 0xf9, 0xf7, 0xf7, 0xf8, 0xf9, 0xfe, 0x06, 0x10, 0x0a, 0xf8, 0xeb, 0x0c, 0x1a, 0xfd, 0xe5, 0xe5, 0xf3, 0xf9, 0x06, 0x0b, 0x08, 0x06, 0x1b, 0x24, 0x0f, 0xf7, 0xec, 0xed, 0xec, 0xef, 0xf5, 0xfd, 0x04, 0xfe, 0xfc, 0x07, 0x10, 0x0d, 0x03, 0x00, 0xf7, 0xf7, 0x06, 0x1f, 0x16, 0x02, 0xfc, 0xfc, 0xf1, 0xe0, 0xdb, 0xdc, 0xed, 0x07, 0x24, 0x1a, 0x0d, 0x18, 0x26, 0x0b, 0xe9, 0xfa, 0x06, 0xff, 0xec, 0xe3, 0xf8, 0x10, 0x0d, 0xf1, 0xe4, 0xeb, 0xed, 0xfb, 0x0a, 0x12, 0x0b, 0x1c, 0x36, 0x33, 0x10, 0xf0, 0xe6, 0xe5, 0xe4, 0xd7, 0xcd, 0xdc, 0x01, 0x20, 0x24, 0x08, 0x01, 0x15, 0x20, 0x1d, 0x08, 0xf0, 0xeb, 0xf0, 0xfa, 0x03, 0x08, 0x01, 0xf4, 0xed, 0xea, 0xeb, 0xf0, 0xfe, 0x0c, 0x15, 0x1b, 0x1f, 0x13, 0xfb, 0xef, 0xf5, 0x07, 0x12, 0xfb, 0xec, 0xf2, 0xfe, 0xf2, 0xec, 0xfa, 0x01, 0x01, 0xf7, 0xf4, 0x0f, 0x20, 0x16, 0x02, 0x0d, 0x17, 0x08, 0xf9, 0xef, 0xeb, 0xe7, 0xe0, 0xe6, 0xfc, 0x13, 
0x0b, 0xfd, 0xff, 0x04, 0x0e, 0x1c, 0x28, 0x0e, 0xef, 0xe7, 0xf8, 0xf6, 0xea, 0xeb, 0xf7, 0x0c, 0x0d, 0xf3, 0xf5, 0x08, 0x14, 0x0b, 0x06, 0x00, 0xf4, 0xf3, 0x04, 0x13, 0x0a, 0xf8, 0xe9, 0xed, 0x05, 0x1f, 0x1a, 0xf2, 0xcb, 0xd3, 0xfc, 0x14, 0x25, 0x23, 0x12, 0xfa, 0xf6, 0x02, 0x07, 0xfc, 0xe3, 0xda, 0xf8, 0x0b, 0x08, 0xfd, 0x05, 0x07, 0x08, 0x13, 0x1a, 0x06, 0xe9, 0xeb, 0xf7, 0x02, 0x05, 0x03, 0xfc, 0xf7, 0xf8, 0xfe, 0xfd, 0xf8, 0xfb, 0x01, 0x06, 0x0d, 0x17, 0x19, 0x0a, 0xf6, 0xe6, 0xf6, 0x0e, 0xf8, 0xdb, 0xd9, 0xf8, 0x13, 0x1c, 0x16, 0x0d, 0x0b, 0x04, 0xf2, 0xe8, 0xed, 0x02, 0x19, 0x14, 0x07, 0xfe, 0xf9, 0xf5, 0xfd, 0x05, 0xf2, 0xd5, 0xd1, 0xf5, 0x2d, 0x39, 0x13, 0xe8, 0xfb, 0x1e, 0x1d, 0x07, 0xe6, 0xde, 0xf3, 0xfc, 0xfd, 0xfb, 0xf7, 0xf6, 0xf8, 0xfd, 0x02, 0x06, 0x0b, 0x11, 0x16, 0x11, 0x05, 0xf9, 0x01, 0x06, 0xf8, 0xe9, 0xe5, 0xf4, 0x09, 0xf7, 0xe5, 0xf6, 0x21, 0x1c, 0xf8, 0xed, 0xfd, 0x22, 0x2b, 0xfe, 0xf2, 0xff, 0x05, 0xf5, 0xe4, 0xe4, 0xf4, 0x05, 0x04, 0xf8, 0xf5, 0x04, 0x13, 0x10, 0xf6, 0x05, 0x1d, 0x0f, 0xf6, 0xf1, 0x05, 0x11, 0x03, 0xe4, 0xd1, 0xe5, 0xf1, 0xfd, 0x17, 0x29, 0x1b, 0xfd, 0x00, 0x00, 0xf9, 0xf2, 0xf9, 0x02, 0x04, 0x01, 0xfd, 0x04, 0x10, 0x12, 0xfa, 0xd8, 0xca, 0xf4, 0x11, 0x0e, 0x08, 0x08, 0x19, 0x2a, 0x21, 0x05, 0xe4, 0xce, 0xd1, 0xe9, 0x02, 0x0e, 0x0a, 0x16, 0x27, 0x09, 0xe6, 0xdd, 0xf2, 0xfd, 0x05, 0x0d, 0x11, 0x12, 0x0d, 0x06, 0x00, 0xf8, 0xeb, 0xdf, 0xe2, 0xf1, 0x04, 0x14, 0x19, 0x12, 0x05, 0xfb, 0x01, 0x11, 0x1a, 0xf2, 0xd1, 0xdb, 0xfc, 0x14, 0x12, 0x04, 0x02, 0x04, 0xf8, 0xde, 0xf1, 
0x0d, 0x14, 0x08, 0xff, 0x00, 0x05, 0x0e, 0x0e, 0xfe, 0xe4, 0xdd, 0xed, 0x08, 0x1b, 0x10, 0xfd, 0xfc, 0xfd, 0xfc, 0xf7, 0xf4, 0xff, 0x09, 0x06, 0xf9, 0xfe, 0x10, 0x15, 0x0a, 0xf1, 0xe6, 0xfa, 0x03, 0xfd, 0xf4, 0xf1, 0x01, 0x09, 0xfd, 0xf5, 0x03, 0x18, 0x13, 0x07, 0xfc, 0xf6, 0xf8, 0xfa, 0xfd, 0x01, 0xff, 0xf6, 0xf3, 0x03, 0x0a, 0x02, 0xf5, 0xf1, 0xf5, 0xfb, 0x01, 0x08, 0x11, 0x1a, 0x1b, 0x0b, 0xf7, 0xf0, 0x03, 0xfa, 0xda, 0xce, 0xda, 0xf8, 0x13, 0x23, 0x24, 0x1a, 0x0d, 0x01, 0xfd, 0xf6, 0xea, 0xe2, 0xf4, 0x18, 0x20, 0x13, 0xfa, 0xe5, 0xe5, 0xf0, 0xf9, 0xf8, 0xf0, 0xf8, 0x0f, 0x17, 0x1b, 0x1e, 0x1d, 0x07, 0xf9, 0xf7, 0xef, 0xdb, 0xd2, 0xe4, 0xfb, 0x11, 0x1e, 0x1c, 0x0e, 0xf8, 0xeb, 0xf1, 0x0c, 0x17, 0x02, 0xf9, 0xff, 0x0c, 0x10, 0x01, 0xec, 0xe5, 0xec, 0xfe, 0x02, 0xf7, 0xfc, 0x0a, 0x10, 0x01, 0x01, 0x06, 0x07, 0x06, 0x08, 0x04, 0xf8, 0xf2, 0xf4, 0xfb, 0x00, 0x00, 0xfe, 0xf8, 0xf1, 0xe9, 0xf5, 0x15, 0x1f, 0x0f, 0x03, 0x19, 0x17, 0xfe, 0xe5, 0xd9, 0xec, 0x02, 0xff, 0xf8, 0xf9, 0x08, 0x17, 0x14, 0x05, 0xf7, 0xf4, 0xf0, 0xf5, 0x0b, 0x1f, 0x1d, 0x04, 0xe3, 0xec, 0x04, 0x04, 0xdb, 0xe2, 0x0d, 0x15, 0x0a, 0xfa, 0xfd, 0x16, 0x18, 0x08, 0xf8, 0x01, 0xf5, 0xdf, 0xeb, 0x07, 0x18, 0x0c, 0xf5, 0xeb, 0xf6, 0x06, 0x07, 0xfb, 0xf6, 0x02, 0x19, 0x1d, 0x09, 0xf7, 0xef, 0xf6, 0x01, 0x01, 0xf6, 0xec, 0xec, 0xf9, 0x06, 0x0c, 0x14, 0x11, 0x04, 0xf5, 0xf7, 0xff, 0x01, 0xff, 0xfb, 0x00, 0x09, 0x00, 0xf8, 0xfe, 0x0b, 0x00, 0xed, 0xe9, 0xf5, 0x0d, 0x16, 0x05, 0xf8, 0xf6, 0xff, 0x0a, 0x01, 0xfc, 0x06, 0x11, 0x11, 0x05, 0xf6, 0xea, 0xe6, 
0xea, 0xf4, 0xf8, 0xfa, 0x02, 0x0f, 0x1d, 0x1e, 0x10, 0x08, 0x05, 0xfd, 0xe9, 0xe2, 0xe9, 0xf6, 0x04, 0x06, 0x02, 0x01, 0x06, 0x09, 0x03, 0xef, 0xf0, 0xfe, 0x08, 0x0c, 0x0c, 0x0d, 0x0f, 0x06, 0xf7, 0xef, 0xfb, 0xef, 0xe0, 0xe9, 0x08, 0x1f, 0x16, 0xfa, 0xe9, 0xf7, 0x0e, 0x08, 0x03, 0x03, 0x03, 0x05, 0x0d, 0x13, 0x08, 0xed, 0xce, 0xcb, 0xfd, 0x18, 0x10, 0x01, 0x01, 0x08, 0x0c, 0x0d, 0x08, 0xff, 0xfa, 0x00, 0x06, 0x05, 0xfa, 0xeb, 0xe4, 0xee, 0x00, 0x0e, 0x0e, 0x03, 0x03, 0x07, 0x08, 0x08, 0x04, 0x00, 0xf9, 0xf1, 0xf2, 0x04, 0x17, 0x03, 0xf0, 0xf1, 0xfd, 0xf8, 0xf9, 0x04, 0x04, 0xfe, 0xfe, 0x0b, 0x13, 0x17, 0x13, 0x06, 0xef, 0xe6, 0xee, 0xf4, 0xef, 0xe3, 0xe3, 0x03, 0x22, 0x2d, 0x20, 0x24, 0x16, 0xec, 0xcf, 0xd1, 0xec, 0x06, 0x14, 0x16, 0x10, 0x06, 0xec, 0xe3, 0xf2, 0xfe, 0xf5, 0xf0, 0x08, 0x1d, 0x25, 0x1c, 0x07, 0x0a, 0x08, 0xee, 0xd5, 0xd8, 0xed, 0xfa, 0x01, 0x02, 0x03, 0x0b, 0x18, 0x18, 0x02, 0xe9, 0xe8, 0x01, 0x18, 0x19, 0x08, 0xfd, 0x0d, 0x09, 0xf0, 0xdc, 0xd5, 0xe8, 0xf9, 0xf2, 0xf2, 0x05, 0x22, 0x34, 0x31, 0x1e, 0x08, 0xf6, 0xe8, 0xde, 0xde, 0xe8, 0xf7, 0x01, 0xfc, 0x03, 0x11, 0x13, 0x04, 0xf1, 0xf0, 0x03, 0x11, 0x0a, 0xfc, 0x0a, 0x0f, 0x06, 0xfd, 0xf9, 0xf6, 0xf5, 0xfe, 0x00, 0xf2, 0xe1, 0xe6, 0xfd, 0x13, 0x1b, 0x0c, 0x00, 0x07, 0x10, 0x16, 0x0f, 0xfc, 0xec, 0xea, 0xf0, 0xf3, 0xe8, 0xf1, 0x0f, 0x17, 0x0d, 0x00, 0xff, 0xfd, 0xfb, 0xf9, 0xfc, 0x05, 0x13, 0x1a, 0x0f, 0xf9, 0xf9, 0xeb, 0xf5, 0xeb, 0xe9, 0xb9, 0xb5, 0x14, 0x21, 0x20, 0x17, 0x19, 0x1a, 0x15, 0x14, 0x13, 0x12, 0x0f, 0x0e, 0x0c, 0x0a, 0x09, 0x07, 
0x05, 0x03, 0x02, 0x00, 0xfe, 0xfc, 0xfa, 0xf9, 0xf7, 0xf5, 0xf3, 0xf1, 0xef, 0xee, 0xec, 0xea, 0xe8, 0xe6, 0xe5, 0xe3, 0xe1, 0xdf, 0xdd, 0xdc, 0xda, 0xd8, 0xd6, 0xd5, 0xd3, 0xd1, 0xd0, 0xce, 0xcc, 0xcb, 0xc9, 0xc7, 0xc6, 0xc4, 0xc3, 0xc1, 0xc0, 0xbe, 0xbd, 0xbb, 0xba, 0xb8, 0xb7, 0xb5, 0xb4, 0xb3, 0xb1, 0xb0, 0xae, 0xad, 0xac, 0xaa, 0xa9, 0xa8, 0xa6, 0xa6, 0xa6, 0xa2, 0xa2, 0xa3, 0xa0, 0x97, 0xae, 0xed, 0xf3, 0xe6, 0xe2, 0xed, 0xed, 0xea, 0xef, 0xf0, 0xf1, 0xf3, 0xf5, 0xf7, 0xf8, 0xfa, 0xfc, 0xfe, 0xff, 0x01, 0x03, 0x05, 0x07, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x13, 0x15, 0x17, 0x19, 0x1b, 0x1d, 0x1e, 0x20, 0x22, 0x24, 0x26, 0x27, 0x29, 0x2b, 0x2d, 0x2e, 0x30, 0x32, 0x33, 0x35, 0x37, 0x38, 0x3a, 0x3c, 0x3d, 0x3f, 0x41, 0x42, 0x44, 0x45, 0x47, 0x48, 0x4a, 0x4b, 0x4d, 0x4e, 0x50, 0x51, 0x53, 0x54, 0x55, 0x57, 0x58, 0x59, 0x5b, 0x5c, 0x5d, 0x5f, 0x60, 0x5f, 0x63, 0x64, 0x63, 0x64, 0x6f, 0x5f, 0x5f,
 
Last edited:
The format is actually documented in doc/file_format_pmf.xlsx file. The signature is "pmfx" .. don't remember why I added "x" there but the signature must be 4 bytes to make the rest of the file data properly aligned, so had to add something :)
 
One more noob question: are you loading the music data from the SD card?
The reason I'm asking is because I'm not sure if I can split the song data file and play it from let's say 126kb array buffer. :confused:
Well perhaps I should read the documentation.
Thanks
 
You could load the music data from SD card and store it in flash, but it must exists in the memory all at once. Unlike mp3 which can be streamed, the PMF data is randomly accessed based on the played music data. For example when the player needs to play piano instrument, the data for that instrument must be in the memory. I suppose if you really wanted, you could implement sample caching mechanism to read it to flash from external storage in requested chunks, but not sure if the bandwidth would be enough for it.
 
Yeah I was afraid of this.

I am actually loading a big music data file in 512k buffer now, plays beautiful if the file is not too large for the destination array buffer.
Funny part is it will play even if buffer is too small just hearing some random noises:cool:
Code:
//============================================================================
// SD FILE music data storage
//============================================================================
uint8_t SD_MusicData[512000] DMAMEM; // Upper MEMORY
uint32_t array_counter = 0;
//----------------------------------------------------------------------------

EDIT:
This plays with few random noises :D 736381 bytes :cool:
modarchive.org hours.xm
Code:
// Song name: After Hours (hours.xm)
//    Length: 65
//  Channels: 30
//      Size: 736381 bytes
//  Exporter: PMF Converter v0.6 (PMF v1.4)
0x70, 0x6d, 0x66, 0x78, 0x00, 0x14, 0x01, 0x00, 0x7d, 0x3c, 0x0b, 0x00, 0x90, 0x00, 0x00, 0x00, -- MORE CODE
 
Last edited:
Yeah, the sample data is stored at the end of the file which takes bulk of the file, so you just cut some of that data out but memory past your buffer is still referred from the sample metadata. Lucky for you Teensy doesn't have memory protection, because otherwise it would just crash :D

I have thought of adding resampling to the converter, to be able to reduce the sample size and make larger music files to fit smaller flash by dropping quality. You could also to do this manually e.g. with OpenMPT, but it's more work.
 
TEENSY 4.0 - PMF Player - SdFat version 2.0.0 BETA ONLY - 512k array buffer example. ;)
Code:
//============================================================================
// PMF Player SdFat v2 BETA example.
//
// Copyright (c) 2019, Profoundic Technologies, Inc.
// All rights reserved.
//----------------------------------------------------------------------------
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//     * Redistributions of source code must retain the above copyright
//       notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above copyright
//       notice, this list of conditions and the following disclaimer in the
//       documentation and/or other materials provided with the distribution.
//     * Neither the name of Profoundic Technologies nor the names of its
//       contributors may be used to endorse or promote products derived from
//       this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL PROFOUNDIC TECHNOLOGIES BE LIABLE FOR ANY
// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//============================================================================
#include "pmf_player.h"

//============================================================================
// music data
//============================================================================
static const uint8_t PROGMEM s_pmf_file[] =
{
#include "music.h"
};
//----------------------------------------------------------------------------

//============================================================================
// SD FILE music data storage
//============================================================================
uint8_t SD_MusicData[512000] DMAMEM; // Upper MEMORY
uint32_t array_counter = 0;
//----------------------------------------------------------------------------

//============================================================================
// globals
//============================================================================
static pmf_player s_player;
static unsigned s_effect_channel = 0;

char SDPmfIDCheck[14] = {};
char PmfID[14] = {'/', '/', ' ', 'S', 'o', 'n', 'g', ' ', 'n', 'a', 'm', 'e', ':', ' '}; // Profoundic Music File format - TEXT ID

//----------------------------------------------------------------------------

//============================================================================
// SdFat version 2.0.0 BETA ONLY
//============================================================================
#include <SdFat.h> // SdFat V "2.0.0"

// Use built-in SD for SPI modes on Teensy 3.5/3.6.
// Teensy 4.0 use first SPI port.
// SDCARD_SS_PIN is defined for the built-in SD on some boards.
#ifndef SDCARD_SS_PIN
const uint8_t SD_CS_PIN = SS;
#else  // SDCARD_SS_PIN
// Assume built-in SD is used.
const uint8_t SD_CS_PIN = SDCARD_SS_PIN;
#endif  // SDCARD_SS_PIN

// SD_FAT_TYPE = 0 for SdFat/File as defined in SdFatConfig.h,
// 1 for FAT16/FAT32, 2 for exFAT, 3 for FAT16/FAT32 and exFAT.
#define SD_FAT_TYPE 3

SdFat SD;
// The file to be parsed.
File m_pSource;
unsigned int FILESIZE;

const int DIR_max = 100; // [# of Directory - max]
const int max_DIR_name_lenght = 100;
char CURDIRname[max_DIR_name_lenght] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; // Elements with missing values will be initialized to 0;
uint32_t DIRcount = 1; // COUNT of all DIRs on SD CARD
char DIR_list_array[DIR_max][max_DIR_name_lenght]; // [# of DIRs max][max DIR name lenght];
//----------------------------------------------------------------------------

//============================================================================
// row_callback_test
//============================================================================
void row_callback_test(void *custom_data_, uint8_t channel_idx_, uint8_t &note_idx_, uint8_t &inst_idx_, uint8_t &volume_, uint8_t &effect_, uint8_t &effect_data_)
{
  if (channel_idx_ == s_effect_channel)
  {
    static unsigned s_counter = 1;
    if (--s_counter == 0)
    {
      note_idx_ = 0 + 5 * 12; // C-5 (note+octave*12, note: 0=C, 1=C#, 2=D, 3=D#, 4=E, 5=F, 6=F#, 7=G, 8=G#, 9=A, 10=A#, 11=B)
      inst_idx_ = 2;    // sample 2
      volume_ = 63;     // volume 63 (max)
      s_counter = 8;    // hit note every 8th row
    }
  }
}
//----------------------------------------------------------------------------


//============================================================================
// example visualization (animate LED's for each track with music)
//============================================================================
#ifdef ARDUINO_ARCH_AVR
enum {start_led_pin = 8};
enum {max_channel_leds = 6};
#else
enum {start_led_pin = 0};
enum {max_channel_leds = 8};
#endif
static void example_visualization(void *player_)
{
  const pmf_player *player = (const pmf_player*)player_;
  unsigned num_channels = min(max_channel_leds, player->num_playback_channels());
  for (unsigned i = 0; i < num_channels; ++i)
  {
    pmf_channel_info chl = player->channel_info(i);
    digitalWrite(start_led_pin + i, chl.note_hit ? HIGH : LOW);
  }
}
//----

void setup_example_visualization(pmf_player &player_)
{
  for (unsigned i = 0; i < max_channel_leds; ++i)
  {
    pinMode(start_led_pin + i, OUTPUT);
    digitalWrite(start_led_pin + i, LOW);
  }
  player_.set_tick_callback(&example_visualization, &player_);
}
//----------------------------------------------------------------------------


//============================================================================
// setup
//============================================================================
void setup()
{

#if PMF_USE_SERIAL_LOGS==1
  // setup serial logging
  Serial.begin(9600);
  while (!Serial && millis() < 10000) {}  // wait for Serial Monitor with 10s. timeout.
#endif

  if (!SD.begin(SdioConfig(FIFO_SDIO))) { // SdFat.h Ver 2.0.0 Beta
    Serial.println("m.SD initialization failed!");
    s_player.load(s_pmf_file); // play from h. file
    Serial.println(F(" Playing from h. file"));
  } else {
    Serial.println("m.SD initialization OK");

    LISTDIRs();

    m_pSource = SD.open("/"); // ROOT
    PrintFiles(m_pSource);
    m_pSource.close();


    // # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
    // ###########          Please choose ONE file only          #################
    //char FilenameIn[255] = "UnreaL 2ND_PM.pmf"; // Please choose a file
    char FilenameIn[255] = "superclear.pmf"; // Please choose a file
    // char FilenameIn[255] = "hours.pmf"; // Please choose a file
    // # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

    m_pSource = SD.open(FilenameIn, FILE_READ); //FILE *m_pSource;

    if (SD.exists(FilenameIn)) {
      Serial.print(F("\t File exists ~ ")), Serial.println(FilenameIn);
      int len = strlen(FilenameIn);
      char *extension = FilenameIn + len - 4;
      if (!strcmp(".pmf", extension) || !strcmp(".PMF", extension)) { // PMF File Format
        FILESIZE = m_pSource.size(); // get FILE SIZE
        Serial.print("\t PMF player Audio File Format Supported  ~  "), Serial.println(FilenameIn);

        ParsePmfHeader( m_pSource.curPosition() );
        s_player.load(SD_MusicData); // play from SD buffered file
      }
    }  else {
      Serial.print(F("Error (")), Serial.print(FilenameIn), Serial.println(F("), file does not exist. Please choose another file"));
      Serial.println(F(" Playing from h. file"));
      s_player.load(s_pmf_file); // play from h. file
    }
  }
  m_pSource.close();


  /*
    // Uncomment this code block to enable basic LED visualization (make sure pins don't conflic with used audio device)
    setup_example_visualization(s_player);
  */

  /*
    // Uncomment this code block to demo code-controlled effect. The code adds 13th channel to Aryx and plays drum beat every 8th row on the channel
    s_effect_channel=s_player.num_playback_channels();
    s_player.enable_playback_channels(s_player.num_playback_channels()+1); // add one extra audio channel for audio effects
    s_player.set_row_callback(&row_callback_test); // setup row callback for the effect
  */

  s_player.start(22050);
}
//----------------------------------------------------------------------------


//============================================================================
// loop
//============================================================================
void loop()
{
  s_player.update(); // keep updating the audio buffer...
}
//----------------------------------------------------------------------------


// # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
//============================================================================
//------------ LIST ALL DIRs ON SD CARD & SAVE IN DIR_list_array -------------
//============================================================================
void LISTDIRs() {
  Serial.println("\t**List Directories**");
  m_pSource = SD.open("/"); // ROOT
  char dirname[max_DIR_name_lenght]; // SDFAT // max_DIR_name_lenght
  if (m_pSource.isDirectory()) {
    strcpy(DIR_list_array[DIRcount], "/"); // array

    Serial.print("ROOT# ");
    Serial.print(DIRcount);
    Serial.print("\t");
    Serial.println(DIR_list_array[DIRcount]); // SDFAT LIB
    DIRcount++;
  }
  while (true) {
    File DIR = m_pSource.openNextFile();

    if (! DIR) {
      // no more files
      Serial.println("\t **no more Directories** ");
      //dir.close();
      break;
    }
    DIR.getName(dirname, sizeof(dirname));
    if (DIR.isDirectory()) {
      //DIRcount++;
      strcpy(DIR_list_array[DIRcount], dirname); // array
      strcat(DIR_list_array[DIRcount], "/");
      Serial.print("DIR# ");
      Serial.print(DIRcount);
      Serial.print("\t");
      Serial.println(DIR_list_array[DIRcount]); // SDFAT LIB
      DIRcount++;
    }
    DIR.close();
  }
  DIRcount --;
  Serial.print("\t **Directory count ");
  Serial.print(DIRcount), Serial.println(" **"), Serial.println();
  m_pSource.close();
}

//============================================================================
// Print Files in Cur. Directory
//============================================================================
void PrintFiles(File dir) {
  Serial.println("\t**List Files in Cur. Directory**");
  char filename[max_DIR_name_lenght]; // SDFAT
  while (true) {

    File entry = dir.openNextFile();
    if (! entry) {
      // no more files
      Serial.println("\t **no more files**"), Serial.println();
      break;
    }
    entry.getName(filename, sizeof(filename));

    if (entry.isDirectory()) {
    } else {
      Serial.print(filename); // SDFAT LIB
      // files have sizes, directories do not
      Serial.print("       \t");
      Serial.println(entry.size(), DEC);
    }
    entry.close();
  }
}
//----------------------------------------------------------------------------

//============================================================================
//   Parse File Header.
//============================================================================
// Read a single character.
byte Get(int _CurfilePos )
{
  byte in = (m_pSource.read());
  // Serial.print("ASCII "), Serial.write(in), Serial.print(" DEC "), Serial.print(in), Serial.println();
  if (!m_pSource.available()) { // available(), number of bytes available from the current position to EOF
    Serial.println("Unexpected EOF while reading file");
  }
  return byte(in);
}
//----------------------------------------------------------------------------

//============================================================================
// Read text Pmf ID, (1st 14 Characters -->>// Song name: <<)
//============================================================================
void ReadPmfID(int filepos)
{
  Serial.println("\t-- Reading PMF Text Header (Profoundic Music File): "); // DEBUG
  SDPmfIDCheck[0] = Get(m_pSource.curPosition());
  SDPmfIDCheck[1] = Get(m_pSource.curPosition());
  SDPmfIDCheck[2] = Get(m_pSource.curPosition());
  SDPmfIDCheck[3] = Get(m_pSource.curPosition());
  SDPmfIDCheck[4] = Get(m_pSource.curPosition());
  SDPmfIDCheck[5] = Get(m_pSource.curPosition());
  SDPmfIDCheck[6] = Get(m_pSource.curPosition());
  SDPmfIDCheck[7] = Get(m_pSource.curPosition());
  SDPmfIDCheck[8] = Get(m_pSource.curPosition());
  SDPmfIDCheck[9] = Get(m_pSource.curPosition());
  SDPmfIDCheck[10] = Get(m_pSource.curPosition());
  SDPmfIDCheck[11] = Get(m_pSource.curPosition());
  SDPmfIDCheck[12] = Get(m_pSource.curPosition());
  SDPmfIDCheck[13] = Get(m_pSource.curPosition());
  //Serial.println(m_pSource.curPosition()); // DEBUG
}
//----------------------------------------------------------------------------

//============================================================================
// interpret the ascii digits in[0] and in[1] as hex
// notation and convert to an integer 0..255.
//============================================================================
int hex8(char *in)
{
  uint8_t c, h;

  c = in[0];

  if (c <= '9' && c >= '0') {
    c -= '0';
  }
  else if (c <= 'f' && c >= 'a') {
    c -= ('a' - 0x0a);
  }
  else if (c <= 'F' && c >= 'A') {
    c -= ('A' - 0x0a);
  }
  else return (-1);

  h = c;

  c = in[1];

  if (c <= '9' && c >= '0') {
    c -= '0';
  }
  else if (c <= 'f' && c >= 'a') {
    c -= ('a' - 0x0a);
  }
  else if (c <= 'F' && c >= 'A') {
    c -= ('A' - 0x0a);
  }
  else return (-1);

  return ( h << 4 | c);
}
//----------------------------------------------------------------------------

//============================================================================
// Parse Pmf Header
//============================================================================
void ParsePmfHeader(int _Fpos)
{

  Serial.println();
  Serial.println("\t--BEGIN -- Parse Text Header of PMF file, 1st 14 characters");
  if (m_pSource.isDirectory()) {
    Serial.println(" / ");
  } else {
    char filename[255]; // SDFAT
    m_pSource.getName(filename, sizeof(filename)); // SDfat
    const char* n = filename; // SDfat
    Serial.print("\t-- The file to be parsed -> "), Serial.print(n);
    // files have sizes, directories do not
    Serial.print("\t size: ");
    Serial.println(m_pSource.size(), DEC);
  }
  int filepos = _Fpos; // m_pSource.curPosition();
  bool PMF_check = 1;
  ReadPmfID(filepos);
  PMF_check = memcmp(SDPmfIDCheck, PmfID, sizeof(SDPmfIDCheck)); // compares 2 chuncks of memory.
  if (PMF_check == 0)
  {
    Serial.print("\t-- Text Header matches OK");
    Serial.println();

    m_pSource.seekSet (0);

    // Parsing Header Text
    char a = 0;
    char b = 0;
    char c = 0;
    while (a != 'x' && b != '7' && c != '0' ) {
      char y;
      y = (m_pSource.read()); // read next char

      if (y == '0') {
        char temp2 = y;
        y = (m_pSource.read());
        if (y != 'x') { //
          Serial.print(temp2);
          Serial.print(y);
        }
      } else if (y == 10) { // 10 0x0A, LF  Line Feed
        Serial.println();
      } else {
        if (y != 'x') {
          Serial.print(y);
        }
      }

      if (y == 'x') {
        char temp1 = y;
        y = (m_pSource.read()); // read next char
        if (y == '7') {
          y = (m_pSource.read());
          if (y == '0') {
            a = 'x';
            b = '7';
            c = y;
            uint32_t fpos = m_pSource.curPosition ();
            m_pSource.seekSet(fpos - 4); // now ready for Header Data
          }
        } else if (y != '7') {
          Serial.print(temp1);
          Serial.print(y);
        }
      }
    }

    // Parsing Header Data
    while (m_pSource.available()) {
      char x;
      x = (m_pSource.read());

      if (x == '0') {
        x = (m_pSource.read()); // read next char
        if (x == 'x') { //
          char tmp[2];
          int n = 0;
          tmp[0] = (m_pSource.read());
          tmp[1] = (m_pSource.read());
          // tmp now has two char hex value
          n = strtol(tmp, NULL, 16); // n has numeric value
          SD_MusicData[array_counter] = (char)n; // SD_MusicData[X] has character value

          if (array_counter < 5) {
            if (array_counter == 0) {
              Serial.print(" DATA Header: ");
            }
            Serial.write(SD_MusicData[array_counter]);
          }

          array_counter++;
          if (array_counter >= sizeof SD_MusicData) {
            Serial.println(), Serial.println();
            Serial.println(" Error file is too large for destination buffer ( : ");
            Serial.print(" byte counter : "), Serial.println(array_counter);
            array_counter = 0;
            return;
          }
        }
      } else if (x == 13) { // 13  0x0D, CR  Carriage Return
        x = (m_pSource.read()); // read next char
        if (x == 10) { // 10 0x0A, LF  Line Feed
        }
      }
    }
  } else {
    Serial.print("No luck");
  }

  Serial.print(" , Size after conversion : "), Serial.println(array_counter), Serial.println();
  array_counter = 0;
}
//----------------------------------------------------------------------------


in setup() choose ONE file only:cool:
Code:
// # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
    // ###########          Please choose ONE file only          #################
    //char FilenameIn[255] = "UnreaL 2ND_PM.pmf"; // Please choose a file
    char FilenameIn[255] = "superclear.pmf"; // Please choose a file
    // char FilenameIn[255] = "hours.pmf"; // Please choose a file
    // # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

Music files for SD card:
 

Attachments

  • PMF MUSIC.zip
    1.4 MB · Views: 80
Status
Not open for further replies.
Back
Top